From f0c51dc46d0f85ffe2f8971220f0ad31b7d0efd5 Mon Sep 17 00:00:00 2001 From: serafim Date: Wed, 14 Jan 2026 12:44:44 -0800 Subject: [PATCH 01/85] Initial commit: 1Code v0.0.10 Open source release of 1Code - Best UI for Claude Code with Local and Remote agent execution. Apache License 2.0 --- .env.example | 17 + .gitignore | 32 + CLAUDE.md | 230 + LICENSE | 202 + README.md | 13 + RELEASE.md | 204 + build/background.svg | 60 + build/background.tiff | Bin 0 -> 824264 bytes build/background@2x.png | Bin 0 -> 275719 bytes build/background@2x.tiff | Bin 0 -> 4669296 bytes build/dmg-background.png | Bin 0 -> 48822 bytes build/dmg-background.svg | 60 + build/dmg-background@2x.png | Bin 0 -> 225248 bytes build/entitlements.mac.plist | 17 + build/icon.icns | Bin 0 -> 315957 bytes build/icon.png | Bin 0 -> 67450 bytes build/trayTemplate.png | Bin 0 -> 38126 bytes build/trayTemplate.svg | 3 + bun.lock | 2014 +++++++ bun.lockb | Bin 0 -> 357770 bytes drizzle.config.ts | 7 + drizzle/0000_mixed_blur.sql | 33 + drizzle/0001_married_reptil.sql | 1 + drizzle/0002_fancy_blindfold.sql | 4 + drizzle/0003_crazy_thunderbolts.sql | 2 + drizzle/0004_melted_prism.sql | 6 + drizzle/meta/0000_snapshot.json | 240 + drizzle/meta/0001_snapshot.json | 247 + drizzle/meta/0002_snapshot.json | 275 + drizzle/meta/0003_snapshot.json | 289 + drizzle/meta/0004_snapshot.json | 328 + drizzle/meta/_journal.json | 41 + electron-builder.yml | 9 + electron-shim.js | 23 + electron.vite.config.ts | 71 + package.json | 227 + postcss.config.js | 6 + scripts/download-claude-binary.mjs | 288 + scripts/generate-icon.mjs | 206 + scripts/generate-update-manifest.mjs | 198 + scripts/sync-to-public.sh | 128 + scripts/upload-release-wrangler.sh | 185 + src/env.d.ts | 17 + src/main/auth-manager.ts | 221 + src/main/auth-store.ts | 190 + src/main/index.ts | 575 ++ src/main/lib/analytics.ts | 247 + src/main/lib/auto-updater.ts | 211 + src/main/lib/claude/env.ts | 243 + src/main/lib/claude/index.ts | 14 + src/main/lib/claude/raw-logger.ts | 130 + src/main/lib/claude/transform.ts | 386 ++ src/main/lib/claude/types.ts | 57 + src/main/lib/config.ts | 25 + src/main/lib/db/index.ts | 97 + src/main/lib/db/schema/index.ts | 109 + src/main/lib/db/utils.ts | 8 + src/main/lib/git/branches.ts | 186 + src/main/lib/git/file-contents.ts | 328 + src/main/lib/git/git-operations.ts | 173 + src/main/lib/git/git-utils.ts | 10 + src/main/lib/git/github/github.ts | 229 + src/main/lib/git/github/index.ts | 2 + src/main/lib/git/github/types.ts | 74 + src/main/lib/git/index.ts | 165 + src/main/lib/git/security/git-commands.ts | 137 + src/main/lib/git/security/index.ts | 31 + src/main/lib/git/security/path-validation.ts | 195 + src/main/lib/git/security/secure-fs.ts | 469 ++ src/main/lib/git/shell-env.ts | 173 + src/main/lib/git/staging.ts | 76 + src/main/lib/git/stash.ts | 61 + src/main/lib/git/status.ts | 212 + src/main/lib/git/utils/apply-numstat.ts | 24 + src/main/lib/git/utils/parse-status.ts | 197 + src/main/lib/git/worktree.ts | 1117 ++++ src/main/lib/terminal/data-batcher.ts | 75 + src/main/lib/terminal/env.ts | 327 + src/main/lib/terminal/index.ts | 10 + src/main/lib/terminal/manager.ts | 402 ++ src/main/lib/terminal/port-manager.ts | 234 + src/main/lib/terminal/port-scanner.ts | 213 + src/main/lib/terminal/session.ts | 122 + .../lib/terminal/terminal-escape-filter.ts | 43 + .../lib/terminal/terminal-history/index.ts | 190 + src/main/lib/terminal/types.ts | 62 + src/main/lib/trpc/index.ts | 49 + src/main/lib/trpc/routers/chats.ts | 783 +++ src/main/lib/trpc/routers/claude-code.ts | 251 + src/main/lib/trpc/routers/claude.ts | 894 +++ src/main/lib/trpc/routers/debug.ts | 99 + src/main/lib/trpc/routers/external.ts | 62 + src/main/lib/trpc/routers/files.ts | 264 + src/main/lib/trpc/routers/index.ts | 37 + src/main/lib/trpc/routers/projects.ts | 222 + src/main/lib/trpc/routers/skills.ts | 123 + src/main/lib/trpc/routers/terminal.ts | 200 + src/main/windows/main.ts | 357 ++ src/preload/index.d.ts | 23 + src/preload/index.ts | 208 + src/renderer/App.tsx | 111 + .../components/chat-markdown-renderer.tsx | 497 ++ .../dialogs/agents-help-popover.tsx | 72 + .../dialogs/agents-rename-subchat-dialog.tsx | 93 + .../dialogs/agents-settings-dialog.tsx | 361 ++ .../dialogs/agents-shortcuts-dialog.tsx | 240 + .../components/dialogs/claude-login-modal.tsx | 368 ++ src/renderer/components/dialogs/index.ts | 9 + .../settings-tabs/agents-appearance-tab.tsx | 481 ++ .../settings-tabs/agents-debug-tab.tsx | 288 + .../settings-tabs/agents-preferences-tab.tsx | 164 + .../settings-tabs/agents-profile-tab.tsx | 137 + .../settings-tabs/agents-skills-tab.tsx | 212 + .../components/dialogs/settings-tabs/index.ts | 4 + src/renderer/components/rename-dialog.tsx | 178 + .../components/traffic-light-spacer.tsx | 71 + src/renderer/components/ui/accordion.tsx | 57 + src/renderer/components/ui/alert-dialog.tsx | 156 + src/renderer/components/ui/badge.tsx | 36 + src/renderer/components/ui/button-group.tsx | 32 + src/renderer/components/ui/button.tsx | 63 + src/renderer/components/ui/canvas-icons.tsx | 5138 ++++++++++++++++ src/renderer/components/ui/checkbox.tsx | 55 + src/renderer/components/ui/collapsible.tsx | 9 + src/renderer/components/ui/command.tsx | 302 + src/renderer/components/ui/context-menu.tsx | 183 + src/renderer/components/ui/dialog.tsx | 216 + src/renderer/components/ui/dropdown-menu.tsx | 181 + src/renderer/components/ui/hover-card.tsx | 27 + src/renderer/components/ui/icons.tsx | 5301 +++++++++++++++++ src/renderer/components/ui/input.tsx | 27 + src/renderer/components/ui/kbd.tsx | 54 + src/renderer/components/ui/label.tsx | 29 + src/renderer/components/ui/logo.tsx | 27 + src/renderer/components/ui/popover.tsx | 52 + src/renderer/components/ui/progress.tsx | 26 + src/renderer/components/ui/prompt-input.tsx | 290 + .../components/ui/resizable-sidebar.tsx | 555 ++ .../components/ui/search-combobox.tsx | 107 + src/renderer/components/ui/select.tsx | 215 + src/renderer/components/ui/skeleton.tsx | 15 + src/renderer/components/ui/switch.tsx | 33 + src/renderer/components/ui/tabs.tsx | 53 + src/renderer/components/ui/text-shimmer.tsx | 72 + src/renderer/components/ui/textarea.tsx | 22 + src/renderer/components/ui/tooltip.tsx | 38 + .../components/ui/typewriter-text.tsx | 99 + src/renderer/components/update-banner.tsx | 154 + src/renderer/contexts/TRPCProvider.tsx | 41 + src/renderer/features/agents/atoms/index.ts | 440 ++ .../agents/commands/agents-slash-command.tsx | 495 ++ .../agents/commands/builtin-commands.ts | 98 + .../features/agents/commands/index.ts | 3 + .../features/agents/commands/types.ts | 45 + .../agents/components/agent-chat-card.tsx | 207 + .../agents/components/agent-send-button.tsx | 135 + .../agents/components/agents-help-popover.tsx | 65 + .../components/agents-onboarding-dialog.tsx | 184 + .../components/agents-quick-switch-dialog.tsx | 93 + .../agents-rename-subchat-dialog.tsx | 177 + .../components/agents-settings-dialog.tsx | 210 + .../components/create-branch-dialog.tsx | 255 + .../components/preview-setup-hover-card.tsx | 94 + .../agents/components/project-selector.tsx | 230 + .../settings-tabs/agents-appearance-tab.tsx | 365 ++ .../settings-tabs/agents-claude-code-tab.tsx | 354 ++ .../settings-tabs/agents-profile-tab.tsx | 672 +++ .../subchats-quick-switch-dialog.tsx | 250 + .../components/traffic-light-spacer.tsx | 160 + .../agents/components/work-mode-selector.tsx | 85 + src/renderer/features/agents/constants.ts | 42 + .../agents/hooks/use-agents-file-upload.ts | 142 + .../hooks/use-changed-files-tracking.ts | 182 + .../agents/hooks/use-desktop-notifications.ts | 13 + .../agents/hooks/use-focus-input-on-enter.ts | 54 + .../features/agents/hooks/use-haptic.ts | 30 + .../hooks/use-toggle-focus-on-cmd-esc.ts | 53 + .../features/agents/lib/agents-actions.ts | 157 + .../agents/lib/agents-hotkeys-manager.ts | 276 + .../features/agents/lib/ipc-chat-transport.ts | 339 ++ .../features/agents/main/active-chat.tsx | 4899 +++++++++++++++ .../features/agents/main/new-chat-form.tsx | 1314 ++++ .../agents/mentions/agents-file-mention.tsx | 1200 ++++ .../mentions/agents-mentions-editor.tsx | 921 +++ .../features/agents/mentions/index.ts | 15 + .../agents/mentions/render-file-mentions.tsx | 205 + .../agents/stores/agent-chat-store.ts | 53 + .../features/agents/stores/sub-chat-store.ts | 186 + .../ui/agent-ask-user-question-tool.tsx | 98 + .../features/agents/ui/agent-bash-tool.tsx | 212 + .../agents/ui/agent-context-indicator.tsx | 177 + .../features/agents/ui/agent-diff-view.tsx | 1410 +++++ .../features/agents/ui/agent-edit-tool.tsx | 570 ++ .../agents/ui/agent-exit-plan-mode-tool.tsx | 38 + .../agents/ui/agent-exploring-group.tsx | 146 + .../features/agents/ui/agent-file-item.tsx | 89 + .../features/agents/ui/agent-image-item.tsx | 233 + .../agents/ui/agent-message-usage.tsx | 125 + .../features/agents/ui/agent-plan-tool.tsx | 314 + .../features/agents/ui/agent-preview.tsx | 613 ++ .../features/agents/ui/agent-send-button.tsx | 86 + .../features/agents/ui/agent-task-tool.tsx | 208 + .../agents/ui/agent-thinking-tool.tsx | 125 + .../features/agents/ui/agent-todo-tool.tsx | 462 ++ .../features/agents/ui/agent-tool-call.tsx | 76 + .../agents/ui/agent-tool-registry.tsx | 439 ++ .../agents/ui/agent-user-message-bubble.tsx | 113 + .../agents/ui/agent-user-question.tsx | 381 ++ .../agents/ui/agent-web-fetch-tool.tsx | 124 + .../ui/agent-web-search-collapsible.tsx | 123 + .../agents/ui/agent-web-search-tool.tsx | 151 + .../features/agents/ui/agents-content.tsx | 1008 ++++ .../agents/ui/agents-header-controls.tsx | 54 + .../features/agents/ui/archive-popover.tsx | 326 + .../features/agents/ui/chat-title-editor.tsx | 175 + .../features/agents/ui/device-presets-bar.tsx | 137 + .../features/agents/ui/icons/claude-code.svg | 1 + .../features/agents/ui/icons/claude-mode.svg | 1 + .../features/agents/ui/icons/codex.svg | 1 + .../features/agents/ui/icons/cursor.svg | 1 + .../features/agents/ui/icons/gpt-model.svg | 1 + src/renderer/features/agents/ui/index.ts | 30 + .../features/agents/ui/inline-edit.tsx | 105 + .../features/agents/ui/mobile-chat-header.tsx | 283 + .../agents/ui/mobile-copy-link-button.tsx | 55 + .../features/agents/ui/pr-status-bar.tsx | 61 + .../features/agents/ui/preview-url-input.tsx | 250 + .../features/agents/ui/resize-handle.tsx | 39 + .../features/agents/ui/scale-control.tsx | 144 + .../agents/ui/sub-chat-context-menu.tsx | 125 + .../features/agents/ui/sub-chat-selector.tsx | 847 +++ .../agents/ui/sub-chat-status-card.tsx | 271 + .../features/agents/ui/viewport-toggle.tsx | 91 + .../features/agents/utils/auto-rename.ts | 77 + .../features/agents/utils/format-time-ago.ts | 29 + .../features/agents/utils/pluralize.ts | 21 + .../features/agents/utils/pr-message.ts | 105 + src/renderer/features/changes/ChangesView.tsx | 451 ++ .../CategorySection/CategorySection.tsx | 65 + .../components/CategorySection/index.ts | 1 + .../ChangesHeader/ChangesHeader.tsx | 176 + .../changes/components/ChangesHeader/index.ts | 1 + .../CollapsibleRow/CollapsibleRow.tsx | 59 + .../components/CollapsibleRow/index.ts | 1 + .../components/CommitInput/CommitInput.tsx | 343 ++ .../changes/components/CommitInput/index.ts | 1 + .../components/CommitItem/CommitItem.tsx | 94 + .../changes/components/CommitItem/index.ts | 1 + .../changes/components/FileItem/FileItem.tsx | 325 + .../changes/components/FileItem/index.ts | 1 + .../changes/components/FileList/FileList.tsx | 80 + .../components/FileList/FileListGrouped.tsx | 152 + .../components/FileList/FileListTree.tsx | 206 + .../changes/components/FileList/index.ts | 3 + .../components/FolderRow/FolderRow.tsx | 101 + .../changes/components/FolderRow/index.ts | 1 + .../changes/components/PRIcon/PRIcon.tsx | 38 + .../changes/components/PRIcon/index.ts | 1 + .../ViewModeToggle/ViewModeToggle.tsx | 43 + .../components/ViewModeToggle/index.ts | 1 + src/renderer/features/changes/index.ts | 1 + src/renderer/features/changes/types.ts | 14 + src/renderer/features/changes/utils/date.ts | 13 + src/renderer/features/changes/utils/index.ts | 2 + .../features/changes/utils/status.tsx | 46 + .../features/hooks/use-agents-file-upload.ts | 24 + .../features/layout/agents-layout.tsx | 260 + .../onboarding/anthropic-onboarding-page.tsx | 312 + src/renderer/features/onboarding/index.ts | 2 + .../features/onboarding/select-repo-page.tsx | 96 + .../features/sidebar/agents-sidebar.tsx | 2057 +++++++ .../sidebar/agents-subchats-sidebar.tsx | 1623 +++++ .../sidebar/hooks/use-archive-chat.ts | 90 + .../hooks/use-desktop-notifications.ts | 132 + .../features/sidebar/hooks/use-haptic.ts | 13 + .../features/sidebar/utils/pluralize.ts | 16 + .../features/sub-chats/inline-edit.tsx | 102 + .../sub-chats/sub-chat-context-menu.tsx | 125 + .../features/sub-chats/sub-chat-selector.tsx | 834 +++ .../features/sub-chats/sub-chats-sidebar.tsx | 1003 ++++ .../features/terminal/TerminalSearch.tsx | 118 + src/renderer/features/terminal/atoms.ts | 48 + .../features/terminal/commandBuffer.ts | 29 + src/renderer/features/terminal/config.ts | 153 + src/renderer/features/terminal/helpers.ts | 422 ++ src/renderer/features/terminal/index.ts | 10 + .../link-providers/file-path-link-provider.ts | 156 + .../features/terminal/link-providers/index.ts | 3 + .../terminal/link-providers/link-popup.ts | 246 + .../link-providers/url-link-provider.ts | 84 + src/renderer/features/terminal/parseCwd.ts | 34 + .../terminal/suppressQueryResponses.ts | 51 + .../features/terminal/terminal-sidebar.tsx | 523 ++ .../features/terminal/terminal-tabs.tsx | 511 ++ src/renderer/features/terminal/terminal.tsx | 418 ++ src/renderer/features/terminal/types.ts | 43 + src/renderer/features/terminal/utils.ts | 56 + src/renderer/features/ui/agent-bash-tool.tsx | 187 + src/renderer/features/ui/agent-edit-tool.tsx | 548 ++ src/renderer/features/ui/agent-plan-tool.tsx | 312 + src/renderer/features/ui/agent-task-tool.tsx | 189 + src/renderer/features/ui/agent-todo-tool.tsx | 441 ++ src/renderer/features/ui/agent-tool-call.tsx | 74 + .../features/ui/agent-tool-registry.tsx | 394 ++ .../features/ui/agent-web-fetch-tool.tsx | 121 + .../features/ui/agent-web-search-tool.tsx | 148 + src/renderer/features/ui/index.ts | 10 + src/renderer/hooks/usePRStatus/index.ts | 1 + src/renderer/hooks/usePRStatus/usePRStatus.ts | 46 + src/renderer/icons/framework-icons.tsx | 1404 +++++ src/renderer/icons/index.tsx | 992 +++ src/renderer/index.html | 83 + src/renderer/lib/analytics.ts | 183 + src/renderer/lib/api-fetch.ts | 39 + .../lib/atoms/agents-settings-dialog.ts | 5 + src/renderer/lib/atoms/index.ts | 362 ++ src/renderer/lib/codesandbox-constants.ts | 3 + src/renderer/lib/hooks/use-code-theme.ts | 30 + src/renderer/lib/hooks/use-mobile.tsx | 23 + src/renderer/lib/hooks/use-update-checker.ts | 167 + src/renderer/lib/jotai-store.ts | 4 + src/renderer/lib/mock-api.ts | 510 ++ src/renderer/lib/overlay-styles.ts | 100 + src/renderer/lib/stores/changes-store.ts | 152 + src/renderer/lib/stores/sub-chat-store.ts | 186 + src/renderer/lib/themes/builtin-themes.ts | 630 ++ src/renderer/lib/themes/cursor-themes.ts | 1470 +++++ .../lib/themes/diff-view-highlighter.ts | 290 + src/renderer/lib/themes/index.ts | 47 + src/renderer/lib/themes/shiki-theme-loader.ts | 235 + .../lib/themes/terminal-theme-mapper.ts | 168 + src/renderer/lib/themes/theme-provider.tsx | 280 + .../lib/themes/vscode-to-css-mapping.ts | 340 ++ src/renderer/lib/trpc.ts | 17 + src/renderer/lib/utils.ts | 9 + src/renderer/lib/utils/format-time-ago.ts | 26 + src/renderer/lib/utils/platform.ts | 173 + src/renderer/lib/utils/pluralize.ts | 10 + src/renderer/lib/vscode-themes.ts | 54 + src/renderer/login.html | 123 + src/renderer/main.tsx | 46 + src/renderer/public/sound.mp3 | Bin 0 -> 12717 bytes src/renderer/styles/agents-styles.css | 275 + src/renderer/styles/globals.css | 202 + src/shared/changes-types.ts | 73 + src/shared/detect-language.ts | 49 + tailwind.config.js | 56 + tsconfig.json | 25 + 348 files changed, 82632 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 CLAUDE.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 RELEASE.md create mode 100644 build/background.svg create mode 100644 build/background.tiff create mode 100644 build/background@2x.png create mode 100644 build/background@2x.tiff create mode 100644 build/dmg-background.png create mode 100644 build/dmg-background.svg create mode 100644 build/dmg-background@2x.png create mode 100644 build/entitlements.mac.plist create mode 100644 build/icon.icns create mode 100644 build/icon.png create mode 100644 build/trayTemplate.png create mode 100644 build/trayTemplate.svg create mode 100644 bun.lock create mode 100755 bun.lockb create mode 100644 drizzle.config.ts create mode 100644 drizzle/0000_mixed_blur.sql create mode 100644 drizzle/0001_married_reptil.sql create mode 100644 drizzle/0002_fancy_blindfold.sql create mode 100644 drizzle/0003_crazy_thunderbolts.sql create mode 100644 drizzle/0004_melted_prism.sql create mode 100644 drizzle/meta/0000_snapshot.json create mode 100644 drizzle/meta/0001_snapshot.json create mode 100644 drizzle/meta/0002_snapshot.json create mode 100644 drizzle/meta/0003_snapshot.json create mode 100644 drizzle/meta/0004_snapshot.json create mode 100644 drizzle/meta/_journal.json create mode 100644 electron-builder.yml create mode 100644 electron-shim.js create mode 100644 electron.vite.config.ts create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 scripts/download-claude-binary.mjs create mode 100755 scripts/generate-icon.mjs create mode 100644 scripts/generate-update-manifest.mjs create mode 100755 scripts/sync-to-public.sh create mode 100755 scripts/upload-release-wrangler.sh create mode 100644 src/env.d.ts create mode 100644 src/main/auth-manager.ts create mode 100644 src/main/auth-store.ts create mode 100644 src/main/index.ts create mode 100644 src/main/lib/analytics.ts create mode 100644 src/main/lib/auto-updater.ts create mode 100644 src/main/lib/claude/env.ts create mode 100644 src/main/lib/claude/index.ts create mode 100644 src/main/lib/claude/raw-logger.ts create mode 100644 src/main/lib/claude/transform.ts create mode 100644 src/main/lib/claude/types.ts create mode 100644 src/main/lib/config.ts create mode 100644 src/main/lib/db/index.ts create mode 100644 src/main/lib/db/schema/index.ts create mode 100644 src/main/lib/db/utils.ts create mode 100644 src/main/lib/git/branches.ts create mode 100644 src/main/lib/git/file-contents.ts create mode 100644 src/main/lib/git/git-operations.ts create mode 100644 src/main/lib/git/git-utils.ts create mode 100644 src/main/lib/git/github/github.ts create mode 100644 src/main/lib/git/github/index.ts create mode 100644 src/main/lib/git/github/types.ts create mode 100644 src/main/lib/git/index.ts create mode 100644 src/main/lib/git/security/git-commands.ts create mode 100644 src/main/lib/git/security/index.ts create mode 100644 src/main/lib/git/security/path-validation.ts create mode 100644 src/main/lib/git/security/secure-fs.ts create mode 100644 src/main/lib/git/shell-env.ts create mode 100644 src/main/lib/git/staging.ts create mode 100644 src/main/lib/git/stash.ts create mode 100644 src/main/lib/git/status.ts create mode 100644 src/main/lib/git/utils/apply-numstat.ts create mode 100644 src/main/lib/git/utils/parse-status.ts create mode 100644 src/main/lib/git/worktree.ts create mode 100644 src/main/lib/terminal/data-batcher.ts create mode 100644 src/main/lib/terminal/env.ts create mode 100644 src/main/lib/terminal/index.ts create mode 100644 src/main/lib/terminal/manager.ts create mode 100644 src/main/lib/terminal/port-manager.ts create mode 100644 src/main/lib/terminal/port-scanner.ts create mode 100644 src/main/lib/terminal/session.ts create mode 100644 src/main/lib/terminal/terminal-escape-filter.ts create mode 100644 src/main/lib/terminal/terminal-history/index.ts create mode 100644 src/main/lib/terminal/types.ts create mode 100644 src/main/lib/trpc/index.ts create mode 100644 src/main/lib/trpc/routers/chats.ts create mode 100644 src/main/lib/trpc/routers/claude-code.ts create mode 100644 src/main/lib/trpc/routers/claude.ts create mode 100644 src/main/lib/trpc/routers/debug.ts create mode 100644 src/main/lib/trpc/routers/external.ts create mode 100644 src/main/lib/trpc/routers/files.ts create mode 100644 src/main/lib/trpc/routers/index.ts create mode 100644 src/main/lib/trpc/routers/projects.ts create mode 100644 src/main/lib/trpc/routers/skills.ts create mode 100644 src/main/lib/trpc/routers/terminal.ts create mode 100644 src/main/windows/main.ts create mode 100644 src/preload/index.d.ts create mode 100644 src/preload/index.ts create mode 100644 src/renderer/App.tsx create mode 100644 src/renderer/components/chat-markdown-renderer.tsx create mode 100644 src/renderer/components/dialogs/agents-help-popover.tsx create mode 100644 src/renderer/components/dialogs/agents-rename-subchat-dialog.tsx create mode 100644 src/renderer/components/dialogs/agents-settings-dialog.tsx create mode 100644 src/renderer/components/dialogs/agents-shortcuts-dialog.tsx create mode 100644 src/renderer/components/dialogs/claude-login-modal.tsx create mode 100644 src/renderer/components/dialogs/index.ts create mode 100644 src/renderer/components/dialogs/settings-tabs/agents-appearance-tab.tsx create mode 100644 src/renderer/components/dialogs/settings-tabs/agents-debug-tab.tsx create mode 100644 src/renderer/components/dialogs/settings-tabs/agents-preferences-tab.tsx create mode 100644 src/renderer/components/dialogs/settings-tabs/agents-profile-tab.tsx create mode 100644 src/renderer/components/dialogs/settings-tabs/agents-skills-tab.tsx create mode 100644 src/renderer/components/dialogs/settings-tabs/index.ts create mode 100644 src/renderer/components/rename-dialog.tsx create mode 100644 src/renderer/components/traffic-light-spacer.tsx create mode 100644 src/renderer/components/ui/accordion.tsx create mode 100644 src/renderer/components/ui/alert-dialog.tsx create mode 100644 src/renderer/components/ui/badge.tsx create mode 100644 src/renderer/components/ui/button-group.tsx create mode 100644 src/renderer/components/ui/button.tsx create mode 100644 src/renderer/components/ui/canvas-icons.tsx create mode 100644 src/renderer/components/ui/checkbox.tsx create mode 100644 src/renderer/components/ui/collapsible.tsx create mode 100644 src/renderer/components/ui/command.tsx create mode 100644 src/renderer/components/ui/context-menu.tsx create mode 100644 src/renderer/components/ui/dialog.tsx create mode 100644 src/renderer/components/ui/dropdown-menu.tsx create mode 100644 src/renderer/components/ui/hover-card.tsx create mode 100644 src/renderer/components/ui/icons.tsx create mode 100644 src/renderer/components/ui/input.tsx create mode 100644 src/renderer/components/ui/kbd.tsx create mode 100644 src/renderer/components/ui/label.tsx create mode 100644 src/renderer/components/ui/logo.tsx create mode 100644 src/renderer/components/ui/popover.tsx create mode 100644 src/renderer/components/ui/progress.tsx create mode 100644 src/renderer/components/ui/prompt-input.tsx create mode 100644 src/renderer/components/ui/resizable-sidebar.tsx create mode 100644 src/renderer/components/ui/search-combobox.tsx create mode 100644 src/renderer/components/ui/select.tsx create mode 100644 src/renderer/components/ui/skeleton.tsx create mode 100644 src/renderer/components/ui/switch.tsx create mode 100644 src/renderer/components/ui/tabs.tsx create mode 100644 src/renderer/components/ui/text-shimmer.tsx create mode 100644 src/renderer/components/ui/textarea.tsx create mode 100644 src/renderer/components/ui/tooltip.tsx create mode 100644 src/renderer/components/ui/typewriter-text.tsx create mode 100644 src/renderer/components/update-banner.tsx create mode 100644 src/renderer/contexts/TRPCProvider.tsx create mode 100644 src/renderer/features/agents/atoms/index.ts create mode 100644 src/renderer/features/agents/commands/agents-slash-command.tsx create mode 100644 src/renderer/features/agents/commands/builtin-commands.ts create mode 100644 src/renderer/features/agents/commands/index.ts create mode 100644 src/renderer/features/agents/commands/types.ts create mode 100644 src/renderer/features/agents/components/agent-chat-card.tsx create mode 100644 src/renderer/features/agents/components/agent-send-button.tsx create mode 100644 src/renderer/features/agents/components/agents-help-popover.tsx create mode 100644 src/renderer/features/agents/components/agents-onboarding-dialog.tsx create mode 100644 src/renderer/features/agents/components/agents-quick-switch-dialog.tsx create mode 100644 src/renderer/features/agents/components/agents-rename-subchat-dialog.tsx create mode 100644 src/renderer/features/agents/components/agents-settings-dialog.tsx create mode 100644 src/renderer/features/agents/components/create-branch-dialog.tsx create mode 100644 src/renderer/features/agents/components/preview-setup-hover-card.tsx create mode 100644 src/renderer/features/agents/components/project-selector.tsx create mode 100644 src/renderer/features/agents/components/settings-tabs/agents-appearance-tab.tsx create mode 100644 src/renderer/features/agents/components/settings-tabs/agents-claude-code-tab.tsx create mode 100644 src/renderer/features/agents/components/settings-tabs/agents-profile-tab.tsx create mode 100644 src/renderer/features/agents/components/subchats-quick-switch-dialog.tsx create mode 100644 src/renderer/features/agents/components/traffic-light-spacer.tsx create mode 100644 src/renderer/features/agents/components/work-mode-selector.tsx create mode 100644 src/renderer/features/agents/constants.ts create mode 100644 src/renderer/features/agents/hooks/use-agents-file-upload.ts create mode 100644 src/renderer/features/agents/hooks/use-changed-files-tracking.ts create mode 100644 src/renderer/features/agents/hooks/use-desktop-notifications.ts create mode 100644 src/renderer/features/agents/hooks/use-focus-input-on-enter.ts create mode 100644 src/renderer/features/agents/hooks/use-haptic.ts create mode 100644 src/renderer/features/agents/hooks/use-toggle-focus-on-cmd-esc.ts create mode 100644 src/renderer/features/agents/lib/agents-actions.ts create mode 100644 src/renderer/features/agents/lib/agents-hotkeys-manager.ts create mode 100644 src/renderer/features/agents/lib/ipc-chat-transport.ts create mode 100644 src/renderer/features/agents/main/active-chat.tsx create mode 100644 src/renderer/features/agents/main/new-chat-form.tsx create mode 100644 src/renderer/features/agents/mentions/agents-file-mention.tsx create mode 100644 src/renderer/features/agents/mentions/agents-mentions-editor.tsx create mode 100644 src/renderer/features/agents/mentions/index.ts create mode 100644 src/renderer/features/agents/mentions/render-file-mentions.tsx create mode 100644 src/renderer/features/agents/stores/agent-chat-store.ts create mode 100644 src/renderer/features/agents/stores/sub-chat-store.ts create mode 100644 src/renderer/features/agents/ui/agent-ask-user-question-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-bash-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-context-indicator.tsx create mode 100644 src/renderer/features/agents/ui/agent-diff-view.tsx create mode 100644 src/renderer/features/agents/ui/agent-edit-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-exit-plan-mode-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-exploring-group.tsx create mode 100644 src/renderer/features/agents/ui/agent-file-item.tsx create mode 100644 src/renderer/features/agents/ui/agent-image-item.tsx create mode 100644 src/renderer/features/agents/ui/agent-message-usage.tsx create mode 100644 src/renderer/features/agents/ui/agent-plan-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-preview.tsx create mode 100644 src/renderer/features/agents/ui/agent-send-button.tsx create mode 100644 src/renderer/features/agents/ui/agent-task-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-thinking-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-todo-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-tool-call.tsx create mode 100644 src/renderer/features/agents/ui/agent-tool-registry.tsx create mode 100644 src/renderer/features/agents/ui/agent-user-message-bubble.tsx create mode 100644 src/renderer/features/agents/ui/agent-user-question.tsx create mode 100644 src/renderer/features/agents/ui/agent-web-fetch-tool.tsx create mode 100644 src/renderer/features/agents/ui/agent-web-search-collapsible.tsx create mode 100644 src/renderer/features/agents/ui/agent-web-search-tool.tsx create mode 100644 src/renderer/features/agents/ui/agents-content.tsx create mode 100644 src/renderer/features/agents/ui/agents-header-controls.tsx create mode 100644 src/renderer/features/agents/ui/archive-popover.tsx create mode 100644 src/renderer/features/agents/ui/chat-title-editor.tsx create mode 100644 src/renderer/features/agents/ui/device-presets-bar.tsx create mode 100644 src/renderer/features/agents/ui/icons/claude-code.svg create mode 100644 src/renderer/features/agents/ui/icons/claude-mode.svg create mode 100644 src/renderer/features/agents/ui/icons/codex.svg create mode 100644 src/renderer/features/agents/ui/icons/cursor.svg create mode 100644 src/renderer/features/agents/ui/icons/gpt-model.svg create mode 100644 src/renderer/features/agents/ui/index.ts create mode 100644 src/renderer/features/agents/ui/inline-edit.tsx create mode 100644 src/renderer/features/agents/ui/mobile-chat-header.tsx create mode 100644 src/renderer/features/agents/ui/mobile-copy-link-button.tsx create mode 100644 src/renderer/features/agents/ui/pr-status-bar.tsx create mode 100644 src/renderer/features/agents/ui/preview-url-input.tsx create mode 100644 src/renderer/features/agents/ui/resize-handle.tsx create mode 100644 src/renderer/features/agents/ui/scale-control.tsx create mode 100644 src/renderer/features/agents/ui/sub-chat-context-menu.tsx create mode 100644 src/renderer/features/agents/ui/sub-chat-selector.tsx create mode 100644 src/renderer/features/agents/ui/sub-chat-status-card.tsx create mode 100644 src/renderer/features/agents/ui/viewport-toggle.tsx create mode 100644 src/renderer/features/agents/utils/auto-rename.ts create mode 100644 src/renderer/features/agents/utils/format-time-ago.ts create mode 100644 src/renderer/features/agents/utils/pluralize.ts create mode 100644 src/renderer/features/agents/utils/pr-message.ts create mode 100644 src/renderer/features/changes/ChangesView.tsx create mode 100644 src/renderer/features/changes/components/CategorySection/CategorySection.tsx create mode 100644 src/renderer/features/changes/components/CategorySection/index.ts create mode 100644 src/renderer/features/changes/components/ChangesHeader/ChangesHeader.tsx create mode 100644 src/renderer/features/changes/components/ChangesHeader/index.ts create mode 100644 src/renderer/features/changes/components/CollapsibleRow/CollapsibleRow.tsx create mode 100644 src/renderer/features/changes/components/CollapsibleRow/index.ts create mode 100644 src/renderer/features/changes/components/CommitInput/CommitInput.tsx create mode 100644 src/renderer/features/changes/components/CommitInput/index.ts create mode 100644 src/renderer/features/changes/components/CommitItem/CommitItem.tsx create mode 100644 src/renderer/features/changes/components/CommitItem/index.ts create mode 100644 src/renderer/features/changes/components/FileItem/FileItem.tsx create mode 100644 src/renderer/features/changes/components/FileItem/index.ts create mode 100644 src/renderer/features/changes/components/FileList/FileList.tsx create mode 100644 src/renderer/features/changes/components/FileList/FileListGrouped.tsx create mode 100644 src/renderer/features/changes/components/FileList/FileListTree.tsx create mode 100644 src/renderer/features/changes/components/FileList/index.ts create mode 100644 src/renderer/features/changes/components/FolderRow/FolderRow.tsx create mode 100644 src/renderer/features/changes/components/FolderRow/index.ts create mode 100644 src/renderer/features/changes/components/PRIcon/PRIcon.tsx create mode 100644 src/renderer/features/changes/components/PRIcon/index.ts create mode 100644 src/renderer/features/changes/components/ViewModeToggle/ViewModeToggle.tsx create mode 100644 src/renderer/features/changes/components/ViewModeToggle/index.ts create mode 100644 src/renderer/features/changes/index.ts create mode 100644 src/renderer/features/changes/types.ts create mode 100644 src/renderer/features/changes/utils/date.ts create mode 100644 src/renderer/features/changes/utils/index.ts create mode 100644 src/renderer/features/changes/utils/status.tsx create mode 100644 src/renderer/features/hooks/use-agents-file-upload.ts create mode 100644 src/renderer/features/layout/agents-layout.tsx create mode 100644 src/renderer/features/onboarding/anthropic-onboarding-page.tsx create mode 100644 src/renderer/features/onboarding/index.ts create mode 100644 src/renderer/features/onboarding/select-repo-page.tsx create mode 100644 src/renderer/features/sidebar/agents-sidebar.tsx create mode 100644 src/renderer/features/sidebar/agents-subchats-sidebar.tsx create mode 100644 src/renderer/features/sidebar/hooks/use-archive-chat.ts create mode 100644 src/renderer/features/sidebar/hooks/use-desktop-notifications.ts create mode 100644 src/renderer/features/sidebar/hooks/use-haptic.ts create mode 100644 src/renderer/features/sidebar/utils/pluralize.ts create mode 100644 src/renderer/features/sub-chats/inline-edit.tsx create mode 100644 src/renderer/features/sub-chats/sub-chat-context-menu.tsx create mode 100644 src/renderer/features/sub-chats/sub-chat-selector.tsx create mode 100644 src/renderer/features/sub-chats/sub-chats-sidebar.tsx create mode 100644 src/renderer/features/terminal/TerminalSearch.tsx create mode 100644 src/renderer/features/terminal/atoms.ts create mode 100644 src/renderer/features/terminal/commandBuffer.ts create mode 100644 src/renderer/features/terminal/config.ts create mode 100644 src/renderer/features/terminal/helpers.ts create mode 100644 src/renderer/features/terminal/index.ts create mode 100644 src/renderer/features/terminal/link-providers/file-path-link-provider.ts create mode 100644 src/renderer/features/terminal/link-providers/index.ts create mode 100644 src/renderer/features/terminal/link-providers/link-popup.ts create mode 100644 src/renderer/features/terminal/link-providers/url-link-provider.ts create mode 100644 src/renderer/features/terminal/parseCwd.ts create mode 100644 src/renderer/features/terminal/suppressQueryResponses.ts create mode 100644 src/renderer/features/terminal/terminal-sidebar.tsx create mode 100644 src/renderer/features/terminal/terminal-tabs.tsx create mode 100644 src/renderer/features/terminal/terminal.tsx create mode 100644 src/renderer/features/terminal/types.ts create mode 100644 src/renderer/features/terminal/utils.ts create mode 100644 src/renderer/features/ui/agent-bash-tool.tsx create mode 100644 src/renderer/features/ui/agent-edit-tool.tsx create mode 100644 src/renderer/features/ui/agent-plan-tool.tsx create mode 100644 src/renderer/features/ui/agent-task-tool.tsx create mode 100644 src/renderer/features/ui/agent-todo-tool.tsx create mode 100644 src/renderer/features/ui/agent-tool-call.tsx create mode 100644 src/renderer/features/ui/agent-tool-registry.tsx create mode 100644 src/renderer/features/ui/agent-web-fetch-tool.tsx create mode 100644 src/renderer/features/ui/agent-web-search-tool.tsx create mode 100644 src/renderer/features/ui/index.ts create mode 100644 src/renderer/hooks/usePRStatus/index.ts create mode 100644 src/renderer/hooks/usePRStatus/usePRStatus.ts create mode 100644 src/renderer/icons/framework-icons.tsx create mode 100644 src/renderer/icons/index.tsx create mode 100644 src/renderer/index.html create mode 100644 src/renderer/lib/analytics.ts create mode 100644 src/renderer/lib/api-fetch.ts create mode 100644 src/renderer/lib/atoms/agents-settings-dialog.ts create mode 100644 src/renderer/lib/atoms/index.ts create mode 100644 src/renderer/lib/codesandbox-constants.ts create mode 100644 src/renderer/lib/hooks/use-code-theme.ts create mode 100644 src/renderer/lib/hooks/use-mobile.tsx create mode 100644 src/renderer/lib/hooks/use-update-checker.ts create mode 100644 src/renderer/lib/jotai-store.ts create mode 100644 src/renderer/lib/mock-api.ts create mode 100644 src/renderer/lib/overlay-styles.ts create mode 100644 src/renderer/lib/stores/changes-store.ts create mode 100644 src/renderer/lib/stores/sub-chat-store.ts create mode 100644 src/renderer/lib/themes/builtin-themes.ts create mode 100644 src/renderer/lib/themes/cursor-themes.ts create mode 100644 src/renderer/lib/themes/diff-view-highlighter.ts create mode 100644 src/renderer/lib/themes/index.ts create mode 100644 src/renderer/lib/themes/shiki-theme-loader.ts create mode 100644 src/renderer/lib/themes/terminal-theme-mapper.ts create mode 100644 src/renderer/lib/themes/theme-provider.tsx create mode 100644 src/renderer/lib/themes/vscode-to-css-mapping.ts create mode 100644 src/renderer/lib/trpc.ts create mode 100644 src/renderer/lib/utils.ts create mode 100644 src/renderer/lib/utils/format-time-ago.ts create mode 100644 src/renderer/lib/utils/platform.ts create mode 100644 src/renderer/lib/utils/pluralize.ts create mode 100644 src/renderer/lib/vscode-themes.ts create mode 100644 src/renderer/login.html create mode 100644 src/renderer/main.tsx create mode 100644 src/renderer/public/sound.mp3 create mode 100644 src/renderer/styles/agents-styles.css create mode 100644 src/renderer/styles/globals.css create mode 100644 src/shared/changes-types.ts create mode 100644 src/shared/detect-language.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.json diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..9a2af572 --- /dev/null +++ b/.env.example @@ -0,0 +1,17 @@ +# Apple Developer credentials (required for macOS code signing & notarization) +APPLE_ID=your-email@example.com +APPLE_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx +APPLE_TEAM_ID=XXXXXXXXXX +APPLE_IDENTITY=Developer ID Application: Your Name (TEAM_ID) + +# Sentry error tracking (optional - disabled if not set) +# Main process uses MAIN_VITE_ prefix +MAIN_VITE_SENTRY_DSN=https://xxxxx@xxx.ingest.sentry.io/xxxxx + +# PostHog analytics (optional - disabled if not set) +# Main process (MAIN_VITE_ prefix for electron-vite) +MAIN_VITE_POSTHOG_KEY=phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +MAIN_VITE_POSTHOG_HOST=https://us.i.posthog.com +# Renderer process (VITE_ prefix for Vite) +VITE_POSTHOG_KEY=phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +VITE_POSTHOG_HOST=https://us.i.posthog.com diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..54d8ce1a --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +# Dependencies +node_modules/ + +# Build outputs +dist/ +release/ +release-*/ +out/ + +# IDE +.idea/ +*.swp +*.swo +.vscode/ + +# System files +.DS_Store +Thumbs.db + +# Logs +*.log +npm-debug.log* + +# Environment +.env +.env.local + +# electron-vite temp files +electron.vite.config.*.mjs + +# Claude binary (downloaded at build time) +resources/bin/ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..24a633f4 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,230 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## What is this? + +**21st Agents** - A local-first Electron desktop app for AI-powered code assistance. Users create chat sessions linked to local project folders, interact with Claude in Plan or Agent mode, and see real-time tool execution (bash, file edits, web search, etc.). + +## Commands + +```bash +# Development +bun run dev # Start Electron with hot reload + +# Build +bun run build # Compile app +bun run package # Package for current platform (dir) +bun run package:mac # Build macOS (DMG + ZIP) +bun run package:win # Build Windows (NSIS + portable) +bun run package:linux # Build Linux (AppImage + DEB) + +# Database (Drizzle + SQLite) +bun run db:generate # Generate migrations from schema +bun run db:push # Push schema directly (dev only) +``` + +## Architecture + +``` +src/ +├── main/ # Electron main process +│ ├── index.ts # App entry, window lifecycle +│ ├── auth-manager.ts # OAuth flow, token refresh +│ ├── auth-store.ts # Encrypted credential storage (safeStorage) +│ ├── windows/main.ts # Window creation, IPC handlers +│ └── lib/ +│ ├── db/ # Drizzle + SQLite +│ │ ├── index.ts # DB init, auto-migrate on startup +│ │ ├── schema/ # Drizzle table definitions +│ │ └── utils.ts # ID generation +│ └── trpc/routers/ # tRPC routers (projects, chats, claude) +│ +├── preload/ # IPC bridge (context isolation) +│ └── index.ts # Exposes desktopApi + tRPC bridge +│ +└── renderer/ # React 19 UI + ├── App.tsx # Root with providers + ├── features/ + │ ├── agents/ # Main chat interface + │ │ ├── main/ # active-chat.tsx, new-chat-form.tsx + │ │ ├── ui/ # Tool renderers, preview, diff view + │ │ ├── commands/ # Slash commands (/plan, /agent, /clear) + │ │ ├── atoms/ # Jotai atoms for agent state + │ │ └── stores/ # Zustand store for sub-chats + │ ├── sidebar/ # Chat list, archive, navigation + │ ├── sub-chats/ # Tab/sidebar sub-chat management + │ └── layout/ # Main layout with resizable panels + ├── components/ui/ # Radix UI wrappers (button, dialog, etc.) + └── lib/ + ├── atoms/ # Global Jotai atoms + ├── stores/ # Global Zustand stores + ├── trpc.ts # Real tRPC client + └── mock-api.ts # DEPRECATED - being replaced with real tRPC +``` + +## Database (Drizzle ORM) + +**Location:** `{userData}/data/agents.db` (SQLite) + +**Schema:** `src/main/lib/db/schema/index.ts` + +```typescript +// Three main tables: +projects → id, name, path (local folder), timestamps +chats → id, name, projectId, worktree fields, timestamps +sub_chats → id, name, chatId, sessionId, mode, messages (JSON) +``` + +**Auto-migration:** On app start, `initDatabase()` runs migrations from `drizzle/` folder (dev) or `resources/migrations` (packaged). + +**Queries:** +```typescript +import { getDatabase, projects, chats } from "../lib/db" +import { eq } from "drizzle-orm" + +const db = getDatabase() +const allProjects = db.select().from(projects).all() +const projectChats = db.select().from(chats).where(eq(chats.projectId, id)).all() +``` + +## Key Patterns + +### IPC Communication +- Uses **tRPC** with `trpc-electron` for type-safe main↔renderer communication +- All backend calls go through tRPC routers, not raw IPC +- Preload exposes `window.desktopApi` for native features (window controls, clipboard, notifications) + +### State Management +- **Jotai**: UI state (selected chat, sidebar open, preview settings) +- **Zustand**: Sub-chat tabs and pinned state (persisted to localStorage) +- **React Query**: Server state via tRPC (auto-caching, refetch) + +### Claude Integration +- Dynamic import of `@anthropic-ai/claude-code` SDK +- Two modes: "plan" (read-only) and "agent" (full permissions) +- Session resume via `sessionId` stored in SubChat +- Message streaming via tRPC subscription (`claude.onMessage`) + +## Tech Stack + +| Layer | Tech | +|-------|------| +| Desktop | Electron 33.4.5, electron-vite, electron-builder | +| UI | React 19, TypeScript 5.4.5, Tailwind CSS | +| Components | Radix UI, Lucide icons, Motion, Sonner | +| State | Jotai, Zustand, React Query | +| Backend | tRPC, Drizzle ORM, better-sqlite3 | +| AI | @anthropic-ai/claude-code | +| Package Manager | bun | + +## File Naming + +- Components: PascalCase (`ActiveChat.tsx`, `AgentsSidebar.tsx`) +- Utilities/hooks: camelCase (`useFileUpload.ts`, `formatters.ts`) +- Stores: kebab-case (`sub-chat-store.ts`, `agent-chat-store.ts`) +- Atoms: camelCase with `Atom` suffix (`selectedAgentChatIdAtom`) + +## Important Files + +- `electron.vite.config.ts` - Build config (main/preload/renderer entries) +- `src/main/lib/db/schema/index.ts` - Drizzle schema (source of truth) +- `src/main/lib/db/index.ts` - DB initialization + auto-migrate +- `src/renderer/features/agents/atoms/index.ts` - Agent UI state atoms +- `src/renderer/features/agents/main/active-chat.tsx` - Main chat component +- `src/main/lib/trpc/routers/claude.ts` - Claude SDK integration + +## Debugging First Install Issues + +When testing auth flows or behavior for new users, you need to simulate a fresh install: + +```bash +# 1. Clear all app data (auth, database, settings) +rm -rf ~/Library/Application\ Support/Agents\ Dev/ + +# 2. Reset macOS protocol handler registration (if testing deep links) +/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister -kill -r -domain local -domain system -domain user + +# 3. Clear app preferences +defaults delete dev.21st.agents.dev # Dev mode +defaults delete dev.21st.agents # Production + +# 4. Run in dev mode with clean state +cd apps/desktop +bun run dev +``` + +**Common First-Install Bugs:** +- **OAuth deep link not working**: macOS Launch Services may not immediately recognize protocol handlers on first app launch. User may need to click "Sign in" again after the first attempt. +- **Folder dialog not appearing**: Window focus timing issues on first launch. Fixed by ensuring window focus before showing `dialog.showOpenDialog()`. + +**Dev vs Production App:** +- Dev mode uses `twentyfirst-agents-dev://` protocol +- Dev mode uses separate userData path (`~/Library/Application Support/Agents Dev/`) +- This prevents conflicts between dev and production installs + +## Releasing a New Version + +### Prerequisites for Notarization + +Set environment variables (add to `.zshrc` or `.env.local`): + +```bash +export APPLE_ID="your-apple-id@example.com" +export APPLE_APP_SPECIFIC_PASSWORD="xxxx-xxxx-xxxx-xxxx" # App-specific password from appleid.apple.com +``` + +### Release Commands + +```bash +# Full release (build, sign, notarize, generate manifests, upload to CDN) +bun run release + +# Or step by step: +bun run build # Compile TypeScript +bun run package:mac # Build, sign & notarize macOS app +bun run dist:manifest # Generate latest-mac.yml manifests +./scripts/upload-release-wrangler.sh # Upload to R2 CDN +``` + +### Bump Version Before Release + +```bash +npm version patch # 0.0.2 → 0.0.3 +npm version minor # 0.0.3 → 0.1.0 +npm version major # 0.1.0 → 1.0.0 +``` + +### Files Uploaded to CDN + +| File | Purpose | +|------|---------| +| `latest-mac.yml` | Manifest for arm64 auto-updates | +| `latest-mac-x64.yml` | Manifest for Intel auto-updates | +| `Agents-{version}-arm64-mac.zip` | Auto-update payload (arm64) | +| `Agents-{version}-mac.zip` | Auto-update payload (Intel) | +| `Agents-{version}-arm64.dmg` | Manual download (arm64) | +| `Agents-{version}.dmg` | Manual download (Intel) | + +### Auto-Update Flow + +1. App checks `https://cdn.21st.dev/releases/desktop/latest-mac.yml` on startup and when window regains focus (with 1 min cooldown) +2. If version in manifest > current version, shows "Update Available" banner +3. User clicks Download → downloads ZIP in background +4. User clicks "Restart Now" → installs update and restarts + +## Current Status (WIP) + +**Done:** +- Drizzle ORM setup with schema (projects, chats, sub_chats) +- Auto-migration on app startup +- tRPC routers structure + +**In Progress:** +- Replacing `mock-api.ts` with real tRPC calls in renderer +- ProjectSelector component (local folder picker) + +**Planned:** +- Git worktree per chat (isolation) +- Claude Code execution in worktree path +- Full feature parity with web app diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md new file mode 100644 index 00000000..732da482 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# 1Code + +Best UI for Claude Code with Local and Remote agent execution. + +By [21st.dev](https://21st.dev) + +## Feedback & Community + +Join our [Discord](https://discord.gg/Qx4rFunqvY) for support and discussions. + +## License + +Apache License 2.0 - see [LICENSE](LICENSE) for details. diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 00000000..199eab16 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,204 @@ +# Desktop App Release Guide + +## Prerequisites + +1. **Apple Developer Credentials** (for code signing and notarization): + - Developer ID certificate installed in Keychain + - Notarization keychain profile: `21st-notarize` + - To create profile: `xcrun notarytool store-credentials "21st-notarize" --apple-id YOUR_APPLE_ID --team-id YOUR_TEAM_ID` + +2. **Cloudflare R2 Access**: + - `wrangler` CLI authenticated (`npx wrangler login`) + - Access to `components-code` bucket + +3. **GitHub CLI**: + - `gh` CLI authenticated (`gh auth login`) + - Push access to `21st-dev/21st` repo + +## Quick Release (Recommended) + +### 1. Bump Version + +```bash +cd apps/desktop +npm version patch --no-git-tag-version # 0.0.5 → 0.0.6 +``` + +### 2. Update Download Links + +Update version in these files: +- `apps/web/app/agents/landing-page.tsx` +- `apps/web/app/agents/download/download-landing.tsx` + +Replace old version URLs with new version (e.g., `Agents-0.0.5` → `Agents-0.0.6`). + +### 3. Run Release Script + +```bash +cd apps/desktop +bun run release +``` + +This script: +1. Cleans `release/` folder +2. Downloads Claude Code binary from Anthropic CDN +3. Builds the app (main, preload, renderer) +4. Packages for macOS (ARM64 + x64) +5. Generates update manifests (`latest-mac.yml`, `latest-mac-x64.yml`) +6. Submits DMGs for Apple notarization (async, doesn't wait) +7. Uploads all files to R2 CDN +8. Creates GitHub release with assets + +### 4. Wait for Notarization & Staple + +Check notarization status: +```bash +xcrun notarytool history --keychain-profile "21st-notarize" +``` + +Once both DMGs show `status: Accepted`, staple and re-upload: + +```bash +cd apps/desktop/release + +# Staple notarization tickets +xcrun stapler staple Agents-0.0.X-arm64.dmg +xcrun stapler staple Agents-0.0.X.dmg + +# Re-upload stapled DMGs to R2 +npx wrangler r2 object put "components-code/releases/desktop/Agents-0.0.X-arm64.dmg" \ + --file="Agents-0.0.X-arm64.dmg" --content-type="application/x-apple-diskimage" +npx wrangler r2 object put "components-code/releases/desktop/Agents-0.0.X.dmg" \ + --file="Agents-0.0.X.dmg" --content-type="application/x-apple-diskimage" + +# Update GitHub release assets +gh release delete-asset v0.0.X Agents-0.0.X-arm64.dmg --yes +gh release delete-asset v0.0.X Agents-0.0.X.dmg --yes +gh release upload v0.0.X Agents-0.0.X-arm64.dmg Agents-0.0.X.dmg --clobber +``` + +### 5. Publish Release & Update Changelog + +**Important:** The release is created as a draft. You must publish it: + +```bash +# Publish from draft and set as latest + add changelog +gh release edit v0.0.X --draft=false --latest --notes "$(cat <<'EOF' +## What's New in v0.0.X + +### Features + +- Feature 1 +- Feature 2 + +### Improvements & Fixes + +- Fix 1 +- Fix 2 +EOF +)" +``` + +Or separately: +```bash +# Just publish from draft +gh release edit v0.0.X --draft=false --latest + +# Then update changelog +gh release edit v0.0.X --notes "..." +``` + +### 6. Commit & Tag + +```bash +git add -A +git commit -m "feat(desktop): release v0.0.X with " +git push + +# Fix tag to point to release commit +git fetch --tags +git tag -d v0.0.X +git tag v0.0.X +git push origin :refs/tags/v0.0.X +git push origin v0.0.X +``` + +## File Locations + +### Build Outputs (`apps/desktop/release/`) + +| File | Purpose | +|------|---------| +| `Agents-X.X.X-arm64.dmg` | ARM64 installer (Apple Silicon) | +| `Agents-X.X.X.dmg` | x64 installer (Intel) | +| `Agents-X.X.X-arm64-mac.zip` | ARM64 auto-update package | +| `Agents-X.X.X-mac.zip` | x64 auto-update package | +| `latest-mac.yml` | ARM64 update manifest | +| `latest-mac-x64.yml` | x64 update manifest | +| `*.blockmap` | Delta update blockmaps | + +### CDN URLs + +- Manifests: `https://cdn.21st.dev/releases/desktop/latest-mac.yml` +- DMGs: `https://cdn.21st.dev/releases/desktop/Agents-X.X.X-arm64.dmg` +- ZIPs: `https://cdn.21st.dev/releases/desktop/Agents-X.X.X-arm64-mac.zip` + +### GitHub Release + +- URL: `https://github.com/21st-dev/21st/releases/tag/vX.X.X` + +## How Auto-Updates Work + +1. App checks `https://cdn.21st.dev/releases/desktop/latest-mac.yml` on startup and window focus +2. If version in manifest > current version, shows "Update Available" banner +3. User clicks Update → downloads ZIP in background +4. After download, app restarts and installs update + +## Troubleshooting + +### Notarization Fails + +Check detailed log: +```bash +xcrun notarytool log --keychain-profile "21st-notarize" +``` + +Common issues: +- Unsigned binaries inside the app +- Hardened runtime not enabled +- Missing entitlements + +### Claude Binary Missing + +If x64 build shows "file source doesn't exist" for `darwin-x64`: + +```bash +# Download all platform binaries +bun run claude:download:all +``` + +Note: Windows binary may 404 (not available from Anthropic). + +### Old Files in Release + +The `release` script starts with `rm -rf release` to clean old files. If you see old version files, ensure the script ran correctly. + +### GitHub Release Shows as Draft + +**This is expected!** The script creates releases as drafts. After stapling and uploading, publish it: +```bash +gh release edit v0.0.X --draft=false --latest +``` + +You can combine with changelog update (see Step 5). + +## Scripts Reference + +| Script | Description | +|--------|-------------| +| `bun run release` | Full release pipeline | +| `bun run build` | Build app only | +| `bun run package:mac` | Package for macOS | +| `bun run dist:manifest` | Generate update manifests | +| `bun run claude:download` | Download Claude binary (current arch) | +| `bun run claude:download:all` | Download Claude binary (all platforms) | diff --git a/build/background.svg b/build/background.svg new file mode 100644 index 00000000..87fbc65d --- /dev/null +++ b/build/background.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/background.tiff b/build/background.tiff new file mode 100644 index 0000000000000000000000000000000000000000..15d1f5c67d6c56de408742e8057a08729deb503f GIT binary patch literal 824264 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%0DO-xpuY0HLNpjKGV^i^E2R+5* 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 z%0A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 #2vJ0f!!QL*EOere!Ep3o|Pa%bBcb~ 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

X@8-i0=jG#Si5Yddg4%u3c@X=NLOSK}+sTc@^D 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 literal 0 HcmV?d00001 diff --git a/build/background@2x.tiff b/build/background@2x.tiff new file mode 100644 index 0000000000000000000000000000000000000000..4337bc9f29c315094d5bd7c361652f3c72989bf2 GIT binary patch literal 4669296 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∨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%0AHV83)cc0+tVvJrpPO~ys2f)9;Len2knC! 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ξ_aR{fP{ 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 z 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 Ah5!Hn literal 0 HcmV?d00001 diff --git a/build/dmg-background.png b/build/dmg-background.png new file mode 100644 index 0000000000000000000000000000000000000000..8eb860c97574f3b58804c76acd2a502f33ce0dfe GIT binary patch literal 48822 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
    2G~c^oL{H`Fo@k0Iei>r&qLp2R-ooFt52s+5G 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ʌmI>dH?_b literal 0 HcmV?d00001 diff --git a/build/dmg-background.svg b/build/dmg-background.svg new file mode 100644 index 00000000..c6ae350d --- /dev/null +++ b/build/dmg-background.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/dmg-background@2x.png b/build/dmg-background@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7788d0bd881272cd193342a680b81ad731d05eaf GIT binary patch literal 225248 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

    (P7+ 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

  1. =J#@RhL-R*=n3ci4Y}q2b4)wsj1bHZA zQ62G{!$IjG$sM4a*j0YVyDT={_0bZ+Z8Xoi9c(O?=8C?zQ2AofwB4`BNz&nsV@0^5 zn?hW2T0!fw!?;Xv7i@l3;rF98&D!(e3~#`y=(-n@&8*@@dx zDCw5~dGwp`whpBYxcTP+{{Hj7e-dr|lV>sQDrl0Z z-$DzgE9~OmvPIq~2+Zeoi_wyXH{p|Seva`{7ND#*;gdM9ZB4xipOmYfFPJI3)oEO# zV^=7d_H&t*T26!6mN{}P+TBZ_{>OMnVqLe~6Q`|cq&+DDZ3iYUCf(90$yEM)gC!AF zm<_Tr6PTYNr>RRxXbx#TDyBc~C<1QrU;G*z27ZiM`(uXg9>l$$+MVlcTIrj9yuK`a zkYpcdTmyPdJbv@j0%rbXZ(vZXg-!!vWhk)HMXP!Iz2pemKoW?yvQ6~;5^iBw_9nZ9 zriCx1qLtx#n_fK4!tT?p&1_>LDc5-Rtg4JGeqAR3BPEvBk7n=)cD-R9-Tzy{Psw?)( ztMNmCr4;WWIMb8NjGOz;d~>|V4jg*@CcM!&vd4}=1ZB=I8=BU^Z8c*=#5UPX42NPw=IY}$^Lg{49UgZ zo*>u*)<*{FO5vz$E`F!+fF;@QvIbCo1lqKN!^M*Gdl~+c0 z=C5+KR%Ia#GW>zXziS<_Ep5ioRT;H8UX#tzjWu}D)F5%Z0N{+ZO~9S9)dK(uLBEIh}rE0c$}U1NDvaa;TsRc*e zO5YiGfC~BSFAP{D7=mc7X=BMP+uOYk{_ldsHT$uJKtiKVyyP{(!HVN)-|TnkO3DfgPEMlw9dY@3 zmTPIbE1LlQX>nt?GsYC*r8dE&xWm@Z1M>hWWVA*}yC*q2MWpzNg5YFbo zW;F%7-<2y@Mf8d`EXYq4oBWZ8h-vsuZIculzdF`7TUK ze$DZD;4CEQw>H~4f;zzzb%@st!cSY`)I)l?#Hfd+gC|n^`WCo$XzBi z$5Gx3-Ex$p4O9KW)*?3BP1ZB|#gkH{%$aljLB z0BswZgqKVuJh082w19}e3TS+rdk;-Z(4%;g6J*kzUn)t?x!?pfRARx`c>}3fB^9Flh0~h?iXMve3m!4C~ptBThZ?hxzSJ@VRkOAA# zD})0uy1~@?yJIOSS#7-sV9FP&UO|wFiJVgRvMZW6LSlK`Ps@Zp z!o8EQ@NKRKje!}8=t2J-%&GkSyn5f$y?k((6@MsfHL` zEm|@R&sZvF-{i9Gy&Px3^C@gNVr;LsU3OlsQkqu^y@p~yNBVK&!q;JvmL3d7o~ru0 z+_wU>htA;U8W-lgL0f&b`h;6(lP~vinmgOOqD-Z<02D7&b-t33c|OK5E%vlKq?qW* z1Hb-@H=cc!xs!T|tNI!fo0E{N

    u*~=X}jkLOXlW`jm>85Da_PJ82 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%0DUZ)Ju^tpo{2frYY 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 uXE{Cm158`49+s + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.disable-library-validation + + com.apple.security.network.client + + com.apple.security.network.server + + + + diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..0cd13c9f719c177b4455f373a4673dee58d408dc GIT binary patch literal 315957 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

    @Ubg}X|dC4bWg8ai*3j{*-8lhiqtZ`16f|Mb3-# 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�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
    i2%* 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

    $py6P5q^fBR0^E_FyZH zoqB&x(t31U6^0)9r^^T5!|vwhv2bPV+_eq2bDs6~><&ZufS-!nUxF?oca1S2rsVpz zt$8O8a7}y8{ytJYcV55#JB4gm+l;x&B@1VALOw3<)2hRPj4WZLA8O=NqVrzQUOaqi z+iu2utiG5n`^xWi&r8JP)8ed%_v1>In}@epZVr3=E zYa30K=7OWlL)YQJ?~Vk%R|dOV92rgNd}u3*|2o}{D@!E?;hgphE9$r$%)l`^T({d! z3Mh2e+tb@F{Z2*01_?I?WqP$At{xV}B zh$Q6IA8^>PTprJj#Tx-)kgvfA^RM}t#0nE{d|~#V#_ddg2Q(6!v1QKWsHywt{Z?D0 zBHU9PEaF&soh8H8q&6~dSJuQ^+0=!q`hI5~(Xn!$KhOO5F`P?t?AB4XIW{iYEBAc< z707?TJ+}8b51u1vP;Ne@M~HfqWHkFHk3nS&09@w%oqgVg&zw}>&Xdc5A{v%UsV|3E z>RaXISSl=$QU#B3l=!U#vSDfRZalK$imnlYO6KbEgtV=9N{5R#E2IPK(0EeC# zmpTeOye$j3el-{1h5Z_gc<{a97|>Wto6&iiY7`JDMZ{q&`0#I66hlD(vsxuwW;Jt? zwvTeKT}C+v!y(sp=uUc2KMTapHK@}JU-Iskg3A4}pQn~(>3Yvvp z*iWi^0N575U>v<{ATMIie zYft;|tcEp+G&=J9(L|wWbrKc-R$saHJWl66q;terf8>w9Y)A<$0!44OmV8LGZ`}dd z%7u(d$A^G#*?z9x>uV_j5sXT$WA%U75OrThJ6+n6FyP#jkkkC>O5bJ~`oMCu*%mjR zbB&{-6u4A$D9Ge2hwt+NQui=fiT6XVBh)brFd6FP#|NBMptTZxhGz+vFt4`BlM1ka zYOI8w0zwcLxyFNh3W94kw%sQ9o~PRe=S;m-5!H1jboNGZBtYRXtTmtoYX^;tM%jR9 zngh(5?y#XdtP3BWmZXH3V9FOTycmnd`QO8o7HyJxff`uAwF2aPu~kJ5O`y#LJCQ}Y zlp(b3Th%;NkXq_kA2GWf52l@g-O_OE%zGdt_vN(MZDx>jiy69I9Vc6!X=9zvwJ56= zdCXEyZIa!cgL?x!+*`Pg@V%NN=QBHKPY~*A97E}zn|c?>b0EWVH1RN z`zh>;7FISy@Id>~poB*_ZCF@&vTXT@StF&}W;9}f9o2|jzho)f}c{6)k%Ji9mXO2XI=8AVwmTZOz6+r4@(k-hU< zB{@~B)O(AM*G4-4xG%a4reWBD%s=rMvb{2GHvaJYb00!E$0oAZuKc19lc$TqOmu1# zzoeM4`B8ptLp{If2yzCfM0dgN?Oy6bo^rev93CU7GL09gOV0V^|E>VbN3|L4$2vcB zgO(h$i3x@LM;D-n#tqGto-pIyDu(|iu(u!=R)G15BX$IoSd|f^amJDF6Zow_QY0TN z4g-2J`AkD#Fo3W0!_bG}zgg}mw4Q}4ZU9BimN}^wtoHD2`jic->$1v$_*39YSPA_U zFBdV)9MJACd)15GF($Cv%WZN+4`~w<9Wyuh;46Yg_{#D~7pH_E9T}1Tu1*C#X^y$U zhw($;eN8ceL&(OHXaaex_(9#5koo?n+EVP+iDZeEE(H=N6U)jc&i?KC`kbtT^qaC0 zr*=!2t(k7ubDKx#CV3pxu$H&u& zQ>$K&38gHbK4lXOr(7GoB22=x<5~FjRWJS&0B8#&=oRLlcFbz$P`UxR2!2rsjTrya zoH!85`ONZ6^+{S*Vd5E(oJz2(>Xg143@I7CQfgZ4{Oz_`F8d_@a|(g;)+qosr%B%W z<7+{;p|xnMesARzaz{?f?>~BAM3btlujtTk2*=$*u#Rjzsk?^vZ9l!VEzVMo={vp1 zX1l3J2HJ=Jqm&CNCvF*7pWGb!-Si$~JN2aLY}`}|(~SYrCeK^`$|V#p?KXgzL0KftCssPQrg|Rf14_oC%^k*k0CSw{xE41^-nV z*d%{wt=TGG2M}&iKH-dALcY#(^iLl~;0dPZiOt?rPN>kgb=n;Bz$p;)sASaS)pJLI zJPL$7dfVm0VkawlI6;zzB>YOy?Ia=ZntQy}np8FL&UQynVj3)f^jJa;b)@CCq7r%! zR{P+B#%N~OavjrTQ%TGh-epKo`5ywu0Ry@mmREZyd6>ZI8q1 z1jqp+yvh#QeLR-29GygIuK|6iTm5nlnYe9WeURhY=lFh93EfB#yp1yxbx$mzwNG2i z=4_?CHwV)3Ji^|tW&paAfHm*e@uy7&M$`9&?S8#4U)YjHlcT`x;g$OSo zG->K=%>?0t*MnX@m__+{MP>~LmA~2jp<)Y#F!>n0kOr37_!^FS?%jE;zK+dHUPraS z0T_YsBc1lFXOxMBg*)HIftg_akEz{2nU+T~R}xjgu7N+bK8UwCFC>N_j5{J4m&X`1 zMv*r8NnWE>ND67WZg+=D+|mLUFufgfhsw0A8z#mNf&O}8Uc$eG6y4pnu_djU>59M| z$@mxFX$b`<+O7B`=90~H3cd%1JWL*C*^!vcV%XWa#)fO|*m(2%918uB(3u~v4R(k_ z-cqQLic)%a^Ds~H?s4zkSK_WpeP>+2-|IUK1QS`nkbSG4vMO)KTGu*k_UT4sHTp1J zBXUIW>p5JvMo&vg`Y@Xokyx}~E^s-;dzLAe{uGNu$uJb+g@un_c@p#-z}N?_cJbPn zfynvQ4xj-yF!5KMIGv_%_q>tn+Ah69!bAhp+Eqpy^x;zgW7Wg5y#k&%&hi9Ra0j^) zvNjnh+~WVThsUbTB|i4-3<8lDywuTBCcDIV3HXalRYgG$*s>DdunWMa$MffZ zfDPC~Pgx#R(a*FBd{MA9R<+aA1n~mgi7k>;yuMs+F- zsp#Fy``CVfq{m;f@D&b%a>kPc=vkzr?GjMpMqi~+t1Q}VjKaFw4K#{PQh4Du zHd-E!m+h9jmOt=|skznBe5;7XZ}{+wVRYnNbj(rkKAstLyUKRY-ZaBLd2v+I$SpFb z!*6fWM%e8ada7OF^W50mZC)wH5{2du_3x^Cgt%X`1Wfqskxfe#aQfA(Id?gZj|)8+ zFKh^|D4=y%rj|C})*G9A*EwuyH+K7RL(`qj+1c9HjQB|bMJ`6xgwnpner%<4;!Dv0 zqT6~U6hV!9T-hpirgr1HQT?Eh&v~989m5YFY>86|X z7#TWj6~mrk9M01i;Uh@g$F?NuGL5@w8ZK%8DT@K34eU4@PMNwdyIHCY{ z%)FyvZM@^u>-vB*&gR8hk)z9?&Q5+Qzwy$0nVX?6Vjs=*oPIO>fFBGi7Wvdo{CN<+ z@v!D+KRxFaD~Po5uet-7W=n5elW0Lvxna#a*9LfHi_?wP_m6ITkx3qCC@VGYTQpPe zTcX=saqoIN@KZ*JZ#8{|9*zytV}f;zM@ReQbvhIo>r8+0=jzRz$ZYu?Je5VyUwat! zM`K`0*T4JOFP=J;junztR^`u^Zzg4#av@Dn`Unb1I)oZ;ZCJw8Xn-h6YxTL%6Yuqy zsm*405m#^h0cxYZ>ub-jf~%TRM#;?OES;%ToE{IS`fbm&@8yD$Jw&vA$Q2cnCJ_~u z?mM1cAI$F%NxpP*G~CmY=y_dYaQU->HyERJ9Fc{C12YJ)J@qBlRxHur{Ng;vL@HWr z#qz^3(DQs~xRoie&cmxqQ0d_!2M@`Kk0kx>B}6*p)fWZw+9Hky_3gATr+#T>hn2;vR}n6o46 zZl`>5gPBNFcAy;k+D9w;RF7dQ!RR+eNbOg~tPYU^hCbwDH`P>$q=I0jjaNMvQ09p2 zdp{f~m@}w6gp$_Sr9(iOKZgBlM!|8AHY*w{@r~)?qzJ)nr9?1|r|Y*tkm~4t$7y2z z0nJc9U#*=(=3~`05IwgVSo!{btWlj04z>oa;{LL>y4Pb><3(gAYxXK8jgLG2CE4~@ zV%(}EO-|<^UsqsFEhy~`s&@CO_bGWzuQ)p>Z?5_C#@KRS;L)wCOM9Bt#ps-*HfY`F z)^HwBDElaroNiVNZ`)HNOH~t4T(GBZw^NB0_|9J5RJK)34le8GmlU{lmJW(`b^An{ z%4umQ{ZA%F~J#|u0-sW%}s||c0O&Zy@F<&sbd|bOPoU!t)x?`hd;*CB+wo$qwOtOii33Y8l zy!kf6t8^1o&{Cp4DJp@nL(QTOcl2Q}B75XYqh>A9{Pu1aC`{?6gU~WY{8$Th5yH$g zY+6j+%DM9{$OY&E3a{)iPl4ivxR2JCs|7}^QG;VE2_VGd&*;|RBX&Lb2KygXDUJLA zF)1}3>-T~t*9&}JJ;PPWZx!t(=)cAV>l%aTL3$p+bEEdd%)Mm-mn7szH$Y1aMRw5Q z;kTb1M|A=sj9Yxg&vM`Xi8<;nc(=(iD!ev-v;WG*ZK)H_sH;i`T3rt*^c2jiY*&Ln zB>L?=KXM9BQoWXPXSyYa$HB`kabY1VX+e@h1Px~}^lCq1BFB}!{ju?8pfB)Px-dlk zv*e(#O2%ZNN`vF0wMt*sk34h^3)C8KrfaosdkQYLG;_14{G`rIh)^Qw+_T067>qSO zwaG~qU9LG6y~F&2djcw#>AOBy$4x=JGEN`EEg@sAntanyJJrb1d~+_#@q2MG$5G6{;?Fu7Ko|v3~00;NdAG zGzx|gL5VMrTr%eHwsrS#aCLdWVdZXP?*M$e&*AC%)R@E7+R@g=(}M~Geu1{2AlK4Y zw|!>&NbaA5hF}-(ySuu2qQFI@m+9yk7_S>}xOh1^jgVa-r=Y%Sq@^$T#P*qo39$XA zAwv!uCo2z+JW47Q1VxlbLyLlL5(pPY>@dO^k%Kcd$8{Ak+U;F$4 zV3dp;JR;(%8oK(XR`yT*g2TdJM#aP>q*m2^XlZTh7@S%nC=b93Oi&dFFOI*P|9)=& EAIx|NGynhq literal 0 HcmV?d00001 diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92273021dbeb95b3f5c05ead91802cbf278d398a GIT binary patch literal 67450 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�bmARWz_cSq5%#_On{zpg-oBlp3(7(=6VH27q#Y}l4u%wF`v456R4 z+viTBEg6BJmdS&I5a7NFiM}N@f)9@xo__Ar=8r4jl!ODhh$HM%^6Z$49B{e5kPR&o z#qV7~)em;bPClWZuCU9$F^+ahrD2}|`r3r4%#M7O!GT(Xurrl*T^zY5F$dL+GcwQJ44*?W$Okp#v5X0s1VauV%(cCc_p z-|Fk|@vA>~`{`#K`UsyAnfyN~%Rg`5c5(;gG+U{xoaQ*#z}YM$mYYa6{mv4&O45`kT0k-;CH+dOG%;%8D%V z(2EXS`zA?-*d^SI_nb1EV2f{?w*RkZ@3$Ay{I$IH|N9Pq!2UC#M5sjk-z~%S?gb0Z z;LO4?l`9Qt8ekYyPzi^v6qcU;2Fe5+Vxx z={4c5U>GtgAn~W1FPXb@)BHbwiiIUXjk@6i)3?lDpTZoPjd%rT2>NrX>AEFFZlP9<)ZwYt%9S8!sPE z8ok4Xi=M4o1tq`i;R7MwE>H!Oe*F9igZLhH)72Nx*i*%b2+((=j_7uox_ozLpJgD) zaFo_BYdS#anH{-N=%tlt%dy%a2v*O|Gf!+UT1FlUP2lBK#wFVc<^D*UEq>_@uYFdg zK}MgTWqr*L<-;2jdE=bygfuT-4?!IE4Qq%t@GnzN4Yu8)@tbh8We5KE#ZJbSaA@0> z+L9z|=_&oj1kk>}zxCw}UcI4;u1>G{eydc=UULfcTVk>j4Tpocu0%kh@NJBDi58(j zP7^>U7d#F}c5m2%dq^E;MtAxau^laonhMbNLxr97mh<^^3Qq*?(t#n|j80{1jX4Nc zw4Uqn;xK$d&0&$dw|b8R8XJyKIRyeWHu?LXlg#t=T5J6B)ga$fFz6RpdwB?O=O|2T zKJioduvZtk>y+Cls8&N1GK(MI$oYJ{Ea>#3%})=@+AeD-(Gm8d-ZLiuVO6AiqZb^g z350Cnzm*xF=o0A~y7{fd*ZtzWFz zJ=Gy!M_(iU>g`ysb>7C^e?6U#0Fu9VZzQ`?cG>2{*W`ED>U0b>x%{K`TX7Ps)M>yY z8XW45wrAq^zjKB$$;Csz2`Br!*-uREz$(=~c?RhV9(6G~CHDuT0Al1$@T1F1!~#3> zluribFAeKUAbGQy5|g4n^|Xc6g7azyuxhKao5tRx$X`J6@jT)c;PxM!3Qo7To30<~ z`F^cT2(RPwQsaOAZqM>>2ah>C>#s9u)?m_ull#|@{^y|_l?#(#^ef-=Vgc|oV>GtE zVr|OJ?{S`)Om_^nuP{+>mu){`WySAW`;aAeM)x{zr!3n-28U_@k=GKIY*cl4#Plb% z28<4yQ4>fi_Xk6SeB3y4M;aN}5T{-|ltqTU#VDQuaKL2fS{H>@B_L{m?5UDBxkc`+JEUj1i$^wZHC%}>7` z!<0k~+lRU)V%Y`Sv}W~i_x%}emoUC47|1;nMPsMD-=GwZ&wq+%98UKg8q{;yDlsoq zDDTSt_}?iq69U~Bx-M9`*6wX%}Y80MXBdiAd_owB@a&$g2m5F&1%fJ7@>ghQmP zls`0tmx{c;S8SbnzbIHTa$@xQBO|2JwR(`OWa3z1<8i2%JerHN2PV#Pl6SJ5gN=8y zlzCv(f`UbS^2|!NrBH`v?Tz~T*$}J36n4AyyPx|w{5h%YasX4_#zXuUxnl=_tS6?> z=vbpEJaNR?;g45gM}aJZq+~uHBB@5Mh%+9vrI!60F=54=|MAm4D*fjzp(-U}yLPCD zE>cEUXUd=6_RrssTBA-SDn=^eNTV|&kWRWjd-mUtaCq35;4s9Oyhf*ie#YjCb zCZ8=KTeWf^?222hu{PQQkOEaLviy_k1lqVFQ4%fx_JxK1G1kL$Ne9&}>{O1WZoyiu z>tjsEj)3*R`{ne;H>Ed^ZdpC<_)dk>&wc&C9mu7dYFW60NDCB zYpc-V>fJvk7BFf?!JGb%$F;R_chfQEYRi_hn6RkAuLgNiF~pU!&GkqOw%sJzQV0nc zpU+nidH;8ryIj^|d{A=l|{Tyz_ZCJnv1j!D_MX=Sot3 z%iKV5BR>|=I>LN)#FWe^7)4$WsDY$3i=A9(;kTEb(FM<{Bdn%sspDi;aLJnc=Rt@! zLIZWrPawI##T8eCqR%L&;K|E;D_`nB-unC6v>di!rzs>s2xS3;1T0;vobjXg3P}M< z==4gc`N6NGO_FfNqan>Zw~xv&VsIdg-PHriLyLcUD&RQKP4`n}tJSJY5&`O!TM{w0 zNrPKpGOeBzbm{+ucoc0Ym@vuz@$(*n;6)|Y8q-hRb?6ANifN?3W~j_aQI^+eZF?kx ziUvVMACNcL3L~gR%12g!y)R5$$2QSEqtRY1t2BgGrjLGR;cujT3lno+87wJ4nX(jd zTrlB~HZVYK-?0mefFiY?4Fp|}IE&R~-JZwxa<75oR$8+e{VCQLb zq#W3kbu9UwQ%g)Q3$CsT3Y4aY3)y{G*Iq$@RkVPY(%2;U3Zj?RJUZsdtp~;ZgsOTr z+5!JjP<@O=qMD4w=Zpu+K8WZSs$E!CZL z;s2o;Ibj-y+@AXgoxR@^WvbVBf0U%D3EO))x5o8b1?4y7fF+h1@{fzJbavQE51m+X zs&)k?%pC`h)(|Z_{6ob!IJwH03*==c(#XCkR9(-l*K+e|mZKn{*c;Z zM0NJb8e6Aq3S`<}(s|Hv#k=3sL$bBp8m%Gn>`82jlJzv58|lS`hV9xcB|WRjr<$;B zf3)wI0P>4H$gP{C#3C<@Vrr%j$ftgzp0IozMJ`xconf{4GzGgslOnrQr97H$A!3$e z=DPHkrcec^?`*%!98s5>)|5&0vPPT|2YbF<>RGqwerTprtY_Z zxN)9#cdHnDu=Mv6O0(;UZc+&x8jf_L5OOg8t;?<<;@0J5o4>W&s$<2}HDM}Q3Nwfp zkj#yTRzFT?%rESu)7UP9VSFsD7Ap|-hP^i_DjX|zXK2d@%y;?O<0U!+Zj|M5zT>y# z_yR;PW+`_7H}TXcJwoW__qzpUBQw+R;fRb2i z_9DP&EJfI~vB9H&&;4A%^u0ENH|A(Il^>jT+M#dR7*<9SdC`GEB>!BNso(Y!c5_C} z?r`D7KwX`=;ifBDG)KP&WOWkX^2zEWKwr~;XNaYzEh2T%bA&u zK&m5)u+!pfR?T=hho%cFNx3(Rg^12rfaCi+>e1Fit608`hDj9HG-0cJ?EdcFf7-hl zOR8hq%^GzC{I>xbIROu!wfb8iu&;Q(`lKVGG7N+5!!RM`w>w}0dytyNX!v#*UH5x7 zNz^OSEt2`vx59l$&wa&RdT}qIY$q6Y9f!7N;0%>zS${|;g75lW-9s zcYzba8%la`p+gSzeU{youN}U|L2;v8@J|(rtniyv7QuX6lkeV1mz3l{dZIO2KQ5y&6cz%UE9|He`;~f~6_sNwgxAIA%V+9=m>8G^^eA~YrL=rp$zz{LE2j#wfSl`JFuisPqS)P)u{?Ct)lpRVQ|CFP`M{ zr#*~xbtx@MAV}uP6QuT-bYaoA8zfM!$2ypn$|7QYecQAXs@FlY{#3hSb4X~K4FKmD z6}8OwEEsk4jPTq4FBh@Jc~IK&vk$DgL9|RIia}0X{O3+7^7r+A9nES&SL)W}%ZMfWvYDf;alw%lrl{!HkerUNj)`#*JnzyFYcKd*@__C|=XDnQN$ z&x?V_dNu>|PFZgE;PT~><_j&#*7OpV)(u3k?3nj#l+()P0{oG8)cxD@d?WTaH+w{Q z2u6VGQaLq-=ii@sXIE8;zJax$>Odb}N*Jg;2f;?)!_~j&Wi4eL@U8{^Ef@k7!|ttA6KmS;%?T51lYE ze9@wWNf{_Y&0%H=Da+${-w!^O>eiC398uh8^+XsqzMEz`!KwmN_cYk zsf2IRqBS3|Ea=miG#qMxv0s(5PzzkZDhNZ2^*z(>zyAKjazA4%KjQAyq9FpuEKrRG z1>skc!l`&t^2YtSLu1oVD8*FG9ba|WMrhAw^>aCM5$zx%Ip&(gMy*V|4j)T?husj0 zyNve9#PZ*1v5_?$md{q09h}oD%rRvUJexkQD0>z1i5xqrDnW7?5+kBEl`PfZn2vK}KVOm8FIG;pttT41n)cHk2(qBA=MdwX6d^)!V* zBL$3JXb)&wt(BvHKR16Rx=c&cC`)z%L*cNs!^^3+9dN1{g0O1 z$c3*0d<|3=yVzgv4>p*oe@|0e0KFxAxNBH?Uyf;R(-4I{olfu6Vn`ygqb~RTHt;PQ z4U8en0H9<{x{K^~+hPvqlz3>>1DFe^GsDzFH#pt!$7W7xpTu$~n`XVm9JU_O9=w;A z_}n9kbg?h`QpRw^skr+PA$zdM*Mk<|MN11=T>t5sz9lx5^?EsF>d^;oo%@)8F{tn2>f!HtZIRXeC5Afo4bIdl-w;N9lr(Gsjlu4K zoZ+^A_@SiQcM8Ch=r7!wln zHOYwgqCOxUaC`25=d zL1*4l(r}ofWlDL+vPcycO=1|Yak=|Fv+Q=qU58wj^NU?7LwZsI^rF56n&}xFnyDLn z^jB`MN_&OuEYnJstSbiQ{hl*Hsc3F!CQTii4;<$4-HxMzQ)eT50Lm5f>tvf>w!h1{ z>N?CiU*Y!AyLW}~F?^brRV<7&nsF0~_p>LHi46yy7fU3qw9cugMEBf;nJ9?cS*YqZ<-sjyi;3{)+@uIW)UUmQ)V*VmJr?p>>ei zgEe~oE8=0{P|4d~5L@xW7(3BP=M;q=0sYixcLnO*S6FOkXMfUX(N|Jmj{dwKotQff zI(Nq<4G6Y1o_JbM72ZE0i6*pgAMisbYFqoVQ0WuX^T#(+T8(2zusXH>*wRkv#MN(- zjG>L~m{&a@mQjio%$9~YcOuY`-ix+GCV?3%==qwXYZHYpV?~sZhh?4xjqR)+AasaA zf;||Vd?6O|UofMwXWwmP*FgLfarfXo1KfCUz@lM6GXEp?lc&e?oWc|qO|;|8 z)#Z$7KkUr7CL>)*ju?MO8C-77x4w4MXD1+%arr!?%X=L@JExkJS?<2mzI)$oNA}?n ze{$shV;r56RHd=Z#3AWx%>zLgo%%5K%2Bngmpb#Z)e*TqS&wcH5q3ZQpvxKkAmo$$@%y#Xo;J6Eqoo1Z za|*kIz`frcdf@rnm*w@Wti#U;Ws+`bJR9EzGhb zhLzlk{YZTdyocsv<7^4&M=AU~lht=_L^Wc?{ZM@NR-gYSxd4gjdsSUoJ%5W>0$!Sh z%gy@tTu0#DE3S2o9|G@k-k|xf*F`7&6oz&%roN2krkg4#h%e_&-+F>v&-D)l-pG?I*!^2FY!Qx1 zJu~{N@qpdYhQ1B(c-(>ye(4*(wB1*J?)zZV>RUOj*8r^fB{jW{N6TMBO~#|&q^^+# z$5syGAE08nO8Bh9r`UdVOeitHr|mnz=HrZ%iw(=9aS}&7Dj-Ww_sw>Xsa~<$i{KHV zgWijv+mh};!_zBtS?z)isf#HBs0DZ_P((JIzu|bn1?#Jl7hnr}2{JQTli9kGU0%bF z{-@}gf(h{wp+zh2n-5R>6oV|w#r|0!7dXvbvH0o|r% zQ-*;UGTK;FC&6f@6*N%iBg*kWV6-{(d$Z2vy&$?O=VwCCgpwrS!!##vOo*G+GdsbD zj?{oA!GjcC7mc#l!?yE~q_C7SCsm&4O5e%yi#J7)k7a!V_Jwqp)dcYFsl}1h1 zIfbl={~GXI8^+$&&G8uE#vE$o**Q{V8qRF^QIl@?(1kux_ylBu)SO`rUDUQ@%6xw8 zhKTiWM|Gn1G0t3oV}K3eF}L1pHQO5WaOB?Lj80_WSv&+o%c6~#6c6f|1<2GY7io=q zfl`k+$3+-QYSlIw_>t2Im77IjUJ2Wpo}5LrUmtB?3fNU~Dqu5IsaeRLo5&}nv&(k3 z&qI&hf~ufK0J@bbv}BKMQUang^xtup_|wTYq{osdF6_R(i3F=8<5tYJCl6M~XT%iW zQST${2JofSrQEOQovB__pk8e(r}R@u&PN*i)b2m1WhxX_i*27L#N{DYE%-VHu(7pP z40cqn15tfs0;K5Pro>xuw$l|&Q5 z5w~!%h_tgjPxpQMTvl-D6BY_jkd4SX zy6t3c=p39l(e=u6a#0gQDc+~^`(Q`N(37B{^*PL|=fxmoNTwfoGFpL7p2w7}@N%K} zlG>imVXv}&?=Ig5d3VFggn^qI9<`-NUGkhLXegVm3=H+vw;K=ge&Wbojycdzk3$qk zarMx?no4+nwTsSg+=k`yi{~J-Z7neequDso8oL#>(5|-p!?xeR-P_1a?!NhPsqCKD z=fzsQI4IqNgj^m0bF?Ai_C{AHz?44}7t|E>lnmJ~|D9TzOMsrY3$H||*H5f4|LB47 zxPyqGJ_W6oW(FAM2O-h^+{1XUD1haD$%lsdP(;-PwIqwKZ`qtvtBiX3M&=MNI#i2E z0;DiMs|b53@?j?|w){CRm&+m0)OX@!a`n-05pTOY84BdU5Q)-XE!>pD{}Tm6^{&(~ zqeT^Zs>{9sKQKuUau9*ovwR3r_&mA5v$pooO2nG+0b03C1QlI*nJ(=$YCKLIvABkD zsu5cmB$Gc zF9o2R^_syjr6r`%+SIJy6$GCICx$} z*xUEeP}rhjCg;K$YA{X;>xPjG20D0#HyA#GxaWw-0jeRBzYaA(SNFEOAqC+LtQS5x z2TH9_&V%kKv6LOE$wpoPs>6s2{o^t#Pnc|E`nOi~hr(2ihaKt%kELf8L!ybt$307K zzBNfl>F*d5OUAtyMkOMF%fIYhac{Y~4~>SU@s$f9_h}CV=Sb`eW+B{elfp~osth`(N7OT=$CcIri$Jas$%}kG4Dm5hQ{RRo-SPdYn~Vb6ELAv zT2co;OK$QKp?RcF30)?#&h0)jgF@3lh^(lcVIveVCXP(4?|irz_x&_WARM2wTp#_sG5G`$hZEKs&hoUE zF1EdME`?KuO?43DkSwm|+?|5lxX5{vi_8xaVLTAM&W|s`%+5Mf*TfH!h-lyO@u@@a zHFyyW-PNn;y&M>p|qtV_!`B@Yl1=of)Jx1Ms2A9ux^il{H4_y65r> zhD)rj2n20Do{2V8W1$*?<71C%y@YqU;46bTzmmfP^Ah_>7Dxbe^b$}sPl~w$_nZ4? z_WT0);LD+jo`qG09*D7i8sRbPoP2rqv?ULIU_$@MAaq%?#@JBl``=#fKb-mQsK4Xo>G>)FI5ssOMy$2W z$MhNH7za)>YjO`@`h#+vym}Ag^#{T;qnsZE^|Jkwisd~I5$GX~ROK=G`RKhj`&e#& z)y~G5)pixAJLm~B^Ejz@l{$M!E83-Da!*Qs@XD1Z>Kc2;#HwX#ph^DW2C<0m=d$_| z`f~}oeW^H2X1GUHZO<+CP$>cEKusJ_#h%V9>rRB?Ls^}yssCfsR)Xl=fa%4X;JzP3 zG9Gg@omxsB$^9R$-aVe_|NS3-%()awQRI+{7N)pOxA-2*%2`MFK zMMTcW44V!P}>I5U5~j4Jmn; zQ5x%C7oh)lMHj?*R?Bx-M(_E;T*6_A`mcoyjM_GbvV%?Rwq#~ofVtSqzV8IzpI)9T zMCU;7T{Tz#+j8oPjRbHElY*066=+6xn(vKV(!Aepm5osS#GFp*g#maQ?^HpmL(Le@)! z1O$M^`GVbN5?IwYANc+lW{z&(yw);CiW>_?7Nl-VgF~mme&wVh81R?PBC55Ah@vO| zpW|!?U48p<-_AsnoMV?#Tp^SRng&;jpcGXx;T$okpKqbj|MgXY-qQ#_&><-5GK0rk zjC)j=vHdTv%`7GV?`Q0O-G92{uo1v7%P0Ej8^`VSPy9ffhy5nToL~*87@L<@$l<$p zLl&qw0E1EYF0vrXqx>DL2#P-WR6O+s#7}sbg17V3`Q)`zvr8e}*8_>U?$cj-{q03r zbrMm#>GQbBuS54eVMzY9P=iC~654xupRvrq;>|xl*biXcNqoT>+{#3quI&G4S18}ds9cHJtbo9oxl3{J zfj@Q%mIHR8N{fQdML1fP7x-8{F<%v%`|%&%=xYja|9o*gRk{5_tS~5Avx!or*F;22 z>69R->-3AL;N1J4FO^$3_0d>z?C3T;FLD6t=~nWsrh1q}S#tzZws*e__)i z@bJ6XMvC+kaDJL*TQ)~ffaY6F<{BRV-?~D|KBWG+_%gHVjt5pPeUdF0I2ocVl z6X-Y9XSDP=PjJI zE{fIWIYr0|2)a$BYWe<8turnD_&%^j;=j&5Sj@=xLe3G`3?|~syEkb;6#)>*@J9r~ zK=;4?B5WXDNRsZEctY;2p9Gi8&VUoM2i>is4FA3w3_$+tT*B_-QWF)5+dUd{qLTT{ z>ZI|4FYD!6BJhtR@!wW6E8D6|;DXmHeSh9vk$m<~TxxNFxgu$w5918Rjfelc@0r1w z>Goeq9^th@pZTxi%RAV*vCzmzVxX*|0gLDt{J?jyqHjw_P? z9)0XQ(9H9iEt-S`!8sz!??RqywJhesUI>3mqN!kZF@CLlkb7oxeQ>q?Mdcf{@;!wO z`@Q%NL|=h}0`*n%W%sKr5ylnTMWtdTnVz(IID*>kOUn?tjovB%L;q_i(S@bYqE9QA z5?GWVWvK`M=m>Vx3LS-5t2Ny`iRq6J@&RK99OEmF_spHD7a>Jq^lcSia#t-$?9bn_ zAN8r$A+Xg{&$8?Dod~q-kypFuTlVLl+Q0L{g!Z)f46CgfjoGu&Pvv`;J}X` zn$e-BTC_$JeOhdfZhm?Sx#_NujO)%P2Aer{3WX(_7SMBl`vl(fpe_fmRMjn2wVwXg zdyb^5N^<-jyl-VkTu2rCo9z0H)`7Rg(9ll?67T`Kbh>^^(x135BiSrLvT}0b^ zKQMt^su#`;ulV=J>zJ43%TM}l7?tc8-v-C!JUe<9&VmETq@E_cIsXklFh3eJr`s}s zFFI1(e<7t}r?wfKILhxS9B>V@^+?T5*XG-)l9u50eTYGT3^7C|OgwIFx=m;&B`J@4 zqMZHyo(<~2{lFx9FB}!%lZbw&D%7G?%kqm}5Y!IkqGYs0MK>ne@;}#=nfZKD#*$cQ z1fIf}DtpDV)FQl$s`}7-3c)P>Q_NUjC)6lA5ZJR1K@IG49fH6LJW{CCVNSZYJYwly z?$Pi$(msVC>JH>MKB4%Li;3M+H8}HBhric9+;VOB@U(5WBg@OLIKL2vc<=23PxhTl z?6l#E%u&(`!!bF&PiJ80*n28On5Pu*OQoCm98QO?|32@tk?JYj_Su zny!t|ru?k)keQOZmu8h3!=pU237D4VOEnBBfNj^vmf($dfd1&|7I-1bLpdo)mhpGf zT8<`?)pvoH7g3f!E^&j7DR*so13myZ_-hl`U@ucdsqM2LCedD+f0sY%|*b@0-V7s|r@V*-|bR33Y-eg%e+RL{jKi}r>S@tLc&CJr`dt}?(A{Zi+ z?m=MtoAKiYQUOE#gAt<0@?_fvdje#Pz?iz@P#&ow6Q|Ov+!tUTNmF6_*)S)tKje+-J>5B5);Y8fk)Z9E@vv|Cia%e$=%wfn z;gb~3J4d1M302n9P>_0^3p{NC19$voK6y1&Z)<4V)AB%m4vw-gPyjDOPSV!Xai!$+ z@3dyyn5O=*!~3F_^dcSMNJ}BEKO1_oFvW%&L`=WPXzM-(1cQHD2YfHY zHjVy3;|FqXdXZilertFmV^RIII^^S!8m$xo+ha(3!jht)KNquG4lD-pj&_eYpjZ7i zVtsngu2SK^R4GuBFs3*WtL3r!!POAgTHy8dwQ0&~YoFffVof3LeH)4xd@x9D2r`yj$7n`q_bJCot&dJw~g4% zc)__83d^EQwI1^=0aQ6R(&ZjPUV-K(SCA^|qhGSA^%iugS6f<}s6?YOfoF!(H)Vp% z0Lhw&Q%^l5224>YN~)k?0bTO2AWy2Hgk%h^Po0N?ufdQCF?_=klj_?%QL&|S-dvzd z?Vck&uKz$%q-c(Nwx|qji-zy|(A{IfJEd)-G~!;eV^r5Ru(c55c;Ui!SfBm8x`#Dl zylo|R7uS0^XIZR3jBhxS(t|xJw06}(a+&HrfdbW(6s-jGN;7T2778ebl#2cXj&pDZ z?sxuZ=o(B+b}^a3&rbJ0yHvx$AjZst^NVMqM+Jg-UuiECl6EtA6xYq)z#1ph@vI;x z|BnaY`mjqW`zeJ)$>Tc@26)hFFkjT8TRIHP-91rhYLMtR+Kfqbs7bn^EUSeco&y8K zji0LI8lUW;sqN7MZR0wXf`Pm#f`^YCbMn-^{P6G%>A}&N9Fw4<+YGq=zDWfopL4b8 z1FO?dhD^DHa<+l*Lcj7p$kZD1HrQ+d>Vlf#_#^$#3{%i$dGc9Mko;_Q2=g4}mmyvL zq2Y8q-7;&wg}@jsTy|pMu($qR$fa1?mbj;bc?8(^z>#$g@`QNsGqfpsL7EXiagPsy z4OiYVrf2KBb2BCWsTkT||5F82`6s<6c;p4=N$WNPP(vfRuG%%=Jjm=u;|Wjp@o zow@M(;=Kd!xK#P{|Iqboqw?Y8ik(3NgfaieaTa6H=4ya z=(u?D@#Y#YG(B0dXT_Evb(|mi1)|+a2fp7L_h($@7a#>(sGpwn+inxH>4MRpy>1!b z$Vo@~_nn9i*X|{5h35Rd4yB(YXYI?eVaA5lMlu&tIZYksr=Zq=$zT{6v#;C)#^v7eYKwBwzvL=B zj;)L=whyp)F^ujZXdGV;eB%j0rO0sA>Vg($;I&cy>|j+AAHknJo)4h zWon8Nwi!}g?vI}m9d3&*j*#jOYy`eFy611x)6KVsq?sLD?5ZDsW=J)%XJMai24hzH zCCFK>5}|)4fpxq^#e^F?HWA{nT_W5EtG^qL<87Rro!-mrZp4!FWU;&1jvoC33sStnCtffxW6V zC5+SSd|C;fD2wWJUNBlBvi<#jI>e1=JW3>Y(KdGbNe6$N)VspsJaH7X`MglQcUUc~ zk9FUKwM5$}lAWorjN`;6sc08#;&b(#Osp^7~lD$ZGhKbIPtAq*4!$Mq;kcEFK;+ zivNcN=-lagwZhNm-paV^k5$#q&gZs(PxudYD~>zkdV1mLzb%mTz7-}!{ya0NP^U}3&|9-=0m(ave4 zMzvyOtgo$HI6!UnspDb90~pMOMgUUFvGYs!aJ?>{**E>-Je6r^y!w3FPqpzJi-3~c z>>^0T_a7OW7on-V*VerpU?G-t)z#5*2Pam!!!TJlQBrY&{OVg|+3oPEVjvlGB)!>y zfdhY@<*Og31!KSvs>zjw<;Bo`nwl(ItE#q=oGYeP;nov6f%Lxk2wL)?P|a=GCm)h2Ho zPK2JgzX5^d2_7K_w~smVcd6AXfwszzQPUQJn^Q2y(iw`3`|FtzHV|s)iRr`3!UPXA zwy|fl-eeU^cKq7GiE)%WnUY_YcfbwafvRgUS`mF*UEG zNFV6uLkq#+Ll}(D#(XTV3^#RpraOaLfvs^m;=7424In9Y&zuU}k?E|xu@q`u@q=7I z>o6;D`E$US79;SrBsjd9U4Elt7~uu>`@acRy*J>Z*Z+!D?q_BKJ1w%UkvkbWbZGA8 zhu`$!{Vsw)UXbifk*wEc#0Ts8rAfk32(fpw^y!D6>)jB*yQ3^@$}sY@o72~EZf-hX z;x-NRFGt<`^~;dD`F%OMin<++JBNyiyEB z7)I+q^cMCqe5Q4Yc-h?$k-|2A-lX=v83#Ten`Ow8S5bn{P+ZcfEJbfXcL=~+H97#= zav6awwB(zgVtYiLPCO$9S|qcT+ZG-S^W=@@x<+b7!i!RR5bym!Wm}CieEm%k{V8)* zN;I{d6@Mv$yZQssJ5iO=ffGsJ1cscTR{!7pj&>>bJh;9-^Pe$@Ma zhGj#_^!cBXpB7$TLRpf8vfuWe+WkyDT&4GyO#34MhQiJ0`kAm`~yW^;X5r~8)3 zk0;0N9joP9SK!Uu`@mW@gm>pk@D>vx#db)5v5=xJvn?lFyZx!HL7m=^2u%MFfwUI% z@G}R`(YHuQS{M1v>KG? z^ofbihYylZrXX=)Nq)K)Qq8;%)T3A?i<&7wj4*1J}H`Cl(+6n2j+Hhgoi8|qy}-1F6&5S z{2&Ut;66c%dI8A@;dlcj;%Ic^Noa`OIX`x@N!O_3-gJ)p`dyBx{kr}gbf{>wclzxH zS2W~<&x{)$Q<3btXDg2T9JIM~n>*@RX@uZb^7XNbVF56IxY#rGRNy=60<+KWr!$mtkx1m71V|686O-4?mFrS|Z3EH^4z&DD-qg0fiWez(BIrdptyk*WAvKjI0 zwnJZktUEshUo@wgbmrEl8z~g?g7$OTx#D|c)>wt{{v4#RfIqBa@=d8aK5}y$#+`P} zNkYh$$jgGyuX@?AP5^v@qF8tY49ttjSkuZ?WKHJ-#OcRNWQ?{ zUnC)4&EM}ITdh#RkszN#Oc$HaCnypIMx>Y^1hwDCpk*M#Nl^&y+%*YT?|D2VrrI1P zvb=+s5%b6AfAG^5Y}_@g7Vi(HrDX8l4nh@rC7+TMn}?V+d&z?QbzlBizb0jY5lP*Z z{N>Pp^BYN0p7wCub>|pFUpw-)50;Gz^b#%QKEnx}*Lz#$AI^`|%VZvcQ^TKna@$V+ zUZQq{A|0Q1-~x^=jScKuC?*&7;wAs?Rk{NI?MvK5BFwOn16p#NC}Nx7_}+=69@C** z3%InsR4Kgauub6Xg%KX=*{4#p!u&5iQmnHMpMKY(+CyuUqIxte_NMTr%z3h|I12ua z*gQFWj~M%E1%dsu73iHWvd3(|kz>Pv6`wO4RNME(;;?nRXBv%iS1$86UQO5 zt~IM4_m9VS}fqe}<$n46LpsOq79Sx;g3ED%?7^J-N__!DcVC&E@gqi_I9Ah(7K z%=~IH9kZN$%$)pF-3>)=sw1P0cIA=jW)H~Te~%3&7nHvg3S(V{=b8#|!z zHXbiEUD)%amVH}V9N4Q4s$u8$sID%T*J?;U=oj4{{45xrEUvg)9BiZ+%cJuT1nO@S|;r!;>p-{aLfz3 z3142fHj9V@-^8mZ{U zH055DPWZf%!+D-`_|>g0efTiire*A#ePvmQKw5Ap+!aC~eG@x+x?eQuVl8pfd43*Y zJn)*yqV$bDIw>V^w+3*xZj%lU$(&k)S|{>aSH% z2V*)!XtN6=kcT>@_8s&(NgKel$d0z=P>vmfi*((1gubTk9ml@ZJ3!jPdVVh1Wf@VD z_ob&b#PJqqk#l)4=e^nYtTC!+YRrW|Ci^yW1yAexJsnRng*WR#|AxIqQ(*9{AO79> z$`_(j0P($P{gq{M z4kcS+6BppNfxPdw?4$w-%`Z+CFA$vb5%&;k=Q-x|D9cY5zU32B%PtX7FqWs%RmvI1 z2R@EcBoZlxd6mrNy_>?Hy@FBNZe2^$+qiccF6F%JRs?+#~Zg!9fhE{}sg#u~D zYMWBG<=}yhoX{DNH~?=}th`-kIK6iRRI}v+iybN9UIrmwFJcQbM29;EP_E%6l3q|O zWl^hsae^`q16V?S*P_+d+~(#9ONO103Kwvyz8qA45l6f42MG*fIFRJ=Y29&k{fnq) zd#d>)n5S+@6sz}WSn?&CCv+Xr*8$QSN)AA(Jue6DLid6#rJU^1f%O;3)9i-{gAeo3 znb9GaWPaqEV1}QW)x1pl&ajkYpwt)MrRenRyR82g${3hKHf0Bjx!%au(WKYjLs)ft%XHzqRVC;I}Uk2?j<=z*f$#P2A-e3@ z3J(8%x~T0GVx2y$`S}Yes3R2GiaI)aHqcTO$9LMMD(q1O*IBk1lEu)dK2x^D2hHXy zWF62zw$J~_i60})cD5mbxY9i&Xp9EGMfpxCo zp#E@Q^S>X#FqVvCpW%=r@%UT9<6QS50f>r`nle!R zXl|gmzaF%>i$~(V9v7|iM#V_pGQTB}5;CHAz0+Iqb#|yZ3+=(8&*(AYv0EJXU&+1? z+*LWSq;Zy0+--h%!<}W0dK_2;t@_wYhi?`xBRpOzX)L;1^OQShr)};*4(vmk+Vftb zPFU5PTVS6b)e>suNBcQ|)P2&+>dkNb%(@WB(4Q?yxAf~DRZb=-Z1JiKq>@;*_EYX0 zXO^3k^uWu4ulNw;Ca{RUd{VB{hrVAvR8$A!=?D|RAkpt*pK~6}ZMbJ|y}$+Z#w0Lw zr&cTBO@Y z=*o(ac~Zs}DexBWGlgOwKpLZc&c=0`9hh(jiQhirjZ*g=7XZFpk&(G)1{GI>bDdQv zIQB7+z*jrV^}-`)gTYTsdfs7GZA-86g}|WWP=kx;**h zs!5nSvl9^5wnq@r+y_C0) zoGMqiK+b6nh(x^i&2=R+Uv%k$6vGaCbdMT%9}^yGAH=^_|& zK-APG8HUWIFpq)Y#2Vbsqn;#JZS)EW&C;=eA@8@5EnWNAyM>7$p54%>_{k2_bDnyf z&I1&vw8-4~9vFJdeJKt2Oi1tv3DcysGg2ENiED#X{GM}CV1E?hf27%4nRbvMVkO1s9hUo%{W7P{c0v+Cjn-(voaAmw6*(k$TH?~!V%GC7e zfq{hQcD)Z}!aXf?iqFx=6$NPxKLuAG0Mv@13rymOIBybh_T1dfx*Xrq356qGSy~D` zEz-SO)L{7_k)?ad<7Z%VAx6SPQXf(CoO3dW7c6!3_mJG(sUD7&S^k3-&;13~P3$&q=KvBq)w524hu=8AQ?=_Mo>MjA103q;aE(H- zq91r!3P>G^wG2?#-*0R^wc$QohTWtlRPg99)I&d#34ct9=C)1;skL9TEX}8RGl3K zPnp9!2+o`y`N|VtkI#rdU;s{WSkKdwt8lQdfY}8;5Th>XPUV*ci}m_2$9$O_wx{|2 zgQ`$gJx%8o*3S_MBRY0;ECC=Fl3ZEwPc|HfVQ9B~?U!)ntv2t^4cR+F;s15dad>m* zy`x^e_N~s|z7w9ryVZ%h&Vik5gWoXskZr&AxZwjjbRB{@s{sdxPbCzlx6ylGM!Oy? zs}$t(&xixXichv}tzLXJX<+XIm~V)s3&$1q_d36YwwQx%8(uHf0p?x~?f5C7!%i}o zsX0T8y1~4b8vS?pl)_M}kgeql>`G_kuk#qa|hen+l+>KhU39<(%O!{OPoH^Gk?v`K<^@c`d<5 zHN-BUtYPV!-*M~A=x(&;d!d1F!lR~(c7f;ZqR>3X(;rwJ`Lliczr?}YpC{pa`;I(b za5p$yD-T6xK|`WhHz#J*YuUAH0nznK5{zv;Lbo|C8ryXs#?MjB8Ph1#^fAWx7lRFfBI%eEIr2jz5nU(>w$Zo4xVxTIMq)gN2< zwsso>_i-~w?E4XrXOY>+q!I4$BbZAT(Po0Z8g8d0SMu>hokcS1enUDN(eOq9#5g^> z^OAeN=X2q`HUz8BCmlFIb)&}B0NjI@)zOtq$)}EPbbg_zkfddz)EP5G3_cv46g?b8ymNC4G6Mf_ z3b83slN(GlbcO7E%gLAao(J?K)CU*B;)ipm)9`#J@_#o>PAU0LB=|XoxIOua-<$NU zXfc1`6TT%mrTnn;Y(9p2J0fgl#V2~_$;AAqK5cWqJJ~Q5KPw@lRM$=9<@$qXz_o6U zt5V;lorXLHD8z`dIbq=Njf_WwC;C&lr0OzSf0x?Qx$@|SXS~(UY2x?0iRX6hbl!bp$n(*Y+=c#qXsS&x)?4tzW+O6$m7J!s8H2@DVRKyKr}z8EyD%h{mJ z)t3ML^6OQKu`krHEwJ#kA0#HDrG zq<^@c`6Xa6K>o|CD6X+2O^R&G)Bbx70cctb>{{iMvCp2!dv^~wH6^P>L2zy5cucTO z|Fnfc2j2|XYO#+41aF)!Y-`tn7IO4{_yzwXLD59LnG7fL)FqVlOUSh+ETfHfCDukt zl2rC+F==S1K1@bbE3}7E<#u0otmuazU7$W(#ujjcY|7&S4xn};!lXQoM&*1h_ZU%A zj?)fbvZe1q_I-x@T=Jm7J|(^WNIt&RFYP{p18_Q9e;%!fJp;+7^RhW#YICGO=Se>p zrEtynq}_Im!dti3dWK=DY%a!;O(=7bSd7p z`*LF>#F+=4x^IJ`>jFFgiF+r}5fj{x`K`_)ZIXNup6B}MnVnemBZ>lHFn1J4L`g;5 zpd-Zk?CG+|#Ls&`8;<0hQk@S|F4s`jYoB_Jwj)X1(cQEv6r&AHxMj2MA^gIT5;?IG zizKPU(O>p=Q$O&Z$aIsTNcoEBH>nL{W-cQY0XYMeM`NATTsusAXorLb&EzQ z&hsv=2WQ-`KE`Do+KFx98PjWI>K@g!<$||Nm@DZ+uP&eu@&_Q^Y+3+Fsjck?B7+d~ zRKuHyd9edXAXJpQ-}gw(UjAMe(myPKQmSPOkRJZkBGX(KHXo-jOC`iSmBLNeyrL)8 zM&u;mv&TAr4(oW6e_Jo-d~e!#m?Frv73?J$y7)dk3f>fNc$vjX0Rw9=OBa}9P#Ba= zd;Pr}oE9Di$o!4y=}4l;m>Tp4YJRvi8zk#YuAZNVsXuF&gYmn3GP-V;VUM}5Rf!7m z_cx0qx5x{&yO305r0salKz{hru-GC6LmX#HWcCpGKPv%~d*Dsr4(Us6GSTY7Q)JcM z3ZPBW@DmM!5+0EDdc%s&+fTz`##LwZeZ6MSv*fNme4f}k>(hgQn|@r?t7H7UIjkE! z*Ly#$Y{G>bD1D_@TU_1k9g)Ys-^iuolMIISAZBWDJU{V>--F{VbQQUcQYF9JsTh}d zmUzXKj$+X?!u3^#H<8cawj6lhOeS8{GIudpC&J^KP-5pYa7Ts6%lCo7tAppjhAgc{ z>Xv4yx-0q&=m(`WEQC%m1f}Im%3EO8QIIg#6Sm`4y-uB*mims;?}+D<^fsPJsWxOdF>;@*|8ie_s$VW~J^EmWSVY*ONW|%cNRsKp?v$A$)oRC^4eHG^*ER+dur?2DR4tqDM66r z4QpS(w#fbx+hj4k0e~Nmpdaa5iB?P_Do7045V@D6AcT0XSy|?R{(Q*wc`XYH?)4Us zp7{O5(ESTC;!>NJ=0rEg4?=5jWrQxH&m^}vy;Z4pT)<)=s*WPHB@XYDUT?~%6AlYM z!wXL2N8|2YsW^s>dH61=pn$$3TELQz>lbWhU=j&Mr(HtOhBRj}622Fw90t=2d>d_l ztr-z)w!KSRiE-xjvQq?z*33%ZB4EUq-#a`5(xRE)}xu6EWR%@H?~&ilFv?3M7P zCs_9zbL>lN^@+lNv3+N7?6z`8(v!IJ(spb>YS;;I{Rm@np=o~8ISNkNmJb|#JF>Aw z1x@EQ5r?qUu2RDT;FR{lnERCBh^IeK&uMM8&Lp!?uF)R^nPx*XQ3e8d%FT%<4Nk!D zo2{n2ws>YIncDrS#Tl6&yv_W9o>0JWaC9tLIAGi{I<|k47WVZdrnqFZJyTzSiH6u@ zA*IuN!1r;HM=W}>=y?`vvlYDMH|UiGh&~KGU)dh=3q@p$SW+QFwB4JqKj67uY4oA=@wO67bx$_4;52_~lSbucc0E71k zSo?63Ap64~p}W*#Z&5WQ@lNr5GhUfpL~ztx-^N06KBQoTd=+J#$bpSfSk|E~5SW)p z$v3XE|6)ek47qYKWR5UnP%!3C-FAt1`#S0ET`pnJi90gX^kQ!&&nLrvW~VJsWXHR!$?ncX(h3%zZWO_9i5E6HrtZv zfND9E>OA)ph8M)cnz|=-H=PdDt{x#0PBLn}4Ak|YR!_{u)!Tl)Tg#!P3IBe1Ukmxn zq$^;r^v*nKXw|1jnn~)PM_IQwkz~$fUf9k7-Y~Y?69&@1$*be|QW>Ec_SU45Px!L; z_BfJl&`%7;lT`NSh>JR~P;9aA)`Q}$SwW`Wi^p7ZE;`z`&nH-C7(-VkbP{!a^Y7cm znZ?RZtH>eNYB%oQ-~jt??}{`m7gh8$Iq`PvWz{uAO_o`b(!{BdW3gekRxG1248tBJ z!JhAFj1Zi~X93Gea+-G=w@pT#k7V;=zP??#&yKafC5c_Jy(|Il|FfX2O2;Dh)3*%` zwi?`5DaAxRo#@QCv;mxd*KwBmD8UOO)9xE%rgWo+JJklKeBUXtTu*tnJ3rT6=MSZP z6)Zz=z22i(3C09uv`4N-9l@EGV=&U(?-su<$b=;a*jGu_K%!nU8l5FZD}aI!ubklg z*oIDfs7w`S>se)<3+yY_)NHT6v^t5g;AlYQfz&>=F>@|n@xbQQMpLJ>$(& z>!}WEY(TJ22OWmNTDZ?8tC&9Umk9=y$x2<`b0;I#)N~7)iF0L8wguQ=G2Pzqewjce%NE z*50Oejq7ZPZ&WQf;Rj8|SLm0buZ)(evH; zMX)Xwh0{AVkvOeN#7ly28$n&(e58_Z&MW?CdxDe@?CW;%V$=ErL3sqgzWs|A{q4L7 z*z`Nxje()r$76;cR*!r)=9~~znxgLpKEN?P1t->>SI2UdAXfI6%ne-Dy<%H$K;akmJ@Y*aZZHr9iz-o|t$n zp(wiT0sC7Us4^~|-(Q6{BoWIFk>P(qp4|j$o-&=f~k(tO2y<3vaG0DZ{wqW z(_w)lc2OQGM`)wfqndt9!!Q7UPcI?FWB~4c;z6*1Ks9w$TE9wV5uyF}UMd`ae6zLH zfu^#y`2`+;orUE(3sM37I+xoHd=?DsCHR{h7XqJOPIoL#@b(MNS6hT9?ie^L$pI(l zLI|Zdc>(ogFpqUNA=LgItltSsIm1pLv6!w^&i6h^J#x_a!Sp+J0wN|x#5OcKeVNPC zm61~u7@-LNxxJWAhDio>`Cla$DZ9XwEKlWo5h(ig->e4{>b@e2jeSRQAhwaXK^_WW zt}9wrL%C7aQrAgJHPo}m452xk%?D1M=y9L`eIlILs9=D%y5kBP^}}m01gReeM~thS zL(BDV!kJqr z_IunB03~!38bcdE)vxc$-+D%5tDKYE9hWinV{3G|2#u>wPn#9uH8m%f4<2rrYUP+D z@I;Va`VImv1BIkq%Qi!dMNs7U3(RP#!W2EJa?k2&U~4Hx3M@h)&9Hl2jV?sJv*H}( zNexm=bq;m%nMBE@!^+ytmurqvA2@l0bO!85eVK3k@3b55>x{nOK`avp-ofJpIreoO z;Rb%<53dC%2JP5CZ^R(-$t%F?YOfTElVa*53u$E?|A`9!Lw2b#csmqyj$PG}75G0t z<^nj*A2hjQ1`EcFP*UlziR|WVYSm;t!dLuBhy4~Btmyi`qK+^r0+hnd2Garif_hj3 zwJ=h5@eYvw5ZKb7D8ah$0uMRu>dMMk{ds)D!m&vd@9sl6JbtKw5^Bc5m&($>pVLmq{o9a~>S%`S!e zmmLgVToZ=cfPrRM!;cfIvo2l32;z<@#l)A!sx% z96Jj6RtrX1T;_Ili$2TMF*J93$_#=<%dcVebsY3gx7*UCwJ%NBt)Zt1**8+efxX4> z8!!;%0B287Y2=&6G{fO|)$*c)Y!*p{_hS=N@7>t26PDYuN z9?Z^Py~VDR9CA1zkZM>wy3|D2<}V}; zmzZLEYrMNZg8e&b6%SdL{C(M?@k&vT6#Gs<1_|T?Pp3Xc$_!dTR#w~4R>>^gF0(OOXifQOn&g*qHC2t z7qm;`f*~(QHGvwOWQ=jMcw%mmH)%nt_~?+k#H72T)n#zrQ4p|7%DYhfIQOTspL&}@&Ypy@}pbJs<8Tztu`R8$)&xP>6=PrE>YAm%Qgwj zIKSW!NI$>Rs!M4<^qFxTK9!uPdnE@4LovgF z9cr&!$=VLmJiW`l!WdG2yeQeuZ2X~z0n$M@Ib^-Nr# z&Whc6vfc9O83Z=tX_S=E5=6x;gH#CYW}~X5B}3YbU5JRxOn<0D8m1uhY~hFuyn1}e z4!NRvfoN;}86Ggv9F;h#IOvP!M*b}x!d}t&t?kN~($G6W@5llJGf|26KqON= zmqs8@tiF=5sEP^x9k}Ee?f-0&!i|OKiZzi$3R!-GE@HR_r_*pB`pMQ@K=Xqf#D$B& z0+v0vD_>scR=9F1;vI*EWNCh!;1A9-?1g3gqrRKQ)5*5_^|-fXv@ZCwok&PQyEwK` zOu%*bo-DHtOh(W?shbLnJ7v@b6&0tQZ>5ml75R=N*B`{tkB+(njki7duC5E+g{X-g zJw)Xf@-#Dkc$i`5pR)4HUZ&Y7la&lTS+ezf+uDv|6k$ZXOsIRsWZK2&(=m1y0<#f3 zg~%{m%N6B=S1v4%qAy`!#22FZ`3S1^kNR#|Y^7YjG+)Qw8w_3Tb%O;A-boFqhR{20 z!nak=mzfa9W#pX1BZ-`Bq{(YzjP;l!%T~NvpAaVw?aR%PVoFd7{=|nYBo60a91!caDYT12wI3a3`~~ng590?qWBA)N2TAyNjjxRH&Af_V?`^J$>JEyjVE! z8D@MAjVTuKe5wlVjme@I;Cnye>k6O~@bOL8Mwwl)5387IeZ}W1P2YuxC?bG4-!=sJ zDhA%CVC>3t(VLftjzo72PNBrHH+KO({a_LQ#da893u@Yu)!T-z+YghOA4?lxTAxY$ z0EZ2%L%h>uifu}@QL1~`L{Kv;SCt$+w|_a;@#Qz4ds=+1S9Z!2=70>#hViN z#Q#?;yOf5;Ozgb-T}BjLn1A4LAJsZvi?#rcrxP>3iqv!^6_lWrhbV4dQ+OVcW$Nug zRUuGw2%M5r6NxJ~gh1OOl^Cy($wP;5yx9xx+-xAzPhS|1KA=#<%gkPNiH_I!LEHwt zU2GCeK&4bWtmZJwyAup1)c37WHiLmhcz-qU2`XTeS;At-+;l-p-cc&mC>WYa(vlE< zmPL6CBbx7@%ZU1yO_Hp|KwYy#3O?ptSzzL(djwjX z6)LZz2#dqT7Q`NcKllc1dUHRqN2a!;D-OQ?FZ&ndR+=H=`BcC0^B&VJ0l(h#=~9wo zL$~L^CuMI*+7~|QWs8nZs1Jir2m2CC6ddaYBX$AgZVo`_Ud+>dj>3A84WVAq|0~cI@g2)NTM!^p z5K@`URxqT>eNwl?B7N|z>m@4+oe!xAkIgRNJuj($Rr|zH|GwoWZ@oJw{+`5y2P`Rm zd`+vKR{ZSkEzF>=N520H(EartX1S58zI${|+bSJ}LTl~lCcI$U!^R(fYKfaMPzj3# zA0?7{n7W)ounW^0zcbF!=9Y$6H45_g$ir`b9Df~*TNrD6K6&_!WY7msI@=0jzo>y8 zXh9Ht`=d##w01Rks?i- za)@zeau}o37CNkKir5kx!i>TiCZpEMtYsW)7{+0vFb%QBIE{I)X9jO=-(USPkNbJ< z`@W99>-t^!!-y58AS&Situ``{AH0JbbrYN_qxY5&o7%f=;)U%k!8P__N&tSYuiz%C|-gmRenfoOr`xIN>6>p=qfT`BR9S#UY7^Gi%D=t`XU_s-l|-7 z5K;6$cZ5K#0n_a36C9-(M}-1BSx%Gsm5_drdTihUb1MA#cQ6>U#Wo@RY6$afF0P2K zaQFrfZFgsU27FcpKo%F54TWW6&2__Lhbrb{rF;#mgm%gO_E_?e!T0gzo>oI}wzgvr zha*Tl-C(>t1UNQnOib$~tnH4_0Q!*XftktU3g2=YUR-Sr6<*Rpo&|#~i8FvMkZyWU z%f=3siNEabS+?c-%wF|xbK0RJi&E;xM~t6Pq&k6F)jB<#Dc-dhc%I>d%*Ft`CG1CPJ@yI3)c6%X77U zpS;8n4?ZCDm#O$#ycj+>+1+*m8=ZP8D${x_se6G6B{YYz9C^g88g=^1>(7{vL-HYr zh;{0TIn;mSbLS0fznv~*KxywG2h-|JE;%(iD72xs*bS6={prwn{*lDY_T8TPoNex- zkX3bYY8~6%=f>kV7P)WF4XcZUf0bO$%uESOeI|%9-F=hqrvTH@)KtKFPD7KZDEWMZ zG8TGPIw!CEbMuU==? zDaKJ-o2={q#!vBo?t-Qf;+qcE`M#mweey%ya!H4_{i>GS(GwD#n#-014aDM=5@r$)>ok8Zp3g&e{_;og1v` zBW;$p6L5PU3MXCReSbw;DnUDl8D;M6y`-meoROglEcBb~mFf-FB@#B%*bnfu*2Bd8)>htXy%ws$?YK z@}EpI>B{N8?nY*mbfs*+c9VHi_xj2&3>00V{i;Wl!0@h~puhRKDHe~@ya1ZJ$M?|v z!;_jY_T%^RiGW-}bM5rxObicdaLu+G%2>stgqv5;Hx>TfQGks*Wu&>?aO_oSN_q$D z;>gPYy^y{3Z&fNQb7(L^2TSj@9biAd{vta=7;&D;eyn?tg%p!>o%iZP6Kq>#2IJse z;kZdsscIlj`$Co!WKDKH67-^G?)X{eo{68%FDBZ#s(pv?`7S@woBH^>rt*v_Y)T|krU-L^Ra)^n;(V!%QX>FYo>9`bXp66{>7fOUSg=I?s3ii$jmt~)M1p=d!epl= z9dOeQ0cvoRBMi3u_c}mg&g?m!1JS6NW9+9tv!L+<3-BsLlGoRu)*T{p6nPaVkRQKq z3B3VMoF@c^sJMQBLV;#%lBg>j1X_5(#G>J@bjzMkR{voQqCbi;?Dv9D!o~p)T-*oo zkc4Y~yu=2iz0jaF;AS~l3Oc&?grUi}_|->(8(c6}kJHbrMEI&*ETHiQ;b@fy%8LeD zH6TVi=l6YyabiYi>q6C@Z-B^$cHB$#-9xiDAaQ+kU(k)#9-!BX_W}~=8n-PWZlQAm zxfTdG#K$4Gd>qhu+rz*2#2CVorUjg(^FT)duUFd!Zb1=3(_K0zmGoTl5k#iJ&gMH9 z#`zv}&&v52V1TM-@n|HlYR5WYbqk~8eK3&A1G-bUQlgmvPbDFJ5Q{(L+=TvU`iX&w z1wh&#p!f)S9LmclTCWa6BGQ3s-qgt~M7RR!7Qi1RpLw+QYu7}i_N=j)HjMtoDI)_l z%E*E3LII6hB8YZy*M$K{a{{UHucJL7hq#cAOarE&i+qX4DQ{_A5~lw^)Bg7*=xmMr z@OWW#+&PegPrmfN7ctqs60(s$l$W=@yj_s3ZIGvm?`YAQeJmdT+l<6RiY4{VvQ|j= z{~y0}-zg+0DpbM{`uK6MRt`^(pK(zm{tA)p!)&O9+7)y$ z=sF1FGL$JI-S{NYg(-~ZksMJY@LG*Vx~kV|oq6?Qa;B3AB@AR9f>q(%eza_@mAok8 ze?a{avNfJgq$qZOw$ce@&Ky|;2mpZ7FsKTGHSt9*KLmYP<{YdJrBP$Lsaq>VsF>_Yegd2$ z5G%1%s4q!{zLXU(Q9Qf{=v>R7EJl9gJ3kqKkN&ls%cvhKZxC8-&nV32axfuS(wy6Q zzS+}Im>cxrK6h)~-AR~8V94Y?+$PIBLREmc!no+Er4&H)H zPh^Z*v_Z*e0TT2DB0MPjoySiM41{j5D2jLnTYs{n5A0LevOWC3J}vL+Vq>stf*L8D zPl77X{}wu0>*RU`sjdGUK`}QutB}k#x6=cL$zIt7A{rzU;k-B;`VUA%L5emwDRJ^5 zK8G*W2xa?HoG_urrYww5)Pz6Gua*pHk(}p}=pUusuVUO;-{Y68N^kER`|Sw{+&m1p z5DU2NqGv{mL*|WoXbS<_sgPP$j*t%hf6oN{U<<7p07jIUm}WhD?CK&i`apy7mNaN^ z@)p;IeSo1co%?Y9UZ@R8&@-wku?(}D@(^)lT&wCyfQ*Z$?4kZl{B5_>O|Hxr z-`IEKn1i(gjI&(l5ZJ%teQsk@+-JZn9~T+PE&hQ|VA1a1rr7LIv@Kt3n-qsqk6*Hg zmq%tQW3MpI5aZ{-Q%YPDfV>)Am23C;gCHYcBuH)-+4V>jq$bX0Q5KNvk7T3(h6cz3 z{U#(X`;k*{`yg21E!T9BJK%ZxScPlI$jKi;`4PFy#MMF)fFUW`!=bVxcS=l)+MLm% zN7%3L+f6xm$wQj|tU!>2pvhYRXKWZYu~gf-Odx$Y^r1%LJETZ}a|8MS|QOOFn7u_H#m6)l3NNM7FcNO0^&(RTVPXL`;@?B|YS z>TsU!nvytu`2{p?@3|btJLpgrwU{Ji^fKvt7q5ExH5pxdPm95Rixtf=R~f;sU93Bc zW7d|Q8ORJO+WD*r{b literal 0 HcmV?d00001 diff --git a/build/trayTemplate.png b/build/trayTemplate.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8352bfc1e38d3516597f50496bf43671532aee GIT binary patch literal 38126 zcmeFadsI!^`!GKD-rc3BgMD-*B2rsIQOdQXTp|k9ic^YWlkU+<=pdCNx(K@&B+mGKm3X^&*aF$%waK&eZhHpS#jkojwyvbH-z3@h&U#91`LC0| z@+ZDOe#G|A^S7Sm{u2@rd1~clkDC|I>MIQN=e2e|>8e}yyOUj>|FBof*2k9{#QUG( zuMF#Vet!C4(&+xT&*mQfb)@9Tfnz?0p&^tXtcG(cKRx-mNQ?Qc2M8tMG5@aGfi9R9#`%}0w9zE8^g-yZ&9*0b$Ud*AmnlQ2%!ARA+bunttefVT zt+eP_N5~)(1)dP4_$uFkY7ZKLa8EaY%qd*VO#;`D*Nv5qL=D z>23Qq8kZpSc06>wnVFlM-KjsIbjNcCMvAa*n?H5WR76=oibj=XT{S4JmU3?UG36Z} zdZ`3+#ru74jcz&EAdw;9A#yWqj)XClEp&INnc`o4Mb*ZC$^C_>1@Zu4LFn@jJG4TF z`(xl_(XQHGs`hSZL1@u3B!d=BYR-=;s&Ou#Urp1hc`iCkX2VuK5^4Y|gyG4)s$0G8 z85HgJ9|dotcQtn2{Hc#$?cMN#hZK{LB2uiJ$u}&;eJHw7cgB>dKQ#DLk;ocjhLrh+ zMStpkxT%P{iHlp$`uu*wNFME<3o}QLYhHh>!E9h_(2b{Zxc~kIuZTO_BE9%ib9hKS z8DOhh*L=PiWmj4{Ny>$WaImG?_|G@88?G$jlY(I+kJQ}t{4)!E>(+U*715Wa0D9JO zUzhv39Z#iPFXPux^~H^fP&zNxPs&$FBW zY9bl_x^juCf6$61d+K5!D9W#1fx(?jug5#k=EI(U*p_vXW}!;%7Y6 z7Y8W!QETj2c9`fthN+~1jXgGM!Co&$JMZsWgx{gW#%>8QdZ`ugP6WJ@wWGYW`pV3; z`znXvZqa%>)v{f}CSAzBg{Wyt^Bd!Q<1_Jxh6U5u-oIeryRym0=8_Uh(1QUU7o4|e z9klCk{}sQCs>CasHu@?QBhgHtv}{q{-|rl}=NZ0cNYTqvnEVGy7!L30UiAs_nrFCL zordbWDn3YUts6=(!CjYpLhdL|j-~;&?TWUWT-J=p1H(xkVU$%sw|b{4T@@kQC_w+* z%j^Qm0n-x`75QvPClFip@1HtKD}G-NFF->JT4v!ai343CF-Zi~dT| z!O%#T=k8lKsP4ZcK#S(#mjW}I-kH(!nCwkAD!LH2Re)qbvgF(?5r*+@kB8$v>c*S6 zUQcrsG+!49C`s0q=+!s8LN8$}K;)Q<8#710pM(ekWG0N7(ere#i@_s(w)67FOwCJP z`(Qp9OMrS#l|fyY>X%q?gKm$u#_bPH*EHVN_to5Eh=HPw{v-B?koplITDDue=O$iF zfy?=4l9U@V;R8WRx?oL%qOg7CAa@UmEkO=nmUhtQMPy%_H%x}s-ISRhFP~E$(?g>q z3Rp8nPGA{xN($|~B3~HiwZ|}EOds84`RC;_=gzj<{h!96oi+kRbW+cC?a0Q!Q6~(I z==nR$*PIzHLn?u-XXMQ2`Fy!-Vd6r%hw`UqQvyHI;mOjlGsVF7n0>Gs>cA#yW>bDg zzA#_@E^XZ?cST9s&?exT74&@=*PO3k5^3Z>!?Nsd8Mc>4cX+1`EnI)x39lT%0NT^a zO5^M`P>1R=KH9C_oIkP3xNv=B2d&E}GE?98W&SyXmC~q>lo6uBOF&(NL*gN$L-gxp zgHwFaX&RrQFlXPA^4@&)_D8E|RYJupSak`+Vk-J4dD%wQP$pILY^A;e1(QgE56{t%E#Wk2lQs z*8H1(jog+#UrmuZkMSe3yHcG3c51ME=$Pi<8No~VWvB@0T6lfc zXN$@jhW$~G9TH#arTQVUF({)|obT4xE--?z0JPB|@|ZQUa+g-2j$}=axyGS#|Jo$q zP2*LlPk@PuXmSjV1o5;kK4=THx`B$RFE78NaFtOFk)NOA0V(lvPz-hJ^4^7}g?m|B zv2}K6T5?CtQ5wmPK>{&qs-_p!}5asX`o%edyywb9Gm8krY|t%x^O-NSnqIl>y5KQJwtRN}`92B|qD=Iw|S z4@Wzf3KT6%9!0d~?FbBH7+lzFXY<|%RsPBolF|PpkHV6n<2WL<^7J~N!em=vvYpz^ z>-QaF42as=Vzg)EnM^P$2x(rS|O+4e`<8RSuIAb1B2^Z|kiVP)EEakScYkwCbR4Ia#mSbI?pS}!iK(1W^~M3JYd%6gXc5aN+c#@Xe9LxhFIcQsFccLoMlzDw zJIb{l-C&{u>2}*juRswEEQF59rp;+fJ95jsXxxxusZU~N+|ya8=Mbp9z_fYNjC$6g zp#7Jk?c~yw&;VqOl`6X#yi<2y5y}mU8Ge+F>H% zb=~>6IvL6qv?G(VyRxWZiXt_DpwH>vwDD4cvOP#q6vVnJs!aYaIywOfY?D}npib{4 z$i=E8Pj?ARu|x}69;!ggVy@)`9)nw~xRyvf29g!sg=`Bkd7g+m59l1_(8*98BP5KZ z;LTwyivxdw78PiDqRO^Z9|Dwv0p*L0*qiNQSep^^Qg3{K0p$s1eeRg=?iJDLOh?L) z^th)bbYerq?I>?W1*!eyu?rAd;f*}z*ca&dfyls%lxHy!XW#D_gM=FaMu(@Aq_W(ofx~h6Lc~6c?4>IcPUX$^I*}0gyb%?`7t465Pp> zU~&^UqIh~9*KT{c`pqY#eiA8)cbYZ_G@1-$u)6Q@s;&#EAA|N)jp6TZs*hqUiE?z# z3Ydeej`Ahek0L6AF8;*?qJ)EQ?QKpAByvE-IqXV$>{-8yZ13ilb>a+1)1J_>DBP z2Ui|_8p8n7-f+zRn-G};(}SP1?eJc$HHEQeH1>u2sSDs`-zC6W?+&a7gT3wig&pPB2Yq>mPx_7v|ICqp7dOJ%a?_&-n?WK; ztu3pyPo_eipCW*_CP1{`5h|Y^!ys3^)VV3h#!CZ*KxX#NCNrJ&v8a0Kh!eAQ$pWy& zkWw7kSnd-u(|5ewIh-C}y(CEc(uT}$o@_wL$n%i4&s4aiL|OqCKC})BGcdpD+WVE| zuTH9Vc!JfRI~E!1F=68f28E2%RYvi=4r_?oF@N|%A~~OFw+sN;%;aV0fRb;*jy#>S zIa}^_ z-Wf0xq`0mg!<+pCF#UTL+YdNfntaAYAr@N zMcRM_E>?ubbHfy^HE^4ov`UBF;4qPc<36d-NExBT^~xMJ8cvIXwvfx8se`rIW@#e*n05sQ`rUptY)4YK0C`D9sNyO#dcM1$JW(a4lGaKq_4D@z_X2(5hkQ$_j55%a^~`z zRA8Vfpu8uGS!*CF;A&~|`M4K6+x;*)A-QvqdsMgnBS827*pliWzSkaY*MPK}y|MHnogJJVv*v|E=H_x~V8tROW!cs!l@;fUIv$a+H zm9nDEfYs+eD}bVwlH?A!X(SSS*t( zfcl1UK?=;Ue(@+-9azdOTEv0+f@Whr5Yj7IUIfa}5o+5L@6yytkcyxi>-9zGn;`-#i7kz{!mMg8tch97xg`u5m4 z79G0P8d{;idz}mMNa-p}CM^nt$)pDP`Q({i>QTsD1d58uUzsH`GP!*D&8sN_p)pS= zEF8tEj(U|lih#ha=vdyHrS8h|&?Fo3Z#xtLwD14O1~W8Y(xxP13lPCgPAYL`$Vc-( z8K-6`5n_~TuxE1dhPHBTw!XKH={K!Q^H2(=>6ZJr>0Gm4JDHI={Et^E%#m(nA z`OCEGrtTa`r2x6%u+--=bhLl-tGf3*!B`|H?i|bDK#mC+L8X9~7SMXjl1s(1ny$D9 zcz)cS!#8K5?{JC$u)K%=1G$`~dgeokVL*rFKmV=>(ESZ7+Io)j6d@H?EIGsix&Mz5 zITs?446N>sHL#(Gyb+WH@j|=`Bq3xMVJPa!LS%J;Cj%qjWDUlasK>KXzZjF}Ai`Qf zF?K)4h^Xgh3pxe3xE9^MkezGe*Gc3#2<*`l|2x;zb@8T)q1bMsFjOR7U&`UNb%nIwL@?M`9rrgl}w7G$+iT1EXp7aPJvrjYLD@YIuKgeIrBSJVD6BhP^aTKxg5dbThO z#k&nB?Sn^CcR`jq5B?*CG><2B(tKH{ES7xYq@Z_GMn0NS7-zC4xl^mrk)2*Nz10Xz z%MZzdyHL_^elu>)KGyXSNlAHB6;iT6GD;QS*m#_fU5b<*0hE+v-=kmq*j7?6Q$}71 zlu!Ld5KHUImwlqTT5a`Mq^N#;kTm5snR*i3w}7rqvMz@(IJGuHD)Lhp-y{y}f%<9< zgcO}eAlp}$%f6#vkdG1+1vFr7j$jSp8n;Wo^G?}S*90DlT2eEvuxE4IkDAQu12TmA z)<@l)nJ5^7qwMm+EMwP21EBKcZsWP}FB|v022&9QeVpA~RW0R~lqp}b>SGa4sJSIp zf}{uudK7=e!E_Gr#j-o;e*6%_rwDn*bw7di>_I!7-poo{C6Sb2zo+y!2D&(OQVAw@ zXRA+8_*Y$oB(jfYx43)1cH4cxPW!&Xc(NEcu4IX1f<5{nd#hBf2i4b1^*P{lymz|s zpGbXP)$8E11tY#eW@0|sbzD+Y{4y~6%99n1sjs%dzcf76Hb7DM_e*?oPT%Un(lDiz znalX^YOd3xnqF?W4gq?Wy}@rMo~x%DO=zrWcHeEdQWiPy*d%8Tfz7(Ph6#wS-)(2#yQ#{h<7Sx;%1G}-!8%CLzZPPOWx&8}V8ieBHjfoz z(v2!gPj7OcBZF$bO(*N*D9dH9YcFDFwX@_p_*P+*>{ZbO_qyYk1fO94b~wSnye?U{cA##5Fw8vewW2177GP zcnFQj%54|8eB}J-Zlj!1y9eJ8FHBlTaJ)Hvy@X- z@Z(D67acA5KSlyLk)W8T0l zvH-Z)R{cble%*Xxd~r^r$>h$dDD5u|ot+DiOs=mc-DPR``j~ZkhKhW`$bhIy*tU6B zo=JD0U?}3Rj6Q1QhoVl;Ui8jdf!Jo+ywH@f)|19X!LSfc37QFoi-D?0i&u66zSPWPFS{H}uYtCRG+RIK`r(B_AmoKiQm(=} z2~YI3p;24*@a}ummk<96PT>1&X1Pubdp)eI(uzUBMISANs1K5-7zJ2AXNjVNiB4 zEPVrL-HzC61zKIwS;D`g74I(UIw#86FRNPYs zQ((-eDT3-m09eifTntrAy^<1SVo);?FHR-fS=|;b9Ob@MAPKyT{DE6BI)3u>B&u;3 z;T)q@WD@Pl$Dlq;gsqrb-FP;n|8$h za_Og8NNI^c@dIQO{>{ZqTJA9}b*Dr0TY*FjNW&XY8a8}%gUQ^8t#xsi1QOB6#;rFM zaN#&Z?V}+x{d@@GrY|Tvmx|oBKx(2^>sl?7~9NjIiiGHPy+Nz*c}(1;0P|^^9dai!(f#>{Xh-En|q)9`FvoRQf3deOdBADI1oOHJ$YU03Ne1 zg}DnoF*@6^ zZJQuP3veDzhJR#BKa$BlL&{3fyHi^4i;vr*bq{gIrv7qq&I_%4<@iLltH_Sw*9adTw;PL)B=C#f!)( zz-j-`i%h#koc-o|hHDA(TJMcH-e8E?IP}6pRd|K-a+^xN;r(=|`mn>#NXxvNJAzsU z%HlsTnQ6@KoP%;ZPov$Cb!DGh&1_jz+tl#Ez2q0Ni2Xk zhDCjbApwE44;*BO9;L`12?}R-4x2<=A}jCO^WJNFOYc?izl5^+w$jj}BpRWp46DVtGX;|2j+uKKpgDQUU-Ycx z(b{%?rUr`7^pLlbBP1qTkPpE_-5D@O206b{bNND(txVWP<(;)gIRc51%j-xTfbqtI z9*UCPlG2>}c9GTh&3B$y z6K0w^RFV=j6&g=P8n(Y34U*h*e0*dr|Eq;8_3QDsQdioGdH!U$;JEA)_SHbC($`%d z#fmCo-7WFr1W21Rj|pk09SQ0YQs^`ZO{x?#Pt1EmfyC?t@56YKVJtbp$gax&j<+oJ zK0jYs7EsFI;I5CJ%P$`Tb4hVa{wxeH#uf=8eHgDnHRL)q`J-fyX=K6RsJ&@kum3Wf zDL{e7!2dGSV0vomLdR~DeE;=$b!{@dIP`Z0pVRlckjdi;nT&YEKt!jijqUPuVz>u@6{xhm+HBoq;>+ugOruOWXM`dfb#@B>hmi*#dO?_d$SNF+8+>!64qRm5^jC zpOG4JeCdzSsNsWeZk0je;e#}_{*TUs!0Z367gSk*EPc-h)WI{fJQczYLKlkc7{5BJ^~S8HN8HhmiIlJY<Flp#1s&A`2ePY-ot5#+ zl5_OS9eo9Kp^S222GrHrRejlt2jJum{$JAjS}Bj-&7xQsr?N}?HYcS)b^?zQJt@`c zYyKy_aP1%%ICHkf2Tij(%6u5Hw4(~=#8*BBCl*cVtTndFq0>r}1AywB!?pLGKQ{Vt z`$q^A8|P$&EWN$^!#np=&DW2YZk>K(VQ#RnCY z&4!gCTIO}CIlb|7o_nEF(`FPZb3CNR|4wL5S%?+>u3r4Wm@GK1<+Z(eI!JP<_J_&9 zOZOQ9iTkVQymq%59y$%_X2&qTu)2K$B#bZpe|JS>*YB=m{N~KE)42ZDrv;f<@-p}+ z=E{as%@&HEhIHKAd*xEfW4|f3!&D)>98cejQ2B82Hmbej3P61Nnd2KrXy0>kOUFt`auEE(^NweKVUXR_w=%vF`un zXCAZLgv``n;cZg;+^pg{yUgg&$16UwZOuW2qZtrX3oM+)ryd)sv8b%=TbGgRP^M3EGzqqKZi>yJ`XKS$9%51BzV&#JgwwP^+^TI&@4aly*9@3_&zt5)tPTc3&OR|_4<>;eNAGy_VO(jOv8K0$ zDCL5r=3Zt`@i$-}OgsN=IV%!Uihd{5b5v2jCUhaoJ@h(ePTNZc1YL5WN(y!;(x0dp z(*TH~HFR&_*MY}%8ZJ58fAbO+rcV2@Mm7ABoIadTB$YijV??;s@aiZcRqnXz-H8$J z6^};~o5woN+Ecgn=*=mKXtbr^VokqU^D{T8KPLX&*iV;kG7^W-5{iXwNI+&ro&v@x zC5SG-;C~`}dJBm1V7`(zUPd$JL@i#!qe?TH7_*OsaZl-8?ZJkPxEtv))O-Da+5s?B znqk)~t4=HYJ2sM`JisEK0e*fA&EATFDXGu!0Q8h$Mtj{cd-!Gyp4dn9M>N7sF?Fz| zja$&u?L6orZ{=y!4f!+#xBSz{$F;L9exsC+S~=qubmif|>~}>)_N3DIWO&kyI-aJ~e)SMt zyUNhih0nr}vw&OZd9-zWX}(a~)?+?s ztFb>f(USUYMe!T@?>#!CRIOo#ta9dO#xYugSyv84rW-O=KZ9ml<=N3q(U>ao01Y7P zx8&L1METvRao=$(N}#t_Ehp!Sn7`vyr+-ta&$-`oX=+mwn70ZtaA4C6+ zW})3Sp@&Cu!z&T}`}<|K-;>_UB`-1jMRs(75x)Cj8L|lc6P%%tw*QU}=0wW&3jB4) zDgSBtYyKWZxA+-Q@ZXM90~W#oM)VW>0=L=dUH^*~wWTgSNHn@Rx-QeQ?ocO>F=eb)w+=(+wm8Ac<@dZZ%1ufwxw%WvNH&J3jGrdqQoa!lBLgv zwma)J8sG`h$fcOk8Tt*W@l!+Z(2kNk7B~`m^#6*iFBr!B5y6%QtbmrgomufP8WU+|#X+ipP6cZCh5it4d zPOr9ix0uo`F_URBD%a>=Wpf9dH$1wuugp55R%fS|O4}{^Iu`5w?JJ+2mI@2mzsOW# z+SD0aK+|Z|PIhG_i9BeJY@)?>Pte8?Oq98w^vfn!IVmRN&;s>ER;bCic8rMKj8>p> z+Tn{%4~{-bj}BzJ4d`w$hsh{Kw5Tsjr&+po6{H_|9hiZnZ|Q0XGA#Qi7fqDXNRsNVg1pb%mVIvg!PB> zeW;K28^3XG0=d$v`5Wsv$-^}GwVN38A+OS)(>Jq35PZz$$|Uf;#T|n-iTr7$nezVc z`j#b3CXqnPGAo6307z*Zrq19Y<9v`69rNNj13(_MY|F25!#(KX<$tlmC(y33{LB!R zq-5Irn544)7nw}OXo(eA*_x=~pQ0R2&%}$cZzBvi28nt2x5SYhetRPQcGTc-H@bTm zH@p(|4Zs0#I&Tc$F2QHP&spO|qiJ0IFR@}L_ha8j+OZ}OOJ^T}Hk=k)|Bb)V?7ODa z4l-rUm(-`3KIe`+OW!yeBo_!QH{ggz6buT1hli7XMvUrH8?bT{&fIY7UIGMFzT-ZQ zJB|~vsu8^`ModU`yvC86!Kc9o-Ctt3?J*seQN~Ej0mtLY#UU$f7?+0}<+1)|DAsmB zve3qSthbuhr8|dxt=iW!$Dt69ZMAvG(uHNMHjQZ%hZ-uvKFLy(?Ul&mnYCqEsx!i| z>#oe^5TjOOEIf}g29FXRU{9Y_!s^6_yI8F~t!Cz*fDdbdr(j&a;TLY_Z*TKdbgiQk zDEQ7A3vc}klYlQP^&02UEyac(cKN)R6|to%=Lq?M`15O_H*6)Y0+A+ z{7RXM=}SoC%%GA^kG)x2MWg9=AG2s%(w{5!WaiZuus#x*;_po*M;Y(0!o)30O&p7; zh?>CPUAZ@n@H8*j^aqXG1a6MJ#cCTGQjY`OmYr%WQp8m3BCZ@@rNji-E8*Nv5!OA& z+!~JlL)fbmT;4$0U|l7=I95NxSpfA%=wSYbGDc%$j;H+V7BiM&t$E;`JUdq}HJ=T? zR4`6JEmyNhk*-*T54ijTNtCf##&RYrS&WH}<&Y$Fu#QYgXDt|2-^H3Xg`?QE2~&La zKi-X$$24c1<=mA7VI&QF{%8J&s^PEA5V?fQp^%uCS3H+;A(1McxA`~5*P;X*4oTnl zY=(x!v;>z9Iz`D|JZthnmbDUn`sX~(vyjuUafvQ)W=~GTPFBQO7xfp`C6m>I!)etM zUmP4RgZr!5gaxJOVUoT+;aJA#UfM;DN1iy+lRm8A&|^GT#^OQXQW&?;OB{o=kKk{H zi}HT0o6IaBQ0xJ0?EiX(ad=HZf)K;y6iIS%F! zXvhXoPr{sYj%efq@C&3Lr*HZ=5g=X-8kl}E1V_@H%VWWH3#c01_4v+y)#ym)9$+9_$?QB>^j?*xl9fPu_u44||VdEz1*@LHr zkj=brhMgDrb;DO70i+<&KkrU=%1YTqn8z%6RvUY4n4*S{()W4pcEXY$&Vb*jB%RYk;MfMbRN6qo@CZo$lowpMVu#$ zjfIJ{|K1wd&b|K67k%(~TWBF)XTFj^Cw1MkJYDhW)OeVNfGYBTsdGHTEWBu7Bqv{ku@`mnKCj^tbmlToVn0e(%74TVVZ5B_RwRd`x+y-98Z$4 z6UrX+)aWn&2cM?>&}^GYN)eB@#fL+MM-U89j@5X1D>49fTl2`Z3b%c+3lP(Vq4 z3FohoBVJbP7YDv~S9E16K@ii+U_o^AyC{DYvt|eTz)Oh->1uU(_K#SHLLCIn(>_h7 zTwCcCI>a2n^kHby>|Cy@xCUsmR2q~tIRV~D@!@bGWFfPxG~kp~gww#vQ-g*~XLX)~ zgqo0`+MW>{-6pXxTI|I6xDWnX5O!pM6bJarOJ7iAgNCX%PqskR$%s5HAPsx-hLfp* zzar``h)BHqbW=1Wiq!5lKHJqZ3sm|Tn$aT5V;8Dc!hu7dLwi1l@hGjsMZ|Ie`a`Yo z?T>(jxqN?NVRzTB7T&ndm3#_NB1RT>t2A_va7G;uul7ijPq8zjgBT(#{j)MLk z^Zp+))B*#F^1#}a-_qf70KR2f8JsWb*3~TRMvf;&D~HMQEjRCa>pIkR0N8?)3eo9L z5f@)B6$?;vM~`_)YkjRW6}DPMfLFx}GumNW8S6TQf#g z8;&*cZZK5OR~sk~=?|11g6u~(+eUW3{Uq}GW`@XD)v^&&_HUc_9VIk*^o;qijEBTy zVw$VMM%TT)x9teObn1Nra1t&(d`pjwJw~CuZh>LS^+Uva>%VU}{i#@HKup2Xgg6^h z+FVHGll-qTw>L``F_WWv%PQvN0&R!O`QXud_jrj8F1Wf zGps05zSN?@O##aEBa1o7y|IJd%D9rAM%QAx*1LMXhRixh zYrR)Qc3)1l8R-CijB*W6#v`qT()iXCxHCym6NLp}iS;Qhwd_HcX8HhP}uD zF65?+e+wljln$PY?61Y)Wl9kKsPIbCE>ZPaEh*}B|1B21yA@){*$>rs%442m%{fJf zo{yl-li(Fcb8r?PF3<&9AeJt%K{Gs;z_8iJ`agdOu^Bu&`!LmR`Ug`^q5nxf1GQtH z^VqjCkM?w!h<$#721alUv4nre;yjIcezFhq;io=fF8nkwV1ngOj{{uz>4LFA{0tnx z1TJv=UuMYnI|_J4$Uf+D67z5Dp{P^e3d88_c`#PI_R6r}LcQ_e--R+}T>TbOP5OC^ z^UVRgBE}EBMEhS}`_62y;}i%|j_S8-*i6D0f28sK`xg2|gcv}0t&SfOS6PX$|2a0K zuDidJ9gcUN$l~?Pk{ngy4-C|s+}Tb$jFj6orXY?yak*cqlfxJ~DgWu{lm{%Z@ndpf zG=(=KOrl^I{fvgK4N}mx%aH!y0g%CEIEk1`m^|@k14{JP5DdqiMBaB){h^h4+a!jD zR}HlfZ+Zg~Hyh)9=13r*fWD~-S`1+8xCYYA4|FC84b(z79y!mIPvqg#Y~Yc6*^Ja6 zd6SsDWf2oYX{H+T%8b%Z$oLuZBw1J1-~=4cXIrnpo@1w?KUBP>e3=YtAB zqqf@E5SLpA2|*^X9sU6l&99%>B3N0vOvW)d5CUfY-otGCq9zAHHB|5OLpP_6Om;_Sg@87Pqe{W_KOB4ggTyOw@Y(M7xvf@q0GvE(^ z{L^_EMOqBY2+iquuPx(5l8VWnes8-CS+N8%&FhAe#i49fucULycl!0t7ysF3cLQkG!@Ylbk^&>^t< zxAk>L=^+M4Pj((^gA*;=D&mJ!<}@b;jb_?ibCe`5aCFK*=pFPug=J&UW&48`Pa{L% zw3m>}t_D6RO`hC+(xZv>M?DkjM^(eoYu+XCiW$m=M!t9%2hZv1<-B#n;4F?lz;oR* zdUc1J`!uNneA-14s*ahE*b95Z_?eM}+Ta-9>?$d0Aiun9A=A3xjkI_h9BiTCYDCR} zb7NmJ5|C_F$p%u_O-wcJa+IY8veIKuG5c$xO|8K*-@B+}YlA6o;S)tJzrj(U_#y8+ z9pJA68b0=GqVMh_U`qv_vJEP-6~Vn5q|_^|Hbgbel=WH z^1)*Sip;s#xy8ePv4(`py5v=0r;?4Ho%su%IIwh9P9hvsj~`<5i!OtwGZd=B;l*q6 zWP{_2-syA?d1?6Wa1D5^ZTAqe!Sr!iJi}PqhwZ!%aCnpdgkAFLHJyX(SOus3(8EJ} z(R{I<6f^fxIOxZJ6~Ef4VCO)l<{@NKc*y=yI!us|_-(g`Q;aeIZOFOS{_V#IYAGDr zS8Pr2=YP6c_@#e5gT;*<-EztxDdo-(q*!uz7{i*V<9Swr2#y>Q>e&*WdkK0hk-VCR zPf*tc1{CYC2sAXrwAb@MUwI7mA~PSkCMcrdXJh5gfEX$oI_vACDN#XL*(ioaMc}a6 z?{IKX@+2eTfx$k49!_+uW?SLR=$!zD747`S^5L2nr8*IEKkYzx9p6 zU3x}}=o?8z$WxXUbuv_-{>Cb)PUaw8a^pH__>)Lcr81nld&B8jP-3DX224B2WmrSMLSQl^nxFpM|FE0=se~CF{PbhfI%%rsg%@a*&J~NcDnXhgmEVlvmt{BBt_ z^!P7c&Nfccm1=l8QdI!A4{z_dh;sarLcBBk$W7jUg&jT-}+E?a_kq- zgKyn4P+I%qlgf#`a2*N#R(7^R${L_1)81xfj2|j1c6U64YfK2$c($B8JHonh8l1cn zGm|IMg3D?ae$$p?1=L+Fy)B-pfsoznW3O)HE=yalw zkh`y-c{LAT)$=ta?xvFKderPUXXo66DtbP&y4HCtJ)72Zccj+rw>9s%^#xGB%Io0R zsKDFv_nN~gMg2i)D74LZ#@vML5lvY3-{359xE|>Wzj_E@dKA;4i+Y~kEN?ZC>%2)H zbmboau3DsIS1><+2w@2Rqi9tEFSO=ndFL#jVNEY*Edxyb_HeT zS4(`5*wxN^H}7^!QWnfqcxg*q-!KemQ&(*_3c6m_u%aZ_AtH!k)czVCy z2Zg|ahToe@6(#jc8&(RNcAYGp6$7XxWMUWIP#@FeRspB$nWvA+`uOdf|EOEjtx^A$ z4VjbP=VVL*J@hzNxGiW!3}j~Hr=B&tA`6rVP$CI>{aoXQmmwmGl6rpm{Z4w3?Hg$z zLJyz6A61$6t?=7odS=<>u4T!QYhB2Vo>gDKm~+~^_ig|hl5>yOe(gVa2qW3#v}@)r zRmugtAaAFk=YS&GFWERT?WDzqs?j<^7$JCGu%>tXjH`yLZ3RfQ=!Mo@9-QMv@j}>7nynwRm69!*CUo0tk84MDQn2;K$ zOGdy6l~(peJ#F*&Oq_$$Ovm@}OW-ugk}fvwCG`STsV8uBtW{j%q2SPq+|2_-*%gaD zI{0|jRYmBf+fXK;qo~@$9YfUNG8Xl>Y=Vn6!r7bZi6g8t;RYvs<0Cmw9w>q1LQc#S@n=OQ^1B4m&k0yN>&afN; z+w;7Udzg`8^%*lLIr?m6 zpy2h$1dh3pXZxiW!5QmOmi_k5kt5mSzDd?hUKBo8Sbhq#L_p%@AGI!77+@0MKBfP* zZ`tWynNGoS>aH-v%Vc|#MoJgIj zT~7*`D2fOzNbuy~kj&vv`7BRE&H;)L& zaW8ibFXAv91>pDqPHK?qlQ2vkh*srtf8-Cm)dk+#F7PneP{rqrPcjFnTL7{+aM87_ zHF!P58~lj103<$NeD5I05U-YGaIrgKto##>6WyN|^+=~J1h7$@xO%Ro#qChRH$a6S zc)u2IO=2MSj1KS;%>^Sl3q}&oo^**ij(i=JFcFN&xq=%9XK2$cZizwbV%RW@R;R{g z!ny58Mpu8@vexZt3`}aVUaCCt2gD!wbXQ4wa6ZeBgd8~CHem*U-JW>oVoBtzL(F)x z*Xd=DJ}eL6$a39lyN~3!zT<4TbLW&keiisTkCZLpL9Uxv{S|4!=al2fhrsb^mA9z% ztjmErwNNIUwC*u(+P2p1?3zooDD}IsB%zK6+Ltu)Bk?)EaWk2@RPE=L(%oMVfAW+3=D~sN}?7Gd?yAskS17%u3 z*~dA}SPg z`q$F3h2Cok_OMmd@SL8v7o735)mrF9*KKA2f`mDE-kC#1mNinogJK~+-O)=m8$!H* z8zg3+%qY0DfHh?*FiTBYb4wTx?teHNqRpW%gbNkOBDgPRz=K`4A)Tk#p=tw!ir<>f z!Q}?5KRh!VP!9#vJ955};!$wH1I zcS(gFMT&5%1ULIInB^_px&`-9uubCMpveLbZ|^ZkXCuFf5m2cG_W*Q3w`anAEp@rUrX1AjoFM?#2b9Qr z%73)3vgm~UqfCSs?ishr*1u@jb&{0<9Qr$J(`#4K#|d7!8X^f~^|bOj$dVWZH&-le zi72_O$(caEXR#sdv*Rm5PP%*K@gW^N$MUO|_TtrWhYPW(Ys_yNCmgIfTx+ue>^AW_ z5P*x=Ia_$0HDiC@=e4H14`mADQbr{Pt%Qmd1FEeZK2Fg`ns7+!yM-PGEuRY6V_%V^ zBxzR661`T0*FGsT6MHXe<_sFd+WG(g_KPP1rgxvoCa>wbt;BFKt?hE28s9_?L={n5=0D=87t=0Um~Q{b3E^|v#bWIG zzRxOUdI%d(22iy~T_}VA<2R}f&b~6^TBl==w8{R{e2HAH>}l3?s8wcg{Zup*PfU`& zp)c7Su>zW@tlgNOS1^fT@ zI;qQGBs`=$Bftz;1?Ep0oH%wG!Qhzz67o0^8K zix~q7AI}q60((>3o9xVYv*9E9Jve4I9Fv)9UM+mNZW_&JlVTmE=GTlmTp%l2ml)&{!#YIK&b3o_4) zPmF2VuEyd{^#G?b@n>vh)ysGy-&#R^!z}#m4m?p-s<6HdgP>mdu*}^%i3__TZ#(aM zhIR-FXdR{;s!~aSeUB`xHw}Ml8VgQ}RYH;e$J}!>`fkFtd|y|h4&{%6jVDXG8cr}% z2%~3y)PO54s4!qw&;D;6fi5xWOqWSvdK-L>b{*Dw650RAR$>C>WOvkI#}}dQ*u>_p zK&MSi@f1Zqxi%|zV(J?y`gUmXGVGI!Ua+|vwR^hXspIe`8+53vo(Ea#zg!qF_AAG0 zAF-i@H0pj~?s@9@k!&Wh{p#k>4Ejy^OA#ph*&OkUp!F6mOxkG~cCA%oK@BDjmxVLV zee3AW=lo8Gcuj4s0L`ArqauE5IvSjRjm=@nk6Av3AgXNw@+8RPi}tkmuG?2Lnc@`r z-KzyI$V@_#x!_CQ&Fvvv*V-i?q^<=kxU3#W`7J9c2 zuBr@)O{{4B#FU>QfCvoNq{gk`SzZSUzK;9vY(!hqtYu5|0(h3~FkAJ}t(!LGsXUC( zrzKEUbGbYb2*>wgepsQl=ThhG-T6#jM?_z1b-wG=9hr$f9DoUB|M;&QsApGO*T>m! z<&#jt;+drU*Oic$HgCxMd{G`L-BTDx3R*OG)*Q2D71;L4iCHml0SG>ooI3JbQ)l&+ z1&r&vf87~w^Rx*XL0@i74R<=gq&!C}p9QV8fy|8!b+K^yGfk6G6=C7mlLHICM;GmSsRdWv0SST)Dp%hRW|bm6Ww+Zti#4uY-lz_p=GGg!*W z`L_=}esoS33E>tgr1Rv~-Q;I6Y%=ko%3;@pAD|F;1&N|!XE45}`cPUq81y709D!ds z&z3`j1Dt6!Ho;Sv`Y;}_L)*@C7khW@1$Ll+T9-6279iUG&O*E$uM4Q#9)z29<)6qf zD@BWEh4Wv2(m@icapu1&x2kJJn@7pe*qdSXd+CnYn^_Mi(BxdUA@$qwPlwVpI+67ra7yX zbU9+!vQd&8M~)LRZ0jmfdlweHYPl^0{_z$n`4Q&qY!2j2xs zqyaV^H-k#?HvF+)KXp zZ^v6e>Xot#q*txRPPKEjAHED8Wyt=wH8bb3@9MWBPRkde3_RRK$PUlEaoHEpl1Azz zz9M`AQz92R&AcIB2nneyWX5oJ(LI_-+k3g?HGrw)cVL}KZp9wa56-vVPx+TX`m*te zC(>@^8>{44_qyM@Lz=t`(ja0P+hxckCMH!&xo(wmMK~QpGFOM(%Q`H&Kr@A!dW98- z04hz?L|F9&o5k1(>F7ZAhpcN}3oxg`nvGaxqlj(3G^2IH1?mztf zGOj~tp75ZZ1bE>HgY;Q1aW9mJkwIBzZRg4#*u-dQg`JE?U`P3VX^A=|zSVx81 zLKWOAnxpmqEnEh8ZUS)l`^*%e(@N~3Cw_Sk9k7sCX7=Tin%TnXp$x$O6~hNp;4G_| z_9RFdc;MsKh10h^e7eeZtp!s@L;4;+a%<->ov*I9kuYYg=I@rXH zH3`!A`B0mC;%RQqthg{IeForZ@4z+no6p#+JzhC?KD3XOu(;Fr!P4AHVB!N!3NhSR z3~Jz(&8RO|2f4~XfAtTMDqvv*nj2xTn4lk~n%NFY84a0P;gWkheLoz{Qf9CKUe(HA zF-iYc;;r-DAZ-lCmhtYm(>hI@!9oitCDC!lrq@^D+4Bv0;OJ`034Ol(-JZ*zm>7-& zdlU@JSJrxGMJL`W_53f)WC+q<;IrCl|Mf~~CVd7251_LRnC7!4`8hj-gX7KR<5S&0 zGD;wspu4A*n2CHYF4qI6tQ%p{d6~_6xeu1|?gm~bAt4L2e@4fdm}ASQ&G`S)4$__Y z@#1sY^l!j&W)=g3n?C~^18}73w!oR=f?XiLCHURi;2r#Y`;C^^TV>OCGl0jk7}Az; zAJuUV2D{+$#kSb6(tjLh^%xAifsSyH?#g5~ke{72O%XJQ!EnH!HmCGwO>f}sH^Al* zXvl@3A^(?~!L!HbLB30fpLL@p`riw?|6lXh>Mz84gwLFJ)oGn0^tKoNa z`R91W>EE79#R9k30h>w;dw;L7TxL7{?w|eo|3GU_4wRUF)O_%1zW%?x*Pbvjd;zw> z87#VhK2;O=T&c0_@1Od|!47GXhm3$~8Jsu#O9E!|XuG<9zeVyG8Tx>iWH3my>N6Ry zeJcL^_=hvk?Yr~;{EoH + + diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000..1a3a2082 --- /dev/null +++ b/bun.lock @@ -0,0 +1,2014 @@ +{ + "lockfileVersion": 1, + "workspaces": { + "": { + "name": "21st-desktop", + "dependencies": { + "@ai-sdk/react": "^3.0.14", + "@anthropic-ai/claude-agent-sdk": "^0.2.5", + "@git-diff-view/react": "^0.0.35", + "@git-diff-view/shiki": "^0.0.36", + "@radix-ui/react-alert-dialog": "^1.1.1", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-tooltip": "^1.2.8", + "@sentry/electron": "^7.5.0", + "@tailwindcss/typography": "^0.5.19", + "@tanstack/react-query": "^5.90.10", + "@tanstack/react-virtual": "^3.13.18", + "@trpc/client": "^11.7.1", + "@trpc/react-query": "^11.7.1", + "@trpc/server": "^11.7.1", + "@xterm/addon-canvas": "^0.7.0", + "@xterm/addon-fit": "^0.11.0", + "@xterm/addon-search": "^0.16.0", + "@xterm/addon-serialize": "^0.14.0", + "@xterm/addon-web-links": "^0.12.0", + "@xterm/addon-webgl": "^0.19.0", + "ai": "^6.0.14", + "better-sqlite3": "^11.8.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "date-fns": "^3.6.0", + "drizzle-orm": "^0.45.1", + "electron-log": "^5.4.3", + "electron-updater": "^6.7.3", + "gray-matter": "^4.0.3", + "jotai": "^2.11.1", + "lucide-react": "^0.468.0", + "motion": "^11.15.0", + "next-themes": "^0.4.4", + "node-pty": "^1.1.0", + "pidtree": "^0.6.0", + "posthog-js": "^1.239.1", + "posthog-node": "^5.20.0", + "react": "19.2.1", + "react-dom": "19.2.1", + "react-hotkeys-hook": "^4.6.1", + "react-icons": "^5.5.0", + "react-syntax-highlighter": "^16.1.0", + "shiki": "^1.24.4", + "sonner": "^1.7.1", + "superjson": "^2.2.2", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "trpc-electron": "^0.1.2", + "unique-names-generator": "^4.7.1", + "xterm": "^5.3.0", + "zod": "^3.24.1", + "zustand": "^5.0.3", + }, + "devDependencies": { + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^4.0.0", + "@types/better-sqlite3": "^7.6.13", + "@types/node": "^20.17.50", + "@types/react": "^19.0.7", + "@types/react-dom": "^19.0.3", + "@types/react-syntax-highlighter": "^15.5.13", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "drizzle-kit": "^0.31.8", + "electron": "33.4.5", + "electron-builder": "^25.1.8", + "electron-rebuild": "^3.2.9", + "electron-vite": "^3.0.0", + "postcss": "^8.5.1", + "tailwindcss": "^3.4.17", + "typescript": "^5.4.5", + "vite": "^6.3.4", + }, + }, + }, + "packages": { + "7zip-bin": ["7zip-bin@5.2.0", "", {}, "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A=="], + + "@ai-sdk/gateway": ["@ai-sdk/gateway@3.0.9", "", { "dependencies": { "@ai-sdk/provider": "3.0.2", "@ai-sdk/provider-utils": "4.0.4", "@vercel/oidc": "3.1.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-EA5dZIukimwoJ9HIPuuREotAqaTItpdc/yImzVF0XGNg7B0YRJmYI8Uq3aCMr87vjr1YB1cWUfnrTt6OJ9eHiQ=="], + + "@ai-sdk/provider": ["@ai-sdk/provider@3.0.2", "", { "dependencies": { "json-schema": "^0.4.0" } }, "sha512-HrEmNt/BH/hkQ7zpi2o6N3k1ZR1QTb7z85WYhYygiTxOQuaml4CMtHCWRbric5WPU+RNsYI7r1EpyVQMKO1pYw=="], + + "@ai-sdk/provider-utils": ["@ai-sdk/provider-utils@4.0.4", "", { "dependencies": { "@ai-sdk/provider": "3.0.2", "@standard-schema/spec": "^1.1.0", "eventsource-parser": "^3.0.6" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-VxhX0B/dWGbpNHxrKCWUAJKXIXV015J4e7qYjdIU9lLWeptk0KMLGcqkB4wFxff5Njqur8dt8wRi1MN9lZtDqg=="], + + "@ai-sdk/react": ["@ai-sdk/react@3.0.14", "", { "dependencies": { "@ai-sdk/provider-utils": "4.0.4", "ai": "6.0.14", "swr": "^2.2.5", "throttleit": "2.1.0" }, "peerDependencies": { "react": "^18 || ~19.0.1 || ~19.1.2 || ^19.2.1" } }, "sha512-3Z4SCdR06kMh+AQ0yJePXhL3UnRTchHT6RIjA6R7yWF6ONkbKsy5hHkyg2KXnkO+/XCyrz+yOepLCW5W5k/Q6A=="], + + "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + + "@anthropic-ai/claude-agent-sdk": ["@anthropic-ai/claude-agent-sdk@0.2.6", "", { "optionalDependencies": { "@img/sharp-darwin-arm64": "^0.33.5", "@img/sharp-darwin-x64": "^0.33.5", "@img/sharp-linux-arm": "^0.33.5", "@img/sharp-linux-arm64": "^0.33.5", "@img/sharp-linux-x64": "^0.33.5", "@img/sharp-linuxmusl-arm64": "^0.33.5", "@img/sharp-linuxmusl-x64": "^0.33.5", "@img/sharp-win32-x64": "^0.33.5" }, "peerDependencies": { "zod": "^4.0.0" } }, "sha512-lwswHo6z/Kh9djafk2ajPju62+VqHwJ23gueG1alfaLNK4GRYHgCROfiX6/wlxAd8sRvgTo6ry1hNzkyz7bOpw=="], + + "@apm-js-collab/code-transformer": ["@apm-js-collab/code-transformer@0.8.2", "", {}, "sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA=="], + + "@apm-js-collab/tracing-hooks": ["@apm-js-collab/tracing-hooks@0.3.1", "", { "dependencies": { "@apm-js-collab/code-transformer": "^0.8.0", "debug": "^4.4.1", "module-details-from-path": "^1.0.4" } }, "sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw=="], + + "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], + + "@babel/compat-data": ["@babel/compat-data@7.28.5", "", {}, "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA=="], + + "@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="], + + "@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], + + "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.27.2", "", { "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ=="], + + "@babel/helper-globals": ["@babel/helper-globals@7.28.0", "", {}, "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw=="], + + "@babel/helper-module-imports": ["@babel/helper-module-imports@7.27.1", "", { "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" } }, "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w=="], + + "@babel/helper-module-transforms": ["@babel/helper-module-transforms@7.28.3", "", { "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", "@babel/traverse": "^7.28.3" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw=="], + + "@babel/helper-plugin-utils": ["@babel/helper-plugin-utils@7.27.1", "", {}, "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw=="], + + "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/helper-validator-option": ["@babel/helper-validator-option@7.27.1", "", {}, "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg=="], + + "@babel/helpers": ["@babel/helpers@7.28.4", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.4" } }, "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w=="], + + "@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], + + "@babel/plugin-transform-arrow-functions": ["@babel/plugin-transform-arrow-functions@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA=="], + + "@babel/plugin-transform-react-jsx-self": ["@babel/plugin-transform-react-jsx-self@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw=="], + + "@babel/plugin-transform-react-jsx-source": ["@babel/plugin-transform-react-jsx-source@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw=="], + + "@babel/runtime": ["@babel/runtime@7.28.4", "", {}, "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ=="], + + "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], + + "@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], + + "@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], + + "@develar/schema-utils": ["@develar/schema-utils@2.6.5", "", { "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" } }, "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig=="], + + "@drizzle-team/brocli": ["@drizzle-team/brocli@0.10.2", "", {}, "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w=="], + + "@electron-toolkit/preload": ["@electron-toolkit/preload@3.0.2", "", { "peerDependencies": { "electron": ">=13.0.0" } }, "sha512-TWWPToXd8qPRfSXwzf5KVhpXMfONaUuRAZJHsKthKgZR/+LqX1dZVSSClQ8OTAEduvLGdecljCsoT2jSshfoUg=="], + + "@electron-toolkit/utils": ["@electron-toolkit/utils@4.0.0", "", { "peerDependencies": { "electron": ">=13.0.0" } }, "sha512-qXSntwEzluSzKl4z5yFNBknmPGjPa3zFhE4mp9+h0cgokY5ornAeP+CJQDBhKsL1S58aOQfcwkD3NwLZCl+64g=="], + + "@electron/asar": ["@electron/asar@3.4.1", "", { "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", "minimatch": "^3.0.4" }, "bin": { "asar": "bin/asar.js" } }, "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA=="], + + "@electron/get": ["@electron/get@2.0.3", "", { "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", "fs-extra": "^8.1.0", "got": "^11.8.5", "progress": "^2.0.3", "semver": "^6.2.0", "sumchecker": "^3.0.1" }, "optionalDependencies": { "global-agent": "^3.0.0" } }, "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ=="], + + "@electron/notarize": ["@electron/notarize@2.5.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.1", "promise-retry": "^2.0.1" } }, "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A=="], + + "@electron/osx-sign": ["@electron/osx-sign@1.3.1", "", { "dependencies": { "compare-version": "^0.1.2", "debug": "^4.3.4", "fs-extra": "^10.0.0", "isbinaryfile": "^4.0.8", "minimist": "^1.2.6", "plist": "^3.0.5" }, "bin": { "electron-osx-flat": "bin/electron-osx-flat.js", "electron-osx-sign": "bin/electron-osx-sign.js" } }, "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw=="], + + "@electron/rebuild": ["@electron/rebuild@3.6.1", "", { "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", "debug": "^4.1.1", "detect-libc": "^2.0.1", "fs-extra": "^10.0.0", "got": "^11.7.0", "node-abi": "^3.45.0", "node-api-version": "^0.2.0", "node-gyp": "^9.0.0", "ora": "^5.1.0", "read-binary-file-arch": "^1.0.6", "semver": "^7.3.5", "tar": "^6.0.5", "yargs": "^17.0.1" }, "bin": { "electron-rebuild": "lib/cli.js" } }, "sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w=="], + + "@electron/universal": ["@electron/universal@2.0.1", "", { "dependencies": { "@electron/asar": "^3.2.7", "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", "dir-compare": "^4.2.0", "fs-extra": "^11.1.1", "minimatch": "^9.0.3", "plist": "^3.1.0" } }, "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA=="], + + "@esbuild-kit/core-utils": ["@esbuild-kit/core-utils@3.3.2", "", { "dependencies": { "esbuild": "~0.18.20", "source-map-support": "^0.5.21" } }, "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ=="], + + "@esbuild-kit/esm-loader": ["@esbuild-kit/esm-loader@2.6.5", "", { "dependencies": { "@esbuild-kit/core-utils": "^3.3.2", "get-tsconfig": "^4.7.0" } }, "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA=="], + + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.12", "", { "os": "aix", "cpu": "ppc64" }, "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA=="], + + "@esbuild/android-arm": ["@esbuild/android-arm@0.25.12", "", { "os": "android", "cpu": "arm" }, "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg=="], + + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.12", "", { "os": "android", "cpu": "arm64" }, "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg=="], + + "@esbuild/android-x64": ["@esbuild/android-x64@0.25.12", "", { "os": "android", "cpu": "x64" }, "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg=="], + + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg=="], + + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA=="], + + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.12", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg=="], + + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ=="], + + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.12", "", { "os": "linux", "cpu": "arm" }, "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw=="], + + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ=="], + + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.12", "", { "os": "linux", "cpu": "ia32" }, "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA=="], + + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng=="], + + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw=="], + + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA=="], + + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.12", "", { "os": "linux", "cpu": "none" }, "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w=="], + + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg=="], + + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.12", "", { "os": "linux", "cpu": "x64" }, "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw=="], + + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg=="], + + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.12", "", { "os": "none", "cpu": "x64" }, "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ=="], + + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.12", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A=="], + + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.12", "", { "os": "openbsd", "cpu": "x64" }, "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw=="], + + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.25.12", "", { "os": "none", "cpu": "arm64" }, "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg=="], + + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.12", "", { "os": "sunos", "cpu": "x64" }, "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w=="], + + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg=="], + + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.12", "", { "os": "win32", "cpu": "ia32" }, "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ=="], + + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + + "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.6", "", { "dependencies": { "@floating-ui/dom": "^1.7.4" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + + "@gar/promisify": ["@gar/promisify@1.1.3", "", {}, "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw=="], + + "@git-diff-view/core": ["@git-diff-view/core@0.0.35", "", { "dependencies": { "@git-diff-view/lowlight": "^0.0.35", "fast-diff": "^1.3.0", "highlight.js": "^11.11.0", "lowlight": "^3.3.0" } }, "sha512-cdH3BopR6AWUW+6hP78zGyryKxR9JkPgryd1JN78i5k+F9Eo4x/4S23ZF1VZnrpPlGLrSuYfiAZ0ho5m+pTuKg=="], + + "@git-diff-view/lowlight": ["@git-diff-view/lowlight@0.0.35", "", { "dependencies": { "@types/hast": "^3.0.0", "highlight.js": "^11.11.0", "lowlight": "^3.3.0" } }, "sha512-MVpOxrNn1oHVOTOWUjxLbbf1W4OtVHjj6CHxwJbBRg9ZWZdShBINjuEgHVMSGB6vZuHKfwruRfXw8XxV3aF8zw=="], + + "@git-diff-view/react": ["@git-diff-view/react@0.0.35", "", { "dependencies": { "@git-diff-view/core": "^0.0.35", "@types/hast": "^3.0.0", "fast-diff": "^1.3.0", "highlight.js": "^11.11.0", "lowlight": "^3.3.0", "reactivity-store": "^0.3.12", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-jIzESQ/oB2FZgEGK1urvAqju89cThv5+enEC4r2atDX15W5xMDNsDBe8FT2U74zBj8JkgROaiGmbF93KIJrWpg=="], + + "@git-diff-view/shiki": ["@git-diff-view/shiki@0.0.36", "", { "dependencies": { "@types/hast": "^3.0.0", "shiki": "^3.9.2" } }, "sha512-t6LGKISEvE0q7u2AR1rq2RLgCcccRttuKE617D1MiHecO0Xd/xvsMhqxW4PgDMkMadhbzWnt6IhBbrdgqBKPwQ=="], + + "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.0.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ=="], + + "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.0.4" }, "os": "darwin", "cpu": "x64" }, "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q=="], + + "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.0.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg=="], + + "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.0.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ=="], + + "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.0.5", "", { "os": "linux", "cpu": "arm" }, "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g=="], + + "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA=="], + + "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw=="], + + "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.0.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA=="], + + "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.0.4", "", { "os": "linux", "cpu": "x64" }, "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw=="], + + "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.0.5" }, "os": "linux", "cpu": "arm" }, "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ=="], + + "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA=="], + + "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA=="], + + "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" }, "os": "linux", "cpu": "arm64" }, "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g=="], + + "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.33.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.0.4" }, "os": "linux", "cpu": "x64" }, "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw=="], + + "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.33.5", "", { "os": "win32", "cpu": "x64" }, "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg=="], + + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], + + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], + + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + + "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], + + "@jridgewell/remapping": ["@jridgewell/remapping@2.3.5", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ=="], + + "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="], + + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], + + "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="], + + "@malept/cross-spawn-promise": ["@malept/cross-spawn-promise@2.0.0", "", { "dependencies": { "cross-spawn": "^7.0.1" } }, "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg=="], + + "@malept/flatpak-bundler": ["@malept/flatpak-bundler@0.4.0", "", { "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", "lodash": "^4.17.15", "tmp-promise": "^3.0.2" } }, "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q=="], + + "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], + + "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], + + "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], + + "@npmcli/fs": ["@npmcli/fs@2.1.2", "", { "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ=="], + + "@npmcli/move-file": ["@npmcli/move-file@2.0.1", "", { "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" } }, "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ=="], + + "@opentelemetry/api": ["@opentelemetry/api@1.9.0", "", {}, "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg=="], + + "@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.208.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-CjruKY9V6NMssL/T1kAFgzosF1v9o6oeN+aX5JB/C/xPNtmgIJqcXHG7fA82Ou1zCpWGl4lROQUKwUNE1pMCyg=="], + + "@opentelemetry/context-async-hooks": ["@opentelemetry/context-async-hooks@2.3.0", "", { "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-hGcsT0qDP7Il1L+qT3JFpiGl1dCjF794Bb4yCRCYdr7XC0NwHtOF3ngF86Gk6TUnsakbyQsDQ0E/S4CU0F4d4g=="], + + "@opentelemetry/core": ["@opentelemetry/core@2.3.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-PcmxJQzs31cfD0R2dE91YGFcLxOSN4Bxz7gez5UwSUjCai8BwH/GI5HchfVshHkWdTkUs0qcaPJgVHKXUp7I3A=="], + + "@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.208.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.208.0", "import-in-the-middle": "^2.0.0", "require-in-the-middle": "^8.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-Eju0L4qWcQS+oXxi6pgh7zvE2byogAkcsVv0OjHF/97iOz1N/aKE6etSGowYkie+YA1uo6DNwdSxaaNnLvcRlA=="], + + "@opentelemetry/instrumentation-amqplib": ["@opentelemetry/instrumentation-amqplib@0.55.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5ULoU8p+tWcQw5PDYZn8rySptGSLZHNX/7srqo2TioPnAAcvTy6sQFQXsNPrAnyRRtYGMetXVyZUy5OaX1+IfA=="], + + "@opentelemetry/instrumentation-connect": ["@opentelemetry/instrumentation-connect@0.52.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-GXPxfNB5szMbV3I9b7kNWSmQBoBzw7MT0ui6iU/p+NIzVx3a06Ri2cdQO7tG9EKb4aKSLmfX9Cw5cKxXqX6Ohg=="], + + "@opentelemetry/instrumentation-dataloader": ["@opentelemetry/instrumentation-dataloader@0.26.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-P2BgnFfTOarZ5OKPmYfbXfDFjQ4P9WkQ1Jji7yH5/WwB6Wm/knynAoA1rxbjWcDlYupFkyT0M1j6XLzDzy0aCA=="], + + "@opentelemetry/instrumentation-express": ["@opentelemetry/instrumentation-express@0.57.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-HAdx/o58+8tSR5iW+ru4PHnEejyKrAy9fYFhlEI81o10nYxrGahnMAHWiSjhDC7UQSY3I4gjcPgSKQz4rm/asg=="], + + "@opentelemetry/instrumentation-fs": ["@opentelemetry/instrumentation-fs@0.28.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-FFvg8fq53RRXVBRHZViP+EMxMR03tqzEGpuq55lHNbVPyFklSVfQBN50syPhK5UYYwaStx0eyCtHtbRreusc5g=="], + + "@opentelemetry/instrumentation-generic-pool": ["@opentelemetry/instrumentation-generic-pool@0.52.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-ISkNcv5CM2IwvsMVL31Tl61/p2Zm2I2NAsYq5SSBgOsOndT0TjnptjufYVScCnD5ZLD1tpl4T3GEYULLYOdIdQ=="], + + "@opentelemetry/instrumentation-graphql": ["@opentelemetry/instrumentation-graphql@0.56.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IPvNk8AFoVzTAM0Z399t34VDmGDgwT6rIqCUug8P9oAGerl2/PEIYMPOl/rerPGu+q8gSWdmbFSjgg7PDVRd3Q=="], + + "@opentelemetry/instrumentation-hapi": ["@opentelemetry/instrumentation-hapi@0.55.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-prqAkRf9e4eEpy4G3UcR32prKE8NLNlA90TdEU1UsghOTg0jUvs40Jz8LQWFEs5NbLbXHYGzB4CYVkCI8eWEVQ=="], + + "@opentelemetry/instrumentation-http": ["@opentelemetry/instrumentation-http@0.208.0", "", { "dependencies": { "@opentelemetry/core": "2.2.0", "@opentelemetry/instrumentation": "0.208.0", "@opentelemetry/semantic-conventions": "^1.29.0", "forwarded-parse": "2.1.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-rhmK46DRWEbQQB77RxmVXGyjs6783crXCnFjYQj+4tDH/Kpv9Rbg3h2kaNyp5Vz2emF1f9HOQQvZoHzwMWOFZQ=="], + + "@opentelemetry/instrumentation-ioredis": ["@opentelemetry/instrumentation-ioredis@0.56.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/redis-common": "^0.38.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-XSWeqsd3rKSsT3WBz/JKJDcZD4QYElZEa0xVdX8f9dh4h4QgXhKRLorVsVkK3uXFbC2sZKAS2Ds+YolGwD83Dg=="], + + "@opentelemetry/instrumentation-kafkajs": ["@opentelemetry/instrumentation-kafkajs@0.18.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-KCL/1HnZN5zkUMgPyOxfGjLjbXjpd4odDToy+7c+UsthIzVLFf99LnfIBE8YSSrYE4+uS7OwJMhvhg3tWjqMBg=="], + + "@opentelemetry/instrumentation-knex": ["@opentelemetry/instrumentation-knex@0.53.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.33.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-xngn5cH2mVXFmiT1XfQ1aHqq1m4xb5wvU6j9lSgLlihJ1bXzsO543cpDwjrZm2nMrlpddBf55w8+bfS4qDh60g=="], + + "@opentelemetry/instrumentation-koa": ["@opentelemetry/instrumentation-koa@0.57.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.36.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0" } }, "sha512-3JS8PU/D5E3q295mwloU2v7c7/m+DyCqdu62BIzWt+3u9utjxC9QS7v6WmUNuoDN3RM+Q+D1Gpj13ERo+m7CGg=="], + + "@opentelemetry/instrumentation-lru-memoizer": ["@opentelemetry/instrumentation-lru-memoizer@0.53.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-LDwWz5cPkWWr0HBIuZUjslyvijljTwmwiItpMTHujaULZCxcYE9eU44Qf/pbVC8TulT0IhZi+RoGvHKXvNhysw=="], + + "@opentelemetry/instrumentation-mongodb": ["@opentelemetry/instrumentation-mongodb@0.61.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-OV3i2DSoY5M/pmLk+68xr5RvkHU8DRB3DKMzYJdwDdcxeLs62tLbkmRyqJZsYf3Ht7j11rq35pHOWLuLzXL7pQ=="], + + "@opentelemetry/instrumentation-mongoose": ["@opentelemetry/instrumentation-mongoose@0.55.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-5afj0HfF6aM6Nlqgu6/PPHFk8QBfIe3+zF9FGpX76jWPS0/dujoEYn82/XcLSaW5LPUDW8sni+YeK0vTBNri+w=="], + + "@opentelemetry/instrumentation-mysql": ["@opentelemetry/instrumentation-mysql@0.54.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@types/mysql": "2.15.27" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-bqC1YhnwAeWmRzy1/Xf9cDqxNG2d/JDkaxnqF5N6iJKN1eVWI+vg7NfDkf52/Nggp3tl1jcC++ptC61BD6738A=="], + + "@opentelemetry/instrumentation-mysql2": ["@opentelemetry/instrumentation-mysql2@0.55.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@opentelemetry/sql-common": "^0.41.2" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-0cs8whQG55aIi20gnK8B7cco6OK6N+enNhW0p5284MvqJ5EPi+I1YlWsWXgzv/V2HFirEejkvKiI4Iw21OqDWg=="], + + "@opentelemetry/instrumentation-pg": ["@opentelemetry/instrumentation-pg@0.61.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.34.0", "@opentelemetry/sql-common": "^0.41.2", "@types/pg": "8.15.6", "@types/pg-pool": "2.0.6" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-UeV7KeTnRSM7ECHa3YscoklhUtTQPs6V6qYpG283AB7xpnPGCUCUfECFT9jFg6/iZOQTt3FHkB1wGTJCNZEvPw=="], + + "@opentelemetry/instrumentation-redis": ["@opentelemetry/instrumentation-redis@0.57.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-bCxTHQFXzrU3eU1LZnOZQ3s5LURxQPDlU3/upBzlWY77qOI1GZuGofazj3jtzjctMJeBEJhNwIFEgRPBX1kp/Q=="], + + "@opentelemetry/instrumentation-tedious": ["@opentelemetry/instrumentation-tedious@0.27.0", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.208.0", "@types/tedious": "^4.0.14" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-jRtyUJNZppPBjPae4ZjIQ2eqJbcRaRfJkr0lQLHFmOU/no5A6e9s1OHLd5XZyZoBJ/ymngZitanyRRA5cniseA=="], + + "@opentelemetry/instrumentation-undici": ["@opentelemetry/instrumentation-undici@0.19.0", "", { "dependencies": { "@opentelemetry/core": "^2.0.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/semantic-conventions": "^1.24.0" }, "peerDependencies": { "@opentelemetry/api": "^1.7.0" } }, "sha512-Pst/RhR61A2OoZQZkn6OLpdVpXp6qn3Y92wXa6umfJe9rV640r4bc6SWvw4pPN6DiQqPu2c8gnSSZPDtC6JlpQ=="], + + "@opentelemetry/redis-common": ["@opentelemetry/redis-common@0.38.2", "", {}, "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA=="], + + "@opentelemetry/resources": ["@opentelemetry/resources@2.3.0", "", { "dependencies": { "@opentelemetry/core": "2.3.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-shlr2l5g+87J8wqYlsLyaUsgKVRO7RtX70Ckd5CtDOWtImZgaUDmf4Z2ozuSKQLM2wPDR0TE/3bPVBNJtRm/cQ=="], + + "@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@2.3.0", "", { "dependencies": { "@opentelemetry/core": "2.3.0", "@opentelemetry/resources": "2.3.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "sha512-B0TQ2e9h0ETjpI+eGmCz8Ojb+lnYms0SE3jFwEKrN/PK4aSVHU28AAmnOoBmfub+I3jfgPwvDJgomBA5a7QehQ=="], + + "@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.38.0", "", {}, "sha512-kocjix+/sSggfJhwXqClZ3i9Y/MI0fp7b+g7kCRm6psy2dsf8uApTRclwG18h8Avm7C9+fnt+O36PspJ/OzoWg=="], + + "@opentelemetry/sql-common": ["@opentelemetry/sql-common@0.41.2", "", { "dependencies": { "@opentelemetry/core": "^2.0.0" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0" } }, "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ=="], + + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], + + "@posthog/core": ["@posthog/core@1.9.1", "", { "dependencies": { "cross-spawn": "^7.0.6" } }, "sha512-kRb1ch2dhQjsAapZmu6V66551IF2LnCbc1rnrQqnR7ArooVyJN9KOPXre16AJ3ObJz2eTfuP7x25BMyS2Y5Exw=="], + + "@posthog/types": ["@posthog/types@1.318.1", "", {}, "sha512-FYjHp4wlYvt4xc7MM+zIjfYICY/+lvjby/nOib29psTuUMT3nJXwqWz65QBox6XldaJdeId5F+UW6IOtJ1Q9iA=="], + + "@prisma/client": ["@prisma/client@6.19.1", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-4SXj4Oo6HyQkLUWT8Ke5R0PTAfVOKip5Roo+6+b2EDTkFg5be0FnBWiuRJc0BC0sRQIWGMLKW1XguhVfW/z3/A=="], + + "@prisma/config": ["@prisma/config@6.19.1", "", { "dependencies": { "c12": "3.1.0", "deepmerge-ts": "7.1.5", "effect": "3.18.4", "empathic": "2.0.0" } }, "sha512-bUL/aYkGXLwxVGhJmQMtslLT7KPEfUqmRa919fKI4wQFX4bIFUKiY8Jmio/2waAjjPYrtuDHa7EsNCnJTXxiOw=="], + + "@prisma/debug": ["@prisma/debug@6.19.1", "", {}, "sha512-h1JImhlAd/s5nhY/e9qkAzausWldbeT+e4nZF7A4zjDYBF4BZmKDt4y0jK7EZapqOm1kW7V0e9agV/iFDy3fWw=="], + + "@prisma/engines": ["@prisma/engines@6.19.1", "", { "dependencies": { "@prisma/debug": "6.19.1", "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", "@prisma/fetch-engine": "6.19.1", "@prisma/get-platform": "6.19.1" } }, "sha512-xy95dNJ7DiPf9IJ3oaVfX785nbFl7oNDzclUF+DIiJw6WdWCvPl0LPU0YqQLsrwv8N64uOQkH391ujo3wSo+Nw=="], + + "@prisma/engines-version": ["@prisma/engines-version@7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", "", {}, "sha512-03bgb1VD5gvuumNf+7fVGBzfpJPjmqV423l/WxsWk2cNQ42JD0/SsFBPhN6z8iAvdHs07/7ei77SKu7aZfq8bA=="], + + "@prisma/fetch-engine": ["@prisma/fetch-engine@6.19.1", "", { "dependencies": { "@prisma/debug": "6.19.1", "@prisma/engines-version": "7.1.1-3.c2990dca591cba766e3b7ef5d9e8a84796e47ab7", "@prisma/get-platform": "6.19.1" } }, "sha512-mmgcotdaq4VtAHO6keov3db+hqlBzQS6X7tR7dFCbvXjLVTxBYdSJFRWz+dq7F9p6dvWyy1X0v8BlfRixyQK6g=="], + + "@prisma/get-platform": ["@prisma/get-platform@6.19.1", "", { "dependencies": { "@prisma/debug": "6.19.1" } }, "sha512-zsg44QUiQAnFUyh6Fbt7c9HjMXHwFTqtrgcX7DAZmRgnkPyYT7Sh8Mn8D5PuuDYNtMOYcpLGg576MLfIORsBYw=="], + + "@prisma/instrumentation": ["@prisma/instrumentation@6.19.0", "", { "dependencies": { "@opentelemetry/instrumentation": ">=0.52.0 <1" }, "peerDependencies": { "@opentelemetry/api": "^1.8" } }, "sha512-QcuYy25pkXM8BJ37wVFBO7Zh34nyRV1GOb2n3lPkkbRYfl4hWl3PTcImP41P0KrzVXfa/45p6eVCos27x3exIg=="], + + "@radix-ui/number": ["@radix-ui/number@1.1.1", "", {}, "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g=="], + + "@radix-ui/primitive": ["@radix-ui/primitive@1.1.3", "", {}, "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg=="], + + "@radix-ui/react-alert-dialog": ["@radix-ui/react-alert-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw=="], + + "@radix-ui/react-arrow": ["@radix-ui/react-arrow@1.1.7", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w=="], + + "@radix-ui/react-checkbox": ["@radix-ui/react-checkbox@1.3.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw=="], + + "@radix-ui/react-collapsible": ["@radix-ui/react-collapsible@1.1.12", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA=="], + + "@radix-ui/react-collection": ["@radix-ui/react-collection@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw=="], + + "@radix-ui/react-compose-refs": ["@radix-ui/react-compose-refs@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg=="], + + "@radix-ui/react-context": ["@radix-ui/react-context@1.1.2", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA=="], + + "@radix-ui/react-context-menu": ["@radix-ui/react-context-menu@2.2.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww=="], + + "@radix-ui/react-dialog": ["@radix-ui/react-dialog@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw=="], + + "@radix-ui/react-direction": ["@radix-ui/react-direction@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw=="], + + "@radix-ui/react-dismissable-layer": ["@radix-ui/react-dismissable-layer@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-escape-keydown": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg=="], + + "@radix-ui/react-dropdown-menu": ["@radix-ui/react-dropdown-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw=="], + + "@radix-ui/react-focus-guards": ["@radix-ui/react-focus-guards@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw=="], + + "@radix-ui/react-focus-scope": ["@radix-ui/react-focus-scope@1.1.7", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw=="], + + "@radix-ui/react-id": ["@radix-ui/react-id@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg=="], + + "@radix-ui/react-label": ["@radix-ui/react-label@2.1.8", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A=="], + + "@radix-ui/react-menu": ["@radix-ui/react-menu@2.1.16", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg=="], + + "@radix-ui/react-popover": ["@radix-ui/react-popover@1.1.15", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA=="], + + "@radix-ui/react-popper": ["@radix-ui/react-popper@1.2.8", "", { "dependencies": { "@floating-ui/react-dom": "^2.0.0", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-rect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw=="], + + "@radix-ui/react-portal": ["@radix-ui/react-portal@1.1.9", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ=="], + + "@radix-ui/react-presence": ["@radix-ui/react-presence@1.1.5", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ=="], + + "@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.3", "", { "dependencies": { "@radix-ui/react-slot": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ=="], + + "@radix-ui/react-progress": ["@radix-ui/react-progress@1.1.8", "", { "dependencies": { "@radix-ui/react-context": "1.1.3", "@radix-ui/react-primitive": "2.1.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA=="], + + "@radix-ui/react-roving-focus": ["@radix-ui/react-roving-focus@1.1.11", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA=="], + + "@radix-ui/react-select": ["@radix-ui/react-select@2.2.6", "", { "dependencies": { "@radix-ui/number": "1.1.1", "@radix-ui/primitive": "1.1.3", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3", "aria-hidden": "^1.2.4", "react-remove-scroll": "^2.6.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ=="], + + "@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.4", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA=="], + + "@radix-ui/react-switch": ["@radix-ui/react-switch@1.2.6", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-previous": "1.1.1", "@radix-ui/react-use-size": "1.1.1" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ=="], + + "@radix-ui/react-tabs": ["@radix-ui/react-tabs@1.1.13", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-7xdcatg7/U+7+Udyoj2zodtI9H/IIopqo+YOIcZOq1nJwXWBZ9p8xiu5llXlekDbZkca79a/fozEYQXIA4sW6A=="], + + "@radix-ui/react-tooltip": ["@radix-ui/react-tooltip@1.2.8", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-id": "1.1.1", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg=="], + + "@radix-ui/react-use-callback-ref": ["@radix-ui/react-use-callback-ref@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg=="], + + "@radix-ui/react-use-controllable-state": ["@radix-ui/react-use-controllable-state@1.2.2", "", { "dependencies": { "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg=="], + + "@radix-ui/react-use-effect-event": ["@radix-ui/react-use-effect-event@0.0.2", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA=="], + + "@radix-ui/react-use-escape-keydown": ["@radix-ui/react-use-escape-keydown@1.1.1", "", { "dependencies": { "@radix-ui/react-use-callback-ref": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g=="], + + "@radix-ui/react-use-layout-effect": ["@radix-ui/react-use-layout-effect@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ=="], + + "@radix-ui/react-use-previous": ["@radix-ui/react-use-previous@1.1.1", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ=="], + + "@radix-ui/react-use-rect": ["@radix-ui/react-use-rect@1.1.1", "", { "dependencies": { "@radix-ui/rect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w=="], + + "@radix-ui/react-use-size": ["@radix-ui/react-use-size@1.1.1", "", { "dependencies": { "@radix-ui/react-use-layout-effect": "1.1.1" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ=="], + + "@radix-ui/react-visually-hidden": ["@radix-ui/react-visually-hidden@1.2.3", "", { "dependencies": { "@radix-ui/react-primitive": "2.1.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug=="], + + "@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="], + + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-beta.27", "", {}, "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA=="], + + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.55.1", "", { "os": "android", "cpu": "arm" }, "sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg=="], + + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.55.1", "", { "os": "android", "cpu": "arm64" }, "sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg=="], + + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.55.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg=="], + + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.55.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ=="], + + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.55.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg=="], + + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.55.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw=="], + + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.55.1", "", { "os": "linux", "cpu": "arm" }, "sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ=="], + + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.55.1", "", { "os": "linux", "cpu": "arm" }, "sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg=="], + + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.55.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ=="], + + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.55.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA=="], + + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g=="], + + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw=="], + + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.55.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw=="], + + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.55.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw=="], + + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw=="], + + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.55.1", "", { "os": "linux", "cpu": "none" }, "sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg=="], + + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.55.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg=="], + + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.55.1", "", { "os": "linux", "cpu": "x64" }, "sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg=="], + + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.55.1", "", { "os": "linux", "cpu": "x64" }, "sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w=="], + + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.55.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg=="], + + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.55.1", "", { "os": "none", "cpu": "arm64" }, "sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw=="], + + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.55.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g=="], + + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.55.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA=="], + + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.55.1", "", { "os": "win32", "cpu": "x64" }, "sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg=="], + + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.55.1", "", { "os": "win32", "cpu": "x64" }, "sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw=="], + + "@sentry-internal/browser-utils": ["@sentry-internal/browser-utils@10.29.0", "", { "dependencies": { "@sentry/core": "10.29.0" } }, "sha512-M3kycMY6f3KY9a8jDYac+yG0E3ZgWVWSxlOEC5MhYyX+g7mqxkwrb3LFQyuxSm/m+CCgMTCaPOOaB2twXP6EQg=="], + + "@sentry-internal/feedback": ["@sentry-internal/feedback@10.29.0", "", { "dependencies": { "@sentry/core": "10.29.0" } }, "sha512-Y7IRsNeS99cEONu1mZWZc3HvbjNnu59Hgymm0swFFKbdgbCgdT6l85kn2oLsuq4Ew8Dw/pL/Sgpwsl9UgYFpUg=="], + + "@sentry-internal/replay": ["@sentry-internal/replay@10.29.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.29.0", "@sentry/core": "10.29.0" } }, "sha512-45NVw9PwB9TQ8z+xJ6G6Za+wmQ1RTA35heBSzR6U4bknj8LmA04k2iwnobvxCBEQXeLfcJEO1vFgagMoqMZMBw=="], + + "@sentry-internal/replay-canvas": ["@sentry-internal/replay-canvas@10.29.0", "", { "dependencies": { "@sentry-internal/replay": "10.29.0", "@sentry/core": "10.29.0" } }, "sha512-typY4JrpAQQGPuSyd/BD8+nNCbvTV2UVvKzr+iKgI0m1qc4Dz8tHZ4Nfais2Z8eYn/pL1kqVQN5ERTmJoYFdIw=="], + + "@sentry/browser": ["@sentry/browser@10.29.0", "", { "dependencies": { "@sentry-internal/browser-utils": "10.29.0", "@sentry-internal/feedback": "10.29.0", "@sentry-internal/replay": "10.29.0", "@sentry-internal/replay-canvas": "10.29.0", "@sentry/core": "10.29.0" } }, "sha512-XdbyIR6F4qoR9Z1JCWTgunVcTJjS9p2Th+v4wYs4ME+ZdLC4tuKKmRgYg3YdSIWCn1CBfIgdI6wqETSf7H6Njw=="], + + "@sentry/core": ["@sentry/core@10.29.0", "", {}, "sha512-olQ2DU9dA/Bwsz3PtA9KNXRMqBWRQSkPw+MxwWEoU1K1qtiM9L0j6lbEFb5iSY3d7WYD5MB+1d5COugjSBrHtw=="], + + "@sentry/electron": ["@sentry/electron@7.5.0", "", { "dependencies": { "@sentry/browser": "10.29.0", "@sentry/core": "10.29.0", "@sentry/node": "10.29.0" }, "peerDependencies": { "@sentry/node-native": "10.29.0" }, "optionalPeers": ["@sentry/node-native"] }, "sha512-88t/YsB5iO75faKdd7lIuJkwp9FGKgFlkDuaSJhsJiVcjlywkn8CwUbctAbS0gu6Suc0raHCF4ULvGyksKAoww=="], + + "@sentry/node": ["@sentry/node@10.29.0", "", { "dependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^2.2.0", "@opentelemetry/core": "^2.2.0", "@opentelemetry/instrumentation": "^0.208.0", "@opentelemetry/instrumentation-amqplib": "0.55.0", "@opentelemetry/instrumentation-connect": "0.52.0", "@opentelemetry/instrumentation-dataloader": "0.26.0", "@opentelemetry/instrumentation-express": "0.57.0", "@opentelemetry/instrumentation-fs": "0.28.0", "@opentelemetry/instrumentation-generic-pool": "0.52.0", "@opentelemetry/instrumentation-graphql": "0.56.0", "@opentelemetry/instrumentation-hapi": "0.55.0", "@opentelemetry/instrumentation-http": "0.208.0", "@opentelemetry/instrumentation-ioredis": "0.56.0", "@opentelemetry/instrumentation-kafkajs": "0.18.0", "@opentelemetry/instrumentation-knex": "0.53.0", "@opentelemetry/instrumentation-koa": "0.57.0", "@opentelemetry/instrumentation-lru-memoizer": "0.53.0", "@opentelemetry/instrumentation-mongodb": "0.61.0", "@opentelemetry/instrumentation-mongoose": "0.55.0", "@opentelemetry/instrumentation-mysql": "0.54.0", "@opentelemetry/instrumentation-mysql2": "0.55.0", "@opentelemetry/instrumentation-pg": "0.61.0", "@opentelemetry/instrumentation-redis": "0.57.0", "@opentelemetry/instrumentation-tedious": "0.27.0", "@opentelemetry/instrumentation-undici": "0.19.0", "@opentelemetry/resources": "^2.2.0", "@opentelemetry/sdk-trace-base": "^2.2.0", "@opentelemetry/semantic-conventions": "^1.37.0", "@prisma/instrumentation": "6.19.0", "@sentry/core": "10.29.0", "@sentry/node-core": "10.29.0", "@sentry/opentelemetry": "10.29.0", "import-in-the-middle": "^2", "minimatch": "^9.0.0" } }, "sha512-9j8VzV06VCj+H8tlxpfa7BNN4HzH5exv68WOufdMTXzzWLOXnzrdNDoYplm1G2S3LMvWsc1SVI3a8A0yBY7oWg=="], + + "@sentry/node-core": ["@sentry/node-core@10.29.0", "", { "dependencies": { "@apm-js-collab/tracing-hooks": "^0.3.1", "@sentry/core": "10.29.0", "@sentry/opentelemetry": "10.29.0", "import-in-the-middle": "^2" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/instrumentation": ">=0.57.1 <1", "@opentelemetry/resources": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/semantic-conventions": "^1.37.0" } }, "sha512-f/Y0okHhPPb5HnYNBqCivJ2YuXtSadvcIx16dzU5mHQxZhgGednUCPEX7rsvPcd4HneQz12HKLqxbAmNu+b3FA=="], + + "@sentry/opentelemetry": ["@sentry/opentelemetry@10.29.0", "", { "dependencies": { "@sentry/core": "10.29.0" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0 || ^2.2.0", "@opentelemetry/semantic-conventions": "^1.37.0" } }, "sha512-5QvtAwS73HlI/+OTF1poAFELzsc0se+PHmMsXGGrOeNBvjCr3ZE8qvke09aeMn7uRImf3Nc9J6i2KtSHJnbKPA=="], + + "@shikijs/core": ["@shikijs/core@1.29.2", "", { "dependencies": { "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.4" } }, "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "oniguruma-to-es": "^2.2.0" } }, "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1" } }, "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA=="], + + "@shikijs/langs": ["@shikijs/langs@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ=="], + + "@shikijs/themes": ["@shikijs/themes@1.29.2", "", { "dependencies": { "@shikijs/types": "1.29.2" } }, "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g=="], + + "@shikijs/types": ["@shikijs/types@1.29.2", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + + "@sindresorhus/is": ["@sindresorhus/is@4.6.0", "", {}, "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw=="], + + "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], + + "@szmarczak/http-timer": ["@szmarczak/http-timer@4.0.6", "", { "dependencies": { "defer-to-connect": "^2.0.0" } }, "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w=="], + + "@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="], + + "@tanstack/query-core": ["@tanstack/query-core@5.90.16", "", {}, "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww=="], + + "@tanstack/react-query": ["@tanstack/react-query@5.90.16", "", { "dependencies": { "@tanstack/query-core": "5.90.16" }, "peerDependencies": { "react": "^18 || ^19" } }, "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ=="], + + "@tanstack/react-virtual": ["@tanstack/react-virtual@3.13.18", "", { "dependencies": { "@tanstack/virtual-core": "3.13.18" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-dZkhyfahpvlaV0rIKnvQiVoWPyURppl6w4m9IwMDpuIjcJ1sD9YGWrt0wISvgU7ewACXx2Ct46WPgI6qAD4v6A=="], + + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.18", "", {}, "sha512-Mx86Hqu1k39icq2Zusq+Ey2J6dDWTjDvEv43PJtRCoEYTLyfaPnxIQ6iy7YAOK0NV/qOEmZQ/uCufrppZxTgcg=="], + + "@tootallnate/once": ["@tootallnate/once@2.0.0", "", {}, "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A=="], + + "@trpc/client": ["@trpc/client@11.8.1", "", { "peerDependencies": { "@trpc/server": "11.8.1", "typescript": ">=5.7.2" } }, "sha512-L/SJFGanr9xGABmuDoeXR4xAdHJmsXsiF9OuH+apecJ+8sUITzVT1EPeqp0ebqA6lBhEl5pPfg3rngVhi/h60Q=="], + + "@trpc/react-query": ["@trpc/react-query@11.8.1", "", { "peerDependencies": { "@tanstack/react-query": "^5.80.3", "@trpc/client": "11.8.1", "@trpc/server": "11.8.1", "react": ">=18.2.0", "react-dom": ">=18.2.0", "typescript": ">=5.7.2" } }, "sha512-0Vu55ld/oINb4U6nIPPi7eZMhxUop6K+4QUK90RVsfSD5r+957sM80M4c8bjh/JBZUxMFv9JOhxxlWcrgHxHow=="], + + "@trpc/server": ["@trpc/server@11.8.1", "", { "peerDependencies": { "typescript": ">=5.7.2" } }, "sha512-P4rzZRpEL7zDFgjxK65IdyH0e41FMFfTkQkuq0BA5tKcr7E6v9/v38DEklCpoDN6sPiB1Sigy/PUEzHENhswDA=="], + + "@types/babel__core": ["@types/babel__core@7.20.5", "", { "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", "@types/babel__generator": "*", "@types/babel__template": "*", "@types/babel__traverse": "*" } }, "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA=="], + + "@types/babel__generator": ["@types/babel__generator@7.27.0", "", { "dependencies": { "@babel/types": "^7.0.0" } }, "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg=="], + + "@types/babel__template": ["@types/babel__template@7.4.4", "", { "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A=="], + + "@types/babel__traverse": ["@types/babel__traverse@7.28.0", "", { "dependencies": { "@babel/types": "^7.28.2" } }, "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q=="], + + "@types/better-sqlite3": ["@types/better-sqlite3@7.6.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA=="], + + "@types/cacheable-request": ["@types/cacheable-request@6.0.3", "", { "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", "@types/node": "*", "@types/responselike": "^1.0.0" } }, "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw=="], + + "@types/connect": ["@types/connect@3.4.38", "", { "dependencies": { "@types/node": "*" } }, "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug=="], + + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "*" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], + + "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + + "@types/fs-extra": ["@types/fs-extra@9.0.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA=="], + + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + + "@types/http-cache-semantics": ["@types/http-cache-semantics@4.0.4", "", {}, "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="], + + "@types/keyv": ["@types/keyv@3.1.4", "", { "dependencies": { "@types/node": "*" } }, "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg=="], + + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], + + "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], + + "@types/mysql": ["@types/mysql@2.15.27", "", { "dependencies": { "@types/node": "*" } }, "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA=="], + + "@types/node": ["@types/node@20.19.27", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug=="], + + "@types/pg": ["@types/pg@8.15.6", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ=="], + + "@types/pg-pool": ["@types/pg-pool@2.0.6", "", { "dependencies": { "@types/pg": "*" } }, "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ=="], + + "@types/plist": ["@types/plist@3.0.5", "", { "dependencies": { "@types/node": "*", "xmlbuilder": ">=11.0.1" } }, "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA=="], + + "@types/prismjs": ["@types/prismjs@1.26.5", "", {}, "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ=="], + + "@types/react": ["@types/react@19.2.7", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg=="], + + "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "^19.2.0" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + + "@types/react-syntax-highlighter": ["@types/react-syntax-highlighter@15.5.13", "", { "dependencies": { "@types/react": "*" } }, "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA=="], + + "@types/responselike": ["@types/responselike@1.0.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw=="], + + "@types/tedious": ["@types/tedious@4.0.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw=="], + + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], + + "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "@types/verror": ["@types/verror@1.10.11", "", {}, "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg=="], + + "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], + + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + + "@vercel/oidc": ["@vercel/oidc@3.1.0", "", {}, "sha512-Fw28YZpRnA3cAHHDlkt7xQHiJ0fcL+NRcIqsocZQUSmbzeIKRpwttJjik5ZGanXP+vlA4SbTg+AbA3bP363l+w=="], + + "@vitejs/plugin-react": ["@vitejs/plugin-react@4.7.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/plugin-transform-react-jsx-self": "^7.27.1", "@babel/plugin-transform-react-jsx-source": "^7.27.1", "@rolldown/pluginutils": "1.0.0-beta.27", "@types/babel__core": "^7.20.5", "react-refresh": "^0.17.0" }, "peerDependencies": { "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA=="], + + "@vue/reactivity": ["@vue/reactivity@3.5.26", "", { "dependencies": { "@vue/shared": "3.5.26" } }, "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ=="], + + "@vue/shared": ["@vue/shared@3.5.26", "", {}, "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A=="], + + "@xmldom/xmldom": ["@xmldom/xmldom@0.8.11", "", {}, "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw=="], + + "@xterm/addon-canvas": ["@xterm/addon-canvas@0.7.0", "", { "peerDependencies": { "@xterm/xterm": "^5.0.0" } }, "sha512-LF5LYcfvefJuJ7QotNRdRSPc9YASAVDeoT5uyXS/nZshZXjYplGXRECBGiznwvhNL2I8bq1Lf5MzRwstsYQ2Iw=="], + + "@xterm/addon-fit": ["@xterm/addon-fit@0.11.0", "", {}, "sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g=="], + + "@xterm/addon-search": ["@xterm/addon-search@0.16.0", "", {}, "sha512-9OeuBFu0/uZJPu+9AHKY6g/w0Czyb/Ut0A5t79I4ULoU4IfU5BEpPFVGQxP4zTTMdfZEYkVIRYbHBX1xWwjeSA=="], + + "@xterm/addon-serialize": ["@xterm/addon-serialize@0.14.0", "", {}, "sha512-uteyTU1EkrQa2Ux6P/uFl2fzmXI46jy5uoQMKEOM0fKTyiW7cSn0WrFenHm5vO5uEXX/GpwW/FgILvv3r0WbkA=="], + + "@xterm/addon-web-links": ["@xterm/addon-web-links@0.12.0", "", {}, "sha512-4Smom3RPyVp7ZMYOYDoC/9eGJJJqYhnPLGGqJ6wOBfB8VxPViJNSKdgRYb8NpaM6YSelEKbA2SStD7lGyqaobw=="], + + "@xterm/addon-webgl": ["@xterm/addon-webgl@0.19.0", "", {}, "sha512-b3fMOsyLVuCeNJWxolACEUED0vm7qC0cy4wRvf3oURSzDTYVQiGPhTnhWZwIHdvC48Y+oLhvYXnY4XDXPoJo6A=="], + + "@xterm/xterm": ["@xterm/xterm@5.5.0", "", {}, "sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A=="], + + "abbrev": ["abbrev@1.1.1", "", {}, "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="], + + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], + + "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], + + "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], + + "agentkeepalive": ["agentkeepalive@4.6.0", "", { "dependencies": { "humanize-ms": "^1.2.1" } }, "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ=="], + + "aggregate-error": ["aggregate-error@3.1.0", "", { "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" } }, "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA=="], + + "ai": ["ai@6.0.14", "", { "dependencies": { "@ai-sdk/gateway": "3.0.9", "@ai-sdk/provider": "3.0.2", "@ai-sdk/provider-utils": "4.0.4", "@opentelemetry/api": "1.9.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-OaEJFeQ3gb45eZtC/lSNKqAxmsrqWxC8wLmIVXFYAMvPXE3lb96zIdS3swYArR4uXOVt6N7H/XZSyQz/Dl+HTw=="], + + "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="], + + "ajv-keywords": ["ajv-keywords@3.5.2", "", { "peerDependencies": { "ajv": "^6.9.1" } }, "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "any-promise": ["any-promise@1.3.0", "", {}, "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="], + + "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + + "app-builder-bin": ["app-builder-bin@5.0.0-alpha.10", "", {}, "sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw=="], + + "app-builder-lib": ["app-builder-lib@25.1.8", "", { "dependencies": { "@develar/schema-utils": "~2.6.5", "@electron/notarize": "2.5.0", "@electron/osx-sign": "1.3.1", "@electron/rebuild": "3.6.1", "@electron/universal": "2.0.1", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", "builder-util": "25.1.7", "builder-util-runtime": "9.2.10", "chromium-pickle-js": "^0.2.0", "config-file-ts": "0.2.8-rc1", "debug": "^4.3.4", "dotenv": "^16.4.5", "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", "electron-publish": "25.1.7", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "is-ci": "^3.0.0", "isbinaryfile": "^5.0.0", "js-yaml": "^4.1.0", "json5": "^2.2.3", "lazy-val": "^1.0.5", "minimatch": "^10.0.0", "resedit": "^1.7.0", "sanitize-filename": "^1.6.3", "semver": "^7.3.8", "tar": "^6.1.12", "temp-file": "^3.4.0" }, "peerDependencies": { "dmg-builder": "25.1.8", "electron-builder-squirrel-windows": "25.1.8" } }, "sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg=="], + + "aproba": ["aproba@2.1.0", "", {}, "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew=="], + + "archiver": ["archiver@5.3.2", "", { "dependencies": { "archiver-utils": "^2.1.0", "async": "^3.2.4", "buffer-crc32": "^0.2.1", "readable-stream": "^3.6.0", "readdir-glob": "^1.1.2", "tar-stream": "^2.2.0", "zip-stream": "^4.1.0" } }, "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw=="], + + "archiver-utils": ["archiver-utils@2.1.0", "", { "dependencies": { "glob": "^7.1.4", "graceful-fs": "^4.2.0", "lazystream": "^1.0.0", "lodash.defaults": "^4.2.0", "lodash.difference": "^4.5.0", "lodash.flatten": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.union": "^4.6.0", "normalize-path": "^3.0.0", "readable-stream": "^2.0.0" } }, "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw=="], + + "are-we-there-yet": ["are-we-there-yet@3.0.1", "", { "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" } }, "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg=="], + + "arg": ["arg@5.0.2", "", {}, "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="], + + "argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="], + + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + + "assert-plus": ["assert-plus@1.0.0", "", {}, "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="], + + "astral-regex": ["astral-regex@2.0.0", "", {}, "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="], + + "async": ["async@3.2.6", "", {}, "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA=="], + + "async-exit-hook": ["async-exit-hook@2.0.1", "", {}, "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw=="], + + "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="], + + "at-least-node": ["at-least-node@1.0.0", "", {}, "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="], + + "autoprefixer": ["autoprefixer@10.4.23", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001760", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA=="], + + "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], + + "baseline-browser-mapping": ["baseline-browser-mapping@2.9.11", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ=="], + + "better-sqlite3": ["better-sqlite3@11.10.0", "", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" } }, "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ=="], + + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], + + "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + + "bl": ["bl@4.1.0", "", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="], + + "bluebird": ["bluebird@3.7.2", "", {}, "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="], + + "bluebird-lst": ["bluebird-lst@1.0.9", "", { "dependencies": { "bluebird": "^3.5.5" } }, "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw=="], + + "boolean": ["boolean@3.2.0", "", {}, "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw=="], + + "brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + + "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + + "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + + "buffer": ["buffer@5.7.1", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="], + + "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], + + "buffer-from": ["buffer-from@1.1.2", "", {}, "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="], + + "builder-util": ["builder-util@25.1.7", "", { "dependencies": { "7zip-bin": "~5.2.0", "@types/debug": "^4.1.6", "app-builder-bin": "5.0.0-alpha.10", "bluebird-lst": "^1.0.9", "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "fs-extra": "^10.1.0", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.0", "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.19", "stat-mode": "^1.0.0", "temp-file": "^3.4.0" } }, "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww=="], + + "builder-util-runtime": ["builder-util-runtime@9.2.10", "", { "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" } }, "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw=="], + + "c12": ["c12@3.1.0", "", { "dependencies": { "chokidar": "^4.0.3", "confbox": "^0.2.2", "defu": "^6.1.4", "dotenv": "^16.6.1", "exsolve": "^1.0.7", "giget": "^2.0.0", "jiti": "^2.4.2", "ohash": "^2.0.11", "pathe": "^2.0.3", "perfect-debounce": "^1.0.0", "pkg-types": "^2.2.0", "rc9": "^2.1.2" }, "peerDependencies": { "magicast": "^0.3.5" }, "optionalPeers": ["magicast"] }, "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw=="], + + "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], + + "cacache": ["cacache@16.1.3", "", { "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^8.0.1", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", "p-map": "^4.0.0", "promise-inflight": "^1.0.1", "rimraf": "^3.0.2", "ssri": "^9.0.0", "tar": "^6.1.11", "unique-filename": "^2.0.0" } }, "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ=="], + + "cacheable-lookup": ["cacheable-lookup@5.0.4", "", {}, "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="], + + "cacheable-request": ["cacheable-request@7.0.4", "", { "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", "normalize-url": "^6.0.1", "responselike": "^2.0.0" } }, "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "camelcase-css": ["camelcase-css@2.0.1", "", {}, "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA=="], + + "caniuse-lite": ["caniuse-lite@1.0.30001762", "", {}, "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw=="], + + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "character-entities": ["character-entities@2.0.2", "", {}, "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + + "character-reference-invalid": ["character-reference-invalid@2.0.1", "", {}, "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw=="], + + "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], + + "chownr": ["chownr@2.0.0", "", {}, "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="], + + "chromium-pickle-js": ["chromium-pickle-js@0.2.0", "", {}, "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw=="], + + "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], + + "citty": ["citty@0.1.6", "", { "dependencies": { "consola": "^3.2.3" } }, "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ=="], + + "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], + + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], + + "clean-stack": ["clean-stack@2.2.0", "", {}, "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="], + + "cli-cursor": ["cli-cursor@3.1.0", "", { "dependencies": { "restore-cursor": "^3.1.0" } }, "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw=="], + + "cli-spinners": ["cli-spinners@2.9.2", "", {}, "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg=="], + + "cli-truncate": ["cli-truncate@2.1.0", "", { "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" } }, "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg=="], + + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], + + "clone-response": ["clone-response@1.0.3", "", { "dependencies": { "mimic-response": "^1.0.0" } }, "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA=="], + + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "color-support": ["color-support@1.1.3", "", { "bin": { "color-support": "bin.js" } }, "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="], + + "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="], + + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + + "commander": ["commander@4.1.1", "", {}, "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA=="], + + "compare-version": ["compare-version@0.1.2", "", {}, "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A=="], + + "compress-commons": ["compress-commons@4.1.2", "", { "dependencies": { "buffer-crc32": "^0.2.13", "crc32-stream": "^4.0.2", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } }, "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg=="], + + "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], + + "confbox": ["confbox@0.2.2", "", {}, "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="], + + "config-file-ts": ["config-file-ts@0.2.8-rc1", "", { "dependencies": { "glob": "^10.3.12", "typescript": "^5.4.3" } }, "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg=="], + + "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], + + "console-control-strings": ["console-control-strings@1.1.0", "", {}, "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="], + + "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], + + "copy-anything": ["copy-anything@4.0.5", "", { "dependencies": { "is-what": "^5.2.0" } }, "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA=="], + + "core-js": ["core-js@3.47.0", "", {}, "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg=="], + + "core-util-is": ["core-util-is@1.0.2", "", {}, "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="], + + "crc": ["crc@3.8.0", "", { "dependencies": { "buffer": "^5.1.0" } }, "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ=="], + + "crc-32": ["crc-32@1.2.2", "", { "bin": { "crc32": "bin/crc32.njs" } }, "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ=="], + + "crc32-stream": ["crc32-stream@4.0.3", "", { "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^3.4.0" } }, "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw=="], + + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "date-fns": ["date-fns@3.6.0", "", {}, "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww=="], + + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "decode-named-character-reference": ["decode-named-character-reference@1.2.0", "", { "dependencies": { "character-entities": "^2.0.0" } }, "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q=="], + + "decompress-response": ["decompress-response@6.0.0", "", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="], + + "deep-extend": ["deep-extend@0.6.0", "", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="], + + "deepmerge-ts": ["deepmerge-ts@7.1.5", "", {}, "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw=="], + + "defaults": ["defaults@1.0.4", "", { "dependencies": { "clone": "^1.0.2" } }, "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A=="], + + "defer-to-connect": ["defer-to-connect@2.0.1", "", {}, "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + + "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="], + + "delegates": ["delegates@1.0.0", "", {}, "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="], + + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + + "destr": ["destr@2.0.5", "", {}, "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA=="], + + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], + + "detect-node": ["detect-node@2.1.0", "", {}, "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="], + + "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], + + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + + "didyoumean": ["didyoumean@1.2.2", "", {}, "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="], + + "dir-compare": ["dir-compare@4.2.0", "", { "dependencies": { "minimatch": "^3.0.5", "p-limit": "^3.1.0 " } }, "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ=="], + + "dlv": ["dlv@1.1.3", "", {}, "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="], + + "dmg-builder": ["dmg-builder@25.1.8", "", { "dependencies": { "app-builder-lib": "25.1.8", "builder-util": "25.1.7", "builder-util-runtime": "9.2.10", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" }, "optionalDependencies": { "dmg-license": "^1.0.11" } }, "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ=="], + + "dmg-license": ["dmg-license@1.0.11", "", { "dependencies": { "@types/plist": "^3.0.1", "@types/verror": "^1.10.3", "ajv": "^6.10.0", "crc": "^3.8.0", "iconv-corefoundation": "^1.1.7", "plist": "^3.0.4", "smart-buffer": "^4.0.2", "verror": "^1.10.0" }, "os": "darwin", "bin": { "dmg-license": "bin/dmg-license.js" } }, "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q=="], + + "dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="], + + "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], + + "dotenv-expand": ["dotenv-expand@11.0.7", "", { "dependencies": { "dotenv": "^16.4.5" } }, "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA=="], + + "drizzle-kit": ["drizzle-kit@0.31.8", "", { "dependencies": { "@drizzle-team/brocli": "^0.10.2", "@esbuild-kit/esm-loader": "^2.5.5", "esbuild": "^0.25.4", "esbuild-register": "^3.5.0" }, "bin": { "drizzle-kit": "bin.cjs" } }, "sha512-O9EC/miwdnRDY10qRxM8P3Pg8hXe3LyU4ZipReKOgTwn4OqANmftj8XJz1UPUAS6NMHf0E2htjsbQujUTkncCg=="], + + "drizzle-orm": ["drizzle-orm@0.45.1", "", { "peerDependencies": { "@aws-sdk/client-rds-data": ">=3", "@cloudflare/workers-types": ">=4", "@electric-sql/pglite": ">=0.2.0", "@libsql/client": ">=0.10.0", "@libsql/client-wasm": ">=0.10.0", "@neondatabase/serverless": ">=0.10.0", "@op-engineering/op-sqlite": ">=2", "@opentelemetry/api": "^1.4.1", "@planetscale/database": ">=1.13", "@prisma/client": "*", "@tidbcloud/serverless": "*", "@types/better-sqlite3": "*", "@types/pg": "*", "@types/sql.js": "*", "@upstash/redis": ">=1.34.7", "@vercel/postgres": ">=0.8.0", "@xata.io/client": "*", "better-sqlite3": ">=7", "bun-types": "*", "expo-sqlite": ">=14.0.0", "gel": ">=2", "knex": "*", "kysely": "*", "mysql2": ">=2", "pg": ">=8", "postgres": ">=3", "sql.js": ">=1", "sqlite3": ">=5" }, "optionalPeers": ["@aws-sdk/client-rds-data", "@cloudflare/workers-types", "@electric-sql/pglite", "@libsql/client", "@libsql/client-wasm", "@neondatabase/serverless", "@op-engineering/op-sqlite", "@opentelemetry/api", "@planetscale/database", "@prisma/client", "@tidbcloud/serverless", "@types/better-sqlite3", "@types/pg", "@types/sql.js", "@upstash/redis", "@vercel/postgres", "@xata.io/client", "better-sqlite3", "bun-types", "expo-sqlite", "gel", "knex", "kysely", "mysql2", "pg", "postgres", "sql.js", "sqlite3"] }, "sha512-Te0FOdKIistGNPMq2jscdqngBRfBpC8uMFVwqjf6gtTVJHIQ/dosgV/CLBU2N4ZJBsXL5savCba9b0YJskKdcA=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "eastasianwidth": ["eastasianwidth@0.2.0", "", {}, "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="], + + "effect": ["effect@3.18.4", "", { "dependencies": { "@standard-schema/spec": "^1.0.0", "fast-check": "^3.23.1" } }, "sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA=="], + + "ejs": ["ejs@3.1.10", "", { "dependencies": { "jake": "^10.8.5" }, "bin": { "ejs": "bin/cli.js" } }, "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA=="], + + "electron": ["electron@33.4.5", "", { "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", "extract-zip": "^2.0.1" }, "bin": { "electron": "cli.js" } }, "sha512-rbDc4QOqfMT1uopUG+KcaMKzKgFAXAzN3wNIdgErnB1tUnpgTxwFv1BDN/exCl1vaVWBeM9YtbO5PgbGZeq7xw=="], + + "electron-builder": ["electron-builder@25.1.8", "", { "dependencies": { "app-builder-lib": "25.1.8", "builder-util": "25.1.7", "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "dmg-builder": "25.1.8", "fs-extra": "^10.1.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" }, "bin": { "electron-builder": "cli.js", "install-app-deps": "install-app-deps.js" } }, "sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig=="], + + "electron-builder-squirrel-windows": ["electron-builder-squirrel-windows@25.1.8", "", { "dependencies": { "app-builder-lib": "25.1.8", "archiver": "^5.3.1", "builder-util": "25.1.7", "fs-extra": "^10.1.0" } }, "sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg=="], + + "electron-log": ["electron-log@5.4.3", "", {}, "sha512-sOUsM3LjZdugatazSQ/XTyNcw8dfvH1SYhXWiJyfYodAAKOZdHs0txPiLDXFzOZbhXgAgshQkshH2ccq0feyLQ=="], + + "electron-publish": ["electron-publish@25.1.7", "", { "dependencies": { "@types/fs-extra": "^9.0.11", "builder-util": "25.1.7", "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" } }, "sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg=="], + + "electron-rebuild": ["electron-rebuild@3.2.9", "", { "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", "debug": "^4.1.1", "detect-libc": "^2.0.1", "fs-extra": "^10.0.0", "got": "^11.7.0", "lzma-native": "^8.0.5", "node-abi": "^3.0.0", "node-api-version": "^0.1.4", "node-gyp": "^9.0.0", "ora": "^5.1.0", "semver": "^7.3.5", "tar": "^6.0.5", "yargs": "^17.0.1" }, "bin": { "electron-rebuild": "lib/src/cli.js" } }, "sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw=="], + + "electron-to-chromium": ["electron-to-chromium@1.5.267", "", {}, "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw=="], + + "electron-updater": ["electron-updater@6.7.3", "", { "dependencies": { "builder-util-runtime": "9.5.1", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", "semver": "~7.7.3", "tiny-typed-emitter": "^2.1.0" } }, "sha512-EgkT8Z9noqXKbwc3u5FkJA+r48jwZ5DTUiOkJMOTEEH//n5Am6wfQGz7nvSFEA2oIAMv9jRzn5JKTyWeSKOPgg=="], + + "electron-vite": ["electron-vite@3.1.0", "", { "dependencies": { "@babel/core": "^7.26.10", "@babel/plugin-transform-arrow-functions": "^7.25.9", "cac": "^6.7.14", "esbuild": "^0.25.1", "magic-string": "^0.30.17", "picocolors": "^1.1.1" }, "peerDependencies": { "@swc/core": "^1.0.0", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" }, "optionalPeers": ["@swc/core"], "bin": { "electron-vite": "bin/electron-vite.js" } }, "sha512-M7aAzaRvSl5VO+6KN4neJCYLHLpF/iWo5ztchI/+wMxIieDZQqpbCYfaEHHHPH6eupEzfvZdLYdPdmvGqoVe0Q=="], + + "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "emoji-regex-xs": ["emoji-regex-xs@1.0.0", "", {}, "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg=="], + + "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], + + "encoding": ["encoding@0.1.13", "", { "dependencies": { "iconv-lite": "^0.6.2" } }, "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A=="], + + "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], + + "env-paths": ["env-paths@2.2.1", "", {}, "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="], + + "err-code": ["err-code@2.0.3", "", {}, "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="], + + "es6-error": ["es6-error@4.1.1", "", {}, "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="], + + "esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], + + "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], + + "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], + + "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="], + + "esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="], + + "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + + "expand-template": ["expand-template@2.0.3", "", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="], + + "exponential-backoff": ["exponential-backoff@3.1.3", "", {}, "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA=="], + + "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], + + "extend-shallow": ["extend-shallow@2.0.1", "", { "dependencies": { "is-extendable": "^0.1.0" } }, "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug=="], + + "extract-zip": ["extract-zip@2.0.1", "", { "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", "yauzl": "^2.10.0" }, "optionalDependencies": { "@types/yauzl": "^2.9.1" }, "bin": { "extract-zip": "cli.js" } }, "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg=="], + + "extsprintf": ["extsprintf@1.4.1", "", {}, "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA=="], + + "fast-check": ["fast-check@3.23.2", "", { "dependencies": { "pure-rand": "^6.1.0" } }, "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A=="], + + "fast-deep-equal": ["fast-deep-equal@3.1.3", "", {}, "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="], + + "fast-diff": ["fast-diff@1.3.0", "", {}, "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw=="], + + "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], + + "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="], + + "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + + "fault": ["fault@1.0.4", "", { "dependencies": { "format": "^0.2.0" } }, "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA=="], + + "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], + + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + + "fflate": ["fflate@0.4.8", "", {}, "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA=="], + + "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], + + "filelist": ["filelist@1.0.4", "", { "dependencies": { "minimatch": "^5.0.1" } }, "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q=="], + + "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], + + "foreground-child": ["foreground-child@3.3.1", "", { "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" } }, "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw=="], + + "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="], + + "format": ["format@0.2.2", "", {}, "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww=="], + + "forwarded-parse": ["forwarded-parse@2.1.2", "", {}, "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="], + + "fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="], + + "framer-motion": ["framer-motion@11.18.2", "", { "dependencies": { "motion-dom": "^11.18.1", "motion-utils": "^11.18.1", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-5F5Och7wrvtLVElIpclDT0CBzMVg3dL22B64aZwHtsIY8RB4mXICLrkajK4G9R+ieSAGcgrLeae2SeUTg2pr6w=="], + + "fs-constants": ["fs-constants@1.0.0", "", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="], + + "fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], + + "fs-minipass": ["fs-minipass@2.1.0", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg=="], + + "fs.realpath": ["fs.realpath@1.0.0", "", {}, "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="], + + "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "gauge": ["gauge@4.0.4", "", { "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", "console-control-strings": "^1.1.0", "has-unicode": "^2.0.1", "signal-exit": "^3.0.7", "string-width": "^4.2.3", "strip-ansi": "^6.0.1", "wide-align": "^1.1.5" } }, "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg=="], + + "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], + + "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-nonce": ["get-nonce@1.0.1", "", {}, "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], + + "get-tsconfig": ["get-tsconfig@4.13.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ=="], + + "giget": ["giget@2.0.0", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.0", "defu": "^6.1.4", "node-fetch-native": "^1.6.6", "nypm": "^0.6.0", "pathe": "^2.0.3" }, "bin": { "giget": "dist/cli.mjs" } }, "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA=="], + + "github-from-package": ["github-from-package@0.0.0", "", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="], + + "glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + + "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], + + "global-agent": ["global-agent@3.0.0", "", { "dependencies": { "boolean": "^3.0.1", "es6-error": "^4.1.1", "matcher": "^3.0.0", "roarr": "^2.15.3", "semver": "^7.3.2", "serialize-error": "^7.0.1" } }, "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q=="], + + "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "got": ["got@11.8.6", "", { "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", "@types/cacheable-request": "^6.0.1", "@types/responselike": "^1.0.0", "cacheable-lookup": "^5.0.3", "cacheable-request": "^7.0.2", "decompress-response": "^6.0.0", "http2-wrapper": "^1.0.0-beta.5.2", "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" } }, "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g=="], + + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + + "gray-matter": ["gray-matter@4.0.3", "", { "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" } }, "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "has-unicode": ["has-unicode@2.0.1", "", {}, "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], + + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + + "highlight.js": ["highlight.js@11.11.1", "", {}, "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w=="], + + "highlightjs-vue": ["highlightjs-vue@1.0.0", "", {}, "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA=="], + + "hosted-git-info": ["hosted-git-info@4.1.0", "", { "dependencies": { "lru-cache": "^6.0.0" } }, "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + + "http-cache-semantics": ["http-cache-semantics@4.2.0", "", {}, "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ=="], + + "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], + + "http2-wrapper": ["http2-wrapper@1.0.3", "", { "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" } }, "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg=="], + + "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], + + "humanize-ms": ["humanize-ms@1.2.1", "", { "dependencies": { "ms": "^2.0.0" } }, "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ=="], + + "iconv-corefoundation": ["iconv-corefoundation@1.1.7", "", { "dependencies": { "cli-truncate": "^2.1.0", "node-addon-api": "^1.6.3" }, "os": "darwin" }, "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ=="], + + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + + "ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="], + + "import-in-the-middle": ["import-in-the-middle@2.0.1", "", { "dependencies": { "acorn": "^8.14.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, "sha512-bruMpJ7xz+9jwGzrwEhWgvRrlKRYCRDBrfU+ur3FcasYXLJDxTruJ//8g2Noj+QFyRBeqbpj8Bhn4Fbw6HjvhA=="], + + "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="], + + "indent-string": ["indent-string@4.0.0", "", {}, "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="], + + "infer-owner": ["infer-owner@1.0.4", "", {}, "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A=="], + + "inflight": ["inflight@1.0.6", "", { "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA=="], + + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], + + "ini": ["ini@1.3.8", "", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="], + + "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], + + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], + + "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], + + "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="], + + "is-ci": ["is-ci@3.0.1", "", { "dependencies": { "ci-info": "^3.2.0" }, "bin": { "is-ci": "bin.js" } }, "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ=="], + + "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + + "is-decimal": ["is-decimal@2.0.1", "", {}, "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A=="], + + "is-extendable": ["is-extendable@0.1.1", "", {}, "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw=="], + + "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + + "is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + + "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], + + "is-hexadecimal": ["is-hexadecimal@2.0.1", "", {}, "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg=="], + + "is-interactive": ["is-interactive@1.0.0", "", {}, "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="], + + "is-lambda": ["is-lambda@1.0.1", "", {}, "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ=="], + + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + + "is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + + "is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="], + + "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + + "isbinaryfile": ["isbinaryfile@5.0.7", "", {}, "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ=="], + + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + + "jackspeak": ["jackspeak@3.4.3", "", { "dependencies": { "@isaacs/cliui": "^8.0.2" }, "optionalDependencies": { "@pkgjs/parseargs": "^0.11.0" } }, "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw=="], + + "jake": ["jake@10.9.4", "", { "dependencies": { "async": "^3.2.6", "filelist": "^1.0.4", "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" } }, "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA=="], + + "jiti": ["jiti@1.21.7", "", { "bin": { "jiti": "bin/jiti.js" } }, "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A=="], + + "jotai": ["jotai@2.16.1", "", { "peerDependencies": { "@babel/core": ">=7.0.0", "@babel/template": ">=7.0.0", "@types/react": ">=17.0.0", "react": ">=17.0.0" }, "optionalPeers": ["@babel/core", "@babel/template", "@types/react", "react"] }, "sha512-vrHcAbo3P7Br37C8Bv6JshMtlKMPqqmx0DDREtTjT4nf3QChDrYdbH+4ik/9V0cXA57dK28RkJ5dctYvavcIlg=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + + "jsesc": ["jsesc@3.1.0", "", { "bin": { "jsesc": "bin/jsesc" } }, "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA=="], + + "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], + + "json-schema": ["json-schema@0.4.0", "", {}, "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="], + + "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], + + "json-stringify-safe": ["json-stringify-safe@5.0.1", "", {}, "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="], + + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + + "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + + "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="], + + "kind-of": ["kind-of@6.0.3", "", {}, "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="], + + "lazy-val": ["lazy-val@1.0.5", "", {}, "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q=="], + + "lazystream": ["lazystream@1.0.1", "", { "dependencies": { "readable-stream": "^2.0.5" } }, "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw=="], + + "lilconfig": ["lilconfig@3.1.3", "", {}, "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw=="], + + "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], + + "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], + + "lodash.defaults": ["lodash.defaults@4.2.0", "", {}, "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ=="], + + "lodash.difference": ["lodash.difference@4.5.0", "", {}, "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA=="], + + "lodash.escaperegexp": ["lodash.escaperegexp@4.1.2", "", {}, "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw=="], + + "lodash.flatten": ["lodash.flatten@4.4.0", "", {}, "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g=="], + + "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], + + "lodash.isplainobject": ["lodash.isplainobject@4.0.6", "", {}, "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="], + + "lodash.union": ["lodash.union@4.6.0", "", {}, "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw=="], + + "log-symbols": ["log-symbols@4.1.0", "", { "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" } }, "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg=="], + + "lowercase-keys": ["lowercase-keys@2.0.0", "", {}, "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="], + + "lowlight": ["lowlight@3.3.0", "", { "dependencies": { "@types/hast": "^3.0.0", "devlop": "^1.0.0", "highlight.js": "~11.11.0" } }, "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ=="], + + "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + + "lucide-react": ["lucide-react@0.468.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" } }, "sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA=="], + + "lzma-native": ["lzma-native@8.0.6", "", { "dependencies": { "node-addon-api": "^3.1.0", "node-gyp-build": "^4.2.1", "readable-stream": "^3.6.0" }, "bin": { "lzmajs": "bin/lzmajs" } }, "sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA=="], + + "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], + + "make-fetch-happen": ["make-fetch-happen@10.2.1", "", { "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-fetch": "^2.0.3", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", "promise-retry": "^2.0.1", "socks-proxy-agent": "^7.0.0", "ssri": "^9.0.0" } }, "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w=="], + + "matcher": ["matcher@3.0.0", "", { "dependencies": { "escape-string-regexp": "^4.0.0" } }, "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.1", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA=="], + + "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], + + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + + "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], + + "mime": ["mime@2.6.0", "", { "bin": { "mime": "cli.js" } }, "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg=="], + + "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + + "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + + "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], + + "mimic-response": ["mimic-response@3.1.0", "", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="], + + "minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], + + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], + + "minipass": ["minipass@5.0.0", "", {}, "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ=="], + + "minipass-collect": ["minipass-collect@1.0.2", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA=="], + + "minipass-fetch": ["minipass-fetch@2.1.2", "", { "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", "minizlib": "^2.1.2" }, "optionalDependencies": { "encoding": "^0.1.13" } }, "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA=="], + + "minipass-flush": ["minipass-flush@1.0.5", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw=="], + + "minipass-pipeline": ["minipass-pipeline@1.2.4", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A=="], + + "minipass-sized": ["minipass-sized@1.0.3", "", { "dependencies": { "minipass": "^3.0.0" } }, "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g=="], + + "minizlib": ["minizlib@2.1.2", "", { "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" } }, "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg=="], + + "mkdirp": ["mkdirp@1.0.4", "", { "bin": { "mkdirp": "bin/cmd.js" } }, "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="], + + "mkdirp-classic": ["mkdirp-classic@0.5.3", "", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="], + + "module-details-from-path": ["module-details-from-path@1.0.4", "", {}, "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w=="], + + "motion": ["motion@11.18.2", "", { "dependencies": { "framer-motion": "^11.18.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-JLjvFDuFr42NFtcVoMAyC2sEjnpA8xpy6qWPyzQvCloznAyQ8FIXioxWfHiLtgYhoVpfUqSWpn1h9++skj9+Wg=="], + + "motion-dom": ["motion-dom@11.18.1", "", { "dependencies": { "motion-utils": "^11.18.1" } }, "sha512-g76KvA001z+atjfxczdRtw/RXOM3OMSdd1f4DL77qCTF/+avrRJiawSG4yDibEQ215sr9kpinSlX2pCTJ9zbhw=="], + + "motion-utils": ["motion-utils@11.18.1", "", {}, "sha512-49Kt+HKjtbJKLtgO/LKj9Ld+6vw9BjH5d9sc40R/kVyH8GLAXgT42M2NnuPcJNuA3s9ZfZBUcwIgpmZWGEE+hA=="], + + "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], + + "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], + + "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + + "napi-build-utils": ["napi-build-utils@2.0.0", "", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="], + + "negotiator": ["negotiator@0.6.4", "", {}, "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w=="], + + "next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="], + + "node-abi": ["node-abi@3.85.0", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg=="], + + "node-addon-api": ["node-addon-api@7.1.1", "", {}, "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ=="], + + "node-api-version": ["node-api-version@0.1.4", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g=="], + + "node-fetch-native": ["node-fetch-native@1.6.7", "", {}, "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q=="], + + "node-gyp": ["node-gyp@9.4.1", "", { "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", "glob": "^7.1.4", "graceful-fs": "^4.2.6", "make-fetch-happen": "^10.0.3", "nopt": "^6.0.0", "npmlog": "^6.0.0", "rimraf": "^3.0.2", "semver": "^7.3.5", "tar": "^6.1.2", "which": "^2.0.2" }, "bin": { "node-gyp": "bin/node-gyp.js" } }, "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ=="], + + "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], + + "node-pty": ["node-pty@1.1.0", "", { "dependencies": { "node-addon-api": "^7.1.0" } }, "sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg=="], + + "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="], + + "nopt": ["nopt@6.0.0", "", { "dependencies": { "abbrev": "^1.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g=="], + + "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="], + + "normalize-url": ["normalize-url@6.1.0", "", {}, "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="], + + "npmlog": ["npmlog@6.0.2", "", { "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", "gauge": "^4.0.3", "set-blocking": "^2.0.0" } }, "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg=="], + + "nypm": ["nypm@0.6.2", "", { "dependencies": { "citty": "^0.1.6", "consola": "^3.4.2", "pathe": "^2.0.3", "pkg-types": "^2.3.0", "tinyexec": "^1.0.1" }, "bin": { "nypm": "dist/cli.mjs" } }, "sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g=="], + + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], + + "object-hash": ["object-hash@3.0.0", "", {}, "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], + + "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], + + "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], + + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + + "oniguruma-to-es": ["oniguruma-to-es@2.3.0", "", { "dependencies": { "emoji-regex-xs": "^1.0.0", "regex": "^5.1.1", "regex-recursion": "^5.1.1" } }, "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g=="], + + "ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + + "p-cancelable": ["p-cancelable@2.1.1", "", {}, "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg=="], + + "p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="], + + "p-map": ["p-map@4.0.0", "", { "dependencies": { "aggregate-error": "^3.0.0" } }, "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ=="], + + "package-json-from-dist": ["package-json-from-dist@1.0.1", "", {}, "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="], + + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", "is-alphanumerical": "^2.0.0", "is-decimal": "^2.0.0", "is-hexadecimal": "^2.0.0" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], + + "path-is-absolute": ["path-is-absolute@1.0.1", "", {}, "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="], + + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], + + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], + + "path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], + + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], + + "pe-library": ["pe-library@0.4.1", "", {}, "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw=="], + + "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], + + "perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], + + "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], + + "pg-protocol": ["pg-protocol@1.10.3", "", {}, "sha512-6DIBgBQaTKDJyxnXaLiLR8wBpQQcGWuAESkRBX/t6OwA8YsqP+iVSiond2EDy6Y/dsGk8rh/jtax3js5NeV7JQ=="], + + "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + + "pidtree": ["pidtree@0.6.0", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g=="], + + "pify": ["pify@2.3.0", "", {}, "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog=="], + + "pirates": ["pirates@4.0.7", "", {}, "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA=="], + + "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], + + "plist": ["plist@3.1.0", "", { "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", "xmlbuilder": "^15.1.1" } }, "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ=="], + + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], + + "postcss-import": ["postcss-import@15.1.0", "", { "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", "resolve": "^1.1.7" }, "peerDependencies": { "postcss": "^8.0.0" } }, "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew=="], + + "postcss-js": ["postcss-js@4.1.0", "", { "dependencies": { "camelcase-css": "^2.0.1" }, "peerDependencies": { "postcss": "^8.4.21" } }, "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw=="], + + "postcss-load-config": ["postcss-load-config@6.0.1", "", { "dependencies": { "lilconfig": "^3.1.1" }, "peerDependencies": { "jiti": ">=1.21.0", "postcss": ">=8.0.9", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["jiti", "postcss", "tsx", "yaml"] }, "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g=="], + + "postcss-nested": ["postcss-nested@6.2.0", "", { "dependencies": { "postcss-selector-parser": "^6.1.1" }, "peerDependencies": { "postcss": "^8.2.14" } }, "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ=="], + + "postcss-selector-parser": ["postcss-selector-parser@6.1.2", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg=="], + + "postcss-value-parser": ["postcss-value-parser@4.2.0", "", {}, "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="], + + "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], + + "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], + + "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], + + "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], + + "posthog-js": ["posthog-js@1.318.1", "", { "dependencies": { "@posthog/core": "1.9.1", "@posthog/types": "1.318.1", "core-js": "^3.38.1", "dompurify": "^3.3.1", "fflate": "^0.4.8", "preact": "^10.19.3", "query-selector-shadow-dom": "^1.0.1", "web-vitals": "^4.2.4" } }, "sha512-8zG02pcTYILB8At/9P2B2MJjuGq+DY3BeE01I4IPi6bnWNh3hka6+ZQhn9GfgtCQs7Ygk6qMaOxpUFvsDGQaQQ=="], + + "posthog-node": ["posthog-node@5.20.0", "", { "dependencies": { "@posthog/core": "1.9.1" } }, "sha512-LkR5KfrvEQTnUtNKN97VxFB00KcYG1Iz8iKg8r0e/i7f1eQhg1WSZO+Jp1B4bvtHCmdpIE4HwYbvCCzFoCyjVg=="], + + "preact": ["preact@10.28.2", "", {}, "sha512-lbteaWGzGHdlIuiJ0l2Jq454m6kcpI1zNje6d8MlGAFlYvP2GO4ibnat7P74Esfz4sPTdM6UxtTwh/d3pwM9JA=="], + + "prebuild-install": ["prebuild-install@7.1.3", "", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="], + + "prisma": ["prisma@6.19.1", "", { "dependencies": { "@prisma/config": "6.19.1", "@prisma/engines": "6.19.1" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-XRfmGzh6gtkc/Vq3LqZJcS2884dQQW3UhPo6jNRoiTW95FFQkXFg8vkYEy6og+Pyv0aY7zRQ7Wn1Cvr56XjhQQ=="], + + "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + + "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], + + "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], + + "promise-inflight": ["promise-inflight@1.0.1", "", {}, "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g=="], + + "promise-retry": ["promise-retry@2.0.1", "", { "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" } }, "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g=="], + + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + + "pump": ["pump@3.0.3", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="], + + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + + "pure-rand": ["pure-rand@6.1.0", "", {}, "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA=="], + + "query-selector-shadow-dom": ["query-selector-shadow-dom@1.0.1", "", {}, "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw=="], + + "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], + + "quick-lru": ["quick-lru@5.1.1", "", {}, "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="], + + "rc": ["rc@1.2.8", "", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="], + + "rc9": ["rc9@2.1.2", "", { "dependencies": { "defu": "^6.1.4", "destr": "^2.0.3" } }, "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg=="], + + "react": ["react@19.2.1", "", {}, "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw=="], + + "react-dom": ["react-dom@19.2.1", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.1" } }, "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg=="], + + "react-hotkeys-hook": ["react-hotkeys-hook@4.6.2", "", { "peerDependencies": { "react": ">=16.8.1", "react-dom": ">=16.8.1" } }, "sha512-FmP+ZriY3EG59Ug/lxNfrObCnW9xQShgk7Nb83+CkpfkcCpfS95ydv+E9JuXA5cp8KtskU7LGlIARpkc92X22Q=="], + + "react-icons": ["react-icons@5.5.0", "", { "peerDependencies": { "react": "*" } }, "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw=="], + + "react-refresh": ["react-refresh@0.17.0", "", {}, "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ=="], + + "react-remove-scroll": ["react-remove-scroll@2.7.2", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q=="], + + "react-remove-scroll-bar": ["react-remove-scroll-bar@2.3.8", "", { "dependencies": { "react-style-singleton": "^2.2.2", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q=="], + + "react-style-singleton": ["react-style-singleton@2.2.3", "", { "dependencies": { "get-nonce": "^1.0.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ=="], + + "react-syntax-highlighter": ["react-syntax-highlighter@16.1.0", "", { "dependencies": { "@babel/runtime": "^7.28.4", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", "refractor": "^5.0.0" }, "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-E40/hBiP5rCNwkeBN1vRP+xow1X0pndinO+z3h7HLsHyjztbyjfzNWNKuAsJj+7DLam9iT4AaaOZnueCU+Nplg=="], + + "reactivity-store": ["reactivity-store@0.3.12", "", { "dependencies": { "@vue/reactivity": "~3.5.22", "@vue/shared": "~3.5.22", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Idz9EL4dFUtQbHySZQzckWOTUfqjdYpUtNW0iOysC32mG7IjiUGB77QrsyR5eAWBkRiS9JscF6A3fuQAIy+LrQ=="], + + "read-binary-file-arch": ["read-binary-file-arch@1.0.6", "", { "dependencies": { "debug": "^4.3.4" }, "bin": { "read-binary-file-arch": "cli.js" } }, "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg=="], + + "read-cache": ["read-cache@1.0.0", "", { "dependencies": { "pify": "^2.3.0" } }, "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA=="], + + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + + "readdir-glob": ["readdir-glob@1.1.3", "", { "dependencies": { "minimatch": "^5.1.0" } }, "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA=="], + + "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="], + + "refractor": ["refractor@5.0.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/prismjs": "^1.0.0", "hastscript": "^9.0.0", "parse-entities": "^4.0.0" } }, "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw=="], + + "regex": ["regex@5.1.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw=="], + + "regex-recursion": ["regex-recursion@5.1.1", "", { "dependencies": { "regex": "^5.1.1", "regex-utilities": "^2.3.0" } }, "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + + "require-in-the-middle": ["require-in-the-middle@8.0.1", "", { "dependencies": { "debug": "^4.3.5", "module-details-from-path": "^1.0.3" } }, "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ=="], + + "resedit": ["resedit@1.7.2", "", { "dependencies": { "pe-library": "^0.4.1" } }, "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA=="], + + "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + + "resolve-alpn": ["resolve-alpn@1.2.1", "", {}, "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="], + + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + + "responselike": ["responselike@2.0.1", "", { "dependencies": { "lowercase-keys": "^2.0.0" } }, "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw=="], + + "restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], + + "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + + "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], + + "rimraf": ["rimraf@3.0.2", "", { "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" } }, "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA=="], + + "roarr": ["roarr@2.15.4", "", { "dependencies": { "boolean": "^3.0.1", "detect-node": "^2.0.4", "globalthis": "^1.0.1", "json-stringify-safe": "^5.0.1", "semver-compare": "^1.0.0", "sprintf-js": "^1.1.2" } }, "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A=="], + + "rollup": ["rollup@4.55.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.55.1", "@rollup/rollup-android-arm64": "4.55.1", "@rollup/rollup-darwin-arm64": "4.55.1", "@rollup/rollup-darwin-x64": "4.55.1", "@rollup/rollup-freebsd-arm64": "4.55.1", "@rollup/rollup-freebsd-x64": "4.55.1", "@rollup/rollup-linux-arm-gnueabihf": "4.55.1", "@rollup/rollup-linux-arm-musleabihf": "4.55.1", "@rollup/rollup-linux-arm64-gnu": "4.55.1", "@rollup/rollup-linux-arm64-musl": "4.55.1", "@rollup/rollup-linux-loong64-gnu": "4.55.1", "@rollup/rollup-linux-loong64-musl": "4.55.1", "@rollup/rollup-linux-ppc64-gnu": "4.55.1", "@rollup/rollup-linux-ppc64-musl": "4.55.1", "@rollup/rollup-linux-riscv64-gnu": "4.55.1", "@rollup/rollup-linux-riscv64-musl": "4.55.1", "@rollup/rollup-linux-s390x-gnu": "4.55.1", "@rollup/rollup-linux-x64-gnu": "4.55.1", "@rollup/rollup-linux-x64-musl": "4.55.1", "@rollup/rollup-openbsd-x64": "4.55.1", "@rollup/rollup-openharmony-arm64": "4.55.1", "@rollup/rollup-win32-arm64-msvc": "4.55.1", "@rollup/rollup-win32-ia32-msvc": "4.55.1", "@rollup/rollup-win32-x64-gnu": "4.55.1", "@rollup/rollup-win32-x64-msvc": "4.55.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A=="], + + "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], + + "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + + "sanitize-filename": ["sanitize-filename@1.6.3", "", { "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg=="], + + "sax": ["sax@1.4.3", "", {}, "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ=="], + + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], + + "section-matter": ["section-matter@1.0.0", "", { "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" } }, "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA=="], + + "semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + + "semver-compare": ["semver-compare@1.0.0", "", {}, "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="], + + "serialize-error": ["serialize-error@7.0.1", "", { "dependencies": { "type-fest": "^0.13.1" } }, "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw=="], + + "set-blocking": ["set-blocking@2.0.0", "", {}, "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="], + + "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], + + "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], + + "shiki": ["shiki@1.29.2", "", { "dependencies": { "@shikijs/core": "1.29.2", "@shikijs/engine-javascript": "1.29.2", "@shikijs/engine-oniguruma": "1.29.2", "@shikijs/langs": "1.29.2", "@shikijs/themes": "1.29.2", "@shikijs/types": "1.29.2", "@shikijs/vscode-textmate": "^10.0.1", "@types/hast": "^3.0.4" } }, "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg=="], + + "signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], + + "simple-concat": ["simple-concat@1.0.1", "", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="], + + "simple-get": ["simple-get@4.0.1", "", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="], + + "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="], + + "slice-ansi": ["slice-ansi@3.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" } }, "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ=="], + + "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], + + "socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="], + + "socks-proxy-agent": ["socks-proxy-agent@7.0.0", "", { "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", "socks": "^2.6.2" } }, "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww=="], + + "sonner": ["sonner@1.7.4", "", { "peerDependencies": { "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc", "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-DIS8z4PfJRbIyfVFDVnK9rO3eYDtse4Omcm6bt0oEr5/jtLgysmjuBl1frJ9E/EQZrFmKx2A8m/s5s9CRXIzhw=="], + + "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + + "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + + "source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], + + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + + "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], + + "ssri": ["ssri@9.0.1", "", { "dependencies": { "minipass": "^3.1.1" } }, "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q=="], + + "stat-mode": ["stat-mode@1.0.0", "", {}, "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg=="], + + "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + + "strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-ansi-cjs": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], + + "strip-bom-string": ["strip-bom-string@1.0.0", "", {}, "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g=="], + + "strip-json-comments": ["strip-json-comments@2.0.1", "", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="], + + "sucrase": ["sucrase@3.35.1", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", "lines-and-columns": "^1.1.6", "mz": "^2.7.0", "pirates": "^4.0.1", "tinyglobby": "^0.2.11", "ts-interface-checker": "^0.1.9" }, "bin": { "sucrase": "bin/sucrase", "sucrase-node": "bin/sucrase-node" } }, "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw=="], + + "sumchecker": ["sumchecker@3.0.1", "", { "dependencies": { "debug": "^4.1.0" } }, "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg=="], + + "superjson": ["superjson@2.2.6", "", { "dependencies": { "copy-anything": "^4" } }, "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + + "swr": ["swr@2.3.8", "", { "dependencies": { "dequal": "^2.0.3", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-gaCPRVoMq8WGDcWj9p4YWzCMPHzE0WNl6W8ADIx9c3JBEIdMkJGMzW+uzXvxHMltwcYACr9jP+32H8/hgwMR7w=="], + + "tailwind-merge": ["tailwind-merge@2.6.0", "", {}, "sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA=="], + + "tailwindcss": ["tailwindcss@3.4.19", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", "jiti": "^1.21.7", "lilconfig": "^3.1.3", "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.1.1", "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", "postcss-nested": "^6.2.0", "postcss-selector-parser": "^6.1.2", "resolve": "^1.22.8", "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", "tailwindcss": "lib/cli.js" } }, "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ=="], + + "tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="], + + "tar": ["tar@6.2.1", "", { "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" } }, "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A=="], + + "tar-fs": ["tar-fs@2.1.4", "", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="], + + "tar-stream": ["tar-stream@2.2.0", "", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="], + + "temp-file": ["temp-file@3.4.0", "", { "dependencies": { "async-exit-hook": "^2.0.1", "fs-extra": "^10.0.0" } }, "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg=="], + + "thenify": ["thenify@3.3.1", "", { "dependencies": { "any-promise": "^1.0.0" } }, "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw=="], + + "thenify-all": ["thenify-all@1.6.0", "", { "dependencies": { "thenify": ">= 3.1.0 < 4" } }, "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA=="], + + "throttleit": ["throttleit@2.1.0", "", {}, "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw=="], + + "tiny-typed-emitter": ["tiny-typed-emitter@2.1.0", "", {}, "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA=="], + + "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="], + + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + + "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], + + "tmp-promise": ["tmp-promise@3.0.3", "", { "dependencies": { "tmp": "^0.2.0" } }, "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ=="], + + "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], + + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + + "trpc-electron": ["trpc-electron@0.1.2", "", { "peerDependencies": { "@trpc/client": ">=11.0.0", "@trpc/server": ">=11.0.0", "electron": ">19.0.0" } }, "sha512-sQpWBwQWzsgrERugjzUpPqY/+/n8NxkUq6YssQ5+5rALkvGCWq45T5Dreiwm2kh91dZMFlALTyMd8PhB0vgbIg=="], + + "truncate-utf8-bytes": ["truncate-utf8-bytes@1.0.2", "", { "dependencies": { "utf8-byte-length": "^1.0.1" } }, "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ=="], + + "ts-interface-checker": ["ts-interface-checker@0.1.13", "", {}, "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="], + + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + + "tunnel-agent": ["tunnel-agent@0.6.0", "", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="], + + "type-fest": ["type-fest@0.13.1", "", {}, "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], + + "unique-filename": ["unique-filename@2.0.1", "", { "dependencies": { "unique-slug": "^3.0.0" } }, "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A=="], + + "unique-names-generator": ["unique-names-generator@4.7.1", "", {}, "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow=="], + + "unique-slug": ["unique-slug@3.0.0", "", { "dependencies": { "imurmurhash": "^0.1.4" } }, "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w=="], + + "unist-util-is": ["unist-util-is@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g=="], + + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + + "unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], + + "unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "unist-util-visit-parents": ["unist-util-visit-parents@6.0.2", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ=="], + + "universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="], + + "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], + + "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="], + + "use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="], + + "use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="], + + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + + "utf8-byte-length": ["utf8-byte-length@1.0.5", "", {}, "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA=="], + + "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + + "verror": ["verror@1.10.1", "", { "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg=="], + + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + + "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + + "vite": ["vite@6.4.1", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", "picomatch": "^4.0.2", "postcss": "^8.5.3", "rollup": "^4.34.9", "tinyglobby": "^0.2.13" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g=="], + + "wcwidth": ["wcwidth@1.0.1", "", { "dependencies": { "defaults": "^1.0.3" } }, "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg=="], + + "web-vitals": ["web-vitals@4.2.4", "", {}, "sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw=="], + + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + + "wide-align": ["wide-align@1.1.5", "", { "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg=="], + + "wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrap-ansi-cjs": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], + + "xmlbuilder": ["xmlbuilder@15.1.1", "", {}, "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg=="], + + "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], + + "xterm": ["xterm@5.3.0", "", {}, "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg=="], + + "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], + + "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + + "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + + "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], + + "yauzl": ["yauzl@2.10.0", "", { "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g=="], + + "yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], + + "zip-stream": ["zip-stream@4.1.1", "", { "dependencies": { "archiver-utils": "^3.0.4", "compress-commons": "^4.1.2", "readable-stream": "^3.6.0" } }, "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ=="], + + "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], + + "zustand": ["zustand@5.0.9", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-ALBtUj0AfjJt3uNRQoL1tL2tMvj6Gp/6e39dnfT6uzpelGru8v1tPOGBzayOWbPJvujM8JojDk3E1LxeFisBNg=="], + + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + + "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@electron/asar/commander": ["commander@5.1.0", "", {}, "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg=="], + + "@electron/asar/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "@electron/get/fs-extra": ["fs-extra@8.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } }, "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g=="], + + "@electron/get/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + + "@electron/notarize/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "@electron/osx-sign/isbinaryfile": ["isbinaryfile@4.0.10", "", {}, "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw=="], + + "@electron/rebuild/node-api-version": ["node-api-version@0.2.1", "", { "dependencies": { "semver": "^7.3.5" } }, "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q=="], + + "@electron/universal/fs-extra": ["fs-extra@11.3.3", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg=="], + + "@electron/universal/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@esbuild-kit/core-utils/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], + + "@git-diff-view/shiki/shiki": ["shiki@3.21.0", "", { "dependencies": { "@shikijs/core": "3.21.0", "@shikijs/engine-javascript": "3.21.0", "@shikijs/engine-oniguruma": "3.21.0", "@shikijs/langs": "3.21.0", "@shikijs/themes": "3.21.0", "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w=="], + + "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], + + "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "@isaacs/cliui/wrap-ansi": ["wrap-ansi@8.1.0", "", { "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" } }, "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ=="], + + "@malept/flatpak-bundler/fs-extra": ["fs-extra@9.1.0", "", { "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ=="], + + "@opentelemetry/instrumentation-http/@opentelemetry/core": ["@opentelemetry/core@2.2.0", "", { "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw=="], + + "@radix-ui/react-alert-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-collection/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-label/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], + + "@radix-ui/react-menu/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-popover/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-progress/@radix-ui/react-context": ["@radix-ui/react-context@1.1.3", "", { "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw=="], + + "@radix-ui/react-progress/@radix-ui/react-primitive": ["@radix-ui/react-primitive@2.1.4", "", { "dependencies": { "@radix-ui/react-slot": "1.2.4" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg=="], + + "@radix-ui/react-select/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@radix-ui/react-tooltip/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react"] }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + + "@sentry/node/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "@tailwindcss/typography/postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="], + + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "archiver-utils/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "c12/chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], + + "c12/jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], + + "cacache/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], + + "cacache/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], + + "cacache/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "chokidar/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "clone-response/mimic-response": ["mimic-response@1.0.1", "", {}, "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="], + + "config-file-ts/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], + + "dir-compare/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "electron-updater/builder-util-runtime": ["builder-util-runtime@9.5.1", "", { "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" } }, "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ=="], + + "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + + "filelist/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + + "fs-minipass/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "glob/minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="], + + "gray-matter/js-yaml": ["js-yaml@3.14.2", "", { "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg=="], + + "hosted-git-info/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + + "iconv-corefoundation/node-addon-api": ["node-addon-api@1.7.2", "", {}, "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg=="], + + "lazystream/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + + "lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], + + "lzma-native/node-addon-api": ["node-addon-api@3.2.1", "", {}, "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="], + + "make-fetch-happen/http-proxy-agent": ["http-proxy-agent@5.0.0", "", { "dependencies": { "@tootallnate/once": "2", "agent-base": "6", "debug": "4" } }, "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w=="], + + "make-fetch-happen/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="], + + "make-fetch-happen/lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], + + "make-fetch-happen/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "minipass-collect/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-fetch/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-flush/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-pipeline/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minipass-sized/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "minizlib/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + + "path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + + "path-scurry/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "react-syntax-highlighter/highlight.js": ["highlight.js@10.7.3", "", {}, "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A=="], + + "react-syntax-highlighter/lowlight": ["lowlight@1.20.0", "", { "dependencies": { "fault": "^1.0.0", "highlight.js": "~10.7.0" } }, "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw=="], + + "readdir-glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + + "roarr/sprintf-js": ["sprintf-js@1.1.3", "", {}, "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="], + + "socks-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "ssri/minipass": ["minipass@3.3.6", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw=="], + + "tar-fs/chownr": ["chownr@1.1.4", "", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="], + + "zip-stream/archiver-utils": ["archiver-utils@3.0.4", "", { "dependencies": { "glob": "^7.2.3", "graceful-fs": "^4.2.0", "lazystream": "^1.0.0", "lodash.defaults": "^4.2.0", "lodash.difference": "^4.5.0", "lodash.flatten": "^4.4.0", "lodash.isplainobject": "^4.0.6", "lodash.union": "^4.6.0", "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" } }, "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw=="], + + "@electron/asar/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "@electron/get/fs-extra/jsonfile": ["jsonfile@4.0.0", "", { "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg=="], + + "@electron/get/fs-extra/universalify": ["universalify@0.1.2", "", {}, "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm": ["@esbuild/android-arm@0.18.20", "", { "os": "android", "cpu": "arm" }, "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-arm64": ["@esbuild/android-arm64@0.18.20", "", { "os": "android", "cpu": "arm64" }, "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/android-x64": ["@esbuild/android-x64@0.18.20", "", { "os": "android", "cpu": "x64" }, "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.18.20", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.18.20", "", { "os": "darwin", "cpu": "x64" }, "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.18.20", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.18.20", "", { "os": "freebsd", "cpu": "x64" }, "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm": ["@esbuild/linux-arm@0.18.20", "", { "os": "linux", "cpu": "arm" }, "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.18.20", "", { "os": "linux", "cpu": "arm64" }, "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.18.20", "", { "os": "linux", "cpu": "ia32" }, "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.18.20", "", { "os": "linux", "cpu": "ppc64" }, "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.18.20", "", { "os": "linux", "cpu": "none" }, "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.18.20", "", { "os": "linux", "cpu": "s390x" }, "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/linux-x64": ["@esbuild/linux-x64@0.18.20", "", { "os": "linux", "cpu": "x64" }, "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.18.20", "", { "os": "none", "cpu": "x64" }, "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.18.20", "", { "os": "openbsd", "cpu": "x64" }, "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.18.20", "", { "os": "sunos", "cpu": "x64" }, "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.18.20", "", { "os": "win32", "cpu": "arm64" }, "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.18.20", "", { "os": "win32", "cpu": "ia32" }, "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g=="], + + "@esbuild-kit/core-utils/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], + + "@git-diff-view/shiki/shiki/@shikijs/core": ["@shikijs/core@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA=="], + + "@git-diff-view/shiki/shiki/@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ=="], + + "@git-diff-view/shiki/shiki/@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ=="], + + "@git-diff-view/shiki/shiki/@shikijs/langs": ["@shikijs/langs@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA=="], + + "@git-diff-view/shiki/shiki/@shikijs/themes": ["@shikijs/themes@3.21.0", "", { "dependencies": { "@shikijs/types": "3.21.0" } }, "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw=="], + + "@git-diff-view/shiki/shiki/@shikijs/types": ["@shikijs/types@3.21.0", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA=="], + + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], + + "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + + "archiver-utils/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "archiver-utils/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "c12/chokidar/readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + + "cacache/glob/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], + + "config-file-ts/glob/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + + "config-file-ts/glob/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + + "dir-compare/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + + "gray-matter/js-yaml/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + + "lazystream/readable-stream/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + + "lazystream/readable-stream/string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + + "make-fetch-happen/http-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "make-fetch-happen/https-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="], + + "@git-diff-view/shiki/shiki/@shikijs/engine-javascript/oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], + + "@git-diff-view/shiki/shiki/@shikijs/engine-javascript/oniguruma-to-es/regex": ["regex@6.1.0", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg=="], + + "@git-diff-view/shiki/shiki/@shikijs/engine-javascript/oniguruma-to-es/regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], + } +} diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..2f64528e3e7f3bebed76729285e07ae694fc3379 GIT binary patch literal 357770 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≤c*mAAB7%`$p&QLGbjSzFXpd?+O3wztQ=7 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 statement-breakpoint +CREATE TABLE `projects` ( + `id` text PRIMARY KEY NOT NULL, + `name` text NOT NULL, + `path` text NOT NULL, + `created_at` integer, + `updated_at` integer +); +--> statement-breakpoint +CREATE UNIQUE INDEX `projects_path_unique` ON `projects` (`path`);--> statement-breakpoint +CREATE TABLE `sub_chats` ( + `id` text PRIMARY KEY NOT NULL, + `name` text, + `chat_id` text NOT NULL, + `session_id` text, + `mode` text DEFAULT 'agent' NOT NULL, + `messages` text DEFAULT '[]' NOT NULL, + `created_at` integer, + `updated_at` integer, + FOREIGN KEY (`chat_id`) REFERENCES `chats`(`id`) ON UPDATE no action ON DELETE cascade +); diff --git a/drizzle/0001_married_reptil.sql b/drizzle/0001_married_reptil.sql new file mode 100644 index 00000000..b6500ae2 --- /dev/null +++ b/drizzle/0001_married_reptil.sql @@ -0,0 +1 @@ +ALTER TABLE `sub_chats` ADD `stream_id` text; \ No newline at end of file diff --git a/drizzle/0002_fancy_blindfold.sql b/drizzle/0002_fancy_blindfold.sql new file mode 100644 index 00000000..b88c3269 --- /dev/null +++ b/drizzle/0002_fancy_blindfold.sql @@ -0,0 +1,4 @@ +ALTER TABLE `projects` ADD `git_remote_url` text;--> statement-breakpoint +ALTER TABLE `projects` ADD `git_provider` text;--> statement-breakpoint +ALTER TABLE `projects` ADD `git_owner` text;--> statement-breakpoint +ALTER TABLE `projects` ADD `git_repo` text; \ No newline at end of file diff --git a/drizzle/0003_crazy_thunderbolts.sql b/drizzle/0003_crazy_thunderbolts.sql new file mode 100644 index 00000000..08dec0c3 --- /dev/null +++ b/drizzle/0003_crazy_thunderbolts.sql @@ -0,0 +1,2 @@ +ALTER TABLE `chats` ADD `pr_url` text;--> statement-breakpoint +ALTER TABLE `chats` ADD `pr_number` integer; \ No newline at end of file diff --git a/drizzle/0004_melted_prism.sql b/drizzle/0004_melted_prism.sql new file mode 100644 index 00000000..ac036355 --- /dev/null +++ b/drizzle/0004_melted_prism.sql @@ -0,0 +1,6 @@ +CREATE TABLE `claude_code_credentials` ( + `id` text PRIMARY KEY DEFAULT 'default' NOT NULL, + `oauth_token` text NOT NULL, + `connected_at` integer, + `user_id` text +); diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json new file mode 100644 index 00000000..81b18fc1 --- /dev/null +++ b/drizzle/meta/0000_snapshot.json @@ -0,0 +1,240 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "04f9263f-5a6f-4d67-90f7-bf76c2777be5", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "chats": { + "name": "chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "archived_at": { + "name": "archived_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "worktree_path": { + "name": "worktree_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "base_branch": { + "name": "base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "chats_project_id_projects_id_fk": { + "name": "chats_project_id_projects_id_fk", + "tableFrom": "chats", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "projects_path_unique": { + "name": "projects_path_unique", + "columns": [ + "path" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sub_chats": { + "name": "sub_chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_id": { + "name": "session_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'agent'" + }, + "messages": { + "name": "messages", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "sub_chats_chat_id_chats_id_fk": { + "name": "sub_chats_chat_id_chats_id_fk", + "tableFrom": "sub_chats", + "tableTo": "chats", + "columnsFrom": [ + "chat_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/0001_snapshot.json b/drizzle/meta/0001_snapshot.json new file mode 100644 index 00000000..b908bc1c --- /dev/null +++ b/drizzle/meta/0001_snapshot.json @@ -0,0 +1,247 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "11d0de24-11e4-405d-9192-55868e0d5ae6", + "prevId": "04f9263f-5a6f-4d67-90f7-bf76c2777be5", + "tables": { + "chats": { + "name": "chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "archived_at": { + "name": "archived_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "worktree_path": { + "name": "worktree_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "base_branch": { + "name": "base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "chats_project_id_projects_id_fk": { + "name": "chats_project_id_projects_id_fk", + "tableFrom": "chats", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "projects_path_unique": { + "name": "projects_path_unique", + "columns": [ + "path" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sub_chats": { + "name": "sub_chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_id": { + "name": "session_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stream_id": { + "name": "stream_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'agent'" + }, + "messages": { + "name": "messages", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "sub_chats_chat_id_chats_id_fk": { + "name": "sub_chats_chat_id_chats_id_fk", + "tableFrom": "sub_chats", + "tableTo": "chats", + "columnsFrom": [ + "chat_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/0002_snapshot.json b/drizzle/meta/0002_snapshot.json new file mode 100644 index 00000000..639472db --- /dev/null +++ b/drizzle/meta/0002_snapshot.json @@ -0,0 +1,275 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "36d96876-a246-4287-bb85-b73e2568d6ef", + "prevId": "11d0de24-11e4-405d-9192-55868e0d5ae6", + "tables": { + "chats": { + "name": "chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "archived_at": { + "name": "archived_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "worktree_path": { + "name": "worktree_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "base_branch": { + "name": "base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "chats_project_id_projects_id_fk": { + "name": "chats_project_id_projects_id_fk", + "tableFrom": "chats", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_remote_url": { + "name": "git_remote_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_provider": { + "name": "git_provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_owner": { + "name": "git_owner", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_repo": { + "name": "git_repo", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "projects_path_unique": { + "name": "projects_path_unique", + "columns": [ + "path" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sub_chats": { + "name": "sub_chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_id": { + "name": "session_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stream_id": { + "name": "stream_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'agent'" + }, + "messages": { + "name": "messages", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "sub_chats_chat_id_chats_id_fk": { + "name": "sub_chats_chat_id_chats_id_fk", + "tableFrom": "sub_chats", + "tableTo": "chats", + "columnsFrom": [ + "chat_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/0003_snapshot.json b/drizzle/meta/0003_snapshot.json new file mode 100644 index 00000000..8246df46 --- /dev/null +++ b/drizzle/meta/0003_snapshot.json @@ -0,0 +1,289 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "c2a786e2-d371-4940-a0ef-0f55c14b2890", + "prevId": "36d96876-a246-4287-bb85-b73e2568d6ef", + "tables": { + "chats": { + "name": "chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "archived_at": { + "name": "archived_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "worktree_path": { + "name": "worktree_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "base_branch": { + "name": "base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pr_url": { + "name": "pr_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pr_number": { + "name": "pr_number", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "chats_project_id_projects_id_fk": { + "name": "chats_project_id_projects_id_fk", + "tableFrom": "chats", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_remote_url": { + "name": "git_remote_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_provider": { + "name": "git_provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_owner": { + "name": "git_owner", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_repo": { + "name": "git_repo", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "projects_path_unique": { + "name": "projects_path_unique", + "columns": [ + "path" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sub_chats": { + "name": "sub_chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_id": { + "name": "session_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stream_id": { + "name": "stream_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'agent'" + }, + "messages": { + "name": "messages", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "sub_chats_chat_id_chats_id_fk": { + "name": "sub_chats_chat_id_chats_id_fk", + "tableFrom": "sub_chats", + "tableTo": "chats", + "columnsFrom": [ + "chat_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/0004_snapshot.json b/drizzle/meta/0004_snapshot.json new file mode 100644 index 00000000..6b0316f0 --- /dev/null +++ b/drizzle/meta/0004_snapshot.json @@ -0,0 +1,328 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "1c211023-1270-4cdd-934d-4396e72557e9", + "prevId": "c2a786e2-d371-4940-a0ef-0f55c14b2890", + "tables": { + "chats": { + "name": "chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "project_id": { + "name": "project_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "archived_at": { + "name": "archived_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "worktree_path": { + "name": "worktree_path", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "branch": { + "name": "branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "base_branch": { + "name": "base_branch", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pr_url": { + "name": "pr_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "pr_number": { + "name": "pr_number", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "chats_project_id_projects_id_fk": { + "name": "chats_project_id_projects_id_fk", + "tableFrom": "chats", + "tableTo": "projects", + "columnsFrom": [ + "project_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "claude_code_credentials": { + "name": "claude_code_credentials", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false, + "default": "'default'" + }, + "oauth_token": { + "name": "oauth_token", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "connected_at": { + "name": "connected_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "projects": { + "name": "projects", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "path": { + "name": "path", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_remote_url": { + "name": "git_remote_url", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_provider": { + "name": "git_provider", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_owner": { + "name": "git_owner", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "git_repo": { + "name": "git_repo", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": { + "projects_path_unique": { + "name": "projects_path_unique", + "columns": [ + "path" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + }, + "sub_chats": { + "name": "sub_chats", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "name": { + "name": "name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "session_id": { + "name": "session_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "stream_id": { + "name": "stream_id", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "mode": { + "name": "mode", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'agent'" + }, + "messages": { + "name": "messages", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": "'[]'" + }, + "created_at": { + "name": "created_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "updated_at": { + "name": "updated_at", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "sub_chats_chat_id_chats_id_fk": { + "name": "sub_chats_chat_id_chats_id_fk", + "tableFrom": "sub_chats", + "tableTo": "chats", + "columnsFrom": [ + "chat_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "cascade", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {}, + "checkConstraints": {} + } + }, + "views": {}, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json new file mode 100644 index 00000000..ab91e108 --- /dev/null +++ b/drizzle/meta/_journal.json @@ -0,0 +1,41 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1767732183550, + "tag": "0000_mixed_blur", + "breakpoints": true + }, + { + "idx": 1, + "version": "6", + "when": 1767853413342, + "tag": "0001_married_reptil", + "breakpoints": true + }, + { + "idx": 2, + "version": "6", + "when": 1767911269523, + "tag": "0002_fancy_blindfold", + "breakpoints": true + }, + { + "idx": 3, + "version": "6", + "when": 1767986484084, + "tag": "0003_crazy_thunderbolts", + "breakpoints": true + }, + { + "idx": 4, + "version": "6", + "when": 1768199613729, + "tag": "0004_melted_prism", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 00000000..0643c7db --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,9 @@ +# electron-builder config with environment variables +# This extends the base config in package.json + +mac: + # Code signing identity - set via APPLE_IDENTITY env var + # Example: "Developer ID Application: Your Name (TEAM_ID)" + identity: ${env.APPLE_IDENTITY} + notarize: + teamId: ${env.APPLE_TEAM_ID} diff --git a/electron-shim.js b/electron-shim.js new file mode 100644 index 00000000..1483e068 --- /dev/null +++ b/electron-shim.js @@ -0,0 +1,23 @@ +// Shim to ensure electron is properly loaded in Electron context +const Module = require('module'); +const originalRequire = Module.prototype.require; + +Module.prototype.require = function(id) { + if (id === 'electron') { + // Check if we're in Electron by looking for process.versions.electron + if (process.versions && process.versions.electron) { + // Use the built-in electron module + const { builtinModules } = require('module'); + if (builtinModules.includes('electron')) { + return require.cache['electron'] || originalRequire.call(this, 'electron'); + } + // Access via process + try { + return process.electronBinding ? process.electronBinding('electron') : originalRequire.call(this, id); + } catch (e) { + // Fallback + } + } + } + return originalRequire.call(this, id); +}; diff --git a/electron.vite.config.ts b/electron.vite.config.ts new file mode 100644 index 00000000..b9f24edf --- /dev/null +++ b/electron.vite.config.ts @@ -0,0 +1,71 @@ +import { defineConfig, externalizeDepsPlugin } from "electron-vite" +import { resolve } from "path" +import react from "@vitejs/plugin-react" +import tailwindcss from "tailwindcss" +import autoprefixer from "autoprefixer" + +export default defineConfig({ + main: { + plugins: [ + externalizeDepsPlugin({ + // Don't externalize these - bundle them instead + exclude: ["superjson", "trpc-electron"], + }), + ], + build: { + lib: { + entry: resolve(__dirname, "src/main/index.ts"), + }, + rollupOptions: { + external: [ + "electron", + "better-sqlite3", + "@prisma/client", + "@anthropic-ai/claude-agent-sdk", // ESM module - must use dynamic import + ], + output: { + format: "cjs", + }, + }, + }, + }, + preload: { + plugins: [ + externalizeDepsPlugin({ + exclude: ["trpc-electron"], + }), + ], + build: { + lib: { + entry: resolve(__dirname, "src/preload/index.ts"), + }, + rollupOptions: { + external: ["electron"], + output: { + format: "cjs", + }, + }, + }, + }, + renderer: { + plugins: [react()], + resolve: { + alias: { + "@": resolve(__dirname, "src/renderer"), + }, + }, + build: { + rollupOptions: { + input: { + index: resolve(__dirname, "src/renderer/index.html"), + login: resolve(__dirname, "src/renderer/login.html"), + }, + }, + }, + css: { + postcss: { + plugins: [tailwindcss, autoprefixer], + }, + }, + }, +}) diff --git a/package.json b/package.json new file mode 100644 index 00000000..6b76016a --- /dev/null +++ b/package.json @@ -0,0 +1,227 @@ +{ + "name": "21st-desktop", + "version": "0.0.10", + "private": true, + "description": "21st Agents - Local-First Desktop Application", + "author": "21st.dev", + "main": "out/main/index.js", + "scripts": { + "dev": "electron-vite dev", + "build": "electron-vite build", + "preview": "electron-vite preview", + "package": "electron-builder --dir", + "package:mac": "electron-builder --mac", + "package:win": "electron-builder --win", + "package:linux": "electron-builder --linux", + "dist": "electron-builder", + "dist:manifest": "node scripts/generate-update-manifest.mjs", + "dist:upload": "node scripts/upload-release.mjs", + "claude:download": "node scripts/download-claude-binary.mjs", + "claude:download:all": "node scripts/download-claude-binary.mjs --all", + "release": "rm -rf release && bun run claude:download && bun run build && bun run package:mac && bun run dist:manifest && ./scripts/upload-release-wrangler.sh", + "sync:public": "./scripts/sync-to-public.sh", + "icon:generate": "node scripts/generate-icon.mjs", + "db:generate": "drizzle-kit generate", + "db:push": "drizzle-kit push", + "db:studio": "drizzle-kit studio", + "ts:check": "tsgo --noEmit", + "postinstall": "node -e \"if(!process.env.VERCEL){require('child_process').execSync('electron-rebuild -f -w better-sqlite3,node-pty',{stdio:'inherit'})}\"" + }, + "dependencies": { + "@ai-sdk/react": "^3.0.14", + "@anthropic-ai/claude-agent-sdk": "^0.2.5", + "@git-diff-view/react": "^0.0.35", + "@git-diff-view/shiki": "^0.0.36", + "@radix-ui/react-alert-dialog": "^1.1.1", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-context-menu": "^2.2.16", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-tabs": "^1.1.13", + "@radix-ui/react-tooltip": "^1.2.8", + "@sentry/electron": "^7.5.0", + "@tailwindcss/typography": "^0.5.19", + "@tanstack/react-query": "^5.90.10", + "@tanstack/react-virtual": "^3.13.18", + "@trpc/client": "^11.7.1", + "@trpc/react-query": "^11.7.1", + "@trpc/server": "^11.7.1", + "@xterm/addon-canvas": "^0.7.0", + "@xterm/addon-fit": "^0.11.0", + "@xterm/addon-search": "^0.16.0", + "@xterm/addon-serialize": "^0.14.0", + "@xterm/addon-web-links": "^0.12.0", + "@xterm/addon-webgl": "^0.19.0", + "ai": "^6.0.14", + "better-sqlite3": "^11.8.1", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "date-fns": "^3.6.0", + "drizzle-orm": "^0.45.1", + "electron-log": "^5.4.3", + "electron-updater": "^6.7.3", + "gray-matter": "^4.0.3", + "jotai": "^2.11.1", + "lucide-react": "^0.468.0", + "motion": "^11.15.0", + "next-themes": "^0.4.4", + "node-pty": "^1.1.0", + "pidtree": "^0.6.0", + "posthog-js": "^1.239.1", + "posthog-node": "^5.20.0", + "react": "19.2.1", + "react-dom": "19.2.1", + "react-hotkeys-hook": "^4.6.1", + "react-icons": "^5.5.0", + "react-syntax-highlighter": "^16.1.0", + "shiki": "^1.24.4", + "sonner": "^1.7.1", + "superjson": "^2.2.2", + "tailwind-merge": "^2.6.0", + "tailwindcss-animate": "^1.0.7", + "trpc-electron": "^0.1.2", + "unique-names-generator": "^4.7.1", + "xterm": "^5.3.0", + "zod": "^3.24.1", + "zustand": "^5.0.3" + }, + "devDependencies": { + "@electron-toolkit/preload": "^3.0.1", + "@electron-toolkit/utils": "^4.0.0", + "@types/better-sqlite3": "^7.6.13", + "@types/node": "^20.17.50", + "@types/react": "^19.0.7", + "@types/react-dom": "^19.0.3", + "@types/react-syntax-highlighter": "^15.5.13", + "@vitejs/plugin-react": "^4.3.4", + "autoprefixer": "^10.4.20", + "drizzle-kit": "^0.31.8", + "electron": "33.4.5", + "electron-builder": "^25.1.8", + "electron-rebuild": "^3.2.9", + "electron-vite": "^3.0.0", + "postcss": "^8.5.1", + "tailwindcss": "^3.4.17", + "typescript": "^5.4.5", + "vite": "^6.3.4" + }, + "build": { + "appId": "dev.21st.agents", + "productName": "Agents", + "npmRebuild": true, + "protocols": [ + { + "name": "21st Agents", + "schemes": [ + "twentyfirst-agents" + ] + } + ], + "directories": { + "buildResources": "build", + "output": "release" + }, + "files": [ + "out/**/*" + ], + "extraResources": [ + { + "from": "drizzle", + "to": "migrations" + }, + { + "from": "resources/bin/${platform}-${arch}", + "to": "bin", + "filter": [ + "**/*" + ] + }, + { + "from": "resources/bin/VERSION", + "to": "bin/VERSION" + } + ], + "asar": true, + "asarUnpack": [ + "node_modules/better-sqlite3/**/*", + "node_modules/node-pty/**/*", + "node_modules/@anthropic-ai/claude-agent-sdk/**/*" + ], + "mac": { + "category": "public.app-category.developer-tools", + "target": [ + { + "target": "dmg", + "arch": [ + "arm64", + "x64" + ] + }, + { + "target": "zip", + "arch": [ + "arm64", + "x64" + ] + } + ], + "icon": "build/icon.icns", + "hardenedRuntime": true, + "gatekeeperAssess": false, + "entitlements": "build/entitlements.mac.plist", + "entitlementsInherit": "build/entitlements.mac.plist" + }, + "dmg": { + "window": { + "width": 540, + "height": 380 + }, + "contents": [ + { + "x": 140, + "y": 150, + "type": "file" + }, + { + "x": 400, + "y": 150, + "type": "link", + "path": "/Applications" + } + ], + "iconSize": 80 + }, + "win": { + "target": [ + "nsis", + "portable" + ], + "icon": "build/icon.ico" + }, + "linux": { + "target": [ + "AppImage", + "deb" + ], + "icon": "build/icons", + "category": "Development" + }, + "nsis": { + "oneClick": false, + "allowToChangeInstallationDirectory": true, + "installerIcon": "build/icon.ico", + "uninstallerIcon": "build/icon.ico" + }, + "publish": { + "provider": "generic", + "url": "https://cdn.21st.dev/releases/desktop" + } + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 00000000..33ad091d --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/scripts/download-claude-binary.mjs b/scripts/download-claude-binary.mjs new file mode 100644 index 00000000..f444d0c6 --- /dev/null +++ b/scripts/download-claude-binary.mjs @@ -0,0 +1,288 @@ +#!/usr/bin/env node +/** + * Downloads Claude Code native binaries for bundling with the Electron app. + * + * Usage: + * node scripts/download-claude-binary.mjs # Download for current platform + * node scripts/download-claude-binary.mjs --all # Download all platforms + * node scripts/download-claude-binary.mjs --version 2.1.5 # Specific version + */ + +import fs from "node:fs" +import path from "node:path" +import https from "node:https" +import crypto from "node:crypto" +import { fileURLToPath } from "node:url" + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) +const ROOT_DIR = path.join(__dirname, "..") +const BIN_DIR = path.join(ROOT_DIR, "resources", "bin") + +// Claude Code distribution base URL +const DIST_BASE = + "https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases" + +// Platform mappings +const PLATFORMS = { + "darwin-arm64": { dir: "darwin-arm64", binary: "claude" }, + "darwin-x64": { dir: "darwin-x64", binary: "claude" }, + "linux-arm64": { dir: "linux-arm64", binary: "claude" }, + "linux-x64": { dir: "linux-x64", binary: "claude" }, + "win32-x64": { dir: "win32-x64", binary: "claude.exe" }, +} + +/** + * Fetch JSON from URL + */ +function fetchJson(url) { + return new Promise((resolve, reject) => { + https + .get(url, (res) => { + if (res.statusCode === 301 || res.statusCode === 302) { + return fetchJson(res.headers.location).then(resolve).catch(reject) + } + if (res.statusCode !== 200) { + return reject(new Error(`HTTP ${res.statusCode}`)) + } + let data = "" + res.on("data", (chunk) => (data += chunk)) + res.on("end", () => resolve(JSON.parse(data))) + res.on("error", reject) + }) + .on("error", reject) + }) +} + +/** + * Download file with progress + */ +function downloadFile(url, destPath) { + return new Promise((resolve, reject) => { + const file = fs.createWriteStream(destPath) + + const request = (url) => { + https + .get(url, (res) => { + if (res.statusCode === 301 || res.statusCode === 302) { + file.close() + fs.unlinkSync(destPath) + return request(res.headers.location) + } + + if (res.statusCode !== 200) { + file.close() + fs.unlinkSync(destPath) + return reject(new Error(`HTTP ${res.statusCode}`)) + } + + const totalSize = parseInt(res.headers["content-length"], 10) + let downloaded = 0 + let lastPercent = 0 + + res.on("data", (chunk) => { + downloaded += chunk.length + const percent = Math.floor((downloaded / totalSize) * 100) + if (percent !== lastPercent && percent % 10 === 0) { + process.stdout.write(`\r Progress: ${percent}%`) + lastPercent = percent + } + }) + + res.pipe(file) + + file.on("finish", () => { + file.close() + process.stdout.write("\r Progress: 100%\n") + resolve() + }) + + res.on("error", (err) => { + file.close() + fs.unlinkSync(destPath) + reject(err) + }) + }) + .on("error", (err) => { + file.close() + fs.unlinkSync(destPath) + reject(err) + }) + } + + request(url) + }) +} + +/** + * Calculate SHA256 hash of file + */ +function calculateSha256(filePath) { + return new Promise((resolve, reject) => { + const hash = crypto.createHash("sha256") + const stream = fs.createReadStream(filePath) + stream.on("data", (chunk) => hash.update(chunk)) + stream.on("end", () => resolve(hash.digest("hex"))) + stream.on("error", reject) + }) +} + +/** + * Get latest version from manifest + */ +async function getLatestVersion() { + // Try to fetch version list or use known latest + // For now, we'll fetch the manifest for a known version + console.log("Fetching latest Claude Code version...") + + try { + // The install script endpoint returns version info + const response = await fetch("https://claude.ai/install.sh") + const script = await response.text() + const versionMatch = script.match(/CLAUDE_CODE_VERSION="([^"]+)"/) + if (versionMatch) { + return versionMatch[1] + } + } catch { + // Fallback + } + + // Fallback to known version + return "2.1.5" +} + +/** + * Download binary for a specific platform + */ +async function downloadPlatform(version, platformKey, manifest) { + const platform = PLATFORMS[platformKey] + if (!platform) { + console.error(`Unknown platform: ${platformKey}`) + return false + } + + const targetDir = path.join(BIN_DIR, platformKey) + const targetPath = path.join(targetDir, platform.binary) + + // Create directory + fs.mkdirSync(targetDir, { recursive: true }) + + // Get expected hash from manifest + const platformManifest = manifest.platforms[platform.dir] + if (!platformManifest) { + console.error(`No manifest entry for ${platform.dir}`) + return false + } + + const expectedHash = platformManifest.checksum + const downloadUrl = `${DIST_BASE}/${version}/${platform.dir}/claude` + + console.log(`\nDownloading Claude Code for ${platformKey}...`) + console.log(` URL: ${downloadUrl}`) + console.log(` Size: ${(platformManifest.size / 1024 / 1024).toFixed(1)} MB`) + + // Check if already downloaded with correct hash + if (fs.existsSync(targetPath)) { + const existingHash = await calculateSha256(targetPath) + if (existingHash === expectedHash) { + console.log(` Already downloaded and verified`) + return true + } + console.log(` Existing file has wrong hash, re-downloading...`) + } + + // Download + await downloadFile(downloadUrl, targetPath) + + // Verify hash + const actualHash = await calculateSha256(targetPath) + if (actualHash !== expectedHash) { + console.error(` Hash mismatch!`) + console.error(` Expected: ${expectedHash}`) + console.error(` Actual: ${actualHash}`) + fs.unlinkSync(targetPath) + return false + } + console.log(` Verified SHA256: ${actualHash.substring(0, 16)}...`) + + // Make executable (Unix) + if (process.platform !== "win32") { + fs.chmodSync(targetPath, 0o755) + } + + console.log(` Saved to: ${targetPath}`) + return true +} + +/** + * Main entry point + */ +async function main() { + const args = process.argv.slice(2) + const downloadAll = args.includes("--all") + const versionArg = args.find((a) => a.startsWith("--version=")) + const specifiedVersion = versionArg?.split("=")[1] + + console.log("Claude Code Binary Downloader") + console.log("=============================\n") + + // Get version + const version = specifiedVersion || (await getLatestVersion()) + console.log(`Version: ${version}`) + + // Fetch manifest + const manifestUrl = `${DIST_BASE}/${version}/manifest.json` + console.log(`Fetching manifest: ${manifestUrl}`) + + let manifest + try { + manifest = await fetchJson(manifestUrl) + } catch (error) { + console.error(`Failed to fetch manifest: ${error.message}`) + process.exit(1) + } + + // Determine which platforms to download + let platformsToDownload + if (downloadAll) { + platformsToDownload = Object.keys(PLATFORMS) + } else { + // Current platform only + const currentPlatform = `${process.platform}-${process.arch}` + if (!PLATFORMS[currentPlatform]) { + console.error(`Unsupported platform: ${currentPlatform}`) + console.log(`Supported platforms: ${Object.keys(PLATFORMS).join(", ")}`) + process.exit(1) + } + platformsToDownload = [currentPlatform] + } + + console.log(`\nPlatforms to download: ${platformsToDownload.join(", ")}`) + + // Create bin directory + fs.mkdirSync(BIN_DIR, { recursive: true }) + + // Write version file + fs.writeFileSync( + path.join(BIN_DIR, "VERSION"), + `${version}\n${new Date().toISOString()}\n` + ) + + // Download each platform + let success = true + for (const platform of platformsToDownload) { + const result = await downloadPlatform(version, platform, manifest) + if (!result) success = false + } + + if (success) { + console.log("\n✓ All downloads completed successfully!") + } else { + console.error("\n✗ Some downloads failed") + process.exit(1) + } +} + +main().catch((error) => { + console.error("Fatal error:", error) + process.exit(1) +}) diff --git a/scripts/generate-icon.mjs b/scripts/generate-icon.mjs new file mode 100755 index 00000000..30f2d599 --- /dev/null +++ b/scripts/generate-icon.mjs @@ -0,0 +1,206 @@ +#!/usr/bin/env node + +/** + * Generate macOS icon with proper rounded corners for all macOS versions + * + * This script creates a properly rounded macOS app icon that looks good on: + * - macOS Sequoia (26+) - where system applies automatic rounding + * - Older macOS versions (Big Sur, Monterey, Ventura) - where manual rounding is needed + * + * Based on Apple's macOS Big Sur icon guidelines: + * - 1024x1024 canvas + * - 824x824 content area (centered) + * - ~18% corner radius (185.4px for 1024x1024) + * - 100px transparent padding on all sides + */ + +import { readFileSync, writeFileSync, mkdirSync, rmSync, existsSync } from 'fs'; +import { join, dirname } from 'path'; +import { fileURLToPath } from 'url'; +import { execSync } from 'child_process'; +import sharp from 'sharp'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +// Paths +const BUILD_DIR = join(__dirname, '../build'); +const INPUT_ICON = join(BUILD_DIR, 'icon.png'); +const ICONSET_DIR = join(BUILD_DIR, 'icon.iconset'); +const OUTPUT_ICON = join(BUILD_DIR, 'icon.icns'); + +// Icon specifications +const ICON_SIZES = [ + { size: 16, scale: 1 }, + { size: 16, scale: 2 }, + { size: 32, scale: 1 }, + { size: 32, scale: 2 }, + { size: 128, scale: 1 }, + { size: 128, scale: 2 }, + { size: 256, scale: 1 }, + { size: 256, scale: 2 }, + { size: 512, scale: 1 }, + { size: 512, scale: 2 }, +]; + +/** + * Create an SVG rounded rectangle path (Apple's squircle approximation) + */ +function createRoundedRectSVG(width, height, radius) { + return ` + + + + `; +} + +/** + * Create a rounded squircle icon following Apple's design guidelines + * + * For older macOS (pre-Sequoia), icons need padding to look correct in Dock. + * Apple recommends: 1024x1024 canvas with ~824x824 content area (100px padding). + */ +async function createRoundedSquircle(inputPath, outputPath, size = 1024, padding = 100) { + const contentSize = size - (padding * 2); // 824 for 1024 canvas + const contentCornerRadius = Math.round(contentSize * 0.22); // ~22% for content area + + console.log(` • Processing: ${size}x${size} canvas`); + console.log(` • Content area: ${contentSize}x${contentSize}`); + console.log(` • Content corner radius: ${contentCornerRadius}px`); + console.log(` • Padding: ${padding}px on all sides`); + + // Create rounded rectangle mask for the CONTENT area (not full canvas) + const maskSVG = createRoundedRectSVG(contentSize, contentSize, contentCornerRadius); + const maskBuffer = Buffer.from(maskSVG); + + // Step 1: Resize input to content size and apply rounded mask + const maskedContent = await sharp(inputPath) + .resize(contentSize, contentSize, { fit: 'cover' }) + .composite([ + { + input: maskBuffer, + blend: 'dest-in' + } + ]) + .png() + .toBuffer(); + + // Step 2: Place masked content centered on transparent canvas with padding + const result = await sharp({ + create: { + width: size, + height: size, + channels: 4, + background: { r: 0, g: 0, b: 0, alpha: 0 } + } + }) + .composite([ + { + input: maskedContent, + left: padding, + top: padding + } + ]) + .png() + .toBuffer(); + + await sharp(result).toFile(outputPath); + + return outputPath; +} + +/** + * Generate a specific icon size + */ +async function generateIconSize(sourcePath, size, scale, outputDir) { + const actualSize = size * scale; + const filename = scale === 1 + ? `icon_${size}x${size}.png` + : `icon_${size}x${size}@${scale}x.png`; + + const outputPath = join(outputDir, filename); + + await sharp(sourcePath) + .resize(actualSize, actualSize, { fit: 'contain', background: { r: 0, g: 0, b: 0, alpha: 0 } }) + .png() + .toFile(outputPath); + + return { filename, actualSize }; +} + +async function main() { + console.log('🎨 Generating macOS icon with proper rounded corners...\n'); + + // Check input file + if (!existsSync(INPUT_ICON)) { + console.error(`❌ Error: Input icon not found at ${INPUT_ICON}`); + process.exit(1); + } + + console.log(`📂 Input: ${INPUT_ICON}`); + console.log(`📂 Output: ${OUTPUT_ICON}\n`); + + // Create iconset directory + if (existsSync(ICONSET_DIR)) { + rmSync(ICONSET_DIR, { recursive: true }); + } + mkdirSync(ICONSET_DIR, { recursive: true }); + + // Step 1: Create rounded version + console.log('1️⃣ Creating rounded squircle shape...'); + + const roundedSource = join(ICONSET_DIR, 'source-rounded.png'); + await createRoundedSquircle(INPUT_ICON, roundedSource); + + console.log(' ✓ Created rounded icon with proper squircle shape\n'); + + // Step 2: Generate all sizes + console.log('2️⃣ Generating all required icon sizes...'); + + for (const { size, scale } of ICON_SIZES) { + const { filename, actualSize } = await generateIconSize( + roundedSource, + size, + scale, + ICONSET_DIR + ); + console.log(` ✓ ${filename} (${actualSize}x${actualSize})`); + } + + // Clean up temp file + if (existsSync(roundedSource)) { + rmSync(roundedSource); + } + + // Step 3: Create .icns file + console.log('\n3️⃣ Creating .icns file...'); + + try { + execSync(`iconutil -c icns "${ICONSET_DIR}" -o "${OUTPUT_ICON}"`, { stdio: 'pipe' }); + + console.log(` ✓ Created ${OUTPUT_ICON.split('/').pop()}`); + + // Clean up iconset directory + rmSync(ICONSET_DIR, { recursive: true }); + + console.log('\n✅ Success! Icon generated with proper macOS rounded corners'); + console.log(` File: ${OUTPUT_ICON}`); + console.log('\n📝 This icon will now look correct on:'); + console.log(' • macOS Sequoia (26+) - system auto-rounding'); + console.log(' • macOS Ventura, Monterey, Big Sur - manual rounding'); + console.log(' • Older macOS versions'); + console.log('\n🔄 Next steps:'); + console.log(' 1. Update package.json to use: "icon": "build/icon.icns"'); + console.log(' 2. Rebuild your app: npm run package:mac'); + + } catch (error) { + console.error('\n❌ Error creating .icns file:', error.message); + console.error(' Make sure you\'re running on macOS with iconutil available'); + process.exit(1); + } +} + +main().catch(error => { + console.error('❌ Fatal error:', error); + process.exit(1); +}); diff --git a/scripts/generate-update-manifest.mjs b/scripts/generate-update-manifest.mjs new file mode 100644 index 00000000..764f7e77 --- /dev/null +++ b/scripts/generate-update-manifest.mjs @@ -0,0 +1,198 @@ +#!/usr/bin/env node + +/** + * Generate update manifest files for electron-updater + * + * This script generates `latest-mac.yml` (for arm64) and `latest-mac-x64.yml` files + * that electron-updater uses to check for and download updates. + * + * Usage: + * node scripts/generate-update-manifest.mjs + * + * The script expects ZIP files to exist in the release/ directory: + * - Agents-{version}-arm64-mac.zip + * - Agents-{version}-mac.zip + * + * Run this after `npm run dist` to generate the manifest files. + */ + +import { createHash } from "crypto" +import { readFileSync, writeFileSync, existsSync, readdirSync, statSync } from "fs" +import { join, dirname } from "path" +import { fileURLToPath } from "url" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = dirname(__filename) + +// Get version from package.json +const packageJson = JSON.parse( + readFileSync(join(__dirname, "../package.json"), "utf-8") +) +const version = process.env.VERSION || packageJson.version + +const releaseDir = join(__dirname, "../release") + +/** + * Calculate SHA512 hash of a file and return base64 encoded string + */ +function calculateSha512(filePath) { + const content = readFileSync(filePath) + return createHash("sha512").update(content).digest("base64") +} + +/** + * Get file size in bytes using stat (more efficient than reading entire file) + */ +function getFileSize(filePath) { + return statSync(filePath).size +} + +/** + * Find ZIP file matching pattern in release directory + */ +function findZipFile(pattern) { + if (!existsSync(releaseDir)) { + console.error(`Release directory not found: ${releaseDir}`) + process.exit(1) + } + + const files = readdirSync(releaseDir) + const match = files.find((f) => f.includes(pattern) && f.endsWith(".zip")) + return match ? join(releaseDir, match) : null +} + +/** + * Generate manifest for a specific architecture + */ +function generateManifest(arch) { + // electron-builder names files differently: + // arm64: Agents-{version}-arm64-mac.zip + // x64: Agents-{version}-mac.zip + const pattern = arch === "arm64" ? `${version}-arm64-mac` : `${version}-mac` + const zipPath = findZipFile(pattern) + + if (!zipPath) { + console.warn(`Warning: ZIP file not found for pattern: ${pattern}`) + console.warn(`Skipping ${arch} manifest generation`) + return null + } + + const zipName = zipPath.split("/").pop() + const sha512 = calculateSha512(zipPath) + const size = getFileSize(zipPath) + + // electron-updater manifest format + const manifest = { + version, + files: [ + { + url: zipName, + sha512, + size, + }, + ], + path: zipName, + sha512, + releaseDate: new Date().toISOString(), + } + + // Manifest file names expected by electron-updater: + // arm64: latest-mac.yml (primary) + // x64: latest-mac-x64.yml + const manifestFileName = + arch === "arm64" ? "latest-mac.yml" : "latest-mac-x64.yml" + const manifestPath = join(releaseDir, manifestFileName) + + // Convert to YAML format (simple implementation) + const yaml = objectToYaml(manifest) + writeFileSync(manifestPath, yaml) + + console.log(`Generated ${manifestFileName}:`) + console.log(` Version: ${version}`) + console.log(` File: ${zipName}`) + console.log(` Size: ${formatBytes(size)}`) + console.log(` SHA512: ${sha512.substring(0, 20)}...`) + console.log() + + return manifestPath +} + +/** + * Convert object to YAML string (simple implementation) + */ +function objectToYaml(obj, indent = 0) { + const spaces = " ".repeat(indent) + let yaml = "" + + for (const [key, value] of Object.entries(obj)) { + if (Array.isArray(value)) { + yaml += `${spaces}${key}:\n` + for (const item of value) { + if (typeof item === "object") { + yaml += `${spaces} - ` + const itemYaml = objectToYaml(item, 0) + .split("\n") + .filter(Boolean) + .map((line, i) => (i === 0 ? line : `${spaces} ${line}`)) + .join("\n") + yaml += itemYaml + "\n" + } else { + yaml += `${spaces} - ${item}\n` + } + } + } else if (typeof value === "object" && value !== null) { + yaml += `${spaces}${key}:\n` + yaml += objectToYaml(value, indent + 1) + } else { + yaml += `${spaces}${key}: ${value}\n` + } + } + + return yaml +} + +/** + * Format bytes to human readable string + */ +function formatBytes(bytes) { + if (bytes === 0) return "0 B" + const k = 1024 + const sizes = ["B", "KB", "MB", "GB"] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + " " + sizes[i] +} + +// Main execution +console.log("=".repeat(50)) +console.log("Generating electron-updater manifests") +console.log("=".repeat(50)) +console.log(`Version: ${version}`) +console.log(`Release dir: ${releaseDir}`) +console.log() + +const arm64Manifest = generateManifest("arm64") +const x64Manifest = generateManifest("x64") + +if (!arm64Manifest && !x64Manifest) { + console.error("No manifest files were generated!") + console.error("Make sure you have built the app with: npm run dist") + process.exit(1) +} + +console.log("=".repeat(50)) +console.log("Manifest generation complete!") +console.log() +console.log("Next steps:") +console.log("1. Upload the following files to cdn.21st.dev/releases/desktop/:") +if (arm64Manifest) { + console.log(` - latest-mac.yml`) + console.log(` - Agents-${version}-arm64-mac.zip`) + console.log(` - Agents-${version}-arm64.dmg (for manual download)`) +} +if (x64Manifest) { + console.log(` - latest-mac-x64.yml`) + console.log(` - Agents-${version}-mac.zip`) + console.log(` - Agents-${version}.dmg (for manual download)`) +} +console.log("2. Create a release entry in the admin dashboard") +console.log("=".repeat(50)) diff --git a/scripts/sync-to-public.sh b/scripts/sync-to-public.sh new file mode 100755 index 00000000..d7dffc34 --- /dev/null +++ b/scripts/sync-to-public.sh @@ -0,0 +1,128 @@ +#!/bin/bash +set -e + +# Sync desktop app to public 1code repository +# Usage: ./scripts/sync-to-public.sh +# +# This script: +# 1. Syncs code from private repo to public repo +# 2. Creates a GitHub release in public repo with same notes as private repo + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DESKTOP_DIR="$(dirname "$SCRIPT_DIR")" +ROOT_DIR="$(cd "$DESKTOP_DIR/../.." && pwd)" +VERSION=$(node -p "require('$DESKTOP_DIR/package.json').version") +TAG="v$VERSION" + +PUBLIC_REPO="git@github.com:21st-dev/1code.git" +PUBLIC_REPO_HTTPS="https://github.com/21st-dev/1code" +PRIVATE_REPO="21st-dev/21st" +TEMP_DIR="/tmp/1code-sync-$$" + +echo "🔄 Syncing desktop app to public repository..." +echo " Version: $VERSION" +echo " Tag: $TAG" +echo "" + +# Get release notes from private repo +echo "📝 Fetching release notes from private repo..." +RELEASE_NOTES=$(gh release view "$TAG" --repo "$PRIVATE_REPO" --json body -q '.body' 2>/dev/null || echo "") + +if [ -z "$RELEASE_NOTES" ]; then + echo "⚠️ No release found for $TAG in private repo" + echo " Please create a release in the private repo first:" + echo " gh release create $TAG --title \"1Code $TAG\" --notes \"...\"" + echo "" + read -p "Continue without release notes? (y/N) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Aborted." + exit 1 + fi + RELEASE_NOTES="Release $TAG" +fi + +echo " Release notes found!" +echo "" + +# Clone public repo +echo "📥 Cloning public repository..." +git clone --depth 1 "$PUBLIC_REPO" "$TEMP_DIR" + +# Remove old content (except .git) +echo "🗑️ Cleaning old content..." +find "$TEMP_DIR" -mindepth 1 -maxdepth 1 ! -name '.git' -exec rm -rf {} + + +# Copy current desktop app to root +echo "📋 Copying desktop app..." +rsync -av --exclude-from=- "$DESKTOP_DIR/" "$TEMP_DIR/" << 'EOF' +# Exclude private/local files +.env.local +.auth-plan +.turbo +node_modules +out +release +release-* +resources/bin +*.log +.DS_Store +electron.vite.config.*.mjs + +# Exclude internal planning docs +PLAN-*.md +ERROR-HANDLING.md +docs/ +test-electron.js +EOF + +# Commit and push +echo "📤 Committing and pushing..." +cd "$TEMP_DIR" +git add -A + +# Check if there are changes +if git diff --staged --quiet; then + echo "ℹ️ No code changes to sync" +else + git commit -m "Release $TAG + +$RELEASE_NOTES" + + git push origin main + echo "✅ Code synced successfully" +fi + +# Create/update GitHub release in public repo +echo "" +echo "🏷️ Creating GitHub release in public repo..." + +# Check if release already exists +if gh release view "$TAG" --repo "$PUBLIC_REPO_HTTPS" &>/dev/null; then + echo " Release $TAG already exists, updating..." + gh release edit "$TAG" \ + --repo "$PUBLIC_REPO_HTTPS" \ + --title "1Code $TAG" \ + --notes "$RELEASE_NOTES" +else + echo " Creating new release $TAG..." + # Create tag if it doesn't exist + git tag -f "$TAG" + git push origin "$TAG" --force + + gh release create "$TAG" \ + --repo "$PUBLIC_REPO_HTTPS" \ + --title "1Code $TAG" \ + --notes "$RELEASE_NOTES" +fi + +echo "✅ GitHub release created/updated" +echo " 🔗 $PUBLIC_REPO_HTTPS/releases/tag/$TAG" + +# Cleanup +echo "" +echo "🧹 Cleaning up..." +rm -rf "$TEMP_DIR" + +echo "" +echo "✨ Done! Public repo synced with release $TAG" diff --git a/scripts/upload-release-wrangler.sh b/scripts/upload-release-wrangler.sh new file mode 100755 index 00000000..d549cb32 --- /dev/null +++ b/scripts/upload-release-wrangler.sh @@ -0,0 +1,185 @@ +#!/bin/bash + +# Build, notarize, and release desktop app +# Usage: ./scripts/upload-release-wrangler.sh +# +# Requires: +# - Keychain profile "21st-notarize" (xcrun notarytool store-credentials) +# - wrangler authenticated (npx wrangler login) +# - gh CLI authenticated (gh auth login) + +set -e + +SCRIPT_DIR="$(dirname "$0")" +BUCKET="components-code" +PREFIX="releases/desktop" +RELEASE_DIR="$SCRIPT_DIR/../release" +PACKAGE_JSON="$SCRIPT_DIR/../package.json" +KEYCHAIN_PROFILE="21st-notarize" + +# Get version from package.json +VERSION=$(node -p "require('$PACKAGE_JSON').version") +TAG="v$VERSION" + +echo "============================================================" +echo "📦 Releasing Desktop v$VERSION" +echo "============================================================" +echo "" + +if [ ! -d "$RELEASE_DIR" ]; then + echo "❌ Release directory not found: $RELEASE_DIR" + echo " Run 'bun run build && bun run package:mac && bun run dist:manifest' first" + exit 1 +fi + +cd "$RELEASE_DIR" + +# ============================================================ +# Part 0: Submit DMGs for notarization (async, no waiting) +# ============================================================ +echo "🔏 Submitting DMGs for notarization..." +echo "" + +for dmg in *.dmg; do + if [ -f "$dmg" ]; then + echo " Submitting $dmg..." + xcrun notarytool submit "$dmg" --keychain-profile "$KEYCHAIN_PROFILE" + echo "" + fi +done + +echo "✅ Notarization submitted! Check status with:" +echo " xcrun notarytool history --keychain-profile \"$KEYCHAIN_PROFILE\"" +echo "" +echo " After approved, staple with:" +echo " cd release && xcrun stapler staple *.dmg" +echo "" + +# ============================================================ +# Part 1: Upload to R2 CDN +# ============================================================ +echo "📤 Uploading to R2 CDN..." +echo "" + +# Upload manifests first +echo " Uploading manifests..." +npx wrangler r2 object put "$BUCKET/$PREFIX/latest-mac.yml" --file=latest-mac.yml --content-type="text/yaml" +npx wrangler r2 object put "$BUCKET/$PREFIX/latest-mac-x64.yml" --file=latest-mac-x64.yml --content-type="text/yaml" +echo " ✅ Manifests uploaded" + +# Upload blockmaps (for delta updates) +echo "" +echo " Uploading blockmaps..." +for f in *.blockmap; do + if [ -f "$f" ]; then + npx wrangler r2 object put "$BUCKET/$PREFIX/$f" --file="$f" --content-type="application/octet-stream" + fi +done +echo " ✅ Blockmaps uploaded" + +# Upload ZIP files (for auto-update) +echo "" +echo " Uploading ZIP files..." +for f in *-mac.zip; do + if [ -f "$f" ]; then + SIZE=$(ls -lh "$f" | awk '{print $5}') + echo " Uploading $f ($SIZE)..." + npx wrangler r2 object put "$BUCKET/$PREFIX/$f" --file="$f" --content-type="application/zip" + fi +done +echo " ✅ ZIP files uploaded" + +# Upload DMG files (for manual download) +echo "" +echo " Uploading DMG files..." +for f in *.dmg; do + if [ -f "$f" ]; then + SIZE=$(ls -lh "$f" | awk '{print $5}') + echo " Uploading $f ($SIZE)..." + npx wrangler r2 object put "$BUCKET/$PREFIX/$f" --file="$f" --content-type="application/x-apple-diskimage" + fi +done +echo " ✅ DMG files uploaded" + +echo "" +echo "✅ R2 CDN upload complete!" +echo "" + +# ============================================================ +# Part 2: Create/Update GitHub Release +# ============================================================ +echo "============================================================" +echo "🐙 Creating GitHub Release $TAG..." +echo "============================================================" +echo "" + +# Check if gh is installed +if ! command -v gh &> /dev/null; then + echo "❌ GitHub CLI (gh) not found. Install it: brew install gh" + exit 1 +fi + +# Check if release exists +if gh release view "$TAG" &> /dev/null; then + echo " Release $TAG exists, updating..." + + # Delete existing assets + echo " Deleting old assets..." + ASSETS=$(gh release view "$TAG" --json assets -q '.assets[].name') + for asset in $ASSETS; do + echo " Deleting $asset..." + gh release delete-asset "$TAG" "$asset" --yes 2>/dev/null || true + done + + # Upload new assets + echo "" + echo " Uploading new assets..." + for f in *.dmg *.zip *.blockmap; do + if [ -f "$f" ]; then + echo " Uploading $f..." + gh release upload "$TAG" "$f" --clobber + fi + done + + echo "" + echo " ✅ Release $TAG updated!" +else + echo " Creating new release $TAG..." + + # Collect asset files + ASSETS="" + for f in *.dmg *.zip *.blockmap; do + if [ -f "$f" ]; then + ASSETS="$ASSETS $f" + fi + done + + # Create release with assets (not draft, mark as latest) + gh release create "$TAG" \ + --title "Agents $TAG" \ + --latest \ + --notes "## What's New + +- Desktop app release $TAG + +## Downloads + +- **macOS ARM64 (Apple Silicon)**: Download the \`-arm64.dmg\` file +- **macOS Intel**: Download the \`-x64.dmg\` file + +Auto-updates are enabled. Existing users will be notified automatically." \ + $ASSETS + + echo "" + echo " ✅ Release $TAG created!" +fi + +echo "" +echo "============================================================" +echo "✅ Release complete!" +echo "" +echo "🔗 URLs:" +echo " CDN ARM64: https://cdn.21st.dev/$PREFIX/latest-mac.yml" +echo " CDN x64: https://cdn.21st.dev/$PREFIX/latest-mac-x64.yml" +echo " GitHub: https://github.com/21st-dev/21st/releases/tag/$TAG" +echo "============================================================" diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 00000000..b80a0425 --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,17 @@ +/// + +// Extend Vite's ImportMetaEnv with our custom env vars +declare global { + interface ImportMetaEnv { + // Main process (MAIN_VITE_ prefix) + readonly MAIN_VITE_SENTRY_DSN?: string + readonly MAIN_VITE_POSTHOG_KEY?: string + readonly MAIN_VITE_POSTHOG_HOST?: string + + // Renderer process (VITE_ prefix) + readonly VITE_POSTHOG_KEY?: string + readonly VITE_POSTHOG_HOST?: string + } +} + +export {} diff --git a/src/main/auth-manager.ts b/src/main/auth-manager.ts new file mode 100644 index 00000000..6ff10869 --- /dev/null +++ b/src/main/auth-manager.ts @@ -0,0 +1,221 @@ +import { AuthStore, AuthData, AuthUser } from "./auth-store" +import { app, BrowserWindow } from "electron" + +// API URLs +const API_URLS = { + production: "https://21st.dev", + development: "http://localhost:3000", +} as const + +export class AuthManager { + private store: AuthStore + private refreshTimer?: NodeJS.Timeout + private isDev: boolean + private onTokenRefresh?: (authData: AuthData) => void + + constructor(isDev: boolean = false) { + this.store = new AuthStore(app.getPath("userData")) + this.isDev = isDev + + // Schedule refresh if already authenticated + if (this.store.isAuthenticated()) { + this.scheduleRefresh() + } + } + + /** + * Set callback to be called when token is refreshed + * This allows the main process to update cookies when tokens change + */ + setOnTokenRefresh(callback: (authData: AuthData) => void): void { + this.onTokenRefresh = callback + } + + private getApiUrl(): string { + return this.isDev ? API_URLS.development : API_URLS.production + } + + /** + * Exchange auth code for session tokens + * Called after receiving code via deep link + */ + async exchangeCode(code: string): Promise { + const response = await fetch(`${this.getApiUrl()}/api/auth/desktop/exchange`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + code, + deviceInfo: this.getDeviceInfo(), + }), + }) + + if (!response.ok) { + const error = await response.json().catch(() => ({ error: "Unknown error" })) + throw new Error(error.error || `Exchange failed: ${response.status}`) + } + + const data = await response.json() + + const authData: AuthData = { + token: data.token, + refreshToken: data.refreshToken, + expiresAt: data.expiresAt, + user: data.user, + } + + this.store.save(authData) + this.scheduleRefresh() + + return authData + } + + /** + * Get device info for session tracking + */ + private getDeviceInfo(): string { + const platform = process.platform + const arch = process.arch + const version = app.getVersion() + return `21st Desktop ${version} (${platform} ${arch})` + } + + /** + * Get a valid token, refreshing if necessary + */ + async getValidToken(): Promise { + if (!this.store.isAuthenticated()) { + return null + } + + if (this.store.needsRefresh()) { + await this.refresh() + } + + return this.store.getToken() + } + + /** + * Refresh the current session + */ + async refresh(): Promise { + const refreshToken = this.store.getRefreshToken() + if (!refreshToken) { + console.warn("No refresh token available") + return false + } + + try { + const response = await fetch(`${this.getApiUrl()}/api/auth/desktop/refresh`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ refreshToken }), + }) + + if (!response.ok) { + console.error("Refresh failed:", response.status) + // If refresh fails, clear auth and require re-login + if (response.status === 401) { + this.logout() + } + return false + } + + const data = await response.json() + + const authData: AuthData = { + token: data.token, + refreshToken: data.refreshToken, + expiresAt: data.expiresAt, + user: data.user, + } + + this.store.save(authData) + this.scheduleRefresh() + + // Notify callback about token refresh (so cookie can be updated) + if (this.onTokenRefresh) { + this.onTokenRefresh(authData) + } + + return true + } catch (error) { + console.error("Refresh error:", error) + return false + } + } + + /** + * Schedule token refresh before expiration + */ + private scheduleRefresh(): void { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer) + } + + const authData = this.store.load() + if (!authData) return + + const expiresAt = new Date(authData.expiresAt).getTime() + const now = Date.now() + + // Refresh 5 minutes before expiration + const refreshIn = Math.max(0, expiresAt - now - 5 * 60 * 1000) + + this.refreshTimer = setTimeout(() => { + this.refresh() + }, refreshIn) + + console.log(`Scheduled token refresh in ${Math.round(refreshIn / 1000 / 60)} minutes`) + } + + /** + * Check if user is authenticated + */ + isAuthenticated(): boolean { + return this.store.isAuthenticated() + } + + /** + * Get current user + */ + getUser(): AuthUser | null { + return this.store.getUser() + } + + /** + * Get current auth data + */ + getAuth(): AuthData | null { + return this.store.load() + } + + /** + * Logout and clear stored credentials + */ + logout(): void { + if (this.refreshTimer) { + clearTimeout(this.refreshTimer) + this.refreshTimer = undefined + } + this.store.clear() + } + + /** + * Start auth flow by opening browser + */ + startAuthFlow(mainWindow: BrowserWindow | null): void { + const { shell } = require("electron") + + let authUrl = `${this.getApiUrl()}/auth/desktop?auto=true` + + // In dev mode, use localhost callback (we run HTTP server on port 21321) + // Also pass the protocol so web knows which deep link to use as fallback + if (this.isDev) { + authUrl += `&callback=${encodeURIComponent("http://localhost:21321/auth/callback")}` + // Pass dev protocol so production web can use correct deep link if callback fails + authUrl += `&protocol=twentyfirst-agents-dev` + } + + shell.openExternal(authUrl) + } +} diff --git a/src/main/auth-store.ts b/src/main/auth-store.ts new file mode 100644 index 00000000..6d3a8306 --- /dev/null +++ b/src/main/auth-store.ts @@ -0,0 +1,190 @@ +import { readFileSync, writeFileSync, existsSync, unlinkSync, mkdirSync } from "fs" +import { join, dirname } from "path" +import { safeStorage } from "electron" + +export interface AuthUser { + id: string + email: string + name: string | null + imageUrl: string | null + username: string | null +} + +export interface AuthData { + token: string + refreshToken: string + expiresAt: string + user: AuthUser +} + +/** + * Storage for desktop authentication tokens + * Uses Electron's safeStorage API to encrypt sensitive data using OS keychain + * Falls back to plaintext only if encryption is unavailable (rare edge case) + */ +export class AuthStore { + private filePath: string + + constructor(userDataPath: string) { + this.filePath = join(userDataPath, "auth.dat") // .dat for encrypted data + } + + /** + * Check if encryption is available on this system + */ + private isEncryptionAvailable(): boolean { + return safeStorage.isEncryptionAvailable() + } + + /** + * Save authentication data (encrypted if possible) + */ + save(data: AuthData): void { + try { + const dir = dirname(this.filePath) + if (!existsSync(dir)) { + mkdirSync(dir, { recursive: true }) + } + + const jsonData = JSON.stringify(data) + + if (this.isEncryptionAvailable()) { + // Encrypt using OS keychain (macOS Keychain, Windows DPAPI, Linux Secret Service) + const encrypted = safeStorage.encryptString(jsonData) + writeFileSync(this.filePath, encrypted) + } else { + // Fallback: store with warning (should rarely happen) + console.warn("safeStorage not available - storing auth data without encryption") + writeFileSync(this.filePath + ".json", jsonData, "utf-8") + } + } catch (error) { + console.error("Failed to save auth data:", error) + throw error + } + } + + /** + * Load authentication data (decrypts if encrypted) + */ + load(): AuthData | null { + try { + // Try encrypted file first + if (existsSync(this.filePath) && this.isEncryptionAvailable()) { + const encrypted = readFileSync(this.filePath) + const decrypted = safeStorage.decryptString(encrypted) + return JSON.parse(decrypted) + } + + // Fallback: try unencrypted file (for migration or when encryption unavailable) + const fallbackPath = this.filePath + ".json" + if (existsSync(fallbackPath)) { + const content = readFileSync(fallbackPath, "utf-8") + const data = JSON.parse(content) + + // Migrate to encrypted storage if now available + if (this.isEncryptionAvailable()) { + this.save(data) + unlinkSync(fallbackPath) // Remove unencrypted file after migration + } + + return data + } + + // Legacy: check for old auth.json file and migrate + const legacyPath = join(dirname(this.filePath), "auth.json") + if (existsSync(legacyPath)) { + const content = readFileSync(legacyPath, "utf-8") + const data = JSON.parse(content) + + // Migrate to encrypted storage + this.save(data) + unlinkSync(legacyPath) // Remove legacy unencrypted file + console.log("Migrated auth data from plaintext to encrypted storage") + + return data + } + + return null + } catch { + console.error("Failed to load auth data") + return null + } + } + + /** + * Clear all stored authentication data (both encrypted and fallback files) + */ + clear(): void { + try { + // Remove encrypted file + if (existsSync(this.filePath)) { + unlinkSync(this.filePath) + } + // Remove fallback unencrypted file if exists + const fallbackPath = this.filePath + ".json" + if (existsSync(fallbackPath)) { + unlinkSync(fallbackPath) + } + // Remove legacy file if exists + const legacyPath = join(dirname(this.filePath), "auth.json") + if (existsSync(legacyPath)) { + unlinkSync(legacyPath) + } + } catch (error) { + console.error("Failed to clear auth data:", error) + } + } + + /** + * Check if user is authenticated + */ + isAuthenticated(): boolean { + const data = this.load() + if (!data) return false + + // Check if token is expired + const expiresAt = new Date(data.expiresAt).getTime() + return expiresAt > Date.now() + } + + /** + * Get current user if authenticated + */ + getUser(): AuthUser | null { + const data = this.load() + return data?.user ?? null + } + + /** + * Get current token if valid + */ + getToken(): string | null { + const data = this.load() + if (!data) return null + + const expiresAt = new Date(data.expiresAt).getTime() + if (expiresAt <= Date.now()) return null + + return data.token + } + + /** + * Get refresh token + */ + getRefreshToken(): string | null { + const data = this.load() + return data?.refreshToken ?? null + } + + /** + * Check if token needs refresh (expires in less than 5 minutes) + */ + needsRefresh(): boolean { + const data = this.load() + if (!data) return false + + const expiresAt = new Date(data.expiresAt).getTime() + const fiveMinutes = 5 * 60 * 1000 + return expiresAt - Date.now() < fiveMinutes + } +} diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 00000000..6cc92e33 --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,575 @@ +import { app, BrowserWindow, session, Menu } from "electron" +import { join } from "path" +import { createServer } from "http" +import { readFileSync, existsSync } from "fs" +import * as Sentry from "@sentry/electron/main" +import { initDatabase, closeDatabase } from "./lib/db" +import { createMainWindow, getWindow, showLoginPage } from "./windows/main" +import { AuthManager } from "./auth-manager" +import { + initAnalytics, + identify, + trackAppOpened, + trackAuthCompleted, + shutdown as shutdownAnalytics, +} from "./lib/analytics" +import { + initAutoUpdater, + checkForUpdates, + setupFocusUpdateCheck, +} from "./lib/auto-updater" + +// Dev mode detection +const IS_DEV = !!process.env.ELECTRON_RENDERER_URL + +// Deep link protocol (must match package.json build.protocols.schemes) +// Use different protocol in dev to avoid conflicts with production app +const PROTOCOL = IS_DEV ? "twentyfirst-agents-dev" : "twentyfirst-agents" + +// Set dev mode userData path BEFORE requestSingleInstanceLock() +// This ensures dev and prod have separate instance locks +if (IS_DEV) { + const { join } = require("path") + const devUserData = join(app.getPath("userData"), "..", "Agents Dev") + app.setPath("userData", devUserData) + console.log("[Dev] Using separate userData path:", devUserData) +} + +// Initialize Sentry before app is ready (production only) +if (app.isPackaged && !IS_DEV) { + const sentryDsn = import.meta.env.MAIN_VITE_SENTRY_DSN + if (sentryDsn) { + try { + Sentry.init({ + dsn: sentryDsn, + }) + console.log("[App] Sentry initialized") + } catch (error) { + console.warn("[App] Failed to initialize Sentry:", error) + } + } else { + console.log("[App] Skipping Sentry initialization (no DSN configured)") + } +} else { + console.log("[App] Skipping Sentry initialization (dev mode)") +} + +// URL configuration (exported for use in other modules) +export function getBaseUrl(): string { + return process.env.ELECTRON_RENDERER_URL + ? "http://localhost:3000" + : "https://21st.dev" +} + +export function getAppUrl(): string { + return process.env.ELECTRON_RENDERER_URL || "https://21st.dev/agents" +} + +// Auth manager singleton +let authManager: AuthManager + +export function getAuthManager(): AuthManager { + return authManager +} + +// Handle auth code from deep link (exported for IPC handlers) +export async function handleAuthCode(code: string): Promise { + console.log("[Auth] Handling auth code:", code.slice(0, 8) + "...") + + try { + const authData = await authManager.exchangeCode(code) + console.log("[Auth] Success for user:", authData.user.email) + + // Track successful authentication + trackAuthCompleted(authData.user.id, authData.user.email) + + // Set desktop token cookie using persist:main partition + const ses = session.fromPartition("persist:main") + try { + // First remove any existing cookie to avoid HttpOnly conflict + await ses.cookies.remove(getBaseUrl(), "x-desktop-token") + await ses.cookies.set({ + url: getBaseUrl(), + name: "x-desktop-token", + value: authData.token, + expirationDate: Math.floor( + new Date(authData.expiresAt).getTime() / 1000, + ), + httpOnly: false, + secure: getBaseUrl().startsWith("https"), + sameSite: "lax" as const, + }) + console.log("[Auth] Desktop token cookie set") + } catch (cookieError) { + // Cookie setting is optional - auth data is already saved to disk + console.warn("[Auth] Cookie set failed (non-critical):", cookieError) + } + + // Notify renderer + const win = getWindow() + win?.webContents.send("auth:success", authData.user) + + // Reload window to show app + if (process.env.ELECTRON_RENDERER_URL) { + win?.loadURL(process.env.ELECTRON_RENDERER_URL) + } else { + win?.loadFile(join(__dirname, "../renderer/index.html")) + } + win?.focus() + } catch (error) { + console.error("[Auth] Exchange failed:", error) + getWindow()?.webContents.send("auth:error", (error as Error).message) + } +} + +// Handle deep link +function handleDeepLink(url: string): void { + console.log("[DeepLink] Received:", url) + + try { + const parsed = new URL(url) + + // Handle auth callback: twentyfirstdev://auth?code=xxx + if (parsed.pathname === "/auth" || parsed.host === "auth") { + const code = parsed.searchParams.get("code") + if (code) { + handleAuthCode(code) + return + } + } + } catch (e) { + console.error("[DeepLink] Failed to parse:", e) + } +} + +// Register protocol BEFORE app is ready +console.log("[Protocol] ========== PROTOCOL REGISTRATION ==========") +console.log("[Protocol] Protocol:", PROTOCOL) +console.log("[Protocol] Is dev mode (process.defaultApp):", process.defaultApp) +console.log("[Protocol] process.execPath:", process.execPath) +console.log("[Protocol] process.argv:", process.argv) + +/** + * Register the app as the handler for our custom protocol. + * On macOS, this may not take effect immediately on first install - + * Launch Services caches protocol handlers and may need time to update. + */ +function registerProtocol(): boolean { + let success = false + + if (process.defaultApp) { + // Dev mode: need to pass execPath and script path + if (process.argv.length >= 2) { + success = app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, [ + process.argv[1]!, + ]) + console.log( + `[Protocol] Dev mode registration:`, + success ? "success" : "failed", + ) + } else { + console.warn("[Protocol] Dev mode: insufficient argv for registration") + } + } else { + // Production mode + success = app.setAsDefaultProtocolClient(PROTOCOL) + console.log( + `[Protocol] Production registration:`, + success ? "success" : "failed", + ) + } + + return success +} + +// Store initial registration result (set in app.whenReady()) +let initialRegistration = false + +// Verify registration (this checks if OS recognizes us as the handler) +function verifyProtocolRegistration(): void { + const isDefault = process.defaultApp + ? app.isDefaultProtocolClient(PROTOCOL, process.execPath, [ + process.argv[1]!, + ]) + : app.isDefaultProtocolClient(PROTOCOL) + + console.log(`[Protocol] Verification - isDefaultProtocolClient: ${isDefault}`) + + if (!isDefault && initialRegistration) { + console.warn( + "[Protocol] Registration returned success but verification failed.", + ) + console.warn( + "[Protocol] This is common on first install - macOS Launch Services may need time to update.", + ) + console.warn("[Protocol] The protocol should work after app restart.") + } +} + +console.log("[Protocol] =============================================") + +// Note: app.on("open-url") will be registered in app.whenReady() + +// SVG favicon as data URI for auth callback pages (matches web app favicon) +const FAVICON_SVG = `` +const FAVICON_DATA_URI = `data:image/svg+xml,${encodeURIComponent(FAVICON_SVG)}` + +// Dev mode: Start local HTTP server for auth callback +// This catches http://localhost:21321/auth/callback?code=xxx +if (process.env.ELECTRON_RENDERER_URL) { + const server = createServer((req, res) => { + const url = new URL(req.url || "", "http://localhost:21321") + + // Serve favicon + if (url.pathname === "/favicon.ico" || url.pathname === "/favicon.svg") { + res.writeHead(200, { "Content-Type": "image/svg+xml" }) + res.end(FAVICON_SVG) + return + } + + if (url.pathname === "/auth/callback") { + const code = url.searchParams.get("code") + console.log( + "[Auth Server] Received callback with code:", + code?.slice(0, 8) + "...", + ) + + if (code) { + // Handle the auth code + handleAuthCode(code) + + // Send success response and close the browser tab + res.writeHead(200, { "Content-Type": "text/html" }) + res.end(` + + + + + 21st Agents - Authentication + + + +

    + +

    Authentication successful

    +

    You can close this tab

    +
    + + +`) + } else { + res.writeHead(400, { "Content-Type": "text/plain" }) + res.end("Missing code parameter") + } + } else { + res.writeHead(404, { "Content-Type": "text/plain" }) + res.end("Not found") + } + }) + + server.listen(21321, () => { + console.log("[Auth Server] Listening on http://localhost:21321") + }) +} + +// Prevent multiple instances +const gotTheLock = app.requestSingleInstanceLock() + +if (!gotTheLock) { + app.quit() +} else { + // Handle second instance launch (also handles deep links on Windows/Linux) + app.on("second-instance", (_event, commandLine) => { + // Check for deep link in command line args + const url = commandLine.find((arg) => arg.startsWith(`${PROTOCOL}://`)) + if (url) { + handleDeepLink(url) + } + + const window = getWindow() + if (window) { + if (window.isMinimized()) window.restore() + window.focus() + } + }) + + // App ready + app.whenReady().then(async () => { + // Set dev mode app name (userData path was already set before requestSingleInstanceLock) + if (IS_DEV) { + app.name = "Agents Dev" + } + + // Register protocol handler (must be after app is ready) + initialRegistration = registerProtocol() + + // Handle deep link on macOS (app already running) + app.on("open-url", (event, url) => { + console.log("[Protocol] open-url event received:", url) + event.preventDefault() + handleDeepLink(url) + }) + + // Set app user model ID for Windows (different in dev to avoid taskbar conflicts) + if (process.platform === "win32") { + app.setAppUserModelId(IS_DEV ? "dev.21st.agents.dev" : "dev.21st.agents") + } + + console.log(`[App] Starting 21st Agents${IS_DEV ? " (DEV)" : ""}...`) + + // Verify protocol registration after app is ready + // This helps diagnose first-install issues where the protocol isn't recognized yet + verifyProtocolRegistration() + + // Get Claude Code version for About panel + let claudeCodeVersion = "unknown" + try { + const isDev = !app.isPackaged + const versionPath = isDev + ? join(app.getAppPath(), "resources/bin/VERSION") + : join(process.resourcesPath, "bin/VERSION") + + if (existsSync(versionPath)) { + const versionContent = readFileSync(versionPath, "utf-8") + claudeCodeVersion = versionContent.split("\n")[0]?.trim() || "unknown" + } + } catch (error) { + console.warn("[App] Failed to read Claude Code version:", error) + } + + // Set About panel options with Claude Code version + app.setAboutPanelOptions({ + applicationName: "Agents", + applicationVersion: app.getVersion(), + version: `Claude Code ${claudeCodeVersion}`, + copyright: "Copyright © 2026 21st.dev", + }) + + // Set custom menu - Cmd+N sends IPC to renderer for "New Agent" + const template: Electron.MenuItemConstructorOptions[] = [ + { + label: app.name, + submenu: [ + { role: "about", label: "About Agents" }, + { + label: "Check for Updates...", + click: () => { + checkForUpdates(true) + }, + }, + { type: "separator" }, + { role: "services" }, + { type: "separator" }, + { role: "hide" }, + { role: "hideOthers" }, + { role: "unhide" }, + { type: "separator" }, + { role: "quit" }, + ], + }, + { + label: "File", + submenu: [ + { + label: "New Agent", + accelerator: "CmdOrCtrl+N", + click: () => { + console.log("[Menu] New Agent clicked (Cmd+N)") + const win = getWindow() + if (win) { + console.log("[Menu] Sending shortcut:new-agent to renderer") + win.webContents.send("shortcut:new-agent") + } else { + console.log("[Menu] No window found!") + } + }, + }, + ], + }, + { + label: "Edit", + submenu: [ + { role: "undo" }, + { role: "redo" }, + { type: "separator" }, + { role: "cut" }, + { role: "copy" }, + { role: "paste" }, + { role: "selectAll" }, + ], + }, + { + label: "View", + submenu: [ + { role: "reload" }, + { role: "forceReload" }, + { role: "toggleDevTools" }, + { type: "separator" }, + { role: "resetZoom" }, + { role: "zoomIn" }, + { role: "zoomOut" }, + { type: "separator" }, + { role: "togglefullscreen" }, + ], + }, + { + label: "Window", + submenu: [ + { role: "minimize" }, + { role: "zoom" }, + { type: "separator" }, + { role: "front" }, + ], + }, + ] + const menu = Menu.buildFromTemplate(template) + Menu.setApplicationMenu(menu) + + // Initialize auth manager + authManager = new AuthManager(!!process.env.ELECTRON_RENDERER_URL) + console.log("[App] Auth manager initialized") + + // Initialize analytics after auth manager so we can identify user + initAnalytics() + + // If user already authenticated from previous session, identify them + if (authManager.isAuthenticated()) { + const user = authManager.getUser() + if (user) { + identify(user.id, { email: user.email }) + console.log("[Analytics] User identified from saved session:", user.id) + } + } + + // Track app opened (now with correct user ID if authenticated) + trackAppOpened() + + // Set up callback to update cookie when token is refreshed + authManager.setOnTokenRefresh(async (authData) => { + console.log("[Auth] Token refreshed, updating cookie...") + const ses = session.fromPartition("persist:main") + try { + await ses.cookies.set({ + url: getBaseUrl(), + name: "x-desktop-token", + value: authData.token, + expirationDate: Math.floor( + new Date(authData.expiresAt).getTime() / 1000, + ), + httpOnly: false, + secure: getBaseUrl().startsWith("https"), + sameSite: "lax" as const, + }) + console.log("[Auth] Desktop token cookie updated after refresh") + } catch (err) { + console.error("[Auth] Failed to update cookie:", err) + } + }) + + // Initialize database + try { + initDatabase() + console.log("[App] Database initialized") + } catch (error) { + console.error("[App] Failed to initialize database:", error) + } + + // Create main window + createMainWindow() + + // Initialize auto-updater (production only) + if (app.isPackaged) { + await initAutoUpdater(getWindow) + // Setup update check on window focus (instead of periodic interval) + setupFocusUpdateCheck(getWindow) + // Check for updates 5 seconds after startup (force to bypass interval check) + setTimeout(() => { + checkForUpdates(true) + }, 5000) + } + + // Handle deep link from app launch (Windows/Linux) + const deepLinkUrl = process.argv.find((arg) => + arg.startsWith(`${PROTOCOL}://`), + ) + if (deepLinkUrl) { + handleDeepLink(deepLinkUrl) + } + + // macOS: Re-create window when dock icon is clicked + app.on("activate", () => { + if (BrowserWindow.getAllWindows().length === 0) { + createMainWindow() + } + }) + }) + + // Quit when all windows are closed (except on macOS) + app.on("window-all-closed", () => { + if (process.platform !== "darwin") { + app.quit() + } + }) + + // Cleanup before quit + app.on("before-quit", async () => { + console.log("[App] Shutting down...") + await shutdownAnalytics() + await closeDatabase() + }) + + // Handle uncaught exceptions + process.on("uncaughtException", (error) => { + console.error("[App] Uncaught exception:", error) + }) + + process.on("unhandledRejection", (reason, promise) => { + console.error("[App] Unhandled rejection at:", promise, "reason:", reason) + }) +} diff --git a/src/main/lib/analytics.ts b/src/main/lib/analytics.ts new file mode 100644 index 00000000..d4908fc4 --- /dev/null +++ b/src/main/lib/analytics.ts @@ -0,0 +1,247 @@ +/** + * PostHog analytics for 21st Agents Desktop - Main Process + * Uses PostHog Node.js SDK for server-side tracking + */ + +import { PostHog } from "posthog-node" +import { app } from "electron" + +// PostHog configuration from environment +const POSTHOG_DESKTOP_KEY = import.meta.env.MAIN_VITE_POSTHOG_KEY +const POSTHOG_HOST = import.meta.env.MAIN_VITE_POSTHOG_HOST || "https://us.i.posthog.com" + +let posthog: PostHog | null = null +let currentUserId: string | null = null +let userOptedOut = false // Synced from renderer + +// Check if we're in development mode +// Set FORCE_ANALYTICS=true to test analytics in development +// Use a function to check lazily after app is ready +function isDev(): boolean { + try { + return !app.isPackaged && process.env.FORCE_ANALYTICS !== "true" + } catch { + // App not ready yet, assume dev mode + return process.env.FORCE_ANALYTICS !== "true" + } +} + +/** + * Get common properties for all events + */ +function getCommonProperties() { + return { + source: "desktop_main", + app_version: app.getVersion(), + platform: process.platform, + arch: process.arch, + electron_version: process.versions.electron, + node_version: process.versions.node, + } +} + +/** + * Set opt-out status (called from renderer when user preference changes) + */ +export function setOptOut(optedOut: boolean) { + userOptedOut = optedOut +} + +/** + * Initialize PostHog for main process + */ +export function initAnalytics() { + // Skip in development mode + if (isDev()) return + + if (posthog) return + + // Skip if no PostHog key configured + if (!POSTHOG_DESKTOP_KEY) { + console.log("[Analytics] Skipping PostHog initialization (no key configured)") + return + } + + posthog = new PostHog(POSTHOG_DESKTOP_KEY, { + host: POSTHOG_HOST, + // Flush events every 30 seconds or when 20 events are queued + flushAt: 20, + flushInterval: 30000, + }) +} + +/** + * Capture an analytics event + */ +export function capture( + eventName: string, + properties?: Record, +) { + // Skip in development mode + if (isDev()) return + + // Skip if user opted out + if (userOptedOut) return + + if (!posthog) return + + const distinctId = currentUserId || "anonymous" + + posthog.capture({ + distinctId, + event: eventName, + properties: { + ...getCommonProperties(), + ...properties, + }, + }) +} + +/** + * Identify a user + */ +export function identify( + userId: string, + traits?: Record, +) { + currentUserId = userId + + // Skip in development mode + if (isDev()) return + + // Skip if user opted out + if (userOptedOut) return + + if (!posthog) return + + posthog.identify({ + distinctId: userId, + properties: { + ...getCommonProperties(), + ...traits, + }, + }) +} + +/** + * Get current user ID + */ +export function getCurrentUserId(): string | null { + return currentUserId +} + +/** + * Reset user identification (on logout) + */ +export function reset() { + currentUserId = null + // PostHog Node.js SDK doesn't have a reset method + // Events will be sent as anonymous until next identify +} + +/** + * Shutdown PostHog and flush pending events + */ +export async function shutdown() { + if (posthog) { + await posthog.shutdown() + posthog = null + } +} + +// ============================================================================ +// Specific event helpers +// ============================================================================ + +/** + * Track app opened event + */ +export function trackAppOpened() { + capture("desktop_opened", { + first_launch: false, // TODO: track first launch + }) +} + +/** + * Track successful authentication + */ +export function trackAuthCompleted(userId: string, email?: string) { + identify(userId, email ? { email } : undefined) + capture("auth_completed", { + user_id: userId, + }) +} + +/** + * Track project opened + */ +export function trackProjectOpened(project: { + id: string + hasGitRemote: boolean +}) { + capture("project_opened", { + project_id: project.id, + has_git_remote: project.hasGitRemote, + }) +} + +/** + * Track workspace/chat created + */ +export function trackWorkspaceCreated(workspace: { + id: string + projectId: string + useWorktree: boolean +}) { + capture("workspace_created", { + workspace_id: workspace.id, + project_id: workspace.projectId, + use_worktree: workspace.useWorktree, + }) +} + +/** + * Track workspace archived + */ +export function trackWorkspaceArchived(workspaceId: string) { + capture("workspace_archived", { + workspace_id: workspaceId, + }) +} + +/** + * Track workspace deleted + */ +export function trackWorkspaceDeleted(workspaceId: string) { + capture("workspace_deleted", { + workspace_id: workspaceId, + }) +} + +/** + * Track message sent + */ +export function trackMessageSent(data: { + workspaceId: string + messageLength: number + mode: "plan" | "agent" +}) { + capture("message_sent", { + workspace_id: data.workspaceId, + message_length: data.messageLength, + mode: data.mode, + }) +} + +/** + * Track PR created + */ +export function trackPRCreated(data: { + workspaceId: string + prNumber: number +}) { + capture("pr_created", { + workspace_id: data.workspaceId, + pr_number: data.prNumber, + }) +} diff --git a/src/main/lib/auto-updater.ts b/src/main/lib/auto-updater.ts new file mode 100644 index 00000000..f990d5b8 --- /dev/null +++ b/src/main/lib/auto-updater.ts @@ -0,0 +1,211 @@ +import { BrowserWindow, ipcMain, app } from "electron" +import log from "electron-log" +import { autoUpdater, type UpdateInfo, type ProgressInfo } from "electron-updater" + +/** + * IMPORTANT: Do NOT use lazy/dynamic imports for electron-updater! + * + * In v0.0.6 we tried using async getAutoUpdater() with dynamic imports, + * which broke the auto-updater completely. The synchronous import is required + * for electron-updater to work correctly. + * + * See commit d946614c5 for the broken implementation - do not repeat this mistake. + */ + +function initAutoUpdaterConfig() { + // Configure logging + log.transports.file.level = "info" + autoUpdater.logger = log + + // Configure updater behavior + autoUpdater.autoDownload = false // Let user decide when to download + autoUpdater.autoInstallOnAppQuit = true // Install on quit if downloaded + autoUpdater.autoRunAppAfterInstall = true // Restart app after install +} + +// CDN base URL for updates +const CDN_BASE = "https://cdn.21st.dev/releases/desktop" + +// Minimum interval between update checks (prevent spam on rapid focus/blur) +const MIN_CHECK_INTERVAL = 60 * 1000 // 1 minute +let lastCheckTime = 0 + +let mainWindow: (() => BrowserWindow | null) | null = null + +/** + * Send update event to renderer process + */ +function sendToRenderer(channel: string, data?: unknown) { + const win = mainWindow?.() + if (win && !win.isDestroyed()) { + win.webContents.send(channel, data) + } +} + +/** + * Initialize the auto-updater with event handlers and IPC + */ +export async function initAutoUpdater(getWindow: () => BrowserWindow | null) { + mainWindow = getWindow + + // Initialize config + initAutoUpdaterConfig() + + // Configure feed URL to point to R2 CDN + autoUpdater.setFeedURL({ + provider: "generic", + url: CDN_BASE, + }) + + // Event: Checking for updates + autoUpdater.on("checking-for-update", () => { + log.info("[AutoUpdater] Checking for updates...") + sendToRenderer("update:checking") + }) + + // Event: Update available + autoUpdater.on("update-available", (info: UpdateInfo) => { + log.info(`[AutoUpdater] Update available: v${info.version}`) + sendToRenderer("update:available", { + version: info.version, + releaseDate: info.releaseDate, + releaseNotes: info.releaseNotes, + }) + }) + + // Event: No update available + autoUpdater.on("update-not-available", (info: UpdateInfo) => { + log.info(`[AutoUpdater] App is up to date (v${info.version})`) + sendToRenderer("update:not-available", { + version: info.version, + }) + }) + + // Event: Download progress + autoUpdater.on("download-progress", (progress: ProgressInfo) => { + log.info( + `[AutoUpdater] Download progress: ${progress.percent.toFixed(1)}% ` + + `(${formatBytes(progress.transferred)}/${formatBytes(progress.total)})`, + ) + sendToRenderer("update:progress", { + percent: progress.percent, + bytesPerSecond: progress.bytesPerSecond, + transferred: progress.transferred, + total: progress.total, + }) + }) + + // Event: Update downloaded + autoUpdater.on("update-downloaded", (info: UpdateInfo) => { + log.info(`[AutoUpdater] Update downloaded: v${info.version}`) + sendToRenderer("update:downloaded", { + version: info.version, + releaseDate: info.releaseDate, + releaseNotes: info.releaseNotes, + }) + }) + + // Event: Error + autoUpdater.on("error", (error: Error) => { + log.error("[AutoUpdater] Error:", error.message) + sendToRenderer("update:error", error.message) + }) + + // Register IPC handlers + registerIpcHandlers() + + log.info("[AutoUpdater] Initialized with feed URL:", CDN_BASE) +} + +/** + * Register IPC handlers for update operations + */ +function registerIpcHandlers() { + // Check for updates + ipcMain.handle("update:check", async () => { + if (!app.isPackaged) { + log.info("[AutoUpdater] Skipping update check in dev mode") + return null + } + try { + const result = await autoUpdater.checkForUpdates() + return result?.updateInfo || null + } catch (error) { + log.error("[AutoUpdater] Check failed:", error) + return null + } + }) + + // Download update + ipcMain.handle("update:download", async () => { + try { + await autoUpdater.downloadUpdate() + return true + } catch (error) { + log.error("[AutoUpdater] Download failed:", error) + return false + } + }) + + // Install update and restart + ipcMain.handle("update:install", () => { + log.info("[AutoUpdater] Installing update and restarting...") + // Give renderer time to save state + setTimeout(() => { + autoUpdater.quitAndInstall(false, true) + }, 100) + }) + + // Get current update state (useful for re-renders) + ipcMain.handle("update:get-state", () => { + return { + currentVersion: app.getVersion(), + } + }) +} + +/** + * Manually trigger an update check + * @param force - Skip the minimum interval check + */ +export async function checkForUpdates(force = false) { + if (!app.isPackaged) { + log.info("[AutoUpdater] Skipping update check in dev mode") + return Promise.resolve(null) + } + + // Respect minimum interval to prevent spam + const now = Date.now() + if (!force && now - lastCheckTime < MIN_CHECK_INTERVAL) { + log.info( + `[AutoUpdater] Skipping check - last check was ${Math.round((now - lastCheckTime) / 1000)}s ago`, + ) + return Promise.resolve(null) + } + + lastCheckTime = now + return autoUpdater.checkForUpdates() +} + +/** + * Check for updates when window gains focus + * This is more natural than checking on an interval + */ +export function setupFocusUpdateCheck(getWindow: () => BrowserWindow | null) { + // Listen for window focus events + app.on("browser-window-focus", () => { + log.info("[AutoUpdater] Window focused - checking for updates") + checkForUpdates() + }) +} + +/** + * Format bytes to human readable string + */ +function formatBytes(bytes: number): string { + if (bytes === 0) return "0 B" + const k = 1024 + const sizes = ["B", "KB", "MB", "GB"] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + " " + sizes[i] +} diff --git a/src/main/lib/claude/env.ts b/src/main/lib/claude/env.ts new file mode 100644 index 00000000..7169c484 --- /dev/null +++ b/src/main/lib/claude/env.ts @@ -0,0 +1,243 @@ +import { execSync } from "node:child_process" +import fs from "node:fs" +import path from "node:path" +import os from "node:os" +import { app } from "electron" +import { stripVTControlCharacters } from "node:util" + +// Cache the shell environment +let cachedShellEnv: Record | null = null + +// Delimiter for parsing env output +const DELIMITER = "_CLAUDE_ENV_DELIMITER_" + +// Keys to strip (prevent auth interference) +const STRIPPED_ENV_KEYS = [ + "ANTHROPIC_API_KEY", + "OPENAI_API_KEY", + "CLAUDE_CODE_USE_BEDROCK", + "CLAUDE_CODE_USE_VERTEX", +] + +/** + * Get path to the bundled Claude binary. + * Returns the path to the native Claude executable bundled with the app. + */ +export function getBundledClaudeBinaryPath(): string { + const isDev = !app.isPackaged + const platform = process.platform + const arch = process.arch + + console.log("[claude-binary] ========== BUNDLED BINARY PATH ==========") + console.log("[claude-binary] isDev:", isDev) + console.log("[claude-binary] platform:", platform) + console.log("[claude-binary] arch:", arch) + console.log("[claude-binary] appPath:", app.getAppPath()) + + // In dev: apps/desktop/resources/bin/{platform}-{arch}/claude + // In production: {resourcesPath}/bin/claude + const resourcesPath = isDev + ? path.join(app.getAppPath(), "resources/bin", `${platform}-${arch}`) + : path.join(process.resourcesPath, "bin") + + console.log("[claude-binary] resourcesPath:", resourcesPath) + + const binaryName = platform === "win32" ? "claude.exe" : "claude" + const binaryPath = path.join(resourcesPath, binaryName) + + console.log("[claude-binary] binaryPath:", binaryPath) + + // Check if binary exists + const exists = fs.existsSync(binaryPath) + console.log("[claude-binary] exists:", exists) + + if (exists) { + const stats = fs.statSync(binaryPath) + const sizeMB = (stats.size / 1024 / 1024).toFixed(1) + const isExecutable = (stats.mode & fs.constants.X_OK) !== 0 + console.log("[claude-binary] size:", sizeMB, "MB") + console.log("[claude-binary] isExecutable:", isExecutable) + } else { + console.error("[claude-binary] WARNING: Binary not found at path!") + console.error("[claude-binary] Run 'bun run claude:download' to download it") + } + + console.log("[claude-binary] ===========================================") + + return binaryPath +} + +/** + * Parse environment variables from shell output + */ +function parseEnvOutput(output: string): Record { + const envSection = output.split(DELIMITER)[1] + if (!envSection) return {} + + const env: Record = {} + for (const line of stripVTControlCharacters(envSection) + .split("\n") + .filter(Boolean)) { + const separatorIndex = line.indexOf("=") + if (separatorIndex > 0) { + const key = line.substring(0, separatorIndex) + const value = line.substring(separatorIndex + 1) + env[key] = value + } + } + return env +} + +/** + * Load full shell environment using interactive login shell. + * This captures PATH, HOME, and all shell profile configurations. + * Results are cached for the lifetime of the process. + */ +export function getClaudeShellEnvironment(): Record { + if (cachedShellEnv !== null) { + return { ...cachedShellEnv } + } + + const shell = process.env.SHELL || "/bin/zsh" + const command = `echo -n "${DELIMITER}"; env; echo -n "${DELIMITER}"; exit` + + try { + const output = execSync(`${shell} -ilc '${command}'`, { + encoding: "utf8", + timeout: 5000, + env: { + // Prevent Oh My Zsh from blocking with auto-update prompts + DISABLE_AUTO_UPDATE: "true", + // Minimal env to bootstrap the shell + HOME: os.homedir(), + USER: os.userInfo().username, + SHELL: shell, + }, + }) + + const env = parseEnvOutput(output) + + // Strip keys that could interfere with Claude's auth resolution + for (const key of STRIPPED_ENV_KEYS) { + if (key in env) { + console.log(`[claude-env] Stripped ${key} from shell environment`) + delete env[key] + } + } + + console.log( + `[claude-env] Loaded ${Object.keys(env).length} environment variables from shell`, + ) + cachedShellEnv = env + return { ...env } + } catch (error) { + console.error("[claude-env] Failed to load shell environment:", error) + + // Fallback: return minimal required env + const home = os.homedir() + const fallbackPath = [ + `${home}/.local/bin`, + "/opt/homebrew/bin", + "/usr/local/bin", + "/usr/bin", + "/bin", + "/usr/sbin", + "/sbin", + ].join(":") + + const fallback: Record = { + HOME: home, + USER: os.userInfo().username, + PATH: fallbackPath, + SHELL: process.env.SHELL || "/bin/zsh", + TERM: "xterm-256color", + } + + console.log("[claude-env] Using fallback environment") + cachedShellEnv = fallback + return { ...fallback } + } +} + +/** + * Build the complete environment for Claude SDK. + * Merges shell environment, process.env, and custom overrides. + */ +export function buildClaudeEnv(options?: { + ghToken?: string + customEnv?: Record +}): Record { + const env: Record = {} + + // 1. Start with shell environment (has HOME, full PATH, etc.) + try { + Object.assign(env, getClaudeShellEnvironment()) + } catch (error) { + console.error("[claude-env] Shell env failed, using process.env") + } + + // 2. Overlay current process.env (preserves Electron-set vars) + // BUT: Don't overwrite PATH from shell env - Electron's PATH is minimal when launched from Finder + const shellPath = env.PATH + for (const [key, value] of Object.entries(process.env)) { + if (value !== undefined) { + env[key] = value + } + } + // Restore shell PATH if we had one (it contains nvm, homebrew, etc.) + if (shellPath) { + env.PATH = shellPath + } + + // 3. Ensure critical vars are present + if (!env.HOME) env.HOME = os.homedir() + if (!env.USER) env.USER = os.userInfo().username + if (!env.SHELL) env.SHELL = "/bin/zsh" + if (!env.TERM) env.TERM = "xterm-256color" + + // 4. Add custom overrides + if (options?.ghToken) { + env.GH_TOKEN = options.ghToken + } + if (options?.customEnv) { + for (const [key, value] of Object.entries(options.customEnv)) { + if (value === "") { + delete env[key] + } else { + env[key] = value + } + } + } + + // 5. Mark as SDK entry + env.CLAUDE_CODE_ENTRYPOINT = "sdk-ts" + + return env +} + +/** + * Clear cached shell environment (useful for testing) + */ +export function clearClaudeEnvCache(): void { + cachedShellEnv = null +} + +/** + * Debug: Log key environment variables + */ +export function logClaudeEnv( + env: Record, + prefix: string = "", +): void { + console.log(`${prefix}[claude-env] HOME: ${env.HOME}`) + console.log(`${prefix}[claude-env] USER: ${env.USER}`) + console.log( + `${prefix}[claude-env] PATH includes homebrew: ${env.PATH?.includes("/opt/homebrew")}`, + ) + console.log( + `${prefix}[claude-env] PATH includes /usr/local/bin: ${env.PATH?.includes("/usr/local/bin")}`, + ) + console.log( + `${prefix}[claude-env] ANTHROPIC_AUTH_TOKEN: ${env.ANTHROPIC_AUTH_TOKEN ? "set" : "not set"}`, + ) +} diff --git a/src/main/lib/claude/index.ts b/src/main/lib/claude/index.ts new file mode 100644 index 00000000..88c6305f --- /dev/null +++ b/src/main/lib/claude/index.ts @@ -0,0 +1,14 @@ +export { createTransformer } from "./transform" +export type { UIMessageChunk, MessageMetadata } from "./types" +export { + logRawClaudeMessage, + getLogsDirectory, + cleanupOldLogs, +} from "./raw-logger" +export { + buildClaudeEnv, + getClaudeShellEnvironment, + clearClaudeEnvCache, + logClaudeEnv, + getBundledClaudeBinaryPath, +} from "./env" diff --git a/src/main/lib/claude/raw-logger.ts b/src/main/lib/claude/raw-logger.ts new file mode 100644 index 00000000..9132d67e --- /dev/null +++ b/src/main/lib/claude/raw-logger.ts @@ -0,0 +1,130 @@ +import { app } from "electron" +import { join } from "path" +import { appendFile, mkdir, stat, readdir, unlink } from "fs/promises" + +// Check if logging is enabled (lazy check after app is ready) +function isEnabled(): boolean { + try { + return process.env.CLAUDE_RAW_LOG === "1" || !app.isPackaged + } catch { + // App not ready yet, check env var only + return process.env.CLAUDE_RAW_LOG === "1" + } +} +const MAX_LOG_SIZE = 10 * 1024 * 1024 // 10MB per file +const LOG_RETENTION_DAYS = 7 // Keep logs for 7 days + +let logsDir: string | null = null +let currentLogFile: string | null = null +let currentSessionId: string | null = null + +async function ensureLogsDir(): Promise { + if (!logsDir) { + logsDir = join(app.getPath("userData"), "logs", "claude") + await mkdir(logsDir, { recursive: true }) + } + return logsDir +} + +/** + * Check if current log file should be rotated based on size + */ +async function shouldRotateLog(file: string): Promise { + try { + const stats = await stat(file) + return stats.size > MAX_LOG_SIZE + } catch { + // File doesn't exist or can't be accessed - no need to rotate + return false + } +} + +/** + * Clean up old log files (older than LOG_RETENTION_DAYS) + * Called periodically to prevent disk space issues + */ +export async function cleanupOldLogs(): Promise { + if (!isEnabled()) return + + try { + const dir = await ensureLogsDir() + const files = await readdir(dir) + + const now = Date.now() + const maxAge = LOG_RETENTION_DAYS * 24 * 60 * 60 * 1000 + + for (const file of files) { + // Only process .jsonl files + if (!file.endsWith(".jsonl")) continue + + const filePath = join(dir, file) + try { + const stats = await stat(filePath) + const age = now - stats.mtime.getTime() + + if (age > maxAge) { + await unlink(filePath) + console.log(`[raw-logger] Cleaned up old log: ${file}`) + } + } catch (err) { + // Skip files we can't access + console.warn(`[raw-logger] Failed to check file ${file}:`, err) + } + } + } catch (err) { + console.error("[raw-logger] Failed to cleanup old logs:", err) + } +} + +/** + * Log a raw Claude message to JSONL file for debugging + * Includes automatic log rotation and cleanup + */ +export async function logRawClaudeMessage( + sessionId: string, + msg: unknown, +): Promise { + if (!isEnabled()) return + + try { + const dir = await ensureLogsDir() + + // Create new file for new session OR rotate if current file is too large + const needsNewFile = + sessionId !== currentSessionId || + (currentLogFile && (await shouldRotateLog(currentLogFile))) + + if (needsNewFile) { + currentSessionId = sessionId + const timestamp = new Date().toISOString().replace(/[:.]/g, "-") + const suffix = currentLogFile ? `-${Date.now()}` : "" + currentLogFile = join(dir, `${sessionId}_${timestamp}${suffix}.jsonl`) + + // Run cleanup periodically (on new session start) + if (sessionId !== currentSessionId) { + // Run cleanup in background, don't wait for it + cleanupOldLogs().catch((err) => + console.error("[raw-logger] Background cleanup failed:", err), + ) + } + } + + const entry = { + timestamp: new Date().toISOString(), + data: msg, + } + + await appendFile(currentLogFile!, JSON.stringify(entry) + "\n") + } catch (err) { + // Don't let logging errors break the main flow + console.error("[raw-logger] Failed to log:", err) + } +} + +/** + * Get the directory where Claude logs are stored + * Useful for UI to show "Open Logs" button + */ +export function getLogsDirectory(): string { + return join(app.getPath("userData"), "logs", "claude") +} diff --git a/src/main/lib/claude/transform.ts b/src/main/lib/claude/transform.ts new file mode 100644 index 00000000..460ee104 --- /dev/null +++ b/src/main/lib/claude/transform.ts @@ -0,0 +1,386 @@ +import type { UIMessageChunk, MessageMetadata } from "./types" + +export function createTransformer() { + let textId: string | null = null + let textStarted = false + let started = false + let startTime: number | null = null + + // Track streaming tool calls + let currentToolCallId: string | null = null + let currentToolName: string | null = null + let accumulatedToolInput = "" + + // Track already emitted tool IDs to avoid duplicates + // (tools can come via streaming AND in the final assistant message) + const emittedToolIds = new Set() + + // Track the last text block ID for final response marking + // This is used to identify when there's a "final text" response after tools + let lastTextId: string | null = null + + // Track parent tool context for nested tools (e.g., Explore agent) + let currentParentToolUseId: string | null = null + + // Map original toolCallId -> composite toolCallId (for tool-result matching) + const toolIdMapping = new Map() + + // Track compacting system tool for matching status->boundary events + let lastCompactId: string | null = null + let compactCounter = 0 + + // Track streaming thinking for Extended Thinking + let currentThinkingId: string | null = null + let accumulatedThinking = "" + let inThinkingBlock = false // Track if we're currently in a thinking block + + // Track UUID for early emission (rollback support on abort) + let currentUuid: string | null = null + + // Helper to create composite toolCallId: "parentId:childId" or just "childId" + const makeCompositeId = (originalId: string, parentId: string | null): string => { + if (parentId) return `${parentId}:${originalId}` + return originalId + } + + const genId = () => `text-${Date.now()}-${Math.random().toString(36).slice(2, 7)}` + + // Helper to end current text block + function* endTextBlock(): Generator { + if (textStarted && textId) { + yield { type: "text-end", id: textId } + // Track the last text ID for final response marking + lastTextId = textId + textStarted = false + textId = null + } + } + + // Helper to end current tool input + function* endToolInput(): Generator { + if (currentToolCallId) { + // Track this tool ID to avoid duplicates from assistant message + emittedToolIds.add(currentToolCallId) + + // Emit complete tool call with accumulated input + yield { + type: "tool-input-available", + toolCallId: currentToolCallId, + toolName: currentToolName || "unknown", + input: accumulatedToolInput ? JSON.parse(accumulatedToolInput) : {}, + } + currentToolCallId = null + currentToolName = null + accumulatedToolInput = "" + } + } + + return function* transform(msg: any): Generator { + // Emit UUID early for rollback support (before abort can happen) + // This ensures frontend has sdkMessageUuid even if streaming is interrupted + if (msg.uuid && msg.uuid !== currentUuid) { + currentUuid = msg.uuid + yield { + type: "message-metadata", + messageMetadata: { sdkMessageUuid: msg.uuid } + } + } + + // Track parent_tool_use_id for nested tools + // Only update when explicitly present (don't reset on messages without it) + if (msg.parent_tool_use_id !== undefined) { + currentParentToolUseId = msg.parent_tool_use_id + } + + // Emit start once + if (!started) { + started = true + startTime = Date.now() + yield { type: "start" } + yield { type: "start-step" } + } + + // Reset thinking state on new message start to prevent memory leaks + if (msg.type === "stream_event" && msg.event?.type === "message_start") { + currentThinkingId = null + accumulatedThinking = "" + inThinkingBlock = false + } + + // ===== STREAMING EVENTS (token-by-token) ===== + if (msg.type === "stream_event") { + const event = msg.event + console.log("[transform] stream_event:", event?.type, "delta:", event?.delta?.type) + if (!event) return + + // Text block start + if (event.type === "content_block_start" && event.content_block?.type === "text") { + console.log("[transform] TEXT BLOCK START") + yield* endTextBlock() + yield* endToolInput() + textId = genId() + yield { type: "text-start", id: textId } + textStarted = true + console.log("[transform] textStarted set to TRUE, textId:", textId) + } + + // Text delta + if (event.type === "content_block_delta" && event.delta?.type === "text_delta") { + console.log("[transform] TEXT DELTA, textStarted:", textStarted, "delta:", event.delta.text?.slice(0, 20)) + if (!textStarted) { + yield* endToolInput() + textId = genId() + yield { type: "text-start", id: textId } + textStarted = true + } + yield { type: "text-delta", id: textId!, delta: event.delta.text || "" } + } + + // Content block stop + if (event.type === "content_block_stop") { + console.log("[transform] CONTENT BLOCK STOP, textStarted:", textStarted) + if (textStarted) { + yield* endTextBlock() + console.log("[transform] after endTextBlock, textStarted:", textStarted) + } + if (currentToolCallId) { + yield* endToolInput() + } + } + + // Tool use start (streaming) + if (event.type === "content_block_start" && event.content_block?.type === "tool_use") { + yield* endTextBlock() + yield* endToolInput() + + const originalId = event.content_block.id || genId() + currentToolCallId = makeCompositeId(originalId, currentParentToolUseId) + currentToolName = event.content_block.name || "unknown" + accumulatedToolInput = "" + + // Store mapping for tool-result lookup + toolIdMapping.set(originalId, currentToolCallId) + + // Emit tool-input-start for progressive UI + yield { + type: "tool-input-start", + toolCallId: currentToolCallId, + toolName: currentToolName, + } + } + + // Tool input delta + if (event.delta?.type === "input_json_delta" && currentToolCallId) { + const partialJson = event.delta.partial_json || "" + accumulatedToolInput += partialJson + + // Emit tool-input-delta for progressive UI + yield { + type: "tool-input-delta", + toolCallId: currentToolCallId, + inputTextDelta: partialJson, + } + } + + // Thinking content block start (Extended Thinking) + if (event.type === "content_block_start" && event.content_block?.type === "thinking") { + currentThinkingId = `thinking-${Date.now()}` + accumulatedThinking = "" + inThinkingBlock = true + yield { + type: "tool-input-start", + toolCallId: currentThinkingId, + toolName: "Thinking", + } + } + + // Thinking/reasoning streaming - emit as tool-like chunks for UI + if (event.delta?.type === "thinking_delta" && currentThinkingId && inThinkingBlock) { + const thinkingText = String(event.delta.thinking || "") + + // Accumulate and emit delta + accumulatedThinking += thinkingText + yield { + type: "tool-input-delta", + toolCallId: currentThinkingId, + inputTextDelta: thinkingText, + } + } + + // Thinking complete (content_block_stop while in thinking block) + if (event.type === "content_block_stop" && inThinkingBlock && currentThinkingId) { + // Emit the complete thinking tool + yield { + type: "tool-input-available", + toolCallId: currentThinkingId, + toolName: "Thinking", + input: { text: accumulatedThinking }, + } + yield { + type: "tool-output-available", + toolCallId: currentThinkingId, + output: { completed: true }, + } + // Track as emitted to skip duplicate from assistant message + emittedToolIds.add(currentThinkingId) + emittedToolIds.add("thinking-streamed") // Flag to skip complete block + currentThinkingId = null + accumulatedThinking = "" + inThinkingBlock = false + } + } + + // ===== ASSISTANT MESSAGE (complete, often with tool_use) ===== + // When streaming is enabled, text arrives via stream_event, not here + if (msg.type === "assistant" && msg.message?.content) { + for (const block of msg.message.content) { + // Handle thinking blocks from Extended Thinking + // Skip if already emitted via streaming (thinking_delta) + if (block.type === "thinking" && block.thinking) { + // Check if we already streamed this thinking block + // We compare by checking if accumulated thinking matches + const wasStreamed = emittedToolIds.has("thinking-streamed") + + if (wasStreamed) { + continue + } + + // Emit as tool-input-available with special "Thinking" tool name + // This allows the UI to render it like other tools + const thinkingId = genId() + yield { + type: "tool-input-available", + toolCallId: thinkingId, + toolName: "Thinking", + input: { text: block.thinking }, + } + // Immediately mark as complete + yield { + type: "tool-output-available", + toolCallId: thinkingId, + output: { completed: true }, + } + } + + if (block.type === "text") { + console.log("[transform] ASSISTANT TEXT block, textStarted:", textStarted, "text length:", block.text?.length) + yield* endToolInput() + + // Only emit text if we're NOT already streaming (textStarted = false) + // When includePartialMessages is true, text comes via stream_event + if (!textStarted) { + console.log("[transform] EMITTING assistant text (textStarted was false)") + textId = genId() + yield { type: "text-start", id: textId } + yield { type: "text-delta", id: textId, delta: block.text } + yield { type: "text-end", id: textId } + // Track the last text ID for final response marking + lastTextId = textId + textId = null + } else { + console.log("[transform] SKIPPING assistant text (textStarted is true)") + } + // If textStarted is true, we're mid-stream - skip this duplicate + } + + if (block.type === "tool_use") { + yield* endTextBlock() + yield* endToolInput() + + // Skip if already emitted via streaming + if (emittedToolIds.has(block.id)) { + console.log("[transform] SKIPPING duplicate tool_use (already emitted via streaming):", block.id) + continue + } + + emittedToolIds.add(block.id) + + const compositeId = makeCompositeId(block.id, currentParentToolUseId) + + // Store mapping for tool-result lookup + toolIdMapping.set(block.id, compositeId) + + yield { + type: "tool-input-available", + toolCallId: compositeId, + toolName: block.name, + input: block.input, + } + } + } + } + + // ===== USER MESSAGE (tool results) ===== + if (msg.type === "user" && msg.message?.content) { + for (const block of msg.message.content) { + if (block.type === "tool_result") { + // Lookup composite ID from mapping, fallback to original + const compositeId = toolIdMapping.get(block.tool_use_id) || block.tool_use_id + + if (block.is_error) { + yield { + type: "tool-output-error", + toolCallId: compositeId, + errorText: String(block.content), + } + } else { + yield { + type: "tool-output-available", + toolCallId: compositeId, + output: msg.tool_use_result || block.content, + } + } + } + } + } + + // ===== SYSTEM STATUS (compacting, etc.) ===== + if (msg.type === "system") { + // Compacting status - show as a tool + if (msg.subtype === "status" && msg.status === "compacting") { + // Create unique ID and save for matching with boundary event + lastCompactId = `compact-${Date.now()}-${compactCounter++}` + yield { + type: "system-Compact", + toolCallId: lastCompactId, + state: "input-streaming", + } + } + + // Compact boundary - mark the compacting tool as complete + if (msg.subtype === "compact_boundary" && lastCompactId) { + yield { + type: "system-Compact", + toolCallId: lastCompactId, + state: "output-available", + } + lastCompactId = null // Clear for next compacting cycle + } + } + + // ===== RESULT (final) ===== + if (msg.type === "result") { + console.log("[transform] RESULT message, textStarted:", textStarted, "lastTextId:", lastTextId) + yield* endTextBlock() + yield* endToolInput() + + const inputTokens = msg.usage?.input_tokens + const outputTokens = msg.usage?.output_tokens + const metadata: MessageMetadata = { + sessionId: msg.session_id, + inputTokens, + outputTokens, + totalTokens: inputTokens && outputTokens ? inputTokens + outputTokens : undefined, + totalCostUsd: msg.total_cost_usd, + durationMs: startTime ? Date.now() - startTime : undefined, + resultSubtype: msg.subtype || "success", + // Include finalTextId for collapsing tools when there's a final response + finalTextId: lastTextId || undefined, + sdkMessageUuid: msg.uuid, + } + yield { type: "message-metadata", messageMetadata: metadata } + yield { type: "finish-step" } + yield { type: "finish", messageMetadata: metadata } + } + } +} diff --git a/src/main/lib/claude/types.ts b/src/main/lib/claude/types.ts new file mode 100644 index 00000000..e859ae74 --- /dev/null +++ b/src/main/lib/claude/types.ts @@ -0,0 +1,57 @@ +// AI SDK UIMessageChunk format +export type UIMessageChunk = + // Message lifecycle + | { type: "start"; messageId?: string } + | { type: "finish"; messageMetadata?: MessageMetadata } + | { type: "start-step" } + | { type: "finish-step" } + // Text streaming + | { type: "text-start"; id: string } + | { type: "text-delta"; id: string; delta: string } + | { type: "text-end"; id: string } + // Reasoning (Extended Thinking) + | { type: "reasoning"; id: string; text: string } + | { type: "reasoning-delta"; id: string; delta: string } + // Tool calls + | { type: "tool-input-start"; toolCallId: string; toolName: string } + | { type: "tool-input-delta"; toolCallId: string; inputTextDelta: string } + | { + type: "tool-input-available" + toolCallId: string + toolName: string + input: unknown + } + | { type: "tool-output-available"; toolCallId: string; output: unknown } + | { type: "tool-output-error"; toolCallId: string; errorText: string } + // Error & metadata + | { type: "error"; errorText: string } + | { type: "auth-error"; errorText: string } + | { + type: "ask-user-question" + toolUseId: string + questions: Array<{ + question: string + header: string + options: Array<{ label: string; description: string }> + multiSelect: boolean + }> + } + | { type: "message-metadata"; messageMetadata: MessageMetadata } + // System tools (rendered like regular tools) + | { + type: "system-Compact" + toolCallId: string + state: "input-streaming" | "output-available" + } + +export type MessageMetadata = { + sessionId?: string + sdkMessageUuid?: string // SDK's message UUID for resumeSessionAt (rollback support) + inputTokens?: number + outputTokens?: number + totalTokens?: number + totalCostUsd?: number + durationMs?: number + resultSubtype?: string + finalTextId?: string +} diff --git a/src/main/lib/config.ts b/src/main/lib/config.ts new file mode 100644 index 00000000..987b697c --- /dev/null +++ b/src/main/lib/config.ts @@ -0,0 +1,25 @@ +/** + * Shared configuration for the desktop app + */ + +// API URLs +const API_URLS = { + production: "https://21st.dev", + development: "http://localhost:3000", +} as const + +const IS_DEV = !!process.env.ELECTRON_RENDERER_URL + +/** + * Get the API base URL based on environment + */ +export function getApiUrl(): string { + return IS_DEV ? API_URLS.development : API_URLS.production +} + +/** + * Check if running in development mode + */ +export function isDev(): boolean { + return IS_DEV +} diff --git a/src/main/lib/db/index.ts b/src/main/lib/db/index.ts new file mode 100644 index 00000000..d76e964a --- /dev/null +++ b/src/main/lib/db/index.ts @@ -0,0 +1,97 @@ +import Database from "better-sqlite3" +import { drizzle } from "drizzle-orm/better-sqlite3" +import { migrate } from "drizzle-orm/better-sqlite3/migrator" +import { app } from "electron" +import { join } from "path" +import { existsSync, mkdirSync } from "fs" +import * as schema from "./schema" + +let db: ReturnType> | null = null +let sqlite: Database.Database | null = null + +/** + * Get the database path in the app's user data directory + */ +function getDatabasePath(): string { + const userDataPath = app.getPath("userData") + const dataDir = join(userDataPath, "data") + + // Ensure data directory exists + if (!existsSync(dataDir)) { + mkdirSync(dataDir, { recursive: true }) + } + + return join(dataDir, "agents.db") +} + +/** + * Get the migrations folder path + * Handles both development and production (packaged) environments + */ +function getMigrationsPath(): string { + if (app.isPackaged) { + // Production: migrations bundled in resources + return join(process.resourcesPath, "migrations") + } + // Development: from out/main -> apps/desktop/drizzle + return join(__dirname, "../../drizzle") +} + +/** + * Initialize the database with Drizzle ORM + */ +export function initDatabase() { + if (db) { + return db + } + + const dbPath = getDatabasePath() + console.log(`[DB] Initializing database at: ${dbPath}`) + + // Create SQLite connection + sqlite = new Database(dbPath) + sqlite.pragma("journal_mode = WAL") + sqlite.pragma("foreign_keys = ON") + + // Create Drizzle instance + db = drizzle(sqlite, { schema }) + + // Run migrations + const migrationsPath = getMigrationsPath() + console.log(`[DB] Running migrations from: ${migrationsPath}`) + + try { + migrate(db, { migrationsFolder: migrationsPath }) + console.log("[DB] Migrations completed") + } catch (error) { + console.error("[DB] Migration error:", error) + throw error + } + + return db +} + +/** + * Get the database instance + */ +export function getDatabase() { + if (!db) { + return initDatabase() + } + return db +} + +/** + * Close the database connection + */ +export function closeDatabase(): void { + if (sqlite) { + sqlite.close() + sqlite = null + db = null + console.log("[DB] Database connection closed") + } +} + +// Re-export schema for convenience +export * from "./schema" diff --git a/src/main/lib/db/schema/index.ts b/src/main/lib/db/schema/index.ts new file mode 100644 index 00000000..5643794e --- /dev/null +++ b/src/main/lib/db/schema/index.ts @@ -0,0 +1,109 @@ +import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core" +import { relations } from "drizzle-orm" +import { createId } from "../utils" + +// ============ PROJECTS ============ +export const projects = sqliteTable("projects", { + id: text("id") + .primaryKey() + .$defaultFn(() => createId()), + name: text("name").notNull(), + path: text("path").notNull().unique(), + createdAt: integer("created_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), + // Git remote info (extracted from local .git) + gitRemoteUrl: text("git_remote_url"), + gitProvider: text("git_provider"), // "github" | "gitlab" | "bitbucket" | null + gitOwner: text("git_owner"), + gitRepo: text("git_repo"), +}) + +export const projectsRelations = relations(projects, ({ many }) => ({ + chats: many(chats), +})) + +// ============ CHATS ============ +export const chats = sqliteTable("chats", { + id: text("id") + .primaryKey() + .$defaultFn(() => createId()), + name: text("name"), + projectId: text("project_id") + .notNull() + .references(() => projects.id, { onDelete: "cascade" }), + createdAt: integer("created_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), + archivedAt: integer("archived_at", { mode: "timestamp" }), + // Worktree fields (for git isolation per chat) + worktreePath: text("worktree_path"), + branch: text("branch"), + baseBranch: text("base_branch"), + // PR tracking fields + prUrl: text("pr_url"), + prNumber: integer("pr_number"), +}) + +export const chatsRelations = relations(chats, ({ one, many }) => ({ + project: one(projects, { + fields: [chats.projectId], + references: [projects.id], + }), + subChats: many(subChats), +})) + +// ============ SUB-CHATS ============ +export const subChats = sqliteTable("sub_chats", { + id: text("id") + .primaryKey() + .$defaultFn(() => createId()), + name: text("name"), + chatId: text("chat_id") + .notNull() + .references(() => chats.id, { onDelete: "cascade" }), + sessionId: text("session_id"), // Claude SDK session ID for resume + streamId: text("stream_id"), // Track in-progress streams + mode: text("mode").notNull().default("agent"), // "plan" | "agent" + messages: text("messages").notNull().default("[]"), // JSON array + createdAt: integer("created_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), + updatedAt: integer("updated_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), +}) + +export const subChatsRelations = relations(subChats, ({ one }) => ({ + chat: one(chats, { + fields: [subChats.chatId], + references: [chats.id], + }), +})) + +// ============ CLAUDE CODE CREDENTIALS ============ +// Stores encrypted OAuth token for Claude Code integration +export const claudeCodeCredentials = sqliteTable("claude_code_credentials", { + id: text("id").primaryKey().default("default"), // Single row, always "default" + oauthToken: text("oauth_token").notNull(), // Encrypted with safeStorage + connectedAt: integer("connected_at", { mode: "timestamp" }).$defaultFn( + () => new Date(), + ), + userId: text("user_id"), // Desktop auth user ID (for reference) +}) + +// ============ TYPE EXPORTS ============ +export type Project = typeof projects.$inferSelect +export type NewProject = typeof projects.$inferInsert +export type Chat = typeof chats.$inferSelect +export type NewChat = typeof chats.$inferInsert +export type SubChat = typeof subChats.$inferSelect +export type NewSubChat = typeof subChats.$inferInsert +export type ClaudeCodeCredential = typeof claudeCodeCredentials.$inferSelect +export type NewClaudeCodeCredential = typeof claudeCodeCredentials.$inferInsert diff --git a/src/main/lib/db/utils.ts b/src/main/lib/db/utils.ts new file mode 100644 index 00000000..3e29ca0b --- /dev/null +++ b/src/main/lib/db/utils.ts @@ -0,0 +1,8 @@ +/** + * Generate a unique ID (cuid-like) + */ +export function createId(): string { + const timestamp = Date.now().toString(36) + const randomPart = Math.random().toString(36).substring(2, 10) + return `${timestamp}${randomPart}` +} diff --git a/src/main/lib/git/branches.ts b/src/main/lib/git/branches.ts new file mode 100644 index 00000000..42403ce8 --- /dev/null +++ b/src/main/lib/git/branches.ts @@ -0,0 +1,186 @@ +import { eq } from "drizzle-orm"; +import { getDatabase, chats } from "../db"; +import simpleGit from "simple-git"; +import { z } from "zod"; +import { publicProcedure, router } from "../trpc"; +import { + assertRegisteredWorktree, + getRegisteredChat, + gitSwitchBranch, +} from "./security"; + +export const createBranchesRouter = () => { + return router({ + getBranches: publicProcedure + .input(z.object({ worktreePath: z.string() })) + .query( + async ({ + input, + }): Promise<{ + local: Array<{ branch: string; lastCommitDate: number }>; + remote: string[]; + defaultBranch: string; + checkedOutBranches: Record; + }> => { + assertRegisteredWorktree(input.worktreePath); + const git = simpleGit(input.worktreePath); + const branchSummary = await git.branch(["-a"]); + + const localBranches: string[] = []; + const remote: string[] = []; + + for (const name of Object.keys(branchSummary.branches)) { + if (name.startsWith("remotes/origin/")) { + if (name === "remotes/origin/HEAD") continue; + const remoteName = name.replace("remotes/origin/", ""); + remote.push(remoteName); + } else { + localBranches.push(name); + } + } + + const local = await getLocalBranchesWithDates(git, localBranches); + const defaultBranch = await getDefaultBranch(git, remote); + const checkedOutBranches = await getCheckedOutBranches( + git, + input.worktreePath, + ); + + return { + local, + remote: remote.sort(), + defaultBranch, + checkedOutBranches, + }; + }, + ), + + switchBranch: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + branch: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + const chat = getRegisteredChat(input.worktreePath); + await gitSwitchBranch(input.worktreePath, input.branch); + + // Update the branch in the chat record + const db = getDatabase(); + db.update(chats) + .set({ branch: input.branch }) + .where(eq(chats.worktreePath, input.worktreePath)) + .run(); + + return { success: true }; + }), + + createBranch: publicProcedure + .input( + z.object({ + projectPath: z.string(), + branchName: z.string(), + baseBranch: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean; branchName: string }> => { + assertRegisteredWorktree(input.projectPath); + const git = simpleGit(input.projectPath); + + // Check if branch already exists + const branchSummary = await git.branch(["-a"]); + const allBranches = Object.keys(branchSummary.branches); + + if (allBranches.includes(input.branchName)) { + throw new Error(`Branch '${input.branchName}' already exists`); + } + + // Determine the start point (prefer remote, fallback to local) + let startPoint = input.baseBranch; + if (allBranches.includes(`remotes/origin/${input.baseBranch}`)) { + startPoint = `origin/${input.baseBranch}`; + } + + // Create the new branch (without switching to it) + await git.branch([input.branchName, startPoint]); + + return { success: true, branchName: input.branchName }; + }), + }); +}; + +async function getLocalBranchesWithDates( + git: ReturnType, + localBranches: string[], +): Promise> { + try { + const branchInfo = await git.raw([ + "for-each-ref", + "--sort=-committerdate", + "--format=%(refname:short) %(committerdate:unix)", + "refs/heads/", + ]); + + const local: Array<{ branch: string; lastCommitDate: number }> = []; + for (const line of branchInfo.trim().split("\n")) { + if (!line) continue; + const lastSpaceIdx = line.lastIndexOf(" "); + const branch = line.substring(0, lastSpaceIdx); + const timestamp = Number.parseInt(line.substring(lastSpaceIdx + 1), 10); + if (localBranches.includes(branch)) { + local.push({ + branch, + lastCommitDate: timestamp * 1000, + }); + } + } + return local; + } catch { + return localBranches.map((branch) => ({ branch, lastCommitDate: 0 })); + } +} + +async function getDefaultBranch( + git: ReturnType, + remoteBranches: string[], +): Promise { + try { + const headRef = await git.raw(["symbolic-ref", "refs/remotes/origin/HEAD"]); + const match = headRef.match(/refs\/remotes\/origin\/(.+)/); + if (match) { + return match[1].trim(); + } + } catch { + if (remoteBranches.includes("master") && !remoteBranches.includes("main")) { + return "master"; + } + } + return "main"; +} + +async function getCheckedOutBranches( + git: ReturnType, + currentWorktreePath: string, +): Promise> { + const checkedOutBranches: Record = {}; + + try { + const worktreeList = await git.raw(["worktree", "list", "--porcelain"]); + const lines = worktreeList.split("\n"); + let currentPath: string | null = null; + + for (const line of lines) { + if (line.startsWith("worktree ")) { + currentPath = line.substring(9).trim(); + } else if (line.startsWith("branch ")) { + const branch = line.substring(7).trim().replace("refs/heads/", ""); + if (currentPath && currentPath !== currentWorktreePath) { + checkedOutBranches[branch] = currentPath; + } + } + } + } catch {} + + return checkedOutBranches; +} diff --git a/src/main/lib/git/file-contents.ts b/src/main/lib/git/file-contents.ts new file mode 100644 index 00000000..42b0709c --- /dev/null +++ b/src/main/lib/git/file-contents.ts @@ -0,0 +1,328 @@ +import type { FileContents } from "../../../shared/changes-types"; +import { detectLanguage } from "../../../shared/detect-language"; +import simpleGit from "simple-git"; +import { z } from "zod"; +import { publicProcedure, router } from "../trpc"; +import { + assertRegisteredWorktree, + PathValidationError, + secureFs, +} from "./security"; + +/** Maximum file size for reading (2 MiB) */ +const MAX_FILE_SIZE = 2 * 1024 * 1024; + +/** Bytes to scan for binary detection */ +const BINARY_CHECK_SIZE = 8192; + +/** + * Result type for readWorkingFile procedure + */ +type ReadWorkingFileResult = + | { ok: true; content: string; truncated: boolean; byteLength: number } + | { + ok: false; + reason: + | "not-found" + | "too-large" + | "binary" + | "outside-worktree" + | "symlink-escape"; + }; + +/** + * Detects if a buffer contains binary content by checking for NUL bytes + */ +function isBinaryContent(buffer: Buffer): boolean { + const checkLength = Math.min(buffer.length, BINARY_CHECK_SIZE); + for (let i = 0; i < checkLength; i++) { + if (buffer[i] === 0) { + return true; + } + } + return false; +} + +export const createFileContentsRouter = () => { + return router({ + getFileContents: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + oldPath: z.string().optional(), + category: z.enum(["against-base", "committed", "staged", "unstaged"]), + commitHash: z.string().optional(), + defaultBranch: z.string().optional(), + }), + ) + .query(async ({ input }): Promise => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + const defaultBranch = input.defaultBranch || "main"; + const originalPath = input.oldPath || input.filePath; + + const { original, modified } = await getFileVersions( + git, + input.worktreePath, + input.filePath, + originalPath, + input.category, + defaultBranch, + input.commitHash, + ); + + return { + original, + modified, + language: detectLanguage(input.filePath), + }; + }), + + saveFile: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + content: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await secureFs.writeFile( + input.worktreePath, + input.filePath, + input.content, + ); + return { success: true }; + }), + + /** + * Read a working tree file safely with size cap and binary detection. + * Used for File Viewer raw/rendered modes. + */ + readWorkingFile: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + }), + ) + .query(async ({ input }): Promise => { + try { + const stats = await secureFs.stat(input.worktreePath, input.filePath); + if (stats.size > MAX_FILE_SIZE) { + return { ok: false, reason: "too-large" }; + } + + const buffer = await secureFs.readFileBuffer( + input.worktreePath, + input.filePath, + ); + + if (isBinaryContent(buffer)) { + return { ok: false, reason: "binary" }; + } + + return { + ok: true, + content: buffer.toString("utf-8"), + truncated: false, + byteLength: buffer.length, + }; + } catch (error) { + if (error instanceof PathValidationError) { + if (error.code === "SYMLINK_ESCAPE") { + return { ok: false, reason: "symlink-escape" }; + } + return { ok: false, reason: "outside-worktree" }; + } + return { ok: false, reason: "not-found" }; + } + }), + + /** + * Read multiple working tree files in a single IPC call. + * Used for batch prefetching file contents for diff view. + */ + readMultipleWorkingFiles: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + files: z.array( + z.object({ + key: z.string(), + filePath: z.string(), + }), + ), + }), + ) + .query( + async ({ + input, + }): Promise> => { + const results: Record = {}; + + // Read all files in parallel within the same IPC call + await Promise.all( + input.files.map(async ({ key, filePath }) => { + try { + const stats = await secureFs.stat(input.worktreePath, filePath); + if (stats.size > MAX_FILE_SIZE) { + results[key] = { ok: false }; + return; + } + + const buffer = await secureFs.readFileBuffer( + input.worktreePath, + filePath, + ); + + if (isBinaryContent(buffer)) { + results[key] = { ok: false }; + return; + } + + results[key] = { + ok: true, + content: buffer.toString("utf-8"), + }; + } catch { + results[key] = { ok: false }; + } + }), + ); + + return results; + }, + ), + }); +}; + +type DiffCategory = "against-base" | "committed" | "staged" | "unstaged"; + +interface FileVersions { + original: string; + modified: string; +} + +async function getFileVersions( + git: ReturnType, + worktreePath: string, + filePath: string, + originalPath: string, + category: DiffCategory, + defaultBranch: string, + commitHash?: string, +): Promise { + switch (category) { + case "against-base": + return getAgainstBaseVersions(git, filePath, originalPath, defaultBranch); + + case "committed": + if (!commitHash) { + throw new Error("commitHash required for committed category"); + } + return getCommittedVersions(git, filePath, originalPath, commitHash); + + case "staged": + return getStagedVersions(git, filePath, originalPath); + + case "unstaged": + return getUnstagedVersions(git, worktreePath, filePath, originalPath); + } +} + +/** Helper to safely get git show content with size limit and memory protection */ +async function safeGitShow( + git: ReturnType, + spec: string, +): Promise { + try { + // Preflight: check blob size before loading into memory + // This prevents memory spikes from large files in git history + try { + const sizeOutput = await git.raw(["cat-file", "-s", spec]); + const blobSize = Number.parseInt(sizeOutput.trim(), 10); + if (!Number.isNaN(blobSize) && blobSize > MAX_FILE_SIZE) { + return `[File content truncated - exceeds ${MAX_FILE_SIZE / 1024 / 1024}MB limit]`; + } + } catch { + // cat-file failed (blob doesn't exist) - let git.show handle the error + } + + const content = await git.show([spec]); + return content; + } catch { + return ""; + } +} + +async function getAgainstBaseVersions( + git: ReturnType, + filePath: string, + originalPath: string, + defaultBranch: string, +): Promise { + const [original, modified] = await Promise.all([ + safeGitShow(git, `origin/${defaultBranch}:${originalPath}`), + safeGitShow(git, `HEAD:${filePath}`), + ]); + + return { original, modified }; +} + +async function getCommittedVersions( + git: ReturnType, + filePath: string, + originalPath: string, + commitHash: string, +): Promise { + const [original, modified] = await Promise.all([ + safeGitShow(git, `${commitHash}^:${originalPath}`), + safeGitShow(git, `${commitHash}:${filePath}`), + ]); + + return { original, modified }; +} + +async function getStagedVersions( + git: ReturnType, + filePath: string, + originalPath: string, +): Promise { + const [original, modified] = await Promise.all([ + safeGitShow(git, `HEAD:${originalPath}`), + safeGitShow(git, `:0:${filePath}`), + ]); + + return { original, modified }; +} + +async function getUnstagedVersions( + git: ReturnType, + worktreePath: string, + filePath: string, + originalPath: string, +): Promise { + // Try staged version first, fall back to HEAD + let original = await safeGitShow(git, `:0:${originalPath}`); + if (!original) { + original = await safeGitShow(git, `HEAD:${originalPath}`); + } + + let modified = ""; + try { + const stats = await secureFs.stat(worktreePath, filePath); + if (stats.size <= MAX_FILE_SIZE) { + modified = await secureFs.readFile(worktreePath, filePath); + } else { + modified = `[File content truncated - exceeds ${MAX_FILE_SIZE / 1024 / 1024}MB limit]`; + } + } catch { + // File doesn't exist or validation failed - that's ok for diff display + modified = ""; + } + + return { original, modified }; +} diff --git a/src/main/lib/git/git-operations.ts b/src/main/lib/git/git-operations.ts new file mode 100644 index 00000000..463bd725 --- /dev/null +++ b/src/main/lib/git/git-operations.ts @@ -0,0 +1,173 @@ +import { shell } from "electron"; +import simpleGit from "simple-git"; +import { z } from "zod"; +import { publicProcedure, router } from "../trpc"; +import { isUpstreamMissingError } from "./git-utils"; +import { assertRegisteredWorktree } from "./security"; +import { fetchGitHubPRStatus } from "./github"; + +export { isUpstreamMissingError }; + +async function hasUpstreamBranch( + git: ReturnType, +): Promise { + try { + await git.raw(["rev-parse", "--abbrev-ref", "@{upstream}"]); + return true; + } catch { + return false; + } +} + +export const createGitOperationsRouter = () => { + return router({ + // NOTE: saveFile is defined in file-contents.ts with hardened path validation + // Do NOT add saveFile here - it would overwrite the secure version + + commit: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + message: z.string(), + }), + ) + .mutation( + async ({ input }): Promise<{ success: boolean; hash: string }> => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + const result = await git.commit(input.message); + return { success: true, hash: result.commit }; + }, + ), + + push: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + setUpstream: z.boolean().optional(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + const hasUpstream = await hasUpstreamBranch(git); + + if (input.setUpstream && !hasUpstream) { + const branch = await git.revparse(["--abbrev-ref", "HEAD"]); + await git.push(["--set-upstream", "origin", branch.trim()]); + } else { + await git.push(); + } + await git.fetch(); + return { success: true }; + }), + + pull: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + try { + await git.pull(["--rebase"]); + } catch (error) { + const message = + error instanceof Error ? error.message : String(error); + if (isUpstreamMissingError(message)) { + throw new Error( + "No upstream branch to pull from. The remote branch may have been deleted.", + ); + } + throw error; + } + return { success: true }; + }), + + sync: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + try { + await git.pull(["--rebase"]); + } catch (error) { + const message = + error instanceof Error ? error.message : String(error); + if (isUpstreamMissingError(message)) { + const branch = await git.revparse(["--abbrev-ref", "HEAD"]); + await git.push(["--set-upstream", "origin", branch.trim()]); + await git.fetch(); + return { success: true }; + } + throw error; + } + await git.push(); + await git.fetch(); + return { success: true }; + }), + + createPR: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + }), + ) + .mutation( + async ({ input }): Promise<{ success: boolean; url: string }> => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + const branch = (await git.revparse(["--abbrev-ref", "HEAD"])).trim(); + const hasUpstream = await hasUpstreamBranch(git); + + // Ensure branch is pushed first + if (!hasUpstream) { + await git.push(["--set-upstream", "origin", branch]); + } else { + // Push any unpushed commits + await git.push(); + } + + // Get the remote URL to construct the GitHub compare URL + const remoteUrl = (await git.remote(["get-url", "origin"])) || ""; + const repoMatch = remoteUrl + .trim() + .match(/github\.com[:/](.+?)(?:\.git)?$/); + + if (!repoMatch) { + throw new Error("Could not determine GitHub repository URL"); + } + + const repo = repoMatch[1].replace(/\.git$/, ""); + const url = `https://github.com/${repo}/compare/${branch}?expand=1`; + + await shell.openExternal(url); + await git.fetch(); + + return { success: true, url }; + }, + ), + + getGitHubStatus: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + }), + ) + .query(async ({ input }) => { + assertRegisteredWorktree(input.worktreePath); + return await fetchGitHubPRStatus(input.worktreePath); + }), + }); +}; diff --git a/src/main/lib/git/git-utils.ts b/src/main/lib/git/git-utils.ts new file mode 100644 index 00000000..701c2e62 --- /dev/null +++ b/src/main/lib/git/git-utils.ts @@ -0,0 +1,10 @@ +/** + * Check if the error message indicates the upstream branch is missing/deleted + */ +export function isUpstreamMissingError(message: string): boolean { + return ( + message.includes("no such ref was fetched") || + message.includes("no tracking information") || + message.includes("couldn't find remote ref") + ); +} diff --git a/src/main/lib/git/github/github.ts b/src/main/lib/git/github/github.ts new file mode 100644 index 00000000..f698fdf2 --- /dev/null +++ b/src/main/lib/git/github/github.ts @@ -0,0 +1,229 @@ +import { execFile } from "node:child_process"; +import { promisify } from "node:util"; +import { branchExistsOnRemote } from "../worktree"; +import { execWithShellEnv } from "../shell-env"; +import { + type CheckItem, + type GHPRResponse, + type GitHubStatus, + GHPRResponseSchema, + GHRepoResponseSchema, +} from "./types"; + +const execFileAsync = promisify(execFile); + +// Cache for GitHub status (10 second TTL) +const cache = new Map(); +const CACHE_TTL_MS = 10_000; + +/** + * Fetches GitHub PR status for a worktree using the `gh` CLI. + * Returns null if `gh` is not installed, not authenticated, or on error. + * Results are cached for 10 seconds. + */ +export async function fetchGitHubPRStatus( + worktreePath: string, +): Promise { + // Check cache first + const cached = cache.get(worktreePath); + if (cached && Date.now() - cached.timestamp < CACHE_TTL_MS) { + return cached.data; + } + + try { + // First, get the repo URL + const repoUrl = await getRepoUrl(worktreePath); + if (!repoUrl) { + return null; + } + + // Get current branch name + const { stdout: branchOutput } = await execFileAsync( + "git", + ["rev-parse", "--abbrev-ref", "HEAD"], + { cwd: worktreePath }, + ); + const branchName = branchOutput.trim(); + + // Check if branch exists on remote and get PR info in parallel + const [branchCheck, prInfo] = await Promise.all([ + branchExistsOnRemote(worktreePath, branchName), + getPRForBranch(worktreePath, branchName), + ]); + + // Convert result to boolean - only "exists" is true + // "not_found" and "error" both mean we can't confirm it exists + const existsOnRemote = branchCheck.status === "exists"; + + const result: GitHubStatus = { + pr: prInfo, + repoUrl, + branchExistsOnRemote: existsOnRemote, + lastRefreshed: Date.now(), + }; + + // Cache the result + cache.set(worktreePath, { data: result, timestamp: Date.now() }); + + return result; + } catch { + // Any error (gh not installed, not auth'd, etc.) - return null + return null; + } +} + +async function getRepoUrl(worktreePath: string): Promise { + try { + const { stdout } = await execWithShellEnv( + "gh", + ["repo", "view", "--json", "url"], + { cwd: worktreePath }, + ); + const raw = JSON.parse(stdout); + const result = GHRepoResponseSchema.safeParse(raw); + if (!result.success) { + console.error("[GitHub] Repo schema validation failed:", result.error); + console.error("[GitHub] Raw data:", JSON.stringify(raw, null, 2)); + return null; + } + return result.data.url; + } catch { + return null; + } +} + +async function getPRForBranch( + worktreePath: string, + branch: string, +): Promise { + try { + // Use execWithShellEnv to handle macOS GUI app PATH issues + const { stdout } = await execWithShellEnv( + "gh", + [ + "pr", + "view", + branch, + "--json", + "number,title,url,state,isDraft,mergedAt,additions,deletions,reviewDecision,statusCheckRollup", + ], + { cwd: worktreePath }, + ); + const raw = JSON.parse(stdout); + const result = GHPRResponseSchema.safeParse(raw); + if (!result.success) { + console.error("[GitHub] PR schema validation failed:", result.error); + console.error("[GitHub] Raw data:", JSON.stringify(raw, null, 2)); + throw new Error("PR schema validation failed"); + } + const data = result.data; + + const checks = parseChecks(data.statusCheckRollup); + + return { + number: data.number, + title: data.title, + url: data.url, + state: mapPRState(data.state, data.isDraft), + mergedAt: data.mergedAt ? new Date(data.mergedAt).getTime() : undefined, + additions: data.additions, + deletions: data.deletions, + reviewDecision: mapReviewDecision(data.reviewDecision), + checksStatus: computeChecksStatus(data.statusCheckRollup), + checks, + }; + } catch (error) { + // "no pull requests found" is not an error - just no PR + if ( + error instanceof Error && + error.message.includes("no pull requests found") + ) { + return null; + } + // Re-throw other errors to be caught by parent + throw error; + } +} + +function mapPRState( + state: GHPRResponse["state"], + isDraft: boolean, +): NonNullable["state"] { + if (state === "MERGED") return "merged"; + if (state === "CLOSED") return "closed"; + if (isDraft) return "draft"; + return "open"; +} + +function mapReviewDecision( + decision: GHPRResponse["reviewDecision"], +): NonNullable["reviewDecision"] { + if (decision === "APPROVED") return "approved"; + if (decision === "CHANGES_REQUESTED") return "changes_requested"; + return "pending"; +} + +function parseChecks(rollup: GHPRResponse["statusCheckRollup"]): CheckItem[] { + if (!rollup || rollup.length === 0) { + return []; + } + + return rollup.map((ctx) => { + // CheckRun uses 'name', StatusContext uses 'context' + const name = ctx.name || ctx.context || "Unknown check"; + // CheckRun uses 'detailsUrl', StatusContext uses 'targetUrl' + const url = ctx.detailsUrl || ctx.targetUrl; + // StatusContext uses 'state', CheckRun uses 'conclusion' + const rawStatus = ctx.state || ctx.conclusion; + + let status: CheckItem["status"]; + if (rawStatus === "SUCCESS") { + status = "success"; + } else if ( + rawStatus === "FAILURE" || + rawStatus === "ERROR" || + rawStatus === "TIMED_OUT" + ) { + status = "failure"; + } else if (rawStatus === "SKIPPED" || rawStatus === "NEUTRAL") { + status = "skipped"; + } else if (rawStatus === "CANCELLED") { + status = "cancelled"; + } else { + status = "pending"; + } + + return { name, status, url }; + }); +} + +function computeChecksStatus( + rollup: GHPRResponse["statusCheckRollup"], +): NonNullable["checksStatus"] { + if (!rollup || rollup.length === 0) { + return "none"; + } + + let hasFailure = false; + let hasPending = false; + + for (const ctx of rollup) { + // StatusContext uses 'state', CheckRun uses 'conclusion' + const status = ctx.state || ctx.conclusion; + + if (status === "FAILURE" || status === "ERROR" || status === "TIMED_OUT") { + hasFailure = true; + } else if ( + status === "PENDING" || + status === "" || + status === null || + status === undefined + ) { + hasPending = true; + } + } + + if (hasFailure) return "failure"; + if (hasPending) return "pending"; + return "success"; +} diff --git a/src/main/lib/git/github/index.ts b/src/main/lib/git/github/index.ts new file mode 100644 index 00000000..88e64d6f --- /dev/null +++ b/src/main/lib/git/github/index.ts @@ -0,0 +1,2 @@ +export { fetchGitHubPRStatus } from "./github"; +export type { CheckItem, GitHubStatus } from "./types"; diff --git a/src/main/lib/git/github/types.ts b/src/main/lib/git/github/types.ts new file mode 100644 index 00000000..ab659fda --- /dev/null +++ b/src/main/lib/git/github/types.ts @@ -0,0 +1,74 @@ +import { z } from "zod"; + +// Zod schemas for gh CLI output validation +export const GHCheckContextSchema = z.object({ + name: z.string().optional(), + context: z.string().optional(), // StatusContext uses 'context' instead of 'name' + state: z.enum(["SUCCESS", "FAILURE", "PENDING", "ERROR"]).optional(), + status: z.string().optional(), // CheckRun status: COMPLETED, IN_PROGRESS, etc. + conclusion: z + .enum([ + "SUCCESS", + "FAILURE", + "CANCELLED", + "SKIPPED", + "TIMED_OUT", + "ACTION_REQUIRED", + "NEUTRAL", + "", // Can be empty string when in progress + ]) + .optional(), + detailsUrl: z.string().optional(), + targetUrl: z.string().optional(), // StatusContext uses 'targetUrl' instead of 'detailsUrl' + startedAt: z.string().optional(), + completedAt: z.string().optional(), + workflowName: z.string().optional(), +}); + +export const GHPRResponseSchema = z.object({ + number: z.number(), + title: z.string(), + url: z.string(), + state: z.enum(["OPEN", "CLOSED", "MERGED"]), + isDraft: z.boolean(), + mergedAt: z.string().nullable(), + additions: z.number(), + deletions: z.number(), + reviewDecision: z + .enum(["APPROVED", "CHANGES_REQUESTED", "REVIEW_REQUIRED", ""]) + .nullable(), + // statusCheckRollup is an array directly, not { contexts: [...] } + statusCheckRollup: z.array(GHCheckContextSchema).nullable(), +}); + +export const GHRepoResponseSchema = z.object({ + url: z.string(), +}); + +export type GHPRResponse = z.infer; + +/** Single CI/CD check item */ +export interface CheckItem { + name: string; + status: "success" | "failure" | "pending" | "skipped" | "cancelled"; + url?: string; +} + +/** GitHub PR and branch status */ +export interface GitHubStatus { + pr: { + number: number; + title: string; + url: string; + state: "open" | "draft" | "merged" | "closed"; + mergedAt?: number; + additions: number; + deletions: number; + reviewDecision: "approved" | "changes_requested" | "pending"; + checksStatus: "success" | "failure" | "pending" | "none"; + checks: CheckItem[]; + } | null; + repoUrl: string; + branchExistsOnRemote: boolean; + lastRefreshed: number; +} diff --git a/src/main/lib/git/index.ts b/src/main/lib/git/index.ts new file mode 100644 index 00000000..849131de --- /dev/null +++ b/src/main/lib/git/index.ts @@ -0,0 +1,165 @@ +/** + * Git module - combines all git-related routers + * Flattened structure to match Superset API (changes.getStatus, changes.stageFile, etc.) + */ +import { exec } from "node:child_process"; +import { promisify } from "node:util"; +import { router } from "../trpc"; +import { createBranchesRouter } from "./branches"; +import { createFileContentsRouter } from "./file-contents"; +import { createGitOperationsRouter } from "./git-operations"; +import { createStagingRouter } from "./staging"; +import { createStatusRouter } from "./status"; + +const execAsync = promisify(exec); + +// Re-export worktree utilities +export * from "./worktree"; + +// Re-export GitHub utilities +export * from "./github"; + +// Re-export types +export type { GitChangesStatus, ChangedFile, CommitInfo, FileContents } from "../../../shared/changes-types"; + +/** + * Combined git router with flattened procedures + * This matches Superset's changes router API structure + */ +export const createGitRouter = () => { + return router({ + // Merge all sub-router procedures at top level + ...createStatusRouter()._def.procedures, + ...createStagingRouter()._def.procedures, + ...createGitOperationsRouter()._def.procedures, + ...createBranchesRouter()._def.procedures, + ...createFileContentsRouter()._def.procedures, + }); +}; + +// ============ GIT REMOTE INFO ============ + +export type GitProvider = "github" | "gitlab" | "bitbucket" | null; + +export interface GitRemoteInfo { + remoteUrl: string | null; + provider: GitProvider; + owner: string | null; + repo: string | null; +} + +/** + * Check if a path is a git repository + */ +async function isGitRepo(path: string): Promise { + try { + await execAsync("git rev-parse --git-dir", { cwd: path }); + return true; + } catch { + return false; + } +} + +/** + * Parse a git remote URL to extract provider, owner, and repo + * Handles both formats: + * - https://github.com/owner/repo.git + * - git@github.com:owner/repo.git + */ +function parseGitRemoteUrl(url: string): Omit { + // Normalize the URL + let normalized = url.trim(); + + // Remove .git suffix + if (normalized.endsWith(".git")) { + normalized = normalized.slice(0, -4); + } + + // Try to extract provider, owner, repo + let provider: GitProvider = null; + let owner: string | null = null; + let repo: string | null = null; + + // Match HTTPS format: https://github.com/owner/repo + const httpsMatch = normalized.match( + /https?:\/\/(github\.com|gitlab\.com|bitbucket\.org)\/([^/]+)\/([^/]+)/, + ); + if (httpsMatch) { + const [, host, ownerPart, repoPart] = httpsMatch; + provider = + host === "github.com" + ? "github" + : host === "gitlab.com" + ? "gitlab" + : host === "bitbucket.org" + ? "bitbucket" + : null; + owner = ownerPart || null; + repo = repoPart || null; + return { provider, owner, repo }; + } + + // Match SSH format: git@github.com:owner/repo + const sshMatch = normalized.match( + /git@(github\.com|gitlab\.com|bitbucket\.org):([^/]+)\/(.+)/, + ); + if (sshMatch) { + const [, host, ownerPart, repoPart] = sshMatch; + provider = + host === "github.com" + ? "github" + : host === "gitlab.com" + ? "gitlab" + : host === "bitbucket.org" + ? "bitbucket" + : null; + owner = ownerPart || null; + repo = repoPart || null; + return { provider, owner, repo }; + } + + return { provider: null, owner: null, repo: null }; +} + +/** + * Get git remote info for a project path + * Extracts remote URL, provider (github/gitlab/bitbucket), owner, and repo name + */ +export async function getGitRemoteInfo( + projectPath: string, +): Promise { + const emptyResult: GitRemoteInfo = { + remoteUrl: null, + provider: null, + owner: null, + repo: null, + }; + + // Check if it's a git repo + const isRepo = await isGitRepo(projectPath); + if (!isRepo) { + return emptyResult; + } + + try { + // Get the remote URL for origin + const { stdout } = await execAsync("git remote get-url origin", { + cwd: projectPath, + }); + + const remoteUrl = stdout.trim(); + if (!remoteUrl) { + return emptyResult; + } + + const parsed = parseGitRemoteUrl(remoteUrl); + + return { + remoteUrl, + ...parsed, + }; + } catch { + // No remote configured or other error + return emptyResult; + } +} diff --git a/src/main/lib/git/security/git-commands.ts b/src/main/lib/git/security/git-commands.ts new file mode 100644 index 00000000..2877176b --- /dev/null +++ b/src/main/lib/git/security/git-commands.ts @@ -0,0 +1,137 @@ +import simpleGit from "simple-git"; +import { + assertRegisteredWorktree, + assertValidGitPath, +} from "./path-validation"; + +/** + * Git command helpers with semantic naming. + * + * Design principle: Different functions for different git semantics. + * You can't accidentally use file checkout syntax for branch switching. + * + * Each function: + * 1. Validates worktree is registered + * 2. Validates paths/refs as appropriate + * 3. Uses the correct git command syntax + */ + +/** + * Switch to a branch. + * + * Uses `git switch` (unambiguous branch operation, git 2.23+). + * Falls back to `git checkout ` for older git versions. + * + * Note: `git checkout -- ` is WRONG - that's file checkout syntax. + */ +export async function gitSwitchBranch( + worktreePath: string, + branch: string, +): Promise { + assertRegisteredWorktree(worktreePath); + + // Validate: reject anything that looks like a flag + if (branch.startsWith("-")) { + throw new Error("Invalid branch name: cannot start with -"); + } + + // Validate: reject empty branch names + if (!branch.trim()) { + throw new Error("Invalid branch name: cannot be empty"); + } + + const git = simpleGit(worktreePath); + + try { + // Prefer `git switch` - unambiguous branch operation (git 2.23+) + await git.raw(["switch", branch]); + } catch (switchError) { + // Check if it's because `switch` command doesn't exist (old git < 2.23) + // Git outputs: "git: 'switch' is not a git command. See 'git --help'." + const errorMessage = String(switchError); + if (errorMessage.includes("is not a git command")) { + // Fallback for older git versions + // Note: checkout WITHOUT -- is correct for branches + await git.checkout(branch); + } else { + throw switchError; + } + } +} + +/** + * Checkout (restore) a file path, discarding local changes. + * + * Uses `git checkout -- ` - the `--` is REQUIRED here + * to indicate path mode (not branch mode). + */ +export async function gitCheckoutFile( + worktreePath: string, + filePath: string, +): Promise { + assertRegisteredWorktree(worktreePath); + assertValidGitPath(filePath); + + const git = simpleGit(worktreePath); + // `--` is correct here - we want path semantics + await git.checkout(["--", filePath]); +} + +/** + * Stage a file for commit. + * + * Uses `git add -- ` - the `--` prevents paths starting + * with `-` from being interpreted as flags. + */ +export async function gitStageFile( + worktreePath: string, + filePath: string, +): Promise { + assertRegisteredWorktree(worktreePath); + assertValidGitPath(filePath); + + const git = simpleGit(worktreePath); + await git.add(["--", filePath]); +} + +/** + * Stage all changes for commit. + * + * Uses `git add -A` to stage all changes (new, modified, deleted). + */ +export async function gitStageAll(worktreePath: string): Promise { + assertRegisteredWorktree(worktreePath); + + const git = simpleGit(worktreePath); + await git.add("-A"); +} + +/** + * Unstage a file (remove from staging area). + * + * Uses `git reset HEAD -- ` to unstage without + * discarding changes. + */ +export async function gitUnstageFile( + worktreePath: string, + filePath: string, +): Promise { + assertRegisteredWorktree(worktreePath); + assertValidGitPath(filePath); + + const git = simpleGit(worktreePath); + await git.reset(["HEAD", "--", filePath]); +} + +/** + * Unstage all files. + * + * Uses `git reset HEAD` to unstage all changes without + * discarding them. + */ +export async function gitUnstageAll(worktreePath: string): Promise { + assertRegisteredWorktree(worktreePath); + + const git = simpleGit(worktreePath); + await git.reset(["HEAD"]); +} diff --git a/src/main/lib/git/security/index.ts b/src/main/lib/git/security/index.ts new file mode 100644 index 00000000..9ecfa91b --- /dev/null +++ b/src/main/lib/git/security/index.ts @@ -0,0 +1,31 @@ +/** + * Security module for changes routers. + * + * Security model: + * - PRIMARY: Worktree must be registered in localDb + * - SECONDARY: Paths validated for traversal attempts + * + * See path-validation.ts header for full threat model. + */ + +export { + gitCheckoutFile, + gitStageAll, + gitStageFile, + gitSwitchBranch, + gitUnstageAll, + gitUnstageFile, +} from "./git-commands"; + +export { + assertRegisteredWorktree, + assertValidGitPath, + getRegisteredChat, + PathValidationError, + type PathValidationErrorCode, + resolvePathInWorktree, + type ValidatePathOptions, + validateRelativePath, +} from "./path-validation"; + +export { secureFs } from "./secure-fs"; diff --git a/src/main/lib/git/security/path-validation.ts b/src/main/lib/git/security/path-validation.ts new file mode 100644 index 00000000..ad243ea4 --- /dev/null +++ b/src/main/lib/git/security/path-validation.ts @@ -0,0 +1,195 @@ +import { isAbsolute, normalize, resolve, sep } from "node:path"; +import { eq } from "drizzle-orm"; +import { getDatabase, projects, chats } from "../../db"; + +/** + * Security model for desktop app filesystem access: + * + * THREAT MODEL: + * While a compromised renderer can execute commands via terminal panes, + * the File Viewer presents a distinct threat: malicious repositories can + * contain symlinks that trick users into reading/writing sensitive files + * (e.g., `docs/config.yml` → `~/.bashrc`). Users clicking these links + * don't know they're accessing files outside the repo. + * + * PRIMARY BOUNDARY: assertRegisteredWorktree() + * - Only worktree paths registered in localDb are accessible via tRPC + * - Prevents direct filesystem access to unregistered paths + * + * SECONDARY: validateRelativePath() + * - Rejects absolute paths and ".." traversal segments + * - Defense in depth against path manipulation + * + * SYMLINK PROTECTION (secure-fs.ts): + * - Writes: Block if realpath escapes worktree (prevents accidental overwrites) + * - Reads: Caller can check isSymlinkEscaping() to warn users + */ + +/** + * Security error codes for path validation failures. + */ +export type PathValidationErrorCode = + | "ABSOLUTE_PATH" + | "PATH_TRAVERSAL" + | "UNREGISTERED_WORKTREE" + | "INVALID_TARGET" + | "SYMLINK_ESCAPE"; + +/** + * Error thrown when path validation fails. + * Includes a code for programmatic handling. + */ +export class PathValidationError extends Error { + constructor( + message: string, + public readonly code: PathValidationErrorCode, + ) { + super(message); + this.name = "PathValidationError"; + } +} + +/** + * Validates that a workspace path is registered in database. + * This is THE critical security boundary. + * + * Accepts: + * - Worktree paths (from chats.worktreePath) + * - Project paths (from projects.path) + * + * @throws PathValidationError if path is not registered + */ +export function assertRegisteredWorktree(workspacePath: string): void { + const db = getDatabase(); + + // Check chats.worktreePath first (most common case) + const chatExists = db + .select() + .from(chats) + .where(eq(chats.worktreePath, workspacePath)) + .get(); + + if (chatExists) { + return; + } + + // Check projects.path for direct project access + const projectExists = db + .select() + .from(projects) + .where(eq(projects.path, workspacePath)) + .get(); + + if (projectExists) { + return; + } + + throw new PathValidationError( + "Workspace path not registered in database", + "UNREGISTERED_WORKTREE", + ); +} + +/** + * Gets the chat record if registered. Returns record for updates. + * + * @throws PathValidationError if chat is not registered + */ +export function getRegisteredChat( + worktreePath: string, +): typeof chats.$inferSelect { + const db = getDatabase(); + const chat = db + .select() + .from(chats) + .where(eq(chats.worktreePath, worktreePath)) + .get(); + + if (!chat) { + throw new PathValidationError( + "Chat not registered in database", + "UNREGISTERED_WORKTREE", + ); + } + + return chat; +} + +/** + * Options for path validation. + */ +export interface ValidatePathOptions { + /** + * Allow empty/root path (resolves to worktree itself). + * Default: false (prevents accidental worktree deletion) + */ + allowRoot?: boolean; +} + +/** + * Validates a relative file path for safety. + * Rejects absolute paths and path traversal attempts. + * + * @throws PathValidationError if path is invalid + */ +export function validateRelativePath( + filePath: string, + options: ValidatePathOptions = {}, +): void { + const { allowRoot = false } = options; + + // Reject absolute paths + if (isAbsolute(filePath)) { + throw new PathValidationError( + "Absolute paths are not allowed", + "ABSOLUTE_PATH", + ); + } + + const normalized = normalize(filePath); + const segments = normalized.split(sep); + + // Reject ".." as a path segment (allows "..foo" directories) + if (segments.includes("..")) { + throw new PathValidationError( + "Path traversal not allowed", + "PATH_TRAVERSAL", + ); + } + + // Reject root path unless explicitly allowed + if (!allowRoot && (normalized === "" || normalized === ".")) { + throw new PathValidationError( + "Cannot target worktree root", + "INVALID_TARGET", + ); + } +} + +/** + * Validates and resolves a path within a worktree. Sync, simple. + * + * @param worktreePath - The worktree base path + * @param filePath - The relative file path to validate + * @param options - Validation options + * @returns The resolved full path + * @throws PathValidationError if path is invalid + */ +export function resolvePathInWorktree( + worktreePath: string, + filePath: string, + options: ValidatePathOptions = {}, +): string { + validateRelativePath(filePath, options); + // Use resolve to handle any worktreePath (relative or absolute) + return resolve(worktreePath, normalize(filePath)); +} + +/** + * Validates a path for git commands. Lighter check that allows root. + * + * @throws PathValidationError if path is invalid + */ +export function assertValidGitPath(filePath: string): void { + validateRelativePath(filePath, { allowRoot: true }); +} diff --git a/src/main/lib/git/security/secure-fs.ts b/src/main/lib/git/security/secure-fs.ts new file mode 100644 index 00000000..9a931f0f --- /dev/null +++ b/src/main/lib/git/security/secure-fs.ts @@ -0,0 +1,469 @@ +import type { Stats } from "node:fs"; +import { + lstat, + readFile, + readlink, + realpath, + rm, + stat, + writeFile, +} from "node:fs/promises"; +import { dirname, isAbsolute, relative, resolve, sep } from "node:path"; +import { + assertRegisteredWorktree, + PathValidationError, + resolvePathInWorktree, +} from "./path-validation"; + +/** + * Secure filesystem operations with built-in validation. + * + * Each operation: + * 1. Validates worktree is registered (security boundary) + * 2. Validates path doesn't escape worktree (defense in depth) + * 3. For writes: validates target is not a symlink escaping worktree + * 4. Performs the filesystem operation + * + * See path-validation.ts for the full security model and threat assumptions. + */ + +/** + * Check if a resolved path is within the worktree boundary using path.relative(). + * This is safer than string prefix matching which can have boundary bugs. + */ +function isPathWithinWorktree( + worktreeReal: string, + targetReal: string, +): boolean { + if (targetReal === worktreeReal) { + return true; + } + const relativePath = relative(worktreeReal, targetReal); + // Check if path escapes worktree: + // - ".." means direct parent + // - "../" prefix means ancestor escape (use sep for cross-platform) + // - Absolute path means completely outside + // Note: Don't use startsWith("..") as it incorrectly catches "..config" directories + // Note: Empty relativePath ("") case is already handled by the equality check above + const escapesWorktree = + relativePath === ".." || + relativePath.startsWith(`..${sep}`) || + isAbsolute(relativePath); + + return !escapesWorktree; +} + +/** + * Validate that the parent directory chain stays within the worktree. + * Handles the case where the target file doesn't exist yet (ENOENT). + * + * This function walks up the directory tree to find the first existing + * ancestor and validates it. It also detects dangling symlinks by checking + * if any component is a symlink pointing outside the worktree. + * + * @throws PathValidationError if any ancestor escapes the worktree + */ +async function assertParentInWorktree( + worktreePath: string, + fullPath: string, +): Promise { + const worktreeReal = await realpath(worktreePath); + let currentPath = dirname(fullPath); + + // Walk up the directory tree until we find an existing directory + while (currentPath !== dirname(currentPath)) { + // Stop at filesystem root + try { + // First check if this path component is a symlink (even if target doesn't exist) + const stats = await lstat(currentPath); + + if (stats.isSymbolicLink()) { + // This is a symlink - validate its target even if it doesn't exist + const linkTarget = await readlink(currentPath); + // Resolve the link target relative to the symlink's parent + const resolvedTarget = isAbsolute(linkTarget) + ? linkTarget + : resolve(dirname(currentPath), linkTarget); + + // Try to get the realpath of the resolved target + try { + const targetReal = await realpath(resolvedTarget); + if (!isPathWithinWorktree(worktreeReal, targetReal)) { + throw new PathValidationError( + "Symlink in path resolves outside the worktree", + "SYMLINK_ESCAPE", + ); + } + } catch (error) { + // Target doesn't exist - check if the resolved target path + // would be within worktree if it existed + if ( + error instanceof Error && + "code" in error && + error.code === "ENOENT" + ) { + // For dangling symlinks, validate the target path itself + // We need to check if the target, when resolved, would be in worktree + // This is conservative: if we can't determine, fail closed + const targetRelative = relative(worktreeReal, resolvedTarget); + // Use sep-aware check to avoid false positives on "..config" dirs + if ( + targetRelative === ".." || + targetRelative.startsWith(`..${sep}`) || + isAbsolute(targetRelative) + ) { + throw new PathValidationError( + "Dangling symlink points outside the worktree", + "SYMLINK_ESCAPE", + ); + } + // Target would be within worktree if it existed - continue + return; + } + if (error instanceof PathValidationError) { + throw error; + } + // Other errors - fail closed for security + throw new PathValidationError( + "Cannot validate symlink target", + "SYMLINK_ESCAPE", + ); + } + return; // Symlink validated successfully + } + + // Not a symlink - get realpath and validate + const parentReal = await realpath(currentPath); + if (!isPathWithinWorktree(worktreeReal, parentReal)) { + throw new PathValidationError( + "Parent directory resolves outside the worktree", + "SYMLINK_ESCAPE", + ); + } + return; // Found valid ancestor + } catch (error) { + if (error instanceof PathValidationError) { + throw error; + } + if ( + error instanceof Error && + "code" in error && + error.code === "ENOENT" + ) { + // This ancestor doesn't exist either, keep walking up + currentPath = dirname(currentPath); + continue; + } + // Other errors (EACCES, ENOTDIR, etc.) - fail closed for security + throw new PathValidationError( + "Cannot validate path ancestry", + "SYMLINK_ESCAPE", + ); + } + } + + // Reached filesystem root without finding valid ancestor + throw new PathValidationError( + "Could not validate path ancestry within worktree", + "SYMLINK_ESCAPE", + ); +} + +/** + * Check if the resolved realpath stays within the worktree boundary. + * Prevents symlink escape attacks where a symlink points outside the worktree. + * + * @throws PathValidationError if realpath escapes worktree + */ +async function assertRealpathInWorktree( + worktreePath: string, + fullPath: string, +): Promise { + try { + const real = await realpath(fullPath); + const worktreeReal = await realpath(worktreePath); + + // Use path.relative for safer boundary checking + if (!isPathWithinWorktree(worktreeReal, real)) { + throw new PathValidationError( + "File is a symlink pointing outside the worktree", + "SYMLINK_ESCAPE", + ); + } + } catch (error) { + // If realpath fails with ENOENT, the target doesn't exist + // But the path itself might be a dangling symlink - check that first! + if (error instanceof Error && "code" in error && error.code === "ENOENT") { + await assertDanglingSymlinkSafe(worktreePath, fullPath); + return; + } + // Re-throw PathValidationError + if (error instanceof PathValidationError) { + throw error; + } + // Other errors (permission denied, etc.) - fail closed for security + throw new PathValidationError( + "Cannot validate file path", + "SYMLINK_ESCAPE", + ); + } +} + +/** + * Handle the ENOENT case: check if fullPath is a dangling symlink pointing outside + * the worktree, or if it truly doesn't exist (in which case validate parent chain). + * + * Attack scenario this prevents: + * - Repo contains `docs/config.yml` → symlink to `~/.ssh/some_new_file` (doesn't exist) + * - realpath() fails with ENOENT (target missing) + * - Without this check, we'd only validate parent (`docs/`) which is valid + * - Write would follow symlink and create `~/.ssh/some_new_file` + * + * @throws PathValidationError if symlink escapes worktree + */ +async function assertDanglingSymlinkSafe( + worktreePath: string, + fullPath: string, +): Promise { + const worktreeReal = await realpath(worktreePath); + + try { + // Check if the path itself exists (as a symlink or otherwise) + const stats = await lstat(fullPath); + + if (stats.isSymbolicLink()) { + // It's a dangling symlink - validate where it points + const linkTarget = await readlink(fullPath); + const resolvedTarget = isAbsolute(linkTarget) + ? linkTarget + : resolve(dirname(fullPath), linkTarget); + + // Check if the resolved target would be within worktree + // For dangling symlinks, we can't use realpath on the target, + // so we check the literal resolved path + const targetRelative = relative(worktreeReal, resolvedTarget); + if ( + targetRelative === ".." || + targetRelative.startsWith(`..${sep}`) || + isAbsolute(targetRelative) + ) { + throw new PathValidationError( + "Dangling symlink points outside the worktree", + "SYMLINK_ESCAPE", + ); + } + // Dangling symlink points within worktree - allow the operation + return; + } + + // Not a symlink but lstat succeeded - weird state, but validate parent chain + await assertParentInWorktree(worktreePath, fullPath); + } catch (error) { + if (error instanceof PathValidationError) { + throw error; + } + if (error instanceof Error && "code" in error && error.code === "ENOENT") { + // Path truly doesn't exist (not even as a symlink) - validate parent chain + await assertParentInWorktree(worktreePath, fullPath); + return; + } + // Other errors - fail closed + throw new PathValidationError("Cannot validate path", "SYMLINK_ESCAPE"); + } +} +export const secureFs = { + /** + * Read a file within a worktree. + * + * SECURITY: Enforces symlink-escape check. If the file is a symlink + * pointing outside the worktree, this will throw PathValidationError. + * + * @throws PathValidationError with code "SYMLINK_ESCAPE" if file escapes worktree + */ + async readFile( + worktreePath: string, + filePath: string, + encoding: BufferEncoding = "utf-8", + ): Promise { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + + // Block reads through symlinks that escape the worktree + await assertRealpathInWorktree(worktreePath, fullPath); + + return readFile(fullPath, encoding); + }, + + /** + * Read a file as a Buffer within a worktree. + * + * SECURITY: Enforces symlink-escape check. If the file is a symlink + * pointing outside the worktree, this will throw PathValidationError. + * + * @throws PathValidationError with code "SYMLINK_ESCAPE" if file escapes worktree + */ + async readFileBuffer( + worktreePath: string, + filePath: string, + ): Promise { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + + // Block reads through symlinks that escape the worktree + await assertRealpathInWorktree(worktreePath, fullPath); + + return readFile(fullPath); + }, + + /** + * Write content to a file within a worktree. + * + * SECURITY: Blocks writes if the file is a symlink pointing outside + * the worktree. This prevents malicious repos from tricking users + * into overwriting sensitive files like ~/.bashrc. + * + * @throws PathValidationError with code "SYMLINK_ESCAPE" if target escapes worktree + */ + async writeFile( + worktreePath: string, + filePath: string, + content: string, + ): Promise { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + + // Block writes through symlinks that escape the worktree + await assertRealpathInWorktree(worktreePath, fullPath); + + await writeFile(fullPath, content, "utf-8"); + }, + + /** + * Delete a file or directory within a worktree. + * + * SECURITY: Validates the real path is within worktree before deletion. + * - Symlinks: Deletes the link itself (safe - link lives in worktree) + * - Files/dirs: Validates realpath then deletes + * + * This prevents symlink escape attacks where a malicious repo contains + * `docs -> /Users/victim` and a delete of `docs/file` would delete + * `/Users/victim/file`. + */ + async delete(worktreePath: string, filePath: string): Promise { + assertRegisteredWorktree(worktreePath); + // allowRoot: false prevents deleting the worktree itself + const fullPath = resolvePathInWorktree(worktreePath, filePath, { + allowRoot: false, + }); + + let stats: Stats; + try { + stats = await lstat(fullPath); + } catch (error) { + // File doesn't exist - idempotent delete, nothing to do + if ( + error instanceof Error && + "code" in error && + error.code === "ENOENT" + ) { + return; + } + throw error; + } + + if (stats.isSymbolicLink()) { + // Symlink - safe to delete the link itself (it lives in the worktree). + // Don't use recursive as we're just removing the symlink file. + await rm(fullPath); + return; + } + + // Regular file or directory - validate realpath is within worktree. + // This catches path traversal via symlinked parent components: + // e.g., `docs -> /victim`, delete `docs/file` → realpath is `/victim/file` + await assertRealpathInWorktree(worktreePath, fullPath); + + // Safe to delete - realpath confirmed within worktree. + // Note: Symlinks INSIDE a directory are safe - rm deletes the links, not targets. + await rm(fullPath, { recursive: true, force: true }); + }, + + /** + * Get file stats within a worktree. + * + * Uses `stat` (follows symlinks) to get the real file size. + * Validates that the resolved path stays within the worktree boundary. + */ + async stat(worktreePath: string, filePath: string): Promise { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + await assertRealpathInWorktree(worktreePath, fullPath); + return stat(fullPath); + }, + + /** + * Get file stats without following symlinks. + * + * Use this when you need to know if something IS a symlink. + * For size checks, prefer `stat` instead. + */ + async lstat(worktreePath: string, filePath: string): Promise { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + return lstat(fullPath); + }, + + /** + * Check if a file exists within a worktree. + * + * Returns false for non-existent files, symlink escapes, and validation failures. + */ + async exists(worktreePath: string, filePath: string): Promise { + try { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + await assertRealpathInWorktree(worktreePath, fullPath); + await stat(fullPath); + return true; + } catch { + return false; + } + }, + + /** + * Check if a file is a symlink that points outside the worktree. + * + * WARNING: This is a best-effort helper for UI warnings only. + * It returns `false` on errors, so it is NOT suitable as a security gate. + * For security enforcement, use the read/write methods which call + * assertRealpathInWorktree internally. + * + * @returns true if the file is definitely a symlink escaping the worktree, + * false if not escaping OR if we can't determine (errors) + */ + async isSymlinkEscaping( + worktreePath: string, + filePath: string, + ): Promise { + try { + assertRegisteredWorktree(worktreePath); + const fullPath = resolvePathInWorktree(worktreePath, filePath); + + // Check if it's a symlink first + const stats = await lstat(fullPath); + if (!stats.isSymbolicLink()) { + return false; + } + + // Check if realpath escapes worktree + const real = await realpath(fullPath); + const worktreeReal = await realpath(worktreePath); + + return !isPathWithinWorktree(worktreeReal, real); + } catch { + // If we can't determine, assume not escaping (file may not exist) + // NOTE: This makes this method unsuitable as a security gate + return false; + } + }, +}; diff --git a/src/main/lib/git/shell-env.ts b/src/main/lib/git/shell-env.ts new file mode 100644 index 00000000..c59efa72 --- /dev/null +++ b/src/main/lib/git/shell-env.ts @@ -0,0 +1,173 @@ +import { + type ExecFileOptionsWithStringEncoding, + execFile, +} from "node:child_process"; +import os from "node:os"; +import { promisify } from "node:util"; + +const execFileAsync = promisify(execFile); + +// Cache the shell environment to avoid repeated shell spawns +let cachedEnv: Record | null = null; +let cacheTime = 0; +let isFallbackCache = false; +const CACHE_TTL_MS = 60_000; // 1 minute cache +const FALLBACK_CACHE_TTL_MS = 10_000; // 10 second cache for fallback (retry sooner) + +// Track PATH fix state for macOS GUI app PATH fix +let pathFixAttempted = false; +let pathFixSucceeded = false; + +/** + * Gets the full shell environment by spawning a login shell. + * This captures PATH and other environment variables set in shell profiles + * which includes tools like git-lfs installed via homebrew. + * + * Uses -lc (login, command) instead of -ilc to avoid interactive prompts + * and TTY issues from dotfiles expecting a terminal. + * + * Results are cached for 1 minute to avoid spawning shells repeatedly. + */ +export async function getShellEnvironment(): Promise> { + const now = Date.now(); + const ttl = isFallbackCache ? FALLBACK_CACHE_TTL_MS : CACHE_TTL_MS; + if (cachedEnv && now - cacheTime < ttl) { + // Return a copy to prevent caller mutations from corrupting cache + return { ...cachedEnv }; + } + + const shell = + process.env.SHELL || + (process.platform === "darwin" ? "/bin/zsh" : "/bin/bash"); + + try { + // Use -lc flags (not -ilc): + // -l: login shell (sources .zprofile/.profile for PATH setup) + // -c: execute command + // Avoids -i (interactive) to skip TTY prompts and reduce latency + const { stdout } = await execFileAsync(shell, ["-lc", "env"], { + timeout: 10_000, + env: { + ...process.env, + HOME: os.homedir(), + }, + }); + + const env: Record = {}; + for (const line of stdout.split("\n")) { + const idx = line.indexOf("="); + if (idx > 0) { + const key = line.substring(0, idx); + const value = line.substring(idx + 1); + env[key] = value; + } + } + + cachedEnv = env; + cacheTime = now; + isFallbackCache = false; + return { ...env }; + } catch (error) { + console.warn( + `[shell-env] Failed to get shell environment: ${error}. Falling back to process.env`, + ); + // Fall back to process.env if shell spawn fails + // Cache with shorter TTL so we retry sooner + const fallback: Record = {}; + for (const [key, value] of Object.entries(process.env)) { + if (typeof value === "string") { + fallback[key] = value; + } + } + cachedEnv = fallback; + cacheTime = now; + isFallbackCache = true; + return { ...fallback }; + } +} + +/** + * Checks if git-lfs is available in the given environment. + */ +export async function checkGitLfsAvailable( + env: Record, +): Promise { + try { + await execFileAsync("git", ["lfs", "version"], { + timeout: 5_000, + env, + }); + return true; + } catch { + return false; + } +} + +/** + * Clears the cached shell environment. + * Useful for testing or when environment changes are expected. + */ +export function clearShellEnvCache(): void { + cachedEnv = null; + cacheTime = 0; + isFallbackCache = false; +} + +/** + * Execute a command, retrying once with shell environment if it fails with ENOENT. + * On macOS, GUI apps launched from Finder/Dock get minimal PATH that excludes + * homebrew and other user-installed tools. This lazily derives the user's + * shell environment only when needed, then persists the fix to process.env.PATH. + */ +export async function execWithShellEnv( + cmd: string, + args: string[], + options?: Omit, +): Promise<{ stdout: string; stderr: string }> { + try { + return await execFileAsync(cmd, args, { ...options, encoding: "utf8" }); + } catch (error) { + // Only retry on ENOENT (command not found), only on macOS + // Skip if we've already successfully fixed PATH, or if a fix attempt is in progress + if ( + process.platform !== "darwin" || + pathFixSucceeded || + pathFixAttempted || + !(error instanceof Error) || + !("code" in error) || + error.code !== "ENOENT" + ) { + throw error; + } + + pathFixAttempted = true; + console.log("[shell-env] Command not found, deriving shell environment"); + + try { + const shellEnv = await getShellEnvironment(); + + // Persist the fix to process.env so all subsequent calls benefit + if (shellEnv.PATH) { + process.env.PATH = shellEnv.PATH; + pathFixSucceeded = true; + console.log("[shell-env] Fixed process.env.PATH for GUI app"); + } + + // Retry with fixed env (respect caller's other env vars, force PATH if present) + const retryEnv = shellEnv.PATH + ? { ...shellEnv, ...options?.env, PATH: shellEnv.PATH } + : { ...shellEnv, ...options?.env }; + + return await execFileAsync(cmd, args, { + ...options, + encoding: "utf8", + env: retryEnv, + }); + } catch (retryError) { + // Shell env derivation or retry failed - allow future retries + pathFixAttempted = false; + console.error("[shell-env] Retry failed:", retryError); + throw retryError; + } + } +} diff --git a/src/main/lib/git/staging.ts b/src/main/lib/git/staging.ts new file mode 100644 index 00000000..649f009b --- /dev/null +++ b/src/main/lib/git/staging.ts @@ -0,0 +1,76 @@ +import { z } from "zod"; +import { publicProcedure, router } from "../trpc"; +import { + gitCheckoutFile, + gitStageAll, + gitStageFile, + gitUnstageAll, + gitUnstageFile, + secureFs, +} from "./security"; + +export const createStagingRouter = () => { + return router({ + stageFile: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await gitStageFile(input.worktreePath, input.filePath); + return { success: true }; + }), + + unstageFile: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await gitUnstageFile(input.worktreePath, input.filePath); + return { success: true }; + }), + + discardChanges: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await gitCheckoutFile(input.worktreePath, input.filePath); + return { success: true }; + }), + + stageAll: publicProcedure + .input(z.object({ worktreePath: z.string() })) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await gitStageAll(input.worktreePath); + return { success: true }; + }), + + unstageAll: publicProcedure + .input(z.object({ worktreePath: z.string() })) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await gitUnstageAll(input.worktreePath); + return { success: true }; + }), + + deleteUntracked: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + filePath: z.string(), + }), + ) + .mutation(async ({ input }): Promise<{ success: boolean }> => { + await secureFs.delete(input.worktreePath, input.filePath); + return { success: true }; + }), + }); +}; diff --git a/src/main/lib/git/stash.ts b/src/main/lib/git/stash.ts new file mode 100644 index 00000000..33230fb3 --- /dev/null +++ b/src/main/lib/git/stash.ts @@ -0,0 +1,61 @@ +import simpleGit, { CleanOptions } from "simple-git" + +/** + * Create a git stash snapshot for rollback support + * Stashes all changes including untracked files with the UUID as the message + * If there are no changes, no stash is created (this is fine) + */ +export async function createRollbackStash(cwd: string, sdkMessageUuid: string): Promise { + try { + const git = simpleGit(cwd) + // Check if there are any changes to stash + const status = await git.status() + if (status.files.length === 0) { + // No changes to stash - this is fine, just skip + return + } + // Stash all changes including untracked files, with UUID as name + await git.stash(["push", "-u", "-m", sdkMessageUuid]) + // Apply (not pop) to restore working state while keeping stash saved + // Use --index to preserve staged/unstaged state + await git.stash(["apply", "--index"]) + } catch (e) { + console.error("[claude] Failed to create rollback stash:", e) + } +} + +export async function applyRollbackStash( + worktreePath: string, + sdkMessageUuid: string, +) { + try { + const git = simpleGit(worktreePath) + + // Find stash index by UUID in stash list + const stashList = await git.stashList() + let stashIndex: number | null = null + for (let i = 0; i < stashList.all.length; i++) { + if (stashList.all[i].message.includes(sdkMessageUuid)) { + stashIndex = i + break + } + } + + if (stashIndex === null) { + console.warn( + `[claude] Rollback stash not found for sdkMessageUuid=${sdkMessageUuid}`, + ) + return true // This is fine, just skip + } + + // Reset working directory only after confirming stash exists. + await git.reset(["--hard", "HEAD"]) + await git.clean(CleanOptions.FORCE + CleanOptions.RECURSIVE) + + await git.stash(["apply", "--index", `stash@{${stashIndex}}`]) + return true + } catch (e) { + console.error("[claude] Failed to apply rollback stash:", e) + return false + } +} diff --git a/src/main/lib/git/status.ts b/src/main/lib/git/status.ts new file mode 100644 index 00000000..d15aea59 --- /dev/null +++ b/src/main/lib/git/status.ts @@ -0,0 +1,212 @@ +import type { ChangedFile, GitChangesStatus } from "../../../shared/changes-types"; +import simpleGit from "simple-git"; +import { z } from "zod"; +import { publicProcedure, router } from "../trpc"; +import { assertRegisteredWorktree, secureFs } from "./security"; +import { applyNumstatToFiles } from "./utils/apply-numstat"; +import { + parseGitLog, + parseGitStatus, + parseNameStatus, +} from "./utils/parse-status"; + +export const createStatusRouter = () => { + return router({ + getStatus: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + defaultBranch: z.string().optional(), + }), + ) + .query(async ({ input }): Promise => { + console.log("[getStatus] Called with worktreePath:", input.worktreePath); + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + const defaultBranch = input.defaultBranch || "main"; + + const status = await git.status(); + const parsed = parseGitStatus(status); + + const branchComparison = await getBranchComparison(git, defaultBranch); + const trackingStatus = await getTrackingBranchStatus(git); + + await applyNumstatToFiles(git, parsed.staged, [ + "diff", + "--cached", + "--numstat", + ]); + + await applyNumstatToFiles(git, parsed.unstaged, ["diff", "--numstat"]); + + await applyUntrackedLineCount(input.worktreePath, parsed.untracked); + + const result = { + branch: parsed.branch, + defaultBranch, + againstBase: branchComparison.againstBase, + commits: branchComparison.commits, + staged: parsed.staged, + unstaged: parsed.unstaged, + untracked: parsed.untracked, + ahead: branchComparison.ahead, + behind: branchComparison.behind, + pushCount: trackingStatus.pushCount, + pullCount: trackingStatus.pullCount, + hasUpstream: trackingStatus.hasUpstream, + }; + console.log("[getStatus] Returning:", { + branch: result.branch, + stagedCount: result.staged.length, + unstagedCount: result.unstaged.length, + untrackedCount: result.untracked.length, + commitsCount: result.commits.length, + }); + return result; + }), + + getCommitFiles: publicProcedure + .input( + z.object({ + worktreePath: z.string(), + commitHash: z.string(), + }), + ) + .query(async ({ input }): Promise => { + assertRegisteredWorktree(input.worktreePath); + + const git = simpleGit(input.worktreePath); + + const nameStatus = await git.raw([ + "diff-tree", + "--no-commit-id", + "--name-status", + "-r", + input.commitHash, + ]); + const files = parseNameStatus(nameStatus); + + await applyNumstatToFiles(git, files, [ + "diff-tree", + "--no-commit-id", + "--numstat", + "-r", + input.commitHash, + ]); + + return files; + }), + }); +}; + +interface BranchComparison { + commits: GitChangesStatus["commits"]; + againstBase: ChangedFile[]; + ahead: number; + behind: number; +} + +async function getBranchComparison( + git: ReturnType, + defaultBranch: string, +): Promise { + let commits: GitChangesStatus["commits"] = []; + let againstBase: ChangedFile[] = []; + let ahead = 0; + let behind = 0; + + try { + const tracking = await git.raw([ + "rev-list", + "--left-right", + "--count", + `origin/${defaultBranch}...HEAD`, + ]); + const [behindStr, aheadStr] = tracking.trim().split(/\s+/); + behind = Number.parseInt(behindStr || "0", 10); + ahead = Number.parseInt(aheadStr || "0", 10); + + const logOutput = await git.raw([ + "log", + `origin/${defaultBranch}..HEAD`, + "--format=%H|%h|%s|%an|%aI", + ]); + commits = parseGitLog(logOutput); + + if (ahead > 0) { + const nameStatus = await git.raw([ + "diff", + "--name-status", + `origin/${defaultBranch}...HEAD`, + ]); + againstBase = parseNameStatus(nameStatus); + + await applyNumstatToFiles(git, againstBase, [ + "diff", + "--numstat", + `origin/${defaultBranch}...HEAD`, + ]); + } + } catch {} + + return { commits, againstBase, ahead, behind }; +} + +/** Max file size for line counting (1 MiB) - skip larger files to avoid OOM */ +const MAX_LINE_COUNT_SIZE = 1 * 1024 * 1024; + +async function applyUntrackedLineCount( + worktreePath: string, + untracked: ChangedFile[], +): Promise { + for (const file of untracked) { + try { + const stats = await secureFs.stat(worktreePath, file.path); + if (stats.size > MAX_LINE_COUNT_SIZE) continue; + + const content = await secureFs.readFile(worktreePath, file.path); + const lineCount = content.split("\n").length; + file.additions = lineCount; + file.deletions = 0; + } catch { + // Skip files that fail validation or reading + } + } +} + +interface TrackingStatus { + pushCount: number; + pullCount: number; + hasUpstream: boolean; +} + +async function getTrackingBranchStatus( + git: ReturnType, +): Promise { + try { + const upstream = await git.raw([ + "rev-parse", + "--abbrev-ref", + "@{upstream}", + ]); + if (!upstream.trim()) { + return { pushCount: 0, pullCount: 0, hasUpstream: false }; + } + + const tracking = await git.raw([ + "rev-list", + "--left-right", + "--count", + "@{upstream}...HEAD", + ]); + const [pullStr, pushStr] = tracking.trim().split(/\s+/); + return { + pushCount: Number.parseInt(pushStr || "0", 10), + pullCount: Number.parseInt(pullStr || "0", 10), + hasUpstream: true, + }; + } catch { + return { pushCount: 0, pullCount: 0, hasUpstream: false }; + } +} diff --git a/src/main/lib/git/utils/apply-numstat.ts b/src/main/lib/git/utils/apply-numstat.ts new file mode 100644 index 00000000..fff1ff06 --- /dev/null +++ b/src/main/lib/git/utils/apply-numstat.ts @@ -0,0 +1,24 @@ +import type { ChangedFile } from "../../../../shared/changes-types"; +import type { SimpleGit } from "simple-git"; +import { parseDiffNumstat } from "./parse-status"; + +export async function applyNumstatToFiles( + git: SimpleGit, + files: ChangedFile[], + diffArgs: string[], +): Promise { + if (files.length === 0) return; + + try { + const numstat = await git.raw(diffArgs); + const stats = parseDiffNumstat(numstat); + + for (const file of files) { + const fileStat = stats.get(file.path); + if (fileStat) { + file.additions = fileStat.additions; + file.deletions = fileStat.deletions; + } + } + } catch {} +} diff --git a/src/main/lib/git/utils/parse-status.ts b/src/main/lib/git/utils/parse-status.ts new file mode 100644 index 00000000..952d9bf2 --- /dev/null +++ b/src/main/lib/git/utils/parse-status.ts @@ -0,0 +1,197 @@ +import type { + ChangedFile, + CommitInfo, + FileStatus, + GitChangesStatus, +} from "../../../../shared/changes-types"; +import type { StatusResult } from "simple-git"; + +function mapGitStatus(gitIndex: string, gitWorking: string): FileStatus { + if (gitIndex === "A" || gitWorking === "A") return "added"; + if (gitIndex === "D" || gitWorking === "D") return "deleted"; + if (gitIndex === "R") return "renamed"; + if (gitIndex === "C") return "copied"; + if (gitIndex === "?" || gitWorking === "?") return "untracked"; + return "modified"; +} + +function toChangedFile( + path: string, + gitIndex: string, + gitWorking: string, +): ChangedFile { + return { + path, + status: mapGitStatus(gitIndex, gitWorking), + additions: 0, + deletions: 0, + }; +} + +export function parseGitStatus( + status: StatusResult, +): Pick { + const staged: ChangedFile[] = []; + const unstaged: ChangedFile[] = []; + const untracked: ChangedFile[] = []; + + for (const file of status.files) { + const path = file.path; + const index = file.index; + const working = file.working_dir; + + if (index === "?" && working === "?") { + untracked.push(toChangedFile(path, index, working)); + continue; + } + + if (index && index !== " " && index !== "?") { + staged.push({ + path, + oldPath: file.path !== file.from ? file.from : undefined, + status: mapGitStatus(index, " "), + additions: 0, + deletions: 0, + }); + } + + if (working && working !== " " && working !== "?") { + unstaged.push({ + path, + status: mapGitStatus(" ", working), + additions: 0, + deletions: 0, + }); + } + } + + return { + branch: status.current || "HEAD", + staged, + unstaged, + untracked, + }; +} + +export function parseGitLog(logOutput: string): CommitInfo[] { + if (!logOutput.trim()) return []; + + const commits: CommitInfo[] = []; + const lines = logOutput.trim().split("\n"); + + for (const line of lines) { + if (!line.trim()) continue; + + // Format: hash|shortHash|message|author|date + // Use slice(2, -2) to preserve '|' characters in commit messages + const parts = line.split("|"); + if (parts.length < 5) continue; + + const hash = parts[0]?.trim(); + const shortHash = parts[1]?.trim(); + const message = parts.slice(2, -2).join("|").trim(); + const author = parts[parts.length - 2]?.trim(); + const dateStr = parts[parts.length - 1]?.trim(); + + if (!hash || !shortHash) continue; + + let date: Date; + if (dateStr) { + const parsed = new Date(dateStr); + date = Number.isNaN(parsed.getTime()) ? new Date() : parsed; + } else { + date = new Date(); + } + + commits.push({ + hash, + shortHash, + message: message || "", + author: author || "", + date, + files: [], + }); + } + + return commits; +} + +export function parseDiffNumstat( + numstatOutput: string, +): Map { + const stats = new Map(); + + for (const line of numstatOutput.trim().split("\n")) { + if (!line.trim()) continue; + + // Format: additions\tdeletions\tfilepath + // For renames: additions\tdeletions\toldpath => newpath + const [addStr, delStr, ...pathParts] = line.split("\t"); + const rawPath = pathParts.join("\t"); + if (!rawPath) continue; + + const additions = addStr === "-" ? 0 : Number.parseInt(addStr, 10) || 0; + const deletions = delStr === "-" ? 0 : Number.parseInt(delStr, 10) || 0; + const statEntry = { additions, deletions }; + + const renameMatch = rawPath.match(/^(.+) => (.+)$/); + if (renameMatch) { + const oldPath = renameMatch[1]; + const newPath = renameMatch[2]; + stats.set(newPath, statEntry); + stats.set(oldPath, statEntry); + } else { + stats.set(rawPath, statEntry); + } + } + + return stats; +} + +export function parseNameStatus(nameStatusOutput: string): ChangedFile[] { + const files: ChangedFile[] = []; + + for (const line of nameStatusOutput.trim().split("\n")) { + if (!line.trim()) continue; + + // Format: status\tfilepath (or status\toldpath\tnewpath for renames) + const parts = line.split("\t"); + const statusCode = parts[0]; + if (!statusCode) continue; + + const isRenameOrCopy = + statusCode.startsWith("R") || statusCode.startsWith("C"); + const path = isRenameOrCopy ? parts[2] : parts[1]; + const oldPath = isRenameOrCopy ? parts[1] : undefined; + + if (!path) continue; + + let status: FileStatus; + switch (statusCode[0]) { + case "A": + status = "added"; + break; + case "D": + status = "deleted"; + break; + case "R": + status = "renamed"; + break; + case "C": + status = "copied"; + break; + default: + status = "modified"; + } + + files.push({ + path, + oldPath, + status, + additions: 0, + deletions: 0, + }); + } + + return files; +} diff --git a/src/main/lib/git/worktree.ts b/src/main/lib/git/worktree.ts new file mode 100644 index 00000000..e1b1b3bb --- /dev/null +++ b/src/main/lib/git/worktree.ts @@ -0,0 +1,1117 @@ +import { execFile } from "node:child_process"; +import { randomBytes } from "node:crypto"; +import { mkdir, readFile, stat } from "node:fs/promises"; +import { join } from "node:path"; +import { promisify } from "node:util"; +import simpleGit from "simple-git"; +import { + adjectives, + animals, + uniqueNamesGenerator, +} from "unique-names-generator"; +import { checkGitLfsAvailable, getShellEnvironment } from "./shell-env"; + +const execFileAsync = promisify(execFile); + +/** + * Error thrown by execFile when the command fails. + * `code` can be a number (exit code) or string (spawn error like "ENOENT"). + */ +interface ExecFileException extends Error { + code?: number | string; + killed?: boolean; + signal?: NodeJS.Signals; + cmd?: string; + stdout?: string; + stderr?: string; +} + +function isExecFileException(error: unknown): error is ExecFileException { + return ( + error instanceof Error && + ("code" in error || "signal" in error || "killed" in error) + ); +} + +async function getGitEnv(): Promise> { + const shellEnv = await getShellEnvironment(); + const result: Record = {}; + + for (const [key, value] of Object.entries(process.env)) { + if (typeof value === "string") { + result[key] = value; + } + } + + const pathKey = process.platform === "win32" ? "Path" : "PATH"; + if (shellEnv[pathKey]) { + result[pathKey] = shellEnv[pathKey]; + } + + return result; +} + +async function repoUsesLfs(repoPath: string): Promise { + try { + const lfsDir = join(repoPath, ".git", "lfs"); + const stats = await stat(lfsDir); + if (stats.isDirectory()) { + return true; + } + } catch (error) { + if (!isEnoent(error)) { + console.warn(`[git] Could not check .git/lfs directory: ${error}`); + } + } + + const attributeFiles = [ + join(repoPath, ".gitattributes"), + join(repoPath, ".git", "info", "attributes"), + join(repoPath, ".lfsconfig"), + ]; + + for (const filePath of attributeFiles) { + try { + const content = await readFile(filePath, "utf-8"); + if (content.includes("filter=lfs") || content.includes("[lfs]")) { + return true; + } + } catch (error) { + if (!isEnoent(error)) { + console.warn(`[git] Could not read ${filePath}: ${error}`); + } + } + } + + try { + const git = simpleGit(repoPath); + const lsFiles = await git.raw(["ls-files"]); + const sampleFiles = lsFiles.split("\n").filter(Boolean).slice(0, 20); + + if (sampleFiles.length > 0) { + const checkAttr = await git.raw([ + "check-attr", + "filter", + "--", + ...sampleFiles, + ]); + if (checkAttr.includes("filter: lfs")) { + return true; + } + } + } catch {} + + return false; +} + +function isEnoent(error: unknown): boolean { + return ( + error instanceof Error && + "code" in error && + (error as NodeJS.ErrnoException).code === "ENOENT" + ); +} + +export function generateBranchName(): string { + const name = uniqueNamesGenerator({ + dictionaries: [adjectives, animals], + separator: "-", + length: 2, + style: "lowerCase", + }); + const suffix = randomBytes(3).toString("hex"); + + return `${name}-${suffix}`; +} + +export async function createWorktree( + mainRepoPath: string, + branch: string, + worktreePath: string, + startPoint = "origin/main", +): Promise { + const usesLfs = await repoUsesLfs(mainRepoPath); + + try { + const parentDir = join(worktreePath, ".."); + await mkdir(parentDir, { recursive: true }); + + const env = await getGitEnv(); + + if (usesLfs) { + const lfsAvailable = await checkGitLfsAvailable(env); + if (!lfsAvailable) { + throw new Error( + `This repository uses Git LFS, but git-lfs was not found. ` + + `Please install git-lfs (e.g., 'brew install git-lfs') and run 'git lfs install'.`, + ); + } + } + + await execFileAsync( + "git", + [ + "-C", + mainRepoPath, + "worktree", + "add", + worktreePath, + "-b", + branch, + // Append ^{commit} to force Git to treat the startPoint as a commit, + // not a branch ref. This prevents implicit upstream tracking when + // creating a new branch from a remote branch like origin/main. + `${startPoint}^{commit}`, + ], + { env, timeout: 120_000 }, + ); + + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + const lowerError = errorMessage.toLowerCase(); + + const isLockError = + lowerError.includes("could not lock") || + lowerError.includes("unable to lock") || + (lowerError.includes(".lock") && lowerError.includes("file exists")); + + if (isLockError) { + console.error( + `Git lock file error during worktree creation: ${errorMessage}`, + ); + throw new Error( + `Failed to create worktree: The git repository is locked by another process. ` + + `This usually happens when another git operation is in progress, or a previous operation crashed. ` + + `Please wait for the other operation to complete, or manually remove the lock file ` + + `(e.g., .git/config.lock or .git/index.lock) if you're sure no git operations are running.`, + ); + } + + const isLfsError = + lowerError.includes("git-lfs") || + lowerError.includes("filter-process") || + lowerError.includes("smudge filter") || + (lowerError.includes("lfs") && lowerError.includes("not")) || + (lowerError.includes("lfs") && usesLfs); + + if (isLfsError) { + console.error(`Git LFS error during worktree creation: ${errorMessage}`); + throw new Error( + `Failed to create worktree: This repository uses Git LFS, but git-lfs was not found or failed. ` + + `Please install git-lfs (e.g., 'brew install git-lfs') and run 'git lfs install'.`, + ); + } + + console.error(`Failed to create worktree: ${errorMessage}`); + throw new Error(`Failed to create worktree: ${errorMessage}`); + } +} + +export async function removeWorktree( + mainRepoPath: string, + worktreePath: string, +): Promise<{ success: boolean; error?: string }> { + try { + const env = await getGitEnv(); + + await execFileAsync( + "git", + ["-C", mainRepoPath, "worktree", "remove", worktreePath, "--force"], + { env, timeout: 60_000 }, + ); + + return { success: true }; + } catch (error) { + const errorMessage = error instanceof Error ? error.message : String(error); + console.error(`Failed to remove worktree: ${errorMessage}`); + return { success: false, error: errorMessage }; + } +} + +export async function getGitRoot(path: string): Promise { + try { + const git = simpleGit(path); + const root = await git.revparse(["--show-toplevel"]); + return root.trim(); + } catch (_error) { + throw new Error(`Not a git repository: ${path}`); + } +} + +export async function worktreeExists( + mainRepoPath: string, + worktreePath: string, +): Promise { + try { + const git = simpleGit(mainRepoPath); + const worktrees = await git.raw(["worktree", "list", "--porcelain"]); + + const lines = worktrees.split("\n"); + const worktreePrefix = `worktree ${worktreePath}`; + return lines.some((line) => line.trim() === worktreePrefix); + } catch (error) { + console.error(`Failed to check worktree existence: ${error}`); + throw error; + } +} + +export async function hasOriginRemote(mainRepoPath: string): Promise { + try { + const git = simpleGit(mainRepoPath); + const remotes = await git.getRemotes(); + return remotes.some((r) => r.name === "origin"); + } catch { + return false; + } +} + +export async function getDefaultBranch(mainRepoPath: string): Promise { + const git = simpleGit(mainRepoPath); + + // First check if we have an origin remote + const hasRemote = await hasOriginRemote(mainRepoPath); + + if (hasRemote) { + // Try to get the default branch from origin/HEAD + try { + const headRef = await git.raw([ + "symbolic-ref", + "refs/remotes/origin/HEAD", + ]); + const match = headRef.trim().match(/refs\/remotes\/origin\/(.+)/); + if (match) return match[1]; + } catch {} + + // Check remote branches for common default branch names + try { + const branches = await git.branch(["-r"]); + const remoteBranches = branches.all.map((b) => b.replace("origin/", "")); + + for (const candidate of ["main", "master", "develop", "trunk"]) { + if (remoteBranches.includes(candidate)) { + return candidate; + } + } + } catch {} + + // Try ls-remote as last resort for remote repos + try { + const result = await git.raw(["ls-remote", "--symref", "origin", "HEAD"]); + const symrefMatch = result.match(/ref:\s+refs\/heads\/(.+?)\tHEAD/); + if (symrefMatch) { + return symrefMatch[1]; + } + } catch {} + } else { + // No remote - use the current local branch or check for common branch names + try { + const currentBranch = await getCurrentBranch(mainRepoPath); + if (currentBranch) { + return currentBranch; + } + } catch {} + + // Fallback: check for common default branch names locally + try { + const localBranches = await git.branchLocal(); + for (const candidate of ["main", "master", "develop", "trunk"]) { + if (localBranches.all.includes(candidate)) { + return candidate; + } + } + // If we have any local branches, use the first one + if (localBranches.all.length > 0) { + return localBranches.all[0]; + } + } catch {} + } + + return "main"; +} + +export async function fetchDefaultBranch( + mainRepoPath: string, + defaultBranch: string, +): Promise { + const git = simpleGit(mainRepoPath); + await git.fetch("origin", defaultBranch); + const commit = await git.revparse(`origin/${defaultBranch}`); + return commit.trim(); +} + +/** + * Refreshes the local origin/HEAD symref from the remote and returns the current default branch. + * This detects when the remote repository's default branch has changed (e.g., master -> main). + * @param mainRepoPath - Path to the main repository + * @returns The current default branch name, or null if unable to determine + */ +export async function refreshDefaultBranch( + mainRepoPath: string, +): Promise { + const git = simpleGit(mainRepoPath); + + const hasRemote = await hasOriginRemote(mainRepoPath); + if (!hasRemote) { + return null; + } + + try { + // Git doesn't auto-update origin/HEAD on fetch, so we must explicitly + // sync it to detect when the remote's default branch changes + await git.remote(["set-head", "origin", "--auto"]); + + const headRef = await git.raw(["symbolic-ref", "refs/remotes/origin/HEAD"]); + const match = headRef.trim().match(/refs\/remotes\/origin\/(.+)/); + if (match) { + return match[1]; + } + } catch { + // set-head requires network access; fall back to ls-remote which may + // work in some edge cases or provide a more specific error + try { + const result = await git.raw(["ls-remote", "--symref", "origin", "HEAD"]); + const symrefMatch = result.match(/ref:\s+refs\/heads\/(.+?)\tHEAD/); + if (symrefMatch) { + return symrefMatch[1]; + } + } catch { + // Network unavailable - caller will use cached value + } + } + + return null; +} + +export async function checkNeedsRebase( + worktreePath: string, + defaultBranch: string, +): Promise { + const git = simpleGit(worktreePath); + const behindCount = await git.raw([ + "rev-list", + "--count", + `HEAD..origin/${defaultBranch}`, + ]); + return Number.parseInt(behindCount.trim(), 10) > 0; +} + +export async function hasUncommittedChanges( + worktreePath: string, +): Promise { + const git = simpleGit(worktreePath); + const status = await git.status(); + return !status.isClean(); +} + +export async function hasUnpushedCommits( + worktreePath: string, +): Promise { + const git = simpleGit(worktreePath); + try { + const aheadCount = await git.raw([ + "rev-list", + "--count", + "@{upstream}..HEAD", + ]); + return Number.parseInt(aheadCount.trim(), 10) > 0; + } catch { + try { + const localCommits = await git.raw([ + "rev-list", + "--count", + "HEAD", + "--not", + "--remotes", + ]); + return Number.parseInt(localCommits.trim(), 10) > 0; + } catch { + return false; + } + } +} + +export type BranchExistsResult = + | { status: "exists" } + | { status: "not_found" } + | { status: "error"; message: string }; + +/** + * Git exit codes for ls-remote --exit-code: + * - 0: Refs found (branch exists) + * - 2: No matching refs (branch doesn't exist) + * - 128: Fatal error (auth, network, invalid repo, etc.) + */ +const GIT_EXIT_CODES = { + SUCCESS: 0, + NO_MATCHING_REFS: 2, + FATAL_ERROR: 128, +} as const; + +/** + * Patterns for categorizing git fatal errors (exit code 128). + * These are checked against lowercase error messages/stderr. + */ +const GIT_ERROR_PATTERNS = { + network: [ + "could not resolve host", + "unable to access", + "connection refused", + "network is unreachable", + "timed out", + "ssl", + "could not read from remote", + ], + auth: [ + "authentication", + "permission denied", + "403", + "401", + // SSH-specific auth failures + "permission denied (publickey)", + "host key verification failed", + ], + remoteNotConfigured: [ + "does not appear to be a git repository", + "no such remote", + "repository not found", + "remote origin not found", + ], +} as const; + +function categorizeGitError(errorMessage: string): BranchExistsResult { + const lowerMessage = errorMessage.toLowerCase(); + + if (GIT_ERROR_PATTERNS.network.some((p) => lowerMessage.includes(p))) { + return { + status: "error", + message: "Cannot connect to remote. Check your network connection.", + }; + } + + if (GIT_ERROR_PATTERNS.auth.some((p) => lowerMessage.includes(p))) { + return { + status: "error", + message: "Authentication failed. Check your Git credentials.", + }; + } + + if ( + GIT_ERROR_PATTERNS.remoteNotConfigured.some((p) => lowerMessage.includes(p)) + ) { + return { + status: "error", + message: + "Remote 'origin' is not configured or the repository was not found.", + }; + } + + return { + status: "error", + message: `Failed to verify branch: ${errorMessage}`, + }; +} + +export async function branchExistsOnRemote( + worktreePath: string, + branchName: string, +): Promise { + const env = await getGitEnv(); + + try { + // Use execFileAsync directly to get reliable exit codes + // simple-git doesn't expose exit codes in a predictable way + await execFileAsync( + "git", + [ + "-C", + worktreePath, + "ls-remote", + "--exit-code", + "--heads", + "origin", + branchName, + ], + { env, timeout: 30_000 }, + ); + // Exit code 0 = branch exists (--exit-code flag ensures this) + return { status: "exists" }; + } catch (error) { + // Use type guard to safely access ExecFileException properties + if (!isExecFileException(error)) { + return { + status: "error", + message: `Unexpected error: ${error instanceof Error ? error.message : String(error)}`, + }; + } + + // Handle spawn/system errors first (code is a string like "ENOENT") + if (typeof error.code === "string") { + if (error.code === "ENOENT") { + return { + status: "error", + message: "Git is not installed or not found in PATH.", + }; + } + if (error.code === "ETIMEDOUT") { + return { + status: "error", + message: "Git command timed out. Check your network connection.", + }; + } + // Other system errors + return { + status: "error", + message: `System error: ${error.code}`, + }; + } + + // Handle killed/timed out processes (timeout option triggers this) + if (error.killed || error.signal) { + return { + status: "error", + message: "Git command timed out. Check your network connection.", + }; + } + + // Now code is numeric - it's a git exit code + if (error.code === GIT_EXIT_CODES.NO_MATCHING_REFS) { + return { status: "not_found" }; + } + + // For fatal errors (128) or other codes, categorize using stderr (preferred) or message + // stderr contains the actual git error; message may include wrapper text + const errorText = error.stderr || error.message || ""; + return categorizeGitError(errorText); + } +} + +/** + * Detect which branch a worktree was likely based off of. + * Uses merge-base to find the closest common ancestor with candidate base branches. + */ +export async function detectBaseBranch( + worktreePath: string, + currentBranch: string, + defaultBranch: string, +): Promise { + const git = simpleGit(worktreePath); + + // Candidate base branches to check, in priority order + const candidates = [ + defaultBranch, + "main", + "master", + "develop", + "development", + ].filter((b, i, arr) => arr.indexOf(b) === i); // dedupe + + let bestCandidate: string | null = null; + let bestAheadCount = Number.POSITIVE_INFINITY; + + for (const candidate of candidates) { + // Skip if this is the current branch + if (candidate === currentBranch) continue; + + try { + // Check if the remote branch exists + const remoteBranch = `origin/${candidate}`; + await git.raw(["rev-parse", "--verify", remoteBranch]); + + // Count how many commits the current branch is ahead of the merge-base + // The branch with the fewest commits "ahead" is likely the base + const mergeBase = await git.raw(["merge-base", "HEAD", remoteBranch]); + const aheadCount = await git.raw([ + "rev-list", + "--count", + `${mergeBase.trim()}..HEAD`, + ]); + + const count = Number.parseInt(aheadCount.trim(), 10); + if (count < bestAheadCount) { + bestAheadCount = count; + bestCandidate = candidate; + } + } catch {} + } + + return bestCandidate; +} + +/** + * Lists all local and remote branches in a repository + * @param repoPath - Path to the repository + * @param options.fetch - Whether to fetch and prune remote refs first (default: false) + * @returns Object with local and remote branch arrays + */ +export async function listBranches( + repoPath: string, + options?: { fetch?: boolean }, +): Promise<{ local: string[]; remote: string[] }> { + const git = simpleGit(repoPath); + + // Optionally fetch and prune to get up-to-date remote refs + if (options?.fetch) { + try { + await git.fetch(["--prune"]); + } catch { + // Ignore fetch errors (e.g., offline) + } + } + + // Get local branches + const localResult = await git.branchLocal(); + const local = localResult.all; + + // Get remote branches (strip "origin/" prefix) + const remoteResult = await git.branch(["-r"]); + const remote = remoteResult.all + .filter((b) => b.startsWith("origin/") && !b.includes("->")) + .map((b) => b.replace("origin/", "")); + + return { local, remote }; +} + +/** + * Gets the current branch name (HEAD) + * @param repoPath - Path to the repository + * @returns The current branch name, or null if in detached HEAD state + */ +export async function getCurrentBranch( + repoPath: string, +): Promise { + const git = simpleGit(repoPath); + try { + const branch = await git.revparse(["--abbrev-ref", "HEAD"]); + const trimmed = branch.trim(); + // "HEAD" means detached HEAD state + return trimmed === "HEAD" ? null : trimmed; + } catch { + return null; + } +} + +/** + * Result of pre-checkout safety checks + */ +export interface CheckoutSafetyResult { + safe: boolean; + error?: string; + hasUncommittedChanges?: boolean; + hasUntrackedFiles?: boolean; +} + +/** + * Performs safety checks before a branch checkout: + * 1. Checks for uncommitted changes (staged/unstaged/created/renamed) + * 2. Checks for untracked files that might be overwritten + * 3. Runs git fetch --prune to clean up stale remote refs + * @param repoPath - Path to the repository + * @returns Safety check result indicating if checkout is safe + */ +export async function checkBranchCheckoutSafety( + repoPath: string, +): Promise { + const git = simpleGit(repoPath); + + try { + const status = await git.status(); + + const hasUncommittedChanges = + status.staged.length > 0 || + status.modified.length > 0 || + status.deleted.length > 0 || + status.created.length > 0 || + status.renamed.length > 0 || + status.conflicted.length > 0; + + const hasUntrackedFiles = status.not_added.length > 0; + + if (hasUncommittedChanges) { + return { + safe: false, + error: + "Cannot switch branches: you have uncommitted changes. Please commit or stash your changes first.", + hasUncommittedChanges: true, + hasUntrackedFiles, + }; + } + + // Block on untracked files as they could be overwritten by checkout + if (hasUntrackedFiles) { + return { + safe: false, + error: + "Cannot switch branches: you have untracked files that may be overwritten. Please commit, stash, or remove them first.", + hasUncommittedChanges: false, + hasUntrackedFiles: true, + }; + } + + // Fetch and prune stale remote refs (best-effort, ignore errors if offline) + try { + await git.fetch(["--prune"]); + } catch { + // Ignore fetch errors + } + + return { + safe: true, + hasUncommittedChanges: false, + hasUntrackedFiles: false, + }; + } catch (error) { + return { + safe: false, + error: `Failed to check repository status: ${error instanceof Error ? error.message : String(error)}`, + }; + } +} + +/** + * Checks out a branch in a repository. + * If the branch only exists on remote, creates a local tracking branch. + * @param repoPath - Path to the repository + * @param branch - The branch name to checkout + */ +export async function checkoutBranch( + repoPath: string, + branch: string, +): Promise { + const git = simpleGit(repoPath); + + // Check if branch exists locally + const localBranches = await git.branchLocal(); + if (localBranches.all.includes(branch)) { + await git.checkout(branch); + return; + } + + // Branch doesn't exist locally - check if it exists on remote and create tracking branch + const remoteBranches = await git.branch(["-r"]); + const remoteBranchName = `origin/${branch}`; + if (remoteBranches.all.includes(remoteBranchName)) { + // Create local branch tracking the remote + await git.checkout(["-b", branch, "--track", remoteBranchName]); + return; + } + + // Branch doesn't exist anywhere - let git checkout fail with its normal error + await git.checkout(branch); +} + +/** + * Safe branch checkout that performs safety checks first. + * This is the preferred method for branch workspaces. + * @param repoPath - Path to the repository + * @param branch - Branch to checkout + * @throws Error if safety checks fail or checkout fails + */ +/** + * Checks if a git ref exists locally (without network access). + * Uses --verify --quiet to only check exit code without output. + * @param repoPath - Path to the repository + * @param ref - The ref to check (e.g., "main", "origin/main") + * @returns true if the ref exists locally, false otherwise + */ +export async function refExistsLocally( + repoPath: string, + ref: string, +): Promise { + const git = simpleGit(repoPath); + try { + // Use --verify --quiet to check if ref exists without output + // Append ^{commit} to ensure it resolves to a commit-ish + await git.raw(["rev-parse", "--verify", "--quiet", `${ref}^{commit}`]); + return true; + } catch { + return false; + } +} + +/** + * Sanitizes git error messages for user display. + * Strips "fatal:" prefixes, excessive newlines, and other git plumbing text. + * @param message - Raw git error message + * @returns Cleaned message suitable for UI display + */ +export function sanitizeGitError(message: string): string { + return message + .replace(/^fatal:\s*/i, "") + .replace(/^error:\s*/i, "") + .replace(/\n+/g, " ") + .trim(); +} + +export async function safeCheckoutBranch( + repoPath: string, + branch: string, +): Promise { + // Check if we're already on the target branch - no checkout needed + const currentBranch = await getCurrentBranch(repoPath); + if (currentBranch === branch) { + return; + } + + // Run safety checks before switching branches + const safety = await checkBranchCheckoutSafety(repoPath); + if (!safety.safe) { + throw new Error(safety.error); + } + + // Proceed with checkout + await checkoutBranch(repoPath, branch); + + // Verify we landed on the correct branch + const verifyBranch = await getCurrentBranch(repoPath); + if (verifyBranch !== branch) { + throw new Error( + `Branch checkout verification failed: expected "${branch}" but HEAD is on "${verifyBranch ?? "detached HEAD"}"`, + ); + } +} + +// ============ Utility functions for chats.ts compatibility ============ + +export interface WorktreeResult { + success: boolean; + worktreePath?: string; + branch?: string; + baseBranch?: string; + error?: string; +} + +/** + * Create a git worktree for a chat (wrapper for chats.ts) + * @param projectPath - Path to the main repository + * @param projectId - Project ID for worktree directory + * @param chatId - Chat ID for worktree directory + * @param selectedBaseBranch - Optional branch to base the worktree off (defaults to auto-detected default branch) + */ +export async function createWorktreeForChat( + projectPath: string, + projectId: string, + chatId: string, + selectedBaseBranch?: string, +): Promise { + try { + const git = simpleGit(projectPath); + const isRepo = await git.checkIsRepo(); + + if (!isRepo) { + return { success: true, worktreePath: projectPath }; + } + + // Use provided base branch or auto-detect + const baseBranch = selectedBaseBranch || await getDefaultBranch(projectPath); + + const branch = generateBranchName(); + const worktreesDir = join(process.env.HOME || "", ".21st", "worktrees"); + const worktreePath = join(worktreesDir, projectId, chatId); + + await createWorktree(projectPath, branch, worktreePath, `origin/${baseBranch}`); + + return { success: true, worktreePath, branch, baseBranch }; + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : "Unknown error", + }; + } +} + +/** + * Get diff for a worktree compared to its base branch + * @param worktreePath - Path to the worktree + * @param baseBranch - The base branch to compare against (if not provided, uses default branch) + */ +export async function getWorktreeDiff( + worktreePath: string, + baseBranch?: string, +): Promise<{ success: boolean; diff?: string; error?: string }> { + try { + const git = simpleGit(worktreePath); + const status = await git.status(); + const currentBranch = status.current; + + // Has uncommitted changes - diff against HEAD + if (!status.isClean()) { + const exclusionArgs = [ + ":!*.lock", + ":!*-lock.*", + ":!package-lock.json", + ":!pnpm-lock.yaml", + ":!yarn.lock", + ]; + + const workingDiff = await git.diff([ + "HEAD", + "--no-color", + "--", + ...exclusionArgs, + ]); + + const untrackedFiles = status.not_added.filter((file) => { + if (file.endsWith(".lock")) return false; + if (file.includes("-lock.")) return false; + if (file.endsWith("package-lock.json")) return false; + if (file.endsWith("pnpm-lock.yaml")) return false; + if (file.endsWith("yarn.lock")) return false; + return true; + }); + + const untrackedDiff = + untrackedFiles.length > 0 + ? await git.diff([ + "--no-color", + "--no-index", + "/dev/null", + ...untrackedFiles, + ]) + : ""; + + const combinedDiff = [workingDiff, untrackedDiff] + .filter(Boolean) + .join("\n"); + + return { success: true, diff: combinedDiff }; + } + + // All committed - diff against base branch + const targetBranch = baseBranch || await getDefaultBranch(worktreePath); + + try { + const diff = await git.diff([ + `origin/${targetBranch}...HEAD`, + "--no-color", + "--", + ":!*.lock", + ":!*-lock.*", + ":!package-lock.json", + ":!pnpm-lock.yaml", + ":!yarn.lock", + ]); + return { success: true, diff: diff || "" }; + } catch { + return { success: true, diff: "" }; + } + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : "Unknown error", + }; + } +} + +/** + * Commit all changes in a worktree + */ +export async function commitWorktreeChanges( + worktreePath: string, + message: string, +): Promise<{ success: boolean; commitHash?: string; error?: string }> { + try { + const git = simpleGit(worktreePath); + + await git.add("-A"); + + const status = await git.status(); + const hasChanges = status.staged.length > 0 || status.files.length > 0; + + if (!hasChanges) { + return { success: false, error: "No changes to commit" }; + } + + const result = await git.commit(message); + + return { success: true, commitHash: result.commit }; + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : "Unknown error", + }; + } +} + +/** + * Merge worktree branch into base branch + */ +export async function mergeWorktreeToMain( + projectPath: string, + worktreeBranch: string, + baseBranch: string, +): Promise<{ success: boolean; error?: string }> { + const git = simpleGit(projectPath); + + try { + await git.checkout(baseBranch); + await git.merge([worktreeBranch, "--no-edit"]); + + return { success: true }; + } catch (error) { + const errorMsg = error instanceof Error ? error.message : "Unknown error"; + + if (errorMsg.includes("CONFLICT") || errorMsg.includes("merge failed")) { + await git.merge(["--abort"]).catch(() => {}); + return { + success: false, + error: "Merge conflicts detected. Please resolve manually.", + }; + } + + return { success: false, error: errorMsg }; + } +} + +/** + * Push worktree branch to remote + */ +export async function pushWorktreeBranch( + worktreePath: string, + branch: string, +): Promise<{ success: boolean; error?: string }> { + try { + const git = simpleGit(worktreePath); + + const remotes = await git.getRemotes(); + if (remotes.length === 0) { + return { success: false, error: "No remote repository configured" }; + } + + await git.push(["-u", "origin", branch]); + + return { success: true }; + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : "Unknown error", + }; + } +} + +/** + * Get current git status summary + */ +export async function getGitStatus(worktreePath: string): Promise<{ + hasUncommittedChanges: boolean; + hasUnpushedCommits: boolean; + currentBranch: string; + error?: string; +}> { + try { + const git = simpleGit(worktreePath); + const status = await git.status(); + + return { + hasUncommittedChanges: !status.isClean(), + hasUnpushedCommits: status.ahead > 0, + currentBranch: status.current || "", + }; + } catch (error) { + return { + hasUncommittedChanges: false, + hasUnpushedCommits: false, + currentBranch: "", + error: error instanceof Error ? error.message : "Unknown error", + }; + } +} diff --git a/src/main/lib/terminal/data-batcher.ts b/src/main/lib/terminal/data-batcher.ts new file mode 100644 index 00000000..50dca1c2 --- /dev/null +++ b/src/main/lib/terminal/data-batcher.ts @@ -0,0 +1,75 @@ +import { StringDecoder } from "node:string_decoder" + +/** + * Batches terminal data to reduce IPC overhead between main and renderer processes. + * Based on Hyper terminal's DataBatcher implementation. + * + * This minimizes the number of IPC messages by: + * 1. Time-based batching: Flushes every BATCH_DURATION_MS (16ms = ~60fps) + * 2. Size-based batching: Flushes when batch exceeds BATCH_MAX_SIZE (200KB) + * 3. Proper UTF-8 handling: Uses StringDecoder to handle multi-byte characters + * that may be split across data chunks + */ + +const BATCH_DURATION_MS = 16 +const BATCH_MAX_SIZE = 200 * 1024 + +export class DataBatcher { + private decoder: StringDecoder + private buffer: string = "" + private timeout: ReturnType | null = null + private onFlush: (data: string) => void + + constructor(onFlush: (data: string) => void) { + this.decoder = new StringDecoder("utf8") + this.onFlush = onFlush + } + + /** + * Add data to the batch. Data will be flushed either when: + * - BATCH_DURATION_MS has elapsed since the first write + * - Buffer size exceeds BATCH_MAX_SIZE + */ + write(data: Buffer | string): void { + const decoded = typeof data === "string" ? data : this.decoder.write(data) + this.buffer += decoded + + if (this.buffer.length >= BATCH_MAX_SIZE) { + this.flush() + return + } + + if (this.timeout === null) { + this.timeout = setTimeout(() => this.flush(), BATCH_DURATION_MS) + } + } + + /** + * Flush any buffered data immediately. + */ + flush(): void { + if (this.timeout !== null) { + clearTimeout(this.timeout) + this.timeout = null + } + + if (this.buffer.length > 0) { + this.onFlush(this.buffer) + this.buffer = "" + } + } + + /** + * Dispose of the batcher, flushing any remaining data. + * Calls decoder.end() to handle any trailing incomplete sequences. + */ + dispose(): void { + this.flush() + + // Flush any incomplete multi-byte sequences + const remaining = this.decoder.end() + if (remaining) { + this.onFlush(remaining) + } + } +} diff --git a/src/main/lib/terminal/env.ts b/src/main/lib/terminal/env.ts new file mode 100644 index 00000000..23f7f022 --- /dev/null +++ b/src/main/lib/terminal/env.ts @@ -0,0 +1,327 @@ +import { execSync } from "node:child_process" +import os from "node:os" + +export const FALLBACK_SHELL = os.platform() === "win32" ? "cmd.exe" : "/bin/sh" +export const SHELL_CRASH_THRESHOLD_MS = 1000 + +export function getDefaultShell(): string { + const platform = os.platform() + + if (platform === "win32") { + return process.env.COMSPEC || "powershell.exe" + } + + // Use SHELL env var (most reliable on Unix) + if (process.env.SHELL) { + return process.env.SHELL + } + + // Fallback: try to detect from /etc/passwd on macOS/Linux + try { + const uid = process.getuid?.() + if (uid !== undefined) { + const passwd = execSync(`getent passwd ${uid} 2>/dev/null || dscl . -read /Users/$(whoami) UserShell 2>/dev/null`, { + encoding: "utf-8", + timeout: 1000, + }) + // getent format: user:x:uid:gid:name:home:shell + // dscl format: UserShell: /bin/zsh + const match = passwd.match(/UserShell:\s*(.+)/) || passwd.match(/:([^:]+)$/) + if (match?.[1]) { + return match[1].trim() + } + } + } catch { + // Ignore + } + + return "/bin/zsh" +} + +export function getLocale(baseEnv: Record): string { + if (baseEnv.LANG?.includes("UTF-8")) { + return baseEnv.LANG + } + + if (baseEnv.LC_ALL?.includes("UTF-8")) { + return baseEnv.LC_ALL + } + + try { + const result = execSync("locale 2>/dev/null | grep LANG= | cut -d= -f2", { + encoding: "utf-8", + timeout: 1000, + }).trim() + if (result?.includes("UTF-8")) { + return result + } + } catch { + // Ignore - will use fallback + } + + return "en_US.UTF-8" +} + +export function sanitizeEnv( + env: NodeJS.ProcessEnv +): Record | undefined { + const sanitized: Record = {} + + for (const [key, value] of Object.entries(env)) { + if (typeof value === "string") { + sanitized[key] = value + } + } + + return Object.keys(sanitized).length > 0 ? sanitized : undefined +} + +/** + * Allowlist of environment variable names safe to pass to terminals. + * Using an allowlist (vs denylist) ensures unknown vars (including secrets) are excluded by default. + */ +const ALLOWED_ENV_VARS = new Set([ + // Core shell environment + "PATH", + "HOME", + "USER", + "LOGNAME", + "SHELL", + "TERM", + "TMPDIR", + "LANG", + "LC_ALL", + "LC_CTYPE", + "LC_MESSAGES", + "LC_COLLATE", + "LC_MONETARY", + "LC_NUMERIC", + "LC_TIME", + "TZ", + + // Terminal/display + "DISPLAY", + "COLORTERM", + "TERM_PROGRAM", + "TERM_PROGRAM_VERSION", + "COLUMNS", + "LINES", + + // SSH (critical for git operations) + "SSH_AUTH_SOCK", + "SSH_AGENT_PID", + + // Proxy configuration + "HTTP_PROXY", + "HTTPS_PROXY", + "http_proxy", + "https_proxy", + "NO_PROXY", + "no_proxy", + "ALL_PROXY", + "all_proxy", + "FTP_PROXY", + "ftp_proxy", + + // Language version managers + "NVM_DIR", + "NVM_BIN", + "NVM_INC", + "NVM_CD_FLAGS", + "NVM_RC_VERSION", + "PYENV_ROOT", + "PYENV_SHELL", + "PYENV_VERSION", + "RBENV_ROOT", + "RBENV_SHELL", + "RBENV_VERSION", + "GOPATH", + "GOROOT", + "GOBIN", + "CARGO_HOME", + "RUSTUP_HOME", + "DENO_DIR", + "DENO_INSTALL", + "BUN_INSTALL", + "PNPM_HOME", + "VOLTA_HOME", + "ASDF_DIR", + "ASDF_DATA_DIR", + "FNM_DIR", + "FNM_MULTISHELL_PATH", + "FNM_NODE_DIST_MIRROR", + "SDKMAN_DIR", + + // Homebrew + "HOMEBREW_PREFIX", + "HOMEBREW_CELLAR", + "HOMEBREW_REPOSITORY", + + // XDG directories + "XDG_CONFIG_HOME", + "XDG_DATA_HOME", + "XDG_CACHE_HOME", + "XDG_STATE_HOME", + "XDG_RUNTIME_DIR", + + // Editor + "EDITOR", + "VISUAL", + "PAGER", + + // macOS specific + "__CF_USER_TEXT_ENCODING", + "Apple_PubSub_Socket_Render", + + // Windows specific + "COMSPEC", + "USERPROFILE", + "APPDATA", + "LOCALAPPDATA", + "PROGRAMFILES", + "PROGRAMFILES(X86)", + "SYSTEMROOT", + "WINDIR", + "TEMP", + "TMP", + "PATHEXT", + + // SSL/TLS configuration + "SSL_CERT_FILE", + "SSL_CERT_DIR", + "NODE_EXTRA_CA_CERTS", + "REQUESTS_CA_BUNDLE", + + // Git configuration (not credentials) + "GIT_SSH_COMMAND", + "GIT_AUTHOR_NAME", + "GIT_AUTHOR_EMAIL", + "GIT_COMMITTER_NAME", + "GIT_COMMITTER_EMAIL", + "GIT_EDITOR", + "GIT_PAGER", + + // AWS configuration (profile selection, not credentials) + "AWS_PROFILE", + "AWS_DEFAULT_REGION", + "AWS_REGION", + "AWS_CONFIG_FILE", + "AWS_SHARED_CREDENTIALS_FILE", + + // Docker configuration + "DOCKER_HOST", + "DOCKER_CONFIG", + "DOCKER_CERT_PATH", + "DOCKER_TLS_VERIFY", + "COMPOSE_PROJECT_NAME", + + // Kubernetes configuration + "KUBECONFIG", + "KUBE_CONFIG_PATH", + + // Cloud CLI tools + "CLOUDSDK_CONFIG", + "AZURE_CONFIG_DIR", + + // SDK paths + "JAVA_HOME", + "ANDROID_HOME", + "ANDROID_SDK_ROOT", + "FLUTTER_ROOT", + "DOTNET_ROOT", +]) + +/** + * Prefixes for environment variables that are safe to pass through. + */ +const ALLOWED_PREFIXES = [ + "AGENTS_", // Our own metadata vars + "LC_", // Locale settings +] + +/** + * Check if a key is in the allowlist, handling Windows case-insensitivity. + */ +function isAllowedVar(key: string, isWindows: boolean): boolean { + if (isWindows) { + return ALLOWED_ENV_VARS.has(key.toUpperCase()) + } + return ALLOWED_ENV_VARS.has(key) +} + +/** + * Check if a key matches an allowed prefix. + */ +function hasAllowedPrefix(key: string, isWindows: boolean): boolean { + const keyToCheck = isWindows ? key.toUpperCase() : key + return ALLOWED_PREFIXES.some((prefix) => keyToCheck.startsWith(prefix)) +} + +/** + * Build a safe environment by only including allowlisted variables. + * This prevents app secrets and build-time config from leaking to terminals. + */ +export function buildSafeEnv( + env: Record, + options?: { platform?: NodeJS.Platform } +): Record { + const platform = options?.platform ?? os.platform() + const isWindows = platform === "win32" + const safe: Record = {} + + for (const [key, value] of Object.entries(env)) { + if (isAllowedVar(key, isWindows)) { + safe[key] = value + continue + } + + if (hasAllowedPrefix(key, isWindows)) { + safe[key] = value + } + } + + return safe +} + +export function buildTerminalEnv(params: { + shell: string + paneId: string + tabId?: string + workspaceId?: string + workspaceName?: string + workspacePath?: string + rootPath?: string +}): Record { + const { + shell, + paneId, + tabId, + workspaceId, + workspaceName, + workspacePath, + rootPath, + } = params + + // Get Electron's process.env and filter to only allowlisted safe vars + const rawBaseEnv = sanitizeEnv(process.env) || {} + const baseEnv = buildSafeEnv(rawBaseEnv) + const locale = getLocale(rawBaseEnv) + + const env: Record = { + ...baseEnv, + SHELL: shell, + TERM: "xterm-256color", + TERM_PROGRAM: "21st Agents", + TERM_PROGRAM_VERSION: process.env.npm_package_version || "1.0.0", + COLORTERM: "truecolor", + LANG: locale, + AGENTS_PANE_ID: paneId, + AGENTS_TAB_ID: tabId || "", + AGENTS_WORKSPACE_ID: workspaceId || "", + AGENTS_WORKSPACE_NAME: workspaceName || "", + AGENTS_WORKSPACE_PATH: workspacePath || "", + AGENTS_ROOT_PATH: rootPath || "", + } + + return env +} diff --git a/src/main/lib/terminal/index.ts b/src/main/lib/terminal/index.ts new file mode 100644 index 00000000..ffc299f4 --- /dev/null +++ b/src/main/lib/terminal/index.ts @@ -0,0 +1,10 @@ +export { TerminalManager, terminalManager } from "./manager" +export { portManager } from "./port-manager" +export type { + CreateSessionParams, + DetectedPort, + SessionResult, + TerminalDataEvent, + TerminalEvent, + TerminalExitEvent, +} from "./types" diff --git a/src/main/lib/terminal/manager.ts b/src/main/lib/terminal/manager.ts new file mode 100644 index 00000000..0f6c9706 --- /dev/null +++ b/src/main/lib/terminal/manager.ts @@ -0,0 +1,402 @@ +import { EventEmitter } from "node:events" +import { FALLBACK_SHELL, SHELL_CRASH_THRESHOLD_MS } from "./env" +import { portManager } from "./port-manager" +import { createSession, setupInitialCommands } from "./session" +import type { + CreateSessionParams, + SessionResult, + TerminalSession, +} from "./types" + +export class TerminalManager extends EventEmitter { + private sessions = new Map() + private pendingSessions = new Map>() + + async createOrAttach(params: CreateSessionParams): Promise { + const { paneId, cols, rows } = params + + // Deduplicate concurrent calls (prevents race in React Strict Mode) + const pending = this.pendingSessions.get(paneId) + if (pending) { + return pending + } + + // Return existing session if alive + const existing = this.sessions.get(paneId) + if (existing?.isAlive) { + existing.lastActive = Date.now() + if (cols !== undefined && rows !== undefined) { + this.resize({ paneId, cols, rows }) + } + return { + isNew: false, + serializedState: existing.serializedState || "", + } + } + + // Create new session + const creationPromise = this.doCreateSession(params) + this.pendingSessions.set(paneId, creationPromise) + + try { + return await creationPromise + } finally { + this.pendingSessions.delete(paneId) + } + } + + private async doCreateSession( + params: CreateSessionParams & { useFallbackShell?: boolean }, + ): Promise { + const { paneId, workspaceId, initialCommands } = params + + // Create the session + const session = await createSession(params, (id, data) => { + this.emit(`data:${id}`, data) + }) + + // Set up initial commands (only for new sessions) + setupInitialCommands(session, initialCommands) + + // Set up exit handler with fallback logic + this.setupExitHandler(session, params) + + this.sessions.set(paneId, session) + + portManager.registerSession(session, workspaceId || "") + + return { + isNew: true, + serializedState: "", + } + } + + private setupExitHandler( + session: TerminalSession, + params: CreateSessionParams & { useFallbackShell?: boolean }, + ): void { + const { paneId } = params + + session.pty.onExit(async ({ exitCode, signal }) => { + session.isAlive = false + + // Check if shell crashed quickly - try fallback + const sessionDuration = Date.now() - session.startTime + const crashedQuickly = + sessionDuration < SHELL_CRASH_THRESHOLD_MS && exitCode !== 0 + + if (crashedQuickly && !session.usedFallback) { + console.warn( + `[TerminalManager] Shell "${session.shell}" exited with code ${exitCode} after ${sessionDuration}ms, retrying with fallback shell "${FALLBACK_SHELL}"`, + ) + + this.sessions.delete(paneId) + + try { + await this.doCreateSession({ + ...params, + useFallbackShell: true, + }) + return // Recovered - don't emit exit + } catch (fallbackError) { + console.error( + "[TerminalManager] Fallback shell also failed:", + fallbackError, + ) + } + } + + // Unregister from port manager (also removes detected ports) + portManager.unregisterSession(paneId) + + this.emit(`exit:${paneId}`, exitCode, signal) + + // Clean up session after delay + const timeout = setTimeout(() => { + this.sessions.delete(paneId) + }, 5000) + timeout.unref() + }) + } + + write(params: { paneId: string; data: string }): void { + const { paneId, data } = params + const session = this.sessions.get(paneId) + + if (!session || !session.isAlive) { + throw new Error(`Terminal session ${paneId} not found or not alive`) + } + + session.pty.write(data) + session.lastActive = Date.now() + } + + resize(params: { paneId: string; cols: number; rows: number }): void { + const { paneId, cols, rows } = params + + // Validate geometry: cols and rows must be positive integers + if ( + !Number.isInteger(cols) || + !Number.isInteger(rows) || + cols <= 0 || + rows <= 0 + ) { + console.warn( + `[TerminalManager] Invalid resize geometry for ${paneId}: cols=${cols}, rows=${rows}. Must be positive integers.`, + ) + return + } + + const session = this.sessions.get(paneId) + + if (!session || !session.isAlive) { + console.warn( + `Cannot resize terminal ${paneId}: session not found or not alive`, + ) + return + } + + try { + session.pty.resize(cols, rows) + session.cols = cols + session.rows = rows + session.lastActive = Date.now() + } catch (error) { + console.error( + `[TerminalManager] Failed to resize terminal ${paneId} (cols=${cols}, rows=${rows}):`, + error, + ) + } + } + + signal(params: { paneId: string; signal?: string }): void { + const { paneId, signal = "SIGTERM" } = params + const session = this.sessions.get(paneId) + + if (!session || !session.isAlive) { + console.warn( + `Cannot signal terminal ${paneId}: session not found or not alive`, + ) + return + } + + session.pty.kill(signal) + session.lastActive = Date.now() + } + + async kill(params: { paneId: string }): Promise { + const { paneId } = params + const session = this.sessions.get(paneId) + + if (!session) { + console.warn(`Cannot kill terminal ${paneId}: session not found`) + return + } + + if (session.isAlive) { + session.pty.kill() + } else { + this.sessions.delete(paneId) + } + } + + detach(params: { paneId: string; serializedState?: string }): void { + const { paneId, serializedState } = params + const session = this.sessions.get(paneId) + + if (!session) { + console.warn(`Cannot detach terminal ${paneId}: session not found`) + return + } + + if (serializedState) { + session.serializedState = serializedState + } + session.lastActive = Date.now() + } + + clearScrollback(params: { paneId: string }): void { + const { paneId } = params + const session = this.sessions.get(paneId) + + if (!session) { + console.warn( + `Cannot clear scrollback for terminal ${paneId}: session not found`, + ) + return + } + + session.serializedState = "" + session.lastActive = Date.now() + } + + getSession( + paneId: string, + ): { isAlive: boolean; cwd: string; lastActive: number } | null { + const session = this.sessions.get(paneId) + if (!session) { + return null + } + + return { + isAlive: session.isAlive, + cwd: session.cwd, + lastActive: session.lastActive, + } + } + + async killByWorkspaceId( + workspaceId: string, + ): Promise<{ killed: number; failed: number }> { + const sessionsToKill = Array.from(this.sessions.entries()).filter( + ([, session]) => session.workspaceId === workspaceId, + ) + + if (sessionsToKill.length === 0) { + return { killed: 0, failed: 0 } + } + + const results = await Promise.all( + sessionsToKill.map(([paneId, session]) => + this.killSessionWithTimeout(paneId, session), + ), + ) + + const killed = results.filter(Boolean).length + return { killed, failed: results.length - killed } + } + + private async killSessionWithTimeout( + paneId: string, + session: TerminalSession, + ): Promise { + if (!session.isAlive) { + this.sessions.delete(paneId) + return true + } + + return new Promise((resolve) => { + let resolved = false + let sigtermTimeout: ReturnType | undefined + let sigkillTimeout: ReturnType | undefined + + const cleanup = (success: boolean) => { + if (resolved) return + resolved = true + this.off(`exit:${paneId}`, exitHandler) + if (sigtermTimeout) clearTimeout(sigtermTimeout) + if (sigkillTimeout) clearTimeout(sigkillTimeout) + resolve(success) + } + + const exitHandler = () => cleanup(true) + this.once(`exit:${paneId}`, exitHandler) + + // Escalate to SIGKILL after 2s + sigtermTimeout = setTimeout(() => { + if (resolved || !session.isAlive) return + + try { + session.pty.kill("SIGKILL") + } catch (error) { + console.error(`Failed to send SIGKILL to terminal ${paneId}:`, error) + } + + // Force cleanup after another 500ms + sigkillTimeout = setTimeout(() => { + if (resolved) return + if (session.isAlive) { + console.error( + `Terminal ${paneId} did not exit after SIGKILL, forcing cleanup`, + ) + session.isAlive = false + this.sessions.delete(paneId) + } + cleanup(false) + }, 500) + sigkillTimeout.unref() + }, 2000) + sigtermTimeout.unref() + + // Send SIGTERM + try { + session.pty.kill() + } catch (error) { + console.error(`Failed to send SIGTERM to terminal ${paneId}:`, error) + session.isAlive = false + this.sessions.delete(paneId) + cleanup(false) + } + }) + } + + getSessionCountByWorkspaceId(workspaceId: string): number { + return Array.from(this.sessions.values()).filter( + (session) => session.workspaceId === workspaceId && session.isAlive, + ).length + } + + /** + * Send a newline to all terminals in a workspace to refresh their prompts. + * Useful after switching branches to update the branch name in prompts. + */ + refreshPromptsForWorkspace(workspaceId: string): void { + for (const [paneId, session] of this.sessions.entries()) { + if (session.workspaceId === workspaceId && session.isAlive) { + try { + session.pty.write("\n") + } catch (error) { + console.warn( + `[TerminalManager] Failed to refresh prompt for pane ${paneId}:`, + error, + ) + } + } + } + } + + detachAllListeners(): void { + for (const event of this.eventNames()) { + const name = String(event) + if (name.startsWith("data:") || name.startsWith("exit:")) { + this.removeAllListeners(event) + } + } + } + + async cleanup(): Promise { + const exitPromises: Promise[] = [] + + for (const [paneId, session] of this.sessions.entries()) { + if (session.isAlive) { + const exitPromise = new Promise((resolve) => { + let timeoutId: ReturnType | undefined + const exitHandler = () => { + this.off(`exit:${paneId}`, exitHandler) + if (timeoutId !== undefined) { + clearTimeout(timeoutId) + } + resolve() + } + this.once(`exit:${paneId}`, exitHandler) + + timeoutId = setTimeout(() => { + this.off(`exit:${paneId}`, exitHandler) + resolve() + }, 2000) + timeoutId.unref() + }) + + exitPromises.push(exitPromise) + session.pty.kill() + } + } + + await Promise.all(exitPromises) + this.sessions.clear() + this.removeAllListeners() + } +} + +/** Singleton terminal manager instance */ +export const terminalManager = new TerminalManager() diff --git a/src/main/lib/terminal/port-manager.ts b/src/main/lib/terminal/port-manager.ts new file mode 100644 index 00000000..09de0e81 --- /dev/null +++ b/src/main/lib/terminal/port-manager.ts @@ -0,0 +1,234 @@ +import { EventEmitter } from "node:events" +import type { DetectedPort } from "./types" +import { getListeningPortsForPids, getProcessTree } from "./port-scanner" +import type { TerminalSession } from "./types" + +// How often to poll for port changes (in ms) +const SCAN_INTERVAL_MS = 2500 + +// Ports to ignore (common system ports that are usually not dev servers) +const IGNORED_PORTS = new Set([22, 80, 443, 5432, 3306, 6379, 27017]) + +interface RegisteredSession { + session: TerminalSession + workspaceId: string +} + +class PortManager extends EventEmitter { + private ports = new Map() + private sessions = new Map() + private scanInterval: ReturnType | null = null + private pendingHintScans = new Map>() + private isScanning = false + + constructor() { + super() + this.startPeriodicScan() + } + + /** + * Register a terminal session for port scanning + */ + registerSession(session: TerminalSession, workspaceId: string): void { + this.sessions.set(session.paneId, { session, workspaceId }) + } + + /** + * Unregister a terminal session and remove its ports + */ + unregisterSession(paneId: string): void { + this.sessions.delete(paneId) + this.removePortsForPane(paneId) + + // Cancel any pending hint scan for this pane + const pendingTimeout = this.pendingHintScans.get(paneId) + if (pendingTimeout) { + clearTimeout(pendingTimeout) + this.pendingHintScans.delete(paneId) + } + } + + /** + * Start periodic scanning of all registered sessions + */ + private startPeriodicScan(): void { + if (this.scanInterval) return + + this.scanInterval = setInterval(() => { + this.scanAllSessions().catch((error) => { + console.error("[PortManager] Scan error:", error) + }) + }, SCAN_INTERVAL_MS) + + // Don't prevent Node from exiting + this.scanInterval.unref() + } + + /** + * Stop periodic scanning + */ + stopPeriodicScan(): void { + if (this.scanInterval) { + clearInterval(this.scanInterval) + this.scanInterval = null + } + + for (const timeout of this.pendingHintScans.values()) { + clearTimeout(timeout) + } + this.pendingHintScans.clear() + } + + /** + * Scan all registered sessions for ports + */ + private async scanAllSessions(): Promise { + if (this.isScanning) return + this.isScanning = true + + try { + const panePortMap = new Map< + string, + { workspaceId: string; pids: number[] } + >() + + for (const [paneId, { session, workspaceId }] of this.sessions) { + if (!session.isAlive) continue + + try { + const pid = session.pty.pid + const pids = await getProcessTree(pid) + if (pids.length > 0) { + panePortMap.set(paneId, { workspaceId, pids }) + } + } catch { + // Session may have exited + } + } + + for (const [paneId, { workspaceId, pids }] of panePortMap) { + const portInfos = getListeningPortsForPids(pids) + this.updatePortsForPane(paneId, workspaceId, portInfos) + } + + for (const [key, port] of this.ports) { + if (!this.sessions.has(port.paneId)) { + this.ports.delete(key) + this.emit("port:remove", port) + } + } + } finally { + this.isScanning = false + } + } + + /** + * Update ports for a specific pane, emitting add/remove events as needed + */ + private updatePortsForPane( + paneId: string, + workspaceId: string, + portInfos: Array<{ + port: number + pid: number + address: string + processName: string + }>, + ): void { + const now = Date.now() + + const validPortInfos = portInfos.filter( + (info) => !IGNORED_PORTS.has(info.port), + ) + + const seenKeys = new Set() + + for (const info of validPortInfos) { + const key = this.makeKey(paneId, info.port) + seenKeys.add(key) + + const existing = this.ports.get(key) + if (!existing) { + const detectedPort: DetectedPort = { + port: info.port, + pid: info.pid, + processName: info.processName, + paneId, + workspaceId, + detectedAt: now, + address: info.address, + } + this.ports.set(key, detectedPort) + this.emit("port:add", detectedPort) + } else if ( + existing.pid !== info.pid || + existing.processName !== info.processName + ) { + const updatedPort: DetectedPort = { + ...existing, + pid: info.pid, + processName: info.processName, + address: info.address, + } + this.ports.set(key, updatedPort) + this.emit("port:remove", existing) + this.emit("port:add", updatedPort) + } + } + + for (const [key, port] of this.ports) { + if (port.paneId === paneId && !seenKeys.has(key)) { + this.ports.delete(key) + this.emit("port:remove", port) + } + } + } + + private makeKey(paneId: string, port: number): string { + return `${paneId}:${port}` + } + + /** + * Remove all ports for a specific pane + */ + removePortsForPane(paneId: string): void { + const portsToRemove: DetectedPort[] = [] + + for (const [key, port] of this.ports) { + if (port.paneId === paneId) { + portsToRemove.push(port) + this.ports.delete(key) + } + } + + for (const port of portsToRemove) { + this.emit("port:remove", port) + } + } + + /** + * Get all detected ports + */ + getAllPorts(): DetectedPort[] { + return Array.from(this.ports.values()).sort( + (a, b) => b.detectedAt - a.detectedAt, + ) + } + + /** + * Get ports for a specific workspace + */ + getPortsByWorkspace(workspaceId: string): DetectedPort[] { + return this.getAllPorts().filter((p) => p.workspaceId === workspaceId) + } + + /** + * Force an immediate scan of all sessions + * Useful for testing or when you know ports have changed + */ + async forceScan(): Promise { + await this.scanAllSessions() + } +} + +export const portManager = new PortManager() diff --git a/src/main/lib/terminal/port-scanner.ts b/src/main/lib/terminal/port-scanner.ts new file mode 100644 index 00000000..d8ff6932 --- /dev/null +++ b/src/main/lib/terminal/port-scanner.ts @@ -0,0 +1,213 @@ +import { execSync } from "node:child_process" +import os from "node:os" +import pidtree from "pidtree" + +export interface PortInfo { + port: number + pid: number + address: string + processName: string +} + +/** + * Get all child PIDs of a process (including the process itself) + */ +export async function getProcessTree(pid: number): Promise { + try { + return await pidtree(pid, { root: true }) + } catch { + // Process may have exited + return [] + } +} + +/** + * Get listening TCP ports for a set of PIDs + * Cross-platform implementation using lsof (macOS/Linux) or netstat (Windows) + */ +export function getListeningPortsForPids(pids: number[]): PortInfo[] { + if (pids.length === 0) return [] + + const platform = os.platform() + + if (platform === "darwin" || platform === "linux") { + return getListeningPortsLsof(pids) + } + if (platform === "win32") { + return getListeningPortsWindows(pids) + } + + return [] +} + +/** + * macOS/Linux implementation using lsof + */ +function getListeningPortsLsof(pids: number[]): PortInfo[] { + try { + const pidArg = pids.join(",") + const pidSet = new Set(pids) + // -p: filter by PIDs + // -iTCP: only TCP connections + // -sTCP:LISTEN: only listening sockets + // -P: don't convert port numbers to names + // -n: don't resolve hostnames + // Note: lsof may ignore -p filter if PIDs don't exist or have no matches, + // so we must validate PIDs in the output against our requested set + const output = execSync( + `lsof -p ${pidArg} -iTCP -sTCP:LISTEN -P -n 2>/dev/null || true`, + { encoding: "utf-8", maxBuffer: 10 * 1024 * 1024 }, + ) + + if (!output.trim()) return [] + + const ports: PortInfo[] = [] + const lines = output.trim().split("\n").slice(1) + + for (const line of lines) { + if (!line.trim()) continue + + // Format: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME + // Example: node 12345 user 23u IPv4 0x1234 0t0 TCP *:3000 (LISTEN) + const columns = line.split(/\s+/) + if (columns.length < 10) continue + + const processName = columns[0] + const pid = Number.parseInt(columns[1], 10) + + // CRITICAL: Verify the PID is in our requested set + // lsof ignores -p filter when PIDs don't exist, returning all TCP listeners + if (!pidSet.has(pid)) continue + + const name = columns[columns.length - 2] // NAME column (e.g., *:3000), before (LISTEN) + + // Parse address:port from NAME column + // Formats: *:3000, 127.0.0.1:3000, [::1]:3000, [::]:3000 + const match = name.match(/^(?:\[([^\]]+)\]|([^:]+)):(\d+)$/) + if (match) { + const address = match[1] || match[2] || "*" + const port = Number.parseInt(match[3], 10) + + if (port < 1 || port > 65535) continue + + ports.push({ + port, + pid, + address: address === "*" ? "0.0.0.0" : address, + processName, + }) + } + } + + return ports + } catch { + return [] + } +} + +/** + * Windows implementation using netstat + */ +function getListeningPortsWindows(pids: number[]): PortInfo[] { + try { + const output = execSync("netstat -ano", { + encoding: "utf-8", + maxBuffer: 10 * 1024 * 1024, + }) + + const pidSet = new Set(pids) + const ports: PortInfo[] = [] + const processNames = new Map() + + for (const line of output.split("\n")) { + if (!line.includes("LISTENING")) continue + + // Format: TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 12345 + const columns = line.trim().split(/\s+/) + if (columns.length < 5) continue + + const pid = Number.parseInt(columns[columns.length - 1], 10) + if (!pidSet.has(pid)) continue + + const localAddr = columns[1] + // Parse address:port - handles both IPv4 and IPv6 + // IPv4: 0.0.0.0:3000 + // IPv6: [::]:3000 + const match = localAddr.match(/^(?:\[([^\]]+)\]|([^:]+)):(\d+)$/) + if (match) { + const address = match[1] || match[2] || "0.0.0.0" + const port = Number.parseInt(match[3], 10) + + if (port < 1 || port > 65535) continue + + if (!processNames.has(pid)) { + processNames.set(pid, getProcessNameWindows(pid)) + } + + ports.push({ + port, + pid, + address, + processName: processNames.get(pid) || "unknown", + }) + } + } + + return ports + } catch { + return [] + } +} + +/** + * Get process name for a PID on Windows + */ +function getProcessNameWindows(pid: number): string { + try { + const output = execSync( + `wmic process where processid=${pid} get name 2>nul`, + { encoding: "utf-8" }, + ) + const lines = output.trim().split("\n") + if (lines.length >= 2) { + const name = lines[1].trim() + return name.replace(/\.exe$/i, "") || "unknown" + } + } catch { + // wmic is deprecated, try PowerShell as fallback + try { + const output = execSync( + `powershell -Command "(Get-Process -Id ${pid}).ProcessName"`, + { encoding: "utf-8" }, + ) + return output.trim() || "unknown" + } catch { + // Ignore + } + } + return "unknown" +} + +/** + * Get process name for a PID (cross-platform) + */ +export function getProcessName(pid: number): string { + const platform = os.platform() + + if (platform === "win32") { + return getProcessNameWindows(pid) + } + + // macOS/Linux + try { + const output = execSync(`ps -p ${pid} -o comm= 2>/dev/null || true`, { + encoding: "utf-8", + }) + const name = output.trim() + // On macOS, comm may be truncated. The full path can be gotten with -o command= + // but comm is usually sufficient for display purposes + return name || "unknown" + } catch { + return "unknown" + } +} diff --git a/src/main/lib/terminal/session.ts b/src/main/lib/terminal/session.ts new file mode 100644 index 00000000..25af91e3 --- /dev/null +++ b/src/main/lib/terminal/session.ts @@ -0,0 +1,122 @@ +import os from "node:os" +import * as pty from "node-pty" +import { buildTerminalEnv, FALLBACK_SHELL, getDefaultShell } from "./env" +import type { InternalCreateSessionParams, TerminalSession } from "./types" + +const DEFAULT_COLS = 80 +const DEFAULT_ROWS = 24 + +function getShellArgs(shell: string): string[] { + if (shell.includes("zsh")) { + return ["-l"] + } + if (shell.includes("bash")) { + return [] + } + return [] +} + +function spawnPty(params: { + shell: string + cols: number + rows: number + cwd: string + env: Record +}): pty.IPty { + const { shell, cols, rows, cwd, env } = params + const shellArgs = getShellArgs(shell) + + return pty.spawn(shell, shellArgs, { + name: "xterm-256color", + cols, + rows, + cwd, + env, + }) +} + +export async function createSession( + params: InternalCreateSessionParams, + onData: (paneId: string, data: string) => void, +): Promise { + const { + paneId, + tabId, + workspaceId, + workspaceName, + workspacePath, + rootPath, + cwd, + cols, + rows, + useFallbackShell = false, + } = params + + const shell = useFallbackShell ? FALLBACK_SHELL : getDefaultShell() + const workingDir = cwd || os.homedir() + const terminalCols = cols || DEFAULT_COLS + const terminalRows = rows || DEFAULT_ROWS + + const env = buildTerminalEnv({ + shell, + paneId, + tabId, + workspaceId, + workspaceName, + workspacePath, + rootPath, + }) + + const ptyProcess = spawnPty({ + shell, + cols: terminalCols, + rows: terminalRows, + cwd: workingDir, + env, + }) + + const session: TerminalSession = { + pty: ptyProcess, + paneId, + workspaceId: workspaceId || "", + cwd: workingDir, + cols: terminalCols, + rows: terminalRows, + lastActive: Date.now(), + isAlive: true, + shell, + startTime: Date.now(), + usedFallback: useFallbackShell, + } + + ptyProcess.onData((data) => { + onData(paneId, data) + }) + + return session +} + +/** + * Set up initial commands to run after shell prompt is ready. + * Commands are only sent for new sessions (not reattachments). + */ +export function setupInitialCommands( + session: TerminalSession, + initialCommands: string[] | undefined, +): void { + if (!initialCommands || initialCommands.length === 0) { + return + } + + const initialCommandString = `${initialCommands.join(" && ")}\n` + + const dataHandler = session.pty.onData(() => { + dataHandler.dispose() + + setTimeout(() => { + if (session.isAlive) { + session.pty.write(initialCommandString) + } + }, 100) + }) +} diff --git a/src/main/lib/terminal/terminal-escape-filter.ts b/src/main/lib/terminal/terminal-escape-filter.ts new file mode 100644 index 00000000..0a4784af --- /dev/null +++ b/src/main/lib/terminal/terminal-escape-filter.ts @@ -0,0 +1,43 @@ +/** + * Terminal escape sequence filter for handling special sequences like clear scrollback. + */ + +// ESC [ 3 J - Clear scrollback buffer (used by Cmd+K / clear command) +const CLEAR_SCROLLBACK_SEQUENCES = [ + "\x1b[3J", // Standard clear scrollback + "\x1b[2J\x1b[3J", // Clear screen + clear scrollback + "\x1b[H\x1b[2J\x1b[3J", // Move cursor home + clear screen + clear scrollback +] + +/** + * Check if the data contains a clear scrollback sequence. + * This is typically sent when user presses Cmd+K or runs 'clear' command. + */ +export function containsClearScrollbackSequence(data: string): boolean { + return CLEAR_SCROLLBACK_SEQUENCES.some((seq) => data.includes(seq)) +} + +/** + * Extract content after the clear scrollback sequence. + * Returns the remaining content that should be kept after the clear. + */ +export function extractContentAfterClear(data: string): string { + // Find the last occurrence of any clear sequence + let lastIndex = -1 + let seqLength = 0 + + for (const seq of CLEAR_SCROLLBACK_SEQUENCES) { + const idx = data.lastIndexOf(seq) + if (idx > lastIndex) { + lastIndex = idx + seqLength = seq.length + } + } + + if (lastIndex === -1) { + return data + } + + // Return everything after the clear sequence + return data.slice(lastIndex + seqLength) +} diff --git a/src/main/lib/terminal/terminal-history/index.ts b/src/main/lib/terminal/terminal-history/index.ts new file mode 100644 index 00000000..aa5d2c38 --- /dev/null +++ b/src/main/lib/terminal/terminal-history/index.ts @@ -0,0 +1,190 @@ +import fs from "node:fs/promises" +import path from "node:path" +import { app } from "electron" + +const MAX_SCROLLBACK_CHARS = 500_000 + +/** + * Get the directory for terminal history files. + */ +function getHistoryDir(): string { + return path.join(app.getPath("userData"), "terminal-history") +} + +/** + * Get the path for a specific terminal's history file. + */ +function getHistoryPath(workspaceId: string, paneId: string): string { + // Sanitize IDs to prevent path traversal + const safeWorkspaceId = workspaceId.replace(/[^a-zA-Z0-9-_]/g, "_") + const safePaneId = paneId.replace(/[^a-zA-Z0-9-_]/g, "_") + return path.join(getHistoryDir(), safeWorkspaceId, `${safePaneId}.txt`) +} + +/** + * Writes terminal output to disk for persistence across app restarts. + */ +export class HistoryWriter { + private workspaceId: string + private paneId: string + private cwd: string + private cols: number + private rows: number + private filePath: string + private buffer: string = "" + private flushTimeout: ReturnType | null = null + private isInitialized = false + + constructor( + workspaceId: string, + paneId: string, + cwd: string, + cols: number, + rows: number + ) { + this.workspaceId = workspaceId + this.paneId = paneId + this.cwd = cwd + this.cols = cols + this.rows = rows + this.filePath = getHistoryPath(workspaceId, paneId) + } + + /** + * Initialize the history file with optional existing scrollback. + */ + async init(existingScrollback?: string): Promise { + try { + // Ensure directory exists + await fs.mkdir(path.dirname(this.filePath), { recursive: true }) + + // Write header and existing scrollback + const header = `# Terminal History\n# Workspace: ${this.workspaceId}\n# Pane: ${this.paneId}\n# CWD: ${this.cwd}\n# Size: ${this.cols}x${this.rows}\n# Created: ${new Date().toISOString()}\n---\n` + + if (existingScrollback) { + await fs.writeFile(this.filePath, header + existingScrollback, "utf-8") + } else { + await fs.writeFile(this.filePath, header, "utf-8") + } + + this.isInitialized = true + } catch (err) { + console.error("[HistoryWriter] Failed to init:", err) + } + } + + /** + * Write data to the history buffer. Flushes to disk periodically. + */ + write(data: string): void { + if (!this.isInitialized) return + + this.buffer += data + + // Schedule flush if not already scheduled + if (this.flushTimeout === null) { + this.flushTimeout = setTimeout(() => this.flush(), 1000) + } + } + + /** + * Flush buffer to disk. + */ + private async flush(): Promise { + if (this.flushTimeout !== null) { + clearTimeout(this.flushTimeout) + this.flushTimeout = null + } + + if (!this.buffer || !this.isInitialized) return + + const dataToWrite = this.buffer + this.buffer = "" + + try { + await fs.appendFile(this.filePath, dataToWrite, "utf-8") + } catch (err) { + console.error("[HistoryWriter] Failed to flush:", err) + } + } + + /** + * Close the history writer, flushing any remaining data. + */ + async close(exitCode?: number): Promise { + await this.flush() + + if (exitCode !== undefined) { + try { + await fs.appendFile( + this.filePath, + `\n---\n# Exited: ${new Date().toISOString()}\n# Exit code: ${exitCode}\n`, + "utf-8" + ) + } catch { + // Ignore + } + } + + this.isInitialized = false + } +} + +/** + * Reads terminal history from disk. + */ +export class HistoryReader { + private workspaceId: string + private paneId: string + private filePath: string + + constructor(workspaceId: string, paneId: string) { + this.workspaceId = workspaceId + this.paneId = paneId + this.filePath = getHistoryPath(workspaceId, paneId) + } + + /** + * Read the scrollback history from disk. + */ + async read(): Promise<{ scrollback: string }> { + try { + const content = await fs.readFile(this.filePath, "utf-8") + + // Remove header (everything before ---\n) + const headerEnd = content.indexOf("---\n") + if (headerEnd === -1) { + return { scrollback: "" } + } + + let scrollback = content.slice(headerEnd + 4) + + // Remove exit footer if present + const exitFooterStart = scrollback.lastIndexOf("\n---\n# Exited:") + if (exitFooterStart !== -1) { + scrollback = scrollback.slice(0, exitFooterStart) + } + + // Limit scrollback size + if (scrollback.length > MAX_SCROLLBACK_CHARS) { + scrollback = scrollback.slice(-MAX_SCROLLBACK_CHARS) + } + + return { scrollback } + } catch (err) { + // File doesn't exist or can't be read + return { scrollback: "" } + } + } + + /** + * Delete the history file. + */ + async cleanup(): Promise { + try { + await fs.unlink(this.filePath) + } catch { + // Ignore - file may not exist + } + } +} diff --git a/src/main/lib/terminal/types.ts b/src/main/lib/terminal/types.ts new file mode 100644 index 00000000..ec8f80d8 --- /dev/null +++ b/src/main/lib/terminal/types.ts @@ -0,0 +1,62 @@ +import type * as pty from "node-pty" + +export interface TerminalSession { + pty: pty.IPty + paneId: string + workspaceId: string + cwd: string + cols: number + rows: number + lastActive: number + serializedState?: string + isAlive: boolean + shell: string + startTime: number + usedFallback: boolean +} + +export interface TerminalDataEvent { + type: "data" + data: string +} + +export interface TerminalExitEvent { + type: "exit" + exitCode: number + signal?: number +} + +export type TerminalEvent = TerminalDataEvent | TerminalExitEvent + +export interface SessionResult { + isNew: boolean + /** Serialized terminal state from xterm's SerializeAddon */ + serializedState: string +} + +export interface CreateSessionParams { + paneId: string + tabId?: string + workspaceId?: string + workspaceName?: string + workspacePath?: string + rootPath?: string + cwd?: string + cols?: number + rows?: number + initialCommands?: string[] +} + +export interface InternalCreateSessionParams extends CreateSessionParams { + useFallbackShell?: boolean +} + +export interface DetectedPort { + port: number + pid: number + processName: string + paneId: string + workspaceId: string + detectedAt: number + address: string +} diff --git a/src/main/lib/trpc/index.ts b/src/main/lib/trpc/index.ts new file mode 100644 index 00000000..178a4182 --- /dev/null +++ b/src/main/lib/trpc/index.ts @@ -0,0 +1,49 @@ +import { initTRPC } from "@trpc/server" +import { BrowserWindow } from "electron" +import superjson from "superjson" + +/** + * Context passed to all tRPC procedures + */ +export interface Context { + getWindow: () => BrowserWindow | null +} + +/** + * Initialize tRPC with context and superjson transformer + */ +const t = initTRPC.context().create({ + transformer: superjson, + errorFormatter({ shape, error }) { + return { + ...shape, + data: { + ...shape.data, + stack: process.env.NODE_ENV === "development" ? error.stack : undefined, + }, + } + }, +}) + +/** + * Export reusable router and procedure helpers + */ +export const router = t.router +export const publicProcedure = t.procedure +export const middleware = t.middleware + +/** + * Middleware to log procedure calls + */ +export const loggerMiddleware = middleware(async ({ path, type, next }) => { + const start = Date.now() + const result = await next() + const duration = Date.now() - start + console.log(`[tRPC] ${type} ${path} - ${duration}ms`) + return result +}) + +/** + * Procedure with logging + */ +export const loggedProcedure = publicProcedure.use(loggerMiddleware) diff --git a/src/main/lib/trpc/routers/chats.ts b/src/main/lib/trpc/routers/chats.ts new file mode 100644 index 00000000..bfb1ff6e --- /dev/null +++ b/src/main/lib/trpc/routers/chats.ts @@ -0,0 +1,783 @@ +import { and, desc, eq, inArray, isNotNull, isNull } from "drizzle-orm" +import simpleGit from "simple-git" +import { z } from "zod" +import { getAuthManager } from "../../../index" +import { + trackPRCreated, + trackWorkspaceArchived, + trackWorkspaceCreated, + trackWorkspaceDeleted, +} from "../../analytics" +import { chats, getDatabase, projects, subChats } from "../../db" +import { + createWorktreeForChat, + fetchGitHubPRStatus, + getWorktreeDiff, + removeWorktree, +} from "../../git" +import { execWithShellEnv } from "../../git/shell-env" +import { applyRollbackStash } from "../../git/stash" +import { publicProcedure, router } from "../index" + +// Fallback to truncated user message if AI generation fails +function getFallbackName(userMessage: string): string { + const trimmed = userMessage.trim() + if (trimmed.length <= 25) { + return trimmed || "New Chat" + } + return trimmed.substring(0, 25) + "..." +} + +export const chatsRouter = router({ + /** + * List all non-archived chats (optionally filter by project) + */ + list: publicProcedure + .input(z.object({ projectId: z.string().optional() })) + .query(({ input }) => { + const db = getDatabase() + const conditions = [isNull(chats.archivedAt)] + if (input.projectId) { + conditions.push(eq(chats.projectId, input.projectId)) + } + return db + .select() + .from(chats) + .where(and(...conditions)) + .orderBy(desc(chats.updatedAt)) + .all() + }), + + /** + * List archived chats (optionally filter by project) + */ + listArchived: publicProcedure + .input(z.object({ projectId: z.string().optional() })) + .query(({ input }) => { + const db = getDatabase() + const conditions = [isNotNull(chats.archivedAt)] + if (input.projectId) { + conditions.push(eq(chats.projectId, input.projectId)) + } + return db + .select() + .from(chats) + .where(and(...conditions)) + .orderBy(desc(chats.archivedAt)) + .all() + }), + + /** + * Get a single chat with all sub-chats + */ + get: publicProcedure + .input(z.object({ id: z.string() })) + .query(({ input }) => { + const db = getDatabase() + const chat = db.select().from(chats).where(eq(chats.id, input.id)).get() + if (!chat) return null + + const chatSubChats = db + .select() + .from(subChats) + .where(eq(subChats.chatId, input.id)) + .orderBy(subChats.createdAt) + .all() + + const project = db + .select() + .from(projects) + .where(eq(projects.id, chat.projectId)) + .get() + + return { ...chat, subChats: chatSubChats, project } + }), + + /** + * Create a new chat with optional git worktree + */ + create: publicProcedure + .input( + z.object({ + projectId: z.string(), + name: z.string().optional(), + initialMessage: z.string().optional(), + initialMessageParts: z + .array( + z.union([ + z.object({ type: z.literal("text"), text: z.string() }), + z.object({ + type: z.literal("data-image"), + data: z.object({ + url: z.string(), + mediaType: z.string().optional(), + filename: z.string().optional(), + base64Data: z.string().optional(), + }), + }), + ]), + ) + .optional(), + baseBranch: z.string().optional(), // Branch to base the worktree off + useWorktree: z.boolean().default(true), // If false, work directly in project dir + mode: z.enum(["plan", "agent"]).default("agent"), + }), + ) + .mutation(async ({ input }) => { + console.log("[chats.create] called with:", input) + const db = getDatabase() + + // Get project path + const project = db + .select() + .from(projects) + .where(eq(projects.id, input.projectId)) + .get() + console.log("[chats.create] found project:", project) + if (!project) throw new Error("Project not found") + + // Create chat (fast path) + const chat = db + .insert(chats) + .values({ name: input.name, projectId: input.projectId }) + .returning() + .get() + console.log("[chats.create] created chat:", chat) + + // Create initial sub-chat with user message (AI SDK format) + // If initialMessageParts is provided, use it; otherwise fallback to text-only message + let initialMessages = "[]" + + if (input.initialMessageParts && input.initialMessageParts.length > 0) { + initialMessages = JSON.stringify([ + { + id: `msg-${Date.now()}`, + role: "user", + parts: input.initialMessageParts, + }, + ]) + } else if (input.initialMessage) { + initialMessages = JSON.stringify([ + { + id: `msg-${Date.now()}`, + role: "user", + parts: [{ type: "text", text: input.initialMessage }], + }, + ]) + } + + const subChat = db + .insert(subChats) + .values({ + chatId: chat.id, + mode: input.mode, + messages: initialMessages, + }) + .returning() + .get() + console.log("[chats.create] created subChat:", subChat) + + // Worktree creation result (will be set if useWorktree is true) + let worktreeResult: { + worktreePath?: string + branch?: string + baseBranch?: string + } = {} + + // Only create worktree if useWorktree is true + if (input.useWorktree) { + console.log( + "[chats.create] creating worktree with baseBranch:", + input.baseBranch, + ) + const result = await createWorktreeForChat( + project.path, + project.id, + chat.id, + input.baseBranch, + ) + console.log("[chats.create] worktree result:", result) + + if (result.success && result.worktreePath) { + db.update(chats) + .set({ + worktreePath: result.worktreePath, + branch: result.branch, + baseBranch: result.baseBranch, + }) + .where(eq(chats.id, chat.id)) + .run() + worktreeResult = { + worktreePath: result.worktreePath, + branch: result.branch, + baseBranch: result.baseBranch, + } + } else { + console.warn(`[Worktree] Failed: ${result.error}`) + // Fallback to project path + db.update(chats) + .set({ worktreePath: project.path }) + .where(eq(chats.id, chat.id)) + .run() + worktreeResult = { worktreePath: project.path } + } + } else { + // Local mode: use project path directly, no branch info + console.log("[chats.create] local mode - using project path directly") + db.update(chats) + .set({ worktreePath: project.path }) + .where(eq(chats.id, chat.id)) + .run() + worktreeResult = { worktreePath: project.path } + } + + const response = { + ...chat, + worktreePath: worktreeResult.worktreePath || project.path, + branch: worktreeResult.branch, + baseBranch: worktreeResult.baseBranch, + subChats: [subChat], + } + + // Track workspace created + trackWorkspaceCreated({ + id: chat.id, + projectId: input.projectId, + useWorktree: input.useWorktree, + }) + + console.log("[chats.create] returning:", response) + return response + }), + + /** + * Rename a chat + */ + rename: publicProcedure + .input(z.object({ id: z.string(), name: z.string().min(1) })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(chats) + .set({ name: input.name, updatedAt: new Date() }) + .where(eq(chats.id, input.id)) + .returning() + .get() + }), + + /** + * Archive a chat + */ + archive: publicProcedure + .input(z.object({ id: z.string() })) + .mutation(({ input }) => { + const db = getDatabase() + const result = db + .update(chats) + .set({ archivedAt: new Date() }) + .where(eq(chats.id, input.id)) + .returning() + .get() + + // Track workspace archived + trackWorkspaceArchived(input.id) + + return result + }), + + /** + * Restore an archived chat + */ + restore: publicProcedure + .input(z.object({ id: z.string() })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(chats) + .set({ archivedAt: null }) + .where(eq(chats.id, input.id)) + .returning() + .get() + }), + + /** + * Archive multiple chats at once + */ + archiveBatch: publicProcedure + .input(z.object({ chatIds: z.array(z.string()) })) + .mutation(({ input }) => { + const db = getDatabase() + if (input.chatIds.length === 0) return [] + return db + .update(chats) + .set({ archivedAt: new Date() }) + .where(inArray(chats.id, input.chatIds)) + .returning() + .all() + }), + + /** + * Delete a chat permanently (with worktree cleanup) + */ + delete: publicProcedure + .input(z.object({ id: z.string() })) + .mutation(async ({ input }) => { + const db = getDatabase() + + // Get chat before deletion + const chat = db.select().from(chats).where(eq(chats.id, input.id)).get() + + // Cleanup worktree if it was created (has branch = was a real worktree, not just project path) + if (chat?.worktreePath && chat?.branch) { + const project = db + .select() + .from(projects) + .where(eq(projects.id, chat.projectId)) + .get() + if (project) { + const result = await removeWorktree(project.path, chat.worktreePath) + if (!result.success) { + console.warn(`[Worktree] Cleanup failed: ${result.error}`) + } + } + } + + // Track workspace deleted + trackWorkspaceDeleted(input.id) + + return db.delete(chats).where(eq(chats.id, input.id)).returning().get() + }), + + // ============ Sub-chat procedures ============ + + /** + * Get a single sub-chat + */ + getSubChat: publicProcedure + .input(z.object({ id: z.string() })) + .query(({ input }) => { + const db = getDatabase() + const subChat = db + .select() + .from(subChats) + .where(eq(subChats.id, input.id)) + .get() + + if (!subChat) return null + + const chat = db + .select() + .from(chats) + .where(eq(chats.id, subChat.chatId)) + .get() + + const project = chat + ? db + .select() + .from(projects) + .where(eq(projects.id, chat.projectId)) + .get() + : null + + return { ...subChat, chat: chat ? { ...chat, project } : null } + }), + + /** + * Create a new sub-chat + */ + createSubChat: publicProcedure + .input( + z.object({ + chatId: z.string(), + name: z.string().optional(), + mode: z.enum(["plan", "agent"]).default("agent"), + }), + ) + .mutation(({ input }) => { + const db = getDatabase() + return db + .insert(subChats) + .values({ + chatId: input.chatId, + name: input.name, + mode: input.mode, + messages: "[]", + }) + .returning() + .get() + }), + + /** + * Update sub-chat messages + */ + updateSubChatMessages: publicProcedure + .input(z.object({ id: z.string(), messages: z.string() })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(subChats) + .set({ messages: input.messages, updatedAt: new Date() }) + .where(eq(subChats.id, input.id)) + .returning() + .get() + }), + + /** + * Rollback to a specific message by sdkMessageUuid + * Handles both git state rollback and message truncation + * Git rollback is done first - if it fails, the whole operation aborts + */ + rollbackToMessage: publicProcedure + .input( + z.object({ + subChatId: z.string(), + sdkMessageUuid: z.string(), + }), + ) + .mutation(async ({ input }): Promise< + | { success: false; error: string } + | { success: true; messages: any[] } + > => { + const db = getDatabase() + + // 1. Get the sub-chat and its messages + const subChat = db + .select() + .from(subChats) + .where(eq(subChats.id, input.subChatId)) + .get() + if (!subChat) { + return { success: false, error: "Sub-chat not found" } + } + + // 2. Parse messages and find the target message by sdkMessageUuid + const messages = JSON.parse(subChat.messages || "[]") + const targetIndex = messages.findIndex( + (m: any) => m.metadata?.sdkMessageUuid === input.sdkMessageUuid, + ) + + if (targetIndex === -1) { + return { success: false, error: "Message not found" } + } + + // 3. Get the parent chat for worktreePath + const chat = db + .select() + .from(chats) + .where(eq(chats.id, subChat.chatId)) + .get() + + // 4. Rollback git state first - if this fails, abort the whole operation + if (chat?.worktreePath) { + const res = await applyRollbackStash(chat.worktreePath, input.sdkMessageUuid) + if (!res) { + return { success: false, error: `Git rollback failed` } + } + } + + // 5. Truncate messages to include up to and including the target message + const truncatedMessages = messages.slice(0, targetIndex + 1) + + // 6. Update the sub-chat with truncated messages + db.update(subChats) + .set({ + messages: JSON.stringify(truncatedMessages), + updatedAt: new Date(), + }) + .where(eq(subChats.id, input.subChatId)) + .returning() + .get() + + return { + success: true, + messages: truncatedMessages, + } + }), + + /** + * Update sub-chat session ID (for Claude resume) + */ + updateSubChatSession: publicProcedure + .input(z.object({ id: z.string(), sessionId: z.string().nullable() })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(subChats) + .set({ sessionId: input.sessionId }) + .where(eq(subChats.id, input.id)) + .returning() + .get() + }), + + /** + * Update sub-chat mode + */ + updateSubChatMode: publicProcedure + .input(z.object({ id: z.string(), mode: z.enum(["plan", "agent"]) })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(subChats) + .set({ mode: input.mode }) + .where(eq(subChats.id, input.id)) + .returning() + .get() + }), + + /** + * Rename a sub-chat + */ + renameSubChat: publicProcedure + .input(z.object({ id: z.string(), name: z.string().min(1) })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(subChats) + .set({ name: input.name }) + .where(eq(subChats.id, input.id)) + .returning() + .get() + }), + + /** + * Delete a sub-chat + */ + deleteSubChat: publicProcedure + .input(z.object({ id: z.string() })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .delete(subChats) + .where(eq(subChats.id, input.id)) + .returning() + .get() + }), + + /** + * Get git diff for a chat's worktree + */ + getDiff: publicProcedure + .input(z.object({ chatId: z.string() })) + .query(async ({ input }) => { + const db = getDatabase() + const chat = db + .select() + .from(chats) + .where(eq(chats.id, input.chatId)) + .get() + + if (!chat?.worktreePath) { + return { diff: null, error: "No worktree path" } + } + + const result = await getWorktreeDiff( + chat.worktreePath, + chat.baseBranch ?? undefined, + ) + + if (!result.success) { + return { diff: null, error: result.error } + } + + return { diff: result.diff || "" } + }), + + /** + * Generate a name for a sub-chat using AI (calls web API) + * Always uses production API since it's a lightweight call + */ + generateSubChatName: publicProcedure + .input(z.object({ userMessage: z.string() })) + .mutation(async ({ input }) => { + try { + const authManager = getAuthManager() + const token = await authManager.getValidToken() + // Always use production API for name generation + const apiUrl = "https://21st.dev" + + console.log( + "[generateSubChatName] Calling API with token:", + token ? "present" : "missing", + ) + console.log( + "[generateSubChatName] URL:", + `${apiUrl}/api/agents/sub-chat/generate-name`, + ) + + const response = await fetch( + `${apiUrl}/api/agents/sub-chat/generate-name`, + { + method: "POST", + headers: { + "Content-Type": "application/json", + ...(token && { "X-Desktop-Token": token }), + }, + body: JSON.stringify({ userMessage: input.userMessage }), + }, + ) + + console.log("[generateSubChatName] Response status:", response.status) + + if (!response.ok) { + const errorText = await response.text() + console.error( + "[generateSubChatName] API error:", + response.status, + errorText, + ) + return { name: getFallbackName(input.userMessage) } + } + + const data = await response.json() + console.log("[generateSubChatName] Generated name:", data.name) + return { name: data.name || getFallbackName(input.userMessage) } + } catch (error) { + console.error("[generateSubChatName] Error:", error) + return { name: getFallbackName(input.userMessage) } + } + }), + + // ============ PR-related procedures ============ + + /** + * Get PR context for message generation (branch info, uncommitted changes, etc.) + */ + getPrContext: publicProcedure + .input(z.object({ chatId: z.string() })) + .query(async ({ input }) => { + const db = getDatabase() + const chat = db + .select() + .from(chats) + .where(eq(chats.id, input.chatId)) + .get() + + if (!chat?.worktreePath) { + return null + } + + try { + const git = simpleGit(chat.worktreePath) + const status = await git.status() + + // Check if upstream exists + let hasUpstream = false + try { + const tracking = await git.raw([ + "rev-parse", + "--abbrev-ref", + "@{upstream}", + ]) + hasUpstream = !!tracking.trim() + } catch { + hasUpstream = false + } + + return { + branch: chat.branch || status.current || "unknown", + baseBranch: chat.baseBranch || "main", + uncommittedCount: status.files.length, + hasUpstream, + } + } catch (error) { + console.error("[getPrContext] Error:", error) + return null + } + }), + + /** + * Update PR info after Claude creates a PR + */ + updatePrInfo: publicProcedure + .input( + z.object({ + chatId: z.string(), + prUrl: z.string(), + prNumber: z.number(), + }), + ) + .mutation(async ({ input }) => { + const db = getDatabase() + const result = db + .update(chats) + .set({ + prUrl: input.prUrl, + prNumber: input.prNumber, + updatedAt: new Date(), + }) + .where(eq(chats.id, input.chatId)) + .returning() + .get() + + // Track PR created + trackPRCreated({ + workspaceId: input.chatId, + prNumber: input.prNumber, + }) + + return result + }), + + /** + * Get PR status from GitHub (via gh CLI) + */ + getPrStatus: publicProcedure + .input(z.object({ chatId: z.string() })) + .query(async ({ input }) => { + const db = getDatabase() + const chat = db + .select() + .from(chats) + .where(eq(chats.id, input.chatId)) + .get() + + if (!chat?.worktreePath) { + return null + } + + return await fetchGitHubPRStatus(chat.worktreePath) + }), + + /** + * Merge PR via gh CLI + */ + mergePr: publicProcedure + .input( + z.object({ + chatId: z.string(), + method: z.enum(["merge", "squash", "rebase"]).default("squash"), + }), + ) + .mutation(async ({ input }) => { + const db = getDatabase() + const chat = db + .select() + .from(chats) + .where(eq(chats.id, input.chatId)) + .get() + + if (!chat?.worktreePath || !chat?.prNumber) { + throw new Error("No PR to merge") + } + + try { + await execWithShellEnv( + "gh", + [ + "pr", + "merge", + String(chat.prNumber), + `--${input.method}`, + "--delete-branch", + ], + { cwd: chat.worktreePath }, + ) + return { success: true } + } catch (error) { + console.error("[mergePr] Error:", error) + throw new Error( + error instanceof Error ? error.message : "Failed to merge PR", + ) + } + }), +}) diff --git a/src/main/lib/trpc/routers/claude-code.ts b/src/main/lib/trpc/routers/claude-code.ts new file mode 100644 index 00000000..3846fd7c --- /dev/null +++ b/src/main/lib/trpc/routers/claude-code.ts @@ -0,0 +1,251 @@ +import { z } from "zod" +import { shell, safeStorage } from "electron" +import { router, publicProcedure } from "../index" +import { getAuthManager } from "../../../index" +import { getApiUrl } from "../../config" +import { getDatabase, claudeCodeCredentials } from "../../db" +import { eq } from "drizzle-orm" + +/** + * Get desktop auth token for server API calls + */ +async function getDesktopToken(): Promise { + const authManager = getAuthManager() + return authManager.getValidToken() +} + +/** + * Encrypt token using Electron's safeStorage + */ +function encryptToken(token: string): string { + if (!safeStorage.isEncryptionAvailable()) { + console.warn("[ClaudeCode] Encryption not available, storing as base64") + return Buffer.from(token).toString("base64") + } + return safeStorage.encryptString(token).toString("base64") +} + +/** + * Decrypt token using Electron's safeStorage + */ +function decryptToken(encrypted: string): string { + if (!safeStorage.isEncryptionAvailable()) { + return Buffer.from(encrypted, "base64").toString("utf-8") + } + const buffer = Buffer.from(encrypted, "base64") + return safeStorage.decryptString(buffer) +} + +/** + * Claude Code OAuth router for desktop + * Uses server only for sandbox creation, stores token locally + */ +export const claudeCodeRouter = router({ + /** + * Check if user has Claude Code connected (local check) + */ + getIntegration: publicProcedure.query(() => { + const db = getDatabase() + const cred = db + .select() + .from(claudeCodeCredentials) + .where(eq(claudeCodeCredentials.id, "default")) + .get() + + return { + isConnected: !!cred?.oauthToken, + connectedAt: cred?.connectedAt?.toISOString() ?? null, + } + }), + + /** + * Start OAuth flow - calls server to create sandbox + */ + startAuth: publicProcedure.mutation(async () => { + const token = await getDesktopToken() + if (!token) { + throw new Error("Not authenticated with 21st.dev") + } + + // Server creates sandbox (has CodeSandbox SDK) + const response = await fetch(`${getApiUrl()}/api/auth/claude-code/start`, { + method: "POST", + headers: { "x-desktop-token": token }, + }) + + if (!response.ok) { + const error = await response.json().catch(() => ({ error: "Unknown error" })) + throw new Error(error.error || `Start auth failed: ${response.status}`) + } + + return (await response.json()) as { + sandboxId: string + sandboxUrl: string + sessionId: string + } + }), + + /** + * Poll for OAuth URL - calls sandbox directly + */ + pollStatus: publicProcedure + .input( + z.object({ + sandboxUrl: z.string(), + sessionId: z.string(), + }) + ) + .query(async ({ input }) => { + try { + const response = await fetch( + `${input.sandboxUrl}/api/auth/${input.sessionId}/status` + ) + + if (!response.ok) { + return { state: "error" as const, oauthUrl: null, error: "Failed to poll status" } + } + + const data = await response.json() + return { + state: data.state as string, + oauthUrl: data.oauthUrl ?? null, + error: data.error ?? null, + } + } catch (error) { + console.error("[ClaudeCode] Poll status error:", error) + return { state: "error" as const, oauthUrl: null, error: "Connection failed" } + } + }), + + /** + * Submit OAuth code - calls sandbox directly, stores token locally + */ + submitCode: publicProcedure + .input( + z.object({ + sandboxUrl: z.string(), + sessionId: z.string(), + code: z.string().min(1), + }) + ) + .mutation(async ({ input }) => { + // Submit code to sandbox + const codeRes = await fetch( + `${input.sandboxUrl}/api/auth/${input.sessionId}/code`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ code: input.code }), + } + ) + + if (!codeRes.ok) { + throw new Error(`Code submission failed: ${codeRes.statusText}`) + } + + // Poll for OAuth token (max 10 seconds) + let oauthToken: string | null = null + + for (let i = 0; i < 10; i++) { + await new Promise((r) => setTimeout(r, 1000)) + + const statusRes = await fetch( + `${input.sandboxUrl}/api/auth/${input.sessionId}/status` + ) + + if (!statusRes.ok) continue + + const status = await statusRes.json() + + if (status.state === "success" && status.oauthToken) { + oauthToken = status.oauthToken + break + } + + if (status.state === "error") { + throw new Error(status.error || "Authentication failed") + } + } + + if (!oauthToken) { + throw new Error("Timeout waiting for OAuth token") + } + + // Validate token format + if (!oauthToken.startsWith("sk-ant-oat01-")) { + throw new Error("Invalid OAuth token format") + } + + // Get user ID for reference + const authManager = getAuthManager() + const user = authManager.getUser() + + // Encrypt and store locally + const encryptedToken = encryptToken(oauthToken) + const db = getDatabase() + + // Upsert - delete existing and insert new + db.delete(claudeCodeCredentials) + .where(eq(claudeCodeCredentials.id, "default")) + .run() + + db.insert(claudeCodeCredentials) + .values({ + id: "default", + oauthToken: encryptedToken, + connectedAt: new Date(), + userId: user?.id ?? null, + }) + .run() + + console.log("[ClaudeCode] Token stored locally") + return { success: true } + }), + + /** + * Get decrypted OAuth token (local) + */ + getToken: publicProcedure.query(() => { + const db = getDatabase() + const cred = db + .select() + .from(claudeCodeCredentials) + .where(eq(claudeCodeCredentials.id, "default")) + .get() + + if (!cred?.oauthToken) { + return { token: null, error: "Not connected" } + } + + try { + const token = decryptToken(cred.oauthToken) + return { token, error: null } + } catch (error) { + console.error("[ClaudeCode] Decrypt error:", error) + return { token: null, error: "Failed to decrypt token" } + } + }), + + /** + * Disconnect - delete local credentials + */ + disconnect: publicProcedure.mutation(() => { + const db = getDatabase() + db.delete(claudeCodeCredentials) + .where(eq(claudeCodeCredentials.id, "default")) + .run() + + console.log("[ClaudeCode] Disconnected") + return { success: true } + }), + + /** + * Open OAuth URL in browser + */ + openOAuthUrl: publicProcedure + .input(z.string()) + .mutation(async ({ input: url }) => { + await shell.openExternal(url) + return { success: true } + }), +}) diff --git a/src/main/lib/trpc/routers/claude.ts b/src/main/lib/trpc/routers/claude.ts new file mode 100644 index 00000000..90ed4a79 --- /dev/null +++ b/src/main/lib/trpc/routers/claude.ts @@ -0,0 +1,894 @@ +import { observable } from "@trpc/server/observable" +import { eq } from "drizzle-orm" +import { app, safeStorage } from "electron" +import path from "path" +import { z } from "zod" +import { + buildClaudeEnv, + createTransformer, + getBundledClaudeBinaryPath, + logClaudeEnv, + logRawClaudeMessage, + type UIMessageChunk, +} from "../../claude" +import { chats, claudeCodeCredentials, getDatabase, subChats } from "../../db" +import { createRollbackStash } from "../../git/stash" +import { publicProcedure, router } from "../index" + +/** + * Decrypt token using Electron's safeStorage + */ +function decryptToken(encrypted: string): string { + if (!safeStorage.isEncryptionAvailable()) { + return Buffer.from(encrypted, "base64").toString("utf-8") + } + const buffer = Buffer.from(encrypted, "base64") + return safeStorage.decryptString(buffer) +} + +/** + * Get Claude Code OAuth token from local SQLite + * Returns null if not connected + */ +function getClaudeCodeToken(): string | null { + try { + const db = getDatabase() + const cred = db + .select() + .from(claudeCodeCredentials) + .where(eq(claudeCodeCredentials.id, "default")) + .get() + + if (!cred?.oauthToken) { + console.log("[claude] No Claude Code credentials found") + return null + } + + return decryptToken(cred.oauthToken) + } catch (error) { + console.error("[claude] Error getting Claude Code token:", error) + return null + } +} + +// Dynamic import for ESM module +const getClaudeQuery = async () => { + const sdk = await import("@anthropic-ai/claude-agent-sdk") + return sdk.query +} + +// Active sessions for cancellation (onAbort handles stash + abort + restore) +// Active sessions for cancellation +const activeSessions = new Map() +const pendingToolApprovals = new Map< + string, + { + subChatId: string + resolve: (decision: { + approved: boolean + message?: string + updatedInput?: unknown + }) => void + } +>() + +const PLAN_MODE_BLOCKED_TOOLS = new Set([ + "Bash", + "NotebookEdit", +]) + +const clearPendingApprovals = (message: string, subChatId?: string) => { + for (const [toolUseId, pending] of pendingToolApprovals) { + if (subChatId && pending.subChatId !== subChatId) continue + pending.resolve({ approved: false, message }) + pendingToolApprovals.delete(toolUseId) + } +} + +// Image attachment schema +const imageAttachmentSchema = z.object({ + base64Data: z.string(), + mediaType: z.string(), // e.g. "image/png", "image/jpeg" + filename: z.string().optional(), +}) + +export type ImageAttachment = z.infer + +export const claudeRouter = router({ + /** + * Stream chat with Claude - single subscription handles everything + */ + chat: publicProcedure + .input( + z.object({ + subChatId: z.string(), + chatId: z.string(), + prompt: z.string(), + cwd: z.string(), + mode: z.enum(["plan", "agent"]).default("agent"), + sessionId: z.string().optional(), + model: z.string().optional(), + maxThinkingTokens: z.number().optional(), // Enable extended thinking + images: z.array(imageAttachmentSchema).optional(), // Image attachments + }), + ) + .subscription(({ input }) => { + return observable((emit) => { + const abortController = new AbortController() + const streamId = crypto.randomUUID() + activeSessions.set(input.subChatId, abortController) + + // Stream debug logging + const subId = input.subChatId.slice(-8) // Short ID for logs + const streamStart = Date.now() + let chunkCount = 0 + let lastChunkType = "" + // Shared sessionId for cleanup to save on abort + let currentSessionId: string | null = null + console.log(`[SD] M:START sub=${subId} stream=${streamId.slice(-8)} mode=${input.mode}`) + + // Track if observable is still active (not unsubscribed) + let isObservableActive = true + + // Helper to safely emit (no-op if already unsubscribed) + const safeEmit = (chunk: UIMessageChunk) => { + if (!isObservableActive) return false + try { + emit.next(chunk) + return true + } catch { + isObservableActive = false + return false + } + } + + // Helper to safely complete (no-op if already closed) + const safeComplete = () => { + try { + emit.complete() + } catch { + // Already completed or closed + } + } + + // Helper to emit error to frontend + const emitError = (error: unknown, context: string) => { + const errorMessage = + error instanceof Error ? error.message : String(error) + const errorStack = error instanceof Error ? error.stack : undefined + + console.error(`[claude] ${context}:`, errorMessage) + if (errorStack) console.error("[claude] Stack:", errorStack) + + // Send detailed error to frontend (safely) + safeEmit({ + type: "error", + errorText: `${context}: ${errorMessage}`, + // Include extra debug info + ...(process.env.NODE_ENV !== "production" && { + debugInfo: { + context, + cwd: input.cwd, + mode: input.mode, + PATH: process.env.PATH?.slice(0, 200), + }, + }), + } as UIMessageChunk) + } + + ;(async () => { + try { + const db = getDatabase() + + // 1. Get existing messages from DB + const existing = db + .select() + .from(subChats) + .where(eq(subChats.id, input.subChatId)) + .get() + const existingMessages = JSON.parse(existing?.messages || "[]") + const existingSessionId = existing?.sessionId || null + + // Get resumeSessionAt UUID from the last assistant message (for rollback) + const lastAssistantMsg = [...existingMessages].reverse().find( + (m: any) => m.role === "assistant" + ) + const resumeAtUuid = lastAssistantMsg?.metadata?.sdkMessageUuid || null + + // Check if last message is already this user message (avoid duplicate) + const lastMsg = existingMessages[existingMessages.length - 1] + const isDuplicate = + lastMsg?.role === "user" && + lastMsg?.parts?.[0]?.text === input.prompt + + // 2. Create user message and save BEFORE streaming (skip if duplicate) + let userMessage: any + let messagesToSave: any[] + + if (isDuplicate) { + userMessage = lastMsg + messagesToSave = existingMessages + } else { + userMessage = { + id: crypto.randomUUID(), + role: "user", + parts: [{ type: "text", text: input.prompt }], + } + messagesToSave = [...existingMessages, userMessage] + + db.update(subChats) + .set({ + messages: JSON.stringify(messagesToSave), + streamId, + updatedAt: new Date(), + }) + .where(eq(subChats.id, input.subChatId)) + .run() + } + + // 3. Get Claude SDK + let claudeQuery + try { + claudeQuery = await getClaudeQuery() + } catch (sdkError) { + emitError(sdkError, "Failed to load Claude SDK") + console.log(`[SD] M:END sub=${subId} reason=sdk_load_error n=${chunkCount}`) + safeEmit({ type: "finish" } as UIMessageChunk) + safeComplete() + return + } + + const transform = createTransformer() + + // 4. Setup accumulation state + const parts: any[] = [] + let currentText = "" + let metadata: any = {} + + // Capture stderr from Claude process for debugging + const stderrLines: string[] = [] + + // Build prompt: if there are images, create an AsyncIterable + // Otherwise use simple string prompt + let prompt: string | AsyncIterable = input.prompt + + if (input.images && input.images.length > 0) { + // Create message content array with images first, then text + const messageContent: any[] = [ + ...input.images.map((img) => ({ + type: "image" as const, + source: { + type: "base64" as const, + media_type: img.mediaType, + data: img.base64Data, + }, + })), + ] + + // Add text if present + if (input.prompt.trim()) { + messageContent.push({ + type: "text" as const, + text: input.prompt, + }) + } + + // Create an async generator that yields a single SDKUserMessage + async function* createPromptWithImages() { + yield { + type: "user" as const, + message: { + role: "user" as const, + content: messageContent, + }, + parent_tool_use_id: null, + } + } + + prompt = createPromptWithImages() + } + + // Build full environment for Claude SDK (includes HOME, PATH, etc.) + const claudeEnv = buildClaudeEnv() + + // Debug logging in dev + if (process.env.NODE_ENV !== "production") { + logClaudeEnv(claudeEnv, `[${input.subChatId}] `) + } + + // Get Claude Code OAuth token from local storage (optional) + const claudeCodeToken = getClaudeCodeToken() + + // Create isolated config directory per subChat to prevent session contamination + // The Claude binary stores sessions in ~/.claude/ based on cwd, which causes + // cross-chat contamination when multiple chats use the same project folder + const isolatedConfigDir = path.join( + app.getPath("userData"), + "claude-sessions", + input.subChatId + ) + + // Build final env - only add OAuth token if we have one + const finalEnv = { + ...claudeEnv, + ...(claudeCodeToken && { + CLAUDE_CODE_OAUTH_TOKEN: claudeCodeToken, + }), + // Isolate Claude's config/session storage per subChat + CLAUDE_CONFIG_DIR: isolatedConfigDir, + } + + // Get bundled Claude binary path + const claudeBinaryPath = getBundledClaudeBinaryPath() + + const resumeSessionId = input.sessionId || existingSessionId || undefined + const queryOptions = { + prompt, + options: { + abortController, // Must be inside options! + cwd: input.cwd, + systemPrompt: { + type: "preset" as const, + preset: "claude_code" as const, + append: " ", + }, + env: finalEnv, + permissionMode: + input.mode === "plan" + ? ("plan" as const) + : ("bypassPermissions" as const), + ...(input.mode !== "plan" && { + allowDangerouslySkipPermissions: true, + }), + includePartialMessages: true, + // Load skills from project and user directories (native Claude Code skills) + settingSources: ["project" as const, "user" as const], + canUseTool: async ( + toolName: string, + toolInput: Record, + options: { toolUseID: string }, + ) => { + if (input.mode === "plan") { + if (toolName === "Edit" || toolName === "Write") { + const filePath = + typeof toolInput.file_path === "string" + ? toolInput.file_path + : "" + if (!/\.md$/i.test(filePath)) { + return { + behavior: "deny", + message: + 'Only ".md" files can be modified in plan mode.', + } + } + } else if (PLAN_MODE_BLOCKED_TOOLS.has(toolName)) { + return { + behavior: "deny", + message: `Tool "${toolName}" blocked in plan mode.`, + } + } + } + if (toolName === "AskUserQuestion") { + const { toolUseID } = options + // Emit to UI (safely in case observer is closed) + safeEmit({ + type: "ask-user-question", + toolUseId: toolUseID, + questions: (toolInput as any).questions, + } as UIMessageChunk) + + // Wait for response (60s timeout) + const response = await new Promise<{ + approved: boolean + message?: string + updatedInput?: unknown + }>((resolve) => { + const timeoutId = setTimeout(() => { + pendingToolApprovals.delete(toolUseID) + resolve({ approved: false, message: "Timed out" }) + }, 60000) + + pendingToolApprovals.set(toolUseID, { + subChatId: input.subChatId, + resolve: (d) => { + clearTimeout(timeoutId) + resolve(d) + }, + }) + }) + + if (!response.approved) { + return { + behavior: "deny", + message: response.message || "Skipped", + } + } + return { + behavior: "allow", + updatedInput: response.updatedInput, + } + } + return { + behavior: "allow", + updatedInput: toolInput, + } + }, + stderr: (data: string) => { + stderrLines.push(data) + console.error("[claude stderr]", data) + }, + // Use bundled binary + pathToClaudeCodeExecutable: claudeBinaryPath, + ...(resumeSessionId && { + resume: resumeSessionId, + continue: true, + }), + ...(input.model && { model: input.model }), + // fallbackModel: "claude-opus-4-5-20251101", + ...(input.maxThinkingTokens && { + maxThinkingTokens: input.maxThinkingTokens, + }), + // Rollback support - resume at specific message UUID (from DB) + ...(resumeAtUuid && { + resumeSessionAt: resumeAtUuid, + }), + }, + } + + // 5. Run Claude SDK + let stream + try { + stream = claudeQuery(queryOptions) + } catch (queryError) { + console.error( + "[CLAUDE] ✗ Failed to create SDK query:", + queryError, + ) + emitError(queryError, "Failed to start Claude query") + console.log(`[SD] M:END sub=${subId} reason=query_error n=${chunkCount}`) + safeEmit({ type: "finish" } as UIMessageChunk) + safeComplete() + return + } + + let messageCount = 0 + let lastError: Error | null = null + let planCompleted = false // Flag to stop after ExitPlanMode in plan mode + let exitPlanModeToolCallId: string | null = null // Track ExitPlanMode's toolCallId + + try { + for await (const msg of stream) { + if (abortController.signal.aborted) break + + messageCount++ + + // Log raw message for debugging + logRawClaudeMessage(input.chatId, msg) + + // Check for error messages from SDK (error can be embedded in message payload!) + const msgAny = msg as any + if (msgAny.type === "error" || msgAny.error) { + const sdkError = + msgAny.error || msgAny.message || "Unknown SDK error" + lastError = new Error(sdkError) + + // Categorize SDK-level errors + let errorCategory = "SDK_ERROR" + let errorContext = "Claude SDK error" + + if ( + sdkError === "authentication_failed" || + sdkError.includes("authentication") + ) { + errorCategory = "AUTH_FAILED_SDK" + errorContext = + "Authentication failed - not logged into Claude Code CLI" + } else if ( + sdkError === "invalid_api_key" || + sdkError.includes("api_key") + ) { + errorCategory = "INVALID_API_KEY_SDK" + errorContext = "Invalid API key in Claude Code CLI" + } else if ( + sdkError === "rate_limit_exceeded" || + sdkError.includes("rate") + ) { + errorCategory = "RATE_LIMIT_SDK" + errorContext = "Rate limit exceeded" + } else if ( + sdkError === "overloaded" || + sdkError.includes("overload") + ) { + errorCategory = "OVERLOADED_SDK" + errorContext = "Claude is overloaded, try again later" + } + + // Emit auth-error for authentication failures, regular error otherwise + if (errorCategory === "AUTH_FAILED_SDK") { + safeEmit({ + type: "auth-error", + errorText: errorContext, + } as UIMessageChunk) + } else { + safeEmit({ + type: "error", + errorText: errorContext, + debugInfo: { + category: errorCategory, + sdkError: sdkError, + sessionId: msgAny.session_id, + messageId: msgAny.message?.id, + }, + } as UIMessageChunk) + } + + console.log(`[SD] M:END sub=${subId} reason=sdk_error cat=${errorCategory} n=${chunkCount}`) + safeEmit({ type: "finish" } as UIMessageChunk) + safeComplete() + return + } + + // Track sessionId and uuid for rollback support (available on all messages) + if (msgAny.session_id) { + metadata.sessionId = msgAny.session_id + currentSessionId = msgAny.session_id // Share with cleanup + } + if (msgAny.uuid) { + metadata.sdkMessageUuid = msgAny.uuid + } + + // Transform and emit + accumulate + for (const chunk of transform(msg)) { + chunkCount++ + lastChunkType = chunk.type + + // Use safeEmit to prevent throws when observer is closed + if (!safeEmit(chunk)) { + // Observer closed (user clicked Stop), break out of loop + console.log(`[SD] M:EMIT_CLOSED sub=${subId} type=${chunk.type} n=${chunkCount}`) + break + } + + // Accumulate based on chunk type + switch (chunk.type) { + case "text-delta": + currentText += chunk.delta + break + case "text-end": + if (currentText.trim()) { + parts.push({ type: "text", text: currentText }) + currentText = "" + } + break + case "tool-input-available": + // DEBUG: Log tool calls + console.log(`[SD] M:TOOL_CALL sub=${subId} toolName="${chunk.toolName}" mode=${input.mode} callId=${chunk.toolCallId}`) + + // Track ExitPlanMode toolCallId so we can stop when it completes + if (input.mode === "plan" && chunk.toolName === "ExitPlanMode") { + console.log(`[SD] M:PLAN_TOOL_DETECTED sub=${subId} callId=${chunk.toolCallId}`) + exitPlanModeToolCallId = chunk.toolCallId + } + + parts.push({ + type: `tool-${chunk.toolName}`, + toolCallId: chunk.toolCallId, + toolName: chunk.toolName, + input: chunk.input, + state: "call", + }) + break + case "tool-output-available": + // DEBUG: Log all tool outputs + console.log(`[SD] M:TOOL_OUTPUT sub=${subId} callId=${chunk.toolCallId} mode=${input.mode}`) + + const toolPart = parts.find( + (p) => + p.type?.startsWith("tool-") && + p.toolCallId === chunk.toolCallId, + ) + if (toolPart) { + toolPart.result = chunk.output + toolPart.output = chunk.output // Backwards compatibility for the UI that relies on output field + toolPart.state = "result" + } + // Stop streaming after ExitPlanMode completes in plan mode + // Match by toolCallId since toolName is undefined in output chunks + if (input.mode === "plan" && exitPlanModeToolCallId && chunk.toolCallId === exitPlanModeToolCallId) { + console.log(`[SD] M:PLAN_STOP sub=${subId} callId=${chunk.toolCallId} n=${chunkCount} parts=${parts.length}`) + planCompleted = true + // Emit finish chunk so Chat hook properly resets its state + console.log(`[SD] M:PLAN_FINISH sub=${subId} - emitting finish chunk`) + safeEmit({ type: "finish" } as UIMessageChunk) + // Abort the Claude process so it doesn't keep running + console.log(`[SD] M:PLAN_ABORT sub=${subId} - aborting claude process`) + abortController.abort() + } + break + case "message-metadata": + metadata = { ...metadata, ...chunk.messageMetadata } + break + } + // Break from chunk loop if plan is done + if (planCompleted) { + console.log(`[SD] M:PLAN_BREAK_CHUNK sub=${subId}`) + break + } + } + // Break from stream loop if plan is done + if (planCompleted) { + console.log(`[SD] M:PLAN_BREAK_STREAM sub=${subId}`) + break + } + // Break from stream loop if observer closed (user clicked Stop) + if (!isObservableActive) { + console.log(`[SD] M:OBSERVER_CLOSED_STREAM sub=${subId}`) + break + } + } + } catch (streamError) { + // This catches errors during streaming (like process exit) + const err = streamError as Error + const stderrOutput = stderrLines.join("\n") + + // Build detailed error message with category + let errorContext = "Claude streaming error" + let errorCategory = "UNKNOWN" + + if (err.message?.includes("exited with code")) { + errorContext = "Claude Code process crashed" + errorCategory = "PROCESS_CRASH" + } else if (err.message?.includes("ENOENT")) { + errorContext = "Required executable not found in PATH" + errorCategory = "EXECUTABLE_NOT_FOUND" + } else if ( + err.message?.includes("authentication") || + err.message?.includes("401") + ) { + errorContext = "Authentication failed - check your API key" + errorCategory = "AUTH_FAILURE" + } else if ( + err.message?.includes("invalid_api_key") || + err.message?.includes("Invalid API Key") || + stderrOutput?.includes("invalid_api_key") + ) { + errorContext = "Invalid API key" + errorCategory = "INVALID_API_KEY" + } else if ( + err.message?.includes("rate_limit") || + err.message?.includes("429") + ) { + errorContext = "Rate limit exceeded" + errorCategory = "RATE_LIMIT" + } else if ( + err.message?.includes("network") || + err.message?.includes("ECONNREFUSED") || + err.message?.includes("fetch failed") + ) { + errorContext = "Network error - check your connection" + errorCategory = "NETWORK_ERROR" + } + + // Track error in Sentry (only if app is ready and Sentry is available) + if (app.isReady() && app.isPackaged) { + try { + const Sentry = await import("@sentry/electron/main") + Sentry.captureException(err, { + tags: { + errorCategory, + mode: input.mode, + }, + extra: { + context: errorContext, + cwd: input.cwd, + stderr: stderrOutput || "(no stderr captured)", + chatId: input.chatId, + subChatId: input.subChatId, + }, + }) + } catch { + // Sentry not available or failed to import - ignore + } + } + + // Send error with stderr output to frontend (only if not aborted by user) + if (!abortController.signal.aborted) { + safeEmit({ + type: "error", + errorText: stderrOutput + ? `${errorContext}: ${err.message}\n\nProcess output:\n${stderrOutput}` + : `${errorContext}: ${err.message}`, + debugInfo: { + context: errorContext, + category: errorCategory, + cwd: input.cwd, + mode: input.mode, + stderr: stderrOutput || "(no stderr captured)", + }, + } as UIMessageChunk) + } + + // ALWAYS save accumulated parts before returning (even on abort/error) + console.log(`[SD] M:CATCH_SAVE sub=${subId} aborted=${abortController.signal.aborted} parts=${parts.length}`) + if (currentText.trim()) { + parts.push({ type: "text", text: currentText }) + } + if (parts.length > 0) { + const assistantMessage = { + id: crypto.randomUUID(), + role: "assistant", + parts, + metadata, + } + const finalMessages = [...messagesToSave, assistantMessage] + db.update(subChats) + .set({ + messages: JSON.stringify(finalMessages), + sessionId: metadata.sessionId, + streamId: null, + updatedAt: new Date(), + }) + .where(eq(subChats.id, input.subChatId)) + .run() + db.update(chats) + .set({ updatedAt: new Date() }) + .where(eq(chats.id, input.chatId)) + .run() + + // Create snapshot stash for rollback support (on error) + if (metadata.sdkMessageUuid && input.cwd) { + await createRollbackStash(input.cwd, metadata.sdkMessageUuid) + } + } + + console.log(`[SD] M:END sub=${subId} reason=stream_error cat=${errorCategory} n=${chunkCount} last=${lastChunkType}`) + safeEmit({ type: "finish" } as UIMessageChunk) + safeComplete() + return + } + + // 6. Check if we got any response + if (messageCount === 0 && !abortController.signal.aborted) { + emitError( + new Error("No response received from Claude"), + "Empty response", + ) + console.log(`[SD] M:END sub=${subId} reason=no_response n=${chunkCount}`) + safeEmit({ type: "finish" } as UIMessageChunk) + safeComplete() + return + } + + // 7. Save final messages to DB + // ALWAYS save accumulated parts, even on abort (so user sees partial responses after reload) + console.log(`[SD] M:SAVE sub=${subId} planCompleted=${planCompleted} aborted=${abortController.signal.aborted} parts=${parts.length}`) + + // Flush any remaining text + if (currentText.trim()) { + parts.push({ type: "text", text: currentText }) + } + + if (parts.length > 0) { + const assistantMessage = { + id: crypto.randomUUID(), + role: "assistant", + parts, + metadata, + } + + const finalMessages = [...messagesToSave, assistantMessage] + + db.update(subChats) + .set({ + messages: JSON.stringify(finalMessages), + sessionId: metadata.sessionId, + streamId: null, + updatedAt: new Date(), + }) + .where(eq(subChats.id, input.subChatId)) + .run() + } else { + // No assistant response - just clear streamId + db.update(subChats) + .set({ + sessionId: metadata.sessionId, + streamId: null, + updatedAt: new Date(), + }) + .where(eq(subChats.id, input.subChatId)) + .run() + } + + // Update parent chat timestamp + db.update(chats) + .set({ updatedAt: new Date() }) + .where(eq(chats.id, input.chatId)) + .run() + + // Create snapshot stash for rollback support + if (metadata.sdkMessageUuid && input.cwd) { + await createRollbackStash(input.cwd, metadata.sdkMessageUuid) + } + + const duration = ((Date.now() - streamStart) / 1000).toFixed(1) + const reason = planCompleted ? "plan_complete" : "ok" + console.log(`[SD] M:END sub=${subId} reason=${reason} n=${chunkCount} last=${lastChunkType} t=${duration}s`) + safeComplete() + } catch (error) { + const duration = ((Date.now() - streamStart) / 1000).toFixed(1) + console.log(`[SD] M:END sub=${subId} reason=unexpected_error n=${chunkCount} t=${duration}s`) + emitError(error, "Unexpected error") + safeEmit({ type: "finish" } as UIMessageChunk) + safeComplete() + } finally { + activeSessions.delete(input.subChatId) + } + })() + + // Cleanup on unsubscribe + return () => { + console.log(`[SD] M:CLEANUP sub=${subId} sessionId=${currentSessionId || 'none'}`) + isObservableActive = false // Prevent emit after unsubscribe + abortController.abort() + activeSessions.delete(input.subChatId) + clearPendingApprovals("Session ended.", input.subChatId) + + // Save sessionId on abort so conversation can be resumed + // Clear streamId since we're no longer streaming + const db = getDatabase() + db.update(subChats) + .set({ + streamId: null, + ...(currentSessionId && { sessionId: currentSessionId }) + }) + .where(eq(subChats.id, input.subChatId)) + .run() + } + }) + }), + + /** + * Cancel active session + */ + cancel: publicProcedure + .input(z.object({ subChatId: z.string() })) + .mutation(({ input }) => { + const controller = activeSessions.get(input.subChatId) + if (controller) { + controller.abort() + activeSessions.delete(input.subChatId) + clearPendingApprovals("Session cancelled.", input.subChatId) + return { cancelled: true } + } + return { cancelled: false } + }), + + /** + * Check if session is active + */ + isActive: publicProcedure + .input(z.object({ subChatId: z.string() })) + .query(({ input }) => activeSessions.has(input.subChatId)), + respondToolApproval: publicProcedure + .input( + z.object({ + toolUseId: z.string(), + approved: z.boolean(), + message: z.string().optional(), + updatedInput: z.unknown().optional(), + }), + ) + .mutation(({ input }) => { + const pending = pendingToolApprovals.get(input.toolUseId) + if (!pending) { + return { ok: false } + } + pending.resolve({ + approved: input.approved, + message: input.message, + updatedInput: input.updatedInput, + }) + pendingToolApprovals.delete(input.toolUseId) + return { ok: true } + }), +}) diff --git a/src/main/lib/trpc/routers/debug.ts b/src/main/lib/trpc/routers/debug.ts new file mode 100644 index 00000000..ec16de27 --- /dev/null +++ b/src/main/lib/trpc/routers/debug.ts @@ -0,0 +1,99 @@ +import { router, publicProcedure } from "../index" +import { getDatabase, projects, chats, subChats } from "../../db" +import { app, shell } from "electron" +import { getAuthManager } from "../../../index" + +// Protocol constant (must match main/index.ts) +const IS_DEV = !!process.env.ELECTRON_RENDERER_URL +const PROTOCOL = IS_DEV ? "twentyfirst-agents-dev" : "twentyfirst-agents" + +export const debugRouter = router({ + /** + * Get system information for debug display + */ + getSystemInfo: publicProcedure.query(() => { + // Check protocol registration + let protocolRegistered = false + try { + protocolRegistered = process.defaultApp + ? app.isDefaultProtocolClient( + PROTOCOL, + process.execPath, + [process.argv[1]!], + ) + : app.isDefaultProtocolClient(PROTOCOL) + } catch { + protocolRegistered = false + } + + return { + version: app.getVersion(), + platform: process.platform, + arch: process.arch, + isDev: IS_DEV, + userDataPath: app.getPath("userData"), + protocolRegistered, + } + }), + + /** + * Get database statistics + */ + getDbStats: publicProcedure.query(() => { + const db = getDatabase() + const projectCount = db.select().from(projects).all().length + const chatCount = db.select().from(chats).all().length + const subChatCount = db.select().from(subChats).all().length + + return { + projects: projectCount, + chats: chatCount, + subChats: subChatCount, + } + }), + + /** + * Clear all chats and sub-chats (keeps projects) + */ + clearChats: publicProcedure.mutation(() => { + const db = getDatabase() + // Delete sub_chats first (foreign key constraint) + db.delete(subChats).run() + db.delete(chats).run() + console.log("[Debug] Cleared all chats and sub-chats") + return { success: true } + }), + + /** + * Clear all data (projects, chats, sub-chats) + */ + clearAllData: publicProcedure.mutation(() => { + const db = getDatabase() + // Delete in order due to foreign key constraints + db.delete(subChats).run() + db.delete(chats).run() + db.delete(projects).run() + console.log("[Debug] Cleared all database data") + return { success: true } + }), + + /** + * Logout (clear auth only) + */ + logout: publicProcedure.mutation(() => { + const authManager = getAuthManager() + authManager.logout() + console.log("[Debug] User logged out") + return { success: true } + }), + + /** + * Open userData folder in system file manager + */ + openUserDataFolder: publicProcedure.mutation(() => { + const userDataPath = app.getPath("userData") + shell.openPath(userDataPath) + console.log("[Debug] Opened userData folder:", userDataPath) + return { success: true } + }), +}) diff --git a/src/main/lib/trpc/routers/external.ts b/src/main/lib/trpc/routers/external.ts new file mode 100644 index 00000000..3a7dab70 --- /dev/null +++ b/src/main/lib/trpc/routers/external.ts @@ -0,0 +1,62 @@ +import { shell } from "electron"; +import { spawn } from "node:child_process"; +import { z } from "zod"; +import { publicProcedure, router } from "../index"; + +/** + * External router for shell operations (open in finder, open in editor, etc.) + */ +export const externalRouter = router({ + openInFinder: publicProcedure + .input(z.string()) + .mutation(async ({ input: path }) => { + shell.showItemInFolder(path); + return { success: true }; + }), + + openFileInEditor: publicProcedure + .input( + z.object({ + path: z.string(), + cwd: z.string().optional(), + }), + ) + .mutation(async ({ input }) => { + const { path, cwd } = input; + + // Try common code editors in order of preference + const editors = [ + { cmd: "code", args: [path] }, // VS Code + { cmd: "cursor", args: [path] }, // Cursor + { cmd: "subl", args: [path] }, // Sublime Text + { cmd: "atom", args: [path] }, // Atom + { cmd: "open", args: ["-t", path] }, // macOS default text editor + ]; + + for (const editor of editors) { + try { + const child = spawn(editor.cmd, editor.args, { + cwd: cwd || undefined, + detached: true, + stdio: "ignore", + }); + child.unref(); + return { success: true, editor: editor.cmd }; + } catch { + // Try next editor + continue; + } + } + + // Fallback: use shell.openPath which opens with default app + await shell.openPath(path); + return { success: true, editor: "default" }; + }), + + openExternal: publicProcedure + .input(z.string()) + .mutation(async ({ input: url }) => { + await shell.openExternal(url); + return { success: true }; + }), +}); diff --git a/src/main/lib/trpc/routers/files.ts b/src/main/lib/trpc/routers/files.ts new file mode 100644 index 00000000..fc40757c --- /dev/null +++ b/src/main/lib/trpc/routers/files.ts @@ -0,0 +1,264 @@ +import { z } from "zod" +import { router, publicProcedure } from "../index" +import { readdir, stat } from "node:fs/promises" +import { join, relative, basename } from "node:path" + +// Directories to ignore when scanning +const IGNORED_DIRS = new Set([ + ".git", + "node_modules", + "dist", + "build", + "release", + ".next", + ".nuxt", + ".output", + "coverage", + "__pycache__", + ".venv", + "venv", + ".cache", + ".turbo", + ".vercel", + ".netlify", + "out", + ".svelte-kit", + ".astro", +]) + +// Files to ignore +const IGNORED_FILES = new Set([ + ".DS_Store", + "Thumbs.db", + ".gitkeep", +]) + +// File extensions to ignore +const IGNORED_EXTENSIONS = new Set([ + ".log", + ".lock", // We'll handle package-lock.json separately + ".pyc", + ".pyo", + ".class", + ".o", + ".obj", + ".exe", + ".dll", + ".so", + ".dylib", +]) + +// Lock files to keep (not ignore) +const ALLOWED_LOCK_FILES = new Set([ + "package-lock.json", + "pnpm-lock.yaml", + "yarn.lock", + "bun.lockb", +]) + +// Entry type for files and folders +interface FileEntry { + path: string + type: "file" | "folder" +} + +// Cache for file and folder listings +const fileListCache = new Map() +const CACHE_TTL = 5000 // 5 seconds + +/** + * Recursively scan a directory and return all file and folder paths + */ +async function scanDirectory( + rootPath: string, + currentPath: string = rootPath, + depth: number = 0, + maxDepth: number = 15 +): Promise { + if (depth > maxDepth) return [] + + const entries: FileEntry[] = [] + + try { + const dirEntries = await readdir(currentPath, { withFileTypes: true }) + + for (const entry of dirEntries) { + const fullPath = join(currentPath, entry.name) + const relativePath = relative(rootPath, fullPath) + + if (entry.isDirectory()) { + // Skip ignored directories + if (IGNORED_DIRS.has(entry.name)) continue + // Skip hidden directories (except .github, .vscode, etc.) + if (entry.name.startsWith(".") && !entry.name.startsWith(".github") && !entry.name.startsWith(".vscode")) continue + + // Add the folder itself to results + entries.push({ path: relativePath, type: "folder" }) + + // Recurse into subdirectory + const subEntries = await scanDirectory(rootPath, fullPath, depth + 1, maxDepth) + entries.push(...subEntries) + } else if (entry.isFile()) { + // Skip ignored files + if (IGNORED_FILES.has(entry.name)) continue + + // Check extension + const ext = entry.name.includes(".") ? "." + entry.name.split(".").pop()?.toLowerCase() : "" + if (IGNORED_EXTENSIONS.has(ext)) { + // Allow specific lock files + if (!ALLOWED_LOCK_FILES.has(entry.name)) continue + } + + entries.push({ path: relativePath, type: "file" }) + } + } + } catch (error) { + // Silently skip directories we can't read + console.warn(`[files] Could not read directory: ${currentPath}`, error) + } + + return entries +} + +/** + * Get cached entry list or scan directory + */ +async function getEntryList(projectPath: string): Promise { + const cached = fileListCache.get(projectPath) + const now = Date.now() + + if (cached && now - cached.timestamp < CACHE_TTL) { + return cached.entries + } + + const entries = await scanDirectory(projectPath) + fileListCache.set(projectPath, { entries, timestamp: now }) + + return entries +} + +/** + * Filter and sort entries (files and folders) by query + */ +function filterEntries( + entries: FileEntry[], + query: string, + limit: number +): Array<{ id: string; label: string; path: string; repository: string; type: "file" | "folder" }> { + const queryLower = query.toLowerCase() + + // Filter entries that match the query + let filtered = entries + if (query) { + filtered = entries.filter((entry) => { + const name = basename(entry.path).toLowerCase() + const pathLower = entry.path.toLowerCase() + return name.includes(queryLower) || pathLower.includes(queryLower) + }) + } + + // Sort by relevance (exact match > starts with > shorter match > contains > alphabetical) + // Files and folders are treated equally + filtered.sort((a, b) => { + const aName = basename(a.path).toLowerCase() + const bName = basename(b.path).toLowerCase() + + if (query) { + // Priority 1: Exact name match + const aExact = aName === queryLower + const bExact = bName === queryLower + if (aExact && !bExact) return -1 + if (!aExact && bExact) return 1 + + // Priority 2: Name starts with query + const aStarts = aName.startsWith(queryLower) + const bStarts = bName.startsWith(queryLower) + if (aStarts && !bStarts) return -1 + if (!aStarts && bStarts) return 1 + + // Priority 3: If both start with query, shorter name = better match + if (aStarts && bStarts) { + if (aName.length !== bName.length) { + return aName.length - bName.length + } + } + + // Priority 4: Name contains query (but doesn't start with it) + const aContains = aName.includes(queryLower) + const bContains = bName.includes(queryLower) + if (aContains && !bContains) return -1 + if (!aContains && bContains) return 1 + } + + // Alphabetical by name + return aName.localeCompare(bName) + }) + + // Limit results + const limited = filtered.slice(0, Math.min(limit, 200)) + + // Map to expected format with type + return limited.map((entry) => ({ + id: `${entry.type}:local:${entry.path}`, + label: basename(entry.path), + path: entry.path, + repository: "local", + type: entry.type, + })) +} + +export const filesRouter = router({ + /** + * Search files and folders in a local project directory + */ + search: publicProcedure + .input( + z.object({ + projectPath: z.string(), + query: z.string().default(""), + limit: z.number().min(1).max(200).default(50), + }) + ) + .query(async ({ input }) => { + const { projectPath, query, limit } = input + + if (!projectPath) { + return [] + } + + try { + // Verify the path exists and is a directory + const pathStat = await stat(projectPath) + if (!pathStat.isDirectory()) { + console.warn(`[files] Not a directory: ${projectPath}`) + return [] + } + + // Get entry list (cached or fresh scan) + const entries = await getEntryList(projectPath) + + // Debug: log folder count + const folderCount = entries.filter(e => e.type === "folder").length + const fileCount = entries.filter(e => e.type === "file").length + console.log(`[files] Scanned ${projectPath}: ${folderCount} folders, ${fileCount} files`) + + // Filter and sort by query + const results = filterEntries(entries, query, limit) + console.log(`[files] Query "${query}": returning ${results.length} results, folders: ${results.filter(r => r.type === "folder").length}`) + return results + } catch (error) { + console.error(`[files] Error searching files:`, error) + return [] + } + }), + + /** + * Clear the file cache for a project (useful when files change) + */ + clearCache: publicProcedure + .input(z.object({ projectPath: z.string() })) + .mutation(({ input }) => { + fileListCache.delete(input.projectPath) + return { success: true } + }), +}) diff --git a/src/main/lib/trpc/routers/index.ts b/src/main/lib/trpc/routers/index.ts new file mode 100644 index 00000000..6e2e165e --- /dev/null +++ b/src/main/lib/trpc/routers/index.ts @@ -0,0 +1,37 @@ +import { router } from "../index" +import { projectsRouter } from "./projects" +import { chatsRouter } from "./chats" +import { claudeRouter } from "./claude" +import { claudeCodeRouter } from "./claude-code" +import { terminalRouter } from "./terminal" +import { externalRouter } from "./external" +import { filesRouter } from "./files" +import { debugRouter } from "./debug" +import { skillsRouter } from "./skills" +import { createGitRouter } from "../../git" +import { BrowserWindow } from "electron" + +/** + * Create the main app router + * Uses getter pattern to avoid stale window references + */ +export function createAppRouter(getWindow: () => BrowserWindow | null) { + return router({ + projects: projectsRouter, + chats: chatsRouter, + claude: claudeRouter, + claudeCode: claudeCodeRouter, + terminal: terminalRouter, + external: externalRouter, + files: filesRouter, + debug: debugRouter, + skills: skillsRouter, + // Git operations - named "changes" to match Superset API + changes: createGitRouter(), + }) +} + +/** + * Export the router type for client usage + */ +export type AppRouter = ReturnType diff --git a/src/main/lib/trpc/routers/projects.ts b/src/main/lib/trpc/routers/projects.ts new file mode 100644 index 00000000..0f966824 --- /dev/null +++ b/src/main/lib/trpc/routers/projects.ts @@ -0,0 +1,222 @@ +import { z } from "zod" +import { router, publicProcedure } from "../index" +import { getDatabase, projects } from "../../db" +import { eq, desc } from "drizzle-orm" +import { dialog, BrowserWindow } from "electron" +import { basename } from "path" +import { getGitRemoteInfo } from "../../git" +import { trackProjectOpened } from "../../analytics" + +export const projectsRouter = router({ + /** + * List all projects + */ + list: publicProcedure.query(() => { + const db = getDatabase() + return db.select().from(projects).orderBy(desc(projects.updatedAt)).all() + }), + + /** + * Get a single project by ID + */ + get: publicProcedure + .input(z.object({ id: z.string() })) + .query(({ input }) => { + const db = getDatabase() + return db.select().from(projects).where(eq(projects.id, input.id)).get() + }), + + /** + * Open folder picker and create project + */ + openFolder: publicProcedure.mutation(async ({ ctx }) => { + const window = ctx.getWindow?.() ?? BrowserWindow.getFocusedWindow() + + if (!window) { + console.error("[Projects] No window available for folder dialog") + return null + } + + // Ensure window is focused before showing dialog (fixes first-launch timing issue on macOS) + if (!window.isFocused()) { + console.log("[Projects] Window not focused, focusing before dialog...") + window.focus() + // Small delay to ensure focus is applied by the OS + await new Promise((resolve) => setTimeout(resolve, 100)) + } + + const result = await dialog.showOpenDialog(window, { + properties: ["openDirectory", "createDirectory"], + title: "Select Project Folder", + buttonLabel: "Open Project", + }) + + if (result.canceled || result.filePaths.length === 0) { + return null + } + + const folderPath = result.filePaths[0]! + const folderName = basename(folderPath) + + // Get git remote info + const gitInfo = await getGitRemoteInfo(folderPath) + + const db = getDatabase() + + // Check if project already exists + const existing = db + .select() + .from(projects) + .where(eq(projects.path, folderPath)) + .get() + + if (existing) { + // Update the updatedAt timestamp and git info (in case remote changed) + const updatedProject = db + .update(projects) + .set({ + updatedAt: new Date(), + gitRemoteUrl: gitInfo.remoteUrl, + gitProvider: gitInfo.provider, + gitOwner: gitInfo.owner, + gitRepo: gitInfo.repo, + }) + .where(eq(projects.id, existing.id)) + .returning() + .get() + + // Track project opened + trackProjectOpened({ + id: updatedProject!.id, + hasGitRemote: !!gitInfo.remoteUrl, + }) + + return updatedProject + } + + // Create new project with git info + const newProject = db + .insert(projects) + .values({ + name: folderName, + path: folderPath, + gitRemoteUrl: gitInfo.remoteUrl, + gitProvider: gitInfo.provider, + gitOwner: gitInfo.owner, + gitRepo: gitInfo.repo, + }) + .returning() + .get() + + // Track project opened + trackProjectOpened({ + id: newProject!.id, + hasGitRemote: !!gitInfo.remoteUrl, + }) + + return newProject + }), + + /** + * Create a project from a known path + */ + create: publicProcedure + .input(z.object({ path: z.string(), name: z.string().optional() })) + .mutation(async ({ input }) => { + const db = getDatabase() + const name = input.name || basename(input.path) + + // Check if project already exists + const existing = db + .select() + .from(projects) + .where(eq(projects.path, input.path)) + .get() + + if (existing) { + return existing + } + + // Get git remote info + const gitInfo = await getGitRemoteInfo(input.path) + + return db + .insert(projects) + .values({ + name, + path: input.path, + gitRemoteUrl: gitInfo.remoteUrl, + gitProvider: gitInfo.provider, + gitOwner: gitInfo.owner, + gitRepo: gitInfo.repo, + }) + .returning() + .get() + }), + + /** + * Rename a project + */ + rename: publicProcedure + .input(z.object({ id: z.string(), name: z.string().min(1) })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .update(projects) + .set({ name: input.name, updatedAt: new Date() }) + .where(eq(projects.id, input.id)) + .returning() + .get() + }), + + /** + * Delete a project and all its chats + */ + delete: publicProcedure + .input(z.object({ id: z.string() })) + .mutation(({ input }) => { + const db = getDatabase() + return db + .delete(projects) + .where(eq(projects.id, input.id)) + .returning() + .get() + }), + + /** + * Refresh git info for a project (in case remote changed) + */ + refreshGitInfo: publicProcedure + .input(z.object({ id: z.string() })) + .mutation(async ({ input }) => { + const db = getDatabase() + + // Get project + const project = db + .select() + .from(projects) + .where(eq(projects.id, input.id)) + .get() + + if (!project) { + return null + } + + // Get fresh git info + const gitInfo = await getGitRemoteInfo(project.path) + + // Update project + return db + .update(projects) + .set({ + updatedAt: new Date(), + gitRemoteUrl: gitInfo.remoteUrl, + gitProvider: gitInfo.provider, + gitOwner: gitInfo.owner, + gitRepo: gitInfo.repo, + }) + .where(eq(projects.id, input.id)) + .returning() + .get() + }), +}) diff --git a/src/main/lib/trpc/routers/skills.ts b/src/main/lib/trpc/routers/skills.ts new file mode 100644 index 00000000..f46b8853 --- /dev/null +++ b/src/main/lib/trpc/routers/skills.ts @@ -0,0 +1,123 @@ +import { z } from "zod" +import { router, publicProcedure } from "../index" +import * as fs from "fs/promises" +import * as path from "path" +import * as os from "os" +import matter from "gray-matter" + +interface FileSkill { + name: string + description: string + source: "user" | "project" + path: string +} + +/** + * Parse SKILL.md frontmatter to extract name and description + */ +function parseSkillMd(content: string): { name?: string; description?: string } { + try { + const { data } = matter(content) + return { + name: typeof data.name === "string" ? data.name : undefined, + description: typeof data.description === "string" ? data.description : undefined, + } + } catch (err) { + console.error("[skills] Failed to parse frontmatter:", err) + return {} + } +} + +/** + * Scan a directory for SKILL.md files + */ +async function scanSkillsDirectory( + dir: string, + source: "user" | "project", +): Promise { + const skills: FileSkill[] = [] + + try { + // Check if directory exists + try { + await fs.access(dir) + } catch { + return skills + } + + const entries = await fs.readdir(dir, { withFileTypes: true }) + + for (const entry of entries) { + if (!entry.isDirectory()) continue + + // Validate entry name for security (prevent path traversal) + if (entry.name.includes("..") || entry.name.includes("/") || entry.name.includes("\\")) { + console.warn(`[skills] Skipping invalid directory name: ${entry.name}`) + continue + } + + const skillMdPath = path.join(dir, entry.name, "SKILL.md") + + try { + await fs.access(skillMdPath) + const content = await fs.readFile(skillMdPath, "utf-8") + const parsed = parseSkillMd(content) + + skills.push({ + name: parsed.name || entry.name, + description: parsed.description || "", + source, + path: skillMdPath, + }) + } catch (err) { + // Skill directory doesn't have SKILL.md or read failed - skip it + } + } + } catch (err) { + console.error(`[skills] Failed to scan directory ${dir}:`, err) + } + + return skills +} + +// Shared procedure for listing skills +const listSkillsProcedure = publicProcedure + .input( + z + .object({ + cwd: z.string().optional(), + }) + .optional(), + ) + .query(async ({ input }) => { + const userSkillsDir = path.join(os.homedir(), ".claude", "skills") + const userSkillsPromise = scanSkillsDirectory(userSkillsDir, "user") + + let projectSkillsPromise = Promise.resolve([]) + if (input?.cwd) { + const projectSkillsDir = path.join(input.cwd, ".claude", "skills") + projectSkillsPromise = scanSkillsDirectory(projectSkillsDir, "project") + } + + // Scan both directories in parallel + const [userSkills, projectSkills] = await Promise.all([ + userSkillsPromise, + projectSkillsPromise, + ]) + + return [...projectSkills, ...userSkills] + }) + +export const skillsRouter = router({ + /** + * List all skills from filesystem + * - User skills: ~/.claude/skills/ + * - Project skills: .claude/skills/ (relative to cwd) + */ + list: listSkillsProcedure, + + /** + * Alias for list - used by @ mention + */ + listEnabled: listSkillsProcedure, +}) diff --git a/src/main/lib/trpc/routers/terminal.ts b/src/main/lib/trpc/routers/terminal.ts new file mode 100644 index 00000000..e116d106 --- /dev/null +++ b/src/main/lib/trpc/routers/terminal.ts @@ -0,0 +1,200 @@ +import fs from "node:fs/promises" +import path from "node:path" +import { z } from "zod" +import { router, publicProcedure } from "../index" +import { observable } from "@trpc/server/observable" +import { terminalManager } from "../../terminal/manager" +import type { TerminalEvent } from "../../terminal/types" +import { TRPCError } from "@trpc/server" + +export const terminalRouter = router({ + /** + * Create or attach to an existing terminal session. + * Returns serializedState for recovery if reattaching. + */ + createOrAttach: publicProcedure + .input( + z.object({ + paneId: z.string().min(1), + tabId: z.string().optional(), + workspaceId: z.string().optional(), + cols: z.number().int().positive().optional(), + rows: z.number().int().positive().optional(), + cwd: z.string().optional(), + initialCommands: z.array(z.string()).optional(), + }), + ) + .mutation(async ({ input }) => { + try { + const result = await terminalManager.createOrAttach(input) + return { + paneId: input.paneId, + isNew: result.isNew, + serializedState: result.serializedState, + } + } catch (err) { + console.error("[TerminalRouter] createOrAttach error:", err) + throw new TRPCError({ + code: "INTERNAL_SERVER_ERROR", + message: + err instanceof Error ? err.message : "Failed to create terminal", + }) + } + }), + + write: publicProcedure + .input( + z.object({ + paneId: z.string().min(1), + data: z.string(), + }), + ) + .mutation(({ input }) => { + terminalManager.write(input) + }), + + resize: publicProcedure + .input( + z.object({ + paneId: z.string().min(1), + cols: z.number().int().positive(), + rows: z.number().int().positive(), + }), + ) + .mutation(({ input }) => { + terminalManager.resize(input) + }), + + /** + * Send a signal to the terminal process. + */ + signal: publicProcedure + .input( + z.object({ + paneId: z.string().min(1), + signal: z.string().optional(), + }), + ) + .mutation(({ input }) => { + terminalManager.signal(input) + }), + + /** + * Kill terminal session - actually terminate it. + */ + kill: publicProcedure + .input( + z.object({ + paneId: z.string().min(1), + }), + ) + .mutation(async ({ input }) => { + await terminalManager.kill(input) + }), + + /** + * Detach from terminal - keep session alive. + * Called on component unmount. Stores serialized state for recovery. + */ + detach: publicProcedure + .input( + z.object({ + paneId: z.string().min(1), + serializedState: z.string().optional(), + }), + ) + .mutation(({ input }) => { + terminalManager.detach(input) + }), + + /** + * Clear scrollback buffer for terminal (used by Cmd+K / clear command) + */ + clearScrollback: publicProcedure + .input(z.object({ paneId: z.string().min(1) })) + .mutation(({ input }) => { + terminalManager.clearScrollback(input) + }), + + getSession: publicProcedure + .input(z.string().min(1)) + .query(({ input: paneId }) => { + return terminalManager.getSession(paneId) + }), + + /** + * Get workspace cwd for terminal initialization + */ + getWorkspaceCwd: publicProcedure.input(z.string()).query(({ input }) => { + // For now, just return null - the workspace path comes from the chat/project + // In the future this could look up the workspace's root directory + return null + }), + + /** + * List directory contents for navigation + */ + listDirectory: publicProcedure + .input(z.object({ dirPath: z.string() })) + .query(async ({ input }) => { + const { dirPath } = input + + try { + const entries = await fs.readdir(dirPath, { withFileTypes: true }) + + const items = entries + .filter((entry) => !entry.name.startsWith(".")) + .map((entry) => ({ + name: entry.name, + path: path.join(dirPath, entry.name), + isDirectory: entry.isDirectory(), + })) + .sort((a, b) => { + // Directories first, then alphabetical + if (a.isDirectory && !b.isDirectory) return -1 + if (!a.isDirectory && b.isDirectory) return 1 + return a.name.localeCompare(b.name) + }) + + // Get parent directory + const parentPath = path.dirname(dirPath) + const hasParent = parentPath !== dirPath + + return { + currentPath: dirPath, + parentPath: hasParent ? parentPath : null, + items, + } + } catch { + return { + currentPath: dirPath, + parentPath: null, + items: [], + error: "Unable to read directory", + } + } + }), + + stream: publicProcedure + .input(z.string().min(1)) + .subscription(({ input: paneId }) => { + return observable((emit) => { + const onData = (data: string) => { + emit.next({ type: "data", data }) + } + + const onExit = (exitCode: number, signal?: number) => { + emit.next({ type: "exit", exitCode, signal }) + emit.complete() + } + + terminalManager.on(`data:${paneId}`, onData) + terminalManager.on(`exit:${paneId}`, onExit) + + return () => { + terminalManager.off(`data:${paneId}`, onData) + terminalManager.off(`exit:${paneId}`, onExit) + } + }) + }), +}) diff --git a/src/main/windows/main.ts b/src/main/windows/main.ts new file mode 100644 index 00000000..e9e3e7e2 --- /dev/null +++ b/src/main/windows/main.ts @@ -0,0 +1,357 @@ +import { + BrowserWindow, + shell, + nativeTheme, + ipcMain, + app, + clipboard, + session, +} from "electron" +import { join } from "path" +import { createIPCHandler } from "trpc-electron/main" +import { createAppRouter } from "../lib/trpc/routers" +import { getAuthManager, handleAuthCode, getBaseUrl } from "../index" + +// Register IPC handlers for window operations (only once) +let ipcHandlersRegistered = false + +function registerIpcHandlers(getWindow: () => BrowserWindow | null): void { + if (ipcHandlersRegistered) return + ipcHandlersRegistered = true + + // App info + ipcMain.handle("app:version", () => app.getVersion()) + // Note: Update checking is now handled by auto-updater module (lib/auto-updater.ts) + ipcMain.handle("app:set-badge", (_event, count: number | null) => { + if (process.platform === "darwin") { + app.dock.setBadge(count ? String(count) : "") + } + }) + ipcMain.handle( + "app:show-notification", + (_event, options: { title: string; body: string }) => { + const { Notification } = require("electron") + new Notification(options).show() + }, + ) + + // API base URL for fetch requests + ipcMain.handle("app:get-api-base-url", () => getBaseUrl()) + + // Window controls + ipcMain.handle("window:minimize", () => getWindow()?.minimize()) + ipcMain.handle("window:maximize", () => { + const win = getWindow() + if (win?.isMaximized()) { + win.unmaximize() + } else { + win?.maximize() + } + }) + ipcMain.handle("window:close", () => getWindow()?.close()) + ipcMain.handle( + "window:is-maximized", + () => getWindow()?.isMaximized() ?? false, + ) + ipcMain.handle("window:toggle-fullscreen", () => { + const win = getWindow() + if (win) { + win.setFullScreen(!win.isFullScreen()) + } + }) + ipcMain.handle( + "window:is-fullscreen", + () => getWindow()?.isFullScreen() ?? false, + ) + + // Traffic light visibility control (for hybrid native/custom approach) + ipcMain.handle( + "window:set-traffic-light-visibility", + (_event, visible: boolean) => { + const win = getWindow() + if (win && process.platform === "darwin") { + // In fullscreen, always show native traffic lights (don't let React hide them) + if (win.isFullScreen()) { + win.setWindowButtonVisibility(true) + } else { + win.setWindowButtonVisibility(visible) + } + } + }, + ) + + // Zoom controls + ipcMain.handle("window:zoom-in", () => { + const win = getWindow() + if (win) { + const zoom = win.webContents.getZoomFactor() + win.webContents.setZoomFactor(Math.min(zoom + 0.1, 3)) + } + }) + ipcMain.handle("window:zoom-out", () => { + const win = getWindow() + if (win) { + const zoom = win.webContents.getZoomFactor() + win.webContents.setZoomFactor(Math.max(zoom - 0.1, 0.5)) + } + }) + ipcMain.handle("window:zoom-reset", () => { + getWindow()?.webContents.setZoomFactor(1) + }) + ipcMain.handle( + "window:get-zoom", + () => getWindow()?.webContents.getZoomFactor() ?? 1, + ) + + // DevTools + ipcMain.handle("window:toggle-devtools", () => { + const win = getWindow() + if (win) { + win.webContents.toggleDevTools() + } + }) + + // Analytics + ipcMain.handle("analytics:set-opt-out", async (_event, optedOut: boolean) => { + const { setOptOut } = await import("../lib/analytics") + setOptOut(optedOut) + }) + + // Shell + ipcMain.handle("shell:open-external", (_event, url: string) => + shell.openExternal(url), + ) + + // Clipboard + ipcMain.handle("clipboard:write", (_event, text: string) => + clipboard.writeText(text), + ) + ipcMain.handle("clipboard:read", () => clipboard.readText()) + + // Auth IPC handlers + const validateSender = (event: Electron.IpcMainInvokeEvent): boolean => { + const senderUrl = event.sender.getURL() + try { + const parsed = new URL(senderUrl) + if (parsed.protocol === "file:") return true + const hostname = parsed.hostname.toLowerCase() + const trusted = ["21st.dev", "localhost", "127.0.0.1"] + return trusted.some((h) => hostname === h || hostname.endsWith(`.${h}`)) + } catch { + return false + } + } + + ipcMain.handle("auth:get-user", (event) => { + if (!validateSender(event)) return null + return getAuthManager().getUser() + }) + + ipcMain.handle("auth:is-authenticated", (event) => { + if (!validateSender(event)) return false + return getAuthManager().isAuthenticated() + }) + + ipcMain.handle("auth:logout", async (event) => { + if (!validateSender(event)) return + getAuthManager().logout() + // Clear cookie from persist:main partition + const ses = session.fromPartition("persist:main") + try { + await ses.cookies.remove(getBaseUrl(), "x-desktop-token") + console.log("[Auth] Cookie cleared on logout") + } catch (err) { + console.error("[Auth] Failed to clear cookie:", err) + } + showLoginPage() + }) + + ipcMain.handle("auth:start-flow", (event) => { + if (!validateSender(event)) return + getAuthManager().startAuthFlow(getWindow()) + }) + + ipcMain.handle("auth:submit-code", async (event, code: string) => { + if (!validateSender(event)) return + if (!code || typeof code !== "string") { + getWindow()?.webContents.send("auth:error", "Invalid authorization code") + return + } + await handleAuthCode(code) + }) +} + +// Current window reference +let currentWindow: BrowserWindow | null = null + +/** + * Show login page + */ +export function showLoginPage(): void { + if (!currentWindow) return + console.log("[Main] Showing login page") + + // In dev mode, login.html is in src/renderer, not out/renderer + if (process.env.ELECTRON_RENDERER_URL) { + // Dev mode: load from source directory + const loginPath = join(app.getAppPath(), "src/renderer/login.html") + console.log("[Main] Loading login from:", loginPath) + currentWindow.loadFile(loginPath) + } else { + // Production: load from built output + currentWindow.loadFile(join(__dirname, "../renderer/login.html")) + } +} + +// Singleton IPC handler (prevents duplicate handlers on macOS window recreation) +let ipcHandler: ReturnType | null = null + +/** + * Get the current window reference + * Used by tRPC procedures that need window access + */ +export function getWindow(): BrowserWindow | null { + return currentWindow +} + +/** + * Create the main application window + */ +export function createMainWindow(): BrowserWindow { + // Register IPC handlers before creating window + registerIpcHandlers(getWindow) + + const window = new BrowserWindow({ + width: 1400, + height: 900, + minWidth: 500, // Allow narrow mobile-like mode + minHeight: 600, + show: false, + title: "21st Agents", + backgroundColor: nativeTheme.shouldUseDarkColors ? "#09090b" : "#ffffff", + // hiddenInset shows native traffic lights inset in the window + // Start with traffic lights off-screen (custom ones shown in normal mode) + // Native lights will be moved on-screen in fullscreen mode + titleBarStyle: process.platform === "darwin" ? "hiddenInset" : "default", + trafficLightPosition: + process.platform === "darwin" ? { x: 15, y: 12 } : undefined, + webPreferences: { + preload: join(__dirname, "../preload/index.js"), + nodeIntegration: false, + contextIsolation: true, + sandbox: false, // Required for electron-trpc + webSecurity: true, + partition: "persist:main", // Use persistent session for cookies + }, + }) + + // Update current window reference + currentWindow = window + + // Setup tRPC IPC handler (singleton pattern) + if (ipcHandler) { + // Reuse existing handler, just attach new window + ipcHandler.attachWindow(window) + } else { + // Create new handler with context + ipcHandler = createIPCHandler({ + router: createAppRouter(getWindow), + windows: [window], + createContext: async () => ({ + getWindow, + }), + }) + } + + // Show window when ready + window.on("ready-to-show", () => { + console.log("[Main] Window ready to show") + // Ensure native traffic lights are visible by default (login page, loading states) + if (process.platform === "darwin") { + window.setWindowButtonVisibility(true) + } + window.show() + }) + + // Emit fullscreen change events and manage traffic lights + window.on("enter-full-screen", () => { + // Always show native traffic lights in fullscreen + if (process.platform === "darwin") { + window.setWindowButtonVisibility(true) + } + window.webContents.send("window:fullscreen-change", true) + }) + window.on("leave-full-screen", () => { + // Show native traffic lights when exiting fullscreen (TrafficLights component will manage after mount) + if (process.platform === "darwin") { + window.setWindowButtonVisibility(true) + } + window.webContents.send("window:fullscreen-change", false) + }) + + // Emit focus change events + window.on("focus", () => { + window.webContents.send("window:focus-change", true) + }) + window.on("blur", () => { + window.webContents.send("window:focus-change", false) + }) + + // Handle external links + window.webContents.setWindowOpenHandler(({ url }) => { + shell.openExternal(url) + return { action: "deny" } + }) + + // Handle window close + window.on("closed", () => { + currentWindow = null + }) + + // Load the renderer - check auth first + const devServerUrl = process.env.ELECTRON_RENDERER_URL + const authManager = getAuthManager() + + console.log("[Main] ========== AUTH CHECK ==========") + console.log("[Main] AuthManager exists:", !!authManager) + const isAuth = authManager.isAuthenticated() + console.log("[Main] isAuthenticated():", isAuth) + const user = authManager.getUser() + console.log("[Main] getUser():", user ? user.email : "null") + console.log("[Main] ================================") + + if (isAuth) { + console.log("[Main] ✓ User authenticated, loading app") + if (devServerUrl) { + window.loadURL(devServerUrl) + window.webContents.openDevTools() + } else { + window.loadFile(join(__dirname, "../renderer/index.html")) + } + } else { + console.log("[Main] ✗ Not authenticated, showing login page") + // In dev mode, login.html is in src/renderer + if (devServerUrl) { + const loginPath = join(app.getAppPath(), "src/renderer/login.html") + window.loadFile(loginPath) + } else { + window.loadFile(join(__dirname, "../renderer/login.html")) + } + } + + // Ensure traffic lights are visible after page load (covers reload/Cmd+R case) + window.webContents.on("did-finish-load", () => { + console.log("[Main] Page finished loading") + if (process.platform === "darwin") { + window.setWindowButtonVisibility(true) + } + }) + window.webContents.on( + "did-fail-load", + (_event, errorCode, errorDescription) => { + console.error("[Main] Page failed to load:", errorCode, errorDescription) + }, + ) + + return window +} diff --git a/src/preload/index.d.ts b/src/preload/index.d.ts new file mode 100644 index 00000000..fdecde07 --- /dev/null +++ b/src/preload/index.d.ts @@ -0,0 +1,23 @@ +export interface DesktopApi { + getVersion: () => Promise + checkUpdate: () => Promise<{ version: string; downloadUrl: string } | null> + getPlatform: () => Promise + getUser: () => Promise<{ + id: string + email: string + name: string | null + imageUrl: string | null + username: string | null + } | null> + isAuthenticated: () => Promise + logout: () => Promise + startAuthFlow: () => Promise + onAuthSuccess: (callback: (user: any) => void) => () => void + onAuthError: (callback: (error: string) => void) => () => void +} + +declare global { + interface Window { + desktopApi?: DesktopApi + } +} diff --git a/src/preload/index.ts b/src/preload/index.ts new file mode 100644 index 00000000..ebce7ac3 --- /dev/null +++ b/src/preload/index.ts @@ -0,0 +1,208 @@ +import { contextBridge, ipcRenderer } from "electron" +import { exposeElectronTRPC } from "trpc-electron/main" + +// Only initialize Sentry in production to avoid IPC errors in dev mode +if (process.env.NODE_ENV === "production") { + import("@sentry/electron/renderer").then((Sentry) => { + Sentry.init() + }) +} + +// Expose tRPC IPC bridge for type-safe communication +exposeElectronTRPC() + +// Expose analytics force flag for testing +if (process.env.FORCE_ANALYTICS === "true") { + contextBridge.exposeInMainWorld("__FORCE_ANALYTICS__", true) +} + +// Expose desktop-specific APIs +contextBridge.exposeInMainWorld("desktopApi", { + // Platform info + platform: process.platform, + arch: process.arch, + getVersion: () => ipcRenderer.invoke("app:version"), + + // Auto-update methods + checkForUpdates: () => ipcRenderer.invoke("update:check"), + downloadUpdate: () => ipcRenderer.invoke("update:download"), + installUpdate: () => ipcRenderer.invoke("update:install"), + + // Auto-update event listeners + onUpdateChecking: (callback: () => void) => { + const handler = () => callback() + ipcRenderer.on("update:checking", handler) + return () => ipcRenderer.removeListener("update:checking", handler) + }, + onUpdateAvailable: (callback: (info: { version: string; releaseDate?: string }) => void) => { + const handler = (_event: unknown, info: { version: string; releaseDate?: string }) => callback(info) + ipcRenderer.on("update:available", handler) + return () => ipcRenderer.removeListener("update:available", handler) + }, + onUpdateNotAvailable: (callback: () => void) => { + const handler = () => callback() + ipcRenderer.on("update:not-available", handler) + return () => ipcRenderer.removeListener("update:not-available", handler) + }, + onUpdateProgress: (callback: (progress: { percent: number; bytesPerSecond: number; transferred: number; total: number }) => void) => { + const handler = (_event: unknown, progress: { percent: number; bytesPerSecond: number; transferred: number; total: number }) => callback(progress) + ipcRenderer.on("update:progress", handler) + return () => ipcRenderer.removeListener("update:progress", handler) + }, + onUpdateDownloaded: (callback: (info: { version: string }) => void) => { + const handler = (_event: unknown, info: { version: string }) => callback(info) + ipcRenderer.on("update:downloaded", handler) + return () => ipcRenderer.removeListener("update:downloaded", handler) + }, + onUpdateError: (callback: (error: string) => void) => { + const handler = (_event: unknown, error: string) => callback(error) + ipcRenderer.on("update:error", handler) + return () => ipcRenderer.removeListener("update:error", handler) + }, + + // Window controls + windowMinimize: () => ipcRenderer.invoke("window:minimize"), + windowMaximize: () => ipcRenderer.invoke("window:maximize"), + windowClose: () => ipcRenderer.invoke("window:close"), + windowIsMaximized: () => ipcRenderer.invoke("window:is-maximized"), + windowToggleFullscreen: () => ipcRenderer.invoke("window:toggle-fullscreen"), + windowIsFullscreen: () => ipcRenderer.invoke("window:is-fullscreen"), + setTrafficLightVisibility: (visible: boolean) => + ipcRenderer.invoke("window:set-traffic-light-visibility", visible), + + // Window events + onFullscreenChange: (callback: (isFullscreen: boolean) => void) => { + const handler = (_event: unknown, isFullscreen: boolean) => callback(isFullscreen) + ipcRenderer.on("window:fullscreen-change", handler) + return () => ipcRenderer.removeListener("window:fullscreen-change", handler) + }, + onFocusChange: (callback: (isFocused: boolean) => void) => { + const handler = (_event: unknown, isFocused: boolean) => callback(isFocused) + ipcRenderer.on("window:focus-change", handler) + return () => ipcRenderer.removeListener("window:focus-change", handler) + }, + + // Zoom controls + zoomIn: () => ipcRenderer.invoke("window:zoom-in"), + zoomOut: () => ipcRenderer.invoke("window:zoom-out"), + zoomReset: () => ipcRenderer.invoke("window:zoom-reset"), + getZoom: () => ipcRenderer.invoke("window:get-zoom"), + + // DevTools + toggleDevTools: () => ipcRenderer.invoke("window:toggle-devtools"), + + // Analytics + setAnalyticsOptOut: (optedOut: boolean) => ipcRenderer.invoke("analytics:set-opt-out", optedOut), + + // Native features + setBadge: (count: number | null) => ipcRenderer.invoke("app:set-badge", count), + showNotification: (options: { title: string; body: string }) => + ipcRenderer.invoke("app:show-notification", options), + openExternal: (url: string) => ipcRenderer.invoke("shell:open-external", url), + + // API base URL (for fetch requests to server) + getApiBaseUrl: () => ipcRenderer.invoke("app:get-api-base-url"), + + // Clipboard + clipboardWrite: (text: string) => ipcRenderer.invoke("clipboard:write", text), + clipboardRead: () => ipcRenderer.invoke("clipboard:read"), + + // Auth methods + getUser: () => ipcRenderer.invoke("auth:get-user"), + isAuthenticated: () => ipcRenderer.invoke("auth:is-authenticated"), + logout: () => ipcRenderer.invoke("auth:logout"), + startAuthFlow: () => ipcRenderer.invoke("auth:start-flow"), + submitAuthCode: (code: string) => ipcRenderer.invoke("auth:submit-code", code), + + // Auth events + onAuthSuccess: (callback: (user: any) => void) => { + const handler = (_event: unknown, user: any) => callback(user) + ipcRenderer.on("auth:success", handler) + return () => ipcRenderer.removeListener("auth:success", handler) + }, + onAuthError: (callback: (error: string) => void) => { + const handler = (_event: unknown, error: string) => callback(error) + ipcRenderer.on("auth:error", handler) + return () => ipcRenderer.removeListener("auth:error", handler) + }, + + // Shortcut events (from main process menu accelerators) + onShortcutNewAgent: (callback: () => void) => { + const handler = () => callback() + ipcRenderer.on("shortcut:new-agent", handler) + return () => ipcRenderer.removeListener("shortcut:new-agent", handler) + }, +}) + +// Type definitions +export interface UpdateInfo { + version: string + releaseDate?: string +} + +export interface UpdateProgress { + percent: number + bytesPerSecond: number + transferred: number + total: number +} + +export interface DesktopApi { + platform: NodeJS.Platform + arch: string + getVersion: () => Promise + // Auto-update + checkForUpdates: () => Promise + downloadUpdate: () => Promise + installUpdate: () => void + onUpdateChecking: (callback: () => void) => () => void + onUpdateAvailable: (callback: (info: UpdateInfo) => void) => () => void + onUpdateNotAvailable: (callback: () => void) => () => void + onUpdateProgress: (callback: (progress: UpdateProgress) => void) => () => void + onUpdateDownloaded: (callback: (info: UpdateInfo) => void) => () => void + onUpdateError: (callback: (error: string) => void) => () => void + // Window controls + windowMinimize: () => Promise + windowMaximize: () => Promise + windowClose: () => Promise + windowIsMaximized: () => Promise + windowToggleFullscreen: () => Promise + windowIsFullscreen: () => Promise + setTrafficLightVisibility: (visible: boolean) => Promise + onFullscreenChange: (callback: (isFullscreen: boolean) => void) => () => void + onFocusChange: (callback: (isFocused: boolean) => void) => () => void + zoomIn: () => Promise + zoomOut: () => Promise + zoomReset: () => Promise + getZoom: () => Promise + toggleDevTools: () => Promise + setAnalyticsOptOut: (optedOut: boolean) => Promise + setBadge: (count: number | null) => Promise + showNotification: (options: { title: string; body: string }) => Promise + openExternal: (url: string) => Promise + getApiBaseUrl: () => Promise + clipboardWrite: (text: string) => Promise + clipboardRead: () => Promise + // Auth + getUser: () => Promise<{ + id: string + email: string + name: string | null + imageUrl: string | null + username: string | null + } | null> + isAuthenticated: () => Promise + logout: () => Promise + startAuthFlow: () => Promise + submitAuthCode: (code: string) => Promise + onAuthSuccess: (callback: (user: any) => void) => () => void + onAuthError: (callback: (error: string) => void) => () => void + // Shortcuts + onShortcutNewAgent: (callback: () => void) => () => void +} + +declare global { + interface Window { + desktopApi: DesktopApi + } +} diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx new file mode 100644 index 00000000..d3441257 --- /dev/null +++ b/src/renderer/App.tsx @@ -0,0 +1,111 @@ +import { useEffect, useMemo } from "react" +import { Provider as JotaiProvider, useAtomValue } from "jotai" +import { ThemeProvider } from "next-themes" +import { TRPCProvider } from "./contexts/TRPCProvider" +import { AgentsLayout } from "./features/layout/agents-layout" +import { + AnthropicOnboardingPage, + SelectRepoPage, +} from "./features/onboarding" +import { TooltipProvider } from "./components/ui/tooltip" +import { appStore } from "./lib/jotai-store" +import { initAnalytics, identify, shutdown } from "./lib/analytics" +import { VSCodeThemeProvider } from "./lib/themes/theme-provider" +import { anthropicOnboardingCompletedAtom } from "./lib/atoms" +import { selectedProjectAtom } from "./features/agents/atoms" +import { trpc } from "./lib/trpc" + +/** + * Main content router - decides which page to show based on onboarding state + */ +function AppContent() { + const anthropicOnboardingCompleted = useAtomValue( + anthropicOnboardingCompletedAtom + ) + const selectedProject = useAtomValue(selectedProjectAtom) + + // Fetch projects to validate selectedProject exists + const { data: projects, isLoading: isLoadingProjects } = + trpc.projects.list.useQuery() + + // Validated project - only valid if exists in DB + const validatedProject = useMemo(() => { + if (!selectedProject) return null + // While loading, trust localStorage value to prevent flicker + if (isLoadingProjects) return selectedProject + // After loading, validate against DB + if (!projects) return null + const exists = projects.some((p) => p.id === selectedProject.id) + return exists ? selectedProject : null + }, [selectedProject, projects, isLoadingProjects]) + + // Determine which page to show: + // 1. Anthropic onboarding not completed -> AnthropicOnboardingPage + // 2. No valid project selected -> SelectRepoPage + // 3. Otherwise -> AgentsLayout + if (!anthropicOnboardingCompleted) { + return + } + + if (!validatedProject && !isLoadingProjects) { + return + } + + return +} + +export function App() { + // Initialize analytics on mount + useEffect(() => { + initAnalytics() + + // Sync analytics opt-out status to main process + const syncOptOutStatus = async () => { + try { + const optOut = + localStorage.getItem("preferences:analytics-opt-out") === "true" + await window.desktopApi?.setAnalyticsOptOut(optOut) + } catch (error) { + console.warn("[Analytics] Failed to sync opt-out status:", error) + } + } + syncOptOutStatus() + + // Identify user if already authenticated + const identifyUser = async () => { + try { + const user = await window.desktopApi?.getUser() + if (user?.id) { + identify(user.id, { email: user.email, name: user.name }) + } + } catch (error) { + console.warn("[Analytics] Failed to identify user:", error) + } + } + identifyUser() + + // Cleanup on unmount + return () => { + shutdown() + } + }, []) + + return ( + + + + + +
    + +
    +
    +
    +
    +
    +
    + ) +} diff --git a/src/renderer/components/chat-markdown-renderer.tsx b/src/renderer/components/chat-markdown-renderer.tsx new file mode 100644 index 00000000..70b2f57c --- /dev/null +++ b/src/renderer/components/chat-markdown-renderer.tsx @@ -0,0 +1,497 @@ +import { cn } from "../lib/utils" +import { memo, useMemo, useState, useCallback, useEffect } from "react" +import ReactMarkdown from "react-markdown" +import remarkGfm from "remark-gfm" +import { Copy, Check } from "lucide-react" +import { useCodeTheme } from "../lib/hooks/use-code-theme" +import { highlightCode } from "../lib/themes/shiki-theme-loader" + +// Removed react-syntax-highlighter themes - now using Shiki with VS Code themes + +// Function to strip emojis from text (only common emojis, preserving markdown symbols) +export function stripEmojis(text: string): string { + return text + .replace(/[\u{1F600}-\u{1F64F}]/gu, "") // Emoticons + .replace(/[\u{1F300}-\u{1F5FF}]/gu, "") // Misc Symbols and Pictographs + .replace(/[\u{1F680}-\u{1F6FF}]/gu, "") // Transport and Map + .replace(/[\u{1F1E0}-\u{1F1FF}]/gu, "") // Flags + .replace(/[\u{1F900}-\u{1F9FF}]/gu, "") // Supplemental Symbols + .replace(/[\u{1FA00}-\u{1FAFF}]/gu, "") // Extended-A + .replace(/[\u{2700}-\u{27BF}]/gu, "") // Dingbats +} + +// Function to fix numbered list items that have line breaks after the number +// Converts "1.\n\nText" or "1.\n \nText" to "1. Text" +function fixNumberedListBreaks(text: string): string { + return text.replace(/^(\d+)\.\s*\n+\s*\n*/gm, "$1. ") +} + +// Function to fix malformed bold/italic markdown where there's a space after opening markers +// Converts "** text**" to "**text**" and "* text*" to "*text*" +function fixMalformedEmphasis(text: string): string { + // Fix bold: "** text**" -> "**text**" + // Use " +" (spaces only) not "\s+" to avoid matching newlines + // Also require text to start with non-space to ensure we're at the START of bold content + let fixed = text.replace(/\*\* +([^\n*]+?)\*\*/g, "**$1**") + // Fix italic: "* text*" -> "*text*" (but not inside bold) + fixed = fixed.replace(/(?/g, ">") +} + +// Code block text sizes matching paragraph text sizes +const codeBlockTextSize = { + sm: "text-sm", // 14px - matches p text + md: "text-sm", // 14px - matches p text + lg: "text-sm", // 14px - matches p text +} + +// Code block with copy button using Shiki +function CodeBlock({ + language, + children, + themeId, + size = "md", +}: { + language?: string + children: string + themeId: string + size?: "sm" | "md" | "lg" +}) { + const [copied, setCopied] = useState(false) + const [highlightedHtml, setHighlightedHtml] = useState(null) + + const handleCopy = useCallback(() => { + navigator.clipboard.writeText(children) + setCopied(true) + setTimeout(() => setCopied(false), 2000) + }, [children]) + + // Only use Shiki for known programming languages, not for plaintext/ASCII art + const shouldHighlight = language && language !== "plaintext" && language !== "text" + + useEffect(() => { + if (!shouldHighlight) return + + let cancelled = false + + const highlight = async () => { + try { + const html = await highlightCode(children, language, themeId) + if (!cancelled) { + setHighlightedHtml(html) + } + } catch (error) { + console.error("Failed to highlight code:", error) + } + } + + highlight() + + return () => { + cancelled = true + } + }, [children, language, themeId, shouldHighlight]) + + // For plaintext/ASCII art, just escape and render directly (no Shiki) + // For code with syntax highlighting, use Shiki output when available + const htmlContent = shouldHighlight + ? (highlightedHtml ?? escapeHtml(children)) + : escapeHtml(children) + + return ( +
    + +
    +        
    +      
    +
    + ) +} + +type MarkdownSize = "sm" | "md" | "lg" + +interface ChatMarkdownRendererProps { + content: string + /** Size variant: sm for compact views, md for normal, lg for fullscreen */ + size?: MarkdownSize + /** Additional className for the wrapper */ + className?: string + /** Whether to enable syntax highlighting (default: true) */ + syntaxHighlight?: boolean +} + +// Size-based styles inspired by Notion's spacing +// Key principles: +// - Minimal margin-bottom (elements "breathe" via padding) +// - Larger margin-top on headings creates visual sections +// - line-height: 1.5 for body, 1.3 for headings +const sizeStyles: Record< + MarkdownSize, + { + h1: string + h2: string + h3: string + h4: string + h5: string + h6: string + p: string + ul: string + ol: string + li: string + inlineCode: string + blockquote: string + hr: string + table: string + thead: string + tbody: string + tr: string + th: string + td: string + } +> = { + sm: { + // Compact variant for sidebar/compact views + h1: "text-base font-semibold text-foreground mt-[1.4em] mb-px first:mt-0 leading-[1.3]", + h2: "text-base font-semibold text-foreground mt-[1.4em] mb-px first:mt-0 leading-[1.3]", + h3: "text-sm font-semibold text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h4: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h5: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h6: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + p: "text-sm text-foreground/80 my-px leading-normal py-[3px]", + ul: "list-disc list-inside text-sm text-foreground/80 mb-px marker:text-foreground/60", + ol: "list-decimal list-inside text-sm text-foreground/80 mb-px marker:text-foreground/60", + li: "text-sm text-foreground/80 py-[3px]", + inlineCode: + "bg-foreground/[0.06] dark:bg-foreground/[0.1] font-mono text-[85%] rounded px-[0.4em] py-[0.2em] break-all", + blockquote: + "border-l-2 border-foreground/20 pl-3 text-foreground/70 mb-px text-sm", + hr: "mt-6 mb-4 border-t border-border", + table: "w-full text-sm", + thead: "border-b border-border", + tbody: "", + tr: "[&:not(:last-child)]:border-b [&:not(:last-child)]:border-border", + th: "text-left text-sm font-medium text-foreground px-3 py-2 bg-muted/50 border-r border-border last:border-r-0", + td: "text-sm text-foreground/80 px-3 py-2 border-r border-border last:border-r-0", + }, + md: { + // Default variant - matches Notion spacing + h1: "text-[1.5em] font-semibold text-foreground mt-[1.4em] mb-px first:mt-0 leading-[1.3]", + h2: "text-[1.5em] font-semibold text-foreground mt-[1.4em] mb-px first:mt-0 leading-[1.3]", + h3: "text-[1.25em] font-semibold text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h4: "text-base font-semibold text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h5: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h6: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + p: "text-sm text-foreground/80 my-px leading-normal py-[3px]", + ul: "list-disc list-inside text-sm text-foreground/80 mb-px marker:text-foreground/60", + ol: "list-decimal list-inside text-sm text-foreground/80 mb-px marker:text-foreground/60", + li: "text-sm text-foreground/80 py-[3px]", + inlineCode: + "bg-foreground/[0.06] dark:bg-foreground/[0.1] font-mono text-[85%] rounded px-[0.4em] py-[0.2em] break-all", + blockquote: + "border-l-2 border-foreground/20 pl-4 text-foreground/70 mb-px", + hr: "mt-6 mb-4 border-t border-border", + table: "w-full text-sm", + thead: "border-b border-border", + tbody: "", + tr: "[&:not(:last-child)]:border-b [&:not(:last-child)]:border-border", + th: "text-left text-sm font-medium text-foreground px-3 py-2 bg-muted/50 border-r border-border last:border-r-0", + td: "text-sm text-foreground/80 px-3 py-2 border-r border-border last:border-r-0", + }, + lg: { + // Fullscreen/large variant + h1: "text-[1.875em] font-semibold text-foreground mt-[1.4em] mb-px first:mt-0 leading-[1.3]", + h2: "text-[1.5em] font-semibold text-foreground mt-[1.4em] mb-px first:mt-0 leading-[1.3]", + h3: "text-[1.25em] font-semibold text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h4: "text-base font-semibold text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h5: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + h6: "text-sm font-medium text-foreground mt-[1em] mb-px first:mt-0 leading-[1.3]", + p: "text-sm text-foreground/80 my-px leading-normal py-[3px]", + ul: "list-disc list-inside text-sm text-foreground/80 mb-px marker:text-foreground/60", + ol: "list-decimal list-inside text-sm text-foreground/80 mb-px marker:text-foreground/60", + li: "text-sm text-foreground/80 py-[3px]", + inlineCode: + "bg-foreground/[0.06] dark:bg-foreground/[0.1] font-mono text-[85%] rounded px-[0.4em] py-[0.2em] break-all", + blockquote: + "border-l-2 border-foreground/20 pl-4 text-foreground/70 mb-px", + hr: "mt-6 mb-4 border-t border-border", + table: "w-full text-sm", + thead: "border-b border-border", + tbody: "", + tr: "[&:not(:last-child)]:border-b [&:not(:last-child)]:border-border", + th: "text-left text-sm font-medium text-foreground px-3 py-2 bg-muted/50 border-r border-border last:border-r-0", + td: "text-sm text-foreground/80 px-3 py-2 border-r border-border last:border-r-0", + }, +} + +export const ChatMarkdownRenderer = memo(function ChatMarkdownRenderer({ + content, + size = "md", + className, + syntaxHighlight = true, +}: ChatMarkdownRendererProps) { + const codeTheme = useCodeTheme() + const styles = sizeStyles[size] + + const components = useMemo( + () => ({ + h1: ({ children, ...props }: any) => ( +

    + {children} +

    + ), + h2: ({ children, ...props }: any) => ( +

    + {children} +

    + ), + h3: ({ children, ...props }: any) => ( +

    + {children} +

    + ), + h4: ({ children, ...props }: any) => ( +

    + {children} +

    + ), + h5: ({ children, ...props }: any) => ( +
    + {children} +
    + ), + h6: ({ children, ...props }: any) => ( +
    + {children} +
    + ), + p: ({ children, ...props }: any) => ( +

    + {children} +

    + ), + ul: ({ children, ...props }: any) => ( +
      + {children} +
    + ), + ol: ({ children, ...props }: any) => ( +
      + {children} +
    + ), + li: ({ children, ...props }: any) => ( +
  2. + {children} +
  3. + ), + a: ({ href, children, ...props }: any) => ( +
    { + e.preventDefault() + if (href) { + window.desktopApi.openExternal(href) + } + }} + className="text-blue-600 dark:text-blue-400 no-underline hover:underline hover:decoration-current underline-offset-2 decoration-1 transition-all duration-150 cursor-pointer focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-blue-500/30 focus-visible:rounded-sm" + {...props} + > + {children} + + ), + strong: ({ children, ...props }: any) => ( + + {children} + + ), + em: ({ children, ...props }: any) => ( + + {children} + + ), + blockquote: ({ children, ...props }: any) => ( +
    + {children} +
    + ), + hr: ({ ...props }: any) =>
    , + table: ({ children, ...props }: any) => ( +
    + + {children} +
    +
    + ), + thead: ({ children, ...props }: any) => ( + + {children} + + ), + tbody: ({ children, ...props }: any) => ( + + {children} + + ), + tr: ({ children, ...props }: any) => ( + + {children} + + ), + th: ({ children, ...props }: any) => ( + + {children} + + ), + td: ({ children, ...props }: any) => ( + + {children} + + ), + pre: ({ children }: any) => <>{children}, + code: ({ inline, className, children, ...props }: any) => { + const match = /language-(\w+)/.exec(className || "") + const language = match ? match[1] : undefined + const codeContent = String(children) + + // Determine if code should be inline: + // 1. If markdown explicitly marks it as inline + // 2. If it's short code without line breaks (likely from single backticks) + const shouldBeInline = + inline || + (!language && codeContent.length < 100 && !codeContent.includes("\n")) + + if (shouldBeInline) { + return {children} + } + + return ( + + {String(children).replace(/\n$/, "")} + + ) + }, + }), + [styles, codeTheme, syntaxHighlight, size], + ) + + const processedContent = fixMalformedEmphasis(fixNumberedListBreaks(stripEmojis(content))) + + return ( +
    p]:inline [&_li>p]:mb-0", + // Prevent horizontal overflow on mobile + "overflow-hidden break-words", + // Global spacing: elements after hr get extra top margin + "[&_hr+p]:mt-4 [&_hr+ul]:mt-4 [&_hr+ol]:mt-4", + // Global spacing: elements after code blocks get extra top margin + "[&_div+p]:mt-2 [&_div+ul]:mt-2 [&_div+ol]:mt-2", + // Global spacing: elements after tables get extra top margin + "[&_table+p]:mt-4 [&_table+ul]:mt-4 [&_table+ol]:mt-4", + className, + )} + > + + {processedContent} + +
    + ) +}) + +// Convenience exports for specific use cases +export const CompactMarkdownRenderer = memo(function CompactMarkdownRenderer({ + content, + className, + syntaxHighlight = false, +}: { + content: string + className?: string + syntaxHighlight?: boolean +}) { + return ( + + ) +}) + +export const FullscreenMarkdownRenderer = memo( + function FullscreenMarkdownRenderer({ + content, + className, + }: { + content: string + className?: string + }) { + return ( + + ) + }, +) diff --git a/src/renderer/components/dialogs/agents-help-popover.tsx b/src/renderer/components/dialogs/agents-help-popover.tsx new file mode 100644 index 00000000..8e1cdcd5 --- /dev/null +++ b/src/renderer/components/dialogs/agents-help-popover.tsx @@ -0,0 +1,72 @@ +import * as React from "react" +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "../ui/popover" +import { DiscordIcon, KeyboardIcon, RoadmapIcon, TicketIcon } from "../../icons" + +interface AgentsHelpPopoverProps { + open: boolean + onOpenChange: (open: boolean) => void + isMobile?: boolean + children: React.ReactNode +} + +export function AgentsHelpPopover({ + open, + onOpenChange, + isMobile = false, + children, +}: AgentsHelpPopoverProps) { + const menuItems = [ + { + icon: DiscordIcon, + label: "Discord", + onClick: () => window.open("https://discord.gg/8ektTZGnj4", "_blank"), + }, + { + icon: KeyboardIcon, + label: "Shortcuts", + onClick: () => { + // Open shortcuts dialog + console.log("Open shortcuts dialog") + }, + }, + { + icon: RoadmapIcon, + label: "Roadmap", + onClick: () => window.open("https://agentsby21st.featurebase.app/roadmap", "_blank"), + }, + { + icon: TicketIcon, + label: "Feature Request", + onClick: () => window.open("https://agentsby21st.featurebase.app", "_blank"), + }, + ] + + return ( + + {children} + + {menuItems.map((item) => ( + + ))} + + + ) +} diff --git a/src/renderer/components/dialogs/agents-rename-subchat-dialog.tsx b/src/renderer/components/dialogs/agents-rename-subchat-dialog.tsx new file mode 100644 index 00000000..66509fe3 --- /dev/null +++ b/src/renderer/components/dialogs/agents-rename-subchat-dialog.tsx @@ -0,0 +1,93 @@ +import * as React from "react" +import { useState, useEffect } from "react" +import { createPortal } from "react-dom" +import { cn } from "../../lib/utils" +import { Button } from "../ui/button" +import { Input } from "../ui/input" +import { X } from "lucide-react" + +interface AgentsRenameSubChatDialogProps { + isOpen: boolean + onClose: () => void + onSave: (name: string) => void + currentName: string + isLoading?: boolean +} + +export function AgentsRenameSubChatDialog({ + isOpen, + onClose, + onSave, + currentName, + isLoading = false, +}: AgentsRenameSubChatDialogProps) { + const [name, setName] = useState(currentName) + + useEffect(() => { + setName(currentName) + }, [currentName, isOpen]) + + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === "Escape") { + onClose() + } + } + + if (isOpen) { + document.addEventListener("keydown", handleKeyDown) + return () => document.removeEventListener("keydown", handleKeyDown) + } + }, [isOpen, onClose]) + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault() + if (name.trim()) { + onSave(name.trim()) + } + } + + if (!isOpen || typeof document === "undefined") return null + + return createPortal( +
    + {/* Backdrop */} +
    + + {/* Dialog */} +
    + + +

    Rename Agent

    + +
    + setName(e.target.value)} + placeholder="Enter name..." + autoFocus + className="mb-4" + /> + +
    + + +
    +
    +
    +
    , + document.body + ) +} diff --git a/src/renderer/components/dialogs/agents-settings-dialog.tsx b/src/renderer/components/dialogs/agents-settings-dialog.tsx new file mode 100644 index 00000000..306f08ba --- /dev/null +++ b/src/renderer/components/dialogs/agents-settings-dialog.tsx @@ -0,0 +1,361 @@ +import { useAtom } from "jotai" +import { useEffect, useState } from "react" +import { createPortal } from "react-dom" +import { AnimatePresence, motion } from "motion/react" +import { X, Bug, ChevronLeft, ChevronRight } from "lucide-react" +import { cn } from "../../lib/utils" +import { agentsSettingsDialogActiveTabAtom } from "../../lib/atoms" +import { + ProfileIconFilled, + EyeOpenFilledIcon, + SlidersFilledIcon, +} from "../../icons" +import { SkillIcon } from "../ui/icons" +import { AgentsAppearanceTab } from "./settings-tabs/agents-appearance-tab" +import { AgentsProfileTab } from "./settings-tabs/agents-profile-tab" +import { AgentsPreferencesTab } from "./settings-tabs/agents-preferences-tab" +import { AgentsDebugTab } from "./settings-tabs/agents-debug-tab" +import { AgentsSkillsTab } from "./settings-tabs/agents-skills-tab" + +type SettingsTab = "profile" | "appearance" | "preferences" | "skills" | "debug" + +// Hook to detect narrow screen +function useIsNarrowScreen(): boolean { + const [isNarrow, setIsNarrow] = useState(false) + + useEffect(() => { + const checkWidth = () => { + setIsNarrow(window.innerWidth <= 768) + } + + checkWidth() + window.addEventListener("resize", checkWidth) + return () => window.removeEventListener("resize", checkWidth) + }, []) + + return isNarrow +} + +// Check if we're in development mode +const isDevelopment = process.env.NODE_ENV === "development" + +interface AgentsSettingsDialogProps { + isOpen: boolean + onClose: () => void +} + +const ALL_TABS = [ + { + id: "profile" as SettingsTab, + label: "Account", + icon: ProfileIconFilled, + description: "Manage your account settings", + }, + { + id: "appearance" as SettingsTab, + label: "Appearance", + icon: EyeOpenFilledIcon, + description: "Theme settings", + }, + { + id: "preferences" as SettingsTab, + label: "Preferences", + icon: SlidersFilledIcon, + description: "Claude behavior settings", + }, + { + id: "skills" as SettingsTab, + label: "Skills", + icon: SkillIcon, + description: "Custom Claude sub-agents", + beta: true, + }, + // Debug tab - always shown in desktop for development + ...(isDevelopment + ? [ + { + id: "debug" as SettingsTab, + label: "Debug", + icon: Bug, + description: "Test first-time user experience", + }, + ] + : []), +] + +interface TabButtonProps { + tab: (typeof ALL_TABS)[number] + isActive: boolean + onClick: () => void + isNarrow?: boolean +} + +function TabButton({ tab, isActive, onClick, isNarrow }: TabButtonProps) { + const Icon = tab.icon + const isBeta = "beta" in tab && tab.beta + return ( + + ) +} + +// Helper to get tab label from tab id +function getTabLabel(tabId: SettingsTab): string { + return ALL_TABS.find((t) => t.id === tabId)?.label ?? "Settings" +} + +export function AgentsSettingsDialog({ + isOpen, + onClose, +}: AgentsSettingsDialogProps) { + const [activeTab, setActiveTab] = useAtom(agentsSettingsDialogActiveTabAtom) + const [mounted, setMounted] = useState(false) + const [portalTarget, setPortalTarget] = useState(null) + const isNarrowScreen = useIsNarrowScreen() + + // Narrow screen: track whether we're showing tab list or content + const [showContent, setShowContent] = useState(false) + + // Reset content view when dialog closes + useEffect(() => { + if (!isOpen) { + setShowContent(false) + } + }, [isOpen]) + + // Handle keyboard navigation + useEffect(() => { + if (!isOpen) return + + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") { + event.preventDefault() + if (isNarrowScreen && showContent) { + setShowContent(false) + } else { + onClose() + } + } + } + + document.addEventListener("keydown", handleKeyDown) + return () => document.removeEventListener("keydown", handleKeyDown) + }, [isOpen, onClose, isNarrowScreen, showContent]) + + // Ensure portal target only accessed on client + useEffect(() => { + setMounted(true) + if (typeof document !== "undefined") { + setPortalTarget(document.body) + } + }, []) + + const handleTabClick = (tabId: SettingsTab) => { + setActiveTab(tabId) + if (isNarrowScreen) { + setShowContent(true) + } + } + + const renderTabContent = () => { + switch (activeTab) { + case "profile": + return + case "appearance": + return + case "preferences": + return + case "skills": + return + case "debug": + return isDevelopment ? : null + default: + return null + } + } + + const renderTabList = () => ( +
    + {ALL_TABS.map((tab) => ( + handleTabClick(tab.id)} + isNarrow={isNarrowScreen} + /> + ))} +
    + ) + + if (!mounted || !portalTarget) return null + + // Narrow screen: Full-screen overlay with two-screen navigation + if (isNarrowScreen) { + if (!isOpen) return null + + return createPortal( + <> + {/* Full-screen settings panel */} +
    + {/* Header */} +
    + {showContent && ( + + )} +

    + {showContent ? getTabLabel(activeTab) : "Settings"} +

    + +
    + + {/* Content */} +
    + {showContent ? ( +
    + {renderTabContent()} +
    + ) : ( +
    + {renderTabList()} +
    + )} +
    +
    + , + portalTarget, + ) + } + + // Wide screen: Centered modal with sidebar + return createPortal( + + {isOpen && ( + <> + {/* Custom Overlay */} + + + {/* Settings Dialog */} +
    + +

    + Settings +

    + +
    + {/* Left Sidebar - Tabs */} +
    +

    + Settings +

    + + {/* All Tabs */} +
    + {ALL_TABS.map((tab) => ( + setActiveTab(tab.id)} + /> + ))} +
    +
    + + {/* Right Content Area */} +
    +
    + {renderTabContent()} +
    +
    +
    + + {/* Close Button */} + +
    +
    + + )} +
    , + portalTarget, + ) +} diff --git a/src/renderer/components/dialogs/agents-shortcuts-dialog.tsx b/src/renderer/components/dialogs/agents-shortcuts-dialog.tsx new file mode 100644 index 00000000..727d9f86 --- /dev/null +++ b/src/renderer/components/dialogs/agents-shortcuts-dialog.tsx @@ -0,0 +1,240 @@ +import { useEffect, useMemo } from "react" +import { AnimatePresence, motion } from "motion/react" +import { createPortal } from "react-dom" +import { useAtomValue } from "jotai" +import { CmdIcon } from "../../icons" +import { ctrlTabTargetAtom } from "../../lib/atoms" + +interface AgentsShortcutsDialogProps { + isOpen: boolean + onClose: () => void +} + +const EASING_CURVE = [0.55, 0.055, 0.675, 0.19] as const + +interface Shortcut { + label: string + keys: Array + altKeys?: Array +} + +function ShortcutKey({ keyName }: { keyName: string }) { + if (keyName === "cmd") { + return ( + + + + ) + } + + return ( + + {keyName === "opt" + ? "⌥" + : keyName === "shift" + ? "⇧" + : keyName === "ctrl" + ? "⌃" + : keyName} + + ) +} + +function ShortcutRow({ shortcut }: { shortcut: Shortcut }) { + return ( +
    + {shortcut.label} +
    + {shortcut.keys.map((key, index) => ( + + ))} + {shortcut.altKeys && ( + <> + or + {shortcut.altKeys.map((key, index) => ( + + ))} + + )} +
    +
    + ) +} + +// Desktop app shortcuts (simplified) +const GENERAL_SHORTCUTS: Shortcut[] = [ + { label: "Show shortcuts", keys: ["?"] }, + { label: "Settings", keys: ["cmd", ","] }, + { label: "Toggle sidebar", keys: ["cmd", "\\"] }, +] + +// Dynamic shortcuts based on ctrlTabTarget preference +function getWorkspaceShortcuts( + ctrlTabTarget: "workspaces" | "agents", +): Shortcut[] { + return [ + { label: "New workspace", keys: ["cmd", "N"] }, + { label: "Search workspaces", keys: ["cmd", "F"] }, + { label: "Archive current workspace", keys: ["cmd", "E"] }, + { + label: "Quick switch workspaces", + keys: + ctrlTabTarget === "workspaces" ? ["ctrl", "Tab"] : ["opt", "ctrl", "Tab"], + }, + ] +} + +function getAgentShortcuts( + ctrlTabTarget: "workspaces" | "agents", +): Shortcut[] { + return [ + // Creation & Management (mirrors Workspaces order) + { label: "Create new agent", keys: ["cmd", "T"] }, + { label: "Search agents", keys: ["/"] }, + { label: "Archive current agent", keys: ["cmd", "W"] }, + // Navigation + { + label: "Quick switch agents", + keys: + ctrlTabTarget === "workspaces" ? ["opt", "ctrl", "Tab"] : ["ctrl", "Tab"], + }, + { + label: "Previous / Next agent", + keys: ["cmd", "["], + altKeys: ["cmd", "]"], + }, + // Interaction + { label: "Focus input", keys: ["Enter"] }, + { label: "Toggle focus", keys: ["cmd", "Esc"] }, + { label: "Stop generation", keys: ["Esc"], altKeys: ["ctrl", "C"] }, + { label: "Switch model", keys: ["cmd", "/"] }, + // Tools + { label: "Toggle terminal", keys: ["cmd", "J"] }, + { label: "Open diff", keys: ["cmd", "D"] }, + { label: "Create PR", keys: ["cmd", "P"] }, + ] +} + +export function AgentsShortcutsDialog({ + isOpen, + onClose, +}: AgentsShortcutsDialogProps) { + const ctrlTabTarget = useAtomValue(ctrlTabTargetAtom) + + // Memoize shortcuts based on preference + const workspaceShortcuts = useMemo( + () => getWorkspaceShortcuts(ctrlTabTarget), + [ctrlTabTarget], + ) + const agentShortcuts = useMemo( + () => getAgentShortcuts(ctrlTabTarget), + [ctrlTabTarget], + ) + + // Handle ESC key to close dialog + useEffect(() => { + if (!isOpen) return + + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === "Escape") { + e.preventDefault() + onClose() + } + } + + window.addEventListener("keydown", handleKeyDown) + return () => window.removeEventListener("keydown", handleKeyDown) + }, [isOpen, onClose]) + + const portalTarget = typeof document !== "undefined" ? document.body : null + if (!portalTarget) return null + + return createPortal( + + {isOpen && ( + <> + {/* Overlay */} + + + {/* Main Dialog */} +
    + e.stopPropagation()} + > +
    +
    +

    + Keyboard Shortcuts +

    + + {/* Two-column layout: General+Workspaces | Agents */} +
    + {/* Left column: General + Workspaces */} +
    + {/* General Section */} +
    +

    + General +

    +
    + {GENERAL_SHORTCUTS.map((shortcut, index) => ( + + ))} +
    +
    + + {/* Workspaces Section */} +
    +

    + Workspaces +

    +
    + {workspaceShortcuts.map((shortcut, index) => ( + + ))} +
    +
    +
    + + {/* Right column: Agents */} +
    +

    + Agents +

    +
    + {agentShortcuts.map((shortcut, index) => ( + + ))} +
    +
    +
    +
    +
    +
    +
    + + )} +
    , + portalTarget, + ) +} diff --git a/src/renderer/components/dialogs/claude-login-modal.tsx b/src/renderer/components/dialogs/claude-login-modal.tsx new file mode 100644 index 00000000..02200446 --- /dev/null +++ b/src/renderer/components/dialogs/claude-login-modal.tsx @@ -0,0 +1,368 @@ +"use client" + +import { useAtom, useSetAtom } from "jotai" +import { useState, useEffect, useRef } from "react" +import { + AlertDialog, + AlertDialogContent, + AlertDialogCancel, +} from "../ui/alert-dialog" +import { X } from "lucide-react" +import { Input } from "../ui/input" +import { IconSpinner, ClaudeCodeIcon } from "../ui/icons" +import { Button } from "../ui/button" +import { Logo } from "../ui/logo" +import { agentsLoginModalOpenAtom } from "../../lib/atoms" +import { pendingAuthRetryMessageAtom } from "../../features/agents/atoms" +import { trpc } from "../../lib/trpc" +import { appStore } from "../../lib/jotai-store" + +type AuthFlowState = + | { step: "idle" } + | { step: "starting" } + | { + step: "waiting_url" + sandboxId: string + sandboxUrl: string + sessionId: string + } + | { + step: "has_url" + sandboxId: string + oauthUrl: string + sandboxUrl: string + sessionId: string + } + | { step: "submitting" } + | { step: "error"; message: string } + +export function ClaudeLoginModal() { + const [open, setOpen] = useAtom(agentsLoginModalOpenAtom) + const [flowState, setFlowState] = useState({ step: "idle" }) + const [authCode, setAuthCode] = useState("") + const [userClickedConnect, setUserClickedConnect] = useState(false) + const [urlOpened, setUrlOpened] = useState(false) + const [savedOauthUrl, setSavedOauthUrl] = useState(null) + const urlOpenedRef = useRef(false) + + // tRPC mutations + const startAuthMutation = trpc.claudeCode.startAuth.useMutation() + const submitCodeMutation = trpc.claudeCode.submitCode.useMutation() + const openOAuthUrlMutation = trpc.claudeCode.openOAuthUrl.useMutation() + + // Poll for OAuth URL + const pollStatusQuery = trpc.claudeCode.pollStatus.useQuery( + { + sandboxUrl: flowState.step === "waiting_url" ? flowState.sandboxUrl : "", + sessionId: flowState.step === "waiting_url" ? flowState.sessionId : "", + }, + { + enabled: flowState.step === "waiting_url", + refetchInterval: 1500, + } + ) + + // Update flow state when we get the OAuth URL + useEffect(() => { + if ( + flowState.step === "waiting_url" && + pollStatusQuery.data?.oauthUrl + ) { + setSavedOauthUrl(pollStatusQuery.data.oauthUrl) + setFlowState({ + step: "has_url", + sandboxId: flowState.sandboxId, + oauthUrl: pollStatusQuery.data.oauthUrl, + sandboxUrl: flowState.sandboxUrl, + sessionId: flowState.sessionId, + }) + } else if ( + flowState.step === "waiting_url" && + pollStatusQuery.data?.state === "error" + ) { + setFlowState({ + step: "error", + message: pollStatusQuery.data.error || "Failed to get OAuth URL", + }) + } + }, [pollStatusQuery.data, flowState]) + + // Open URL in browser when ready (after user clicked Connect) + useEffect(() => { + if ( + flowState.step === "has_url" && + userClickedConnect && + !urlOpenedRef.current + ) { + urlOpenedRef.current = true + setUrlOpened(true) + openOAuthUrlMutation.mutate(flowState.oauthUrl) + } + }, [flowState, userClickedConnect, openOAuthUrlMutation]) + + // Reset state when modal closes + useEffect(() => { + if (!open) { + setFlowState({ step: "idle" }) + setAuthCode("") + setUserClickedConnect(false) + setUrlOpened(false) + setSavedOauthUrl(null) + urlOpenedRef.current = false + // Clear pending retry if modal closed without success (user cancelled) + // Note: We don't clear here because success handler sets readyToRetry=true first + } + }, [open]) + + // Helper to trigger retry after successful OAuth + const triggerAuthRetry = () => { + const pending = appStore.get(pendingAuthRetryMessageAtom) + if (pending) { + console.log("[ClaudeLoginModal] OAuth success - triggering retry for subChatId:", pending.subChatId) + appStore.set(pendingAuthRetryMessageAtom, { ...pending, readyToRetry: true }) + } + } + + // Helper to clear pending retry (on cancel/close without success) + const clearPendingRetry = () => { + const pending = appStore.get(pendingAuthRetryMessageAtom) + if (pending && !pending.readyToRetry) { + console.log("[ClaudeLoginModal] Modal closed without success - clearing pending retry") + appStore.set(pendingAuthRetryMessageAtom, null) + } + } + + // Check if the code looks like a valid Claude auth code (format: XXX#YYY) + const isValidCodeFormat = (code: string) => { + const trimmed = code.trim() + return trimmed.length > 50 && trimmed.includes("#") + } + + const handleConnectClick = async () => { + setUserClickedConnect(true) + + if (flowState.step === "has_url") { + // URL is ready, open it immediately + urlOpenedRef.current = true + setUrlOpened(true) + openOAuthUrlMutation.mutate(flowState.oauthUrl) + } else if (flowState.step === "error") { + // Retry on error + urlOpenedRef.current = false + setUrlOpened(false) + setFlowState({ step: "starting" }) + try { + const result = await startAuthMutation.mutateAsync() + setFlowState({ + step: "waiting_url", + sandboxId: result.sandboxId, + sandboxUrl: result.sandboxUrl, + sessionId: result.sessionId, + }) + } catch (err) { + setFlowState({ + step: "error", + message: err instanceof Error ? err.message : "Failed to start authentication", + }) + } + } else if (flowState.step === "idle") { + // Start auth + setFlowState({ step: "starting" }) + try { + const result = await startAuthMutation.mutateAsync() + setFlowState({ + step: "waiting_url", + sandboxId: result.sandboxId, + sandboxUrl: result.sandboxUrl, + sessionId: result.sessionId, + }) + } catch (err) { + setFlowState({ + step: "error", + message: err instanceof Error ? err.message : "Failed to start authentication", + }) + } + } + } + + const handleSubmitCode = async () => { + if (!authCode.trim() || flowState.step !== "has_url") return + + const { sandboxUrl, sessionId } = flowState + setFlowState({ step: "submitting" }) + + try { + await submitCodeMutation.mutateAsync({ + sandboxUrl, + sessionId, + code: authCode.trim(), + }) + // Success - trigger retry and close modal + triggerAuthRetry() + setOpen(false) + } catch (err) { + setFlowState({ + step: "error", + message: err instanceof Error ? err.message : "Failed to submit code", + }) + } + } + + const handleCodeChange = (e: React.ChangeEvent) => { + const value = e.target.value + setAuthCode(value) + + // Auto-submit if the pasted value looks like a valid auth code + if (isValidCodeFormat(value) && flowState.step === "has_url") { + const { sandboxUrl, sessionId } = flowState + setTimeout(async () => { + setFlowState({ step: "submitting" }) + try { + await submitCodeMutation.mutateAsync({ + sandboxUrl, + sessionId, + code: value.trim(), + }) + // Success - trigger retry and close modal + triggerAuthRetry() + setOpen(false) + } catch (err) { + setFlowState({ + step: "error", + message: err instanceof Error ? err.message : "Failed to submit code", + }) + } + }, 100) + } + } + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter" && authCode.trim()) { + handleSubmitCode() + } + } + + const handleOpenFallbackUrl = () => { + if (savedOauthUrl) { + openOAuthUrlMutation.mutate(savedOauthUrl) + } + } + + const isLoadingAuth = + flowState.step === "starting" || flowState.step === "waiting_url" + const isSubmitting = flowState.step === "submitting" + + // Handle modal open/close - clear pending retry if closing without success + const handleOpenChange = (newOpen: boolean) => { + if (!newOpen) { + clearPendingRetry() + } + setOpen(newOpen) + } + + return ( + + + {/* Close button */} + + + Close + + +
    + {/* Header with dual icons */} +
    +
    +
    + +
    +
    + +
    +
    +
    +

    + Claude Code +

    +

    + Connect your Claude Code subscription +

    +
    +
    + + {/* Content */} +
    + {/* Connect Button - shows loader only if user clicked AND loading */} + {!urlOpened && flowState.step !== "has_url" && flowState.step !== "error" && ( + + )} + + {/* Code Input - Show after URL is opened or if has_url */} + {(urlOpened || + flowState.step === "has_url" || + flowState.step === "submitting") && ( +
    + + +

    + A new tab has opened for authentication. + {savedOauthUrl && ( + <> + {" "} + + + )} +

    +
    + )} + + {/* Error State */} + {flowState.step === "error" && ( +
    +
    +

    {flowState.message}

    +
    + +
    + )} +
    +
    +
    +
    + ) +} diff --git a/src/renderer/components/dialogs/index.ts b/src/renderer/components/dialogs/index.ts new file mode 100644 index 00000000..1582f09c --- /dev/null +++ b/src/renderer/components/dialogs/index.ts @@ -0,0 +1,9 @@ +// Dialogs +export { AgentsSettingsDialog } from "./agents-settings-dialog" +export { AgentsShortcutsDialog } from "./agents-shortcuts-dialog" +export { AgentsHelpPopover } from "./agents-help-popover" + +// Settings tabs +export { AgentsAppearanceTab } from "./settings-tabs/agents-appearance-tab" +export { AgentsProfileTab } from "./settings-tabs/agents-profile-tab" +export { AgentsDebugTab } from "./settings-tabs/agents-debug-tab" diff --git a/src/renderer/components/dialogs/settings-tabs/agents-appearance-tab.tsx b/src/renderer/components/dialogs/settings-tabs/agents-appearance-tab.tsx new file mode 100644 index 00000000..af6d6048 --- /dev/null +++ b/src/renderer/components/dialogs/settings-tabs/agents-appearance-tab.tsx @@ -0,0 +1,481 @@ +import { useTheme } from "next-themes" +import { useState, useEffect, useCallback, useMemo } from "react" +import { useAtom, useSetAtom } from "jotai" +import { motion, AnimatePresence } from "motion/react" +import { cn } from "../../../lib/utils" +import { + selectedFullThemeIdAtom, + fullThemeDataAtom, + systemLightThemeIdAtom, + systemDarkThemeIdAtom, + type VSCodeFullTheme, +} from "../../../lib/atoms" +import { + BUILTIN_THEMES, + getBuiltinThemeById, +} from "../../../lib/themes/builtin-themes" +import { + generateCSSVariables, + applyCSSVariables, + removeCSSVariables, + getThemeTypeFromColors, +} from "../../../lib/themes/vscode-to-css-mapping" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "../../../components/ui/select" + +// Hook to detect narrow screen +function useIsNarrowScreen(): boolean { + const [isNarrow, setIsNarrow] = useState(false) + + useEffect(() => { + const checkWidth = () => { + setIsNarrow(window.innerWidth <= 768) + } + + checkWidth() + window.addEventListener("resize", checkWidth) + return () => window.removeEventListener("resize", checkWidth) + }, []) + + return isNarrow +} + +// Check if a hex color is visible (not too transparent) +function isVisibleColor(hex: string | undefined): boolean { + if (!hex) return false + // Remove # if present + const cleanHex = hex.replace(/^#/, "") + // If 8 characters, check alpha + if (cleanHex.length === 8) { + const alpha = parseInt(cleanHex.slice(6, 8), 16) + // Consider colors with less than 50% opacity as "not visible" for accent purposes + return alpha >= 128 + } + return true +} + +// Theme preview box with dot and "Aa" text +function ThemePreviewBox({ + theme, + size = "md", + className, +}: { + theme: VSCodeFullTheme | null + size?: "sm" | "md" + className?: string +}) { + const bgColor = theme?.colors?.["editor.background"] || "#1a1a1a" + + // Get accent color, preferring button.background and skipping transparent colors + const getAccentColor = () => { + const candidates = [ + theme?.colors?.["button.background"], + theme?.colors?.["textLink.foreground"], + theme?.colors?.["focusBorder"], + theme?.colors?.["activityBarBadge.background"], + ] + for (const color of candidates) { + if (isVisibleColor(color)) { + return color + } + } + return "#0034FF" + } + + const accentColor = getAccentColor() + const isDark = theme ? theme.type === "dark" : true + + const sizeClasses = + size === "sm" + ? "w-7 h-5 text-[9px] gap-0.5 rounded-sm" + : "w-8 h-6 text-[10px] gap-1 rounded-sm" + + const dotSize = size === "sm" ? "w-1 h-1" : "w-1.5 h-1.5" + + return ( +
    + {/* Accent dot to the left of text */} +
    + Aa +
    + ) +} + +export function AgentsAppearanceTab() { + const { resolvedTheme, setTheme: setNextTheme } = useTheme() + const [mounted, setMounted] = useState(false) + const isNarrowScreen = useIsNarrowScreen() + + // Theme atoms + const [selectedThemeId, setSelectedThemeId] = useAtom(selectedFullThemeIdAtom) + const [systemLightThemeId, setSystemLightThemeId] = useAtom( + systemLightThemeIdAtom, + ) + const [systemDarkThemeId, setSystemDarkThemeId] = useAtom( + systemDarkThemeIdAtom, + ) + const setFullThemeData = useSetAtom(fullThemeDataAtom) + + useEffect(() => { + setMounted(true) + }, []) + + // Group themes by type + const darkThemes = useMemo( + () => BUILTIN_THEMES.filter((t) => t.type === "dark"), + [], + ) + const lightThemes = useMemo( + () => BUILTIN_THEMES.filter((t) => t.type === "light"), + [], + ) + + // Is system mode selected + const isSystemMode = selectedThemeId === null + + // Get the current theme for display + const currentTheme = useMemo(() => { + if (selectedThemeId === null) { + return null // System mode + } + return BUILTIN_THEMES.find((t) => t.id === selectedThemeId) || null + }, [selectedThemeId]) + + // Get theme objects for system mode selectors + const systemLightTheme = useMemo( + () => getBuiltinThemeById(systemLightThemeId), + [systemLightThemeId], + ) + const systemDarkTheme = useMemo( + () => getBuiltinThemeById(systemDarkThemeId), + [systemDarkThemeId], + ) + + // Apply theme based on current settings + const applyTheme = useCallback( + (themeId: string | null) => { + if (themeId === null) { + // System mode - apply theme based on system preference + removeCSSVariables() + setFullThemeData(null) + setNextTheme("system") + + // Apply the appropriate system theme + const isDark = resolvedTheme === "dark" + const systemTheme = isDark + ? getBuiltinThemeById(systemDarkThemeId) + : getBuiltinThemeById(systemLightThemeId) + + if (systemTheme) { + const cssVars = generateCSSVariables(systemTheme.colors) + applyCSSVariables(cssVars) + } + return + } + + const theme = BUILTIN_THEMES.find((t) => t.id === themeId) + if (theme) { + setFullThemeData(theme) + + // Apply CSS variables + const cssVars = generateCSSVariables(theme.colors) + applyCSSVariables(cssVars) + + // Sync next-themes with theme type + const themeType = getThemeTypeFromColors(theme.colors) + if (themeType === "dark") { + document.documentElement.classList.add("dark") + document.documentElement.classList.remove("light") + } else { + document.documentElement.classList.remove("dark") + document.documentElement.classList.add("light") + } + setNextTheme(themeType) + } + }, + [ + resolvedTheme, + systemLightThemeId, + systemDarkThemeId, + setFullThemeData, + setNextTheme, + ], + ) + + // Handle main theme selection + const handleThemeChange = useCallback( + (value: string) => { + if (value === "system") { + setSelectedThemeId(null) + applyTheme(null) + } else { + setSelectedThemeId(value) + applyTheme(value) + } + }, + [setSelectedThemeId, applyTheme], + ) + + // Handle system light theme change + const handleSystemLightThemeChange = useCallback( + (themeId: string) => { + setSystemLightThemeId(themeId) + // If currently in light mode, apply the new theme + if (resolvedTheme === "light" && selectedThemeId === null) { + const theme = getBuiltinThemeById(themeId) + if (theme) { + const cssVars = generateCSSVariables(theme.colors) + applyCSSVariables(cssVars) + } + } + }, + [setSystemLightThemeId, resolvedTheme, selectedThemeId], + ) + + // Handle system dark theme change + const handleSystemDarkThemeChange = useCallback( + (themeId: string) => { + setSystemDarkThemeId(themeId) + // If currently in dark mode, apply the new theme + if (resolvedTheme === "dark" && selectedThemeId === null) { + const theme = getBuiltinThemeById(themeId) + if (theme) { + const cssVars = generateCSSVariables(theme.colors) + applyCSSVariables(cssVars) + } + } + }, + [setSystemDarkThemeId, resolvedTheme, selectedThemeId], + ) + + // Re-apply theme when system preference changes + useEffect(() => { + if (selectedThemeId === null && mounted) { + const isDark = resolvedTheme === "dark" + const systemTheme = isDark + ? getBuiltinThemeById(systemDarkThemeId) + : getBuiltinThemeById(systemLightThemeId) + + if (systemTheme) { + const cssVars = generateCSSVariables(systemTheme.colors) + applyCSSVariables(cssVars) + } + } + }, [ + resolvedTheme, + selectedThemeId, + systemLightThemeId, + systemDarkThemeId, + mounted, + ]) + + if (!mounted) { + return ( +
    +
    +
    +
    +
    + ) + } + + return ( +
    + {/* Header - hidden on narrow screens since it's in the navigation bar */} + {!isNarrowScreen && ( +
    +

    Appearance

    +

    + Customize the look and feel of the interface +

    +
    + )} + + {/* Interface Theme Section */} +
    + {/* Main theme selector */} +
    +
    + + Interface theme + + + Select or customize your interface color scheme + +
    + + +
    + + {/* Animated Light/Dark theme selectors for system mode */} + + {isSystemMode && ( + + {/* Light theme selector */} +
    +
    + + Light + + + Theme to use for light system appearance + +
    + + +
    + + {/* Dark theme selector */} +
    +
    + + Dark + + + Theme to use for dark system appearance + +
    + + +
    +
    + )} +
    +
    +
    + ) +} diff --git a/src/renderer/components/dialogs/settings-tabs/agents-debug-tab.tsx b/src/renderer/components/dialogs/settings-tabs/agents-debug-tab.tsx new file mode 100644 index 00000000..7f8d4330 --- /dev/null +++ b/src/renderer/components/dialogs/settings-tabs/agents-debug-tab.tsx @@ -0,0 +1,288 @@ +import { useState, useEffect } from "react" +import { Button } from "../../ui/button" +import { trpc } from "../../../lib/trpc" +import { toast } from "sonner" +import { Copy, FolderOpen, RefreshCw, Terminal, Check } from "lucide-react" + +// Hook to detect narrow screen +function useIsNarrowScreen(): boolean { + const [isNarrow, setIsNarrow] = useState(false) + + useEffect(() => { + const checkWidth = () => { + setIsNarrow(window.innerWidth <= 768) + } + + checkWidth() + window.addEventListener("resize", checkWidth) + return () => window.removeEventListener("resize", checkWidth) + }, []) + + return isNarrow +} + +export function AgentsDebugTab() { + const [copiedPath, setCopiedPath] = useState(false) + const [copiedInfo, setCopiedInfo] = useState(false) + const isNarrowScreen = useIsNarrowScreen() + + // Fetch system info + const { data: systemInfo, isLoading: isLoadingSystem } = + trpc.debug.getSystemInfo.useQuery() + + // Fetch DB stats + const { data: dbStats, isLoading: isLoadingDb, refetch: refetchDb } = + trpc.debug.getDbStats.useQuery() + + // Mutations + const clearChatsMutation = trpc.debug.clearChats.useMutation({ + onSuccess: () => { + toast.success("All chats cleared") + refetchDb() + }, + onError: (error) => toast.error(error.message), + }) + + const clearAllDataMutation = trpc.debug.clearAllData.useMutation({ + onSuccess: () => { + toast.success("All data cleared. Reloading...") + setTimeout(() => window.location.reload(), 500) + }, + onError: (error) => toast.error(error.message), + }) + + const logoutMutation = trpc.debug.logout.useMutation({ + onSuccess: () => { + toast.success("Logged out. Reloading...") + setTimeout(() => window.location.reload(), 500) + }, + onError: (error) => toast.error(error.message), + }) + + const openFolderMutation = trpc.debug.openUserDataFolder.useMutation({ + onError: (error) => toast.error(error.message), + }) + + const handleCopyPath = async () => { + if (systemInfo?.userDataPath) { + await navigator.clipboard.writeText(systemInfo.userDataPath) + setCopiedPath(true) + setTimeout(() => setCopiedPath(false), 2000) + } + } + + const handleCopyDebugInfo = async () => { + const info = { + ...systemInfo, + dbStats, + timestamp: new Date().toISOString(), + } + await navigator.clipboard.writeText(JSON.stringify(info, null, 2)) + setCopiedInfo(true) + toast.success("Debug info copied to clipboard") + setTimeout(() => setCopiedInfo(false), 2000) + } + + const handleOpenDevTools = () => { + window.desktopApi?.toggleDevTools() + } + + const isLoading = isLoadingSystem || isLoadingDb + + return ( +
    + {/* Header - hidden on narrow screens since it's in the navigation bar */} + {!isNarrowScreen && ( +
    +

    Debug

    +

    + System information and developer tools +

    +
    + )} + + {/* System Info */} +
    +

    + System Info +

    +
    + + + + +
    + userData +
    + + {isLoading ? "..." : systemInfo?.userDataPath} + + +
    +
    +
    +
    + + {/* DB Stats */} +
    +

    + Database +

    +
    + + + +
    +
    + + {/* Quick Actions */} +
    +

    + Quick Actions +

    +
    + + + + +
    +
    + + {/* Data Management */} +
    +

    + Data Management +

    +
    + + + +
    +
    +
    + ) +} + +// Helper component for info rows +function InfoRow({ + label, + value, + isLoading, + status, +}: { + label: string + value?: string + isLoading?: boolean + status?: "success" | "warning" | "error" +}) { + return ( +
    + {label} + + {isLoading ? "..." : value ?? "-"} + +
    + ) +} diff --git a/src/renderer/components/dialogs/settings-tabs/agents-preferences-tab.tsx b/src/renderer/components/dialogs/settings-tabs/agents-preferences-tab.tsx new file mode 100644 index 00000000..916cfcc3 --- /dev/null +++ b/src/renderer/components/dialogs/settings-tabs/agents-preferences-tab.tsx @@ -0,0 +1,164 @@ +import { useAtom } from "jotai" +import { useState, useEffect } from "react" +import { + extendedThinkingEnabledAtom, + soundNotificationsEnabledAtom, + analyticsOptOutAtom, + ctrlTabTargetAtom, + type CtrlTabTarget, +} from "../../../lib/atoms" +import { Switch } from "../../ui/switch" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, +} from "../../ui/select" +import { Kbd } from "../../ui/kbd" + +// Hook to detect narrow screen +function useIsNarrowScreen(): boolean { + const [isNarrow, setIsNarrow] = useState(false) + + useEffect(() => { + const checkWidth = () => { + setIsNarrow(window.innerWidth <= 768) + } + + checkWidth() + window.addEventListener("resize", checkWidth) + return () => window.removeEventListener("resize", checkWidth) + }, []) + + return isNarrow +} + +export function AgentsPreferencesTab() { + const [thinkingEnabled, setThinkingEnabled] = useAtom( + extendedThinkingEnabledAtom, + ) + const [soundEnabled, setSoundEnabled] = useAtom(soundNotificationsEnabledAtom) + const [analyticsOptOut, setAnalyticsOptOut] = useAtom(analyticsOptOutAtom) + const [ctrlTabTarget, setCtrlTabTarget] = useAtom(ctrlTabTargetAtom) + const isNarrowScreen = useIsNarrowScreen() + + // Sync opt-out status to main process + const handleAnalyticsToggle = async (optedOut: boolean) => { + setAnalyticsOptOut(optedOut) + // Notify main process + try { + await window.desktopApi?.setAnalyticsOptOut(optedOut) + } catch (error) { + console.error("Failed to sync analytics opt-out to main process:", error) + } + } + + return ( +
    + {/* Header - hidden on narrow screens since it's in the navigation bar */} + {!isNarrowScreen && ( +
    +

    Preferences

    +

    + Configure Claude's behavior and features +

    +
    + )} + + {/* Features Section */} +
    +
    + {/* Extended Thinking Toggle */} +
    +
    + + Extended Thinking + + + Enable deeper reasoning with more thinking tokens (uses more + credits).{" "} + Disables response streaming. + +
    + +
    + + {/* Sound Notifications Toggle */} +
    +
    + + Sound Notifications + + + Play a sound when agent completes work while you're away + +
    + +
    +
    +
    + + {/* Keyboard Shortcuts Section */} +
    +
    +
    + + Quick Switch + + + What ⌃Tab switches between + +
    + + +
    +
    + + {/* Privacy Section */} +
    +
    +

    Privacy

    +

    + Control what data you share with us +

    +
    + +
    +
    + {/* Share Usage Analytics */} +
    +
    + + Share Usage Analytics + + + Help us improve Agents by sharing anonymous usage data. We only track feature usage and app performance–never your code, prompts, or messages. No AI training on your data. + +
    + handleAnalyticsToggle(!enabled)} + /> +
    +
    +
    +
    +
    + ) +} diff --git a/src/renderer/components/dialogs/settings-tabs/agents-profile-tab.tsx b/src/renderer/components/dialogs/settings-tabs/agents-profile-tab.tsx new file mode 100644 index 00000000..9c66e9c8 --- /dev/null +++ b/src/renderer/components/dialogs/settings-tabs/agents-profile-tab.tsx @@ -0,0 +1,137 @@ +import { useState, useEffect } from "react" +import { Button } from "../../ui/button" +import { Input } from "../../ui/input" +import { Label } from "../../ui/label" +import { IconSpinner } from "../../../icons" + +// Hook to detect narrow screen +function useIsNarrowScreen(): boolean { + const [isNarrow, setIsNarrow] = useState(false) + + useEffect(() => { + const checkWidth = () => { + setIsNarrow(window.innerWidth <= 768) + } + + checkWidth() + window.addEventListener("resize", checkWidth) + return () => window.removeEventListener("resize", checkWidth) + }, []) + + return isNarrow +} + +interface DesktopUser { + id: string + email: string + name: string | null + imageUrl: string | null + username: string | null +} + +export function AgentsProfileTab() { + const [user, setUser] = useState(null) + const [fullName, setFullName] = useState("") + const [isSaving, setIsSaving] = useState(false) + const [isLoading, setIsLoading] = useState(true) + const isNarrowScreen = useIsNarrowScreen() + + // Fetch real user data from desktop API + useEffect(() => { + async function fetchUser() { + if (window.desktopApi?.getUser) { + const userData = await window.desktopApi.getUser() + setUser(userData) + setFullName(userData?.name || "") + } + setIsLoading(false) + } + fetchUser() + }, []) + + const handleSave = async () => { + setIsSaving(true) + // Simulate API call + await new Promise((resolve) => setTimeout(resolve, 1000)) + setIsSaving(false) + console.log("Mock: Profile saved", { fullName }) + } + + if (isLoading) { + return ( +
    + +
    + ) + } + + return ( +
    + {/* Profile Settings Card */} +
    + {/* Header - hidden on narrow screens since it's in the navigation bar */} + {!isNarrowScreen && ( +
    +

    Account

    +
    + )} +
    +
    + {/* Full Name Field */} +
    +
    + +

    + This is your display name +

    +
    +
    + setFullName(e.target.value)} + className="w-full" + placeholder="Enter your name" + /> +
    +
    + + {/* Email Field (read-only) */} +
    +
    + +

    + Your account email +

    +
    +
    + +
    +
    +
    + + {/* Save Button Footer */} +
    + +
    +
    +
    + +
    + ) +} diff --git a/src/renderer/components/dialogs/settings-tabs/agents-skills-tab.tsx b/src/renderer/components/dialogs/settings-tabs/agents-skills-tab.tsx new file mode 100644 index 00000000..1b4cd7be --- /dev/null +++ b/src/renderer/components/dialogs/settings-tabs/agents-skills-tab.tsx @@ -0,0 +1,212 @@ +import { useState, useEffect } from "react" +import { ChevronRight } from "lucide-react" +import { motion, AnimatePresence } from "motion/react" +import { trpc } from "../../../lib/trpc" +import { cn } from "../../../lib/utils" +import { SkillIcon } from "../../ui/icons" + +// Hook to detect narrow screen +function useIsNarrowScreen(): boolean { + const [isNarrow, setIsNarrow] = useState(false) + + useEffect(() => { + const checkWidth = () => { + setIsNarrow(window.innerWidth <= 768) + } + + checkWidth() + window.addEventListener("resize", checkWidth) + return () => window.removeEventListener("resize", checkWidth) + }, []) + + return isNarrow +} + +export function AgentsSkillsTab() { + const isNarrowScreen = useIsNarrowScreen() + const [expandedSkillName, setExpandedSkillName] = useState(null) + + const { data: skills = [], isLoading } = trpc.skills.list.useQuery(undefined) + + const userSkills = skills.filter((s) => s.source === "user") + const projectSkills = skills.filter((s) => s.source === "project") + + const handleExpandSkill = (skillName: string) => { + setExpandedSkillName(expandedSkillName === skillName ? null : skillName) + } + + return ( +
    + {/* Header - hidden on narrow screens */} + {!isNarrowScreen && ( +
    +
    +

    Skills

    + + Beta + +
    + + Documentation + +
    + )} + + {/* Skills List */} +
    + {isLoading ? ( +
    + Loading skills... +
    + ) : skills.length === 0 ? ( +
    + +

    + No skills found +

    +

    + Add skills to ~/.claude/skills/ or .claude/skills/ +

    +
    + ) : ( + <> + {/* User Skills */} + {userSkills.length > 0 && ( +
    +
    + ~/.claude/skills/ +
    +
    +
    + {userSkills.map((skill) => ( + handleExpandSkill(skill.name)} + /> + ))} +
    +
    +
    + )} + + {/* Project Skills */} + {projectSkills.length > 0 && ( +
    +
    + .claude/skills/ +
    +
    +
    + {projectSkills.map((skill) => ( + handleExpandSkill(skill.name)} + /> + ))} +
    +
    +
    + )} + + )} +
    + + {/* Info Section */} +
    +
    +

    + How to use Skills +

    +

    + Mention a skill in chat with @skill-name or ask Claude to use it directly. +

    +
    +
    +

    + Creating Skills +

    +

    + Create a folder with a SKILL.md file in ~/.claude/skills/your-skill/ +

    +
    +
    +
    + ) +} + +function SkillRow({ + skill, + isExpanded, + onToggle, +}: { + skill: { name: string; description: string; source: "user" | "project"; path: string } + isExpanded: boolean + onToggle: () => void +}) { + return ( +
    + + + + {isExpanded && ( + +
    +
    +
    + Path +

    + {skill.path} +

    +
    +
    + Usage +

    + Type @{skill.name} in chat or ask Claude to use the {skill.name} skill. +

    +
    +
    +
    +
    + )} +
    +
    + ) +} diff --git a/src/renderer/components/dialogs/settings-tabs/index.ts b/src/renderer/components/dialogs/settings-tabs/index.ts new file mode 100644 index 00000000..41261a07 --- /dev/null +++ b/src/renderer/components/dialogs/settings-tabs/index.ts @@ -0,0 +1,4 @@ +export { AgentsAppearanceTab } from "./agents-appearance-tab" +export { AgentsProfileTab } from "./agents-profile-tab" +export { AgentsDebugTab } from "./agents-debug-tab" +export { AgentsSkillsTab } from "./agents-skills-tab" diff --git a/src/renderer/components/rename-dialog.tsx b/src/renderer/components/rename-dialog.tsx new file mode 100644 index 00000000..1314c501 --- /dev/null +++ b/src/renderer/components/rename-dialog.tsx @@ -0,0 +1,178 @@ +import { AnimatePresence, motion } from "motion/react" +import { useEffect, useState, useRef } from "react" +import { createPortal } from "react-dom" +import { Button } from "./ui/button" +import { Input } from "./ui/input" + +interface RenameDialogProps { + isOpen: boolean + onClose: () => void + onSave: (name: string) => Promise + currentName: string + isLoading?: boolean + title?: string + placeholder?: string +} + +const EASING_CURVE = [0.55, 0.055, 0.675, 0.19] as const +const INTERACTION_DELAY_MS = 250 + +export function RenameDialog({ + isOpen, + onClose, + onSave, + currentName, + isLoading = false, + title = "Rename", + placeholder = "Name", +}: RenameDialogProps) { + const [mounted, setMounted] = useState(false) + const [name, setName] = useState(currentName) + const [isSaving, setIsSaving] = useState(false) + const openAtRef = useRef(0) + const inputRef = useRef(null) + + useEffect(() => { + setMounted(true) + }, []) + + useEffect(() => { + if (isOpen) { + openAtRef.current = performance.now() + setName(currentName) + } + }, [isOpen, currentName]) + + const handleAnimationComplete = () => { + // Focus and select input after animation completes (only if still open) + if (isOpen) { + inputRef.current?.focus() + inputRef.current?.select() + } + } + + useEffect(() => { + if (!isOpen) return + + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === "Escape") { + event.preventDefault() + handleClose() + } + if (event.key === "Enter" && !event.shiftKey) { + event.preventDefault() + handleSave() + } + } + + document.addEventListener("keydown", handleKeyDown) + return () => document.removeEventListener("keydown", handleKeyDown) + }, [isOpen, name]) + + const handleClose = () => { + const canInteract = performance.now() - openAtRef.current > INTERACTION_DELAY_MS + if (!canInteract || isSaving) return + onClose() + } + + const handleSave = async () => { + const trimmedName = name.trim() + if (!trimmedName || trimmedName === currentName) { + handleClose() + return + } + + setIsSaving(true) + try { + await onSave(trimmedName) + handleClose() + } catch { + // Error is already handled by parent (toast), keep dialog open + } finally { + setIsSaving(false) + } + } + + if (!mounted) return null + + const portalTarget = typeof document !== "undefined" ? document.body : null + if (!portalTarget) return null + + return createPortal( + + {isOpen && ( + <> + {/* Overlay */} + + + {/* Main Dialog */} +
    + e.stopPropagation()} + > +
    +
    +

    + {title} +

    + + {/* Input */} + setName(e.target.value)} + placeholder={placeholder} + className="w-full h-11 text-sm" + disabled={isSaving || isLoading} + /> +
    + + {/* Footer with buttons */} +
    + + +
    +
    +
    +
    + + )} +
    , + portalTarget, + ) +} diff --git a/src/renderer/components/traffic-light-spacer.tsx b/src/renderer/components/traffic-light-spacer.tsx new file mode 100644 index 00000000..b790fa8c --- /dev/null +++ b/src/renderer/components/traffic-light-spacer.tsx @@ -0,0 +1,71 @@ +import * as React from "react" +import { cn } from "../lib/utils" + +interface TrafficLightSpacerProps { + isFullscreen?: boolean + isDesktop?: boolean + className?: string +} + +/** + * Spacer component for macOS traffic lights (close/minimize/maximize buttons) + * Only renders on desktop and when not in fullscreen + */ +export function TrafficLightSpacer({ + isFullscreen = false, + isDesktop = false, + className, +}: TrafficLightSpacerProps) { + // Only show spacer on desktop when not in fullscreen + if (!isDesktop || isFullscreen) { + return null + } + + return
    +} + +interface TrafficLightsProps { + isHovered?: boolean + isFullscreen?: boolean + isDesktop?: boolean + className?: string +} + +/** + * Traffic lights component for macOS window controls + * Shows colored circles when hovered, gray when not + */ +export function TrafficLights({ + isHovered = false, + isFullscreen = false, + isDesktop = false, + className, +}: TrafficLightsProps) { + // Only show on desktop when not in fullscreen + if (!isDesktop || isFullscreen) { + return null + } + + return ( +
    +
    +
    +
    +
    + ) +} diff --git a/src/renderer/components/ui/accordion.tsx b/src/renderer/components/ui/accordion.tsx new file mode 100644 index 00000000..00ae51f3 --- /dev/null +++ b/src/renderer/components/ui/accordion.tsx @@ -0,0 +1,57 @@ +"use client" + +import * as React from "react" +import * as AccordionPrimitive from "@radix-ui/react-accordion" +import { cn } from "../../lib/utils" +import { ChevronDownIcon } from "@radix-ui/react-icons" + +const Accordion = AccordionPrimitive.Root + +const AccordionItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AccordionItem.displayName = "AccordionItem" + +const AccordionTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + svg]:rotate-180", + className, + )} + {...props} + > + {children} + + + +)) +AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName + +const AccordionContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + +
    {children}
    +
    +)) + +AccordionContent.displayName = AccordionPrimitive.Content.displayName + +export { Accordion, AccordionItem, AccordionTrigger, AccordionContent } diff --git a/src/renderer/components/ui/alert-dialog.tsx b/src/renderer/components/ui/alert-dialog.tsx new file mode 100644 index 00000000..8a215df8 --- /dev/null +++ b/src/renderer/components/ui/alert-dialog.tsx @@ -0,0 +1,156 @@ +"use client" + +import * as React from "react" +import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog" +import { Cross2Icon } from "@radix-ui/react-icons" + +import { cn } from "../../lib/utils" +import { buttonVariants } from "./button" + +const AlertDialog = AlertDialogPrimitive.Root + +const AlertDialogTrigger = AlertDialogPrimitive.Trigger + +const AlertDialogPortal = AlertDialogPrimitive.Portal + +const AlertDialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName + +const AlertDialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + showCloseButton?: boolean + } +>(({ className, children, showCloseButton = false, ...props }, ref) => ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + +)) +AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName + +// Alert dialog header (no border, just padding) +const AlertDialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +AlertDialogHeader.displayName = "AlertDialogHeader" + +// Alert dialog body (content area) +const AlertDialogBody = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +AlertDialogBody.displayName = "AlertDialogBody" + +// Alert dialog footer with muted background +const AlertDialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +AlertDialogFooter.displayName = "AlertDialogFooter" + +const AlertDialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName + +const AlertDialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogDescription.displayName = + AlertDialogPrimitive.Description.displayName + +const AlertDialogAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogAction.displayName = AlertDialogPrimitive.Action.displayName + +const AlertDialogCancel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +AlertDialogCancel.displayName = AlertDialogPrimitive.Cancel.displayName + +export { + AlertDialog, + AlertDialogPortal, + AlertDialogOverlay, + AlertDialogTrigger, + AlertDialogContent, + AlertDialogHeader, + AlertDialogBody, + AlertDialogFooter, + AlertDialogTitle, + AlertDialogDescription, + AlertDialogAction, + AlertDialogCancel, +} diff --git a/src/renderer/components/ui/badge.tsx b/src/renderer/components/ui/badge.tsx new file mode 100644 index 00000000..cf38f097 --- /dev/null +++ b/src/renderer/components/ui/badge.tsx @@ -0,0 +1,36 @@ +import * as React from "react" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "../../lib/utils" + +const badgeVariants = cva( + "inline-flex items-center rounded-full border px-2 py-[1px] transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2", + { + variants: { + variant: { + default: + "border-transparent bg-primary text-primary-foreground hover:bg-primary/80", + secondary: + "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + outline: "text-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + }, +) + +export interface BadgeProps + extends React.HTMLAttributes, + VariantProps {} + +function Badge({ className, variant, ...props }: BadgeProps) { + return ( +
    + ) +} + +export { Badge, badgeVariants } diff --git a/src/renderer/components/ui/button-group.tsx b/src/renderer/components/ui/button-group.tsx new file mode 100644 index 00000000..a6657930 --- /dev/null +++ b/src/renderer/components/ui/button-group.tsx @@ -0,0 +1,32 @@ +"use client" + +import * as React from "react" +import { cn } from "../../lib/utils" + +interface ButtonGroupProps extends React.HTMLAttributes { + children: React.ReactNode +} + +const ButtonGroup = React.forwardRef( + ({ className, children, ...props }, ref) => { + return ( +
    button]:rounded-none", + "[&>button:first-child]:rounded-l-md", + "[&>button:last-child]:rounded-r-md", + "[&>button:not(:first-child)]:-ml-px", + className + )} + {...props} + > + {children} +
    + ) + } +) +ButtonGroup.displayName = "ButtonGroup" + +export { ButtonGroup } diff --git a/src/renderer/components/ui/button.tsx b/src/renderer/components/ui/button.tsx new file mode 100644 index 00000000..1595c3a1 --- /dev/null +++ b/src/renderer/components/ui/button.tsx @@ -0,0 +1,63 @@ +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" +import * as React from "react" + +import { cn } from "../../lib/utils" + +// The outer border for the default button variant is always pure black (rgb(23,23,23)), +// and does not change in dark mode. The inner shadow remains theme-dependent. +const buttonVariants = cva( + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors outline-offset-2 focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary/70 disabled:opacity-50 disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0", + { + variants: { + variant: { + default: + // Outer border always black, inner shadow is theme-dependent + "bg-primary text-primary-foreground hover:bg-primary/90 shadow-[0_0_0_0.5px_rgb(23,23,23),inset_0_0_0_1px_rgba(255,255,255,0.14)] dark:shadow-[0_0_0_0.5px_rgb(23,23,23),inset_0_0_0_1px_rgba(0,0,0,0.14)]", + brand: + "relative cursor-pointer space-x-2 font-regular dark:text-foreground ease-out duration-200 outline-0 focus-visible:outline-4 focus-visible:outline-offset-1 border bg-gradient-to-b from-[hsl(var(--primary-gradient-start))] to-[hsl(var(--primary-gradient-end))] hover:opacity-90 text-primary-foreground border-[hsl(var(--primary-gradient-start))] focus-visible:outline-[hsl(var(--primary-gradient-start))] data-[state=open]:opacity-90 data-[state=open]:outline-[hsl(var(--primary-gradient-start))] disabled:border-transparent", + destructive: + "bg-destructive text-destructive-foreground shadow-sm shadow-black/5 hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm shadow-black/5 hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground border border-input shadow-sm shadow-black/5 hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + sm: "h-7 rounded-md px-3", + // default: "h-9 px-4 py-2", + default: "h-7 rounded-md px-3", + lg: "h-10 rounded-md px-8", + icon: "h-7 w-7", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + }, +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/src/renderer/components/ui/canvas-icons.tsx b/src/renderer/components/ui/canvas-icons.tsx new file mode 100644 index 00000000..a4e01b23 --- /dev/null +++ b/src/renderer/components/ui/canvas-icons.tsx @@ -0,0 +1,5138 @@ +"use client" + +import { LucideProps } from "lucide-react" +import * as React from "react" + +type IconProps = React.SVGProps & { className?: string } + +export function AnthropicLogoIcon({ className }: { className?: string }) { + return ( + + ) +} + +export function IconGap(props: IconProps) { + return ( + + + + ) +} + +export function IconDoubleChevronRight(props: IconProps) { + return ( + + + + + ) +} + +export function IconDoubleChevronLeft(props: IconProps) { + return ( + + + + + ) +} + +/** @deprecated Use IconDoubleChevronRight instead */ +export function IconCloseSidebarRight(props: IconProps) { + return +} + +export function IconOpenSidebarRight(props: IconProps) { + return ( + + + + + + + + ) +} + +export function DiffIcon(props: IconProps) { + return ( + + + + + + + + ) +} + +export function ClockIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function IconChatBubble(props: IconProps) { + return ( + + + + ) +} + +export function CopyCodeIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function GitApplyIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function CopyPatchIcon(props: IconProps) { + return ( + + + + + + + ) +} + +// Plan badges icons +export function PlanFreeIcon(props: IconProps) { + return ( + + + + ) +} + +export function PlanNearingIcon(props: IconProps) { + return ( + + + + ) +} + +export function CaretRightIcon(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignCenter(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignJustify(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignRight(props: IconProps) { + return ( + + + + ) +} + +export function IconItalic(props: IconProps) { + return ( + + + + ) +} + +export function IconUnderline(props: IconProps) { + return ( + + + + ) +} + +export function IconStrikethrough(props: IconProps) { + return ( + + + + ) +} + +export function IconUppercase(props: IconProps) { + return ( + + + + + ) +} + +export function IconDirectionRow(props: IconProps) { + return ( + + + + ) +} + +export function IconDirectionColumn(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginX(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginY(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingX(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingY(props: IconProps) { + return ( + + + + ) +} + +export function IconExpand(props: IconProps) { + return ( + + + + ) +} + +export function IconLock(props: IconProps) { + return ( + + + + ) +} + +export function IconTextStrikethrough(props: IconProps) { + return ( + + + + ) +} + +export function IconTextOverline(props: IconProps) { + return ( + + + + + ) +} + +export function IconTextStriked(props: IconProps) { + return ( + + + + ) +} + +export function IconTextJustifySpaced(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignStretch(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignStart(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignCenter(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignEnd(props: IconProps) { + return ( + + + + ) +} + +// Text alignment icons (5 options) +export function IconTextUndo(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignLeftNew(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignCenterNew(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignRightNew(props: IconProps) { + return ( + + + + ) +} + +export function IconTextJustifyNew(props: IconProps) { + return ( + + + + ) +} + +// Decoration icons (5 options) +export function IconItalicNew(props: IconProps) { + return ( + + + + ) +} + +export function IconStrikethroughNew(props: IconProps) { + return ( + + + + ) +} + +export function IconUnderlineNew(props: IconProps) { + return ( + + + + ) +} + +export function IconOverlineNew(props: IconProps) { + return ( + + + + + ) +} + +export function IconTextNone(props: IconProps) { + return ( + + + + ) +} + +export function IconColorDefault(props: IconProps) { + return ( + + + + + + + + + + + + ) +} + +export function IconBorderWidth(props: IconProps) { + return ( + + + + ) +} + +export function IconExpandBorder(props: IconProps) { + return ( + + + + ) +} + +// Margin icons for individual sides +export function IconMarginTop(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginBottom(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginRight(props: IconProps) { + return ( + + + + ) +} + +// Spacing X/Y icons for grouped controls +export function IconSpacingX(props: IconProps) { + return ( + + + + ) +} + +export function IconSpacingY(props: IconProps) { + return ( + + + + ) +} + +// Padding icons for individual sides +export function IconPaddingTop(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingBottom(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingRight(props: IconProps) { + return ( + + + + ) +} + +export function IconExpandAll(props: IconProps) { + return ( + + + + ) +} + +// Border width icons for individual sides +export function IconBorderWidthTop(props: IconProps) { + return ( + + + + ) +} + +export function IconBorderWidthBottom(props: IconProps) { + return ( + + + + ) +} + +export function IconBorderWidthLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconBorderWidthRight(props: IconProps) { + return ( + + + + ) +} + +export function IconOpacity(props: IconProps) { + return ( + + + + + ) +} + +export function IconBorderRadius(props: IconProps) { + return ( + + + + ) +} + +export function IconShadow(props: IconProps) { + return ( + + + + + + + + + + + + ) +} + +export function IconShare(props: IconProps) { + return ( + + + + + + + + ) +} + +export function IconDownload(props: IconProps) { + return ( + + + + + + ) +} + +export function IconChevronDown(props: IconProps) { + return ( + + + + + + ) +} + +export function IconChevronUp(props: IconProps) { + return ( + + + + + + ) +} + +export function IconSpinner(props: IconProps & { color?: string }) { + const { className, style, color, ...rest } = props + return ( + <> + + + {/* Top - brightest */} + + {/* Top-left */} + + {/* Left */} + + {/* Bottom-left */} + + {/* Bottom */} + + {/* Bottom-right */} + + {/* Right */} + + {/* Top-right - dimmest */} + + + + ) +} + +export function IconEditFile(props: IconProps) { + return ( + + + + + + + ) +} + +export function IconMoon(props: IconProps) { + return ( + + + + + + + ) +} + +export function IconSun(props: IconProps) { + return ( + + + + + + + ) +} + +export function IconCloseSidebar(props: IconProps) { + const { className, ...rest } = props + return ( + + + + ) +} + +export function IconOpenSidebar(props: IconProps) { + return ( + + + + ) +} + +export const DownloadIcon = (props: LucideProps) => ( + + + +) + +export const GlobeIcon = (props: LucideProps) => ( + + + + + + + +) + +export const SparkleIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const SparklesIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const CreateNewIcon = (props: IconProps) => ( + + + + +) + +export const CustomTerminalIcon = (props: LucideProps) => ( + + + +) + +export const WriteFileIcon = (props: LucideProps) => ( + + + + + + +) + +export const CloneSiteIcon = (props: LucideProps) => ( + + + + + + + + + + +) + +export const MarkdownIcon = (props: LucideProps) => ( + + + +) + +export const PlanningIcon = (props: LucideProps) => ( + + + +) + +export const ComponentGenerationIcon = (props: LucideProps) => ( + + + + +) + +export const CheckIcon = (props: LucideProps) => ( + + + +) + +export const SelectIcon = (props: LucideProps) => ( + + + + +) + +export const AttachIcon = (props: LucideProps) => ( + + + +) + +export const NoCodeIcon = (props: LucideProps) => ( + + + + + +) + +export const CodePasteIcon = (props: LucideProps) => ( + + + + + +) + +export const CSSPasteIcon = (props: LucideProps) => ( + + + + + +) + +export const CodeIcon = (props: LucideProps) => ( + + + + + +) + +export const FilePlusIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + + + +) + +export const FilePageIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const BlankProjectIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + +) + +export const HomeIconCustom = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const ProfileIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const DocumentIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const FilesIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const SettingsIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const EditIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const TrashIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + + + + +) + +export const ThemeIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export function ExternalLinkIcon({ className }: { className?: string }) { + return ( + + + + + + + ) +} + +export function PlayIcon({ className }: { className?: string }) { + return ( + + + + ) +} + +export const PromptCopyIcon = (props: React.SVGProps) => { + return ( + + + + + + ) +} + +export const EyeIcon = (props: LucideProps) => ( + + + + + + +) + +export const SavedBookmarkFilledIcon = (props: IconProps) => ( + + + + + +) + +export const LightbulbIcon = (props: React.SVGProps) => { + return ( + + + + ) +} + +interface ScreenIconProps { + className?: string +} + +export function ScreenIcon({ className }: ScreenIconProps) { + return ( + + + + + + ) +} + +interface AgentCursorSparkIconProps { + className?: string +} + +export function AgentCursorSparkIcon({ className }: AgentCursorSparkIconProps) { + return ( + + + + + + + ) +} + +interface CanvasFilesIconProps { + className?: string +} + +export function CanvasFilesIcon({ className }: CanvasFilesIconProps) { + return ( + + + + + + ) +} + +interface ComponentIconProps { + className?: string +} + +export function ComponentIcon({ className }: ComponentIconProps) { + return ( + + + + + + ) +} + +export function PauseIcon({ className }: { className?: string }) { + return ( + + + + + ) +} + +export function VolumeIcon({ className }: { className?: string }) { + return ( + + + + + + ) +} + +export const PlusIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const SearchIcon = (props: LucideProps) => ( + + + + + + +) + +export const VariantIcon = (props: React.SVGProps) => { + return ( + + + + + + + + + + ) +} + +export const VideoIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const MixedIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const ClickIcon = (props: IconProps) => { + return ( + + + + + + + + + + + ) +} + +export const CopyIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const SaveIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const UndoIcon = (props: IconProps) => { + return ( + + + + + ) +} + +export const KeyboardIcon = (props: IconProps) => { + return ( + + + + + ) +} + +export const BookIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const DesignModeIcon = (props: IconProps) => { + return ( + + + + + + + + + ) +} + +export const BackspaceIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const OptionIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const CmdIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const ShiftIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const FocusIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const ClipboardIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const ImageIcon = (props: IconProps) => { + return ( + + + + + + + + ) +} + +export const ClipboardCheckIcon = (props: IconProps) => { + return ( + + + + + + + + ) +} + +export function MagnetIcon(props: IconProps) { + return ( + + + + + + + + + ) +} + +export const EnterIcon = (props: LucideProps) => ( + + + +) + +export const DatabaseSearchIcon = (props: IconProps) => ( + + + + + + + + +) + +export const SaveForLaterIcon = (props: IconProps) => ( + + + + + +) + +export const SendBookmarkIcon = (props: IconProps) => ( + + + + + + +) + +export const StrongMagicIcon = (props: IconProps) => ( + + + + + + + + + {/* clean rhombus (top-left) */} + + + +) + +export const LinkIcon = (props: IconProps) => ( + + + + + + + +) + +export const AddToTeamIcon = (props: IconProps) => ( + + + + + +) + +export const AddToTeamSuccessIcon = (props: IconProps) => ( + + + + + +) + +export const BillingIcon = (props: IconProps) => ( + + + + + +) + +export const PublisherStudioIcon = (props: IconProps) => ( + + + + + +) + +export const ClaudeCodeIcon = (props: IconProps) => ( + + + +) + +export const CursorIcon = (props: IconProps) => ( + + + + + +) + +export const GitHubLogo = (props: IconProps) => ( + + + +) + +export const WindsurfIcon = (props: IconProps) => ( + + + +) + +export const OriginalMCPIcon = (props: IconProps) => ( + + + + +) + +export const ShadcnCLIIcon = (props: IconProps) => ( + + + + + + +) + +export const VSCodeIcon = (props: IconProps) => ( + + + +) + +export const ThreeSparklesIcon = (props: IconProps) => ( + + + + + +) + +// Filled versions for settings dialog +export const PromptCopyIconFilled = (props: IconProps) => ( + + + + + + +) + +export const ProfileIconFilled = (props: IconProps) => ( + + + + + +) + +export const SandboxIcon = (props: IconProps) => ( + + + +) + +export const EyeOpenFilledIcon = (props: IconProps) => ( + + + +) + +export const BillingIconFilled = (props: IconProps) => ( + + + + + + +) + +export const RemixIcon = (props: IconProps) => ( + + + + + +) + +// Small circular info icon used in Code/Info tabs +export const InfoCircleSmallIcon = (props: IconProps) => ( + + + + +) + +export const MailIcon = (props: IconProps) => ( + + + + + +) + +export const EmailNotificationIcon = (props: IconProps) => ( + + + + + + + +) + +export const AffiliateIcon = (props: IconProps) => ( + + + + + +) + +export const ReportIcon = (props: IconProps) => ( + + + + + +) + +export const ThinFolderIcon = (props: IconProps) => ( + + + +) + +export const ThresholdIcon = (props: IconProps) => ( + + + + + +) + +export const SlackIcon = (props: IconProps) => ( + + + + + + +) + +export const CategoriesIcon = (props: IconProps) => ( + + + + + + +) + +export const ListSearchIcon = (props: IconProps) => ( + + + + + + + + +) + +export const CloseCircleFilledIcon = (props: IconProps) => ( + + + +) + +export const LayerUpIcon = (props: IconProps) => ( + + + +) + +export const LayerDownIcon = (props: IconProps) => ( + + + +) +export const ExploreIcon = (props: IconProps) => ( + + + +) + +export const LibraryIcon = (props: IconProps) => ( + + + + + +) + +export const PageIcon = (props: IconProps) => ( + + + +) + +export const AtSignIcon = (props: IconProps) => ( + + + +) + +export const IterateIcon = (props: IconProps) => ( + + + + + + + + +) + +export function PlanIcon(props: IconProps) { + return ( + + + + + + + ) +} + +export function QuestionIcon({ className }: { className?: string }) { + return ( + + + + + + + ) +} + +// Small 12x12 icons for badge in shapes list +export function AgentIconSmall({ className }: { className?: string }) { + return ( + + + + + ) +} + +export function ExploreIconSmall({ className }: { className?: string }) { + return ( + + + + + + + ) +} + +export function PlanIconSmall({ className }: { className?: string }) { + return ( + + + + ) +} + +// Small 12x12 version of the new Prototype icon (matches ExploreIcon in mode-toggle-button) +export function PrototypeIconSmall({ className }: { className?: string }) { + return ( + + + + ) +} + +export function QuestionsSkippedIcon({ className }: { className?: string }) { + return ( + + + + + + + + + ) +} + +export const TeamIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + +) + +export const ChipIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + +) + +export const MembersIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const PullRequestIcon = (props: IconProps) => ( + + + + + + + + +) + +export const InviteUserIcon = ({ className }: { className?: string }) => ( + + + + + +) + +export const TicketIcon = ({ className }: { className?: string }) => ( + + + + + + +) + +export const FollowingIcon = ({ className }: { className?: string }) => ( + + + +) + +export const FollowPersonPlusIcon = ({ className }: { className?: string }) => ( + + + + + + + +) + +export const InviteTeamIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const MoveToTeamIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + + + + +) + +export function QuestionCircleIcon(props: IconProps) { + return ( + + + + + + + + ) +} + +export function AIResearchIcon(props: IconProps) { + return ( + + + + + + + + ) +} + +export function MagicChatPlusIcon(props: IconProps) { + return ( + + + + + + + ) +} + +export function ContributeIcon(props: IconProps) { + return ( + + + + + + + + + + + + ) +} + +export function SyncIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function BranchIcon(props: IconProps) { + return ( + + + + + + + + + + ) +} + +export function CalendarDotsIcon(props: IconProps) { + return ( + + + + + + + + + + ) +} + +export function AuthorIcon(props: IconProps) { + return ( + + + + + + + ) +} + +export function LibraryOutlineIcon(props: IconProps) { + return ( + + + + + + + + + + ) +} + +export function ServerIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function KeyIcon(props: IconProps) { + return ( + + + + + ) +} + +export function FolderIcon(props: IconProps) { + return ( + + + + ) +} + +export function ArchiveIcon({ className }: { className?: string }) { + return ( + + + + + + + + ) +} + +export function PinFilledIcon({ className }: { className?: string }) { + return ( + + + + + ) +} + +export function AgentIcon(props: IconProps) { + return ( + + + + ) +} + +// Expand icon (arrows pointing outward) - used for expandable tool outputs +export function ExpandIcon(props: IconProps) { + return ( + + + + ) +} + +// Collapse icon (arrows pointing inward) - used for collapsible tool outputs +export function CollapseIcon(props: IconProps) { + return ( + + + + ) +} + +// Roadmap icon - used for roadmap links +export function RoadmapIcon(props: IconProps) { + return ( + + + + ) +} diff --git a/src/renderer/components/ui/checkbox.tsx b/src/renderer/components/ui/checkbox.tsx new file mode 100644 index 00000000..48a51043 --- /dev/null +++ b/src/renderer/components/ui/checkbox.tsx @@ -0,0 +1,55 @@ +"use client" + +import * as CheckboxPrimitive from "@radix-ui/react-checkbox" +import * as React from "react" + +import { cn } from "../../lib/utils" + +const Checkbox = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + {props.checked === "indeterminate" ? ( + + + + ) : ( + + + + )} + + +)) +Checkbox.displayName = CheckboxPrimitive.Root.displayName + +export { Checkbox } diff --git a/src/renderer/components/ui/collapsible.tsx b/src/renderer/components/ui/collapsible.tsx new file mode 100644 index 00000000..ae38efa8 --- /dev/null +++ b/src/renderer/components/ui/collapsible.tsx @@ -0,0 +1,9 @@ +"use client" + +import * as CollapsiblePrimitive from "@radix-ui/react-collapsible" + +const Collapsible = CollapsiblePrimitive.Root +const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger +const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent + +export { Collapsible, CollapsibleTrigger, CollapsibleContent } diff --git a/src/renderer/components/ui/command.tsx b/src/renderer/components/ui/command.tsx new file mode 100644 index 00000000..a6b1e5c8 --- /dev/null +++ b/src/renderer/components/ui/command.tsx @@ -0,0 +1,302 @@ +import * as React from "react" +import { cn } from "../../lib/utils" +import { SearchIcon } from "./icons" +import { + overlayItem, + overlaySeparator, +} from "../../lib/overlay-styles" + +// Context for keyboard navigation +interface CommandContextValue { + selectedValue: string | null + setSelectedValue: (value: string | null) => void + onSelect: (value: string) => void + registerItem: (value: string, element: HTMLDivElement | null) => void + getItems: () => Map +} + +const CommandContext = React.createContext(null) + +interface CommandProps extends React.HTMLAttributes { + shouldFilter?: boolean + value?: string + onValueChange?: (value: string) => void +} + +const Command = React.forwardRef( + ({ className, shouldFilter, value, onValueChange, children, ...props }, ref) => { + const [selectedValue, setSelectedValue] = React.useState(null) + const itemsRef = React.useRef>(new Map()) + const orderedKeysRef = React.useRef([]) + + const registerItem = React.useCallback( + (value: string, element: HTMLDivElement | null) => { + if (element) { + itemsRef.current.set(value, element) + // Keep track of order based on registration + if (!orderedKeysRef.current.includes(value)) { + orderedKeysRef.current.push(value) + } + } else { + itemsRef.current.delete(value) + orderedKeysRef.current = orderedKeysRef.current.filter(k => k !== value) + } + }, + [], + ) + + const getItems = React.useCallback(() => itemsRef.current, []) + + const onSelect = React.useCallback((value: string) => { + const element = itemsRef.current.get(value) + if (element) { + element.click() + } + }, []) + + // Reset selection when items change + React.useEffect(() => { + const keys = orderedKeysRef.current + if (keys.length > 0 && !keys.includes(selectedValue || "")) { + setSelectedValue(keys[0] || null) + } + }) + + const handleKeyDown = React.useCallback( + (e: React.KeyboardEvent) => { + const keys = orderedKeysRef.current + const currentIndex = selectedValue ? keys.indexOf(selectedValue) : -1 + + switch (e.key) { + case "ArrowDown": + e.preventDefault() + if (keys.length > 0) { + const nextIndex = currentIndex + 1 >= keys.length ? 0 : currentIndex + 1 + const nextKey = keys[nextIndex] + setSelectedValue(nextKey!) + itemsRef.current.get(nextKey!)?.scrollIntoView({ block: "nearest" }) + } + break + case "ArrowUp": + e.preventDefault() + if (keys.length > 0) { + const prevIndex = currentIndex - 1 < 0 ? keys.length - 1 : currentIndex - 1 + const prevKey = keys[prevIndex] + setSelectedValue(prevKey!) + itemsRef.current.get(prevKey!)?.scrollIntoView({ block: "nearest" }) + } + break + case "Enter": + e.preventDefault() + if (selectedValue) { + onSelect(selectedValue) + } + break + case "Home": + e.preventDefault() + if (keys.length > 0) { + setSelectedValue(keys[0]!) + itemsRef.current.get(keys[0]!)?.scrollIntoView({ block: "nearest" }) + } + break + case "End": + e.preventDefault() + if (keys.length > 0) { + const lastKey = keys[keys.length - 1] + setSelectedValue(lastKey!) + itemsRef.current.get(lastKey!)?.scrollIntoView({ block: "nearest" }) + } + break + } + }, + [selectedValue, onSelect], + ) + + const contextValue = React.useMemo( + () => ({ + selectedValue, + setSelectedValue, + onSelect, + registerItem, + getItems, + }), + [selectedValue, onSelect, registerItem, getItems], + ) + + return ( + +
    + {children} +
    +
    + ) + }, +) +Command.displayName = "Command" + +interface CommandInputProps + extends React.InputHTMLAttributes { + onValueChange?: (value: string) => void + wrapperClassName?: string +} + +const CommandInput = React.forwardRef( + ({ className, onValueChange, wrapperClassName, onChange, ...props }, ref) => { + const localRef = React.useRef(null) + const inputRef = (ref as React.RefObject) || localRef + + // Auto-focus input when mounted + React.useEffect(() => { + // Small delay to ensure popover is rendered + const timer = setTimeout(() => { + inputRef.current?.focus() + }, 0) + return () => clearTimeout(timer) + }, []) + + return ( +
    + + { + onChange?.(e) + onValueChange?.(e.target.value) + }} + {...props} + /> +
    + ) + }, +) +CommandInput.displayName = "CommandInput" + +const CommandList = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
    +)) +CommandList.displayName = "CommandList" + +const CommandEmpty = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
    +)) +CommandEmpty.displayName = "CommandEmpty" + +interface CommandGroupProps extends React.HTMLAttributes { + heading?: string +} + +const CommandGroup = React.forwardRef( + ({ className, heading, children, ...props }, ref) => ( +
    + {heading && ( +
    + {heading} +
    + )} + {children} +
    + ), +) +CommandGroup.displayName = "CommandGroup" + +interface CommandItemProps extends React.HTMLAttributes { + value?: string + onSelect?: () => void +} + +const CommandItem = React.forwardRef( + ({ className, onSelect, value, onMouseEnter, ...props }, ref) => { + const context = React.useContext(CommandContext) + const itemRef = React.useRef(null) + + // Generate a stable value if not provided + const itemValue = value || React.useId() + + // Register this item with the Command + React.useEffect(() => { + const element = itemRef.current + context?.registerItem(itemValue, element) + return () => { + context?.registerItem(itemValue, null) + } + }, [context, itemValue]) + + const isSelected = context?.selectedValue === itemValue + + const handleMouseEnter = (e: React.MouseEvent) => { + context?.setSelectedValue(itemValue) + onMouseEnter?.(e) + } + + return ( +
    + ) + }, +) +CommandItem.displayName = "CommandItem" + +const CommandSeparator = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
    +)) +CommandSeparator.displayName = "CommandSeparator" + +export { + Command, + CommandInput, + CommandList, + CommandEmpty, + CommandGroup, + CommandItem, + CommandSeparator, +} diff --git a/src/renderer/components/ui/context-menu.tsx b/src/renderer/components/ui/context-menu.tsx new file mode 100644 index 00000000..9d5271d3 --- /dev/null +++ b/src/renderer/components/ui/context-menu.tsx @@ -0,0 +1,183 @@ +"use client" + +import * as React from "react" +import * as ContextMenuPrimitive from "@radix-ui/react-context-menu" +import { cn } from "../../lib/utils" +import { CheckIcon, DotFilledIcon } from "@radix-ui/react-icons" +import { CaretRightIcon } from "./icons" +import { + overlayContent, + overlayItemWithIcon, + overlaySubTrigger, + overlayCheckableItem, + overlayItemIndicator, + overlaySeparator, + overlayLabel, + overlayShortcut, + overlayChevron, +} from "../../lib/overlay-styles" + +const ContextMenu = ContextMenuPrimitive.Root + +const ContextMenuTrigger = ContextMenuPrimitive.Trigger + +const ContextMenuGroup = ContextMenuPrimitive.Group + +const ContextMenuPortal = ContextMenuPrimitive.Portal + +const ContextMenuSub = ContextMenuPrimitive.Sub + +const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup + +const ContextMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +ContextMenuSubTrigger.displayName = ContextMenuPrimitive.SubTrigger.displayName + +const ContextMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ContextMenuSubContent.displayName = ContextMenuPrimitive.SubContent.displayName + +const ContextMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +ContextMenuContent.displayName = ContextMenuPrimitive.Content.displayName + +const ContextMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +ContextMenuItem.displayName = ContextMenuPrimitive.Item.displayName + +const ContextMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +ContextMenuCheckboxItem.displayName = + ContextMenuPrimitive.CheckboxItem.displayName + +const ContextMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +ContextMenuRadioItem.displayName = ContextMenuPrimitive.RadioItem.displayName + +const ContextMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +ContextMenuLabel.displayName = ContextMenuPrimitive.Label.displayName + +const ContextMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ContextMenuSeparator.displayName = ContextMenuPrimitive.Separator.displayName + +const ContextMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return +} +ContextMenuShortcut.displayName = "ContextMenuShortcut" + +export { + ContextMenu, + ContextMenuTrigger, + ContextMenuContent, + ContextMenuItem, + ContextMenuCheckboxItem, + ContextMenuRadioItem, + ContextMenuLabel, + ContextMenuSeparator, + ContextMenuShortcut, + ContextMenuGroup, + ContextMenuPortal, + ContextMenuSub, + ContextMenuSubContent, + ContextMenuSubTrigger, + ContextMenuRadioGroup, +} diff --git a/src/renderer/components/ui/dialog.tsx b/src/renderer/components/ui/dialog.tsx new file mode 100644 index 00000000..01a65d39 --- /dev/null +++ b/src/renderer/components/ui/dialog.tsx @@ -0,0 +1,216 @@ +"use client" + +import * as DialogPrimitive from "@radix-ui/react-dialog" +import { Cross2Icon } from "@radix-ui/react-icons" +import * as React from "react" + +import { cn } from "../../lib/utils" + +const Dialog = DialogPrimitive.Root + +const DialogTrigger = DialogPrimitive.Trigger + +const DialogPortal = DialogPrimitive.Portal + +const DialogClose = DialogPrimitive.Close + +const DialogOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + return ( + + ) +}) +DialogOverlay.displayName = DialogPrimitive.Overlay.displayName + +const DialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + showCloseButton?: boolean + onOverlayClick?: () => void + } +>( + ( + { className, children, showCloseButton = true, onOverlayClick, ...props }, + ref, + ) => ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + + ), +) +DialogContent.displayName = DialogPrimitive.Content.displayName + +const DialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +DialogHeader.displayName = "DialogHeader" + +const DialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +DialogFooter.displayName = "DialogFooter" + +// Canvas-styled dialog content with header/content/footer sections +const CanvasDialogContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + showCloseButton?: boolean + } +>(({ className, children, showCloseButton = true, ...props }, ref) => ( + + + + {children} + {showCloseButton && ( + + + Close + + )} + + +)) +CanvasDialogContent.displayName = "CanvasDialogContent" + +// Canvas dialog header (no border, just padding) +const CanvasDialogHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +CanvasDialogHeader.displayName = "CanvasDialogHeader" + +// Canvas dialog body (content area) +const CanvasDialogBody = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +CanvasDialogBody.displayName = "CanvasDialogBody" + +// Canvas dialog footer with muted background +const CanvasDialogFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
    +) +CanvasDialogFooter.displayName = "CanvasDialogFooter" + +const DialogTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogTitle.displayName = DialogPrimitive.Title.displayName + +const DialogDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DialogDescription.displayName = DialogPrimitive.Description.displayName + +export { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogOverlay, + DialogPortal, + DialogTitle, + DialogTrigger, + // Canvas-styled variants + CanvasDialogContent, + CanvasDialogHeader, + CanvasDialogBody, + CanvasDialogFooter, +} diff --git a/src/renderer/components/ui/dropdown-menu.tsx b/src/renderer/components/ui/dropdown-menu.tsx new file mode 100644 index 00000000..6755b4ac --- /dev/null +++ b/src/renderer/components/ui/dropdown-menu.tsx @@ -0,0 +1,181 @@ +import * as React from "react" +import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu" +import { Check, ChevronRight, Circle } from "lucide-react" + +import { cn } from "../../lib/utils" +import { + overlayContent, + overlayItemWithIcon, + overlaySubTrigger, + overlayCheckableItem, + overlayItemIndicator, + overlaySeparator, + overlayLabel, + overlayShortcut, + overlayChevron, +} from "../../lib/overlay-styles" + +const DropdownMenu = DropdownMenuPrimitive.Root + +const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger + +const DropdownMenuGroup = DropdownMenuPrimitive.Group + +const DropdownMenuPortal = DropdownMenuPrimitive.Portal + +const DropdownMenuSub = DropdownMenuPrimitive.Sub + +const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup + +const DropdownMenuSubTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, children, ...props }, ref) => ( + + {children} + + +)) +DropdownMenuSubTrigger.displayName = + DropdownMenuPrimitive.SubTrigger.displayName + +const DropdownMenuSubContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSubContent.displayName = + DropdownMenuPrimitive.SubContent.displayName + +const DropdownMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, sideOffset = 4, ...props }, ref) => ( + + + +)) +DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName + +const DropdownMenuItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName + +const DropdownMenuCheckboxItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, checked, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuCheckboxItem.displayName = + DropdownMenuPrimitive.CheckboxItem.displayName + +const DropdownMenuRadioItem = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + + + + + {children} + +)) +DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName + +const DropdownMenuLabel = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + inset?: boolean + } +>(({ className, inset, ...props }, ref) => ( + +)) +DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName + +const DropdownMenuSeparator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName + +const DropdownMenuShortcut = ({ + className, + ...props +}: React.HTMLAttributes) => { + return +} +DropdownMenuShortcut.displayName = "DropdownMenuShortcut" + +export { + DropdownMenu, + DropdownMenuTrigger, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuCheckboxItem, + DropdownMenuRadioItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuGroup, + DropdownMenuPortal, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, + DropdownMenuRadioGroup, +} diff --git a/src/renderer/components/ui/hover-card.tsx b/src/renderer/components/ui/hover-card.tsx new file mode 100644 index 00000000..29d52966 --- /dev/null +++ b/src/renderer/components/ui/hover-card.tsx @@ -0,0 +1,27 @@ +"use client" + +import * as React from "react" +import * as HoverCardPrimitive from "@radix-ui/react-hover-card" +import { cn } from "../../lib/utils" + +const HoverCard = HoverCardPrimitive.Root +const HoverCardTrigger = HoverCardPrimitive.Trigger + +const HoverCardContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, align = "center", sideOffset = 4, ...props }, ref) => ( + +)) +HoverCardContent.displayName = HoverCardPrimitive.Content.displayName + +export { HoverCard, HoverCardTrigger, HoverCardContent } diff --git a/src/renderer/components/ui/icons.tsx b/src/renderer/components/ui/icons.tsx new file mode 100644 index 00000000..a6e7573e --- /dev/null +++ b/src/renderer/components/ui/icons.tsx @@ -0,0 +1,5301 @@ +"use client" + +import { LucideProps } from "lucide-react" +import * as React from "react" + +type IconProps = React.SVGProps & { className?: string } + +export function AnthropicLogoIcon({ className }: { className?: string }) { + return ( + + ) +} + +export function IconGap(props: IconProps) { + return ( + + + + ) +} + +export function IconDoubleChevronRight(props: IconProps) { + return ( + + + + + ) +} + +export function IconArrowRight(props: IconProps) { + return ( + + + + + ) +} + +export function IconDoubleChevronLeft(props: IconProps) { + return ( + + + + + ) +} + +/** @deprecated Use IconDoubleChevronRight instead */ +export function IconCloseSidebarRight(props: IconProps) { + return +} + +export function IconOpenSidebarRight(props: IconProps) { + return ( + + + + + + + + ) +} + +export function DiffIcon(props: IconProps) { + return ( + + + + + + + + ) +} + +export function ClockIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function IconChatBubble(props: IconProps) { + return ( + + + + ) +} + +export function CopyCodeIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function GitApplyIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function CopyPatchIcon(props: IconProps) { + return ( + + + + + + + ) +} + +// Plan badges icons +export function PlanFreeIcon(props: IconProps) { + return ( + + + + ) +} + +export function PlanNearingIcon(props: IconProps) { + return ( + + + + ) +} + +export function CaretRightIcon(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignCenter(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignJustify(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignRight(props: IconProps) { + return ( + + + + ) +} + +export function IconItalic(props: IconProps) { + return ( + + + + ) +} + +export function IconUnderline(props: IconProps) { + return ( + + + + ) +} + +export function IconStrikethrough(props: IconProps) { + return ( + + + + ) +} + +export function IconUppercase(props: IconProps) { + return ( + + + + + ) +} + +export function IconDirectionRow(props: IconProps) { + return ( + + + + ) +} + +export function IconDirectionColumn(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginX(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginY(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingX(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingY(props: IconProps) { + return ( + + + + ) +} + +export function IconExpand(props: IconProps) { + return ( + + + + ) +} + +export function IconLock(props: IconProps) { + return ( + + + + ) +} + +export function IconTextStrikethrough(props: IconProps) { + return ( + + + + ) +} + +export function IconTextOverline(props: IconProps) { + return ( + + + + + ) +} + +export function IconTextStriked(props: IconProps) { + return ( + + + + ) +} + +export function IconTextJustifySpaced(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignStretch(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignStart(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignCenter(props: IconProps) { + return ( + + + + ) +} + +export function IconAlignEnd(props: IconProps) { + return ( + + + + ) +} + +// Text alignment icons (5 options) +export function IconTextUndo(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignLeftNew(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignCenterNew(props: IconProps) { + return ( + + + + ) +} + +export function IconTextAlignRightNew(props: IconProps) { + return ( + + + + ) +} + +export function IconTextJustifyNew(props: IconProps) { + return ( + + + + ) +} + +// Decoration icons (5 options) +export function IconItalicNew(props: IconProps) { + return ( + + + + ) +} + +export function IconStrikethroughNew(props: IconProps) { + return ( + + + + ) +} + +export function IconUnderlineNew(props: IconProps) { + return ( + + + + ) +} + +export function IconOverlineNew(props: IconProps) { + return ( + + + + + ) +} + +export function IconTextNone(props: IconProps) { + return ( + + + + ) +} + +export function IconColorDefault(props: IconProps) { + return ( + + + + + + + + + + + + ) +} + +export function IconBorderWidth(props: IconProps) { + return ( + + + + ) +} + +export function IconExpandBorder(props: IconProps) { + return ( + + + + ) +} + +// Margin icons for individual sides +export function IconMarginTop(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginBottom(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconMarginRight(props: IconProps) { + return ( + + + + ) +} + +// Spacing X/Y icons for grouped controls +export function IconSpacingX(props: IconProps) { + return ( + + + + ) +} + +export function IconSpacingY(props: IconProps) { + return ( + + + + ) +} + +// Padding icons for individual sides +export function IconPaddingTop(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingBottom(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconPaddingRight(props: IconProps) { + return ( + + + + ) +} + +export function IconExpandAll(props: IconProps) { + return ( + + + + ) +} + +// Border width icons for individual sides +export function IconBorderWidthTop(props: IconProps) { + return ( + + + + ) +} + +export function IconBorderWidthBottom(props: IconProps) { + return ( + + + + ) +} + +export function IconBorderWidthLeft(props: IconProps) { + return ( + + + + ) +} + +export function IconBorderWidthRight(props: IconProps) { + return ( + + + + ) +} + +export function IconOpacity(props: IconProps) { + return ( + + + + + ) +} + +export function IconBorderRadius(props: IconProps) { + return ( + + + + ) +} + +export function IconShadow(props: IconProps) { + return ( + + + + + + + + + + + + ) +} + +export function IconShare(props: IconProps) { + return ( + + + + + + + + ) +} + +export function IconDownload(props: IconProps) { + return ( + + + + + + ) +} + +export function IconChevronDown(props: IconProps) { + return ( + + + + + + ) +} + +export function IconChevronUp(props: IconProps) { + return ( + + + + + + ) +} + +export function IconSpinner(props: IconProps & { color?: string }) { + const { className, style, color, ...rest } = props + return ( + <> + + + {/* Top - brightest */} + + {/* Top-left */} + + {/* Left */} + + {/* Bottom-left */} + + {/* Bottom */} + + {/* Bottom-right */} + + {/* Right */} + + {/* Top-right - dimmest */} + + + + ) +} + +export function IconEditFile(props: IconProps) { + return ( + + + + + + + ) +} + +export function IconMoon(props: IconProps) { + return ( + + + + + + + ) +} + +export function IconSun(props: IconProps) { + return ( + + + + + + + ) +} + +export function IconCloseSidebar(props: IconProps) { + const { className, ...rest } = props + return ( + + + + ) +} + +export function IconOpenSidebar(props: IconProps) { + return ( + + + + ) +} + +export const DownloadIcon = (props: LucideProps) => ( + + + +) + +export const GlobeIcon = (props: LucideProps) => ( + + + + + + + +) + +export const SparkleIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const SparklesIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const CreateNewIcon = (props: IconProps) => ( + + + + +) + +export const CustomTerminalIcon = (props: LucideProps) => ( + + + + + +) + +export const WriteFileIcon = (props: LucideProps) => ( + + + + + + +) + +export const CloneSiteIcon = (props: LucideProps) => ( + + + + + + + + + + +) + +export const MarkdownIcon = (props: LucideProps) => ( + + + +) + +export const PlanningIcon = (props: LucideProps) => ( + + + +) + +export const ComponentGenerationIcon = (props: LucideProps) => ( + + + + +) + +export const CheckIcon = (props: LucideProps) => ( + + + +) + +export const SelectIcon = (props: LucideProps) => ( + + + + +) + +export const AttachIcon = (props: LucideProps) => ( + + + +) + +export const NoCodeIcon = (props: LucideProps) => ( + + + + + +) + +export const CodePasteIcon = (props: LucideProps) => ( + + + + + +) + +export const CSSPasteIcon = (props: LucideProps) => ( + + + + + +) + +export const CodeIcon = (props: LucideProps) => ( + + + + + +) + +export const FilePlusIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + + + +) + +export const FilePageIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const BlankProjectIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + +) + +export const HomeIconCustom = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const ProfileIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const DocumentIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const FilesIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const SettingsIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const EditIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const TrashIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + + + + +) + +export const ThemeIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export function ExternalLinkIcon({ className }: { className?: string }) { + return ( + + + + + + + ) +} + +export function PlayIcon({ className }: { className?: string }) { + return ( + + + + ) +} + +export const PromptCopyIcon = (props: React.SVGProps) => { + return ( + + + + + + ) +} + +export const EyeIcon = (props: LucideProps) => ( + + + + + + +) + +export const SavedBookmarkFilledIcon = (props: IconProps) => ( + + + + + +) + +export const LightbulbIcon = (props: React.SVGProps) => { + return ( + + + + ) +} + +interface ScreenIconProps { + className?: string +} + +export function ScreenIcon({ className }: ScreenIconProps) { + return ( + + + + + + ) +} + +interface AgentCursorSparkIconProps { + className?: string +} + +export function AgentCursorSparkIcon({ className }: AgentCursorSparkIconProps) { + return ( + + + + + + + ) +} + +interface CanvasFilesIconProps { + className?: string +} + +export function CanvasFilesIcon({ className }: CanvasFilesIconProps) { + return ( + + + + + + ) +} + +interface ComponentIconProps { + className?: string +} + +export function ComponentIcon({ className }: ComponentIconProps) { + return ( + + + + + + ) +} + +export function PauseIcon({ className }: { className?: string }) { + return ( + + + + + ) +} + +export function VolumeIcon({ className }: { className?: string }) { + return ( + + + + + + ) +} + +export const PlusIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const SearchIcon = (props: LucideProps) => ( + + + + + + +) + +export const VariantIcon = (props: React.SVGProps) => { + return ( + + + + + + + + + + ) +} + +export const VideoIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const MixedIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const ClickIcon = (props: IconProps) => { + return ( + + + + + + + + + + + ) +} + +export const CopyIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const SaveIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const UndoIcon = (props: IconProps) => { + return ( + + + + + ) +} + +export const KeyboardIcon = (props: IconProps) => { + return ( + + + + + ) +} + +export const BookIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const DesignModeIcon = (props: IconProps) => { + return ( + + + + + + + + + ) +} + +export const BackspaceIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const OptionIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const CmdIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const ShiftIcon = (props: IconProps) => { + return ( + + + + ) +} + +export const FocusIcon = (props: IconProps) => { + return ( + + + + + + ) +} + +export const ClipboardIcon = (props: IconProps) => { + return ( + + + + + + + ) +} + +export const ImageIcon = (props: IconProps) => { + return ( + + + + + + + + ) +} + +export const ClipboardCheckIcon = (props: IconProps) => { + return ( + + + + + + + + ) +} + +export function MagnetIcon(props: IconProps) { + return ( + + + + + + + + + ) +} + +export const EnterIcon = (props: LucideProps) => ( + + + +) + +export const DatabaseSearchIcon = (props: IconProps) => ( + + + + + + + + +) + +export const SaveForLaterIcon = (props: IconProps) => ( + + + + + +) + +export const SendBookmarkIcon = (props: IconProps) => ( + + + + + + +) + +export const StrongMagicIcon = (props: IconProps) => ( + + + + + + + + + {/* clean rhombus (top-left) */} + + + +) + +export const LinkIcon = (props: IconProps) => ( + + + + + + + +) + +export const AddToTeamIcon = (props: IconProps) => ( + + + + + +) + +export const AddToTeamSuccessIcon = (props: IconProps) => ( + + + + + +) + +export const BillingIcon = (props: IconProps) => ( + + + + + +) + +export const PublisherStudioIcon = (props: IconProps) => ( + + + + + +) + +export const ClaudeCodeIcon = (props: IconProps) => ( + + + +) + +export const CursorIcon = (props: IconProps) => ( + + + + + +) + +export const GitHubLogo = (props: IconProps) => ( + + + +) + +export const WindsurfIcon = (props: IconProps) => ( + + + +) + +export const OriginalMCPIcon = (props: IconProps) => ( + + + + +) + +export const ShadcnCLIIcon = (props: IconProps) => ( + + + + + + +) + +export const VSCodeIcon = (props: IconProps) => ( + + + +) + +export const ThreeSparklesIcon = (props: IconProps) => ( + + + + + +) + +// Filled versions for settings dialog +export const PromptCopyIconFilled = (props: IconProps) => ( + + + + + + +) + +export const ProfileIconFilled = (props: IconProps) => ( + + + + + +) + +export const SandboxIcon = (props: IconProps) => ( + + + +) + +export const EyeOpenFilledIcon = (props: IconProps) => ( + + + +) + +export const BillingIconFilled = (props: IconProps) => ( + + + + + + +) + +export const RemixIcon = (props: IconProps) => ( + + + + + +) + +// Small circular info icon used in Code/Info tabs +export const InfoCircleSmallIcon = (props: IconProps) => ( + + + + +) + +export const MailIcon = (props: IconProps) => ( + + + + + +) + +export const EmailNotificationIcon = (props: IconProps) => ( + + + + + + + +) + +export const AffiliateIcon = (props: IconProps) => ( + + + + + +) + +export const ReportIcon = (props: IconProps) => ( + + + + + +) + +export const ThinFolderIcon = (props: IconProps) => ( + + + +) + +export const ThresholdIcon = (props: IconProps) => ( + + + + + +) + +export const SlackIcon = (props: IconProps) => ( + + + + + + +) + +export const CategoriesIcon = (props: IconProps) => ( + + + + + + +) + +export const ListSearchIcon = (props: IconProps) => ( + + + + + + + + +) + +export const CloseCircleFilledIcon = (props: IconProps) => ( + + + +) + +export const LayerUpIcon = (props: IconProps) => ( + + + +) + +export const LayerDownIcon = (props: IconProps) => ( + + + +) +export const ExploreIcon = (props: IconProps) => ( + + + +) + +export const LibraryIcon = (props: IconProps) => ( + + + + + +) + +export const PageIcon = (props: IconProps) => ( + + + +) + +export const AtSignIcon = (props: IconProps) => ( + + + +) + +export const IterateIcon = (props: IconProps) => ( + + + + + + + + +) + +export function PlanIcon(props: IconProps) { + return ( + + + + + + + ) +} + +export function QuestionIcon({ className }: { className?: string }) { + return ( + + + + + + + ) +} + +// Small 12x12 icons for badge in shapes list +export function AgentIconSmall({ className }: { className?: string }) { + return ( + + + + + ) +} + +export function ExploreIconSmall({ className }: { className?: string }) { + return ( + + + + + + + ) +} + +export function PlanIconSmall({ className }: { className?: string }) { + return ( + + + + ) +} + +// Small 12x12 version of the new Prototype icon (matches ExploreIcon in mode-toggle-button) +export function PrototypeIconSmall({ className }: { className?: string }) { + return ( + + + + ) +} + +export function QuestionsSkippedIcon({ className }: { className?: string }) { + return ( + + + + + + + + + ) +} + +export const TeamIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + +) + +export const ChipIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + +) + +export const MembersIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + +) + +export const PullRequestIcon = (props: IconProps) => ( + + + + + + + + +) + +export const InviteUserIcon = ({ className }: { className?: string }) => ( + + + + + +) + +export const TicketIcon = ({ className }: { className?: string }) => ( + + + + + + +) + +export const FollowingIcon = ({ className }: { className?: string }) => ( + + + +) + +export const FollowPersonPlusIcon = ({ className }: { className?: string }) => ( + + + + + + + +) + +export const InviteTeamIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + +) + +export const MoveToTeamIcon = ({ + className, + ...props +}: React.SVGProps) => ( + + + + + + + + + +) + +export function QuestionCircleIcon(props: IconProps) { + return ( + + + + + + + + ) +} + +export function AIResearchIcon(props: IconProps) { + return ( + + + + + + + + ) +} + +export function MagicChatPlusIcon(props: IconProps) { + return ( + + + + + + + ) +} + +export function ContributeIcon(props: IconProps) { + return ( + + + + + + + + + + + + ) +} + +export function SyncIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function BranchIcon(props: IconProps) { + return ( + + + + + + + + + + ) +} + +export function CalendarDotsIcon(props: IconProps) { + return ( + + + + + + + + + + ) +} + +export function AuthorIcon(props: IconProps) { + return ( + + + + + + + ) +} + +export function LibraryOutlineIcon(props: IconProps) { + return ( + + + + + + + + + + ) +} + +export function ServerIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function KeyIcon(props: IconProps) { + return ( + + + + + ) +} + +export function FolderIcon(props: IconProps) { + return ( + + + + ) +} + +export function FolderPlusIcon(props: IconProps) { + return ( + + + + + + ) +} + +export function ArchiveIcon({ className }: { className?: string }) { + return ( + + + + + + + + ) +} + +export function PinFilledIcon({ className }: { className?: string }) { + return ( + + + + + ) +} + +export function AgentIcon(props: IconProps) { + return ( + + + + ) +} + +// Expand icon (arrows pointing outward) - used for expandable tool outputs +export function ExpandIcon(props: IconProps) { + return ( + + + + ) +} + +// Collapse icon (arrows pointing inward) - used for collapsible tool outputs +export function CollapseIcon(props: IconProps) { + return ( + + + + ) +} + +// Roadmap icon - used for roadmap links +export function RoadmapIcon(props: IconProps) { + return ( + + + + ) +} + +// Claude Code Logo icon +export const ClaudeCodeLogoIcon = (props: LucideProps) => ( + + + +) + +// GitHub icon +export const GitHubIcon = (props: LucideProps) => ( + + + +) + +// Laptop icon for local mode +export function LaptopIcon(props: IconProps) { + return ( + + + + + ) +} + +// Skill icon - toolbox with tools +export function SkillIcon(props: IconProps) { + return ( + + + + + + + ) +} diff --git a/src/renderer/components/ui/input.tsx b/src/renderer/components/ui/input.tsx new file mode 100644 index 00000000..75eb6f75 --- /dev/null +++ b/src/renderer/components/ui/input.tsx @@ -0,0 +1,27 @@ +import { cn } from "../../lib/utils" +import * as React from "react" + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ) + }, +) +Input.displayName = "Input" + +export { Input } diff --git a/src/renderer/components/ui/kbd.tsx b/src/renderer/components/ui/kbd.tsx new file mode 100644 index 00000000..1a98b489 --- /dev/null +++ b/src/renderer/components/ui/kbd.tsx @@ -0,0 +1,54 @@ +import * as React from "react" +import { cn } from "../../lib/utils" +import { CmdIcon, OptionIcon, ShiftIcon } from "./icons" + +export interface KbdProps extends React.HTMLAttributes {} + +/** Parse shortcut string and replace modifier symbols with icons */ +function renderShortcut(children: React.ReactNode): React.ReactNode { + if (typeof children !== "string") return children + + const parts: React.ReactNode[] = [] + + // Map of symbols to icons (3 = 12px to match text-xs visually) + const symbolMap: Record = { + "⌘": , + "⌥": , + "⇧": , + "⌃": , // Control stays as unicode (no icon) + } + + // Split by symbols and replace with icons + const regex = /([⌘⌥⇧⌃])/g + const tokens = children.split(regex) + + tokens.forEach((token, index) => { + if (symbolMap[token]) { + parts.push(symbolMap[token]) + } else if (token) { + parts.push({token}) + } + }) + + return parts +} + +const Kbd = React.forwardRef( + ({ className, children, ...props }, ref) => { + return ( + + {renderShortcut(children)} + + ) + }, +) +Kbd.displayName = "Kbd" + +export { Kbd } diff --git a/src/renderer/components/ui/label.tsx b/src/renderer/components/ui/label.tsx new file mode 100644 index 00000000..47fded98 --- /dev/null +++ b/src/renderer/components/ui/label.tsx @@ -0,0 +1,29 @@ +"use client" + +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "../../lib/utils" + +const labelVariants = cva( + "text-[12px] font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", +) + +const Label = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, ...props }, ref) => ( + +)) +Label.displayName = LabelPrimitive.Root.displayName + +export { Label } + + + diff --git a/src/renderer/components/ui/logo.tsx b/src/renderer/components/ui/logo.tsx new file mode 100644 index 00000000..9e1028a5 --- /dev/null +++ b/src/renderer/components/ui/logo.tsx @@ -0,0 +1,27 @@ +import * as React from "react" +import { cn } from "../../lib/utils" + +interface LogoProps extends React.SVGProps { + className?: string + fill?: string +} + +export function Logo({ fill = "currentColor", className, ...props }: LogoProps) { + return ( + + + + ) +} diff --git a/src/renderer/components/ui/popover.tsx b/src/renderer/components/ui/popover.tsx new file mode 100644 index 00000000..c9fdddba --- /dev/null +++ b/src/renderer/components/ui/popover.tsx @@ -0,0 +1,52 @@ +import * as React from "react" +import * as PopoverPrimitive from "@radix-ui/react-popover" + +import { cn } from "../../lib/utils" +import { + overlayContentBase, + overlayMaxHeight, + overlayAnimation, + overlaySlideIn, +} from "../../lib/overlay-styles" + +const Popover = PopoverPrimitive.Root + +const PopoverTrigger = PopoverPrimitive.Trigger + +const PopoverAnchor = PopoverPrimitive.Anchor + +const PopoverContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & { + forceDark?: boolean + } +>( + ( + { className, align = "center", sideOffset = 4, forceDark = true, ...props }, + ref, + ) => ( + + + + ), +) +PopoverContent.displayName = PopoverPrimitive.Content.displayName + +const PopoverClose = PopoverPrimitive.Close + +export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose } diff --git a/src/renderer/components/ui/progress.tsx b/src/renderer/components/ui/progress.tsx new file mode 100644 index 00000000..e8b329b4 --- /dev/null +++ b/src/renderer/components/ui/progress.tsx @@ -0,0 +1,26 @@ +import * as React from "react" +import * as ProgressPrimitive from "@radix-ui/react-progress" + +import { cn } from "../../lib/utils" + +const Progress = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, value, ...props }, ref) => ( + + + +)) +Progress.displayName = ProgressPrimitive.Root.displayName + +export { Progress } diff --git a/src/renderer/components/ui/prompt-input.tsx b/src/renderer/components/ui/prompt-input.tsx new file mode 100644 index 00000000..b17ad582 --- /dev/null +++ b/src/renderer/components/ui/prompt-input.tsx @@ -0,0 +1,290 @@ +"use client" + +import { Textarea } from "./textarea" +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "./tooltip" +import { cn } from "../../lib/utils" +import React, { + createContext, + useContext, + useEffect, + useRef, + useState, + useLayoutEffect, + forwardRef, +} from "react" + +type PromptInputContextType = { + isLoading: boolean + value: string + setValue: (_value: string) => void + maxHeight: number | string + onSubmit?: () => void + disabled?: boolean + selectedVariant?: { + id: string + name: string + } | null + contextItems?: React.ReactNode +} + +const PromptInputContext = createContext({ + isLoading: false, + value: "", + setValue: () => {}, + maxHeight: 240, + onSubmit: undefined, + disabled: false, + selectedVariant: null, + contextItems: null, +}) + +function usePromptInput() { + const context = useContext(PromptInputContext) + if (!context) { + throw new Error("usePromptInput must be used within a PromptInput") + } + return context +} + +type PromptInputProps = { + isLoading?: boolean + value?: string + onValueChange?: (_value: string) => void + maxHeight?: number | string + onSubmit?: () => void + children: React.ReactNode + className?: string + selectedVariant?: { + id: string + name: string + } | null + contextItems?: React.ReactNode +} + +function PromptInput({ + className, + isLoading = false, + maxHeight = 240, + value, + onValueChange, + onSubmit, + children, + selectedVariant, + contextItems, +}: PromptInputProps) { + const [internalValue, setInternalValue] = useState(value || "") + + const handleChange = (newValue: string) => { + setInternalValue(newValue) + onValueChange?.(newValue) + } + + return ( + +
    {children}
    +
    + ) +} + +export type PromptInputTextareaProps = { + disableAutosize?: boolean +} & React.ComponentProps + +const PromptInputTextareaInner = ( + { + className, + onKeyDown, + disableAutosize = false, + ...props + }: PromptInputTextareaProps, + forwardedRef: React.Ref, +) => { + const { value, setValue, maxHeight, onSubmit, disabled } = usePromptInput() + const textareaRef = useRef(null) + + // Expose internal ref + useEffect(() => { + if (!forwardedRef) return + if (typeof forwardedRef === "function") { + forwardedRef(textareaRef.current) + } else if (forwardedRef) { + ;( + forwardedRef as React.MutableRefObject + ).current = textareaRef.current + } + }, [forwardedRef]) + + useLayoutEffect(() => { + if (disableAutosize || !textareaRef.current) return + + const textarea = textareaRef.current + // Reset height to auto to measure correctly + textarea.style.height = "auto" + + const scrollHeight = textarea.scrollHeight + const maxHeightPx = + typeof maxHeight === "number" + ? maxHeight + : parseInt(maxHeight as string, 10) || 240 + + const newHeight = Math.min(scrollHeight, maxHeightPx) + textarea.style.height = `${newHeight}px` + textarea.style.overflowY = scrollHeight > maxHeightPx ? "auto" : "hidden" + }, [value, disableAutosize, maxHeight]) + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (e.key === "Enter" && !e.shiftKey && !e.metaKey && !e.ctrlKey) { + e.preventDefault() + onSubmit?.() + } + onKeyDown?.(e) + } + + const maxHeightStyle = + typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight + + return ( +