From 51c86df69007de1fd1e3f4959e0f9424764f9a58 Mon Sep 17 00:00:00 2001 From: wehub-resource-sync Date: Mon, 13 Jul 2026 13:36:53 +0800 Subject: [PATCH] chore: import upstream snapshot with attribution --- .agents/skills/electron-pro/SKILL.md | 163 + .agents/skills/hermes-agent/SKILL.md | 1765 ++ .agents/skills/lat-md/SKILL.md | 169 + .agents/skills/typescript-expert/SKILL.md | 470 + .../references/tsconfig-strict.json | 74 + .../references/typescript-cheatsheet.md | 393 + .../references/utility-types.ts | 332 + .../scripts/ts_diagnostic.py | 203 + .browserslistrc | 7 + .claude/settings.json | 24 + .claude/skills/electron-pro | 1 + .claude/skills/hermes-agent/SKILL.md | 1765 ++ .claude/skills/lat-md/SKILL.md | 169 + .claude/skills/typescript-expert | 1 + .codex/hooks.json | 24 + .env.example | 33 + .gitattributes | 7 + .github/workflows/ci.yml | 44 + .github/workflows/release.yml | 403 + .gitignore | 43 + .husky/pre-commit | 25 + .husky/pre-push | 22 + AGENTS.md | 105 + CLAUDE.md | 105 + CONTRIBUTING.ja-JP.md | 104 + CONTRIBUTING.md | 104 + CONTRIBUTING.zh-CN.md | 104 + Development.md | 48 + KANBAN_GAP_REPORT.md | 113 + LICENSE | 21 + PROFILE_MODAL_HANDOFF.md | 102 + README.es-LATAM.md | 350 + README.ja-JP.md | 268 + README.md | 350 + README.wehub.md | 7 + README.zh-CN.md | 268 + assets/header.webp | Bin 0 -> 53220 bytes assets/partners/atlascloud.webp | Bin 0 -> 9322 bytes assets/partners/greptile.webp | Bin 0 -> 12266 bytes build/afterPack.js | 52 + build/entitlements.mac.inherit.plist | 14 + build/entitlements.mac.plist | 14 + build/icon.icns | Bin 0 -> 200363 bytes build/icon.ico | Bin 0 -> 8413 bytes build/icon.png | Bin 0 -> 25734 bytes build/linux-after-install.sh | 29 + build/winget/Installer.template.yaml | 16 + build/winget/Locale.en-US.template.yaml | 25 + build/winget/Version.template.yaml | 6 + changelogs/0.4.5.md | 69 + changelogs/0.5.0.md | 64 + changelogs/0.6.0.md | 133 + changelogs/0.7.0.md | 106 + dev-app-update.yml | 4 + docs/SSH-TUNNEL-VPS.md | 306 + docs/chat-reconciliation-plan.md | 2370 +++ docs/reconciliation-regression-playbook.md | 270 + docs/remote-access-lab.md | 90 + docs/ssh-dashboard-transport.md | 97 + ...04-30-windows-winget-fedora-rpm-release.md | 1238 ++ ...indows-winget-fedora-rpm-release-design.md | 235 + electron-builder.yml | 73 + electron.vite.config.ts | 46 + eslint.config.mjs | 77 + lat.md/.cache/lat_init.json | 7 + lat.md/agent-sync.md | 91 + lat.md/analytics.md | 33 + lat.md/chat-commands.md | 122 + lat.md/chat-performance.md | 53 + lat.md/code-blocks.md | 21 + lat.md/context-folder.md | 39 + lat.md/desktop-updates.md | 9 + lat.md/hermes-account-login.md | 110 + lat.md/kanban.md | 39 + lat.md/lat.md | 24 + lat.md/main-process.md | 100 + lat.md/model-context.md | 25 + lat.md/model-selection.md | 29 + lat.md/office-3d-interiors.md | 65 + lat.md/office-3d-traffic.md | 47 + lat.md/office-interactions.md | 45 + lat.md/provider-setup.md | 97 + lat.md/sidebar-navigation.md | 139 + lat.md/wallet-token-balances.md | 50 + lat.md/web-preview.md | 20 + lat.md/window-chrome.md | 31 + package-lock.json | 17117 ++++++++++++++++ package.json | 95 + pr-comment.md | 41 + previews/chat.png | Bin 0 -> 256587 bytes previews/discover.png | Bin 0 -> 333275 bytes previews/download.webp | Bin 0 -> 49492 bytes previews/gateway.png | Bin 0 -> 315362 bytes previews/header.webp | Bin 0 -> 93608 bytes previews/kanban.png | Bin 0 -> 219463 bytes previews/memory.png | Bin 0 -> 217724 bytes previews/models.png | Bin 0 -> 304878 bytes previews/office.png | Bin 0 -> 814804 bytes previews/persona.png | Bin 0 -> 363709 bytes previews/profiles.png | Bin 0 -> 410407 bytes previews/providers.png | Bin 0 -> 302021 bytes previews/schedules.png | Bin 0 -> 231667 bytes previews/sessions.png | Bin 0 -> 299413 bytes previews/settings.png | Bin 0 -> 277566 bytes previews/skills.png | Bin 0 -> 360162 bytes previews/tools.png | Bin 0 -> 312416 bytes resources/icon.png | Bin 0 -> 179965 bytes scripts/README.md | 159 + scripts/drive-live-regression-suite.js | 1114 + scripts/drive-nous-chat.js | 133 + scripts/drive-nous-oauth.js | 145 + scripts/e2e-attach.js | 103 + scripts/generate-winget-manifests.mjs | 104 + scripts/hermes-sandbox.ps1 | 301 + scripts/probe-chat-state.js | 29 + scripts/probe-models-list.js | 39 + scripts/probe-nous-models.js | 31 + scripts/probe-selectors.js | 96 + scripts/probe-validation-and-banner.js | 116 + scripts/probe-wsl-detection.js | 24 + scripts/remote-lab.ps1 | 545 + scripts/remote-lab/docker-compose.yml | 38 + scripts/remote-lab/nginx.conf | 34 + scripts/repro-edit-model-emptykey.js | 191 + scripts/repro-gateway-restart-midchat.js | 181 + scripts/repro-gateway-restart-v2.js | 191 + scripts/repro-long-conversation.js | 154 + scripts/repro-nous-cards-schema-367.js | 124 + scripts/repro-nous-detection-367.js | 165 + scripts/repro-session-cont-error.js | 69 + scripts/repro-session-proliferation.js | 160 + scripts/ssh-lab.ps1 | 191 + scripts/ssh-lab/Dockerfile | 15 + scripts/ssh-lab/docker-compose.yml | 17 + scripts/ssh-lab/entrypoint.sh | 30 + scripts/verify-369-wsl-drift.js | 139 + scripts/verify-compat-host-derived-key.js | 169 + scripts/verify-nous-discovery.js | 48 + scripts/verify-wsl-detection.js | 50 + skills-lock.json | 25 + src/main/account-store.test.ts | 158 + src/main/account-store.ts | 163 + src/main/agent-sync.test.ts | 564 + src/main/agent-sync.ts | 679 + src/main/api-url.ts | 29 + src/main/app/context-menu.ts | 44 + src/main/app/menu.ts | 101 + src/main/app/start.ts | 223 + src/main/app/updater.ts | 120 + src/main/askpass.ts | 228 + src/main/attachment-staging.ts | 82 + src/main/auxiliary-config.ts | 168 + src/main/claw3d.ts | 1079 + src/main/config-health.test.ts | 284 + src/main/config-health.ts | 1093 + src/main/config.ts | 1922 ++ src/main/cronjobs.ts | 479 + src/main/dashboard-launch.ts | 32 + src/main/dashboard.ts | 648 + src/main/db.ts | 53 + src/main/default-models.ts | 98 + src/main/env.d.ts | 6 + src/main/gateway-ports.ts | 119 + src/main/gatewayPrompt.ts | 69 + src/main/gpu-fallback.ts | 350 + src/main/hermes-account.test.ts | 123 + src/main/hermes-account.ts | 282 + src/main/hermes-agent-compat.ts | 620 + src/main/hermes-auth.ts | 173 + src/main/hermes.test.ts | 290 + src/main/hermes.ts | 3820 ++++ src/main/host-derived-env.ts | 37 + src/main/index.ts | 21 + src/main/installer.ts | 1526 ++ src/main/ipc/register.ts | 2795 +++ src/main/kanban.ts | 451 + src/main/load-env.ts | 43 + src/main/locale.ts | 40 + src/main/mcp-servers.ts | 919 + src/main/media.ts | 192 + src/main/memory-limits.ts | 27 + src/main/memory.ts | 245 + src/main/messaging-platforms.ts | 198 + src/main/model-discovery.ts | 694 + src/main/models.ts | 273 + src/main/office-start.ts | 68 + src/main/process-options.ts | 7 + src/main/profile-meta.ts | 129 + src/main/profiles.ts | 402 + src/main/provider-registry.ts | 54 + src/main/providers.ts | 12 + src/main/registry.ts | 556 + src/main/remote-metadata.ts | 95 + src/main/remote-models.ts | 311 + src/main/remote-sessions.ts | 595 + src/main/remote-skills.test.ts | 147 + src/main/remote-skills.ts | 158 + src/main/run-stream.test.ts | 146 + src/main/run-stream.ts | 118 + .../secrets/commandProvider.property.test.ts | 150 + .../secrets/commandProvider.stdio.test.ts | 73 + src/main/secrets/commandProvider.test.ts | 326 + src/main/secrets/commandProvider.ts | 255 + src/main/secrets/envProvider.ts | 21 + src/main/secrets/getSpawnFloor.test.ts | 161 + src/main/secrets/index.test.ts | 105 + src/main/secrets/index.ts | 271 + src/main/secrets/provider.ts | 34 + src/main/secrets/resolvedSecretMap.test.ts | 82 + src/main/secrets/securityInvariants.test.ts | 127 + src/main/secrets/spawnRateFloor.test.ts | 109 + src/main/security.ts | 115 + src/main/session-attachment-store.ts | 283 + src/main/session-cache.ts | 298 + src/main/session-context-folder-store.ts | 131 + src/main/session-continuation-store.ts | 370 + src/main/session-model-override-store.test.ts | 126 + src/main/session-model-override-store.ts | 84 + src/main/sessions.ts | 810 + src/main/skills.ts | 447 + src/main/soul.ts | 37 + src/main/sse-parser.ts | 140 + src/main/ssh-options.ts | 32 + src/main/ssh-remote.test.ts | 144 + src/main/ssh-remote.ts | 3462 ++++ src/main/ssh-tunnel.ts | 339 + src/main/sudoCreds.ts | 192 + src/main/terminal-launcher.ts | 625 + src/main/tools.ts | 380 + src/main/tui-gateway-stream.test.ts | 228 + src/main/tui-gateway-stream.ts | 140 + src/main/updater-log.ts | 68 + src/main/utils.ts | 239 + src/main/validation.ts | 157 + src/main/wallet-actions.test.ts | 195 + src/main/wallet-actions.ts | 114 + src/main/wallet-balances.test.ts | 249 + src/main/wallet-balances.ts | 127 + src/main/wallet-store.test.ts | 185 + src/main/wallet-store.ts | 242 + src/main/wallet-sync.test.ts | 226 + src/main/wallet-sync.ts | 131 + src/main/ws.d.ts | 20 + src/main/wsl-detection.ts | 155 + src/main/yaml-path.ts | 107 + src/preload/askpass.ts | 27 + src/preload/index.d.ts | 1194 ++ src/preload/index.ts | 1551 ++ src/renderer/index.html | 15 + src/renderer/src/App.tsx | 272 + src/renderer/src/assets/base.css | 46 + src/renderer/src/assets/fonts/Cairo-Bold.ttf | Bin 0 -> 91664 bytes .../src/assets/fonts/Cairo-Medium.ttf | Bin 0 -> 91676 bytes .../src/assets/fonts/Cairo-Regular.ttf | Bin 0 -> 91500 bytes .../src/assets/fonts/Cairo-SemiBold.ttf | Bin 0 -> 91724 bytes .../src/assets/fonts/Manrope-Bold.ttf | Bin 0 -> 96800 bytes .../src/assets/fonts/Manrope-Medium.ttf | Bin 0 -> 96904 bytes .../src/assets/fonts/Manrope-Regular.ttf | Bin 0 -> 96832 bytes .../src/assets/fonts/Manrope-SemiBold.ttf | Bin 0 -> 96936 bytes src/renderer/src/assets/hermes-icon.svg | 18 + src/renderer/src/assets/hermes-one.svg | 17 + src/renderer/src/assets/hermesbg.webp | Bin 0 -> 17198 bytes src/renderer/src/assets/icon.png | Bin 0 -> 74530 bytes src/renderer/src/assets/icons/etherium.webp | Bin 0 -> 8100 bytes src/renderer/src/assets/icons/hdtoken.webp | Bin 0 -> 52752 bytes src/renderer/src/assets/icons/index.tsx | 63 + src/renderer/src/assets/iconv2.png | Bin 0 -> 47148 bytes src/renderer/src/assets/images/one-chat.svg | 30 + src/renderer/src/assets/loadingo.gif | Bin 0 -> 610440 bytes src/renderer/src/assets/logos/api.svg | 6 + src/renderer/src/assets/logos/atlascloud.svg | 1 + src/renderer/src/assets/logos/atomicchat.svg | 18 + .../src/assets/logos/cerebras-color.svg | 1 + src/renderer/src/assets/logos/cerebras.svg | 1 + .../src/assets/logos/claude-color.svg | 1 + .../src/assets/logos/deepseek-color.svg | 1 + src/renderer/src/assets/logos/dingtalk.svg | 7 + src/renderer/src/assets/logos/discord.svg | 1 + src/renderer/src/assets/logos/email.svg | 4 + .../src/assets/logos/fireworks-color.svg | 1 + src/renderer/src/assets/logos/fireworksai.svg | 1 + .../src/assets/logos/gemini-color.svg | 1 + src/renderer/src/assets/logos/grok.svg | 1 + src/renderer/src/assets/logos/groq.svg | 1 + src/renderer/src/assets/logos/home-assist.svg | 4 + src/renderer/src/assets/logos/huggingface.svg | 1 + src/renderer/src/assets/logos/imessage.svg | 4 + src/renderer/src/assets/logos/lark.svg | 4 + src/renderer/src/assets/logos/lmstudio.svg | 1 + src/renderer/src/assets/logos/matrix-dark.svg | 1 + .../src/assets/logos/mattermost-dark.svg | 1 + src/renderer/src/assets/logos/meta-color.svg | 1 + src/renderer/src/assets/logos/mimo.svg | 1 + .../src/assets/logos/minimax-color.svg | 1 + .../src/assets/logos/mistral-color.svg | 1 + src/renderer/src/assets/logos/moonshot.svg | 1 + .../src/assets/logos/nousresearch.svg | 1 + .../src/assets/logos/nvidia-color.svg | 1 + src/renderer/src/assets/logos/ollama.svg | 1 + src/renderer/src/assets/logos/openai.svg | 1 + src/renderer/src/assets/logos/opencode.svg | 1 + src/renderer/src/assets/logos/openrouter.svg | 1 + .../src/assets/logos/perplexity-color.svg | 1 + src/renderer/src/assets/logos/python.svg | 6 + src/renderer/src/assets/logos/qqbot.svg | 6 + src/renderer/src/assets/logos/qwen.svg | 1 + src/renderer/src/assets/logos/signal.svg | 7 + src/renderer/src/assets/logos/slack.svg | 1 + src/renderer/src/assets/logos/sms.svg | 4 + src/renderer/src/assets/logos/telegram.svg | 4 + .../src/assets/logos/together-color.svg | 1 + src/renderer/src/assets/logos/togetherai.svg | 1 + src/renderer/src/assets/logos/twitter.svg | 12 + src/renderer/src/assets/logos/vllm.svg | 1 + src/renderer/src/assets/logos/webhook.svg | 4 + src/renderer/src/assets/logos/wechat.svg | 5 + src/renderer/src/assets/logos/wecom.svg | 4 + .../src/assets/logos/whatsapp-icon.svg | 1 + src/renderer/src/assets/logos/yuanbao.svg | 6 + src/renderer/src/assets/logos/zai.svg | 1 + src/renderer/src/assets/main.css | 14635 +++++++++++++ src/renderer/src/assets/splash.png | Bin 0 -> 2085433 bytes src/renderer/src/assets/splashtext-w.webp | Bin 0 -> 2040 bytes src/renderer/src/assets/splashtext.png | Bin 0 -> 2854 bytes src/renderer/src/assets/startvid.mp4 | Bin 0 -> 1880239 bytes src/renderer/src/assets/title-line.svg | 19 + .../src/components/AgentMarkdown.test.tsx | 119 + src/renderer/src/components/AgentMarkdown.tsx | 288 + .../src/components/AttachmentChip.tsx | 135 + .../components/ConfigHealthBanner.test.tsx | 104 + .../src/components/ConfigHealthBanner.tsx | 314 + src/renderer/src/components/ErrorBoundary.tsx | 57 + src/renderer/src/components/FollowUsModal.tsx | 91 + src/renderer/src/components/FontProvider.tsx | 58 + .../src/components/HermesAccountModal.tsx | 165 + src/renderer/src/components/I18nContext.ts | 9 + .../src/components/I18nProvider.test.tsx | 116 + src/renderer/src/components/I18nProvider.tsx | 115 + .../components/MediaImage.lightbox.test.tsx | 76 + src/renderer/src/components/MediaImage.tsx | 205 + .../src/components/OAuthLoginModal.tsx | 123 + .../src/components/ProviderKeysSection.tsx | 652 + src/renderer/src/components/RemoteNotice.tsx | 16 + src/renderer/src/components/ThemeProvider.tsx | 110 + .../src/components/VerifyWarningBanner.tsx | 38 + src/renderer/src/components/Versions.tsx | 15 + .../src/components/common/BrandLogo.tsx | 259 + .../src/components/common/HermesLogo.tsx | 15 + .../src/components/common/ProfileAvatar.tsx | 71 + .../src/components/modal/AppModal.tsx | 92 + .../components/profile/ProfileModal.test.tsx | 145 + .../src/components/profile/ProfileModal.tsx | 590 + .../components/profile/ProfileModalContext.ts | 44 + .../profile/ProfileModalProvider.tsx | 56 + .../profile/ProfileSyncPane.test.tsx | 83 + .../components/profile/ProfileSyncPane.tsx | 160 + .../profile/ProfileWalletPane.test.tsx | 113 + .../components/profile/ProfileWalletPane.tsx | 400 + .../src/components/settings/AboutPane.tsx | 404 + .../components/settings/AppearancePane.tsx | 184 + .../src/components/settings/CommunityPane.tsx | 119 + .../components/settings/ConnectionPane.tsx | 436 + .../src/components/settings/DataPane.tsx | 130 + .../src/components/settings/LanguagePane.tsx | 88 + .../src/components/settings/LogsPane.tsx | 82 + .../src/components/settings/PrivacyPane.tsx | 37 + .../settings/SettingsDataContext.ts | 18 + .../src/components/settings/SettingsModal.tsx | 204 + .../settings/SettingsModalContext.ts | 36 + .../settings/SettingsModalProvider.tsx | 58 + .../components/settings/settingsHelpers.ts | 116 + .../components/settings/useSettingsData.ts | 811 + src/renderer/src/components/toolMeta.tsx | 381 + src/renderer/src/components/useI18n.ts | 22 + src/renderer/src/constants.ts | 1230 ++ src/renderer/src/env.d.ts | 13 + src/renderer/src/hooks/useDiscoveredModels.ts | 97 + src/renderer/src/hooks/useLightboxClose.ts | 27 + src/renderer/src/main.tsx | 21 + .../src/screens/Agents/Agents.test.tsx | 121 + src/renderer/src/screens/Agents/Agents.tsx | 496 + src/renderer/src/screens/Chat/Chat.tsx | 1120 + .../src/screens/Chat/ChatEmptyState.tsx | 83 + .../src/screens/Chat/ChatInput.test.tsx | 123 + src/renderer/src/screens/Chat/ChatInput.tsx | 761 + .../src/screens/Chat/ClarifyCard.test.tsx | 159 + src/renderer/src/screens/Chat/ClarifyCard.tsx | 130 + .../src/screens/Chat/ContextFolderChip.tsx | 177 + .../src/screens/Chat/ContextGauge.tsx | 107 + src/renderer/src/screens/Chat/FileViewer.tsx | 322 + src/renderer/src/screens/Chat/HistoryRow.tsx | 315 + src/renderer/src/screens/Chat/MessageList.tsx | 174 + src/renderer/src/screens/Chat/MessageRow.tsx | 401 + .../src/screens/Chat/ModelPicker.test.tsx | 366 + src/renderer/src/screens/Chat/ModelPicker.tsx | 186 + .../src/screens/Chat/QueuedMessages.tsx | 94 + .../screens/Chat/ReasoningEffortPicker.tsx | 153 + .../src/screens/Chat/RemoteFolderPicker.tsx | 270 + .../src/screens/Chat/WebPreviewPanel.tsx | 515 + .../src/screens/Chat/WorktreePanel.tsx | 293 + .../src/screens/Chat/attachmentUtils.test.ts | 240 + .../src/screens/Chat/attachmentUtils.ts | 525 + src/renderer/src/screens/Chat/chatMessages.ts | 149 + .../src/screens/Chat/contextWindows.test.ts | 34 + .../src/screens/Chat/contextWindows.ts | 49 + .../Chat/dashboardEventAdapter.test.ts | 169 + .../src/screens/Chat/dashboardEventAdapter.ts | 718 + .../Chat/dashboardGatewayClient.test.ts | 94 + .../screens/Chat/dashboardGatewayClient.ts | 257 + .../Chat/hooks/parseBackgroundCommand.test.ts | 28 + .../Chat/hooks/usageFromPayload.test.ts | 157 + .../src/screens/Chat/hooks/useChatActions.ts | 442 + .../screens/Chat/hooks/useChatIPC.test.tsx | 141 + .../src/screens/Chat/hooks/useChatIPC.ts | 370 + .../src/screens/Chat/hooks/useChatScroll.ts | 54 + .../hooks/useDashboardChatTransport.test.tsx | 656 + .../Chat/hooks/useDashboardChatTransport.ts | 1721 ++ .../src/screens/Chat/hooks/useFastMode.ts | 40 + .../src/screens/Chat/hooks/useInputHistory.ts | 69 + .../screens/Chat/hooks/useLocalCommands.ts | 190 + .../Chat/hooks/useModelConfig.test.tsx | 105 + .../src/screens/Chat/hooks/useModelConfig.ts | 214 + .../screens/Chat/hooks/useReasoningEffort.ts | 84 + .../src/screens/Chat/hooks/useVoiceInput.ts | 267 + .../src/screens/Chat/keyboard.test.ts | 30 + src/renderer/src/screens/Chat/keyboard.ts | 10 + .../src/screens/Chat/liveReasoningEvents.ts | 56 + .../src/screens/Chat/liveToolEvents.ts | 264 + .../src/screens/Chat/mediaUtils.test.ts | 516 + src/renderer/src/screens/Chat/mediaUtils.ts | 548 + .../src/screens/Chat/sessionHistory.ts | 950 + .../screens/Chat/slash/SlashCommandIcon.tsx | 202 + .../screens/Chat/slash/commandCatalog.test.ts | 146 + .../src/screens/Chat/slash/commandCatalog.ts | 198 + .../src/screens/Chat/slash/desktopCommands.ts | 129 + .../screens/Chat/slash/executeAgentCommand.ts | 52 + .../Chat/slash/handleSlashCommand.test.ts | 170 + .../screens/Chat/slash/handleSlashCommand.ts | 110 + .../Chat/slash/parseSlashCommand.test.ts | 60 + .../screens/Chat/slash/parseSlashCommand.ts | 39 + .../Chat/slash/prepareModelSubmission.ts | 43 + src/renderer/src/screens/Chat/slash/types.ts | 140 + .../Chat/slash/virtualSlashCommands.ts | 120 + .../src/screens/Chat/slashCommands.ts | 174 + .../src/screens/Chat/slashExec.test.ts | 184 + src/renderer/src/screens/Chat/slashExec.ts | 213 + .../src/screens/Chat/transcriptUtils.test.ts | 41 + .../src/screens/Chat/transcriptUtils.ts | 31 + src/renderer/src/screens/Chat/types.ts | 123 + .../src/screens/Discover/Discover.tsx | 669 + .../src/screens/Gateway/Gateway.test.tsx | 109 + src/renderer/src/screens/Gateway/Gateway.tsx | 974 + src/renderer/src/screens/Install/Install.tsx | 308 + src/renderer/src/screens/Kanban/Kanban.tsx | 1382 ++ .../screens/Layout/ActiveSessionsBar.test.tsx | 81 + .../src/screens/Layout/ActiveSessionsBar.tsx | 110 + src/renderer/src/screens/Layout/Layout.tsx | 1015 + .../screens/Layout/ProfileSwitcher.test.tsx | 90 + .../src/screens/Layout/ProfileSwitcher.tsx | 250 + .../screens/Layout/SidebarRecentSessions.tsx | 992 + .../src/screens/Layout/SidebarSessionMenu.tsx | 341 + .../src/screens/Layout/chatRuns.test.ts | 168 + src/renderer/src/screens/Layout/chatRuns.ts | 153 + .../src/screens/Memory/CapacityBar.tsx | 31 + .../src/screens/Memory/CapacityCards.tsx | 45 + src/renderer/src/screens/Memory/Memory.tsx | 103 + .../src/screens/Memory/MemoryEntries.tsx | 198 + .../src/screens/Memory/MemoryProfile.tsx | 87 + .../src/screens/Memory/MemoryProviders.tsx | 179 + .../src/screens/Memory/MemoryTabs.tsx | 40 + src/renderer/src/screens/Memory/types.ts | 33 + .../src/screens/Models/Models.test.tsx | 37 + src/renderer/src/screens/Models/Models.tsx | 1264 ++ .../src/screens/Models/detect-provider.ts | 66 + src/renderer/src/screens/Office/Office.tsx | 792 + .../src/screens/Office/OneChatModal.tsx | 504 + .../Office/RepInteractionPanel.test.tsx | 135 + .../screens/Office/RepInteractionPanel.tsx | 455 + .../src/screens/Office/office3d/Office3D.tsx | 503 + .../src/screens/Office/office3d/agents.ts | 94 + .../Office/office3d/assets/apartment.glb | Bin 0 -> 92564 bytes .../Office/office3d/assets/apartment2.glb | Bin 0 -> 96488 bytes .../screens/Office/office3d/assets/atm.glb | Bin 0 -> 56052 bytes .../Office/office3d/assets/biz_man.glb | Bin 0 -> 1529248 bytes .../Office/office3d/assets/building1.glb | Bin 0 -> 81380 bytes .../Office/office3d/assets/building2.glb | Bin 0 -> 106980 bytes .../screens/Office/office3d/assets/car1.glb | Bin 0 -> 109504 bytes .../screens/Office/office3d/assets/car2.glb | Bin 0 -> 174320 bytes .../Office/office3d/assets/ceo_desk.glb | Bin 0 -> 135916 bytes .../Office/office3d/assets/chairDesk.glb | Bin 0 -> 39016 bytes .../Office/office3d/assets/computerScreen.glb | Bin 0 -> 6404 bytes .../screens/Office/office3d/assets/desk.glb | Bin 0 -> 15048 bytes .../Office/office3d/assets/employee.glb | Bin 0 -> 241828 bytes .../office3d/assets/images/base-bank.webp | Bin 0 -> 6408 bytes .../office3d/assets/images/hermes-one-hq.webp | Bin 0 -> 12028 bytes .../office3d/assets/loungeDesignChair.glb | Bin 0 -> 9136 bytes .../Office/office3d/assets/loungeSofa.glb | Bin 0 -> 9644 bytes .../screens/Office/office3d/assets/man.glb | Bin 0 -> 493196 bytes .../screens/Office/office3d/assets/pantry.glb | Bin 0 -> 86008 bytes .../screens/Office/office3d/assets/person.glb | Bin 0 -> 1430660 bytes .../Office/office3d/assets/person2.glb | Bin 0 -> 1456760 bytes .../Office/office3d/assets/pottedPlant.glb | Bin 0 -> 7576 bytes .../Office/office3d/assets/sofa_chair.glb | Bin 0 -> 1352848 bytes .../Office/office3d/assets/street-light.glb | Bin 0 -> 11056 bytes .../Office/office3d/assets/traffic-light.glb | Bin 0 -> 44376 bytes .../screens/Office/office3d/assets/tree.glb | Bin 0 -> 46488 bytes .../screens/Office/office3d/assets/truck1.glb | Bin 0 -> 273012 bytes .../Office/office3d/assets/white_pot.glb | Bin 0 -> 178132 bytes .../screens/Office/office3d/assets/women.glb | Bin 0 -> 1530616 bytes .../Office/office3d/assets/wooden_table.glb | Bin 0 -> 3582608 bytes .../Office/office3d/avatars/profile.ts | 288 + .../Office/office3d/core/characters.ts | 57 + .../screens/Office/office3d/core/cityPlan.ts | 83 + .../screens/Office/office3d/core/collision.ts | 392 + .../screens/Office/office3d/core/constants.ts | 53 + .../screens/Office/office3d/core/geometry.ts | 251 + .../src/screens/Office/office3d/core/glb.ts | 168 + .../screens/Office/office3d/core/locations.ts | 113 + .../screens/Office/office3d/core/palette.ts | 33 + .../src/screens/Office/office3d/core/rng.ts | 9 + .../src/screens/Office/office3d/core/types.ts | 163 + .../office3d/interactions/registry.test.ts | 36 + .../Office/office3d/interactions/registry.ts | 56 + .../src/screens/Office/office3d/layout.ts | 339 + .../Office/office3d/objects/AgentsLayer.tsx | 575 + .../screens/Office/office3d/objects/Bank.tsx | 399 + .../Office/office3d/objects/CarShowroom.tsx | 285 + .../Office/office3d/objects/CityBackdrop.tsx | 701 + .../Office/office3d/objects/Interactable.tsx | 98 + .../Office/office3d/objects/OfficeShell.tsx | 314 + .../Office/office3d/objects/Pedestrians.tsx | 294 + .../office3d/objects/RiggedCharacter.tsx | 223 + .../office3d/objects/SceneEnvironment.tsx | 116 + .../Office/office3d/objects/StaffPerson.tsx | 71 + .../Office/office3d/objects/Traffic.tsx | 520 + .../Office/office3d/objects/agents.tsx | 1355 ++ .../Office/office3d/objects/furniture.tsx | 395 + .../screens/Office/office3d/objects/types.ts | 46 + .../src/screens/Office/office3d/trips.ts | 125 + .../Office/office3d/troika-three-text.d.ts | 10 + src/renderer/src/screens/Office/officeUrl.ts | 19 + .../src/screens/Providers/Providers.tsx | 1071 + .../src/screens/Schedules/Schedules.tsx | 661 + .../src/screens/Sessions/Sessions.test.tsx | 625 + .../src/screens/Sessions/Sessions.tsx | 1052 + .../src/screens/Settings/ConfigHealth.tsx | 208 + src/renderer/src/screens/Setup/Setup.tsx | 352 + .../src/screens/Skills/Skills.test.tsx | 151 + src/renderer/src/screens/Skills/Skills.tsx | 404 + src/renderer/src/screens/Soul/Soul.tsx | 126 + .../src/screens/SplashScreen/SplashScreen.tsx | 76 + src/renderer/src/screens/Tools/Tools.tsx | 753 + src/renderer/src/screens/Welcome/Welcome.tsx | 423 + src/renderer/src/test/setup.ts | 43 + src/renderer/src/utils/analytics.ts | 161 + src/renderer/src/utils/imageResize.ts | 38 + src/shared/account.ts | 23 + src/shared/agent-sync.ts | 41 + src/shared/askpass.ts | 1 + src/shared/attachments.ts | 162 + src/shared/chat-stream.ts | 49 + src/shared/gpu.ts | 25 + src/shared/i18n/config.ts | 29 + src/shared/i18n/index.test.ts | 59 + src/shared/i18n/index.ts | 642 + src/shared/i18n/locales/ar/agents.ts | 78 + src/shared/i18n/locales/ar/chat.ts | 168 + src/shared/i18n/locales/ar/common.ts | 55 + src/shared/i18n/locales/ar/constants.ts | 276 + src/shared/i18n/locales/ar/diagnose.ts | 33 + src/shared/i18n/locales/ar/discover.ts | 38 + src/shared/i18n/locales/ar/errors.ts | 8 + src/shared/i18n/locales/ar/gateway.ts | 68 + src/shared/i18n/locales/ar/install.ts | 33 + src/shared/i18n/locales/ar/kanban.ts | 112 + src/shared/i18n/locales/ar/memory.ts | 62 + src/shared/i18n/locales/ar/models.ts | 40 + src/shared/i18n/locales/ar/navigation.ts | 45 + src/shared/i18n/locales/ar/office.ts | 80 + src/shared/i18n/locales/ar/providers.ts | 19 + src/shared/i18n/locales/ar/schedules.ts | 57 + src/shared/i18n/locales/ar/sessions.ts | 37 + src/shared/i18n/locales/ar/settings.ts | 216 + src/shared/i18n/locales/ar/setup.ts | 52 + src/shared/i18n/locales/ar/skills.ts | 26 + src/shared/i18n/locales/ar/soul.ts | 11 + src/shared/i18n/locales/ar/tools.ts | 127 + src/shared/i18n/locales/ar/welcome.ts | 24 + src/shared/i18n/locales/en/agents.ts | 130 + src/shared/i18n/locales/en/chat.ts | 169 + src/shared/i18n/locales/en/common.ts | 55 + src/shared/i18n/locales/en/constants.ts | 278 + src/shared/i18n/locales/en/diagnose.ts | 33 + src/shared/i18n/locales/en/discover.ts | 38 + src/shared/i18n/locales/en/errors.ts | 8 + src/shared/i18n/locales/en/gateway.ts | 68 + src/shared/i18n/locales/en/install.ts | 33 + src/shared/i18n/locales/en/kanban.ts | 112 + src/shared/i18n/locales/en/memory.ts | 62 + src/shared/i18n/locales/en/models.ts | 40 + src/shared/i18n/locales/en/navigation.ts | 45 + src/shared/i18n/locales/en/office.ts | 93 + src/shared/i18n/locales/en/providers.ts | 72 + src/shared/i18n/locales/en/schedules.ts | 57 + src/shared/i18n/locales/en/sessions.ts | 37 + src/shared/i18n/locales/en/settings.ts | 228 + src/shared/i18n/locales/en/setup.ts | 52 + src/shared/i18n/locales/en/skills.ts | 26 + src/shared/i18n/locales/en/soul.ts | 11 + src/shared/i18n/locales/en/tools.ts | 127 + src/shared/i18n/locales/en/welcome.ts | 24 + src/shared/i18n/locales/es/agents.ts | 68 + src/shared/i18n/locales/es/chat.ts | 128 + src/shared/i18n/locales/es/common.ts | 50 + src/shared/i18n/locales/es/constants.ts | 240 + src/shared/i18n/locales/es/diagnose.ts | 33 + src/shared/i18n/locales/es/errors.ts | 8 + src/shared/i18n/locales/es/gateway.ts | 18 + src/shared/i18n/locales/es/install.ts | 34 + src/shared/i18n/locales/es/kanban.ts | 101 + src/shared/i18n/locales/es/memory.ts | 65 + src/shared/i18n/locales/es/models.ts | 29 + src/shared/i18n/locales/es/navigation.ts | 24 + src/shared/i18n/locales/es/office.ts | 61 + src/shared/i18n/locales/es/providers.ts | 20 + src/shared/i18n/locales/es/schedules.ts | 58 + src/shared/i18n/locales/es/sessions.ts | 36 + src/shared/i18n/locales/es/settings.ts | 139 + src/shared/i18n/locales/es/setup.ts | 58 + src/shared/i18n/locales/es/skills.ts | 28 + src/shared/i18n/locales/es/soul.ts | 11 + src/shared/i18n/locales/es/tools.ts | 75 + src/shared/i18n/locales/es/welcome.ts | 25 + src/shared/i18n/locales/he/agents.ts | 68 + src/shared/i18n/locales/he/chat.ts | 137 + src/shared/i18n/locales/he/common.ts | 50 + src/shared/i18n/locales/he/constants.ts | 235 + src/shared/i18n/locales/he/diagnose.ts | 33 + src/shared/i18n/locales/he/discover.ts | 39 + src/shared/i18n/locales/he/errors.ts | 8 + src/shared/i18n/locales/he/gateway.ts | 65 + src/shared/i18n/locales/he/install.ts | 30 + src/shared/i18n/locales/he/kanban.ts | 101 + src/shared/i18n/locales/he/memory.ts | 56 + src/shared/i18n/locales/he/models.ts | 28 + src/shared/i18n/locales/he/navigation.ts | 24 + src/shared/i18n/locales/he/office.ts | 81 + src/shared/i18n/locales/he/providers.ts | 19 + src/shared/i18n/locales/he/schedules.ts | 56 + src/shared/i18n/locales/he/sessions.ts | 36 + src/shared/i18n/locales/he/settings.ts | 198 + src/shared/i18n/locales/he/setup.ts | 50 + src/shared/i18n/locales/he/skills.ts | 26 + src/shared/i18n/locales/he/soul.ts | 9 + src/shared/i18n/locales/he/tools.ts | 127 + src/shared/i18n/locales/he/welcome.ts | 24 + src/shared/i18n/locales/id/agents.ts | 65 + src/shared/i18n/locales/id/chat.ts | 94 + src/shared/i18n/locales/id/common.ts | 49 + src/shared/i18n/locales/id/constants.ts | 229 + src/shared/i18n/locales/id/errors.ts | 8 + src/shared/i18n/locales/id/gateway.ts | 18 + src/shared/i18n/locales/id/install.ts | 34 + src/shared/i18n/locales/id/memory.ts | 65 + src/shared/i18n/locales/id/models.ts | 27 + src/shared/i18n/locales/id/navigation.ts | 24 + src/shared/i18n/locales/id/office.ts | 61 + src/shared/i18n/locales/id/providers.ts | 19 + src/shared/i18n/locales/id/schedules.ts | 57 + src/shared/i18n/locales/id/sessions.ts | 25 + src/shared/i18n/locales/id/settings.ts | 135 + src/shared/i18n/locales/id/setup.ts | 53 + src/shared/i18n/locales/id/skills.ts | 27 + src/shared/i18n/locales/id/soul.ts | 10 + src/shared/i18n/locales/id/tools.ts | 72 + src/shared/i18n/locales/id/welcome.ts | 24 + src/shared/i18n/locales/ja/agents.ts | 65 + src/shared/i18n/locales/ja/chat.ts | 93 + src/shared/i18n/locales/ja/common.ts | 48 + src/shared/i18n/locales/ja/constants.ts | 229 + src/shared/i18n/locales/ja/errors.ts | 8 + src/shared/i18n/locales/ja/gateway.ts | 18 + src/shared/i18n/locales/ja/install.ts | 34 + src/shared/i18n/locales/ja/memory.ts | 58 + src/shared/i18n/locales/ja/models.ts | 27 + src/shared/i18n/locales/ja/navigation.ts | 24 + src/shared/i18n/locales/ja/office.ts | 61 + src/shared/i18n/locales/ja/providers.ts | 18 + src/shared/i18n/locales/ja/schedules.ts | 57 + src/shared/i18n/locales/ja/sessions.ts | 25 + src/shared/i18n/locales/ja/settings.ts | 133 + src/shared/i18n/locales/ja/setup.ts | 50 + src/shared/i18n/locales/ja/skills.ts | 26 + src/shared/i18n/locales/ja/soul.ts | 9 + src/shared/i18n/locales/ja/tools.ts | 68 + src/shared/i18n/locales/ja/welcome.ts | 24 + src/shared/i18n/locales/pl/agents.ts | 64 + src/shared/i18n/locales/pl/chat.ts | 107 + src/shared/i18n/locales/pl/common.ts | 49 + src/shared/i18n/locales/pl/constants.ts | 233 + src/shared/i18n/locales/pl/errors.ts | 8 + src/shared/i18n/locales/pl/gateway.ts | 19 + src/shared/i18n/locales/pl/install.ts | 34 + src/shared/i18n/locales/pl/kanban.ts | 92 + src/shared/i18n/locales/pl/memory.ts | 62 + src/shared/i18n/locales/pl/models.ts | 29 + src/shared/i18n/locales/pl/navigation.ts | 24 + src/shared/i18n/locales/pl/office.ts | 61 + src/shared/i18n/locales/pl/providers.ts | 19 + src/shared/i18n/locales/pl/schedules.ts | 58 + src/shared/i18n/locales/pl/sessions.ts | 25 + src/shared/i18n/locales/pl/settings.ts | 137 + src/shared/i18n/locales/pl/setup.ts | 51 + src/shared/i18n/locales/pl/skills.ts | 26 + src/shared/i18n/locales/pl/soul.ts | 10 + src/shared/i18n/locales/pl/tools.ts | 69 + src/shared/i18n/locales/pl/welcome.ts | 24 + src/shared/i18n/locales/pt-BR/agents.ts | 65 + src/shared/i18n/locales/pt-BR/chat.ts | 94 + src/shared/i18n/locales/pt-BR/common.ts | 49 + src/shared/i18n/locales/pt-BR/constants.ts | 232 + src/shared/i18n/locales/pt-BR/errors.ts | 8 + src/shared/i18n/locales/pt-BR/gateway.ts | 18 + src/shared/i18n/locales/pt-BR/install.ts | 34 + src/shared/i18n/locales/pt-BR/memory.ts | 63 + src/shared/i18n/locales/pt-BR/models.ts | 28 + src/shared/i18n/locales/pt-BR/navigation.ts | 24 + src/shared/i18n/locales/pt-BR/office.ts | 61 + src/shared/i18n/locales/pt-BR/providers.ts | 19 + src/shared/i18n/locales/pt-BR/schedules.ts | 58 + src/shared/i18n/locales/pt-BR/sessions.ts | 25 + src/shared/i18n/locales/pt-BR/settings.ts | 138 + src/shared/i18n/locales/pt-BR/setup.ts | 57 + src/shared/i18n/locales/pt-BR/skills.ts | 28 + src/shared/i18n/locales/pt-BR/soul.ts | 11 + src/shared/i18n/locales/pt-BR/tools.ts | 72 + src/shared/i18n/locales/pt-BR/welcome.ts | 25 + src/shared/i18n/locales/pt-PT/agents.ts | 65 + src/shared/i18n/locales/pt-PT/chat.ts | 106 + src/shared/i18n/locales/pt-PT/common.ts | 50 + src/shared/i18n/locales/pt-PT/constants.ts | 230 + src/shared/i18n/locales/pt-PT/diagnose.ts | 33 + src/shared/i18n/locales/pt-PT/errors.ts | 8 + src/shared/i18n/locales/pt-PT/gateway.ts | 17 + src/shared/i18n/locales/pt-PT/install.ts | 34 + src/shared/i18n/locales/pt-PT/kanban.ts | 101 + src/shared/i18n/locales/pt-PT/memory.ts | 64 + src/shared/i18n/locales/pt-PT/models.ts | 29 + src/shared/i18n/locales/pt-PT/navigation.ts | 24 + src/shared/i18n/locales/pt-PT/office.ts | 61 + src/shared/i18n/locales/pt-PT/providers.ts | 21 + src/shared/i18n/locales/pt-PT/schedules.ts | 57 + src/shared/i18n/locales/pt-PT/sessions.ts | 25 + src/shared/i18n/locales/pt-PT/settings.ts | 130 + src/shared/i18n/locales/pt-PT/setup.ts | 56 + src/shared/i18n/locales/pt-PT/skills.ts | 28 + src/shared/i18n/locales/pt-PT/soul.ts | 11 + src/shared/i18n/locales/pt-PT/tools.ts | 72 + src/shared/i18n/locales/pt-PT/welcome.ts | 25 + src/shared/i18n/locales/tr/agents.ts | 68 + src/shared/i18n/locales/tr/chat.ts | 124 + src/shared/i18n/locales/tr/common.ts | 50 + src/shared/i18n/locales/tr/constants.ts | 235 + src/shared/i18n/locales/tr/diagnose.ts | 33 + src/shared/i18n/locales/tr/discover.ts | 43 + src/shared/i18n/locales/tr/errors.ts | 8 + src/shared/i18n/locales/tr/gateway.ts | 57 + src/shared/i18n/locales/tr/install.ts | 34 + src/shared/i18n/locales/tr/kanban.ts | 106 + src/shared/i18n/locales/tr/memory.ts | 61 + src/shared/i18n/locales/tr/models.ts | 28 + src/shared/i18n/locales/tr/navigation.ts | 24 + src/shared/i18n/locales/tr/office.ts | 60 + src/shared/i18n/locales/tr/providers.ts | 21 + src/shared/i18n/locales/tr/schedules.ts | 57 + src/shared/i18n/locales/tr/sessions.ts | 36 + src/shared/i18n/locales/tr/settings.ts | 204 + src/shared/i18n/locales/tr/setup.ts | 53 + src/shared/i18n/locales/tr/skills.ts | 27 + src/shared/i18n/locales/tr/soul.ts | 11 + src/shared/i18n/locales/tr/tools.ts | 133 + src/shared/i18n/locales/tr/welcome.ts | 24 + src/shared/i18n/locales/zh-CN/agents.ts | 64 + src/shared/i18n/locales/zh-CN/chat.ts | 90 + src/shared/i18n/locales/zh-CN/common.ts | 49 + src/shared/i18n/locales/zh-CN/constants.ts | 237 + src/shared/i18n/locales/zh-CN/errors.ts | 7 + src/shared/i18n/locales/zh-CN/gateway.ts | 16 + src/shared/i18n/locales/zh-CN/install.ts | 29 + src/shared/i18n/locales/zh-CN/kanban.ts | 84 + src/shared/i18n/locales/zh-CN/memory.ts | 53 + src/shared/i18n/locales/zh-CN/models.ts | 26 + src/shared/i18n/locales/zh-CN/navigation.ts | 24 + src/shared/i18n/locales/zh-CN/office.ts | 58 + src/shared/i18n/locales/zh-CN/providers.ts | 17 + src/shared/i18n/locales/zh-CN/schedules.ts | 55 + src/shared/i18n/locales/zh-CN/sessions.ts | 24 + src/shared/i18n/locales/zh-CN/settings.ts | 128 + src/shared/i18n/locales/zh-CN/setup.ts | 50 + src/shared/i18n/locales/zh-CN/skills.ts | 25 + src/shared/i18n/locales/zh-CN/soul.ts | 9 + src/shared/i18n/locales/zh-CN/tools.ts | 29 + src/shared/i18n/locales/zh-CN/welcome.ts | 23 + src/shared/i18n/locales/zh-TW/agents.ts | 65 + src/shared/i18n/locales/zh-TW/chat.ts | 79 + src/shared/i18n/locales/zh-TW/common.ts | 49 + src/shared/i18n/locales/zh-TW/constants.ts | 228 + src/shared/i18n/locales/zh-TW/errors.ts | 7 + src/shared/i18n/locales/zh-TW/gateway.ts | 16 + src/shared/i18n/locales/zh-TW/install.ts | 29 + src/shared/i18n/locales/zh-TW/kanban.ts | 84 + src/shared/i18n/locales/zh-TW/memory.ts | 53 + src/shared/i18n/locales/zh-TW/models.ts | 26 + src/shared/i18n/locales/zh-TW/navigation.ts | 24 + src/shared/i18n/locales/zh-TW/office.ts | 59 + src/shared/i18n/locales/zh-TW/providers.ts | 17 + src/shared/i18n/locales/zh-TW/schedules.ts | 55 + src/shared/i18n/locales/zh-TW/sessions.ts | 24 + src/shared/i18n/locales/zh-TW/settings.ts | 123 + src/shared/i18n/locales/zh-TW/setup.ts | 48 + src/shared/i18n/locales/zh-TW/skills.ts | 25 + src/shared/i18n/locales/zh-TW/soul.ts | 9 + src/shared/i18n/locales/zh-TW/tools.ts | 32 + src/shared/i18n/locales/zh-TW/welcome.ts | 23 + src/shared/i18n/types.ts | 17 + src/shared/messaging-platforms.test.ts | 170 + src/shared/messaging-platforms.ts | 1149 ++ src/shared/model-override.ts | 17 + src/shared/profileColors.ts | 42 + src/shared/registry.ts | 92 + src/shared/session-continuation.ts | 36 + src/shared/tokens.ts | 128 + src/shared/url-key-map.ts | 131 + src/shared/wallets.ts | 97 + tests/api-server-key-migration.test.ts | 177 + tests/api-server-key-resolution.test.ts | 159 + tests/api-server-key-secrets-provider.test.ts | 112 + tests/api-server-key-source.test.ts | 148 + tests/api-server-key-status.test.ts | 164 + tests/askpass-security.test.ts | 132 + tests/auxiliary-config.test.ts | 385 + tests/buildUserContent.test.ts | 301 + tests/chat-messages.test.ts | 133 + tests/chat-runs.test.ts | 67 + tests/claw3d-command-resolution.test.ts | 120 + ...ompat-host-derived-key-persistence.test.ts | 233 + tests/compat-host-derived-key.test.ts | 54 + tests/config-context-length-yaml.test.ts | 71 + tests/config-health.test.ts | 437 + tests/config-model-block.test.ts | 493 + tests/config-value-paths.test.ts | 349 + tests/connection-config-security.test.ts | 227 + tests/constants.test.ts | 273 + tests/credential-pool-schema.test.ts | 159 + tests/cronjobs-ssh.test.ts | 119 + tests/cronjobs.test.ts | 117 + tests/custom-provider-auto-key.test.ts | 218 + tests/dashboard-chat-transport.test.ts | 884 + tests/dashboard-csp.test.ts | 47 + tests/dashboard-event-adapter.test.ts | 478 + tests/dashboard-gateway-client.test.ts | 36 + tests/dashboard-launch.test.ts | 34 + tests/dashboard-remote.test.ts | 181 + tests/db.test.ts | 131 + tests/detect-provider.test.ts | 101 + tests/electron-security.test.ts | 279 + tests/env-validation.test.ts | 87 + tests/extract-reasoning-delta.test.ts | 76 + tests/gateway-ports.test.ts | 89 + tests/gateway-restart.test.ts | 510 + tests/gpu-fallback.test.ts | 347 + tests/hermes-agent-compat.test.ts | 197 + tests/hermes-api.test.ts | 277 + tests/hermes-auth.test.ts | 268 + tests/hermes-cli-session-id.test.ts | 680 + tests/install-gate-providers.test.ts | 108 + tests/installer-import-validation.test.ts | 45 + tests/installer-platform.test.ts | 34 + tests/installer-target.test.ts | 21 + tests/installer-utils.test.ts | 371 + tests/invalidate-secrets-cache.test.ts | 73 + tests/ipc-handlers.test.ts | 132 + tests/kanban-unsupported.test.ts | 17 + tests/live-reasoning-events.test.ts | 143 + tests/live-tool-events.test.ts | 385 + tests/locale-persistence.test.ts | 47 + tests/mcp-servers.test.ts | 239 + tests/media.test.ts | 63 + tests/memory-limits.test.ts | 183 + .../messaging-platform-runtime-state.test.ts | 101 + tests/model-discovery.test.ts | 617 + tests/models-context-length.test.ts | 67 + tests/oauth-model-discovery.test.ts | 139 + tests/office-env.test.ts | 285 + tests/office-start.test.ts | 194 + tests/office-url.test.ts | 35 + tests/preload-api-surface.test.ts | 246 + tests/process-options.test.ts | 28 + tests/profile-colors.test.ts | 26 + tests/profile-validation.test.ts | 79 + tests/profiles.test.ts | 363 + tests/provider-registry.test.ts | 114 + tests/providers.test.ts | 14 + tests/reconcile-streamed-with-db.test.ts | 1111 + tests/remote-history.test.ts | 237 + tests/remote-metadata.test.ts | 55 + tests/remote-mode-url-and-spawn.test.ts | 392 + tests/remote-models.test.ts | 378 + tests/remote-sessions.test.ts | 515 + tests/run-stream.test.ts | 130 + tests/safe-write-file.test.ts | 32 + tests/session-cache-sync.test.ts | 630 + tests/session-continuation-store.test.ts | 118 + tests/session-history-mapping.test.ts | 164 + tests/sessions-decode-content.test.ts | 130 + tests/sessions-delete-session.test.ts | 584 + tests/sessions-history-items.test.ts | 505 + tests/set-model-config-base-url.test.ts | 186 + tests/sibling-hermes-home-drift.test.ts | 258 + tests/skills-cli-output.test.ts | 96 + tests/skills-content-security.test.ts | 87 + tests/sse-parser.test.ts | 302 + tests/ssh-options.test.ts | 45 + tests/ssh-remote-paths.test.ts | 168 + tests/ssh-remote.test.ts | 340 + tests/terminal-launcher.test.ts | 309 + tests/tool-activity-group-title.test.ts | 109 + tests/toolset-toggle.test.ts | 330 + tests/url-key-map.test.ts | 133 + tests/validation.test.ts | 312 + tests/winget-generator.test.ts | 180 + tests/yaml-path.test.ts | 91 + tsconfig.json | 7 + tsconfig.node.json | 13 + tsconfig.web.json | 18 + vitest.config.ts | 18 + 936 files changed, 183651 insertions(+) create mode 100644 .agents/skills/electron-pro/SKILL.md create mode 100644 .agents/skills/hermes-agent/SKILL.md create mode 100644 .agents/skills/lat-md/SKILL.md create mode 100644 .agents/skills/typescript-expert/SKILL.md create mode 100644 .agents/skills/typescript-expert/references/tsconfig-strict.json create mode 100644 .agents/skills/typescript-expert/references/typescript-cheatsheet.md create mode 100644 .agents/skills/typescript-expert/references/utility-types.ts create mode 100644 .agents/skills/typescript-expert/scripts/ts_diagnostic.py create mode 100644 .browserslistrc create mode 100644 .claude/settings.json create mode 120000 .claude/skills/electron-pro create mode 100644 .claude/skills/hermes-agent/SKILL.md create mode 100644 .claude/skills/lat-md/SKILL.md create mode 120000 .claude/skills/typescript-expert create mode 100644 .codex/hooks.json create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .husky/pre-commit create mode 100644 .husky/pre-push create mode 100644 AGENTS.md create mode 100644 CLAUDE.md create mode 100644 CONTRIBUTING.ja-JP.md create mode 100644 CONTRIBUTING.md create mode 100644 CONTRIBUTING.zh-CN.md create mode 100644 Development.md create mode 100644 KANBAN_GAP_REPORT.md create mode 100644 LICENSE create mode 100644 PROFILE_MODAL_HANDOFF.md create mode 100644 README.es-LATAM.md create mode 100644 README.ja-JP.md create mode 100644 README.md create mode 100644 README.wehub.md create mode 100644 README.zh-CN.md create mode 100644 assets/header.webp create mode 100644 assets/partners/atlascloud.webp create mode 100644 assets/partners/greptile.webp create mode 100644 build/afterPack.js create mode 100644 build/entitlements.mac.inherit.plist create mode 100644 build/entitlements.mac.plist create mode 100644 build/icon.icns create mode 100644 build/icon.ico create mode 100644 build/icon.png create mode 100755 build/linux-after-install.sh create mode 100644 build/winget/Installer.template.yaml create mode 100644 build/winget/Locale.en-US.template.yaml create mode 100644 build/winget/Version.template.yaml create mode 100644 changelogs/0.4.5.md create mode 100644 changelogs/0.5.0.md create mode 100644 changelogs/0.6.0.md create mode 100644 changelogs/0.7.0.md create mode 100644 dev-app-update.yml create mode 100644 docs/SSH-TUNNEL-VPS.md create mode 100644 docs/chat-reconciliation-plan.md create mode 100644 docs/reconciliation-regression-playbook.md create mode 100644 docs/remote-access-lab.md create mode 100644 docs/ssh-dashboard-transport.md create mode 100644 docs/superpowers/plans/2026-04-30-windows-winget-fedora-rpm-release.md create mode 100644 docs/superpowers/specs/2026-04-30-windows-winget-fedora-rpm-release-design.md create mode 100644 electron-builder.yml create mode 100644 electron.vite.config.ts create mode 100644 eslint.config.mjs create mode 100644 lat.md/.cache/lat_init.json create mode 100644 lat.md/agent-sync.md create mode 100644 lat.md/analytics.md create mode 100644 lat.md/chat-commands.md create mode 100644 lat.md/chat-performance.md create mode 100644 lat.md/code-blocks.md create mode 100644 lat.md/context-folder.md create mode 100644 lat.md/desktop-updates.md create mode 100644 lat.md/hermes-account-login.md create mode 100644 lat.md/kanban.md create mode 100644 lat.md/lat.md create mode 100644 lat.md/main-process.md create mode 100644 lat.md/model-context.md create mode 100644 lat.md/model-selection.md create mode 100644 lat.md/office-3d-interiors.md create mode 100644 lat.md/office-3d-traffic.md create mode 100644 lat.md/office-interactions.md create mode 100644 lat.md/provider-setup.md create mode 100644 lat.md/sidebar-navigation.md create mode 100644 lat.md/wallet-token-balances.md create mode 100644 lat.md/web-preview.md create mode 100644 lat.md/window-chrome.md create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pr-comment.md create mode 100644 previews/chat.png create mode 100644 previews/discover.png create mode 100644 previews/download.webp create mode 100644 previews/gateway.png create mode 100644 previews/header.webp create mode 100644 previews/kanban.png create mode 100644 previews/memory.png create mode 100644 previews/models.png create mode 100644 previews/office.png create mode 100644 previews/persona.png create mode 100644 previews/profiles.png create mode 100644 previews/providers.png create mode 100644 previews/schedules.png create mode 100644 previews/sessions.png create mode 100644 previews/settings.png create mode 100644 previews/skills.png create mode 100644 previews/tools.png create mode 100644 resources/icon.png create mode 100644 scripts/README.md create mode 100644 scripts/drive-live-regression-suite.js create mode 100644 scripts/drive-nous-chat.js create mode 100644 scripts/drive-nous-oauth.js create mode 100644 scripts/e2e-attach.js create mode 100644 scripts/generate-winget-manifests.mjs create mode 100644 scripts/hermes-sandbox.ps1 create mode 100644 scripts/probe-chat-state.js create mode 100644 scripts/probe-models-list.js create mode 100644 scripts/probe-nous-models.js create mode 100644 scripts/probe-selectors.js create mode 100644 scripts/probe-validation-and-banner.js create mode 100644 scripts/probe-wsl-detection.js create mode 100644 scripts/remote-lab.ps1 create mode 100644 scripts/remote-lab/docker-compose.yml create mode 100644 scripts/remote-lab/nginx.conf create mode 100644 scripts/repro-edit-model-emptykey.js create mode 100644 scripts/repro-gateway-restart-midchat.js create mode 100644 scripts/repro-gateway-restart-v2.js create mode 100644 scripts/repro-long-conversation.js create mode 100644 scripts/repro-nous-cards-schema-367.js create mode 100644 scripts/repro-nous-detection-367.js create mode 100644 scripts/repro-session-cont-error.js create mode 100644 scripts/repro-session-proliferation.js create mode 100644 scripts/ssh-lab.ps1 create mode 100644 scripts/ssh-lab/Dockerfile create mode 100644 scripts/ssh-lab/docker-compose.yml create mode 100644 scripts/ssh-lab/entrypoint.sh create mode 100644 scripts/verify-369-wsl-drift.js create mode 100644 scripts/verify-compat-host-derived-key.js create mode 100644 scripts/verify-nous-discovery.js create mode 100644 scripts/verify-wsl-detection.js create mode 100644 skills-lock.json create mode 100644 src/main/account-store.test.ts create mode 100644 src/main/account-store.ts create mode 100644 src/main/agent-sync.test.ts create mode 100644 src/main/agent-sync.ts create mode 100644 src/main/api-url.ts create mode 100644 src/main/app/context-menu.ts create mode 100644 src/main/app/menu.ts create mode 100644 src/main/app/start.ts create mode 100644 src/main/app/updater.ts create mode 100644 src/main/askpass.ts create mode 100644 src/main/attachment-staging.ts create mode 100644 src/main/auxiliary-config.ts create mode 100644 src/main/claw3d.ts create mode 100644 src/main/config-health.test.ts create mode 100644 src/main/config-health.ts create mode 100644 src/main/config.ts create mode 100644 src/main/cronjobs.ts create mode 100644 src/main/dashboard-launch.ts create mode 100644 src/main/dashboard.ts create mode 100644 src/main/db.ts create mode 100644 src/main/default-models.ts create mode 100644 src/main/env.d.ts create mode 100644 src/main/gateway-ports.ts create mode 100644 src/main/gatewayPrompt.ts create mode 100644 src/main/gpu-fallback.ts create mode 100644 src/main/hermes-account.test.ts create mode 100644 src/main/hermes-account.ts create mode 100644 src/main/hermes-agent-compat.ts create mode 100644 src/main/hermes-auth.ts create mode 100644 src/main/hermes.test.ts create mode 100644 src/main/hermes.ts create mode 100644 src/main/host-derived-env.ts create mode 100644 src/main/index.ts create mode 100644 src/main/installer.ts create mode 100644 src/main/ipc/register.ts create mode 100644 src/main/kanban.ts create mode 100644 src/main/load-env.ts create mode 100644 src/main/locale.ts create mode 100644 src/main/mcp-servers.ts create mode 100644 src/main/media.ts create mode 100644 src/main/memory-limits.ts create mode 100644 src/main/memory.ts create mode 100644 src/main/messaging-platforms.ts create mode 100644 src/main/model-discovery.ts create mode 100644 src/main/models.ts create mode 100644 src/main/office-start.ts create mode 100644 src/main/process-options.ts create mode 100644 src/main/profile-meta.ts create mode 100644 src/main/profiles.ts create mode 100644 src/main/provider-registry.ts create mode 100644 src/main/providers.ts create mode 100644 src/main/registry.ts create mode 100644 src/main/remote-metadata.ts create mode 100644 src/main/remote-models.ts create mode 100644 src/main/remote-sessions.ts create mode 100644 src/main/remote-skills.test.ts create mode 100644 src/main/remote-skills.ts create mode 100644 src/main/run-stream.test.ts create mode 100644 src/main/run-stream.ts create mode 100644 src/main/secrets/commandProvider.property.test.ts create mode 100644 src/main/secrets/commandProvider.stdio.test.ts create mode 100644 src/main/secrets/commandProvider.test.ts create mode 100644 src/main/secrets/commandProvider.ts create mode 100644 src/main/secrets/envProvider.ts create mode 100644 src/main/secrets/getSpawnFloor.test.ts create mode 100644 src/main/secrets/index.test.ts create mode 100644 src/main/secrets/index.ts create mode 100644 src/main/secrets/provider.ts create mode 100644 src/main/secrets/resolvedSecretMap.test.ts create mode 100644 src/main/secrets/securityInvariants.test.ts create mode 100644 src/main/secrets/spawnRateFloor.test.ts create mode 100644 src/main/security.ts create mode 100644 src/main/session-attachment-store.ts create mode 100644 src/main/session-cache.ts create mode 100644 src/main/session-context-folder-store.ts create mode 100644 src/main/session-continuation-store.ts create mode 100644 src/main/session-model-override-store.test.ts create mode 100644 src/main/session-model-override-store.ts create mode 100644 src/main/sessions.ts create mode 100644 src/main/skills.ts create mode 100644 src/main/soul.ts create mode 100644 src/main/sse-parser.ts create mode 100644 src/main/ssh-options.ts create mode 100644 src/main/ssh-remote.test.ts create mode 100644 src/main/ssh-remote.ts create mode 100644 src/main/ssh-tunnel.ts create mode 100644 src/main/sudoCreds.ts create mode 100644 src/main/terminal-launcher.ts create mode 100644 src/main/tools.ts create mode 100644 src/main/tui-gateway-stream.test.ts create mode 100644 src/main/tui-gateway-stream.ts create mode 100644 src/main/updater-log.ts create mode 100644 src/main/utils.ts create mode 100644 src/main/validation.ts create mode 100644 src/main/wallet-actions.test.ts create mode 100644 src/main/wallet-actions.ts create mode 100644 src/main/wallet-balances.test.ts create mode 100644 src/main/wallet-balances.ts create mode 100644 src/main/wallet-store.test.ts create mode 100644 src/main/wallet-store.ts create mode 100644 src/main/wallet-sync.test.ts create mode 100644 src/main/wallet-sync.ts create mode 100644 src/main/ws.d.ts create mode 100644 src/main/wsl-detection.ts create mode 100644 src/main/yaml-path.ts create mode 100644 src/preload/askpass.ts create mode 100644 src/preload/index.d.ts create mode 100644 src/preload/index.ts create mode 100644 src/renderer/index.html create mode 100644 src/renderer/src/App.tsx create mode 100644 src/renderer/src/assets/base.css create mode 100644 src/renderer/src/assets/fonts/Cairo-Bold.ttf create mode 100644 src/renderer/src/assets/fonts/Cairo-Medium.ttf create mode 100644 src/renderer/src/assets/fonts/Cairo-Regular.ttf create mode 100644 src/renderer/src/assets/fonts/Cairo-SemiBold.ttf create mode 100644 src/renderer/src/assets/fonts/Manrope-Bold.ttf create mode 100644 src/renderer/src/assets/fonts/Manrope-Medium.ttf create mode 100644 src/renderer/src/assets/fonts/Manrope-Regular.ttf create mode 100644 src/renderer/src/assets/fonts/Manrope-SemiBold.ttf create mode 100644 src/renderer/src/assets/hermes-icon.svg create mode 100644 src/renderer/src/assets/hermes-one.svg create mode 100644 src/renderer/src/assets/hermesbg.webp create mode 100644 src/renderer/src/assets/icon.png create mode 100644 src/renderer/src/assets/icons/etherium.webp create mode 100644 src/renderer/src/assets/icons/hdtoken.webp create mode 100644 src/renderer/src/assets/icons/index.tsx create mode 100644 src/renderer/src/assets/iconv2.png create mode 100644 src/renderer/src/assets/images/one-chat.svg create mode 100644 src/renderer/src/assets/loadingo.gif create mode 100644 src/renderer/src/assets/logos/api.svg create mode 100644 src/renderer/src/assets/logos/atlascloud.svg create mode 100644 src/renderer/src/assets/logos/atomicchat.svg create mode 100644 src/renderer/src/assets/logos/cerebras-color.svg create mode 100644 src/renderer/src/assets/logos/cerebras.svg create mode 100644 src/renderer/src/assets/logos/claude-color.svg create mode 100644 src/renderer/src/assets/logos/deepseek-color.svg create mode 100644 src/renderer/src/assets/logos/dingtalk.svg create mode 100644 src/renderer/src/assets/logos/discord.svg create mode 100644 src/renderer/src/assets/logos/email.svg create mode 100644 src/renderer/src/assets/logos/fireworks-color.svg create mode 100644 src/renderer/src/assets/logos/fireworksai.svg create mode 100644 src/renderer/src/assets/logos/gemini-color.svg create mode 100644 src/renderer/src/assets/logos/grok.svg create mode 100644 src/renderer/src/assets/logos/groq.svg create mode 100644 src/renderer/src/assets/logos/home-assist.svg create mode 100644 src/renderer/src/assets/logos/huggingface.svg create mode 100644 src/renderer/src/assets/logos/imessage.svg create mode 100644 src/renderer/src/assets/logos/lark.svg create mode 100644 src/renderer/src/assets/logos/lmstudio.svg create mode 100644 src/renderer/src/assets/logos/matrix-dark.svg create mode 100644 src/renderer/src/assets/logos/mattermost-dark.svg create mode 100644 src/renderer/src/assets/logos/meta-color.svg create mode 100644 src/renderer/src/assets/logos/mimo.svg create mode 100644 src/renderer/src/assets/logos/minimax-color.svg create mode 100644 src/renderer/src/assets/logos/mistral-color.svg create mode 100644 src/renderer/src/assets/logos/moonshot.svg create mode 100644 src/renderer/src/assets/logos/nousresearch.svg create mode 100644 src/renderer/src/assets/logos/nvidia-color.svg create mode 100644 src/renderer/src/assets/logos/ollama.svg create mode 100644 src/renderer/src/assets/logos/openai.svg create mode 100644 src/renderer/src/assets/logos/opencode.svg create mode 100644 src/renderer/src/assets/logos/openrouter.svg create mode 100644 src/renderer/src/assets/logos/perplexity-color.svg create mode 100644 src/renderer/src/assets/logos/python.svg create mode 100644 src/renderer/src/assets/logos/qqbot.svg create mode 100644 src/renderer/src/assets/logos/qwen.svg create mode 100644 src/renderer/src/assets/logos/signal.svg create mode 100644 src/renderer/src/assets/logos/slack.svg create mode 100644 src/renderer/src/assets/logos/sms.svg create mode 100644 src/renderer/src/assets/logos/telegram.svg create mode 100644 src/renderer/src/assets/logos/together-color.svg create mode 100644 src/renderer/src/assets/logos/togetherai.svg create mode 100644 src/renderer/src/assets/logos/twitter.svg create mode 100644 src/renderer/src/assets/logos/vllm.svg create mode 100644 src/renderer/src/assets/logos/webhook.svg create mode 100644 src/renderer/src/assets/logos/wechat.svg create mode 100644 src/renderer/src/assets/logos/wecom.svg create mode 100644 src/renderer/src/assets/logos/whatsapp-icon.svg create mode 100644 src/renderer/src/assets/logos/yuanbao.svg create mode 100644 src/renderer/src/assets/logos/zai.svg create mode 100644 src/renderer/src/assets/main.css create mode 100644 src/renderer/src/assets/splash.png create mode 100644 src/renderer/src/assets/splashtext-w.webp create mode 100644 src/renderer/src/assets/splashtext.png create mode 100644 src/renderer/src/assets/startvid.mp4 create mode 100644 src/renderer/src/assets/title-line.svg create mode 100644 src/renderer/src/components/AgentMarkdown.test.tsx create mode 100644 src/renderer/src/components/AgentMarkdown.tsx create mode 100644 src/renderer/src/components/AttachmentChip.tsx create mode 100644 src/renderer/src/components/ConfigHealthBanner.test.tsx create mode 100644 src/renderer/src/components/ConfigHealthBanner.tsx create mode 100644 src/renderer/src/components/ErrorBoundary.tsx create mode 100644 src/renderer/src/components/FollowUsModal.tsx create mode 100644 src/renderer/src/components/FontProvider.tsx create mode 100644 src/renderer/src/components/HermesAccountModal.tsx create mode 100644 src/renderer/src/components/I18nContext.ts create mode 100644 src/renderer/src/components/I18nProvider.test.tsx create mode 100644 src/renderer/src/components/I18nProvider.tsx create mode 100644 src/renderer/src/components/MediaImage.lightbox.test.tsx create mode 100644 src/renderer/src/components/MediaImage.tsx create mode 100644 src/renderer/src/components/OAuthLoginModal.tsx create mode 100644 src/renderer/src/components/ProviderKeysSection.tsx create mode 100644 src/renderer/src/components/RemoteNotice.tsx create mode 100644 src/renderer/src/components/ThemeProvider.tsx create mode 100644 src/renderer/src/components/VerifyWarningBanner.tsx create mode 100644 src/renderer/src/components/Versions.tsx create mode 100644 src/renderer/src/components/common/BrandLogo.tsx create mode 100644 src/renderer/src/components/common/HermesLogo.tsx create mode 100644 src/renderer/src/components/common/ProfileAvatar.tsx create mode 100644 src/renderer/src/components/modal/AppModal.tsx create mode 100644 src/renderer/src/components/profile/ProfileModal.test.tsx create mode 100644 src/renderer/src/components/profile/ProfileModal.tsx create mode 100644 src/renderer/src/components/profile/ProfileModalContext.ts create mode 100644 src/renderer/src/components/profile/ProfileModalProvider.tsx create mode 100644 src/renderer/src/components/profile/ProfileSyncPane.test.tsx create mode 100644 src/renderer/src/components/profile/ProfileSyncPane.tsx create mode 100644 src/renderer/src/components/profile/ProfileWalletPane.test.tsx create mode 100644 src/renderer/src/components/profile/ProfileWalletPane.tsx create mode 100644 src/renderer/src/components/settings/AboutPane.tsx create mode 100644 src/renderer/src/components/settings/AppearancePane.tsx create mode 100644 src/renderer/src/components/settings/CommunityPane.tsx create mode 100644 src/renderer/src/components/settings/ConnectionPane.tsx create mode 100644 src/renderer/src/components/settings/DataPane.tsx create mode 100644 src/renderer/src/components/settings/LanguagePane.tsx create mode 100644 src/renderer/src/components/settings/LogsPane.tsx create mode 100644 src/renderer/src/components/settings/PrivacyPane.tsx create mode 100644 src/renderer/src/components/settings/SettingsDataContext.ts create mode 100644 src/renderer/src/components/settings/SettingsModal.tsx create mode 100644 src/renderer/src/components/settings/SettingsModalContext.ts create mode 100644 src/renderer/src/components/settings/SettingsModalProvider.tsx create mode 100644 src/renderer/src/components/settings/settingsHelpers.ts create mode 100644 src/renderer/src/components/settings/useSettingsData.ts create mode 100644 src/renderer/src/components/toolMeta.tsx create mode 100644 src/renderer/src/components/useI18n.ts create mode 100644 src/renderer/src/constants.ts create mode 100644 src/renderer/src/env.d.ts create mode 100644 src/renderer/src/hooks/useDiscoveredModels.ts create mode 100644 src/renderer/src/hooks/useLightboxClose.ts create mode 100644 src/renderer/src/main.tsx create mode 100644 src/renderer/src/screens/Agents/Agents.test.tsx create mode 100644 src/renderer/src/screens/Agents/Agents.tsx create mode 100644 src/renderer/src/screens/Chat/Chat.tsx create mode 100644 src/renderer/src/screens/Chat/ChatEmptyState.tsx create mode 100644 src/renderer/src/screens/Chat/ChatInput.test.tsx create mode 100644 src/renderer/src/screens/Chat/ChatInput.tsx create mode 100644 src/renderer/src/screens/Chat/ClarifyCard.test.tsx create mode 100644 src/renderer/src/screens/Chat/ClarifyCard.tsx create mode 100644 src/renderer/src/screens/Chat/ContextFolderChip.tsx create mode 100644 src/renderer/src/screens/Chat/ContextGauge.tsx create mode 100644 src/renderer/src/screens/Chat/FileViewer.tsx create mode 100644 src/renderer/src/screens/Chat/HistoryRow.tsx create mode 100644 src/renderer/src/screens/Chat/MessageList.tsx create mode 100644 src/renderer/src/screens/Chat/MessageRow.tsx create mode 100644 src/renderer/src/screens/Chat/ModelPicker.test.tsx create mode 100644 src/renderer/src/screens/Chat/ModelPicker.tsx create mode 100644 src/renderer/src/screens/Chat/QueuedMessages.tsx create mode 100644 src/renderer/src/screens/Chat/ReasoningEffortPicker.tsx create mode 100644 src/renderer/src/screens/Chat/RemoteFolderPicker.tsx create mode 100644 src/renderer/src/screens/Chat/WebPreviewPanel.tsx create mode 100644 src/renderer/src/screens/Chat/WorktreePanel.tsx create mode 100644 src/renderer/src/screens/Chat/attachmentUtils.test.ts create mode 100644 src/renderer/src/screens/Chat/attachmentUtils.ts create mode 100644 src/renderer/src/screens/Chat/chatMessages.ts create mode 100644 src/renderer/src/screens/Chat/contextWindows.test.ts create mode 100644 src/renderer/src/screens/Chat/contextWindows.ts create mode 100644 src/renderer/src/screens/Chat/dashboardEventAdapter.test.ts create mode 100644 src/renderer/src/screens/Chat/dashboardEventAdapter.ts create mode 100644 src/renderer/src/screens/Chat/dashboardGatewayClient.test.ts create mode 100644 src/renderer/src/screens/Chat/dashboardGatewayClient.ts create mode 100644 src/renderer/src/screens/Chat/hooks/parseBackgroundCommand.test.ts create mode 100644 src/renderer/src/screens/Chat/hooks/usageFromPayload.test.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useChatActions.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useChatIPC.test.tsx create mode 100644 src/renderer/src/screens/Chat/hooks/useChatIPC.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useChatScroll.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.test.tsx create mode 100644 src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useFastMode.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useInputHistory.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useLocalCommands.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useModelConfig.test.tsx create mode 100644 src/renderer/src/screens/Chat/hooks/useModelConfig.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useReasoningEffort.ts create mode 100644 src/renderer/src/screens/Chat/hooks/useVoiceInput.ts create mode 100644 src/renderer/src/screens/Chat/keyboard.test.ts create mode 100644 src/renderer/src/screens/Chat/keyboard.ts create mode 100644 src/renderer/src/screens/Chat/liveReasoningEvents.ts create mode 100644 src/renderer/src/screens/Chat/liveToolEvents.ts create mode 100644 src/renderer/src/screens/Chat/mediaUtils.test.ts create mode 100644 src/renderer/src/screens/Chat/mediaUtils.ts create mode 100644 src/renderer/src/screens/Chat/sessionHistory.ts create mode 100644 src/renderer/src/screens/Chat/slash/SlashCommandIcon.tsx create mode 100644 src/renderer/src/screens/Chat/slash/commandCatalog.test.ts create mode 100644 src/renderer/src/screens/Chat/slash/commandCatalog.ts create mode 100644 src/renderer/src/screens/Chat/slash/desktopCommands.ts create mode 100644 src/renderer/src/screens/Chat/slash/executeAgentCommand.ts create mode 100644 src/renderer/src/screens/Chat/slash/handleSlashCommand.test.ts create mode 100644 src/renderer/src/screens/Chat/slash/handleSlashCommand.ts create mode 100644 src/renderer/src/screens/Chat/slash/parseSlashCommand.test.ts create mode 100644 src/renderer/src/screens/Chat/slash/parseSlashCommand.ts create mode 100644 src/renderer/src/screens/Chat/slash/prepareModelSubmission.ts create mode 100644 src/renderer/src/screens/Chat/slash/types.ts create mode 100644 src/renderer/src/screens/Chat/slash/virtualSlashCommands.ts create mode 100644 src/renderer/src/screens/Chat/slashCommands.ts create mode 100644 src/renderer/src/screens/Chat/slashExec.test.ts create mode 100644 src/renderer/src/screens/Chat/slashExec.ts create mode 100644 src/renderer/src/screens/Chat/transcriptUtils.test.ts create mode 100644 src/renderer/src/screens/Chat/transcriptUtils.ts create mode 100644 src/renderer/src/screens/Chat/types.ts create mode 100644 src/renderer/src/screens/Discover/Discover.tsx create mode 100644 src/renderer/src/screens/Gateway/Gateway.test.tsx create mode 100644 src/renderer/src/screens/Gateway/Gateway.tsx create mode 100644 src/renderer/src/screens/Install/Install.tsx create mode 100644 src/renderer/src/screens/Kanban/Kanban.tsx create mode 100644 src/renderer/src/screens/Layout/ActiveSessionsBar.test.tsx create mode 100644 src/renderer/src/screens/Layout/ActiveSessionsBar.tsx create mode 100644 src/renderer/src/screens/Layout/Layout.tsx create mode 100644 src/renderer/src/screens/Layout/ProfileSwitcher.test.tsx create mode 100644 src/renderer/src/screens/Layout/ProfileSwitcher.tsx create mode 100644 src/renderer/src/screens/Layout/SidebarRecentSessions.tsx create mode 100644 src/renderer/src/screens/Layout/SidebarSessionMenu.tsx create mode 100644 src/renderer/src/screens/Layout/chatRuns.test.ts create mode 100644 src/renderer/src/screens/Layout/chatRuns.ts create mode 100644 src/renderer/src/screens/Memory/CapacityBar.tsx create mode 100644 src/renderer/src/screens/Memory/CapacityCards.tsx create mode 100644 src/renderer/src/screens/Memory/Memory.tsx create mode 100644 src/renderer/src/screens/Memory/MemoryEntries.tsx create mode 100644 src/renderer/src/screens/Memory/MemoryProfile.tsx create mode 100644 src/renderer/src/screens/Memory/MemoryProviders.tsx create mode 100644 src/renderer/src/screens/Memory/MemoryTabs.tsx create mode 100644 src/renderer/src/screens/Memory/types.ts create mode 100644 src/renderer/src/screens/Models/Models.test.tsx create mode 100644 src/renderer/src/screens/Models/Models.tsx create mode 100644 src/renderer/src/screens/Models/detect-provider.ts create mode 100644 src/renderer/src/screens/Office/Office.tsx create mode 100644 src/renderer/src/screens/Office/OneChatModal.tsx create mode 100644 src/renderer/src/screens/Office/RepInteractionPanel.test.tsx create mode 100644 src/renderer/src/screens/Office/RepInteractionPanel.tsx create mode 100644 src/renderer/src/screens/Office/office3d/Office3D.tsx create mode 100644 src/renderer/src/screens/Office/office3d/agents.ts create mode 100644 src/renderer/src/screens/Office/office3d/assets/apartment.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/apartment2.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/atm.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/biz_man.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/building1.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/building2.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/car1.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/car2.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/ceo_desk.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/chairDesk.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/computerScreen.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/desk.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/employee.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/images/base-bank.webp create mode 100644 src/renderer/src/screens/Office/office3d/assets/images/hermes-one-hq.webp create mode 100644 src/renderer/src/screens/Office/office3d/assets/loungeDesignChair.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/loungeSofa.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/man.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/pantry.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/person.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/person2.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/pottedPlant.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/sofa_chair.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/street-light.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/traffic-light.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/tree.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/truck1.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/white_pot.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/women.glb create mode 100644 src/renderer/src/screens/Office/office3d/assets/wooden_table.glb create mode 100644 src/renderer/src/screens/Office/office3d/avatars/profile.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/characters.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/cityPlan.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/collision.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/constants.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/geometry.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/glb.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/locations.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/palette.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/rng.ts create mode 100644 src/renderer/src/screens/Office/office3d/core/types.ts create mode 100644 src/renderer/src/screens/Office/office3d/interactions/registry.test.ts create mode 100644 src/renderer/src/screens/Office/office3d/interactions/registry.ts create mode 100644 src/renderer/src/screens/Office/office3d/layout.ts create mode 100644 src/renderer/src/screens/Office/office3d/objects/AgentsLayer.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/Bank.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/CarShowroom.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/CityBackdrop.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/Interactable.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/OfficeShell.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/Pedestrians.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/RiggedCharacter.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/SceneEnvironment.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/StaffPerson.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/Traffic.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/agents.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/furniture.tsx create mode 100644 src/renderer/src/screens/Office/office3d/objects/types.ts create mode 100644 src/renderer/src/screens/Office/office3d/trips.ts create mode 100644 src/renderer/src/screens/Office/office3d/troika-three-text.d.ts create mode 100644 src/renderer/src/screens/Office/officeUrl.ts create mode 100644 src/renderer/src/screens/Providers/Providers.tsx create mode 100644 src/renderer/src/screens/Schedules/Schedules.tsx create mode 100644 src/renderer/src/screens/Sessions/Sessions.test.tsx create mode 100644 src/renderer/src/screens/Sessions/Sessions.tsx create mode 100644 src/renderer/src/screens/Settings/ConfigHealth.tsx create mode 100644 src/renderer/src/screens/Setup/Setup.tsx create mode 100644 src/renderer/src/screens/Skills/Skills.test.tsx create mode 100644 src/renderer/src/screens/Skills/Skills.tsx create mode 100644 src/renderer/src/screens/Soul/Soul.tsx create mode 100644 src/renderer/src/screens/SplashScreen/SplashScreen.tsx create mode 100644 src/renderer/src/screens/Tools/Tools.tsx create mode 100644 src/renderer/src/screens/Welcome/Welcome.tsx create mode 100644 src/renderer/src/test/setup.ts create mode 100644 src/renderer/src/utils/analytics.ts create mode 100644 src/renderer/src/utils/imageResize.ts create mode 100644 src/shared/account.ts create mode 100644 src/shared/agent-sync.ts create mode 100644 src/shared/askpass.ts create mode 100644 src/shared/attachments.ts create mode 100644 src/shared/chat-stream.ts create mode 100644 src/shared/gpu.ts create mode 100644 src/shared/i18n/config.ts create mode 100644 src/shared/i18n/index.test.ts create mode 100644 src/shared/i18n/index.ts create mode 100644 src/shared/i18n/locales/ar/agents.ts create mode 100644 src/shared/i18n/locales/ar/chat.ts create mode 100644 src/shared/i18n/locales/ar/common.ts create mode 100644 src/shared/i18n/locales/ar/constants.ts create mode 100644 src/shared/i18n/locales/ar/diagnose.ts create mode 100644 src/shared/i18n/locales/ar/discover.ts create mode 100644 src/shared/i18n/locales/ar/errors.ts create mode 100644 src/shared/i18n/locales/ar/gateway.ts create mode 100644 src/shared/i18n/locales/ar/install.ts create mode 100644 src/shared/i18n/locales/ar/kanban.ts create mode 100644 src/shared/i18n/locales/ar/memory.ts create mode 100644 src/shared/i18n/locales/ar/models.ts create mode 100644 src/shared/i18n/locales/ar/navigation.ts create mode 100644 src/shared/i18n/locales/ar/office.ts create mode 100644 src/shared/i18n/locales/ar/providers.ts create mode 100644 src/shared/i18n/locales/ar/schedules.ts create mode 100644 src/shared/i18n/locales/ar/sessions.ts create mode 100644 src/shared/i18n/locales/ar/settings.ts create mode 100644 src/shared/i18n/locales/ar/setup.ts create mode 100644 src/shared/i18n/locales/ar/skills.ts create mode 100644 src/shared/i18n/locales/ar/soul.ts create mode 100644 src/shared/i18n/locales/ar/tools.ts create mode 100644 src/shared/i18n/locales/ar/welcome.ts create mode 100644 src/shared/i18n/locales/en/agents.ts create mode 100644 src/shared/i18n/locales/en/chat.ts create mode 100644 src/shared/i18n/locales/en/common.ts create mode 100644 src/shared/i18n/locales/en/constants.ts create mode 100644 src/shared/i18n/locales/en/diagnose.ts create mode 100644 src/shared/i18n/locales/en/discover.ts create mode 100644 src/shared/i18n/locales/en/errors.ts create mode 100644 src/shared/i18n/locales/en/gateway.ts create mode 100644 src/shared/i18n/locales/en/install.ts create mode 100644 src/shared/i18n/locales/en/kanban.ts create mode 100644 src/shared/i18n/locales/en/memory.ts create mode 100644 src/shared/i18n/locales/en/models.ts create mode 100644 src/shared/i18n/locales/en/navigation.ts create mode 100644 src/shared/i18n/locales/en/office.ts create mode 100644 src/shared/i18n/locales/en/providers.ts create mode 100644 src/shared/i18n/locales/en/schedules.ts create mode 100644 src/shared/i18n/locales/en/sessions.ts create mode 100644 src/shared/i18n/locales/en/settings.ts create mode 100644 src/shared/i18n/locales/en/setup.ts create mode 100644 src/shared/i18n/locales/en/skills.ts create mode 100644 src/shared/i18n/locales/en/soul.ts create mode 100644 src/shared/i18n/locales/en/tools.ts create mode 100644 src/shared/i18n/locales/en/welcome.ts create mode 100644 src/shared/i18n/locales/es/agents.ts create mode 100644 src/shared/i18n/locales/es/chat.ts create mode 100644 src/shared/i18n/locales/es/common.ts create mode 100644 src/shared/i18n/locales/es/constants.ts create mode 100644 src/shared/i18n/locales/es/diagnose.ts create mode 100644 src/shared/i18n/locales/es/errors.ts create mode 100644 src/shared/i18n/locales/es/gateway.ts create mode 100644 src/shared/i18n/locales/es/install.ts create mode 100644 src/shared/i18n/locales/es/kanban.ts create mode 100644 src/shared/i18n/locales/es/memory.ts create mode 100644 src/shared/i18n/locales/es/models.ts create mode 100644 src/shared/i18n/locales/es/navigation.ts create mode 100644 src/shared/i18n/locales/es/office.ts create mode 100644 src/shared/i18n/locales/es/providers.ts create mode 100644 src/shared/i18n/locales/es/schedules.ts create mode 100644 src/shared/i18n/locales/es/sessions.ts create mode 100644 src/shared/i18n/locales/es/settings.ts create mode 100644 src/shared/i18n/locales/es/setup.ts create mode 100644 src/shared/i18n/locales/es/skills.ts create mode 100644 src/shared/i18n/locales/es/soul.ts create mode 100644 src/shared/i18n/locales/es/tools.ts create mode 100644 src/shared/i18n/locales/es/welcome.ts create mode 100644 src/shared/i18n/locales/he/agents.ts create mode 100644 src/shared/i18n/locales/he/chat.ts create mode 100644 src/shared/i18n/locales/he/common.ts create mode 100644 src/shared/i18n/locales/he/constants.ts create mode 100644 src/shared/i18n/locales/he/diagnose.ts create mode 100644 src/shared/i18n/locales/he/discover.ts create mode 100644 src/shared/i18n/locales/he/errors.ts create mode 100644 src/shared/i18n/locales/he/gateway.ts create mode 100644 src/shared/i18n/locales/he/install.ts create mode 100644 src/shared/i18n/locales/he/kanban.ts create mode 100644 src/shared/i18n/locales/he/memory.ts create mode 100644 src/shared/i18n/locales/he/models.ts create mode 100644 src/shared/i18n/locales/he/navigation.ts create mode 100644 src/shared/i18n/locales/he/office.ts create mode 100644 src/shared/i18n/locales/he/providers.ts create mode 100644 src/shared/i18n/locales/he/schedules.ts create mode 100644 src/shared/i18n/locales/he/sessions.ts create mode 100644 src/shared/i18n/locales/he/settings.ts create mode 100644 src/shared/i18n/locales/he/setup.ts create mode 100644 src/shared/i18n/locales/he/skills.ts create mode 100644 src/shared/i18n/locales/he/soul.ts create mode 100644 src/shared/i18n/locales/he/tools.ts create mode 100644 src/shared/i18n/locales/he/welcome.ts create mode 100644 src/shared/i18n/locales/id/agents.ts create mode 100644 src/shared/i18n/locales/id/chat.ts create mode 100644 src/shared/i18n/locales/id/common.ts create mode 100644 src/shared/i18n/locales/id/constants.ts create mode 100644 src/shared/i18n/locales/id/errors.ts create mode 100644 src/shared/i18n/locales/id/gateway.ts create mode 100644 src/shared/i18n/locales/id/install.ts create mode 100644 src/shared/i18n/locales/id/memory.ts create mode 100644 src/shared/i18n/locales/id/models.ts create mode 100644 src/shared/i18n/locales/id/navigation.ts create mode 100644 src/shared/i18n/locales/id/office.ts create mode 100644 src/shared/i18n/locales/id/providers.ts create mode 100644 src/shared/i18n/locales/id/schedules.ts create mode 100644 src/shared/i18n/locales/id/sessions.ts create mode 100644 src/shared/i18n/locales/id/settings.ts create mode 100644 src/shared/i18n/locales/id/setup.ts create mode 100644 src/shared/i18n/locales/id/skills.ts create mode 100644 src/shared/i18n/locales/id/soul.ts create mode 100644 src/shared/i18n/locales/id/tools.ts create mode 100644 src/shared/i18n/locales/id/welcome.ts create mode 100644 src/shared/i18n/locales/ja/agents.ts create mode 100644 src/shared/i18n/locales/ja/chat.ts create mode 100644 src/shared/i18n/locales/ja/common.ts create mode 100644 src/shared/i18n/locales/ja/constants.ts create mode 100644 src/shared/i18n/locales/ja/errors.ts create mode 100644 src/shared/i18n/locales/ja/gateway.ts create mode 100644 src/shared/i18n/locales/ja/install.ts create mode 100644 src/shared/i18n/locales/ja/memory.ts create mode 100644 src/shared/i18n/locales/ja/models.ts create mode 100644 src/shared/i18n/locales/ja/navigation.ts create mode 100644 src/shared/i18n/locales/ja/office.ts create mode 100644 src/shared/i18n/locales/ja/providers.ts create mode 100644 src/shared/i18n/locales/ja/schedules.ts create mode 100644 src/shared/i18n/locales/ja/sessions.ts create mode 100644 src/shared/i18n/locales/ja/settings.ts create mode 100644 src/shared/i18n/locales/ja/setup.ts create mode 100644 src/shared/i18n/locales/ja/skills.ts create mode 100644 src/shared/i18n/locales/ja/soul.ts create mode 100644 src/shared/i18n/locales/ja/tools.ts create mode 100644 src/shared/i18n/locales/ja/welcome.ts create mode 100644 src/shared/i18n/locales/pl/agents.ts create mode 100644 src/shared/i18n/locales/pl/chat.ts create mode 100644 src/shared/i18n/locales/pl/common.ts create mode 100644 src/shared/i18n/locales/pl/constants.ts create mode 100644 src/shared/i18n/locales/pl/errors.ts create mode 100644 src/shared/i18n/locales/pl/gateway.ts create mode 100644 src/shared/i18n/locales/pl/install.ts create mode 100644 src/shared/i18n/locales/pl/kanban.ts create mode 100644 src/shared/i18n/locales/pl/memory.ts create mode 100644 src/shared/i18n/locales/pl/models.ts create mode 100644 src/shared/i18n/locales/pl/navigation.ts create mode 100644 src/shared/i18n/locales/pl/office.ts create mode 100644 src/shared/i18n/locales/pl/providers.ts create mode 100644 src/shared/i18n/locales/pl/schedules.ts create mode 100644 src/shared/i18n/locales/pl/sessions.ts create mode 100644 src/shared/i18n/locales/pl/settings.ts create mode 100644 src/shared/i18n/locales/pl/setup.ts create mode 100644 src/shared/i18n/locales/pl/skills.ts create mode 100644 src/shared/i18n/locales/pl/soul.ts create mode 100644 src/shared/i18n/locales/pl/tools.ts create mode 100644 src/shared/i18n/locales/pl/welcome.ts create mode 100644 src/shared/i18n/locales/pt-BR/agents.ts create mode 100644 src/shared/i18n/locales/pt-BR/chat.ts create mode 100644 src/shared/i18n/locales/pt-BR/common.ts create mode 100644 src/shared/i18n/locales/pt-BR/constants.ts create mode 100644 src/shared/i18n/locales/pt-BR/errors.ts create mode 100644 src/shared/i18n/locales/pt-BR/gateway.ts create mode 100644 src/shared/i18n/locales/pt-BR/install.ts create mode 100644 src/shared/i18n/locales/pt-BR/memory.ts create mode 100644 src/shared/i18n/locales/pt-BR/models.ts create mode 100644 src/shared/i18n/locales/pt-BR/navigation.ts create mode 100644 src/shared/i18n/locales/pt-BR/office.ts create mode 100644 src/shared/i18n/locales/pt-BR/providers.ts create mode 100644 src/shared/i18n/locales/pt-BR/schedules.ts create mode 100644 src/shared/i18n/locales/pt-BR/sessions.ts create mode 100644 src/shared/i18n/locales/pt-BR/settings.ts create mode 100644 src/shared/i18n/locales/pt-BR/setup.ts create mode 100644 src/shared/i18n/locales/pt-BR/skills.ts create mode 100644 src/shared/i18n/locales/pt-BR/soul.ts create mode 100644 src/shared/i18n/locales/pt-BR/tools.ts create mode 100644 src/shared/i18n/locales/pt-BR/welcome.ts create mode 100644 src/shared/i18n/locales/pt-PT/agents.ts create mode 100644 src/shared/i18n/locales/pt-PT/chat.ts create mode 100644 src/shared/i18n/locales/pt-PT/common.ts create mode 100644 src/shared/i18n/locales/pt-PT/constants.ts create mode 100644 src/shared/i18n/locales/pt-PT/diagnose.ts create mode 100644 src/shared/i18n/locales/pt-PT/errors.ts create mode 100644 src/shared/i18n/locales/pt-PT/gateway.ts create mode 100644 src/shared/i18n/locales/pt-PT/install.ts create mode 100644 src/shared/i18n/locales/pt-PT/kanban.ts create mode 100644 src/shared/i18n/locales/pt-PT/memory.ts create mode 100644 src/shared/i18n/locales/pt-PT/models.ts create mode 100644 src/shared/i18n/locales/pt-PT/navigation.ts create mode 100644 src/shared/i18n/locales/pt-PT/office.ts create mode 100644 src/shared/i18n/locales/pt-PT/providers.ts create mode 100644 src/shared/i18n/locales/pt-PT/schedules.ts create mode 100644 src/shared/i18n/locales/pt-PT/sessions.ts create mode 100644 src/shared/i18n/locales/pt-PT/settings.ts create mode 100644 src/shared/i18n/locales/pt-PT/setup.ts create mode 100644 src/shared/i18n/locales/pt-PT/skills.ts create mode 100644 src/shared/i18n/locales/pt-PT/soul.ts create mode 100644 src/shared/i18n/locales/pt-PT/tools.ts create mode 100644 src/shared/i18n/locales/pt-PT/welcome.ts create mode 100644 src/shared/i18n/locales/tr/agents.ts create mode 100644 src/shared/i18n/locales/tr/chat.ts create mode 100644 src/shared/i18n/locales/tr/common.ts create mode 100644 src/shared/i18n/locales/tr/constants.ts create mode 100644 src/shared/i18n/locales/tr/diagnose.ts create mode 100644 src/shared/i18n/locales/tr/discover.ts create mode 100644 src/shared/i18n/locales/tr/errors.ts create mode 100644 src/shared/i18n/locales/tr/gateway.ts create mode 100644 src/shared/i18n/locales/tr/install.ts create mode 100644 src/shared/i18n/locales/tr/kanban.ts create mode 100644 src/shared/i18n/locales/tr/memory.ts create mode 100644 src/shared/i18n/locales/tr/models.ts create mode 100644 src/shared/i18n/locales/tr/navigation.ts create mode 100644 src/shared/i18n/locales/tr/office.ts create mode 100644 src/shared/i18n/locales/tr/providers.ts create mode 100644 src/shared/i18n/locales/tr/schedules.ts create mode 100644 src/shared/i18n/locales/tr/sessions.ts create mode 100644 src/shared/i18n/locales/tr/settings.ts create mode 100644 src/shared/i18n/locales/tr/setup.ts create mode 100644 src/shared/i18n/locales/tr/skills.ts create mode 100644 src/shared/i18n/locales/tr/soul.ts create mode 100644 src/shared/i18n/locales/tr/tools.ts create mode 100644 src/shared/i18n/locales/tr/welcome.ts create mode 100644 src/shared/i18n/locales/zh-CN/agents.ts create mode 100644 src/shared/i18n/locales/zh-CN/chat.ts create mode 100644 src/shared/i18n/locales/zh-CN/common.ts create mode 100644 src/shared/i18n/locales/zh-CN/constants.ts create mode 100644 src/shared/i18n/locales/zh-CN/errors.ts create mode 100644 src/shared/i18n/locales/zh-CN/gateway.ts create mode 100644 src/shared/i18n/locales/zh-CN/install.ts create mode 100644 src/shared/i18n/locales/zh-CN/kanban.ts create mode 100644 src/shared/i18n/locales/zh-CN/memory.ts create mode 100644 src/shared/i18n/locales/zh-CN/models.ts create mode 100644 src/shared/i18n/locales/zh-CN/navigation.ts create mode 100644 src/shared/i18n/locales/zh-CN/office.ts create mode 100644 src/shared/i18n/locales/zh-CN/providers.ts create mode 100644 src/shared/i18n/locales/zh-CN/schedules.ts create mode 100644 src/shared/i18n/locales/zh-CN/sessions.ts create mode 100644 src/shared/i18n/locales/zh-CN/settings.ts create mode 100644 src/shared/i18n/locales/zh-CN/setup.ts create mode 100644 src/shared/i18n/locales/zh-CN/skills.ts create mode 100644 src/shared/i18n/locales/zh-CN/soul.ts create mode 100644 src/shared/i18n/locales/zh-CN/tools.ts create mode 100644 src/shared/i18n/locales/zh-CN/welcome.ts create mode 100644 src/shared/i18n/locales/zh-TW/agents.ts create mode 100644 src/shared/i18n/locales/zh-TW/chat.ts create mode 100644 src/shared/i18n/locales/zh-TW/common.ts create mode 100644 src/shared/i18n/locales/zh-TW/constants.ts create mode 100644 src/shared/i18n/locales/zh-TW/errors.ts create mode 100644 src/shared/i18n/locales/zh-TW/gateway.ts create mode 100644 src/shared/i18n/locales/zh-TW/install.ts create mode 100644 src/shared/i18n/locales/zh-TW/kanban.ts create mode 100644 src/shared/i18n/locales/zh-TW/memory.ts create mode 100644 src/shared/i18n/locales/zh-TW/models.ts create mode 100644 src/shared/i18n/locales/zh-TW/navigation.ts create mode 100644 src/shared/i18n/locales/zh-TW/office.ts create mode 100644 src/shared/i18n/locales/zh-TW/providers.ts create mode 100644 src/shared/i18n/locales/zh-TW/schedules.ts create mode 100644 src/shared/i18n/locales/zh-TW/sessions.ts create mode 100644 src/shared/i18n/locales/zh-TW/settings.ts create mode 100644 src/shared/i18n/locales/zh-TW/setup.ts create mode 100644 src/shared/i18n/locales/zh-TW/skills.ts create mode 100644 src/shared/i18n/locales/zh-TW/soul.ts create mode 100644 src/shared/i18n/locales/zh-TW/tools.ts create mode 100644 src/shared/i18n/locales/zh-TW/welcome.ts create mode 100644 src/shared/i18n/types.ts create mode 100644 src/shared/messaging-platforms.test.ts create mode 100644 src/shared/messaging-platforms.ts create mode 100644 src/shared/model-override.ts create mode 100644 src/shared/profileColors.ts create mode 100644 src/shared/registry.ts create mode 100644 src/shared/session-continuation.ts create mode 100644 src/shared/tokens.ts create mode 100644 src/shared/url-key-map.ts create mode 100644 src/shared/wallets.ts create mode 100644 tests/api-server-key-migration.test.ts create mode 100644 tests/api-server-key-resolution.test.ts create mode 100644 tests/api-server-key-secrets-provider.test.ts create mode 100644 tests/api-server-key-source.test.ts create mode 100644 tests/api-server-key-status.test.ts create mode 100644 tests/askpass-security.test.ts create mode 100644 tests/auxiliary-config.test.ts create mode 100644 tests/buildUserContent.test.ts create mode 100644 tests/chat-messages.test.ts create mode 100644 tests/chat-runs.test.ts create mode 100644 tests/claw3d-command-resolution.test.ts create mode 100644 tests/compat-host-derived-key-persistence.test.ts create mode 100644 tests/compat-host-derived-key.test.ts create mode 100644 tests/config-context-length-yaml.test.ts create mode 100644 tests/config-health.test.ts create mode 100644 tests/config-model-block.test.ts create mode 100644 tests/config-value-paths.test.ts create mode 100644 tests/connection-config-security.test.ts create mode 100644 tests/constants.test.ts create mode 100644 tests/credential-pool-schema.test.ts create mode 100644 tests/cronjobs-ssh.test.ts create mode 100644 tests/cronjobs.test.ts create mode 100644 tests/custom-provider-auto-key.test.ts create mode 100644 tests/dashboard-chat-transport.test.ts create mode 100644 tests/dashboard-csp.test.ts create mode 100644 tests/dashboard-event-adapter.test.ts create mode 100644 tests/dashboard-gateway-client.test.ts create mode 100644 tests/dashboard-launch.test.ts create mode 100644 tests/dashboard-remote.test.ts create mode 100644 tests/db.test.ts create mode 100644 tests/detect-provider.test.ts create mode 100644 tests/electron-security.test.ts create mode 100644 tests/env-validation.test.ts create mode 100644 tests/extract-reasoning-delta.test.ts create mode 100644 tests/gateway-ports.test.ts create mode 100644 tests/gateway-restart.test.ts create mode 100644 tests/gpu-fallback.test.ts create mode 100644 tests/hermes-agent-compat.test.ts create mode 100644 tests/hermes-api.test.ts create mode 100644 tests/hermes-auth.test.ts create mode 100644 tests/hermes-cli-session-id.test.ts create mode 100644 tests/install-gate-providers.test.ts create mode 100644 tests/installer-import-validation.test.ts create mode 100644 tests/installer-platform.test.ts create mode 100644 tests/installer-target.test.ts create mode 100644 tests/installer-utils.test.ts create mode 100644 tests/invalidate-secrets-cache.test.ts create mode 100644 tests/ipc-handlers.test.ts create mode 100644 tests/kanban-unsupported.test.ts create mode 100644 tests/live-reasoning-events.test.ts create mode 100644 tests/live-tool-events.test.ts create mode 100644 tests/locale-persistence.test.ts create mode 100644 tests/mcp-servers.test.ts create mode 100644 tests/media.test.ts create mode 100644 tests/memory-limits.test.ts create mode 100644 tests/messaging-platform-runtime-state.test.ts create mode 100644 tests/model-discovery.test.ts create mode 100644 tests/models-context-length.test.ts create mode 100644 tests/oauth-model-discovery.test.ts create mode 100644 tests/office-env.test.ts create mode 100644 tests/office-start.test.ts create mode 100644 tests/office-url.test.ts create mode 100644 tests/preload-api-surface.test.ts create mode 100644 tests/process-options.test.ts create mode 100644 tests/profile-colors.test.ts create mode 100644 tests/profile-validation.test.ts create mode 100644 tests/profiles.test.ts create mode 100644 tests/provider-registry.test.ts create mode 100644 tests/providers.test.ts create mode 100644 tests/reconcile-streamed-with-db.test.ts create mode 100644 tests/remote-history.test.ts create mode 100644 tests/remote-metadata.test.ts create mode 100644 tests/remote-mode-url-and-spawn.test.ts create mode 100644 tests/remote-models.test.ts create mode 100644 tests/remote-sessions.test.ts create mode 100644 tests/run-stream.test.ts create mode 100644 tests/safe-write-file.test.ts create mode 100644 tests/session-cache-sync.test.ts create mode 100644 tests/session-continuation-store.test.ts create mode 100644 tests/session-history-mapping.test.ts create mode 100644 tests/sessions-decode-content.test.ts create mode 100644 tests/sessions-delete-session.test.ts create mode 100644 tests/sessions-history-items.test.ts create mode 100644 tests/set-model-config-base-url.test.ts create mode 100644 tests/sibling-hermes-home-drift.test.ts create mode 100644 tests/skills-cli-output.test.ts create mode 100644 tests/skills-content-security.test.ts create mode 100644 tests/sse-parser.test.ts create mode 100644 tests/ssh-options.test.ts create mode 100644 tests/ssh-remote-paths.test.ts create mode 100644 tests/ssh-remote.test.ts create mode 100644 tests/terminal-launcher.test.ts create mode 100644 tests/tool-activity-group-title.test.ts create mode 100644 tests/toolset-toggle.test.ts create mode 100644 tests/url-key-map.test.ts create mode 100644 tests/validation.test.ts create mode 100644 tests/winget-generator.test.ts create mode 100644 tests/yaml-path.test.ts create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 tsconfig.web.json create mode 100644 vitest.config.ts diff --git a/.agents/skills/electron-pro/SKILL.md b/.agents/skills/electron-pro/SKILL.md new file mode 100644 index 0000000..76b857c --- /dev/null +++ b/.agents/skills/electron-pro/SKILL.md @@ -0,0 +1,163 @@ +--- +name: electron-pro +description: Expert in building cross-platform desktop applications using web technologies (HTML/CSS/JS) with the Electron framework. +--- + +# Electron Desktop Developer + +## Purpose + +Provides cross-platform desktop application development expertise specializing in Electron, IPC architecture, and OS-level integration. Builds secure, performant desktop applications using web technologies with native capabilities for Windows, macOS, and Linux. + +## When to Use + +- Building cross-platform desktop apps (VS Code, Discord style) +- Migrating web apps to desktop with native capabilities (File system, Notifications) +- Implementing secure IPC (Main ↔ Renderer communication) +- Optimizing Electron memory usage and startup time +- Configuring auto-updaters (electron-updater) +- Signing and notarizing apps for app stores + +--- + +--- + +## 2. Decision Framework + +### Architecture Selection + +``` +How to structure the app? +│ +├─ **Security First (Recommended)** +│ ├─ Context Isolation? → **Yes** (Standard since v12) +│ ├─ Node Integration? → **No** (Never in Renderer) +│ └─ Preload Scripts? → **Yes** (Bridge API) +│ +├─ **Data Persistence** +│ ├─ Simple Settings? → **electron-store** (JSON) +│ ├─ Large Datasets? → **SQLite** (`better-sqlite3` in Main process) +│ └─ User Files? → **Native File System API** +│ +└─ **UI Framework** + ├─ React/Vue/Svelte? → **Yes** (Standard SPA approach) + ├─ Multiple Windows? → **Window Manager Pattern** + └─ System Tray App? → **Hidden Window Pattern** +``` + +### IPC Communication Patterns + +| Pattern | Method | Use Case | +| ------------------------------ | -------------------- | ----------------------------------------------- | +| **One-Way (Renderer → Main)** | `ipcRenderer.send` | logging, analytics, minimizing window | +| **Two-Way (Request/Response)** | `ipcRenderer.invoke` | DB queries, file reads, heavy computations | +| **Main → Renderer** | `webContents.send` | Menu actions, system events, push notifications | + +**Red Flags → Escalate to `security-auditor`:** + +- Enabling `nodeIntegration: true` in production +- Disabling `contextIsolation` +- Loading remote content (`https://`) without strict CSP +- Using `remote` module (Deprecated & insecure) + +--- + +--- + +### Workflow 2: Performance Optimization (Startup) + +**Goal:** Reduce launch time to < 2s. + +**Steps:** + +1. **V8 Snapshot** + - Use `electron-link` or `v8-compile-cache` to pre-compile JS. + +2. **Lazy Loading Modules** + - Don't `require()` everything at top of `main.ts`. + + ```javascript + // Bad + import { heavyLib } from "heavy-lib"; + + // Good + ipcMain.handle("do-work", () => { + const heavyLib = require("heavy-lib"); + heavyLib.process(); + }); + ``` + +3. **Bundle Main Process** + - Use `esbuild` or `webpack` for Main process (not just Renderer) to tree-shake unused code and minify. + +--- + +--- + +## 4. Patterns & Templates + +### Pattern 1: Worker Threads (CPU Intensive Tasks) + +**Use case:** Image processing or parsing large files without freezing the UI. + +```typescript +// main.ts +import { Worker } from "worker_threads"; + +ipcMain.handle("process-image", (event, data) => { + return new Promise((resolve, reject) => { + const worker = new Worker("./worker.js", { workerData: data }); + worker.on("message", resolve); + worker.on("error", reject); + }); +}); +``` + +### Pattern 2: Deep Linking (Protocol Handler) + +**Use case:** Opening app from browser (`myapp://open?id=123`). + +```typescript +// main.ts +if (process.defaultApp) { + if (process.argv.length >= 2) { + app.setAsDefaultProtocolClient("myapp", process.execPath, [ + path.resolve(process.argv[1]), + ]); + } +} else { + app.setAsDefaultProtocolClient("myapp"); +} + +app.on("open-url", (event, url) => { + event.preventDefault(); + // Parse url 'myapp://...' and navigate renderer + mainWindow.webContents.send("navigate", url); +}); +``` + +--- + +--- + +## 6. Integration Patterns + +### **frontend-ui-ux-engineer:** + +- **Handoff**: UI Dev builds the React/Vue app → Electron Dev wraps it. +- **Collaboration**: Handling window controls (custom title bar), vibrancy/acrylic effects. +- **Tools**: CSS `app-region: drag`. + +### **devops-engineer:** + +- **Handoff**: Electron Dev provides build config → DevOps sets up CI pipeline. +- **Collaboration**: Code signing certificates (Apple Developer ID, Windows EV). +- **Tools**: Electron Builder, Notarization scripts. + +### **security-engineer:** + +- **Handoff**: Electron Dev implements feature → Security Dev audits IPC surface. +- **Collaboration**: Defining Content Security Policy (CSP) headers. +- **Tools**: Electronegativity (Scanner). + +--- diff --git a/.agents/skills/hermes-agent/SKILL.md b/.agents/skills/hermes-agent/SKILL.md new file mode 100644 index 0000000..c5b8b50 --- /dev/null +++ b/.agents/skills/hermes-agent/SKILL.md @@ -0,0 +1,1765 @@ +--- +name: hermes-agent +description: Expert in building self-improving AI agents with tool use, multi-platform messaging, and a closed learning loop. Proficient in LLM orchestration, tool integration, session management, and agent autonomy. +--- + +# Hermes Agent - Complete Project Guide (A-Z) + +> **Purpose of this document:** A single, comprehensive reference that explains everything about the Hermes Agent project — its architecture, source code, features, release history, and design patterns — so that any AI or developer can fully understand the system. + +--- + +## Table of Contents + +1. [Project Overview](#1-project-overview) +2. [Key Features Summary](#2-key-features-summary) +3. [Installation & Getting Started](#3-installation--getting-started) +4. [Project Structure](#4-project-structure) +5. [Core Architecture](#5-core-architecture) + - 5.1 [AIAgent Class (run_agent.py)](#51-aiagent-class-run_agentpy) + - 5.2 [Tool Orchestration (model_tools.py)](#52-tool-orchestration-model_toolspy) + - 5.3 [Toolset System (toolsets.py)](#53-toolset-system-toolsetspy) + - 5.4 [Tool Registry (tools/registry.py)](#54-tool-registry-toolsregistrypy) + - 5.5 [Session Database (hermes_state.py)](#55-session-database-hermes_statepy) + - 5.6 [Constants & Home Directory (hermes_constants.py)](#56-constants--home-directory-hermes_constantspy) +6. [CLI System](#6-cli-system) + - 6.1 [Interactive CLI (cli.py)](#61-interactive-cli-clipy) + - 6.2 [CLI Entry Point (hermes_cli/main.py)](#62-cli-entry-point-hermes_climainpy) + - 6.3 [Configuration System (hermes_cli/config.py)](#63-configuration-system-hermes_cliconfigpy) + - 6.4 [Slash Command Registry (hermes_cli/commands.py)](#64-slash-command-registry-hermes_clicommandspy) + - 6.5 [Setup Wizard (hermes_cli/setup.py)](#65-setup-wizard-hermes_clisetupy) + - 6.6 [Model Catalog (hermes_cli/models.py)](#66-model-catalog-hermes_climodelspy) + - 6.7 [Skin/Theme Engine (hermes_cli/skin_engine.py)](#67-skintheme-engine-hermes_cliskin_enginepy) +7. [Tool System](#7-tool-system) + - 7.1 [Terminal Tool (tools/terminal_tool.py)](#71-terminal-tool-toolsterminal_toolpy) + - 7.2 [File Tools (tools/file_tools.py)](#72-file-tools-toolsfile_toolspy) + - 7.3 [Web Tools (tools/web_tools.py)](#73-web-tools-toolsweb_toolspy) + - 7.4 [Browser Tool (tools/browser_tool.py)](#74-browser-tool-toolsbrowser_toolpy) + - 7.5 [Delegate Tool (tools/delegate_tool.py)](#75-delegate-tool-toolsdelegate_toolpy) + - 7.6 [MCP Tool (tools/mcp_tool.py)](#76-mcp-tool-toolsmcp_toolpy) + - 7.7 [Approval System (tools/approval.py)](#77-approval-system-toolsapprovalpy) + - 7.8 [Terminal Backends (tools/environments/)](#78-terminal-backends-toolsenvironments) +8. [Agent Internals](#8-agent-internals) + - 8.1 [Prompt Builder (agent/prompt_builder.py)](#81-prompt-builder-agentprompt_builderpy) + - 8.2 [Context Compressor (agent/context_compressor.py)](#82-context-compressor-agentcontext_compressorpy) + - 8.3 [Prompt Caching (agent/prompt_caching.py)](#83-prompt-caching-agentprompt_cachingpy) + - 8.4 [Auxiliary Client (agent/auxiliary_client.py)](#84-auxiliary-client-agentauxiliary_clientpy) + - 8.5 [Display & Spinner (agent/display.py)](#85-display--spinner-agentdisplaypy) + - 8.6 [Skill Commands (agent/skill_commands.py)](#86-skill-commands-agentskill_commandspy) +9. [Messaging Gateway](#9-messaging-gateway) + - 9.1 [GatewayRunner (gateway/run.py)](#91-gatewayrunner-gatewayrunpy) + - 9.2 [Session Store (gateway/session.py)](#92-session-store-gatewaysessionpy) + - 9.3 [Platform Adapters (gateway/platforms/)](#93-platform-adapters-gatewayplatforms) +10. [Cron Scheduling](#10-cron-scheduling) +11. [Skills System](#11-skills-system) +12. [Plugin System](#12-plugin-system) +13. [Memory System](#13-memory-system) +14. [ACP Server (IDE Integration)](#14-acp-server-ide-integration) +15. [API Server](#15-api-server) +16. [MCP Server Mode](#16-mcp-server-mode) +17. [RL Training Environments](#17-rl-training-environments) +18. [Profiles (Multi-Instance)](#18-profiles-multi-instance) +19. [Security Model](#19-security-model) +20. [Provider & Model System](#20-provider--model-system) +21. [Streaming & Reasoning](#21-streaming--reasoning) +22. [Release History](#22-release-history) +23. [File Dependency Chain](#23-file-dependency-chain) +24. [Key Design Patterns](#24-key-design-patterns) +25. [Configuration Reference](#25-configuration-reference) +26. [Known Pitfalls](#26-known-pitfalls) + +--- + +## 1. Project Overview + +**Hermes Agent** is a self-improving AI agent built by [Nous Research](https://nousresearch.com). It is an open-source (MIT licensed), Python-based project that provides: + +- A **full interactive terminal UI** (CLI) for conversing with LLMs +- A **messaging gateway** supporting 16+ platforms (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email, etc.) +- A **closed learning loop** — the agent creates skills from experience, improves them during use, nudges itself to persist knowledge, searches past conversations, and builds a deepening model of who you are +- **40+ built-in tools** — terminal execution, file manipulation, web search, browser automation, code execution, image generation, TTS/STT, and more +- **Any LLM provider** — OpenRouter (200+ models), Nous Portal (400+ models), OpenAI, Anthropic, Hugging Face, GitHub Copilot, z.ai/GLM, Kimi/Moonshot, MiniMax, Alibaba/DashScope, custom endpoints +- **Six terminal backends** — local, Docker, SSH, Modal (serverless), Daytona (serverless), Singularity (HPC) +- **Scheduled automations** via built-in cron scheduler +- **IDE integration** via ACP (Agent Communication Protocol) for VS Code, Zed, JetBrains +- **MCP integration** — both client (connect to any MCP server) and server (expose Hermes to MCP clients) +- **RL training** via Atropos environments for training the next generation of tool-calling models + +**Tech Stack:** + +- Python 3.11+ (core agent, tools, gateway, cron) +- Node.js (browser automation via agent-browser) +- SQLite with WAL mode and FTS5 (session storage, full-text search) +- OpenAI-compatible API (primary inference interface) +- Anthropic SDK (native Anthropic support) +- Rich + prompt_toolkit (CLI rendering) + +**Repository:** `github.com/NousResearch/hermes-agent` +**Version:** 0.7.0 (as of April 2026) +**License:** MIT + +--- + +## 2. Key Features Summary + +| Feature | Description | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Terminal UI** | Full TUI with multiline editing, slash-command autocomplete, conversation history, interrupt-and-redirect, streaming tool output | +| **Multi-Platform Messaging** | Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email, Home Assistant, DingTalk, Feishu/Lark, WeCom, Mattermost, SMS, Webhook — all from a single gateway process | +| **Learning Loop** | Agent-curated memory with periodic nudges, autonomous skill creation, skills self-improve during use, FTS5 session search with LLM summarization, Honcho dialectic user modeling | +| **Scheduled Tasks** | Built-in cron scheduler with delivery to any platform (daily reports, nightly backups, weekly audits) | +| **Subagent Delegation** | Spawn isolated subagents for parallel workstreams with restricted toolsets | +| **Execute Code** | Python scripts that call tools via RPC, collapsing multi-step pipelines into zero-context-cost turns | +| **Terminal Backends** | Local, Docker, SSH, Modal, Daytona, Singularity — run on a $5 VPS or a GPU cluster | +| **Skills** | 70+ bundled skills across 28 categories, Skills Hub for community discovery, agentskills.io compatibility | +| **Plugins** | Drop-in Python plugins with lifecycle hooks (pre_llm_call, post_llm_call, on_session_start, on_session_end) | +| **MCP** | Client (connect to MCP servers for extended tools) and Server (expose conversations to MCP clients) | +| **IDE Integration** | VS Code, Zed, JetBrains via ACP server with session management and tool streaming | +| **API Server** | OpenAI-compatible `/v1/chat/completions` endpoint for headless integrations | +| **Profiles** | Multi-instance support — each profile gets isolated config, memory, sessions, skills, gateway | +| **Security** | Command approval system, secret redaction, SSRF protection, PII redaction, injection detection, credential directory protection | +| **RL Training** | Atropos environments for batch trajectory generation and agent policy optimization | + +--- + +## 3. Installation & Getting Started + +```bash +# One-line install (Linux, macOS, WSL2) +curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash + +# After install +source ~/.bashrc # or: source ~/.zshrc +hermes # start chatting + +# Key commands +hermes model # Choose LLM provider and model +hermes tools # Configure which tools are enabled +hermes config set # Set individual config values +hermes gateway # Start the messaging gateway +hermes setup # Run the full setup wizard +hermes update # Update to latest version +hermes doctor # Diagnose any issues +``` + +**For development:** + +```bash +git clone https://github.com/NousResearch/hermes-agent.git +cd hermes-agent +curl -LsSf https://astral.sh/uv/install.sh | sh +uv venv venv --python 3.11 +source venv/bin/activate +uv pip install -e ".[all,dev]" +python -m pytest tests/ -q # ~3000 tests +``` + +--- + +## 4. Project Structure + +``` +hermes-agent/ +├── run_agent.py # AIAgent class — core conversation loop +├── model_tools.py # Tool orchestration, _discover_tools(), handle_function_call() +├── toolsets.py # Toolset definitions, _HERMES_CORE_TOOLS list +├── toolset_distributions.py # Toolset sampling distributions for RL +├── cli.py # HermesCLI class — interactive CLI orchestrator +├── hermes_state.py # SessionDB — SQLite session store (FTS5 search) +├── hermes_constants.py # Shared constants, get_hermes_home() +├── hermes_time.py # Timezone handling +├── utils.py # Shared utility functions +├── batch_runner.py # Parallel batch processing +├── trajectory_compressor.py # Trajectory compression for RL training +├── mcp_serve.py # MCP server mode entry point +├── mini_swe_runner.py # Minimal SWE benchmark runner +├── rl_cli.py # RL CLI commands +│ +├── agent/ # Agent internals +│ ├── prompt_builder.py # System prompt assembly +│ ├── context_compressor.py # Auto context compression +│ ├── prompt_caching.py # Anthropic prompt caching +│ ├── auxiliary_client.py # Auxiliary LLM client (vision, summarization) +│ ├── model_metadata.py # Model context lengths, token estimation +│ ├── models_dev.py # models.dev registry integration +│ ├── display.py # KawaiiSpinner, tool preview formatting +│ ├── skill_commands.py # Skill slash commands (shared CLI/gateway) +│ └── trajectory.py # Trajectory saving helpers +│ +├── hermes_cli/ # CLI subcommands and setup +│ ├── main.py # Entry point — all `hermes` subcommands +│ ├── config.py # DEFAULT_CONFIG, OPTIONAL_ENV_VARS, migration +│ ├── commands.py # Slash command definitions + SlashCommandCompleter +│ ├── callbacks.py # Terminal callbacks (clarify, sudo, approval) +│ ├── setup.py # Interactive setup wizard +│ ├── skin_engine.py # Skin/theme engine +│ ├── skills_config.py # `hermes skills` — skill management +│ ├── tools_config.py # `hermes tools` — tool management +│ ├── skills_hub.py # Skills Hub integration +│ ├── models.py # Model catalog, provider model lists +│ ├── model_switch.py # Shared /model switch pipeline +│ └── auth.py # Provider credential resolution +│ +├── tools/ # Tool implementations (one file per tool) +│ ├── registry.py # Central tool registry +│ ├── approval.py # Dangerous command detection +│ ├── terminal_tool.py # Terminal/shell execution +│ ├── process_registry.py # Background process management +│ ├── file_tools.py # File read/write/search/patch +│ ├── web_tools.py # Web search/extract +│ ├── browser_tool.py # Browser automation +│ ├── code_execution_tool.py # execute_code sandbox +│ ├── delegate_tool.py # Subagent delegation +│ ├── mcp_tool.py # MCP client integration +│ ├── skills_tool.py # Skill management tool +│ ├── todo_tool.py # Todo/task tracking tool +│ ├── memory_tool.py # Memory read/write tool +│ ├── tts_tool.py # Text-to-speech +│ ├── vision_tool.py # Image analysis +│ ├── image_gen_tool.py # Image generation +│ └── environments/ # Terminal backends +│ ├── base.py # BaseEnvironment ABC +│ ├── local.py # Local execution +│ ├── docker.py # Docker containers +│ ├── ssh.py # SSH remote execution +│ ├── modal.py # Modal serverless +│ ├── managed_modal.py # Nous-hosted Modal +│ ├── daytona.py # Daytona serverless +│ ├── singularity.py # Singularity HPC containers +│ └── persistent_shell.py # Persistent shell mixin +│ +├── gateway/ # Messaging platform gateway +│ ├── run.py # GatewayRunner — main message loop +│ ├── session.py # SessionStore — conversation persistence +│ ├── status.py # Gateway status, token locks +│ └── platforms/ # 16 platform adapters +│ ├── base.py # BasePlatformAdapter ABC +│ ├── telegram.py # Telegram (polling + webhook) +│ ├── discord.py # Discord +│ ├── slack.py # Slack +│ ├── whatsapp.py # WhatsApp +│ ├── matrix.py # Matrix (E2EE) +│ ├── signal.py # Signal +│ ├── email.py # Email (IMAP/SMTP) +│ ├── homeassistant.py # Home Assistant +│ ├── sms.py # SMS (Twilio) +│ ├── mattermost.py # Mattermost +│ ├── dingtalk.py # DingTalk +│ ├── feishu.py # Feishu/Lark +│ ├── wecom.py # WeCom (Enterprise WeChat) +│ ├── webhook.py # Generic webhook +│ └── api_server.py # OpenAI-compatible API server +│ +├── acp_adapter/ # ACP server (IDE integration) +│ ├── server.py # HermesACPAgent class +│ ├── session.py # SessionManager +│ ├── events.py # Streaming callbacks +│ ├── permissions.py # Approval callbacks +│ └── entry.py # Entry point +│ +├── cron/ # Scheduler +│ ├── scheduler.py # tick() — job execution engine +│ └── jobs.py # Job storage and CRUD +│ +├── plugins/ # Plugin system +│ └── memory/ # 8 memory provider plugins +│ ├── openviking/ +│ ├── mem0/ +│ ├── hindsight/ +│ ├── holographic/ +│ ├── honcho/ +│ ├── retaindb/ +│ └── byterover/ +│ +├── environments/ # RL training environments (Atropos) +│ ├── hermes_base_env.py # Abstract base RL environment +│ ├── agent_loop.py # HermesAgentLoop — rollout execution +│ ├── tool_context.py # ToolContext — sandbox for RL +│ ├── web_research_env.py # Web research tasks +│ └── agentic_opd_env.py # Observation-Prediction-Demo env +│ +├── skills/ # 70+ bundled skills across 28 categories +├── optional-skills/ # Additional optional skills +├── tests/ # ~3000 pytest tests +├── scripts/ # Install, update, packaging scripts +├── docker/ # Docker build files +├── docs/ # Documentation source (Docusaurus) +├── website/ # Landing page +├── desktop/ # Desktop app (Electron, separate repo) +├── tinker-atropos/ # RL submodule +│ +├── pyproject.toml # Python package config +├── AGENTS.md # Developer guide for AI assistants +├── RELEASE_v0.2.0.md → v0.7.0.md # Release notes +└── cli-config.yaml.example # Example config +``` + +**User config directory:** `~/.hermes/` + +``` +~/.hermes/ +├── config.yaml # User settings +├── .env # API keys and secrets +├── MEMORY.md # Persistent agent memory +├── USER.md # User profile +├── SOUL.md # Agent personality/identity +├── sessions.db # SQLite session database +├── skills/ # User-installed skills +├── skins/ # Custom CLI themes +├── plugins/ # User plugins +├── cron/ # Cron jobs and output +│ ├── jobs.json +│ └── output/ +├── cache/ # Image/audio cache +├── plans/ # Generated plans +├── profiles/ # Multi-instance profiles +└── mcp/ # MCP server configs +``` + +--- + +## 5. Core Architecture + +### 5.1 AIAgent Class (run_agent.py) + +The `AIAgent` class is the heart of the system — the core conversation loop that orchestrates LLM calls, tool execution, context management, and response delivery. + +**Constructor (~60 parameters):** + +```python +class AIAgent: + def __init__(self, + model: str = "anthropic/claude-opus-4.6", + max_iterations: int = 90, + enabled_toolsets: list = None, + disabled_toolsets: list = None, + quiet_mode: bool = False, + save_trajectories: bool = False, + platform: str = None, # "cli", "telegram", etc. + session_id: str = None, + session_db: SessionDB = None, + skip_context_files: bool = False, + skip_memory: bool = False, + base_url: str = None, + api_key: str = None, + provider: str = None, + api_mode: str = "chat_completions", # or "anthropic_messages" or "codex_responses" + tool_progress_callback = None, + stream_delta_callback = None, + thinking_callback = None, + status_callback = None, + iteration_budget: IterationBudget = None, + credential_pool = None, + checkpoints_enabled: bool = False, + # ... plus provider, routing, callback params + ) +``` + +**Main Methods:** + +| Method | Returns | Purpose | +| ------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------- | +| `chat(message, stream_callback)` | `str` | Simple interface — returns final response text | +| `run_conversation(user_message, system_message, conversation_history, task_id)` | `dict` | Full interface — returns `{final_response, messages, completed, api_calls, error}` | +| `_interruptible_api_call(api_kwargs)` | Response | Runs API request in background thread with interrupt support | +| `_interruptible_streaming_api_call(api_kwargs, on_first_delta)` | Response | Streaming variant with delta callbacks | + +**The Core Agent Loop** (inside `run_conversation()`): + +```python +while api_call_count < self.max_iterations and self.iteration_budget.remaining > 0: + response = client.chat.completions.create( + model=model, messages=messages, tools=tool_schemas + ) + if response.tool_calls: + for tool_call in response.tool_calls: + result = handle_function_call(tool_call.name, tool_call.args, task_id) + messages.append(tool_result_message(result)) + api_call_count += 1 + else: + return response.content # Final text response +``` + +**Key Behaviors:** + +- **Three API modes:** `chat_completions` (OpenAI-compatible), `anthropic_messages` (Anthropic SDK), `codex_responses` (OpenAI Codex) +- **Parallel tool execution:** Independent tool calls run concurrently via ThreadPoolExecutor (unless they share file paths or are in the never-parallel list) +- **Interrupt support:** Background threads allow interrupt detection without blocking on HTTP +- **Error recovery:** Automatic fallback chain (primary → fallback model), retry with exponential backoff, context compression on token overflow +- **Budget pressure:** Warnings at 70% (caution) and 90% (urgent) of iteration budget +- **Oversized results:** Tool results >100K chars are saved to temp files with a preview +- **Stale connection detection:** 90s timeout for streaming, 60s read timeout + +**IterationBudget** (thread-safe): + +```python +class IterationBudget: + def consume() -> bool # Check and consume one iteration + def refund() # Give back iteration (for execute_code turns) + @property remaining # Remaining iterations +``` + +--- + +### 5.2 Tool Orchestration (model_tools.py) + +Bridges the agent and tool registry — handles discovery, schema generation, and dispatch. + +**Key Functions:** + +| Function | Purpose | +| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `_discover_tools()` | Imports all tool modules (each calls `registry.register()` on import) | +| `get_tool_definitions(enabled_toolsets, disabled_toolsets, quiet_mode)` | Returns OpenAI-format tool schemas filtered by toolset | +| `handle_function_call(function_name, function_args, task_id, user_task, enabled_tools)` | Main dispatcher — routes calls to registry with arg coercion | +| `coerce_tool_args(tool_name, args)` | Type coercion for LLM-generated arguments (string→int, string→bool, etc.) | + +**Tool Discovery Order:** + +1. Static tools (web_tools, terminal_tool, file_tools, browser_tool, etc.) +2. Optional tools (fal_client for image gen, honcho, etc.) — graceful fallback if missing +3. Plugin-registered tools +4. MCP server tools (dynamic, via tools/list_changed notifications) + +**Special Tool Handling:** + +- **Agent-level tools** (todo, memory, session_search, delegate_task): Intercepted by `run_agent.py` before `handle_function_call()` +- **execute_code**: Passes `enabled_tools` for sandbox tool list +- **Dynamic schema adjustments**: `browser_navigate` strips web_search reference if tools unavailable + +**Async Bridging:** + +- Persistent event loops (not `asyncio.run()`) to prevent "Event loop is closed" errors +- Main thread uses shared loop; worker threads get per-thread loops +- `_run_async()` detects running loop and spins up disposable thread if needed + +--- + +### 5.3 Toolset System (toolsets.py) + +Provides flexible tool grouping and composition. + +**Core Toolsets:** + +| Toolset | Tools Included | +| ---------------- | ------------------------------------------------------------------------------------------------ | +| `web` | web_search, web_extract, web_crawl | +| `terminal` | terminal | +| `file` | read_file, write_file, edit_file, list_files, search_files | +| `browser` | browser_navigate, browser_snapshot, browser_click, browser_type, browser_scroll, browser_extract | +| `vision` | analyze_image | +| `image_gen` | generate_image | +| `tts` | text_to_speech | +| `todo` | todo_read, todo_write | +| `memory` | memory_read, memory_write | +| `session_search` | session_search | +| `delegation` | delegate_task | +| `code_execution` | execute_code | +| `cronjob` | create_job, list_jobs, delete_job | +| `messaging` | send_message | +| `homeassistant` | ha_get_states, ha_call_service, ... | + +**Composite Toolsets:** + +- `hermes-cli` — All core tools for CLI platform +- `hermes-telegram`, `hermes-discord`, etc. — Platform-specific tool sets +- `hermes-gateway` — Union of all platform tools +- `debugging` — terminal + file + web +- `safe` — Everything except terminal + +**Resolution:** + +```python +resolve_toolset(name, visited=None) → List[str] +# Recursively resolves toolset to tool names +# Handles composition (includes) and cycle detection +# Special aliases: "all" or "*" = all tools +``` + +--- + +### 5.4 Tool Registry (tools/registry.py) + +Singleton managing all tool schemas and handlers. Circular-import safe — has no tool dependencies. + +**ToolEntry** (per-tool metadata): + +```python +@dataclass(slots=True) +class ToolEntry: + name: str + toolset: str + schema: dict # OpenAI-format tool definition + handler: Callable # Sync or async handler function + check_fn: Callable # Returns True if tool is available + requires_env: list # Required environment variables + is_async: bool + description: str + emoji: str +``` + +**Key Methods:** + +```python +registry.register(name, toolset, schema, handler, check_fn, requires_env) +registry.get_definitions(tool_names, quiet) # Returns filtered schemas +registry.dispatch(name, args, **kwargs) # Execute with async bridging +registry.deregister(name) # Remove (for MCP tool refresh) +registry.check_tool_availability() # Returns (available, unavailable) +``` + +--- + +### 5.5 Session Database (hermes_state.py) + +SQLite-based persistent session storage with FTS5 full-text search. + +**Schema (v6):** + +```sql +-- Sessions table +sessions ( + id TEXT PRIMARY KEY, + source TEXT, user_id TEXT, model TEXT, model_config TEXT, + system_prompt TEXT, parent_session_id TEXT, + started_at TEXT, ended_at TEXT, end_reason TEXT, + message_count INTEGER, tool_call_count INTEGER, + input_tokens INTEGER, output_tokens INTEGER, + cache_read_tokens INTEGER, cache_write_tokens INTEGER, reasoning_tokens INTEGER, + estimated_cost_usd REAL, actual_cost_usd REAL, + title TEXT -- UNIQUE INDEX +) + +-- Messages table +messages ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + session_id TEXT, role TEXT, content TEXT, + tool_call_id TEXT, tool_calls TEXT, -- JSON + tool_name TEXT, timestamp TEXT, + token_count INTEGER, finish_reason TEXT, + reasoning TEXT, reasoning_details TEXT, codex_reasoning_items TEXT +) + +-- FTS5 virtual table (auto-synced via triggers) +messages_fts (content) +``` + +**Concurrency Model:** + +- WAL (Write-Ahead Logging) for concurrent readers + single writer +- `BEGIN IMMEDIATE` for write transactions (lock at start, not commit) +- Jitter retry on lock: 20-150ms random backoff, max 15 retries +- Periodic WAL checkpoint every 50 writes + +**Key Operations:** + +- `create_session()`, `end_session()`, `reopen_session()` +- `add_message()`, `get_messages()` +- `search_sessions(query)` — FTS5 full-text search +- `update_token_counts()` — Supports both incremental (CLI) and absolute (gateway) modes + +--- + +### 5.6 Constants & Home Directory (hermes_constants.py) + +Import-safe constants module with no circular dependencies. + +```python +get_hermes_home() → Path # HERMES_HOME env var or ~/.hermes +display_hermes_home() → str # User-friendly display: "~/.hermes" +get_optional_skills_dir() → Path # HERMES_OPTIONAL_SKILLS env var +parse_reasoning_effort(str) → Dict # "high" → {"enabled": True, "effort": "high"} + +# Key constants +OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1" +NOUS_API_BASE_URL = "https://inference-api.nousresearch.com/v1" +AI_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh/v1" +VALID_REASONING_EFFORTS = ("xhigh", "high", "medium", "low", "minimal") +``` + +--- + +## 6. CLI System + +### 6.1 Interactive CLI (cli.py) + +The `HermesCLI` class provides the interactive terminal interface. + +**Features:** + +- **Rich** for banner/panels, **prompt_toolkit** for input with autocomplete +- **KawaiiSpinner** — animated faces during API calls, `┊` activity feed for tool results +- Multiline editing with Shift+Enter +- Slash-command autocomplete +- Session history with up/down arrow navigation +- Clipboard image paste (Alt+V / Ctrl+V) +- Status bar showing model, provider, and token counts +- Inline diff previews for file write/patch operations + +**Configuration Loading:** + +```python +load_cli_config() → dict +# Loads from ~/.hermes/config.yaml (or ./cli-config.yaml fallback) +# Merges with hardcoded defaults +# Expands ${ENV_VAR} references +# Maps terminal config → env vars +``` + +--- + +### 6.2 CLI Entry Point (hermes_cli/main.py) + +All `hermes` subcommands are dispatched from here: + +``` +hermes # Default: interactive chat +hermes chat # Explicit interactive mode +hermes gateway start|stop|status|install|uninstall +hermes setup # Setup wizard +hermes model # Select model/provider +hermes tools # Configure tools +hermes skills # Manage skills +hermes config set|get # Direct config manipulation +hermes cron list|delete # Cron job management +hermes doctor # Diagnose issues +hermes sessions browse # Session picker +hermes profile create|list|switch|delete|export|import +hermes mcp serve|add|remove # MCP management +hermes acp # Start ACP server +hermes update|uninstall|version +``` + +**Profile System:** + +- `_apply_profile_override()` runs BEFORE any imports to set `HERMES_HOME` +- Pre-parses `--profile/-p` from argv +- Allows fully isolated agent instances with separate config, memory, sessions, skills + +--- + +### 6.3 Configuration System (hermes_cli/config.py) + +**Key Configuration Sections:** + +```yaml +model: "anthropic/claude-opus-4.6" # or dict with provider/base_url/api_key +providers: {} # Provider-specific configs +fallback_providers: [] # Ordered failover list +credential_pool: {} # Multiple API keys per provider + +agent: + max_turns: 90 + gateway_timeout: 1800 + tool_use_enforcement: "auto" + +terminal: + backend: "local" # local|docker|modal|daytona|ssh|singularity + timeout: 180 + persistent_shell: true + docker_image: "nikolaik/python-nodejs:..." + +compression: + enabled: true + threshold: 0.50 # Compress when 50% of context used + target_ratio: 0.20 # Summary = 20% of compressed content + protect_last_n: 20 + +auxiliary: + vision: { provider, model } + web_extract: { provider, model } + compression: { provider, model } + +memory: + memory_enabled: true + provider: "" # "" | "honcho" | "mem0" | etc. + memory_char_limit: 2200 + +display: + personality: "kawaii" + show_reasoning: false + inline_diffs: true + skin: "default" + streaming: true + +tts: + provider: "edge" # edge|elevenlabs|openai|neutts + +stt: + enabled: true + provider: "local" # local|groq|openai + +privacy: + redact_pii: false + +mcp_servers: {} # MCP server configurations + +skills: + external_dirs: [] # Additional skill directories + +approvals: + mode: "smart" # smart|always|off +``` + +**Config Files:** + +- `~/.hermes/config.yaml` — User settings (authoritative) +- `~/.hermes/.env` — API keys and secrets +- Config version migration system (currently v5) + +--- + +### 6.4 Slash Command Registry (hermes_cli/commands.py) + +All slash commands defined centrally in `COMMAND_REGISTRY`: + +```python +CommandDef(name, description, category, aliases, args_hint, cli_only, gateway_only) +``` + +**Derived automatically by:** + +- CLI `process_command()` — dispatch on canonical name +- Gateway dispatch + help +- Telegram BotCommand menu +- Slack `/hermes` subcommands +- Autocomplete + help text + +**Key Commands:** + +| Command | Aliases | Description | +| -------------- | ---------- | ----------------------------- | +| `/new` | `/reset` | Start fresh conversation | +| `/model` | | Show/switch model | +| `/personality` | | Set agent personality | +| `/retry` | | Retry last turn | +| `/undo` | | Remove last turn | +| `/compress` | `/compact` | Compress context | +| `/usage` | `/cost` | Show token usage | +| `/insights` | | Usage analytics | +| `/skills` | | Browse/install skills | +| `/background` | `/bg` | Manage background processes | +| `/plan` | | Generate implementation plan | +| `/rollback` | | Restore filesystem checkpoint | +| `/verbose` | | Toggle debug output | +| `/reasoning` | | Set reasoning effort | +| `/yolo` | | Toggle approval bypass | +| `/btw` | | Ephemeral side question | +| `/stop` | | Kill current agent run | +| `/queue` | | Queue next prompt | +| `/browser` | | Interactive browser session | +| `/history` | `/resume` | Session browser | +| `/skin` | | Switch CLI theme | + +--- + +### 6.5 Setup Wizard (hermes_cli/setup.py) + +Modular interactive wizard with independent sections: + +1. **Model & Provider** — Select AI provider, enter API keys, choose model +2. **Terminal Backend** — Choose execution environment +3. **Agent Settings** — Max iterations, compression, session policies +4. **Messaging Platforms** — Configure Telegram, Discord, Slack, etc. +5. **Tools** — TTS, STT, web search, image generation, browser + +Features: + +- Live credential validation +- Real-time model list fetching from provider APIs +- Automatic OpenClaw migration detection +- Atomic config file writes + +--- + +### 6.6 Model Catalog (hermes_cli/models.py) + +Provider-specific model lists: + +```python +_PROVIDER_MODELS = { + "nous": ["anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.6", ...], # 25+ + "openrouter": ["anthropic/claude-opus-4.6", "google/gemini-3-flash", ...], # 30+ + "anthropic": ["claude-opus-4-6", "claude-sonnet-4-6", ...], + "openai": ["gpt-5", "gpt-5.4-mini", "gpt-4.1", "gpt-4o", ...], + "copilot": ["gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", ...], + "huggingface": [...], + "minimax": [...], + "kimi-coding": [...], + "alibaba": [...], + "deepseek": [...], + # ... more providers +} +``` + +Features: + +- Dynamic fetching via provider `/models` endpoints +- Curated lists used when live probe returns fewer models +- Fuzzy matching for typo correction +- Validation against provider catalog + +--- + +### 6.7 Skin/Theme Engine (hermes_cli/skin_engine.py) + +Data-driven CLI visual customization — no code changes needed. + +**Customizable Elements:** + +| Element | Key | Used By | +| -------------------------------- | ------------------------ | ----------------- | +| Banner border/title/accent | `colors.*` | banner.py | +| Response box border | `colors.response_border` | cli.py | +| Spinner faces (waiting/thinking) | `spinner.*` | display.py | +| Spinner verbs/wings | `spinner.*` | display.py | +| Tool output prefix | `tool_prefix` | display.py | +| Per-tool emojis | `tool_emojis` | display.py | +| Agent name/welcome/prompt | `branding.*` | banner.py, cli.py | + +**Built-in Skins:** default, ares, mono, slate, poseidon, sisyphus, charizard + +**User Skins:** Drop `~/.hermes/skins/.yaml` and activate with `/skin ` + +--- + +## 7. Tool System + +### 7.1 Terminal Tool (tools/terminal_tool.py) + +Shell command execution across multiple backends. + +```python +def terminal_tool( + command: str, + background: bool = False, + timeout: Optional[int] = None, + task_id: Optional[str] = None, + force: bool = False, # Skip approval for dangerous commands + workdir: Optional[str] = None, + check_interval: Optional[int] = None, # Background task polling + pty: bool = False, +) -> str # JSON result +``` + +**Features:** + +- Multi-backend: Selects based on `TERMINAL_ENV` (local/docker/ssh/modal/daytona/singularity) +- Per-task_id sandboxes with thread-safe creation locks +- Dangerous command routing through approval system +- Background task support with file-based IPC +- Interrupt handling — polls `is_interrupted()` during execution +- Auto-cleanup daemon thread for idle environments (>300s) +- Disk usage warnings at configurable threshold + +--- + +### 7.2 File Tools (tools/file_tools.py) + +Safe file operations with size guards and sensitive path protection. + +- `read_file_tool(path, offset, limit)` — Read with pagination (default 100K char limit) +- `write_file_tool(path, content)` — Write with approval for sensitive paths +- `edit_file_tool(path, old_text, new_text)` — String replacement editing +- `list_files_tool(path)` — Directory listing +- `search_files_tool(pattern, path)` — Glob/regex file search + +**Safety:** + +- Device path blocklist (`/dev/zero`, `/dev/stdin`, etc.) +- Read dedup tracking — returns stub on re-read if mtime unchanged +- Sensitive path blocking: `/etc/`, `/boot/`, `~/.ssh` without approval +- Prompt injection protection for known dangerous paths + +--- + +### 7.3 Web Tools (tools/web_tools.py) + +Web search and content extraction. + +- `web_search_tool(query, limit)` — Search via configurable backend +- `web_extract_tool(urls, format)` — Extract content from URLs +- `web_crawl_tool(url, instructions)` — LLM-guided web crawling + +**Backends:** Firecrawl, Parallel Web, Tavily, Exa, DuckDuckGo + +- Fallback detection by highest-priority available API key +- LLM processing via auxiliary client (Gemini 3 Flash) for intelligent extraction +- SSRF protection and URL safety checks + +--- + +### 7.4 Browser Tool (tools/browser_tool.py) + +Headless browser automation with accessibility tree. + +```python +browser_navigate(url, task_id) → str +browser_snapshot(task_id, max_chars) → str +browser_click(ref, task_id) → str # Element refs like @e1, @e2 +browser_type(ref, text, task_id) → str +browser_scroll(ref, direction, task_id) → str +browser_extract(task, max_chars, task_id) → str +``` + +**Backends:** + +- **Local:** Headless Chromium via `agent-browser` CLI +- **Cloud:** Browserbase (stealth, proxies, CAPTCHA solving) +- **Camofox:** Anti-detection browser using Camoufox + +**Features:** + +- Accessibility tree for text-based snapshots (no vision required) +- Session isolation per task_id with inactivity cleanup +- API key detection in URLs (prevents exfiltration) +- SSRF protection for private/internal addresses + +--- + +### 7.5 Delegate Tool (tools/delegate_tool.py) + +Spawn isolated subagents for parallel workstreams. + +```python +def delegate_task( + goal: str, + context: str = None, + toolsets: List[str] = None, # Default: ["terminal", "file", "web"] + tasks: List[Dict] = None, # Batch mode: up to 3 concurrent + max_iterations: int = 50, + parent_agent = None, +) → str +``` + +**Isolation:** + +- Fresh conversation (no parent history) +- Own task_id (separate terminal session, file ops) +- Restricted toolset (configurable, blocked tools always stripped) +- Focused system prompt from goal + context +- Parent only sees delegation call and summary result + +**Blocked Tools:** delegate_task, clarify, memory, send_message, execute_code (no recursion, no user interaction) + +**Constraints:** MAX_DEPTH=2, MAX_CONCURRENT_CHILDREN=3 + +--- + +### 7.6 MCP Tool (tools/mcp_tool.py) + +Model Context Protocol client integration. + +**Configuration (config.yaml):** + +```yaml +mcp_servers: + filesystem: + command: "npx" + args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] + timeout: 120 + remote_api: + url: "https://my-mcp-server.example.com/mcp" + headers: + Authorization: "Bearer sk-..." + sampling: + enabled: true + model: "gemini-3-flash" +``` + +**Features:** + +- **Transports:** Stdio (local processes) and HTTP/StreamableHTTP (remote) +- **Dynamic tool discovery:** Listens for `tools/list_changed` notifications +- **Sampling support:** MCP servers can request LLM completions +- **Automatic reconnection** with exponential backoff (5 retries) +- Dedicated background event loop in daemon thread +- Thread-safe via lock protecting server dict + +--- + +### 7.7 Approval System (tools/approval.py) + +Dangerous command detection and approval flow. + +```python +detect_dangerous_command(command: str) → (is_dangerous, pattern_key, description) +``` + +**106 patterns covering:** + +- Destructive operations (`rm -r /`, `mkfs`, `dd if=`) +- Privilege escalation (`chmod 777`, `chown -R root`) +- SQL injection (`DROP TABLE`, `DELETE FROM` without WHERE) +- System targeting (`/etc/` writes, `systemctl stop`, fork bombs) +- Shell injection (pipe to sh, wget to sh, process substitution) +- Network exfiltration (curl with embedded API keys) +- Secret access (`cat ~/.env`, `cat ~/.netrc`) + +**Normalization:** Strips ANSI escapes, null bytes, normalizes Unicode + +**Approval Modes:** + +- `smart` — Learns which commands are safe based on user decisions +- `always` — Always ask for dangerous commands +- `off` — Never ask (or `/yolo` toggle) + +--- + +### 7.8 Terminal Backends (tools/environments/) + +| Backend | File | Features | +| ----------------- | ------------------ | ------------------------------------------------------------------------------ | +| **Local** | `local.py` | Direct execution, interrupt support, non-blocking I/O, persistent shell | +| **Docker** | `docker.py` | Sandboxed containers, cap-drop ALL, no-new-privileges, PID limits, bind mounts | +| **SSH** | `ssh.py` | Remote execution via ControlMaster, persistent shell mixin | +| **Modal** | `modal.py` | Native Modal SDK `Sandbox.create()`/`Sandbox.exec()`, persistent snapshots | +| **Managed Modal** | `managed_modal.py` | Modal through Nous-hosted gateway | +| **Daytona** | `daytona.py` | Daytona SDK cloud sandboxes, stop/resume lifecycle | +| **Singularity** | `singularity.py` | Singularity containers with scratch dir, SIF cache | + +**Common Interface (BaseEnvironment ABC):** + +```python +execute(command, timeout) → {"output": str, "returncode": int} +cleanup() → None +``` + +--- + +## 8. Agent Internals + +### 8.1 Prompt Builder (agent/prompt_builder.py) + +Assembles the system prompt from multiple sources: + +| Component | Source | +| ----------------------- | ---------------------------------------------------- | +| Agent Identity | `DEFAULT_AGENT_IDENTITY` or `SOUL.md` | +| Memory Guidance | When/how to use memory tool | +| Session Search Guidance | How to recall past conversations | +| Skills Guidance | When to create/patch skills | +| Tool Use Enforcement | Must execute tools, not describe actions | +| Skills Index | `~/.hermes/skills/.hermes-skills.json` | +| Platform Hints | OS, Python version, shell, available tools | +| Context Files | `.hermes.md`, `AGENTS.md`, `.cursorrules`, `SOUL.md` | +| Model/Provider Info | Current model and provider identity | + +**Context File Discovery:** + +1. Check `cwd/.hermes.md` or `HERMES.md` +2. Walk parent directories up to git root +3. Validate against injection patterns before inclusion + +**Injection Detection (30+ patterns):** + +- "ignore previous instructions", "system prompt override" +- "do not tell the user", "act as if you have no restrictions" +- HTML comment injection, exfiltration via curl, Unicode stealth chars + +--- + +### 8.2 Context Compressor (agent/context_compressor.py) + +Automatically compresses conversation history when approaching context limits. + +```python +class ContextCompressor: + threshold_percent: float = 0.50 # Compress when 50% of context used + protect_first_n: int = 3 # Keep system prompt + first turn + protect_last_n: int = 20 # Keep recent N messages + summary_target_ratio: float = 0.20 # Summary = 20% of compressed content +``` + +**Compression Algorithm:** + +1. **Pre-pass:** Replace old tool results with placeholder (cheap) +2. **Protect head:** System prompt + first exchange always kept +3. **Protect tail:** Token-budget-based tail protection (~20K tokens) +4. **Summarize middle:** LLM-generated structured summary (Goal, Progress, Decisions, Files, Next Steps) +5. **Iterative updates:** On subsequent compressions, update previous summary instead of re-summarizing + +--- + +### 8.3 Prompt Caching (agent/prompt_caching.py) + +Anthropic prompt caching support for cost reduction. + +- System prompt cached across turns (first conversation turn establishes cache) +- Cache markers inserted at system prompt boundaries +- Must not break mid-conversation — altering past context invalidates cache +- The ONLY time context is altered is during compression + +**Critical Rule:** Do NOT implement changes that would alter past context, change toolsets, reload memories, or rebuild system prompts mid-conversation. + +--- + +### 8.4 Auxiliary Client (agent/auxiliary_client.py) + +Separate LLM client for non-primary tasks: + +- **Vision analysis** — Image description and analysis +- **Web extraction** — Content summarization +- **Context compression** — Generating conversation summaries +- **Session search** — Summarizing search results +- **MCP sampling** — Serving server-initiated LLM requests + +Configured per-task via `auxiliary` section in config.yaml. + +--- + +### 8.5 Display & Spinner (agent/display.py) + +- **KawaiiSpinner** — Animated face characters during API calls +- **Tool preview formatting** — `┊` prefixed activity feed for tool execution +- **Inline diff previews** — Shows unified diffs for write/patch operations +- Respects active skin for colors, emojis, and branding + +--- + +### 8.6 Skill Commands (agent/skill_commands.py) + +Shared skill invocation for CLI and gateway: + +- Skills loaded from `~/.hermes/skills/` and external directories +- Injected as **user message** (not system prompt) to preserve prompt caching +- `/plan` command generates implementation plans stored in `.hermes/plans/` +- Skill content includes setup instructions, tool options, usage examples + +--- + +## 9. Messaging Gateway + +### 9.1 GatewayRunner (gateway/run.py) + +Main controller managing all platform adapters and routing messages. + +**Key Attributes:** + +- `adapters: Dict[Platform, BasePlatformAdapter]` — Active platform instances +- `session_store: SessionStore` — Conversation persistence +- `_running_agents: Dict[str, AIAgent]` — Per-session cached agents (preserves prompt caching) +- `_pending_approvals: Dict[str, Dict]` — Dangerous command approval tracking +- `pairing_store: PairingStore` — DM code-based user authorization + +**Message Flow:** + +1. Platform adapter queues `MessageEvent` +2. GatewayRunner dequeues, calls `_handle_message()` +3. Slash command? → dispatch to handler +4. Regular message? → `_handle_message_with_agent()` (async, with per-session locking) +5. Response delivered back via platform adapter + +**Features:** + +- Agent caching per session (preserves Anthropic prompt cache across turns) +- Session reset policies (inactivity timeout, hard reset) +- Per-session model overrides via `/model` +- Background memory flush on session expiry +- Approval routing (`/approve`, `/deny`) with interactive buttons (Discord) +- 30+ slash command handlers + +--- + +### 9.2 Session Store (gateway/session.py) + +**SessionSource** — Where a message originated (platform, chat_id, user info) +**SessionContext** — Full context for system prompt injection (platforms, home channels, metadata) +**SessionStore** — Loads/saves conversation transcripts as JSON files + +``` +~/.hermes/sessions/{session_key}.json +Format: [{role, content, timestamp}, ...] +``` + +**Features:** + +- Session key computed from platform + chat_id + thread_id (deterministic hash) +- Inactivity timeout for session resets +- PII redaction (phone numbers hashed) +- Survives gateway restarts + +--- + +### 9.3 Platform Adapters (gateway/platforms/) + +**16 adapters sharing `BasePlatformAdapter` interface:** + +| Platform | Key Features | +| ------------------ | -------------------------------------------------------------------------------------------------------- | +| **Telegram** | Polling + webhook mode, media handling, inline keyboards, forum topic isolation, group mention gating | +| **Discord** | Server channels, threads, reactions (processing/done/error), button-based approval, @mention requirement | +| **Slack** | Multi-workspace OAuth, thread handling, app_mention, `/hermes` subcommands | +| **WhatsApp** | Group & DM support, media captions, LID↔phone alias resolution | +| **Matrix** | E2EE room encryption, threaded messages, trusted device flow, native voice messages | +| **Signal** | Encrypted DMs, group membership, SSE keepalive, phone URL encoding | +| **Email** | IMAP/SMTP, multi-recipient, skip_attachments option | +| **Home Assistant** | REST tools + WebSocket, service discovery, smart home automation | +| **SMS** | Twilio integration | +| **Mattermost** | Self-hosted Slack alternative, configurable mention behavior | +| **DingTalk** | Alibaba enterprise messaging | +| **Feishu/Lark** | Enterprise messaging, message cards, approval workflows | +| **WeCom** | Enterprise WeChat, department management | +| **Webhook** | Generic HTTP POST for custom integrations | +| **API Server** | OpenAI-compatible `/v1/chat/completions` endpoint | + +**Common Features:** + +- Image/audio caching for vision and STT tools +- Rate limiting with exponential backoff +- Session routing with authorization rules +- Cross-platform conversation continuity + +--- + +## 10. Cron Scheduling + +Built-in job scheduler running in the gateway background thread. + +**Schedule Types:** + +- `"once in 5m"` — One-shot after duration +- `"every 30m"` — Recurring interval +- `"0 9 * * *"` — Standard cron expression +- `"2026-04-06T14:00"` — Absolute datetime + +**Job Storage:** `~/.hermes/cron/jobs.json` + +**Execution Flow:** + +1. `tick()` called every 60s from gateway background thread +2. Fetch due jobs past `next_run_at` +3. Spawn `hermes` CLI subprocess with job prompt + skills +4. Capture output → save to `~/.hermes/cron/output/{job_id}/{timestamp}.md` +5. Deliver to target platform (or stay local) + +**Delivery Targets:** + +- `"local"` — Output saved locally only +- `"origin"` — Send to originating chat +- `"telegram:"` — Explicit platform/chat routing +- `[SILENT]` prefix — Suppress delivery but keep logs + +**Grace Windows:** Based on schedule frequency (120s–2hrs) to handle missed jobs + +--- + +## 11. Skills System + +**Skills are composable, agent-invokable knowledge units.** + +**Structure:** + +``` +skills/ +├── creative/ # ASCII art, diagrams, music +├── software-development/ # Debugging, testing, docs +├── github/ # Codebase inspection, PR workflow +├── research/ # Literature, web scraping +├── productivity/ # Task management +├── media/ # Image, video, audio processing +├── mlops/ # ML experiment tracking +├── autonomous-ai-agents/ # Multi-agent orchestration +└── [20+ more categories] +``` + +**Per-Skill Structure:** + +``` +skill-name/ +├── SKILL.md # Metadata (YAML frontmatter) + implementation instructions +└── [sub-skills]/ +``` + +**SKILL.md Example:** + +```yaml +--- +name: ascii-art +description: Generate ASCII art using multiple tools +version: 4.0.0 +dependencies: [] +metadata: + hermes: + tags: [ASCII, Art, Banners, Creative] + related_skills: [excalidraw] +--- +[Implementation instructions, tool options, examples...] +``` + +**Discovery:** + +- Auto-discovered from `~/.hermes/skills/` + external dirs +- Skills index built at startup (`.hermes-skills.json`) +- Loaded as user messages to preserve prompt caching +- Per-platform enable/disable via `hermes skills` +- Skills Hub (`agentskills.io`) for community sharing + +--- + +## 12. Plugin System + +Drop Python files into `~/.hermes/plugins/` to extend Hermes. + +**Plugin Capabilities:** + +- Register custom tools and toolsets +- Inject messages into conversation +- Lifecycle hooks: `pre_llm_call`, `post_llm_call`, `on_session_start`, `on_session_end` +- Enable/disable via `hermes plugins enable/disable ` + +**Memory Provider Plugins (plugins/memory/):** +8 implementations: openviking, mem0, hindsight, holographic, honcho, retaindb, byterover + +Each implements: + +```python +class MemoryProvider: + def is_available() → bool + def store(key, value) + def retrieve(query) → list + def clear() +``` + +--- + +## 13. Memory System + +Hermes has a pluggable memory provider interface: + +**Built-in Memory:** + +- `MEMORY.md` — Markdown file with persistent facts +- `USER.md` — User profile information +- Memory read/write tools called by agent during conversation +- Periodic nudges prompt agent to save important information +- FTS5 session search for cross-session recall + +**Honcho Integration:** + +- AI-native dialectic user modeling +- Async memory writes +- Profile-scoped host/peer resolution +- Multi-user isolation in gateway mode + +**Configuration:** + +```yaml +memory: + memory_enabled: true + provider: "" # "" for built-in, "honcho", "mem0", etc. + memory_char_limit: 2200 +``` + +--- + +## 14. ACP Server (IDE Integration) + +Agent Communication Protocol server for VS Code, Zed, JetBrains. + +**Entry:** `hermes acp` → `acp_adapter/server.py` + +**HermesACPAgent Class:** + +```python +initialize() # Handshake with IDE client +authenticate(method_id) # Validate credentials +new_session(cwd, mcp_servers) # Create isolated session +load_session(session_id) # Resume session +fork_session(session_id) # Branch for parallel work +list_sessions() # Browse all sessions +cancel(session_id) # Interrupt running agent +``` + +**Features:** + +- Slash command support (`/model`, `/tools`, `/reset`, `/compact`) +- Client-provided MCP servers (IDE's MCP ecosystem flows into agent) +- Streaming callbacks for messages, thinking, tool progress +- Dangerous command approval via IDE UI + +--- + +## 15. API Server + +OpenAI-compatible API endpoint for headless integrations (e.g., Open WebUI). + +**Endpoint:** `POST /v1/chat/completions` + +**Features:** + +- `X-Hermes-Session-Id` header for persistent sessions +- Tool progress streaming via SSE events +- `/api/jobs` REST API for cron management +- Input limits, field whitelists, SQLite-backed response persistence +- CORS origin protection + +--- + +## 16. MCP Server Mode + +Expose Hermes conversations to MCP-compatible clients. + +**Entry:** `hermes mcp serve` + +**Features:** + +- Browse conversations and sessions +- Read messages and search across sessions +- Manage attachments +- Supports both stdio and Streamable HTTP transports +- Compatible with Claude Desktop, Cursor, VS Code, etc. + +--- + +## 17. RL Training Environments + +Atropos-based RL training framework for agent policy optimization. + +**Base Class:** `HermesAgentBaseEnv` (extends `atroposlib.BaseEnv`) + +**Configuration:** + +```python +HermesAgentEnvConfig: + enabled_toolsets: ["terminal", "file", "web"] + max_agent_turns: 30 + agent_temperature: 1.0 + terminal_backend: "local" # or docker/modal for isolation + dataset_name: str +``` + +**Subclass Requirements:** + +- `setup()` — Load dataset +- `get_next_item()` — Return next task +- `format_prompt()` — Convert item → user message +- `compute_reward()` — Score rollout +- `evaluate()` — Periodic eval on test set + +**Example Environments:** + +- `web_research_env.py` — Web research tasks +- `agentic_opd_env.py` — Observation-Prediction-Demonstration +- `hermes_swe_env.py` — Software engineering tasks + +**Supporting:** + +- `HermesAgentLoop` — Orchestrates step-by-step rollouts +- `ToolContext` — Sandbox for tool execution, records side effects +- `trajectory_compressor.py` — Compresses trajectories for training data + +--- + +## 18. Profiles (Multi-Instance) + +Run multiple fully isolated Hermes instances from the same installation. + +**Commands:** + +```bash +hermes profile create +hermes profile list +hermes profile switch +hermes profile delete +hermes profile export +hermes profile import +hermes -p # Launch with specific profile +``` + +**Each profile gets:** + +- Own `HERMES_HOME` directory (`~/.hermes/profiles//`) +- Own config.yaml, .env, memory, sessions, skills, gateway service +- Token-lock isolation (prevents two profiles sharing bot credentials) + +**Implementation:** + +- `_apply_profile_override()` sets `HERMES_HOME` env var before any imports +- All 119+ references to `get_hermes_home()` automatically scope to active profile +- Profile operations are HOME-anchored (`~/.hermes/profiles/`) for cross-profile visibility + +--- + +## 19. Security Model + +### Command Approval + +- 106 dangerous command patterns (destructive, privilege escalation, SQL, exfiltration) +- Smart approval mode learns from user decisions +- Session-based approval state (per-session tracking) +- `--fuck-it-ship-it` flag or `/yolo` toggle to bypass + +### Secret Protection + +- Secret redaction in logs and tool output (API keys, tokens) +- Browser URL scanning for embedded secrets +- LLM response scanning for exfiltration attempts +- Credential directory protection (`.docker`, `.azure`, `.config/gh`, `.ssh`) +- `execute_code` sandbox output redaction + +### Input Safety + +- Prompt injection detection in context files (30+ patterns) +- Unicode stealth character detection +- ANSI escape sequence normalization +- Device path blocklist for file reads +- SSRF protection in web/browser tools + +### PII Handling + +- Optional `privacy.redact_pii` mode +- Phone number hashing in session metadata +- Sender ID anonymization in gateway logs + +### Supply Chain + +- All dependency version ranges pinned +- `uv.lock` with hashes for reproducible builds +- CI workflow scanning PRs for supply chain attack patterns +- Compromised `litellm` dependency removed + +--- + +## 20. Provider & Model System + +### Supported Providers + +| Provider | API Mode | Key Features | +| --------------------- | ------------------ | ----------------------------------------- | +| **Nous Portal** | chat_completions | 400+ models, first-class setup | +| **OpenRouter** | chat_completions | 200+ models, provider routing preferences | +| **Anthropic** | anthropic_messages | Native prompt caching, OAuth PKCE | +| **OpenAI** | chat_completions | GPT-5, Codex | +| **GitHub Copilot** | chat_completions | OAuth, 400k context | +| **Hugging Face** | chat_completions | Curated agentic model picker | +| **Google (Direct)** | chat_completions | Full Gemini context lengths | +| **z.ai/GLM** | chat_completions | Chinese LLM models | +| **Kimi/Moonshot** | chat_completions | Kimi Code API | +| **MiniMax** | anthropic_messages | M2.7 models | +| **Alibaba/DashScope** | chat_completions | Qwen models | +| **DeepSeek** | chat_completions | V3 models | +| **Vercel AI Gateway** | chat_completions | Routing through Vercel | +| **Kilo Code** | chat_completions | Custom provider | +| **OpenCode Zen/Go** | chat_completions | Custom provider | +| **Custom Endpoint** | configurable | Any OpenAI-compatible API | + +### Provider Features + +- **Ordered fallback chain:** Auto-failover across configured providers on errors +- **Credential pools:** Multiple API keys per provider with `least_used` rotation +- **Per-turn primary restoration:** After fallback use, restore primary on next turn +- **Context length detection:** models.dev integration, provider-aware resolution, `/v1/props` for llama.cpp +- **Rate limit handling:** User-friendly 429 messages with Retry-After countdown +- **Anthropic long-context tier:** Auto-reduces to 200k on tier limit 429 + +--- + +## 21. Streaming & Reasoning + +### Streaming + +- Enabled by default in CLI and gateway +- Token-by-token delivery via `stream_delta_callback` +- Proper spinner/tool progress display during streaming +- Stale connection detection (90s timeout) +- Fallback to non-streaming if provider doesn't support it + +### Reasoning/Thinking + +- Configurable effort: xhigh, high, medium, low, minimal, none +- `/reasoning` command to toggle display and effort level +- Anthropic thinking blocks preserved across multi-turn conversations +- `` tag extraction for compatible models +- Reasoning persisted to SessionDB (v6 schema) for cross-session continuity +- Thinking-budget exhaustion detection to skip useless continuation retries + +--- + +## 22. Release History + +### v0.2.0 (March 12, 2026) — The Foundation Release + +> 216 merged PRs from 63 contributors, resolving 119 issues + +- Multi-platform messaging gateway (Telegram, Discord, Slack, WhatsApp, Signal, Email, Home Assistant) +- MCP client support (stdio + HTTP) +- 70+ skills across 15+ categories +- Centralized provider router (`call_llm()` API) +- ACP server for IDE integration +- CLI skin/theme engine +- Git worktree isolation (`hermes -w`) +- Filesystem checkpoints and `/rollback` +- 3,289 tests + +### v0.3.0 (March 17, 2026) — Streaming, Plugins, Providers + +- Unified streaming infrastructure (token-by-token delivery) +- First-class plugin architecture (`~/.hermes/plugins/`) +- Native Anthropic provider with prompt caching +- Smart approvals + `/stop` command +- Honcho memory integration +- Voice mode (CLI push-to-talk, Telegram/Discord voice) +- Concurrent tool execution (ThreadPoolExecutor) +- PII redaction +- `/browser connect` via Chrome DevTools Protocol +- Vercel AI Gateway provider +- Persistent shell mode for local/SSH backends +- Agentic On-Policy Distillation RL environment + +### v0.4.0 (March 23, 2026) — Platform Expansion + +- OpenAI-compatible API server (`/v1/chat/completions`) +- 6 new messaging adapters (Signal rewrite, DingTalk, SMS, Mattermost, Matrix, Webhook) +- `@file` and `@url` context references with tab completion +- 4 new providers (GitHub Copilot, Alibaba, Kilo Code, OpenCode) +- MCP server management CLI with OAuth 2.1 PKCE +- Gateway prompt caching (dramatic cost reduction) +- Context compression overhaul (structured summaries, iterative updates) +- Streaming enabled by default +- 200+ bug fixes + +### v0.5.0 (March 28, 2026) — Hardening + +- Nous Portal expanded to 400+ models +- Hugging Face as first-class provider +- Telegram Private Chat Topics +- Native Modal SDK backend (replaced swe-rex) +- Plugin lifecycle hooks activated +- GPT model tool-use enforcement +- Nix flake with NixOS module +- Supply chain hardening (removed litellm, pinned deps, CI scanning) +- Anthropic per-model output limits (128K for Opus 4.6) + +### v0.6.0 (March 30, 2026) — Multi-Instance + +> 95 PRs and 16 resolved issues in 2 days + +- Profiles for multiple isolated agent instances +- MCP Server Mode (`hermes mcp serve`) +- Official Docker container +- Ordered fallback provider chain +- Feishu/Lark platform adapter +- WeCom (Enterprise WeChat) adapter +- Slack multi-workspace OAuth +- Telegram webhook mode + group controls +- Exa search backend +- Skills & credentials on remote backends + +### v0.7.0 (April 3, 2026) — Resilience + +> 168 PRs and 46 resolved issues + +- Pluggable memory provider interface (ABC-based plugin system) +- Same-provider credential pools with automatic rotation +- Camofox anti-detection browser backend +- Inline diff previews in tool activity feed +- API server session continuity + tool streaming +- ACP client-provided MCP servers +- Gateway hardening (race conditions, approval routing, compression death spirals) +- Secret exfiltration blocking (URL scanning, base64 detection) + +--- + +## 23. File Dependency Chain + +``` +hermes_constants.py (no deps — imported by everything) + ↑ +tools/registry.py (no tool deps — imported by all tool files) + ↑ +tools/*.py (each calls registry.register() at import time) + ↑ +model_tools.py (imports tools/registry + triggers tool discovery) + ↑ +run_agent.py (AIAgent), cli.py (HermesCLI), gateway/run.py (GatewayRunner) + ↑ +hermes_cli/main.py (entry point — dispatches to all subsystems) +``` + +**Key Principle:** `tools/registry.py` is circular-import safe. It has no tool dependencies. Tool files import the registry; `model_tools.py` imports both. + +--- + +## 24. Key Design Patterns + +| Pattern | Description | +| ------------------------------ | -------------------------------------------------------------------------------------------------- | +| **Registry-based Tool System** | Single source of truth; plugins register at import time; dynamic (MCP) and static tools coexist | +| **Toolset Composition** | Recursive resolution with cycle detection; platform-specific composites | +| **Iteration Budget** | Thread-safe shared budget across parent + subagents | +| **Streaming First** | Preferred over non-streaming for health checking (stale connection detection) | +| **Prefix Caching** | System prompt cached across turns (Anthropic optimization); context never altered mid-conversation | +| **Proactive Compression** | Triggered at 50% context usage; structured summaries with iterative updates | +| **Async Bridging** | Persistent event loops prevent "Event loop is closed"; per-thread loops for workers | +| **Profile Isolation** | HERMES_HOME env var set before imports; all state functions route through `get_hermes_home()` | +| **Agent Caching** | Gateway caches AIAgent per session to preserve prompt cache across turns | +| **WAL Concurrency** | SQLite WAL mode + jitter retry for concurrent readers + single writer | +| **Plugin Architecture** | Tools, toolsets, hooks, memory providers extensible via plugins | +| **Multi-Backend Execution** | Pluggable terminal backends with unified BaseEnvironment interface | +| **Safety Layers** | Approval system → sensitive path guards → injection detection → capability filtering | + +--- + +## 25. Configuration Reference + +### Environment Variables (key ones) + +| Variable | Purpose | +| --------------------- | --------------------------------------------------------- | +| `HERMES_HOME` | Override home directory (profiles set this automatically) | +| `OPENROUTER_API_KEY` | OpenRouter provider key | +| `ANTHROPIC_API_KEY` | Anthropic provider key | +| `OPENAI_API_KEY` | OpenAI provider key | +| `NOUS_API_KEY` | Nous Portal key | +| `FIRECRAWL_API_KEY` | Web search/extraction | +| `EXA_API_KEY` | Exa search backend | +| `BROWSERBASE_API_KEY` | Cloud browser | +| `FAL_KEY` | Image generation | +| `ELEVENLABS_API_KEY` | Premium TTS | +| `HONCHO_API_KEY` | Honcho memory | +| `TERMINAL_ENV` | Terminal backend override | +| `TERMINAL_CWD` | Terminal working directory | +| `MESSAGING_CWD` | Gateway working directory | + +### Config File Locations + +| File | Purpose | +| ----------------------------- | -------------------------------- | +| `~/.hermes/config.yaml` | Main configuration (YAML) | +| `~/.hermes/.env` | API keys and secrets | +| `~/.hermes/MEMORY.md` | Persistent agent memory | +| `~/.hermes/USER.md` | User profile | +| `~/.hermes/SOUL.md` | Agent persona/identity | +| `~/.hermes/sessions.db` | SQLite session database | +| `~/.hermes/cron/jobs.json` | Cron job definitions | +| `.hermes.md` (in project dir) | Per-project context file | +| `AGENTS.md` (in project dir) | Developer instructions for agent | + +--- + +## 26. Known Pitfalls + +1. **DO NOT hardcode `~/.hermes` paths** — Use `get_hermes_home()` from `hermes_constants`. Hardcoding breaks profiles. + +2. **DO NOT use `simple_term_menu`** — Rendering bugs in tmux/iTerm2 (ghosting). Use `curses` instead. + +3. **DO NOT use `\033[K`** (ANSI erase-to-EOL) — Leaks as literal text under prompt_toolkit's `patch_stdout`. Use space-padding. + +4. **`_last_resolved_tool_names` is process-global** — Saved/restored around subagent execution in `delegate_tool.py`. + +5. **DO NOT hardcode cross-tool references in schemas** — Tool may be unavailable. Add dynamic references in `get_tool_definitions()`. + +6. **Tests must not write to `~/.hermes/`** — `_isolate_hermes_home` autouse fixture redirects to temp dir. + +7. **Prompt caching must not break** — Do NOT alter past context, change toolsets, reload memories, or rebuild system prompts mid-conversation. + +8. **Working directory behavior differs:** CLI uses `os.getcwd()`, gateway uses `MESSAGING_CWD` env var. + +9. **Config has three loaders:** `load_cli_config()` (CLI), `load_config()` (hermes tools/setup), direct YAML (gateway). They have different merge behaviors. + +10. **Profile operations are HOME-anchored** — `_get_profiles_root()` returns `Path.home() / ".hermes" / "profiles"`, NOT `get_hermes_home() / "profiles"`. This is intentional for cross-profile visibility. + +--- + +_This document covers Hermes Agent v0.7.0 as of April 2026. For the latest information, refer to the [official documentation](https://hermes-agent.nousresearch.com/docs/) and the [GitHub repository](https://github.com/NousResearch/hermes-agent)._ diff --git a/.agents/skills/lat-md/SKILL.md b/.agents/skills/lat-md/SKILL.md new file mode 100644 index 0000000..4208385 --- /dev/null +++ b/.agents/skills/lat-md/SKILL.md @@ -0,0 +1,169 @@ +--- +name: lat-md +description: >- + Writing and maintaining lat.md documentation files — structured markdown that + describes a project's architecture, design decisions, and test specs. Use when + creating, editing, or reviewing files in the lat.md/ directory. +--- + +# lat.md Authoring Guide + +This skill covers the syntax, structure rules, and conventions for writing `lat.md/` files. Load it whenever you need to create or edit sections in the `lat.md/` directory. + +## What belongs in lat.md + +`lat.md/` files describe **what** the project does and **why** — domain concepts, key design decisions, business logic, and test specifications. They do NOT duplicate source code. Think of each section as an anchor that source code references back to. + +Good candidates for sections: +- Architecture decisions and their rationale +- Domain concepts and business rules +- API contracts and protocols +- Test specifications (what is tested and why) +- Non-obvious constraints or invariants + +Bad candidates: +- Step-by-step code walkthroughs (the code itself is the walkthrough) +- Auto-generated API docs (use tools for that) +- Temporary notes or TODOs + +## Section structure + +Every section **must** have a leading paragraph — at least one sentence immediately after the heading, before any child headings or other block content. + +The first paragraph must be ≤250 characters (excluding `[[wiki link]]` content). This paragraph is the section's identity — it appears in search results, command output, and RAG context. + +```markdown +# Good Section + +Brief overview of what this section documents and why it matters. + +More detail can go in subsequent paragraphs, code blocks, or lists. + +## Child heading + +Details about this child topic. +``` + +```markdown +# Bad Section + +## Child heading + +This is invalid — "Bad Section" has no leading paragraph. +``` + +`lat check` enforces this rule. + +## Section IDs + +Sections are addressed by file path and heading chain: + +- **Full form**: `lat.md/path/to/file#Heading#SubHeading` +- **Short form**: `file#Heading#SubHeading` (when the file stem is unique) + +Examples: `lat.md/tests/search#RAG Replay Tests`, `cli#init`, `parser#Wiki Links`. + +## Wiki links + +Cross-reference other sections or source code with `[[target]]` or `[[target|alias]]`. + +### Section links + +```markdown +See [[cli#init]] for setup details. +The parser validates [[parser#Wiki Links|wiki link syntax]]. +``` + +### Source code links + +Reference functions, classes, constants, and methods in source files: + +```markdown +[[src/config.ts#getConfigDir]] — function +[[src/server.ts#App#listen]] — class method +[[lib/utils.py#parse_args]] — Python function +[[src/lib.rs#Greeter#greet]] — Rust impl method +[[src/app.go#Greeter#Greet]] — Go method +[[src/app.h#Greeter]] — C struct +``` + +`lat check` validates that all targets exist. + +## Code refs + +Tie source code back to `lat.md/` sections with `@lat:` comments: + +```typescript +// @lat: [[cli#init]] +export function init() { ... } +``` + +```python +# @lat: [[cli#init]] +def init(): + ... +``` + +Supported comment styles: `//` (JS/TS/Rust/Go/C) and `#` (Python). + +Place one `@lat:` comment per section, at the relevant code — not at the top of the file. + +## Test specs + +Describe tests as sections in `lat.md/` files. Add frontmatter to require that every leaf section has a matching `@lat:` comment in test code: + +```markdown +--- +lat: + require-code-mention: true +--- +# Tests + +Authentication test specifications. + +## User login + +Verify credential validation and error handling. + +### Rejects expired tokens + +Tokens past their expiry timestamp are rejected with 401, even if otherwise valid. + +### Handles missing password + +Login request without a password field returns 400 with a descriptive error. +``` + +Each test references its spec: + +```python +# @lat: [[tests#User login#Rejects expired tokens]] +def test_rejects_expired_tokens(): + ... +``` + +Rules: +- Every leaf section under `require-code-mention: true` must be referenced by exactly one `@lat:` comment +- Every section MUST have a description — at least one sentence explaining what the test verifies and why +- `lat check` flags unreferenced specs and dangling code refs + +## Frontmatter + +Optional YAML frontmatter at the top of `lat.md/` files: + +```yaml +--- +lat: + require-code-mention: true +--- +``` + +Currently the only supported field is `require-code-mention` for test spec enforcement. + +## Validation + +Always run `lat check` after editing `lat.md/` files. It validates: +- All wiki links point to existing sections or source code symbols +- All `@lat:` code refs point to existing sections +- Every section has a leading paragraph (≤250 chars) +- All `require-code-mention` leaf sections are referenced in code diff --git a/.agents/skills/typescript-expert/SKILL.md b/.agents/skills/typescript-expert/SKILL.md new file mode 100644 index 0000000..8dc79c1 --- /dev/null +++ b/.agents/skills/typescript-expert/SKILL.md @@ -0,0 +1,470 @@ +--- +name: typescript-expert +description: TypeScript and JavaScript expert with deep knowledge of type-level programming, performance optimization, monorepo management, migration strategies, and modern tooling. +category: framework +risk: critical +source: community +date_added: "2026-02-27" +--- + +# TypeScript Expert + +You are an advanced TypeScript expert with deep, practical knowledge of type-level programming, performance optimization, and real-world problem solving based on current best practices. + +## When invoked: + +0. If the issue requires ultra-specific expertise, recommend switching and stop: + - Deep webpack/vite/rollup bundler internals → typescript-build-expert + - Complex ESM/CJS migration or circular dependency analysis → typescript-module-expert + - Type performance profiling or compiler internals → typescript-type-expert + + Example to output: + "This requires deep bundler expertise. Please invoke: 'Use the typescript-build-expert subagent.' Stopping here." + +1. Analyze project setup comprehensively: + + **Use internal tools first (Read, Grep, Glob) for better performance. Shell commands are fallbacks.** + + ```bash + # Core versions and configuration + npx tsc --version + node -v + # Detect tooling ecosystem (prefer parsing package.json) + node -e "const p=require('./package.json');console.log(Object.keys({...p.devDependencies,...p.dependencies}||{}).join('\n'))" 2>/dev/null | grep -E 'biome|eslint|prettier|vitest|jest|turborepo|nx' || echo "No tooling detected" + # Check for monorepo (fixed precedence) + (test -f pnpm-workspace.yaml || test -f lerna.json || test -f nx.json || test -f turbo.json) && echo "Monorepo detected" + ``` + + **After detection, adapt approach:** + - Match import style (absolute vs relative) + - Respect existing baseUrl/paths configuration + - Prefer existing project scripts over raw tools + - In monorepos, consider project references before broad tsconfig changes + +2. Identify the specific problem category and complexity level + +3. Apply the appropriate solution strategy from my expertise + +4. Validate thoroughly: + + ```bash + # Fast fail approach (avoid long-lived processes) + npm run -s typecheck || npx tsc --noEmit + npm test -s || npx vitest run --reporter=basic --no-watch + # Only if needed and build affects outputs/config + npm run -s build + ``` + + **Safety note:** Avoid watch/serve processes in validation. Use one-shot diagnostics only. + +## Advanced Type System Expertise + +### Type-Level Programming Patterns + +**Branded Types for Domain Modeling** + +```typescript +// Create nominal types to prevent primitive obsession +type Brand = K & { __brand: T }; +type UserId = Brand; +type OrderId = Brand; + +// Prevents accidental mixing of domain primitives +function processOrder(orderId: OrderId, userId: UserId) {} +``` + +- Use for: Critical domain primitives, API boundaries, currency/units +- Resource: https://egghead.io/blog/using-branded-types-in-typescript + +**Advanced Conditional Types** + +```typescript +// Recursive type manipulation +type DeepReadonly = T extends (...args: any[]) => any + ? T + : T extends object + ? { readonly [K in keyof T]: DeepReadonly } + : T; + +// Template literal type magic +type PropEventSource = { + on( + eventName: `${Key}Changed`, + callback: (newValue: Type[Key]) => void, + ): void; +}; +``` + +- Use for: Library APIs, type-safe event systems, compile-time validation +- Watch for: Type instantiation depth errors (limit recursion to 10 levels) + +**Type Inference Techniques** + +```typescript +// Use 'satisfies' for constraint validation (TS 5.0+) +const config = { + api: "https://api.example.com", + timeout: 5000, +} satisfies Record; +// Preserves literal types while ensuring constraints + +// Const assertions for maximum inference +const routes = ["/home", "/about", "/contact"] as const; +type Route = (typeof routes)[number]; // '/home' | '/about' | '/contact' +``` + +### Performance Optimization Strategies + +**Type Checking Performance** + +```bash +# Diagnose slow type checking +npx tsc --extendedDiagnostics --incremental false | grep -E "Check time|Files:|Lines:|Nodes:" + +# Common fixes for "Type instantiation is excessively deep" +# 1. Replace type intersections with interfaces +# 2. Split large union types (>100 members) +# 3. Avoid circular generic constraints +# 4. Use type aliases to break recursion +``` + +**Build Performance Patterns** + +- Enable `skipLibCheck: true` for library type checking only (often significantly improves performance on large projects, but avoid masking app typing issues) +- Use `incremental: true` with `.tsbuildinfo` cache +- Configure `include`/`exclude` precisely +- For monorepos: Use project references with `composite: true` + +## Real-World Problem Resolution + +### Complex Error Patterns + +**"The inferred type of X cannot be named"** + +- Cause: Missing type export or circular dependency +- Fix priority: + 1. Export the required type explicitly + 2. Use `ReturnType` helper + 3. Break circular dependencies with type-only imports +- Resource: https://github.com/microsoft/TypeScript/issues/47663 + +**Missing type declarations** + +- Quick fix with ambient declarations: + +```typescript +// types/ambient.d.ts +declare module "some-untyped-package" { + const value: unknown; + export default value; + export = value; // if CJS interop is needed +} +``` + +- For more details: [Declaration Files Guide](https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html) + +**"Excessive stack depth comparing types"** + +- Cause: Circular or deeply recursive types +- Fix priority: + 1. Limit recursion depth with conditional types + 2. Use `interface` extends instead of type intersection + 3. Simplify generic constraints + +```typescript +// Bad: Infinite recursion +type InfiniteArray = T | InfiniteArray[]; + +// Good: Limited recursion +type NestedArray = D extends 0 + ? T + : T | NestedArray[]; +``` + +**Module Resolution Mysteries** + +- "Cannot find module" despite file existing: + 1. Check `moduleResolution` matches your bundler + 2. Verify `baseUrl` and `paths` alignment + 3. For monorepos: Ensure workspace protocol (workspace:\*) + 4. Try clearing cache: `rm -rf node_modules/.cache .tsbuildinfo` + +**Path Mapping at Runtime** + +- TypeScript paths only work at compile time, not runtime +- Node.js runtime solutions: + - ts-node: Use `ts-node -r tsconfig-paths/register` + - Node ESM: Use loader alternatives or avoid TS paths at runtime + - Production: Pre-compile with resolved paths + +### Migration Expertise + +**JavaScript to TypeScript Migration** + +```bash +# Incremental migration strategy +# 1. Enable allowJs and checkJs (merge into existing tsconfig.json): +# Add to existing tsconfig.json: +# { +# "compilerOptions": { +# "allowJs": true, +# "checkJs": true +# } +# } + +# 2. Rename files gradually (.js → .ts) +# 3. Add types file by file using AI assistance +# 4. Enable strict mode features one by one + +# Automated helpers (if installed/needed) +command -v ts-migrate >/dev/null 2>&1 && npx ts-migrate migrate . --sources 'src/**/*.js' +command -v typesync >/dev/null 2>&1 && npx typesync # Install missing @types packages +``` + +**Tool Migration Decisions** + +| From | To | When | Migration Effort | +| ----------------- | --------------- | --------------------------------------------- | ----------------- | +| ESLint + Prettier | Biome | Need much faster speed, okay with fewer rules | Low (1 day) | +| TSC for linting | Type-check only | Have 100+ files, need faster feedback | Medium (2-3 days) | +| Lerna | Nx/Turborepo | Need caching, parallel builds | High (1 week) | +| CJS | ESM | Node 18+, modern tooling | High (varies) | + +### Monorepo Management + +**Nx vs Turborepo Decision Matrix** + +- Choose **Turborepo** if: Simple structure, need speed, <20 packages +- Choose **Nx** if: Complex dependencies, need visualization, plugins required +- Performance: Nx often performs better on large monorepos (>50 packages) + +**TypeScript Monorepo Configuration** + +```json +// Root tsconfig.json +{ + "references": [ + { "path": "./packages/core" }, + { "path": "./packages/ui" }, + { "path": "./apps/web" } + ], + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true + } +} +``` + +## Modern Tooling Expertise + +### Biome vs ESLint + +**Use Biome when:** + +- Speed is critical (often faster than traditional setups) +- Want single tool for lint + format +- TypeScript-first project +- Okay with 64 TS rules vs 100+ in typescript-eslint + +**Stay with ESLint when:** + +- Need specific rules/plugins +- Have complex custom rules +- Working with Vue/Angular (limited Biome support) +- Need type-aware linting (Biome doesn't have this yet) + +### Type Testing Strategies + +**Vitest Type Testing (Recommended)** + +```typescript +// in avatar.test-d.ts +import { expectTypeOf } from "vitest"; +import type { Avatar } from "./avatar"; + +test("Avatar props are correctly typed", () => { + expectTypeOf().toHaveProperty("size"); + expectTypeOf().toEqualTypeOf<"sm" | "md" | "lg">(); +}); +``` + +**When to Test Types:** + +- Publishing libraries +- Complex generic functions +- Type-level utilities +- API contracts + +## Debugging Mastery + +### CLI Debugging Tools + +```bash +# Debug TypeScript files directly (if tools installed) +command -v tsx >/dev/null 2>&1 && npx tsx --inspect src/file.ts +command -v ts-node >/dev/null 2>&1 && npx ts-node --inspect-brk src/file.ts + +# Trace module resolution issues +npx tsc --traceResolution > resolution.log 2>&1 +grep "Module resolution" resolution.log + +# Debug type checking performance (use --incremental false for clean trace) +npx tsc --generateTrace trace --incremental false +# Analyze trace (if installed) +command -v @typescript/analyze-trace >/dev/null 2>&1 && npx @typescript/analyze-trace trace + +# Memory usage analysis +node --max-old-space-size=8192 node_modules/typescript/lib/tsc.js +``` + +### Custom Error Classes + +```typescript +// Proper error class with stack preservation +class DomainError extends Error { + constructor( + message: string, + public code: string, + public statusCode: number, + ) { + super(message); + this.name = "DomainError"; + Error.captureStackTrace(this, this.constructor); + } +} +``` + +## Current Best Practices + +### Strict by Default + +```json +{ + "compilerOptions": { + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "exactOptionalPropertyTypes": true, + "noPropertyAccessFromIndexSignature": true + } +} +``` + +### ESM-First Approach + +- Set `"type": "module"` in package.json +- Use `.mts` for TypeScript ESM files if needed +- Configure `"moduleResolution": "bundler"` for modern tools +- Use dynamic imports for CJS: `const pkg = await import('cjs-package')` + - Note: `await import()` requires async function or top-level await in ESM + - For CJS packages in ESM: May need `(await import('pkg')).default` depending on the package's export structure and your compiler settings + +### AI-Assisted Development + +- GitHub Copilot excels at TypeScript generics +- Use AI for boilerplate type definitions +- Validate AI-generated types with type tests +- Document complex types for AI context + +## Code Review Checklist + +When reviewing TypeScript/JavaScript code, focus on these domain-specific aspects: + +### Type Safety + +- [ ] No implicit `any` types (use `unknown` or proper types) +- [ ] Strict null checks enabled and properly handled +- [ ] Type assertions (`as`) justified and minimal +- [ ] Generic constraints properly defined +- [ ] Discriminated unions for error handling +- [ ] Return types explicitly declared for public APIs + +### TypeScript Best Practices + +- [ ] Prefer `interface` over `type` for object shapes (better error messages) +- [ ] Use const assertions for literal types +- [ ] Leverage type guards and predicates +- [ ] Avoid type gymnastics when simpler solution exists +- [ ] Template literal types used appropriately +- [ ] Branded types for domain primitives + +### Performance Considerations + +- [ ] Type complexity doesn't cause slow compilation +- [ ] No excessive type instantiation depth +- [ ] Avoid complex mapped types in hot paths +- [ ] Use `skipLibCheck: true` in tsconfig +- [ ] Project references configured for monorepos + +### Module System + +- [ ] Consistent import/export patterns +- [ ] No circular dependencies +- [ ] Proper use of barrel exports (avoid over-bundling) +- [ ] ESM/CJS compatibility handled correctly +- [ ] Dynamic imports for code splitting + +### Error Handling Patterns + +- [ ] Result types or discriminated unions for errors +- [ ] Custom error classes with proper inheritance +- [ ] Type-safe error boundaries +- [ ] Exhaustive switch cases with `never` type + +### Code Organization + +- [ ] Types co-located with implementation +- [ ] Shared types in dedicated modules +- [ ] Avoid global type augmentation when possible +- [ ] Proper use of declaration files (.d.ts) + +## Quick Decision Trees + +### "Which tool should I use?" + +``` +Type checking only? → tsc +Type checking + linting speed critical? → Biome +Type checking + comprehensive linting? → ESLint + typescript-eslint +Type testing? → Vitest expectTypeOf +Build tool? → Project size <10 packages? Turborepo. Else? Nx +``` + +### "How do I fix this performance issue?" + +``` +Slow type checking? → skipLibCheck, incremental, project references +Slow builds? → Check bundler config, enable caching +Slow tests? → Vitest with threads, avoid type checking in tests +Slow language server? → Exclude node_modules, limit files in tsconfig +``` + +## Expert Resources + +### Performance + +- [TypeScript Wiki Performance](https://github.com/microsoft/TypeScript/wiki/Performance) +- [Type instantiation tracking](https://github.com/microsoft/TypeScript/pull/48077) + +### Advanced Patterns + +- [Type Challenges](https://github.com/type-challenges/type-challenges) +- [Type-Level TypeScript Course](https://type-level-typescript.com) + +### Tools + +- [Biome](https://biomejs.dev) - Fast linter/formatter +- [TypeStat](https://github.com/JoshuaKGoldberg/TypeStat) - Auto-fix TypeScript types +- [ts-migrate](https://github.com/airbnb/ts-migrate) - Migration toolkit + +### Testing + +- [Vitest Type Testing](https://vitest.dev/guide/testing-types) +- [tsd](https://github.com/tsdjs/tsd) - Standalone type testing + +Always validate changes don't break existing functionality before considering the issue resolved. + +## When to Use + +This skill is applicable to execute the workflow or actions described in the overview. diff --git a/.agents/skills/typescript-expert/references/tsconfig-strict.json b/.agents/skills/typescript-expert/references/tsconfig-strict.json new file mode 100644 index 0000000..36da566 --- /dev/null +++ b/.agents/skills/typescript-expert/references/tsconfig-strict.json @@ -0,0 +1,74 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "display": "Strict TypeScript 5.x", + "compilerOptions": { + // ========================================================================= + // STRICTNESS (Maximum Type Safety) + // ========================================================================= + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "exactOptionalPropertyTypes": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + // ========================================================================= + // MODULE SYSTEM (Modern ESM) + // ========================================================================= + "module": "ESNext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + // ========================================================================= + // OUTPUT + // ========================================================================= + "target": "ES2022", + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "declaration": true, + "declarationMap": true, + "sourceMap": true, + // ========================================================================= + // PERFORMANCE + // ========================================================================= + "skipLibCheck": true, + "incremental": true, + // ========================================================================= + // PATH ALIASES + // ========================================================================= + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@/components/*": ["./src/components/*"], + "@/lib/*": ["./src/lib/*"], + "@/types/*": ["./src/types/*"], + "@/utils/*": ["./src/utils/*"] + }, + // ========================================================================= + // JSX (for React projects) + // ========================================================================= + // "jsx": "react-jsx", + // ========================================================================= + // EMIT + // ========================================================================= + "noEmit": true // Let bundler handle emit + // "outDir": "./dist", + // "rootDir": "./src", + // ========================================================================= + // DECORATORS (if needed) + // ========================================================================= + // "experimentalDecorators": true, + // "emitDecoratorMetadata": true + }, + "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts"], + "exclude": [ + "node_modules", + "dist", + "build", + "coverage", + "**/*.test.ts", + "**/*.spec.ts" + ] +} diff --git a/.agents/skills/typescript-expert/references/typescript-cheatsheet.md b/.agents/skills/typescript-expert/references/typescript-cheatsheet.md new file mode 100644 index 0000000..fb08eb6 --- /dev/null +++ b/.agents/skills/typescript-expert/references/typescript-cheatsheet.md @@ -0,0 +1,393 @@ +# TypeScript Cheatsheet + +## Type Basics + +```typescript +// Primitives +const name: string = "John"; +const age: number = 30; +const isActive: boolean = true; +const nothing: null = null; +const notDefined: undefined = undefined; + +// Arrays +const numbers: number[] = [1, 2, 3]; +const strings: Array = ["a", "b", "c"]; + +// Tuple +const tuple: [string, number] = ["hello", 42]; + +// Object +const user: { name: string; age: number } = { name: "John", age: 30 }; + +// Union +const value: string | number = "hello"; + +// Literal +const direction: "up" | "down" | "left" | "right" = "up"; + +// Any vs Unknown +const anyValue: any = "anything"; // ❌ Avoid +const unknownValue: unknown = "safe"; // ✅ Prefer, requires narrowing +``` + +## Type Aliases & Interfaces + +```typescript +// Type Alias +type Point = { + x: number; + y: number; +}; + +// Interface (preferred for objects) +interface User { + id: string; + name: string; + email?: string; // Optional + readonly createdAt: Date; // Readonly +} + +// Extending +interface Admin extends User { + permissions: string[]; +} + +// Intersection +type AdminUser = User & { permissions: string[] }; +``` + +## Generics + +```typescript +// Generic function +function identity(value: T): T { + return value; +} + +// Generic with constraint +function getLength(item: T): number { + return item.length; +} + +// Generic interface +interface ApiResponse { + data: T; + status: number; + message: string; +} + +// Generic with default +type Container = { + value: T; +}; + +// Multiple generics +function merge(obj1: T, obj2: U): T & U { + return { ...obj1, ...obj2 }; +} +``` + +## Utility Types + +```typescript +interface User { + id: string; + name: string; + email: string; + age: number; +} + +// Partial - all optional +type PartialUser = Partial; + +// Required - all required +type RequiredUser = Required; + +// Readonly - all readonly +type ReadonlyUser = Readonly; + +// Pick - select properties +type UserName = Pick; + +// Omit - exclude properties +type UserWithoutEmail = Omit; + +// Record - key-value map +type UserMap = Record; + +// Extract - extract from union +type StringOrNumber = string | number | boolean; +type OnlyStrings = Extract; + +// Exclude - exclude from union +type NotString = Exclude; + +// NonNullable - remove null/undefined +type MaybeString = string | null | undefined; +type DefinitelyString = NonNullable; + +// ReturnType - get function return type +function getUser() { + return { name: "John" }; +} +type UserReturn = ReturnType; + +// Parameters - get function parameters +type GetUserParams = Parameters; + +// Awaited - unwrap Promise +type ResolvedUser = Awaited>; +``` + +## Conditional Types + +```typescript +// Basic conditional +type IsString = T extends string ? true : false; + +// Infer keyword +type UnwrapPromise = T extends Promise ? U : T; + +// Distributive conditional +type ToArray = T extends any ? T[] : never; +type Result = ToArray; // string[] | number[] + +// NonDistributive +type ToArrayNonDist = [T] extends [any] ? T[] : never; +``` + +## Template Literal Types + +```typescript +type Color = "red" | "green" | "blue"; +type Size = "small" | "medium" | "large"; + +// Combine +type ColorSize = `${Color}-${Size}`; +// 'red-small' | 'red-medium' | 'red-large' | ... + +// Event handlers +type EventName = "click" | "focus" | "blur"; +type EventHandler = `on${Capitalize}`; +// 'onClick' | 'onFocus' | 'onBlur' +``` + +## Mapped Types + +```typescript +// Basic mapped type +type Optional = { + [K in keyof T]?: T[K]; +}; + +// With key remapping +type Getters = { + [K in keyof T as `get${Capitalize}`]: () => T[K]; +}; + +// Filter keys +type OnlyStrings = { + [K in keyof T as T[K] extends string ? K : never]: T[K]; +}; +``` + +## Type Guards + +```typescript +// typeof guard +function process(value: string | number) { + if (typeof value === "string") { + return value.toUpperCase(); // string + } + return value.toFixed(2); // number +} + +// instanceof guard +class Dog { + bark() {} +} +class Cat { + meow() {} +} + +function makeSound(animal: Dog | Cat) { + if (animal instanceof Dog) { + animal.bark(); + } else { + animal.meow(); + } +} + +// in guard +interface Bird { + fly(): void; +} +interface Fish { + swim(): void; +} + +function move(animal: Bird | Fish) { + if ("fly" in animal) { + animal.fly(); + } else { + animal.swim(); + } +} + +// Custom type guard +function isString(value: unknown): value is string { + return typeof value === "string"; +} + +// Assertion function +function assertIsString(value: unknown): asserts value is string { + if (typeof value !== "string") { + throw new Error("Not a string"); + } +} +``` + +## Discriminated Unions + +```typescript +// With type discriminant +type Success = { type: "success"; data: T }; +type Error = { type: "error"; message: string }; +type Loading = { type: "loading" }; + +type State = Success | Error | Loading; + +function handle(state: State) { + switch (state.type) { + case "success": + return state.data; // T + case "error": + return state.message; // string + case "loading": + return null; + } +} + +// Exhaustive check +function assertNever(value: never): never { + throw new Error(`Unexpected value: ${value}`); +} +``` + +## Branded Types + +```typescript +// Create branded type +type Brand = K & { __brand: T }; + +type UserId = Brand; +type OrderId = Brand; + +// Constructor functions +function createUserId(id: string): UserId { + return id as UserId; +} + +function createOrderId(id: string): OrderId { + return id as OrderId; +} + +// Usage - prevents mixing +function getOrder(orderId: OrderId, userId: UserId) {} + +const userId = createUserId("user-123"); +const orderId = createOrderId("order-456"); + +getOrder(orderId, userId); // ✅ OK +// getOrder(userId, orderId) // ❌ Error - types don't match +``` + +## Module Declarations + +```typescript +// Declare module for untyped package +declare module "untyped-package" { + export function doSomething(): void; + export const value: string; +} + +// Augment existing module +declare module "express" { + interface Request { + user?: { id: string }; + } +} + +// Declare global +declare global { + interface Window { + myGlobal: string; + } +} +``` + +## TSConfig Essentials + +```json +{ + "compilerOptions": { + // Strictness + "strict": true, + "noUncheckedIndexedAccess": true, + "noImplicitOverride": true, + + // Modules + "module": "ESNext", + "moduleResolution": "bundler", + "esModuleInterop": true, + + // Output + "target": "ES2022", + "lib": ["ES2022", "DOM"], + + // Performance + "skipLibCheck": true, + "incremental": true, + + // Paths + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} +``` + +## Best Practices + +```typescript +// ✅ Prefer interface for objects +interface User { + name: string; +} + +// ✅ Use const assertions +const routes = ["home", "about"] as const; + +// ✅ Use satisfies for validation +const config = { + api: "https://api.example.com", +} satisfies Record; + +// ✅ Use unknown over any +function parse(input: unknown) { + if (typeof input === "string") { + return JSON.parse(input); + } +} + +// ✅ Explicit return types for public APIs +export function getUser(id: string): User | null { + // ... +} + +// ❌ Avoid +const data: any = fetchData(); +data.anything.goes.wrong; // No type safety +``` diff --git a/.agents/skills/typescript-expert/references/utility-types.ts b/.agents/skills/typescript-expert/references/utility-types.ts new file mode 100644 index 0000000..b0a93bc --- /dev/null +++ b/.agents/skills/typescript-expert/references/utility-types.ts @@ -0,0 +1,332 @@ +/** + * TypeScript Utility Types Library + * + * A collection of commonly used utility types for TypeScript projects. + * Copy and use as needed in your projects. + */ + +// ============================================================================= +// BRANDED TYPES +// ============================================================================= + +/** + * Create nominal/branded types to prevent primitive obsession. + * + * @example + * type UserId = Brand + * type OrderId = Brand + */ +export type Brand = K & { readonly __brand: T }; + +// Branded type constructors +export type UserId = Brand; +export type Email = Brand; +export type UUID = Brand; +export type Timestamp = Brand; +export type PositiveNumber = Brand; + +// ============================================================================= +// RESULT TYPE (Error Handling) +// ============================================================================= + +/** + * Type-safe error handling without exceptions. + */ +export type Result = + | { success: true; data: T } + | { success: false; error: E }; + +export const ok = (data: T): Result => ({ + success: true, + data, +}); + +export const err = (error: E): Result => ({ + success: false, + error, +}); + +// ============================================================================= +// OPTION TYPE (Nullable Handling) +// ============================================================================= + +/** + * Explicit optional value handling. + */ +export type Option = Some | None; + +export type Some = { type: "some"; value: T }; +export type None = { type: "none" }; + +export const some = (value: T): Some => ({ type: "some", value }); +export const none: None = { type: "none" }; + +// ============================================================================= +// DEEP UTILITIES +// ============================================================================= + +/** + * Make all properties deeply readonly. + */ +export type DeepReadonly = T extends (...args: any[]) => any + ? T + : T extends object + ? { readonly [K in keyof T]: DeepReadonly } + : T; + +/** + * Make all properties deeply optional. + */ +export type DeepPartial = T extends object + ? { [K in keyof T]?: DeepPartial } + : T; + +/** + * Make all properties deeply required. + */ +export type DeepRequired = T extends object + ? { [K in keyof T]-?: DeepRequired } + : T; + +/** + * Make all properties deeply mutable (remove readonly). + */ +export type DeepMutable = T extends object + ? { -readonly [K in keyof T]: DeepMutable } + : T; + +// ============================================================================= +// OBJECT UTILITIES +// ============================================================================= + +/** + * Get keys of object where value matches type. + */ +export type KeysOfType = { + [K in keyof T]: T[K] extends V ? K : never; +}[keyof T]; + +/** + * Pick properties by value type. + */ +export type PickByType = Pick>; + +/** + * Omit properties by value type. + */ +export type OmitByType = Omit>; + +/** + * Make specific keys optional. + */ +export type PartialBy = Omit & Partial>; + +/** + * Make specific keys required. + */ +export type RequiredBy = Omit & + Required>; + +/** + * Make specific keys readonly. + */ +export type ReadonlyBy = Omit & + Readonly>; + +/** + * Merge two types (second overrides first). + */ +export type Merge = Omit & U; + +// ============================================================================= +// ARRAY UTILITIES +// ============================================================================= + +/** + * Get element type from array. + */ +export type ElementOf = T extends (infer E)[] ? E : never; + +/** + * Tuple of specific length. + */ +export type Tuple = N extends N + ? number extends N + ? T[] + : _TupleOf + : never; + +type _TupleOf = R["length"] extends N + ? R + : _TupleOf; + +/** + * Non-empty array. + */ +export type NonEmptyArray = [T, ...T[]]; + +/** + * At least N elements. + */ +export type AtLeast = [...Tuple, ...T[]]; + +// ============================================================================= +// FUNCTION UTILITIES +// ============================================================================= + +/** + * Get function arguments as tuple. + */ +export type Arguments = T extends (...args: infer A) => any ? A : never; + +/** + * Get first argument of function. + */ +export type FirstArgument = T extends (first: infer F, ...args: any[]) => any + ? F + : never; + +/** + * Async version of function. + */ +export type AsyncFunction any> = ( + ...args: Parameters +) => Promise>>; + +/** + * Promisify return type. + */ +export type Promisify = T extends (...args: infer A) => infer R + ? (...args: A) => Promise> + : never; + +// ============================================================================= +// STRING UTILITIES +// ============================================================================= + +/** + * Split string by delimiter. + */ +export type Split< + S extends string, + D extends string, +> = S extends `${infer T}${D}${infer U}` ? [T, ...Split] : [S]; + +/** + * Join tuple to string. + */ +export type Join = T extends [] + ? "" + : T extends [infer F extends string] + ? F + : T extends [infer F extends string, ...infer R extends string[]] + ? `${F}${D}${Join}` + : never; + +/** + * Path to nested object. + */ +export type PathOf = K extends string + ? T[K] extends object + ? K | `${K}.${PathOf}` + : K + : never; + +// ============================================================================= +// UNION UTILITIES +// ============================================================================= + +/** + * Last element of union. + */ +export type UnionLast = + UnionToIntersection T : never> extends () => infer R + ? R + : never; + +/** + * Union to intersection. + */ +export type UnionToIntersection = ( + U extends any ? (k: U) => void : never +) extends (k: infer I) => void + ? I + : never; + +/** + * Union to tuple. + */ +export type UnionToTuple> = [T] extends [never] + ? [] + : [...UnionToTuple>, L]; + +// ============================================================================= +// VALIDATION UTILITIES +// ============================================================================= + +/** + * Assert type at compile time. + */ +export type AssertEqual = + (() => V extends T ? 1 : 2) extends () => V extends U ? 1 : 2 + ? true + : false; + +/** + * Ensure type is not never. + */ +export type IsNever = [T] extends [never] ? true : false; + +/** + * Ensure type is any. + */ +export type IsAny = 0 extends 1 & T ? true : false; + +/** + * Ensure type is unknown. + */ +export type IsUnknown = + IsAny extends true ? false : unknown extends T ? true : false; + +// ============================================================================= +// JSON UTILITIES +// ============================================================================= + +/** + * JSON-safe types. + */ +export type JsonPrimitive = string | number | boolean | null; +export type JsonArray = JsonValue[]; +export type JsonObject = { [key: string]: JsonValue }; +export type JsonValue = JsonPrimitive | JsonArray | JsonObject; + +/** + * Make type JSON-serializable. + */ +export type Jsonify = T extends JsonPrimitive + ? T + : T extends undefined | ((...args: any[]) => any) | symbol + ? never + : T extends { toJSON(): infer R } + ? R + : T extends object + ? { [K in keyof T]: Jsonify } + : never; + +// ============================================================================= +// EXHAUSTIVE CHECK +// ============================================================================= + +/** + * Ensure all cases are handled in switch/if. + */ +export function assertNever(value: never, message?: string): never { + throw new Error(message ?? `Unexpected value: ${value}`); +} + +/** + * Exhaustive check without throwing. + */ +export function exhaustiveCheck(_value: never): void { + // This function should never be called +} diff --git a/.agents/skills/typescript-expert/scripts/ts_diagnostic.py b/.agents/skills/typescript-expert/scripts/ts_diagnostic.py new file mode 100644 index 0000000..3d42e90 --- /dev/null +++ b/.agents/skills/typescript-expert/scripts/ts_diagnostic.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python3 +""" +TypeScript Project Diagnostic Script +Analyzes TypeScript projects for configuration, performance, and common issues. +""" + +import subprocess +import sys +import os +import json +from pathlib import Path + +def run_cmd(cmd: str) -> str: + """Run shell command and return output.""" + try: + result = subprocess.run(cmd, shell=True, capture_output=True, text=True) + return result.stdout + result.stderr + except Exception as e: + return str(e) + +def check_versions(): + """Check TypeScript and Node versions.""" + print("\n📦 Versions:") + print("-" * 40) + + ts_version = run_cmd("npx tsc --version 2>/dev/null").strip() + node_version = run_cmd("node -v 2>/dev/null").strip() + + print(f" TypeScript: {ts_version or 'Not found'}") + print(f" Node.js: {node_version or 'Not found'}") + +def check_tsconfig(): + """Analyze tsconfig.json settings.""" + print("\n⚙️ TSConfig Analysis:") + print("-" * 40) + + tsconfig_path = Path("tsconfig.json") + if not tsconfig_path.exists(): + print("⚠️ tsconfig.json not found") + return + + try: + with open(tsconfig_path) as f: + config = json.load(f) + + compiler_opts = config.get("compilerOptions", {}) + + # Check strict mode + if compiler_opts.get("strict"): + print("✅ Strict mode enabled") + else: + print("⚠️ Strict mode NOT enabled") + + # Check important flags + flags = { + "noUncheckedIndexedAccess": "Unchecked index access protection", + "noImplicitOverride": "Implicit override protection", + "skipLibCheck": "Skip lib check (performance)", + "incremental": "Incremental compilation" + } + + for flag, desc in flags.items(): + status = "✅" if compiler_opts.get(flag) else "⚪" + print(f" {status} {desc}: {compiler_opts.get(flag, 'not set')}") + + # Check module settings + print(f"\n Module: {compiler_opts.get('module', 'not set')}") + print(f" Module Resolution: {compiler_opts.get('moduleResolution', 'not set')}") + print(f" Target: {compiler_opts.get('target', 'not set')}") + + except json.JSONDecodeError: + print("❌ Invalid JSON in tsconfig.json") + +def check_tooling(): + """Detect TypeScript tooling ecosystem.""" + print("\n🛠️ Tooling Detection:") + print("-" * 40) + + pkg_path = Path("package.json") + if not pkg_path.exists(): + print("⚠️ package.json not found") + return + + try: + with open(pkg_path) as f: + pkg = json.load(f) + + all_deps = {**pkg.get("dependencies", {}), **pkg.get("devDependencies", {})} + + tools = { + "biome": "Biome (linter/formatter)", + "eslint": "ESLint", + "prettier": "Prettier", + "vitest": "Vitest (testing)", + "jest": "Jest (testing)", + "turborepo": "Turborepo (monorepo)", + "turbo": "Turbo (monorepo)", + "nx": "Nx (monorepo)", + "lerna": "Lerna (monorepo)" + } + + for tool, desc in tools.items(): + for dep in all_deps: + if tool in dep.lower(): + print(f" ✅ {desc}") + break + + except json.JSONDecodeError: + print("❌ Invalid JSON in package.json") + +def check_monorepo(): + """Check for monorepo configuration.""" + print("\n📦 Monorepo Check:") + print("-" * 40) + + indicators = [ + ("pnpm-workspace.yaml", "PNPM Workspace"), + ("lerna.json", "Lerna"), + ("nx.json", "Nx"), + ("turbo.json", "Turborepo") + ] + + found = False + for file, name in indicators: + if Path(file).exists(): + print(f" ✅ {name} detected") + found = True + + if not found: + print(" ⚪ No monorepo configuration detected") + +def check_type_errors(): + """Run quick type check.""" + print("\n🔍 Type Check:") + print("-" * 40) + + result = run_cmd("npx tsc --noEmit 2>&1 | head -20") + if "error TS" in result: + errors = result.count("error TS") + print(f" ❌ {errors}+ type errors found") + print(result[:500]) + else: + print(" ✅ No type errors") + +def check_any_usage(): + """Check for any type usage.""" + print("\n⚠️ 'any' Type Usage:") + print("-" * 40) + + result = run_cmd("grep -r ': any' --include='*.ts' --include='*.tsx' src/ 2>/dev/null | wc -l") + count = result.strip() + if count and count != "0": + print(f" ⚠️ Found {count} occurrences of ': any'") + sample = run_cmd("grep -rn ': any' --include='*.ts' --include='*.tsx' src/ 2>/dev/null | head -5") + if sample: + print(sample) + else: + print(" ✅ No explicit 'any' types found") + +def check_type_assertions(): + """Check for type assertions.""" + print("\n⚠️ Type Assertions (as):") + print("-" * 40) + + result = run_cmd("grep -r ' as ' --include='*.ts' --include='*.tsx' src/ 2>/dev/null | grep -v 'import' | wc -l") + count = result.strip() + if count and count != "0": + print(f" ⚠️ Found {count} type assertions") + else: + print(" ✅ No type assertions found") + +def check_performance(): + """Check type checking performance.""" + print("\n⏱️ Type Check Performance:") + print("-" * 40) + + result = run_cmd("npx tsc --extendedDiagnostics --noEmit 2>&1 | grep -E 'Check time|Files:|Lines:|Nodes:'") + if result.strip(): + for line in result.strip().split('\n'): + print(f" {line}") + else: + print(" ⚠️ Could not measure performance") + +def main(): + print("=" * 50) + print("🔍 TypeScript Project Diagnostic Report") + print("=" * 50) + + check_versions() + check_tsconfig() + check_tooling() + check_monorepo() + check_any_usage() + check_type_assertions() + check_type_errors() + check_performance() + + print("\n" + "=" * 50) + print("✅ Diagnostic Complete") + print("=" * 50) + +if __name__ == "__main__": + main() diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..aee54d8 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,7 @@ +# Target the Chromium version that the bundled Electron ships. Tooling that +# reads browserslist (PostCSS / Microsoft Edge Tools / linters) will stop +# warning about features that are only "missing" on engines we never ship to. +# +# Electron 39.x bundles Chromium 130+. Bumping this when we upgrade Electron +# keeps the lint signal honest without silencing legitimate compat issues. +last 2 Chrome versions diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..36f1e57 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,24 @@ +{ + "hooks": { + "UserPromptSubmit": [ + { + "hooks": [ + { + "type": "command", + "command": "lat hook claude UserPromptSubmit" + } + ] + } + ], + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "lat hook claude Stop" + } + ] + } + ] + } +} diff --git a/.claude/skills/electron-pro b/.claude/skills/electron-pro new file mode 120000 index 0000000..8a29704 --- /dev/null +++ b/.claude/skills/electron-pro @@ -0,0 +1 @@ +../../.agents/skills/electron-pro \ No newline at end of file diff --git a/.claude/skills/hermes-agent/SKILL.md b/.claude/skills/hermes-agent/SKILL.md new file mode 100644 index 0000000..c5b8b50 --- /dev/null +++ b/.claude/skills/hermes-agent/SKILL.md @@ -0,0 +1,1765 @@ +--- +name: hermes-agent +description: Expert in building self-improving AI agents with tool use, multi-platform messaging, and a closed learning loop. Proficient in LLM orchestration, tool integration, session management, and agent autonomy. +--- + +# Hermes Agent - Complete Project Guide (A-Z) + +> **Purpose of this document:** A single, comprehensive reference that explains everything about the Hermes Agent project — its architecture, source code, features, release history, and design patterns — so that any AI or developer can fully understand the system. + +--- + +## Table of Contents + +1. [Project Overview](#1-project-overview) +2. [Key Features Summary](#2-key-features-summary) +3. [Installation & Getting Started](#3-installation--getting-started) +4. [Project Structure](#4-project-structure) +5. [Core Architecture](#5-core-architecture) + - 5.1 [AIAgent Class (run_agent.py)](#51-aiagent-class-run_agentpy) + - 5.2 [Tool Orchestration (model_tools.py)](#52-tool-orchestration-model_toolspy) + - 5.3 [Toolset System (toolsets.py)](#53-toolset-system-toolsetspy) + - 5.4 [Tool Registry (tools/registry.py)](#54-tool-registry-toolsregistrypy) + - 5.5 [Session Database (hermes_state.py)](#55-session-database-hermes_statepy) + - 5.6 [Constants & Home Directory (hermes_constants.py)](#56-constants--home-directory-hermes_constantspy) +6. [CLI System](#6-cli-system) + - 6.1 [Interactive CLI (cli.py)](#61-interactive-cli-clipy) + - 6.2 [CLI Entry Point (hermes_cli/main.py)](#62-cli-entry-point-hermes_climainpy) + - 6.3 [Configuration System (hermes_cli/config.py)](#63-configuration-system-hermes_cliconfigpy) + - 6.4 [Slash Command Registry (hermes_cli/commands.py)](#64-slash-command-registry-hermes_clicommandspy) + - 6.5 [Setup Wizard (hermes_cli/setup.py)](#65-setup-wizard-hermes_clisetupy) + - 6.6 [Model Catalog (hermes_cli/models.py)](#66-model-catalog-hermes_climodelspy) + - 6.7 [Skin/Theme Engine (hermes_cli/skin_engine.py)](#67-skintheme-engine-hermes_cliskin_enginepy) +7. [Tool System](#7-tool-system) + - 7.1 [Terminal Tool (tools/terminal_tool.py)](#71-terminal-tool-toolsterminal_toolpy) + - 7.2 [File Tools (tools/file_tools.py)](#72-file-tools-toolsfile_toolspy) + - 7.3 [Web Tools (tools/web_tools.py)](#73-web-tools-toolsweb_toolspy) + - 7.4 [Browser Tool (tools/browser_tool.py)](#74-browser-tool-toolsbrowser_toolpy) + - 7.5 [Delegate Tool (tools/delegate_tool.py)](#75-delegate-tool-toolsdelegate_toolpy) + - 7.6 [MCP Tool (tools/mcp_tool.py)](#76-mcp-tool-toolsmcp_toolpy) + - 7.7 [Approval System (tools/approval.py)](#77-approval-system-toolsapprovalpy) + - 7.8 [Terminal Backends (tools/environments/)](#78-terminal-backends-toolsenvironments) +8. [Agent Internals](#8-agent-internals) + - 8.1 [Prompt Builder (agent/prompt_builder.py)](#81-prompt-builder-agentprompt_builderpy) + - 8.2 [Context Compressor (agent/context_compressor.py)](#82-context-compressor-agentcontext_compressorpy) + - 8.3 [Prompt Caching (agent/prompt_caching.py)](#83-prompt-caching-agentprompt_cachingpy) + - 8.4 [Auxiliary Client (agent/auxiliary_client.py)](#84-auxiliary-client-agentauxiliary_clientpy) + - 8.5 [Display & Spinner (agent/display.py)](#85-display--spinner-agentdisplaypy) + - 8.6 [Skill Commands (agent/skill_commands.py)](#86-skill-commands-agentskill_commandspy) +9. [Messaging Gateway](#9-messaging-gateway) + - 9.1 [GatewayRunner (gateway/run.py)](#91-gatewayrunner-gatewayrunpy) + - 9.2 [Session Store (gateway/session.py)](#92-session-store-gatewaysessionpy) + - 9.3 [Platform Adapters (gateway/platforms/)](#93-platform-adapters-gatewayplatforms) +10. [Cron Scheduling](#10-cron-scheduling) +11. [Skills System](#11-skills-system) +12. [Plugin System](#12-plugin-system) +13. [Memory System](#13-memory-system) +14. [ACP Server (IDE Integration)](#14-acp-server-ide-integration) +15. [API Server](#15-api-server) +16. [MCP Server Mode](#16-mcp-server-mode) +17. [RL Training Environments](#17-rl-training-environments) +18. [Profiles (Multi-Instance)](#18-profiles-multi-instance) +19. [Security Model](#19-security-model) +20. [Provider & Model System](#20-provider--model-system) +21. [Streaming & Reasoning](#21-streaming--reasoning) +22. [Release History](#22-release-history) +23. [File Dependency Chain](#23-file-dependency-chain) +24. [Key Design Patterns](#24-key-design-patterns) +25. [Configuration Reference](#25-configuration-reference) +26. [Known Pitfalls](#26-known-pitfalls) + +--- + +## 1. Project Overview + +**Hermes Agent** is a self-improving AI agent built by [Nous Research](https://nousresearch.com). It is an open-source (MIT licensed), Python-based project that provides: + +- A **full interactive terminal UI** (CLI) for conversing with LLMs +- A **messaging gateway** supporting 16+ platforms (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email, etc.) +- A **closed learning loop** — the agent creates skills from experience, improves them during use, nudges itself to persist knowledge, searches past conversations, and builds a deepening model of who you are +- **40+ built-in tools** — terminal execution, file manipulation, web search, browser automation, code execution, image generation, TTS/STT, and more +- **Any LLM provider** — OpenRouter (200+ models), Nous Portal (400+ models), OpenAI, Anthropic, Hugging Face, GitHub Copilot, z.ai/GLM, Kimi/Moonshot, MiniMax, Alibaba/DashScope, custom endpoints +- **Six terminal backends** — local, Docker, SSH, Modal (serverless), Daytona (serverless), Singularity (HPC) +- **Scheduled automations** via built-in cron scheduler +- **IDE integration** via ACP (Agent Communication Protocol) for VS Code, Zed, JetBrains +- **MCP integration** — both client (connect to any MCP server) and server (expose Hermes to MCP clients) +- **RL training** via Atropos environments for training the next generation of tool-calling models + +**Tech Stack:** + +- Python 3.11+ (core agent, tools, gateway, cron) +- Node.js (browser automation via agent-browser) +- SQLite with WAL mode and FTS5 (session storage, full-text search) +- OpenAI-compatible API (primary inference interface) +- Anthropic SDK (native Anthropic support) +- Rich + prompt_toolkit (CLI rendering) + +**Repository:** `github.com/NousResearch/hermes-agent` +**Version:** 0.7.0 (as of April 2026) +**License:** MIT + +--- + +## 2. Key Features Summary + +| Feature | Description | +| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Terminal UI** | Full TUI with multiline editing, slash-command autocomplete, conversation history, interrupt-and-redirect, streaming tool output | +| **Multi-Platform Messaging** | Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email, Home Assistant, DingTalk, Feishu/Lark, WeCom, Mattermost, SMS, Webhook — all from a single gateway process | +| **Learning Loop** | Agent-curated memory with periodic nudges, autonomous skill creation, skills self-improve during use, FTS5 session search with LLM summarization, Honcho dialectic user modeling | +| **Scheduled Tasks** | Built-in cron scheduler with delivery to any platform (daily reports, nightly backups, weekly audits) | +| **Subagent Delegation** | Spawn isolated subagents for parallel workstreams with restricted toolsets | +| **Execute Code** | Python scripts that call tools via RPC, collapsing multi-step pipelines into zero-context-cost turns | +| **Terminal Backends** | Local, Docker, SSH, Modal, Daytona, Singularity — run on a $5 VPS or a GPU cluster | +| **Skills** | 70+ bundled skills across 28 categories, Skills Hub for community discovery, agentskills.io compatibility | +| **Plugins** | Drop-in Python plugins with lifecycle hooks (pre_llm_call, post_llm_call, on_session_start, on_session_end) | +| **MCP** | Client (connect to MCP servers for extended tools) and Server (expose conversations to MCP clients) | +| **IDE Integration** | VS Code, Zed, JetBrains via ACP server with session management and tool streaming | +| **API Server** | OpenAI-compatible `/v1/chat/completions` endpoint for headless integrations | +| **Profiles** | Multi-instance support — each profile gets isolated config, memory, sessions, skills, gateway | +| **Security** | Command approval system, secret redaction, SSRF protection, PII redaction, injection detection, credential directory protection | +| **RL Training** | Atropos environments for batch trajectory generation and agent policy optimization | + +--- + +## 3. Installation & Getting Started + +```bash +# One-line install (Linux, macOS, WSL2) +curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash + +# After install +source ~/.bashrc # or: source ~/.zshrc +hermes # start chatting + +# Key commands +hermes model # Choose LLM provider and model +hermes tools # Configure which tools are enabled +hermes config set # Set individual config values +hermes gateway # Start the messaging gateway +hermes setup # Run the full setup wizard +hermes update # Update to latest version +hermes doctor # Diagnose any issues +``` + +**For development:** + +```bash +git clone https://github.com/NousResearch/hermes-agent.git +cd hermes-agent +curl -LsSf https://astral.sh/uv/install.sh | sh +uv venv venv --python 3.11 +source venv/bin/activate +uv pip install -e ".[all,dev]" +python -m pytest tests/ -q # ~3000 tests +``` + +--- + +## 4. Project Structure + +``` +hermes-agent/ +├── run_agent.py # AIAgent class — core conversation loop +├── model_tools.py # Tool orchestration, _discover_tools(), handle_function_call() +├── toolsets.py # Toolset definitions, _HERMES_CORE_TOOLS list +├── toolset_distributions.py # Toolset sampling distributions for RL +├── cli.py # HermesCLI class — interactive CLI orchestrator +├── hermes_state.py # SessionDB — SQLite session store (FTS5 search) +├── hermes_constants.py # Shared constants, get_hermes_home() +├── hermes_time.py # Timezone handling +├── utils.py # Shared utility functions +├── batch_runner.py # Parallel batch processing +├── trajectory_compressor.py # Trajectory compression for RL training +├── mcp_serve.py # MCP server mode entry point +├── mini_swe_runner.py # Minimal SWE benchmark runner +├── rl_cli.py # RL CLI commands +│ +├── agent/ # Agent internals +│ ├── prompt_builder.py # System prompt assembly +│ ├── context_compressor.py # Auto context compression +│ ├── prompt_caching.py # Anthropic prompt caching +│ ├── auxiliary_client.py # Auxiliary LLM client (vision, summarization) +│ ├── model_metadata.py # Model context lengths, token estimation +│ ├── models_dev.py # models.dev registry integration +│ ├── display.py # KawaiiSpinner, tool preview formatting +│ ├── skill_commands.py # Skill slash commands (shared CLI/gateway) +│ └── trajectory.py # Trajectory saving helpers +│ +├── hermes_cli/ # CLI subcommands and setup +│ ├── main.py # Entry point — all `hermes` subcommands +│ ├── config.py # DEFAULT_CONFIG, OPTIONAL_ENV_VARS, migration +│ ├── commands.py # Slash command definitions + SlashCommandCompleter +│ ├── callbacks.py # Terminal callbacks (clarify, sudo, approval) +│ ├── setup.py # Interactive setup wizard +│ ├── skin_engine.py # Skin/theme engine +│ ├── skills_config.py # `hermes skills` — skill management +│ ├── tools_config.py # `hermes tools` — tool management +│ ├── skills_hub.py # Skills Hub integration +│ ├── models.py # Model catalog, provider model lists +│ ├── model_switch.py # Shared /model switch pipeline +│ └── auth.py # Provider credential resolution +│ +├── tools/ # Tool implementations (one file per tool) +│ ├── registry.py # Central tool registry +│ ├── approval.py # Dangerous command detection +│ ├── terminal_tool.py # Terminal/shell execution +│ ├── process_registry.py # Background process management +│ ├── file_tools.py # File read/write/search/patch +│ ├── web_tools.py # Web search/extract +│ ├── browser_tool.py # Browser automation +│ ├── code_execution_tool.py # execute_code sandbox +│ ├── delegate_tool.py # Subagent delegation +│ ├── mcp_tool.py # MCP client integration +│ ├── skills_tool.py # Skill management tool +│ ├── todo_tool.py # Todo/task tracking tool +│ ├── memory_tool.py # Memory read/write tool +│ ├── tts_tool.py # Text-to-speech +│ ├── vision_tool.py # Image analysis +│ ├── image_gen_tool.py # Image generation +│ └── environments/ # Terminal backends +│ ├── base.py # BaseEnvironment ABC +│ ├── local.py # Local execution +│ ├── docker.py # Docker containers +│ ├── ssh.py # SSH remote execution +│ ├── modal.py # Modal serverless +│ ├── managed_modal.py # Nous-hosted Modal +│ ├── daytona.py # Daytona serverless +│ ├── singularity.py # Singularity HPC containers +│ └── persistent_shell.py # Persistent shell mixin +│ +├── gateway/ # Messaging platform gateway +│ ├── run.py # GatewayRunner — main message loop +│ ├── session.py # SessionStore — conversation persistence +│ ├── status.py # Gateway status, token locks +│ └── platforms/ # 16 platform adapters +│ ├── base.py # BasePlatformAdapter ABC +│ ├── telegram.py # Telegram (polling + webhook) +│ ├── discord.py # Discord +│ ├── slack.py # Slack +│ ├── whatsapp.py # WhatsApp +│ ├── matrix.py # Matrix (E2EE) +│ ├── signal.py # Signal +│ ├── email.py # Email (IMAP/SMTP) +│ ├── homeassistant.py # Home Assistant +│ ├── sms.py # SMS (Twilio) +│ ├── mattermost.py # Mattermost +│ ├── dingtalk.py # DingTalk +│ ├── feishu.py # Feishu/Lark +│ ├── wecom.py # WeCom (Enterprise WeChat) +│ ├── webhook.py # Generic webhook +│ └── api_server.py # OpenAI-compatible API server +│ +├── acp_adapter/ # ACP server (IDE integration) +│ ├── server.py # HermesACPAgent class +│ ├── session.py # SessionManager +│ ├── events.py # Streaming callbacks +│ ├── permissions.py # Approval callbacks +│ └── entry.py # Entry point +│ +├── cron/ # Scheduler +│ ├── scheduler.py # tick() — job execution engine +│ └── jobs.py # Job storage and CRUD +│ +├── plugins/ # Plugin system +│ └── memory/ # 8 memory provider plugins +│ ├── openviking/ +│ ├── mem0/ +│ ├── hindsight/ +│ ├── holographic/ +│ ├── honcho/ +│ ├── retaindb/ +│ └── byterover/ +│ +├── environments/ # RL training environments (Atropos) +│ ├── hermes_base_env.py # Abstract base RL environment +│ ├── agent_loop.py # HermesAgentLoop — rollout execution +│ ├── tool_context.py # ToolContext — sandbox for RL +│ ├── web_research_env.py # Web research tasks +│ └── agentic_opd_env.py # Observation-Prediction-Demo env +│ +├── skills/ # 70+ bundled skills across 28 categories +├── optional-skills/ # Additional optional skills +├── tests/ # ~3000 pytest tests +├── scripts/ # Install, update, packaging scripts +├── docker/ # Docker build files +├── docs/ # Documentation source (Docusaurus) +├── website/ # Landing page +├── desktop/ # Desktop app (Electron, separate repo) +├── tinker-atropos/ # RL submodule +│ +├── pyproject.toml # Python package config +├── AGENTS.md # Developer guide for AI assistants +├── RELEASE_v0.2.0.md → v0.7.0.md # Release notes +└── cli-config.yaml.example # Example config +``` + +**User config directory:** `~/.hermes/` + +``` +~/.hermes/ +├── config.yaml # User settings +├── .env # API keys and secrets +├── MEMORY.md # Persistent agent memory +├── USER.md # User profile +├── SOUL.md # Agent personality/identity +├── sessions.db # SQLite session database +├── skills/ # User-installed skills +├── skins/ # Custom CLI themes +├── plugins/ # User plugins +├── cron/ # Cron jobs and output +│ ├── jobs.json +│ └── output/ +├── cache/ # Image/audio cache +├── plans/ # Generated plans +├── profiles/ # Multi-instance profiles +└── mcp/ # MCP server configs +``` + +--- + +## 5. Core Architecture + +### 5.1 AIAgent Class (run_agent.py) + +The `AIAgent` class is the heart of the system — the core conversation loop that orchestrates LLM calls, tool execution, context management, and response delivery. + +**Constructor (~60 parameters):** + +```python +class AIAgent: + def __init__(self, + model: str = "anthropic/claude-opus-4.6", + max_iterations: int = 90, + enabled_toolsets: list = None, + disabled_toolsets: list = None, + quiet_mode: bool = False, + save_trajectories: bool = False, + platform: str = None, # "cli", "telegram", etc. + session_id: str = None, + session_db: SessionDB = None, + skip_context_files: bool = False, + skip_memory: bool = False, + base_url: str = None, + api_key: str = None, + provider: str = None, + api_mode: str = "chat_completions", # or "anthropic_messages" or "codex_responses" + tool_progress_callback = None, + stream_delta_callback = None, + thinking_callback = None, + status_callback = None, + iteration_budget: IterationBudget = None, + credential_pool = None, + checkpoints_enabled: bool = False, + # ... plus provider, routing, callback params + ) +``` + +**Main Methods:** + +| Method | Returns | Purpose | +| ------------------------------------------------------------------------------- | -------- | ---------------------------------------------------------------------------------- | +| `chat(message, stream_callback)` | `str` | Simple interface — returns final response text | +| `run_conversation(user_message, system_message, conversation_history, task_id)` | `dict` | Full interface — returns `{final_response, messages, completed, api_calls, error}` | +| `_interruptible_api_call(api_kwargs)` | Response | Runs API request in background thread with interrupt support | +| `_interruptible_streaming_api_call(api_kwargs, on_first_delta)` | Response | Streaming variant with delta callbacks | + +**The Core Agent Loop** (inside `run_conversation()`): + +```python +while api_call_count < self.max_iterations and self.iteration_budget.remaining > 0: + response = client.chat.completions.create( + model=model, messages=messages, tools=tool_schemas + ) + if response.tool_calls: + for tool_call in response.tool_calls: + result = handle_function_call(tool_call.name, tool_call.args, task_id) + messages.append(tool_result_message(result)) + api_call_count += 1 + else: + return response.content # Final text response +``` + +**Key Behaviors:** + +- **Three API modes:** `chat_completions` (OpenAI-compatible), `anthropic_messages` (Anthropic SDK), `codex_responses` (OpenAI Codex) +- **Parallel tool execution:** Independent tool calls run concurrently via ThreadPoolExecutor (unless they share file paths or are in the never-parallel list) +- **Interrupt support:** Background threads allow interrupt detection without blocking on HTTP +- **Error recovery:** Automatic fallback chain (primary → fallback model), retry with exponential backoff, context compression on token overflow +- **Budget pressure:** Warnings at 70% (caution) and 90% (urgent) of iteration budget +- **Oversized results:** Tool results >100K chars are saved to temp files with a preview +- **Stale connection detection:** 90s timeout for streaming, 60s read timeout + +**IterationBudget** (thread-safe): + +```python +class IterationBudget: + def consume() -> bool # Check and consume one iteration + def refund() # Give back iteration (for execute_code turns) + @property remaining # Remaining iterations +``` + +--- + +### 5.2 Tool Orchestration (model_tools.py) + +Bridges the agent and tool registry — handles discovery, schema generation, and dispatch. + +**Key Functions:** + +| Function | Purpose | +| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `_discover_tools()` | Imports all tool modules (each calls `registry.register()` on import) | +| `get_tool_definitions(enabled_toolsets, disabled_toolsets, quiet_mode)` | Returns OpenAI-format tool schemas filtered by toolset | +| `handle_function_call(function_name, function_args, task_id, user_task, enabled_tools)` | Main dispatcher — routes calls to registry with arg coercion | +| `coerce_tool_args(tool_name, args)` | Type coercion for LLM-generated arguments (string→int, string→bool, etc.) | + +**Tool Discovery Order:** + +1. Static tools (web_tools, terminal_tool, file_tools, browser_tool, etc.) +2. Optional tools (fal_client for image gen, honcho, etc.) — graceful fallback if missing +3. Plugin-registered tools +4. MCP server tools (dynamic, via tools/list_changed notifications) + +**Special Tool Handling:** + +- **Agent-level tools** (todo, memory, session_search, delegate_task): Intercepted by `run_agent.py` before `handle_function_call()` +- **execute_code**: Passes `enabled_tools` for sandbox tool list +- **Dynamic schema adjustments**: `browser_navigate` strips web_search reference if tools unavailable + +**Async Bridging:** + +- Persistent event loops (not `asyncio.run()`) to prevent "Event loop is closed" errors +- Main thread uses shared loop; worker threads get per-thread loops +- `_run_async()` detects running loop and spins up disposable thread if needed + +--- + +### 5.3 Toolset System (toolsets.py) + +Provides flexible tool grouping and composition. + +**Core Toolsets:** + +| Toolset | Tools Included | +| ---------------- | ------------------------------------------------------------------------------------------------ | +| `web` | web_search, web_extract, web_crawl | +| `terminal` | terminal | +| `file` | read_file, write_file, edit_file, list_files, search_files | +| `browser` | browser_navigate, browser_snapshot, browser_click, browser_type, browser_scroll, browser_extract | +| `vision` | analyze_image | +| `image_gen` | generate_image | +| `tts` | text_to_speech | +| `todo` | todo_read, todo_write | +| `memory` | memory_read, memory_write | +| `session_search` | session_search | +| `delegation` | delegate_task | +| `code_execution` | execute_code | +| `cronjob` | create_job, list_jobs, delete_job | +| `messaging` | send_message | +| `homeassistant` | ha_get_states, ha_call_service, ... | + +**Composite Toolsets:** + +- `hermes-cli` — All core tools for CLI platform +- `hermes-telegram`, `hermes-discord`, etc. — Platform-specific tool sets +- `hermes-gateway` — Union of all platform tools +- `debugging` — terminal + file + web +- `safe` — Everything except terminal + +**Resolution:** + +```python +resolve_toolset(name, visited=None) → List[str] +# Recursively resolves toolset to tool names +# Handles composition (includes) and cycle detection +# Special aliases: "all" or "*" = all tools +``` + +--- + +### 5.4 Tool Registry (tools/registry.py) + +Singleton managing all tool schemas and handlers. Circular-import safe — has no tool dependencies. + +**ToolEntry** (per-tool metadata): + +```python +@dataclass(slots=True) +class ToolEntry: + name: str + toolset: str + schema: dict # OpenAI-format tool definition + handler: Callable # Sync or async handler function + check_fn: Callable # Returns True if tool is available + requires_env: list # Required environment variables + is_async: bool + description: str + emoji: str +``` + +**Key Methods:** + +```python +registry.register(name, toolset, schema, handler, check_fn, requires_env) +registry.get_definitions(tool_names, quiet) # Returns filtered schemas +registry.dispatch(name, args, **kwargs) # Execute with async bridging +registry.deregister(name) # Remove (for MCP tool refresh) +registry.check_tool_availability() # Returns (available, unavailable) +``` + +--- + +### 5.5 Session Database (hermes_state.py) + +SQLite-based persistent session storage with FTS5 full-text search. + +**Schema (v6):** + +```sql +-- Sessions table +sessions ( + id TEXT PRIMARY KEY, + source TEXT, user_id TEXT, model TEXT, model_config TEXT, + system_prompt TEXT, parent_session_id TEXT, + started_at TEXT, ended_at TEXT, end_reason TEXT, + message_count INTEGER, tool_call_count INTEGER, + input_tokens INTEGER, output_tokens INTEGER, + cache_read_tokens INTEGER, cache_write_tokens INTEGER, reasoning_tokens INTEGER, + estimated_cost_usd REAL, actual_cost_usd REAL, + title TEXT -- UNIQUE INDEX +) + +-- Messages table +messages ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + session_id TEXT, role TEXT, content TEXT, + tool_call_id TEXT, tool_calls TEXT, -- JSON + tool_name TEXT, timestamp TEXT, + token_count INTEGER, finish_reason TEXT, + reasoning TEXT, reasoning_details TEXT, codex_reasoning_items TEXT +) + +-- FTS5 virtual table (auto-synced via triggers) +messages_fts (content) +``` + +**Concurrency Model:** + +- WAL (Write-Ahead Logging) for concurrent readers + single writer +- `BEGIN IMMEDIATE` for write transactions (lock at start, not commit) +- Jitter retry on lock: 20-150ms random backoff, max 15 retries +- Periodic WAL checkpoint every 50 writes + +**Key Operations:** + +- `create_session()`, `end_session()`, `reopen_session()` +- `add_message()`, `get_messages()` +- `search_sessions(query)` — FTS5 full-text search +- `update_token_counts()` — Supports both incremental (CLI) and absolute (gateway) modes + +--- + +### 5.6 Constants & Home Directory (hermes_constants.py) + +Import-safe constants module with no circular dependencies. + +```python +get_hermes_home() → Path # HERMES_HOME env var or ~/.hermes +display_hermes_home() → str # User-friendly display: "~/.hermes" +get_optional_skills_dir() → Path # HERMES_OPTIONAL_SKILLS env var +parse_reasoning_effort(str) → Dict # "high" → {"enabled": True, "effort": "high"} + +# Key constants +OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1" +NOUS_API_BASE_URL = "https://inference-api.nousresearch.com/v1" +AI_GATEWAY_BASE_URL = "https://ai-gateway.vercel.sh/v1" +VALID_REASONING_EFFORTS = ("xhigh", "high", "medium", "low", "minimal") +``` + +--- + +## 6. CLI System + +### 6.1 Interactive CLI (cli.py) + +The `HermesCLI` class provides the interactive terminal interface. + +**Features:** + +- **Rich** for banner/panels, **prompt_toolkit** for input with autocomplete +- **KawaiiSpinner** — animated faces during API calls, `┊` activity feed for tool results +- Multiline editing with Shift+Enter +- Slash-command autocomplete +- Session history with up/down arrow navigation +- Clipboard image paste (Alt+V / Ctrl+V) +- Status bar showing model, provider, and token counts +- Inline diff previews for file write/patch operations + +**Configuration Loading:** + +```python +load_cli_config() → dict +# Loads from ~/.hermes/config.yaml (or ./cli-config.yaml fallback) +# Merges with hardcoded defaults +# Expands ${ENV_VAR} references +# Maps terminal config → env vars +``` + +--- + +### 6.2 CLI Entry Point (hermes_cli/main.py) + +All `hermes` subcommands are dispatched from here: + +``` +hermes # Default: interactive chat +hermes chat # Explicit interactive mode +hermes gateway start|stop|status|install|uninstall +hermes setup # Setup wizard +hermes model # Select model/provider +hermes tools # Configure tools +hermes skills # Manage skills +hermes config set|get # Direct config manipulation +hermes cron list|delete # Cron job management +hermes doctor # Diagnose issues +hermes sessions browse # Session picker +hermes profile create|list|switch|delete|export|import +hermes mcp serve|add|remove # MCP management +hermes acp # Start ACP server +hermes update|uninstall|version +``` + +**Profile System:** + +- `_apply_profile_override()` runs BEFORE any imports to set `HERMES_HOME` +- Pre-parses `--profile/-p` from argv +- Allows fully isolated agent instances with separate config, memory, sessions, skills + +--- + +### 6.3 Configuration System (hermes_cli/config.py) + +**Key Configuration Sections:** + +```yaml +model: "anthropic/claude-opus-4.6" # or dict with provider/base_url/api_key +providers: {} # Provider-specific configs +fallback_providers: [] # Ordered failover list +credential_pool: {} # Multiple API keys per provider + +agent: + max_turns: 90 + gateway_timeout: 1800 + tool_use_enforcement: "auto" + +terminal: + backend: "local" # local|docker|modal|daytona|ssh|singularity + timeout: 180 + persistent_shell: true + docker_image: "nikolaik/python-nodejs:..." + +compression: + enabled: true + threshold: 0.50 # Compress when 50% of context used + target_ratio: 0.20 # Summary = 20% of compressed content + protect_last_n: 20 + +auxiliary: + vision: { provider, model } + web_extract: { provider, model } + compression: { provider, model } + +memory: + memory_enabled: true + provider: "" # "" | "honcho" | "mem0" | etc. + memory_char_limit: 2200 + +display: + personality: "kawaii" + show_reasoning: false + inline_diffs: true + skin: "default" + streaming: true + +tts: + provider: "edge" # edge|elevenlabs|openai|neutts + +stt: + enabled: true + provider: "local" # local|groq|openai + +privacy: + redact_pii: false + +mcp_servers: {} # MCP server configurations + +skills: + external_dirs: [] # Additional skill directories + +approvals: + mode: "smart" # smart|always|off +``` + +**Config Files:** + +- `~/.hermes/config.yaml` — User settings (authoritative) +- `~/.hermes/.env` — API keys and secrets +- Config version migration system (currently v5) + +--- + +### 6.4 Slash Command Registry (hermes_cli/commands.py) + +All slash commands defined centrally in `COMMAND_REGISTRY`: + +```python +CommandDef(name, description, category, aliases, args_hint, cli_only, gateway_only) +``` + +**Derived automatically by:** + +- CLI `process_command()` — dispatch on canonical name +- Gateway dispatch + help +- Telegram BotCommand menu +- Slack `/hermes` subcommands +- Autocomplete + help text + +**Key Commands:** + +| Command | Aliases | Description | +| -------------- | ---------- | ----------------------------- | +| `/new` | `/reset` | Start fresh conversation | +| `/model` | | Show/switch model | +| `/personality` | | Set agent personality | +| `/retry` | | Retry last turn | +| `/undo` | | Remove last turn | +| `/compress` | `/compact` | Compress context | +| `/usage` | `/cost` | Show token usage | +| `/insights` | | Usage analytics | +| `/skills` | | Browse/install skills | +| `/background` | `/bg` | Manage background processes | +| `/plan` | | Generate implementation plan | +| `/rollback` | | Restore filesystem checkpoint | +| `/verbose` | | Toggle debug output | +| `/reasoning` | | Set reasoning effort | +| `/yolo` | | Toggle approval bypass | +| `/btw` | | Ephemeral side question | +| `/stop` | | Kill current agent run | +| `/queue` | | Queue next prompt | +| `/browser` | | Interactive browser session | +| `/history` | `/resume` | Session browser | +| `/skin` | | Switch CLI theme | + +--- + +### 6.5 Setup Wizard (hermes_cli/setup.py) + +Modular interactive wizard with independent sections: + +1. **Model & Provider** — Select AI provider, enter API keys, choose model +2. **Terminal Backend** — Choose execution environment +3. **Agent Settings** — Max iterations, compression, session policies +4. **Messaging Platforms** — Configure Telegram, Discord, Slack, etc. +5. **Tools** — TTS, STT, web search, image generation, browser + +Features: + +- Live credential validation +- Real-time model list fetching from provider APIs +- Automatic OpenClaw migration detection +- Atomic config file writes + +--- + +### 6.6 Model Catalog (hermes_cli/models.py) + +Provider-specific model lists: + +```python +_PROVIDER_MODELS = { + "nous": ["anthropic/claude-opus-4.6", "anthropic/claude-sonnet-4.6", ...], # 25+ + "openrouter": ["anthropic/claude-opus-4.6", "google/gemini-3-flash", ...], # 30+ + "anthropic": ["claude-opus-4-6", "claude-sonnet-4-6", ...], + "openai": ["gpt-5", "gpt-5.4-mini", "gpt-4.1", "gpt-4o", ...], + "copilot": ["gpt-5.4", "gpt-5.4-mini", "gpt-5.3-codex", ...], + "huggingface": [...], + "minimax": [...], + "kimi-coding": [...], + "alibaba": [...], + "deepseek": [...], + # ... more providers +} +``` + +Features: + +- Dynamic fetching via provider `/models` endpoints +- Curated lists used when live probe returns fewer models +- Fuzzy matching for typo correction +- Validation against provider catalog + +--- + +### 6.7 Skin/Theme Engine (hermes_cli/skin_engine.py) + +Data-driven CLI visual customization — no code changes needed. + +**Customizable Elements:** + +| Element | Key | Used By | +| -------------------------------- | ------------------------ | ----------------- | +| Banner border/title/accent | `colors.*` | banner.py | +| Response box border | `colors.response_border` | cli.py | +| Spinner faces (waiting/thinking) | `spinner.*` | display.py | +| Spinner verbs/wings | `spinner.*` | display.py | +| Tool output prefix | `tool_prefix` | display.py | +| Per-tool emojis | `tool_emojis` | display.py | +| Agent name/welcome/prompt | `branding.*` | banner.py, cli.py | + +**Built-in Skins:** default, ares, mono, slate, poseidon, sisyphus, charizard + +**User Skins:** Drop `~/.hermes/skins/.yaml` and activate with `/skin ` + +--- + +## 7. Tool System + +### 7.1 Terminal Tool (tools/terminal_tool.py) + +Shell command execution across multiple backends. + +```python +def terminal_tool( + command: str, + background: bool = False, + timeout: Optional[int] = None, + task_id: Optional[str] = None, + force: bool = False, # Skip approval for dangerous commands + workdir: Optional[str] = None, + check_interval: Optional[int] = None, # Background task polling + pty: bool = False, +) -> str # JSON result +``` + +**Features:** + +- Multi-backend: Selects based on `TERMINAL_ENV` (local/docker/ssh/modal/daytona/singularity) +- Per-task_id sandboxes with thread-safe creation locks +- Dangerous command routing through approval system +- Background task support with file-based IPC +- Interrupt handling — polls `is_interrupted()` during execution +- Auto-cleanup daemon thread for idle environments (>300s) +- Disk usage warnings at configurable threshold + +--- + +### 7.2 File Tools (tools/file_tools.py) + +Safe file operations with size guards and sensitive path protection. + +- `read_file_tool(path, offset, limit)` — Read with pagination (default 100K char limit) +- `write_file_tool(path, content)` — Write with approval for sensitive paths +- `edit_file_tool(path, old_text, new_text)` — String replacement editing +- `list_files_tool(path)` — Directory listing +- `search_files_tool(pattern, path)` — Glob/regex file search + +**Safety:** + +- Device path blocklist (`/dev/zero`, `/dev/stdin`, etc.) +- Read dedup tracking — returns stub on re-read if mtime unchanged +- Sensitive path blocking: `/etc/`, `/boot/`, `~/.ssh` without approval +- Prompt injection protection for known dangerous paths + +--- + +### 7.3 Web Tools (tools/web_tools.py) + +Web search and content extraction. + +- `web_search_tool(query, limit)` — Search via configurable backend +- `web_extract_tool(urls, format)` — Extract content from URLs +- `web_crawl_tool(url, instructions)` — LLM-guided web crawling + +**Backends:** Firecrawl, Parallel Web, Tavily, Exa, DuckDuckGo + +- Fallback detection by highest-priority available API key +- LLM processing via auxiliary client (Gemini 3 Flash) for intelligent extraction +- SSRF protection and URL safety checks + +--- + +### 7.4 Browser Tool (tools/browser_tool.py) + +Headless browser automation with accessibility tree. + +```python +browser_navigate(url, task_id) → str +browser_snapshot(task_id, max_chars) → str +browser_click(ref, task_id) → str # Element refs like @e1, @e2 +browser_type(ref, text, task_id) → str +browser_scroll(ref, direction, task_id) → str +browser_extract(task, max_chars, task_id) → str +``` + +**Backends:** + +- **Local:** Headless Chromium via `agent-browser` CLI +- **Cloud:** Browserbase (stealth, proxies, CAPTCHA solving) +- **Camofox:** Anti-detection browser using Camoufox + +**Features:** + +- Accessibility tree for text-based snapshots (no vision required) +- Session isolation per task_id with inactivity cleanup +- API key detection in URLs (prevents exfiltration) +- SSRF protection for private/internal addresses + +--- + +### 7.5 Delegate Tool (tools/delegate_tool.py) + +Spawn isolated subagents for parallel workstreams. + +```python +def delegate_task( + goal: str, + context: str = None, + toolsets: List[str] = None, # Default: ["terminal", "file", "web"] + tasks: List[Dict] = None, # Batch mode: up to 3 concurrent + max_iterations: int = 50, + parent_agent = None, +) → str +``` + +**Isolation:** + +- Fresh conversation (no parent history) +- Own task_id (separate terminal session, file ops) +- Restricted toolset (configurable, blocked tools always stripped) +- Focused system prompt from goal + context +- Parent only sees delegation call and summary result + +**Blocked Tools:** delegate_task, clarify, memory, send_message, execute_code (no recursion, no user interaction) + +**Constraints:** MAX_DEPTH=2, MAX_CONCURRENT_CHILDREN=3 + +--- + +### 7.6 MCP Tool (tools/mcp_tool.py) + +Model Context Protocol client integration. + +**Configuration (config.yaml):** + +```yaml +mcp_servers: + filesystem: + command: "npx" + args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"] + timeout: 120 + remote_api: + url: "https://my-mcp-server.example.com/mcp" + headers: + Authorization: "Bearer sk-..." + sampling: + enabled: true + model: "gemini-3-flash" +``` + +**Features:** + +- **Transports:** Stdio (local processes) and HTTP/StreamableHTTP (remote) +- **Dynamic tool discovery:** Listens for `tools/list_changed` notifications +- **Sampling support:** MCP servers can request LLM completions +- **Automatic reconnection** with exponential backoff (5 retries) +- Dedicated background event loop in daemon thread +- Thread-safe via lock protecting server dict + +--- + +### 7.7 Approval System (tools/approval.py) + +Dangerous command detection and approval flow. + +```python +detect_dangerous_command(command: str) → (is_dangerous, pattern_key, description) +``` + +**106 patterns covering:** + +- Destructive operations (`rm -r /`, `mkfs`, `dd if=`) +- Privilege escalation (`chmod 777`, `chown -R root`) +- SQL injection (`DROP TABLE`, `DELETE FROM` without WHERE) +- System targeting (`/etc/` writes, `systemctl stop`, fork bombs) +- Shell injection (pipe to sh, wget to sh, process substitution) +- Network exfiltration (curl with embedded API keys) +- Secret access (`cat ~/.env`, `cat ~/.netrc`) + +**Normalization:** Strips ANSI escapes, null bytes, normalizes Unicode + +**Approval Modes:** + +- `smart` — Learns which commands are safe based on user decisions +- `always` — Always ask for dangerous commands +- `off` — Never ask (or `/yolo` toggle) + +--- + +### 7.8 Terminal Backends (tools/environments/) + +| Backend | File | Features | +| ----------------- | ------------------ | ------------------------------------------------------------------------------ | +| **Local** | `local.py` | Direct execution, interrupt support, non-blocking I/O, persistent shell | +| **Docker** | `docker.py` | Sandboxed containers, cap-drop ALL, no-new-privileges, PID limits, bind mounts | +| **SSH** | `ssh.py` | Remote execution via ControlMaster, persistent shell mixin | +| **Modal** | `modal.py` | Native Modal SDK `Sandbox.create()`/`Sandbox.exec()`, persistent snapshots | +| **Managed Modal** | `managed_modal.py` | Modal through Nous-hosted gateway | +| **Daytona** | `daytona.py` | Daytona SDK cloud sandboxes, stop/resume lifecycle | +| **Singularity** | `singularity.py` | Singularity containers with scratch dir, SIF cache | + +**Common Interface (BaseEnvironment ABC):** + +```python +execute(command, timeout) → {"output": str, "returncode": int} +cleanup() → None +``` + +--- + +## 8. Agent Internals + +### 8.1 Prompt Builder (agent/prompt_builder.py) + +Assembles the system prompt from multiple sources: + +| Component | Source | +| ----------------------- | ---------------------------------------------------- | +| Agent Identity | `DEFAULT_AGENT_IDENTITY` or `SOUL.md` | +| Memory Guidance | When/how to use memory tool | +| Session Search Guidance | How to recall past conversations | +| Skills Guidance | When to create/patch skills | +| Tool Use Enforcement | Must execute tools, not describe actions | +| Skills Index | `~/.hermes/skills/.hermes-skills.json` | +| Platform Hints | OS, Python version, shell, available tools | +| Context Files | `.hermes.md`, `AGENTS.md`, `.cursorrules`, `SOUL.md` | +| Model/Provider Info | Current model and provider identity | + +**Context File Discovery:** + +1. Check `cwd/.hermes.md` or `HERMES.md` +2. Walk parent directories up to git root +3. Validate against injection patterns before inclusion + +**Injection Detection (30+ patterns):** + +- "ignore previous instructions", "system prompt override" +- "do not tell the user", "act as if you have no restrictions" +- HTML comment injection, exfiltration via curl, Unicode stealth chars + +--- + +### 8.2 Context Compressor (agent/context_compressor.py) + +Automatically compresses conversation history when approaching context limits. + +```python +class ContextCompressor: + threshold_percent: float = 0.50 # Compress when 50% of context used + protect_first_n: int = 3 # Keep system prompt + first turn + protect_last_n: int = 20 # Keep recent N messages + summary_target_ratio: float = 0.20 # Summary = 20% of compressed content +``` + +**Compression Algorithm:** + +1. **Pre-pass:** Replace old tool results with placeholder (cheap) +2. **Protect head:** System prompt + first exchange always kept +3. **Protect tail:** Token-budget-based tail protection (~20K tokens) +4. **Summarize middle:** LLM-generated structured summary (Goal, Progress, Decisions, Files, Next Steps) +5. **Iterative updates:** On subsequent compressions, update previous summary instead of re-summarizing + +--- + +### 8.3 Prompt Caching (agent/prompt_caching.py) + +Anthropic prompt caching support for cost reduction. + +- System prompt cached across turns (first conversation turn establishes cache) +- Cache markers inserted at system prompt boundaries +- Must not break mid-conversation — altering past context invalidates cache +- The ONLY time context is altered is during compression + +**Critical Rule:** Do NOT implement changes that would alter past context, change toolsets, reload memories, or rebuild system prompts mid-conversation. + +--- + +### 8.4 Auxiliary Client (agent/auxiliary_client.py) + +Separate LLM client for non-primary tasks: + +- **Vision analysis** — Image description and analysis +- **Web extraction** — Content summarization +- **Context compression** — Generating conversation summaries +- **Session search** — Summarizing search results +- **MCP sampling** — Serving server-initiated LLM requests + +Configured per-task via `auxiliary` section in config.yaml. + +--- + +### 8.5 Display & Spinner (agent/display.py) + +- **KawaiiSpinner** — Animated face characters during API calls +- **Tool preview formatting** — `┊` prefixed activity feed for tool execution +- **Inline diff previews** — Shows unified diffs for write/patch operations +- Respects active skin for colors, emojis, and branding + +--- + +### 8.6 Skill Commands (agent/skill_commands.py) + +Shared skill invocation for CLI and gateway: + +- Skills loaded from `~/.hermes/skills/` and external directories +- Injected as **user message** (not system prompt) to preserve prompt caching +- `/plan` command generates implementation plans stored in `.hermes/plans/` +- Skill content includes setup instructions, tool options, usage examples + +--- + +## 9. Messaging Gateway + +### 9.1 GatewayRunner (gateway/run.py) + +Main controller managing all platform adapters and routing messages. + +**Key Attributes:** + +- `adapters: Dict[Platform, BasePlatformAdapter]` — Active platform instances +- `session_store: SessionStore` — Conversation persistence +- `_running_agents: Dict[str, AIAgent]` — Per-session cached agents (preserves prompt caching) +- `_pending_approvals: Dict[str, Dict]` — Dangerous command approval tracking +- `pairing_store: PairingStore` — DM code-based user authorization + +**Message Flow:** + +1. Platform adapter queues `MessageEvent` +2. GatewayRunner dequeues, calls `_handle_message()` +3. Slash command? → dispatch to handler +4. Regular message? → `_handle_message_with_agent()` (async, with per-session locking) +5. Response delivered back via platform adapter + +**Features:** + +- Agent caching per session (preserves Anthropic prompt cache across turns) +- Session reset policies (inactivity timeout, hard reset) +- Per-session model overrides via `/model` +- Background memory flush on session expiry +- Approval routing (`/approve`, `/deny`) with interactive buttons (Discord) +- 30+ slash command handlers + +--- + +### 9.2 Session Store (gateway/session.py) + +**SessionSource** — Where a message originated (platform, chat_id, user info) +**SessionContext** — Full context for system prompt injection (platforms, home channels, metadata) +**SessionStore** — Loads/saves conversation transcripts as JSON files + +``` +~/.hermes/sessions/{session_key}.json +Format: [{role, content, timestamp}, ...] +``` + +**Features:** + +- Session key computed from platform + chat_id + thread_id (deterministic hash) +- Inactivity timeout for session resets +- PII redaction (phone numbers hashed) +- Survives gateway restarts + +--- + +### 9.3 Platform Adapters (gateway/platforms/) + +**16 adapters sharing `BasePlatformAdapter` interface:** + +| Platform | Key Features | +| ------------------ | -------------------------------------------------------------------------------------------------------- | +| **Telegram** | Polling + webhook mode, media handling, inline keyboards, forum topic isolation, group mention gating | +| **Discord** | Server channels, threads, reactions (processing/done/error), button-based approval, @mention requirement | +| **Slack** | Multi-workspace OAuth, thread handling, app_mention, `/hermes` subcommands | +| **WhatsApp** | Group & DM support, media captions, LID↔phone alias resolution | +| **Matrix** | E2EE room encryption, threaded messages, trusted device flow, native voice messages | +| **Signal** | Encrypted DMs, group membership, SSE keepalive, phone URL encoding | +| **Email** | IMAP/SMTP, multi-recipient, skip_attachments option | +| **Home Assistant** | REST tools + WebSocket, service discovery, smart home automation | +| **SMS** | Twilio integration | +| **Mattermost** | Self-hosted Slack alternative, configurable mention behavior | +| **DingTalk** | Alibaba enterprise messaging | +| **Feishu/Lark** | Enterprise messaging, message cards, approval workflows | +| **WeCom** | Enterprise WeChat, department management | +| **Webhook** | Generic HTTP POST for custom integrations | +| **API Server** | OpenAI-compatible `/v1/chat/completions` endpoint | + +**Common Features:** + +- Image/audio caching for vision and STT tools +- Rate limiting with exponential backoff +- Session routing with authorization rules +- Cross-platform conversation continuity + +--- + +## 10. Cron Scheduling + +Built-in job scheduler running in the gateway background thread. + +**Schedule Types:** + +- `"once in 5m"` — One-shot after duration +- `"every 30m"` — Recurring interval +- `"0 9 * * *"` — Standard cron expression +- `"2026-04-06T14:00"` — Absolute datetime + +**Job Storage:** `~/.hermes/cron/jobs.json` + +**Execution Flow:** + +1. `tick()` called every 60s from gateway background thread +2. Fetch due jobs past `next_run_at` +3. Spawn `hermes` CLI subprocess with job prompt + skills +4. Capture output → save to `~/.hermes/cron/output/{job_id}/{timestamp}.md` +5. Deliver to target platform (or stay local) + +**Delivery Targets:** + +- `"local"` — Output saved locally only +- `"origin"` — Send to originating chat +- `"telegram:"` — Explicit platform/chat routing +- `[SILENT]` prefix — Suppress delivery but keep logs + +**Grace Windows:** Based on schedule frequency (120s–2hrs) to handle missed jobs + +--- + +## 11. Skills System + +**Skills are composable, agent-invokable knowledge units.** + +**Structure:** + +``` +skills/ +├── creative/ # ASCII art, diagrams, music +├── software-development/ # Debugging, testing, docs +├── github/ # Codebase inspection, PR workflow +├── research/ # Literature, web scraping +├── productivity/ # Task management +├── media/ # Image, video, audio processing +├── mlops/ # ML experiment tracking +├── autonomous-ai-agents/ # Multi-agent orchestration +└── [20+ more categories] +``` + +**Per-Skill Structure:** + +``` +skill-name/ +├── SKILL.md # Metadata (YAML frontmatter) + implementation instructions +└── [sub-skills]/ +``` + +**SKILL.md Example:** + +```yaml +--- +name: ascii-art +description: Generate ASCII art using multiple tools +version: 4.0.0 +dependencies: [] +metadata: + hermes: + tags: [ASCII, Art, Banners, Creative] + related_skills: [excalidraw] +--- +[Implementation instructions, tool options, examples...] +``` + +**Discovery:** + +- Auto-discovered from `~/.hermes/skills/` + external dirs +- Skills index built at startup (`.hermes-skills.json`) +- Loaded as user messages to preserve prompt caching +- Per-platform enable/disable via `hermes skills` +- Skills Hub (`agentskills.io`) for community sharing + +--- + +## 12. Plugin System + +Drop Python files into `~/.hermes/plugins/` to extend Hermes. + +**Plugin Capabilities:** + +- Register custom tools and toolsets +- Inject messages into conversation +- Lifecycle hooks: `pre_llm_call`, `post_llm_call`, `on_session_start`, `on_session_end` +- Enable/disable via `hermes plugins enable/disable ` + +**Memory Provider Plugins (plugins/memory/):** +8 implementations: openviking, mem0, hindsight, holographic, honcho, retaindb, byterover + +Each implements: + +```python +class MemoryProvider: + def is_available() → bool + def store(key, value) + def retrieve(query) → list + def clear() +``` + +--- + +## 13. Memory System + +Hermes has a pluggable memory provider interface: + +**Built-in Memory:** + +- `MEMORY.md` — Markdown file with persistent facts +- `USER.md` — User profile information +- Memory read/write tools called by agent during conversation +- Periodic nudges prompt agent to save important information +- FTS5 session search for cross-session recall + +**Honcho Integration:** + +- AI-native dialectic user modeling +- Async memory writes +- Profile-scoped host/peer resolution +- Multi-user isolation in gateway mode + +**Configuration:** + +```yaml +memory: + memory_enabled: true + provider: "" # "" for built-in, "honcho", "mem0", etc. + memory_char_limit: 2200 +``` + +--- + +## 14. ACP Server (IDE Integration) + +Agent Communication Protocol server for VS Code, Zed, JetBrains. + +**Entry:** `hermes acp` → `acp_adapter/server.py` + +**HermesACPAgent Class:** + +```python +initialize() # Handshake with IDE client +authenticate(method_id) # Validate credentials +new_session(cwd, mcp_servers) # Create isolated session +load_session(session_id) # Resume session +fork_session(session_id) # Branch for parallel work +list_sessions() # Browse all sessions +cancel(session_id) # Interrupt running agent +``` + +**Features:** + +- Slash command support (`/model`, `/tools`, `/reset`, `/compact`) +- Client-provided MCP servers (IDE's MCP ecosystem flows into agent) +- Streaming callbacks for messages, thinking, tool progress +- Dangerous command approval via IDE UI + +--- + +## 15. API Server + +OpenAI-compatible API endpoint for headless integrations (e.g., Open WebUI). + +**Endpoint:** `POST /v1/chat/completions` + +**Features:** + +- `X-Hermes-Session-Id` header for persistent sessions +- Tool progress streaming via SSE events +- `/api/jobs` REST API for cron management +- Input limits, field whitelists, SQLite-backed response persistence +- CORS origin protection + +--- + +## 16. MCP Server Mode + +Expose Hermes conversations to MCP-compatible clients. + +**Entry:** `hermes mcp serve` + +**Features:** + +- Browse conversations and sessions +- Read messages and search across sessions +- Manage attachments +- Supports both stdio and Streamable HTTP transports +- Compatible with Claude Desktop, Cursor, VS Code, etc. + +--- + +## 17. RL Training Environments + +Atropos-based RL training framework for agent policy optimization. + +**Base Class:** `HermesAgentBaseEnv` (extends `atroposlib.BaseEnv`) + +**Configuration:** + +```python +HermesAgentEnvConfig: + enabled_toolsets: ["terminal", "file", "web"] + max_agent_turns: 30 + agent_temperature: 1.0 + terminal_backend: "local" # or docker/modal for isolation + dataset_name: str +``` + +**Subclass Requirements:** + +- `setup()` — Load dataset +- `get_next_item()` — Return next task +- `format_prompt()` — Convert item → user message +- `compute_reward()` — Score rollout +- `evaluate()` — Periodic eval on test set + +**Example Environments:** + +- `web_research_env.py` — Web research tasks +- `agentic_opd_env.py` — Observation-Prediction-Demonstration +- `hermes_swe_env.py` — Software engineering tasks + +**Supporting:** + +- `HermesAgentLoop` — Orchestrates step-by-step rollouts +- `ToolContext` — Sandbox for tool execution, records side effects +- `trajectory_compressor.py` — Compresses trajectories for training data + +--- + +## 18. Profiles (Multi-Instance) + +Run multiple fully isolated Hermes instances from the same installation. + +**Commands:** + +```bash +hermes profile create +hermes profile list +hermes profile switch +hermes profile delete +hermes profile export +hermes profile import +hermes -p # Launch with specific profile +``` + +**Each profile gets:** + +- Own `HERMES_HOME` directory (`~/.hermes/profiles//`) +- Own config.yaml, .env, memory, sessions, skills, gateway service +- Token-lock isolation (prevents two profiles sharing bot credentials) + +**Implementation:** + +- `_apply_profile_override()` sets `HERMES_HOME` env var before any imports +- All 119+ references to `get_hermes_home()` automatically scope to active profile +- Profile operations are HOME-anchored (`~/.hermes/profiles/`) for cross-profile visibility + +--- + +## 19. Security Model + +### Command Approval + +- 106 dangerous command patterns (destructive, privilege escalation, SQL, exfiltration) +- Smart approval mode learns from user decisions +- Session-based approval state (per-session tracking) +- `--fuck-it-ship-it` flag or `/yolo` toggle to bypass + +### Secret Protection + +- Secret redaction in logs and tool output (API keys, tokens) +- Browser URL scanning for embedded secrets +- LLM response scanning for exfiltration attempts +- Credential directory protection (`.docker`, `.azure`, `.config/gh`, `.ssh`) +- `execute_code` sandbox output redaction + +### Input Safety + +- Prompt injection detection in context files (30+ patterns) +- Unicode stealth character detection +- ANSI escape sequence normalization +- Device path blocklist for file reads +- SSRF protection in web/browser tools + +### PII Handling + +- Optional `privacy.redact_pii` mode +- Phone number hashing in session metadata +- Sender ID anonymization in gateway logs + +### Supply Chain + +- All dependency version ranges pinned +- `uv.lock` with hashes for reproducible builds +- CI workflow scanning PRs for supply chain attack patterns +- Compromised `litellm` dependency removed + +--- + +## 20. Provider & Model System + +### Supported Providers + +| Provider | API Mode | Key Features | +| --------------------- | ------------------ | ----------------------------------------- | +| **Nous Portal** | chat_completions | 400+ models, first-class setup | +| **OpenRouter** | chat_completions | 200+ models, provider routing preferences | +| **Anthropic** | anthropic_messages | Native prompt caching, OAuth PKCE | +| **OpenAI** | chat_completions | GPT-5, Codex | +| **GitHub Copilot** | chat_completions | OAuth, 400k context | +| **Hugging Face** | chat_completions | Curated agentic model picker | +| **Google (Direct)** | chat_completions | Full Gemini context lengths | +| **z.ai/GLM** | chat_completions | Chinese LLM models | +| **Kimi/Moonshot** | chat_completions | Kimi Code API | +| **MiniMax** | anthropic_messages | M2.7 models | +| **Alibaba/DashScope** | chat_completions | Qwen models | +| **DeepSeek** | chat_completions | V3 models | +| **Vercel AI Gateway** | chat_completions | Routing through Vercel | +| **Kilo Code** | chat_completions | Custom provider | +| **OpenCode Zen/Go** | chat_completions | Custom provider | +| **Custom Endpoint** | configurable | Any OpenAI-compatible API | + +### Provider Features + +- **Ordered fallback chain:** Auto-failover across configured providers on errors +- **Credential pools:** Multiple API keys per provider with `least_used` rotation +- **Per-turn primary restoration:** After fallback use, restore primary on next turn +- **Context length detection:** models.dev integration, provider-aware resolution, `/v1/props` for llama.cpp +- **Rate limit handling:** User-friendly 429 messages with Retry-After countdown +- **Anthropic long-context tier:** Auto-reduces to 200k on tier limit 429 + +--- + +## 21. Streaming & Reasoning + +### Streaming + +- Enabled by default in CLI and gateway +- Token-by-token delivery via `stream_delta_callback` +- Proper spinner/tool progress display during streaming +- Stale connection detection (90s timeout) +- Fallback to non-streaming if provider doesn't support it + +### Reasoning/Thinking + +- Configurable effort: xhigh, high, medium, low, minimal, none +- `/reasoning` command to toggle display and effort level +- Anthropic thinking blocks preserved across multi-turn conversations +- `` tag extraction for compatible models +- Reasoning persisted to SessionDB (v6 schema) for cross-session continuity +- Thinking-budget exhaustion detection to skip useless continuation retries + +--- + +## 22. Release History + +### v0.2.0 (March 12, 2026) — The Foundation Release + +> 216 merged PRs from 63 contributors, resolving 119 issues + +- Multi-platform messaging gateway (Telegram, Discord, Slack, WhatsApp, Signal, Email, Home Assistant) +- MCP client support (stdio + HTTP) +- 70+ skills across 15+ categories +- Centralized provider router (`call_llm()` API) +- ACP server for IDE integration +- CLI skin/theme engine +- Git worktree isolation (`hermes -w`) +- Filesystem checkpoints and `/rollback` +- 3,289 tests + +### v0.3.0 (March 17, 2026) — Streaming, Plugins, Providers + +- Unified streaming infrastructure (token-by-token delivery) +- First-class plugin architecture (`~/.hermes/plugins/`) +- Native Anthropic provider with prompt caching +- Smart approvals + `/stop` command +- Honcho memory integration +- Voice mode (CLI push-to-talk, Telegram/Discord voice) +- Concurrent tool execution (ThreadPoolExecutor) +- PII redaction +- `/browser connect` via Chrome DevTools Protocol +- Vercel AI Gateway provider +- Persistent shell mode for local/SSH backends +- Agentic On-Policy Distillation RL environment + +### v0.4.0 (March 23, 2026) — Platform Expansion + +- OpenAI-compatible API server (`/v1/chat/completions`) +- 6 new messaging adapters (Signal rewrite, DingTalk, SMS, Mattermost, Matrix, Webhook) +- `@file` and `@url` context references with tab completion +- 4 new providers (GitHub Copilot, Alibaba, Kilo Code, OpenCode) +- MCP server management CLI with OAuth 2.1 PKCE +- Gateway prompt caching (dramatic cost reduction) +- Context compression overhaul (structured summaries, iterative updates) +- Streaming enabled by default +- 200+ bug fixes + +### v0.5.0 (March 28, 2026) — Hardening + +- Nous Portal expanded to 400+ models +- Hugging Face as first-class provider +- Telegram Private Chat Topics +- Native Modal SDK backend (replaced swe-rex) +- Plugin lifecycle hooks activated +- GPT model tool-use enforcement +- Nix flake with NixOS module +- Supply chain hardening (removed litellm, pinned deps, CI scanning) +- Anthropic per-model output limits (128K for Opus 4.6) + +### v0.6.0 (March 30, 2026) — Multi-Instance + +> 95 PRs and 16 resolved issues in 2 days + +- Profiles for multiple isolated agent instances +- MCP Server Mode (`hermes mcp serve`) +- Official Docker container +- Ordered fallback provider chain +- Feishu/Lark platform adapter +- WeCom (Enterprise WeChat) adapter +- Slack multi-workspace OAuth +- Telegram webhook mode + group controls +- Exa search backend +- Skills & credentials on remote backends + +### v0.7.0 (April 3, 2026) — Resilience + +> 168 PRs and 46 resolved issues + +- Pluggable memory provider interface (ABC-based plugin system) +- Same-provider credential pools with automatic rotation +- Camofox anti-detection browser backend +- Inline diff previews in tool activity feed +- API server session continuity + tool streaming +- ACP client-provided MCP servers +- Gateway hardening (race conditions, approval routing, compression death spirals) +- Secret exfiltration blocking (URL scanning, base64 detection) + +--- + +## 23. File Dependency Chain + +``` +hermes_constants.py (no deps — imported by everything) + ↑ +tools/registry.py (no tool deps — imported by all tool files) + ↑ +tools/*.py (each calls registry.register() at import time) + ↑ +model_tools.py (imports tools/registry + triggers tool discovery) + ↑ +run_agent.py (AIAgent), cli.py (HermesCLI), gateway/run.py (GatewayRunner) + ↑ +hermes_cli/main.py (entry point — dispatches to all subsystems) +``` + +**Key Principle:** `tools/registry.py` is circular-import safe. It has no tool dependencies. Tool files import the registry; `model_tools.py` imports both. + +--- + +## 24. Key Design Patterns + +| Pattern | Description | +| ------------------------------ | -------------------------------------------------------------------------------------------------- | +| **Registry-based Tool System** | Single source of truth; plugins register at import time; dynamic (MCP) and static tools coexist | +| **Toolset Composition** | Recursive resolution with cycle detection; platform-specific composites | +| **Iteration Budget** | Thread-safe shared budget across parent + subagents | +| **Streaming First** | Preferred over non-streaming for health checking (stale connection detection) | +| **Prefix Caching** | System prompt cached across turns (Anthropic optimization); context never altered mid-conversation | +| **Proactive Compression** | Triggered at 50% context usage; structured summaries with iterative updates | +| **Async Bridging** | Persistent event loops prevent "Event loop is closed"; per-thread loops for workers | +| **Profile Isolation** | HERMES_HOME env var set before imports; all state functions route through `get_hermes_home()` | +| **Agent Caching** | Gateway caches AIAgent per session to preserve prompt cache across turns | +| **WAL Concurrency** | SQLite WAL mode + jitter retry for concurrent readers + single writer | +| **Plugin Architecture** | Tools, toolsets, hooks, memory providers extensible via plugins | +| **Multi-Backend Execution** | Pluggable terminal backends with unified BaseEnvironment interface | +| **Safety Layers** | Approval system → sensitive path guards → injection detection → capability filtering | + +--- + +## 25. Configuration Reference + +### Environment Variables (key ones) + +| Variable | Purpose | +| --------------------- | --------------------------------------------------------- | +| `HERMES_HOME` | Override home directory (profiles set this automatically) | +| `OPENROUTER_API_KEY` | OpenRouter provider key | +| `ANTHROPIC_API_KEY` | Anthropic provider key | +| `OPENAI_API_KEY` | OpenAI provider key | +| `NOUS_API_KEY` | Nous Portal key | +| `FIRECRAWL_API_KEY` | Web search/extraction | +| `EXA_API_KEY` | Exa search backend | +| `BROWSERBASE_API_KEY` | Cloud browser | +| `FAL_KEY` | Image generation | +| `ELEVENLABS_API_KEY` | Premium TTS | +| `HONCHO_API_KEY` | Honcho memory | +| `TERMINAL_ENV` | Terminal backend override | +| `TERMINAL_CWD` | Terminal working directory | +| `MESSAGING_CWD` | Gateway working directory | + +### Config File Locations + +| File | Purpose | +| ----------------------------- | -------------------------------- | +| `~/.hermes/config.yaml` | Main configuration (YAML) | +| `~/.hermes/.env` | API keys and secrets | +| `~/.hermes/MEMORY.md` | Persistent agent memory | +| `~/.hermes/USER.md` | User profile | +| `~/.hermes/SOUL.md` | Agent persona/identity | +| `~/.hermes/sessions.db` | SQLite session database | +| `~/.hermes/cron/jobs.json` | Cron job definitions | +| `.hermes.md` (in project dir) | Per-project context file | +| `AGENTS.md` (in project dir) | Developer instructions for agent | + +--- + +## 26. Known Pitfalls + +1. **DO NOT hardcode `~/.hermes` paths** — Use `get_hermes_home()` from `hermes_constants`. Hardcoding breaks profiles. + +2. **DO NOT use `simple_term_menu`** — Rendering bugs in tmux/iTerm2 (ghosting). Use `curses` instead. + +3. **DO NOT use `\033[K`** (ANSI erase-to-EOL) — Leaks as literal text under prompt_toolkit's `patch_stdout`. Use space-padding. + +4. **`_last_resolved_tool_names` is process-global** — Saved/restored around subagent execution in `delegate_tool.py`. + +5. **DO NOT hardcode cross-tool references in schemas** — Tool may be unavailable. Add dynamic references in `get_tool_definitions()`. + +6. **Tests must not write to `~/.hermes/`** — `_isolate_hermes_home` autouse fixture redirects to temp dir. + +7. **Prompt caching must not break** — Do NOT alter past context, change toolsets, reload memories, or rebuild system prompts mid-conversation. + +8. **Working directory behavior differs:** CLI uses `os.getcwd()`, gateway uses `MESSAGING_CWD` env var. + +9. **Config has three loaders:** `load_cli_config()` (CLI), `load_config()` (hermes tools/setup), direct YAML (gateway). They have different merge behaviors. + +10. **Profile operations are HOME-anchored** — `_get_profiles_root()` returns `Path.home() / ".hermes" / "profiles"`, NOT `get_hermes_home() / "profiles"`. This is intentional for cross-profile visibility. + +--- + +_This document covers Hermes Agent v0.7.0 as of April 2026. For the latest information, refer to the [official documentation](https://hermes-agent.nousresearch.com/docs/) and the [GitHub repository](https://github.com/NousResearch/hermes-agent)._ diff --git a/.claude/skills/lat-md/SKILL.md b/.claude/skills/lat-md/SKILL.md new file mode 100644 index 0000000..4208385 --- /dev/null +++ b/.claude/skills/lat-md/SKILL.md @@ -0,0 +1,169 @@ +--- +name: lat-md +description: >- + Writing and maintaining lat.md documentation files — structured markdown that + describes a project's architecture, design decisions, and test specs. Use when + creating, editing, or reviewing files in the lat.md/ directory. +--- + +# lat.md Authoring Guide + +This skill covers the syntax, structure rules, and conventions for writing `lat.md/` files. Load it whenever you need to create or edit sections in the `lat.md/` directory. + +## What belongs in lat.md + +`lat.md/` files describe **what** the project does and **why** — domain concepts, key design decisions, business logic, and test specifications. They do NOT duplicate source code. Think of each section as an anchor that source code references back to. + +Good candidates for sections: +- Architecture decisions and their rationale +- Domain concepts and business rules +- API contracts and protocols +- Test specifications (what is tested and why) +- Non-obvious constraints or invariants + +Bad candidates: +- Step-by-step code walkthroughs (the code itself is the walkthrough) +- Auto-generated API docs (use tools for that) +- Temporary notes or TODOs + +## Section structure + +Every section **must** have a leading paragraph — at least one sentence immediately after the heading, before any child headings or other block content. + +The first paragraph must be ≤250 characters (excluding `[[wiki link]]` content). This paragraph is the section's identity — it appears in search results, command output, and RAG context. + +```markdown +# Good Section + +Brief overview of what this section documents and why it matters. + +More detail can go in subsequent paragraphs, code blocks, or lists. + +## Child heading + +Details about this child topic. +``` + +```markdown +# Bad Section + +## Child heading + +This is invalid — "Bad Section" has no leading paragraph. +``` + +`lat check` enforces this rule. + +## Section IDs + +Sections are addressed by file path and heading chain: + +- **Full form**: `lat.md/path/to/file#Heading#SubHeading` +- **Short form**: `file#Heading#SubHeading` (when the file stem is unique) + +Examples: `lat.md/tests/search#RAG Replay Tests`, `cli#init`, `parser#Wiki Links`. + +## Wiki links + +Cross-reference other sections or source code with `[[target]]` or `[[target|alias]]`. + +### Section links + +```markdown +See [[cli#init]] for setup details. +The parser validates [[parser#Wiki Links|wiki link syntax]]. +``` + +### Source code links + +Reference functions, classes, constants, and methods in source files: + +```markdown +[[src/config.ts#getConfigDir]] — function +[[src/server.ts#App#listen]] — class method +[[lib/utils.py#parse_args]] — Python function +[[src/lib.rs#Greeter#greet]] — Rust impl method +[[src/app.go#Greeter#Greet]] — Go method +[[src/app.h#Greeter]] — C struct +``` + +`lat check` validates that all targets exist. + +## Code refs + +Tie source code back to `lat.md/` sections with `@lat:` comments: + +```typescript +// @lat: [[cli#init]] +export function init() { ... } +``` + +```python +# @lat: [[cli#init]] +def init(): + ... +``` + +Supported comment styles: `//` (JS/TS/Rust/Go/C) and `#` (Python). + +Place one `@lat:` comment per section, at the relevant code — not at the top of the file. + +## Test specs + +Describe tests as sections in `lat.md/` files. Add frontmatter to require that every leaf section has a matching `@lat:` comment in test code: + +```markdown +--- +lat: + require-code-mention: true +--- +# Tests + +Authentication test specifications. + +## User login + +Verify credential validation and error handling. + +### Rejects expired tokens + +Tokens past their expiry timestamp are rejected with 401, even if otherwise valid. + +### Handles missing password + +Login request without a password field returns 400 with a descriptive error. +``` + +Each test references its spec: + +```python +# @lat: [[tests#User login#Rejects expired tokens]] +def test_rejects_expired_tokens(): + ... +``` + +Rules: +- Every leaf section under `require-code-mention: true` must be referenced by exactly one `@lat:` comment +- Every section MUST have a description — at least one sentence explaining what the test verifies and why +- `lat check` flags unreferenced specs and dangling code refs + +## Frontmatter + +Optional YAML frontmatter at the top of `lat.md/` files: + +```yaml +--- +lat: + require-code-mention: true +--- +``` + +Currently the only supported field is `require-code-mention` for test spec enforcement. + +## Validation + +Always run `lat check` after editing `lat.md/` files. It validates: +- All wiki links point to existing sections or source code symbols +- All `@lat:` code refs point to existing sections +- Every section has a leading paragraph (≤250 chars) +- All `require-code-mention` leaf sections are referenced in code diff --git a/.claude/skills/typescript-expert b/.claude/skills/typescript-expert new file mode 120000 index 0000000..639dcbb --- /dev/null +++ b/.claude/skills/typescript-expert @@ -0,0 +1 @@ +../../.agents/skills/typescript-expert \ No newline at end of file diff --git a/.codex/hooks.json b/.codex/hooks.json new file mode 100644 index 0000000..36f1e57 --- /dev/null +++ b/.codex/hooks.json @@ -0,0 +1,24 @@ +{ + "hooks": { + "UserPromptSubmit": [ + { + "hooks": [ + { + "type": "command", + "command": "lat hook claude UserPromptSubmit" + } + ] + } + ], + "Stop": [ + { + "hooks": [ + { + "type": "command", + "command": "lat hook claude Stop" + } + ] + } + ] + } +} diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..5db600c --- /dev/null +++ b/.env.example @@ -0,0 +1,33 @@ +# Hermes Analytics Configuration (optional) +# Set these in your build environment or CI to enable analytics. +# These values are NOT exposed to users — analytics only works in official builds. +# +# GITHUB SECRETS SETUP: +# 1. Go to Settings → Secrets and variables → Actions +# 2. Add repository secrets: +# - VITE_ANALYTICS_BASE_URL - Base URL of the analytics service +# (e.g. https://analytics.hermesone.org) +# - VITE_ANALYTICS_API_KEY - API key sent as the x-api-key header +# 3. These are automatically injected during GitHub Actions builds. +# 4. Forks without these secrets will have analytics disabled. + +VITE_ANALYTICS_BASE_URL=https://analytics.hermesone.org + +VITE_ANALYTICS_API_KEY=your_analytics_api_key_here + +# Hermes One Backend Configuration (optional) +# Base URL + client key for device login and desktop↔backend agent sync. +# The MAIN_VITE_ prefix scopes these to the main process (where the API calls +# run) so the key isn't also copied into the renderer bundle. +# +# GITHUB SETUP (injected during GitHub Actions builds): +# - Repository VARIABLE HERMES_API_URL → MAIN_VITE_HERMES_API_URL +# - Repository SECRET HERMES_API_KEY → MAIN_VITE_HERMES_API_KEY +# +# Local dev: leave the URL at the Nitro dev server and the key empty (the +# backend doesn't enforce the key yet). Runtime HERMES_API_URL / HERMES_API_KEY +# override these baked values. + +MAIN_VITE_HERMES_API_URL=http://localhost:3002 + +MAIN_VITE_HERMES_API_KEY=your_hermes_api_key_here diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..eb8707c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Shell scripts must always be LF — CRLF breaks the shebang line on +# Linux ("bad interpreter: /bin/bash\r: No such file or directory"), +# which silently fails the .deb / .rpm postinst hook (#395). +*.sh text eol=lf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bf8be75 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,44 @@ +name: CI + +# Runs the type checker and test suite on every PR and on pushes to main, +# so broken code is caught before it merges. Mirrors the Node version and +# install step already used by release.yml. + +on: + pull_request: + push: + branches: [main] + +# A newer commit on the same ref supersedes an in-flight run. +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +jobs: + check: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Typecheck + run: npm run typecheck + + - name: Test + run: npm test + + # Lint is informational for now — the codebase has a large backlog of + # prettier/line-ending warnings (no errors). Surfaced but not gating, + # so a warning backlog doesn't block merges. + - name: Lint + run: npm run lint + continue-on-error: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..d1dfb96 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,403 @@ +name: Release + +on: + push: + branches: + - release + workflow_dispatch: + inputs: + dry_run: + description: "Run all build jobs but skip publish (no tag, no GitHub Release)" + type: boolean + default: true + +permissions: + contents: write + +concurrency: + group: release + cancel-in-progress: true + +jobs: + prepare: + name: Prepare Release + runs-on: ubuntu-latest + outputs: + version: ${{ steps.version.outputs.version }} + tag: ${{ steps.version.outputs.tag }} + tag_exists: ${{ steps.check.outputs.exists }} + is_dry_run: ${{ steps.mode.outputs.is_dry_run }} + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Read version from package.json + id: version + run: | + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "tag=v$VERSION" >> "$GITHUB_OUTPUT" + echo "Release version: v$VERSION" + + - name: Check if tag already exists + id: check + run: | + if git ls-remote --tags origin "refs/tags/v${{ steps.version.outputs.version }}" | grep -q .; then + echo "exists=true" >> "$GITHUB_OUTPUT" + echo "Tag v${{ steps.version.outputs.version }} already exists — skipping." + else + echo "exists=false" >> "$GITHUB_OUTPUT" + fi + + - name: Compute dry-run flag + id: mode + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ inputs.dry_run }}" = "true" ]; then + echo "is_dry_run=true" >> "$GITHUB_OUTPUT" + echo "Dry run: builds will run, publish will be skipped." + else + echo "is_dry_run=false" >> "$GITHUB_OUTPUT" + echo "Real release: publish will run if tag does not exist." + fi + + release_mac: + name: Build macOS (${{ matrix.arch }}) + needs: prepare + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: macos-latest + strategy: + matrix: + arch: [x64, arm64] + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Rebuild native dependencies for target arch + run: npx electron-builder install-app-deps --arch=${{ matrix.arch }} + + - name: Build app + env: + VITE_ANALYTICS_BASE_URL: ${{ vars.VITE_ANALYTICS_BASE_URL }} + VITE_ANALYTICS_API_KEY: ${{ secrets.VITE_ANALYTICS_API_KEY }} + MAIN_VITE_HERMES_API_URL: ${{ vars.HERMES_API_URL }} + MAIN_VITE_HERMES_API_KEY: ${{ secrets.HERMES_API_KEY }} + run: npm run build + + - name: Stage App Store Connect API key + env: + ASC_API_KEY_BASE64: ${{ secrets.ASC_API_KEY }} + ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} + run: | + set -euo pipefail + if [ -z "${ASC_API_KEY_BASE64:-}" ]; then + echo "ASC_API_KEY secret is missing — notarization will fail." >&2 + exit 1 + fi + KEY_DIR="$RUNNER_TEMP/appstore" + mkdir -p "$KEY_DIR" + KEY_PATH="$KEY_DIR/AuthKey_${ASC_KEY_ID}.p8" + printf '%s' "$ASC_API_KEY_BASE64" | base64 --decode > "$KEY_PATH" + chmod 600 "$KEY_PATH" + echo "APPLE_API_KEY=$KEY_PATH" >> "$GITHUB_ENV" + + - name: Package macOS artifacts + env: + CSC_LINK: ${{ secrets.CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} + APPLE_API_KEY_ID: ${{ secrets.ASC_KEY_ID }} + APPLE_API_ISSUER: ${{ secrets.ASC_ISSUER_ID }} + run: npx electron-builder --mac dmg zip --${{ matrix.arch }} --publish never + + - name: Verify native module architecture + run: | + set -euo pipefail + NODE_FILE="dist/mac-${{ matrix.arch }}/Hermes One.app/Contents/Resources/app.asar.unpacked/node_modules/better-sqlite3/build/Release/better_sqlite3.node" + if [ ! -f "$NODE_FILE" ]; then + NODE_FILE="dist/mac/Hermes One.app/Contents/Resources/app.asar.unpacked/node_modules/better-sqlite3/build/Release/better_sqlite3.node" + fi + file "$NODE_FILE" + case "${{ matrix.arch }}" in + x64) file "$NODE_FILE" | grep -q "x86_64" ;; + arm64) file "$NODE_FILE" | grep -q "arm64" ;; + esac + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: mac-${{ matrix.arch }}-artifacts + path: | + dist/*.dmg + dist/*.zip + dist/*.blockmap + + release_linux: + name: Build Linux (${{ matrix.arch }}) + needs: prepare + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: ${{ matrix.runs-on }} + strategy: + fail-fast: false + matrix: + include: + - arch: x64 + runs-on: ubuntu-latest + targets: AppImage deb rpm + - arch: arm64 + runs-on: ubuntu-24.04-arm + targets: AppImage + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Rebuild native dependencies for target arch + run: npx electron-builder install-app-deps --arch=${{ matrix.arch }} + + - name: Build app + env: + VITE_ANALYTICS_BASE_URL: ${{ vars.VITE_ANALYTICS_BASE_URL }} + VITE_ANALYTICS_API_KEY: ${{ secrets.VITE_ANALYTICS_API_KEY }} + MAIN_VITE_HERMES_API_URL: ${{ vars.HERMES_API_URL }} + MAIN_VITE_HERMES_API_KEY: ${{ secrets.HERMES_API_KEY }} + run: npm run build + + - name: Install rpmbuild + if: contains(matrix.targets, 'rpm') + run: sudo apt-get update && sudo apt-get install -y rpm + + - name: Package Linux artifacts + run: npx electron-builder --linux ${{ matrix.targets }} --${{ matrix.arch }} --publish never + + - name: Upload x64 artifacts + if: matrix.arch == 'x64' + uses: actions/upload-artifact@v4 + with: + name: linux-x64-artifacts + path: | + dist/*.AppImage + dist/*.deb + dist/*.rpm + dist/latest-linux.yml + + - name: Upload arm64 artifacts + if: matrix.arch == 'arm64' + uses: actions/upload-artifact@v4 + with: + name: linux-arm64-artifacts + path: | + dist/*.AppImage + + release_windows: + name: Build Windows + needs: prepare + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: windows-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build app + env: + VITE_ANALYTICS_BASE_URL: ${{ vars.VITE_ANALYTICS_BASE_URL }} + VITE_ANALYTICS_API_KEY: ${{ secrets.VITE_ANALYTICS_API_KEY }} + MAIN_VITE_HERMES_API_URL: ${{ vars.HERMES_API_URL }} + MAIN_VITE_HERMES_API_KEY: ${{ secrets.HERMES_API_KEY }} + run: npm run build + + - name: Package Windows artifacts + run: npx electron-builder --win nsis portable --x64 --publish never + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: windows-artifacts + path: | + dist/*.exe + dist/*.exe.blockmap + dist/latest.yml + + generate_winget: + name: Generate winget manifests + needs: [prepare, release_windows] + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Download Windows installer artifact + uses: actions/download-artifact@v4 + with: + name: windows-artifacts + path: dist/ + + - name: Generate winget manifests + env: + VERSION: ${{ needs.prepare.outputs.version }} + PUBLISH_OWNER: fathah + run: node scripts/generate-winget-manifests.mjs + + - name: Upload winget manifests artifact + uses: actions/upload-artifact@v4 + with: + name: winget-manifests-${{ needs.prepare.outputs.version }} + path: dist/winget/ + + publish: + name: Publish Release + needs: + [prepare, release_mac, release_linux, release_windows, generate_winget] + if: needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.tag_exists == 'false' + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Create tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag ${{ needs.prepare.outputs.tag }} + git push origin ${{ needs.prepare.outputs.tag }} + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + merge-multiple: true + + - name: Generate macOS update metadata + env: + VERSION: ${{ needs.prepare.outputs.version }} + run: | + node <<'NODE' + const crypto = require("crypto"); + const fs = require("fs"); + const path = require("path"); + + const artifactsDir = path.join(process.cwd(), "artifacts"); + const version = process.env.VERSION; + const zipNames = fs + .readdirSync(artifactsDir) + .filter( + (name) => + name.startsWith(`hermes-desktop-${version}-`) && + name.endsWith("-mac.zip"), + ) + .sort((a, b) => { + if (a.includes("-x64-")) return -1; + if (b.includes("-x64-")) return 1; + return a.localeCompare(b); + }); + + if ( + zipNames.length < 2 || + !zipNames.some((name) => name.includes("-x64-")) || + !zipNames.some((name) => name.includes("-arm64-")) + ) { + throw new Error( + `Expected x64 and arm64 macOS zips, found: ${zipNames.join(", ")}`, + ); + } + + const files = zipNames.map((name) => { + const filePath = path.join(artifactsDir, name); + return { + url: name, + sha512: crypto + .createHash("sha512") + .update(fs.readFileSync(filePath)) + .digest("base64"), + size: fs.statSync(filePath).size, + }; + }); + const primary = files.find((file) => file.url.includes("-x64-")) || files[0]; + const releaseDate = new Date().toISOString(); + const lines = [ + `version: ${version}`, + "files:", + ...files.flatMap((file) => [ + ` - url: ${file.url}`, + ` sha512: ${file.sha512}`, + ` size: ${file.size}`, + ]), + `path: ${primary.url}`, + `sha512: ${primary.sha512}`, + `releaseDate: '${releaseDate}'`, + "", + ]; + + fs.writeFileSync(path.join(artifactsDir, "latest-mac.yml"), lines.join("\n")); + NODE + + - name: Publish GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.prepare.outputs.tag }} + name: Hermes Desktop ${{ needs.prepare.outputs.tag }} + generate_release_notes: true + files: | + artifacts/*.dmg + artifacts/*.zip + artifacts/*.AppImage + artifacts/*.deb + artifacts/*.rpm + artifacts/*.exe + artifacts/*.blockmap + artifacts/latest.yml + artifacts/latest-linux.yml + artifacts/latest-mac.yml + + rebuild_landing_page: + name: Rebuild landing page + needs: [prepare, publish] + # Only after a real release that actually published a new tag. + if: needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.tag_exists == 'false' + runs-on: ubuntu-latest + steps: + - name: Wait for release to propagate + # Give GitHub's releases/latest API time to settle before the landing + # page rebuilds and re-fetches the latest version. + run: sleep 300 + + - name: Trigger landing page deploy + # SITE_DEPLOY_TOKEN is a fine-grained PAT with "Actions: read and write" + # on fathah/hermes-landing-page. The default GITHUB_TOKEN cannot dispatch + # workflows in another repository. + env: + GH_TOKEN: ${{ secrets.SITE_DEPLOY_TOKEN }} + run: | + gh workflow run deploy.yml \ + --repo fathah/hermes-landing-page \ + --ref main diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6bba941 --- /dev/null +++ b/.gitignore @@ -0,0 +1,43 @@ +.DS_Store +.idea/ + +# Dependencies +node_modules/ + +# Build output +dist/ +out/ + +# TypeScript incremental build info +*.tsbuildinfo + +# Logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Environment files +.env +.env.* +!.env.example + +# ESLint cache +.eslintcache + +# Local isolated Hermes homes for development/tests +.sandbox/ + +# Electron packaging artifacts +release/ +.claude/worktrees + +# Tauri +**/src-tauri/target/ +**/src-tauri/gen/ +**/src-tauri/WixTools/ + +# Local launcher scripts (user-specific, do not commit) +/*.bat +/*.ps1 +.mcp.json diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 0000000..7556de4 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,25 @@ +BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) +if [[ "$BRANCH" != "release" && "$BRANCH" != release/* ]]; then + exit 0 +fi + +# Git hooks run with a minimal PATH that omits user-local tool dirs, so bun +# (installed under ~/.bun/bin) isn't found. Add common locations, then prefer +# bun and fall back to npm. +export PATH="$HOME/.bun/bin:$HOME/.local/bin:/opt/homebrew/bin:/usr/local/bin:$PATH" + +if command -v bun >/dev/null 2>&1; then + RUN="bun run" +elif command -v npm >/dev/null 2>&1; then + RUN="npm run" +else + echo "✗ Neither bun nor npm found on PATH. Commit aborted."; exit 1 +fi + +echo "→ [pre-commit] Release branch — running lint..." +$RUN lint || { echo "✗ Lint failed. Commit aborted."; exit 1; } + +echo "→ [pre-commit] Running tests..." +$RUN test || { echo "✗ Tests failed. Commit aborted."; exit 1; } + +echo "✓ [pre-commit] Lint and tests passed." diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 0000000..e5ff5ae --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,22 @@ +BRANCH=$(git symbolic-ref --short HEAD 2>/dev/null) +if [[ "$BRANCH" != "release" && "$BRANCH" != release/* ]]; then + exit 0 +fi + +# Git hooks run with a minimal PATH that omits user-local tool dirs, so bun +# (installed under ~/.bun/bin) isn't found. Add common locations, then prefer +# bun and fall back to npm. +export PATH="$HOME/.bun/bin:$HOME/.local/bin:/opt/homebrew/bin:/usr/local/bin:$PATH" + +if command -v bun >/dev/null 2>&1; then + RUN="bun run" +elif command -v npm >/dev/null 2>&1; then + RUN="npm run" +else + echo "✗ Neither bun nor npm found on PATH. Push aborted."; exit 1 +fi + +echo "→ [pre-push] Release branch — running build..." +$RUN build || { echo "✗ Build failed. Push aborted."; exit 1; } + +echo "✓ [pre-push] Build passed." diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..c544150 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,105 @@ +# Before starting work + +- Run `lat search` to find sections relevant to your task. Read them to understand the design intent before writing code. +- Run `lat expand` on user prompts to expand any `[[refs]]` — this resolves section names to file locations and provides context. + +# Post-task checklist (REQUIRED — do not skip) + +After EVERY task, before responding to the user: + +- [ ] Update `lat.md/` if you added or changed any functionality, architecture, tests, or behavior +- [ ] Run `lat check` — all wiki links and code refs must pass +- [ ] Do not skip these steps. Do not consider your task done until both are complete. + +--- + +# What is lat.md? + +This project uses [lat.md](https://www.npmjs.com/package/lat.md) to maintain a structured knowledge graph of its architecture, design decisions, and test specs in the `lat.md/` directory. It is a set of cross-linked markdown files that describe **what** this project does and **why** — the domain concepts, key design decisions, business logic, and test specifications. Use it to ground your work in the actual architecture rather than guessing. + +# Commands + +```bash +lat locate "Section Name" # find a section by name (exact, fuzzy) +lat refs "file#Section" # find what references a section +lat search "natural language" # semantic search across all sections +lat expand "user prompt text" # expand [[refs]] to resolved locations +lat check # validate all links and code refs +``` + +Run `lat --help` when in doubt about available commands or options. + +If `lat search` fails because no API key is configured, explain to the user that semantic search requires a key provided via `LAT_LLM_KEY` (direct value), `LAT_LLM_KEY_FILE` (path to key file), or `LAT_LLM_KEY_HELPER` (command that prints the key). Supported key prefixes: `sk-...` (OpenAI) or `vck_...` (Vercel). If the user doesn't want to set it up, use `lat locate` for direct lookups instead. + +# Syntax primer + +- **Section ids**: `lat.md/path/to/file#Heading#SubHeading` — full form uses project-root-relative path (e.g. `lat.md/tests/search#RAG Replay Tests`). Short form uses bare file name when unique (e.g. `search#RAG Replay Tests`, `cli#search#Indexing`). +- **Wiki links**: `[[target]]` or `[[target|alias]]` — cross-references between sections. Can also reference source code: `[[src/foo.ts#myFunction]]`. +- **Source code links**: Wiki links in `lat.md/` files can reference functions, classes, constants, and methods in TypeScript/JavaScript/Python/Rust/Go/C files. Use the full path: `[[src/config.ts#getConfigDir]]`, `[[src/server.ts#App#listen]]` (class method), `[[lib/utils.py#parse_args]]`, `[[src/lib.rs#Greeter#greet]]` (Rust impl method), `[[src/app.go#Greeter#Greet]]` (Go method), `[[src/app.h#Greeter]]` (C struct). `lat check` validates these exist. +- **Code refs**: `// @lat: [[section-id]]` (JS/TS/Rust/Go/C) or `# @lat: [[section-id]]` (Python) — ties source code to concepts + +# Test specs + +Key tests can be described as sections in `lat.md/` files (e.g. `tests.md`). Add frontmatter to require that every leaf section is referenced by a `// @lat:` or `# @lat:` comment in test code: + +```markdown +--- +lat: + require-code-mention: true +--- +# Tests + +Authentication and authorization test specifications. + +## User login + +Verify credential validation and error handling for the login endpoint. + +### Rejects expired tokens +Tokens past their expiry timestamp are rejected with 401, even if otherwise valid. + +### Handles missing password +Login request without a password field returns 400 with a descriptive error. +``` + +Every section MUST have a description — at least one sentence explaining what the test verifies and why. Empty sections with just a heading are not acceptable. (This is a specific case of the general leading paragraph rule below.) + +Each test in code should reference its spec with exactly one comment placed next to the relevant test — not at the top of the file: + +```python +# @lat: [[tests#User login#Rejects expired tokens]] +def test_rejects_expired_tokens(): + ... + +# @lat: [[tests#User login#Handles missing password]] +def test_handles_missing_password(): + ... +``` + +Do not duplicate refs. One `@lat:` comment per spec section, placed at the test that covers it. `lat check` will flag any spec section not covered by a code reference, and any code reference pointing to a nonexistent section. + +# Section structure + +Every section in `lat.md/` **must** have a leading paragraph — at least one sentence immediately after the heading, before any child headings or other block content. The first paragraph must be ≤250 characters (excluding `[[wiki link]]` content). This paragraph serves as the section's overview and is used in search results, command output, and RAG context — keeping it concise guarantees the section's essence is always captured. + +```markdown +# Good Section + +Brief overview of what this section documents and why it matters. + +More detail can go in subsequent paragraphs, code blocks, or lists. + +## Child heading + +Details about this child topic. +``` + +```markdown +# Bad Section + +## Child heading + +Details about this child topic. +``` + +The second example is invalid because `Bad Section` has no leading paragraph. `lat check` validates this rule and reports errors for missing or overly long leading paragraphs. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c544150 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,105 @@ +# Before starting work + +- Run `lat search` to find sections relevant to your task. Read them to understand the design intent before writing code. +- Run `lat expand` on user prompts to expand any `[[refs]]` — this resolves section names to file locations and provides context. + +# Post-task checklist (REQUIRED — do not skip) + +After EVERY task, before responding to the user: + +- [ ] Update `lat.md/` if you added or changed any functionality, architecture, tests, or behavior +- [ ] Run `lat check` — all wiki links and code refs must pass +- [ ] Do not skip these steps. Do not consider your task done until both are complete. + +--- + +# What is lat.md? + +This project uses [lat.md](https://www.npmjs.com/package/lat.md) to maintain a structured knowledge graph of its architecture, design decisions, and test specs in the `lat.md/` directory. It is a set of cross-linked markdown files that describe **what** this project does and **why** — the domain concepts, key design decisions, business logic, and test specifications. Use it to ground your work in the actual architecture rather than guessing. + +# Commands + +```bash +lat locate "Section Name" # find a section by name (exact, fuzzy) +lat refs "file#Section" # find what references a section +lat search "natural language" # semantic search across all sections +lat expand "user prompt text" # expand [[refs]] to resolved locations +lat check # validate all links and code refs +``` + +Run `lat --help` when in doubt about available commands or options. + +If `lat search` fails because no API key is configured, explain to the user that semantic search requires a key provided via `LAT_LLM_KEY` (direct value), `LAT_LLM_KEY_FILE` (path to key file), or `LAT_LLM_KEY_HELPER` (command that prints the key). Supported key prefixes: `sk-...` (OpenAI) or `vck_...` (Vercel). If the user doesn't want to set it up, use `lat locate` for direct lookups instead. + +# Syntax primer + +- **Section ids**: `lat.md/path/to/file#Heading#SubHeading` — full form uses project-root-relative path (e.g. `lat.md/tests/search#RAG Replay Tests`). Short form uses bare file name when unique (e.g. `search#RAG Replay Tests`, `cli#search#Indexing`). +- **Wiki links**: `[[target]]` or `[[target|alias]]` — cross-references between sections. Can also reference source code: `[[src/foo.ts#myFunction]]`. +- **Source code links**: Wiki links in `lat.md/` files can reference functions, classes, constants, and methods in TypeScript/JavaScript/Python/Rust/Go/C files. Use the full path: `[[src/config.ts#getConfigDir]]`, `[[src/server.ts#App#listen]]` (class method), `[[lib/utils.py#parse_args]]`, `[[src/lib.rs#Greeter#greet]]` (Rust impl method), `[[src/app.go#Greeter#Greet]]` (Go method), `[[src/app.h#Greeter]]` (C struct). `lat check` validates these exist. +- **Code refs**: `// @lat: [[section-id]]` (JS/TS/Rust/Go/C) or `# @lat: [[section-id]]` (Python) — ties source code to concepts + +# Test specs + +Key tests can be described as sections in `lat.md/` files (e.g. `tests.md`). Add frontmatter to require that every leaf section is referenced by a `// @lat:` or `# @lat:` comment in test code: + +```markdown +--- +lat: + require-code-mention: true +--- +# Tests + +Authentication and authorization test specifications. + +## User login + +Verify credential validation and error handling for the login endpoint. + +### Rejects expired tokens +Tokens past their expiry timestamp are rejected with 401, even if otherwise valid. + +### Handles missing password +Login request without a password field returns 400 with a descriptive error. +``` + +Every section MUST have a description — at least one sentence explaining what the test verifies and why. Empty sections with just a heading are not acceptable. (This is a specific case of the general leading paragraph rule below.) + +Each test in code should reference its spec with exactly one comment placed next to the relevant test — not at the top of the file: + +```python +# @lat: [[tests#User login#Rejects expired tokens]] +def test_rejects_expired_tokens(): + ... + +# @lat: [[tests#User login#Handles missing password]] +def test_handles_missing_password(): + ... +``` + +Do not duplicate refs. One `@lat:` comment per spec section, placed at the test that covers it. `lat check` will flag any spec section not covered by a code reference, and any code reference pointing to a nonexistent section. + +# Section structure + +Every section in `lat.md/` **must** have a leading paragraph — at least one sentence immediately after the heading, before any child headings or other block content. The first paragraph must be ≤250 characters (excluding `[[wiki link]]` content). This paragraph serves as the section's overview and is used in search results, command output, and RAG context — keeping it concise guarantees the section's essence is always captured. + +```markdown +# Good Section + +Brief overview of what this section documents and why it matters. + +More detail can go in subsequent paragraphs, code blocks, or lists. + +## Child heading + +Details about this child topic. +``` + +```markdown +# Bad Section + +## Child heading + +Details about this child topic. +``` + +The second example is invalid because `Bad Section` has no leading paragraph. `lat check` validates this rule and reports errors for missing or overly long leading paragraphs. diff --git a/CONTRIBUTING.ja-JP.md b/CONTRIBUTING.ja-JP.md new file mode 100644 index 0000000..75379b2 --- /dev/null +++ b/CONTRIBUTING.ja-JP.md @@ -0,0 +1,104 @@ +# Hermes Desktop へのコントリビューション + +Hermes Desktop へのコントリビューションに興味を持っていただきありがとうございます!バグ修正、新機能、ドキュメント改善、ちょっとしたタイポ修正まで、どんな貢献も歓迎します。 + +## 言語 + +- English: `CONTRIBUTING.md` +- 简体中文: `CONTRIBUTING.zh-CN.md` +- 日本語: `CONTRIBUTING.ja-JP.md` + +## はじめに + +1. リポジトリを **Fork** し、ローカルにクローンします。 +2. **依存関係をインストール:** + + ```bash + npm install + ``` + +3. **開発モードでアプリを起動:** + + ```bash + npm run dev + ``` + +## 変更を加える + +1. `main` から新しいブランチを作成します。 + + ```bash + git checkout -b your-branch-name + ``` + +2. 変更を加えます。コミットは目的を絞って — 1 つの論理的な変更につき 1 つのコミットを心掛けてください。 + +3. 提出前にチェックを実行します。 + + ```bash + npm run lint + npm run typecheck + ``` + +4. `npm run dev` でローカル動作確認を行い、期待通りに動くことを確認してください。 + +## プルリクエストの提出 + +1. ブランチを自分の fork に push します。 +2. 上流リポジトリの `main` に対してプルリクエストを開きます。 +3. 変更内容とその理由を明確に記述してください。 +4. PR が Open Issue に対応する場合は、参照を記述してください(例: `Fixes #42`)。 + +### プルリクエストは小さく保つ + +PR は小さく目的を絞ってください — その方がレビューもマージもずっと容易になります。多くのファイルに触れる PR や、無関係な変更をまとめた PR は、分割を依頼されたり、受け入れられない場合があります。 + +- 1 つの PR につき 1 つの論理的な変更(1 つの修正、1 つの機能、1 つのリファクタリング)に絞ってください。 +- 無関係なファイルを多数触っていることに気づいたら、作業を複数の PR に分割してください。 +- フォーマット / スタイルの一括変更を機能変更と混在させないでください。 +- 小さな PR ほど、レビューとマージが速くなります。 + +メンテナが PR をレビューし、変更を依頼する場合があります。承認されるとマージされます。 + +## バグ報告 + +バグを見つけた場合は、以下の情報を添えて [Issue を作成してください](https://github.com/fathah/hermes-desktop/issues/new)。 + +- 明確なタイトルと説明 +- 再現手順 +- 期待される動作と実際の動作 +- 必要に応じて OS とアプリのバージョン + +## 機能リクエスト + +アイデアがある場合は、[Issue を作成して](https://github.com/fathah/hermes-desktop/issues/new)以下を記述してください。 + +- 解決したい問題 +- どのように動作してほしいか +- 検討した代替案 + +## プロジェクト構成 + +```text +src/main/ Electron メインプロセス、IPC ハンドラ、Hermes 統合 +src/preload/ セキュアな renderer ブリッジ +src/renderer/src/ React アプリと UI コンポーネント +resources/ アプリアイコンとパッケージ用アセット +build/ パッケージング用リソース +``` + +## コードスタイル + +- 本プロジェクトでは TypeScript、React、Electron を使用しています。 +- Lint エラーを確認するには `npm run lint` を実行してください。 +- 型の安全性を検証するには `npm run typecheck` を実行してください。 +- コードベース内の既存のパターンや慣習に従ってください。 + +## コミュニティ + +- 他のコントリビューターと話すには [Nous Research Discord](https://discord.gg/NousResearch) に参加してください。 +- Hermes の動作についての詳細は[ドキュメント](https://hermes-agent.nousresearch.com/docs/)を参照してください。 + +## ライセンス + +コントリビューションをいただいた時点で、その内容が [MIT License](LICENSE) の下でライセンスされることに同意したものとみなします。 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0d4a582 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,104 @@ +# Contributing to Hermes Desktop + +Thanks for your interest in contributing to Hermes Desktop! Whether it's a bug fix, a new feature, improved docs, or just a typo — every contribution helps. + +## Languages + +- English: `CONTRIBUTING.md` +- 简体中文: `CONTRIBUTING.zh-CN.md` +- 日本語: `CONTRIBUTING.ja-JP.md` + +## Getting Started + +1. **Fork** the repository and clone your fork locally. +2. **Install dependencies:** + + ```bash + npm install + ``` + +3. **Start the app in development mode:** + + ```bash + npm run dev + ``` + +## Making Changes + +1. Create a new branch from `main`: + + ```bash + git checkout -b your-branch-name + ``` + +2. Make your changes. Keep commits focused — one logical change per commit. + +3. Run checks before submitting: + + ```bash + npm run lint + npm run typecheck + ``` + +4. Test your changes locally with `npm run dev` to make sure everything works as expected. + +## Submitting a Pull Request + +1. Push your branch to your fork. +2. Open a pull request against `main` on the upstream repo. +3. Write a clear description of what you changed and why. +4. If your PR addresses an open issue, reference it (e.g., `Fixes #42`). + +### Keep Pull Requests Small + +Please keep PRs small and focused — they are much easier to review and merge. PRs that touch too many files or bundle unrelated changes will likely be asked for splitting up or may not be accepted. + +- Stick to one logical change per PR (one fix, one feature, one refactor). +- If you find yourself touching many unrelated files, split the work into multiple PRs. +- Avoid bundling formatting/style sweeps with functional changes. +- Smaller PRs get reviewed and merged faster. + +A maintainer will review your PR and may request changes. Once approved, it will be merged. + +## Reporting Bugs + +Found a bug? [Open an issue](https://github.com/fathah/hermes-desktop/issues/new) with: + +- A clear title and description. +- Steps to reproduce the issue. +- What you expected to happen vs. what actually happened. +- Your OS and app version, if relevant. + +## Requesting Features + +Have an idea? [Open an issue](https://github.com/fathah/hermes-desktop/issues/new) and describe: + +- The problem you're trying to solve. +- How you'd like it to work. +- Any alternatives you've considered. + +## Project Structure + +```text +src/main/ Electron main process, IPC handlers, Hermes integration +src/preload/ Secure renderer bridge +src/renderer/src/ React app and UI components +resources/ App icons and packaged assets +build/ Packaging resources +``` + +## Code Style + +- The project uses TypeScript, React, and Electron. +- Run `npm run lint` to check for lint errors. +- Run `npm run typecheck` to verify type safety. +- Follow existing patterns and conventions in the codebase. + +## Community + +- Join the [Nous Research Discord](https://discord.gg/NousResearch) to chat with other contributors. +- Check the [documentation](https://hermes-agent.nousresearch.com/docs/) for more context on how Hermes works. + +## License + +By contributing, you agree that your contributions will be licensed under the [MIT License](LICENSE). diff --git a/CONTRIBUTING.zh-CN.md b/CONTRIBUTING.zh-CN.md new file mode 100644 index 0000000..efda94d --- /dev/null +++ b/CONTRIBUTING.zh-CN.md @@ -0,0 +1,104 @@ +# 为 Hermes Desktop 做贡献 + +感谢你愿意为 Hermes Desktop 做出贡献。无论是修复 bug、添加新功能、完善文档,还是修正一个拼写错误,每一份贡献都很有价值。 + +## 语言 + +- 英文:`CONTRIBUTING.md` +- 简体中文:`CONTRIBUTING.zh-CN.md` +- 日本語:`CONTRIBUTING.ja-JP.md` + +## 快速开始 + +1. **Fork** 本仓库,并将你的 fork 克隆到本地。 +2. **安装依赖:** + + ```bash + npm install + ``` + +3. **以开发模式启动应用:** + + ```bash + npm run dev + ``` + +## 修改代码 + +1. 从 `main` 创建新分支: + + ```bash + git checkout -b your-branch-name + ``` + +2. 完成你的改动。请保持提交聚焦,每个 commit 只做一类逻辑改动。 + +3. 提交前先运行检查: + + ```bash + npm run lint + npm run typecheck + ``` + +4. 使用 `npm run dev` 在本地测试改动,确保行为符合预期。 + +## 提交 Pull Request + +1. 将分支推送到你的 fork。 +2. 在上游仓库中向 `main` 发起 Pull Request。 +3. 清楚描述你改了什么,以及为什么这样改。 +4. 如果你的 PR 解决了某个已有 issue,请在描述中引用它(例如:`Fixes #42`)。 + +### 保持 Pull Request 精简 + +请保持 PR 小而聚焦——这样更容易审核和合并。触及过多文件或捆绑了不相关改动的 PR 可能会被要求拆分,甚至可能不被接受。 + +- 每个 PR 只做一类逻辑改动(一个修复、一个功能、一次重构)。 +- 如果你发现自己改了很多不相关的文件,请将工作拆分成多个 PR。 +- 避免将格式化/样式改动与功能改动混在一起提交。 +- 更小的 PR 能更快得到审核和合并。 + +维护者会审核你的 PR,并可能提出修改建议。审核通过后,PR 会被合并。 + +## 报告 Bug + +如果你发现了 bug,请在 GitHub 上 [提交 issue](https://github.com/fathah/hermes-desktop/issues/new),并尽量包含: + +- 清晰的标题和描述 +- 复现步骤 +- 预期行为与实际行为 +- 你的操作系统和应用版本(如果相关) + +## 功能请求 + +如果你有新想法,也欢迎 [提交 issue](https://github.com/fathah/hermes-desktop/issues/new),并描述: + +- 你想解决的问题 +- 你希望它如何工作 +- 你考虑过的替代方案 + +## 项目结构 + +```text +src/main/ Electron 主进程、IPC 处理器、Hermes 集成 +src/preload/ 安全的 renderer bridge +src/renderer/src/ React 应用和 UI 组件 +resources/ 应用图标和打包资源 +build/ 打包配置资源 +``` + +## 代码风格 + +- 项目使用 TypeScript、React 和 Electron。 +- 运行 `npm run lint` 检查 lint 错误。 +- 运行 `npm run typecheck` 验证类型安全。 +- 尽量遵循当前仓库现有模式和约定。 + +## 社区 + +- 欢迎加入 [Nous Research Discord](https://discord.gg/NousResearch),与其他贡献者交流。 +- 也可以查看 [文档](https://hermes-agent.nousresearch.com/docs/) 了解 Hermes 的整体工作方式。 + +## 许可证 + +通过提交贡献,即表示你同意你的贡献将按照 [MIT License](LICENSE) 授权。 diff --git a/Development.md b/Development.md new file mode 100644 index 0000000..4230daa --- /dev/null +++ b/Development.md @@ -0,0 +1,48 @@ +## Development + +### Prerequisites + +- Node.js and npm +- A Unix-like shell environment for the Hermes installer +- Network access for downloading Hermes during first-run install + +### Install dependencies + +```bash +npm install +``` + +### Start the app in development + +```bash +npm run dev +``` + +### Run checks + +```bash +npm run lint +npm run typecheck +``` + +### Run tests + +```bash +npm run test +npm run test:watch +``` + +### Build the desktop app + +```bash +npm run build +``` + +Platform packaging: + +```bash +npm run build:mac +npm run build:win +npm run build:linux +npm run build:rpm # Fedora/RHEL .rpm only +``` diff --git a/KANBAN_GAP_REPORT.md b/KANBAN_GAP_REPORT.md new file mode 100644 index 0000000..29f5069 --- /dev/null +++ b/KANBAN_GAP_REPORT.md @@ -0,0 +1,113 @@ +# Kanban — Reference vs. hermes-desktop: Report & Plan + +_Generated 2026-06-21. Sources: `hermes-agent` docs + `kanban_db.py` + `plugins/kanban/dashboard/plugin_api.py`; our `src/main/kanban.ts` + `src/renderer/src/screens/Kanban/Kanban.tsx`._ + +## 1. What Kanban is (in hermes-agent) + +Hermes Kanban is a **durable, SQLite-backed task board** (`~/.hermes/kanban.db`, WAL mode) for coordinating multiple named agent profiles. It is the heavier sibling of `delegate_task`: + +| | `delegate_task` | Kanban | +|---|---|---| +| Shape | RPC (fork→join) | Durable queue + state machine | +| Parent | Blocks | Fire-and-forget | +| Child | Anonymous subagent | Named profile w/ persistent memory | +| Resumable | No | Block→unblock→re-run; crash→reclaim | +| Human-in-loop | No | Comment / unblock anytime | +| Audit | Lost on compression | Durable SQLite rows | + +**Three surfaces, one `kanban_db` core (cannot drift):** +1. **Agents** drive it via `kanban_*` tools (`kanban_show/list/complete/block/heartbeat/comment/create/link/unblock`). +2. **Humans/scripts/cron** drive it via `hermes kanban …` CLI and `/kanban` slash command. +3. **Dashboard plugin** (FastAPI + React SPA) at `plugins/kanban/` — REST under `/api/plugins/kanban/`, live `task_events` WebSocket. + +**Key concepts:** Board (isolated queue, multi-project) · Task · Link (parent→child dependency, promotes `todo→ready` when all parents `done`) · Comment (inter-agent protocol) · Workspace (`scratch` / `dir:` / `worktree`) · Dispatcher (gateway-embedded loop, 60s tick: reclaim stale/crashed, promote, claim, spawn) · Tenant (soft namespace within a board). + +**Notable mechanics:** auto-decompose of triage tasks, goal-mode cards (Ralph loop + judge), circuit-breaker (`failure_limit`, auto-block after N spawn failures), respawn guard (`blocker_auth`/`recent_success`/`active_pr`), `scheduled_at` delayed dispatch, diagnostics rule-engine, attachments (25 MB cap), Kanban Swarm topology helper. + +## 2. Canonical statuses (the "kanban words") + +From `kanban_db.VALID_STATUSES`: + +``` +triage · todo · scheduled · ready · running · blocked · review · done · archived +``` + +Dashboard `BOARD_COLUMNS` (plugin_api.py): `triage, todo, scheduled, ready, running, blocked, review, done` (+ `archived` via toggle). + +`VALID_INITIAL_STATUSES = {running, blocked}`. + +### Allowed status transitions (from plugin PATCH `/tasks/:id`) +- `done` → `complete_task(result, summary, metadata)` +- `blocked` → `block_task(reason)` +- `scheduled` → `schedule_task(reason)` +- `ready` → if currently `blocked`/`scheduled` → `unblock_task`; else direct set (drag-drop `todo→ready`); **refused if any parent not `done`** (409 names the blocking parent) +- `archived` → `archive_task` +- `running` → **rejected** ("use the dispatcher/claim path") +- `todo` / `triage` / `scheduled` → direct set +- Reopening a `done`/`archived` parent demotes stale-`ready` children back to `todo`. + +## 3. Actions / API surface + +### Canonical CLI verbs (`hermes_cli/kanban.py`) +`init, create, list, show, assign, reassign, edit, promote, schedule, diagnostics, link, unlink, claim, comment, complete, block, unblock, archive, tail, watch, heartbeat, runs, assignees, dispatch, daemon, stats, log, notify-subscribe, notify-list, notify-unsubscribe, context, specify, decompose, swarm, gc`, plus `boards {list,create,rm,switch,show,rename,set-workdir}`. + +### Dashboard REST (representative) +`GET /board` · `GET/POST/PATCH/DELETE /tasks[/:id]` · `POST /tasks/bulk` · attachments CRUD · `POST /tasks/:id/comments` · `POST /tasks/:id/{specify,decompose}` · `GET/PATCH /profiles[/:name]` + `/describe-auto` · `GET/PUT /orchestration` · `POST/DELETE /links` · `POST /dispatch` · `GET /diagnostics` · `GET /workers/active` · `GET /runs/:id[/inspect]` · `POST /runs/:id/terminate` · `GET /config` · `WS /events`. + +> Note: the **reference desktop app** (`hermes-agent/apps/desktop`) has **no kanban board UI** — only `/kanban` as a slash-command string and a notifications comment. The rich UI reference is the **dashboard plugin**, not that app. + +## 4. What our hermes-desktop has today + +**Main (`src/main/kanban.ts`)** — execs `hermes kanban` (local) or SSH-tunnels (`sshRunKanban`); blocks plain-remote mode. Exposes: +`listBoards, currentBoard, switchBoard, createBoard, removeBoard, listTasks, getTask, createTask, assignTask, completeTask, blockTask, unblockTask, archiveTask, specifyTask, reclaimTask, commentTask, listClaw3dHqTasks, dispatchOnce`. + +**Renderer (`Kanban.tsx`)** — 6 columns `triage, todo, ready, running, blocked, done`; 6s poll; board switcher (+ read-only Claw3D HQ virtual board); create-task modal; create-board modal; read-only detail modal (body/summary/result/comments/events). Card actions: specify, mark-done, reclaim, unblock, block, archive. Drag-drop transitions: `→done`, `→blocked` (from todo/ready/running), `blocked→ready`. + +## 5. Gap analysis (reference → ours) + +### A. Status coverage +| Status | Canonical | Our columns | Gap | +|---|---|---|---| +| triage,todo,ready,running,blocked,done | ✓ | ✓ | — | +| **scheduled** | ✓ | ✗ | **Missing column** — `scheduled` tasks fall through to `todo` bucket (`Kanban.tsx:322`). | +| **review** | ✓ | ✗ | **Missing column** — `review` tasks mis-bucket to `todo`. | +| archived | ✓ (toggle) | ✗ | No "show archived" toggle in UI (main supports `includeArchived`). | + +### B. Actions defined in main but NOT surfaced in UI +- `assignTask` / reassign — no reassign control in detail modal. +- `commentTask` — detail modal shows comments **read-only**; no compose box. +- `removeBoard` — no delete-board affordance. + +### C. Canonical actions NOT wired at all (no main fn, no UI) +- **`decompose`** — the headline triage flow (fan-out to child graph). We only have `specify`. +- **`promote`** (todo/blocked→ready recovery), **`schedule`** (`scheduled_at`), **`edit`** (title/body/priority in place — we can create but not edit), **`link`/`unlink`** (dependency editing), **`diagnostics`**, **`runs`** (attempt history — `KanbanRun` typed but not fetched standalone), **`assignees`/`stats`**, **`notify-*`**, **`swarm`**, **`gc`**, **`tail`/`watch`**, **`heartbeat`**, **boards `rename`/`set-workdir`**, **attachments** (upload/list/download/delete). + +### D. UX / behavior gaps vs dashboard plugin +- **Polling vs live** — we poll every 6s; plugin tails `task_events` over WebSocket (instant, debounced). No WS bridge in our main. +- **No dependency / progress UI** — no parent/child chips, no `N/M` progress pill, no link editor. +- **No diagnostics surfacing** — no distress badges (hallucination/crash/stuck-blocked) the plugin renders. +- **No bulk multi-select** actions. +- **No orchestration controls** — Auto/Manual decompose pill, profile-description editor, orchestrator settings. +- **Transition rules are re-implemented client-side** (`isValidDragTransition`) and narrower than the backend — risk of drift; e.g. no `→scheduled`, no `→review`, no `→ready` from `todo` via drag. +- **Detail modal is read-only** — can't edit title/body/priority/assignee or add comments/links inline. + +## 6. Recommended plan (phased) + +### Phase 1 — Correctness (low effort, high value) +1. Add `scheduled` + `review` to `COLUMNS` and `en/kanban.ts` `status.*` (and other locales). Fixes silent mis-bucketing. +2. Add a **"show archived"** toggle (main already supports `includeArchived`). +3. Wire **comment compose** in the detail modal (`commentTask` already in main). +4. Wire **reassign** in the detail modal (`assignTask` already in main). + +### Phase 2 — Parity actions +5. Add main fns + UI for **`decompose`**, **`edit`** (title/body/priority), **`promote`**, **`schedule`** (`--at`), **`link`/`unlink`** (dependency editor with parent/child chips + progress pill). +6. Add **`runs`/diagnostics`** read views in the detail drawer (attempt history, distress badges). + +### Phase 3 — Live + richer UX +7. Replace 6s poll with a **`task_events` tail** (SSH `kanban watch --json` stream, or local tail) for instant updates. +8. **Bulk multi-select** actions; **orchestration** Auto/Manual + profile descriptions; **attachments**. + +### Cross-cutting +- Prefer routing transitions through backend verbs rather than widening the client-side `isValidDragTransition`, to avoid drift from `kanban_db` rules. +- Keep SSH-tunnel + remote-unsupported guards on every new verb (existing pattern in `kanban.ts`). +- Each new IPC verb needs: `kanban.ts` fn → `ipc/register.ts` → `preload/index.ts` (+ `.d.ts`) → renderer. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5f9f00a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 github.com/fathah + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/PROFILE_MODAL_HANDOFF.md b/PROFILE_MODAL_HANDOFF.md new file mode 100644 index 0000000..b12925a --- /dev/null +++ b/PROFILE_MODAL_HANDOFF.md @@ -0,0 +1,102 @@ +# Profile Modal — Handoff + +A global, reusable profile detail/settings modal for Hermes Desktop (Electron + React renderer). Built on branch `pr/746`. This doc is a self-contained handoff so another agent can continue the work. + +## What it is + +A single **80vw × 80vh** modal, mounted once at the app root, opened from anywhere via a context hook. It has a **left section-nav** (Profile / Wallet / Advanced) and a scrollable right content pane. It replaces the old inline "appearance" modal that used to live inside the Agents screen. + +It was built to grow — the user has "more plans with profile" (e.g. a real Wallet screen). + +## Files + +| File | Role | +| --- | --- | +| `src/renderer/src/components/profile/ProfileModal.tsx` | The modal UI (header, left nav, panes, mutations). | +| `src/renderer/src/components/profile/ProfileModalProvider.tsx` | Mounts the modal at app root; holds open state. | +| `src/renderer/src/components/profile/ProfileModalContext.ts` | Context + `useProfileModal()` hook + `OpenProfileOptions` type. | +| `src/renderer/src/App.tsx` | `` wraps the app (inside `FontProvider`). | +| `src/renderer/src/screens/Layout/ProfileSwitcher.tsx` | Sidebar popover; active profile button calls `openProfile`. | +| `src/renderer/src/screens/Agents/Agents.tsx` | Profiles screen; pencil/card edit calls `openProfile` (inline modal removed). | +| `src/renderer/src/assets/main.css` | All `.profile-modal-*` styles (search that prefix). | +| `src/renderer/src/assets/icons/index.tsx` | Re-exports lucide icons; added `User`, `Wallet`. | +| `src/shared/i18n/locales/en/agents.ts` | i18n keys (English source; see i18n note). | +| `lat.md/sidebar-navigation.md` | Architecture doc, section "Profile detail modal" (keep in sync). | + +## How to open it + +```ts +import { useProfileModal } from "../../components/profile/ProfileModalContext"; + +const { openProfile } = useProfileModal(); + +openProfile("fatha", { + onChanged: reloadMyList, // called after every successful mutation + onDeleted: (name) => { /* e.g. fall back to "default" if it was active */ }, +}); +``` + +The modal **self-loads** its data via `window.hermesAPI.listProfiles()` (there is no single-profile IPC) and re-reads after every mutation, so callers only need `onChanged`/`onDeleted` to refresh their own lists. + +## Current structure + +**Header:** small `ProfileAvatar` (28px) + the profile **name only** (no "Edit {name}") + close (X). + +**Left nav** (`PROFILE_SECTIONS` in `ProfileModal.tsx`), each item = icon + label: +- **Profile** (`User` icon) — large avatar + gateway dot, name + `default` tag, Upload/Remove image, the provider/model/skills/gateway chips, and the color swatches. +- **Wallet** (`Wallet` icon) — **placeholder only**: centered "Coming soon" (`.profile-modal-coming-soon`). Not yet implemented. +- **Advanced** (`Settings` icon) — the Delete Profile danger zone. + +**Behaviors:** +- Every profile is editable (avatar + color), **including `default`**. +- Only `default` **cannot be deleted** — its Advanced pane shows `agents.defaultNotDeletable` instead of the delete button. +- Dismiss: overlay click, Escape, close (X), or Done button. + +## Profile data shape (`listProfiles()`) + +```ts +{ name, path, isDefault, isActive, model, provider, hasEnv, hasSoul, + skillCount, gatewayRunning, color?, avatar? } +``` + +## IPC available on `window.hermesAPI` (no new IPC was added) + +- `listProfiles()` → `ProfileInfo[]` +- `setProfileColor(name, color)` → `{ success, error? }` +- `setProfileAvatar(name, dataUrl)` → `{ success, error? }` +- `removeProfileAvatar(name)` → `{ success, error? }` +- `deleteProfile(name)` → `{ success, error? }` +- `createProfile(name, clone)`, `setActiveProfile(name)` (used elsewhere) + +Avatar files are converted with `fileToAvatarDataUrl` (`src/renderer/src/utils/imageResize.ts`). Colors come from `PROFILE_COLORS` (`src/shared/profileColors.ts`). + +## How to add a new section (e.g. build out Wallet) + +1. Add the id to the `ProfileSection` union and an entry to `PROFILE_SECTIONS` (`{ id, labelKey, Icon }`) in `ProfileModal.tsx`. +2. Add a `{section === "" && (
)}` block in the content area. +3. Add the nav label key to `src/shared/i18n/locales/en/agents.ts` (e.g. `sectionWallet`). +4. Style with existing `.profile-modal-*` classes or add new ones in `main.css`. + +## Project conventions (important) + +- **i18n**: source/fallback locale is `en`. New UI strings go in `src/shared/i18n/locales/en/agents.ts`; the other 10 locales (`es, he, id, ja, pl, pt-BR, pt-PT, tr, zh-CN, zh-TW`) **fall back to en automatically** (`FALLBACK_LOCALE` in `src/shared/i18n/index.ts`), so you don't have to edit them to ship — translate later. +- **lat.md sync (required)**: this repo uses [lat.md]. After any code change, update the relevant section in `lat.md/` and run `lat check` (a Stop hook enforces this). The profile modal is documented in `lat.md/sidebar-navigation.md` → "Profile detail modal". Wiki links like `[[src/.../ProfileModal.tsx#ProfileModal]]` must resolve. +- **Node for tooling**: the repo's `.nvmrc` pins Node 21, but `vitest`/typecheck need **Node ≥22** (`nvm use 22.19.0`) — Node 21 fails to load `vitest.config.ts` (`ERR_REQUIRE_ESM`). +- **react-refresh**: keep hooks/context in `.ts` files separate from the provider component (`.tsx`) — that's why context/hook and provider are split. + +## Verify + +```bash +nvm use 22.19.0 +npm run typecheck:web +npx eslint src/renderer/src/components/profile/*.ts src/renderer/src/components/profile/*.tsx +lat check +``` + +Manual (`npm run dev`, Node ≥22): sidebar profile popover → click the active profile → modal opens; switch nav sections; edit color/avatar (reflects live in sidebar + Agents); Wallet shows "Coming soon"; Advanced deletes non-default profiles (default shows the not-deletable note). + +## Known open items / ideas + +- **Wallet** is a stub — needs the real screen + likely new IPC for wallet/balance. +- Advanced currently holds only Delete; the user mentioned "wallet etc. in advanced … add later," so more settings can live there. +- No automated tests yet for `ProfileModal` (the dashboard adapter has tests as a pattern to follow under `src/renderer/src/screens/Chat/dashboardEventAdapter.test.ts`). diff --git a/README.es-LATAM.md b/README.es-LATAM.md new file mode 100644 index 0000000..d07b69d --- /dev/null +++ b/README.es-LATAM.md @@ -0,0 +1,350 @@ +HERMES DESKTOP + +
+

+ Twitter/X + Discord + Licencia: MIT + Releases + + Estrellas + + + Descargas + + + Token $HD + +

+ +

+ English · + 简体中文 · + 日本語 · + Español (LATAM) +

+ +

+ + + + + Star History Rank + + +

+ +> **Este proyecto está en desarrollo activo.** Las funciones pueden cambiar y algunas cosas podrían no funcionar perfectamente. Si encuentras un problema o tienes una idea, [abre un issue](https://github.com/fathah/hermes-desktop/issues). ¡Las contribuciones son bienvenidas! + +Hermes Desktop es una aplicación nativa de escritorio para instalar, configurar y chatear con [Hermes Agent](https://github.com/NousResearch/hermes-agent) — un asistente de IA con autoaprendizaje, uso de herramientas, mensajería multiplataforma y un ciclo de aprendizaje cerrado. + +En lugar de manejar el CLI a mano, la app guía todo el proceso de instalación, configuración de proveedores y uso diario en un solo lugar. Usa el script oficial de instalación de Hermes, guarda los archivos en `~/.hermes` y te da una GUI para chat, sesiones, perfiles, memoria, habilidades, herramientas, tareas programadas, gateways de mensajería y más. + +## Patrocinadores + + + Atlas Cloud + + +> **[Atlas Cloud](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=hermes-desktop)** es una plataforma de inferencia de IA full-modal compatible con OpenAI (DeepSeek, Qwen, GLM, Kimi, MiniMax y más). Úsala en Hermes Desktop seleccionando **Atlas Cloud** como tu proveedor — la URL base se configura automáticamente. + +## Instalación + +Descargar ahora + +### Windows + +> **Usuarios de Windows:** El instalador no tiene firma de código. Windows SmartScreen mostrará una advertencia al primer lanzamiento — haz clic en "Más información" → "Ejecutar de todas formas". + +> **Usuarios de WSL:** Si el instalador se queda colgado en `Switching to root user to install dependencies...`, Playwright está esperando una contraseña de sudo que no tiene TTY para leerla. Otorga sudo sin contraseña para la instalación y reviértelo al terminar: +> +> ```bash +> echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/hermes-install +> # …vuelve a ejecutar el instalador; cuando termine: +> sudo rm /etc/sudoers.d/hermes-install +> ``` +> +> Seguimiento en [#109](https://github.com/fathah/hermes-desktop/issues/109). + +### Fedora (RPM) + +```bash +sudo dnf install ./hermes-desktop-.rpm +``` + +> **Usuarios de Fedora:** El `.rpm` no tiene firma GPG. Si tu sistema exige verificación de firma, agrega `--nogpgcheck` al comando de instalación. La actualización automática no está disponible para builds `.rpm` (limitación de `electron-updater`); reinstala el nuevo `.rpm` para actualizar. + +## Vista previa + + + + + + + + + + + + + + + + + + + + + + + + + + +
Chat
Chat
Perfiles
Profiles
Modelos
Models
Proveedores
Providers
Herramientas
Tools
Habilidades
Skills
Tareas programadas
Schedules
Gateway
Gateway
Persona
Persona
Kanban
Kanban
Oficina
Office
Configuración
Settings
+ +## Funcionalidades + +- **Instalación guiada en el primer uso** de Hermes Agent con seguimiento de progreso y resolución de dependencias +- **Backend local o remoto** — ejecuta Hermes localmente en `127.0.0.1:8642`, o conecta la app a un servidor remoto con URL + clave API +- **Soporte multi-proveedor** — OpenRouter, Anthropic, OpenAI, Google (Gemini), xAI (Grok), Nous Portal, Qwen, MiniMax, Hugging Face, Groq y endpoints compatibles con OpenAI (LM Studio, Atomic Chat, Ollama, vLLM, llama.cpp) +- **UI de chat con streaming** con SSE, indicadores de progreso de herramientas, renderizado de Markdown y resaltado de sintaxis +- **Seguimiento de tokens** — conteo en tiempo real de tokens de entrada/salida y costo en el pie del chat, más el comando `/usage` +- **22 comandos slash** — `/new`, `/clear`, `/fast`, `/web`, `/image`, `/browse`, `/code`, `/shell`, `/usage`, `/help`, `/tools`, `/skills`, `/model`, `/memory`, `/persona`, `/version`, `/compact`, `/compress`, `/undo`, `/retry`, `/debug`, `/status` y más +- **Gestión de sesiones** — búsqueda de texto completo (SQLite FTS5), historial agrupado por fecha, reanudar y buscar conversaciones +- **Cambio de perfiles** — crea, elimina y cambia entre entornos Hermes con configuración aislada +- **14 conjuntos de herramientas** — web, navegador, terminal, archivos, ejecución de código, visión, generación de imágenes, TTS, habilidades, memoria, búsqueda de sesiones, clarificación, delegación, MoA y planificación de tareas +- **Sistema de memoria** — ver/editar entradas de memoria, perfil de usuario, seguimiento de capacidad y proveedores de memoria (Honcho, Hindsight, Mem0, RetainDB, Supermemory, ByteRover) +- **Editor de Persona** — edita y restablece el archivo SOUL.md de personalidad de tu agente +- **Modelos guardados** — gestión CRUD de configuraciones de modelos por proveedor +- **Tareas programadas** — constructor de cron jobs (minutos, cada hora, diario, semanal, cron personalizado) con 15 destinos de entrega +- **16 gateways de mensajería** — Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost, Email (IMAP/SMTP), SMS (Twilio/Vonage), iMessage (BlueBubbles), DingTalk, Feishu/Lark, WeCom, WeChat (iLink Bot), Webhooks, Home Assistant +- **Hermes Office (Claw3d)** — interfaz visual 3D con servidor de desarrollo y gestión de adaptadores +- **Backup, importar y diagnóstico** — respaldo/restauración completa y diagnóstico del sistema desde Configuración +- **Visor de logs** — visualiza logs de gateway y agente directamente desde la pantalla de Configuración +- **Actualizador automático** — verifica e instala actualizaciones vía electron-updater +- **Listo para i18n** — framework de internacionalización con localización en inglés para todas las pantallas, listo para traducciones de la comunidad +- **Suite de pruebas** — parser SSE, handlers IPC, superficie de API preload, utilidades del instalador y validación de constantes con Vitest + +## Cómo funciona + +Al primer lanzamiento, la app: + +1. Pregunta si deseas ejecutar Hermes **localmente** o conectarte a un **servidor remoto**. +2. **Modo local:** verifica si Hermes ya está instalado en `~/.hermes`; si no, ejecuta el instalador oficial con resolución de dependencias (Git, uv, Python 3.11+). +3. **Modo remoto:** solicita la URL de la API remota y la clave API, valida la conexión y omite la instalación local. +4. Solicita un proveedor de API o endpoint de modelo local. +5. Guarda la configuración del proveedor y las claves API en los archivos de configuración de Hermes. +6. Lanza el workspace principal una vez completada la configuración. + +En modo local, las solicitudes de chat van por `http://127.0.0.1:8642` con streaming SSE. En modo remoto, la app se comunica con tu URL remota configurada con el mismo protocolo de streaming. La app parsea el stream en tiempo real, renderizando progreso de herramientas, contenido Markdown y uso de tokens a medida que llegan. + +## Pantallas + +| Pantalla | Descripción | +| ----------------- | -------------------------------------------------------------------------------------------------- | +| **Chat** | UI de conversación con streaming, comandos slash, progreso de herramientas y seguimiento de tokens | +| **Sesiones** | Navega, busca y reanuda conversaciones pasadas | +| **Agentes** | Crea, elimina y cambia entre perfiles de Hermes | +| **Habilidades** | Navega, instala y gestiona habilidades incluidas e instaladas | +| **Modelos** | Gestiona configuraciones de modelos guardadas por proveedor | +| **Memoria** | Ver/editar entradas de memoria, perfil de usuario y configurar proveedores de memoria | +| **Soul** | Edita la persona del perfil activo (SOUL.md) | +| **Herramientas** | Activa o desactiva conjuntos de herramientas individuales | +| **Programadas** | Crea y gestiona cron jobs con destinos de entrega | +| **Gateway** | Configura y controla integraciones de plataformas de mensajería | +| **Oficina** | Configuración y gestión de la interfaz visual Claw3d | +| **Configuración** | Config de proveedor, pools de credenciales, backup/importar, visor de logs, red, tema | + +## Proveedores soportados + +### Patrocinadores + +| Proveedor | Notas | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| **Atlas Cloud** | Gateway compatible con OpenAI — DeepSeek, Qwen, GLM, Kimi, MiniMax y más ([atlascloud.ai](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=hermes-desktop)) | + +### Proveedores de LLM + +| Proveedor | Notas | +| ------------------- | ---------------------------------------- | +| **OpenRouter** | 200+ modelos vía API única (recomendado) | +| **Anthropic** | Acceso directo a Claude | +| **OpenAI** | Acceso directo a GPT | +| **Google (Gemini)** | Google AI Studio | +| **xAI (Grok)** | Modelos Grok | +| **Nous Portal** | Capa gratuita disponible | +| **Qwen** | Modelos QwenAI | +| **MiniMax** | Endpoints globales y de China | +| **Hugging Face** | 20+ modelos abiertos vía HF Inference | +| **Groq** | Inferencia rápida (voz/STT) | +| **Local/Custom** | Cualquier endpoint compatible con OpenAI | + +Los presets locales incluyen LM Studio, Atomic Chat, Ollama, vLLM y llama.cpp. + +### Plataformas de mensajería + +Telegram, Discord, Slack, WhatsApp, Signal, Matrix/Element, Mattermost, Email (IMAP/SMTP), SMS (Twilio y Vonage), iMessage (BlueBubbles), DingTalk, Feishu/Lark, WeCom, WeChat (iLink Bot), Webhooks y Home Assistant. + +### Integraciones de herramientas + +Exa Search, Parallel API, Tavily, Firecrawl, FAL.ai (generación de imágenes), Honcho, Browserbase, Weights & Biases y Tinker. + +## Desarrollo + +### Requisitos previos + +- Node.js y npm +- Un entorno tipo Unix para el instalador de Hermes +- Acceso a internet para descargar Hermes en la primera instalación + +### Instalar dependencias + +```bash +npm install +``` + +### Iniciar la app en desarrollo + +```bash +npm run dev +``` + +### Ejecutar verificaciones + +```bash +npm run lint +npm run typecheck +``` + +### Ejecutar pruebas + +```bash +npm run test +npm run test:watch +``` + +### Construir la app de escritorio + +```bash +npm run build +``` + +Empaquetado por plataforma: + +```bash +npm run build:mac +npm run build:win +npm run build:linux +npm run build:rpm # Solo .rpm para Fedora/RHEL +``` + +## Configuración inicial + +Cuando la app se abre por primera vez, detectará una instalación existente de Hermes o se ofrecerá a instalarla. + +Rutas de configuración soportadas en la UI: + +- `OpenRouter` +- `Anthropic` +- `OpenAI` +- `Local LLM` vía URL base compatible con OpenAI + +Los presets locales incluyen: + +- LM Studio +- Atomic Chat +- Ollama +- vLLM +- llama.cpp + +Los archivos de Hermes se gestionan en: + +- `~/.hermes` +- `~/.hermes/.env` +- `~/.hermes/config.yaml` +- `~/.hermes/hermes-agent` +- `~/.hermes/profiles/` — directorios de perfiles con nombre +- `~/.hermes/state.db` — base de datos del historial de sesiones +- `~/.hermes/cron/jobs.json` — tareas programadas + +## Proveedor de secretos + +Por defecto, las claves API viven en `~/.hermes/.env` (el proveedor **env**). No se necesita configuración — este es el comportamiento histórico y nada cambia para ti. + +Si prefieres no guardar claves en un `.env` en texto plano, el proveedor **command** (de activación opcional) las resuelve ejecutando un comando auxiliar que tú configuras. El orden de resolución en todos lados es: `process.env` → `.env` → proveedor → no definida. + +Helper por clave (el nombre de la clave solicitada llega como `$HERMES_SECRET_KEY`): + +```yaml +# ~/.hermes/config.yaml +secrets: + provider: command + command: secret-tool lookup hermes "$HERMES_SECRET_KEY" +``` + +O un helper que vuelca un bloque dotenv (por ejemplo, un vault que se descifra en tmpfs): + +```yaml +secrets: + provider: command + command: "cat /run/user/1000/hermes-secrets.env" +``` + +La salida del helper puede ser un valor único (helpers por clave) o líneas `KEY=VALUE` (volcados dotenv); ambos formatos se detectan automáticamente. + +### Integración con vault / gestor de secretos (sin TPM requerido) + +El proveedor `command` es **agnóstico al vault** — ejecuta el helper que configures y lee su stdout. El helper es lo único que necesita comunicarse con tu almacén de secretos. Si no tienes un keyfile sellado con TPM, cualquiera de estas opciones funciona sin cambios en el código de Hermes: + +- **KeePassXC (BD solo con contraseña, sin keyfile):** apunta `secrets.command` a un pequeño script `kpxc-export.sh` que hace `keepassxc-cli ls ~/secrets/hermes.kdbx <<<"$KPXC_PASSWORD"` y vuelca el grupo relevante como dotenv. Pide la contraseña maestra una vez por sesión. +- **GnuPG con clave solo de contraseña:** `gpg --batch --passphrase-fd 0 --decrypt ~/.keys/api-keys.gpg` funciona directamente como valor de `command`. Pasa la contraseña vía descriptor de archivo o variable de entorno, nunca como argumento. +- **`pass` (el gestor de contraseñas unix estándar):** `command: "pass show hermes/$HERMES_SECRET_KEY"` para helper por clave, o un script wrapper para volcado dotenv. +- **`secret-tool` (libsecret/Gnome Keyring):** `command: "secret-tool lookup hermes $HERMES_SECRET_KEY"` (ya mostrado arriba como ejemplo canónico por clave). +- **Bitwarden CLI:** `bw get item "$HERMES_SECRET_KEY" | jq -r .notes` (después de `bw unlock` en la sesión). +- **1Password CLI:** `op read "op://vault/$HERMES_SECRET_KEY/credential"`. +- **Archivo env plano con permisos gestionados:** `command: "cat ~/.config/hermes/secrets.env"` con `chmod 600` y el archivo propiedad de tu usuario. No tan seguro como un vault, pero mejor que un `.env` legible por todos. + +El punto: **cualquier helper que imprima un valor (por clave) o un bloque dotenv (modo lista) en stdout funcionará**, y Hermes impone un timeout de 3 segundos y un límite de 1 MiB de salida al helper. El proveedor no hace suposiciones sobre TPM, FIDO2, tarjetas inteligentes ni keychains de plataforma. + +Modelo de seguridad: + +- El string de comando es tu propia configuración — mismo nivel de confianza que `.env`. Se ejecuta vía `/bin/sh -c`, por lo que el proveedor command es solo POSIX (Linux/macOS); Windows se mantiene en el proveedor env. +- El helper hereda el entorno del proceso más `HERMES_SECRET_KEY`; el nombre de la clave se pasa como dato, nunca interpolado en el string del shell. +- Timeout fijo de 3 segundos, límite de 1 MiB de salida, y stderr se descarta. +- Los valores resueltos nunca se registran ni se escriben en disco; los fallos degradan a "clave no definida", registrando solo el código de salida/señal. +- El broadcast de inicio de gateway usa una única llamada `list()`, nunca un loop de helper por clave. + +Fuente de verdad: [`src/main/secrets/`](src/main/secrets/). + +## Stack tecnológico + +- **Electron** 39 — shell de escritorio multiplataforma +- **React** 19 — framework de UI +- **TypeScript** 5.9 — tipado seguro en procesos main y renderer +- **Tailwind CSS** 4 — estilos utility-first +- **Vite** 7 + electron-vite — servidor de desarrollo rápido y herramientas de build +- **better-sqlite3** — almacenamiento local de sesiones con búsqueda FTS5 +- **i18next** — framework de internacionalización +- **Vitest** — test runner + +## Notas + +- La app de escritorio depende del proyecto upstream Hermes Agent para el comportamiento del agente y la ejecución de herramientas. +- El instalador integrado ejecuta el script oficial de instalación de Hermes con `--skip-setup`, luego completa la configuración del proveedor en la GUI. +- Los proveedores de modelos locales no requieren clave API, pero el servidor compatible debe estar ejecutándose. +- Las rutas alternativas de registro npm son compatibles para entornos con acceso restringido a internet. + +## Contribuir + +¡Las contribuciones son bienvenidas! Consulta la [Guía de contribución](CONTRIBUTING.md) para comenzar. Si no sabes por dónde empezar, mira los [issues abiertos](https://github.com/fathah/hermes-desktop/issues). ¿Encontraste un bug o tienes una solicitud de funcionalidad? [Abre un issue](https://github.com/fathah/hermes-desktop/issues/new). + +## Proyecto relacionado + +Para el agente central, documentación y flujos de trabajo CLI, consulta el repositorio principal de Hermes Agent: + +- https://github.com/NousResearch/hermes-agent + +--- + +_Traducción al español LATAM por [Nanoboy](https://github.com/365diascollaboration-prog)._ diff --git a/README.ja-JP.md b/README.ja-JP.md new file mode 100644 index 0000000..b0a735d --- /dev/null +++ b/README.ja-JP.md @@ -0,0 +1,268 @@ +HERMES DESKTOP + +
+

+ Documentation + Telegram + License: MIT + Releases + + Stars + + + Downloads + +

+ +> **本プロジェクトは現在も活発に開発中です。** 機能は変更される可能性があり、一部が動作しなくなることもあります。問題に遭遇した場合や、アイデアがある場合は[Issue を作成してください](https://github.com/fathah/hermes-desktop/issues)。コントリビューションも歓迎しています! + +## 言語 + +- English: `README.md` +- 简体中文: `README.zh-CN.md` +- 日本語: `README.ja-JP.md` + +Hermes Desktop は、[Hermes Agent](https://github.com/NousResearch/hermes-agent)(ツール使用、マルチプラットフォームメッセージング、クローズドな学習ループを備えた、自己改善型 AI アシスタント)のインストール・設定・チャットを行うためのネイティブデスクトップアプリです。 + +CLI を手作業で管理する代わりに、本アプリではインストール、プロバイダのセットアップ、日常的な利用までを一箇所でガイドします。公式の Hermes インストールスクリプトを使用し、Hermes を `~/.hermes` に保存し、チャット、セッション、プロファイル、メモリ、スキル、ツール、スケジューリング、メッセージングゲートウェイなどを GUI で操作できます。 + +## インストール + +Download Now + +### Windows + +> **Windows ユーザーへ:** インストーラはコード署名されていません。初回起動時に Windows SmartScreen の警告が表示されます。「詳細情報」→「実行」をクリックしてください。 + +> **WSL ユーザーへ:** インストーラが `Switching to root user to install dependencies...` で停止する場合、Playwright が sudo パスワードを待っていますが、読み取るための TTY がありません。インストール中だけパスワードなしの sudo を許可し、完了後に元へ戻してください。 +> +> ```bash +> echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/hermes-install +> # …インストーラを再実行し、完了したら: +> sudo rm /etc/sudoers.d/hermes-install +> ``` +> +> [#109](https://github.com/fathah/hermes-desktop/issues/109) で追跡しています。 + +### Fedora (RPM) + +```bash +sudo dnf install ./hermes-desktop-.rpm +``` + +> **Fedora ユーザーへ:** `.rpm` は GPG 署名されていません。署名検証を強制する設定の場合は、インストールコマンドに `--nogpgcheck` を追加してください。`.rpm` ビルドは自動アップデートに対応していません(`electron-updater` の制約)。アップデートする場合は新しい `.rpm` を再インストールしてください。 + +## プレビュー + + + + + + + + + + + + + + + + + + + + + + + + + + +
Chat
Chat
Profiles
Profiles
Models
Models
Providers
Providers
Tools
Tools
Skills
Skills
Schedules
Schedules
Gateway
Gateway
Persona
Persona
Kanban
Kanban
Office
Office
Settings
Settings
+ +## 機能 + +- **初回起動時のガイド付きインストール** — Hermes Agent のインストールを進捗表示と依存関係解決付きで案内します +- **ローカル / リモートバックエンド** — Hermes をローカル (`127.0.0.1:8642`) で実行するか、URL + API キーを使ってリモートの Hermes API サーバーに接続できます +- **マルチプロバイダ対応** — OpenRouter, Anthropic, OpenAI, Google (Gemini), xAI (Grok), Nous Portal, Qwen, MiniMax, Hugging Face, Groq、そしてローカルの OpenAI 互換エンドポイント (LM Studio, Ollama, vLLM, llama.cpp) +- **ストリーミングチャット UI** — SSE ストリーミング、ツール進捗インジケータ、Markdown レンダリング、シンタックスハイライト対応 +- **トークン使用量のトラッキング** — プロンプト / 出力トークン数とコストをチャットフッターにリアルタイム表示。`/usage` スラッシュコマンドも利用可能 +- **22 種類のスラッシュコマンド** — `/new`, `/clear`, `/fast`, `/web`, `/image`, `/browse`, `/code`, `/shell`, `/usage`, `/help`, `/tools`, `/skills`, `/model`, `/memory`, `/persona`, `/version`, `/compact`, `/compress`, `/undo`, `/retry`, `/debug`, `/status` など +- **セッション管理** — 全文検索 (SQLite FTS5)、日付別の履歴表示、会話の再開と横断検索 +- **プロファイル切り替え** — Hermes 環境を分離した状態で作成・削除・切り替え可能 +- **14 のツールセット** — Web、ブラウザ、ターミナル、ファイル、コード実行、ビジョン、画像生成、TTS、スキル、メモリ、セッション検索、Clarify、Delegation、MoA、タスクプランニング +- **メモリシステム** — メモリエントリの閲覧 / 編集、ユーザープロファイルメモリ、容量トラッキング、検出可能なメモリプロバイダ (Honcho, Hindsight, Mem0, RetainDB, Supermemory, ByteRover) に対応 +- **ペルソナエディタ** — エージェントの SOUL.md パーソナリティを編集・リセット可能 +- **保存済みモデル** — プロバイダごとのモデル設定を CRUD で管理 +- **スケジュールタスク** — 分単位 / 時間単位 / 日単位 / 週単位 / カスタム cron に対応する cron ジョブビルダー(15 種類の配信先) +- **16 種類のメッセージングゲートウェイ** — Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost, Email (IMAP/SMTP), SMS (Twilio/Vonage), iMessage (BlueBubbles), DingTalk, Feishu/Lark, WeCom, WeChat (iLink Bot), Webhooks, Home Assistant +- **Hermes Office (Claw3d)** — ビジュアルな 3D インターフェース。開発サーバーとアダプタの管理機能を備える +- **バックアップ、インポート、デバッグダンプ** — 設定画面からデータの完全なバックアップ / リストアとシステム診断が可能 +- **ログビューア** — ゲートウェイとエージェントのログを設定画面から直接閲覧 +- **自動アップデーター** — electron-updater を使ったアップデートチェックとインストール +- **i18n 対応** — 全画面に対応する英語ロケールを含む国際化フレームワーク。コミュニティ翻訳の受け入れ準備済み +- **テストスイート** — SSE パーサ、IPC ハンドラ、preload API サーフェス、インストーラユーティリティ、定数バリデーションを Vitest で検証 + +## 動作の仕組み + +初回起動時、アプリは次の手順で動作します。 + +1. Hermes を**ローカル**で動かすか、**リモート**の Hermes API サーバーに接続するかを尋ねます。 +2. **ローカルモード:** `~/.hermes` に Hermes が既にインストールされているかを確認します。なければ、依存関係 (Git, uv, Python 3.11+) を解決しつつ公式インストーラを実行します。 +3. **リモートモード:** リモート API の URL と API キーを入力させ、接続を検証し、ローカルインストールをスキップします。 +4. API プロバイダまたはローカルモデルのエンドポイントを尋ねます。 +5. プロバイダ設定と API キーを Hermes の設定ファイルに保存します。 +6. セットアップが完了するとメインのワークスペースを起動します。 + +ローカルモードでは、チャットリクエストは `http://127.0.0.1:8642` 経由で SSE ストリーミングされます。リモートモードでは、設定したリモート URL に対して同じストリーミングプロトコルで通信します。デスクトップアプリはストリームをリアルタイムで解析し、ツール進捗、Markdown コンテンツ、トークン使用量を順次レンダリングします。 + +## 画面構成 + +| 画面 | 説明 | +| ------------- | --------------------------------------------------------------------------------------------- | +| **Chat** | ストリーミング会話 UI。スラッシュコマンド、ツール進捗、トークントラッキングに対応 | +| **Sessions** | 過去の会話の閲覧、検索、再開 | +| **Agents** | Hermes プロファイルの作成、削除、切り替え | +| **Skills** | バンドル済み / インストール済みスキルの閲覧、インストール、管理 | +| **Models** | プロバイダごとに保存されたモデル設定の管理 | +| **Memory** | メモリエントリとユーザープロファイルの閲覧 / 編集、メモリプロバイダの設定 | +| **Soul** | アクティブなプロファイルのペルソナ (SOUL.md) を編集 | +| **Tools** | 個別のツールセットを有効化 / 無効化 | +| **Schedules** | 配信先付きの cron ジョブを作成・管理 | +| **Gateway** | メッセージングプラットフォーム統合の設定と制御 | +| **Office** | Claw3d ビジュアルインターフェースのセットアップと管理 | +| **Settings** | プロバイダ設定、認証情報プール、バックアップ / インポート、ログビューア、ネットワーク、テーマ | + +## 対応プロバイダ + +### LLM プロバイダ + +| プロバイダ | 備考 | +| ------------------- | ---------------------------------------------- | +| **OpenRouter** | 単一 API で 200 以上のモデルを利用可能(推奨) | +| **Anthropic** | Claude に直接アクセス | +| **OpenAI** | GPT に直接アクセス | +| **Google (Gemini)** | Google AI Studio | +| **xAI (Grok)** | Grok モデル | +| **Nous Portal** | 無料枠あり | +| **Qwen** | QwenAI モデル | +| **MiniMax** | グローバル / 中国向けエンドポイント | +| **Hugging Face** | HF Inference 経由で 20 以上のオープンモデル | +| **Groq** | 高速推論 (Voice/STT) | +| **Local/Custom** | 任意の OpenAI 互換エンドポイント | + +LM Studio、Ollama、vLLM、llama.cpp 用のローカルプリセットが付属しています。 + +### メッセージングプラットフォーム + +Telegram、Discord、Slack、WhatsApp、Signal、Matrix/Element、Mattermost、Email (IMAP/SMTP)、SMS (Twilio & Vonage)、iMessage (BlueBubbles)、DingTalk、Feishu/Lark、WeCom、WeChat (iLink Bot)、Webhooks、Home Assistant。 + +### ツール統合 + +Exa Search、Parallel API、Tavily、Firecrawl、FAL.ai (画像生成)、Honcho、Browserbase、Weights & Biases、Tinker。 + +## 開発 + +### 前提条件 + +- Node.js と npm +- Hermes インストーラ用の Unix 系シェル環境 +- 初回起動時に Hermes をダウンロードするためのネットワークアクセス + +### 依存関係のインストール + +```bash +npm install +``` + +### 開発モードでアプリを起動 + +```bash +npm run dev +``` + +### チェック実行 + +```bash +npm run lint +npm run typecheck +``` + +### テスト実行 + +```bash +npm run test +npm run test:watch +``` + +### デスクトップアプリのビルド + +```bash +npm run build +``` + +プラットフォーム別パッケージング: + +```bash +npm run build:mac +npm run build:win +npm run build:linux +npm run build:rpm # Fedora/RHEL .rpm のみ +``` + +## 初回セットアップ + +アプリを初めて開くと、既存の Hermes インストールを検出するか、インストールを提案します。 + +UI でサポートされているセットアップパス: + +- `OpenRouter` +- `Anthropic` +- `OpenAI` +- OpenAI 互換 base URL を使った `Local LLM` + +以下のローカルプリセットが付属しています。 + +- LM Studio +- Ollama +- vLLM +- llama.cpp + +Hermes のファイルは以下の場所で管理されます。 + +- `~/.hermes` +- `~/.hermes/.env` +- `~/.hermes/config.yaml` +- `~/.hermes/hermes-agent` +- `~/.hermes/profiles/` — 名前付きプロファイルディレクトリ +- `~/.hermes/state.db` — セッション履歴データベース +- `~/.hermes/cron/jobs.json` — スケジュールタスク + +## 技術スタック + +- **Electron** 39 — クロスプラットフォームのデスクトップシェル +- **React** 19 — UI フレームワーク +- **TypeScript** 5.9 — main / renderer プロセス間で型安全性を確保 +- **Tailwind CSS** 4 — ユーティリティファーストのスタイリング +- **Vite** 7 + electron-vite — 高速な開発サーバーとビルドツール +- **better-sqlite3** — FTS5 全文検索付きのローカルセッションストレージ +- **i18next** — 国際化フレームワーク +- **Vitest** — テストランナー + +## 補足 + +- 本デスクトップアプリはエージェントの動作やツール実行を上流の Hermes Agent プロジェクトに依存しています。 +- 内蔵インストーラは公式の Hermes インストールスクリプトを `--skip-setup` 付きで実行し、その後 GUI でプロバイダ設定を完了します。 +- ローカルモデルプロバイダには API キーは不要ですが、互換サーバーが事前に起動している必要があります。 +- ネットワーク制限のある環境向けに、代替の npm レジストリ経路をサポートしています。 + +## コントリビューション + +コントリビューションを歓迎します!始め方は[コントリビューションガイド](CONTRIBUTING.md)をご覧ください。どこから手を付ければよいか分からない場合は、[Open Issues](https://github.com/fathah/hermes-desktop/issues) を確認してください。バグを見つけた、または機能要望がある場合は [Issue を作成してください](https://github.com/fathah/hermes-desktop/issues/new)。 + +## 関連プロジェクト + +コアエージェント、ドキュメント、CLI ワークフローについては、Hermes Agent 本体のリポジトリを参照してください。 + +- https://github.com/NousResearch/hermes-agent diff --git a/README.md b/README.md new file mode 100644 index 0000000..c82c47f --- /dev/null +++ b/README.md @@ -0,0 +1,350 @@ +HERMES DESKTOP + +
+

+ Twitter + Discord + License: MIT + Releases + + Stars + + + Downloads + + + Downloads + + +

+ +

+ English · + 简体中文 · + 日本語 · + Español (LATAM) +

+ +

+ + + + + + + + Star History Rank + + +

+ + +> **This project is in active development.** Features may change, and some things might break. If you run into a problem or have an idea, [open an issue](https://github.com/fathah/hermes-desktop/issues). Contributions are welcome! + +Hermes One is a community maintained native desktop app for installing, configuring, and chatting with [Hermes Agent](https://github.com/NousResearch/hermes-agent) — a self-improving AI assistant with tool use, multi-platform messaging, and a closed learning loop. + +Instead of managing the CLI by hand, the app walks through install, provider setup, and day-to-day usage in one place. It uses the official Hermes install script, stores Hermes in `~/.hermes`, and gives you a GUI for chat, sessions, profiles, memory, skills, tools, scheduling, messaging gateways, and more. + +[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/D1D41ZEKFO) + +## Sponsors + +> [Want to appear here?](mailto:fathah@hermesone.org) + +
+Click to collapse +
+ + + + + + + + + + + + +
Atlas Cloud Atlas Cloud is a full-modal, OpenAI-compatible AI inference platform. Use it in Hermes One by selecting Atlas Cloud as your provider. The base URL is pre-configured automatically.
Greptile Greptile is an AI code reviewer. It reviews and tests pull requests with full context of the codebase. It catches bugs, flags regressions, and leaves inline review comments on every PR automatically.
+ +
+ +## Install + +Download Now + +
+Windows +
+ +> **Windows users:** The installer is not code-signed. Windows SmartScreen will warn on first launch — click "More info" → "Run anyway". + +> **WSL users:** If the installer stalls at `Switching to root user to install dependencies...`, Playwright is waiting for a sudo password that has no TTY to read from. Grant passwordless sudo for the install, then revert when finished: +> +> ```bash +> echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/hermes-install +> # …re-run the installer; once it finishes: +> sudo rm /etc/sudoers.d/hermes-install +> ``` +> +> Tracked in [#109](https://github.com/fathah/hermes-desktop/issues/109). + +
+ +
+Fedora (RPM) +
+ +```bash +sudo dnf install ./hermes-desktop-.rpm +``` + +> **Fedora users:** The `.rpm` is not GPG-signed. If your system enforces signature checking, append `--nogpgcheck` to the install command. Auto-update is not supported for `.rpm` builds (limitation of `electron-updater`); reinstall the new `.rpm` to update. + +
+ +## Preview + + + + + + + + + + + + + + + + + + + + + + + + + + +
Chat
Chat
Profiles
Profiles
Models
Models
Providers
Providers
Tools
Tools
Discover
Skills
Schedules
Schedules
Gateway
Gateway
Persona
Persona
Kanban
Kanban
Office
Office
Settings
Settings
+ +## Features + +- **Guided first-run install** for Hermes Agent with progress tracking and dependency resolution +- **Local or remote backend** — run Hermes locally on `127.0.0.1:8642`, or connect the desktop app to a remote Hermes API server with URL + API key +- **Multi-provider support** — OpenRouter, Anthropic, OpenAI, Google (Gemini), xAI (Grok), Nous Portal, Qwen, MiniMax, Hugging Face, Groq, and local OpenAI-compatible endpoints (LM Studio, Atomic Chat, Ollama, vLLM, llama.cpp) +- **Streaming chat UI** with SSE streaming, tool progress indicators, markdown rendering, and syntax highlighting +- **Token usage tracking** — live prompt/completion token counts and cost display in the chat footer, plus a `/usage` slash command +- **22 slash commands** — `/new`, `/clear`, `/fast`, `/web`, `/image`, `/browse`, `/code`, `/shell`, `/usage`, `/help`, `/tools`, `/skills`, `/model`, `/memory`, `/persona`, `/version`, `/compact`, `/compress`, `/undo`, `/retry`, `/debug`, `/status`, and more +- **Session management** — full-text search (SQLite FTS5), date-grouped history, resume and search across conversations +- **Profile switching** — create, delete, and switch between separate Hermes environments with isolated config +- **14 toolsets** — web, browser, terminal, file, code execution, vision, image gen, TTS, skills, memory, session search, clarify, delegation, MoA, and task planning +- **Memory system** — view/edit memory entries, user profile memory, capacity tracking, and discoverable memory providers (Honcho, Hindsight, Mem0, RetainDB, Supermemory, ByteRover) +- **Persona editor** — edit and reset your agent's SOUL.md personality +- **Saved models** — CRUD management for model configurations across providers +- **Scheduled tasks** — cron job builder (minutes, hourly, daily, weekly, custom cron) with 15 delivery targets +- **16 messaging gateways** — Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost, Email (IMAP/SMTP), SMS (Twilio/Vonage), iMessage (BlueBubbles), DingTalk, Feishu/Lark, WeCom, WeChat (iLink Bot), Webhooks, Home Assistant +- **Hermes Office (Claw3d)** — visual 3D interface with dev server and adapter management +- **Backup, import & debug dump** — full data backup/restore and system diagnostics from Settings +- **Log viewer** — view gateway and agent logs directly from the Settings screen +- **Auto-updater** — check for and install updates via electron-updater +- **i18n ready** — internationalization framework with English locale covering all screens, ready for community translations +- **Test suite** — SSE parser, IPC handlers, preload API surface, installer utilities, and constants validation with Vitest + +## How It Works + +On first launch, the app: + +1. Asks whether you want to run Hermes **locally** or connect to a **remote** Hermes API server. +2. **Local mode:** checks whether Hermes is already installed in `~/.hermes`; if not, runs the official Hermes installer with dependency resolution (Git, uv, Python 3.11+). +3. **Remote mode:** prompts for the remote API URL and API key, validates the connection, and skips local install. +4. Prompts for an API provider or local model endpoint. +5. Saves provider config and API keys through Hermes config files. +6. Launches the main workspace once setup is complete. + +In local mode, chat requests go through `http://127.0.0.1:8642` with SSE streaming. In remote mode, the app talks to your configured remote URL with the same streaming protocol. The desktop app parses the stream in real time, rendering tool progress, markdown content, and token usage as it arrives. + +## Screens + +| Screen | Description | +| ------------- | ------------------------------------------------------------------------------------- | +| **Chat** | Streaming conversation UI with slash commands, tool progress, and token tracking | +| **Sessions** | Browse, search, and resume past conversations | +| **Agents** | Create, delete, and switch between Hermes profiles | +| **Skills** | Browse, install, and manage bundled and installed skills | +| **Models** | Manage saved model configurations per provider | +| **Memory** | View/edit memory entries, user profile, and configure memory providers | +| **Soul** | Edit the active profile's persona (SOUL.md) | +| **Tools** | Enable or disable individual toolsets | +| **Schedules** | Create and manage cron jobs with delivery targets | +| **Gateway** | Configure and control messaging platform integrations | +| **Office** | Claw3d visual interface setup and management | +| **Settings** | Provider config, credential pools, backup/import, log viewer, network settings, theme | + +## Supported Providers + +### Sponsors + +| Provider | Notes | +| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Atlas Cloud** | OpenAI-compatible gateway — DeepSeek, Qwen, GLM, Kimi, MiniMax and more ([atlascloud.ai](https://www.atlascloud.ai/?utm_source=github&utm_medium=link&utm_campaign=hermes-desktop)) | + +### LLM Providers + +| Provider | Notes | +| ------------------- | ---------------------------------------- | +| **OpenRouter** | 200+ models via single API (recommended) | +| **Anthropic** | Direct Claude access | +| **OpenAI** | Direct GPT access | +| **Google (Gemini)** | Google AI Studio | +| **xAI (Grok)** | Grok models | +| **Nous Portal** | Free tier available | +| **Qwen** | QwenAI models | +| **MiniMax** | Global and China endpoints | +| **Hugging Face** | 20+ open models via HF Inference | +| **Groq** | Fast inference (voice/STT) | +| **Local/Custom** | Any OpenAI-compatible endpoint | + +Local presets are included for LM Studio, Atomic Chat, Ollama, vLLM, and llama.cpp. + +### Messaging Platforms + +Telegram, Discord, Slack, WhatsApp, Signal, Matrix/Element, Mattermost, Email (IMAP/SMTP), SMS (Twilio & Vonage), iMessage (BlueBubbles), DingTalk, Feishu/Lark, WeCom, WeChat (iLink Bot), Webhooks, and Home Assistant. + +### Tool Integrations + +Exa Search, Parallel API, Tavily, Firecrawl, FAL.ai (image generation), Honcho, Browserbase, Weights & Biases, and Tinker. + +## First-Time Setup + +When the app opens for the first time, it will either detect an existing Hermes installation or offer to install it for you. + +Supported setup paths in the UI: + +- `OpenRouter` +- `Anthropic` +- `OpenAI` +- `Local LLM` via an OpenAI-compatible base URL + +Local presets are included for: + +- LM Studio +- Atomic Chat +- Ollama +- vLLM +- llama.cpp + +Hermes files are managed in: + +- `~/.hermes` +- `~/.hermes/.env` +- `~/.hermes/config.yaml` +- `~/.hermes/hermes-agent` +- `~/.hermes/profiles/` — named profile directories +- `~/.hermes/state.db` — session history database +- `~/.hermes/cron/jobs.json` — scheduled tasks + +## Secrets provider + +By default, API keys live in `~/.hermes/.env` (the **env** provider). No +configuration is needed — this is byte-for-byte the historical behavior, and +nothing changes for you. + +If you'd rather not keep keys in a plaintext `.env`, the opt-in **command** +provider resolves them by running a helper command you configure. Resolution +order everywhere is: `process.env` → `.env` → provider → unset. + +Per-key helper (the requested key name arrives as `$HERMES_SECRET_KEY`): + +```yaml +# ~/.hermes/config.yaml +secrets: + provider: command + command: secret-tool lookup hermes "$HERMES_SECRET_KEY" +``` + +Or a helper that dumps a dotenv blob (e.g. a vault that unseals into tmpfs): + +```yaml +secrets: + provider: command + command: "cat /run/user/1000/hermes-secrets.env" +``` + +The helper's stdout may be either a single bare value (per-key helpers) or +`KEY=VALUE` lines (dotenv dumps); both shapes are auto-detected. + +### Vault / secret manager integration (no TPM required) + +The `command` provider is **vault-agnostic** — it runs whatever helper you +configure and reads its stdout. The helper is the only thing that needs to +talk to your secret store. If you don't have a TPM-sealed keyfile, any of +these work without code changes to Hermes: + +- **KeePassXC (password-only DB, no keyfile):** point `secrets.command` at a + small `kpxc-export.sh` script that does + `keepassxc-cli ls ~/secrets/hermes.kdbx <<<"$KPXC_PASSWORD"` and dumps + the relevant group as dotenv. Prompt the user for the master password + once per session. +- **GnuPG with a passphrase-only key:** `gpg --batch --passphrase-fd 0 +--decrypt ~/.keys/api-keys.gpg` works directly as the `command` value. + Pass the passphrase via a file descriptor or env var, never argv. +- **`pass` (the standard unix password manager):** + `command: "pass show hermes/$HERMES_SECRET_KEY"` for a per-key helper, + or a small wrapper script for a dotenv dump. +- **`secret-tool` (libsecret/Gnome Keyring):** + `command: "secret-tool lookup hermes $HERMES_SECRET_KEY"` (already + shown above as the canonical per-key example). +- **Bitwarden CLI:** `bw get item "$HERMES_SECRET_KEY" | jq -r .notes` + (after `bw unlock` in the session). +- **1Password CLI:** `op read "op://vault/$HERMES_SECRET_KEY/credential"`. +- **Plain env file with user-managed permissions:** + `command: "cat ~/.config/hermes/secrets.env"` with `chmod 600` and + the file owned by your user. Not as secure as a vault, but better than + a world-readable `.env`. + +The point: **any helper that prints a value (per-key) or a dotenv blob +(list-mode) on stdout will work**, and Hermes imposes a 3-second timeout +and 1 MiB output cap on the helper so a misbehaving one can't wedge the +app. The provider makes no assumptions about TPM, FIDO2, smart cards, +or platform keychains. + +Security model: + +- The command string is your own configuration — same trust level as `.env`. + It runs via `/bin/sh -c`, so the command provider is POSIX-only + (Linux/macOS); Windows stays on the env provider. +- The helper inherits the process environment plus `HERMES_SECRET_KEY`; the + key name is passed as data, never interpolated into the shell string. +- Hard 3-second timeout (resolution is synchronous on the main process — keep + helpers fast and non-interactive), 1 MiB output cap, and stderr is discarded. +- Resolved values are never logged or written to disk; failures degrade to + "key unset", logging only exit code/signal. +- The gateway-spawn broadcast uses a single `list()` call, never a per-key + helper loop. + +Source of truth: [`src/main/secrets/`](src/main/secrets/). + +## Notes + +- The desktop app depends on the upstream Hermes Agent project for agent behavior and tool execution. +- The built-in installer runs the official Hermes install script with `--skip-setup`, then completes provider configuration in the GUI. +- Local model providers do not require an API key, but the compatible server must already be running. +- Alternative npm registry routes are supported for environments with restricted network access. + +## Contributing + +Contributions are welcome! Check out the [Contributing Guide](CONTRIBUTING.md) to get started. If you're not sure where to begin, take a look at the [open issues](https://github.com/fathah/hermes-desktop/issues). Found a bug or have a feature request? [File an issue](https://github.com/fathah/hermes-desktop/issues/new). + +## Related Project + +This repo is not affiliated to **Nous Research**. This is a community maintained project. + +For the core agent, docs, and CLI workflows, see the main Hermes Agent repository: + +- https://github.com/NousResearch/hermes-agent diff --git a/README.wehub.md b/README.wehub.md new file mode 100644 index 0000000..26c11b5 --- /dev/null +++ b/README.wehub.md @@ -0,0 +1,7 @@ +# WeHub 来源说明 + +- 原始项目:`fathah/hermes-desktop` +- 原始仓库:https://github.com/fathah/hermes-desktop +- 导入方式:上游默认分支的最新快照 +- 原作者、版权和许可证信息以原始仓库及本仓库 LICENSE 为准 +- 本文件仅用于记录来源,不代表 WeHub 是原项目作者 diff --git a/README.zh-CN.md b/README.zh-CN.md new file mode 100644 index 0000000..9256f8f --- /dev/null +++ b/README.zh-CN.md @@ -0,0 +1,268 @@ +HERMES DESKTOP + +
+

+ 文档 + Telegram + License: MIT + 下载 + + Stars + + + 下载量 + +

+ +> **本项目处于活跃开发阶段。** 功能可能会发生变化,某些功能也可能会失效。如果您遇到问题或有好的想法,请 [提交 Issue](https://github.com/fathah/hermes-desktop/issues)。欢迎贡献代码! + +## 语言 + +- English: `README.md` +- 简体中文: `README.zh-CN.md` +- 日本語: `README.ja-JP.md` + +Hermes Desktop 是一款原生的桌面应用程序,用于安装、配置并与 [Hermes Agent](https://github.com/NousResearch/hermes-agent) 进行聊天——这是一款具备工具调用、多平台消息传递和闭环学习能力的自我进化的 AI 助手。 + +无需手动管理命令行界面 (CLI),该应用可在一个统一界面中引导您完成安装、提供商设置以及日常使用。它使用官方的 Hermes 安装脚本,将 Hermes 存储在 `~/.hermes` 目录下,并为您提供涵盖聊天、会话、配置、记忆、技能、工具、计划任务、消息网关等功能的图形界面。 + +## 安装 + +Download Now + +### Windows + +> **Windows 用户注意:** 安装程序未进行代码签名。首次启动时 Windows SmartScreen 会弹出警告——请点击“更多信息” → “仍要运行”。 + +> **WSL 用户注意:** 如果安装程序停滞在 `Switching to root user to install dependencies...`,这说明 Playwright 正在等待输入 sudo 密码,但在没有 TTY 的情况下无法读取。请在安装期间授予无密码的 sudo 权限,完成后再恢复: +> +> ```bash +> echo "$USER ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/hermes-install +> # …重新运行安装程序;完成后执行: +> sudo rm /etc/sudoers.d/hermes-install +> ``` +> +> 详情请见 [#109](https://github.com/fathah/hermes-desktop/issues/109)。 + +### Fedora (RPM) + +```bash +sudo dnf install ./hermes-desktop-.rpm +``` + +> **Fedora 用户注意:** `.rpm` 包没有 GPG 签名。如果您的系统强制检查签名,请在安装命令后添加 `--nogpgcheck`。`.rpm` 构建不支持自动更新(这是 `electron-updater` 的限制);若要更新,请重新安装新的 `.rpm` 包。 + +## 预览 + + + + + + + + + + + + + + + + + + + + + + + + + + +
聊天 (Chat)
Chat
配置 (Profiles)
Profiles
模型 (Models)
Models
提供商 (Providers)
Providers
工具 (Tools)
Tools
技能 (Skills)
Skills
计划任务 (Schedules)
Schedules
网关 (Gateway)
Gateway
人格 (Persona)
Persona
看板 (Kanban)
Kanban
办公室 (Office)
Office
设置 (Settings)
Settings
+ +## 功能特性 + +- **向导式初次安装**:带有进度跟踪和依赖解析的 Hermes Agent 引导安装。 +- **本地或远程后端**:可在本地 `127.0.0.1:8642` 运行 Hermes,或通过 URL 和 API 密钥将桌面应用连接到远程的 Hermes API 服务器。 +- **多提供商支持**:OpenRouter, Anthropic, OpenAI, Google (Gemini), xAI (Grok), Nous Portal, Qwen, MiniMax, Hugging Face, Groq, 以及本地兼容 OpenAI 格式的端点 (LM Studio, Ollama, vLLM, llama.cpp)。 +- **流式聊天界面**:具有 SSE 流式传输、工具进度指示、Markdown 渲染和语法高亮。 +- **Token 使用情况追踪**:在聊天底部显示实时的 Prompt/补全 Token 计数及预估费用,并可通过 `/usage` 斜杠命令查看。 +- **22 个斜杠命令**:`/new`, `/clear`, `/fast`, `/web`, `/image`, `/browse`, `/code`, `/shell`, `/usage`, `/help`, `/tools`, `/skills`, `/model`, `/memory`, `/persona`, `/version`, `/compact`, `/compress`, `/undo`, `/retry`, `/debug`, `/status` 等等。 +- **会话管理**:全文检索 (SQLite FTS5)、按日期分组的历史记录、在会话之间继续聊天或搜索。 +- **配置切换 (Profile)**:创建、删除并切换不同的 Hermes 环境,配置完全隔离。 +- **14 种工具集**:网络、浏览器、终端、文件、代码执行、视觉识别、图像生成、语音合成 (TTS)、技能、记忆、会话搜索、澄清询问、委托调度、混合专家模型 (MoA) 和任务规划。 +- **记忆系统**:查看/编辑记忆条目和用户资料记忆,追踪容量,并发现不同的记忆提供商(如 Honcho, Hindsight, Mem0, RetainDB, Supermemory, ByteRover)。 +- **人格编辑器**:编辑并重置您的代理 (Agent) 的 `SOUL.md` 人格设定。 +- **已保存模型**:跨不同提供商对模型配置进行增删改查。 +- **计划任务**:支持 15 种推送目标的 Cron 任务构建器(分钟、小时、每日、每周、自定义 Cron)。 +- **16 个消息网关**:Telegram, Discord, Slack, WhatsApp, Signal, Matrix/Element, Mattermost, Email (IMAP/SMTP), SMS (Twilio & Vonage), iMessage (BlueBubbles), 钉钉 (DingTalk), 飞书 (Feishu/Lark), 企业微信 (WeCom), 微信 (WeChat iLink Bot), Webhooks 和 Home Assistant。 +- **Hermes 办公室 (Claw3d)**:具有开发服务器和适配器管理功能的可视化 3D 界面。 +- **备份、导入与诊断导出**:可在设置面板中完成完整的数据备份/恢复,并进行系统诊断。 +- **日志查看器**:直接在设置界面中查看网关和代理的运行日志。 +- **自动更新**:通过 `electron-updater` 检查并安装更新。 +- **国际化 (i18n)**:预置英文语言环境,涵盖所有界面,并已为社区翻译做好框架准备。 +- **测试套件**:涵盖 SSE 解析器、IPC 处理程序、预加载 API、安装程序工具以及常数验证的 Vitest 测试用例。 + +## 运行原理 + +在首次启动时,应用会: + +1. 询问您是希望在**本地**运行 Hermes,还是连接到**远程**的 Hermes API 服务器。 +2. **本地模式:** 检查 `~/.hermes` 目录下是否已安装 Hermes;如果未安装,则运行官方 Hermes 安装脚本并解决依赖关系 (Git, uv, Python 3.11+)。 +3. **远程模式:** 提示输入远程 API URL 和 API 密钥,验证连接,并跳过本地安装。 +4. 提示输入 API 提供商或本地模型端点。 +5. 将提供商配置和 API 密钥保存至 Hermes 配置文件。 +6. 设置完成后启动主工作区。 + +在本地模式下,聊天请求会通过带有 SSE 流的 `http://127.0.0.1:8642` 发送。在远程模式下,应用程序通过相同的流协议与您配置的远程 URL 进行通信。桌面应用会实时解析数据流,并在接收时渲染工具进度、Markdown 内容以及 token 消耗。 + +## 界面说明 + +| 界面 (Screen) | 描述 (Description) | +| -------------------- | --------------------------------------------------------- | +| **聊天 (Chat)** | 支持斜杠命令、工具进度展示和 token 跟踪的流式对话界面 | +| **会话 (Sessions)** | 浏览、搜索并恢复过去的对话 | +| **代理 (Agents)** | 创建、删除和在不同的 Hermes 配置 (Profile) 之间切换 | +| **技能 (Skills)** | 浏览、安装并管理内置及已安装的技能 | +| **模型 (Models)** | 管理并保存各个提供商的模型配置 | +| **记忆 (Memory)** | 查看/编辑记忆条目、用户配置,并配置记忆提供商 | +| **灵魂 (Soul)** | 编辑当前活动配置的代理人格设定 (`SOUL.md`) | +| **工具 (Tools)** | 启用或禁用特定的工具集 | +| **计划 (Schedules)** | 创建并管理定时任务及推送目标 | +| **网关 (Gateway)** | 配置和控制各类消息平台集成 | +| **办公室 (Office)** | Claw3d 可视化界面设置及管理 | +| **设置 (Settings)** | 提供商配置、凭证池、备份/导入、日志查看器、网络设置、主题 | + +## 支持的提供商 + +### 大语言模型 (LLM) 提供商 + +| 提供商 (Provider) | 备注说明 (Notes) | +| ------------------------------ | ---------------------------------------- | +| **OpenRouter** | 通过单一 API 访问 200+ 种模型 (推荐使用) | +| **Anthropic** | 直接访问 Claude 模型 | +| **OpenAI** | 直接访问 GPT 模型 | +| **Google (Gemini)** | Google AI Studio | +| **xAI (Grok)** | Grok 模型 | +| **Nous Portal** | 提供免费额度 | +| **Qwen (通义千问)** | QwenAI 模型 | +| **MiniMax** | 包含全球与中国区端点 | +| **Hugging Face** | 通过 HF Inference 访问 20+ 开源模型 | +| **Groq** | 快速推理 (支持语音/STT) | +| **本地/自定义 (Local/Custom)** | 任何兼容 OpenAI 格式的端点 | + +内置以下本地模型预设:LM Studio, Ollama, vLLM, llama.cpp。 + +### 消息平台 + +Telegram, Discord, Slack, WhatsApp, Signal, Matrix/Element, Mattermost, 电子邮件 (IMAP/SMTP), 短信 (Twilio & Vonage), iMessage (BlueBubbles), 钉钉 (DingTalk), 飞书 (Feishu/Lark), 企业微信 (WeCom), 微信 (WeChat iLink Bot), Webhooks 和 Home Assistant。 + +### 工具集成 + +Exa Search, Parallel API, Tavily, Firecrawl, FAL.ai (图像生成), Honcho, Browserbase, Weights & Biases 和 Tinker。 + +## 开发 + +### 前置要求 + +- Node.js 和 npm +- 能够运行 Hermes 安装程序的类 Unix Shell 环境 +- 首次运行安装 Hermes 时需要网络连接 + +### 安装依赖 + +```bash +npm install +``` + +### 在开发模式下启动应用 + +```bash +npm run dev +``` + +### 运行检查 + +```bash +npm run lint +npm run typecheck +``` + +### 运行测试 + +```bash +npm run test +npm run test:watch +``` + +### 构建桌面应用 + +```bash +npm run build +``` + +各平台打包命令: + +```bash +npm run build:mac +npm run build:win +npm run build:linux +npm run build:rpm # 仅适用于 Fedora/RHEL 的 .rpm 格式 +``` + +## 首次运行设置 + +当应用首次打开时,它会自动检测是否存在已安装的 Hermes 实例,或者提供帮您进行自动安装的选项。 + +UI 中支持的设置路径: + +- `OpenRouter` +- `Anthropic` +- `OpenAI` +- 通过兼容 OpenAI API 基础 URL 接入的 `本地大语言模型 (Local LLM)` + +内置预设包含: + +- LM Studio +- Ollama +- vLLM +- llama.cpp + +Hermes 的相关文件统一管理于以下目录: + +- `~/.hermes` +- `~/.hermes/.env` +- `~/.hermes/config.yaml` +- `~/.hermes/hermes-agent` +- `~/.hermes/profiles/` — 命名配置文件目录 +- `~/.hermes/state.db` — 会话历史数据库 +- `~/.hermes/cron/jobs.json` — 计划任务 + +## 技术栈 + +- **Electron 39** — 跨平台桌面外壳 +- **React 19** — UI 框架 +- **TypeScript 5.9** — 跨主进程和渲染进程的类型安全 +- **Tailwind CSS 4** — 实用优先的样式库 +- **Vite 7 + electron-vite** — 快速开发服务器及构建工具 +- **better-sqlite3** — 带有 FTS5 全文搜索功能的本地会话存储 +- **i18next** — 国际化框架 +- **Vitest** — 测试运行器 + +## 注意事项 + +- 此桌面应用依赖上游的 Hermes Agent 项目来处理代理行为和工具执行。 +- 内置安装程序会通过带有 `--skip-setup` 参数的方式运行官方 Hermes 安装脚本,然后在 GUI 界面中完成提供商相关的配置。 +- 本地模型提供商不需要 API 密钥,但您必须确保兼容的服务器已经在运行中。 +- 在网络受限的环境下,支持配置备用的 npm 镜像源路由。 + +## 参与贡献 + +欢迎大家参与贡献!查看 [参与贡献指南 (Contributing Guide)](CONTRIBUTING.md) 以开始。如果您不知从何入手,可以看一看 [开启的 Issues](https://github.com/fathah/hermes-desktop/issues)。发现了 Bug 或是对功能有新的需求? [提交一个 Issue](https://github.com/fathah/hermes-desktop/issues/new)。 + +## 相关项目 + +如果想了解核心代理功能、详细文档及命令行 (CLI) 的工作流程,请查阅主仓库 Hermes Agent: + +- https://github.com/NousResearch/hermes-agent diff --git a/assets/header.webp b/assets/header.webp new file mode 100644 index 0000000000000000000000000000000000000000..e36946c0d4b8deae366c03c1de09d0a7e4d513d2 GIT binary patch literal 53220 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 nb0T2S8z^N3@563gb( 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 literal 0 HcmV?d00001 diff --git a/assets/partners/greptile.webp b/assets/partners/greptile.webp new file mode 100644 index 0000000000000000000000000000000000000000..8a8c93c6175b50581dfae0baa0402b051c34c1e0 GIT binary patch literal 12266 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 Zfj~e4fagvJ!uLudAez4CP9q?o{{uJ=BYgk> literal 0 HcmV?d00001 diff --git a/build/afterPack.js b/build/afterPack.js new file mode 100644 index 0000000..b4a47dc --- /dev/null +++ b/build/afterPack.js @@ -0,0 +1,52 @@ +const { execSync } = require("child_process"); +const path = require("path"); + +// Sign a single path, ignoring "not an Mach-O" errors for non-binary files. +function sign(target) { + try { + execSync(`codesign --force --sign - "${target}"`, { stdio: "pipe" }); + } catch (e) { + // Ignore files that aren't signable (scripts, plists, etc.) + const msg = (e.stderr || e.stdout || "").toString(); + if ( + !msg.includes("is not an Mach-O file") && + !msg.includes("bundle format unrecognized") + ) { + throw e; + } + } +} + +exports.default = async function afterPack(context) { + if (context.electronPlatformName !== "darwin") return; + + const appPath = path.join( + context.appOutDir, + `${context.packager.appInfo.productFilename}.app`, + ); + + console.log(`Ad-hoc re-signing (inside-out): ${appPath}`); + + // Step 1: sign .dylib files (deepest leaves first) + execSync( + `find "${appPath}" -name "*.dylib" | while IFS= read -r f; do codesign --force --sign - "$f" 2>/dev/null || true; done`, + { stdio: "inherit", shell: "/bin/bash" }, + ); + + // Step 2: sign XPC services and nested .app bundles inside Frameworks + execSync( + `find "${appPath}/Contents/Frameworks" -mindepth 1 -maxdepth 4 \\( -name "*.xpc" -o -name "*.app" \\) -prune | while IFS= read -r f; do codesign --force --sign - "$f" 2>/dev/null || true; done`, + { stdio: "inherit", shell: "/bin/bash" }, + ); + + // Step 3: sign each .framework (the versioned bundle, not through symlinks) + execSync( + `find "${appPath}/Contents/Frameworks" -mindepth 1 -maxdepth 1 -name "*.framework" | while IFS= read -r f; do codesign --force --sign - "$f" 2>/dev/null || true; done`, + { stdio: "inherit", shell: "/bin/bash" }, + ); + + // Step 4: sign the outer .app + execSync(`codesign --force --sign - "${appPath}"`, { stdio: "inherit" }); + + console.log("Ad-hoc re-signing complete."); +}; diff --git a/build/entitlements.mac.inherit.plist b/build/entitlements.mac.inherit.plist new file mode 100644 index 0000000..6bc22e9 --- /dev/null +++ b/build/entitlements.mac.inherit.plist @@ -0,0 +1,14 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + + diff --git a/build/entitlements.mac.plist b/build/entitlements.mac.plist new file mode 100644 index 0000000..6bc22e9 --- /dev/null +++ b/build/entitlements.mac.plist @@ -0,0 +1,14 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.disable-library-validation + + + diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..4e1453bf674ff7dacf4b85927cd9914d1e14bcee GIT binary patch literal 200363 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 literal 0 HcmV?d00001 diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..84f6c495b11b688b3f8ef5e8dbff1192e774bc8f GIT binary patch literal 25734 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 literal 0 HcmV?d00001 diff --git a/build/linux-after-install.sh b/build/linux-after-install.sh new file mode 100755 index 0000000..68ef08f --- /dev/null +++ b/build/linux-after-install.sh @@ -0,0 +1,29 @@ +#!/bin/bash +# After-install hook for the .deb and .rpm packages. +# +# Sets the SUID root bit on chrome-sandbox so Electron's sandbox helper +# can elevate as required. Without this, Electron crashes on close (and +# on first sandboxed renderer launch on some configs) — issue #395. +# +# Why it's needed: Electron's setuid sandbox is the supported sandboxing +# path on Linux when unprivileged user namespaces aren't available. Newer +# Ubuntu (24.04+, definitely 26.04 LTS) ships AppArmor + kernel hardening +# that disable unprivileged user namespaces by default, so the SUID path +# becomes mandatory. +# +# This matches the postinst behaviour of other Electron apps (VS Code, +# Slack, Discord, Signal, etc.). electron-builder doesn't ship this by +# default — it has to be wired up via {deb,rpm}.afterInstall. + +set -e + +SANDBOX="/opt/Hermes One/chrome-sandbox" + +if [ -f "$SANDBOX" ]; then + # 4755 = SUID + rwxr-xr-x. Root-owned by package install; SUID is what + # lets the sandbox briefly elevate for the chroot/setresuid step before + # dropping back to the calling user. + chmod 4755 "$SANDBOX" +fi + +exit 0 diff --git a/build/winget/Installer.template.yaml b/build/winget/Installer.template.yaml new file mode 100644 index 0000000..393ebef --- /dev/null +++ b/build/winget/Installer.template.yaml @@ -0,0 +1,16 @@ +# Generated from this template by scripts/generate-winget-manifests.mjs. +# Placeholders ({{...}}) are replaced at build time. Do not edit the generated copy in dist/. +PackageIdentifier: NousResearch.HermesDesktop +PackageVersion: { { VERSION } } +InstallerLocale: en-US +InstallerType: nullsoft +Scope: user +MinimumOSVersion: 10.0.17763.0 +ReleaseDate: { { RELEASE_DATE } } +Installers: +- Architecture: x64 + InstallerUrl: { { INSTALLER_URL } } + InstallerSha256: { { INSTALLER_SHA256 } } + UpgradeBehavior: install +ManifestType: installer +ManifestVersion: 1.12.0 diff --git a/build/winget/Locale.en-US.template.yaml b/build/winget/Locale.en-US.template.yaml new file mode 100644 index 0000000..4fbb55d --- /dev/null +++ b/build/winget/Locale.en-US.template.yaml @@ -0,0 +1,25 @@ +# Generated from this template by scripts/generate-winget-manifests.mjs. +PackageIdentifier: NousResearch.HermesDesktop +PackageVersion: { { VERSION } } +PackageLocale: en-US +Publisher: Nous Research +PublisherUrl: https://github.com/fathah/hermes-desktop +PublisherSupportUrl: https://github.com/fathah/hermes-desktop/issues +PackageName: Hermes One +PackageUrl: https://github.com/fathah/hermes-desktop +License: MIT +LicenseUrl: https://github.com/fathah/hermes-desktop/blob/main/LICENSE +ShortDescription: Self-improving AI assistant desktop app +Description: |- + Hermes One is a native desktop app for installing, configuring, and chatting + with Hermes Agent — a self-improving AI assistant with tool use, multi-platform + messaging, and a closed learning loop. +Tags: +- ai +- agent +- desktop +- electron +- llm +ReleaseNotesUrl: { { RELEASE_NOTES_URL } } +ManifestType: defaultLocale +ManifestVersion: 1.12.0 diff --git a/build/winget/Version.template.yaml b/build/winget/Version.template.yaml new file mode 100644 index 0000000..1ec1514 --- /dev/null +++ b/build/winget/Version.template.yaml @@ -0,0 +1,6 @@ +# Generated from this template by scripts/generate-winget-manifests.mjs. +PackageIdentifier: NousResearch.HermesDesktop +PackageVersion: { { VERSION } } +DefaultLocale: en-US +ManifestType: version +ManifestVersion: 1.12.0 diff --git a/changelogs/0.4.5.md b/changelogs/0.4.5.md new file mode 100644 index 0000000..2bcb5cb --- /dev/null +++ b/changelogs/0.4.5.md @@ -0,0 +1,69 @@ +# Changelog — v0.4.3 → v0.4.5 + +## Features + +- **Chat attachments** — image and text-file attachments via click, drag-and-drop, and paste; arbitrary file attachments via path references _([@pmos69](https://github.com/pmos69))_ +- **Session deletion** — delete sessions from the Sessions screen _([@leedusty91-prog](https://github.com/leedusty91-prog), [@fathah](https://github.com/fathah))_ +- **OpenAI Codex provider** — setup card for CLI/OAuth-based Codex plan (no API key required) _([@leejamesss](https://github.com/leejamesss))_ +- **Models: provider auto-detect** — auto-detects provider from Base URL in Add/Edit dialog _([@andreab67](https://github.com/andreab67))_ +- **Kanban in SSH tunnel mode** — Kanban board now works when connected via SSH tunnel _([@andreab67](https://github.com/andreab67))_ +- **Office: remote Claw3D auto-detect** — detects and connects to remote Claw3D instance in SSH tunnel mode _([@andreab67](https://github.com/andreab67))_ +- **Providers expanded** — added NVIDIA NIM, Gemini CLI, MiniMax OAuth, and more OpenAI-compatible endpoints _([@pmos69](https://github.com/pmos69))_ +- **Settings: API key mask** — key mask sized to match the actual stored key length _([@pmos69](https://github.com/pmos69))_ +- **i18n: European Portuguese (pt-PT)** — new locale with native-speaker review _([@pmos69](https://github.com/pmos69))_ +- **i18n: Traditional Chinese (zh-TW)** — new locale _([@hansai-art](https://github.com/hansai-art))_ +- **Persist interface locale** — language selection now survives app restarts _([@ASTairov](https://github.com/ASTairov))_ + +## Security + +- **Remote API keys kept in main process** — keys no longer exposed to the renderer process _([@ASTairov](https://github.com/ASTairov))_ + +## Bug Fixes + +### Chat & Models + +- Remote mode URL doubling + local-spawn process leak _([@pmos69](https://github.com/pmos69))_ +- Remote API key wiped when only the URL is edited _([@pmos69](https://github.com/pmos69))_ +- URL normalization in health probe and API key lookup _([@pmos69](https://github.com/pmos69))_ +- Stale `base_url` not cleared when switching named providers _([@pmos69](https://github.com/pmos69))_ +- Stale `baseUrl` when selecting a named-provider model from the model picker _([@pmos69](https://github.com/pmos69))_ +- Models: entries not reloading when tab becomes visible _([@pmos69](https://github.com/pmos69))_ +- Models: intermediate/debounced writes to model library _([@pmos69](https://github.com/pmos69))_ +- Models: Add/Remove/Update not routed through SSH in tunnel mode _([@andreab67](https://github.com/andreab67))_ + +### Install Gate & Providers + +- OAuth-backed active profiles not recognized by install gate _([@pmos69](https://github.com/pmos69))_ +- Install gate not recognizing all known providers in `.env` _([@pmos69](https://github.com/pmos69))_ +- Providers: API keys not persisted on change (only on blur) _([@pmos69](https://github.com/pmos69))_ + +### Config + +- Nested YAML paths not supported in `getConfigValue` _([@andreab67](https://github.com/andreab67))_ +- Model fields reading/writing outside the `model:` block scope _([@pmos69](https://github.com/pmos69))_ +- Dotted YAML paths in `getConfig` / `setConfig` _([@pmos69](https://github.com/pmos69))_ +- Empty env var values rejected in `readEnv` _([@ytfh44](https://github.com/ytfh44))_ +- SSH config helpers not supporting dotted YAML paths _([@pmos69](https://github.com/pmos69))_ + +### SSH & Gateway + +- Tunnel state reset when ControlMaster takes over SSH process _([@arronLuo](https://github.com/arronLuo))_ +- `sudo-wrapper` bypass missing for non-mutating commands (doctor/update/dump/version) _([@andreab67](https://github.com/andreab67))_ +- Gateway: platform enabled state not detected from env vars on Windows _([@pmos69](https://github.com/pmos69))_ +- Gateway: `EPERM` not treated as alive + Python image verification on Windows _([@pmos69](https://github.com/pmos69))_ +- SSH tunnel multiplexing disabled for tunnel processes _([@andreab67](https://github.com/andreab67))_ + +### Installer & Windows + +- `%LOCALAPPDATA%` not matched correctly on Windows _([@pmos69](https://github.com/pmos69))_ +- Office stack start reliability on Windows _([@ASTairov](https://github.com/ASTairov))_ + +### Session & Database + +- Session cache: `messageCount` stale for old sessions on sync _([@pmos69](https://github.com/pmos69))_ +- `deleteSession` using a read-only DB connection (fixed to use writable) _([@ytfh44](https://github.com/ytfh44))_ + +### Other + +- API auth not sent correctly for desktop chat in server mode _([@pmos69](https://github.com/pmos69))_ +- Interface locale not persisted across restarts _([@ASTairov](https://github.com/ASTairov))_ diff --git a/changelogs/0.5.0.md b/changelogs/0.5.0.md new file mode 100644 index 0000000..53b00f2 --- /dev/null +++ b/changelogs/0.5.0.md @@ -0,0 +1,64 @@ +# Changelog — v0.4.5 → v0.5.0 + +## Features + +### Chat +- **Per-conversation context folder** — pin a local folder to a conversation; its files are available as context for that session _([@pmos69](https://github.com/pmos69))_ +- **Tool calls, tool output & reasoning in history** — collapsible sections in chat history show tool invocations, their results, and model reasoning steps _([@jason-edstrom](https://github.com/jason-edstrom))_ +- **Right-click context menu** — copy / paste / select-all and copy-entire-chat from a native context menu in the chat view _([@pmos69](https://github.com/pmos69))_ + +### Providers +- **In-app OAuth sign-in** — "Subscription / OAuth Plans" section on the Providers screen; sign in to ChatGPT (Codex), xAI Grok, Qwen, Gemini CLI, and MiniMax without leaving the app. The Codex device-code flow auto-opens the browser and copies the code to the clipboard _([@leejamesss](https://github.com/leejamesss))_ +- **Model autocomplete for OAuth / subscription providers** — live `/v1/models` discovery now works for OAuth-backed providers _([@pmos69](https://github.com/pmos69))_ +- **Live model-discovery autocomplete** — model name field autocompletes from the provider's live model list for all OpenAI-compatible endpoints _([@pmos69](https://github.com/pmos69))_ + +### Kanban +- **Claw3D HQ read-only board** — surfaces the Claw3D HQ board as a second read-only Kanban view alongside the local board _([@andreab67](https://github.com/andreab67))_ + +### Build & CI +- **Portable Windows build target** — new `win-portable` artifact in the release matrix _([@pmos69](https://github.com/pmos69))_ +- **GitHub Actions CI** — typecheck + full test suite now run on every push and PR _([@pmos69](https://github.com/pmos69))_ + +## Bug Fixes + +### Chat & Sessions +- Sessions screen reads the active profile's `state.db`, not the root one _([@pmos69](https://github.com/pmos69))_ +- Sessions tab now auto-refreshes while it stays open _([@pmos69](https://github.com/pmos69))_ +- Gateway session ID synced on session switch so context is not lost _([@pmos69](https://github.com/pmos69))_ +- Gateway sessions resumed via `X-Hermes-Session-Id` header _([@pmos69](https://github.com/pmos69))_ +- IPC chat-send callbacks guarded against destroyed renderer sender _([@Ricardo-M-L](https://github.com/Ricardo-M-L))_ + +### Providers & Config +- `model.api_key` auto-populated for known-host custom providers _([@pmos69](https://github.com/pmos69))_ +- OpenAI provider correctly routed through custom + explicit `base_url` in setup _([@pmos69](https://github.com/pmos69))_ + +### Tools +- `setToolsetEnabled` no longer drops the `cli` section when a trailing platform block is present _([@ytfh44](https://github.com/ytfh44))_ + +### Skills +- Install failures surfaced when the CLI exits 0 silently instead of disappearing _([@pmos69](https://github.com/pmos69))_ + +### Installer & Updater +- OpenClaw migration detector no longer false-positives on empty directory stubs _([@andreab67](https://github.com/andreab67))_ +- `getHermesVersion` wait capped so a stuck version flag can't leak polling intervals _([@Ricardo-M-L](https://github.com/Ricardo-M-L))_ +- Install confirmation prompt before writing + option to adopt an existing install _([@pmos69](https://github.com/pmos69))_ +- Auto-updater lifecycle logged to a file for post-mortem debugging _([@pmos69](https://github.com/pmos69))_ + +### SSH & Office +- SSH-mode gateway operations routed through `systemd` when `hermes.service` exists _([@pmos69](https://github.com/pmos69))_ +- Kanban SSH errors surface real messages instead of a misleading "unsupported mode" screen _([@pmos69](https://github.com/pmos69))_ +- Office (Claw3D) services authenticated to the gateway _([@pmos69](https://github.com/pmos69))_ + +### Tests +- Three failing tests on `main` repaired _([@pmos69](https://github.com/pmos69))_ + +## New Contributors + +- **[@leejamesss](https://github.com/leejamesss)** — in-app OAuth sign-in for subscription providers ([#102](https://github.com/fathah/hermes-desktop/pull/102)) +- **[@jason-edstrom](https://github.com/jason-edstrom)** — tool calls, tool output & reasoning in chat history ([#327](https://github.com/fathah/hermes-desktop/pull/327)) + +## Contributors + +[@pmos69](https://github.com/pmos69) · [@andreab67](https://github.com/andreab67) · [@Ricardo-M-L](https://github.com/Ricardo-M-L) · [@ytfh44](https://github.com/ytfh44) · [@leejamesss](https://github.com/leejamesss) · [@jason-edstrom](https://github.com/jason-edstrom) + +**Full diff:** [v0.4.5...v0.5.0](https://github.com/fathah/hermes-desktop/compare/v0.4.5...v0.5.0) diff --git a/changelogs/0.6.0.md b/changelogs/0.6.0.md new file mode 100644 index 0000000..cdbaf9e --- /dev/null +++ b/changelogs/0.6.0.md @@ -0,0 +1,133 @@ +# Changelog — v0.5.0 → v0.6.0 + +## Features + +### Hermes One (3D Office) +- **3D Office environment** — immersive CEO office with rigged characters, seating arrangements, and idle animations powered by Three.js / Troika +- **Per-agent chat modal** — open a floating chat window directly from an agent's desk in the Office with full session persistence +- **Bank feature** — Bank room added to the Office world with expandable road-line and city backdrop +- **Office pantry & row items** — Pantry room and increased row-item density in the office layout +- **Office revamp** — major CEO office redesign, control ease improvements, and efficient rendering with drag-building support +- **Performance improvements** — render pipeline optimised for the 3D scene; GPU crash fix applied + +### Gateway & Messaging Platforms +- **Multi-profile gateways** — each profile now runs its own independent gateway instance with dynamic port allocation +- **Gateway start-failure banner** — gateway boot errors surface in the UI instead of silently failing +- **Gateway mismatch error fix** — detects and reports gateway version mismatches +- **Collapsible sidebar** — sidebar can be collapsed to icon-only mode for more chat space +- **Improved messaging platform management** — gateway page redesigned; platform cards show richer state + +### Chat +- **Live structured tool-event stream** — tool calls, results, and reasoning render live as the agent works, with collapsible activity groups and multi-tool summaries +- **Reasoning effort picker** — choose the reasoning budget (low / medium / high) per message for supported models +- **Speech-to-text input** — microphone button in the chat bar for voice input +- **Clarify-request cards** — gateway `clarify.request` events render as inline cards in the conversation +- **Message queue** — messages typed while the agent is processing are queued and sent automatically when it's free +- **Bulk session deletion** — select and delete multiple sessions at once from the Sessions tab +- **Per-row session delete button** — individual delete button on each session row in the Sessions tab +- **Rename session** — rename any session directly from the Sessions tab +- **Chat context folder** — pin a local folder to a conversation for persistent file context (UI upgrade) +- **Pre-send validation** — Send button is disabled with an inline reason when the message cannot be sent +- **Chat layout upgrade** — refreshed chat header and profile layout + +### Providers & Models +- **Nous Portal** — model discovery with `(free)` flag in the model picker; API key + OAuth cards; auto-detected missing credentials +- **Ollama Cloud** — live model list in the picker; API key settings exposed in Providers +- **Atlas Cloud** — new OpenAI-compatible provider preset +- **AIML API** — new provider preset with full i18n labels +- **Xiaomi MiMo** — new provider preset +- **Auxiliary tasks model** — dedicated model selector for background / auxiliary tasks +- **Atomic Chat local preset** — one-click OpenAI-compatible local setup preset +- **Agnes context window** — correct context-length mapping for Agnes and DeepSeek models +- **Reasoning effort** — reasoning effort exposed per-message for models that support it + +### Discover & Skills +- **Discover page** — new Discover screen for browsing and installing skills and MCP servers +- **MCP server management UI** — add, remove, and configure MCP servers from a dedicated UI +- **Skill discovery** — browse the skill registry directly from the Discover page +- **Registry link** — direct link to the skill/MCP registry from the Discover page + +### Tools & Toolsets +- **Worktree terminal launcher** — launch a terminal scoped to any Git worktree +- **Worktree file panel** — browse worktree files with image preview, code preview, and "open in editor" action; toggle between worktrees +- **File icons** — VS Code–style material file icons in the worktree panel + +### Internationalisation +- **Turkish (tr)** locale — full translation across all screens +- **Polish (pl)** locale — full translation across all screens +- **Spanish LATAM (es-LATAM)** — README + 100 % UI translation +- **Japanese** README and CONTRIBUTING +- **Chinese (zh-TW / zh-CN)** Kanban translations +- **Portuguese (pt-PT)** config-health and chat-validation strings + +### Themes & Appearance +- **Theme support** — additional built-in colour themes selectable from Settings +- **Font modifications** — refined system font stack and heading weights + +## Bug Fixes + +### Chat & Sessions +- Fixed chat session split on cold gateway start +- Fixed duplicate split turns during stream reconciliation +- Fixed image prompt replay after DB refresh +- Fixed compressed image filename extension not syncing +- Fixed IME composition Enter sending truncated CJK text +- Fixed `Content-Length` header missing on image-containing chat POSTs +- Fixed clarify card ordering after reconcile + surfaced delivery failures +- Fixed partial stream failures after gateway resume +- Fixed chat errors from stale renderer state + +### Config & Credentials +- Fixed cross-profile API key migration bleeding keys between profiles +- Fixed `API_SERVER_KEY` resolution from `api_server.token` in `config.yaml` +- Fixed host-derived `_API_KEY` not being written for custom-provider chat +- Fixed network proxy settings not persisting across restarts +- Fixed local provider base URLs not persisting +- Fixed import backup file path resolution + +### SSH & Cron +- Fixed SSH API port fallback validation +- Fixed cron schedule prompts not passed positionally +- Fixed SSH API key not being cached before the first message (#212) + +### Gateway +- Fixed gateway restart after resume +- Fixed `API_SERVER_KEY` not injected into gateway spawn environment +- Fixed OAuth login output buffering + +### Skills & Tools +- Fixed skill uninstall edge cases +- Fixed `.trim()` guard on undefined stdout during skill install/uninstall (#145) +- Fixed staged attachments not cleaned up on session delete + +### Office +- Fixed Office gateway startup handoff +- Fixed `executeJavaScript` throwing before DOM is ready +- Fixed Office starting with wrong model (now uses desktop-configured model) +- Fixed Office gateway settings going stale on reconnect +- Quoted Office startup command script safely + +### Diagnose / Config Health +- Fixed config-health banner not refreshing after auto-fix +- Fixed "Show details" button not wiring to Settings nav +- Fixed Hermes profile create errors not surfacing in UI +- Hardened skill content and file writes against partial failures +- Recovered sessions from empty stale cache + +### i18n +- Removed extra Polish locale keys +- Added missing Turkish keys for agents, chat, and sessions screens +- Fixed Turkish locale consistency (`gözat` as single word, `Araçlar` for tools) +- Addressed Spanish i18n review feedback + +## New Contributors + +- **[@914e18c](https://github.com/fathah)** — Turkish locale +- **[@5abea69](https://github.com/fathah)** — Polish locale +- **[@2cba1e1](https://github.com/fathah)** — Spanish LATAM translation + +## Contributors + +[@pmos69](https://github.com/pmos69) · [@andreab67](https://github.com/andreab67) · [@Ricardo-M-L](https://github.com/Ricardo-M-L) · [@ytfh44](https://github.com/ytfh44) · [@leejamesss](https://github.com/leejamesss) + +**Full diff:** [v0.5.0...v0.6.0](https://github.com/fathah/hermes-desktop/compare/v0.5.0...v0.6.0) diff --git a/changelogs/0.7.0.md b/changelogs/0.7.0.md new file mode 100644 index 0000000..32a654b --- /dev/null +++ b/changelogs/0.7.0.md @@ -0,0 +1,106 @@ +# Changelog — v0.6.0 → v0.7.0 + +## Features + +### Wallets & Token Economy +- **Profile wallets** — each profile can create or import Ethereum wallets on Base mainnet; recovery phrases are encrypted with Electron `safeStorage` and never leave the main process (10 wallets per profile) +- **On-chain token balances** — live $H1 / $HD and native balance reads surfaced in the profile Wallet pane +- **Token economy groundwork** — wallet store with create / import / rename / delete / list, public-metadata stripping across the IPC boundary, and balance fetch + refresh + +### Secrets Provider +- **Pluggable secrets backend** — resolve provider keys and credentials through an env-var or external-command backend instead of plaintext config +- **Vault-aware key resolution** — secrets provider wired into every key-resolution path with a vault-first lookup and audit +- **Hardened sudo / secret request modal** — gateway `sudo.request` and `secret.request` events render in a guarded confirmation modal with a finished-guard and vault-first lookup + +### Chat +- **Slash commands** — type `/` in the chat bar to run commands; context-aware command palette +- **Collapsible code blocks** — long code blocks in chat collapse with copy support +- **Copy message** — copy button on each chat message bubble (via the hardened `hermesAPI.copyToClipboard` path) +- **Cancel queued messages** — remove individual messages from the send queue while the agent is busy +- **Notification sound** — optional sound when the agent finishes responding +- **Reconciliation rewrite** — chat history reconciliation aligned with the Hermes Agent dashboard using an interleave algorithm, preserving text streamed before tool calls and fixing duplicate / reordered turns +- **Visible text selection** — selection highlight is now visible inside chat bubbles + +### In-App Web Preview +- **Web preview panel** — open and browse web pages inside the app from the chat workspace +- **Navigation security gating** — preview navigation is gated and auto-navigation is restricted to vetted destinations + +### Sidebar & Navigation +- **Recent sessions list** — ChatGPT-style paged conversation list in the sidebar with infinite scroll, lazy cache reads, and project grouping by linked folder +- **Pinned chats & row context menu** — per-row options menu (Pin, Rename, Move to project, Delete) opened from a hover `…` button or right-click, with motion-driven open/close and page transitions +- **Collapsible, redesigned sidebar** — new layout, reordered navigation, brand-mark collapse toggle, nav logo, and footer action row +- **Full-list sessions modal** — Cmd/Ctrl+K opens the full session list reusing the Sessions screen + +### Profiles +- **Multi-profile sessions** — sessions are scoped per profile; the footer profile switcher keeps the active chat run aligned with the selected profile +- **Profile modal** — a single global modal to view and edit a profile's appearance, persona, agent memory, and wallet, opened from anywhere +- **Profile colours & appearance** — per-profile colour selection and avatar upload/remove +- **Profile enhancements** — basic profile management and mismatch handling improvements + +### Models +- **Chat model search** — searchable model picker in the chat bar +- **Session-based model override** — pick a model per session without changing the global default +- **Auxiliary tasks model** — dedicated model for background / auxiliary tasks + +### Desktop Updates +- **Desktop update controls** — in-app update checking and install controls with status surfaced in the UI +- **Auto-update** — desktop auto-update flow + +### Context Folder +- **Remote context folder** — bind a remote/SSH working folder to a conversation via an in-app picker +- **Persisted per session** — the linked folder is restored when re-opening a conversation and survives session deletion cleanup + +### Internationalisation +- **Hebrew (he)** — complete translation with full RTL support +- **Spanish LATAM (es-LATAM)** — synced with the latest README (Discord, star history, Secrets provider, sponsors) +- **Language updates** — additional locale syncs across screens + +### Branding +- **Hermes One** — rebranded default titles and onboarding copy +- **Updated links & badges** — download link moved to `hermesone.org`; Telegram badge replaced with Discord; refreshed README social and star-history badges + +### Performance +- **SQLite connection caching** — database connections are cached for faster repeated reads +- **GPU fallback** — automatic fallback to avoid GPU-related crashes during 3D / heavy rendering + +## Bug Fixes + +### Chat & Reconciliation +- Fixed previously-sent messages jumping to the bottom of the chat after an agent reply +- Fixed near-duplicate bubbles by pre-seeding seen result bubbles +- Fixed streamed text being clobbered across tool-call boundaries +- Fixed dashboard completion text replacement for re-streamed (e.g. CJK) deltas +- Suppressed duplicate remote dashboard assistant deltas +- Fixed synthetic tool ordering after the interleave reorder + +### Models & Providers +- Fixed the chat model picker overwriting the global default model +- Switched session model selection to a dedicated `sessionModelOverride` state +- Forwarded the model override through the runs-transport fallback +- Provider preset and endpoint updates + +### Secrets +- `getSecretSafe()` now honours the never-throws contract of `getSecret()` +- Closed two `list()` / `get()` consistency gaps and added a get-path spawn floor +- Fixed the S2 misroute guard to test the extracted line rather than full output + +### Profiles & Memory +- Fixed profile mismatch when switching the active agent +- Surfaced profile-appearance errors and de-duplicated resume handling +- Memory limits now read from the profile config + +### SSH & Security +- Reliable legacy fallback when the dashboard `/api/ws` endpoint is unavailable (#667) +- Fixed SSH profile tunnel routing to the selected profile's API port +- Restored the web-preview navigation gate dropped during the `app/` refactor +- Fixed SSH dashboard CSP loopback access + +### Platform +- Fixed a macOS click-blocking drag region in the custom window chrome +- Replaced `navigator.clipboard.writeText` with the hardened `hermesAPI.copyToClipboard` + +## Contributors + +[@hankkyy](https://github.com/hankkyy) · [@pmos69](https://github.com/pmos69) · [@emachado88](https://github.com/emachado88) · [@saxster](https://github.com/saxster) · Michael Valentin · Jesús Alberto Cornelio · Imre Eilertsen · Nazmus Samir · sint · Yosef Hai Yechezkel + +**Full diff:** [v0.6.0...v0.7.0](https://github.com/fathah/hermes-desktop/compare/v0.6.0...v0.7.0) diff --git a/dev-app-update.yml b/dev-app-update.yml new file mode 100644 index 0000000..70d7e4d --- /dev/null +++ b/dev-app-update.yml @@ -0,0 +1,4 @@ +provider: github +owner: fathah +repo: hermes-desktop +updaterCacheDirName: hermes-desktop-updater diff --git a/docs/SSH-TUNNEL-VPS.md b/docs/SSH-TUNNEL-VPS.md new file mode 100644 index 0000000..3c34915 --- /dev/null +++ b/docs/SSH-TUNNEL-VPS.md @@ -0,0 +1,306 @@ +# Connecting Hermes Desktop to a Remote Hermes VPS over SSH + +This guide walks through configuring Hermes Desktop to use a Hermes Agent +running on a remote server (a VPS, a HyperV/KVM VM, a Raspberry Pi on your +LAN, etc.) so that **every screen — Chat, Sessions, Skills, Memory, Soul, +Tools, Schedules, Gateway, Profiles, Models, Logs — works as if Hermes +were installed locally**. + +If you only need to chat against a remote Hermes and you don't care about +the management screens, the simpler **"Remote" mode** (HTTP URL + API key) +is enough. If you want full functionality parity, you need **"SSH Tunnel" +mode**, which is what this document covers. + +## Why SSH Tunnel mode (not plain Remote mode) + +The desktop app has two remote modes, and they cover very different +surface areas: + +| Screen / feature | Remote (HTTP + API key) | SSH Tunnel | +| ---------------------------------------------- | :------------------------: | :--------------: | +| Chat (`/v1/chat/completions`) | ✅ | ✅ | +| Sessions list & search | ❌ reads local `~/.hermes` | ✅ via SSH proxy | +| Skills (browse, install, uninstall) | ❌ reads local `~/.hermes` | ✅ via SSH proxy | +| Memory (view/edit entries, user profile) | ❌ reads local `~/.hermes` | ✅ via SSH proxy | +| Soul (persona editor) | ❌ reads local `~/.hermes` | ✅ via SSH proxy | +| Tools (toolset enable/disable) | ❌ reads local `~/.hermes` | ✅ via SSH proxy | +| Schedules (cron jobs) | ❌ reads local `~/.hermes` | ✅ via SSH proxy | +| Gateway (status, start/stop, platform toggles) | ❌ reads local | ✅ via SSH proxy | +| Profile switching | ❌ reads local | ✅ via SSH proxy | +| Models (saved per-provider configs) | ❌ reads local | ✅ via SSH proxy | +| Logs (gateway, agent) | ❌ reads local | ✅ via SSH proxy | + +Plain Remote mode only proxies the chat path. **All other screens read +the local `~/.hermes` directory**, so if you have no Hermes install on the +desktop's host, those screens look empty even though your remote Hermes +has data. SSH Tunnel mode proxies every screen via `sshExec` against the +remote host's `~/.hermes`, which is what you almost certainly want. + +## Prerequisites + +On the **desktop machine** (where Hermes Desktop runs): + +- An SSH key pair (e.g. `~/.ssh/id_ed25519` / `~/.ssh/id_ed25519.pub`). + Generate one with `ssh-keygen -t ed25519` if you don't have it. +- The OpenSSH client on `PATH`. macOS and Linux have it by default; + Windows 10/11 ship it as an optional feature ("OpenSSH Client"). + +On the **remote machine** (where Hermes Agent runs): + +- OpenSSH server reachable from the desktop host (port 22 by default). +- A user account whose `~/.hermes` directory contains your Hermes data + (more on this below). +- Your desktop's public key authorized for that user + (`~/.ssh/authorized_keys`). +- The Hermes API listening on `127.0.0.1:8642` (the default — it does + **not** need to be exposed publicly; the SSH tunnel forwards it). + +## Which user account should the desktop SSH in as? + +This is the most important decision and the most common source of "the +screens are empty" reports. + +The desktop app's SSH proxy uses paths like `~/.hermes/...` (which +resolves to `$HOME/.hermes/` of the SSH user). It must log in as the +**same user that runs Hermes Agent** so that `~` points at the directory +containing your real data. + +### Case A — You installed Hermes manually as your own user + +If you ran the Hermes installer interactively as e.g. `andrea` and your +data lives in `/home/andrea/.hermes`, SSH in as `andrea`. Nothing extra +to do. + +### Case B — Hermes runs as a dedicated service user (systemd) + +This is common on production VPSes. Hermes is installed under +`/opt/hermes` (or similar) and runs via a systemd unit like: + +```ini +[Service] +User=hermes +Group=hermes +Environment=HOME=/opt/hermes +ExecStart=/opt/hermes/hermes-agent/.venv/bin/hermes gateway +``` + +In this case the data lives at `/opt/hermes/.hermes/` and you need to +SSH in as the `hermes` user. Two things to set up: + +1. **Make sure the `hermes` user has a real login shell.** Hardened + installs sometimes set `/usr/sbin/nologin`. Switch it to bash: + + ```bash + sudo chsh -s /bin/bash hermes + ``` + +2. **Authorize your desktop's public key for the `hermes` user.** Run + this from an account with sudo (e.g. your normal login user): + + ```bash + PUBKEY="ssh-ed25519 AAAA... your-desktop-host" # paste yours + + sudo install -d -o hermes -g hermes -m 700 /opt/hermes/.ssh + sudo touch /opt/hermes/.ssh/authorized_keys + sudo chown hermes:hermes /opt/hermes/.ssh/authorized_keys + sudo chmod 600 /opt/hermes/.ssh/authorized_keys + echo "$PUBKEY" | sudo tee -a /opt/hermes/.ssh/authorized_keys + ``` + + **Note:** systemd's `ProtectHome=read-only` on the Hermes service unit + only restricts the Hermes process itself. Interactive SSH sessions + into the `hermes` user are unaffected, so the desktop can still + write skills, memory edits, soul updates, etc. + +### Case C — Hermes runs as root + +Don't. If it currently does, migrate it to a dedicated user before +exposing SSH to it. + +## Step-by-step setup + +### 1. Verify SSH works exactly as the desktop will call it + +The desktop spawns `ssh` with these flags (see `src/main/ssh-tunnel.ts`): +`-N -L :127.0.0.1:8642 -i -o BatchMode=yes +-o StrictHostKeyChecking=accept-new`. The critical one is +`BatchMode=yes` — **any password or passphrase prompt will fail closed +with no useful error message**. From your desktop, run: + +```bash +ssh -o BatchMode=yes -o StrictHostKeyChecking=accept-new \ + -i ~/.ssh/id_ed25519 -p 22 hermes@your.vps.example.com \ + 'curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8642/health' +``` + +You should see `200`. If you see `Permission denied (publickey)`, the +key isn't authorized for that user — double-check +`/opt/hermes/.ssh/authorized_keys` and its permissions (700 on the dir, +600 on the file, owned by the target user). If you see a passphrase +prompt, your key has a passphrase and SSH agent isn't loaded — either +remove the passphrase, or load it into the agent before launching the +desktop app. + +### 2. Configure the desktop app + +Open **Settings → Connection** and select **SSH Tunnel**. Fill in: + +| Field | Value | +| ------------------ | --------------------------------------------------------------------------------------------------- | +| SSH Host | hostname or IP of the remote (e.g. `your.vps.example.com`) | +| SSH Port | `22` (or your sshd port) | +| Username | the user whose `~/.hermes` is the real one (`hermes` in Case B) | +| Private Key Path | absolute path, e.g. `~/.ssh/id_ed25519` on macOS/Linux or `C:\Users\you\.ssh\id_ed25519` on Windows | +| Remote Hermes Port | `8642` (default) | + +Click **Test SSH Connection**. Expected result: "SSH tunnel connected!". +Then **Save** and restart the app. + +### 3. (Alternative) Edit `~/.hermes/desktop.json` directly + +If you prefer to skip the UI, the same config is stored at +`~/.hermes/desktop.json` (the desktop app's _local_ config, on the +desktop machine — not on the VPS): + +```json +{ + "connectionMode": "ssh", + "remoteUrl": "http://your.vps.example.com:8642", + "remoteApiKey": "", + "sshConfig": { + "host": "your.vps.example.com", + "port": 22, + "username": "hermes", + "keyPath": "/Users/you/.ssh/id_ed25519", + "remotePort": 8642, + "localPort": 18642 + } +} +``` + +`remoteUrl` / `remoteApiKey` are retained so you can switch back to +plain Remote mode by changing only `connectionMode`. + +## Verifying every screen works + +After restart, walk through these screens — each should reflect data +from the _remote_ `~/.hermes`, not your local one: + +- **Chat** — send a message. Tokens should stream. +- **Sessions** — should list past conversations from the VPS. +- **Skills** — should show installed skills from the VPS. +- **Memory** — should show memory entries from the VPS. +- **Soul** — should show your remote `SOUL.md`. +- **Tools** — should show toolset enable/disable state. +- **Profiles** — should list profiles defined on the VPS. +- **Schedules** — should show cron jobs from `~/.hermes/cron/jobs.json`. +- **Gateway** — should reflect the running gateway's state. + +If any screen still looks empty, see Troubleshooting below. + +## Troubleshooting + +### "SSH tunnel is not active" or chat hangs + +On **Linux/macOS** versions ≤ 0.4.3 there is a known +`ControlPersist` lifecycle bug — the SSH process exits immediately, +making the desktop think the tunnel died even though port-forwarding is +alive. See [#195][#195] and [#159][#159]. Upgrade to a build that +includes [PR #204][#204] or apply the fix from those issues. + +### "Permission denied (publickey)" from the desktop, but my key works in the terminal + +Most common causes: + +- You use a different key from your terminal (via `~/.ssh/config` host + alias or `ssh-agent`) than the path you configured in the desktop. The + desktop only uses the explicit key file you give it (`BatchMode=yes` + disables agent fallback negotiation in some configurations). +- The key has a passphrase and is unlocked only in the agent. Either + remove the passphrase or ensure the agent is loaded before launching + Hermes Desktop. + +### Screens are empty even after switching to SSH Tunnel mode + +You're almost certainly SSH'ing in as the wrong user — `~/.hermes` +resolves to that user's home, not where Hermes actually keeps its data. +Verify with: + +```bash +ssh -i @ 'ls -la ~/.hermes && pwd' +``` + +The directory should contain `SOUL.md`, `config.yaml`, `auth.json`, +`memories/`, `profiles/`, etc. If you see `No such file or directory`, +you're in the wrong account — re-read the **"Which user account"** +section above. + +### Settings → Hermes Agent shows blank Engine / Released / Python / OpenAI SDK + +Production installs commonly ship `/usr/local/bin/hermes` as a +`sudo -u hermes …` wrapper, and the sudoers policy refuses to run the +wrapper as the `hermes` user itself ("Sorry, user hermes is not allowed +to execute …"). The result: `sshGetHermesVersion` returns empty and the +Settings card renders four blanks while everything else works. + +Fixed in [PR #205][#205] by probing the venv binary directly. If your +build pre-dates that fix, you can verify locally with: + +```bash +ssh @ '/opt/hermes/hermes-agent/.venv/bin/hermes --version' +``` + +A working version string means the fix will populate the card once your +build includes #205. + +### Kanban shows "Kanban requires a local Hermes install" + +This screen is not yet wired for remote/SSH mode (the UI explicitly +says "Remote/SSH support is coming in a follow-up"). All other +management screens work in SSH tunnel mode; Kanban is the one +exception. Track upstream for the follow-up PR. + +### Office (Claw3D) offers to install Claw3D locally + +The Office screen detects Claw3D on the desktop host, not on the VPS. +If you're already running `hermes-office.service` on the VPS, that +service is independent of this screen — visit it directly at +`http://:3000`. Tighter integration is tracked in +[#196](https://github.com/fathah/hermes-desktop/issues/196). + +### `Test SSH Connection` succeeds but chat fails with 401 or auth errors + +Hermes API may require an API key locally even when bound to +`127.0.0.1`. Configure it in the desktop app's Settings → API key (or +leave blank if the gateway is configured for no-auth on localhost). The +key, if used, is the one stored in your remote Hermes `.env`/`auth.json`, +not a value you generate on the desktop. + +### Windows-specific: keys not persisting across restarts + +Tracked in [#182][#182]. If you hit this, store the desktop's API key +and SSH key path in a password manager and re-paste after a Windows +restart until the upstream fix lands. + +## Security notes + +- The SSH tunnel binds **only** to `127.0.0.1` on the desktop side. The + remote Hermes port is **not** exposed to the public internet at any + point in this flow. +- `BatchMode=yes` means a stolen desktop without an unlocked SSH key + cannot impersonate you to the remote Hermes — there's no password to + steal and no key-loading prompt to manipulate. +- `StrictHostKeyChecking=accept-new` trusts the host key on first + connection and pins it in `~/.ssh/known_hosts` after that. If the + remote host key ever changes (e.g. server reinstall), SSH will fail + closed and you'll need to manually re-trust it. This is the desired + behavior — don't change it. +- Authorize the desktop's pubkey only on the dedicated Hermes user, not + on root. The Hermes user is already what runs the agent; giving it + inbound SSH does not expand the blast radius. + +[#159]: https://github.com/fathah/hermes-desktop/issues/159 +[#182]: https://github.com/fathah/hermes-desktop/issues/182 +[#195]: https://github.com/fathah/hermes-desktop/issues/195 +[#204]: https://github.com/fathah/hermes-desktop/pull/204 +[#205]: https://github.com/fathah/hermes-desktop/pull/205 diff --git a/docs/chat-reconciliation-plan.md b/docs/chat-reconciliation-plan.md new file mode 100644 index 0000000..626212c --- /dev/null +++ b/docs/chat-reconciliation-plan.md @@ -0,0 +1,2370 @@ +# Chat Reconciliation Stabilization Plan + +## 2026-06-06 Direction Correction: Dashboard/WebSocket Timeline + +This document originally described a conservative stabilization path for the +existing Hermes One reconciliation layer. That path is useful as background, but +it is not sufficient as the long-term implementation direction. + +Manual testing and comparison with Hermes Agent desktop showed that PR540/PR545 +and the current Hermes One implementation still share the same risky shape: + +- live UI rows are assembled from one stream; +- restored/final rows are assembled from `state.db`; +- completion then tries to merge two independently-shaped transcripts; +- edge cases depend on content matching, row splitting, and heuristics. + +The corrected target is closer to Hermes Agent desktop: + +- use a live dashboard/WebSocket event stream as the active-turn source of + truth; +- build one ordered turn timeline from gateway events; +- project both live events and restored DB rows through the same normalizer; +- avoid whole-transcript text-key reconciliation for active turns; +- treat DB hydration as replacement/fill-in after a turn is settled, not as a + competing live transcript. + +The old reconciliation work should not be expanded into another pile of special +cases. It should be treated as a compatibility layer while the dashboard +transport is introduced. + +### What Hermes Agent Desktop Does Differently + +The latest Hermes Agent desktop app lives at: + +`apps/desktop` in `NousResearch/hermes-agent`. + +Relevant files: + +- `apps/desktop/electron/main.cjs` +- `apps/desktop/src/app/gateway/hooks/use-gateway-boot.ts` +- `apps/desktop/src/app/session/hooks/use-message-stream.ts` +- `apps/desktop/src/app/session/hooks/use-prompt-actions.ts` +- `apps/desktop/src/app/session/hooks/use-session-actions.ts` +- `apps/desktop/src/lib/chat-messages.ts` +- `apps/desktop/src/lib/chat-runtime.ts` + +The desktop app starts a dashboard backend: + +```text +hermes dashboard --no-open --host 127.0.0.1 --port +``` + +It then connects the renderer to: + +```text +ws://127.0.0.1:/api/ws?token= +``` + +Submissions are JSON-RPC calls: + +```text +session.create +session.resume +prompt.submit +session.interrupt +``` + +Streaming arrives as ordered events: + +```text +message.start +reasoning.delta +reasoning.available +message.delta +tool.start +tool.progress +tool.generating +tool.complete +message.complete +error +clarify.request +approval.request +sudo.request +secret.request +subagent.* +``` + +The app does not render one independent "streamed transcript" and then reconcile +that against an unrelated DB transcript. It keeps a per-runtime-session state: + +```ts +interface ClientSessionState { + storedSessionId: string | null + messages: ChatMessage[] + busy: boolean + awaitingResponse: boolean + streamId: string | null + sawAssistantPayload: boolean + interrupted: boolean + needsInput: boolean +} +``` + +Live events mutate the in-flight assistant message's ordered `parts[]`: + +```ts +type ChatMessagePart = + | { type: "text"; text: string } + | { type: "reasoning"; text: string } + | { type: "tool-call"; toolCallId: string; toolName: string; args: unknown; result?: unknown } +``` + +The key invariant is boundary flushing: + +- before a tool starts, flush any queued assistant/reasoning text; +- before a tool completes, flush queued text; +- before final completion, flush queued text; +- when a final stored transcript is loaded, preserve local errors but otherwise + prefer the stable stored projection. + +This is why Hermes Agent desktop can show: + +```text +thought +tool call/result +assistant text +thought +tool call/result +assistant text +``` + +instead of: + +```text +all tool calls +all tool results +all intermediate text appended at the end +``` + +### Why DB Polling Did Not Solve The Bug + +We tried a mid-stream `state.db` polling bridge in the separate worktree. Manual +testing showed no visible streaming improvement. A DB dump after a tool-heavy +turn showed the rows appeared only near finalization, with effectively the same +timestamps. That means polling cannot recover live reasoning/tool-result order +when the backend does not persist those rows until the turn is done. + +Polling may remain useful as a fallback for older backends, but it is not the +primary design. + +### Why `/v1/runs` Is Not The Main Target + +PR540/PR545 already used the `/v1/runs`/event transport path and still had +reconciliation bugs. It gives more structured events than `/v1/chat/completions`, +but it does not by itself remove the fragile merge architecture if the renderer +still reconciles synthetic rows against DB rows by content/key heuristics. + +In this worktree, `/v1/runs` is now guarded behind: + +```text +HERMES_DESKTOP_ENABLE_RUNS_TRANSPORT=1 +``` + +Default development should not depend on it. + +## Corrected Phased Implementation Plan + +### Progress Note: 2026-06-07 + +Phase B is implemented in the separate worktree: + +- `src/main/dashboard.ts` can start/stop/probe a local dashboard backend with a + per-process `HERMES_DASHBOARD_SESSION_TOKEN`. +- Preload IPC exposes `dashboardStatus`, `startDashboard`, and `stopDashboard`. +- A sandbox smoke test confirmed `/api/status` accepts + `X-Hermes-Session-Token` and that the dashboard command is available in the + copied Hermes Agent install. + +Phase C is partially implemented behind an explicit renderer flag: + +- `src/renderer/src/screens/Chat/dashboardGatewayClient.ts` implements a small + JSON-RPC WebSocket client and now matches upstream's notification envelope: + `{"method":"event","params":{type,payload,session_id}}`. +- `src/renderer/src/screens/Chat/dashboardEventAdapter.ts` reduces ordered + dashboard events into Hermes One's existing `ChatMessage[]` shape. +- `src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.ts` can create + or resume a dashboard runtime session and submit prompts through + `prompt.submit`. +- The route is disabled by default and only used when + `VITE_HERMES_DESKTOP_DASHBOARD_CHAT=1`. + +Current limitations before making this the normal sandbox path: + +- attachment submission still falls back to the existing HTTP transport; +- approval/clarify/sudo/secret events are not yet surfaced; +- runtime session ID and stored session ID are separated internally, but the + surrounding Hermes One navigation/history model still needs a fuller stored + session handoff; +- live manual testing with the flag enabled has not yet been completed. + +### Upstream Refresh: 2026-06-09 + +`NousResearch/hermes-agent` `origin/main` was inspected at commit +`57775e9e1` on 2026-06-09. Upstream has moved enough that several of our +compatibility assumptions should change. + +Useful upstream changes: + +- Dashboard chat is now always enabled in `hermes_cli/web_server.py` via + `_DASHBOARD_EMBEDDED_CHAT_ENABLED = True`. The old `embedded_chat` argument + is gone from current `start_server(...)`. +- The old `hermes dashboard --no-open --tui ...` invocation is accepted for + compatibility, but upstream Desktop now starts dashboard without `--tui`. +- `tui_gateway.server` exposes a `DESKTOP_BACKEND_CONTRACT` value. Current + contract `2` means remote non-image file upload via `file.attach` is present. +- Current gateway RPCs include: + - `session.create` + - `session.resume` + - `prompt.submit` + - `image.attach` + - `image.attach_bytes` + - `file.attach` + - `model.options` + - `model.save_key` +- Current dashboard REST endpoints include: + - `GET /api/model/options` + - `GET /api/model/recommended-default` + - `GET /api/model/auxiliary` + - `POST /api/model/set` +- Remote OAuth gateways are first-class upstream: + - `/api/status` reports `auth_required: true`; + - REST auth uses cookies; + - WebSocket auth uses a single-use ticket from `POST /api/auth/ws-ticket`; + - static `?token=` is still used for legacy token-mode gateways. +- Upstream Desktop probes the actual `/api/ws` WebSocket, not just + `/api/status`, before saying a remote connection is usable. +- Upstream Desktop syncs attachments before `prompt.submit`: + - local image path -> `image.attach`; + - remote image bytes -> `image.attach_bytes`; + - local file path -> `file.attach`; + - remote file bytes/data URL -> `file.attach`. +- Upstream Desktop retries `prompt.submit` once after a `session not found` + error by calling `session.resume` on the durable stored session id, then + submitting to the fresh live runtime id. +- Upstream event routing now intentionally accepts unscoped foreground turn + events (`message.*`, `reasoning.*`, `tool.*`) as belonging to the active chat + and drops only unscoped `subagent.*` events. +- Upstream has direct regression coverage for edge cases close to ours: + - duplicate user messages in `state.db` on failure/fallback paths; + - sleep/wake gateway restart recovery; + - remote gateway file attachments; + - background-window streaming stalls; + - focused-chat unscoped event routing. + +Immediate Hermes One adjustments from this refresh: + +- The compatibility addon must treat `_DASHBOARD_EMBEDDED_CHAT_ENABLED = True` + as already compatible. It should patch only older engines that still expose + `embedded_chat: bool = False`. +- Local/SSH dashboard startup can keep passing `--tui` for older engines, but it + should not depend on source patching after the bundled engine updates to the + current dashboard shape. +- Remote/SSH model lists and model writes should prefer upstream + `/api/model/options`, `model.options`, `model.save_key`, and + `/api/model/set` instead of direct remote `models.json` editing whenever the + backend supports them. +- Remote/SSH pasted attachments should move from Hermes One staging/fallback + behavior to the upstream attach RPCs, especially `image.attach_bytes` and + `file.attach`. +- Remote OAuth should be promoted from "unsupported warning" to the upstream + cookie + `/api/auth/ws-ticket` flow. +- Connection tests should probe `/api/ws` with the same credential mode the + renderer will use. +- We should add a Hermes One test matching upstream's submit recovery: + `prompt.submit` returns `session not found` -> `session.resume` -> retry + `prompt.submit` against the recovered live id. + +Validation performed after this refresh: + +- `npm test -- --run tests/hermes-agent-compat.test.ts tests/dashboard-remote.test.ts` + passed. +- `npm run typecheck` passed. + +### Phase A: Freeze The Existing Reconciliation Layer + +Goal: + +- stop expanding the PR540/545-style reconciliation path; +- keep current app behavior usable while we build the replacement path; +- protect manual testing from accidentally using `/v1/runs`. + +Actions: + +- keep the separate worktree and sandbox setup; +- use the sandboxed `Hermes One` app identity; +- keep config isolation and port isolation; +- make `/v1/runs` opt-in only; +- leave current DB refresh/reconciliation tests in place as regression coverage; +- document known limitations of the HTTP stream path: + - no reliable live tool results; + - no reliable live reasoning for some providers; + - DB rows can appear only at finalization; + - content-key reconciliation can misplace local errors and split text. + +Acceptance criteria: + +- the app builds and tests pass; +- normal chat still works through the existing HTTP path; +- `/v1/runs` is not selected unless explicitly enabled. + +### Phase B: Add Dashboard Capability Discovery + +Goal: + +- detect whether the installed Hermes Agent supports dashboard WebSocket mode; +- do this without replacing the chat path yet. + +Main-process additions: + +- add a `DashboardConnection` descriptor: + +```ts +interface DashboardConnection { + baseUrl: string + wsUrl: string + token: string + mode: "local" | "remote" + profile?: string + processPid?: number +} +``` + +- add IPC: + +```text +dashboard:get-connection +dashboard:start +dashboard:stop-dev-only +dashboard:status +``` + +- for local mode, start: + +```text +hermes dashboard --no-open --host 127.0.0.1 --port +``` + +- pass: + +```text +HERMES_DASHBOARD_SESSION_TOKEN= +HERMES_HOME= +``` + +- for remote/SSH mode, probe: + +```text +/api/status +/api/ws ticket/token support +``` + +Open questions to answer during this phase: + +- Does the Hermes One installed Hermes Agent version always ship + `hermes dashboard`? +- For existing user installs, do we need to update Hermes Agent before the + dashboard path is available? +- Can remote mode reuse the dashboard WebSocket, or only local mode initially? + +Acceptance criteria: + +- the app can start/probe dashboard without disturbing the existing gateway; +- dashboard uses sandbox ports in this worktree; +- dashboard logs are separate from the user's normal gateway logs; +- failure falls back to current HTTP chat. + +### Phase C: Add A Renderer Gateway Client + +Goal: + +- establish a live JSON-RPC WebSocket in the renderer, matching Hermes Agent + desktop's model. + +Renderer additions: + +- add a small `JsonRpcGatewayClient` or vendor/adapt the shared client if + dependency layout permits; +- expose a typed event stream: + +```ts +type GatewayEvent = + | { type: "message.start"; session_id?: string; payload?: unknown } + | { type: "message.delta"; session_id?: string; payload?: { text?: string; rendered?: string } } + | { type: "reasoning.delta"; session_id?: string; payload?: { text?: string } } + | { type: "reasoning.available"; session_id?: string; payload?: { text?: string } } + | { type: "tool.start"; session_id?: string; payload?: GatewayToolPayload } + | { type: "tool.progress"; session_id?: string; payload?: GatewayToolPayload } + | { type: "tool.complete"; session_id?: string; payload?: GatewayToolPayload } + | { type: "message.complete"; session_id?: string; payload?: { text?: string; rendered?: string; reasoning?: string; usage?: unknown } } + | { type: "error"; session_id?: string; payload?: { message?: string } } +``` + +- implement request/response calls: + +```text +session.create +session.resume +prompt.submit +session.interrupt +session.usage +model.options +``` + +Acceptance criteria: + +- WebSocket reconnects cleanly; +- request timeouts are surfaced as UI errors; +- events are filtered by active runtime session; +- no chat rendering has switched yet. + +### Phase D: Introduce An Ordered Turn Timeline + +Goal: + +- replace row-by-row live appends with a single active-turn state machine. + +Do not migrate all rendering to Hermes Agent desktop's `parts[]` in one jump +unless it proves simpler. Hermes One can use an intermediate timeline and then +project to existing `ChatMessage` rows. + +Suggested internal model: + +```ts +type TimelinePart = + | { type: "reasoning"; id: string; text: string; pending?: boolean } + | { type: "text"; id: string; text: string; pending?: boolean } + | { type: "tool"; id: string; callId: string; name: string; args: string; result?: string; status: "running" | "completed" | "failed" } + | { type: "error"; id: string; error: string } + +interface ActiveTimelineTurn { + turnId: string + userMessageId: string + assistantMessageId: string + parts: TimelinePart[] + queuedText: string + queuedReasoning: string + interrupted: boolean +} +``` + +Boundary rules copied from Hermes Agent desktop: + +- `message.delta`: append to `queuedText`, flush on animation/timer; +- `reasoning.delta`: append to `queuedReasoning`, flush on animation/timer; +- `tool.start`: flush queued text/reasoning, close reasoning segment, add tool; +- `tool.progress`: update the active tool by stable ID/name; +- `tool.complete`: flush queued text/reasoning, update matching tool with result; +- `message.complete`: flush everything, append final tail only, mark complete; +- `error`: flush partial content if useful, append local error, mark failed. + +Projection to existing UI rows: + +- reasoning part -> `ReasoningMessage`; +- tool part -> `ToolCallMessage` plus optional `ToolResultMessage`; +- text part -> agent `ChatBubbleMessage`; +- error part -> agent `ChatBubbleMessage` with `error`. + +Acceptance criteria: + +- pure unit tests prove event order is preserved; +- sequential tools render call/result pairs in event order; +- prose between tools stays between those tools; +- reasoning before/after tools stays in place; +- local errors stay attached to the failed user turn. + +### Phase E: Route New Chats Through Dashboard Transport + +Goal: + +- make dashboard/WebSocket the default for local sandbox chat while preserving + HTTP fallback. + +Submission flow: + +1. If no active runtime session: + - call `session.create`; + - store runtime session ID and stored session ID separately. +2. Optimistically insert the user message. +3. Call: + +```text +prompt.submit { session_id, text } +``` + +4. Drive the active timeline entirely from WebSocket events. +5. On `message.complete`, optionally hydrate stored session once to align + final artifacts. + +Fallback: + +- if dashboard connection fails before submit, use existing HTTP path; +- if dashboard fails mid-turn, render a local error anchored to that turn. + +Acceptance criteria: + +- "what time is it?" streams visibly; +- bad provider key displays an anchored local error; +- switching to a good provider in the same visible chat does not move/drop the + failed turn; +- no local error text is sent back to the model as assistant context. + +### Phase F: Restore Sessions Through The Same Projection + +Goal: + +- restored sessions and live sessions use the same visual representation. + +Implementation: + +- keep `getSessionMessages(sessionId)` as the stored transcript fetch; +- replace ad hoc DB row mapping with a normalizer equivalent to Hermes Agent + desktop's `toChatMessages()`; +- merge tool-call assistant rows and `role="tool"` rows into one ordered + assistant turn projection; +- preserve reasoning rows; +- preserve attachments/artifacts; +- preserve local-only errors only during the current app process unless an + overlay store is explicitly added later. + +Acceptance criteria: + +- restored session shows: + - user messages; + - assistant messages; + - reasoning/thoughts; + - tool calls; + - tool results; + - errors persisted by Hermes Agent; + - image/file artifacts and attachments; +- restored session no longer shows duplicated tool-call-only groups after a + final assistant response. + +### Phase G: Retire Whole-Transcript Text-Key Reconciliation + +Goal: + +- remove the bug-prone class of behavior. + +Implementation: + +- stop calling `reconcileStreamedWithDb()` for dashboard-driven active turns; +- use final DB hydration as: + - full replacement when the active turn has completed and no local error is + pending; + - stable-ID/turn-ID preservation only for local errors and in-flight UI state; +- keep old reconciliation only for HTTP fallback mode. + +Acceptance criteria: + +- no content-prefix matching is needed for normal dashboard turns; +- DB hydration cannot move a local failed turn after a later successful turn; +- split assistant text is handled by the stored-session normalizer, not by + post-hoc duplicate heuristics. + +### Phase H: Manual Test Matrix + +Run these in the sandboxed Hermes One instance, with the sandbox home and non-conflicting ports: + +- simple no-tool prompt with visible streaming; +- invalid API key/provider failure; +- invalid key followed by good provider in the same visible chat; +- DeepSeek reasoning-heavy prompt; +- GPT reasoning-heavy prompt; +- image generation skill with: + - reasoning before first tool; + - multiple sequential tool calls; + - tool results; + - intermediate assistant prose; + - final image artifact; +- restored session for each above case; +- app reload while a session is idle; +- app reload after failed provider turn; +- remote/SSH mode fallback. + +### Phase I: Optional Persistent Local Error Overlay + +Dashboard/Hermes Agent may not persist provider setup failures that happen +before a turn reaches the agent. If we want those local-only errors to survive +app restart, add a desktop-owned overlay store: + +```text +/desktop/session-overlays.json +``` + +Shape: + +```ts +interface SessionOverlayEvent { + sessionId: string + turnId: string + afterUserId?: string + afterUserText: string + error: string + createdAt: number +} +``` + +This should be a later phase because it is product behavior, not required for +live reconciliation correctness. + +## Current Status In This Worktree + +Already done: + +- separate worktree for development; +- sandbox scripts/config/ports; +- sandbox app identity `Hermes One`; +- local error metadata and rendering; +- preliminary local-error preservation tests; +- selected PR545 display pieces for grouped tools/reasoning; +- DB polling experiment, shown not to solve live ordering; +- `/v1/runs` experiment, now opt-in only. + +Next recommended phase: + +- package the Hermes Agent dashboard compatibility changes as a managed desktop + addon/overlay, then wire local, remote HTTP, and SSH deployment/checks through + that same capability probe. + +## 2026-06-09 Remaining Work After Dashboard Transport Stabilization + +The dashboard/WebSocket path, remote HTTP path, and SSH-over-tunnel path are now +implemented in the sandboxed Hermes One instance and covered by unit/integration tests. Manual live +testing has also exercised: + +- normal local and remote dashboard chat; +- bad provider/key failure followed by good-provider recovery; +- repeated failed/non-failed turns in one visible session; +- reasoning-heavy and tool-heavy turns; +- grouped tool calls and restored grouped tool calls; +- prompt-image attachments through dashboard transport; +- restored sessions with local desktop overlay rows; +- remote HTTP sessions and remote HTTP configured-model CRUD; +- SSH dashboard transport over a local tunnel. + +The remaining work is now mostly operational hardening, not a change in the +chat-reconciliation architecture. + +### 1. Final Regression Gate + +Status: implemented as a repeatable gate. + +Run the complete regression battery after every change in this final hardening +pass. The canonical manual and automated checklist now lives in: + +```text +docs/reconciliation-regression-playbook.md +``` + +Automated command: + +```powershell +npm run typecheck +npm test -- --run tests/remote-sessions.test.ts tests/remote-metadata.test.ts tests/remote-models.test.ts tests/dashboard-chat-transport.test.ts tests/dashboard-event-adapter.test.ts tests/live-tool-events.test.ts tests/live-reasoning-events.test.ts tests/tool-activity-group-title.test.ts tests/reconcile-streamed-with-db.test.ts tests/session-history-mapping.test.ts tests/sessions-history-items.test.ts tests/sessions-decode-content.test.ts src/renderer/src/screens/Chat/mediaUtils.test.ts src/renderer/src/screens/Chat/hooks/useChatIPC.test.tsx tests/chat-messages.test.ts tests/session-continuation-store.test.ts tests/dashboard-remote.test.ts tests/dashboard-launch.test.ts tests/dashboard-gateway-client.test.ts tests/hermes-agent-compat.test.ts tests/run-stream.test.ts src/renderer/src/screens/Sessions/Sessions.test.tsx +``` + +Current result on 2026-06-11: + +- 21 focused test files passed; +- 231 focused tests passed; +- full suite passed: 102 test files, 1158 tests passed, 3 skipped; +- TypeScript node and web typechecks passed. + +### 2. Hermes Agent Compatibility Addon/Overlay + +Status: first implementation slice complete. + +Hermes One currently depends on Hermes Agent dashboard capabilities that may not +be present, or may be present but not enabled correctly, in every installed or +remote Hermes Agent. We should not leave those fixes as manual source edits. + +Package them as a desktop-managed compatibility addon/overlay with this shape: + +- detect capabilities before patching: + - `/api/status` reachable; + - authenticated `/api/ws` accepts a WebSocket upgrade; + - dashboard HTML advertises embedded chat support; + - configured-model list/CRUD endpoints are available; + - session list and session message endpoints are available; +- deploy only the missing compatibility pieces; +- record the applied addon version on the target Hermes Agent home; +- support local Hermes Agent install, remote HTTP target when writable/deployable, + and SSH target; +- never modify provider credentials, user sessions, skills, memory, or model + configuration while applying the addon; +- expose a clear Settings/diagnostics result when the target cannot be patched + automatically. + +For the embedded-chat compatibility issue found during live testing, the addon +should avoid depending on a one-off source edit. The target behavior is: + +```text +hermes dashboard --no-open --host --port --tui +``` + +must produce a dashboard where: + +```text +GET /api/status -> authenticated success +GET /api/ws upgrade -> 101 Switching Protocols +``` + +If the installed engine does not do that, the addon should either patch/wrap the +dashboard launch behavior or install a small compatibility module that makes the +dashboard default compatible with Hermes One. + +Implemented first slice: + +- `src/main/hermes-agent-compat.ts` owns a versioned compatibility patch for the + reproduced embedded-dashboard-chat issue. +- Local Hermes Agent installs are checked before dashboard launch and after + `hermes update`. +- SSH Hermes Agent targets are checked before dashboard probing/startup and + after `hermes update` over SSH. +- The patch is intentionally narrow: it changes only the + `embedded_chat: bool = False` default in `hermes_cli/web_server.py` to + `True`. +- A diagnostic marker is written to: + - local: `/desktop-compat/dashboard-embedded-chat.json`; + - SSH: `~/.hermes/desktop-compat/dashboard-embedded-chat.json`. +- Plain remote HTTP is still probe-only. Hermes One cannot safely patch it + without either SSH access or a future Hermes Agent deploy endpoint. + +Current tests: + +- `tests/hermes-agent-compat.test.ts` covers compatible, patchable, and unknown + source shapes. +- The dashboard compatibility tests and full chat/session regression battery + pass after the slice. + +### 3. Active Transport Status Indicator + +Status: already implemented. + +The Settings UI has separate configuration choices for local/remote/SSH +dashboard behavior and reports the actual active path after probing. The probe +now checks the dashboard WebSocket, not only REST status, so a remote target with +healthy REST but disabled embedded chat is reported as unavailable instead of +silently pretending dashboard chat is usable. + +Keep this item as a regression check, but no new design work is currently +needed. + +### 4. Remote/SSH/Local Test Matrix + +Status: agreed, continue as a gate. + +Before merging, run the same user-visible cases across every transport that is +expected to work: + +- local dashboard auto; +- local dashboard forced; +- local legacy fallback; +- remote HTTP dashboard auto; +- remote HTTP dashboard forced; +- remote HTTP legacy fallback; +- SSH dashboard auto; +- SSH dashboard forced; +- SSH legacy fallback. + +For each transport, cover: + +- simple no-tool prompt; +- bad provider/key failure; +- bad provider followed by good provider in the same session; +- image prompt attachment; +- tool-heavy image-generation turn where the image path is mentioned in text; +- restored session; +- continue restored session; +- model switch and configured-model list refresh. + +Known upstream limitation from this pass: + +- Gemini failures in the current lab were traced to Hermes Agent upstream + behavior, not the Hermes One dashboard transport. + +### 5. Reapply Addon After Engine Updates + +Status: not yet implemented. + +Yes: any Hermes Agent compatibility patch/addon must be rechecked after every +engine update, for both local and remote targets. + +The update flow should become: + +1. run the normal Hermes Agent update; +2. restart/probe the updated engine; +3. run the compatibility capability probe; +4. if required, reapply the addon/overlay; +5. restart/probe again; +6. surface the final state in Settings and diagnostics. + +This applies to: + +- Hermes One's bundled/local Hermes Agent install; +- remote HTTP targets when Hermes One is allowed to deploy an addon; +- SSH targets through the tunnel/SSH deployment path. + +If the target cannot be modified, Hermes One should keep working in legacy mode +and clearly report why dashboard mode is unavailable. + +### 6. Final Review And Upstreaming + +Status: pending. + +Before this leaves the worktree: + +- split the work into reviewable commits/PRs; +- separate Hermes One changes from Hermes Agent compatibility changes; +- document the compatibility contract Hermes One expects from Hermes Agent; +- upstream the Hermes Agent embedded-chat/dashboard fix if possible; +- keep the addon/overlay path until the minimum supported Hermes Agent version + contains the fix natively. + +## Purpose + +Hermes One currently merges two views of chat state: + +- the renderer's streamed in-memory transcript +- the Hermes Agent `state.db` transcript loaded through `getSessionMessages()` + +That merge is valuable because the database contains artifacts that may not arrive +over the OpenAI-compatible stream, especially reasoning rows, tool calls, tool +results, and attachment metadata. But the current whole-session reconciliation is +fragile for local-only failures. A provider/key error can create a local renderer +error bubble that has no DB equivalent; after a later successful turn, the global +DB merge can move that error to the wrong position, drop neighboring lines, or +send the synthetic error text back to the model as prior assistant content. + +The implementation goal is to keep the useful DB artifact fill-in behavior while +making local failures explicitly modeled and anchored to their originating turn. + +## Design Principle + +Use different sources of truth for different phases: + +- Cold load / restored session: `state.db` is canonical. +- Active streaming turn: renderer order is canonical. +- Successful turn completion: DB may fill missing persisted artifacts into the + current visible transcript. +- Failed turn completion: local error state is canonical for that failed turn; + do not run a global DB reconciliation that can reorder it. + +In short: + +> DB is canonical for restored sessions. During active chat, streamed UI is +> canonical for ordering; DB only fills missing persisted artifacts for +> successful turns. + +## Current Hermes One Code Paths + +### Message Shape + +File: `src/renderer/src/screens/Chat/types.ts` + +Current `ChatBubbleMessage` has: + +- `id` +- optional `kind` +- `role: "user" | "agent"` +- `content` +- optional `attachments` + +It does not have: + +- `error` +- `pending` +- `localOnly` +- `turnId` +- an anchor to the user message that caused an assistant response/error + +This means provider errors are represented as normal assistant text, which makes +them indistinguishable from model output during reconciliation and future request +history construction. + +### Sending History + +File: `src/renderer/src/screens/Chat/hooks/useChatActions.ts` + +`sendToAgent()` currently sends: + +```ts +messagesRef.current.filter(hasContent).map((m) => ({ + role: m.role, + content: m.content, +})); +``` + +Because renderer-only errors are normal `role: "agent"` content bubbles, an error +like `Error: provider returned 401` can become part of the next provider's LLM +context. That is not only noisy; it can change model behavior in later turns. + +### Streaming + +File: `src/renderer/src/screens/Chat/hooks/useChatIPC.ts` + +Current streaming handlers: + +- `onChatChunk`: appends assistant text to the latest agent bubble or creates a + new agent bubble. +- `onChatReasoningChunk`: creates/appends a reasoning row in the active turn, + before assistant content when needed. +- `onChatToolEvent`: calls `upsertLiveToolEvent()`. +- `onChatDone`: fetches full DB transcript with `getSessionMessages()` and runs + `reconcileStreamedWithDb(prev, dbMessages)`. +- `onChatError`: appends a new content bubble: + +```ts +{ + id: `error-${Date.now()}`, + role: "agent", + content: `Error: ${error}`, +} +``` + +The error bubble has no relationship to the user turn that caused it. + +### DB Mapping + +File: `src/renderer/src/screens/Chat/sessionHistory.ts` + +`dbItemsToChatMessages()` maps DB rows to renderer messages: + +- `user` -> user bubble +- `assistant` -> agent bubble +- `reasoning` -> reasoning row +- `tool_call` -> tool call row +- `tool_result` -> tool result row + +This is still the right path for cold load and restored sessions. + +### Reconciliation + +File: `src/renderer/src/screens/Chat/sessionHistory.ts` + +`reconcileStreamedWithDb()` does a whole-session merge: + +1. Builds a map of streamed rows by reconciliation key. +2. Walks DB rows in canonical DB order. +3. Preserves streamed IDs when DB rows match streamed equivalents. +4. Inserts DB-only rows, especially reasoning/tool rows. +5. Preserves unmatched streamed prefix/suffix rows. +6. Drops some concatenated assistant split artifacts. + +This works for successful turns where all unmatched rows are either useful live +artifacts or benign duplicates. It is risky when unmatched rows are local errors, +because local errors may be appended as suffix rows after a later DB transcript. + +### Restored Session Flow + +File: `src/renderer/src/screens/Layout/Layout.tsx` + +`handleResumeSession()` loads DB rows and calls `setMessages(dbItemsToChatMessages(items))`. +This should remain DB-only for now. It restores persisted user/assistant rows, +reasoning, tool calls, tool results, and attachments. + +It will not restore purely local errors after app restart unless we add a +desktop-side overlay store or Hermes Agent itself persists failed turns. + +## Upstream Hermes Agent Desktop Lessons + +Source: `github.com/NousResearch/hermes-agent/apps/desktop` + +The upstream desktop app avoids this exact class of bugs mostly by avoiding raw +SQLite reconciliation in the renderer. It is an Electron shell that talks to a +`hermes dashboard` backend over gateway APIs and reuses the embedded TUI path. + +The relevant ideas to copy are local transcript invariants, not the full +dashboard architecture. + +### Upstream Message Model + +File: `apps/desktop/src/lib/chat-messages.ts` + +Upstream `ChatMessage` includes: + +- `id` +- `role` +- `parts` +- optional `timestamp` +- optional `pending` +- optional `error` +- optional `branchGroupId` +- optional `hidden` +- optional `attachmentRefs` + +The important part for Hermes One is `error` as metadata, not as normal assistant +text. + +### Upstream Error Handling + +File: `apps/desktop/src/app/session/hooks/use-message-stream.ts` + +Provider/gateway failures are converted into assistant error state by +`failAssistantMessage()`: + +- reuse current stream assistant message if it exists +- otherwise create a local assistant message +- set `error` +- clear `pending` +- clear turn busy state + +It does not append a normal assistant text bubble containing `Error: ...`. + +Upstream also detects completion-shaped errors with `completionErrorText()`. +Errors such as provider/gateway failure text returned through `message.complete` +are converted to assistant errors. + +### Upstream Hydration Guard + +File: `apps/desktop/src/app/session/hooks/use-message-stream.ts` + +At completion, upstream only hydrates from stored session data when: + +- there is no completion error +- there is no inline assistant error +- there is no unresolved user tail +- and the stream did not produce useful assistant payload or final text + +Hermes One should copy this invariant: failed turns should not trigger a broad DB +refresh/merge that can erase or reorder the local failure. + +### Upstream Error Preservation + +File: `apps/desktop/src/lib/chat-messages.ts` + +`preserveLocalAssistantErrors(nextMessages, currentMessages)` preserves local +assistant errors when hydration omits failed turns: + +- if a hydrated assistant reuses the same ID, carry over local `error` +- if a local assistant error has no hydrated equivalent, preserve it +- preserve the preceding local user when needed +- avoid duplicating the local user when the hydrated transcript already contains + equivalent tail user content + +Hermes One needs an adapted version that understands `content` bubbles rather +than upstream's `parts` model. + +## Scope Decision + +Do not migrate Hermes One to upstream's `parts[]` model in this fix. That would +touch rendering, transcript copying, history mapping, and live tool rendering all +at once. + +Do not migrate Hermes One to the upstream dashboard/gateway architecture in this +fix. That is a larger product direction decision. + +Instead: + +- keep Hermes One's current `ChatMessage` union +- add minimal metadata to support local errors and anchoring +- wrap or replace the risky whole-session merge at completion boundaries +- preserve the DB-based cold load behavior + +## Proposed Data Model Changes + +### Extend `ChatBubbleMessage` + +File: `src/renderer/src/screens/Chat/types.ts` + +Add optional fields: + +```ts +export interface ChatBubbleMessage { + id: string; + kind?: "user" | "assistant"; + role: "user" | "agent"; + content: string; + attachments?: Attachment[]; + + /** + * Local or streamed assistant failure metadata. This must not be sent back + * to the model as assistant content. + */ + error?: string; + + /** + * True while an optimistic assistant bubble is active. Useful for replacing + * the pending row with final text or error state. + */ + pending?: boolean; + + /** + * True for renderer-only UI state with no canonical DB row, such as provider + * setup/key failures. + */ + localOnly?: boolean; + + /** + * Renderer-local turn identity. Used only for preserving UI order and local + * failures during a live session. + */ + turnId?: string; +} +``` + +Keep these optional to preserve compatibility with existing tests and DB-loaded +messages. + +### Active Turn State + +Add a small renderer-local active turn structure: + +```ts +interface ActiveTurn { + turnId: string; + userId: string; + startIndex: number; + status: "running" | "failed" | "completed"; +} +``` + +This can live in `Chat.tsx` as a `useRef` and be passed to +`useChatActions()` and `useChatIPC()`. + +This does not need to be persisted. It is only for live-turn anchoring. + +## New Helper Module + +Create a helper module, for example: + +`src/renderer/src/screens/Chat/chatMessages.ts` + +Recommended helpers: + +```ts +export function isBubbleMessage(m: ChatMessage): m is ChatBubbleMessage; +export function isHistoryArtifact(m: ChatMessage): boolean; +export function visibleBubbleText(m: ChatBubbleMessage): string; +export function normalizeMessageText(text: string): string; +export function shouldSendToAgent(m: ChatMessage): m is ChatBubbleMessage; +export function shouldCopyToTranscript(m: ChatMessage): boolean; +export function displayTextForTranscript(m: ChatMessage): string; +export function isAssistantError(m: ChatMessage): m is ChatBubbleMessage; +``` + +`shouldSendToAgent()` should return false for: + +- non-bubble messages +- `localOnly` +- `error` +- hidden/future equivalent if added later +- empty content + +It should return true for persisted or streamed user/assistant content bubbles +that are legitimate conversation context. + +This helper should replace duplicated bubble checks in: + +- `useChatActions.ts` +- `MessageList.tsx` +- `MessageRow.tsx` +- `transcriptUtils.ts` +- `sessionHistory.ts` +- possibly `liveToolEvents.ts` + +Do this gradually; the first implementation can update only the paths needed for +the bug fix. + +## Error Rendering Plan + +### MessageList + +File: `src/renderer/src/screens/Chat/MessageList.tsx` + +Current filtering hides empty content bubbles: + +```ts +return ((m.content as string) || "").trim().length > 0; +``` + +Change visible filtering so assistant error bubbles render even when content is +empty: + +```ts +if (isBubble(m)) { + return Boolean(m.error) || ((m.content as string) || "").trim().length > 0; +} +``` + +### MessageRow + +File: `src/renderer/src/screens/Chat/MessageRow.tsx` + +Add rendering for `msg.error`. + +Suggested behavior: + +- show a visually distinct error bubble +- display `msg.error` +- do not run normal media token parsing for error text +- do not show approval bar for error rows + +Pseudo-flow: + +```tsx +if (msg.role === "agent" && msg.error) { + return ( +

+ ); +} +``` + +Add CSS only if existing error styles are not enough. + +## Sending History Plan + +File: `src/renderer/src/screens/Chat/hooks/useChatActions.ts` + +Replace: + +```ts +messagesRef.current.filter(hasContent).map(...) +``` + +with: + +```ts +messagesRef.current.filter(shouldSendToAgent).map((m) => ({ + role: m.role, + content: m.content, +})); +``` + +This ensures local errors do not pollute future prompts. + +Important: tool/reasoning rows are already excluded by `hasContent`, so this +should preserve current request-shaping behavior except for excluding local +assistant errors. + +## Sending Turn Creation Plan + +File: `src/renderer/src/screens/Chat/hooks/useChatActions.ts` + +Change `pushUser()` from a void helper to a helper that returns the inserted +message metadata: + +```ts +const pushUser = useCallback((content, idPrefix, attachments) => { + const turnId = `turn-${Date.now()}-${Math.random().toString(36).slice(2)}`; + const userId = `${idPrefix}-${Date.now()}`; + + setMessages((prev) => [ + ...prev, + { + id: userId, + role: "user", + content, + turnId, + ... + }, + ]); + + return { turnId, userId }; +}, ...); +``` + +Better: avoid two `Date.now()` calls for `turnId` and `userId`; compute once. + +In `handleSend()`: + +```ts +setIsLoading(true); +const turn = pushUser(text, "user", attachments); +activeTurnRef.current = { + ...turn, + startIndex: messagesRef.current.length, + status: "running", +}; +onSessionStarted?.(); +await sendToAgent(text, attachments); +``` + +The exact `startIndex` can be approximate because `setMessages` is async. It is +mostly useful for diagnostics and fallback; the stable `userId` and `turnId` are +more important. + +Apply similar turn metadata to: + +- `handleQuickAsk()` +- `handleApprove()` +- `handleDeny()` + +If `/approve` and `/deny` should not be treated as normal chat turns, document +that and avoid active turn changes there. Current code pushes them as user rows, +so they likely should get turn IDs for consistency. + +## Streaming Turn Update Plan + +File: `src/renderer/src/screens/Chat/hooks/useChatIPC.ts` + +Accept an optional `activeTurnRef` argument: + +```ts +activeTurnRef: React.MutableRefObject; +``` + +### `onChatChunk` + +Current behavior appends to the latest agent bubble, regardless of turn. That can +remain for the first pass to avoid changing streaming behavior. + +Optional improvement: + +- when creating a new agent bubble, include `turnId: activeTurnRef.current?.turnId` +- when appending to an existing agent bubble, preserve `turnId` +- if latest agent bubble is an error, do not append content to it; create a new + assistant bubble instead + +This prevents a late chunk from accidentally mutating an error row. + +### `onChatReasoningChunk` + +Preserve current insertion behavior. + +Add `turnId` to newly created reasoning rows only if we later add `turnId` to +history artifacts. Not required for this fix. + +### `onChatToolEvent` + +Preserve current `upsertLiveToolEvent()` behavior. + +Do not change tool rendering or ordering in the first implementation. + +### `onChatError` + +Replace append-only behavior with an anchored helper: + +```ts +setMessages((prev) => markActiveTurnFailed(prev, error, activeTurnRef.current)); +``` + +`markActiveTurnFailed()` should: + +1. Normalize message text: + - raw stored `error` should not include a duplicated `Error: ` prefix unless + the backend already supplied it. +2. If there is a pending/current assistant bubble for this turn: + - set `error` + - set `content: ""` unless there is useful partial content to preserve + - set `pending: false` + - set `localOnly: true` +3. Else insert an assistant error bubble immediately after the active user row. +4. If the active user row cannot be found: + - append the error at the tail as a fallback +5. Set `activeTurnRef.current.status = "failed"` +6. Clear loading/tool progress as today. + +Decision point: partial content plus error. + +Recommended first behavior: + +- if there is partial assistant content and then an error, keep `content` and set + `error` +- render both in `MessageRow`: content first, then error status +- mark `localOnly: true` only if the assistant message has no DB equivalent + +This avoids losing partial streamed output after a late provider failure. + +### `onChatDone` + +Before fetching DB: + +```ts +const activeTurn = activeTurnRef.current; +if (activeTurn?.status === "failed") return; +``` + +After success: + +- set loading false as today +- set active turn status to completed +- fetch DB as today +- call the safer reconciliation wrapper instead of raw `reconcileStreamedWithDb` +- clear `activeTurnRef.current` if it belongs to the completed session/turn + +Do not skip DB refresh for successful turns yet; DB refresh is still needed to +fill reasoning/tool rows that may only exist in `state.db`. + +## Reconciliation Plan + +Do not delete `reconcileStreamedWithDb()` immediately. It already handles useful +cases: + +- DB-only reasoning insertion +- future streamed reasoning ID preservation +- DB-only tool call/result insertion +- duplicate streamed content FIFO matching +- assistant split artifact removal +- DB attachments copied into streamed bubbles + +Instead add a wrapper around it, likely in `sessionHistory.ts`: + +```ts +export function reconcileAfterDbRefresh( + current: ReadonlyArray, + db: ReadonlyArray, + options?: { + activeTurn?: ActiveTurn | null; + }, +): ChatMessage[] { + if (options?.activeTurn?.status === "failed") return [...current]; + + const syncableCurrent = current.filter(isSyncableWithDb); + const localOnly = current.filter(isLocalOnlyPreserved); + + const reconciled = reconcileStreamedWithDb(syncableCurrent, db); + return preserveLocalAssistantErrors(reconciled, current); +} +``` + +### `isSyncableWithDb()` + +Should return false for: + +- assistant bubbles with `error` +- `localOnly` + +Should return true for: + +- user/assistant content bubbles without local error state +- reasoning/tool rows + +Reasoning/tool rows may be local live artifacts and should continue to be +matched/deduped against DB where possible. + +### `preserveLocalAssistantErrors()` + +Adapt upstream's helper to Hermes One. + +Input: + +- `nextMessages`: DB-reconciled messages +- `currentMessages`: local current transcript + +Algorithm: + +1. Build `existingIds` from `nextMessages`. +2. Build a normalized tail-user matcher from `nextMessages`. +3. Find all local assistant error bubbles: + - `role === "agent"` + - `error` present + - not hidden if hidden is later added +4. For each local error: + - if `nextMessages` already contains same ID, merge `error` into that row + - otherwise find nearest preceding visible user in `currentMessages` + - find matching user in `nextMessages` by: + - same `id`, if available + - same `turnId`, if available + - normalized content plus attachment refs/content + - insert the error immediately after the matched user and any local/DB rows + that belong before assistant response for that turn + - if no matched DB user exists, preserve the local user+error pair together +5. Preserve order among multiple local failed turns. +6. Do not append all failures blindly to the end. + +The hardest detail is where to insert error relative to DB rows that follow the +matched user. Recommended first pass: + +- insert immediately after the matched user if the DB does not contain an + assistant response before the next user +- if DB already has an assistant response for that same user, do not preserve the + error unless it has the same ID as that assistant row + +That avoids creating impossible turns like: + +```text +user A +assistant success A +assistant error A +``` + +For the bad-key-then-good-provider case, DB likely contains: + +```text +user good +assistant good +``` + +while current contains: + +```text +user bad +assistant error bad +user good +assistant good +``` + +The result should be: + +```text +user bad +assistant error bad +user good +assistant good +``` + +### Split Artifact Logic + +Keep `buildDbAssistantSplitSequences()` and `isCoveredByDbBubbleSplit()` for now. +These fix a separate class of duplicated assistant text around tool calls. + +But do not allow split-artifact logic to drop local error rows: + +- local errors should be filtered out before split artifact checks +- error rows should have `reconciliationKey() === null` + +### Reconciliation Key Changes + +Update `reconciliationKey()`: + +- if bubble has `error` or `localOnly`, return `null` +- otherwise keep current role/content matching + +This prevents local errors from matching real assistant text. + +## Completion Error Text Plan + +Upstream detects provider/gateway errors that arrive as final assistant text. +Hermes One currently can surface errors through `onError`, but failures may also +arrive as normal completion content depending on API behavior. + +Add a helper similar to upstream: + +```ts +const COMPLETION_ERROR_PATTERNS = [ + /^API call failed after \d+ retries:/i, + /^HTTP\s+\d{3}\b/i, + /^(Provider|Gateway)\s+error:/i, + /missing .*api.*key/i, + /api key.*missing/i, + /unauthorized|forbidden|invalid api key/i, +]; +``` + +Use cautiously. False positives could turn legitimate assistant text into error +UI. Recommended phase: + +- do not use this in the first patch unless there is a known repro where Hermes + One receives provider errors as `chat-done` content +- add tests before enabling + +## Restored Session Behavior + +The proposed changes preserve restored session artifacts that are persisted in +`state.db`. + +Cold restored sessions still flow through: + +```text +getSessionMessages(sessionId) + -> expandRowsToHistory() + -> dbItemsToChatMessages() + -> setMessages() +``` + +This restores: + +- user messages +- assistant messages +- reasoning/thought rows +- tool call rows +- tool result rows +- DB-backed attachments + +It does not restore local provider errors after app restart if Hermes Agent never +wrote them to `state.db`. That is already true today. + +If restart-persistent local errors are required, add a separate phase: + +### Optional Later Phase: Desktop Session Overlay + +Persist local-only events to a desktop-owned overlay file, e.g. + +```text +profileHome(activeProfile)/desktop/session-overlays.json +``` + +Shape: + +```ts +interface SessionOverlay { + sessionId: string; + localEvents: Array<{ + id: string; + turnId: string; + afterUserContent: string; + afterUserAttachments?: string[]; + role: "agent"; + error: string; + createdAt: number; + }>; +} +``` + +On restored session load: + +- load DB transcript +- overlay local error events by matching the nearest user +- prune overlays when a session is deleted + +Do not implement this in the first stabilization patch unless the product +requires failed provider rows to survive app restart. + +## Streaming Behavior Expectations + +Current streaming should remain mostly unchanged. + +Preserved: + +- assistant text still streams through `chat-chunk` +- reasoning still streams through `chat-reasoning-chunk` +- live tools still stream through `chat-tool-event` +- successful completion still fetches DB rows to fill missing artifacts +- session ID handling remains unchanged + +Changed: + +- failures become error metadata, not normal assistant content +- failed turns skip broad DB reconciliation +- local errors render even with empty content +- local errors are excluded from future LLM request history + +Potential behavior improvement: + +- partial output followed by error can be displayed as partial content plus + error status, instead of losing one or the other + +## Test Plan + +### Unit Tests: Message Helpers + +New or existing test file: + +`tests/chat-message-helpers.test.ts` + +Cases: + +- `shouldSendToAgent()` includes normal user/assistant content. +- `shouldSendToAgent()` excludes local assistant error. +- `shouldSendToAgent()` excludes empty pending assistant. +- `shouldSendToAgent()` excludes reasoning/tool rows. +- transcript copying includes a readable error line if desired. + +### Unit Tests: Error Preservation + +New or existing file: + +`tests/reconcile-streamed-with-db.test.ts` + +Add cases: + +1. Local failed turn before later successful DB turn: + +```text +current: user bad, assistant error bad, user good, assistant good streamed +db: user good, assistant good +expect: user bad, assistant error bad, user good, assistant good +``` + +2. Local failed turn where DB has the user but no assistant: + +```text +current: user bad, assistant error bad +db: user bad +expect: user bad, assistant error bad +``` + +3. Repeated prompt text: + +```text +current: user "hi", error, user "hi", assistant "ok" +db: user "hi", assistant "ok" +expect: do not attach error after successful "hi" +``` + +This may require `turnId` or positional heuristics to pass robustly. + +4. Existing DB artifacts still insert: + +```text +current: user, assistant content +db: user, reasoning, tool_call, tool_result, assistant content +expect: reasoning/tools present, streamed IDs preserved +``` + +5. Local error is not dropped by split artifact logic. + +6. Local error is not appended at the tail after unrelated later DB rows. + +### Unit Tests: IPC/Error Flow + +If the current test harness supports renderer hooks, add tests around +`useChatIPC()`: + +- `onChatError` marks current active turn failed and inserts error after user. +- `onChatDone` skips DB reconciliation if active turn failed. +- `onChatDone` still reconciles if active turn succeeded. + +If hook tests are expensive, keep this behavior in pure helper functions and +unit-test those helpers directly. + +### Existing Tests To Keep Passing + +Run: + +```bash +npm test -- reconcile-streamed-with-db +npm test -- transcriptUtils +npm test -- session-history +npm test -- sessions-history-items +``` + +Then broader: + +```bash +npm test +``` + +Adjust exact commands to the repo's configured Vitest filters. + +## Manual QA Plan + +### Scenario 1: Bad Provider Key Then Good Provider + +1. Configure a provider with an invalid/missing key. +2. Send `hello with bad provider`. +3. Confirm visible transcript: + - user prompt + - assistant error directly after that prompt +4. Switch to a working provider in the same session. +5. Send `hello with good provider`. +6. Confirm visible transcript order: + - bad user + - bad assistant error + - good user + - good assistant response +7. Confirm the bad error did not move after the good response. +8. Confirm request history for the good provider did not include the bad + provider error as assistant text. + +### Scenario 2: Reasoning/Tool Successful Turn + +1. Use a model/tool path that produces reasoning and tool calls. +2. Confirm live streaming still works. +3. Confirm DB refresh still inserts missing reasoning/tool results after done. +4. Confirm no duplicate assistant split text appears. + +### Scenario 3: Partial Output Then Error + +1. Force a stream that emits some text and then fails. +2. Confirm partial content remains visible if useful. +3. Confirm error status is visible and anchored. +4. Confirm next successful turn does not reorder the failed turn. + +### Scenario 4: Restored Session + +1. Open an existing persisted session. +2. Confirm user/assistant rows restore. +3. Confirm reasoning rows restore. +4. Confirm tool calls/results restore. +5. Confirm attachments restore. +6. Confirm local-only errors from before app restart are not expected unless the + optional overlay phase is implemented. + +## Phased Implementation Plan + +This should be implemented in phases. The failure touches message typing, +streaming, rendering, request-history construction, and DB reconciliation. Doing +everything in one patch would make regressions hard to isolate. + +Each phase should leave the app buildable and should preserve current streaming +behavior unless the phase explicitly changes it. + +### Phase 0: Baseline Audit And Repro Tests + +Goal: + +- Capture the current bug as failing tests before changing behavior. +- Confirm the implementation agent understands the current boundaries. + +Files to inspect: + +- `src/renderer/src/screens/Chat/types.ts` +- `src/renderer/src/screens/Chat/hooks/useChatActions.ts` +- `src/renderer/src/screens/Chat/hooks/useChatIPC.ts` +- `src/renderer/src/screens/Chat/sessionHistory.ts` +- `src/renderer/src/screens/Chat/MessageList.tsx` +- `src/renderer/src/screens/Chat/MessageRow.tsx` +- `tests/reconcile-streamed-with-db.test.ts` + +Implementation work: + +- Add tests for the known bad-key-then-good-provider ordering bug. +- Add tests proving local error text is currently preserved but lands in the + wrong place, if that is the existing behavior. +- Add tests showing existing successful DB artifact insertion still works: + reasoning, tool calls, tool results, and split assistant dedupe. + +Recommended test cases: + +```text +current: user bad, assistant local error, user good, assistant good streamed +db: user good, assistant good +expect: user bad, assistant local error, user good, assistant good +``` + +```text +current: user bad, assistant local error +db: user bad +expect: user bad, assistant local error +``` + +```text +current: user "hi", assistant local error, user "hi", assistant good +db: user "hi", assistant good +expect: error remains attached to first "hi", not the later successful "hi" +``` + +Acceptance criteria: + +- At least one new test fails on the current implementation and describes the + real reported bug. +- Existing reconciliation tests still pass before behavior changes, except for + any newly added bug repro tests. + +Stop/rollback guidance: + +- If the bug cannot be reproduced in a pure function, do not proceed directly to + UI changes. First extract the currently implicit merge behavior into a helper + that can be tested. + +### Phase 1: Add Message Metadata Without Behavior Changes + +Goal: + +- Make the type system capable of representing local errors as metadata. +- Avoid changing runtime behavior yet. + +Primary files: + +- `src/renderer/src/screens/Chat/types.ts` + +Implementation work: + +- Add optional fields to `ChatBubbleMessage`: + - `error?: string` + - `pending?: boolean` + - `localOnly?: boolean` + - `turnId?: string` +- Keep all fields optional. +- Do not change `onChatError` yet. +- Do not change reconciliation yet. + +Acceptance criteria: + +- TypeScript still compiles. +- No renderer behavior changes. +- Existing tests pass. + +Stop/rollback guidance: + +- If adding these fields creates type noise in many places, keep them limited to + `ChatBubbleMessage`; do not add metadata to reasoning/tool rows in this phase. + +### Phase 2: Centralize Chat Message Helpers + +Goal: + +- Stop spreading ad hoc checks like `"content" in m` and `!kind` across critical + paths before changing error semantics. + +Primary files: + +- new `src/renderer/src/screens/Chat/chatMessages.ts` +- `src/renderer/src/screens/Chat/hooks/useChatActions.ts` +- `src/renderer/src/screens/Chat/MessageList.tsx` +- `src/renderer/src/screens/Chat/transcriptUtils.ts` + +Implementation work: + +- Add helper functions: + - `isBubbleMessage()` + - `isAssistantError()` + - `normalizeMessageText()` + - `visibleBubbleText()` + - `shouldSendToAgent()` + - `shouldCopyToTranscript()` + - `displayTextForTranscript()` +- Initially wire only low-risk paths, or use the helpers in tests first. +- `shouldSendToAgent()` must exclude: + - assistant errors + - `localOnly` messages + - empty bubbles + - reasoning/tool rows + +Tests: + +- Add unit tests for helper behavior. +- Include a local assistant error and prove it is not sendable. + +Acceptance criteria: + +- No visible UI changes yet. +- Request-history filtering can be changed in a later phase by swapping to the + helper. + +Stop/rollback guidance: + +- If helper adoption becomes too broad, only adopt `shouldSendToAgent()` in + `useChatActions.ts` and leave display helpers for later. + +### Phase 3: Exclude Local Errors From Future LLM History + +Goal: + +- Fix the context pollution issue independently from UI ordering. + +Primary file: + +- `src/renderer/src/screens/Chat/hooks/useChatActions.ts` + +Implementation work: + +- Replace the current history construction: + +```ts +messagesRef.current.filter(hasContent).map(...) +``` + +with: + +```ts +messagesRef.current.filter(shouldSendToAgent).map(...) +``` + +- Keep the outgoing shape unchanged: + +```ts +{ + role: m.role, + content: m.content, +} +``` + +Tests: + +- Unit-test `shouldSendToAgent()`. +- If practical, add a hook-level test that verifies a local assistant error is + not included in `window.hermesAPI.sendMessage()` history. + +Acceptance criteria: + +- Normal user/assistant content is still sent. +- Reasoning/tool rows are still excluded. +- Local assistant errors are excluded. + +Stop/rollback guidance: + +- If hook-level testing is expensive, keep this phase covered by helper tests and + one focused manual check. + +### Phase 4: Track Active Turns + +Goal: + +- Give local errors an anchor so they can be inserted near the user prompt that + caused them. + +Primary files: + +- `src/renderer/src/screens/Chat/Chat.tsx` +- `src/renderer/src/screens/Chat/hooks/useChatActions.ts` +- `src/renderer/src/screens/Chat/hooks/useChatIPC.ts` + +Implementation work: + +- Add `activeTurnRef` in `Chat.tsx`: + +```ts +const activeTurnRef = useRef(null); +``` + +- Define `ActiveTurn` near chat types or in a local hook module: + +```ts +interface ActiveTurn { + turnId: string; + userId: string; + startIndex: number; + status: "running" | "failed" | "completed"; +} +``` + +- Pass `activeTurnRef` into `useChatActions()` and `useChatIPC()`. +- Change `pushUser()` to create and return stable `{ turnId, userId }`. +- Set `activeTurnRef.current` immediately before sending to the agent. +- Add `turnId` to the optimistic user bubble. + +Important constraints: + +- Do not change streaming chunk behavior in this phase. +- Do not change error rendering in this phase. + +Tests: + +- If helpers are extracted, test `createTurnIds()` or equivalent. +- Otherwise rely on Phase 5 behavior tests. + +Acceptance criteria: + +- Sending messages still works. +- Queued messages still drain. +- `/approve`, `/deny`, and `/btw` behavior is unchanged except for optional + `turnId` metadata. + +Stop/rollback guidance: + +- If passing `activeTurnRef` through hooks creates too much churn, put turn state + in a small `useActiveChatTurn()` hook and pass only the needed callbacks. + +### Phase 5: Render Error Metadata + +Goal: + +- Make the UI capable of showing assistant error metadata before switching + `onChatError` to produce it. + +Primary files: + +- `src/renderer/src/screens/Chat/MessageList.tsx` +- `src/renderer/src/screens/Chat/MessageRow.tsx` +- possibly chat CSS files + +Implementation work: + +- Update `MessageList` filtering so empty-content error bubbles remain visible. +- Update `MessageRow` so `msg.error` renders as an error state. +- Ensure approval detection does not run on error rows. +- Ensure media parsing does not treat error text as normal assistant markdown + unless intentionally desired. + +Tests: + +- Add render test if existing setup makes it easy. +- Otherwise unit-test visibility helper if `MessageList` filtering is extracted. + +Acceptance criteria: + +- A message with `{ role: "agent", content: "", error: "OpenRouter 403" }` + renders visibly. +- Empty non-error assistant placeholders remain hidden. + +Stop/rollback guidance: + +- If styling becomes contentious, render error text inside the existing agent + bubble first, with a class hook for later visual polish. + +### Phase 6: Replace Loose Error Append With Anchored Error Metadata + +Goal: + +- Fix the local error model. + +Primary file: + +- `src/renderer/src/screens/Chat/hooks/useChatIPC.ts` + +Supporting helper: + +- `markActiveTurnFailed(messages, error, activeTurn)` + +Implementation work: + +- Replace `onChatError` append-only behavior with `markActiveTurnFailed()`. +- The helper should: + - find the active user row by `activeTurn.userId` or `turnId` + - find an existing assistant bubble in the active turn if present + - preserve partial content if present + - set `error` + - set `pending: false` + - set `localOnly: true` when there is no DB equivalent + - insert the error immediately after the active user if no assistant row exists + - append as fallback only when no anchor can be found +- Set `activeTurnRef.current.status = "failed"`. +- Preserve existing `setToolProgress(null)` and `setIsLoading(false)`. + +Tests: + +- Pure helper tests for: + - no assistant yet -> insert after active user + - partial assistant exists -> mark partial assistant as errored + - active user missing -> append fallback + - repeated user text -> use ID/turnId rather than text + +Acceptance criteria: + +- Provider error appears directly after the prompt that caused it. +- Error is not represented as normal `content: "Error: ..."` assistant text. + +Stop/rollback guidance: + +- If preserving partial content complicates rendering, first support empty-content + error rows. Add partial-content preservation in a follow-up. + +### Phase 7: Add Safe DB Refresh Wrapper + +Goal: + +- Keep DB artifact fill-in for successful turns while protecting local-only + errors from global reordering. + +Primary file: + +- `src/renderer/src/screens/Chat/sessionHistory.ts` + +Implementation work: + +- Add `reconcileAfterDbRefresh(current, db, options)`. +- Keep `reconcileStreamedWithDb()` intact initially. +- The wrapper should: + - return current unchanged if `activeTurn.status === "failed"` + - remove local-only/error bubbles from the DB-syncable input + - run `reconcileStreamedWithDb(syncableCurrent, db)` + - call `preserveLocalAssistantErrors(reconciled, current)` +- Update `reconciliationKey()` so local error bubbles return `null`. + +Tests: + +- Existing reconciliation tests must still pass. +- New failed-turn tests must pass. +- DB-only reasoning/tool insertion tests must still pass. + +Acceptance criteria: + +- Successful turns still get DB-only reasoning/tool rows. +- Failed local errors do not move to the tail after later successful DB refresh. + +Stop/rollback guidance: + +- If the wrapper reveals too many edge cases, keep raw + `reconcileStreamedWithDb()` as an escape hatch and gate the wrapper only around + transcripts that contain local errors. + +### Phase 8: Wire Safe Reconciliation Into `onChatDone` + +Goal: + +- Change the runtime completion path after the pure reconciliation behavior is + tested. + +Primary file: + +- `src/renderer/src/screens/Chat/hooks/useChatIPC.ts` + +Implementation work: + +- In `onChatDone`: + - set session ID as today + - clear loading/tool progress as today + - if active turn is failed, skip DB fetch/reconciliation + - otherwise fetch DB messages + - call `reconcileAfterDbRefresh(prev, dbMessages, { activeTurn })` + - mark active turn completed/clear it + +Tests: + +- Hook-level tests if feasible. +- Otherwise rely on pure helper tests and manual QA. + +Acceptance criteria: + +- Successful turns still refresh artifacts. +- Failed turns do not trigger a DB merge that can reorder local errors. + +Stop/rollback guidance: + +- If skipping DB fetch on failed turn hides something important, change the guard + to fetch DB but run only `preserveLocalAssistantErrors()` without full + reconciliation. + +### Phase 9: Restored Session Verification + +Goal: + +- Confirm cold/restored sessions are not regressed. + +Primary files: + +- `src/renderer/src/screens/Layout/Layout.tsx` +- `src/renderer/src/screens/Chat/sessionHistory.ts` +- `src/main/sessions.ts` +- `src/main/ssh-remote.ts` + +Implementation work: + +- Prefer no code changes in this phase. +- Verify `handleResumeSession()` still uses pure DB: + +```ts +setMessages(dbItemsToChatMessages(items)); +``` + +Tests: + +- `session-history-mapping` +- `sessions-history-items` +- any SSH session history tests if present + +Acceptance criteria: + +- Persisted reasoning rows restore. +- Persisted tool calls restore. +- Persisted tool results restore. +- Persisted prompt image attachments restore. +- Local-only provider errors are not expected to survive restart unless the + optional overlay phase is later implemented. + +Stop/rollback guidance: + +- If users require restart-persistent error rows, do not overload + `state.db` reconciliation. Add the optional desktop overlay phase separately. + +### Phase 10: Manual QA Gate + +Goal: + +- Exercise real IPC/streaming behavior that unit tests may not cover. + +Manual scenarios: + +- Bad provider key, then good provider in same session. +- Missing key error, then same prompt after switching provider. +- Successful reasoning-heavy model response. +- Successful tool-heavy response. +- Partial stream followed by failure. +- Resume existing session with reasoning/tools/attachments. +- Queue messages while one turn is loading. +- Abort a turn. +- `/approve` and `/deny` if approval flow is active. + +Acceptance criteria: + +- No error rows jump to the bottom after a later success. +- No missing user/assistant lines. +- No duplicate split assistant artifacts. +- Reasoning/tool rows still appear. +- Local error text is not included in subsequent model context. +- Restored sessions still show persisted artifacts. + +Stop/rollback guidance: + +- If normal streaming regresses, first revert only Phase 8 wiring and keep the + type/helper/test work. That should restore current runtime behavior while + preserving most preparatory work. + +## Optional Later Phase: Persistent Local Error Overlay + +This is not required for the first stabilization fix. + +Goal: + +- Preserve local-only provider errors across app restart, even when Hermes Agent + never wrote a failed turn to `state.db`. + +Possible storage: + +```text +profileHome(activeProfile)/desktop/session-overlays.json +``` + +Possible event shape: + +```ts +interface LocalErrorOverlayEvent { + id: string; + sessionId: string; + turnId: string; + afterUserContent: string; + afterUserAttachmentIds?: string[]; + error: string; + createdAt: number; +} +``` + +Implementation notes: + +- Write overlay event when a local provider error is created. +- On restored session load, load DB transcript first. +- Overlay local errors by matching the nearest user row. +- Prune overlay events when sessions are deleted. +- Keep this separate from DB reconciliation so synthetic desktop UI state does + not pretend to be canonical Hermes Agent history. + +## Risks and Mitigations + +### Risk: Error Rows Disappear Because Empty Bubbles Are Filtered + +Mitigation: + +- Update `MessageList` visibility filter before changing `onChatError`. +- Add test for empty-content error rendering. + +### Risk: Local Error Is Sent Back To Model + +Mitigation: + +- Centralize request-history filtering in `shouldSendToAgent()`. +- Unit-test it. + +### Risk: Successful Reasoning/Tool Artifacts Stop Appearing + +Mitigation: + +- Keep `reconcileStreamedWithDb()` for successful turns. +- Add regression test with DB-only reasoning/tool rows. + +### Risk: Duplicate User Rows With Same Text + +Mitigation: + +- Prefer `id` and `turnId` over text matching when possible. +- Use text matching only as fallback. +- Add repeated-prompt tests. + +### Risk: Partial Assistant Output Followed By Error Gets Lost + +Mitigation: + +- Preserve partial `content` when marking a pending assistant as errored. +- Render content plus error status. + +### Risk: Too Many Files Change At Once + +Mitigation: + +- Implement in phases. +- Keep upstream `parts[]` model out of scope. +- Keep restored-session DB mapping unchanged. + +## Success Criteria + +The implementation is successful when: + +- A provider/key failure creates an anchored assistant error, not a loose text + bubble. +- A later successful turn in the same session does not move, drop, or duplicate + the failed turn. +- Local error text is not sent as assistant history to the next model/provider. +- Successful turns still receive DB-only reasoning, tool calls, tool results, + and attachment metadata. +- Restored sessions still load all persisted DB artifacts. +- Existing split-assistant/tool-call deduplication behavior remains intact. +- The fix is covered by unit tests that reproduce the bad-provider-then-good- + provider case. diff --git a/docs/reconciliation-regression-playbook.md b/docs/reconciliation-regression-playbook.md new file mode 100644 index 0000000..51ae45c --- /dev/null +++ b/docs/reconciliation-regression-playbook.md @@ -0,0 +1,270 @@ +# Chat Reconciliation Regression Playbook + +This playbook is the repeatable gate for the sandboxed Hermes One reconciliation work. +Run it after Hermes One changes, Hermes Agent engine updates, compatibility +addon changes, or remote/SSH lab changes. + +## Scope + +The goal is to verify that Hermes One uses the dashboard event stream as the +active-turn source of truth without losing behavior that existed in the legacy +desktop app: + +- ordered assistant output, reasoning, tool calls, tool results, errors, and + artifacts; +- restored sessions that match live sessions; +- successful continuation after restoring a session; +- recovery from failed provider turns; +- local, Remote HTTP, and SSH dashboard parity; +- legacy fallback still available where configured. + +## Automated Gate + +Run from the separate development worktree: + +```powershell +cd C:\Users\pmos6\Documents\Claude\Projects\Hermes-Desktop-reconcile + +npm run typecheck +npm test -- --run tests/remote-sessions.test.ts tests/remote-metadata.test.ts tests/remote-models.test.ts tests/dashboard-chat-transport.test.ts tests/dashboard-event-adapter.test.ts tests/live-tool-events.test.ts tests/live-reasoning-events.test.ts tests/tool-activity-group-title.test.ts tests/reconcile-streamed-with-db.test.ts tests/session-history-mapping.test.ts tests/sessions-history-items.test.ts tests/sessions-decode-content.test.ts src/renderer/src/screens/Chat/mediaUtils.test.ts src/renderer/src/screens/Chat/hooks/useChatIPC.test.tsx tests/chat-messages.test.ts tests/session-continuation-store.test.ts tests/dashboard-remote.test.ts tests/dashboard-launch.test.ts tests/dashboard-gateway-client.test.ts tests/hermes-agent-compat.test.ts tests/run-stream.test.ts src/renderer/src/screens/Sessions/Sessions.test.tsx +``` + +Expected result: + +- TypeScript node and web checks pass. +- All listed test files pass. + +When time permits, also run the entire suite: + +```powershell +npm test -- --run +``` + +## Lab Setup + +Start the disposable Remote HTTP target: + +```powershell +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 up +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 status +``` + +Start the SSH tunnel lab: + +```powershell +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\ssh-lab.ps1 up +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\ssh-lab.ps1 status +``` + +Start the sandboxed Hermes One instance: + +```powershell +npm run dev:sandbox +``` + +Pass criteria: + +- Remote status shows dashboard status, dashboard session auth, and legacy + OpenAI models auth as OK. +- SSH status reaches the remote dashboard through the tunnel. +- Hermes One title bar says `Hermes One`. +- Settings shows the active connection mode and active chat transport. + +## Connection Matrix + +Run the manual cases below in these modes: + +- Local, dashboard auto. +- Local, dashboard forced. +- Local, legacy fallback. +- Remote HTTP, dashboard auto. +- Remote HTTP, dashboard forced. +- Remote HTTP, legacy fallback. +- SSH, dashboard auto. +- SSH, dashboard forced. +- SSH, legacy fallback. + +For auto modes, Settings should show the resolved active path. Switching between +Local, Remote HTTP, and SSH should refresh: + +- model selector rows; +- Models page rows; +- Sessions page rows; +- Settings Hermes Agent metadata. + +Remote HTTP and SSH should show models configured on the remote Hermes Agent +side, not the local desktop's model library. + +## Manual Cases + +### 1. Clean Text Turn + +Prompt: + +```text +Reply with exactly TEXT_OK and no tools. +``` + +Pass criteria: + +- Streaming starts promptly. +- Final assistant message is present once. +- Restoring the session shows the user prompt and assistant answer once. + +### 2. Bad Provider Then Recovery + +Switch to a known-bad model/provider. + +Prompt: + +```text +Live regression bad provider turn. Reply with BAD_KEY_SHOULD_FAIL. +``` + +Then switch to a known-good model/provider in the same visible session. + +Prompt: + +```text +Live regression recovery after bad provider. Reply with exactly RECOVERY_AFTER_BAD_OK and do not mention BAD_KEY_SHOULD_FAIL. Do not use tools. +``` + +Pass criteria: + +- Failed turn appears as an error in sequence. +- Good-provider recovery does not repeat the bad-provider error. +- Restored session keeps both user prompts, the error, and the recovery answer + in order. +- Repeating failed/non-failed/failed/non-failed turns keeps every semi-session + boundary in order. + +### 3. Reasoning And Interleaved Output + +Use a reasoning-heavy model such as DeepSeek V4 Pro. + +Prompt: + +```text +Think briefly, then answer in two short sentences. Mention the words FIRST and SECOND in separate sentences. +``` + +Pass criteria: + +- Reasoning/thought blocks appear when the backend emits them. +- Intermediate assistant output stays in sequence with reasoning and tools. +- Restored session preserves reasoning blocks and assistant text order. + +### 4. Tool-Heavy Image Generation + +Use the AI Playground / ComfyUI skill. + +Prompt: + +```text +Generate an image of a toy duck in a bathtub using AI Playground / ComfyUI. Save it to the media folder if the workflow supports that, and show me the resulting file path. +``` + +Pass criteria: + +- Tool calls and tool results stream in order when emitted. +- Sequential tool calls are grouped as `N tools called`. +- Inside each group, each tool call is paired with its matching result. +- Final answer does not duplicate the same image because of markdown/path + parsing. +- Existing local Windows paths render as media when they exist. +- Remote/SSH paths under `/opt/data/images` render through the dashboard media + endpoint. +- Restored session shows the same grouped calls/results and the same media. + +### 5. Pasted Image Prompt + +Paste an image into the prompt box. + +Prompt: + +```text +What is this? +``` + +Pass criteria: + +- The user bubble appears once. +- The pasted image thumbnail appears in the user bubble. +- Hermes Agent fallback text such as `[The user attached an image but analysis failed.]` + is not shown as user-visible prompt content. +- The same session restored from Sessions still shows the image thumbnail, not + raw fallback text. +- Continuing the restored session does not duplicate the prior pasted-image + prompt. + +### 6. Remote Vision Tool + +In Remote HTTP and SSH dashboard modes, ask about a known image using a text-only +chat model plus configured auxiliary vision. + +Prompt: + +```text +Use vision_analyze to describe the attached image in one short sentence. +``` + +Pass criteria: + +- `vision_analyze` returns semantic visual content, not just pixel statistics. +- The remote lab resolves auxiliary vision to OpenRouter + `google/gemini-3-flash-preview` when an OpenRouter key is available. + +Optional container smoke test: + +```powershell +docker exec hermes-two-remote-lab-agent sh -lc 'cd /opt/hermes && HERMES_HOME=/opt/data /opt/hermes/.venv/bin/python3 - <<\"PY\" +import asyncio +from tools.vision_tools import vision_analyze_tool +async def main(): + out = await vision_analyze_tool("/opt/data/images/duck_bathtub.png", "Describe this image in one short sentence.") + print(out[:1200]) +asyncio.run(main()) +PY' +``` + +### 7. Session Search, Restore, Continue + +For each connection mode: + +1. Open Sessions. +2. Restore the newest session from that mode. +3. Verify the visible transcript matches the original live transcript. +4. Send: + +```text +Continue this session with exactly CONTINUE_OK and no tools. +``` + +Pass criteria: + +- Sessions list belongs to the active connection mode. +- Session restore does not mix local, Remote HTTP, and SSH sessions. +- Continuing a restored dashboard session does not produce `session not found`. +- Continuing does not write the remote/SSH session into local-only history. + +## Known Upstream Limitations + +- Gemini failures in the current lab have been traced to Hermes Agent upstream + behavior, not Hermes One dashboard reconciliation. +- Plain Remote HTTP cannot be patched by Hermes One unless the target exposes a + future deploy endpoint or is also reachable over SSH. +- The remote lab intentionally bridges to this Windows host's AI Playground + ComfyUI for testing. That is not normal remote deployment behavior. + +## Exit Criteria + +Before asking for review or preparing a PR: + +- Automated gate passes. +- Remote and SSH lab health checks pass. +- At least one dashboard-mode live pass succeeds for Local, Remote HTTP, and + SSH. +- Legacy fallback is checked at least once after any change that touches legacy + IPC or `/v1` paths. +- Any known failure is classified as Hermes One, Hermes Agent upstream, lab + setup, or provider/service behavior. diff --git a/docs/remote-access-lab.md b/docs/remote-access-lab.md new file mode 100644 index 0000000..bcbb71f --- /dev/null +++ b/docs/remote-access-lab.md @@ -0,0 +1,90 @@ +# Remote Access Lab + +This lab creates a disposable remote Hermes target for the sandboxed Hermes One instance without +touching the normal Hermes One worktree, config, or database. + +## Shape + +- Lab state lives in `.sandbox/remote-lab/hermes-home`. +- Containers are named `hermes-two-remote-lab-*`. +- The desktop connects to one URL: `http://127.0.0.1:19080`. +- A small nginx proxy routes: + - `/api/*` and `/api/ws` to the Hermes dashboard service in the agent container. + - `/v1/*` to the OpenAI-compatible API server in the same agent container. +- One disposable token is used for both: + - `X-Hermes-Session-Token` dashboard auth. + - `Authorization: Bearer ...` legacy API auth. +- The Hermes Agent image is built from the bundled checkout at + `.sandbox/hermes-home/hermes-agent` into `hermes-two-remote-lab-agent:local`, + because the public `nousresearch/hermes-agent:latest` image can lag the + bundled dashboard auth contract. +- The lab copies working model configuration, then strips messaging/webhook + platform credentials and opts out of bundled skill sync to avoid side effects. +- For regression testing only, the lab exports `COMFYUI_HOST` as + `http://host.docker.internal:49000` so Remote HTTP and SSH-dashboard tests can + use this Windows machine's AI Playground ComfyUI. Normal remote deployments + should not rely on access to connecting-host resources. +- Remote-generated images should be copied into `/opt/data/images` and surfaced + as `MEDIA:/opt/data/images/.png` when possible. That path is under the + Hermes home media roots exposed by the upstream dashboard `/api/media` + endpoint. +- If the copied config has an `OPENROUTER_API_KEY`, the lab pins + `auxiliary.vision` to OpenRouter with `google/gemini-3-flash-preview`. This + keeps `vision_analyze` on a vision-capable auxiliary model even when the + active chat model is a text-only custom provider such as DeepSeek. + +## Commands + +Run from the separate development worktree: + +```powershell +cd C:\Users\pmos6\Documents\Claude\Projects\Hermes-Desktop-reconcile + +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 init +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 up +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 status +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 configure-desktop +``` + +Stop the lab: + +```powershell +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 down +``` + +Remove all lab state: + +```powershell +powershell -NoProfile -ExecutionPolicy Bypass -File scripts\remote-lab.ps1 clean +``` + +## Expected Probes + +`status` should show three OK checks: + +- `dashboard status` +- `dashboard sessions auth` +- `legacy OpenAI models auth` + +If Docker Desktop returns pipe/API 500 errors or hangs on `docker ps`, restart +Docker Desktop or run: + +```powershell +wsl --shutdown +``` + +Then reopen Docker Desktop and retry `scripts\remote-lab.ps1 up`. + +The first `up` may take several minutes because Docker builds the local Hermes +Agent image. Later starts reuse the image cache. + +## Hermes One Sandbox Settings + +After `configure-desktop`, the sandboxed Hermes One instance is set to: + +- Connection mode: Remote +- Remote URL: `http://127.0.0.1:19080` +- Chat transport: Auto + +That is the intended regression-test mode: dashboard first, legacy fallback +available through the same remote URL. diff --git a/docs/ssh-dashboard-transport.md b/docs/ssh-dashboard-transport.md new file mode 100644 index 0000000..2c2acd1 --- /dev/null +++ b/docs/ssh-dashboard-transport.md @@ -0,0 +1,97 @@ +# SSH dashboard transport — design for full support (issue #667) + +Status: **design / not yet implemented.** A reliable legacy-HTTP fallback shipped first (see +"Shipped now" below). This document captures the design for making the _dashboard_ chat transport +(profile switching, session history, slash commands, background prompts) work over an SSH tunnel. + +## Background: why SSH dashboard chat is broken + +The desktop's dashboard chat transport speaks WebSocket JSON-RPC at **`/api/ws`** +(`src/renderer/src/screens/Chat/dashboardGatewayClient.ts`, URL built in `src/main/dashboard.ts`). + +In `hermes-agent`, `/api/ws` is served **only** by `hermes dashboard` +(`hermes_cli/web_server.py` → `start_server`, gated by `_DASHBOARD_EMBEDDED_CHAT_ENABLED = True`). It is +**never** served by `hermes gateway` (`gateway/...`, the api_server, which serves `/v1/chat/completions`, +`/health`, etc.). + +But SSH mode today: + +1. Starts `hermes gateway start` on the remote — `buildGatewayStartCommand` in `src/main/ssh-remote.ts`. +2. Tunnels the **gateway** port (`config.remotePort`, default 8642) — `ensureSshTunnel` in + `src/main/ssh-tunnel.ts`. +3. Connects `ws://127.0.0.1:{tunnelPort}/api/ws` — which 404s on the gateway. + +A second, independent blocker: `/api/ws` authenticates with `HERMES_DASHBOARD_SESSION_TOKEN` +(`web_server.py` `_SESSION_TOKEN`; `?token=<…>` on loopback), but the SSH path passes the remote +`API_SERVER_KEY` (`sshReadRemoteApiKey` in `src/main/ssh-remote.ts`). Even a correctly-tunneled +dashboard would reject the WS upgrade. + +## Shipped now: reliable legacy fallback + +`src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.ts` now latches a sticky +`dashboardUnavailableRef` on the first failed `ensureClient` for a remote/SSH connection, so subsequent +messages fall back to the working legacy HTTP transport (`/v1/chat/completions` through the tunnel) +_immediately_ instead of re-running the multi-second status+probe each time. It also fires +`onDashboardUnavailable` once, which `Chat.tsx` surfaces as a one-time toast. The flag resets on any +connection change. This makes SSH chat **work** (degraded: no profile switching / session history / +dashboard slash commands). + +## Full design: run a remote `hermes dashboard` and tunnel it + +Goal: restore the dashboard transport over SSH by talking to a real remote `hermes dashboard`. + +### 1. Start the remote dashboard (not the gateway) + +Add `sshStartDashboard(config, sessionToken, port)` in `src/main/ssh-remote.ts`, mirroring +`buildGatewayStartCommand`. It should run, detached: + +``` +HERMES_DASHBOARD_SESSION_TOKEN= \ + nohup hermes dashboard --no-open --host 127.0.0.1 --port \ + > $HOME/.hermes/dashboard.log 2>&1 & +``` + +This mirrors the **local** spawn in `src/main/hermes.ts:559` (`dashboard --no-open --host 127.0.0.1 +--port `, gated by `HERMES_DASHBOARD_SESSION_TOKEN`) — reuse that flag/arg shape. Add a matching +status/stop command pair (`buildDashboardStatusCommand` / `buildDashboardStopCommand`). + +### 2. Tunnel the dashboard port (in addition to / instead of the gateway port) + +The legacy fallback still needs the gateway tunnel for `/v1/chat/completions`, while the dashboard +transport needs the dashboard's `/api/ws` + `/api/sessions` + `/api/status`. Options: + +- **Second forward**: generalize `ensureSshTunnel` / `getSshTunnelUrl` in `src/main/ssh-tunnel.ts` to + manage a named set of forwards (gateway + dashboard), each `localPort → 127.0.0.1:remotePort`. +- Remote dashboard port: pick a free remote port over SSH (run a tiny Python one-liner like the + existing helpers in `ssh-remote.ts`) or document a fixed default; surface it in the SSH config UI. + +### 3. Authenticate `/api/ws` with the session token + +The desktop generates a `sessionToken` (e.g. `randomUUID()`), exports it to the remote dashboard's env +(step 1), and builds the WS URL as `ws://127.0.0.1:{dashTunnelPort}/api/ws?token=` — +replacing `API_SERVER_KEY`. Rewrite `sshDashboardConnectionFromConfig` in `src/main/dashboard.ts` to +this flow (it currently calls `sshStartGateway` + `sshReadRemoteApiKey`). Note `web_server.py`'s +`_ws_auth_ok` accepts the `?token=` query only on loopback / `--insecure`; over the SSH tunnel the +endpoint is loopback on the remote, so this should hold — **verify on a real host**. + +### 4. Compatibility + +`ensureSshDashboardCompatibility` (`src/main/hermes-agent-compat.ts`) already patches `web_server.py`'s +embedded-chat default and `/api/model/set`; keep it. Confirm the remote `hermes` build accepts +`dashboard --no-open --host --port` and the `HERMES_DASHBOARD_SESSION_TOKEN` env (v0.16.0 has +`_DASHBOARD_EMBEDDED_CHAT_ENABLED = True`, so embedded chat is available). + +### 5. Lifecycle + +- Stop the remote `hermes dashboard` on disconnect / app quit (best-effort, like `sshStopGateway`). +- Health-check the dashboard (`/api/status` through the tunnel) and restart on failure. +- Keep the gateway running too if other features depend on it. + +## Testing + +- **Unit**: command builders (`sshStartDashboard` / status / stop) and the multi-forward tunnel wiring, + following the existing `ssh-remote` / `ssh-tunnel` test patterns. +- **Manual E2E (required before merge)**: an SSH host running `hermes-agent` (see + `docs/SSH-TUNNEL-VPS.md`). Verify: tunnel up → dashboard starts remotely → `/api/ws` connects with the + session token → a sent message streams back → profile switching and session history work. This step + cannot be exercised without a real remote host. diff --git a/docs/superpowers/plans/2026-04-30-windows-winget-fedora-rpm-release.md b/docs/superpowers/plans/2026-04-30-windows-winget-fedora-rpm-release.md new file mode 100644 index 0000000..b2a2469 --- /dev/null +++ b/docs/superpowers/plans/2026-04-30-windows-winget-fedora-rpm-release.md @@ -0,0 +1,1238 @@ +# Windows (winget) and Fedora (RPM) Release Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Extend the existing GitHub Actions release pipeline to produce a Windows NSIS installer + winget manifests, and a Fedora `.rpm`, alongside the existing macOS/Linux artifacts. End state: open a PR from `Aiacos/hermes-desktop:feat/winget-rpm-release` to `fathah/hermes-desktop:main`. + +**Architecture:** Two new jobs added to `.github/workflows/release.yml` (Windows build + winget manifest generator), one existing job extended (Linux gets rpm), one job gated on a new `dry_run` input. Winget manifests are filled from YAML templates by a tested Node ESM script and uploaded as a CI artifact for manual submission to `microsoft/winget-pkgs`. + +**Tech Stack:** GitHub Actions, electron-builder 26, Node 22 ESM, vitest, fpm/rpmbuild on Ubuntu runner. + +**Spec:** `docs/superpowers/specs/2026-04-30-windows-winget-fedora-rpm-release-design.md` + +**Branch:** `feat/winget-rpm-release` (already created locally; see Task 1 to confirm). + +--- + +## Pre-flight: confirm starting state + +### Task 0: Confirm we're on the right branch with a clean tree + +- [ ] **Step 1: Check branch and status** + +Run: `git status && git branch --show-current && git log --oneline -3` + +Expected output: + +- Current branch: `feat/winget-rpm-release` +- Working tree clean +- Top commit: `docs: add design spec for Windows (winget) and Fedora (RPM) release` + +If on a different branch or tree is dirty, stop and resolve before proceeding. + +--- + +## Phase 1: electron-builder configuration + +### Task 1: Add RPM target and Linux packaging metadata to electron-builder.yml + +**Files:** + +- Modify: `electron-builder.yml` + +- [ ] **Step 1: Replace the `linux:` block and add `rpm:` block** + +Open `electron-builder.yml`. Replace the existing block: + +```yaml +linux: + target: + - AppImage + - snap + - deb + maintainer: electronjs.org + category: Utility +appImage: + artifactName: ${name}-${version}.${ext} +``` + +with: + +```yaml +linux: + target: + - AppImage + - snap + - deb + - rpm + maintainer: electronjs.org + vendor: Nous Research + category: Utility + synopsis: Self-improving AI assistant desktop app + description: | + Hermes Desktop is a native desktop app for installing, configuring, and chatting + with Hermes Agent — a self-improving AI assistant with tool use, multi-platform + messaging, and a closed learning loop. +appImage: + artifactName: ${name}-${version}.${ext} +rpm: + artifactName: ${name}-${version}.${ext} +``` + +- [ ] **Step 2: Verify YAML is still valid** + +Run: `node -e "console.log(require('js-yaml').load(require('fs').readFileSync('electron-builder.yml','utf-8')).linux.target)" 2>/dev/null || node -e "console.log(JSON.parse(JSON.stringify(require('yaml').parse(require('fs').readFileSync('electron-builder.yml','utf-8')))).linux.target)" 2>/dev/null || python3 -c "import yaml; print(yaml.safe_load(open('electron-builder.yml')).get('linux', {}).get('target'))"` + +Expected output: `['AppImage', 'snap', 'deb', 'rpm']` (Python form) or `[ 'AppImage', 'snap', 'deb', 'rpm' ]` (Node form). + +If neither `js-yaml`, `yaml`, nor Python yaml is available, just open the file and visually verify the four entries. + +### Task 2: Make NSIS settings explicit in electron-builder.yml + +**Files:** + +- Modify: `electron-builder.yml` + +- [ ] **Step 1: Replace the `nsis:` block** + +Replace: + +```yaml +nsis: + artifactName: ${name}-${version}-setup.${ext} + shortcutName: ${productName} + uninstallDisplayName: ${productName} + createDesktopShortcut: always +``` + +with: + +```yaml +nsis: + artifactName: ${name}-${version}-setup.${ext} + shortcutName: ${productName} + uninstallDisplayName: ${productName} + createDesktopShortcut: always + oneClick: true + perMachine: false +``` + +The two new fields make the existing electron-builder defaults explicit so the behavior cannot silently shift across electron-builder versions. + +### Task 3: Add `build:rpm` script to package.json + +**Files:** + +- Modify: `package.json` + +- [ ] **Step 1: Insert the script next to the existing `build:linux`** + +In `package.json` `"scripts"` block, after the line: + +```json +"build:linux": "electron-vite build && electron-builder --linux", +``` + +add: + +```json +"build:rpm": "npm run build && electron-builder --linux rpm", +``` + +Final scripts block excerpt should look like: + +```json +"build:mac": "electron-vite build && electron-builder --mac", +"build:linux": "electron-vite build && electron-builder --linux", +"build:rpm": "npm run build && electron-builder --linux rpm", +"test:watch": "vitest" +``` + +- [ ] **Step 2: Verify package.json still parses** + +Run: `node -e "console.log(require('./package.json').scripts['build:rpm'])"` + +Expected output: `npm run build && electron-builder --linux rpm` + +### Task 4: Local sanity-check the RPM build (Fedora host only) + +This step verifies that the new electron-builder `rpm` target produces a real RPM on the local Fedora machine before we trust CI to do it. This is a **manual, non-CI** check. Skip if not on a Fedora host. + +- [ ] **Step 1: Confirm rpmbuild is present** + +Run: `which rpmbuild && rpmbuild --version` + +Expected: a path under `/usr/bin/` and a version string. If missing, install with `sudo dnf install rpm-build`. + +- [ ] **Step 2: Run the RPM build** + +Run: `npm install && npm run build:rpm` + +Expected: completes without errors, ~2-5 minutes. Final lines should mention writing an `.rpm` file under `dist/`. + +- [ ] **Step 3: Confirm the RPM was produced** + +Run: `ls -la dist/*.rpm && rpm -qpi dist/*.rpm | head -20` + +Expected: + +- A file `dist/hermes-desktop-0.2.3.rpm` (or current version) of non-trivial size (~120-200 MB) +- `rpm -qpi` shows `Name: hermes-desktop`, `Version: 0.2.3`, `Vendor: Nous Research`, `License`, `Summary` matching our `synopsis`. + +If the RPM is missing or metadata is wrong, go back to Task 1 and fix. + +- [ ] **Step 4: Clean up dist before committing** + +Run: `rm -rf dist out node_modules/.cache` + +Reason: keeps the working tree clean so the next commit only contains our config changes. + +### Task 5: Commit electron-builder + package.json changes + +- [ ] **Step 1: Stage and commit** + +Run: + +```bash +git add electron-builder.yml package.json +git status +git commit -m "build: add rpm target and explicit nsis settings to electron-builder" +``` + +Expected: 1 commit, 2 files changed. `git status` should show clean working tree afterwards. + +--- + +## Phase 2: Winget manifest infrastructure + +### Task 6: Create the three winget manifest templates + +**Files:** + +- Create: `build/winget/Installer.template.yaml` +- Create: `build/winget/Locale.en-US.template.yaml` +- Create: `build/winget/Version.template.yaml` + +- [ ] **Step 1: Create the directory** + +Run: `mkdir -p build/winget` + +- [ ] **Step 2: Create `build/winget/Installer.template.yaml`** + +Contents: + +```yaml +# Generated from this template by scripts/generate-winget-manifests.mjs. +# Placeholders ({{...}}) are replaced at build time. Do not edit the generated copy in dist/. +PackageIdentifier: NousResearch.HermesDesktop +PackageVersion: { { VERSION } } +InstallerLocale: en-US +InstallerType: nullsoft +Scope: user +MinimumOSVersion: 10.0.17763.0 +ReleaseDate: { { RELEASE_DATE } } +Installers: + - Architecture: x64 + InstallerUrl: { { INSTALLER_URL } } + InstallerSha256: { { INSTALLER_SHA256 } } + UpgradeBehavior: install +ManifestType: installer +ManifestVersion: 1.6.0 +``` + +- [ ] **Step 3: Create `build/winget/Locale.en-US.template.yaml`** + +Contents: + +```yaml +# Generated from this template by scripts/generate-winget-manifests.mjs. +PackageIdentifier: NousResearch.HermesDesktop +PackageVersion: { { VERSION } } +PackageLocale: en-US +Publisher: Nous Research +PublisherUrl: https://github.com/fathah/hermes-desktop +PublisherSupportUrl: https://github.com/fathah/hermes-desktop/issues +PackageName: Hermes Agent +PackageUrl: https://github.com/fathah/hermes-desktop +License: MIT +LicenseUrl: https://github.com/fathah/hermes-desktop/blob/main/LICENSE +ShortDescription: Self-improving AI assistant desktop app +Description: |- + Hermes Desktop is a native desktop app for installing, configuring, and chatting + with Hermes Agent — a self-improving AI assistant with tool use, multi-platform + messaging, and a closed learning loop. +Tags: + - ai + - agent + - desktop + - electron + - llm +ReleaseNotesUrl: { { RELEASE_NOTES_URL } } +ManifestType: defaultLocale +ManifestVersion: 1.6.0 +``` + +- [ ] **Step 4: Create `build/winget/Version.template.yaml`** + +Contents: + +```yaml +# Generated from this template by scripts/generate-winget-manifests.mjs. +PackageIdentifier: NousResearch.HermesDesktop +PackageVersion: { { VERSION } } +DefaultLocale: en-US +ManifestType: version +ManifestVersion: 1.6.0 +``` + +- [ ] **Step 5: Verify the three files exist** + +Run: `ls -la build/winget/` + +Expected: three `.template.yaml` files listed. + +### Task 7: Write the failing test for the manifest generator + +**Files:** + +- Create: `tests/winget-generator.test.ts` + +- [ ] **Step 1: Create `tests/winget-generator.test.ts`** + +Contents: + +```typescript +import { describe, it, expect, beforeEach, afterEach } from "vitest"; +import { join } from "path"; +import { + existsSync, + readFileSync, + mkdirSync, + writeFileSync, + rmSync, + mkdtempSync, +} from "fs"; +import { tmpdir } from "os"; +// @ts-expect-error - .mjs has no type declarations; we test it as JS. +import { generateWingetManifests } from "../scripts/generate-winget-manifests.mjs"; + +let TEST_DIR: string; + +beforeEach(() => { + TEST_DIR = mkdtempSync(join(tmpdir(), "winget-test-")); +}); + +afterEach(() => { + rmSync(TEST_DIR, { recursive: true, force: true }); +}); + +function setupTemplates(rootDir: string) { + const buildDir = join(rootDir, "build", "winget"); + mkdirSync(buildDir, { recursive: true }); + writeFileSync( + join(buildDir, "Installer.template.yaml"), + "Version: {{VERSION}}\nUrl: {{INSTALLER_URL}}\nSha: {{INSTALLER_SHA256}}\nDate: {{RELEASE_DATE}}\n", + ); + writeFileSync( + join(buildDir, "Locale.en-US.template.yaml"), + "Version: {{VERSION}}\nNotes: {{RELEASE_NOTES_URL}}\n", + ); + writeFileSync( + join(buildDir, "Version.template.yaml"), + "Version: {{VERSION}}\n", + ); +} + +describe("generateWingetManifests", () => { + it("produces three YAML files under the winget-pkgs directory layout", () => { + setupTemplates(TEST_DIR); + const distDir = join(TEST_DIR, "dist"); + mkdirSync(distDir, { recursive: true }); + writeFileSync( + join(distDir, "hermes-desktop-9.9.9-setup.exe"), + "fake-installer-bytes", + ); + + generateWingetManifests({ + rootDir: TEST_DIR, + version: "9.9.9", + name: "hermes-desktop", + publishOwner: "fathah", + }); + + const outDir = join( + distDir, + "winget", + "manifests", + "n", + "NousResearch", + "HermesDesktop", + "9.9.9", + ); + expect( + existsSync(join(outDir, "NousResearch.HermesDesktop.installer.yaml")), + ).toBe(true); + expect( + existsSync(join(outDir, "NousResearch.HermesDesktop.locale.en-US.yaml")), + ).toBe(true); + expect(existsSync(join(outDir, "NousResearch.HermesDesktop.yaml"))).toBe( + true, + ); + }); + + it("replaces all placeholders in the installer manifest", () => { + setupTemplates(TEST_DIR); + const distDir = join(TEST_DIR, "dist"); + mkdirSync(distDir, { recursive: true }); + writeFileSync( + join(distDir, "hermes-desktop-9.9.9-setup.exe"), + "fake-installer-bytes", + ); + + generateWingetManifests({ + rootDir: TEST_DIR, + version: "9.9.9", + name: "hermes-desktop", + publishOwner: "fathah", + }); + + const outFile = join( + distDir, + "winget", + "manifests", + "n", + "NousResearch", + "HermesDesktop", + "9.9.9", + "NousResearch.HermesDesktop.installer.yaml", + ); + const content = readFileSync(outFile, "utf-8"); + expect(content).toContain("Version: 9.9.9"); + expect(content).toContain( + "Url: https://github.com/fathah/hermes-desktop/releases/download/v9.9.9/hermes-desktop-9.9.9-setup.exe", + ); + expect(content).toMatch(/Sha: [A-F0-9]{64}/); + expect(content).toMatch(/Date: \d{4}-\d{2}-\d{2}/); + expect(content).not.toContain("{{"); + }); + + it("replaces ReleaseNotesUrl in the locale manifest", () => { + setupTemplates(TEST_DIR); + const distDir = join(TEST_DIR, "dist"); + mkdirSync(distDir, { recursive: true }); + writeFileSync( + join(distDir, "hermes-desktop-9.9.9-setup.exe"), + "fake-installer-bytes", + ); + + generateWingetManifests({ + rootDir: TEST_DIR, + version: "9.9.9", + name: "hermes-desktop", + publishOwner: "fathah", + }); + + const outFile = join( + distDir, + "winget", + "manifests", + "n", + "NousResearch", + "HermesDesktop", + "9.9.9", + "NousResearch.HermesDesktop.locale.en-US.yaml", + ); + const content = readFileSync(outFile, "utf-8"); + expect(content).toContain( + "Notes: https://github.com/fathah/hermes-desktop/releases/tag/v9.9.9", + ); + expect(content).not.toContain("{{"); + }); + + it("throws a clear error when the installer .exe is missing", () => { + setupTemplates(TEST_DIR); + mkdirSync(join(TEST_DIR, "dist"), { recursive: true }); + + expect(() => + generateWingetManifests({ + rootDir: TEST_DIR, + version: "9.9.9", + name: "hermes-desktop", + publishOwner: "fathah", + }), + ).toThrow(/installer not found/i); + }); +}); +``` + +### Task 8: Verify the test fails + +- [ ] **Step 1: Run vitest** + +Run: `npm run test` + +Expected: `tests/winget-generator.test.ts` fails with an import resolution error like `Failed to resolve import "../scripts/generate-winget-manifests.mjs"` or similar. **The other existing tests must still pass.** Total: 4 new tests failing, all existing tests passing. + +If existing tests fail, stop — that's an unrelated breakage we caused. Investigate before proceeding. + +### Task 9: Implement the manifest generator + +**Files:** + +- Create: `scripts/generate-winget-manifests.mjs` + +- [ ] **Step 1: Create the directory** + +Run: `mkdir -p scripts` + +- [ ] **Step 2: Create `scripts/generate-winget-manifests.mjs`** + +Contents: + +```javascript +// scripts/generate-winget-manifests.mjs +// +// Fills the YAML templates in build/winget/ with the current version, +// installer URL, and SHA256 of the NSIS installer in dist/, and writes +// the result under dist/winget/manifests/n/NousResearch/HermesDesktop//. +// +// Run from CLI: VERSION=0.2.3 PUBLISH_OWNER=fathah node scripts/generate-winget-manifests.mjs +// Or import as ESM and call generateWingetManifests({ rootDir, version, name, publishOwner }). + +import { createHash } from "node:crypto"; +import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs"; +import { join } from "node:path"; +import { fileURLToPath } from "node:url"; + +export function generateWingetManifests({ + rootDir, + version, + name, + publishOwner, +}) { + const exePath = join(rootDir, "dist", `${name}-${version}-setup.exe`); + if (!existsSync(exePath)) { + throw new Error( + `NSIS installer not found at ${exePath}. ` + + `Run electron-builder --win nsis first, or download the windows-artifacts CI artifact into dist/.`, + ); + } + + const sha256 = createHash("sha256") + .update(readFileSync(exePath)) + .digest("hex") + .toUpperCase(); + const releaseDate = new Date().toISOString().slice(0, 10); // YYYY-MM-DD + const installerUrl = `https://github.com/${publishOwner}/hermes-desktop/releases/download/v${version}/${name}-${version}-setup.exe`; + const releaseNotesUrl = `https://github.com/${publishOwner}/hermes-desktop/releases/tag/v${version}`; + + const replacements = { + VERSION: version, + INSTALLER_URL: installerUrl, + INSTALLER_SHA256: sha256, + RELEASE_DATE: releaseDate, + RELEASE_NOTES_URL: releaseNotesUrl, + }; + + const fillTemplate = (str) => + Object.entries(replacements).reduce( + (acc, [key, value]) => acc.replaceAll(`{{${key}}}`, value), + str, + ); + + const templateDir = join(rootDir, "build", "winget"); + const outDir = join( + rootDir, + "dist", + "winget", + "manifests", + "n", + "NousResearch", + "HermesDesktop", + version, + ); + mkdirSync(outDir, { recursive: true }); + + const files = [ + ["Installer.template.yaml", "NousResearch.HermesDesktop.installer.yaml"], + [ + "Locale.en-US.template.yaml", + "NousResearch.HermesDesktop.locale.en-US.yaml", + ], + ["Version.template.yaml", "NousResearch.HermesDesktop.yaml"], + ]; + + for (const [tmplName, outName] of files) { + const tmpl = readFileSync(join(templateDir, tmplName), "utf-8"); + writeFileSync(join(outDir, outName), fillTemplate(tmpl)); + } + + return { outDir, sha256, installerUrl }; +} + +// CLI entrypoint +const isCli = + process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]; +if (isCli) { + const rootDir = process.cwd(); + const pkg = JSON.parse(readFileSync(join(rootDir, "package.json"), "utf-8")); + const result = generateWingetManifests({ + rootDir, + version: process.env.VERSION || pkg.version, + name: pkg.name, + publishOwner: process.env.PUBLISH_OWNER || "fathah", + }); + console.log(`Winget manifests generated in ${result.outDir}`); + console.log(`InstallerSha256: ${result.sha256}`); + console.log(`InstallerUrl: ${result.installerUrl}`); +} +``` + +### Task 10: Verify the test passes + +- [ ] **Step 1: Run vitest** + +Run: `npm run test` + +Expected: all four `winget-generator` tests pass. All previously passing tests still pass. Output should end with `Tests` count incremented by 4. + +If failing: read the assertion error and fix the script. Do not modify the test to make it pass — modify the implementation. + +### Task 11: Commit winget infrastructure + +- [ ] **Step 1: Stage and commit** + +Run: + +```bash +git add build/winget/ scripts/generate-winget-manifests.mjs tests/winget-generator.test.ts +git status +git commit -m "feat: add winget manifest generator with templates and tests" +``` + +Expected: 5 files added, 1 commit. Working tree clean. + +--- + +## Phase 3: GitHub Actions workflow + +The following four tasks edit `.github/workflows/release.yml` in sequence. Each task ends with the workflow still being a syntactically valid YAML, but only after Task 16 is the workflow logically complete. Commit at the end of Phase 3 (Task 17), not after each individual edit. + +### Task 12: Add `dry_run` input and `is_dry_run` output + +**Files:** + +- Modify: `.github/workflows/release.yml` + +- [ ] **Step 1: Replace the `on:` block** + +Replace: + +```yaml +on: + push: + branches: + - release + workflow_dispatch: +``` + +with: + +```yaml +on: + push: + branches: + - release + workflow_dispatch: + inputs: + dry_run: + description: "Run all build jobs but skip publish (no tag, no GitHub Release)" + type: boolean + default: true +``` + +- [ ] **Step 2: Add `is_dry_run` to the `prepare` job outputs and add a step to compute it** + +In the `prepare` job, replace: + +```yaml +outputs: + version: ${{ steps.version.outputs.version }} + tag: ${{ steps.version.outputs.tag }} + tag_exists: ${{ steps.check.outputs.exists }} +``` + +with: + +```yaml +outputs: + version: ${{ steps.version.outputs.version }} + tag: ${{ steps.version.outputs.tag }} + tag_exists: ${{ steps.check.outputs.exists }} + is_dry_run: ${{ steps.mode.outputs.is_dry_run }} +``` + +Then, after the existing "Check if tag already exists" step inside `prepare.steps`, append: + +```yaml +- name: Compute dry-run flag + id: mode + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ inputs.dry_run }}" = "true" ]; then + echo "is_dry_run=true" >> "$GITHUB_OUTPUT" + echo "Dry run: builds will run, publish will be skipped." + else + echo "is_dry_run=false" >> "$GITHUB_OUTPUT" + echo "Real release: publish will run if tag does not exist." + fi +``` + +### Task 13: Extend `release_linux` with rpm + +**Files:** + +- Modify: `.github/workflows/release.yml` + +- [ ] **Step 1: Add `rpm` apt install before packaging, and rpm to the electron-builder targets** + +In the `release_linux` job, locate the steps after `Install dependencies` and `Build app`. Replace: + +```yaml +- name: Package Linux artifacts + run: npx electron-builder --linux AppImage deb --publish never + +- name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: linux-artifacts + path: | + dist/*.AppImage + dist/*.deb + dist/latest-linux.yml +``` + +with: + +```yaml +- name: Install rpmbuild + run: sudo apt-get update && sudo apt-get install -y rpm + +- name: Package Linux artifacts + run: npx electron-builder --linux AppImage deb rpm --publish never + +- name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: linux-artifacts + path: | + dist/*.AppImage + dist/*.deb + dist/*.rpm + dist/latest-linux.yml +``` + +### Task 14: Add `release_windows` job + +**Files:** + +- Modify: `.github/workflows/release.yml` + +- [ ] **Step 1: Insert a new job after `release_linux`, before `publish`** + +Add the following job block: + +```yaml +release_windows: + name: Build Windows + needs: prepare + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: windows-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + + - name: Install dependencies + run: npm ci + + - name: Build app + run: npm run build + + - name: Package Windows artifacts + run: npx electron-builder --win nsis --x64 --publish never + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: windows-artifacts + path: | + dist/*.exe + dist/*.exe.blockmap + dist/latest.yml +``` + +### Task 15: Add `generate_winget` job + +**Files:** + +- Modify: `.github/workflows/release.yml` + +- [ ] **Step 1: Insert the new job after `release_windows`** + +Add the following job block: + +```yaml +generate_winget: + name: Generate winget manifests + needs: [prepare, release_windows] + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Download Windows installer artifact + uses: actions/download-artifact@v4 + with: + name: windows-artifacts + path: dist/ + + - name: Generate winget manifests + env: + VERSION: ${{ needs.prepare.outputs.version }} + PUBLISH_OWNER: fathah + run: node scripts/generate-winget-manifests.mjs + + - name: Upload winget manifests artifact + uses: actions/upload-artifact@v4 + with: + name: winget-manifests-${{ needs.prepare.outputs.version }} + path: dist/winget/ +``` + +### Task 16: Update the `publish` job (gate + explicit file list) + +**Files:** + +- Modify: `.github/workflows/release.yml` + +- [ ] **Step 1: Replace the `publish` job header and the gh-release files glob** + +Replace the existing `publish` job: + +```yaml +publish: + name: Publish Release + needs: [prepare, release_mac, release_linux] + if: needs.prepare.outputs.tag_exists == 'false' + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Create tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag ${{ needs.prepare.outputs.tag }} + git push origin ${{ needs.prepare.outputs.tag }} + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + merge-multiple: true + + - name: Publish GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.prepare.outputs.tag }} + name: Hermes Desktop ${{ needs.prepare.outputs.tag }} + generate_release_notes: true + files: artifacts/* +``` + +with: + +```yaml +publish: + name: Publish Release + needs: [prepare, release_mac, release_linux, release_windows, generate_winget] + if: needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.tag_exists == 'false' + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Create tag + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag ${{ needs.prepare.outputs.tag }} + git push origin ${{ needs.prepare.outputs.tag }} + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + merge-multiple: true + + - name: Publish GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: ${{ needs.prepare.outputs.tag }} + name: Hermes Desktop ${{ needs.prepare.outputs.tag }} + generate_release_notes: true + files: | + artifacts/*.dmg + artifacts/*.zip + artifacts/*.AppImage + artifacts/*.deb + artifacts/*.rpm + artifacts/*.exe + artifacts/*.blockmap + artifacts/latest.yml + artifacts/latest-linux.yml + artifacts/latest-mac.yml +``` + +### Task 17: Validate workflow syntax and commit + +- [ ] **Step 1: Verify YAML parses** + +Run: `python3 -c "import yaml; d = yaml.safe_load(open('.github/workflows/release.yml')); print('jobs:', list(d['jobs'].keys()))"` + +Expected output: `jobs: ['prepare', 'release_mac', 'release_linux', 'release_windows', 'generate_winget', 'publish']` + +If not, the YAML has a structural issue — open it and verify indentation. + +- [ ] **Step 2 (optional): Run actionlint if installed** + +Run: `command -v actionlint && actionlint .github/workflows/release.yml || echo "actionlint not installed, skipping"` + +Expected: either no output (lint clean) or "actionlint not installed, skipping". A real lint error must be fixed before commit. + +- [ ] **Step 3: Commit** + +Run: + +```bash +git add .github/workflows/release.yml +git status +git commit -m "ci: build Windows NSIS, Fedora RPM, and winget manifests in release workflow" +``` + +Expected: 1 commit, 1 file changed. Working tree clean. + +--- + +## Phase 4: Documentation + +### Task 18: Update README install section + +**Files:** + +- Modify: `README.md` + +- [ ] **Step 1: Replace the platform table and add notes** + +Locate the current Install section (lines ~22-37): + +````markdown +## Install + +Download the latest build from the [Releases](https://github.com/fathah/hermes-desktop/releases/) page. + +| Platform | File | +| -------- | --------------------- | +| macOS | `.dmg` | +| Linux | `.AppImage` or `.deb` | + +> **macOS users:** The app is not code-signed or notarized. macOS will block it on first launch. To fix this, run the following after installing: +> +> ```bash +> xattr -cr "/Applications/Hermes Agent.app" +> ``` +> +> Or right-click the app → **Open** → click **Open** in the confirmation dialog. +```` + +Replace the table and add a Linux/Windows notes block. The new section: + +````markdown +## Install + +Download the latest build from the [Releases](https://github.com/fathah/hermes-desktop/releases/) page. + +| Platform | File | +| -------------- | ----------------------- | +| macOS | `.dmg` | +| Linux (any) | `.AppImage` | +| Linux (Debian) | `.deb` | +| Linux (Fedora) | `.rpm` | +| Windows | `.exe` (NSIS installer) | + +### Windows (winget) + +Once the manifest has been accepted into [`microsoft/winget-pkgs`](https://github.com/microsoft/winget-pkgs), you can install with: + +```powershell +winget install NousResearch.HermesDesktop +``` +```` + +Until then, download the `.exe` from the Releases page. + +> **Windows users:** The installer is not code-signed. Windows SmartScreen will warn on first launch — click "More info" → "Run anyway". + +### Fedora (RPM) + +```bash +sudo dnf install ./hermes-desktop-.rpm +``` + +> **Fedora users:** The `.rpm` is not GPG-signed. If your system enforces signature checking, append `--nogpgcheck` to the install command. Auto-update is not supported for `.rpm` builds (limitation of `electron-updater`); reinstall the new `.rpm` to update. + +### macOS + +> **macOS users:** The app is not code-signed or notarized. macOS will block it on first launch. To fix this, run the following after installing: +> +> ```bash +> xattr -cr "/Applications/Hermes Agent.app" +> ``` +> +> Or right-click the app → **Open** → click **Open** in the confirmation dialog. + +```` + +- [ ] **Step 2: Verify the markdown renders sensibly** + +Open `README.md` and skim the new Install section. Confirm: table is well-formed, code fences close, no leftover duplicate headings. + +### Task 19: Commit README + +- [ ] **Step 1: Stage and commit** + +Run: +```bash +git add README.md +git status +git commit -m "docs: document Windows (winget) and Fedora (RPM) install paths" +```` + +Expected: 1 commit, 1 file changed. + +--- + +## Phase 5: Local verification gate + +### Task 20: Run full local verification + +This is the gate before pushing. **All must pass.** If any fails, fix the underlying issue and re-run; do not proceed. + +- [ ] **Step 1: Lint** + +Run: `npm run lint` + +Expected: exits 0 with no errors. + +- [ ] **Step 2: Typecheck** + +Run: `npm run typecheck` + +Expected: exits 0 with no errors. Both `tsconfig.node.json` and `tsconfig.web.json` checks succeed. + +- [ ] **Step 3: Tests** + +Run: `npm run test` + +Expected: all tests pass, including the four new `winget-generator` tests. Total count = previous total + 4. + +- [ ] **Step 4: Confirm working tree clean** + +Run: `git status` + +Expected: `nothing to commit, working tree clean`. + +--- + +## Phase 6: CI verification on the fork + +### Task 21: Push branch to Aiacos fork + +This step requires push access to `Aiacos/hermes-desktop` (the user's fork). If pushing requires interactive auth, the human operator runs the command. + +- [ ] **Step 1: Push** + +Run: `git push -u origin feat/winget-rpm-release` + +Expected: branch created on `origin` (which is `Aiacos/hermes-desktop` per `git remote -v`), tracking set up. + +If push is rejected, resolve auth (e.g., `gh auth login` or SSH key) before retrying. Do not force-push. + +### Task 22: Trigger workflow_dispatch with dry_run=true and observe CI + +- [ ] **Step 1: Trigger via gh CLI** + +Run: `gh workflow run release.yml --ref feat/winget-rpm-release -f dry_run=true` + +Expected: `gh` confirms the workflow was queued. (Alternative: trigger from the GitHub Actions UI on the `Release` workflow → Run workflow → branch `feat/winget-rpm-release` → leave dry_run checked.) + +- [ ] **Step 2: Watch the run** + +Run: `gh run watch` (or `gh run list --workflow=release.yml --branch=feat/winget-rpm-release --limit 1` then `gh run view --log-failed` if it fails) + +Expected progression: + +- `prepare` ✓ (~30s) +- `release_mac` x64 + arm64 ✓ (~10-15min in parallel) +- `release_linux` ✓ (~5-8min) +- `release_windows` ✓ (~8-12min) +- `generate_winget` ✓ (~30s, depends on `release_windows`) +- `publish` is **skipped** (status: `skipped`, not `failed`) + +Total wall-clock: ~15-20min (mac arm64 is usually the longest pole). + +- [ ] **Step 3: If any job fails** + +Read the failure with `gh run view --log-failed`. Most likely failure modes: + +- Windows job: `npm ci` fails on a native dep (better-sqlite3 needing windows-build-tools). Solution: add `npm config set msvs_version 2022` step or rely on electron-builder's own `install-app-deps`. +- Linux rpm job: `rpmbuild` missing a dep. Solution: ensure `rpm` and possibly `rpm-build` are both apt-installed. +- generate_winget: script error. Most likely a path mismatch — confirm artifact downloaded to `dist/`. + +Fix the issue, commit on the branch, push, and re-trigger. Do not proceed to PR until the dispatch succeeds end-to-end with `publish` skipped. + +### Task 23: Inspect the winget manifests artifact + +- [ ] **Step 1: Download the artifact** + +Run: `gh run download -n winget-manifests-0.2.3 -D /tmp/winget-check && ls -la /tmp/winget-check/manifests/n/NousResearch/HermesDesktop/0.2.3/` + +(Replace `0.2.3` with the actual `version` from `package.json` if it changed.) + +Expected: three `.yaml` files listed. + +- [ ] **Step 2: Visually inspect** + +Run: `cat /tmp/winget-check/manifests/n/NousResearch/HermesDesktop/0.2.3/*.yaml` + +Expected: + +- No `{{...}}` placeholders left. +- `InstallerSha256` is a 64-character uppercase hex string. +- `InstallerUrl` points to the `fathah/hermes-desktop` releases path with the correct version. +- `ReleaseDate` is today's date (UTC) in `YYYY-MM-DD`. +- `PackageVersion` matches `package.json`. + +If any field looks wrong, fix the generator or templates, commit, re-push, re-trigger. + +- [ ] **Step 3: Cleanup** + +Run: `rm -rf /tmp/winget-check` + +--- + +## Phase 7: Open PR upstream + +### Task 24: Open PR to `fathah/hermes-desktop:main` + +This is a "shared state" action visible to others. The human operator confirms before running. + +- [ ] **Step 1: Confirm PR target with the user** + +Ask the user: "Ready to open the PR from `Aiacos:feat/winget-rpm-release` to `fathah/hermes-desktop:main`? Or do you want to review the diff one more time first?" + +Wait for explicit confirmation. + +- [ ] **Step 2: Create the PR via gh** + +Run: + +```bash +gh pr create \ + --repo fathah/hermes-desktop \ + --base main \ + --head Aiacos:feat/winget-rpm-release \ + --title "ci: add Windows (winget) and Fedora (RPM) release artifacts" \ + --body "$(cat <<'EOF' +## Summary + +- Adds a `release_windows` job that builds an NSIS installer (`hermes-desktop--setup.exe`) on `windows-latest`. +- Adds a `generate_winget` job that fills YAML manifest templates (`build/winget/*.template.yaml`) with the installer SHA256 and uploads them as the `winget-manifests-` CI artifact, ready for manual submission to [`microsoft/winget-pkgs`](https://github.com/microsoft/winget-pkgs). +- Extends the existing `release_linux` job to also build an `.rpm` for Fedora alongside the existing `.AppImage` and `.deb`. +- Adds explicit `oneClick: true` / `perMachine: false` to NSIS (matches electron-builder defaults; pinning prevents future drift) and Linux packaging metadata (`vendor`, `synopsis`, `description`). +- Adds a `dry_run` boolean input to `workflow_dispatch` (default `true`) so the workflow can be tested on a branch without creating tags or releases. Real releases (push to `release` branch) are unaffected. + +The winget manifests are deliberately **not** included in the GitHub Release files (operator-facing, not user-facing). To publish to winget, download the `winget-manifests-` artifact from the release run and submit a PR to `microsoft/winget-pkgs`. + +Spec: `docs/superpowers/specs/2026-04-30-windows-winget-fedora-rpm-release-design.md` +Plan: `docs/superpowers/plans/2026-04-30-windows-winget-fedora-rpm-release.md` + +## Verification + +- [x] `npm run lint` +- [x] `npm run typecheck` +- [x] `npm run test` (4 new tests for the manifest generator) +- [x] `npm run build:rpm` produces a valid `.rpm` on Fedora +- [x] `workflow_dispatch` with `dry_run=true` on the fork: all build jobs succeed, `publish` skipped as expected +- [x] Generated winget manifests inspected: no leftover placeholders, valid SHA256, correct URLs + +## Notes for the maintainer + +- **No code-signing introduced.** Windows SmartScreen will warn on first install; Fedora `dnf` will warn on unsigned RPM. Adding signing is out of scope for this PR (would require certificates / GPG keys in repo secrets). +- **No auto-submit to winget-pkgs.** That would need a GitHub PAT in upstream secrets; the manual submit flow is one `cp -r` from the artifact directory. +- **Fedora `.rpm` does not auto-update** (electron-updater limitation). Documented in README. + +## Test plan + +- [ ] Maintainer pushes a real release (push to `release` branch); confirms all six jobs run and `publish` produces a GitHub Release with `.exe`, `.rpm`, `.deb`, `.AppImage`, `.dmg`, `.zip`. +- [ ] Maintainer downloads `winget-manifests-` artifact and (optionally) submits to `microsoft/winget-pkgs`. +EOF +)" +``` + +Expected: `gh` returns the PR URL. Print it back to the user. + +- [ ] **Step 3: Print the PR URL** + +Done. + +--- + +## Self-review checklist (executed before saving) + +**Spec coverage:** + +- ✅ Windows NSIS build → Tasks 14, 17 +- ✅ Winget manifest generation → Tasks 6, 7, 9, 11, 15 +- ✅ Fedora RPM in CI → Task 13 +- ✅ Local rpm sanity-check → Task 4 +- ✅ `dry_run` workflow_dispatch input → Task 12 +- ✅ `publish` gated on `is_dry_run` → Task 16 +- ✅ Explicit gh-release files list (replaces `artifacts/*` glob) → Task 16 +- ✅ Linux metadata (vendor/synopsis/description) → Task 1 +- ✅ Explicit NSIS oneClick/perMachine → Task 2 +- ✅ README updates for Windows + Fedora install → Task 18 +- ✅ Local verification (lint/typecheck/test) → Task 20 +- ✅ CI verification on fork → Tasks 21–23 +- ✅ Open PR upstream → Task 24 + +**Placeholder scan:** No "TBD" or "fill in details" left. The generated PR body in Task 24 has a "Test plan" with unchecked boxes — that is intentional, those are TODOs for the _maintainer_, not for the implementer. + +**Type/name consistency:** + +- `generateWingetManifests({ rootDir, version, name, publishOwner })` — same signature in test (Task 7), implementation (Task 9), and CLI entrypoint. +- `winget-manifests-${{ needs.prepare.outputs.version }}` — same artifact name in `generate_winget` job (Task 15) and in the CI inspection step (Task 23). +- `is_dry_run` output — defined in Task 12, consumed in Task 16. +- `publishOwner: "fathah"` — same in workflow env (Task 15) and CLI default (Task 9). diff --git a/docs/superpowers/specs/2026-04-30-windows-winget-fedora-rpm-release-design.md b/docs/superpowers/specs/2026-04-30-windows-winget-fedora-rpm-release-design.md new file mode 100644 index 0000000..fc5ca8c --- /dev/null +++ b/docs/superpowers/specs/2026-04-30-windows-winget-fedora-rpm-release-design.md @@ -0,0 +1,235 @@ +# Windows (winget) and Fedora (RPM) release automation + +**Status:** Approved (brainstorming) — pending implementation plan +**Date:** 2026-04-30 +**Branch target:** `Aiacos/hermes-desktop:feat/winget-rpm-release` → PR upstream `fathah/hermes-desktop:main` + +## Goal + +Extend the existing release pipeline so it produces: + +1. **Windows artifacts** — an NSIS installer (`.exe`) published in each GitHub Release, plus winget manifests (`Installer.yaml`, `Locale.en-US.yaml`, `Version.yaml`) generated as a CI artifact for manual submission to `microsoft/winget-pkgs`. +2. **Fedora artifacts** — an unsigned `.rpm` published in each GitHub Release, alongside the existing `.AppImage` and `.deb`. + +No changes to macOS. The existing `.AppImage` / `.deb` artifacts are rebuilt by the same job that now also produces `.rpm`; the only adjacent change touching them is shared `linux.*` metadata (`synopsis`, `description`, `vendor`) which improves their packaging metadata too. No code-signing introduced (none available). No COPR repository, no auto-submission to `microsoft/winget-pkgs`. + +## Non-goals + +- Code signing for Windows (no certificate available; SmartScreen warning persists). +- macOS notarization changes. +- GPG-signing the RPM (no signing key available; users install with `sudo dnf install ./file.rpm` or `--nogpgcheck`). +- A Fedora COPR repository. +- Automated PR submission to `microsoft/winget-pkgs` (would require a GitHub PAT in upstream secrets, which the PR author does not control). +- Auto-update support for `.rpm` (limitation of `electron-updater`). +- Windows ARM64 build (requires extra toolchain; nobody is testing it). + +## Architecture + +The existing `release.yml` workflow is extended in place. Two new jobs are added; one existing job is extended; a `dry_run` input is added to the manual-dispatch trigger. + +``` +release.yml (extended) +├─ prepare [ubuntu] unchanged + new is_dry_run output +├─ release_mac [macos] unchanged +├─ release_linux [ubuntu] ADD: rpm to electron-builder targets, install rpm apt package +├─ release_windows [windows] NEW: NSIS .exe + .blockmap + latest.yml +├─ generate_winget [ubuntu] NEW: SHA256 the .exe, fill manifest templates, upload as artifact +└─ publish [ubuntu] gated: skip if is_dry_run == 'true' +``` + +### Triggers + +- `push` to branch `release` — unchanged. Behaves as a real release: builds run, publish runs. +- `workflow_dispatch` — adds `inputs.dry_run` (boolean, default `true`). When `dry_run=true`, all build jobs run; `publish` is skipped. + +The default-true on dispatch is a safety net: a stray click in the Actions UI cannot trigger a real release. + +### Identifiers and naming + +- **Winget `PackageIdentifier`:** `NousResearch.HermesDesktop` (stable, never renamed) +- **Winget `Publisher`:** `Nous Research` (free-text; binaries hosted under `fathah/hermes-desktop`, which the moderation review will verify against the `InstallerUrl`) +- **Winget `PackageName`:** `Hermes Agent` (matches `productName` in `electron-builder.yml`) +- **NSIS scope:** `oneClick: true`, `perMachine: false` — installs into `%LOCALAPPDATA%`, no UAC prompt, aligns with `winget install` default user scope and with the app's existing `~/.hermes` user-state model. +- **RPM artifact name:** `hermes-desktop-.rpm` (no spaces, no arch suffix — consistent with the existing `.deb` and `.AppImage` naming. The default `${productName}` would produce `Hermes Agent-...rpm` which breaks `dnf install ./file.rpm`. We explicitly only build `x86_64`, so the missing arch suffix is unambiguous in practice.). + +## File changes + +### Modified + +#### `.github/workflows/release.yml` (~+120 / -10 lines) + +- Add `workflow_dispatch.inputs.dry_run` (boolean, default `true`). +- Add `prepare.outputs.is_dry_run` computed as `${{ github.event_name == 'workflow_dispatch' && inputs.dry_run }}` (string `'true'`/`'false'`). +- Add new job `release_windows`: + - `runs-on: windows-latest` + - `needs: prepare` + - `if: needs.prepare.outputs.tag_exists == 'false'` + - Steps: checkout, setup-node 22 with `cache: npm`, `npm ci`, `npm run build`, `npx electron-builder --win nsis --x64 --publish never`, upload `dist/*.exe`, `dist/*.exe.blockmap`, `dist/latest.yml` as artifact `windows-artifacts`. +- Modify existing `release_linux`: + - Add `sudo apt-get update && sudo apt-get install -y rpm` step before packaging. + - Change packaging command to `npx electron-builder --linux AppImage deb rpm --publish never`. + - Extend artifact upload paths to include `dist/*.rpm`. +- Add new job `generate_winget`: + - `runs-on: ubuntu-latest` + - `needs: [prepare, release_windows]` + - `if: needs.prepare.outputs.tag_exists == 'false'` + - Steps: checkout, download `windows-artifacts` to `dist/`, run `node scripts/generate-winget-manifests.mjs` with env `VERSION` and `PUBLISH_OWNER=fathah`, upload `dist/winget/` as artifact `winget-manifests-${{ needs.prepare.outputs.version }}`. +- Modify `publish`: + - `needs: [prepare, release_mac, release_linux, release_windows, generate_winget]` + - `if: needs.prepare.outputs.is_dry_run == 'false' && needs.prepare.outputs.tag_exists == 'false'` + - `download-artifact` step keeps `merge-multiple: true` and downloads into `artifacts/`. The winget manifests artifact ends up under `artifacts/winget/manifests/...` and is **deliberately excluded** from the GitHub Release files (manifests are operator-facing, not user-facing). + - The `softprops/action-gh-release` `files` input is changed from the existing `artifacts/*` glob to an **explicit list of patterns** that names each user-facing artifact: `artifacts/*.dmg`, `artifacts/*.zip`, `artifacts/*.AppImage`, `artifacts/*.deb`, `artifacts/*.rpm`, `artifacts/*.exe`, `artifacts/*.blockmap`, `artifacts/latest*.yml`. This is deterministic regardless of how `merge-multiple` lays out subdirectories, and prevents future artifacts from leaking into releases by accident. + +Concurrency block (`group: release`, `cancel-in-progress: true`) remains unchanged. **Caveat (pre-existing, not introduced by this change):** with `cancel-in-progress: true`, a _new_ run cancels the _currently running_ one in the same group. So a stray `workflow_dispatch` triggered during a real release would cancel the release. This risk is low (dispatches are manual; the dispatch defaults to `dry_run=true` which would not produce a tag anyway, but the cancellation of the in-flight real release is the actual hazard). Not addressed here to keep scope focused; flagged for a follow-up that scopes the concurrency group by `github.event_name`. + +#### `electron-builder.yml` (~+15 lines) + +- `linux.target`: add `rpm` (existing `AppImage`, `snap`, `deb` retained). +- `linux.synopsis`: short one-line description (required by fpm/rpmbuild for valid RPM metadata). +- `linux.description`: longer description. +- `linux.vendor`: `Nous Research` (or repo owner of upstream; finalized during implementation). +- New `rpm:` block with `artifactName: ${name}-${version}.${ext}`. +- `nsis:` block extended with explicit `oneClick: true` and `perMachine: false` (currently relies on electron-builder defaults; making them explicit prevents silent behavior change across electron-builder versions). + +### New + +#### `build/winget/Installer.template.yaml` + +YAML manifest with placeholders: `{{VERSION}}`, `{{INSTALLER_URL}}`, `{{INSTALLER_SHA256}}`, `{{RELEASE_DATE}}`. Format follows winget v1.6 schema, `InstallerType: nullsoft`, `Scope: user`, `MinimumOSVersion: 10.0.17763.0` (Windows 10 1809 — minimum supported by Electron 39). + +#### `build/winget/Locale.en-US.template.yaml` + +Locale manifest with placeholders: `{{VERSION}}`, `{{RELEASE_NOTES_URL}}`. Includes `Publisher: Nous Research`, `PublisherUrl: https://github.com/fathah/hermes-desktop`, `PackageName: Hermes Agent`, `License: MIT`, `LicenseUrl: https://github.com/fathah/hermes-desktop/blob/main/LICENSE`, `ShortDescription`, `Tags: [ai, agent, desktop, electron, llm]`. + +#### `build/winget/Version.template.yaml` + +Root version manifest with placeholders: `{{VERSION}}`. Trivial: `PackageIdentifier`, `PackageVersion`, `DefaultLocale: en-US`, `ManifestType: version`, `ManifestVersion: 1.6.0`. + +#### `scripts/generate-winget-manifests.mjs` + +Node ESM script (~50 lines, zero external deps). Reads `package.json` to get `version` and `name`. Locates `dist/--setup.exe`. Computes SHA256 with `node:crypto` `createHash('sha256')` over the file. Reads each `*.template.yaml` from `build/winget/`. Replaces all `{{KEY}}` placeholders by string `replaceAll`. Writes output to `dist/winget/manifests/n/NousResearch/HermesDesktop//`: + +- `NousResearch.HermesDesktop.installer.yaml` +- `NousResearch.HermesDesktop.locale.en-US.yaml` +- `NousResearch.HermesDesktop.yaml` + +The path mirrors the directory layout in `microsoft/winget-pkgs`, so the operator submitting the PR can `cp -r` directly. + +Exit code 1 with explicit error if the `.exe` is not found. + +#### `package.json` + +Add script `"build:rpm": "npm run build && electron-builder --linux rpm"` for local Fedora developers. CI does not use this script (it calls `npx electron-builder` directly). + +#### `README.md` + +Update the Install section's platform table to add Windows (`.exe` and, once accepted into winget-pkgs, `winget install NousResearch.HermesDesktop`) and Fedora (`.rpm`). Add a note that: + +- The Windows build is unsigned; Windows SmartScreen will warn on first launch. +- The `.rpm` is unsigned; install with `sudo dnf install ./hermes-desktop-.x86_64.rpm` (or use `--nogpgcheck` if a system policy enforces signature checking). +- Auto-update on Linux is supported only for `.AppImage` builds; `.rpm` and `.deb` users must download new releases manually. + +## Data flow + +### CI build (Windows) + +``` +checkout + → npm ci → node_modules + electron-builder install-app-deps + → npm run build → out/main + out/preload + out/renderer + → electron-builder --win nsis --x64 + → dist/hermes-desktop--setup.exe + → dist/hermes-desktop--setup.exe.blockmap + → dist/latest.yml + → upload-artifact "windows-artifacts" +``` + +### CI generate winget manifests + +``` +download-artifact "windows-artifacts" → dist/ +node scripts/generate-winget-manifests.mjs + → SHA256(dist/hermes-desktop--setup.exe) + → fill 3 templates with VERSION, INSTALLER_URL, INSTALLER_SHA256, RELEASE_DATE + → write dist/winget/manifests/n/NousResearch/HermesDesktop//*.yaml +upload-artifact "winget-manifests-" +``` + +### CI build (Linux) + +``` +checkout + → npm ci + → npm run build + → apt install rpm + → electron-builder --linux AppImage deb rpm + → dist/hermes-desktop-.AppImage + → dist/hermes-desktop-.deb + → dist/hermes-desktop-.x86_64.rpm + → dist/latest-linux.yml + → upload-artifact "linux-artifacts" +``` + +### Publish (only on real release) + +``` +download-artifact merge-multiple=true → artifacts/ + *.dmg, *.zip, *.AppImage, *.deb, *.rpm, *.exe, *.blockmap, latest-*.yml, latest.yml + + artifacts/winget/manifests/... (excluded from release files glob) +git tag v + push +softprops/action-gh-release files=artifacts/* (excludes winget/ subdir) +``` + +## Error handling and edge cases + +1. **Missing NSIS installer in `generate_winget` job:** The script exits with code 1 and a clear message. Failure is loud, not silent. +2. **`rpm` package missing on Linux runner:** electron-builder fails with a clear "Cannot find rpmbuild" error. We pre-install via apt, so this should not surface. +3. **Tag already exists:** All build jobs gate on `tag_exists == 'false'`; new jobs replicate this guard. +4. **Concurrency cancellation (pre-existing behavior):** With `cancel-in-progress: true`, a new run in the same group cancels the currently running one. A stray dispatch during a real release would cancel the release. Mitigation: dispatches are manual and rare; the safer fix (per-event-type concurrency group) is intentionally out of scope here. +5. **`workflow_dispatch` on a branch other than `release`:** Allowed and intended — that is how E2 verification works. The `prepare` step still reads version from `package.json`, so it builds whatever version is on the branch. Real releases only happen on `release` branch (no `is_dry_run` short-circuit there because `is_dry_run` is `false` for push events by definition). +6. **Operator submits stale manifests:** The CI artifact name includes the version (`winget-manifests-`), so it cannot be confused with a different release's manifests. The operator copies the directory wholesale into their `microsoft/winget-pkgs` clone. +7. **Manifest schema validation:** Validated by the `microsoft/winget-pkgs` moderation bot at PR-submission time. Common failure modes (missing `MinimumOSVersion`, invalid `License`, mismatched `InstallerType`) are addressed up front in the templates. + +## Verification plan + +### Local + +1. Create branch `feat/winget-rpm-release`. +2. Apply all file changes. +3. `npm run lint` +4. `npm run typecheck` +5. `npm run test` +6. `npm run build:rpm` — produces a real `.rpm` on this Fedora host (sanity-checks the new electron-builder rpm target). +7. `node scripts/generate-winget-manifests.mjs` against a placeholder `dist/--setup.exe` (created via `dd if=/dev/urandom of=dist/... bs=1M count=1` to provide arbitrary content) — verifies that the generator produces three valid YAML files with consistent placeholders replaced. +8. (Optional) `actionlint .github/workflows/release.yml` if installed. + +### CI on fork + +9. Push `feat/winget-rpm-release` to `Aiacos/hermes-desktop`. +10. Trigger `workflow_dispatch` from the Actions UI on `feat/winget-rpm-release` with `dry_run=true`. +11. Verify all build jobs succeed: + - `prepare` ✓ + - `release_mac` (x64 + arm64) ✓ + - `release_linux` (with `.rpm`) ✓ + - `release_windows` ✓ + - `generate_winget` ✓ + - `publish` SKIPPED (status: skipped, not failed) +12. Download the `winget-manifests-` artifact and inspect the three YAML files for correctness (URL, SHA256, version, no leftover placeholders). + +### PR + +13. Open PR `Aiacos:feat/winget-rpm-release` → `fathah:main`. PR description summarizes what was added, the verification done, and the manual steps the maintainer has to take post-merge to actually publish to winget (download manifest artifact from the first real release run, submit to `microsoft/winget-pkgs`). + +## Open questions deferred to implementation + +- Exact wording of `linux.synopsis` and `linux.description` (will follow `package.json.description` style). +- Final value of `linux.vendor` (`Nous Research` vs `fathah`). +- Whether to include `manifestVersion: 1.10.0` (current latest) or stick with `1.6.0` (more compatible with older `winget` clients). Default to `1.6.0` unless implementation reveals required fields. + +## Out-of-scope follow-ups (future PRs, if desired) + +- Auto-submit winget PR via `vedantmgoyal2009/winget-releaser` action (requires GitHub PAT in upstream secrets). +- Fedora COPR repository for `dnf install` integration. +- GPG-signing the RPM. +- Windows code signing. +- Windows ARM64 build. diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 0000000..1a111df --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,73 @@ +appId: com.nousresearch.hermes +productName: Hermes One +directories: + buildResources: build +files: + - "!**/.vscode/*" + - "!src/*" + - "!electron.vite.config.{js,ts,mjs,cjs}" + - "!{.eslintcache,eslint.config.mjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}" + - "!{.env,.env.*,.npmrc,pnpm-lock.yaml}" + - "!{tsconfig.json,tsconfig.node.json,tsconfig.web.json}" +asarUnpack: + - resources/** + - node_modules/better-sqlite3/build/Release/*.node +win: + executableName: hermes-agent + target: + - nsis + - portable +portable: + artifactName: ${name}-${version}-portable.${ext} +nsis: + artifactName: ${name}-${version}-setup.${ext} + shortcutName: ${productName} + uninstallDisplayName: ${productName} + createDesktopShortcut: always + oneClick: true + perMachine: false +mac: + artifactName: ${name}-${version}-${arch}-${os}.${ext} + icon: build/icon.icns + entitlements: build/entitlements.mac.plist + entitlementsInherit: build/entitlements.mac.inherit.plist + extendInfo: + - NSCameraUsageDescription: Application requests access to the device's camera. + - NSMicrophoneUsageDescription: Application requests access to the device's microphone. + - NSDocumentsFolderUsageDescription: Application requests access to the user's Documents folder. + - NSDownloadsFolderUsageDescription: Application requests access to the user's Downloads folder. + hardenedRuntime: true + gatekeeperAssess: false + notarize: true +dmg: + artifactName: ${name}-${version}-${arch}.${ext} +linux: + target: + - AppImage + - snap + - deb + - rpm + maintainer: electronjs.org + vendor: Nous Research + category: Utility + synopsis: Self-improving AI assistant desktop app + description: >- + Hermes One is a native desktop app for installing, configuring, and chatting + with Hermes Agent — a self-improving AI assistant with tool use, multi-platform + messaging, and a closed learning loop. +appImage: + artifactName: ${name}-${version}.${ext} +deb: + # Run chmod 4755 on chrome-sandbox so Electron's setuid sandbox helper + # works on modern Linux distros that disable unprivileged user + # namespaces (Ubuntu 24.04+, etc.). Closes #395. + afterInstall: build/linux-after-install.sh +rpm: + artifactName: ${name}-${version}.${ext} + # Same SUID fix for .rpm consumers (Fedora 40+ also restricts userns). + afterInstall: build/linux-after-install.sh +npmRebuild: false +publish: + provider: github + owner: fathah + repo: hermes-desktop diff --git a/electron.vite.config.ts b/electron.vite.config.ts new file mode 100644 index 0000000..b3f595f --- /dev/null +++ b/electron.vite.config.ts @@ -0,0 +1,46 @@ +import { resolve } from "path"; +import { defineConfig } from "electron-vite"; +import react from "@vitejs/plugin-react"; +import tailwindcss from "@tailwindcss/vite"; + +const rendererPort = Number(process.env.HERMES_DESKTOP_RENDERER_PORT || 0); + +export default defineConfig({ + main: { + build: { + rollupOptions: { + external: ["better-sqlite3"], + }, + }, + }, + preload: { + build: { + rollupOptions: { + input: { + index: resolve("src/preload/index.ts"), + askpass: resolve("src/preload/askpass.ts"), + }, + }, + }, + }, + renderer: { + ...(rendererPort > 0 + ? { + server: { + port: rendererPort, + strictPort: false, + }, + } + : {}), + resolve: { + alias: { + "@renderer": resolve("src/renderer/src"), + }, + // Ensure a single Three.js instance across our code, @react-three/fiber, + // drei and troika — multiple copies break `instanceof THREE.*` checks in + // the ported office agent renderer. + dedupe: ["three"], + }, + plugins: [tailwindcss(), react()], + }, +}); diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..56e594e --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,77 @@ +import { defineConfig } from "eslint/config"; +import tseslint from "@electron-toolkit/eslint-config-ts"; +import eslintConfigPrettier from "@electron-toolkit/eslint-config-prettier"; +import eslintPluginReact from "eslint-plugin-react"; +import eslintPluginReactHooks from "eslint-plugin-react-hooks"; +import eslintPluginReactRefresh from "eslint-plugin-react-refresh"; + +export default defineConfig( + { + ignores: [ + "**/node_modules", + "**/dist", + "**/out", + ".claude/**", + ".agents/**", + "build/**", + // CDP E2E harness — plain Node CommonJS scripts driving the + // dev electron via Chrome DevTools Protocol for live testing. + // They intentionally use require() because they run as one-off + // `node scripts/*.js` invocations outside the TS build, and + // they're not part of the shipped app. See scripts/README.md. + "scripts/e2e-attach.js", + "scripts/repro-*.js", + "scripts/probe-*.js", + "scripts/drive-*.js", + "scripts/verify-*.js", + ], + }, + tseslint.configs.recommended, + eslintPluginReact.configs.flat.recommended, + eslintPluginReact.configs.flat["jsx-runtime"], + { + settings: { + react: { + version: "detect", + }, + }, + }, + { + files: ["**/*.{ts,tsx}"], + plugins: { + "react-hooks": eslintPluginReactHooks, + "react-refresh": eslintPluginReactRefresh, + }, + rules: { + ...eslintPluginReactHooks.configs.recommended.rules, + ...eslintPluginReactRefresh.configs.vite.rules, + "react-hooks/set-state-in-effect": "off", + "react-hooks/refs": "off", + "react-refresh/only-export-components": "off", + // Honour the `_`-prefix convention used across the codebase for + // deliberately-unused parameters/variables (e.g. unused args kept for + // signature symmetry, or ignored caught errors). + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + }, + ], + }, + }, + { + // The 3D office (react-three-fiber) uses Three.js intrinsic elements whose + // props (position, args, rotation, intensity, ...) are flagged by the + // DOM-oriented `react/no-unknown-property` rule. Disable it here only. + files: ["src/renderer/src/screens/Office/office3d/**/*.{ts,tsx}"], + rules: { + "react/no-unknown-property": "off", + // Ported 3D art modules use many small internal helpers without explicit + // return annotations; the renderer doesn't require them here. + "@typescript-eslint/explicit-function-return-type": "off", + }, + }, + eslintConfigPrettier, +); diff --git a/lat.md/.cache/lat_init.json b/lat.md/.cache/lat_init.json new file mode 100644 index 0000000..b120729 --- /dev/null +++ b/lat.md/.cache/lat_init.json @@ -0,0 +1,7 @@ +{ + "init_version": 1, + "file_hashes": { + "CLAUDE.md": "5fd49383be7fd33deec07b4e7a6cbac441568611e392864c7474e5495c8ab0d3", + ".claude/skills/lat-md/SKILL.md": "39c77385d424367ce6f9290973e2abef5660d288e4efda3609e4c2c50e0b574a" + } +} diff --git a/lat.md/agent-sync.md b/lat.md/agent-sync.md new file mode 100644 index 0000000..96fca5a --- /dev/null +++ b/lat.md/agent-sync.md @@ -0,0 +1,91 @@ +# Cloud agent sync + +Syncs desktop profiles (the app's agents) with the signed-in [[hermes-account-login|Hermes One account]]'s cloud agents, bidirectionally, via the backend's `/api/agents` CRUD. + +Phase 1 covers the free parts from the backend's `docs/agent-sync.md`: color, persona (`SOUL.md` ↔ `systemPrompt`), memory (`memories/MEMORY.md` ↔ `memory`), and config basics (`model`/`provider` only — never the whole `config.yaml`, so no secrets leave the device). Skills, automations, and sessions are deferred. Deletions never propagate in either direction. + +## Sync engine + +[[src/main/agent-sync.ts#syncAgents]] runs one single-flight pass: link local profiles to cloud agents, reconcile each part, create missing counterparts on both sides, and unlink mappings whose cloud agent disappeared. + +The stored link (a profile's cloud `agentId`) is also read by [[wallet-token-balances#Wallet Sync]] via [[src/main/agent-sync.ts#getLinkedAgentId]], so backend-provisioned wallets can be fetched for the same agent. + +Requests are bearer-authenticated with the device-login token — the account is located app-wide by [[src/main/account-store.ts#findAccountProfile]] (the token is saved under whichever profile was active at sign-in). Linking keys on the cloud agent's stable `id`; names only match never-synced profiles to their cloud namesakes and are never used to rename. + +Links are **account-scoped**: every state write records the owning backend user id, and a pass skips (never unlinks, never pushes) profiles whose link belongs to a different account — signing out and back in as someone else must not re-upload the first account's agents to the second. A missing cloud agent only unlinks when the state provably belongs to the current account; legacy states without an owner are adopted when their agent exists in the account's list and skipped with a warning otherwise. Wallet flows apply the same rule through [[src/main/agent-sync.ts#getLinkedAgentAccountId]] — see [[wallet-token-balances#Wallet Sync]]. + +Per part, the pure [[src/main/agent-sync.ts#decidePartAction]] compares the last-sync base hash with both sides' current hashes: only one side moved → that side wins; both moved (or first sync) → last-writer-wins by timestamp (local file mtime vs the agent's `updatedAt`). Equal content is always a no-op. + +Pushes are built by [[src/main/agent-sync.ts#buildPushBody]], which enforces the backend's field limits by *skipping* oversize parts with a warning — truncating and later pulling back would destroy local content. An unset local model is also skipped so a PATCH can't clobber the cloud value with an empty string. Pulls write through the existing per-part helpers: [[src/main/soul.ts#writeSoul]], [[src/main/memory.ts#writeMemoryRaw]], [[src/main/profile-meta.ts#setProfileColor]], and [[src/main/config.ts#setModelConfig]] (preserving the local base URL). + +A profile's stable **id** (its directory slug), not its editable display **name**, keys every on-disk operation — `getModelConfig`/`readSoul`/`readMemoryRaw`, the `cloud-sync.json` state file, and all pull writes — so a renamed profile keeps syncing against the same directory. The display `name` is used only as the cloud agent's human label (create/name-match/warnings). + +Cloud-only agents are materialized locally by [[src/main/profiles.ts#createProfile]], which derives a valid, collision-free id from the cloud agent's display name and returns it; the pulled parts are then written under that id. + +## State file + +Each linked profile stores its mapping in `cloud-sync.json` under the profile home: the cloud `agentId`, the owning account's user id, the cloud-side name, and a per-part content hash from the last successful sync (the conflict-detection base). + +Parts that failed to push (or were skipped as oversize) keep their old base, so they stay pending rather than being silently marked clean. Deleting the file unlinks the profile — which is exactly what a pass does when the cloud agent was deleted in the console, leaving the local profile untouched. + +## IPC and UI + +The main process exposes `agent-sync-run`, `agent-sync-status`, and `agent-sync-linked-id` in [[src/main/ipc/register.ts#registerIpcHandlers]], next to the account handlers; a completed run also emits `agent-sync-updated` so the renderer can refresh. + +`agent-sync-linked-id` returns the cloud agent id a profile is linked to (or null) — for the per-profile Sync tab below. + +The preload bridge surfaces these as `syncAgents`, `getAgentSyncStatus`, `getLinkedAgentId`, and `onAgentSyncUpdated` on `window.hermesAPI`, typed by the shared shapes in [[src/shared/agent-sync.ts]]. + +[[src/renderer/src/screens/Agents/Agents.tsx]] (local mode only — Layout shows a remote notice otherwise) renders the sync affordance in the header: a signed-out hint pointing at the Providers account card, or a Sync button with the last pass's summary (warnings in the tooltip). It auto-runs one pass per visit when signed in, and reloads the profile list when a pass pull-created profiles. [[src/renderer/src/components/HermesAccountModal.tsx]] kicks off the first sync right after a successful sign-in. + +The profile modal's **Sync** tab, [[src/renderer/src/components/profile/ProfileSyncPane.tsx]], is a per-profile manual path for when the auto-sync hasn't run: it shows the signed-in account, whether this profile is linked to a cloud agent (`getLinkedAgentId`), and this profile's outcome from the last pass, with a **Sync now** button that runs the same app-wide `syncAgents()`. Sign-in/unauthorized/error states are surfaced inline. + +## Tests + +[[src/main/agent-sync.test.ts]] fakes the profile/config/fs surface and stubs `fetch`, so the tests exercise the reconciliation logic itself; one account-lookup test lives in [[src/main/account-store.test.ts]]. + +### Locates the account app-wide + +`findAccountProfile` finds a session saved under a named profile and prefers the default home when both have one, so sync works no matter which profile was active at sign-in. + +### Part decision matrix + +`decidePartAction` across the base/local/remote hash matrix: equal content is a no-op, a single moved side pushes or pulls, and both-moved / never-synced parts fall back to last-writer-wins by timestamp. + +### Push bodies stay within limits + +`buildPushBody` maps parts to exactly the backend's fields and nothing else, and skips oversize persona/memory and unset models instead of truncating or sending empty strings. + +### Keys on-disk work off the stable id + +A renamed profile (id `hello-agent`, display name `Hello Agent`) drives all on-disk sync — state file, part reads — off the id, while the cloud agent it creates carries the display name as its label. + +### Backs up new local profiles + +A never-synced local profile is POSTed to the backend with its four parts and the returned agent id is persisted to `cloud-sync.json`. + +### Links by name and pulls the newer side + +An unmapped profile links to its cloud namesake without creating a duplicate, and on first sync the newer side (the cloud, when local files are older) wins part by part. + +### Pull-creates cloud-only agents + +A cloud agent with no local counterpart becomes a local profile (via `createProfile`, which derives the id from the agent's display name), and its persona/color/memory/config are written locally under that id. + +### Unlinks deleted cloud agents + +When a mapped cloud agent disappears **and the link's recorded owner is the current account**, the pass removes `cloud-sync.json` and keeps the local profile — no DELETE is ever sent in either direction. + +### Skips foreign-linked profiles + +A profile whose state names a different `accountId` is left completely untouched — state file intact, nothing pushed or pulled — and wallet sync refuses it client-side with `status: "foreign"` before any backend call. + +### Leaves ambiguous legacy links alone + +A legacy state (no `accountId`) whose agent isn't in the current account's list is skipped with a warning, not unlinked. + +It could be a console deletion or another account's agent — and a wrong unlink would re-upload someone else's agent on the next pass, so skipping is the safe read. + +### Records the owning account + +Every successful pass stamps the current account's user id into the state file, adopting legacy links whose agent exists in this account's list. diff --git a/lat.md/analytics.md b/lat.md/analytics.md new file mode 100644 index 0000000..885119b --- /dev/null +++ b/lat.md/analytics.md @@ -0,0 +1,33 @@ +# Analytics + +Privacy-first, opt-out usage analytics that report anonymous events to the in-house Hermes analytics service. Replaces the former PostHog integration; no third-party analytics SDK is bundled. + +Events are sent directly over `fetch` from the renderer — there is no client library. Each event POSTs to `{VITE_ANALYTICS_BASE_URL}/v1/events` with an `x-api-key: {VITE_ANALYTICS_API_KEY}` header and a JSON body of `{ anonymous_id, event, source: "desktop", properties }`. The base URL and API key are injected at build time from GitHub Actions secrets, so analytics is silently disabled in local and unofficial builds where neither is configured. It is also disabled on the Vite dev server — [[src/renderer/src/utils/analytics.ts#isConfigured]] short-circuits when `import.meta.env.DEV` is true, since the `http://localhost:5173` dev origin isn't allowed by the service's CORS (every request would just fail preflight and spam the console). Packaged builds run `vite build`, so they are unaffected. + +## Per-install identity + +A random UUID created on first launch and persisted in `localStorage` under `hermes-anonymous-id` is the analytics user id — created if absent, reused if present. + +It contains no PII and never leaves the device except as the `anonymous_id` field on events. + +[[src/renderer/src/utils/analytics.ts]] owns this logic. `getOrCreateAnonymousId` reads or mints the id; `resetAnalytics` clears it so a fresh id is minted on the next event. + +## Consent + +Analytics is opt-out: enabled by default when the endpoint is configured, and the user can disable it from Settings. The choice is stored in `localStorage` under `hermes-analytics-enabled`. + +[[src/renderer/src/components/settings/PrivacyPane.tsx#PrivacyPane]] (the Privacy pane of the settings modal) renders the toggle and a short one-line privacy note, calling `setAnalyticsConsent`; the initial state comes from `getAnalyticsConsent` in [[src/renderer/src/components/settings/useSettingsData.ts#useSettingsData]]. When consent is off, `capture` short-circuits and no requests are made. + +## Capture surface + +`initAnalytics` runs once at renderer startup from [[src/renderer/src/main.tsx]] and emits an `app_opened` event. + +Its properties are `app_version` (the Hermes version from `package.json`, fetched over the `get-app-version` IPC — not the runtime version), `electron_version`, `node_version`, and `platform`. + +Screen navigation is tracked via `captureScreenView` from [[src/renderer/src/App.tsx#App]], and `captureFeatureUsage` records feature-level events. No chat content, prompts, model responses, file paths, or credentials are ever collected. + +## Build & CSP + +The `VITE_ANALYTICS_BASE_URL` and `VITE_ANALYTICS_API_KEY` secrets are injected into every `npm run build` step of the release workflow (`.github/workflows/release.yml`). + +The Content-Security-Policy in [[src/main/app/start.ts]] and `src/renderer/index.html` allows `connect-src` to reach the analytics host (`https://*.hermesone.org`); the former PostHog `script-src`/`connect-src` allowances were removed. diff --git a/lat.md/chat-commands.md b/lat.md/chat-commands.md new file mode 100644 index 0000000..13bb60f --- /dev/null +++ b/lat.md/chat-commands.md @@ -0,0 +1,122 @@ +# Slash command execution + +Typed slash commands (`/compact`, `/compress`, `/reset`, `/web`, …) are run through the gateway's command pipeline, not submitted to the model as plain prompt text. This is what makes them _do_ something instead of being echoed back as prose. + +The desktop talks to the hermes-agent gateway over JSON-RPC. A normal message goes via `prompt.submit`, which the gateway treats as a user turn — so a literal `/compact` reaches the model and comes back as text. Real commands must instead go through `slash.exec` (registry-backed worker) with a `command.dispatch` fallback for commands that resolve to an alias, plugin, skill, or an agent prompt. + +**Profile scoping over the unified SSH dashboard.** In SSH mode one machine dashboard serves every profile (see [[main-process#SSH dashboard transport]]), so chat calls must carry the active `profile` or the gateway runs them under its launch profile (`default`) — the agent would then answer as `default` even when a named profile is selected. [[src/main/remote-sessions.ts#RemoteSessionConfig]]`.profile` scopes the `/api/*` HTTP ops, and the `/api/ws` chat client passes `profile` on `session.create`/`session.resume` **and** `prompt.submit`/`prompt.background` ([[src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.ts#submitDashboardPromptWithRecovery]]); `session.create` builds the agent and persists against that profile's `HERMES_HOME`/`state.db`, and each turn re-binds it. Omitted/`default` → the launch profile (unchanged for local and per-profile-remote setups). + +## Routing pipeline + +The pure routing logic lives in [[src/renderer/src/screens/Chat/slashExec.ts#executeSlash]]: try `slash.exec`, accept either rendered output or a structured dispatch result, and on rejection fall back to `command.dispatch`, returning `done`, `send`, or `error`. + +The name/argument split is done by [[src/renderer/src/screens/Chat/slashExec.ts#parseSlash]], which matches with the dotAll flag so a command's argument may span multiple lines (e.g. a multi-line `/remember` note) — an empty name is what `executeSlash` rejects as an empty command, so a multi-line body must not collapse the match. + +It mirrors hermes-agent's reference client (`web/src/lib/slashExec.ts`) so every front-end implements the same contract. Pending-input commands such as `/learn` can return `{type: "send"}` directly from `slash.exec`; that prompt still passes through the central model-submission path. + +## Local vs gateway commands + +Every typed slash command is resolved through the merged catalog before execution. Ownership is explicit (`target: "desktop" | "agent" | "model"`); display categories such as `info` do not determine routing. + +Desktop-only commands delegate to local renderer handlers, Agent commands use the gateway command pipeline, and model commands build a prompt through the shared model-submission formatter. The legacy transport reports Agent commands as unavailable instead of sending raw `/…` text to the model. + +## Commands never queue + +Slash commands run on the gateway's **persistent slash-worker subprocess**, concurrent with any in-flight turn — so they respond instantly and must NOT sit in the busy queue behind a running turn (only plain prompts queue). + +`handleSubmitOrQueue` in [[src/renderer/src/screens/Chat/Chat.tsx]] dispatches every `/…` input immediately to the central router. Desktop and slash-worker commands can complete concurrently; model commands and Agent `send`/skill directives are formatted once and queued when the main model turn is busy. + +Because no global loading state is set, the slash branch shows its own feedback: it inserts an in-place `⏳ Running …` agent bubble, buffers the pipeline output, and replaces that bubble with the result (or `error: …`) when the command resolves — otherwise a slow or unreachable gateway would leave the user staring at nothing. Handled UI actions without output silently remove the pending bubble without leaving conversation artifacts. + +## Transport connection lifecycle + + +Every dashboard turn first connects a JSON-RPC WebSocket to the gateway; that handshake must be time-bounded or a stalled socket wedges the whole transport with no error and no fallback (issue #718). + +[[src/renderer/src/screens/Chat/dashboardGatewayClient.ts#DashboardGatewayClient#connect]] resolves on `open`, rejects on `error` or an early `close`, **and** rejects on a connect-timeout (default 10s). A WebSocket stuck in `CONNECTING` — TCP accepted but the upgrade never completing, e.g. when a busy renderer starves the handshake — fires none of those events on its own, so without the timer the connect promise never settles. When it never settles, `ensureClient` in [[src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.ts#useDashboardChatTransport]] never resolves, its cached `connectingRef` promise poisons every later send, `setIsLoading(false)` never runs, and the user sees a permanent loading spinner. The timeout makes the promise reject so auto mode falls back to the legacy HTTP transport (and explicit-dashboard mode surfaces a real error) instead of hanging. Per-request calls are separately bounded by their own 30s timeout. + +## Dashboard up ⇒ /api/ws only (never /v1 fallback) + +When a dashboard is available, chat goes through `/api/ws` **only** — never the `/v1` fallback, which 405s over the dashboard tunnel. + +This matches the reference `apps/desktop`, which has no `/v1` chat path at all (its `use-prompt-actions.ts` submits via `requestGateway('prompt.submit', …)` with a busy-retry). The fork's main-process `/v1` path (`sendMessageViaApi`/`sendMessageViaRuns`) exists solely for genuine gateway-only remotes; falling to it while a dashboard is up POSTs `/v1` to the dashboard tunnel — which has no `/v1` → **405**. + +So `ensureClient` distinguishes two failures: a **genuinely absent** dashboard (`startDashboard` → `running:false`) latches the negative flag and (auto mode) drops to legacy gateway `/v1`; a **transient** WS drop while the dashboard is up (a "socket hang up" from a tunnel blip) instead **retries the connect** (up to 3×, re-running `startDashboard` each time to re-establish the SSH tunnel). If it still can't connect, it throws a `dashboardWasReachable`-tagged error so `sendMessage` **fails the turn for the user to retry** rather than 405-ing on `/v1`. + +## Completion text reconciliation + +On `message.complete` the desktop reconciles the text streamed via `message.delta` with the turn's `final_response`, because a last-turn-only final would otherwise clobber text streamed before a tool call (#746). + +[[src/renderer/src/screens/Chat/dashboardEventAdapter.ts#completeAssistantWithFinalText]] rewrites the last assistant bubble through [[src/renderer/src/screens/Chat/dashboardEventAdapter.ts#mergeStreamedWithFinal]], which compares whitespace-insensitively and: uses the final text when it already contains the streamed text; keeps the streamed text when it contains the final (preserving pre-tool-call content); stitches a re-streamed boundary by dropping the duplicated word-aligned seam (rejecting coincidental mid-word overlaps); replaces a garbled re-stream with the final text when the two converge on a substantial common suffix (a corrupted-prefix delta — e.g. a mangled CJK stream — that ends the same sentence as the clean final, rather than the disjoint pre-tool-call + answer pair); and otherwise concatenates the two with a blank-line separator so segments never run together. On the remote/SSH path deltas are not rendered (`renderAssistantDeltas: false`), so the bubble starts empty and the final text is used verbatim. + +## Streaming source-of-truth ref + +`handleGatewayEvent` in [[src/renderer/src/screens/Chat/hooks/useDashboardChatTransport.ts#useDashboardChatTransport]] applies stream events against a synchronous `messagesRef`, not React state, because state lags a render behind and each successive delta must build on the previous one. + +The handler reads the ref, applies a delta, writes the ref back, then calls `setMessages`. An effect mirrors `messages` back into `messagesRef`, and its guard is a correctness invariant. Every `setMessages` in the hook stores the exact same array in the ref, so when React commits the hook's own push, `messages === messagesRef.current` and the effect must skip: re-adopting that snapshot let a second `message.delta` land on a pre-delta array and silently drop a chunk (#757). The effect therefore syncs only when the identity differs (`messages !== messagesRef.current`), which happens only when Chat state changes underneath the hook — a new user turn, `handleClear` emptying the list, or a clarify card resolving in place. A length comparison is wrong here: it misses the shrink and the same-length replacement. + +## Reasoning & tool activity rows + +Streamed reasoning and tool calls are folded into compact, collapsible transcript rows rather than stacked bubbles, so a turn with heavy thinking or many tool calls stays scannable. + +[[src/renderer/src/screens/Chat/HistoryRow.tsx#ReasoningRow]] renders the `Thought` / `Thinking…` row and [[src/renderer/src/screens/Chat/HistoryRow.tsx#ToolActivityGroup]] folds a contiguous run of tool calls/results into one row titled by [[src/renderer/src/screens/Chat/HistoryRow.tsx#toolActivityGroupTitle]]. Each row is collapsed by default and borderless (Codex-style): dim at rest, it brightens and reveals an expand chevron beside the title on hover/focus, and clicking toggles the body open. While the turn is still streaming the leading icon is a `Grid` loader (purple for reasoning, blue for tools); once finished it shows the brain/tool glyph. + +## Bubble hover timestamp + +Each user/assistant bubble reveals a relative "time ago" label on row hover, so the transcript stays uncluttered at rest but is still scrutable when a user wants to know _when_ something was said. + +The canonical time comes from state.db: [[src/renderer/src/screens/Chat/sessionHistory.ts#dbItemsToChatMessages]] copies each row's `timestamp` onto the `ChatBubbleMessage`, and [[src/renderer/src/screens/Chat/sessionHistory.ts#reconcileAfterDbRefresh|the end-of-stream reconcile]] adopts it onto the matching streamed bubble (via `mergeDbMetadataIntoStreamed`) so a live turn picks up its real time after refresh without remounting. state.db stores times in **seconds**, so `toEpochMs` in MessageRow scales any sub-`1e12` value up to milliseconds before use (otherwise it renders as ~Jan 1970). [[src/renderer/src/screens/Chat/MessageRow.tsx#formatBubbleTime]] builds the label with date-fns `formatDistanceToNowStrict` (e.g. "5 minutes ago", "just now" under 10s), with `formatBubbleTimeAbsolute` supplying the exact date/time as the `
` forwards the section name through `openSettings` to [[src/renderer/src/screens/Layout/Layout.tsx]], which opens the global settings modal on the matching nav item (see [[sidebar-navigation#Settings modal]]). [[src/renderer/src/components/settings/SettingsModal.tsx#resolveSection]] maps the argument to a nav id (`appearance`, `privacy`, `connection`, …, plus the legacy alias `hermesagent` → About); an unknown or omitted name lands on the first item. + +Asynchronous Agent commands render a temporary slash-loader bubble without transcript actions such as Copy; the bubble is replaced by the command output or error when execution finishes. + +### Agent commands + +Agent commands forward upstream via [[src/renderer/src/screens/Chat/slash/executeAgentCommand.ts#executeAgentCommand]] using gateway JSON-RPC. + +### Model commands + +Model commands and Agent `send`/skill directives pass through [[src/renderer/src/screens/Chat/slash/prepareModelSubmission.ts#prepareModelSubmission]] before entering the standard chat transport. This is the only slash route allowed to submit model content. + +### Command icons + +Visual presentation in the autocomplete popup is handled by [[src/renderer/src/screens/Chat/slash/SlashCommandIcon.tsx#SlashCommandIcon]], mapping command names to Lucide icons with fallback defaults and a custom SVG registry. Every slash command including desktop settings and navigation shortcuts is assigned an icon. + +Custom icons render via `dangerouslySetInnerHTML`, so string SVGs passed to [[src/renderer/src/screens/Chat/slash/SlashCommandIcon.tsx#registerCustomSlashSvg]] are stripped of ` + + diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx new file mode 100644 index 0000000..41365ba --- /dev/null +++ b/src/renderer/src/App.tsx @@ -0,0 +1,272 @@ +import { useState, useEffect, useCallback, useRef } from "react"; +import { Toaster } from "react-hot-toast"; +import { ThemeProvider } from "./components/ThemeProvider"; +import { FontProvider } from "./components/FontProvider"; +import { ProfileModalProvider } from "./components/profile/ProfileModalProvider"; +import { SettingsModalProvider } from "./components/settings/SettingsModalProvider"; +import ErrorBoundary from "./components/ErrorBoundary"; +import Welcome from "./screens/Welcome/Welcome"; +import Install from "./screens/Install/Install"; +import Setup from "./screens/Setup/Setup"; +import Layout from "./screens/Layout/Layout"; +import SplashScreen from "./screens/SplashScreen/SplashScreen"; +import { captureScreenView } from "./utils/analytics"; + +type Screen = "splash" | "welcome" | "installing" | "setup" | "main"; + +// Minimum time the splash stays visible so the background video plays +// through. Gateway / config checks happen during this window. +const SPLASH_MIN_MS = 3000; + +function App(): React.JSX.Element { + const [screen, setScreen] = useState("splash"); + const [installError, setInstallError] = useState(null); + const [connectionMode, setConnectionMode] = useState< + "local" | "remote" | "ssh" + >("local"); + // Soft warning: install files exist but the deep `verifyInstall` probe + // failed (e.g. slow Python startup, restricted network). We surface this + // as a dismissible banner instead of bouncing the user back to Welcome, + // which previously trapped restricted-network users in a reinstall + // loop on every launch (#130). + const [verifyWarning, setVerifyWarning] = useState(false); + const [splashStatus, setSplashStatus] = useState( + undefined, + ); + const isMac = window.electron?.process?.platform === "darwin"; + // Bumped on every runInstallCheck so a superseded run (e.g. the user hit + // "Switch to local mode" while an SSH tunnel attempt was still in flight) + // can't clobber the newer run's screen transition. + const runIdRef = useRef(0); + + const runInstallCheck = useCallback(async () => { + const myRun = ++runIdRef.current; + const startedAt = Date.now(); + let next: Screen = "welcome"; + const error: string | null = null; + let isRemote = false; + + try { + setSplashStatus("Checking connection…"); + const conn = await window.hermesAPI.getConnectionConfig(); + isRemote = conn.mode === "remote" || conn.mode === "ssh"; + setConnectionMode(conn.mode); + + if (conn.mode === "ssh" && conn.ssh) { + setSplashStatus("Starting SSH tunnel…"); + try { + await window.hermesAPI.startSshTunnel(); + } catch (tunnelErr) { + console.warn("SSH tunnel failed to start on launch:", tunnelErr); + } + next = "main"; + } else if (conn.mode === "remote" && conn.remoteUrl) { + setSplashStatus("Testing remote connection…"); + const ok = await window.hermesAPI.testRemoteConnection(conn.remoteUrl); + if (ok) { + next = "main"; + } else { + console.warn(`Cannot reach remote Hermes at ${conn.remoteUrl}.`); + next = "main"; + } + } else { + setSplashStatus("Checking local install…"); + const status = await window.hermesAPI.checkInstall(); + if (!status.installed) { + next = "welcome"; + } else if (!status.hasApiKey) { + next = "setup"; + } else { + next = "main"; + } + + // Warm config-health and gateway status in the background while the + // splash is still visible so the first render is snappy. Cap at 800ms + // so it never pushes us past the 3s minimum. + if (next === "main") { + setSplashStatus("Checking configuration…"); + await Promise.race([ + Promise.all([ + window.hermesAPI + .getConfigHealth() + .catch(() => null) + .then(() => undefined), + window.hermesAPI + .gatewayStatus() + .catch(() => null) + .then(() => undefined), + ]), + new Promise((r) => setTimeout(r, 800)), + ]); + } + } + } catch { + next = "welcome"; + } + + // Abandoned by a newer run (the user switched modes mid-connect) — leave + // all screen/status state to that run. + if (myRun !== runIdRef.current) return; + + setSplashStatus(undefined); + if (error) setInstallError(error); + + const elapsed = Date.now() - startedAt; + const wait = Math.max(0, SPLASH_MIN_MS - elapsed); + if (wait > 0) { + await new Promise((r) => setTimeout(r, wait)); + } + if (myRun !== runIdRef.current) return; + setScreen(next); + + // Lazy deep-verify in the background after the UI is up. If the + // install is broken, surface the warning then — don't block startup. + // + // Skip for remote-mode connections: verifyInstall() probes the LOCAL + // Python + script paths (HERMES_PYTHON / HERMES_SCRIPT in installer.ts), + // which don't exist on machines that only use a remote backend. Without + // this guard the user is bounced back to Welcome with an "installBroken" + // error immediately after a successful remote connect. (#47, #41, #30) + if ((next === "main" || next === "setup") && !isRemote) { + window.hermesAPI.verifyInstall().then((ok) => { + // Files exist (checkInstall passed) but the probe failed. Surface + // a soft warning instead of bouncing to Welcome — see #130. + if (!ok) setVerifyWarning(true); + }); + } + }, []); + + useEffect(() => { + runInstallCheck(); + }, [runInstallCheck]); + + // Track screen views for analytics + useEffect(() => { + captureScreenView(screen); + }, [screen]); + + const handleSplashFinished = useCallback(() => { + /* splash transition is driven by the install check, not a timer */ + }, []); + + function handleInstallComplete(): void { + setInstallError(null); + setScreen("setup"); + } + + function handleInstallFailed(error: string): void { + setInstallError(error); + setScreen("welcome"); + } + + function handleRetryInstall(): void { + setInstallError(null); + setScreen("installing"); + } + + function handleRecheck(): void { + setInstallError(null); + setScreen("splash"); + runInstallCheck(); + } + + async function handleSwitchToLocal(): Promise { + // Tear down any in-flight SSH tunnel so a hung connect attempt doesn't keep + // running (or race the local recheck) after we switch. + await window.hermesAPI.stopSshTunnel().catch(() => undefined); + await window.hermesAPI.setConnectionConfig("local", "", ""); + setConnectionMode("local"); + handleRecheck(); + } + + function handleVerifyReinstall(): void { + setVerifyWarning(false); + setInstallError(null); + setScreen("installing"); + } + + function handleDismissVerifyWarning(): void { + setVerifyWarning(false); + } + + function renderScreen(): React.JSX.Element { + switch (screen) { + case "splash": + return ( + + ); + case "welcome": + return ( + + ); + case "installing": + return ( + setScreen("welcome")} + /> + ); + case "setup": + return ( + setScreen("main")} + verifyWarning={verifyWarning} + onReinstall={handleVerifyReinstall} + onDismissVerifyWarning={handleDismissVerifyWarning} + /> + ); + case "main": + return ( + + ); + } + } + + return ( + + + + + +
+ {isMac &&
} +
{renderScreen()}
+
+ + + + + + + ); +} + +export default App; diff --git a/src/renderer/src/assets/base.css b/src/renderer/src/assets/base.css new file mode 100644 index 0000000..758cf2a --- /dev/null +++ b/src/renderer/src/assets/base.css @@ -0,0 +1,46 @@ +@import "tailwindcss"; + +/* ======================================================================== + Base Reset & Typography + ======================================================================== */ + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +ul { + list-style: none; +} + +body { + font-family: var( + --font-sans, + "Cairo", + "Manrope", + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + Roboto, + Ubuntu, + Cantarell, + "Fira Sans", + "Droid Sans", + "Helvetica Neue", + sans-serif + ); + line-height: 1.6; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + overflow: hidden; + height: 100vh; + user-select: none; +} + +#root { + height: 100vh; +} diff --git a/src/renderer/src/assets/fonts/Cairo-Bold.ttf b/src/renderer/src/assets/fonts/Cairo-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4ef873c248ae1fb7aebcbf2ea66896851d740273 GIT binary patch literal 91664 zcmb@v2YggT+xI^+XLnP95CVY!A%xH&rV&DslCshiM5KvgfY1bjp(xm}qhi+xih_y_ zQBe_55D>e9y%z+G5IQ6TNMZN?ojGTd5V-H>dH?U5{ru)kZ`U=~%v>|)L`We-1cpn9 zi?VaPTk=;F386AT(~E`;y{w}172|{$lqST4oflnpd1kL)F6t;mlP*Gpb{Trv1u3ha zy?><;@>g=X`mz!IM;!g(H^Ssn-2Eob%$;3y)7vA32q({w0aJ44%+{q59>p_w%8Uh* z-QhjD3Go{44OLU~awoOj^2{K@uO>WwDjs1AJgac`#+@*A=G^NyZXdN+h`7<@`SXnY ziMgjYeHkr;XD*mEGxz%0)^Hg_{1(KIo0U5=uj`-@g*0v$?MaxOKWFYglXfKv(KShk zmTGoE-t4KKC3g}(ocKW-r2o#fuKRHc>Gz8UJcX4mW{Ys~IM6*+^JnQ;Lb#*Pd_q#; zAMAT2D5_2zVRbV;R_g&rf*0qEZ_v9;SXQylWLM17H<)MV<%y(C35s%M6W1e@Q-sbv z*tnvMnIP1h8MEd}%DisM)VVw)J?X;K)*!Wsbl8NFu_gzXx(7cu9``DGOANN3@+y%c zp-|1=N)h+QLn3Z4KEc{IdGH9YSSccWRd(ClajI9G5I^WpdBT(vXUbJ_7SZeD`@Sd^ z1#4Fk2`MK&uuXa&g#YA<1x$sWS?D~kcb)~58!m%oWAcoa(U{HT&6u~!&oFg; zl&Oz0^--oiO5Lvtg{8_AJf}`sk#ODx)&N+?K}*wnD5>E6fVF>RS!02&*BvNfD|ZP!Fj`)MKhpomLf=v|JWrk6bBN zNLL8^}-8D_4Sg>4l6)5H`p6}!e z62BhQYXmLM<5?3wP7E_`nU4QN>KP~c(_^}4bgSp!?oi!JbDVyfLi=@$d13q6H^SFYHuxr*Jw-NK#f?&}`xzQ%o>`#JZI?p^Lf?o%Gi)4d=#=L^9tLMMjihu$6fXy}U2 zS3@_3eiqg^EH12bSbA9hupwci!X|{x3cD$6aoF*&GvTS>Q^E_vZwkLB{IT$r;eXX@ zU2k%|)%AAP+h6ZQJ%9bM`qA~<)K9G6vwlwfnf3pzf4u&g1~)cX+~D;Fe>Ny?P!ZvY zXc*BVqJ2b4#Dx(9B1S}vkGMIaFyh&W_apv@*cVaSFt}m!hDi;tZTLjP=NrD!@UMpZ zBV!_mM2?D_7?~e=L*(6&k4CPD+})^Cqx42g8f|M-9@Ql(Cu&&K6;U@veG>I;)E`m% zqDmTPHeT8Ii^iv$bZnB=WKxs6n>^ZNMU&M{);IaE$&Mz!H7Ra#Dmo}SGP-4S$LMa+ z1EMEK7ewD2eQ$JO^lQ-{MSmUrTXa$M(WX|@`c0cPO=vo;>4QzTH$BzNY8Kxtv02Y% z-e$v_UDa%Qv-!<#YxZ)pJu#6nnK4(z+z@kj%%d?YVqT4TH|C?5uVa3T*&VY#rmVSa z9^O2cFv5v`iHx~|o}xQpT*iF+n)b=>;6 zZLJ%%zP|OB@xk#?@p188;xpo>#J?JUrcH30s5WtJy0q!l=GHbR5{4(-m+(Zw^9gSx zY)tqp;fI936AmVvYHPJ^(6)Kov29;#d$L{Uc5~Z(-)?8S1MN<>SM58s&uf2e`9@{ZI~R67+9j<^zb-?%jOsF>%Y$8> z=(3{A?ykXIdw2afF)}eGaX{ijiSHzSn7AYHw+rGf$i3j*q}Zf(NhwKvk_IJ>Ou9em zx1@iQjwgGQA54BK`K9EyleZ*)mHbQcp5(*HWyxn!LQ)#1^h=qUvLNNolvh)>r5s7A zNcE&frpBgrOifGen>sjkZ0h9Hg4EkmA4z>CEh?>5TIaN$Y2LKqX%o^4(r!+>KW$ms z3u*79eUkQF+OD)iX{WmdcWc`1+HQZP=XDp|!@D=_-lltE_nzIo-Cxh>l#!m1nQ=+R z*oDjgCGrgMkdbQWPy*}#o zO|L(C?dw(ATlH?(yLIp6-WT>B*n3RxX}uTpzNh!H-Y@iir}u}wcl7?VcX96%7rHKt zx^Vb~4_)}wg-82j^?9>zY~N0Od-ToeduiV*`_AZlecwC!KGt_tzmR?_`n}X|UB9jU zw)gw1e~bQ;`>*W(X8+In|CJe(*&s7IvsGsM%$b>6GRw1MR!COEte#mzvhK_(%-WV6 zp4~3{>g*S?H{>+R8I^N&&a|9@oEviP$hkkKFlR;1%QmA^|)H~KY(L2LC&wI1?Ztp|hW!|s6e_rIisNY3nF1r7suP^$0 zK+=F~%i(6fsbaDTSFTZ%g#m`>6@sj?RJb%eYLwgN!`lqMVEBOHR}Y^v{DI*shrd01`|!P&iOYsx zcJpNqT(5Ua<8EfQVYvn@5T#cL=IIJyPa_j?1Tk+#FhlhaH_K$% zUG`x$c(Z&&`c-q)U2RgIslTkPo_e0f%nq$QJv}2mqnRVF^(^q*?77Rc*z>SwspnbG zD$gsPH$3lqHhVtuZ1?==DUZD~_SM+6v7aDcN@L68qT*uWV&mfD+QlWs^^D7on;o|x z?w+_ct>as_i&ycU_y+Nj@r~nS;$!1G#}A0VIzF%MmnS!${HXHM$}yGGDrZ*SRC!P3 zeUAV&6WEr{Z-jjc~#d`U0Zcs)eTj5SKU|jVAUg4k5v^` z`OXBNi8vE;CgDt%GkwpL_-^yv;k(PX*tf*@fbS9CW4@)n<-V1^Rlb*ft9@&Hulv^e z*7-L0Hu<*tKK6a?+wS|;_oMGu-=Dr+z9L_-?~w0^@0hQOosr(d#j%R$DOSof*+cec z#(qRrsHXJSM)j%smHrBM`m434AN_T;XZnBauMg?3?>)z27ghIHN$lykMsZE!TExYf z{_0`+Yi``4v-+#yS^YJsy1zzMPN}@6@&>2B9;|$n{(7nMRr>4A$`2}wE6-GARZXgz zQZ=(`PSt{{yQ=Q3y1(jS(_fWm+-K^Yi9XZ%Ovf{QYW3H>^w&f5SE27o-!s1Fd@ok_ z*IT~zzW05becODW`o8pi?fc&Mv+sA`PTwBiUf%)JUnPFO)e;75ORrV`$y9CiEy5Ts z#F>kPsM=L^bCuZOw-6O?RjjCZtzu)vhKjc74dFtxcXc?fGcW;yoAaX}G81?o)f(?|yanC%caB+PiBfJI;@H{j}?= zU0ZfNz3Ubs{^}GyJA8)wLpvS&*p2QF-5+R|`;0a{jluWYhR=7-Gavht?q%+k?iKE5 zY(FPtylWu4fyGv$x{J2n$Y6`931@#$$ZAdN1pdpP`dEERFauI*4Z;BVttwHc*@Hxo z+k9&g<{b`}*x6W%t@pLf+GD%VHLYI>{T=)n2(xxtyKwKaitK%O!2j&0<+R-PwLTAo zTHCBotuL*w9sljtx8(J`^)sd}X|Gjm9pZV&I$>3zbqMU`iEdT6gv;X!cSX9I26EF+ zS0q6D;cDWFamBjgUF`y)+V1M)N@NY2?&|64BG0xI<;E;u2!no)e5ynJ*%EmyVXv$OTDPrEwUSGAR3Eiq7A#Kj-rc57a5G> zzM>!dis9@DE*E3Ocy=**=P*yq7dNPP)oW^lDpqe5k+$C-kcZmDMo#GyL8;_vl zcv3tqo)K?}*Tq`#CcD;8#CGvHdywzMSL!eEjW{UwiT&b$I3s=(e&&h0nLTc2Z@C!x z_mF5L9%VjxOf(b^i)ir#JJF@0wRl!E7f*>+Vugqo&xsc7YTB`GyA;3?r$A?#MeZ3v4MH$eRg=8#D!wB=q)}FeZ&^_VcXb2eax=# zBX&)nii^e9Vu1L99q0~msra5f=P&G#e`7!Us~9W(U@y6ooz-9LF#lu^R>ThMA91zV z!+!LHxJDdi7h23dtyD~BPd-DGutz&Bt`|P`iZ@EdJm?ZPNsArzy`rADpS|w4;wtes zySsm_E>>qN#)`6&cBW1l`1IvW;vnFJLb1CHpcvneqlS828JE<>T^c`KEkFzH2lNE~9e@LhFF00ewUT+J#Tm zg{qHwioM|ibxJmr&&n6%8}cLhiF$(FXN9;{oML}kE*2s_7K!8P1GQPb$6T~Yy|2Dg z->X;D5%q`qN9~cZGETOVU6}d1$^to8&S3^im)+!DaBF951=1;1pP=MT9U_PylgGE%5CyP`HPBU#>-GWzF-ExooM;6Jw za-aNFwU$TZF@=Ig)mITJMzxR?@{sbVD0x&KS5jH3fojM~qou5rhgFbjEH}x`@&g$o zTgc`zLAH}^(QkE<9npKGus+FC&`I&vYaZX$mw#1yoMe1Y?&`_WOZ|syiMLAZ&*c|pb&_1-TQ&{AshMq1i!SJVQ)3=A@Z$KKOB9pYKYZ;LH zFr$bF`Z(yhpgV$Q1YLzbVMdVhoZxqf`y@Jv(Tw4E(&%(r*Bc?+R3hLc1BJ{ ziTWxX-S7a_6LXX5fw@6-!}O}|n1yKkm0V9LEs&!T==M@@4^U~C8&oo;SEXVW){4=^ z#6b5*SXUjUF2G!0r_{D4R!7WDssrW*g(jO6?Jx^fd(8E;syFjc5>hb%dEQh+s(Ac2 zsW{9H@>|SE`HPMzzs8J^+cE3QFEPXA=a`}A$)OGYn^bGe4e~e4NX{s94&Pu#$Q_vV zk##Ueye< zP&LO~&kT}=wC@1TO)o2GPMS!}O)3I&gF^pLnsChJDipI&)yF(HWeC0lR3pqysv+hE z6@=+k^)Q#KFw8>L0JBalWfgt{6nbpZA(ZHw3QVu`VHU!+=cYJ=-vH&t+@vhb4YCr` zEB%;-iV<;c?PLkQ1LSGUP4XD#26+h6D^FrBmnSd_6ua>oApgbOB#SUN$X%FT zxd*dQ{)1UJ#UJ<$kbh%tk~=Xs$lo!&@=we{`4?v06yM`FK>m!mN&bYnL4Jqnl|Nt> z${#V;Gp1dt7pDqZ4nKpd5i@9WW~jDE{GrJA%aHD)7}r-I*&ig<6U>wE$q$U2G4g=% zYCm0^Le%6VrIw)q$@0D!D?{P+`tW|FjAC|)Wp3%fJeb7%m%)6}PiD$&>NbGA+z@7# z;mjywnMo!vgG^`UD3J5zLgtR!m?`gN-gtx-EN8ZOPQJ)Y`MO*y-;(PXUmIxaR{62~ zRDQwCv4a`pH~FhPtY9$Bw6?v(d9tBqx> zH}neP6;>*5u=03YuRU11Y|$$UX1Xt#@xGSd%3tImJ$uU%c>?)*nwh&w`pjJJVg?UZ zp(@X9l+HDUM5?5<*26V#UJFN?OaaWzG|GJ|(x{=N{}UItySV4j}H{Co}b@*H^` z^YZPiLhggok3#7unTem5FR=<~t!XYltVPjbzjDy`OR`0`L;c8@77(l+5P#SdeiB} z>RL+C$A1#Zs%OM@%$HjCqEC(z4PSC3jK5Ul)l}R%tc3~JJgd(lb=WjjVB$(O$N1Wu z?(yrLj8toC`9+a`fZz2wD)O2bm#eFsvUEyL(KrjcjB|t$#I@ALYN#4kok}s^yO=j8 zveNw*Ul%Lr39O-uYQ~z36k#%$we@z^=r4;x_7erHtJ|5HyA(1}mDiQ>7SfoLG32-v zWYJ>QxX5?bxX5?T*O1tpupz4zGLHIrOw3@ERZ1b7jgO8KtdP6pZu{sQf)%p4+DDfX zY$1=UQ|bJJ6%xNXjxIe|A?vGsh)>-p%L-z(;mp1wT(`uE&@nBgOR?NKAIs8pusphN zbd4>&A_+5Rh81;J?(Cf!t4ZYazl1eQglZ7KFEeiE^I|b!OUN_uY>)eYgK*+a6CKaN zQ~0l<1w4_K8ck)0|DX)=|G=}@_yy^wfsf}8va4taq#8)t0i@Xj{sCo(MxFeA%5M3;h1FKH)L;dbF1Ltw=L4&` z1lCq9Xh(vvv!5XU{}FPeXvS)+%{k~Ox~q=RzF26nIVGU0iE~x5i8oVw)|hg8cV!5^3iA|668e6oG6k& zLl7(f5N*x}HH&ytM3kHcegxVMpi|0!g{E0JeMQ#YYu*mXr4Hvjvyd&* zK<($X{?dTkZHW%U6*VP+hlctLWe=(tSbrCH_No-Bt$?WeoxGghzooZq}I{ zxD(PrEqB^g$L(q^(p_mHT`ePgKKcI-Zi_y$)&b`kNC)p5dIg^9J@R{;`b@z8F3PX# zt|0suu#vF8>9?z)!-cq);r^f|es#E}6Li(?06*w-tPwh>YryN2l|Z<5PXe?@UUjb9 z>O_4m27_wF*XaZ4F2b(e&eK{?+!ulKG-YdkTF>0|q6n?#w>shKBzfriorL%QX0@Q( z`!?<$z<+yw=s&1{D+9W3t465na_kG7^gj^?xCY}_T#ZoeSM6Ub?SJxj9VCx3|3S~6 zq66xT4uNO2e=dG^g23}n5lXz!KzQI;EBvf{$j^@d9Ob+UoTsNLdG-c@=cCx)1vSr5 z+@XQ^f#?4i-{~XzDwMto)%|$BzBK;2uLAw7`%(87eR)=2Y4?A~!+n5pdt7ut{}{u{ zFoyNPFvs?{ibk#{c{L zIicayK>u+Pau)O*GOcH8SPRYMa`Y&tXGl;XEej3#YI`m7;)@))_BK6xDfLi+X!k>(o8^BQr9Y|UKQ zS~O$6jWToYCE`MPF*^Q}cbqJDO!Uh`L0OhBq0%g z=*W6*ko6C7)0H?!#IvO4k{C zD(DBg0Uh4Q!3dsNU?AuVbUgj+4?3zLrj44PE(cveTM&houeF-Mny8h@s}1#SYAu9k z;WcOw>!2>3w7Um5pTG9&aBi6YG}_$rfE|zVH~U6TPHE>T(STcz!(=zs7>Uq<(@w_2 zP=iF_k;6nEIoMw%dyD$e@OgE)*ep|VM~h2I6HUC%@+bdcHBKy$iT)DuaFM2`lP1*g zO1Wspu1|;q{+}>iA_W<(*XepKuKS$z5I?<>HGlr)oI9Q8kNd*hR2E-I#d+8S@tU-x zOH7n*&X^vO9&%_0b^VOzAQ{YQ(0;TVq4Z83I*xFC_9W|xuh7yo5FOEmo<>{KkUeK- z_U2LOa<_8>bO$Ft72+G&L`KV|qN{8s5?QlefQF%kY{>~vl1N6k(@MsP$?$B7_*TYq zo;5}MfZilQJS^LC+O$@rat4&f=xE0|O$SCrM|QcD=n*=zYV5+vNTR%ebHN{FlK4qX z_xB9NA~3$Zkp`JITPA;PJc4R zESbe=(@L2wayVu5u}#lMW8)PUi36MrNwnaz(K`)fFFi*N64#=~8Nw;vAW@D!=Mp)T zRrxU1fkQasnk$EMCV8EhXY^v1i;K}xjben3h8xD9ueySBu3=Dp9Oq0|iRo_SLi*99sTqtkgq-~ryBySY&%bUcN@@BD5-eOJ{ zpOTBvJ>7<0=MFSbccI-`j2`My0(|l+q{Ct?Nziluc3E)1I^o;=-%E&`}Pj{w|CLNy@yt3BYL^K^-QgmcxXvt2YCo4x&R*A0cjP#-BL(R$Qm!({2`#k9T zg3sKGWUj*l0k*X0ow8m)BqS2!@LzC7VU0O@DX|2$wwN~+}jY?2$RXf#Q zbx<8uCxukxPG}-Go|CxmoT5@yn(C&~?ejR*Q}t54&6#0e)lcga@7PiQB6{LYOQQf3&R=03h^;UJ8KG{}x zs=L(PYB4wS@8#Tni8)z(kUP}+bdi%qbHexpC#uWTljMe8b{|@Ku?{ZfE9;crA>{FkDZs7#|L$!@N0w1eS zI7j`ATLNFGFV$CSJ2PdJXpH_inmunb)-KJNZ+38^^bP0p`qcCX&g*~TX2CD&SM?ir z3jR=ks=v5P@VDB<`Sb~W#?Re?J)El+sed`)-^VS1{px@^s1B*aoVXt4B>y<~5=zwx zv~6YTB)X#0=0vyVj=A98xYmO?r@qYe4a}+jtH|KznNOb+A93zpkJ%uSTM7~AoZjNh zJd^XdaB-Emn$z)qoQr?L`T09yy?B>939H3sPR!k`8(y?RxaSbUdHr3S``^o{|LtNt zC*QY;ZD`-_;A}mJ*|rc3U43zsnR^3s+=HCqx8jDwW1Q~4Byzds(4V^k%enhrkNX14 z#0%)>mZD4iRJ<3s3vV^zJiM{h#EQ0>TFp2eZ_dehODmQW@;Ixt6>qh%60EjXJFC6b z!Rlyr;sm`5_bC1pS)8r^Eq>*`#2@Gxe`5`_Q|z+3T8Z4$PckQgspc#&-Rf>-SUouJ z>t*$}F0}eseXV}ndd~FppHPrDKQE~N%-o3u`Llxh=TFI>m3K{O|AJ|=rsPhXHTu+Y4&XZ$2LvyO51?4ye z(7ajGl9E$WLNBV0?iw&5w;*glO&rfayPgA`YzErdcm~d$He*s=*r1x2 zc5bQZo*|~%o*||xj&G*t65IEZTE1!Bteja>JVQ+h^@dKJN6QQ5&76@tZ*I^~yS%WW zb7thunQEsU?mTK`(JkF`neh#~tWHf*k~3T*XpCn>t?20~ramdj{XLi4rCxqksh2yg zyxeZ3`*KYU&*i4Ao>6u|qiPBY88vBIUP0cRX>&ZIrWEAP&kGw<6X+RZygXw~ve2>B zeXOgHoRgVkKfM{AT)T^Nox*b+R>-Ykh1@*5?1?qmhfb`{&@;(2(UWKL@#Gm-XkK-A zP@a=>p2GuEYO=BElad-br8>H6s^)>IHE}%C>Yz!>oq)XJh;ch4NV zo95K1NlJ1L*IdmDb8AIUPqk~FoavcompbpPQs+6XHPq^#sUs)nWOcKj+1>4@w@1)C zhgaqqUYTd}%5`={uB)j?$aU4ca-Gd93u*#A3v6ClXp)64tfqyjVtPul^E9P;b24%q zw`l_IG{FGI%`p!kQLtn9o2!v=yV(yH& z)uH-IMs=um=uoFXQ?NIuhhc7>P6c{61$H+Trvi3EGP}`zv!>y;(`Dv3?wmja`kU~a z9_h|AkiSWvl%8V9LOFqWSx!9TpOoI+$uHe0FFoK6LU?of+q{*Y63Ex7e}AX`{R8zkXd5>lcaRJpNVhkh1)JKGsEeRREJ?Q1L>UlW;*pv4Y-~9 zW;*rFbn2VxFj%J3-CaS~4mnv)`B_eRS%LDM^0J(KvI6cv z`8NG>vYhg>obs~*kJBpyl=;OG?j5u}jKIsYNUtHN?UZC^jiQ({6C4E$Ye6p?zR1rZ~J8 z=%}nzC;Qae)CsiKWQKrnddC(d^sbYM*YqlGr)^%RH@!}LuhW|;PA_IS@iLq~2n=Xv z0AzZd%6c8@dY$qeM$fdVo|JAgx;Hb^5y)u{b-gyj=Xjm`y-weIo%ZN?4ndvc4b<1+ z0&jYQ8M!mZ=g!ERJSvyzIk&*X%SyN7WjO;W%Na;n>2@b)rF)xB$eTKTLEh8>xic5$ z=1$0;pO;%u-I3m`G@CuMGSZ{!6ksCNpH1q5ys1u_2HLqWmpRPN!?`n-wTn5gZ|&;Y<0m^MGjvYwB&Yux)L2ba6J*!L z1l6imgpR7+fxc^8*Q0h}_8`i(mv`RmB%437Q&Jk~RCVg!^gMpGGE26(Gdm?KbW%;t zYpiz7wcDwAjkQ)TNj4*8r`Wumon(*y?3A=dI)2?MoyV^xvn*#S$;#;7NRQ#ViO=I# zE3qT-vTRA`&9av?JRJ#=;cccHQa4wVLz7xVy_S@SIls4FzDCy$swGIy@~=hb=C$M3 z^4EFA)()#>cce^wEwA&)q`+d@o8`>hScG_6eOkwII*-3z?ihufT+cOrAF1i8p83^~Ni7 z4$7KYwl!}WU-7Ub&YI?AXqTZcrJFL0MVFy1P8r&2mtos<877`C!^E@8Fjl(^6Va5R zZJHt}Ng0L$JWY@BG%E+5rpI_1uHb2UjHl@_o`wQEO^@+36i7+3XSJlHOq(J}_SOKm zlb=1i5zoo5yOWwa#z)2BhD5*=Blz-hUC-<{GotTl;G3U*8;??$YV%hv} zZxE8wlgzp(DLvU456R9N)n3;S?o4Z`&IFxmhbP&KNcg?KD`#Foz9C^svdzq?_JTDj z)mc%d+Pf(V=@xWd&0>mOtTX7kIn3Y9kT@y5TemPXNV}!6ko4BFXVtRj)Us#R*t?}T z_HN{pRAWyw4Iw|Lp=nOTtNl#_b$NCNbqmxjxt?8@WSurK*~wA60=3ch>{|YTnrZ() z?Xg$a277hO4U-e*h=pz$;Q?(*;>6t9^)$yBt*CZ|7+s378Fh-bMbuX9Xpj0e$`=#U zD29y9=z_E@SSxglm(l5HTd1uQ(pJ;_6o+IfnVDAh5S#YSMj|OSB|Us%{;XMf6X#B2 zo|+MDt1=TahxgAKoHHVEer`ek8FQ18ThvlB!Cr zjX8BzX!Gq`#5%n$U!THqu!Lzpr3lKM)o4?MH#kuZmoM`MiwEd;bhszX zjc9$}cP}Rf&3QZKYtC7>aelF$bI{f3_n$$Z{|ILTcX7_QkhjTZapF0F)4Y-TJwnbh z`*0E}c@Hud^8@t<=5)0MbCJ~x^AYO?ZRhr`HdkXVw8m(=HP`rDhq*+RV&1N9!hAvL zyT!M2uStprtRIc3?=e4M4Z?iOdIR%5OXu?dcSj_r|1V>{z@0}a)>w}kGYE5)rEg4+ zvQ`<>qGh51r}GVXpR@seRlfop0eb*%zt-nX)%qWU&5m8WHQoYiz)J8Wc)-D8p0_#n z8=dETp0mMp%KZQP-Jk$nG!+-~lbqs&L#H8}4EGZ~IhC$?Lxz6xe?*Mi{kruJ_y%ax z-x{;CT#LER_crDl->aCb{CzM-8J|)9!Q?3F2MbY;_i*bS14ZCh@F{p7ybSmo^8GrWg4iMLrBtk0!qb6Por6U}j)dJf?< zG?TX$Gjxsgj}z5cRiCrk6P)Yrl0WnI!!}NoU*;rwG3VQ}cnjnb-VN!=os_+dze_l; z&*bDkQopek3>{R3D-Zv(-rx#e%DC&Hy6aH?)7n(LW#CHJc2_#L$EACqwz~)Fo8;Ut z*%kD9&~|K5>gS-(gVtjURojC$2k{Lp-qya{xWBj71#@5Dy3d+!V(tmqZhdJ&ehvBB z+Da*nb%;96U9&ra_QCMyZsL7Q7d)V|ECM0qqVr5pUP5?7+H)g0N%@_R zw*iodp`IDsW+6}RujrgF#8GEdW_ZfGT zm=!ddIYh^t6f~B1#Wf9eD|mOpb;zxIIYvaeJuY1{`rB3II;lCrl)J@>w|$}Abe*U1 zz0dfP%Hw1HF{!v&Ia}wf!^vN#()llOt-?l3*Nd(P?3k|Qu7}9Kt1pfGzBlb!YWE}k zbD59#%jnB*bXmkuoTkTkmeO7Y^&&h^nx47G2bJJ|9Zr9_25Db7hPlbwVVm%(U4u}U zmVvqk34FQ0ZeffoO1IFroA_G-y-v$tG-dx|%GP1`nJ~?hO-v0ai(8zUHVb`Em>Lj^ zJ0P0cdiD*4C!{!O-Gp1u4x!8r+MR{leqU6lJ?SgNUBkmCttWBU@bF1L_28buZRFiv z+f{oj+*w61R)dasZWGG$3=)2mXEt9cndG_3U^GvSNuJ>bL$GUj9rWW%FdAu|M1y{w z4!ApDk2mP&X@R?ir->&5gjUCMkp{SZ?$ZV(*fkE}*4T?(W0xn<{X6a--CrAg?%w9s zsBv$?y{VRaJ?{1HwZzw0ja_4v`x%3!JT)ExOTb<3MFtCbYRm<*+*92XcxsGuk2Dy@ zc+kkktV7GDuSCzZI!Aa~I$6Nu|r0`(@@yjpeRFgNLwd+>2Y|4(u8?W7oLeRbViKr^aObG_H1yH5kE{ zGc*S99Sx0uyEpc9ki@q(G!pmpY^`fa1d9N;A-pl(}Qa)hp4`{pCWAV11 z9K`!oI=;@Khbec1Z>kREK0cwo3EGrNnD>~pixsP5*~51WW;^54&Xm~0*n1fJFy7tP ztzi9ubbJYOnEC~?r-{?k#OdR^5uZNVF4k#(u@3nsPW3oEaJu^<5+>kPM<`nGOl;cd= zai-2MX*>S9{@sl^%$P%s>9ze${O%^7Va7hp*n9h~B-K!3&op+gvA<$cePGN&6aN+C zzuMS8F!pbCC^wFDx!)T9Z`GyvjMjFmzqZSry0+FBQ|Fx~&Q6`ynr7mR(RT5H4i&fg zSQUv+E#_IV*_ftu<^k<*N)$g>UhF@Z&=tB|aa89cR+xN_TZ$4JT5e32Da)m2K(bLR6QYM)A38d9K3jJkQ z!F}Fn?l0>vyEfp)=x2O=hx^9dhn3u$6_VWz@0AIe!m|s{c0A*F!q40d7P3B|UEDk7 zV^WlMk|+BfzFwo<0Z8uo3T~MRZk821mud1tD=rN1bozf7y-8ll&5AL~_u9L5)N z^mj@4^B?k;>nFDP{+s;fYhAY6_-(@fL*T@z2|3&5ha!Hy<5m05&rY0o3(xxVm-;LG z?Bf0N{2MX9_8;)`SLn|C|0({w@ApytQcmDdExgM``ct>UH)- z+!W;==6mX6`#U3|p}t+nEl}2RCZ1H!tLKp~HL;bxON!4%-n9zmM(HLI!mZK|uy0nI zv2Q^W;!<1HR^jHB>4(_2vCnhs+orq&$+t}S>aZ?D?~m%4e5I*{og-hZCdXitW01)) z*yL!L99$nsC#3wOq*^>g&0kJzCERyw@JgE%_7NsQeaP z&&%-GB7T$kNzsJ1zQhe$`~Ix{UY31t*1j)m-<174@EsO<@I`;Qdd>fvTE`m%>-|M) zgMX*m;Xh7KzUZ&Q=P*9|h_}iAv)YX7BmWQTWB)EI*>|!F6GxI4UrQ!z1AfK$6%qSw zf2Ded_t294`zUdrh3ulwCGpmg_j=N9@E@v*hv9>d{l62w$-jxZ{zyyVCI1fcvB<~L^+M&B=HE$dzL0_KD7K@# zEuQS(Pfq*sslumKbO~QCDxArfGwP=xP$p`xb&4{ntO<%XR(& zG0DIBFW^`0ahApJ^J_UL7&ls0YTFtA8lA@PGpEa5`JpnFVXL$5L4$`L7hzsJ^pe1 z;os^1E06;|)w!8GitG^51SHpSTW*-pYI#zV{y*9LTTP0JKtEB^JO3%}|BZhQHEZV* zprV$Clx#Qx8tD0oeulTrpP`-ZFQ2AHz}E?Lq^a$yYx+NSVwD6!{O<;Ax`Y~gZJSdM zQzv3o^Qq%sRzr(GnEymg`hZ`Jk8N|>Sm9?rA=iq4g!fnaUo}29XP!;xGI-GLl~bBy z0`cJM>apN(4K1|i5&BPa&|Z4Wq#*8@Kw3KolZ%s^?Ss_g&x!B6yJdU~|JUYgJHBoD z-}nFH->SJ<_p|?V%49rXd!Kjgg@1#8J?2lwXCqwyt$&k$4^mM0fAN3l|IwzhlT&pc z+isKQn_70e4_+j#Jv;6WwBKJG=%Jd}b#4AHO@5~}l}z9G{BH!}K!;ki3;3G&^bmb_ z^en&M@iQZi+1PN8|6~6Nr{7KlIMbAKR{z${!?xS`26!Tnt6e`#hxh8HgOW9zeA1?? z{}mmJKK;STxk&pE22IVn#ia1>H+--LDTpj5L{sdzkwltvs=3bLgung!?c4}EY~mjc zlItpT5!vI0JVr=d-)7HWSZA?=Y-?DW=0$W5CIs;YZj%VOgf z$jhWXi?Yn9<}WZVNI^>i@dK?3xC2jzwgD+?*QC}e&mJ4PW&vBE9y+C++Rn@WI{p2+ zY0m~i-VKEL*K!sDJ=jGEZNq%Sf0#AjN7U~)eZAfPiT_J`K67$nL_0QJE_`6Sv|ZZ_ zO8T4ex6?QS-+t z%K7tuWz)?6DdWx_iN6PU)&G}XTL)s&21BhHx3>9r*lt5Hzwucci0R)K;0MiDHK_v< z{j9tLa{N@a96tkfwd}NKDKl#9vhXW`64ep`iC?>x#m^-Di#bKVQt+esFB9wFlf=BUki(m3{z5vd|-% z->9!MYv~?$)@n87*Q7V8t4DAk1|`(+eyx%N;s5FB|D|q-e|ue@{}=AF`}sUMUT~J5 zc11Wo9jikkt8F#08&~_C$5K5L)JV6_bu?$>RMX@S0ELe={~)UTH3{C9CH8>iPvZ%N{MZ>;G(ZSgTCK9qe-I z`~~=@hEmm|(5z+ZM91krqSN?)t{W0qN7yr{4h=}HfP^?FMX~OQ0JX3=yj)#_>UkzG zuFsp3KIf9WNy+w#_bTg&1il>HT8!Ww$Dw@lY!=@P*8l5f8Ygp)<9dR#q6g5atmm!A z4ZNlJ8gD7?LBI1ayXs%iE>-YFgDU9~huBR&C(6v;zTE8XD~yJrO7Ea$u->clhP&d; zZ~YBbH|5sDtj|w>XH|c-jW07{PvCUj;;nbRZ%yZ$O3k@-q0@M&rNvv^mth~l&k~n& zJ}PAr@!936muDERv{_sldb5?f_TIKd*c7V zFNib2AIbA4e$nD*-sKEJ_wYBZ+{LdRefJOV*#66}DQD=1(I_3^=Q3}dDsh}&1HM{u z0)O4JQS>ZSlISz}a+TKLG}P|^bLy=1GYw5&$C$p3G5VQ?MnBWWXj2l5Hl>ZxrX(0` zN-LvHi8I=iRz{l=XS6BtMw`;YXj59#jsf&)82uYgeU+h27`@t*9&84`=<~l0yq&9Q z(;C|Jz^^BFVN7G8Bq76bd&KYHBFd)KDnIP^giiP(4GTW`;tRp-??2 zbRX1O0-dyG@Bz-6HJ$1kI<tJZs z+0d+wp;;&NF)8#s|4pyg>0V#f`YmxwxmdXF}lDV`q;|=67>1!fO9|j7xte zeMb6N=Qkp~PkK^%e0o%R{dCdo_io#}_373k?e(-psh_4T!d%4vhB@cgYhm(|r1w)N zCoM{vZhjq-LIb}GG7>*Ezom(focrs%p>ulYaQoLWr9+GMZ#loY?Jv>4USGC@s@w}?9# zcPwsO-14|VacOahaUELS1#WD;u2mls%fyW>j(z{E-;&rRvG2Dlj7^VqwcOcqWy{;l zuV2fUz_0m<=HEB}IOb+BI;KzUA9XK`eLto}GoSWt+AsP@^mhB#C>` zf}nv!6f|hz+^B5 zOa;@xbZ`xr0cL_(AfG+UZ2J0IPyptDxnMpzq3hUvT@Mz3g>Cp^5L|3aNm4p$p_h!JPt1wLd9j&eKr022JzRziEr}%9NxnIHoW)_ zys`m4L5nYb0>4wD=H~BAN*yc6)NVX|m`{H5*jLU+1AtZ!&Ob)n@syNr_@T&*4&8ry ziFd$>Q_QH&Cnl$A?8n3XUqI*6roLX?I_B+pU_M-ME4e%f$2|_$6w+7A7-6dzSF4%H z-(V!!BdP~=52Nl0)IEi|*Qf3WsQUrxew>(+ehFtUq({trYX2b5$649hIhK)I5V=J- zBc%(uwIR1?a%)R&QRH@#+)kOcd|^_(LI1qPEd35`(Bpr*;~Q?$zC)T7lv=_FD`A9{ zFv3b0VI_>P5=K}FBdmlGR>BA?VT6^CLkT0Sgz<2K@o<3gaDee}fbnpE@o<3tDP_ZO5bEmNlk}wSE62n?FjB#F3OtQ@ny;O~eMjKFgK*zLxbGm`cM$G72=^U?`wqf=2jRYh zaNj|=?;zZF5bmph`zqkR3b?NV?yG?Nm{S;6^T2$#`WEVTD{*fFw}U&to!~BTH&_hr z0r!IYz!Gpjco2#|M6W#z9s!Sn$H3#XN00p{kPAz}GV1*#{!fAB;A!v-SOHdoXTfve zdD7TYGa4?8gbNel!nSZ>Gq|uV(x5$D*aI#sfeTCE!VOx|g~f1TFdcKTRk-g$9Vy6Am)L5VCRl?t)NQ2WRbUYfKeDax%dmhjExOLm?n8%?(18T+B zXzBR_%;UeX?)Z##$7ifNK4Zmngw(%~`UoqbU95z5u@c(FN@y23?O;8!k@d(%)*~BP zk8ET;vJpz?RYxhkev;lUq1Qs_u{QM9ad_Q=*DZQN^X(D%wgkQ{fp1IbkrMb(ucr?< zlJE#Tcmy6i0uLUc)d%6f{qWy@_-{Y_x1ay1B>nu~3uHJO`0H2a!An>G7Taef}f-TTnCqX&&8)q4Gme_+jt} zcoaMa9;a1>aKRJQWGPsN`$_zt0?WbE;2E$2tOU=3=fEmz`vU1+1TTS?!D{BgH(05x zWj=TlIrcW+XM2a0>IU4l>_3WxIEsWgii9|dggAt07v^(qF&fze zSAwg+cx2Yq{`ZiZ?;$teGjcNzNirEs0aL*=FdbY2W`LPs7RYB;H5Tt!H( zA|zK4lB)>GRfOa!;%zm(+tM@V`PNK&=lCyUq=+$6Eux@d_)|)!>_M8V}1{G`v?3B_R{bB z@Gl1Y!2xg(90G^I5&EuXy;a1Fz85LD7b(bpp#=7NtM00QKT`1+^IZ}1T@mwL5%XOU zQnHx!Rx#_XVySgF^^rG`&aC|l-1iII_X`|#3eMTb?7Rog*#qb7fphl2C41=Y7W8zY z*^jeVAnhUIpCCR`1KW434o*_9J?xOj`+vo!2=3J3UppZus2Mv8Li8M8p2gw+ z!+WQZy;ab-9D0>QpGviYyMr%M{u=*L^%`Zb^Oul&3H2zW9w#}GX+Zf2Ae~dW?!Zfq z;~6PegIq8X=u+oH+3Q$AT@Mz3g!Xf7MGG>)BW|cB#l`>|PGG>)BW|cB#l`=TJ3{Ed&Rw<*$ z^t!VGPV~WvWy~UFXhMVOwUg>~dTuRuKHmiE{ijUtZQtnqp)v?kI{ZA3|IDPvkeNsjHD@j#FyDJ?^R#LA@Czmqn zQUV2!liLY$J4xAP>`81L2J0dOXvqV|RLJJhywU2DxA& z$TutCVro6o}PvSPQwAG;egX{fYv{qrU&#+q#O>gdHPBG zo&w9k)8HAf0;~kjg6F_0>hJ>37r{&5W$+pJ9DD)31Yd#eUy6H{Ma{?_c^2UxaKRvPg?TmF|YZlq`JK78_PQV zdDDgvQi61;fR@{x7>B9X$yz0_JLKEB!#Sb52a1$Jky8E-?i?sm3Pnnxh_g#!P5lJ+ zrC=F&5jfg<7Rhs}yRLLakD$RSLCAp;jr>D&@Ry2^1@ZVty#*=S#ek zp_m_v`JtGf6WcMI{*8lbrBJO@tr82=i{ci>^nCRiZ$G{6-wL(1LanW8omj5ci=}FV zDCAyzUv9-ug<4-J^kz`(D}~;SyYP3Y&w2lMyU12M#BAQjTmThIp<*d>LZRPBzv{c! zaq>N(Q&PKAw87?u zgc^kkU=ZA=?XJI|g(Q}i(uKPdaeUR3c>m464572L?$@_Qm)~kYlN%1!+j+yg} za+7L2x4!aOiOi;Ux()OFYoU6T$>k)qtwiE;mO^gF$n6BREg{Fh$?+&T9wo<8dR@c4fadO=0^uZBoTtbbHnHo1BH$7|V+)7Q`^+}^{x1B?YX|vtl8p+2!UQ!=IpSXoL zAzo%z*nwHB3OU#VIrt~D(ivu=UpPB$hP?XWKz8*+Zt?#Tuz$u%@Fzy; z@9b>;gxb4UYwl*JTLyhja<){-X;yTAEQ;#V+Nk)p^ZH0IZ$99Y#~`~ z+KnL3te?-%$ZW=$B5>w3M(Myx&4C>|;XS_zPMiiOPT?uV{7z~$$X^fdvcPXgd*n+H z2TsW0Q$PzbdvLl4MMlx1#Gn{Zj3_3QSd=&vGm6-mJ^+o?4-3nqm4*=^qW#vX zhz#XpZVkd87=%AC2!CJ@{=gvofkF5KgYXAHF_gcf`~&4hl$X)>QT%-j6hxdF9@=a0 z&|bqlI{<3F4qN{^Z2jx-#$JOr_8RQ_JFxGcLe}4bedih*_Iwcbd=NYn_JlMm?QkE* zYMf7 zhEk4Ffl`SQKoLNKKIrxAt1R~1p}Q5sMhQJPSiQCd)1QQA-@qD(@W zg)$puF3LQVi%>2`nGbJi0m?#@OHdY}EJj&^u}0@Eh#3ALqD03Lg+Goc{BcC#Dc9s} zaPXgFJR~9O(JPu0+-v#>vV_?UJEFkrQFJF!=yVLuZGrogn{WzV&nb94r{MLRg4c5j zGIt6xcM38`k}(Lm`v5b!ACf^{0r?Y0AbY1Ed#9u)M~0_Dx{%s?6*W#_w1a5p6Rs&K zf{B~9NYRB?fbWOE^{1-8dYVRx89jtJ(kb2h`1?3$GXM%83XYaOf>kG<;6GYl z!XH3>4(N0edc?r979N2f`8odmOW2*qG1HDitNsP8S=6YMQ^mYo~_TlYx?d>$ovFEYc-G`O#U$Ls)j}~Zu{x`t>Frs+-(0>V92%&{0wBSVx zWr)n3g6{ewB51E5f<}AW@1e!l!Ijq_L+?O_-ULUUk^TT0V?Q2ven`2qBlq*(Ebx6fAN zEYNugm>DOanO}xx{x7tq6;ydwrOL;!S{7K}B#g|8l8j`_EvkLo@^`4HtW$`O>Kc<&g>NAMv& z#_vy1K1C6E7au?u9)K=909|+hx)8bJs5^|m6_k;Y1CZeZ+~(b{GlH8(VRQctn+u%* z+xIwZ;cxgi8vDr(LcRy&ijjVtDDH>d6=##>{X=N^VPru+ z0u2_PpN|9nTRi^*-rJAAU&h}Q;eLPQG^CdFJFT7iF|LywgGYe@GRGl_GKwB02E~A4 zL@}YnqQs$?QABp)yTJAnNbUe6cL0(*0Lg{lj*^4kav>FYD1MZD6yd$mo-<`H9ft%T zhXfyo1RsY4ABO}VhXfyo1RsY4ABO}VhXfyo1RsY4pM=Fc35$6W7V{)5=1Evg$}@Zy z6#4-1x&zP~2N17204;U^@wx+u*B#L9Lb(ZLH_9HAn^A5-xfM3$Hb~&@D0iUTiLw{v zE|j|=1z!P`zl!oT=&7#*_6?M8qI?VG+bG{b`7X-$P`;1y1K{#Q#I$|{P55J!pP>8{ z1?vp({sV9+8(hi+mrB4T%F^^e2Ff7=4(x9n1g9vQ=^*wu4q|`fAoe#7Vt?Zxxc3%j z$=jGEZ)29cjal+GX35)_C2wPvyp37%HoV5Sp~v3FEO}eaW_k;I8wa7!K7eNa0DBt; z!TAG-DjmeC?jYhL2N6{|sCyITE#OTy=^c0i??XBcU`8E8IfU{73ckRK+4Lc1(}%i# zv~d)D97CZ@$BzN~1m#l{u}VFG88v_zHGmm~GXp56Q4cFu%&JkDkC4Dm5L3}InIMht z!Q1!;^ysJ3_fdX;fBy`&_W?*~I8yy9z@9+Co)A3UW6-BZp-+!v_QgP-ehew5SPRa0 zARbxCW0G&f`=z^A;(>t~@=ft#npqS>JO!Rm)-3I=Q*KWZ_>o2YpjiQnN!fmVIOn?u z84-8FD%}l9`vIi-MUCu!m%+KZgAMiDP#!JOhCtX$IP#4gyO9u%tce5{!}dsDI0`eHm?pF@6nRz#GVx zAgtd9ea?cpsy$uDYaKAItqVE2b4g))mM z&P6`narjKM!as#tv@SWpYYMC3=5PEQ>ubuPejMuz@iuv*$3c~N)Fyut`4;e;$bTF_ z#6rZ+PM}>8wcLtYwA*tx`k_!~JZp1O{MjX?2 zBgk(*jdpOB9<$_q%#!ypJKmSbYy25@VeW?v36GbeY45-%e;>1iVu=_vM)WF1^w~1b zExriz73gUNa<4#7E0BHS`bW^y!_d>i;OhYNv;sY?Ku;^s(+c#o0zIujPb<*V3iPxB z*`oOINz4-kdRl>=R-mU9$OC1}n=mg1pl=oETLt=7fxcCsZxzfH1^QNjzEz-a73f<9 z`c{Ee9e{2nPlWbVPD4K`(2ojyMdI23<_hhvyald32Ch8@uHh^KR_pgeS5ZvlAz0#v zQGNkVJ_=6aP84wPF>vrP=($svR|AL*l7$ZMvnbGM3TCs&0^{cn(CQH07I(f_!SjCp zv>JF3&o+WiA`|RCki3_`ABuI;x@icwgjaPG(Wg6E_zocUiVLAJm%xWu3JbUlR%ivv zrF@0-DNajeK(60}T)zpqeiL&2CbBpSAa7-mh69j>1CWLTkcI;|O=SW14W~Cw@KhG`#7* zW1TrDJvZ`mXnzN^&6ALKd?ON?!i@3$f%kMAdI|eyl4uP#>)>V>v6ef5Hy*_sKZA9) zKpJwu#dfZVeg+9Yi58v&#eNTJ-N9QDJ}z0xPjv8~fbT&a2Hc6>#~^`- z@<0pXBq3;e64Lewu%O*MvHy!ZcyQ7SnUAPZfPQGNS6EKUe4_Ivl$)K1J}L9b4r#*P z5#Dj(9VgyN;L%Y7hdBVFwNN7eRg7O0gUsc>yxOlAv`hJyUbGvJcGJ)Ft2qj9 zm*&9e^Ex7n=NLSlWAJ#7!Q(v!kN24FFv<}Wk-OgyjouIcZ2%tcF?hVk;Kv<uM480OXhJl+AUBL}dK9Kbq~EWt5&yvMMMc#I*d0aoEKtirRf3eRHRyn(rR44VI0 zX#Qt04=H~8DLmOz@MKS6KK4WF_jCO*2|#wLrJzN91A`G&r)RXd;~d1OktFD zc^xzGMOYW^_47A{e?l?CNJLKL0Z@Jq&EyB6BSdaJMYSjds4d2k zfVXVwI4ae*Nxt&caflY`f$0g%^b3tL)7gj<7}W{PUb34fVfmuZV!`SGwi&eFf^s=Z zFUnR(!ZxfEw?kuJfpR6vRVdfu-RtnT@HIx~aXbW0Jj^wl8B(QS%;YbeEi$V>k`zdi z0!hMG$~jNSZhs1E6V87kyZs?zlY**arGq3R9(<+QPM-K6cRxQ+F;7761cY)vQm?0-&Ck!0Nr-1j<@R|0(;}!V6iQP}S zYZ14$K@wtcn)Gqqjrg~$-CWS3YoULSWRGNX7}FKg7vJ%Zk^9DhE+o&e<6?AQ4BGwd1sxsUC`pTB2x+a=w)xruGU?_So6Kd)f8WfHhtgJ-xd z5%yMx6Ry9*h>SX&EnxN8tO2Xzi6`uLNWUAdlO7&kA$^PL#p92QrTb9JtkVT-0h`b7 zGll}PFaCj#?%$nvG-tx^rWZ>04bR=Zdyut4ti&7gjZz-($te4Dw}MV%;r>zZ>(u%N zIX6C1dyCeJ2e&jt;E~p|aeg-fU!v77MD`4aj}+s(=J#oEH{A!SVKYgC=VPY*RfB)5 z!tp(8z+b>kk3MALY|x(HqPbZ2~%Z9oqjvqLwzYhp?V%threLIclDmxLKXW@5s$eAdy;EYxEPG^13Ebrttm)>6Am|kA*jgR*Bmn`a=S7ua>yUcUa5ICYnTy75?_aN0(Q+K3SoQJYxIjPCNkAUc0?)g4-PLt}WXx-B&X2s;=(q76*EBTIN=kch|a!TQp-JarjpfJXxJB=yk~8 z*w|L%S!jeeoIwp=gNC!>;dh(fb6`ygujVQPuH(?N81e``B z>gQpVHx>>q(otu%Ht7XX+oQ^eXl0!S_u?LnNPW^5qJFmSi&1dW7Xn_WyF$RBFECOK z?$)ixC^!Y!Nl+j*Oo4#Ihw=YP`Nv6sdtd0qWjzf0!UIw@<_l)&`12(th301{hcvBX!HVp4Msz7&@fYht}0Ltt5}v? z7@jh|;dvprUhcW3_WbxN1N-+A7DOv~E9MEXumuD73dDFCW;Df4T~T;`lF9nbn}wRscPdEk$h?9;S1S7W3M^ ze()21nT{1iLH!2^x*yOo-ZIrS%DE#8iTm&vb<8W%ToG+}4r2f`gLKc!>p^$2{6u&3 zJ7xQh-O|wJ&BJ=pKfS9v7}Znui{Tb?WSTXi#lklTs*DutUcngrvU>zxkz}B!DqiI> z*-BBn0GEw1tb6~4`^)L>A)PZ=2^EX(VZ^Ly**4?ujM~{1y{6QPeAYkwQhkRn4(-7A z{u}O;Cn>Jxw8-71sJv@MJMlCl1J;l&AlrPh5hR?q>$dOxZ10yZ0t4QXSeEjD@)Ks2 z6kG#|(L?s>Ez-_98|0csuf6*h@72}EwfB|7`}Z^Z*j9u#_!nA%XGnc}9gvtrQ0`A# z313i{{Y$=4mnZvbz-i>esdQ&=;+AQdbO@sv#ouHLO73PdXcQ$~I8 z`e97Hjt79^zfe1j9QBEn32qHz{|?s<`E#A3^%NItb15I9{vUh(xLVn$w$4W&TTnld zkHAJApw%bie{0hlyTA1I?!;TKzZD}=YS6!=x0F4 zuc=o4qV^OX|2X}T#EEtb5FzBWAMx;Z6G+>~_#5RQtj@XMg@^YVgK_`;{^oB6p*mY3(tHW(cC zloU2?{k5Ucwd=*7O)V+T=BCCLm$St@{hM32eS5}?Z*SZF&CcFHPgmF4P-tz}^wmL< zCEf?8V7p4eZ>yReeMiClSd&NUlQpIK&@y=uC}{%G3gt3H;A9;IJR3LQMBrCz@EoF} zh7HYsQNIwmS~^4x3PyeiN>Hx15qlwi@Xl{@QZb&7Dix-a7Ug@}ZoMw+EaYL0t60~h zp#d+eOFDgaQpE@yF6 zlO$HUYVMq#N}6v#rV;Zkp1euuF;#YbK8F>4O0bGABiP(cwY8h(Zoj;#y1MCd>Aten z7hSYI@Ou_&Yn=$yCR(Y-+9wgbCw=G$&jGYU>k-k;t}Etls;SvD_ln-8nox7E^uW@x zRTo{fDR|lIlbTyYVm|dq8!(@ct4p)gVDOFRnbDbh=A?ReVS>lH{@UtlKC#N{W-G^= znw`#;#>SRZSIbxKkmYIL+_wE&GeC_kU-94YJf_$5wKX+sx~BKg*Pv+pWDOF@-fH7F z(ju2rAWQ=Dtc{^y_1fDPeEG(_QhQZshjd@z@;Os4b16gby~pNd2D58wXnyea_^g}@ zK9jz?jn5kar&%fBd3@D~m7QvhsQ-*}U_k1>iH*U+<+-+Y9888DfrABIjeTFq40;BH zjQK-+wMJvg^OwqDWhEAKLPK^>eFJC#;*|ojW_z zkkvgsJ-5>3s;#V>9dOmIHOD5ztk=gH>;;}Qw=LG3RnlJBH9yZ7N2@$TQg&LF$8Ju@ zDr~Ksv8)I*;#hGS%~xq8JZ}Lf8VPtFZp|Z_=8Sl06dF7WI~@X!(Qz9>^`YrLB@2=R ziqe>6WS9y24jH=ek^jzfO||ti44zw|*v~=%@CCM$jX>()f5CdfkMvoedz^jxh*Z6G z>+qjwCcrn67`KC{D?Ck6uZwLP(LKgK{W)Wc7b_#`8=w+zlly>6I92m>t2mX+BVOtY z)D!S5#IvXevvQc@Ak&+|yAVD60{+E(!bUZ)DozZ!s>h`%z{#d+ELeU!t!B9Y2AOG| zv$cMAQ+-qO?uM=A;#Kq5UzO6js;WBnq7t09x&%1#7C7fGRXP7vj^mkdziNd9oFszk zgTraWcL60^CR*{Rw&~1PvdK1S^~sir`Z@R>Y6MQUOu!3u-%#PjG)}Eow=Yur`&#XM zoYE@LS|<%JS}DM}2%3BFN_otNcq~)gEFeGlgWIm^;e)*<A6YJllk}v1f2Y3 z0neqKY^^>~PQX13vY^4q3lQ*Z=H+8BVGNbP4iXZu$pI(Ae$b3Y(-TkJas5rVJo(t2 z*WHLH=aSQ>$;1BiQ;Y|(MX3~T;LU&)!^WtsFaG21>#o1+MJBVKD*Y^3xmX!SpS&i= zeVf2t_a%;tfD_LN4xWEZ7z!w1E^2#l?`Z^1m|uTw6uZAJUMKF0>J2d=j_@b(3quo3XEP7-j6HVC*kItr*+WruDrzRgRXGw?-EI;ljy8So6;fXH1S? zVKT>D9xHpZvM^2+x1$*A4$hI3g+zIQ@jo?a+NH7veN}_HtdY8Z)S$Ly5on}c$D#=I zms;J-+ZUMZ^h}&$vih^r4ThMN?yNKx`($x>d6{`e zcSB=Zj49KT2|w;Kgh|sfGE+BQIW-glvP<-FMpsILBmOc&oJqFVr<>#~x7+=EYcQlz z0hNfpH*=XzVUR({S~Zuo=dgQ+oeRiXo*y2YDq*nw(d!nYH6>*vb#iCsPD^oxqkVQx z$%Z8r<<_KJZ&HreY{@t4O|tZx{}|$9;U8YQJ+R5w9;j-{G{)*-U1Z2SGB(+FK~-!zh5PpSR3kykdrM#-pvk~9ivDs6kAu9t99p+-52bhXw-q_&I48$}z> zXtnLSb)1UuR@eu0=85d7Gds$iLS)Yei3rj3w1!=GeEv75zQmnWw7AQXpBKOLMwVDo z8JC>vjf>6lB>0PxL{5+PBWP_C2<^a_z;% zwVC#k@-$zWv$~{|rIf~Q+T6N4WJ)jPj*(_6n(HHX6O=Pz> zJ<$w2$X|O36p*p|SPZ305seF=gXD&Tq0B!oHQ4_B`<3hqAc?@l5W$4|OBaC2ORQ3P z?YwwMGiS{j{^14S0pF9$1OsP0qvRd>LXBcV&Sjw+3{0B6tT4E;bK_=%@_SZX?VdUX z+F;tuFFsjR?kP+$*KC=$Xj?7jdQARhl|>o_};u| zr4)09W}d*sJqh19q=*cgCA|PC;@)sTlV-#Y__~+Y!`9Bq%JkNnq>@52OY$eCq?@m} zf_-UYX2&dif?8V15DJeFwip{1_4ztf#TW#^CCR!8ivGyEi#p1TK`s5!>i?x(3 zo@~m9)th2dD+)U1=3Kq4F=Q*wi_6G##w1#eDS`A-zrVED?|;wLRF_teV~g`UP3c+j zvA+7U=4sg`y}W?M=cZ4ZmMOEi)EINTQA%sApFej+rZ>%Hgn5ojwk0~#<5^#BQBhuA zQBf{YRg9PT{zJ~QG@M|Jz=`t$?xH9aVl})ztf7q4EYoSN#l8RkIhB4HTJ3fJUkN3( z?cYE2%Kx5PB*}s*cJ9?MS}j7WJ}2S;!X84CVs*yl08W@S)MqUVID(V%tvlnr*~xi6 zv-I4XhJ?8Ex}_79!QrZ=3`3k=*#!$Lsck`5i`5%q%-q7B(W1mEhQ>A;oIQK^&*L`@ zZgV{4TY*1CHfiS4Ev6E|@x98&!BxJhg!hdIXQ;1lCmT@Wr1mXaFw;6w=kII)buiNc z*3Le9hBguVz_)8jpWKfc203K}@-y-lpve-+m4K$bO3+sUbx9;u0_wVnpa%iXmPl_1 zsEyZs1Fap2YS-}s)qNLr<8fnlxNhb@2|9p1guerS+C!*?n_@s-C&6DrZJ$KmnrJ!W zUwDXb-(>UACLo7M2me@BHxXz%!%*fcN-^!U7EP0OzOmAl=`QrLmz2`l>7imde)DE5 zz4_aq1MEKe*6O>4va(VOz4pe+wA_lq@H@Z(^;s$(^JAPouH8V2bK)aN3|b*-hG73_ zbp)c?eHS43}&-g^kYca8U&(1Y5$>gsz`3s{4r z|7Um$ywAEm>AB$sV2G^^e5Lmnpwg507kpiuquYlbQJ?MQ^&u5B&uLd+z zM^1+pF5%P>{-u+=%+YfI>eex8j#)|ruF?s%<~zOq%Yo=1)7YCN-xl|J{maHxcm`Hjou-OQ_ns@cjwXtBb*XoWbI&)C=41 zu*_XmTE2SL>{S(|tL7CJT9OO>c}2;VLUYa5MGH2ELYo&X+FG;0J*g(tl9AC8s+r^_ zii$o+7ySXFf-br$0wrBUP@|lt+rsHDY7_khoZC3971BonZc}aI=+=!`or`P$z$F{L zAP}zaqBxTdtNfje-kdXlm9Mt`eFc$s`+3(OWd2GVI&aa#wo7X#6 zTsA!ItQcw3BFPj~&miv+_<_1|EhLj}e#VAD*dqgt&a$4?R-xg24|PG!EOSmzm+Y6G_r%&0YcIceac{Lr{}KyjPYTXzGC`+&$_#2>r*UtRjkJa{ zGD)$1BbPMXmk0t;XMIV<754VoxrHm{*h99-W#vgpc^<6B&6dLb@;BbWIy`jw{KZ?V z4e~!&C?~QOmt^#ogOMG?$gF&~GB|p7#c7q1$7R*FE7@|#6nFdFyvmIWogLFN|C?52 zNytwut4uD~|6h}>cFSz6_VqFHa1EitRwwbC7SPmZNv~$Xf>P@;*?keU zCe1GT$il+1yU(ij6IP&Fq*RJ0*&pN z0A7Zyw^+M9F*(5y>!}aaPxg?G5g3uidrgf0q6n16FQBP00_r8~RVZQ?cz?XwE($d2 ze4rMMRmNI~Q_Duto(mrF<#0%>7d&cC@7T{UbodC+x))*P*D7>^iW%80zgVS(V8%oY z6rQ+MO+Ms_k78Bkgfl_gRd-}GR440`%gU@(`ANk^`NcMi+vReZ{DHhOXJ2~lB`vd7 zlq7o7Q&Zy-^0LcAPXAo9Ay!_7P0^g3Pt^ZNJ+7HGOY!E#lVK^XOufU zZPmV_%tUiif+;S^o@CFjE^eDenXPu5H@#T;0(NkD3@u0*U2r~W>lVw!a8T<&Xkunv zUEg)r8C|Ky3@i;TMFsJm?vDR#?Cab3gugf$o3U$U1JX$F?J~7RndWB*5o^A8K7PAi z=AJ)J(;swo4Vjna1lD@mkF1e)#g(^PpHJe0i1rA$X=f zXt{s2bYzn6=&nxcyD_`X9NILO#f$_S(~?ZASBZ1moWPy8!gbL5z@1{nH}H8S;N*7* zczA6s;50i4ZjfD>Gz$fkybe*@rrRFX3e9j)+c8hAEoE?@L)3Pv`<>v&6C|LPXh{kv{6#jUEr6F?v^gM2Q` z6bt@1j8=^B!_}Rzo!f7nlR588+p+%q0_#(7*F0qoNJmkN@{vR>btg>TzVyp2mYLVh zv9$CpdcLEBzjKwclip)(3Ptq!yPSIi=#jXGzcn~%mTl{mBirb0UXLip_Xg1af(R7-tI$+V z9Z?sN6BTL)+a;Z!tz+HN-H3x1qt8;w4~30ADx+WQl!z@W3c!Uz4zW1`-5A2ZSf{%p zOLDqwZ5c7{N#4fBm;~c~e`#glvaaOB#6(+}Rd&|1^-`?E@nvfwi;?PL&1H343^7tm zprD{gim66q++wlBn@W;X2$MWuG7XrRNgkkO&?h`h*as2KgDVNm@I>d7DV?1i9i5p@ zXJ%$y{C;eT$k1hqWQErhk1W9))jC;2Ry!huG1$|TgIG;+ z9q)jvYV;ZN43eR9PPViT>MdRAa&OM~g|$4C_HJsRBr&nO*7ithL8p{Dv58eO<%B0M z*|3uRNvUQVx9ekK;1p~(#7UB@r_&~R7>bwu3G_rfly;Pa)pHs(*UV`IJMS$lD44t? zSkRqWZ!d8A>%GpjgY2}kY(b!UL2ItVzRYa)PRMgtXRheQ=?~okNY|T@xWNJ*H^4Xn zXP2q#d3;@!EEpDx)<95ASATQMiM}lcV~ixl7<+qZZQpB3a==VlOse!aOikQ^LD*Q4I=k>#I z&`ig&<;TPICEUx&XjhWpmvOjgpTj{F?A*w)m?e-GFJHI8lSG7`2ZAZBmu+5qXQv_7 zBwa7ZnNlmK1(2YBK^e^>y(c%Q@pc4IA{S{CnIN zAqn{-MZ|GP2(nlpvA3`(L+`0@a1U^MG<@XnND)yOaQGKgUpJTP6Pz#y9I_LE>++TF zjcR`{PIul!?E@a&z6u{Xto)pT!e|FFiqmL&ZQrEUmG7|y9E#W#L6gx&nA;MTTcnS} z)WdJ!Kz)!jOUU|A$96l;zP+l#cXGHGn+oUc{ZiVe^?iGzNA2Zm4i$ZKsAwClhugjj zCt9_(Ib5`@!bRJ1x7PMuL9J~L6>W2620;I?7&GC8kz`xBsI%YO zN@nJ%#9l{|oZ7DJS0%fT#C+e{ShJvWFUhe%Y6y!pGeO8lNpw1VzL2mA#tX(E%mT^Z z^QZG6!v<7}_x7F#FJ-4jYt=FmCAnqvl4mOHv1S>)#xtkBW|t+yn&I12`@tS4>741D zQI=3Nzi8GMJJtyM7HuYe9-iHR z3(tr>4cuXu0|Ikof+Lliwrld)+J%{I6K2l5WJgzJiYZdtof_(fuuT4b?%LD znxFZ$MrZbPkHVswiZ~=ujcNoH_JBRjEmIT5W{_@~950|!9fvlLhO(!*Eugw&3(9a$ z1h*+togBb;sW!n&albyk5iw#y@**Fv6Oq>tkKm|@t$7JqNij*8Mt|AP(DIX#w1r8H zHB!v*>4|Hwy(aT_ua1nGd@w|~N4KFVo`XA-r=r_qk|yD2G<`B^>;gYN%1L6BD=~J_ zGl#aH0d3=Br@Ayoy1Q>=^k z!&ozLqYo%6BKcvjS%ke*s$n~nBIO_kMYG`wbAkkD-tiEm!^-AebW@kXoM5=oY%%3` z2166wJ3FucvozC_ow&1f@l?hNX82~=a+81EZi+YEU`&iX*|e#{-a2b;esbH!uH^g) zUQdmWeN9<4d0pMfURzz=?|wIbQ@4oTJjj19O4qxBNRkz69)B6hJE@raDUJg+(%&1E@eN z1bE)jtO_e=xns>xx2lPxX$3R0XW4zWCnp&bVsA7i#0~xGj;x(vRl?4a#Z#q~V>IJf zHuSn#ow7;eQxyJur6D7-gH=pAu*Z3Y@dRdkbi?a~^Ps5wQXR^95mVJHX$z8eJ_n}r znRFL!V#VAL(!}AABg`-rF1Wzq-2%=ksXm8yaQKV}oNPGSzlzT$XzO#zA~zoJRTE_- zEa>?ry5nr~haKDOuE{T&-da&&qvnSrY^X-j80Q16G1`QP?HT%VctU)-IjdGBa+bfbwyCqS4MZN^x>MSqX>@JD zJ1%*95jnUfvO0z(p;=7vh;*#A3pAhM47PKWG@(B$8p@E0Y415YkM<}?7I_S2E|<|; zqz`a6tC#~PIecC;T+oxlFA{LvFM|4F3>NZ`^=ZS~`=ZBDwV*ARi)gRZJ^V1_6s^lkc^oSX`VToLoVTM{ z8r6%&Qt6#FLw`JLmtbW$NOJbxqc|v}tXjiE^Nw-;fEzw_0!LwD40AGq(yw}k-Z(2t ze^R+BXI}_vngE7FFnpB(PP_md^VlK?oIx(<(F4JseejGHseD_B`p@)m}tV%5S(pE&8 z*;0wc!#4tf;%S%FWVL4bQwnS)ZMj}|c(E&1F9xh;*zEFk4RtFf`{U!*8%_R+#rf?S zK$82)_X3wGx;dj)P@zzxJ{WZJfU7ZtXrRp3R7mlrurGXICuPwXp^N!0B#fu#-f8Qr zs-;cl%*NW{^yaGd9V5Y&c&6cEU!yO5^38+ zSBK^dKDUl9!Wxz|noV)u(omzfc})iXThr`rZwq;QD`&4*QBdphSgjscZD7eP>_I0a z#7eR5((KBh@%f12<2prp2&1e(E*LyHvh~Q8JKyMJpB9JH1oNe$8Et{g=BjlSge;yw1UlBgn;G*%RrX%SG;cFI%8p(1I&OvtV7D4zwiuDX}Q zSE_KjZB|J8Lma;9OgO`Lc+k#j75)})ry8^A&m6v0z@_ho;rhuOzAYNgXVd*0zFoi> z-BT<2E$8qnqTzHug8XOhX^8gkk~+D^0=RxMhl}=AxM-ilMf-Q*CN$M!k;*w-w9nyK z7xMPO5u7`KhsHN2A`x?=)rrUhKkOcGXwe8OyY|c|_ksNEYf35{j*60b>x04d^WGT~ z>h`g&%#^z7x?0=n@}7CKHr4VNJ0Aslm$90|dR5r(3&cY6LF7O840oOvqjQAe$H6T! z;Y3tkx}Rg2fD;;sjE(U##;22pp;X>8yh;^Vw!a|zn&L{ky|Q@jhG1~R+;<`i2W`rn z8zT{kC&9tDS`fx1#pbqGd{EKs@v4Jgv`8KPl&fbb0}X2@IwsD#*l%my(B;Sv zWu^sk*>kGE^aeMPzzo0Nv8skvtib4xoEzGj=yPDExqwsG4BvfWShDN1HPMA5%p&_Q zTpNL!e3oCyXZh`HzgU0Jm^l2ZX!sayaXU^JYO^^?TX1-I{|lagYy8@2|A-^xFbA42Z~clvR|Ja zh)v1K*p%i;iOskFws}D)ZJc?Uv#Y8xJ?JV*BXI3EA>C4!d>T$%mzTG^(CKbxvUQu3{n3|NApO;8mrk9Q;LkXvXDnDQ6 zoT)_Y{!IBfCpH>ytjPkHiSv$*-zNgr+=S|x*wLOWaqhB?A|Qz_iM1EBHRkv|RaN!F|GdBv z(Hb9keqF_LBAtExthj2lM}*k%IS>!CVdI+5H3W?*$aD}ZFpw6~l*o4{umeQ%o2m4d z!z;0KOmA&!Nw=*TUR37rAs%_;IQ6!Z$eOT7~cv&3v@{3AY>`?pul&dX#@Tst0YkC2i|bwvQK2V%0Q8p0sj~ zjw2y<42U!@Ly8Nx3s&S4dd|qFK!P?B3X$R&b_P!LDBo2{xq0V_%}2xQ9WA4R=gUOJ z2RLtabjpl!_L0F1OURql7F*QL<}iCG+a}x=_pN>*&4wq_2$@j*rU|kL=fdqahSZc; zT+K=O6CujK!fh^&LRs9@iTkEvE%h5ZEhY6+iyNGEHF@36IYzSqd9c^Um}6rT4QVUu zS{60rBo;53-)2e5^Q9!jD!-^+>F?UyIN_j}aj?D_r0MUPZkKrs#pgl89W~A;ln(H7L8(ei&1>GsL4Q3O})wTNg*ti6PYh~kt z?R8k(~=VrjD;7`4UBWKQi^yH=RiS(!5!5y$?SG|@mI4pPl)t8(nszvH{o!CE*5dh%SIu8=Rim<^nSG_n)ld^^aQ=72m7&m;EB;$kU;oqk z4!66bUiDU_YtfpEazcdDMxk>p)DujY|fU6N!f8nvUGumU45U zu`pnFR##d(jj@(o_oGjC%temm*i<+X^OxR~s=>n&%B6^+1@e+8+(;{rT%Hlfci*+c zk`ClCsrd}jql-$GP0zjfB41+mf)!;gUsyh2cvr=|U~o>wnv|TBl-!gT!-MF&Z{F&% z7^8jx4kr0#?ppa$Z)N%Hii%kkm6fS}m&>188MZiL1w|4DkM>)bbwc8<0Pk!fhEK=n z16IoSQDwy84QuTD>W#DCaql?T^o`QWWcH}4hfmMh6jGLD_Ojo#IqE{EBMOV?px}!q zx?Y|=iI_2?gcf8IJ7IAVf2F%LuvLi+BU~9uhdvUeh{nnZVLqfB%4-m>I~6 zP03EL9=N}Lvucrtm#M>7UNjngb8lT+-MixIwp1p|?d%J^_4OJeny*9nJj`sFgkvnioF$iJ34`Ax`d(#)?PJ$@t?C6Axh{>lrD-0mm8W zUSqfU>U=hTVzw#Scv{%DbH>D`{8*UyiZv`zEyE&#(Qtta;97f0dRjPE#Ou9M1&DC_f4PQ#bH zP)+=Efp{sWr_U0Z{grd0W-=u__@|SnXUuuaRYm z)T7*VE)-a<%8=gPb7B)Q_(Vq3tJel3ST5`hb<$&_7yBqebdIdmv? z*ZA=$uejhOatoxYEASL&GO%pm@!0t-8)uan%*Gqz;tQu&vGkVal$v1uf(e-u)=kaE zMMje^@#L1+9r;!6(CpgG=B+bN=C;hQvekDLCpRs(=S}dow0d*XlWf@q6N+2s7R8x2 znoJgVsw3TQiA(ZVc2rE>AXW?`Ciw~6S3pri$|P0o+9+%x@`O`}IDw#4l(A=H(d+{* zb4%yuO-o93JN~0upEHqbZOY370w?WhOU-6|)O00UE0sh$=-^)p$z`QOT$d{o2vfix z)!;Y@!Slo;dE7?nc3t|=pbB5e+d+&Kx?hFk%crJM?c)oVBXmO|!JoiA&f)e|xbTWO zkA+t}=;oFJb~2Ykg;&g>BqzLW1K}>@hU07?oIfkBT#n+Uec0U>UUo1Tg7ApMu0+Y_ zrTtOF2pw#~&YKtFTw$HFFRfwKH04)yj=Vq?Yxs1-+O}z~nu;54sG8rFTRX>>Z#VRk z{TPYIeZjq01xMO-XstyOq^ViylHt8-bE{Pq%$x01oBLEV;56Pmw7ic!02)50&WB`N zekkCdutx#k7lw}*g$KqGfeA&7z$KxT&vY_)N+#k7Bf5zG3~#DyUW4$E)?j^apl^9l z<|G#Ql-7{XhMIROQ~G*aaZ7wdFAiEX2n!}1;L(6M^qm^9VCq|%!k5*GaAx8Q~b)-GIpQ-Qz9RB=hxbgyS$ENc)T77;lCm(R&2e?*Wz^Q%d zq*~t~TWeQ`Tjx-!9SvP0mxk*~1GBCKGmu>01o#fZvb#w z1ya5vNw$6(tr;cwKJ=DcrJmj}>Ho=F!)lkqeZWfUB($$--=RA)10+qloevyu9< zfIohA8%|7OOnlaxI3BlfzR~?N6e()JYG$^|zpz(6CSG)5dQA%z=q+oM?~v}oft@XV zC$?m$dTjWCF=~0VzT2->)NHmmxD^qR&!h>#>jRvBoU38}At(J1r#Ng8Mn&O!S`mJPz$e z-t$YGZ;|I*$|Beh-#7F9Fp{zeJdCCKlyi3pAA`X1cIlw-T1Z+rTu9mNxNp)!Qb|&# z!GR^gfyF2(8|Qggw{vW0uU!(fyo>cju+-pTEY+t1Oa4?~d6)EN1WOJVSl)#@+%zmT zxL@M%GqD`!xu9tb(Ng~-coTN$NXq_&SAi(O*rZNb$KBxxKS( zImqob#>Y}_@6f^*DV>yO{tjOqogzIpVUuNT-KxApmse@oq-P{gL%Im#7|Nz2z3zr5 zSA#VIylz@0Xn}$;h~-}JnDl$XA-dDW(df!;=Nej64B!luPhQYCMJ}`9Zj6gg6E)yY zucc@4nD{jc;+Ah5$Q|X`$szAJTpE|3W1Xvr4;VAr`_sp;?!K8GUxJpst#UX)WN)9- zIqW^tF_f8J@MiV814z!=dqZ zj>gK^c-m&Xg9svctV*QeYg{5d+AN(HmdNOQrO~@u7p!`;Fq>FZDGq76U*TwRiofh^q0?L$!8dPCT58otJ#lWdOv{BHhS%$K|LJHqc7?Hn%Viw0LP zzqI1}T@^C*m04NYki81ggCrV+f^- zk&&NOQy|U}WaTwXXqv`T+=qVf;?Ch0qAgx@Zgk}IKxEpSVd$VeICj6`GlXn&9nKQ9 zo!2sJk+Sjd*SCfP_NTW-|?)|jw~p9&!zov3Kv>nhRWL_oEhnaMIPgIoekaGbB;4+e>gGhw0%6x zaj*B;2OG`pvyb59c}CCAbYp~F7@_dM=Ko*(uW`BhS^WtT@uf3^$0w1_!c)~^-lAW~bJqDh=j&S1UE@FR;+jy<;uif=gsYGt4i~i0;6yvE zKH8)Ds>Rf3sJ$nm0p+Ai)pj{8$9aDgO{3lqw;z6Oar_9YSnBd(NiED!?=a|2Nb zvPNYp{AodL9-Roo(V7gnN>z%M5_XaIBF{ON$bI41V8&BKQ`~F=dxJe+hDlGG@}rJQ zYdaw9#hqP`DNQdbbE1v0v_M_nU{%-9(n}t~@CTz0R7Z9^)V>jA`W$`#St&ZR?+t2H z>_YkuM<_M!aO#VdiXIV2juCx*p&Ht66g|#n*JL7Bc7Q< zs=6yh`J>Wh!{30fJNmY^u}N9sL=};w3Jb$WqNlse!uLs+VJwY2N9!_O&*<^UxL*${ zjeiCSHh^xQ!FDYrWQi*u{G{*xPh;-Q%_~VtbXd&A7T?z^e3oK!l07l0B+pdB20srq z9t>4vXJ@BY*T;6xpWhu@U!97d6`{ZH*)z0b)Wvq^B^9J5ZR8f+-*va(?v(FBmKlEE zjIYg21MP6K^V58FdeC`E0?EiCr>>jB?@_db#K5}dMtH}pw+ zht~->THOoH4LD9VhO8UdSCzf9W1j~7n$uP#YyeVRInc)mWyP+U-0q-?BQ zSYN-O^77(>f?|VyeT*@NWnF$b_L3)!3`skruL^nyE!#+EtdYi$h%a-|h28WiB#|J^ zR@AJVS>`C2xTtQzqKPFbWiwZW$|mKc7l+c)t4q>zCh2|ct0oq&UVTxp>Y~*>#S>Sx z`+9SyR97tPE-UX|S`nO@OMK13AKw;y@>-o(o?BUJkMd1+opi;;y_}P%A#FsBSa1@z zfckOuZ9pD)W!F9PZ=3$Wt~bH&dqTC+{4?v~x=^3&^o3;Kz}Mg0^}zJo=HIi6WJ8)? z8yda`J>x_++mCkBXhu>FjF^R#ErD4WRxGTm``SrORn_(qr#rnRea6~g%M~+!DP20T zDo|BnFl;u&)~}e*w!9kML!MPBh2$Y21HV=2#P8Jg_B@-# z=u9!@=I7_Jw5*z0mEZktAdpg;ec5Fbmsct86HVAmeS2-wWTSo})5|#?Pd0I8BJS=i zlJ2D)s_=KY#AzF7Cmg)t*@Pqz$Rp81K#(4fe<#YX*$Vxh$O_?3uO%ds0$d zT(Z>`Z^B% z!!Lj^^ z%e6oCvV3W8_V8QTz332MH#;sRO5efP>GHxJlbQvKZA1FXUSuw3Ni3y#af934xTvXR zaYH6f$7U2{BqXF2W@Z+qCt5NJ%)ajH7A@U5Gbd+e-?A^<+0tt(pV!*HAmDIRF6?NX zSB47*nQkWj_<_L6Yc={q2&bigv-I`tl5W9@J$!aTlGssbdSt2uf{{DPMZO;0Fl#Ux zy^gxC6g7Hl8dK{-c4JD*^xSn@G8-yyWU1@EQQTIaUFm}pw#JZXUbv)c#+0IKHlgP# z=+Xg<6{lqpe-(*MYGM}r2Clbo`A0aVl0HI!(}t zyV+Ns?Jy-~*OYZGEC5a(Fu@9HBtpC3yO~f~0o>e+1Um}{}PM&hFQjsi=|yLeV+JidqM3Dg63S9xK=f+Y4W zv&U(2nkN z;=QUD<%X~BH}ZXJmahDmfp~vgD>!{k_<6(yX9E3an**Y%PTh3R#jD)5)8rFSZXs}E4X+B zqc;K%KfXPO`v_RVjjt$gv-`{*b};SgyJ*I{fUgbsdSNv&8ML*4n!Kx$hI2P;vmg;Z zk*_BQ!XKT0!esW!OWN~OOFfyaAhRl_)0-En z3RGvCtpy#y%KAcEa(-<=!?c|2=}m>T{^X>B`m*XNMak=}1vweHE~B}uz?+}UdQ5_2F^ix?=CZ!T}vpU)&M@5-! z-Nw4LlP}s>;l8U!7m>q9@NrhyOJj6`A&Mp;_j5;1(=Oz{60wkS7 zc8BZW+qfR-Vd&Exx@QSv+<|fkw@4U(G5z+jSGOngV+BO|DBEBCjNXE|DCM$e-r=h!tZomf4A;g+7sK!s zEatp)CR;hvkuUuypHuf9=~m>uy z`BA(N%16B)ex5w?IOvxN8WTUuc#F@1pXq=QKP!noBhP}L*?2Z!9hmonZlX*}O3Js|8@-LimOOs~&H<&Q!w-}sLx!ckrhS6Lnrw@+B}feX zzj*G%89sb@xkHM{aHCFa&4l{8X)YUKEoJAB6l4Pf6GjS)V)KXS8y$}CE?#lN`)s%E zjpT*PVNJraNI2ruP*@uI4LKSSR98VDshW~dv?ckPzrmN_vZT1&6Y}#Xc$_Y)Gv3$W zx7#g=DG5mqQ%XXD)o#b-`@55i{i$xdDc}w7FCLCCQVmHmf5h24A|d z-fBorOu~POR#4G}F{FcvY2?Qdek#90e3b&4Myzv)vk;c;HcLUC#b~W@W~Q=ucYLU> zy{5g%+u%2+8Er0`-OhIFjdHsb<4)HbYisK#Ts*&JM)p3FoSTzkvm*r>QU%}k>q4iI z%WU6CUp~ZawvXI}uVI)l<8RUFhPw$OkVW)=uAWJgH}}_*lL}KK)`3IVpV(h5)FNz z#H);a7M)G@*K+Z`I!ZqT1dU@>Xu6cdzKl^Df`I zqpA7Y-lc;2y5EGUA8=Id0o^E$#N$dtdna7)G|>KXB0lM*ApU%Y{YIrdxGbXt_w3oj ziuUeRUgmVq#`~{^>re|+CmZ~kwuiUFzD+!qiTBcfc<&VJ<2$&ti%YU2&AfT|qCGd< zyqEunesQu&_ZR6t(Qil&$RuU$aks_ZxaULmjMDt!op+*E^+>1g_lS0j*yP27lX7&tKL%mE$#yw%lQ1#WAC6!oHVd29i`pYr#_WUfj$6Nu42-*$K=Jw2v zMWvSfoDx6#!k)j!;b07RXt}P3b`J#!dsbsG+w$GKV`nI6Go-Xk%8Kfk`Qvh&uKavg8ujeO zr^#0sEm(54lujtm@RgzGn{S2;R_Xo>zAeSf`+ucf33!{unbyoNS+?$5vhG{5Y{{`? zNw(ulJ`y`|eB?d|CJ819v6DC?j-8M|AZ&opmNrSl63z`Ql;eRCV9U`iP|8ut0xicD zN?S_Xhdxi+g*4kOU`zYX{IU%+S=z0V-?HcYX6Bo3zU!awR;=(#cvebwlk><|F;@}< z*wU{g(%r`F4O~#OVSUYDpf9p}cZ6)bWI@}! zj*jk~j!|K$u!GGk?h~L6dK35fL7Wo=}Unrpe>^{uaWhnosXE)n#5~7BJH`;U!qZxn=OCl zrLi&I&P!6~XVQfa#Pr_63hF96#9>4Gz2uc|tyzQep~96oN&k4Z{eGQ3=rI~S;(pib zvETQ3){gFLZM|ZA$R8Qrb7@_6_s$FXd0dYDK6&>2evIvRUK{(Jw|9>HZYu02ow$n` z_m;^RW!*4DkC0+$6$_WQ|%Ew*-Fh(kJ_o#*p-nQ zk4ojK2`O!Aok!!2Sp>|PyKpHY`kY~qTJbI?15(r~LcE)S8-O!{S0X}ZMHrlExHZ&6 zDk>OIR2%mD!~8d0MYLgggA-5-kvO0yRB$#dKe$z}RJgP*t> zF^ZJ7(yaHC`69}Vs)(n|tvAJVskVp#a5fdLLcAeFu>zdz)nGhLA6pUo-7fZ-+#4uwF(VyP3<@Da|^lDzhRX8H~spM9UXY8zt9P7Ci!5QK3KqWne0x->q zJoJzSd&*eU^9@1O-Num8>B5JV@{^~?G5WAritzmv$dY4$!=2~hp%0(Ihn0(xXUMJe z5wRS5Z!yV+AKj8z2(Hf#4v(_X=wDoGS3FJh{(~>uNeg4)jt4W?l(-i!0 z6;!%gGk`RDmp)uV}1y?YMyieIQX2Q{6uH5s)r%Q(?7 zlg+5tbSgi9ujW%#y$AO6emn6U@e9!SBnj}c&oVhBD|Yod?;`O?^+UZA2T)>;Bu;$O zC3wptys3Dx4T=_?A=gfyD+KCsA0DFC9M-S+{d3xUHZ^yre*H~+fO_{sB_P0 zjfU%j3RAYp>2Ij^8p6xxyW5QaBvqH23=TtCsQ>acYpz+7s91LGI$g5PESR#j32iv6 zqf)A_)K|pyYP0jTIU|o8yzHT^H7g#wUfaE?J*?9^G-`)l*9%B)+7`D2>id+EPH?o3Tb zfMlYUNM+dIMSZ7LB#UyZJi^1mW-&vcHAYUEpkHM3L%f4KQl6%`$y8Fcrn6;Djn>~# zxkHA?O*>^eqjFPXe`x!>aHH{FyHD3N;Eovmp+HEgv?>$l&2Ly(tt+pHyK1_kfv);M zZPc&drmm>e3%<@~+Xelrs}kFt&XZ-%u&Zt^Y1X*I<>5dutg%@gz(8n(X$5^0+G^;? zXRI$i5Tk$)5I&SQoS)8|-#}XCHLI4Jh&8)*ZsYlx9aB$|1NqB1RVb{4?(iFuR(=Pq zs9(eN-t1&3a?GEZj=$oYi`qgXKSCIl#tbnsj0w^C`WHHsieOcuLLE=p=O$bGfys^1@aZ9jyQ!{>J-k!5C`$5&}&jR%fU<@sT%wQz`bCBNVbSg8kp|PEK_H9Keoj(G*WxZP6J^`7NNj0KF4$w0>a%s0Y}^=+ zS~IlWX%!@Y(J>w_jee6OOd7AmL z!H@w$133(|15yzr4{O$f4l|%BVQjq;izR|If=9sf(>cv1y?()9b@BU-ywMc!bTmw=TtWvBgyqJh-rd$dre3#*Rt>Mx7H^& zR5;hVLg6iFnbf*^y8K`nVFP#4g8 z8@#Q-l>@F)cVC|~SZy(<61{_!bsOh<7x%m5uAT+B@6jWRjvnhha%zW3sj_8 zvJP>7k8|9Z*|*K)!F)e?kiP#mRJTQLQsK{xAMc} zD2l~|C-y&jXm}J*cEiT<5iLVY3N}N$Eddt7ZjwaI%e$5NE#%l$<9+kTuHK%18!lE< z(t;Ylovtz6GQcIj&95SNNlA=YtvqI1`}y@^;}q8n zx1c}w#OC3xTZcE_Ju<@jk7dM{3atdpabVfCwq+9hLlzp4XYLE zXu@KutxFly;gF_G6{@uSA9+NnGwU>_vdt=+UT1-OSLr5Yx&9|-OT--KB=-TvrGOEf z!r39@kR-Lb2!kY&uo%;INrNUNLUJGL!lan#tZXwnL%S7{+Y#6JB>ZG0A!e`D!^7(9 z<<(YFuD58^R=w3@)o84qz42uYbC15!oo(itdJvbA*zQL`+!r>B;%~oV5CK*Y*B=Okn~-37-GB9 ztq!%ASR;(Nh>g;aK&H?S}fU zf!Mk$+uN^P7aQoRH*CMi(%iMc-!~YG4fgpLbTwNpVtWVv2RO}-VqKZfRTfKU4W)!Y zh#vg$H8g+Uv#Tr#dePL4iEX$U1$4BqoZ6u0U~~bj5@*_R-Q7SFl{W7=c8^fKZQJB) zLiOZpDCBWlbA#6)PO`jArJ+;>+g|U*Iy$MGii_X~;1Ve(^cM@Sat^O)vg zF_O0A{=%n)`DiNuPlHdPf#a4bcv>)ViLYG|nMCws_y?53dCsLH3n|+=o?72wu8wPE zjUBe8dXvoD*y&w9oEkkax1Ok?aVx@4DtB(5w=OL&lMSuHmbp-A)i1jJ(nlZOvS~!7 zC}~O7j1CoaSH*%gKvZDp3Z>pc1lm93N z|GR8OWyWsLRBCi`xlW_em6Yg6TP4eg#WD^@CZ^USNu$-3$aNtV{h>PltgkbZ>F{_u zGMP?aH}2Z=1hm?K#}m@#J9w7YJClVs)71elvS7)Emg^nie2j%zbH%YNk!)ao8AT7e zbJ%s^;qecTm%d+#!C*+t<1ofYiLqkDdCUK6CY0wK=!Sn}jwquP&~UK*1l&yt*iS+P z0nh{TAKZE8$vf^i&$MZiX%m@G7UfUn9~*i5m%jvNxXFzqMn@4jklhp^F&0tO9N8QOb<^QvEL zjW;&ikkvCtRJ7BZa=B7oi`#8!Y;0uvoV+Z_(UpLWTkTA7^77%s(94_f=6jA#z*h7> z&}Sh+5qXo8&TGkgpfO~HnMF{<&G>C0?(g<{`n@^kTuJcVNBioEV_ zW_>ahRugdBusVJWtK*ftPxK*N1FIua5UIWd{l1Cxdi0$Yu7SVA#~}%o3y46@(>YAI znSHuETM1TPOuxLC9uZ{VFWy9Z_$CcA`KM;;A&R+}p8tSD1V48MkyvB$RaPT^{pWIc zo0C5)me|coP?_X3{U!~gm*3-lADN_|y{SseNr0Z>92SpR4vRIPs6d$0CV3>oPCA~{ z?UVbQOR3gd7mAcB;%c4Uu2qfyf_ef?f%bU3b6KP_QC44BS*M7{#rgY|o6OBGcr-uG_QJ4>&hpw|di zf%Wq6PY>L-n zBN1lXDmjBxi3)4z6hbH~(=n_p1$_sW72%@AHsshR%Ov+;mf6i>KcaguAK=WUeGk|{ zRHW`8{^HSdu_NJN|KoOh++p!}ELN|VJYtXAomEap+=*Y}9<$Zsv6|shLnJQ1u>!^> zh&jNb6u%vzXqk&FPNx@X!X{Hl9aDvpK3kQ6mPh-PDwWc03Lqjqt8XHgNPdM|k7uDO zULnW$9GEe(B7}Qwb39b2B7)a$_flFVP;Y` z(p>itjv687#ArYlxe`_|gFUZ7lGPL-EE*cG}G;zH}3fALasx0JEcY}o!C)2X1w%(t z8_YP}am$d=XVU2vPKDBteccvwyHZiLQXdLxGjuK;&A@? zVL{l24}*LF?>9Xs3{T_Tz%H7H&Gk z-PsKN_|PHT5=#oF>0d}sv4n_sTPDWpGGqJbU#{-zx*D)Z>3@?pzyhZ1^LR&3rsoA< zr4GA2VX}$@VLT1DLs7geX>V(ds1lE}nl_8}HD5&rRX+dLD z1KHFLhIQr29+iXHDHVc@%o7I174n%Cq*0KqUd_Ez$g8mSy$b%|HVmg7Wy`4`c@?KW zqZY77z6#F`LEyeOr0_<;E%{e+hFSTr5dzeXUoIZ_F{vPLy1a}@nPO8D);@h?O3fatUhEmwq?x5Q^ zG;-{W2v7${JEKKRew-FQ&c@M`%X%l8^DmCIT%H`cEStS-MEu#3LlAH*SXH`vg>g?a6lYFt{`}EV& z8z$c@Q?&7cW+FTx^LhXvS)+|~Z1Ai7O+(tg(-0$=nvUB8b zS;N~$TX*JPxTJNYV%f&ToK1_DY^+IaTpo*Q4Y5eL(x8oz2Ygq%riPqft&G*}TDy8Q zn;l)fc30h2PiI{==XB<>b)6opA%{TFd~OYkFfd*6m#*Oq9Oi~+7aspoSojG#)pJgW F{udr+7+wGX literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Cairo-Medium.ttf b/src/renderer/src/assets/fonts/Cairo-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..957811e23bff4450dfcdaaa845a2def9a284f22c GIT binary patch literal 91676 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

QK_kv$6Pt^ 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

    Ti_B!w8 zrQEmr!H=_ZF&181c8Wu^bLGTJAW2Kp0H#yotU@rci zYMYl5s-vpS$C*+s`qCOSl@afLQhs4Cm8zDjvw8~K+t4{uxhFgWQi{8S>NJXyJq>z4 zT;satdSS8v+%AsNU|RK~PTAKAHlR@wBN>MtL5F{3+@K(MWNRAbp^1&SaJx{G;`nBe zWFHbl+o+CB<6P&1k2`3`zzFkMlQ-V@a8#<&bGO;ceD z{uc*AFrQtnVs_X46c&A`^WRuHXbXO1fEOCkZ_UC>yid4vf|8W)z(Ofcyd7wxMr%D& z?Pl^3WpYiaEuZ$H!hf8TH68k$m%Au>qJ^YvbYu9VPwzi(*Cvd$9jSwt4mrYtP+YJW zYVmta$(u_9j$EhX_JCuo`cGj)7s%8?S12H+rQVg`(h1XLz@(XgG{r4^f6$C8c&hGd zbT<@8F+bz(ii-lAebf^3ldT(Yu+D_ij^Tp$37iqADh-CM_tX&Vj3##SQ+qyx&62mu z8*stsmHzOzP%*-P4L8DYhLBUeARih?oTAT1f(&vgLri1ch%mDr9Q(m``84#(P-z;1 z05W323mrgRi)Qvgy`A4~gz?{egSx!<{MJX@DEBP972O-Ye*MinJn8+d9W|7xfSb>D zvCU*omyh4;8{^-PHEiviI~*p@P8xvXe*gVmQG zO;0`>U;WZ68!kE3@Vlx4jZmSE+kR#|+ov~Lq2npNW;btYz8TkoBg7e=YJc*CQPH#4 zr(Z7S^evF{kBvXpE^Zg|=}fxf)!eU7JYr&aXCIs|=|>MWW8ZKRy3?+Y_?IESIoO+O z;4|?1&Wnublmdr2Rjsc<(~gs<+G|spOB_ki5yv$D5I?C>??KQE9Jx1I96j38ly%&F zc6hKp0XIvdhM})=xn<6a8cj{wE&!C}D42oCfxpTDbG4aI${s3%<_>7B5V? zVN8X<@DP61ji=m?VMXockH6eQo?NDqAkHc&T^2N$1+~k2>b|hl3V$M?&jc%$ z-;-@wQN6XI{$fS*?+RY(!Hn?#1wilp9{}3u|D{)^R^}nF8X69D*toc=mJ6*k4glSG zv8($+oCcq&wS_>mfQ7X&w?R|S{{f)KZ+FKz7+XY>qvy0E=4Mr3sAk6h0id508o|^P z+#+5@yxe#d9WO41UETQ~0A1uDnGo&f_I3U1>+cb>DF&Ya2nT>xofJT=3+%Y{Fuf|F zP&tQYBbRvrgIB_l(MHzJm1nV*C6dNGg=Pg3A}bw+vlPWDeDDJFo8oL?hKkEZUty(F zK{&^SAmuQ}&6V*jack)F%FrF23&@k z3-l8u2Uk{g^ea6O%n8Emb783GUGC*qeE4*cyo4#`f8`hVYLh-D2r_5`VXy$w{B~B6 z00_rz*9qN??El?Kd;#E z5#qW_0as!DzIo!ZLOum1xnj6c_H~ROTB288Nr3WwJs?1pL$+})@Vk{9Jyk4Q&lWT( z1hxWXmP9vdbgM87k%FFsR{?IFKt9C9LFE+61H3*D;>R*3)Z&Nd?;yl`NQ)k+{f;=WSrSzwL)b&| zPRkE1J47$FP4wq<_U@PEUS`BwEevl~~dNXn^r=os+K+oo$XnhB5B+Rto&sikk;} z11D_+v>sG~MC5mdCT09sv%abwn{PVBQVzE^6f&3JIlmA3YA*O#_Helq?UaV|;Y>Uz z;fZ!3jUj=#ahZq~Io>kxqOAPKcgBnVkFEC%YN~C+wbx1~BoG49OG0mA=p8~Y0){44 z4G7X96cG?G^e!EdqM?HzhALP?M??*%fISE**dD|JHr#o?`Tp%albQU@teGVDb>7!` z9J3kZli}C3ZMz+GO9g4Be}$r?W>k--}jXd$!>~n|dxgoUYE+-rDOl^(v!W?<0$B z`|ID2xs!W@)m^z$z88J$y9K^n?KX{vud_V!qrH5(M4?7HMwML*(qhAD1(aX8q=9!j0VqO{tpCGUgL; zndne*f+qFFqf~_K*%Ax*_ZE(UJRpEMY<0x`j&wvI`__dwXdpWD2v037J5_f-e4)M$ zIy+^kPx}Z4mJ_Ys2Tp{WbVwT}JQsp&=<2I4gzynEVK`A%7rd`XS<7Lrbyn%Kr>l6G zSP@^JCBM?hgOF&0mU%}K46B2UQ%_($+HxPbD!P!)TkiSvr2+bvYkt=0LQqgxS=)5) zUiR6R#%0*v<^XPk#ou+lWo`JXy=`H$>stYZ!@De_YdjUvRwkKTnFTV2py{MJ(E6!r zYS<^bAh^A1T2!{u=B5HAo{DLn2XMC8JrPBxf@FK?Ba=(X3~ZnUT0*b_QU?1f;w>iu z`7~mAL_7kU20LtU)}gETjceWL_#tdhrjT{BHQ%Wbj()O$o!OnU*h-B2JB^$>k5lDx zs@9*2Tz~7(_9d*|y9eU+gU7{=h;KUaO+tYGj_g`FJ=!=a_yv^;9IJ^!>$ED9ekB{q zNeNzfm_XOM{+2FRyl_sF*}~s(-cI;43#~NRVfH!W_F|WZNDN9z_T*EW+UbGP@6Vec zaP;2Yx^S?0m1BhtB*17=`-C(A%f$QSC7$g6{R&x26a&bG$68q977vAv!{f4)eBB<{ z>i7xO0YK8CGrqtA-9X9~A!YEO4JKd&04A9>BoGry=X*|p$Pi`^gSGT`RjPegZ3|&3 zriXPu3@-?`jV1B6cHuOW4TF2M;a1d4XzrBmuQCEGnw^1k{OQbpL)|e8{ke)SK}HHg zhfL~h8oWO>PyTfes~6>pnSS@k5-h*cATj<+xfWqYSVd1<(g658An>HmeYtdiC+9lp z`B5sucei?Og*72xyU;M>3l(^+CPIGQSEsXY4LoplsBte6S!DSiA({m4`6)Q{PXA)V zidhT)9xX~wYm<7dQyk2vgVCsc2de4zUW%03Onm4Yl$dQMPZILxNp=SR%bg}`Pe%Ta z2oY%;la`V>g$aUG)U+e*c>7;F$;`Bjyc>FQz%Ci7dpZ)AN;1WlGa!oW6H9g19d76J zjXQQ-xqdD8m17S1dOUd8tU}WFYYqWb`WG^PNxfOugU;{z!Yxf#UE#oXlH)JuF+S~? zaVojqygw4aI~MBCEoYJFuAj{$xdYkvB)bvF6e*tS0(GKJoHFS=qUBHa}ly zLH55e0$_y8zcJ8iF=a($Pzp7S92mZDdNrR(fX^MUw2-9Y5n+fNJsz=OL$&u-uq=vVK8PJ?$8f>TQHaW z{(yU3fjiYVX``Ox-+otHV6pB|%-%9cqh`V6SqMGSdx8+IExYl?9sIF`!*Q2i7xO$> zw$cH8#)**`|4hd9&30NSzdvT%d4sOexVjSz2=|%^<*h$1rG?8lhY94Z%1LVL_0O)q z-}XAjo!U415uxzfTWOU&K6R}#)?eVsgnx=(;j@q5!gBXEGO*%Mwdjdbm3&pxxH5ot z!wi_~ue(2c>zw(To2|5a{HI&OP4sFlc+s2R8_mu-Egy(IGY`e{B`Ztt9t6_rDsk9T?zZBJRkkD!80p7V3aDa8X=TxX)8YJlK677PdD)9p}2Qbn3p55NlW<{ ztE)3N$N$_gJn>^;=Zwm=@Xa4@jR|YLAF711?*>O&zWDn{;^*`d=~ejWhx>nJJG^(U z6+TT{Z^_)%h6dQ3f_SL^X%9HfxY4znYe1g``w)i>PGOp?uK- z3($OvrthV!+ZNxjoP&X-n0p-k+=Lb;K@l`$lD)VvuupE`P$Y`5Qx>>*+zh*`VK^gh zqm;;1a1;Qrf%g2hlgBHN;nLr8|Jmx}YEdy%(2xOM9mBlWDn}%9}#DAyxgmE?_`f8z-YNxgMVUCT(NgDo zLI$lY3BmCc5ODO(4)WSHn^__69l#wi3^<@QTl7izWIh@BcsRX7#5NT;Rkx&|`smcW zhcP`~#xKMta_BfDxMRO*6S{@b)NRn)|V5WRNXXNwM5_5r9s6Yzf8@O!9wN4gfmX-ei z{!E>PFQxtW&5Uey_9;P_GcE2?W)21jyvwsEoY34*&Q|eJ*{l+L_*j3?9%59ccK{kI zgEvPqAhU$>gLia6F}E#)qlzQt!+raG)&$))cpY2(gBP&qjU0vDs_-Pb(Sihm4VSSj z0vN^lw9^Sb8s&<6DElsf)654eflz(0?=h zku>5a0~)VwIu&PJMp3)tPQMU@+{D|&xF3tEIrz{WvX}@6XUT_V`}K!{73 z=R|1v!-s*1bp39G-Y9MN9|2btE85P(s> z#|A@~LFsE3e`heVaaDLu@^C#sH~JUW zQCu^GmR6871YA(zNnjk+oiW_e1f4rk<7H4Mc9rvBNnoIU6ky}vL)_>nbkIcpp5?o> zUE~WpdtbQhzsZZzTPQ3!K0r&66px@k;qj*-KD@DtI3E z089l#VR3TFM+)>3*uXP(A|fy6o1JdOQcW%(ER55Kf`~4zz$@`9NSk zN`nRpau5!84zWRm>ZAb{fFP39M-4h}0( zj}`;4BaS!M+RpC%>awXrcDUc?UqLx|`T;snOgT}3LkeGo9AZwT-MCXf52XSjx#UWF?`p-WQC!=!;i^EY zGCqo}l2~Ye?L?)Q4+_f!Qs(cB+_+=j4djvQw%gU5C_R-U&Qd89BO-UVZ<@zkcfp-d90PJ&cVx7lHSXVgHBW_qfM#Xt6R1a_IqPA7IEbNNK@Y?_WAl_K445ZvbFE z-baTLS3&wyhyUSOIgj10YXmmJw9p61g6)}9qzC6#MA{RPc_=TZSs&N3W#97m%iIFd zTZZbrYSZN&S1{EKSUBMb%%ePZvVKPvx$WQUcVt(oFe4fP3e)!XMFrFD)tWx}WDH=)wKoJ)Fn;OcW0R3$G zTJ~k`P&+Fgou#vh?ZH{=SzDOvuo%oM})Ug|fn_2Ip!(M&z?fN4`RYOrlULQ_> zSNaU8MnSmlp<+1I`yCztW)3?|or9tJOTJhUN<7-EM%GeBK59Xnc|^ihBtCjViSp)@ z#%r4*ke37&yhJ6p2oP!@GF(XR{+evdo1PE(63X6s_MG1M3bBZO_KTM0G|&AmK()38 z>TYey^^T}*EtOMCdV>$BFyMfhUxC((5dRl@f%AOQWO#VGSytwXJ^2AaQH!4`+Q@1! zrQKzjeGa_~)nWjj#CZ&~79sZy8 zsTMvB7E|GXWq}r$){6qS1|-eDp6GtU4KsDg8(WXIayJ0@A?($euW)gIb(j0F5U*Xn zI=({I9r;$oxM-^J&3Nm}P0}Z~|0+T9_blLb+SZ4I=ATWN;BgL0<=S?z4@Ca}7R&i~ z>#a?c(l;J4!2Ap7as z^R9`+nq}(Q#u$z01HYN_I|cM_9shnqrFsSa{hCVrse3TptB0>OIpyM+@-G?+v$9d# zR%pq;-=*ddmjkGN+dCKef6crqyg0}w!f9yt`SU9=PCZ8dxD(2i`flmp_pun%6_-7w zcRyh1aq^6{_dud+%#j!W{hI+$g}w+VYYB31;u&$c8`Og{(fKg?EP@g``^5h>LwV$%+oywlZ@3)*B47}e?6F^ z8JRcQSGOQ%7|=qGmBDiK)mJsM(Lyc$+NwBi9nbi;*^A;>Hj;`bT8`*86Wh^!h}4#$;|R~wQqh~_Y)QrJ`B+&yJ_#Q2!p>P%5cXQD zsJ>Q9n4o7>xaqTNQEHsb1Ms5lMycOgG6g*UG3GvexSv^Q7{_sP$TGMWU=Yt?{$ypt zdhp42r!##7tBV8>ul7>*Zj`XZj)B6#gLcE)i`x2s_HrI6&L9o*BGhh08Ru521*&yV zH~d&Q*T5)}5ScnY^ZZ(HS|yxpX-8T9TE(?0Bd;bt%X>J<-VVgZzgv&bVP}LxzN~$G zR{3OK0qs5{6o;+?Nf5UYLDx3ehV7$;_4aKIVEb4OPG&>5wlM+LrLh3o16<`N(Fc zoHH$U>=F3dgC0 z%(iozOQgHYECP15fF`n{)e|vu{bMDw(mf@B>1>Xp*sf{O-Ty%)ZNcYp zlxiFvcR2bmjh$G3^LbiN4!D2h7cZaftY*yJ!Pj$nf@*x|k8a?%OtgrSdLiw>-tz_y zO5U#up-EK8<^Y0LlI50|FcvuT(Cwk|e?oDgEEcG|6Fk=Fapsd&pxd@Zuy-KbUo2P$ zeG_3q*vRj@5~}N)Mr+EBT~qU+ z-B#z{Y>VAU{?bU<&N(2W+)R*ju!_wV*8Ed)zVaUrzeHr6V;$+z@uE$8Qrd@}pGP0u4vcIqqu=@lM@nuS{l}-g#}J*Q^UKgJ z8Pg&?cpMMHKht_Fh%NRbYzzNl*9J-DkRrly zw7=ToS$D79*?qZ0#f#%}^O*WFg5onErbz zw})wICrg0+doo@0s{5QI1~*~H&TuH!S=$qGKcFW{Pm~5T1iqpi6;x*qL{afo(OII} z>HnPpvnM6u$flliczv3(rTjaK5=v&AU3#Cp!kIf#dxk+|YyJ^IQbvKAApwBPh_R%f zx8MCPK=nD~ga3R&<*wb!3TuQ(yF&FHr&1O@Y2gup9|G*-WwPpLQUeTRVgW6GeErcu zam=x`JgKsQhDCpHjzg44S#*c~mzr&K<&Fz1{Gr^*Pzm$O-AeTM8lXxlC!e{4z^<@F zjuW^h`Cq01d)lJXlvh^YSF(ogv>@7HU1F<@g=5@CvPcxMSDu|+4p~ErnsiD3Cf`dQ zBp%iXmX|1`u$QN5L8h2!C6lX&T(kpo?^lonlhl27E2dPcw9fAg%R(|lYqbc&gW2) z2YHEJzQ9B7mGN2ZrFF8})3KLB<^?6DMVpaKDqr1D(@}S^Huz^ps4p3U&joTsZZIGg zbh_jwq7)$O^`qo~=GU=Met!VrwDFjiL4wIXKLouV?u&ktbEo+wx?Lj2jyI0X!w088-$<926ez3$|qJJtoR*v618kGCTW=_e=2@JQj}-Q3PyMWIL@CX!JAZDbGbP z0VsQRCZe_;VrH#EeqQ}X=n@6!gIK8=vVp`E+|ZbPUIYOy`ar~@TrUJKgaHD1t7|u`fPB?L6&_HUM&N6>&wI;qp^=`;y z@%gqgY+$1{s9!PkazDuf!prGA z*7g?eSE26Vubx4{GN3>}28l||`EF{s&v!hwqJ+!Pw z@s0I2L<=#BtD8xRq@4+AM{Y6g3;gov>T~BT$wyQ4>RKLaD=UM0^&PPukpzx$2>$`% zYUX*Q=>aBpL6DT|r5{~eF%L%=%=L7vX< zH`73vDk^i`?~tQ25D(28KVk_n7{d`QL=vA#i75c%uX0?G*PL!8XL0N&60h%G#SzeZ zw`Q-E>X(+*vA=AWhO*Yt$1dQ7{s`!k4sSgBDrgj+f$m(Uyz%*0q~(2M=Y9o>N4>OA z`^MiNQAF15zgzGQedLdP6l!b2d61zU_{`41^z7fVgKz!Pbjn6p{Zp=I3mT-o6;MEQ z#)F)SL%ovyR9hR{3j%n~2$YvSy8A-Q$Bd4Cixixvo*5`hAKpr_5j@^=3e46wI=RYk z8++zQo{;_6iP;^LKRNQBmm~oxN@hgY#PSW(=tyN$r>1a_E96dmS~?Da+r{LPGnDdC z3bSFFiQwIL8AcYwkvE`Lr;tJ?206KnO*p32KZ8}#K&EhJ5BBdoq0|Dc%j zi!2y9lS1I+k}T3LGZSwyQcrfuoy|ihoYK#!4S6t=k_auhFTm@yfh_3EzhFT;x`BkU z`7ON**jlGqUi>ZIVnkYeerHa7CsxSPE|`|yX>T4)FF3b@2*C+>*r$q}Dhg&7_U2`IUpKCH6n)mlt3HRmOYNA&gC5gdf8($%0r7&T{&oA%te0H`_JqSrV`#72p;SLx#p z=zs5clW_23i>164L_C~FpBm1SjPiY5uq~P-YEW3y4-KFsqH)Cnn>0-@qe9(BMZE8rvZAK7o?j3-{Lt!QkMpDty8`J6 zAUApop#_F^g&B+}?yjD&y`$2}27U>Xu8}eonC06Eo=;(ayFgUAik zxkgg?pA4ur1=b6P@1usDo0hc@R$tp=D72w!Su`k)pu8KKMg9?4;1FaZ9LmYDQXzo8 zRiZdV{5Heyd@|N#%dhAJxLoclJ**}}I@)&<9{d)#q-UeHVFlt4n9;h1W*9#exOqHK zd5IXf8qyCBomYVwWLu3?AYY7WxwI(Z*^V+}@CWh@vtP`5H4$*Slue#*V2heK3)%A> zv?C*qu;C;Il$(@+Od+>*MC~?Q=zL=g6{`LJ(LCcBWM91#vo_RHo};LCrOpJ=C#x4A zi(a?I_+xx7UL*t5tx{=Cgz6UfvtR0av*?oy32rm@xQL5B2jb5GxePRE5_d3b+zR4e zA83lz$Vxm7+B@X#OBd9OWI9n?PcxJnD&NFc@1wY1YpHu|BO?bxuwnR`)}a|C@d>B4fb?_iLtg=F-9yoiy0ULXxTUxAcc89>rY}^) z6WxQhUT|@iM(DM=f_SygHuGa`N_DNxgfFPlp-$sXvr;2hNk+@*_ojVv+yDnKpm&_< z=<0jh z_eW?mk4kGGa8=wXo(d6TT}B%7Us>1Xy{?oBNS~UH<`QN=TuT5AVnXdP-4&!f0k+*$ zxtG-)cOzzk;NMUio0EU&-aXLpk z!0j4Jcl>3?2;j@lQ(%tQg*h#SrvaRdz*|HM$s)8FrQ+%gbp4$pi5b(C5oRlK1ai`G z*diwP>nYW*`VF2Qh1L>5@q~uMRZ=45RaJG8Fs+ z?R-_!-vud#W)6{Lv#K(}FdftjDF=RO8xv$D3bU^rmQ$dV!PY?D`xX#{;qgcIJgRVT zB2QtR&E@}IBk=~e9aNY0G@a(DJevMXWmfn)VE_$_tcQ~ZMV}I zmzc+IymTcjIEbar3f!6TyA%gxHanD-A!?Yp8W3V=BA)AUZn3W_6vz|`5cE>Ic zZs97oN?l-pbf*S`fieMt`Y{*@qWR0PqlSNwbf-#RlX2R0%R#C#NVcnL{7U74pb3c_ zOM#&+Jdtp3cWJ&!iJQj*msDy!m@LK6J%QyvXPh9DB^@41l|*e02DFIb$y?V zd9(f4xHE?Q*Yy{eoH%w&J`w-Wj zP6J(P#h27```?L^ae(mz)ONBo{@#Eb6Nm<&35vn#955@iz}{Q=hs4!uf`?hl5N+x{ zqe}sYTK3gACVr#eH)zb%E?1b^6qnk9qL~mm0yK@i_+bL-!Ci)C!F#bh{RX#fEnW&) zz%ISeIvWtvvxA8GA3qVcDhtZsG(L<2${f|hQPZ0=cA&Rl=Pw~YHh`lb+`UXbXSM!W z08^B6+e}~n6^8uypcU%jUG}ZQU09Xt%<5@QkgigchbF5Vmm`_XQ#g@lRa5HOe zRt4zu$?v`BARHBm$f!IZ+73obbh60w`@|Q#5IJAB_5J?EpCTi9IZL)@*T3FtM%KQi{r z(GnO3z@LPQ(5`$lv8fUOg4w`8IMTc<>TAU7gVHg#e{02;L0;W`i!M3ykM%02SzlfP z8c#xM%p4|@MfL}l`ffw*QxK+{MU#vkIr_`N9cWnQr(T+l0t4{C;^SU}Xn?eSWREX& z_pSBTh>Nh+_F^3V+(#DfO!mm~SBaVQ#ugjG8%u4OYmEWD##J*wKayv(=m{y5VoYCwfLZ zec89kNE{Q?B0ZmK;0xY2+f~%{}gzsW@9v3$==blXi8zNsQGGNmGP5L!6R*xV8Lme~cB;JmCW z0qZV5slQB8;vg(xJSVr{bBPdBx<$f%K#L7kVuB$6B+B8<=}igG!B}D3v*bma=bpEy z=BppyA)-x{{_^cp`};ea7r-p*ycV~OO@YeaU-~4&uK}P$1kuqRW@a8>2nnm7&MiRe z`x9^$f)=DB(r3#rl=??20LHEDZJiyL+K6afe)UNA{xJ8UtHZ-8>Ru78U99f$u}J^` zr7p%?oWFPf0ej&Bx@BT%Y6Vc>+h?Px*{?aW78Vw_hd|=YmOpk8LryMkfBhPRCVu)! z+$TBMKe`6EIDk`NLFyBHMflLXyHyHK?tT{8vdJdmX)SKGGPh(zMF#rPu`)1M`MAhH z&IqCW$wbY(2FEHtcIGVJ+HLlilGd_%seQ_VQ&%Ajc8*l3nzp|BmffVVv$p!tF@a%qMTuy)>dCSe59zESj*K zpsOqCS%4$g-K@H2wpg$Ifw`8*bcIO#_fqV4|Nb*gnco)@fGi0!kE|MF`4MnJ7`JKR zoV>LD=tVZvVr=px?(-HOy_B{heHz-Jb2JpNZ_9BRaLV^aj|F!+@5r82^ z>u^L^nJz?T+LOekNFy)YQFWO@5_&~|*XEvi?nRFH15t`{9W-~P@AkK`vSa=(o z0MCtq;Le-iR+Lwg17;_3`1i`&`)dS>7FF<)2zgv~TWK|5$>_0-&yXk^7R-cNQBKMn zDnTxI=fqa<8%%ckT|4rf~A@`>LVk)7fSML>Mh z<6vPk#N#YXLYO*=%)2m`urxAjTk z&8K=Fd87!BLf3Ari#>H77<#_!HyZZw{ff<>VZY*A&Svg2Vtubqz7#uThHt(W+CR_} zAO~W~U>J31HUy;y01HM=i2KI5m^5Ys zJ?23f!`X+jBt~QFr|phJ@=yGC#fWT$oE!bV^HkeNzTpZ~rO7h`A?8(5BxxhR#g>5T z(8fMuX+(q75$)p^0^B>zqlP1w_;8Y5N=+Z1-tHf~?A)j&S-Igi5K&&uCrON6?|zk$ zDYO6G=bNXQl8PqhD)SsJSblt)gVA|EvT@(_L1ZlcVymF%_~t-xPpQ zcn&gb@SfS?&_(ME)aWaLIWSL^xe7&uTB1&83-5?cV0Bp;T+9;Pn8x8#RVHH}miI@5 z(ntV@fR50-s+jPg;OQj`^KE^bKb`DU6{3{$umvo(*oqIY%=&@g>@)jB#wza8CD#F@ zVQUjQu66?XnF1g;ND|2&!aUcAQ((UZlm}?td0Cdl&rvl$wbWXeXiyIMO8mXV_#5@4FUazwa$U(Au_&I_Q9Te5B9H( z2a9v)bTQnN*UzUGat9w)zHY?J@yO4K3sGQSl1XRYZN1VfNd)$-AT>Buyx~78@#?^HxX-CK|`MtW0gS<6(Ro>7S zTg;CtMB>B3qCb6}N6!46J7lA~pw>?l{rZj1@d-n`S$<38=i*uaf9Db2%|EPO{1J(O zL-3?8)uQLycxtSJpKRLb6TL6H7Y>GdMkrStinToA_=fywZSE~7ldo*>kC>s>S|atK z?xkh=rTd?q276DP3~F3a6Ed6fO0!#e1^o1eWz;PnxO3$F{_zD-g}!h7?plbNM}7~^ zAFUBuzBzrO5neG}`&9*)<&h-llX)h$Stzs3IIleVWoyy2n7_fcWZmbZnM>k#EKx_} zzx)21P7>{I6$`st^tw;JW;`bddSAL~mbXJz>9u!cP9=RFbL@Nfo@(IMaaS>)9FNk0 z)7e%a#xE$W;k%jIh4JU2446RFr{NU?k7*$BRqB)PvIYxRI;WG@gr^fli>vyP4kw># zO=NS`Z`zWGAGz(Ask!B{cMX~6TzSn!i4wiOQE3rasfs{UYG>^FCAPU$XFeP5Kg5AEpG*`4RFQb%#3H~t6=xH*Qp9|*=McK)}!LU7ACO7<2h z7<$8WI>PI>eCNp$x9w(Dd)kH?GwYzG+ z&h@#Q11+C;QK8vM_+iy>?5kJ<~peC^a- z^_OAcqn#^dnMAs&Tb$y4!OI$-l_8M}2v&x+nRZ)I5jJa+jV~6$ycwFqnK{xl##RKensLF6%DMPh1NU6W2#4l|$(d)~z5? zE2{!Y6kt;~6u~hWGbInE(n6HW^fjpP%I2OW^lq#^1YqtgwWDq~mq@QyPy0R>}5P7?pyKEd&6ck_q8?}HQBkiX5Vdxe#gr)Q0wLUj5B~uZK zY<09A+>l~^D8yMgf$!-uHyT5I9nmPnA>>!iV(ws$a-%+6xfC1MIb51b1)WaVKBK{+ zUG2I4AiljmI22b71@y4V6=%5b=T1a!B^l8zV(^d*T{5iU*S zCa656oAb2^;?$$pB2@a2kd5B&_wb1QOX-Cea5p)*{)x}6x08~$87b-xIg2*au08`Xig zF6CbDs*a+<nCET;hA4*1W(wLy{5x^J^>xF8^Hs;${PVl1r8}6TI0Rn1 zx|6Cfy$j8hqu*8Fz2|cwm>9vWJ7Gwx<=Z zv_bP%0(}tSBE!=X8rEF&+9Ke4xq&KweR8hxCG%hHb!I6Q8@eHSRvK543gPE3NFMih zPN_+tWx6d34l=`?o{A9a4*ome7P1*5!*09Pl&z{NVfVQD*Fa`c7`xrR09tLAXoFWR zly!KT*&r2`9pP2E?9dTvh=7b#SZndhFq3Vb;-g6RazxdLrOxca(=p7`GNi!U3l8x# zqyP=5df$1&E}>W!X^Cs7_U+`3rIt*G#vr~%c_g>WiD9>2&V&xFJA^wrWz}6OOa>gc z05}68N#(u(I1Aw0H9a>6{ur~9pGGvw!;0T`KiISqD!a^hZ!N^lJXqy4T<;MWvdrFU zGUW2cdsFT_I&Rd1p!Zx4?cOxHVhhb^a=fCHd_|`D$^)_gtE>6{meu|bpjBOS?*Et7 zo{JGWF4T&Qx!Botsk`U$xdbWcWB$F!{rvD#iZ+U;5ZZdj{Vjq6jzOhP_TK&9{FtTh ze+*}Yjy6^>7KC0x@~c|9xNzHyotfBx>}oJ8o*V-@N3 zczOFOWsr&l@Zhb~l;gHjd4}$bq4Nd`wrFLCr5=!7CQrvHgCpF%TPLW6wA5GO^It+Aso%e@70kw$a z2RQSbOP9qVkWP!e<8i6f0Uf!AIw}meBX`fqJK}@K)1{n}WMDEXzg44a_rvm?kn37) z&#J*{c5%tt(pP-#_DvIv2V%dNsz$ zKz)98Y%D|X`D{+EK}%@`T)3}3?oph=(d}nsE7-`F>(_T|VtnUGUqBa3XWhed7_fCw zlrJIp?mq*!v|l)z+aF$;pO_Yie`{Di8T*4Mk_pK)-DX8B-qFi}c`3_3I$2bWBO`wY z@A~mdR*7V}f7{n74fNPpB9Wr!<&N1B-8KSIBB9F1LmWi~Ugc?$L+kQKhI9+?>P}09 zqLk6jqbQ^Kz0OuINA-aFl~QRGiPAc$T7sPRjp1h7$RwS%@@0_uq9SN73tH$N6y#!O z)l)7}y)p_4%EzqJ7i!*3lAqO6HI^v)!H8c@jWRv8ibCJZVIjvp+HAk9QypItXdd35 zA`X1wxwNTuLVidg&G<)heQDVvs&$={XU*H-;)3@f#r4zgv0^IXzO8M=vM8RiQ;&xh zkg>RYHBWg{#SeWK5{%^CH3=yV&Ap#JGogOuz}yPNm^L%u33U$iA$>&OAD{GpQW~rMg?`)}3U+6ZB zj-lM$J5rF3KBc$2iu974zd|{#p&lpqp!#mrS+&81F$`0Lha-{^9%}>Gi6t6xLP%V zM<>NG;3)F1$LU<4vq%g74U;bcpBz)%oMCXRqmP(E*mqa!S= zaD~()!wbABH5aXwc@Mn{3wUlXU!YlL0r8TnwPUbgNNYI2>wxlwkTMV}!~*^EfUnz$ z`aFPxIa)M1`RFE`J&NsqF+9Y$JZS%`Ec9;VtLak1A4Ri;yaNG0q-|CUi$&S)e z%8i~66)tQ*hRRneU@z1s!C9Qtlk7g)XOw)>dUJbwPl3;RG5VWuJOldc6EE_7q45Lq zyqzQ+$~(v)iWF+d6WO+}CH#NSi_pc%%|T&>e0I}MZc#Ee$zPxnsOK5oGfn*hmCy0P zZj}4uIrBIz*t;upJNELPuDJcR0q}t~If-l9sB~WFK6&B2{rErK9_&8er9nmh-cgW} z3%LFLoC#a2J(OHzKu5Dh7mIfnFHHE(ZrUQiL4rEWoXZXLT2bsscanIdp1sn8lxT?+ za>4Sb%et)2$2qTRrME3+L|)|>HeX3!;+5>_csrZU^ntBhVF*u z#9tx4jCZ!$yjyci7v}hEh_Cqq)>bYH4&y>NPey8Wtm$H37a zws8UuaO%RW!;1hP&mg41gr%zI(YG9-n^ubgi;R?fJ+cxO8C3}IKT|5z2*il`X$+XL z-NR%z&wh7z^^UAmjXCFQM268WK&kf`Dk9>(6ayXi_iaY6oi?f3%PuoGrpy#ajWb_%|YEg5{Qu`~}_ETdEzJmmcpc|I8j$v1l$oNr%k8v2g0Vth1^t zU=#Et=>3bV`1jT0r7zt|THuJV-oBZDC4v2-PV1wF zcVOAk`7Vtn&O!h6_t)>%cAwena1eTa4W|0>>*>O4I0Fg?ef?W`S?e1;XAf4jR3Bli z?b4SI(|nc?hL1Ide}MGl^RJn2}AJ({BrF-r-W5MoEZi?b0 zqi?oc$RML6N~pkIl4LDA$ijz+*B17hp4bm){*7Ran+TDnINgWOVfz(_V5j+G{b#lj z##Q^@55?sr2L2whS{F%5Wg#Q!FyW*Od>I4|n3U5~GHC#U0e+eG?W$1K#6f9vSU44g zav*-RlPBZ@CHKA@X1>EcU8VHJx%Px8Q;t)YI`9vas7A-N%HoV&Vl$=76=m445+)o= zL7+KM2_}S>$?Xrp)iq)E6j&-H!Mh5O&9Mg{+)fe=ZqEQy0c{!qDZT|X z3L0yZef{FX&F%5v+uTsu6E3Uj@!pzwgu^3N4tHgdHdJT<2Lx%59AyB)Mvl}LU0Xp8 z&q5&p!W)2#mq7q6cpM4IWzUPTO}mgHr}A}Q%+N~*aZi-glpuNDLe3Xwwe}tl5`^>e zK2;zrndW&^CsR(*_1d%VXNzELq&Eq6iVMV{z)n#B0Wx?mKNzq-=xTA&Sv~|As&pMj zYq5(j81kmrrEiZJV_5t2T#^5Wt@G?^qJbLiq=(Q#?+|*2(7Ogg7clfL0R%x5LQ|R= zdWRrg1cG!y4T6e@8k&G022hHkh9Y8*z2~{}zW38z>;40>SQ(ge&feP+50zw9ybY+j zfLmn6K)cWTvd7g?hr|>HK<@xCyJ|cI&K%o>1(GZrgsMESNi9AUIc%V>_e6m`v zeLVwHrXBRlJ6zMPdeA$nupow8sH0Cj)4QZhSw^h2xyQcA`Qd5BoUruMey7MtRU6?i0fT48r;Q-m>H^Dn2JrJP$y$l zv9V<=B%6YAphHL$gbNi30%pn-C@&SUk0!=X7sQiG3)Y(oHGvH*d>;jxTMQ8?F3OK7 zI>jzJf=>_k*6?;wS&9jUkQ#a0!?k@g14T?;pwxAKp%Yk$L|tigDh z!nv=TIGTVVu4*s6^sRGIz6MMNfDLrOulVivrlFK#qc47{=1p!~?-Ejoh+W7zdOQZS z!oy^6u#%Y8VKnkhQR^PM^;2wHeryYfRYVcoY&*?Q)z&Ro7$you<6{L{xG~{aM>LiJ zT$^b#&1mNo7iqKP6A0SDuJ9NTg)zR`;L|#$5mt|+Z3t$6; z)|&Y#IpCf(%I?0jkj*K#HjdWnHAHuz@eGtCyUpiGSNz4&T^B?&1-0&I84Q{%QInKD_orAGO z6xcpSSFz>A!uv2@0=ycn8B$o+3G<$3RsEyFEU+QETIb%XhFyrrC}M%M_{EOjeaBq^ zbt*gy$XHT5cIHVVoeG-Wc@dm`FtD7Ztelvw3)V@whyuz@EqxGC1|M}y>B~N@fHnpG z*OcR122o}O5aJP>-1|}j%z?ojfOQw0(egqshY@SIJPS!+YfXiDM40Bh& z1)P2>%F&`UpGWb4&M9#N)C*_Z7v@)lDJbKc3YQldx1q;UsxBk!#8hsY=3|isB@CUX zZDbO}0cTk&M7cbU)x_|CmVa>ws;*w>YY?CT^l>@J-DnBSdfG!nC4hkx;{g7Kz|h)N zucmfh4#2TBuKRSt*HbkfTQcr6pujnsd9=)dS}PS1AOG6Az9#)tn~VSn;>4mAGGIun zYbV~;!s##+9%e@o`qU=Wu*$_MNu;mDdXf+1^h;VsX%Dd@A*OaE2r*bPHS<`e^zCVQ zk0nBihLd2Hp8Rt&RI^`?WX7gL6audtqeJXTkPm>3dYjySLhoGr;FWtN;x%fQC5PmL zl}~niW_*S=3}MGh#rZY?eF9vmC^G2)I*rvw|1)Yi3me`+p{OudFn3M6Ekp%>CIF8G zd;o_n8Ns^}?Ij$fWs@&E<`#tvbkP)Dcj3GvB~Mi$&a87pV|#xNlt@QR#7GD;^YS@} zQJ&k#^A(Dg$fz`t5C9rQL1O!1cnSo@Iu@RN=WA}qy(2>h49w?lDaZ;(FG^Jy;Ip%6 zwx2;EFc%Bkqbq6BfC3IYHIr#PU)t4(Da%iO&3pCwEiZY`aY9InK|1R28V0oCgVUJ( zSR{_ZxBJ$;{>j8@wN0GhbnzXA;dUPeG-I7 zfZNfaXSHvXHKFye$RiXiukEO~Ata15S&HlX>+0eoo3{uPQ*9XktT+eXpu-A}uNQCfTCCZVSA zSpUt>oj@tD&NYXm#SO@d(3$4}*wwC~WYIZ)ry;YhvE~^dlz>ns03z!P(*Ndu-h@6z z<6Wr_W8;nrV;}rOtJRLDOmCpgfIA!Fg5d1T^B?kI)g%0%qYSwPA^RwzoN0)4c~AgD zFrmjfX>|hv|7|>y>Xv_%qjL2vnt)wi%n^71QtZwki5Uaxm3Df z!#GVRhJIEl*b+U^e7d9K*_jbo+dnjh)rmde+R}jr^@SD;cz1B|S1tHS3QC*4@rnP1 zpH}9X`HOK;}!b3+}pTK zDwt5ebL{QmJAfI>wDn#ucQRhMUY=)2?7fKaY4aP<*~{-t^?-01urlKH^uim09?$L2 z*GR8NrvbPj@MvRUqvAuWwK;v|v~aWlk34gI?|FPNiShByE8k4GokR4n>pK<=j-7K1@x=x`*-1Vpjbq68unRj;AtVvPMhz&slH7C9e8@@3+Dq; z1FMp~n%nW}v!fVK^`p0@`xW~V(FaM}9tqpl1SonBpU$D|+<9aEANr2tsk#T8xPxeO zsqdy9fD9WIq0IeIDEijDZ$f)o`RhY;VRRv*k$$$qGNQX5&{55CuJ(uxVwym-7 zP{QR0-`AowFPh6Ke)6?u)Fe=fOLN9;*V*wb(P{ysWj`e{aeG$EoO| z{eLH0-)`N2kL7>56Kcsk6-@y8oGwxixZfNvJu2V{6{F1*vSIF5{z>ZsNsb#wb>lTI z%MG08smv*);>D`B;8R1_{k*Qin0ssJUm8*_za+;~I;uFktFNU9EOkrQpraWj=Pr)i zfAZ!xMy3?Q-3t68-WE~g;{~cU-tuC>`s|lf@239I^I3GIDpN5VU7M+B88kaco?QClXYW_d_r1(1Qhi5AAAUg{>J{UEWKn%3XnpIu~wpaQcRsTyMqbQS#;#U z6BCQrrOBdC;WJ{WVra&Y&)B4>IZ{JoTdBR}eyvXMMHK?utvhvg9Q$`Kkz52sS+fGs zKAX9M>q^p>#B~b_>rE?i9gvJwotGzO2*WD4cx`1HPVLTRHV!itox z+7kr%HNM`HII<@S)i2>Q;)@MAtV%9FJ;a3iqNLYWjWx4?d@~oyPytN9$9WPI7DU&; z-A6ycih#9tU8<0Qp?SlP&DAglMzrhz(6}#_aZ4l3(`ZJZs`` zZiTCsCbWz_-hOcR!=Sff}LwcqF5py__pd+qifKL_yDa>}W3bS4&$V6i8^? z#mftRE=-{(zZtPGdWktspb#EX)f3h3g zc`ln>itEhjWu2a_fW$h&em;6oQP9C>_dc z@9}G6f3pX{#_TAqI~y?b7zTMQWEVpjK|1u`$#{Kolske!&hN{FAVsN}9}x2#0`KAyUrOfNhH z%HhWfu*e~rIeIw5%zQD^bXi)_~3=mAN^2KV=6P2#XJ! zYBs9q!wDdgvO@-BHW-c&^KijdbBz37vYPFA(PeR>{hf_>0s(;$sZdaQT#_gX|7oW_ z&xBeWM*CsIr8BNdR#|L}sT{H|=b0{=-iM~6geM@Vv(vrWUD--W)a||<=Jm_#V+Djo zTgfkL6EU6leb;ZI6^!W+-55yq^P4lqDls!(k6}X-2#)}10E%{F^I>8-1#m##$QlCb zk=Fs`VLvQ6kr9+_XIpzIDdOMnRr8}1Si#R6vU*bd)B%blDVFgZ%NqMkWqW8o$NBue;Ual&SI zHtTAHyCg(Lx~p=2JV7)n9GX!j;RmZqfny}}0GOX+%7uL#+tRc)kTp`$^Y)oR z?!$P!ap;4Yn?vai;}$!(dHZKj3E>)Ct5b=la0O$&h}nkL2yjLb=u|lxp?|`; z*K7T1ZZWrj3=IyxCv{ZnabN9};A*2IC`HdVF^<5Gu>=Xy16~sORJiCxK=>!epwztB z@hxXu5K4Y@tHkt5IWAk^*cyhEW&%sKDix2|?V66AaE zvwa~o2E3UTlpLW*Am3!icXacVD_R!h01x+Iybd_RP7v~cFRcodY1jf?wPm_## z_DP8A9sWklpqJv)A1J0}^I)Zs3aqpT*Z8xc$A)u73)B6VT<=Mm zlQelkHm6gbUln`urkMBeP1ZLt!>YK=oEz^OL%J^pt8>^|DjIc*O3&l`?%Vjbua)&NGVgrrVbl>$BYpTnVU9~KJ;YL#Or$8$3!6=xJ-a^GPR zcB+(6gTCHbV9Z@UKA4!kg@n*`XV$%-{C$OLcvkW~r%71BABoLh@_3#F-_jQ?8_EC$ z5E4}`RMHp_u?qMx=VVV6)|o&&?N4vM^1j$8YvXmu)MZ|=>Oq+6@4ZeXCg$fiWV83b z%ZltYbv595bLlo-`e%pQUzTTkvdz9lOK*3(OW&vKaO=%f;Q2IHsx_e`Ns2>+*_ph* zS-R(Q)eX7qF7T6D^F&bop%s2(JWnaD-}@vJhHmKm>FIk;ii;0O+1bBbCXM z>B?$*?@WY=#yD*e6J}#2-Jus*+<4xn z>Q}&k|y;nTLbDjbb{EXiGc6tYYaHkCtV9!6>E+4@lt4b=# zoRomkVM$ZRJ${H=VJ&~-VFPMpXM}WH8`|k?7?;IVF0F#Pvrz{TdA0$R?oH6E<^Ezw z+{NT*JR@(O0vx7zMMQ<`B^~Vl;We4!=0Jm*CFlFJL5`<7g`yP%#Bp+LNGQ}3!j!Fc zC~)x&rL+P14cOCg84nIrfSFM)rkFUx`wQ-UFU2j0#v@G+jV0mMv+WyT(4<#|VYUFt zU%BfMAVGIMf(3+3uwtn`B{8{^Smdd1MS3-&{C34ZR1}>Y{M;xAeda+T%?)zRP2!XB zvmaVJgYuYyl3r(}Q;xc+EC>kXNnnvtY*nIf=>*FiA%v`4DSZlBjc^bm2kMV?`xM|N z#wu>gb6E%w#UHkB`E1q9<|6M#mq*wFm(+~S7^E;P5~KzDI{+}*iDN@X(V}OrO9Tv6 z>^D?bpm;y%k!-q9=>$P(-w+4`G9ZCcnL9>Q+(L%h~q- z%tbuyx`7XkJ&WsSeruYqGZk z3E-nw$EC-vDOn)C)vbr`b6`vIEEb;V74~1!xIu?Lt2TY^51yK!zIwxRTpC)aj(&{| zgBKd52}ENq#5w^>p}7cJQ=nbhu(b=ijrpR>jK-4`i`HIg`|uj)UhAA8InrPwb=|?% z0N6isj)T?R?tsg(;Yi{+FkbIYN=)^E-9bD59+s$rnIz$wRjMIERA|{GA3p>2xZ!*U z6UK}85MsdFHT08cw&grEF+G%x;VPBRtI6mAghUU7+Nl;o||H2#=LUb)c9Z8z3 z9y$4CYXs?hsOZG@3H2GtcvOcm9! zxZuEy#fgm>B;z1n6f1YO)#Gu5!dA@*7r;NqrkN9zy(4YdSmQv6-72lFurO>f+IPAJLdw|F6oO<2gF5O9SUNKQ1@^8ng!w z>C|Yt8?PNnx$T;)wpb|~SZeP6iXgBddO#Ki0-eck2~87>qIMZ2c35u7B^$y?v@(;a zipeGE8l&bD_ie$NG2YwzJ#7EicF0L=iz#4kI<9&I=UK`?TQNn#@V)aCmq+yjfp1{v*%gM4N< zt#6J6!84%9-_^4exeZ%%brJfq*+DBN{8v7e5wTAb$8GbtZ&);O<;@aLFbTQwRf-}6 z#P(oeq=Q~af``w8{PDxBOLjKzw=vjo=;s;iuf?n2x(O_ug?>_WXo-^WL1~leB zx=%x)UwVX)HFO`Wrpc;QTAmJc9SQ9;ft1;!tYhm({CUTn=K z(P4K=GShnbQt)uOfheo0FsTc;C!UBT?)m`X7jn)Zl@xu%1b4B8gW&yB10|nm!6Q}G zj~0;??-S3x5xQYz1$do2mf#5qv23|Ufd&7l3G}`UVr(aa!|F-$t{83Y)!~{Sq1C|Q zPe;To4v4rPu5W1KOQkC8Nkk2IhTVgjXksCqb0&IpnC{Z?_^QZK3s(u!Sv4Mm>bS(6 zy5eG(KdG5HT*r?EG~cB_DDbga^*f0nDwZeTp5qH%9J^pT zMkGTUw&-Sq@`qAjc#iL-SIJzMFTd_cjeBf)U~WY-<&@J*%x&_pCaK1;26>V-5}K@V zbSx+5hk4x8JSp}ls?O!OwXT=y~$i*oCd5b z&9Vxb)ak)Zk8bT3naL?5-@9t&9Lona#Li@z1{e)w?g!n~Q*cLinb0OYe|08gE~njd zB1@KEm{D_@a>%jos5J>1coutzd~4#zm`T5bbX*j1`(&jXPXj00uM2 zNY;hnX8mfc6hfT1;>z?Jykm%iggaGcV?Ics_N?hxuk??6*Zg8c{XIpL-#nlhD}V;K zuEl|HRQ_-l(_Oj5X?_8MC4ZckeK@a7>gR*8VR+l)_yOo(ri27-glQc$X((K7z%tE= zlYfTReyzCNvsw(Jua}jDWPiGgvfV@qQtnL4r1Ha#!Fe_mM?rcrz+oYb z%*DY#uB_!5tM9}SGZsXSOiUmf8_{4$I@E#$tZLDDz`Z5;e%bMRMaBziN;{hvWGfx*|ai-0#x9RireGW7T?qZ)M*epQ<7N&+zYz*W%CuPh% zTi;dTUaMSOs`a1H`Nen=&Ecz$wUxF4Rf!26uBa%`4#%IQc|`tB_S$yyQ|B4<4>4hR zsU_A|4GI4zzGtP*_4B1^!KbU`+>B5T`1&~xBA)75>YnP{488ZjM4pgrRTydybYE~T zk$$i7<~tjI1G+HHXHGy0X5$hrbx`OC|32&oZNKIEBqP#OZRIRPQ82eqX2c~(^T2y; zHPLNB5natjzSEOU*QCxXKDb5rgw#UceT{;{77XPmbH8>2G+X=z4TbIK`MD)Z@$?Cn zAvEkZAK0QEOs`SemKGlgy!U$HKRLj7!S>9)6@UXRSqM+KOe!KMw51rZN#YFbG0HT4LcK%t~yw zp<`dFrK$Q<9QS-v@f=&}PpI^KE3r4`eX{ME?epV`w1*+YUGB3Ok!w?9z1yy#QT4~C z!pTL~(aLaJY2SW6OY*F)t$5}?VNhu?7t9+9u8E+^f`(kI<7cQdVQ`O6sBBcKg@AI^ zc^`c5bjie$d{*QS6S$vmlZ40qeJy;i-dtL`j823=vRH7y?_Kj;QZ;7reETuF?51E zoeUm``(Zmxec@Wz7RzqBNtZXzWlt=U<`%Q1vU~qvv%4|g;|X@QwRtin#RwY zb{i53-rmtJmpsJyo`Pbqocn}TX|z}*7qKKX_DU~aA`ClWBq)~Y&~R5LVw51?&>1Wp zx8n54ZR;6NIBU_=G)(TN%XBj8?OUF^GQWbFkA6v91^G-InV5n5%}bsomOREMuKr-a zMD`z>MFtWp%*?s)jS!*iZ6%GL#60Wl^@ z_m4|0ajThx;-@}sw&}2Df}ugQHQZ2L8?s;TbV+GhnVCEmvQL}0mRDOQUW8Cw-clOo zqiO~GUse+U;>6Hk)Fjq>U?3SG+Ip)T7q8ei*4x|B9x^&Jdw;G3c6XfBuL>x-*-IP5 z4m}-w_H^jjlVqupTMOLf#n(Lo_L@(gQ<8RCtDA0E0s?+rRZ@L^lar!vskA)LhSY8j zft7yE@F!oTQEpl>o9*9IpB7X<3(qygksmd9fuv-P4!2XW5b_dzg1~E`vzaHG#H=bP zNHSN<#v)Y6>xS~AM0RLp)E9-2rC)8&4dp^81v2|+QObew=RZyHzxy^k2UEZqO!DgE z$0m8j__8NYA06A>(TOFAE9#roL^lVziw&$CFkV+%lQaU$<+`L;kxDp%&bgqDuStzE zUW@(FntO9tvW}OZ3QWMGn9R!k`;hmGgmosdumf3)$+K|MlHKn4u>o5j!|>ts3ziUB zp^6gjsaa2E(LBolz=kuia6T~~hKd5gMyis>eRQBpDPiY?W?jbE*C!`)zQ5^HilksG zOea5Ii#mBQe!|h-`}2}5;4>O4Zgn(KOGXCG_wylu)nH7dn{@3^VfsTbS)T!xsHCCZ za8=b1i?O|M-s{@Wx3}Lx8g)86#;;vA#0FqKdSI@8x(g5e&Yh$w=r5XT6qUvbx+g(-=d5-gV{4jD=;dg8tFq}Jn9y@Zd?TK z!t2-lsczV>q3RabOsGRXi73n{;Mp=Aluxo1LQRVjZ~I9IEI}-?nAfV0kqU@wB}0Go zUM%vpsUGw7xyLJKNh7(g2Q_Xz9o>+9`$dmX6mi|9V+a;(N{Na8`R>1dYo}xUpRKCl z)rKOIu{9s_?qjod4&8XyGHL)>ADjDEe(b7q{*QZdSLEjf++vs?AJLZg-Fhz=_;*J~ zvNaxSH#VVp<)>h0l|@hKU%J%G7sAJN%(ff0<9{E#C7`+aoEK+Eq2~zl9XRRPn2Qv4 z6uJ?ZpuQd(=oam1_>Iz*0gIdxko-J)JnK^6kQV=c>`A!DUIqV*2pv;*864GkuF)0 zy1fui2{px&U!In$gtmni)qs#FK39$TQ9(Y4}H6Yk!?!ZpO3TOX^kyIW;Cyo>=S8+^cXRb-qNay+vm2 zO=CAf-PFg0*J1;bxBm6HNqsmfIJNq0W$~==$MvEd_`Al_%g;;DBc;6OKh^Zi_#EJx zEo21^X@J>0{MogR|7M6bmNC+*ztFh5qS;XW3j(K%T`~Tgv6um#Xl;F0??W|Sg%9n6 zuNu>J4~E!R_E7FG%yeYGZmTfRK@hsApYJM3Uh5(`+(S^O=jeydhP8}$D{jzG=Das*`aE9GGhNVS^XgFBXV0h_gMqFFCAS^V;HMEr zd>fBqH2WqQtg zMUGWv@2dUG{(PJ_gfzk@Su}LYXU<@!pO>BZ~cZ|4d;&v~8tIy5ct;ZlSfkE(OE$Nt|X5~QJTKmRWA zcZZwLn;W&IB738x;qZ&{ihWZ$o!((Xp=kn#&WnrQH+;}>D|*3rG-+P{u=lJh=6jfK z$I!tri4VhLyZlE>gP`jpQ#$lKXQIA zxhtFS_<;<*%&CD`aPc#=Pa_WU`cQFSbotS1Q{Y&o{H(D0SRRxZLb_WLu zDWc{%Z$BZ$HBM%I%Dg{r_i1yltEp%0M4C|mvnF{j~pW=M27~$^QFfX zL3N8A8K{6u`|i5*etnl1t`6G?)EFzs*U%bapW266?ET4y;;YdGdLl)u|k=BI-~$W!t7%CF9q zUr-Q78q_*Q?SoOi`Kr$7S_Sl%An0Ke96p0CrUkQ=bV0V2QD}#)a-g6PEcmK9P13?D z0ee7~RaGfMlM<3Tt7LIjCGf0TV9rj;*%|ErgS&MC))1@zUz)HyK~4|G56elQojWa$ z4-b>q3pQ)&?CSo%xZC9dkav^7Mqx1VswzD(HIHVz^f96PV4Bd*%$h*xy?QY)cPs06 zMmstB!5~*y{WLFScN$0v`|_sqM7u4P8ubEm`At{*U_q|P^tJU5e7(16%C{_u4xQww zT%s{`g{c%W??!}^v~Lc@I!8HY9lC7@=ZnE_T#bJJd+7bsvO9UegIiHgj$nGe%FBP? z{jfcQ;-4`&|IK0IvUFDy|43fbf!V>Q(b~5xcIy|U(LcC1C(YmQxgT6}KV`y$UcmLJ zRi^v@{!?|=t@DiOq|{R1`H9vD70JRE*Fo`tSQEXlTwCM+amTr z<0kf?n;AI-Eopqm&)UT*_hT}n;mI^DG0Q*!M08ET`-{DqcOpes}bpx(5^Ju*+ zgElF>etDp=(R)#}LS|N}e-^-`A*(t$E`yrqRrwO_rH>uP_p2S(8FRWTd?n+H7WSP) zRncCJ;+5HAV|Ki+;$PeYet(ZgheDouR29fRyBq=G_3ofdNu&AERM=5ECs}Jh{{9ej zR4LS1GC=@YksZea&ATgDRagOY>cCHlQgF0hEkqV>T2uiKG41?X%VuIhyZ^j|;%T)f z)A2G%6OFPXo7qNR*(Au?UkeX=j6sJ1LPj&B3?nBy-dt__4iVSbTYchb;0k7hm{ET{MEWYST$$XcF`?mdSM|er0{IPkdFyNe}bORC#fvQ5(Ln! zdj0Fz{m8MmF*klcb9Qi#990c~UZoi$v zA@rT0=6Dh4Geuk2F={R(Vy#3VCWg4RRx*2ss{5N+dhiMfy1ImesNlmR;ekAsD{Shs zPucu_R_t%a>=7@J{UVEQzxYYbldZ#N)VwL!ZXo0-PqGszdvd?!H}f4XIUCQli=a=? zO+V(f^JPAolr+ad`kqnp+(;YJYO_<$_jQoR$hp#j+&wswegSbHW>al!rcjV?6XQk! zRB!G9YCZ&BX-?RWH5NR~8R34xV(rp6NB>P;d(@SNa9|ZQU*p2j_V_OGpX?j%1qS>V ztBD`oJP9#&g9UwW<&D1*B#rt4moa$T&H~g%b z)V1@Wd>_)B-o7+y?agiDi`{cG@d$4Y>Do&5+8rAA z&xk*2H*q6k=3R;cj*TJY$VjE<)O(d9q8-LfyILL9S||N#+y*x9LH{#{q?kfMG5Ows zLTN{S<4r)`93$q(po)~S;k;{10Z|SYwntrRwO76PE3Mw}#@pORNql7;G_SGV{r zSSoI-7w<`O6pAQu}Kf;BI+9KFqA;yS7=(%<&+rg*8mn9n^1CEo5r;z-M#lKr zSfU!cpa#9J)iU!X7xZQ0y3>>n&-y`pp2Yv4#^*z&e`5;vo~+)1;sD9B6!^YTi4Mw| zmUc+~b9MnS-N-9wf-g&jD@XPdO2Fm5<62qmn}qOL4__(x*z`h-Z|v@DY8O&v7_*Rn z!vw;i=bx^}BHO3HXN2ie*L63%y$(e4ukKUNgkSBL^+IX1b@}g~i)w{Vu zp1D1~jaN61g%ys}Y25Z|WaVZG;brZAt{wn`6MZvPsRAA*Ce1)6%g{W5a6wTX*|VG#ll1I zsSsWQOq@YMXv8QY5~kD?&azeyJ$-sb!J|3Y8^~8V5AglE2EOZ9g*yG03eC>LqvQP7 z*+Jbm>`OEp&p5z&aNh-5qbJ2vQgd#uq>l8zd>cB3hn`R#Tk#v@RJ=c)0M%hu%!L94 zpYCsuK6!kNoI1JE#fGCoZXE(qx~-c)uf8kRr^v ztT4>TzO{5mF!#)zuYn7>A}pI9T6o+8uHUUux%>NT^{a)<(oWts7=xb_jie&pqp;v1 z{Bq^pzrg|ptD;+g(P(u2?dwGAVj|y-t2z^AN~#n~gev^iHVTjT|FTLISc|M!F>EBD z^4t9~C16CrrtT#m&d{5)Mc{K&GP@lqG<{oIm|#PW7WjEgtrG~5$^k@SE+ah<3dFGx zT@sob1uD!X(8W&FzL8_slXK~Z1@3V6S_5>c6v>AE~A~e+gDj(sW?>8ITal_{>oALjD<89Q|bY*MrZAc3`(t z#1kUUK{f(e8fQ&A2d#*^o>^4nZ->GPjWb;c#MX}IpXtKLd@C_L%p%56g6{pO&B}@8 z+?VVgF^TfWQz{!umR=?8os4ur`^OPZw|Zhn+KVTNXb!R9MPdq(4tecV+%N=KlTt4R zlnwlVe){f}MRA1*Nw|ArN7qi~IjiZCAQ$bi3+VEYAuH}_5dtDA{8n_?)?O;e937tt zRL*m-aya^iQSL;CMkkjR(BX~%qSxN#X0=uAjsrEBq>%5Tj<0~uCfx-^=@Wjd6R03^ zrHr>7*U;sXiqSC=oCjZ?a@9o17*66qWq*Ok%5IzXhkqlz#jj_;($C7=gMn;NV7`qv z6D3V{m0zzS;^7QY7=_>{?xL>$6Cz9@YSN(ng9o|Jv7u_Qz_p^yqO)!{!$IoeL`ndk z2_hMf5a#%aiPZdqqckb|tY)k8MZ7v1Lcl!zjFd~2fF{O-)e5n8DhiBnnvg4YH^eoO3VY_3z4P*`uMVIQY|ox&{I+V z9VXBi8hl07W8AU9GQGKziZcFw@Xz5m87Wi%^_V&psm^NU&ekwq#hvU73!vMfpV%a^ zYB?^}KPBvY+bz*dD_FJx@CcjA#+IIH-V@HUfV z>7aJkqtU0R2xpSbTT};)f!NR5w@l;b$DaNH_}I>dEZpcIkHmltJ=?l06t1%j+-%?> zAM6lS-*EAGT?_!>`N7u)L$o$_gpYLhAdtUn;Q`-;U|6KTp>AG{1`Fr6NdSo&WEef- zG_@Y)H@>UO6`G;;XoN>Ask0 z7=$F40#*UBfXgTFNw2&>NFgcyanGEITuBmu69qsj?gjhmwaoM267Yy`hqYPFYOO{4wh0NJv~=Nn*42W z7b`f(C?+0`2C&^2(uB8VDO!%xxKHNV&{0e(9#U`)D=Z8hWnzR7s&`RwWptR3%r%h% zfUOKq9$_f-S^)%myot_`5`$vNu)Q59$?3Y+)2nNNXdGVm#Vg~B0QV3nBG(VRA)>u7bmr)Y38%*ng-8}PQgvXC*a3%t)LeYQU=swOBM+xbS&1(U+WY`OBNTYqMX%^8~k_kI2 z(CUTZ=^I6l>RxF?mcJg?)CL4t7p}zC`jbwR?D$;%ppRpL-X`5M(N2i`7~Nx&1Fis7 zs<}x8va)+b_bN{aX{ut%>`N?37+V;!F&sb%Rd@+^p{Z{=3^vhwHoqOmIW#4VUV$@^ zcHcb}@b{h}0oZvoJUOC5q-4R~O78dc)|;t>Ym+G($LpZOm4M=o6)p}7c;0l01qy?8 zX2ai1`R|pl8KV+ck8?M@4HJ)~`;!vZQoF1#yOCxuJ3AQfMYL>PFC-yhF@Zk}>$Z39 z-I(uhs~<-qN*iPa>|Wj4^@`#m(O#~N^K%%aJ?r3=;_Q)tsA~gGA#AK(*FC+dqBYq* zC@1OSJ2wxyc|*Ti1zVdhT3?zmrzwH@+qjTba-Wz_?8u#Ex}jT-kY7Zf`?b@YasOdu zY|uF}p6bAZiJPj+7k9ymx!F)=rAV*35AOOv_X zaY#1U-q!#lYP!88JkCan&}MQeFbOIzJt#NQ`+-8IOV`h(@DbhFnWbm1CPx$XE+&HD z;n7Ma0!vZVcqY&0nD5&wXt##)mOs+?6~{|K{EM0gRK18~t21x_0zj-EpttKTkK=Kb zBKNi2TG<*au5Y+8+Vs@-vRPZ6MJ*yW5lfQ`S%UyBZY z9hUc2UGE3|NnL5`h<3DrU*eP2tFj6eUF~5a&J6U`&xjWNgQgu1j`NwRy}y3oN%+B| z0S0WiN}gGQf!qYk)t&}hdChA=fwa7V-C8{SjO1cCai<;a9sdpbKx}2Wx$g0i&;$LJ z+)}td-SyY9^q(~NNha{fivKGI>30dZms9x%ec;0Cv-jyl7kp6F`Db_=Xi(ugswVx% z7wC_lG}AR#FaWrbG<^0V8bwBi65!GnaA!Kgj&SUDqx*7mzB7C2_wn9KKf-4m=ANdw z3B|h!b15hz8gOKUT}B?0>>qnrvwGn?&6yP9ve~aCqi{EBp0tNA~^HNvg{M0e1?E z30{S0>Fr!1>=-d21-UD~CpRPX`pBH{XSyIi3}0$`K4S|JqK$3F&1XpMo_zk$i(Bd| zfJ(-}hnimg7`O`#J#XJM0t%lM$2X;mWpo5IG|ufd_sKoe9#vo>U3*_Q#Wy|aYe@!f zpV_A>5d!!FEq$kZ@7}AUEdVK2>L>=ZGwbbvi)Z;*&?a+L9BXj=`4lf%iDrl3uHJel z`wXQTtOjGjF6zB+o4uNQmM04P{)v1Sh>OLyNU-ET%)LoM9Z)r+we9Kk-SxYI9!D6` z-hXVV6SdaB(%=19=sp*sb_DzGU(5M)vGK#g0DB+D^eD$C;x;Cs7fKmDyu}ez=xVpp zh$p`l``FqgHpSn{k$J)TX{CX|aTF`-p71(Ec_G!#e0H0K#S=8F<38$LDftz3Ib{o) zN%&&&UlEjYUFj1!fdaEX1ACR}kw5_=sW9gAFS9OyCveo^49v?Fbc#a4NSz`aK?v*H zM*s>Vqhg!Bx>Uk+L6#T~1AE&b`uKJC>-AZf2myj(Y!w>=I0{!d^u@O$cnF>YqqCu9 zpupBxHG7qns8ylL|w~{J~oe1S$Epuf2PPM z$$%6G%rQeu3Ac02(T6z8twF1ZO@0@MfMgqB$@xKN@D%}&c*f6t%#8`Ez$;%dlpn;A zFkxG>lMqX!kmuT3>$rRcq^VRMjp*NCw{K$ z+)&rAd8tsSPi(Q&|Do&6!=e7;|K0bzXEg?6?EBbv#y_v5~WgkGRHC&!K> z^2*Wok4``<&YZt_|K;cNUQB90McBW4N9zM>D_@8Z_UM<2Xny z>G3jg-H<=(07l%dUGhoOirU?(0yPUrKWsJRZb79d!Ls#Z+ZgeU!O}>XNt_kvjjiZA znB-Zmdw=^}z~%)9Gn8G0)#HFx5F{$(Pn1UbbUis2b{VZZFuOV?PA*rp4H>&V*BN&@ z)mjCjHDF3+Ie#p-xDZYOQIwNEcbqp8P};P$ZGNkCVxRq@N}jA)%c6fyI8B*pF}Qy3 z!Zwe$CVeRNl(=EJovSrt369(Eb+b}eHmuq1pyjihr%m?Os%XDv;Bs_|BVEt^{p9}X zP32ib=uRb#R+meTb}6X&iAvk+))2u8Zp-$L>fLUvGUk9h*#rcH9 zTh&Sm`DQL}@12lyO89&_$Pow)_&OnySWm#48z}fnV53 z=>`sITvo~TwvZs7!}c`FQOkc?Yt|^lH85ov^s)I37P_fq-_M3a?)7itOqIQ99E@JrXxr%``mfHDsXKh{ z#2n2lKMkmkTvaCj3f}fc5!6nELF#&=wNFy-FrsY@ap-;LhXkm10!VOKzczR=7uuKS z?%Bg^0?sOGLEQ5LuF+?aWeFyan)c1y{bkkL0k!zOzFlI$g2~nWXYSy z6~z^({+Q)=V=8azgn{FqK-HFSSs3q49MmAeSNC$ zD+>^|Mgk7fJIZk0^}qR&E{WMzow@TuTUIhc`E3*SlQW9?Pk5shY6hH zUC;@vZ1${oqn`imEs;;(8{J>$!$Uq8XQ=07eHg;r{~3L=gWz1Fdt_L8Rp`*?m-aCR zFdJePDe~-xiC4zMC36j9Zl5%CW|HU?*ExunaSfcgrsXy1a(OCibmC_co;$X&e#@?4 z-Eul6741&A$Y9!M?%x!G1b>nIAsj#>%f6g}uq@jdC=IfMurZfML#eS4(ONHmDZWKR zngN3}053ms0ztggeYlm*60F67e-zYVF%)_AmsCWsL_4fHxDXmnf(f;gP#VKd!h9$J z;mm-WGguH|Zprx+2Sk4%V*|y^mvm-_G`HI{0JW9HQNO}DDlMOszXbr%rbQ+2uGk}x%>I;04 zh&xF*$vt0^!7b1w0+sPO|#XYD10xVqF{M< zShyLe&brhLtRrSDwnXU#dL+naDv~G0Tm2s;oXbp>J&shA(_xR(BwsiD`UteqfPf*&yM5}A*Fd(Xa1^#02MvYI4=%j*0ed!+wc~hjGhl8 z4yP)vnPZA*Jpt!*R_~Joy5Cm-w&Y`hw?YD?Yy$f%O|*j_cs>@0ZsK>Eban@gOC+ zr?c7V7|SWon3nkyzP|X@Q~IA~^eCWP_K!j1_cLgeMiGY0x^yWcufe70Z_OoRFmTn_Yz4ZJKV-xDtl8r9Z22oWelQ;+q8)jCG~iVAd$ zXk(z3?w)&_>Z-vs$Dv_2G*^a&nEZ4g@D&3l>`qhuC+Z?mOO<)qxuB8@fy&m>V0Jm0 z=2R^Z`aUtDqsqarXV4SFvj!Cz2U%95V}dBx3KRs%H=+Z=Diyob`Tk~(_A}%2e#JyR z9>*BANI0rH$NXTIG(Nr`Eb{H2gOVF>u@a_Aw#YAujK~R#p|bkyC#F&-qJ(kuPu2O& zY>QzMT#xOD_9GA9WsKQdmgg7DD04LajTusUnCT()pg=bRo{myE9=HU-lSoK3wGb-L zm_=hoXH@dOmCtca&4OOHV2v+nzh<{evxU*q=_H`P2Z{nlV-ALEN==h(aYa-)jH9a9 zmZprhW}&z?anwh`_A;Ed`?3Bu(4qUT^oWh)Jfx8oZoQ`x@)pl%oOcxno3ih_I*dM2 zc-eUvs;qqwix$RaG#iq#22J;yrMR=i&Ho~mzi*`PaGKI18DkOt}lA-8-7 z$3+ipMP1p$fM%)2A{$knH8qTWWSu{JPnSlnpRBEZV_Q;eMc&zEh^0*`xa<{{F1Y7h zSAG=pM*&8HHogc$FBR{IiWA6()}mhv6AvhjBznCL!&Jp4=P2wnhf}Q<7)JmK*!=kb z6lBXs+PZ_&;qI2GY!hFGe-Z(gaD><{rf zltLe4;N5o)Dw0{!cP^Rg^S`_b!QVbUjAC?`ijuy4jjA{&aB2<$LQYGoHUcr#T6+&A z3|-e-%%S=(e#pvA7T3VD)o%-vAccgSM&UVn(}ghuUe!-HB%F@rP_*l!qFTUV{!3EP zs1Vs=L|KQ?VmTgrxnsfQS-J9hDg2|4_10*^ek+>ENbXh%wM-yh{nYm68L2Xy$rWef zpb6_t4?g(jC&3hY;Li0i?8!WX+JhPb^JTwIqVna)2ObMQum0Oa@_Tw9CNFGjO_-{+ zZM?mi+k^$VL4o!RM@TSu(%7=E?#N}l&igct%VM;r+(ge9`#a|O00HKR&m$Ry$*^FF zk7-Pn7=xVNK@N{Skq?1u$HBo*quHKL1eP*#={v%VuuF9d&2NKSav^A=Jkh~|qs(0I zjQq_L($3sMMWZkTC9EEcFn>bJG6Q%>TBt>kwfitindTM$9o}Y=pGboJzKo?ZAOkU` z2k-^ICJmOqB19=LiCyTvuHp*1Vrn3=`9wZaG*&7gEPKvOfe9uq9&Us{TpuCqw4%}g zoQhFV?+P*#A9P);@Z3)vPZ@df&Yp_fa7$utDGiIRa7Ql$9rasCOKnJQ z&`RGBjTmnLkbsvEKCQzIP^Imzcm$Rc;ny_LfJy#%YA}?5+guR3OODZE`Ur9Mb!Y+$ zju{lSXgyY``9YnKDRsKK>(CpVE64sI8-~P}eRvHiTs(9mMgdVk{`DPVev}vz3_e~A z`g%0iw!kCVFY5kVp05H2VP;Ov-5~!cA&X6bSJh26-9UZm-BQ@}%vK9mGHk8ekHF+d zt*Xwe`n_=jZ18|CElXPhGOI4`T%!(A-ErzWB0Jt7x)lMZfwV@yrYlI_1HOQY>gG35klyZ!C2acv|_-P5k1c+l?Fqnp*khK(^A}It= zkPh3$p<0-gyOONq+s#Ohp$_E3t_8MOLWpMv!V@8CR&wG)@rjSAU@$q)*Mx{-A$>S7 zG5`<4B7>;#l6SDxI>=6efHEzJ3_rIU6tWecWlautjDa|^ke|PSoE1$i_? zJhPF1PKuB+`?L$wMwN&wi4KAY<2ZXAGl2GB$<7+-bC9x29r7Me@nFnJhYX`@Na5H{ ziV=VeQX`<2Nst;m#MiF};6 z=YaC#788(w`DSU^!9L9!4iF$A<|nj{E~Ac?MuqYHMx)f2y8$NLLS2=X-VzD-p9WbO zu%8j|7toj-%H|1~9GKaeSk08d-!k?sa$7eKveR;QxkXT^}b@E(HDZP7QGm{c-M zQ72$JAE~}uHr6QFnkhXEITQb#KRc*llfb2)fytcKXD2H!Wu^;4vv^sUBmz=~+_^Gu z2JVALzDBHLI8V|{+>5RI~=p;#|%!1we8AACo#H0(XPG;?HZzh%G`dw zEnUYHg{6`y9WaEZbfiOK0=8rOonUUHmH-8vZ-c=rNnj)5W5j36Vr7WD%_v^%14q&tP#dXT2jI5#%mi?iu zti`s>)EI;gUxu3*`&ghyD_CLflwgHK-CD8$WA%JAo>XNDGo*WaGY0ub7?fyij2N1&PR&`Cx~wh#@Q!fqML_Q2Ud0p% z91TV$LxNa?HrBA@TCn2zayf# z4o@|NG>}e%L#I=fkq9gV!eb)??h1Mf!j)q&v6<$OPNfaH@+DBdTMJ!$c(`ENF**t! zDHjyR>}^QwtOsDi497nl)bDTMz>FP+Bp}6vC~2QFGY5kh5C&c{76A{vT6djxLJ$ix z0i;_a%li@Vdt@BO5$r{ed^qNhXP(i1C!R=8D$qr~yesXChstVn2*)dEVv(Z~mv*&M z*1VLrb^R7nSV~uq`C<_csX#R2+zQ8G19~iU7>b&?Dbq~GvIcZ7ij=Y(4IN4z47BZe z1fU6fVSK+~7E2{?Z;>&mh+r*`+L21*1Gx@@{3q0wF&pNX%tNRk2SFhDb7e;Txsabx z3`|rjPxj;ZikelyHC*<$9G8XDOF1No2fU@ z^0F5q!0@{pcGquxmfcLAPfBayPDXvx`q4ic#=RL*fI<`R!}i~QJ3C7nz5l5n{B0Kd zi!#0Y=XFeF%rDneB|ntuYVzN(?kV|dDO(xnIX@9=_)XtT*B+>f(1?dXyRGA_$+<2< z)2!k*!nCfWOr_tK-sXiXj}U0!P5C3zaYv4Ho@S`OB?s0tht*~waU7TusZog=b7rRK z!HAzHL&cww=e0-v5IDHgwk&{jq_MSc|0kq_zLYk(@$P2a;d_G;oS1-AOd#or&iC^v zqI#Q1p!MUE7cNNO$|7efvg+7u3Odfx+Cz<&%$;m-6M zi@V@3oQ2VI0?hiFpTmp0K6sDDJ)_YB77EIXtv7t4v+utitu$>~nsPy+8Bacs;`fp7 zYr)yGs;!d>WQjLVWuk%ZPu__oMF(oO%G*cz*MDZvtZEIJs~eN??ipoTCsf@ z4Vk)?AU>jcOPl;6))MLsEWpD-=?c!z(rz&=f&RHC#W%EW?jHR^P6<2gPb5Ru&zau% zvs@#AaJa(BD^RR&^82z4f%WP|8$&ahbGmRC!Ok?2u*y4{(QR>FJro*1aH^P2ttYxb z>=bF>+Kh+rF7KAKmqG`vIrG{sh`Ra}wGezow!akC-uttr8hbn>Z`b_ob;~!e9b(}3 z@uq&~7j-hA2kY{|j#cXYfRg_6?$UEg5|5qI9yxTZ_ql`a25&FEfxtu86FrLll4|H@bzEXt73GgPePrZNCzD`R2zDm*52Q zAx&JfWG%IXBFRyzy;D#(dzpfIvWxrywG$zLq>Tv!Ftne-ayl@gsr(iuO79 zoq>&6()}$^t6SeXT#)?7%&Vbg%A92vrEi#<_q+nz-|PSna1wXE+8^S5Sh^JD7!v4e zZ>lU3aOd>*3NDKOdLeH30PxbE$|9-3(YDL+lnKTT_vp2a>{pa2V?)TFc z17H3;s`j70U^ct+@6!l>0#JC0d`8Xi?~)-;@y=h3PiyqI+pE=oqBgxBi0{z9D710G zBW9lG%hY*yfj9OAB=NP80F;VB#i1d>!XCwm!ez%2E3F}P2pSzH7K2sHJJr;D`pj8I zOKV&E|Hs;1Xitxg-skS*K77T=$=S;iYG9@ip23`${BQ2YPfN5DC1rFDx*R+Rmk~ui zc=7TTXL)7yOmeaW@-1@x^~X=2zi>Cce%t&Hw*B=zA5i`UgTsI$fF2j<0IVTa|9kq^ z;y?O#zxjS~WHP;)4**Mr@d4m7{}26pfq9Ys{{q0)Y7(+ISr>lsqIp2dPI=}(3iyA* z7wH2Fi%*xHJzw}A4EVaW`pgUfs5@!7>qfk8eH&5IIEXRcc+zq-*XwM>-zD+5sp; z$_`Ve2D=`dtvrAkCPW6IVx%KJhoT>iiV7q+dsga9I@eif2WI(V9eWnirDL810ELuY zjQB^rxq*{+ij8?<9(uQ@E}dV%-s*h61L}qAXMj{ao@{B!_G7ld&GRc_w^r+))um`lkr)Xznt*d z%M!Ir)oJRcnyL{$yelb~DZUkJI-++G`D}4;?+4c7)Xi5JUQ~of*q04$f6nt3HhP@G z^$a?wz_@WUcNZZi=T(HoAz91Aa3V6HpSU2A!(DCw4*xWJ%Tcj_QSnD!K?p?%NI_?d zybFh2j$|tbH~Kq1_kB>P)u~mATr2H9Who&p3JsL`dnDpGGxO!Xoa+%5bN$n!+4nzWltv}G>3V8Ra zwV-t(3nrRFdiQ?7|6Ywl|CwR(gz#Hz=gwXU`HeT!^Ak>t3!LqF2nt=FcHdI++%ikh zIi3yG zzc2V7Q_D1$WRhRrTf1n>n2V7r`)QVPMd96%3^$3}oScf>dvcb}pAJ3@6lWfMN$-j( zd7gBA)h8e)`lSqxobFR1SZ(2V8<#$KBdMY0>@U7r=~6xv-g0|x0(Z>KtazOqmVXDW zS^-RaQEjG6PEWao;Y6$3j@L@(pu(Ksh@~0fyEq2h>9+V3SBK1|O)TzxuOlYE1HGHDF7HV#zJAt41Q> z{~S*11h)(0V3ZQU*$Lo2r!bxH-o|Wzfly=)E?TM}-xi94-ldL^OWg9{=2yR2oRU?` z6`{oIk(E`Ch?>HVNSD`0pnzJApNQHex8eS9B?V_4fpaA_-VV-fqlmiB}c{ z#>ACfARiogI{}VzROCjFAqYGKjwn8gcurPK36p@TF(7#b-s+NH z+~9DXs8siW=z2erc3{!6ZNJ0prp`O}^B)C(9V$x$vEoqST&!GdaCnMoeF?6LhU~3a z$7eBVAJo8wIBT?5!>?25%6|VfNx!Bu0TQ6jBeK`b4QbtsK;+a8(ly4 zuA?Xq2DNjuvd{fGh!tT*_FejAvFhw$TIkuNI?Pu21!F+4f#X6NSnyR5P2sZGSRgaS z?Ajg1867ok4*@FZsZx(Q(<7RFpo@1k`msLgeS(S_jjq;+?d-x&y;E*okb76ZDg}Lw zwb`2jNT{Xi7;Uk@LwLUqod%@tTat1JtDt+I7UHB6N!!{jSk0Z3c4TShg&*!(G`<@~ zpq~u>%Yq98zV#}vcY^dsPdbrAO$)6%_P9MmD#938vh|YNFIth58bnBt`{E1jV1b0% zGTePCEXt!6B;#5yW}WhhbmXg>9Ot2L)9)sar}?^6b(*3wW?&!}rsS-QwsXf|WEnxu z?LSO%hQS1n&|3sdYq!*+)d%6U648-rq;`A6-}NR(NChAiM06b3^6Tg?`YdSeNLQ1A zJ~SLwHv1EKRIhF|lxJ_s!N^fB00jD&xZhTFE^$ zO*xG{DpvobT(9V&au0jeD+H7itvC)hAOICy|rrOLrKyUNshvV$WVaW zn=?^={fM9pPUTLc7r4jECIr*G>}kTqDEU$0KQ#g;=Kib-tS|~r=YA7~5}DM|RoN~- zLk#M?gxe)})T7Fixxbv!OuO`;I>B`p{CWz058H%vUZY@KQ62&hfvIa%=6Slzb)C1A z-HOVtk9rDOOze1(3UwygsBtCCqkmpshXF-0_Ly8wN^q^KM~aoQkbb$vIw8L7%rys* z0yg>#@BT@9bt=@y=|!LvgaLjcyx`Q*#zN{&oRZo~l6A!-g?42@qPN^}tsg(t;_$#} zxT9=CQDe*-A;deIp?%F`Nc$#S!5NDE5z}2Kj(6Ie_0+zFkFO`3-)Naxc)tZx zd-BeWCeXbC+U~GQyf!spNEw*qM&i0U5w-q2x!2aOu04kfIF;J3(86OZ=%ShTXNGxG zJHE(zj2t*PJ^bJ=x3p^mE&dq=Eqg&wqiPKgvvB6`v;*DPV_M3Ozqn}fzA=)OMba7Q zfuS&MHA3=*D#c9EJ!-H?E8~%uvMX^VydNzKaderQT3IdN#P37dO^yJhL8@0+3PloC zde$HiF#F)r#Eng{h|PdY{Kd1psQHGU`sZJ3i-~9L$(%~sJP}! zHWs$K0J;=So*6V(oqTxQGKd8erWUzP!3+VoMjd!YIpB1$3SXBJ%7$1_G}F1egVfcR zI|{>52Pu@eQYz517WB0i%wfQNxDa<{i8jZeKgu$YsaR)b-9O-+EgBN|vpDBa{`e3I zNd{)pEWeKV4c+#>vmC_aC#=OS4o&TF=Vs;-%e*c_kI|rICV^K~aA!73kE`O|=NF6= z?HCessaZ)Tx|j71dkRuC%^0A#xO!P|dBIODJ#};6Qi6*MP7xlS!aUk1UGeaBd?__| z_u!7JbMAF;ueXsU3EY%1>B<5%fI>N#$AHzWmkrG8@J^|huffcg!~^~D5Vlt3`di0b z?5<)8qP?(!SY%pPY%5PTsaA>V&#c;7M8X)^83Xxgt5q_7Feu7bB)+7>6#Ugl*L4OK z{54JRuns6)Rz)+>Z1?nPPy!P7+MI~ms9aT|568OaZJlKI zP7^X+%d-D@ z8SMJiWaMg}UJQ4~2j}heZg>sGF@Y_o{9k)dv356Zn1Dh2fQZ(yG!E>QqpboJp~;PY zD05~t#>InT9NI1APe95Ik|Ozccx=Op%-P^gJ6(F{Y^v$mR;$eP^bOUsJdcq1=(93@ z5=M7QpXNhF=@85Rp?na0l9Pfdrm2T9!7sngO3Nk*G9pG$vS(7ge{LW|$$%>tqQpOD z14zkB4*ZoUhDWL`1YoaDwwPuI=~9f(8mVjMtL&#k9SKMkwL@QV5@}q>L2hd)zKy-R z&HI##il%DE@EM`j{HH`$h`KEQ<>3cYMU&aSW4j}06O@7@)5ri}pB!aA$YSp?IsR0Y z(NVyLd=}_T@Ace%Es7%?_dgW^S+n>Ti4&j#)-*^)NO$^CxZC^6J`VW(gitu$&vdux zXS}8%{ZvVIk1hzJ9j|=Ix z7}(EsMVP4OkgNK$d-$6Fs77={gR3$X!N^8gwF(PUm4}zi-7eSO2lGX=$hrr8Zgsn3p4i8C<)9f# zSwBRsPf9M=dt@!gb?mu+>J=dh5@9RP}d3b!{dF3&~6(5h`ogKk;*y$ zaL+}iy7(QKbn2ONU;DXP7ymsyUa^4sRU@;|TE)c1eaq~Vew4h@JCL#6S2>LerBZHp z0F&tCxrdtB>4OP9gEz`AR080;*Ah?Bf*3dH1I9$@)s*nwOWxbHGNqcYM8T3xG>M%Z zu`IrD(k+4A5%QrAWYeoz=WcE6wLOLo#a+yd9Hf4&-@G;?qXP&D3RKVYE^df|VKZp? z-*W6H$7E`2evDtSel~Q5708oPL{oCQIp=506gR&1AO0}R<40FMprqJI4>v?cw^5l` zW?$r`C89({)4-YEO}oY~9Rt9ECYkX`bp0fmd?kWve1R!C>3Xyf)HxtEawH0Flu{8py?hT);BExZdKr8UnMu$)W5emKBHdQ)1s(A)cP1i{IeI&AxRQzE z;#v&zpkDVB1)m&3C3CzY)({J$@&}*aS&FyL{dm_e!6h;SApQqc z1A8i_nuoKhTaWmSC}Bd+m5{PtcZqs+p?Ld&qU5v~XrzRT;4`3lc*xT0YcBo0&zh^{=&&FHEQD^khS3CSL3b8R zas&7GJ%a9yIwYl73W0q5)=K>q*dxFUy~!|8NS5=Yp!I`;=2EP^WY8#5gt9`EqRB%jE(wE*v(2 zPG-Q&b_6zyA#YxNWcSNamkUlLl>6QB*5*PK8)3ruJL-fx!UPDrwLpjsgyH3m7J@pg zaFk3$$cvf&-OXiFJR2hh#Ek~yFHgvXMN3Av;6=C?tNHk;g~Yo7;kG!Z3KOC&(Zunn zy#rE=-SOqaqJj`22;c){4=hh1Ze;Y=TnEeEJ^ku&rrDSTbt#=3ML69Nv!XUF%`Vw% z^Z(QioX4~77kpkHX4d&k+Vc#GUGe#lh2SzMN9vxiWl^}G&l{`Davh|6P$I&s5z|mbo>{9=fTa(LPskeH zU;VY!zWko+YvEORZ>ZY0XH6UPEYmSDJ3LcuA3 zIQK1G@trsoLAHClvD@C8&A?uJTXDvgFQ^mBMrz>Sx7)oxh-Dq;o!tHUs*gDARtWeaG5=9-x`o}{lgw%gzh~dec;$zr>DGYRUelV zB4VDS7p0FL9+8^(JUPc(6r|rePo__w?(2T}>ET_dFH>kg)y~Pv?B3?Fb;UD}dWCjx z?J5r#&rtjl9&A5TC6wzl=O46lo7c2|H+0wS&o$*v53RY0yK_fBl}-)!VUC<46)lxI z-B*qLk|#SV_MjHV#}p3OJvj4eRt0(a#21Alhrf$m8z5L7c3vx=_ntiSwQmY)#}P8% z!1L&SN`;|$t;57`{ifB`gnHH+PjNI~orW+AV&wjFG)lamX=1;bQwsTZ9i0il;y8$D zii|SB*83KM0y!)Ns;h|vfjhsCm45bp3qh0M(S5=uoAezQT$PzJ;y%39V}f7yT_~Sd zdr-+HId_Vy6P#>bO?ht^PR+Hv6hy|o{F&3e^U?>D0?k$Ejk-xR#F6~7=nJ5S-Tyg! zr_hvkK1t(a^NtI<{;bd!x@6UHulh+uiX?pcY|!tK2n^&>)7Cfr~i0iLjaAOx#|`iycOHncxV~Q zT;<0u1OU#uAIjOq@~!}fYT9sI($i{Rh|VqwkwBh=UPo4m#jMud!p0-AN|V{{$~ITO+=E}(P<;IU*2qp>*I%j zD0IrG1|3JkN?hxRgc_`LlM@139Ny@hnW&Vv&i*(B6~vk2ik|PK6prQRl~9VAEVteX3r&d$glwwdkI_5F(bo+yBQ8N9nTr-mzg(?hh<+ zOV^Kx+{#6(HIEW+RomO2&oab@nXlE!Ym*|I4prB4om9j&GeZUT1anD6I6HoGP%f*;P))(eQ*I*Jpd|AQ8!hE2f>Y#$%!iNh$xAGf}|7y`3Tvd4}wRpBN zRVB7FDDj<>nx6w8h=m*V{9-O<9pnZSpqtO>jpF zQkXH#sk}Vc>2%lH6=$3Q-=UxawOI)~kff7}Xiifs@3sch?=Cq1OQ7DVUAgP*rn1+z zjw}#?**67fV(IbSt)LT2!o_>D&KWxJwrQ{Bw!_irimMMbyNbBPedn*OII_@lJ1l(2 z?i!=fC|&D|W(!sQhCMLQ?8bHP)w#ek!+13{V&Jz**c?S6E= zPZwesX6?eJ(}lR z!YM%lVt!h)uE?ueqPY2wDQG9GoWIPUMoj^>qsXVDEVpF+6&okE&5P45#M92^RW^=} z1v4y?DxjvtG-hS@bBq@MWljT_y@_F=wq-m~Cut&Llzf zf2=1u1Cj~{m8vXc8F;&{biKU1zn{7Eq9acS?91ih?n?GLE|KX!bn%3jcX)OIjgFuI zDguxY1wdJ9!Bs3v;1WwJ%j}DIDggkL7DZ5)iUPIQ4cp^2tV6cWP;)9C6}M2h+CVLt z&kkC|p+t$K2gQbZFvYj7xA7CL&Sp+7-_jfNb2sTqQ|wVxG4ZzFC;j|R(hBm#mgV?J zBxWB_h-rzphv<=n9NEHh96Vacr#%*X5|kejv(+1j#)$AE#dfd>T=+X=a{MS1O+_lZ zvjoxzcSbt#M@6I=@MKP;hzJEDoI{Z(Pwf@R;vk%oE(%Ek(J~My($X0&oYYtjsc3Pr z+&2g6&{;AUi`~2=>40YG9+j6=nz=Itf#BQiK2r*Khl3f#z0W;i0bGb_2^1Y(AM+Q5 zFO>EbI3eD>9$9`>LS38#Ee?p(-ohfWmL^#sp2cO#u#9GD@HBUcpV-}SQ+H}}h3*>} z_Aiz>-d{fQ*c9!Q$Ah`2VrL-%Aab2!E8dZR@*75Lmee8VNUUZ2iNEde6zM~=+KdM| zqXO*$R^?z4Mn1kx)_3zdk+HXppxXsxGL4!4%MZ#bj=Exl)TubOtlxbMN|)O==G zMmCWE%Ky0Hu&(@0<=mD|@ClP@QQjuyf+}$obYv77&hI<7GRQ(swLJdu_k2&d_v9WY zSP8ltf>PuZ=nKf*vUp7bU%G#^_{zO*v!`7o`dpuvlCGMbG(RG7r~jNV^%c?BhdUC>ED)+Nub#mUcb6Z#igk!BXrt1?J^6h$ARjzQ zB9Kz5WBkQES$PZqEK)g2w^mo8v)|pLAW+pM8)a zVDn?C!%ol-y4LNfUo=H(_Q(AcWRSVa0(Nj_*vmU5(o+sljuV$%YhCrnlVf`MoIbz# z7WrX(utl=dpH~1!Dl>UcZr>~TG#5n&_4(Egn{^}6OO&Xmoxw-lSzgCp^w~9E^94P| zm*m1&#R&J4f>4sYc^V$3M#>lHSA_`FzXp(mNK^=$Mt}NqLdBVJ%&k*Uq`CF=p?mqm zL)RRj8Vq2dh=sJ%%9jHfg@OUl)3L+n)*NYK2_x}B!rcI3XMcp#&_jC5JPASN92MB? zzL(n4A;vOSu*m#*UGE)9T1^aeK6(_V?tWR0!nvwm)dH$f{Q4At;v3QrHLIp8wpQ&FC_jwdNlm&~ zV=SUZ6XI#5YK;wxJEB075o+J_=oh|>{dCzb2Ntq~B0cUR1tXuXZz;6zXl(`$f0xLBt7PdR8U$@)JUMD( znKZpBq#kRUz5NY&y8yZ#icx9ExtgEs1v}U+1#FoEhe^5Hle#CRERz7UI@Maa8y_}k)j%O2*A5z% zFX*YiDY!-Qx^~>^`#@#^G@O4{v1&pF7rfC5fBewKpOdxhR-`y_ z=(S_970CuqRZkBVOpetT`ax+lg6Ckhe~d{BI%J!gTQ6ewFFV?}>@6K2dAY|q@9?+0 zV=Pv`rA9<)H82VazZUDi%`Qb52B;M_Q4OuR1Y?(SVk^{5TIjrrT{8JVQ?O4wMPKH4 z)W6AOu{QIeL&rkN8Gmr#hNkrt0g*^KKn|>YPxhg(Q{4PYDzpy&1cNP&X)2F_>vRbqVO{XvUju~K|m>;$-}}@j{U(Re7|BOHSP9OV3pEH zRchsX5^yVnKdXk?JP8z(7F?UxCD1U4%ch?KDt4+K`{5^$D@{LDe~g9$>lTkSnW0hG zow?*lJ1roX3YUFM)Sg7j@Qce_ZE14Q5Us|B4fO>erENQv$eAy06Z(d*>cO>K4c%pF zk_f@0ohoaHl@i+RU;`io*-EoT)-#0w*B=_m;eUk2+=1GVb|pTQ;TJlsNVUZzh$XFl z@H?a$CBWw`SA!$Wm!WZ#nBcUCnHY3XmZ-t^KxqL4|4g7w4)pF#kUUK^d=;^L zk`*|>iVNTXaafoX_3&N(b%)nbUn2(1x{Ej4s@F?_STRcmoRGg^dfJZSDKvyC8!5dz z#9oddG$4rH{LxrM0^qkYAW%>BSVq{(+ZIMoA`91BU{+dt z86Zks9%qz*j&?5*H>9-5VgQ(Vg2g3Rv`7uYg_Cik5v9-E`H~e88h2JJJH`Dj1@~}= zWuP!s9m)ICo}@*vm$K3~NjMof=!DlE+UZMf9wy%e3t23V6sbwA;k08+20OYfnZ z2m{pMLU3#!90PKY02Lsl=J$H;o9@(>6jpeh;fwE*Q3X)W?Mn|^VEp408=;Sd=(EAW zhwcm=KNAkDc%K^onozbk@mfPGpAaSF1={~wxH;|w1?v2yQI!@4W?X0 zaUAOG`*Q(NjGNa|J5OO0u}+yA25D2`@10J!0LXve&TTA-d{|6e*~ZFEB(2r(dgW7c zdzpUTDd6Fn+ymo|U-vP~NewTfFPzLjx#@!JUP{oUNd|ICL$b0c3=3~DQ7W5>Ol0o< z-rwkO-fB+!y{D#hXlN=6sf7i8_iE+R^NP^I@Xmh459jdDY+nSUlW4%NYZxIG{p}Ov zUn2$3I4dGP9i(MI<%BWfJ?4Vp#6%NgYeSKXPGT95gkPfPDLRB*Fs>7_uiJ)TZBlc) z>(DgT>^j$a4D~-eLumK-A zS3H2|0;C3&1-RO=-CGVo`Y9KGLv(Z*7E{Nq+Q@u_7}{MDZ|Eq{bNn=cd}{63 z?pS8$G1Qp`C-5n~=+6K)Y66m$s2fT}Z2uMvYQ4&@u)miQ?UA!fCnI$6(4?$A74I79 zJ%foUCLiQR!#6N$90ZnhQ#vU?=UUd@!s|SxkB1C#K$@kg0Tm%gtI32ntMZ?E2;!w3 z`eS{l3@QY|1lj|4v3@lSWZl(d@~?e$5#J_qAKDU! zRJ;YsUacUSY9|{rZaz{zd_pXb7YsHM8gM-Zj4TE)Io8GmM(`VA)UMaUc)CFp!3gc z=ToNR>T(vjm|q3=T#I=qeHMghGDGkcK%A`7%TmzFbXx03(!da6X*WYMOk&cqe}_rt zWsZKY@bP59;s+jp%hJ?RGo9YE&b>_5fWr%QTTM^DkMf6o0Gj_>xxRJjO#DOF7^DLU z{#^cn8f9jn5UL(?;Rxh{h}z{GlY|^>Il2Wawa0AX&m8P>-R0PMnzwOM@v!o5p(HE| zG7stj)O&+jXS(JF|EQ=@iaqrGEC7f#cXCi3bl)G5sPouJ=XThVXNdaY9WMm_HSUVK zu`7(CXu2o4%E%V=;z>6F>1JiSDLeNd4L-e6E%ib!2K(?(<<4XPgs@Q?7y*A3YXP~% zF=f6%-)=wePOHc;yK$xZn5{-nCvXV!ROK?9KzZW6m9rVP|LEnXYt&iWqEji~E7L!j zL-_v_-dNJ;hMvoO*yd)Fd6fw_k1$m0wUxi>D5SVU$do`G9~F93#DUzWJ`or_@vsqE zJm2|}boRassniG&O(WkI64eH16*r)#_rACijErE(J+n0`7=9Ry?P&KDu70Ly6$|X; zk}O-F_6%14P?$1of%4>Ewe#nZEV-QAs=SkrRyohLTf^VW*+fdlLZ}D=0IL=vNW6@& zn?;oAAEXs%#4(nHJ|D%N+1FnA@Mnpc1mCxQScO<}{d&_r+#ifG3A}uTBO-qK#b7ng zPJkD$a>AghGo1^MqdaN1H8QjClP7s*5fyR>u$r;lhb8e=^zy>5(>a6HCeqlM2EOtGScM1wXAcW+~ zmM6`%&>QGUQCEc!#)+=(H%sh&VuZ$fQDm=eCEe8Z_*MW1L*!i}0*=oG4Ga%8~i1Kc7G1v6|E=!hA zogG{Wi~J<`+M4{n(EMYu7g7-$|0oT3yQidbnsAbrQ`@*Zmge2(E5CO-&zH;t(Ev0I z|M5lDXu$5%^A~en_CNhIx6%xHz$u_3Ye&&**r{^B5`ZWI&$p_+s9iSg$>RJ|6iar` zdo<{hw+WcgA>u1NKZQ3I`$z4Rqd$NAIHCX!-0Qfi^HufLv~j~T$dzhb+(txx72(1+ z@fakM_PkCW`fTzU!Iy5Gya_WyWWL)k^CZtnN$g+hrf-Dzd-2DQeAnljbDUpD|5W?F zr`jbM>w%-W*44p0qbwIcf9OTrO8j?oe|5Zg^FHV2@4|QfoO0<=B6v6f{0Q35un8E1 z9tXj1z4F>B-nms^xP@i_e3L^A0KpS}W*G8u8Nid}#Y#usiUwqi*)YD*cP}4W;DBvk zu65W0ZC^k>z>vY^)_vIy^W-;Se_h?)zMTB~%8^aO>fe9=S2OO$|Cx=gN=6d*n>YLi z#{RFgZqr^-xQwMdqw1NX-R4R2?^90KK8l;d28;`{NpDJ zrOBf5N=bL`PI2xgQ5_NHi|^il`1q+5X`+`jwVCjJ%IH<9?2c2P3wS&Md3UDRY55o9 zF9s*s;TXFd(^+Xw%V@En(D3lEFSBj3`jfCHYLcq_f3bDmT}}0Wmp5xS2Yyr zCG-wK>7oPy0i^__3mAIG02V;dfOJtq6GYU|s~W(93K~EZu!W+cw{lN@^Q>o{S+nLP zod3S(v-iHP2Wr?de}_);2oeN6iKE4w94$r3tWy^!yFT6$U$U=`o3I-a)+PTQ5n^^< zINGe0JmVjeThvW8>pH#G80=7-!v0zphYPiqm2sPIbHP;DU69`Ajdc$TTprBg;TKb6 zcK6(QM?y@bs){FEGtCbPx_x}0QjMPw1;3awe-e(6bA4}6b;CEa04$(N{_E7gE2pE` z#1xoT9y2ksV$nmKuXX@3D&*qRWstMgFMd62y{xdzr#nAU@n}*Dv1pPK5HykmI+gI{ z)0v?D4bBD=l1#}IgiqUAf~0O#-2C}!jC+LLxpw7!g?0Fm&wJ0eedMa<#j+#1f4G=^ zpFqe;B`VV1rtqW$4zYmaw6@_T-GfDV^iU=@TFKoq5M=ZBEW7ji( zxyWsczN~=23$2upC*7fFl^+JI*taYNS=pFA(s58z7X(Vv5jq(X~*FNrJ}hL)zaV@<9~3d|WDC0MT(ofaP(`RV)5jjtUuM-QAG@ zWJqEr@PZ&Qyyj6^6_S?4`63fQ&dPefKK@|;p>0Nnbe_qcKP}auYy??&D_-kZ(r*fg z>7~a#Ac7TBYlEP>Brr1S_ZItHxP33sDfVsh*;J0Ex3huGrI6stF!v6*X`U3eEx*{} z)$2jv2*6U_k-@?Wk$t4QE2G4YK$>&6KsNVOWRu?@(=BVCO9qiLv%<3C=)m*HfTXK{ z64800X_q7SX5li9kSUg9@4qMf+_NysSx!~0*RFMjS%^9!6gVUeQv^o1X6V0nqjK2H z!PAqp;-nQURzCFUQN;|EhxzaHR@b1*cxU}sX5CXEiIJF(pBx3SRM#viK6gT_xs2hup=*UI5bjuhkArj5K43h;(L#zyjle_6G;} zyRP~}nt1+esK!uNgF(pgd`*556R9O;*)ic`3szk4VBJ9jJh5MCR+lFr)XV0<~)$q!c~ICJu8)am6K zh9V#$a?j-y4v60u${|F1Xr0rB@sN@VOdsdx#76FF+7*YXo@QS|it~lRj%V1KzeZ$V zF6TCxuG^c(+*R4AXf#k#R6fV)u1Z*m5U3C7pg2COS6{=J{mtG4J8DU8K5HR8W?NNk z?xQ|x35yGtw0Yetux(4I2Z;XpTD^{5&JyK<(R6_C1^QOJnX0wQft&tSNnUm&E&+o8 zAe@=rtPt{{7aprM>$ChvjcQ*Rsyud^KJjEVeJVJ6vdc z<_OPw77280;UX4>Bq`F!8`gQD*{F4s_msSi1O_krR$l0#nG@+#eC_L5NO0i_RE5ii zO|9(6vqH-2bx-pDDG}BSINE^j^0{xaU_qo%X?YC*ic5c%;9`hjHT0=4A5|e5JqW7= zu~6O*5SjIOs?gh8o!*jxrkFt0R2mNmXBIfq4rk_^27%PX__dFab$%RNbZGTJn-3~_{J0A$vVd>Pu>ww3`8RFGM5C(`--2*+RGWoyy(Eczg|-0 z^S{SzG#7|qLA;?EJ&{6*Ir0r;8%4gZ6ca2^egI}1S!N+Lge9VOXL9H69&mmkoFQs` z^i6jM)|o+snh_e1EBi&}a4aBxkJd($&D$U6cJyrfUHg{NM zf9qN|Nh)mxbjxagyHb(imC8<z&78qoab?Z?t)Shy7*9Qg|6F#mJnonX|za_^LM5snd5-|glL8k;EVE{k7> zMq8i$1r0ArFZ8ZPcfS6+eP6%n>mHv{#Vlp#zWF@o(~Gfr<@^g z{KB}y^c&AZRe?X_d@X_aa-7W@JLR&tFfAxht$tsMG)Ncs5fB|oIR)7!8Rjl&- zHuT^o+raq}&wyyAe17@{-PaX=f?VgKzHd*3a?&=q2oX2@FgWIRl?CFj97B<2R+ zlhr6RQrgiv_nAtPH&{p(BCnyF8?~4G;w7KV*__XL#}if0rM>6N9L@XgdFp(A-g8L$ z%E=>P)Wp1&L>2t`FRa5iXOCH~PND`mw|`}j4)ZUSzI{}I4o~}T9w?}0Xn*lK(OF#WI!1YUEedj90IwG6dPg&@@OfF zdloGrJ%7{#93|uTeP~Ul5g!bo&b zD#^iMXdiCFEIsN=9*BWTN?`Ah-`FHemMHE*^1o8zTdNLK%=7r$W3h zhd5vnhuC4f234=(CAqBF0TDSDd60P%hDZl6^msASq4CZu4__UDj#h7tMYeA%F6UzO zu}}@H4l+BcQKiQ2)FB@VG^;fWhrjeM6w)wX!@8G)p~IdV3Pq3r_$w4I1Elw|_CaXO zUlBR(y$$pdB}h)*G)yDpK=)7KC^T?B3LVFWZ}?t+=q;^5fhH&9qI(jl&mE zC<3$gz*O3VHuSl;Z0ZXXw{4Y_e513OWJAGy6TevLbHZ9fC_H^7A9<`VVDdwWP;a^t1`9IX-5 z;r`YoJHUDvg~m3}Hhihu;`Q0OpU6n|LD|0Q zrPpUo7#gJ%>~LcV#OF2@A!xw`5O_H7H57kMi4_SoyrFcv3~YWe<<4~*o9)fRKMC3I z(TrK~_7a-SY8m279^-9)VkslLI+vdnbO$S0D@lM~;2i(-Qzn^IF8=21VXK>k^z_v& z2@;`G1##ypQxTM-`*5Q3)~~EXH*G8pNdG!^iG*0oPAa*}Ny5hI)2InH5N|L578UY=4!;%bON&Sp>NT`slY&JA|K zF(*aGjJwCa>tpDUVk`93A)}v{+(R{bw}gbXwD!Tq0O*%0ni?Ch$FQ{g*jv_nW$FbY zR2;@#+?FSyzi6rC-_%=p(Oaxxu0jF_puj`|@aP!^x6@%%iFkFR`juXH?R@~vYAwyg z=AYqDruWM!Xe!WzCO-6A-@ifz?gvn1g!@s5S=U#6J*ooQ+#unIp5}dHk6L5BNDy3u z3Du!P^{A-PX(We+W$B;bm6OgJLd?~{NZfqK_`xB0!OON#ZsVJu1{jbruQ;exZjqE) z(u2v>fx{GrA0B8v^DMklo$C>&f`1%CM`HQUa^&7&2XUH%YI2&B3QQFAsF-&Es2&exI#vQNS2 z1N6nI(R(}18J%3dhp)*Tx4sCTZ5lgY1hb*kf6T)Ft-|oq;u54>!Az*lrbgJdWFosP zePA>r!f65w%bL_diyc4u8SR@f*OJJEu#;j)+;}4! z-rzqK)nH&vpV=|WPcpl7JZC4F)-k!!mMl_z1~0v?)cAyKm{fJ zI7*st)HAwzA<{gUh2yPw-uV)6e_`-y2iYz@Ywkf_8RZj89E)IL1rB=)gw{n zezF?(lh5n(I>{VR496>B7EvegY33ykLdTzc8-z=+#<>;sit1-iQ^Cr=)hNK!=uL!~ z%kwx-dR40gjuKx_nm^&d`_lFDdA0g=Gd*ra-{w_0>qV2Ip+uAoe zWhul2VMB5bPX<)y%y=l>f($oefZ^lp)3YK9SYUY_L;NnaA`C%NV6zvE_wpDMCt;cUETB&fGSGTR^R0*& z3!=dxd?7)$*&6@wzH`h-%$UZNnO1!WhE;y&(#jzo6tDswk~}A*O}T7Lf)AANUd_B@ zwS_HBh}t;m$|Vu|QDB-H(gab1NKm-6({|THOiAL@#zN1&4^^%N*w^PL-aORrn z!J5y8H~h-peXUg%E{5MPia=y(VyN&#Y-k=hQ{1@e&bFxDk;>Xwu^Gt_2P${yveEnt zY`7Gng{M06bf80^!JkEUE-9lIbl!goHpo>iGs~V#vQof2?xfF|Wv~}DA2x;Yx6kWr zrQJ~=Oea$L!oOnnl^*7w5mShT?UyhP72*S)2=0ew_4jCql!wR|G9HR!;70xYDGvol z&Ayzlm3qp77jO1jOF+1_kfh_Ex-nm){(!~=c=5pEQrnm0u@_gQ%`)jmb~maFz{hPU zz5uAH_Kgc}3NB07{5%Lc6!v+(9mG%7&!jeeHf}1HI$pRa=zLi`{~sR-8fe4``Hv>^ z!slq8dsDs^2!3|z{%xLrNC4>o@&#e_j8yiZT6Ex8IU0-&+Gq*e`6bPdwch# zVBxH6#qhL2bj!D10lOEHZE?;qBuyA!&fBRYV(B9``_0BG0 zk(KZ>Olai;ER>I^E2wt142ZfSdloNNK9kcIWccG#wbRLOPCUBc;T=a=&vW zwYN%^I*7D(2TCmLL=@jZ1jmw^T53RX%R>z2 z@Canc%~^wP=jIxvWqR?K(v<(~f&L&nuU{Q4VqxzIZmG*M?A*tn@jYXrc~g&y~wX`eO(`4m#59A-~F7mG;9ELW%l&|a2B)uuPw z2Cp>;p%m4IKEga&<7N-2o@4{k?U*ZGF76k2z4aop#qz1>TPvgO#0jz!E4oVz^~vvr z5?%%@*(S8F8LvjngF%!P8CnM{vNCv3e1!DBMl-9qP=>Q>-FD|!=R=2s8StQ|Q^DY* zn!UPBpj6}ljxe4v#rJum$fB6a5C8aPS0mH86t;mFfTwgT)w#$rO!ji-7Fistg-hp1b42;6r%Ubv2z` z;2Krl&qr9YxjS|ks-YQQCkIvS2J^((+bhJ2RC0z;pR>g#kNgv^H`0zUncfY4XsT`1vRM_sy zbjs8Z&=^ufsKSyqn+>)TaGgtT2$}YuJ$c;3L#Yr-{N;H24zpbTGlPQPvXqKZ+=`Mq zL|nG!8J^oIro}ugD=d?LkvrlKI?|Y-b2gamcMqKvZqZoB0P(60Z)X6bKR;y8>NM3f zqp{k-PFGyKIm?e9IfT&#rI5uvlxbY`V5X_%!(_L|CX<5|-bWekw|Mve@GuY)aTy>R z$0f(nXD0QGj^=6C={yJmo0Ylc>J>ULAC9=4X*UVEPJwpVIl*jNk1_*+ako1U79NA5$8_Q8kh2!VDth-fI*Qv?JoT06PPoGgsjqODkKn$ZPND(n) zoBTksy@LBh$-nVt0kh*h za)dt9CPnA8KQD_12c=kN+$T7Di~2kdVUqSi+oMd~8#F6{0hLF{ zv3l6|f0kTz=b(F|ClMP(j**4ftZ+&Mq~q+QSKNwli~}X7lLSVvbIofv?u2)TF~<)E z(K?qQp6Pp;pvIFl=vN*E;|f8{g>|&lKqO^$9j)45UgleJQ$**UbL3Z|n8Cthe$V!z zV_{c1vMkUAxYS|D3DrEeU>6|@Eeoqn%+Pu`1T$)LI#u(N@U-r|20AF!%gOuypJf6LF**3pgLxT*eJK?cHsahZ*b|UX{NHK4g=6kehELDWN zw}KIX@r__5uIJ3IMw$lC;%unBSWikxL_xCns`cI2XI4Dbi!)(lF40H;tv*A9YZ90=h&4jFed-^R7Q7Gv`Lrg_YyLNI*KRdwxsk9u-}zV?qL6@40% z^Da-tNoYxVzI%P)&>j(v`MuWsn+j9iXWCp;Ygj&PLZ^PCY~~fwabnh^O=2U&7Ps0= zv1RnDNL@VeuJu!y&$B!MMGzYHX=#x?GJR$dfTDc{k!E9A&)U2I?lTB-0%&m3>gWis z9JW>{I(DjDk6Y#)X*PP^4ikddt5G451wvjo`q*Fs7aS~v1z_s{oJbjzB+)ZlA3H}0 z1P!-_RlVVyf*?s@-UGJ@hg2E@WllVod4e>OMmyr81d7C@A}}YmHm`^rzz&TlH~EbE zQG_nkmg0Pg{iLL|z&(nB)K5&HpA?lRw&m4u*!>FhyoXsd7xuw5SQq&i@WxgSBY3c{ zkvIEaP^Jq7SPSoPz-I!hH4I-^U zPSG+DK6KbG>CQ{XL0vz17i9cATC?}o5QKo_nG0N78!h5+nwOQZrE=HR4XZq*xhr?i zs#+GFdG1_+cT>j*khf}miLTj|f=`t*j2B+kRNN^tz$e7*+o}#pqnUsdw)*+NHNHn< zT#HNoy_X{g?{-`$iKvHy|A%t41vCIgAjAJ3<%q_$m_i^jyaA%3fdq>X!4M-OK|u=w z0bfnzm4O_TjxOu$>h8JwUrBCe^s&q4A!v|?BnG3RV5*%46*J*FPM?9n+6oFP7!7w1 zkdgj_)%R;3KCW-%gp5srp&T&|=i3W#+TO3<|LpyE!7)KXh3bg4ga4r%Ej}maB9qd- zZe6wSsJ8)`_GvCoblkAZ@*wy~Idlfg%7Dz;{3kot>h({{SJyZQ%4P^a#ztc&xs)U8 zAhhDLdsmBtj3CAH_hh%)yuM*~F~KojF@x7Qbk=Y_$ois=%({WJ(~HX({K?SAGyqmS z(zZ|e9{9`vGlAxL0iN=yV>`X>q(VeDIm3?&%rvMIM}{(=vifK{4>0nd9%suy-`WZ- zgjxg)(#IeE!jUtW1KL7=LUwa!YIMW$ZA*(|NnX~`ekS(YPwJTu$X1wWL-q_Bw5^L_ zcgTe*aARKsaSLE3Vgl+l(x29115yanzLGkA!%hf!F!!dnJz_*~W<_n=heeGqed)P) zB2SZTU2;XIl4%!FT_VZ?gOV6;Ge7nb24j*g#T`v6><%0eN*$oTOQ#%Pm68v7&&ddi z8Jy4J4}3PrF1$ynW1@Ch)=U&y`Q#uXoFkCuEaer?pOaTyHzcJM=0kU%K12YVhJGnxJtmk|*FBX(?9W6{HX5(nfKJ|CC$#|eVRvj+wTh0ggw+T5|u)mhM^9s+OL1-2+d;y&d@ivWlWZ>pHJZCDbqtm{Yp?Lk0%$qGyIFjaXB#FM zrbz&I2MZo>>|Mlc#*%?~FV>$>28&TP+4TbB9dPBa?m`EH!@WT;%EAhZlez6ESh1U$I z&&KJ9!#pcCNZ^okKO^s)Q62V*K_4s*$g{11@rhl|74ry$%5X8HD157wt(E|SWYHMA zD|VoI*75M098rF6z~UFS=+rZ=?_xe*p9CO;45+evJR%FAc+lrgl)@3{=n`DJdPZkA7(|(#@^N75}Lq+ zZ&Q)?@J4;|Q5VE~#uqM)9y$HgQ5`)8F&agnMwX#v$E5hZ*v#e6*_Z_5K|MVzAf}72 zEMPD9x9wR4WU?eAjIAX-I2mHW_7$I;P6&AkR@e3sV|IXi9xODwR?6kXQOXO<#dR0p ztrf`bXeP=e2dX;|lxv52o4Lu(;&_(oXmHu4Fsz)YSCu~-10>k#&fE-%wz*H>L2nplqx%2Z_#XTf>u5%sV zp{__o_R+J(Eq`>CgNA|HSdcg;UjAF(n;qix>jIzFDzju2?DM$SFHT=XWXDel63)DN zn|WH>B_ks=&1rEW_`8b#f>mVE^x};O;Oc=oE32zc$DQ5ps)Vp3<9j7Vi^JlT{44Q^ z<2RcycNG=iyWEM{=`CybkG{9*`OPJ)6)Q^9ez@1O#OHydzWVU<(W(G|G?~Nhfhz~X zJ|jQ#&9L{Yu*7W1k_I8O|K`BVpds_XPK*YI>BZQlK2_G1TE#!p9l6Tyd>`E8_So`S^X99f17cYMx7XjzA@V*Uqr7*UblOE6P+2iw2 zcM{lZvYEX6_*;6#xwn{)OWKdta5`ekhwFELHftZW7MES&=7koR2v#n{`j5x~yo%J_ z;4j+c1G#5KMnDnR3~&n*s?4II3MmK(feBCX7zfEPGYlhI3lRg!lWyePYm)f&)QJ=x zGd5HOzYOu~vx4I|v3_jo25w#ddc(sJ^kT**tE53;?k1~WDM&JmX^B%OK+sbAPy}cW zEMd+3fj`BINq}S>J1NeaYQHK&W`cRf{Q1y6pw*n_rRuL*#xsv;CMx!{gKtTBQm*v5 zs?a^p?^}}k#NY1^0vUXZ>@400GE9<_At^-2AOL~D;XY8x(dc6t?aZ=54pUr@IvQ&4 ziU*;P?|VUZD{p>CEa{EF>RFHtM4!xyp9ii8Tjas=ft}??U-AUp*}M7%g9X@wzn8wb zz)zjW`Zk$op@?TJpNW6}edWZr3gj_T8fY(oyBsf|fDR>4H(>htEMLAPGMRiblNl_C zBwNQJv}2-}?s9Qvspm28XbV>zTCdxPw!Hb^3i>f+=jgvj z@REYh+vkj{AOq-`IjZRxj%+#rKGK(;_B|{UA6TB0W*~X8MguxQnyn2TDF3irNzFY9i?z(SFZjrA!qcu=+Y zZ=54P6Wo+r{1)mdgFiIBUL50bH2psbXUVfZ>-_;+(KB@=Z+xt(mf;6h5&X20Ua?XX zlplkS6rqFIEv1r5*heRGI#^&SR`GTv@p6`!ATil;PGq>}!ox0Q&@4iMDJsgaJ>%{v zYDN35tfNf{L81;Z05+lwrUns3f&JOwi7QSaL)=#wm}a=a^K5_L`;0KmAa3wFzQmj&nSK)1o?0g%&pDG5EBcUljJrkW-SZ)iHPm(sJ!>l zAA}%-a0CgT7(=GI{?c<53YU*{|C?)nN<89&_2I3(OKsYeGUY?PAEG>c)q*Z6oSD2# ziwP+pB^c}i%53O9TqD!>(qFxO{6_v2&mkyx5o*AW9iT#B6ex}fpH8UwD*`!_S1B?A z<(frp$bb$OWIuid`VkS@%>5)#n;`)4*JGkT@CA;EP01 zA&z7aKdENy7uV(Pm8F4U#DouIx5UAk%1&hkZbP0He-sZDXD9Nm zrh(za zYrP!U5wHNHO()>mn9GiuevkKTD$!*QTfhP*F+0@?^Y8}X5-Yw>>joB2_!otHKCN}v z(W52>L-}z>sKc_K0DN~~l;)}2r?sH3@{12+zWik9&DuYp`UrhWy3~V7a%}#WP;Wd> zTqUIs7GBYb1)+g*gs*Ve3yd(SGs5>)9Cu~`C}b!oti_z~!=51A7e8N};kA;V#R6f8 zFdq-278@C!_i&LubLy%>RSejH5V0-RP{2JC{O@_#Pi_96OnnelW`hVvIpJPq!oBG* zB>C(cdmyhLsZRhz0f-SDNVo|ha9|MZ?KKJzaZcbne!r)860xFeVR|#iOa4aRvY-xC zxoR+3JCJ{u01mqe^R>HVC{KGfLA0g!^8UoHOOgI3wNMc{shSh39 z*8~!NMhPSi^alyZdv#xmq5MbH%VooP(k^Q;qCHU>I*AA#R_Ily`&_fGke|pNQp2}7 z-rC{fxUp?M6v5RZ3%v%-sTcF;LR0Yw7;rr#0}@P2&{wNuH$4bv!ea?_1~g$aN}o%T zpgkQ#p&(QNF{hs~5ddQR7&9C|Q1I6tIw1cFmzH$_2z5jv4alf-i z`v%n1`Cm3FkQ=!=cC{x5;THy&sDqi^voEA41}6U4d-2{*MX{0fq(DI^Yjh7 za8=kOX!MLcvu(nDg6KyB3(esDl_p*6?;kfA)mUa!zZy|yk8TDw?P(PG20_>F%it+f zEhb<)I(>7N`9lrxVo$1fkb5+5ZqD9*ZD_|+o>^VoCuuBo>kplO43A|NXjjc(Pfo?;RJP zr*mgR6qpDZ*)EzBYEdF^Gqy5rfb10{lwgfFA0DNrK{i8CSes2##AV;+;$gBmQjkjOFJW6z2 zpg$k6p}|`oBa2s5t$LhY&b`^0HV`;N!|b}Vt}hw=~mtR&%R23UdY2gHEs2Uha| z@SP^9jH}Sg$NIjG!6mQ@xeQpU%Skfv;ja;(i-ZUTfduJ5BzTR+(7PI}dZ`HTNw=SL zn#v~R@6-~{2tOKo`~kfMscPsy#9GdN6CJOHSgERae>kTj=*H5&6MXbtDgj1eeN4X= zAwUM){JGw@!P+OQClTZC9I0s7qmvn!DQYJLq#H4N=1@k|z)jlH@j(@rH1irWQ zxi04R^Cx4BdeGZ1i0zbyACZ%68HqsVre`@6NnxVRkkkIgPu?tj;ge{*^s#&vAxzlt z#E)dLZZ+vVR3mM4Jp8sn^XGg$sDQ1-ejVTMeO{%b;D?1UxT#PKBv8}f)z%2YA6OK4 zcCl;BhW1M8kl2~DEeB%X#e(r{&ezt}&ELN7HQYoXl1A@P8aU=!HX9sbtV<%)ov+z3 z*Xqa|zNb04ns6!bihYh;(<56nDHS4T;U~L z#P@Xe7JopX0v&#^mlG1rcjCv7hcWwL^J07VVvCoKded8X<7LHEzpGY%-Yot5+ReOM zHlVFpYd-6cSRAR_r@QmZN#2xqZ_-l7jF(%kJQYWR!Qs|F%iiIA&xyGnuZO4Gk3O_L z5PdVH0}R6dZhRy!4S*f^WCH_mrIQat*V+PP7pQe|~ ziTnEKM*}jDxo#!ogc1kLnTwN;@cL|!@6GqqpbGV82*1T>nSnhOl_9MI_e$)_&>V=! z-@oi37@h(*WAwDh^FvzSQmI(TIG4xs;Yv&2L}d$Aj-_Jgpr%G7GOh4Bot;M$mgfu{ z{Z6M8R=53kl6&*IK1XNyZp_?#UV$3cH@V6~*C3R#*G2>u6AM~@8F#V;0d@7F+FK7E zFMau2`}>6!puJ4(A!vg?d^R>wy=WnKQz5IvB(@VLOo8vLt-$3eP>h60KB4X=#O14j z1$b@rl7RzjWENj%50Zq0fYf$w3{t6Rr)rY|?U1|r2egIyAc9R9JUps#9tAqhPijqq z9wcWetY=&|Es_WkM*h!rdi(#nPM^=r%FfBn%P%M_DlRF#K+B0QJ0EiKN@dmmu>zEZ zT8R2XqHo-6zjgZ#<4W8?(Gaw;1||o3UhFoMsjYIbWAr~(fKnrEF!SO0f$_9w;50~P z+ti!IrMFkn@@X%Yo@+0hfBlZTGy1fgc7AK|!wAivAhVgB{&oLfKzM^m{36+7hQ_H^ z0(BPZR#j*&t)EdbPF0+%4YrRcHA8b7Ydp@oJefea%7R>Ac3eku#lVk3Bq&O*BmIjmO-X zxlaya-^tVXHvLBS%NlD~FM8al|NEW!S4xkbm_ zrLW)Ndz5bY`^)3rPodY1_gj9)ug=IC)8_-UOo}UJ&I2!g@CK_uW9a8W`|~eSnR{e* z_SA9Y<(N<32ZvEu*5Gn1{#r|c2Q#~FMVYWmpD*g{NE*u3HS4qin0uF3qYzt^u?uBM z49ie8+`fa9)3EBRd|BRIrf0e9wr~TVr{2)0%*_y#BFH7>-h}wk->S-Pnl6+N^3u+y zK2%Fc3yttnlyOkdt>@w_3;hGYpxHk)uZF-$4_lkhrh)}+yzXRl zPYfiP?KmNdnP9JE1blW6^B>GrmEeyOip?#CP5>6?iNzdE#%z?8WH3%bB&YS&38<{7 zN-8F*Z-QgXM9O4qSyrWCSrFuTPVb_)JH=vxmr;-Smf34~Hk0RTr*5V%YY-2>75068 z=Ycyq6DeAw9o^N<3Pe#`9S<8V=5bk_J}ph@a|_42o~nQTa5ne0rsMS0*q67P)g&Wy zGz@;`>2#al$GIhJR#hTBq(vil6Aqv4eJSr^{8zWzP_Ur;`OOK@p7?-2THh6polWb? zs?{V%B-U3+W9I8pOIGejCD!&_3w!zHN3lj`Q}3%|HIyIkvPGlzmh)9^@2wQ;f8AT9 z*&Y1#{-Sr(ueHk1+rK{4B!2z%k)C((_j<#XD5DLNn%loO|E^7?bgydu^Ly~uZNlVd zj+cV**De|B_D=(=k5xtnos5L}-GN61r$@WK+y_95`vs!?x^8lw3K1Ab^T3wiw7C6N zm`S0G8T*&%-s&zTcl&A*v2*d`F~d@xKb<(LLG#%8s&DA-%+}MKdD&{(DvxLfzu;fG z6^@Bj1A)WU$*;j0ZwU}ps@!?L8X^BAmbsS+8_hF9h97uenT(1M=H*;&w{02pgHeU~ z>}k_JNZL#4q)c5H^Pg>7tH88eU=2Mg$T>VL^Y)`2)c%BOAH(XG*zDl}0Va|%f-3&? zxnL|z9Q16hKoYxY>{DYqj$~Q5Ei{BiVuD19vP?*{R)f<*HwHu~MEeMOpn6e|Mq!XJ zKV=z1AOXU9Obz=*a%jl>s>}^l9>PF2LS77~WWo?KP>(G^{j=~*bsq#CP~0w0IO~=? zrBkYAbP|Bj=lKDoEvd6Oys|(^&Q^hYajxgn5E}&R(Qr=v+XuFZ+22k~An^oE70-V{ zYLKJ{HWxGUxoMhq;#`)k$?~xh+6P@X9n?C4iWf*xv1%z6KgI;N?*@!Y5TmV8T`(2>DOCu_F6VE&iJnu%!( zCLvR>oeo7KGoidRsQ8Kyj$S8(>SO3xn9y6~N5Z46EB39eyO+`0{>$zTlM<)qMzHAy zSxBL?-7QBhUQl2L%E39A23%IYsC>1}FC<)@ZwM?wBuaI*b>wevNfjhnf%a%nlfonQ zaXp{#d<2Ltr{@m;S`h!U6r@S}az}E6s;nEU&881jo%j9bK*TswpR8AszsAcCP>AMG zpxd>k<+PHa^1_&2PkV+7f`6g|^QV-q%+m~(#c7!)UuiJ7w<0*A^>=KHcPbWCCWf&IV zd?z=@0r+sxKoS=8F&{Gs(Ug`4P<}DWP{tceAIni~8S4qG`-IfHnepo!QCi+W2}3|! zWYM&<{EFt)B`tBmmDFveY|SdRm|XqB;z37=c)f55e+_!&w&%#|XSb zkWe4ywV;@0>+j2%UHeLs1<5Ps`-{Zz4*GDJpEg)`fQ^1yyQ3tioOPjLSW@8_Aec)9 z%sfCxCL0b%CJ{eJv+F?7bf&B`9yDaD{2C^bKyj%O5Xr_qo##0S(#+*9ZP?v$(?3rp z5i^bCv!*hsJ%Ou#A7>n*c8X^J8sf)Y`(`vW;GyH8jcK7GU(R5~{~Z&toEc8|9R+;` zD?)hq#KwCCLA{83-VgB#x%USydLa#o51HGR{}=`+*vAH#u$-=AOad^Z&)$nKnJMsa z2yS>tLG2 z)L;3XTX?9)EpaD0KGKqLb85|1UAu|8cV( zjBHs;F=m@9h3s!@ECju6*x2(fVttYE5J(*MGPsgVmAi zjVsP3XV!JE{(PEkP1vIs9IrBM3yw@vnT5NBaI(NpzNvj5Zv4pdPMg;TckcMb)Tv%l zIVX|_vuFEo5)xI8Sc);gIoSvgqO}PDY=l*9Xja5f11@%g?Py?EHWidlIFM+4K}!@( zi;rV~d~>K?`>S9Olc1Lg<(f7n$iRhiEwy!b5F%Ua`DqVwWF7-%CoeB>L_dH5Hq}1l zMFag|!aRr)7A-u(KSfeka0+ZV`YtkC1%Peq#}hy*c(5r2REq#t&54`NtIZ&?!2sNc z0P3(q%8-K2>i|)}k>5R#8W2y6sBBDrP8yePON6R&jJO~J?yFq^$RJka`~<1>rm{dgwU~%0n`NP)=kooQt&ve2AdhL?fI+LFi6FY_M?cs4;vZMI)!MGMG2( zuF;`A&E}ROsbO6AVPgmo#n?lA*Dto%J~sdXfBa}Q)MtMz?93enEis^YE-B~39h$^W zCj`$*XtzS}Vu9>A1$Fzh4k7^U02@*A+PYxo49HtBZ|+3e7#s5y29>rqTE`pE7qmaI z3V${nKR)W{mVi}ZA7HX^hsp%oI)L4U0xK_GZkgPk0`n%=-(vt846r*_56J>>)-a?) zu$_Vp_w!^pSa6BWkfF-!yvt0cP`guMu@+(Vui3D9p0;pa4cc zp+T^+)T3hRFjx#8$#uAfF#w-?V2%&coB_CF!BJSi2uLvq0kWt7*IwtsZQIh~eO~Zy z{y@Z_j52`#dGCJ$t^)QThyUG1`G4R0W#vV@p=Ofq=zxm<%K}#CZ>DWxA_g@9OY%1V zcN^tAQAG@#HZ%k_F*P6fFAG?SzXEjl*$|XWe9CohExo0gi9KJ1YQ();=W+%50<>2- zQ0(XbNWhBFOwMx?<2?Wpbrz%mT#^P2)!fV*AJCg{~#${#cj2t_l*?%3oqP$+y$(o|Z<1ddcpGf_yXU zz-`uGYbnMeFhw4R4S#)I=6pRaYdmXYt}9G%5Q}i90^<8!A`dJkcb-;Qq`?FChKEUS zU2R&oRF_xa_4?t0-t9Wt1b+Q|BY$cgc^J&d>C>Jzjv7JZLh-uvET4|>3}SFTcf1Zg zZp4d+E>JATY^$RFJsl)n@%#S6`L) zc;C;c&;_q=wf^@AaT$4|sW$ZSOmqCB>Ch&t)WbU)v(2*JVOjX$9as_uNgCW4Pyh2u zP)siQJ8bNnXq*Z=yCIHZ8HIFh#+~oiQbmHYFWN5W*IEY#*W0ltX7I@T3*xz z3=1X7s1PDRtEJgVTM*%MpARdPSZy01^Hu)r3tTC4*87F>*8Zb)p#t>vf6?{UUrmRP z-~VgDiUFgC)aVpOBRLurlvEH@IwTxQ3o^R9LmZ6?IxuJ*9U`qDqLPAuI6_5K{OR zJV#Y6^?cGDg zExrCeo<3t?_m**vbK_t@F%5y3wuTqj_h2sh3ng;4`z!rHkj7f$8VS2v_Obiz4|eKv%ubFpb&>KswyRqjlh=x1f5ie4Ica<- z<;t(s%+k+#U_GsD`+9T$#rtVK@QFVwhVV4w_@?lX#Huwv%*we`5&=74S8B^_%C@=Z zF<-bcF3H;o^x@goj5&DQtOkMjO;Tlyp{@VlPj!6z=Z0-M1fmh}GPq zLFPx1m>36yU>{&05eubi)SCL-4Hi0P|ZN1~0lYodz4$;%UjC?EL%c6c@5_b-{NT&ZAE|qAgK*|EJ79jlase6Q zd68YIcfNek6$Z$kz4T4i^D)C^iH(7Bel*L2ItvHBmd7^t*rt6_9z|U~!A*bny=->p zT6sx|nfHspiR$3Q-ECjpHpe~gOE0Xu-rjIRo~wNPFESZr+S&5+Wi1qsqsicQHEIdp z5EpQleU?JoF0rue=*4~-No$9$K+qKdk zOIDfcGg8jKfV^d|%KIpeq-C4hIN8&H8%>Idw!EjhRHz|RTF0V@An~eFVwb#Mr2rx< zx2YJ?A2Eoceg1^~Y+oEF!Jo$pRgImoGuFG`e3@a(K!Tjczg#Q_vOLGF zxmX=~q`;{cAd}grUMRFIS*X7SPD*<^g-zM(z1*gdo7z5sKRIz%a**)5YT1X1qm@rQHqTW*0#eFV%Q3CH} zmYMw_HpJDz(|W~)*(rV_Wcn#WH_?>wBT}hsMs$ekx14!D#ztzwx>o9Ns`Xal6MJYI zRSL73Feo{5cYzPiGU$NncLH*b482rNYR0W72Nj?u(~e`>&;|NO!T_LIn)AdJaa-Kp zl0@c3JV#)&h=9gSEIC@4N#LFx`^{cb5dpCZT5=Yu=^yamnn<{;qe9j*#aK1Cw>U^(E zV{I}@%xYnNLFC!<)8{4l_eK_ve*_KwZVGIhes6qqp{+hg_U3jD_uQyQ`@k8gpf8}y z#-^bi+m?@nAEkY$8Gh3FgC-o7C;ZWfaIcBb1ohx zz2K|kJtHlH5Q?9_?jHCpWsiXcJr;;LWxppky~@QZEc`-|iy`AS(Oi#@zz|Ih%+zfb zj7Enm#Z=DAFvP^E^R;uC?Zzcki&seG2|HcU)H7gZ9V@aA=lGM|gWw{^?Q^-_5&7F9 zI!za}`yH{Yn?ETP+LIl(c9pzZ@kC;{8LTNId`ficpaR|zqsAy)6vL$~ari6C)Yf(? zO`su;S4jJe!DZI9ut1TD?9Fq!u}Z8$GNQ%aJ{P!SRcx*rMm@d0WmIzx790dc?96N# z*Z4v`FUG^&-KQ?EiU~|E1PEyXAhi?P<>qYh!(by@Smw=|rWZPf+s9N0Tx*U&JQw+{ zD&q@UQ;AiM;$znKHyOkYeqJpo{-2`bZ)@P>;yV*}@`jV`y*9f8mGABux2CffY>tS8I%>FsL zy^l#Mlo1wXqz3jPj89<@{I+x7tg8~FOX?w_F5kLf_-vyBuQn-0ADcg3TDglqoa6+l zW!|H)>j!+FDH1?t6;*YhBmyN}&35f={<5x<6QW<74>6>_i259=O}`pPaOUa5M_f7= z1ABrm_#Sgu-Rs0fG=>__o?Mwy9UKU)jsol6i`^)?=6+<15PI}y1<8tT+V1^&QQ(z%xJ!&XJPw|46(*2N_Wm9jc4)Z&{NuMX zBT=fW`}<;LIuhNCzi+A=Xc4;Qj^q&TWzQw&&wiH^Hl01x*A?ywfss_1KWyhI&|0m> z!&q(6YLeYtH%!HUMr}t`W2j6;fBrT*WGp@$aX$q%9_l~$dg1w@9*F+5O6PJV{zOB_ z=fsK}o8p6a@SsMUX#Xk5)q3VIOCMy|Wuu%(00ez@E2b(~MS>M$vTj|$5Oqfs!%rd} z{)}l-4*y96`8|sjJ5g8YbY=Z55qEchciM|Zje0}C+o7+OEg;)&ywz^L)e#JWD9rm- z8=+f^*yKng(d3xa8a59a>6Mu9#vIctB{L&+2gi9P>7#^O&pf#HVAkqfFO3p6m*N85 z9ZMA)%|JK*s)pjS?ZQJYi{N9V^x)B)7qQ-nXZ17l<@~

    `zFbohEWO`byZhxbFkBX!r!W=?KMclZe_mii%+C* zQ-@@Cu(~$th|T)_4X%-7Qc5I2 zb&#_>hBc7T;D^RcmUVXb$N9 zEJ(23IgAQKlc2FQa0&%LYJf#1A=)^I(E`MoP@_$7GhQx_xCq1(;n6f8dJ+cS07LMA z(-O#Oq4vr#QBZAc9F!yCQgN{+2JDk~I|?9w%t_E>w-c zpk?MSLdiO30!K|kNN-f26i~H8hyWQtM1UD75DckG*aXgRi7jIPUk@|yfMmcQbo2i@ z8_3Dc%Mf4(1%U8!`Ttwjoas9z29E0Q)slg9|5w*M(aNL^ z?SJ!j=;`EtFKQiXGT66k{aDba{{rCRF{|rqP!XqHx~=*6zRv9an%3wJuPKGxW1z-$ z^!rjqQd}HHB;Y`t_-`=K3vd;y!> zhUj)ULb<$Z|i@+PVKK zn~EAJz7>G`odsNs#Ccz?&24{bD3~F0BP@=^c9Yyv&p z8+KA&(i&8+3_3i01&qOv+6gR8&cr&r&jX)^YaX$oy(mp{AU5QdF$(3FF#d#!yAg&- z1oNhkOy|T4NN+W)Biuf#i_n|(P(qvJmxtM1%?>UyMAmrT=#G}$=$ao}zV|&^M5#y} zNm{}~ig?;Ebk0s`3^B8Fy!~{RD`AbIL*FXekA}!3Gv*0h_Ib8e_&y0QJwhP>F1YQc zn&48IZ(TKoJYz^(0#G6s;zUg3)%0H3?fl&~CEJaV*l7ezGMD0BB(6z~GRT}DXsI$< z8r!W(YCEdPuO-N&f&xJV7FI#})+rnVT!NowKxnI{H}}W2-W$$=QOPDK zbdW;70f*ac*Les?J(xIQ`N~n8McWVr8MNPjS}f^ z6ehxt&b&jvgvP8U5f7hQY+AlZTffcG{cFp8=9xa$(b#1}tGT2C6&#m^L2q{zS@C->CH8v!mip}K ze<|@ty=9m65$)D^pMaP9%$v%@udnV%I+5L@{s8%x?+|ElpIuADtm~(9mFP>C>TqpD zwjg}vmglfR1!pRt*;Xm4MTx=wpe0M#oWBDTH#Ew3VR>Ru#qr9Hn}*-GA}0yqyhw@l z^T=Z3$7A93ri0i1#`}INC79$Ik_5(9*qLZo8D5#1Tr2Q_2h+It`>{#_euU^8lHS&q zscAwC+?pIW6(F4eayPAF21(ioNg%s9pITaP^KkcZozMmh+W?hYH8qkmYO!siX$r4j z%^zY}ha@xi3y#>SYoY@=@afgm6lf35W#knL8MYL6=H8^&YOLB7bLsaheB zz>TfWW3x|IGR!QQ=X;|7{1V2cvx+KWl4;j(z4j|rijrunA;B<@>|v&upv|+A6J`^d z8B3}Bypz1cA`ea-S3<~*^#l{6EH@OpdY{lHf<&E&(RdoBO}dL?M)9e&wb+UjZy4~O z1@NYaMrzp~8bsTtav$8U7UZ8~!n#ctil2uKaai)pJ`m67IIJA3$>j%A4Cqbn`UD=m zSdMoy)}ZeV{+fDM8*1XJG#Kw&HjN<#rTEweb^w>`>{RiVo(j*;UJQ4} zq3n4lS$;U-+ixs5qX&A`J=9nDiPXs;Lv;Ob4d#_MEM$z8=eHc=AF8WQJEYH1O~FCb(tz zi{GcSD9;9ACWdFP0O+ottE02Kyj5|EzHx741fb2D6>nNXyBnE9?%0pba^lrsX`fX) z)%iUGluADoW*&{c8%E!LtXAr}s2N@8qUp@!cZ*eCcOy)UTJEhj``*jIH$=?(YLf5x z&Sr!D@%8OC>uQ8?{nLp@AJcKB z-vfSQNQ|W2w@dbqA0cJXl_zL*{#E`EA0%$Yz!E;+=H1W|npPCmAHGmx5uhWE@$`eJ z==KdH3Cw@~`fVZ1$6Y$~_FPhy#KW?A3Bp$?CjgA40?>Wcc>egmyPbt2^R4P5$di>^ zc0YpS@6-L)=KkWMA3wHYRWccN0GJbSbd$FTQcuW7I}M(^Xux9tfF=!W0$9XKx`Kr`+7B5pZ_nf6l zY=HZLQ*oK*-}3h=M%WJj*@tC66zk_Z=AM<`wK*Kxa+CKhF?UEk&2i={CIlh<=dH}s zzPlw$It=%|F}u>@Pg*&25obQV+Agt;2Vvcw{$9F$|G*ZF1A-j)SAxs##b;GPPA==2 z5Y}f#UUI5+U;!xZ9@|LK%z>#G{Vzi=3ARZ>@rYRq0tv^hY=qaH}5#a&K7VPejO zoezzPypQLyvcK?p$hnp3bjkk0caKZy7b4atKq0%TJVXdlPZd zJIgelHxdl-z=Jrfg}7sp7wB>i<7 zrIAMQ!D{Nc2nbel6RBFCD>WPTiX1D2%-hcm9;KzLBJ~n}-dS$Tn-D?28)h7Z=P%Dh zTGXLoZuubPwDD|vb0p!{GQ&6kdV?)M-MZR72ekGYiPb~wd34oW80ih^vK5E~A$5+e z&?F_VC=|p_lHq_ddh`@7RY%k=fdZDKq^Rb`hxc&7)I zL>U~FTC|tEAVw&dlv#-YkLHmFra+GOfHNkgcmO=BUBz>31gyV z+@a)uEy0Hdmgi?n(3x}^mN0HS(D2zW7MJ@QSxPu!YECR;T=01Q3mt?nXFYp*ppN-b zc;$@#wJ+J0d<*6=mCWC{tKR4Xe1*&pJgdH2`){A%uE=i5%=9qNaaBWAD&Ny!PTti? zisgK2czX|Z7k=owLvY$XT5yi%I7Go%0i|4_> zV{-JjDjAyZlD2YQhhbzr>g6IZUPHCL+^n?F+SeP93lCT>`qZN#FwoMyT@16=LNQti z{M`-XK_NXb<0*qePPe1qdsq9kuu%;#5gqk+ZNL*n%+1%U5^cm4$pCzTxwWI-co|~U z!SwRXgQrq?{DX~;eYk#+;KA1$AANst(m@1aIv$9qfXQ1-8P^*_TONKSNHLx&If|>_ zCN$LYFrKfpf)XBmBjMCJf4yj9;Ise@sz{7cQE-?~W&GXj z^Z=FDhvWQB7mnI;R0cQv*|^*01-GeV3u$hEDwHLa2y*!#_$LXoNVY8zZw6Lo7R?;} z5k!_6lUJ@HJIxQ4V|MS?xhyJ!7sZHoQu1VrdFNEYFA?Mo3T1H;#Fbj`kBg6qoErV5 zv1OTV*eGg5@_FEyqVLBP=SW0k$EQfgc?f6R&XM3Joz+!%j@`UGUBcspWA=L$Yx3|Z zLm-H1SwuL4Cb_jjKoBR#6Ruml(NN3G;!0q1wD9WZR>%}cGrOggwL!+RC3P8Ww029x z2YWf0>ngE5_lxM(1Fjkeo4B-yUdyE79`73A)0>-x#V&EEXIkH-Nv&|c#X8F|*09>L z5D$HZ8)ZC3zd6g55iXpRD`CnZ6kechwaE%0FQ1)Mk|1&qpmnNHxx18nCcsWY0q zHfAYe% zarD0t4Oba){Q7XNF=y+GWSaU^RA^w)AQ>ZfP%AH;7E=%)Ly|BT%|EhIl(9cwru=uJS! z-L79m{1s6x80>iD^bCn{vr?1&=jB z8NI?gqG!?p@Of8)P#~;bIDAZ5C5j}E$4zBoth0R;0+uFX`5wL9=M7tmuv$|7pp}hY z72V#4n-fXM9wl`gF(lRk1ZRbFZC6LVDn*<`L2|S-O`7nf4Ad`4ag92g1 zgQJKF-fa16;iB5a|1=JCiE~@HH@C~nkEZ+{5J9aipy;X=LvTapX~`v_avdVfg?O*j zg3WwXco0HocY?a>0mnlL|3K;P)2aK`DH7xq(31F&@cSX{yf3nLc6`VnDvk*Q^Pq}o zV#EotDelvvwAURM6{wB`_{YB=7{aX1Mlh~-GsuyW1ppydFbD%c^qiOUESFq>g10Sz zc*>`9dQ$^SwN0!>uO%L1m{~zM@Db~spSXDkF`%ksnGLiOdQ>&Evos#(A0>K~t@`3< z7(GTRrD%Ux5mmrmSnb#WX1`92sb)S1amBj4W=8xK6Q>u~0=BTx(zde=FI^E+YSl0jI!FC@Oe#{@s6)zdJZZ=+x>e zSPS&=zsX;YoW#o7!Gz0ylfPjN?7_b%L}Od?V{%U%LZ#aQ$AUWpVq!a6Zkn?~y28A{ zT5Q=&S3hja4U-B3om8?VZJ7HY!lW!o+i~K3`#P5q63TXK@yk{(>Z%rkMxE@-NJ~Ne z`H*gmLrm0Lo+-$wJQT`eP-54)ACX5bYH;q;N3r8q-!LP#8!07LKyl-V>*}c3Q?ZY) zZy|2rolX&Z3foERKOE0GLl>ih-sZ}hIrqg-vwH%Zx3l3UaS;u)rB{6xYZF@A)-Xwm zT@TVpiH!tw1doD5j3Lm~W%A}DMnuQQ53ChC(a>>RJi&SIrB`p5%)R2H)~V1=t}3k)fcaX)pv=(x=4F9+KPErqx5t+BV` zsn?D<8?wOTui0~A(5jm$a1quJ@MY$U-pisP=Fd5bHokB8qdp?rKtPNFpt*n)9nOJt*t!DyvMAL_P zPGL(u4BT|wE(_+5vt%Vx7|?J}E{JGQEX}Zl_K{fr<-o5Nh6JNcV1xmfj4VO0R3yjb z^@Bz(2?$nXvXzSBJz7cxYe4tn;5o*Zrl3k1%CEyq6OEGKy7_^F4PK*@{Ge{A(QBoB zLiI}E#Dj&^r;`osu`FhZQ`8!m%4A&fgI{(#=Wm1ovCIKua|Q$*F0Zf8PS)RlPzpMp zhGQifDSbRETW>S3B148C&D$3Z;oLaMr9SY+i7QUx<*{dDv+~-n`97o-6q5+&h;Wk% zy{n=%#l>V!fecLE?A#ku7Oa=HVvHxkFh?E`P)B?dxkXP+nGE5Sh*uJLp`!Lx`R+hW zm_8#eQVPRfRbsXED?FL<9* z6wslpkF*Sj%u(5ldRLt(eH-&_cs&khrKscG>bHH~oJN3TbKjR5bXAJ4<+u8Y+a`G0>V-nRE$ zB1__WEwFx;+P@!%^)W=^HI8|*?}WSupeIQwyp1@OHM;I~3{JJ0q#yYx??GzGgzK`- zV7piGjH*lW56hj+ID;7YooRWm18E6|2TM={-3`0B1bx6pMbH`W9G9~bW@0NbOr{y^ zo4ELbO#m^DAt@2aNjm5OUL2+HGt*w`1p6qQ2RqgRUqg58cEGIK;wa|k>?qq)AX0n2ZWpXlt`z*#ify86`X$h z8PJI{D3&2ozL3gs@67q7{KR%pYzrMgT*Q9$ z@X@GN7=p=tL16klACbh~%kSpb;*|TY2C-3@j}{Qvco9lAr(>W19Y$?s4)fUuk;WSk z{1}xM^4)jJlR}7b#V;<`ya`N-3jFzrKb{@pNWA$d0<@j$c^f~Ro z8vJlnoaS)Y!Hr9>c{efs`|3K(>&msw9*ga=4_<3eESxBe(eSQTfv1OOt#9^RMT|M0 zWTXQL7ZsWKtH_fumLqAUE4~S*BV7cG-+L3dgsV60a$5D9JkY|Li zHwW$);UQ$uC!n^%lG?fRab@{Pe@5t5emGu}yF_OAdS-yOj>{<)a~u$W0MJiSY|qlq zjC<(xlt}F{NGk_8V&{blq+C4+k4v7GW63fqH#rf}@r+I(%DErnQZ6b};UJe&i8lHS zX!Ub5_5!Bjqmx5S;V@AblGFoV^LJ)ca<_j@Os&Lp48ugkjP{a}2)_H8z{%#4h!<)9 z@tH2ivuI{t9U7u;xyx@yXO)`SCZ77_Z4SR==K>d(X(-E{b(Bh-$hA%8w$3hBQ_|A= zgW-KcQ}2o3xiCsRgENH>`880t|V**$BrIcOPMuX63dda7McQ%&KOFHSOTNp z_4bQJ+VO9cB!QFxdbIMB zs9X{Jv$SvNUU(nm)%Y&**K(f=lJ$M37E>mbU-m+UW+yjusblYn)3=c*SRd}dkLq>? z6&j7wItd8dd|)S+5%8y4q&n%u^y8XhLb|DY)GrQp5`~2H*{F6pMQsB_s$VMR30?Rx zn{?@;OE?61<-##TBUd1S)B}wLVk0kr_0#LM0~oTHq?)s(yXpU@k(AVawch$(?we1Z z1;#bep4`zQ^Gz!WecrsGaWGHr%PTRiXGLFS`@;O{n3TL75Et~byDnv1?+|id^|HjnM>}>YH`aR zZdXa@1!K#Hd&~_RaUw9LhhAtN`1t`Ft85xXF**LrfXx8WNmArywq=;@unQDW8zlo# zminH{khOJ$;CzCar1v}k6(X7jC^2D|ATKT2`3l1ZlK=oQt%BezucR-*Y>JZ~zriBfSPH#TxatgA;cPR5DI%U{`B{axBvNk% zUz1dbZZLJ8fwOVEO`CoAx~k=D zDNqULEl&TV;vq0~YtlPJo04`+WUaT)I583f=EYf?pJyy4+YEkY{j8G72lwIVN!V;~ zbv9)Uqosd6ii;fbeW98qZ7j@XrFN8jH9#Q-9(aCbK8t>aa)uELOtX#cGC2aZQNJR# ziZO`&Y-uik4h1`ok}Hd5FE%1oEl`H~U&MzwM9y+C86BgG5D*_QuUOw)8P&ywdn zR-JXnzJT;Sfn6`^f+P&Xj`G9LskxzA@m0{fNqk@ z7QKc`sl{ax!!JItNvg|XbY4ASe5feENX>h)R21!FH$9JNqA^HNAstEZO8DDK`FJ5IL6uf$)mqk_!F9gsO1F=|q(+QFSA!dsY1f*_N=mQ1(ee zYArtJPrKFQBSfho7K+cO(DLCOmRk%+4GNsQPySErtyCVyuRN81XY(_i9Yjdt+LI7P zl7mT7MkNjM`%5M9`gbS&mG3w3e4bf7FAQ5Vm9Ne2 z;;wnUW?TgLJ>=UuTtkJrbza1T5z4Jc3ptEfn~Q6E+}##Sn6IqYUW*`cxRBjZ=b!-a zvZco7SiRbgm75xVQi%}C4wg0>wqi|F%f79l8n728oN_lt+L(2YbvnF(_%z3B zt1f*(8S0#)tXH2is)xIb=3n|xM(*ScFUSrk(lFMVyxB^F-H}va#9$Vlg5%YZNAQN~ z2MTv>&~!yAFHuf^3iBC6U*EzWSdP+IS$1|m(PQQqAx7*kh{aRxm& z_3KOE$?2`e2m|1WNR!IbkodUzG>q@Uabxdt)5EuM_6ej=$%pF^7d~MbuW#6mD3f0M zG<-YO8o18*^?|~phpJ9WBECGWnJf`8I><3}u)luSFy#K3Z@vizJD>o1N< zYzM0(pxMd(_*Q$-Xp5^*dR?00Ad=IRw-YQ4LGp59eLB;d!8g({b;F&W%hi@HExot- zj@7xnBf2^m?%tYuJm$!JpONeJXxAfN?Aobr&@%a!Lhe-O>i8sh!P(^=cfdxyKTuZ2$s*LXFeyVIq4N9GZ^5}q#8mbHBfHQXV0 zDta@JdXtg*3RDxOS@UJt9}(G-0J zjhd?3_X3xC`UF^sI*ip5LpMf8*)iph*~$?IrSdZc&p1HcOz-P6i7$Q{0(+@`p=Gt! z;ZG}46ssB8_(`=3s23Udcu!enEuqj~8cgJ$2;RvYT+*`(J-tP#AbCEd26;HX88|=2 zjQadC+5!74CnaE!^IHR36Q-;0a%im>a@kaU@i(jW%JA*ugejpW8@-Y5D6YZx9V3oN zI&k@-d6)E_wG}$=WB{q=Z0hdK89*HQ1ysgF^b6Mj8GWbqrywUN^4KqD>aFr})z9sB zogKs$AdDCw!u|EGWoK|lUkw2cS(23QVrS(Y<9J85%k`s~XZv}Ig<%HuN~z~>zA_&j zu`m~7%Jwln_Hb0Z#?X}NSd}lgHD!PUIWG(!0FkZ8~csOLn ztFv0Q#Go;W#(qqBR}XYGt=_$efGojm^==Qa_8T%cR|bU(7tjw=_F5*& z>qC)fM8Z3i{ACckQ1O~;Ojja&~ zL0`Mz1tcl4krB6Es?+2N{t|)Zkid=KrJ_M+1p-Ke4__dIFt7_$EnNZgwJC@d0O5Fq zknrRhDc^of=;h7Ud@0F%@=|0okNVc%rDt>(C4ke|gIu{e4_}TvQ$?LrlZc%YAf!T) zUmkAc*_>I@L4{!EnYZ26br=OKVLBv(n_zoOO|TUi!uSFyXIYb8xpg3blEc7IK(b1P zjitevh>M>~X`cPJz(-eTRT%NB+0Q{_8l(LA2m2z7OR%#mpUAX#l1d-A{-M;Izo77f zT8e!yEAB3=JmbXxdQ^si6C}O!q5Et_>K`)`00BAoZnT`X{jSd=%@K7A%!}K1PGZu@ zUJURHYBNgvWFk>tU1P$?1WdpP@Gng@qv>S0JEl8E#^=4h!lR`bNOsH~%d34XVWPUkJI^u!@a= zmmpo+0+h2o!V&JB4%ih33mhh||i`&TugFf`HtGY6{uevM{iE)n8JZcaOaE)F2QN*8v%xL6F zFNyY9?SIq{bYRH;s2_fX(NFk2D)-w*-hKInJk=4NIOP?QntCkuf7B0-j<=r>vOC^O z5XjEFvRdX&ev#>8SaIsBSM0fbr?oAv`19}BER>(c1pj3ckkgTSE!NkSF>0g#arcB- z@SADrc+_VJ$;U4zK1K7@KCF-eIcqH)B;hN26Ur|_Ifg~f>LhZ=Ty}5MchtUyk-Zs1 z#*vsYj&h}1W|=6Km?(s7n_eKPOaP0ZHH7P%@aJpYJ}dKtZACkg`~0lo`ol8Dd*)@Z zTM8>KN+4~;(|!~a>FH$r-H5*nXOjj!wGyRk@>u!bRkHVVL@|zJ@}jTjxZ6Z#ApaX<0juJ1$1rwzwYRcsU!%OCGb5?& zRik_-0A2wvrON#vi=V4{w)=sjHNEYtAH?Tle_HEyc3SN#=D{*e?xZ21b07&%-Itl# zB`hzZ9(w*`zEfOA=KYODXX*TvVQ_0@efmJ>MdbP01@g{1x-ajTK>Q4xy04MI0*Z6S zihzQ1EQFZ|4u$MtNU>}%L_gwdi9P@m(^7RwItZu4SU}Ug*|DgdHJ8-AWmXs`V>z)G zg`(EGX6*S-6=V!U{}<@{3E&E}gF648xqU&F6W+@Uk8`?FNUp4^uBol7Z@B;9VdH(d z01>Pf78@nP$gbA(A7%4PYEN$;*@+PgjT!}yLFvui{{K-n&)4(IJRAM^NsCeL-T#2T zt2I7++KtizZ5{k)TGhTtY@tm$z#_<6RqH4m8T_gGj>EsRD&Y*TMu{vk zxS2@A%GLH~zJ^}d0}+bz!S?&MZmzrc(?c>Asd1fXT-jRcbZ?$a)^Mhp7Q?IRbAt1@ zWpj{o8};sZw`K?bK+zel_{Gj&2h%XVRSA-b;O6G)D~Z7bUg!IYs-)tHmoMez+5Pab zXpu&uG2}$7!C6MGv40^JV=TEG&q2@a6R@5Q%ZYp;o6AYKM9Gz8(L(Q)6v?`Vl~md1 zn=5Gt`S8_r<+t9|l4`Tg?=!TjpdkA1fD2#F zUZj@OyZ0CGpZWpge>zPMG@iW`TJ?um3dPBq{~!)NY8Ez2VibtngP=V&iN-*HmYxxZ zRU@SbHSd}B6*g<#+{X+muQcGn|Dh$o&iFVX3z12CQP$}7zrOp^ctFS(S+B2$jn zr%(078Cjr8$TvL*5ht2#w3H}aR8mffWeGTuq?$pjBA&^0|L|MxVPJ>i-@OE*7q_CA z5udS1GWtgvVf7FmW!^6UoldqWtL?t~M=Nb)z zh=cry;Atk_rtfdN+RMj~y!K-Qnel$;??J(URU)r0<5%f9;!xCwYtTaqiPuBf`NzAN zZ~*k)FX#L7#dz+IQi{%tOg&wZx8{1dQH{W1RN|$8_FF1{-}IqSz@E=)Z#xF|Ud-ms zuP+T*q6I+cKT46%?YP}(uIM4di(73Qk2;jV3In5^bOHpJT#K>uUB*#1J#z(gBV4&I6=iG30n5ZJ z`#kV&kYwB<0OOV9fvOGbe|uKX!b>6?3J)}J%B@1#yG-13n8D?GDm4b1&( z=C#x8I!@#`H+Nc+rIWz4Vq7=o6cTJ8^TuLp3dCOy@K~W&VemX2;c=gMRi{J%XUU>r zPEB!5U&Z>^z*?F{n05o1V?Vp-;79kePQ{O+Q-UWWBWur0U;)GP`Qj>U=(e8J7n`F@m2+!El zJKYQd3#hUcQfKet3g*RD7HhSw@YO0;S$mu{*kinq)a|;UM0@pBc|`<4_#r4xzGJ^+ z$@~hPic%rP|HI4ch3OfzuT0uTTbDOdb4rIH z*VV#sSAL#qEiKP=;|HX!!5P&AEMpoPZt8LD8qN>CEr9FH*Ht~IV23VW^u;FoHC(rR z_bQ^$yQE;JLSypXL}^HX4q=BJK$)NE2nnzytmkYx*Uv44h-%Hp@Uz)9ygx1!4PBo> zM4xl&!d*Y_UEmvd+L2u$veth*6o{%c_=p)w)&A>}ELQKKzy|;(6O-1!>v3c640bCBFc3WBl{} z#8vF9R-49s>a%i<)IK-TFw8F6m&z zE6S+S`n%M>%k;PJCm=D4*V>#}$|7f-2$R)dz7aUj0e9GB*fhde$TC48E#a6XYAFgH7S z<}byRu4vD$iz3VCo_)B3P*TA<&3{A)bCGr<7{K)JI?UQiDC?Ix>bR%h z|Ail@zeKlb{Y(my5DT@Fc&8ujKX%@);+(|aUa_@_#?X^PwtLi1Q&N4g4_{n~EK8bk z5{%$*&B%h4_rQ6{vCPFE8BOc8b{0HZ>=>p&YQv;}am>X_HTRxAh~BfPTL z9~G=|&G9D--hI;1Wi9c44AI=Whvsvun=*%r_>VaIQOF%QXe6w*YdjT1es}OzCr0uO zC}dH%gY&Y<-(s_9X5ISc`IpqVd+sb@f{TzepF4l0{U&b1e!G3&DE|3%?kH`Z`_p9o z0~01Ywb-<3S2NS-7hd6(;1`ULcWoK5KP3VSc6|S}oKSRBKT=ql45O`5b^m#|1!P$? zP4>JX_r6{K<|xp%ED*3SPA8=lJZDT9ihlSUc zUc}QfbbJLNqzMF{mnAjGPR5cgl`VT2BtkW`*fKrS=ULD9{GRhW&tKr2F>~gg>w3Lk*I6KA zS3n1I*Sp20^?~3?nfTl4Hu`+Nx0KxpIq}yXM6`6f-DOU=_8{(2H*2g%g4J0-XjOpP zozQp6`Po=#X0W}2dW5VW>0z*a%CvytbRzdOWYC?@nG{npV+*C-F7Pv{T2J&H-T3S0-X3Z*>LRU7O*DqOP;Uqi ztX@H01R)xjS#_MUN^uXIa;>ioA^Qfj#Ej6-TC$CQ-G7REXqS;nDa!W0Y<0@-K{Y;h z$sHXwOMj^7`mly3b)q|Jik2DYX_Zig@N3Z&bV487&xx4z=)m~fu`^{SrseD#Dhwgb zN6+oJqBVH)6koZ>gk+`kLF&{|cp$I(n88eBWED9*;OxCAVn*ZX3xcgkj~AFvvS^O| ze7=hr9TsrM9o6VMhzuX9B0ghqR`=Z4g9LgmN~45^IAYoT;y3!0W&D(VF4(DU*P+P^wLb5c%4_)ylkM`($)7YHifwMfyoTBA90wp?R(nQT=d|bj6oL`hrnK zdZ@+-sbUs)92>M4xD49ZyCB6)`4H9 zM~zf#P1~4#!se87JnO_fU98sh;;AgB<`_mk9ok6xf>0Zw6t7wk`O7dq8;DCMp10ht z{aloQbT-Zps-bI?eXnHox8NG+i_-8!%mtGxSK@wJz~@;Mpb+EW4Wx)%U0i9w&!Wd3 zyiAWI&Ft~o{L-A95 z%_+ooP4`muS(B4mo5E>rFH*#+x<3Tms_*{;V61}om+6Ddl@+h-KwTH};+9XIc;mbKoFbg`?!+|O#I7sHQO8grT2 z9{Jr1*(?H+UhHHvoz)Z=;}C<}1N= zz9@K=d|i6ESjipo`M7G13#IVQR>9@?=SjKPJ7QNrt+{dyyd^Js4ibfQ@3$D231`Mm z33!RAG(DF~kCvs?oS5NGAwi~d5N?Sg zz;A;)$-V-ZM_dE(ff`VJ7$&7SK86ZqWVEuH$el7Sa++>jnzK>Jx_|`FvAx|C;7u-D z!t~VO6Iz%;pD(qUg}&&bL?pYqKVNE86>6#=g0k(K)x-GIMk7?);;&XcI3j{=LIoke z+a*1(bz@RH#Ufgj!=>$ddZ@41vs#{Qzu2kjs>M(|dT#Xyvd>_bnT%|{}>h+ALz>EO$(F2sUrTznmO-p0pYMecP+><})S?p=~HRuDrX4D~38PZeZkBjkoI-XFm< z-y44;S%pdCll!cdF@ztgQvto1Om{uSJl`RXvlv;kRqGIxcc#AH*8&d;$>GxnrgC`Q z+r=1Ty?F9ayA!HvB<>wW{TE8e8H;_W3_h?#tJ%a=F<&Ez7ndbl}{9EB`cRe!S_R%2FHwjkkqx?OELEygkRL}zPjpVdQth2c9 ze!sRoT1N4;k&LzcrkEos=G4+i9{{;iRO_Tpn*1Yn>8o+3JsM4%bh71?C%+bo>WS~` zO_fJ8;_2<=H!ApUMU~2wx}I4IeZo4Kq~SI!(bLi5Ix#^*Sg=R`{MjY8^WxS+Rt(jY zq|I&DDXxaU`Hj}|&MQc^GuYkIT&+apYUcy_qKN5Hle zYT-6{Lf=Aj0{?C{xF830yQ~J3}>bkU7^=YgJVQ=fuux z!MSBDU~f!6Jj2h|mfX5r0*HS7(2fH@G@YiS%k^9U>gLC%6oz2oBdDgo6m8}dxge>mkWu}_uWq$b$huDI1W{LzCV!#U#zG9TTRP8W zhQ>Q-(XKn)^#gT)yc^S|A7y}pJkMRGnmsJ((2-`Q0V9}#vc6lub)pV1DGPfhLd0_VpcN&m%-ON zV^_lH+`eQc#z?de84TSg>9OjYv+!}Oz&HV@y~TKv2z#j0aj}(oXd){3(wFS}D$I}* z&G-`plJZUZm!2_@1C43F9%7@X5*-;NJE0=Bx=Hv+svm`88UR5ugr`(ML}~K_fg#$4 z(y;*OUC(2AGVm9S15KcMbddGwl}EiUPJnXr=o9KK7zO~NajGLa;=UGe#wCyl@b%vo zH3rIw1BrZA$V>meD*|QwlNje$cq#}o3i2lck6(U6bkXYX(@^GO1IyN|e`&~N5NPyx zKm7@pxwIOw&U6`NSHJB5hH9Nue=oIT2nK88<~{<0vUepMoQO$@eaG*LdkGO7?0+bM zIiGQzxcBS_R=4Yf7~~G?Pf?Xf?YjX6f5q{ndo>!{CdY;Uyw;i!{w1mVQV#XYMpRhY z{Mgqe$c2}`giChRlte-e-(7nrj;DAIVv*+JC7$2Kg8?vtricJ0{R-*3+$Fz47lpsm ze}uD%^O7M1apmv)d-A$)kc9^G1VoC|nebiAceEf?9MUJSFS;DI8oHm;CAM3o;Woc7 zR#M@Do-SDw!_S>+4m=RP*3y2A`t+Ts59)v{dbr~p+LhJaQDtX6MC5K) zAy$MUhxs}Fs!L1>1HcSVelnr!YJGoLdwX zp>eS#a0Q3c`F0?6>1P?Ic%<+2kK0Uvk@jMg-QR_rw02DrZRNk__NR?5dxj+D{>$x8 zv*?b>Xc%h@udL+$FVVMVetRX!@}9gg@s{4^zsY7sZm+e^m1i%9Q*ru(5@zJ~=&yk_ z=i4?fFht*s+}XbkVtC; z&e1`*WAH!Hzo!l|;?M~wA6OeHFXis|_TwUTX?Y057rwR*X1q5iK>;hMgvm>E2|xHleSPsqt8ibis?pYU23^c&CB-ol-?lEI6{oe;KS zOi*SZp~60@1?ys^0&F6DHr~#R2}<)w{}uY4a z@=_H()V3zrjD%u~moWMKWyR@ifOz2fk0YnA$20A7JX;y-MNhu1w3_a1h=O-{IjNqf z)U-8y4JPo&k2Ei%KFw32?`lp+EP|QPR2Ij#4znaAy5nS_S!dg?&6$Q9i*GyIcfV76 zlSIv5cI^LHpQv$s_pej{eZQQ!g%mDL-~L zE}IqfA!s-ia$m}_Y`ngd=eSjWsVE5C`0}JEPEIsNUT94>*x!2z%mC3x@es!_zwW14 z5^nQp-OCNeFg0rKL1ozjCiWyWfebG02_SnxFy|S`w5Go0#y<-N#8l;}mFX$I1j!3o zDubiF%yys#T`pEA(SYAMcy#kQ<$|uE>j90na?{tJ=72%;>EC1nhiRH>PU;(R7)8Aa zCO3JoYh7TIQNYBu_0e01(S_UMx&sA=Gz(oXU*dK&E6AG+P)buIrLHS9kEj@J0aF9a z9B>?n8RAq>C%TI5(*yEDF#Y^G3giI?x#wFu4Cu@Dv)Gb#Wmtzxi9}T>K*JV98&>TC z3#2R0WfHies9h%lu)ypFgxjo~ON->h801=DBtL`$b}AGkd%w7aF$Q()6%!{8xv4SO z!}HAm#z>|iL2)Q0C>5%5yO=egvX-f!+w`P&KkwrrzS^&}1Vte<^ER*k6%rP)NfPCF zGDryg=>(VdURLZON4_-5xaYJ$)o`If*}ar`urqkB-a!M&)C|OBEeZJp4zlW;-@PN* zH}5}rAlNL5r5!s;v1~bpOcv>Br9=Y2#W_gO7$+U6N3v352hBR1!7{c>5^D6>9!~`l z?!l)%Ce$^3v%LEI;36=m9)BVT>SXvNd6o4?FwD4qoE|m?-u>7kTl{p) zKHlf?k4G1wdWE*R(xyE>9`7J+xk!TpEL&oEdnno6DL=4h?v$}V{b6R(Q+@5&>lsel_r@k|ct3R$yN3bq zt9-qHbH=ajve}(Ll}F$4({9 zh^c7NX(`9FqO>)xL+q>ul7B3NPoep{TU

    sDQxPuo>L3P?e}@b}Qn#SkQXQ&Q&bd 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 z z3}01}o+QNlmJ*NXrq-04S?*#2~VQ037Bx5W@%?2@fUifeM%tC0CaB&tTYN@Ot74yf~Up+ zM*!kZg^^)mmGe!z8eFyqmiKN+3f%&W)B~&?04fZN*pXUA+CYi5co5j!>$0A>Csl>Q z{osPx9WFm(cd;$N#IIGFe!iJch>OtH1C?qwifq9tm`+b~P1^PP%R^F*am768RaNjX zBUIp@n${k0@d7<(Q4uou0#oI9lczTJXWQlcax5L3g1>Op1i!l0Tx97-aZoS}P~(>3 z=?5{MgzBEUq2fIcxj5VV-vzz21XX4r2L?h*EG(Y{c4Xa=jlnG)G!Wu@9H)T zbYnQ<-oT{{wC~8Uh<@?4$hvy(SjZuF$eq{TE#L=-SK~%rKk7}oU;eB|K}U<4QhJ{2 zUg*fzi6PgF)V!?`I$uM9yCrGExq0jON6ukM>asJlA+wP8caL#wPEr)uinJWHbzZ}8)xC|!B>rjBt? z%F{)1J6iee#Glc)hbSV9Gd6DmsC87;MlLpSNR_{94$Ig2YJ+orrJ|@5*VhtqdXjxR z>0IZ~>uHp*Q-^vaT={5nFO!UU&uNdTboy{iv-Z7};ahiY=|_g-t_94~>8ZFLh$Joq z9y_iw2E-ZDr(JcgSeqi%fN|tD)2Fp*f{NA$0aT7O7Z&q4;fk5O(|GIeZ zW_y)&yM$kzADZu}W8#=z7`~`~YEwvqI9p$!9WgKD_IlXIaDHeByp;W6@z=tTsbC-u zq)iTv4bupo%E~)1lZ*Ye75D!Unvbv^5B5j<9}Q=|VjO9YQfFRKF;)^NhDxfHT~g-5KH6$`YUhv7A` zA8!=%iSx8%L_0sYz2ZaQ+Z_cVaNw`~PJ1vA$c(#2w;DuKG*-B@rwWqx;R!5Z)BFfI z`SG$*DMaxqZ&nGL2oZXB`IS_F3_ z`&_BtD4g&S>cx%IQCEw6EP;-Z2okC1t|kBx`S_KB12ByH_}iQ3<;5fzT6-d>|Jk?e z?*Rf0ilixWpZNSDTHbI%ME1181F#l>-qSAp86bB4p7D(Z-VF^F&%%Pj|%nNe{sHM2#~d)JW@hiTSX;2oI#-TP4G=k zPeP&KcPdV=Wsvfgnjm)!7Vn_e_4V6#8UszwR6=7lKsxd=5-MP=VB3ib#XN!syzrQV z2f3IKrB$(w8NJ?@h?e5Y+Fy1?cBWwiULlO?KVf+tdSrup%;TC8prwihMh%Q?`Gg>c zkcVG%{s~@~KhEfdM|sJ)4*^sTNqiQk5{pl-(Z6gNQEnt$N4gg!O3u6&@Wg$6rlC=T z`lF628ktC6ATzS%>53N#T$fsoO%$=tb-h^6VLHz@mW_00;P3ZM-98MYOBmiUDKeZ^ z!MkyP^!C8H_xNg^r`7SfEeuv#={^24RiBT8=-i%CINVwSH zuPcLV0nD7#n5l`Er6$i0IYtmn_!;(+M;+}!hH5=6er7k@_J5==4!3-ywjb`^dkM9r z1j`*9?$v$#T6Yc1y9Y$5kyu-uskRZ!(&ye^k=Vn;xq}S$c!jZA%DRM6S%x&_)LG6k zFe2EAIfx^hftYYU#be?Xnry9Z=={OQC!UP@M7Yh@R=JWoiWwaMa|TAc8w79gfe5pF)}@Uat%HOo)kA1%+)46hJ9i={pP{_FYl2tBv%Xu* zqcHp*J3d}Z538*P4P%LDFh;orHO}AquF0!FuI*x$kTqpaXI)4Yc9+eg^$E~-h`QCR zyUS5*aI3BDaOfb>puZh(rVYr-$i87k-*+(K|IV7fGcs;u_55|_Xfe=rayR*7_8ID* zK^~#kTR+A+_xZ@9Nx`FX;}(U@DT0qwOvN!J2DQKZ$Mr20hh7}fzD>E94D=#mRTR(h zb3FX2>Z_$dk)F_?9RB`LdHE011j76J$&aM#+zz8k@KHZ%!fS?&-r0pAD+y#|%gZWw z99bmpulD|DwOH@d?YXy=+LoQdo_VjAKJmFYn1b~705WQn?!>ELzQGe6f7kABbzF+8 zE7p+gJER>?b$XtUqn-b=bAp|y`}jf>jqS(eggynKXgG@>c^~u~1ELE))%*m=WNjYp zYqdnS#|T#j(+{=f@SiyOC~S96Ry+(gIQre|IQvm5id25Erp@p?-vpL>W|%$BFdpl? zzR&i6M+WeF&iDx67UZv-#~II0?=(3RgyBf_sMdfdAnhV5^U^>xE#wJ=(?JXZit7Hv zXBNku9QV~rf&yBmg}>Fqx(`0-5mm)O8>=7#74G^l4lHwhWF&Jwb00hN_Hl%QIJe+B z>4k&}8JWdq3_QfK&5c;U^H=>l{dlw>}ktUb$yIS@nz6;>)$w z-81CB01cHAyC&v37|kImm6{~vd@|xvCXA|_8R`)E{2YDf?D@yriPE4*Hf*i|9E>F5I^(1)bsDTs zUxxKLd}a(JK}CnMkld0KpJl0HuUVWD{dF<0KX7EZfWf zbBrT|emnS%H~h%WD3^WxESyl)eSjsvv+z`uH{n7mX{PNevAAeNBEg6ohyp#$;uWR= zsD)7;uP|$WYW^#8sbV0QgAEH-2XQ-5=_4Vd|0d+|i0f4vK9V=8($@jO+jjh-6w)JU zmN)#jZcBYGf6nU~wxP;HE9)6u0)tx8kDuke=reu|VkUegw*-i^V$crmIoL~5GAZS& zJ(-5#g3rS6Lo5D8sCy|-=bym|_IQU#(c0ptsXovFBE=kR9xd+}Cp08Tsq$?0hunps0QG}7<^WwEC;G;~W z&x3_}b}Yi_Vhk%7sh%&)b{=O-{Um2~(V#4|BPhuLK$%EBX}ow#i|8%s<8>uZ@fqsH z2Jq=Xvtjf7wY!_0IgM|NI_NvUsU4}5UNv^!=Fj5@*iEEEgw#^x2OplB5C~%r%$<5J zSVk%b>og zv6zG(ZswT$Le-0{p8Y??9LOZOhl&E%4PtnuJ5E7LehsoBAvr6JOZpZ;Qy+Q?E4hn3 z>%)238-VUy?S6vpPKCded{Yd^n~6C(yO6{PUuBZ zniT0u2kE^TdRIW2QVdNH5CSSq#Q;hZm7;Vp6afoLQxGxt$^G4Dp4t1%Gjo19|3oIA z_qASY>2$?pYAb*U!tXPD?G|=rcMKohT%=nc;5K>it%;|5DH{ptL1#GW$M^U^C(rh= zfP5d6%%kQ4e^zci$YRLr^jXq+;Zw+InRHfv>GC>UfXOPjsdtf*gA!}I+pzwon9nac zt>?@k**`Dy4ob38ts|u=)JSw;^^WWd7S2Bkg8UCRR&H!g)zS+?O)LOKvg!oWUSLyb zUGGH)+yfl&HTLZwL>m>`R;v)C_q1kRr{(w!$KHi_krOxCVQ{aGOHJCu=I zPkKS;W18!pIS~&Hq=i`Iat?d<(n!A}VRRPbHd>#`O`x6v)P1=;{O9(yWQhJ_B{TkRMFh))zphrVaB(o z=W6zJ6Q3NYHT=lD^xW0n_2&@z?;r2)fAsd|EZ&>?$ft6Lf1G&l!_Ja28}d)s;^{Fp z`jy1);g79xLPgs3q+QsxIi=)xv2z?SumiF?BlO*wa9CFygBlXMah;?OfJiXMGQ~CJ zF)9;Pj5Nl;=7!Ofpj8c8#Bxb`|CHJU4>VKD8)KFujJB@q!E zR+nB6PIouWc#X?|9;FL%XHdm(F23nWFB7eO69iG2&chjO^XJS>C2Z$2!^2D+)Ii}l zg}I?ror7=(?lkISa29tYkd~sJrAV1cv5NL%;7+A-z}`i>mCO<25`@i7iB6Rdi6bFX8e+tOtQ5RuI-7w-6c8yjWA8qn>)Yv3 zBbn;Hn>r?uz>P4vv+brSN_g+!9s$*)MrY(~Zds(4W2Z>C>Ep;7%E_XpA?}lcY=lhb zE&w!|h$rUt$E1H!4%Y_qYmO42-4~K5!J8S`)7?qKBg_y?-Vk^0W+q|oF(_r%OENlM zY|i7bTnxHvT!cuzI1e!~jY(6B;y#4`lt?Y~NgDMEx>1s^Gz8%uOZ4#x>I%Q2vvqU1 zF$gz@aJ5dD6DufhEE+jZpSCIFluB;JF}R5rpSyxjwMvC@U5d(#eTWI5NmEibBX~c% z1#`u1NBhu!M$j^F^vHzL7?*w3Y`*(9#YS%8qVr=KRhBbi89#?#w@1G636{XXYmOk_ zO%>p2WohK%O}J5cV+yl9wItONVgEbBbuwn4r)@Ii4 z#nDAy%M1av97~@^M3<@Gx*9^0*GKe6CD@n{Z2Ss6{E(r3!Taz~x8ITL^*ox`JMH>m zVvVS+JcI}Q|5W}tw?{>xWUhrslKz^^IP$shI zv&)i%Kc&gJ#1Z)kc})>pb;GU-HF)EYQDR-L&C?9SL{9WReilMS}U-)Tw;!0hIXv@mBsrq0^3No zI42$A-J@xMkE(V%ky4$33FWl|FAEo17X^y>*S38|zH)T^T*srvE9M-cn4Ajw0-=L7 zdj_Fy&aQ!sFS~+wQ$Baqy`0X8@Rk(Zt!*^Eb+aJXP9scZGvav|$hq&@7B`(OIV`9b z?E72nGsisR$%h>a;2v`+v}@G=wb)ecbJUQ4fa;N)ebPPVPEfrFztJEX|* zB5kcyl0>HFyIO*I_o$RLj<_UwR;pW3M**&UizjItbyW8MhmKFyF`Jyn7hhd@Ru(JhlM4U`YE7cNUsS;9?D5(vbex zeTKYaoy%yna|ek25?pr@a0aXdCP6qX9EW`@fVYB>VR!&UL;q|it)5Kjs+G0%OlFHf z(F#`RRT8j90*?~A{!%#iU)*~?1Sy(j_LefcEX)zdP<1qPzaL*nVW(b@u_QesK`?wh z@7BHdD7Ukm%u{7p8W(!-wk^-_mPHKb8Sp(j*y=JTeDPO?e-?Y+U&Y_~%3LVZhcRm0 zAwd-rsZ%7&-MMu6{KA4xMKAj#9#GViZ23Rj+pTJdyf0v z%co2ULJ>;>Bq*6?gCYAF%vKDP*BX56fW>bPEQi&8P+;IPAAC!l)<2Npn{OWc$EW{? z@DuE*#4@ICwC1_WX~pap!JJ1!ue%{Tf4JPRSMX0I<%m5ebh@get~J!Bg5J{ujMnc>MzDtL55w!Nd0a(Em1sb zB8QJ_nP%b(*sp8!}8MyBYzk?nIYhqr=vH8$9UF9 zN-J@En9*u5G_!jwd=;PYP0Go9IF}J+izlxR!lY9MisFYad{LCAysS-No0=Tb4~OtV zUoEgJrt}7ALdJ^t_!qzWV%=YKGcx%c-19$xNx1vhGNP!AkWk3(g?@gs&*1O~6p(oG za-ieoG-qS%@-2MU!0n79`s_5AfIl%&Ny@t=naREXi-C>l2CY% z>@_bexanIT&;cGAPjn_Y|D$E$9s-YKOuzyzyDdzkDe0;1G9S(RY0b*hZUNrc(w}Af zbUGn_w32E3F+Bh6=!x7&>r|S%OkeUOXB}imb_P$GEDMlmlAbBrg-GvDRt`ZF@vt|H z?=pyp;V-f;l^vfpzbm4^*oY3D&`VaR8EXN$vWE6tC@K-}=(Iz-7SjM|33-d`*XA%Q z?b#;;gf0r!S2*jO0dhXm74(|HjRKGRNj31&w=cLe_l)3>WAyHCEt4YNL0xYCX$S;^ zhlvolsC7)>C1=R%d0KQ7y7mxIVPdj&C{N^cBLWO4i42$fB^@9tdNFMkhQSKGO}>12 zKuCiy*Q(8lBiLWt<4nj^j9r3Q?TWG`F8PE)mx zhZQXhS*1WgB(y$gH8x6o6;BIZK4ux4giI1ZAQ0Qn9bD2nN_k~97`?t^d2yBS2!sW3 z(P%Q#y!adCQW}@J3&9q!yhOo9C|$qn8DC*PaU^&7JpuDkAfJc;8-bZ6a=}R6znB&m zu%v^8Y&w%+g5*bjNt^Omc*ib0ioE#Wna=;Zy9NK}?sh#TH7z|OGb=kMH!uIj&4QHR z!VIny)OEIWjSOtMbMb$Z6*oG&>85ICDT4E$+^LUKMbd)Om|AJF;(wXW`qIpv>(K1J z6!2v4^~5abq?Q)Z*~zf7mvsH0LwV~k#E4)7OWFawewjlJLv+3z zYlv#i1<$02U6&P_taxjbpqs11=NU0JcF*yr#p}gyX@U=~uH;)hQT4dk6%I*U_bK{b zsRjQ>@O$|EAniNZbIKRu3Hw`}WZAyM0(#Xep6_{N2Q_&a6j92Xt~c<8P*{8Fbm zpik~?eEe4lK^^@1E8tD_E3M}j=YwFxs_VMR1EoU!sO@)}{ZiW$DaFe4kEv$8CadWM zD1eCJyt3`#!ltIQnkmYvZR)iCuA4?LCv~6_qPDwEEv&xhYhQ z6t$FKlv=-OY)u_?Ejq9G&i$5qvdA>;n{K4dzmdUDrPbQQ4Jl#{8%{!+Nx#{GycZ=r zb>BR=y%`nv)QngW1~$SMM!qresh-&xYpk3bhVNrntV^~iu8_fvhq z0L4~WL*UbCrNs>u332|-C14{#P~+@+D%i`JmOjKC*X(pHM=d=N5MU&~WYOs97@+g7 z84r9YS%{mYvyueBTmmrxKb{>&ebtAcpd@{kN%$Ax8}}lcSK&U+6#afi+%lHS14_d8 zHB*_>^T^c}swpfqfzj>=X3J@W%cr$Kw&>gC?tG#VQy%;nw5qONCuO!?_2yw}H4cC1q{BzElg*XJ}CNfqD z@wtDS^K?Fd|5~yNt{I|J4@VeY1vep+=R%GI9y8E?8%UjYby0T-@p<<(S}N(!z)QBh zYg>{o^Tm|V?w}Fpi6u;d#qo4;K{Oa@T_F;QpciF`Q<%5hQ|!L2xqNY=!;M5(Y-z0Z z;K7Wn2fS?w1SlCqi1C@DOXtSoBC z2aclFJ5?@_7{3nXL^rp6OqLc^$e8GV;GtwQ_vOmrwQbX5)A|n#6 zIymtU!&*Mw0Lsp+CG*0;mkC~J4pWm12bZ`qt3cT?dh4d6N+5+d4IVLBVE(Pnk;Y^9 zgcS{zp&l$)J;yUWA2V=M8KlJ@GfHhz3Os9-UKg~>jY=#5|i>60viHW`ZNWUW+R`CUkeRl4{( z;a->T5DD~6xQZj&+3AbJ!T&}Dj!T0`&CqZ+&4h4m}3!F-&rU4x{TQ&u3nNfqq_A};!^*J zj*zx;!Hcmuz688YWHqr6%Ou^8v9ztUJQUNC9I*KNo0^%>OMwdiL@ri0vrVtcX#8FT z*~b^XPe-~#EmOA_O6l?U4Vzl&R`rlbdb@;PVnIk1(lkEqjz-cYjo&%?Hi;YTpix4q zKTTH~fwf~nyTc-mW!(2*P$kuD1W4_3xOJT7eWIE4#-2Y-6wxlhXs36G541K5I6JIL zmscnt7w`-QHB*JL$BH3A0C_k?dZf+uJS$5CapCbwK!aIP2D6vuQc&;eBjNkCa1-KU zP_oIr$q%C&_CV!=9X;U9g3o$VKwE@@+r%AaMr*qOCoOW9MI`6a0G{N$y*Xt<^Tb`}`o z>Ebd~mlc>#iP1bhN%6`Zv=@3nyt_6~hOoGE$#X# zrAC_EVF^#(gHFygywnIyEyBgOi!c2$wSKb~vHLjv&95dc8|t-^XN-4+wo(B{Z~2@S zTACcnCgscg(0a$~)4jm)ezV!I@a{`n_2r$CdZh;;1kIJBU0}q2wxipbXwzt!{X_;8 zaen6|j90|S+zcd=ClS~_e&@Hk`-X3d`i@+|W$ycR-!Js5o}U&_Q$x~l-BLuqLzbbsq7_9Vg>)Qk7f?gBaIz{)# zkoRBFZ%s5 zj#|4T-|O3ZGN#P8Rk>Dvzw)sKRH~!c8oz5D`XkoKYd6xAnil{#X{{_t0$92wsN(ykuo!JiAgCBo*$HmR0gkA_xU7k4v!$;z_792RF+^2$L4rxnC> z8C2=cp!1wDZl43*5NrYr1s#v=iG>~T4i0ZJ9gn!Y@htgsEJ>&MgYE_D=cSde2>YZ5 z3XiD=36U=6v`}G7u-Nt|!_+FX-v*J*BF!FEBcAo9Jl}1dL~NaMVA{5n0Sxw;x3nlV&bMWuU?Yiib4}JS<<+E z@MQGP%4Yc#&X2f8Ke_W)<|0_t?27iu$g6j|B96&ks8HIF-lgbr<6# zkz~508s~YO1%o%i3~cQ8KGsdo7>(l?7~w4UGKrYN%7-Lmo?#Ni#Tyl$XGV%e?_0k$ zMD~B;V1_`hUE*r*GUcOET(Dg!3h%H?v}-n3;3XKHCMk8G)R9*$g>fbs-=z1&0C=jD zCOeOf#M@FES!7j!m@wmvpFw4wspt*t;Q?{nHp{z(Y%#gp2 z1JYeI=1e&o<^aNRoN-euGki2d2m;nP&d4Uyo(9P$N36o@nI>wi3fvk#9a?ccnTrrb z4~(`?vLn+Y0L@7_1(dLOy}%mAj!+3onRWuVqR(#hsG+*HyBSo><1!MB4Trdt^NDe@ zO%s6!G}6{XCyqT`MVV`36_Pe;$c|R#!sCi(QlA&%7zpY0Jt(~cxDO?p;6VR|2&{-H zK^2s#f&`uZQTBFwu8je$hN~J@Ht?E=>jJY7dTidCtBme5`88(*ER4Bt(f;i_+-RJ{ z(SksxGXiJlIpu@fNzZOr?T`0tgpxoq;Z?2$51H+7Bi-p#~*j=cuBZI0LSMW6z%MfJmfs5~jCO5fr_wC6p;#nj}U@O`jk!I>Z!7%_-kOHE;CK^72+yF4j5!hhIeIM_fdoDl^3L9hhv3jODi8(U+QfyHwaDD*?pnakn6kl z?mFh691j|BT3jUYNleIrX3i$_`Iw`x@iwMoYkn%IMM$%{mo;M0_e=&G zIW-!+_i723o9>6=F4rRd2n*TV5du*PmOUEXQj}8YFBR@XN@HCz_Nxq6?_H-feoJZU z9k|~+)Ijt=)_XP~JEUihDkBP-wM3AJsl>xrpDUp#+RaV{Ma&CBA>w$|a_DSCTS~@} z9{UKDlNtdq3S*^PJVv~!z-MJC>hEFBf3L)fn}z{knnQEY0p>{bpkPsR^Db6alLBc9 zsojufq|Hw6(YIVLsQIeVet5b4S6ut?o%WNy_S407>Pb7ze+kwkL7hnOcoMRL@=2)bc?Xs8B*gow5x4eg*MbD&z#Pn%nt8mC|FTj zM1p}&6QrT*<}CmEFZFiB_9>s~+7zi$Et==wt)P;~NSIbkf-}lUuK+HvLUN`zzo>A} zQX=x$diZq?I&rv{ZSo=QU8$`O{}gv670k^9HFlB7eq+-`4PjvdLdD1Fc$g(pKD_E~ z9}d!wmnB+nzFO+Zq7%6AH0o7Zp9nN-=4*GS*DFFSL49?->GE($Ns9ML#yK8oiIe4x zI9dc}0zV*&M0u09mwL)R_!8X>EGpYm8QK|->u%CHhsn4leSQst$?Vb#TzIAt8m3)) zewY08$&n%cjckF!0*&Wz>!p6{sL9*;v0D;;o0O~tIy^o|-7$7gyNPvrA>nRY`+Ew6 zw9T`uPGVH;VRMI0%#sQ0oyvrmqK-{U2EVuR4MsjP$st`-JUp3?er0YoN7mK$4Gr_M zU(37u4sD#sZ8^JkL$-7#l@C8DDJm{d+(B03rSTl1x#&HN0Xv3WZKF6ZkoM;JB-*=C zdVaG91a-BP+7y&`w59c); zm^ogWJD~*XYj5xL2sG2DcEb`wHy&?vy&`HZ*DkRL`Y3OFe|BHz4@B5{d}$1@n#lP< z=3i+fXHmnz$tmAhzwO2rJ;3`7R!|8`OgI*wW%uh_)~$40&s1CYM&I|ck$nVh!a${> z-4pIOs|ebMc{a+Y{nx)E!w0#P48ZasYKX*Yk^pVV#Q@5cJ)C~fTSu7639*u!v8_OS zX3qRsvCk!IzY`g$6$mtAE=w>bKXYr;=4W9LwT~K9$!+KBy3U{~}0h_zPJAxJUn#Xo-bJTJ0ui**|`{(5b*B9nRc)2U!{&vw&w z8uyWv$s6;96z!#ktoee8`POsQQ|)d1Ao1#VvXdd1j_u;_)Yk(NKdvlYQ6*(AkIP&n z(7ttW$M;hy#)Lj3wI!0PhOg+o18)uVn8WS;nC+iI7;?upBnXe!I<@iSc z_4Xr+F3UT%0*2-W<$pfiKm=v62u%8r|8%hE_?WsuR!2Bi6cAAE3Jgp{xof!xi03_Z zqbp5CNSk8Q_$mou;vxF%)+7X5U;Y98_TYv^dt5-x5Ixb};O8F2k4VSQ6wj^Y@mEfs zX%vHIiZOT*Bb;z95K~V;mLZuHat7ivVRdWCRFBY<8G{9LLpIo-M066=*Ui@5eORfv zU3bi591+{ppFbZe!n-kmynRNUr}c*f#evDl6K|^jYgOXg=ro5BSK(|G6lo3>O#A-u zHiuyi6r`4VmL{IaV~FWw#~>llaU#Uu(gVW44Z;bgJcm(8JTa12zaQJ&K+BR5^pX%H zoRqFGU&9*QGr*~Zf~ON%&zgc=dF@%@8rC;-3)d!i@Z@y+qSq|uWA{W2L7>}tn6tUI zOS_(%EE@dTg{J#AnR!vflnIyy)9oAE<36mM8Mpi$FBABZ@NY_DFi4$aZ@%B+0QSYM zPkUb}i0$|is`Y9lgVX5?1N@A;k+&b2g#5^t0D}R99j?bY3+KG#5w0358d$aOrhe=zK|a2Nk~=UX zq2`1g3?aWCT0IGe|I*7w1;25;?!+@%9f1#U<}TfVKl=QtNhj;;E8 zin)FYWzI|z#%p6C-Of91Lao093hg%n%-7SJhCGcdPWSlMjsxEQ`WWx_Bk76m$!4_e zcREnu$6(}*qd8>JQ6vKfo`!DEPyfcyo#Cj7`X*PuH2PEx~pU z$AgfSsO0RBST_m#qPk>0h~pVwB>ezCQ5im)j|o(_N+s=|xE4TlbdVN+C>#sFWiy z_=t(xP;-w9S`L0P#Q5(xfJM?}vyMILUPR^3)Qm}xdS>cxJz(J;yAz7Xd@f112|yL`&1PiYM9OAS17|BS|XWDs|+*x30&#A0Wp=w*k^?`#em%-vquBP%mnyF zk?4C7B@)^BnR0Y<4`Et*>imDL!a%f-+tFZ06(pWm z{CW-{eVlrxJIARpB%smQ?S3pDK4!w&=5JWQ&LG6tKGUKr>Y5ZX`E!QEWRA))EWoiu zSQ6=g!`4WpBxcKj0ly?nRta~didx3^L9g=r5eeNHSKcS?8zXU!!FP{SC2_Zl??+}# z-Vo|8)AdahD$7r$gt~3{>6S-4kEuv?_nrS-_@ptIH^VzKq;ejds;gEBIYx66|c$0)Rl}DXCkiiZUT9P>Y01li;bmc z`c%jLkaJBQoXxS<9D)@w(W&H29!P@O)r%kBkkw z)37N;@aBYh2CC+KZhwLosch1IJu5xEl1*^< zit+nIDLVXah3bi~GlJOD1>C!XbOkDSqrhq!A#4i)#iUySTM(g~;5nO?%JJHp#M0j- z0aU&%SoG!Az{@@_;%XBy#L0WL&wH8*$gOkHt$o9V3F2)xfWnuL!5>ciPemSRXO)&% zHp!=gaQCihdbbl;!;A54^vHVSSy0Pw7qDfe%Sa>20Jys76=7K>w_Z?EK%!r&cj@wG z)>Lkz52$aBP$YJ!&!z|js0^3WZNzjkNkJlfJ;nbx-EO4ozuX~T;jQq;NmP^0Tv~aM zwHaxL;Q#vYNvvPFW$EI3M2NpK7iZ^?z1!{G@N*BZ+`lgaA#`l3@hi$<_tpQWwA z(2w+2A1=6D(7Xl|H|~Q$uhLzil(sTd?WG}z2k&@ZX+y+CMhLzE3?UjVbwlhrHA@H}n(hw3P_Nxk}oN?x}$_ElC&q)f4 zk&#`(6#6n69ba)<7rk5SU^Us>9zgm9BRz=&dy!o(9!kw1**iu!Zr(*Gtn3pn+z7c_QR}(KD^jPe*`fZbRa1 z#OAD35PgVvnn>=KIL51UYJ>qxJV9~v6(enqsPIxUe<+FyG#xWYC6d5C6wu#S&)iVJ zd_`Z%bQKlfTf8p9N4miDjSff4KVStJtkvhgu$U+JR169Io9v*HFG_eI1ObR92}r~< zvrdHE@ng-88+@q%<|7RXT6*50fSD{gWF}Fx9)oRpx~Ait+ZwO#&zNR+z^>-Lx?dNU z9STa^e$}C*g@4N0eSYG23Gt4B3pY7F{#2ct&`%BNsG54J4n$0x_qaHB-b$;CFWB)AEVZDqfRHVCYS!nMcz;HT$q@uV(DJz;5S6FeqPr zIUgBHzd_i$?aFs$XyNnPVi?pr%hzIn@_XAbkY?ih07Y#hCJ82tjO#No+TzzkPP}#% zBtgjZa*?MMvljWKt;45-1^DenX7ty)nB@Y+HIT8{yr9MDzy|5bYQ!I5{`;Kr>Tp(J#YsFmZ9{ zV4ej5%~M(aPJ;OT^)FB7dX%r(tp7p0d-mDjl0$@0hf`b(N~T(Fy1RBf97h|0IY}m7 zN@j@XvRqNw5e*_NnPeicmi>G?%vNO04woQ-5V#1|=9z%7M>J)!8DLz0bJiNJCP26d zdphOJEJ2&&?IiJhmuZ_=73{x}PQ?PCf-|)fLJU}tkZUSenE1!n!TKFwY{*CPHf}Ex zxLIL+bU{idWJ)~>jG6>A$eZ_e9&S*CzV9XZRx?JD zVHzk)l*c90K}!_=!s6kU7zZ5HDw|{Lt~w=TRl*#DaxA*t<;?w#fbL0$6|v%M?9Oz47gPh>)$H$;Tw-0Y=&%L= z5~P67>g+(mAo8?r9rkN89`^DElL(P1!|>cXhIz+wJB^)10?ShB$zt3w{Kx&}cO4~p z5EBz-ga*IVM$ls|_c&NU+#k(o8d*Uy3}OkH?%zG5yD#dtFMfSr^6tL$^L^Qm`||(n zV}%YBbq|!?4pgrnsNFr#cz&Su@j&OF1H90ozV4x+P#zAopY-4FmUVy?umD>A|KFkg z&%5RShS zv#ie$zyjEQ(-rHj{gDYK%r=s8^`##VwD#PVuy)@!S|Vkr?M-T2B##JZD{@aWFH`eO`iw$+T@Wq83GBMYyGc8%JqNRjOGLa6)UkTJOh!$6+H-nIK(WI2UH~y2dd(a+2-1E4l4D7I^2%&u{Q%^`D5JiZ6S;Bo0A-KK! z0<36hO3pJCr{1qmQn8*J0)wCfMsYf|2g86~k6wMmS^3YO%FOz`g}7y)04V!X#=$U` zMj#dp;-(-rD=>jEyc5h17qYnu@+kSzI3V1}Ll z{k--)%n-eg@??{epd={;kazX}a-WZWvWk&!8%u5+>9HJ!PwrtQn|n4F-SV|9LCLhA zk8nLe!lChN$0*qME13QpPpiBD86QwNW)~oL>+mPN{>`^<6aiv`t4v!@Gb?Ej>KpYn z2NCoQ{k><`wc;}!{nO?)X*Wx&jR$+b0^|}!ppYXX6j9n)!Ay4anQHIIT`2BR2 z4ys(B!Vpw#!stc$Qw3AV#c%O@ql^bA(ldVDwT_XL5Hw*_bmV+cfcV`Gqw%7Mkc=m% zap&uOA@7f02ia^NUh94e9VG%Js6mMSbTqOCHtjr3_Vk<=QT6tzt;4s_n=K*>`Zd+ViyH#OZ94aql{mY}T&0oM7 zd?qFUaqjz{`>|!zIl!u(`e(1Ke={Q`!DYAm)2NACW3x>=)*_U+sTv+b;jBZyZOO(JdmY-el1=9xT`G?m0_ND=6Vcfu#JF; zx1LzLuHU0@VgW<4y`vSZ4G1vb2hz@xv)pq%cjsCu-gckKVB+Yo!afFSduN;}$9_a- zb4vw8FkfCK=<4R|sc6LHEWE*L8t_i5pt9(pYTKjc^zKj#PkQdpREIHzes2)MaGY~< ze$4s`8DVIU!@}!0ZoZEPowEXDoIZ~(7_v&)f5XVl^$apHdjTa&UNUqf&_8tPHwOb7 zn%&LVjm5*u+J6sN67XX_(~4<68)K5{eipi{M5yb889={aVL)5f>5etXzZx5M{q+J? z@7airrKDEp*;Kz3#h*lg!3^&e@!;Bv(eMp{tCzyk7b?e?EW3w!FG&RVpx@G~qSA9t zF!Wp;uYIczEK_p|5n`j+vJJ>d1)eN=&?E>-!0?R62v;Ue4l!w9xmglwlqRGs3VRH# zLCc-ug4+WcJo7bqas+xG>`exDe>x3Dj5>YRU@26L`a-cb`@WQ;7c=_tpyHk{2aWQs zkHg=sp%1y8LjGcg!RxTkngR?V5XK(&Ovk4+ATQz|oxi97=#XsVFPF{VdtdkD5M+*V zca?WW!Ex*|8dCK>?&sFdv&?QogL(*85(gZlN8274ijj}p6$!XYSbX9Y${95Xc()B@A(pf`R{uLcW14Hr&fcB^a0Rs6J%ezz_*e9U zY7U5qB@m$ZX_;bv6PR!wgB3XFT>6QBvam~L?)TQ2%fr-&#t!|ZUqayU1%2ayK0BsD zR}g9~=7ISU{rabJ2>c0CoH0f9E9 z%5SnK6yaLQgDoNgNe`!z=^2imi-D2}Y~Q+~EZ+=_?hK^pD!T0qhyxWaBR~RhdE=Sl zgEPMe^Zd#bB8DL>ciB29DDxr-N>7xR?5-9DHT3$I1guxleCjS-boK=I>l3C!`qo9v%J?;UUxQHTxwqW}vU-mY%p& zr@wD7WuA$L{LldRHMfT{`$v$6OQPr%`^@YauU(aOjALP8bC4<|bCeGd)L`rxIK%L` z>-~-Mg_$O&S5~@AAXl{DR@ddc!W%5A^eB zk)_Q;xVWNgyiB4awl}m#!=Ow3O7cx8{H6pC zsMh@`F(ElMCzH$6Z0#6*7r4PFHS}>vm2V{@ZCB?9!Zg03NiGhWmw#-9mY*2%0 zwds}=Bpfp)v<}xhd(C$9P6N!!gv*2b55&&0mR9`<(~~f*;K{VOMf!Fy{ZH8wmRdwT z!-ZH=RXV|mvuc8s&ceIQ*E<>SCf!1vgl(E%-1-~}nz)_&R#YKsKU3DW>-qr^!rQIN zG{TzQ9hyj%giEq4ajEHYg$0zvaw<8~=^?%$5@_Jb4^{9vZxvcq7=gZ?|BxVCgCMC! z+hn4gG0{;}5ukL7m4x%6EtQZ1cHxM?v%&m81}mV$3!1tUwDyLiZM{pc4G5FRmgQ)ul@4>x@^jiYIpi zm~Cb}Hs##IG^H9yOIfA}Dg7@1N^DZTtj6ZLozb%&-o}LzY>XFDV~dGON+gBD6q0Ry z)36;NhZvPVhA6|~#3*q#*AX>oHIzV;k77s+HuU-qR|Y5);x`(%ZpRj#mDSW48!72| z#y9ug75UyC^u$&cFv>z1&V9yhtzs3|*XRueCGGh5DNS9Cw#kBk{D)(tv`{%p3OQ8v zdB{d7OG-=<7#pvokidRSfDYu$%tIEoSj*?sHjY{Hn=&MJ^JT1Zw|t@ikL&<8{efSs z3NiU5YrIw5s8ep$%@j6rTIL7Uq<_f1Hg*?r3J&bZOvqk#-t56e&sRpnv?h}z$5Lg&<+S z3N`r!$qOb@^3lqunB92yTg7Uj1y(#@h)3~G<4xs({Hw-bd%6;t#u6okn{%5b;N+4{ z@lr*-v`+8R26*WukrJF);6ow$SAtg#Y zC93LdY705gj&hliBBeba+id_^Q$*&vb=IorT&x_oDoXf%yrvWz|MBhF!7%VtN}o@e zie90N87fb_JiVv@2MTVYQ_f#tiMSm=6WlptY;86RsFM}vW)fAWfJc6kU;qMDNN*jv zfkVT4)zyk6QArZn&D?Crp33yjs=xTEEfe64V|mg1jT6k(6-S9?Gd58~j5d&U;_hr? zTwI=9rn}B7fw}ve0`lC-QU#rVZ$@Asrb3b{)Ux6f6~dRJL!h8?NSv&$M2tdV)s6}H zc@y&;x`a=?`RF*=8mWqm*z(F=);g(xCytduCmDPNHC)swP{;gD0S#0_Pv{?Yw!<;C zJtPW)tra;qL+NGx(sP6Jm}O)nQL330m7V&}JWIpl+FpGi=r?OWqM>Ik7Y?fEi>|{K z*7e~UKm&>r&GC9UtSaU?V$CeFS1WssZ%gl0+p5)hNF$MI(KokQC7Y^{p&+|ES@N(Vd(a~Sc@QS1?vArANBMnGUZdH!-PAqHb{dg-9Dj0ju zN#h!A8g+bh{~w^rU$RknK(U5CVeU2xq}oDF3k#N5ZPxR>`45nGV-~?K&B~McAkx}+ zl=t?txZGb-tgcueDTh0Vfie;CD$!6w6_aK-x+!zKl`}Mb(_BK=q^U!?Qm66$nHmr3 zQ3X@z70@|}K5^DaOup1M5cvre=&#b2OcD~VR%y&<7`SgJ(at@PoK91jYN9SSYjowH zaaq@8FzDg&M6Vw7?xVJz{T3#xMz1+^=OGC!6VF=Hsxp$ti}uEAN(dLXAwwh7D%3Tc z&`PfoM5UHa4raUm48|Q`gP-bjR({GOzqD;?U!xenBUw5RGW}#YmkyncBq1 z%ma^`>&jS#ubzjSv#s9skRkb;qoQ32ccZR`u_i~gq=M{X(e|3rCpjpdmJEyxI&;)B z{0~a?u$%DeE@MYh=+}ys6BajA(4+Mv-qqG)`|}JnA$Kb>!9Y3}x`1mFE)7{!k)U&OIA)LeH7|B!)b_SQ@#fsm;HH zzQn8DRs(RwvwREh96hku$az+4mtwKV{Hu=aVRMfgRCh5K$A{|Mq$z?9T?%AIT7&OAgHn14D9KbiwgJeTrwsxFb7-0J5yhjq_jy*y_gCY z)g)bA0HAk}!&^gxLZBCcTIC`{$axti2nu*xqI;#4RYf+484AhQVA5bapZ=*|LLtib zDb@l485(62AVU1uMz+|ZWcCIYZA4@M2vZ=VJTP{uf`Qiw#n6ygo>p^P%u5h zPzxU690I34TC?IbyrS6AFDNRY{huXNMJ2re0IpRO9%igPaAK8RzuS90Yf2cxK!SJy zZyrp7xQLLrpLXhxMy}o_lzQoRSz~O8fX5_I89)aCpePhz6#|~z8*}<(qq^6mC&~wz zhQK=^^q4bDSe^s~9gYH~br5LcS$aGSt#7x2e$nZ5U#X_LT2z1=FF*+euc2YK6gY^& z*Ixr@3ILiYUOqA55Npe=)@TvbL^l0EBh2#9>fJ?w_ZP3dGkFku{FN1)b8+nOx@L0A zWf$`{5S(Prws`t}~FMI^KJv+*x=f`{=yh za5a-|`|7ZMD1=>e5$xG_(dt^WHh#)(#3&RbcDlIvaN%O8VfwWt^G^Nn2kallmUP4+ z?=?6QWtTbp7SHJ+yz-az^JXt~m_+U@i?G!?hCX?h*!^gULw@qr!iS`oLyp!zAM#Q` zqL?My0a)6(l}sMkcD^y+#ERAD6|b6=8M%+@=RSH1`yAzeEUlFmc3*H9Q2g-WBh>=W zn8zvm5H=7;acm06XXKO(huC#3W#s#Y?7?>fRzng+$6YvmCN-I>WqCx#{iq<&W9_xN zaPXsVoNkx}=_Dy`5_mF!QzOq^fm!^)!Af8##BuJ;V4~<`6_*CVNZnP^)^<5zZw>!_ zp}7-uq@u+Xv*8vd3c?P_)Cu~yZ`j@twe?&}06|TMR+)@0nkVweiLbfz8__;~6#V7% zO|@3iPT1`|9M)(YIWY07!zMOg2otVGQfh|6D{yh|<(vCfko6#=o^g zNf8de;yyXq0tAp&KR)JC#e-BBvafkB-4K915%}7`hGSXo8x!VQ{f8+NUunc++jc51 zBff5zo;Cy^T10jm3lu<*M@ySs2g4=spa7vwfo64r!vy*T8#w_npeaS|Z#9z<-XypR z!F4FX(_afL!AUYtpraWuK^Ek)Fxzl}R|F5hV`(^}Os9bu({eL)~GiSM|>Ss>n&DS>L` z^Ue5H{(VW+Z!%#H9K`o)_!XYbh*JS0yV_oCr*il=R*x z0iii0K9)Rn$LOV`nIvS&kx$`Q^*cu*#!-Sc$(Yv!)7N3nK@ZX#S41NC7z6>a^ZKaome!6NaeA{`LZ?>;{Nf899q-e0}4zjkYX z{mK63yZtZ!_Sw?^zMc5D_2(;{})Aykcww7^=Qr0 z+=F`Ye~{|8N3L?@-TIm8cSf%rKK(F(OQUxDy5y(PZae3*+yFdt^uwf z*Z-|dx;nh^?*Exd=Y&V8N_k^3MuGvT|KV#59StQU97hM8^*DfSfS?hE1K6rYhPVBf zNjGVGdHWcl^c*=$Xa?&4Go7|ArmqkE@dLWIx4Xal8@h9K(r++D*l|%wX?q1-s>_n) zWYQ7Lau82a#R8p3$w~T!WJqu|=l@S8ZF~IUJHyLj&=Gu>&+v6=9(YLO2&bcYQnHJz zvwbejB1zSz$?HGwMiKk$@&I;a5LJ%tirjnF-sol&>BW7gm6qXr$NoR>hNjdB(7u5P zF{)+S;Z1YwcEd8*D0wng%(PX~wu^1uDQgkp02tN19WF5FW_J1JlNo_L7v6g5DD#2j zT$O+&+15|f`TDlhi^i3f$rXNM$2O0xW-9sX)80PnffR5?(x4*xJzZN9zwu;#p7-#t zAJ2w+A?Ymjt(CbpzP#a@7hss^8bSI5KQ#p=%@yeVq7rW?j-JrO+IznOB>TR$zkA_* z@liq|w8R*Jw9g^&h5Xf8V>yN8(g$D|;lL%uA16CX0mcVf z^J65uMAsXrUj)-~YNMz7#0y%3FI+dMSn|5p>P2VNb;1{X?x_5E)~J$~B){2OJxXJ^ z4p%O#(8paju!ckCHlq?Kr3;@sB?Yhp;%9<4IC=>O^p}T!hT1@)tI^;AsfN}IYFG4g z0HfaPI-Xx20i8G}py!)jCPJlNg55vQk8bX}N@+pBx%b@`rTK6GSA<-6#nrkYEP8QR zTtaQCPY{)H?_$JO7bx^u8g~JyN@X_WAfE&`avSR%8@&Buo}UE1r(i-*V_N!IFpvkr z^^-fTEDR(-2F0i?@n)<0?IG(|$D6_b!j2sC*-|2YkpSJ+-<{v*#}FPw(rh&rB0E3B zo6mL`MZ8HUI!Tsri2no|O%$CdA&3FIYZ7{!p?fRA3Q{_`@g`w$p4T3K_Mb0}`SQ~L z27;^O<85s-@~p->-s#i5HhBhAqrbpo;{jU8JXtRp(E8l_!|1!HNIWU>>)`LC{_34> z%=xYHZ90Rx@}@v_`{g#F|9xGAUE=qu?PErB`wP={z-I3!!^?ZUW6;4c$bGxL8o;_NYVx>j|9mwGnrn z06T&tfT2q&JYrIa$<7BEe<{2!s9OZf{(j-Ge1s$6l>G#~Z^8^F58|ilMepU!zhBY1 z)N>FN$u5GAV5te);}_ydDKOJyRG3aGZwdfG{sExaE?*HDAXR;hCF)G=2iq|r3bHL> zY%$QJqH)G2gFL-V47ywD?E8v_|yz3!%@3n*mZ9_676Iit^ zF2O;LWdz6$HLK@k6{yjQf3Gk-S<+UXd*IJ&LvvOtcCZi!Q8E!)bFsPKCzssnS*g_{ zC@Ywhh7Q0N&IdnD6}Bvt_&a@o^V@W_5eK!iT@2n`ws;hZByvm0ZHmo*%l%uSikAc7 zLSfKRroM(q?n1zyQFiNA7ZL2!Q2RWVq#fqPq7t%)Ii>=;Uy(rd%DJ*%=eOY6ukJbF zm_{aQ57IPZ*K^PuxOM+H3dztUmY^6$HkxFBWqEzhc8KS}UG=LW#9YmJt_J4^trs5) z3i}t-58*}jp*IRG`2;N;pCjpN=lExQWw(;GPY%I6-$tI(AbDd5(rspLhRH2ZI%)I{N(rZu5ioGrXK*2Ge&z+e#FMl_hXp` z_S``6kM$<$$ERD_7h|A$GfeX`=a-Vc6q+k}1L3uKuA) zki@*+&zK@CFWeV!`YC`l-vHzFxy~8C_GGWEmmcAVZltW=xE>46@-Um!8jfp<eAF2X4J&cRncU_O1-ilC*YT=rMe-v_8YOiy+En+tf?({np1}4*WRv)$`ISq0P{cdR z-v)(KmR$_>9mOI-lEjt`2ETHy^@p6p$t@nQo|QDVG3uWR;P>|uYb@pPs7Bu_+pj-v zu@v{Xg7Mq7?AJ@*&mL2|(zKZNL;qQakw__rq{eDrG?J^g z)YkwTdV+MBByf)5mYl)7!kR_2l|~`DWQ*Y`SII$<@C($)^O4c^%KKf&nt}NDr;u96 zBq$K1F@khd@V#A{bkB)ou!a<6B!@2_%OJ+D;$qCYkPvd*iWw{#6w@ehVrZ9=%Jlvf zfRwcikf5bO&ZiA@fYaGYgTqlxxb!SW%0Nfb(Mw>QnCiFT^i(Xxt?Sa!Q!)20CPkMa z-^HZaDIvYEX{#}@S7MRxrZ3Qry7KE}9BfU^q#|1(nX^-n$&a9*ktl{nW;zD`m3hIb zG_<^49*j+@q$WI4gxu6Y%Hy)8j%C_)W}(F33w05xYndsexRN=ngd3775>p(Ikv5n8 zcj-bZG5b(S_Cxoa93>wL0J>AAz^9oL5}VAz0dvr}ecsscO0l%3bE;quY%kp4PfEiFuV%#m7NZW7WJ4HX_blRzlrF^W*_z_wuPGLUA(f5&0x68No1Fzo zOcJ33NGE%`Tu<}eOLGfMPbZ{@r{|&LA~d_Dge}5S2{tb>qU`rz*q|h-Xi*STk^sMO z#XXZydpxEuF0!_$Xr!pBA9D7RXf|^HoN#;o#g3SxnWfbquRWxC`ipC#l#rsBOMLa& zC&aJ6Hln2C0Rb^(N4J#d`cT3#@KlHYjZDccOi@TzbVt&RX;FeF*ZJvR(RPh!^}OJaO`?2F)H_2 z5;oSa%_9+&i5v(xT~I7C^yYWNo;CsO$n*L6@I=Vn*^yW$pCvMs{+N4`fEvy z^6E~S#$M`JKLj(3v@WS0+jpge<0B3Q)6&T_Xuu77%Yu&Yfw{DrDGy2lSCY;s(&0E+ znwn^aI`_C6`LV=zWiEBK-s?{{vguQR3@ggQ;>x|@8yQT%vL1JYE5#01)o|$Y+acsl z^IE~+n|&GOs}|&Zhg-+ftI$gNOCE|B){rg@ULn8YF5L~Miuv7oO&Pu(trK*bNVu8_ zRIDfz-<_>a>HuVekzwDyCFyW208sCS$a1Y1*Yw81fZ7s9y{uxYf!qCWT<#@|rWdnU z=N{@^uWkBf?uN$S(}*c%YGsv?uLWw|kt{6>{BX^E9RcoAWn=33JL}w|Q_BkOo_PiN zb|74oRS;-i_uRbt_N%Jw4ncI}J!@k?hJY()(r&ebiXNVqB>AI$SClza-nygnVKqVc z*!fCA#XI%*Cmn)c%-r&VxjuEDd$Ze;Le^qFly1Le8+{DPnytv%G~ zjh3r^R*etrQK+?fe~+F(L&a8iC-cJFJ+?BLc8M6#v2X|yRsMz+OI)Ql{6;x z6o=Anq%Yjq_gO5Y<$9vj4ta%1lv8j=89Kq83P$8<%syEOks9Y(%R&Toxm2gHrcA>evFH zV(Cl}_=$Rt==Q^U5=BK$^`XEKZRU}OXq@_F&mHo^co(}@8w#R$cV)SXW>&Wuj1x$< zC@g~wKRo!CcBTc>fEDD!VW1t>(%KGiH7&=AY*a>%i^%y>n3KG1l+!a5`U+b8))Hji zN*arSowBhrx{Qkdp|OR9aGtKmWDov^mbcPktu*=^Ia5>{!jTww>~fds<<1to^ZI@x z{T9D$3Hs!ojN)&hrZ;5TNV&qsd$=gQRbUc?Wx?g>R=*mKKuD9YBO?%Mkr{z;#sE_eJRDrti$nEd##;0NDb9Ko0LC-X zAdIEtl3vr&Na1p{prdG@yPn$CGu@X6A`>z`&Pybn591eLB&6-5S;YpE@4bz!A6=f zeZOsWC;T28`WS-FyuidA*iK+pz1O>_(l0W~3^57XALn_hJegMG2>mNeDDV(_bj)Vp zLB7#V=|{)FTeO}Qrow$&K1uOdhr22Uj<-3Te>KM1M`Bw9N89?f?|Z4xD}^Qb zu{~8M&UoV3c#|{yJTw=JlkUTU@}lL#_Rn#0^hYo-XvcFV@WXQ}mpq>FnKN*>sV&Dx zpyw;;?>DA|r_Th1CJ|}v##4>qp-Bcn8+q!L^O@P#M*9GfJevas-5;ARGS)iT_OcEH zwmUhucnn;18fWeQGRL6RL{KfN4|ZGc^*JZIf(y#}H@k0yW~sMN{$~l%cA@gn4`_B7pqrk)-BI z%G?bw*l>FBspBCuX)gH~z%pN44p~$?Ow`5Cy$ls|hO{uBtMo`Ztt5(l*qO@~c@*~O zZOiAwA-#cb8sDxYimR~RK6%A4I*2U(oha=ec+%nAo;%Sb@M0^S)2n&1ktmLHfPZ}M zXYl>hbA!GQ*@@l-$_U;QV74+aq6iwFJrAB6-;aUt7%qDmC<_u;*Jhm{?aN{{kYDqu zs#u4;&l7tjZ~%Gnhc=*kO-|sm$e|A_QVkG(Vb&et6M~GP=rx$L?9f^TPJ*G}wD%t0F*pg%b<6RUl2YMgsOXjnFEUPw&81IYB+~?Bf0J(I~`4+5`;Pd|u zCoGW1TGKVvU_3!YdP_Y2?3-sGX+5I#9bR;H6Xf0&zmHd^s-v(W9^~!tuEh>Dbrf{Y zMcIPMhE-7A6IAbIy!#-{a9D@-S|lgMvpd%=lCxeFs%u8_BPz755`k~ z#$w=JFU|Zp$1nW0v$L5G8zRaa{bGlRVt-WnzgXIc|8-Yx6(|KxfgJz0GRwOSjraZ^ zj`l{lwxp^m1mfi-)i1>}AjR-{tSYG;+4&zwTM*eJbpkKQ(L6Y+aE1VIa&kmYSeXa~ zZzLwFtG{1HzjHJMp>&N-@Qh7Nb6mml-_N59@Pb{*5;7)$9#|ibDeIc3GRyd)9vs<~ zCp$^VjxJtx4ypn*UtEzj}494nK@Vf9dPO zv+hjSb$9{SSx;-Zxdm{ZLjSpfn@le~J>6n5EUM}--5_Ze08oH^3A>$V^IsY{uHbG% zd9o3MDhx^?eWG{Jmn_5K3?#ieW4JO-&ZcrRObsNCUMya^xI+KncpFFLlpeSZ482?&<}-E!!O)l|hNMLuNyeCq6`Saf(81iQ9G`AY|x6O#;9>%JDfs;Nsw{ zIBSy(UL1g2t3KK~oeCBgLGd6}lt$O?;J>vKFomP)9{~G58K3G6=U)@*T9`+Zvy%$f zgUQ0m1hIyDn)E)?=GA#6J~YcpMLB+rRn|24)RG_#8vnJSB()eH(!wkp*~lGBR|myR zp4VG$K}EVA!KpfIRd>8Mj-5wQk}hx|GfOs_D9|0o-G|qDBhtBFJZ@|zZ$Qb?j|#e2 zsds*h9Ddgw2--wq(3lYR0BZ{mhNAX0z^SR209)x!VYzSVV58u}7h~%_(?W)mUa~0z za-EA3AQkz=E#TV25RF)91u1xlM>Apj#S4CXO7l(%{UFm)JLYxoJ7avvl*8AKJl=OD z$>A^E+g1y}V|J`FuZZ?f?SKdC4sLUS7SWzSh*MB>W6&_q%lWj*h>peBD^WKjLf6?* zZ^@}BNaAq9VO}uLm|id-^Zt8g6Ab&oHLHs(i(Ka)_dX z*T3_rMgCOd0>*xc>PeX{#j0`*yhC>BuYdX!*|35%izW1-Jef+m9@zIC8Q4Tw3ZzsCFr#1OVKT~)ZLY)G!o1PvJ&!{pxfe5zjqTl$2kCH~>R{w_NcQta za+>vU5+?MescJsxAfFI zmb#7+mm)y1yx$MwL8eHEkggSw@5h)GKDEX&p4>Jt)eYzZ#QZq(qia}{oX*JuX6Ash z`2Y-8CO@dSKb5LvOE^F2z%5)dV4}5444A}VUy|CvlB7QBlo&z$7`fSaew;i7fOnF1 z3-}Kz71%Gm_+))toue^4&?Q*;yz&9CeegUQ@7`CGRHC8xsygw8{A`ixgOLHOm6i4i zXel_^>U3BkAc2G&Hn;?m9(?8x224H^s{nte)))+db+zJyI(UyJ;r_f$ke^ejv# zwdHysL-nUF7<+CPqq)%NdGCYkgIxg#{&`OsiNj8ik&?fOQ6lm1M%<1kjOv9x1kQFl-4~|SB+*LMyr&bFqur=-!#rf zNYD>m;g2v3%`ND;flN(MyQaZyufun#waRPDtswBLXJ^q{(bmz%!S;lJR zVJ=KghdY>YPodDlAu^?SEI0OZYIz-33vUO)&RnBdZs8CH`I)29l@YLFoUo8#rn-mpPrM^#1EI4P?c>U2#JCs|QrzSSt zbE;4Y_dq$5OKu}8u3l=JcDy&mMzd?u|Kdor-#HI4{$PTeX77y(B;j>W$}-p8oub|=xcWm`MCR9jC8Md zP}*KM`dg2e-v$Gby)wxGzI~Skauh|zbsvSh^)$q|7(yQwy^#l7M!zcz)VBH{zNHrM z6RJgyePnu1CBtTUc;EHGQ-!0Tbd6_oSLcj8LD%w5MxQq$>5ph#iIZbm zPw~4K@vDE?ONvtE`ZwxD0E;!rCXw^JLYo&&-AoZ{6)L^QmP1{Phhc~I~zf3e7)No^?`=qP!1alkJ!$@()PI-wnJ>N}^?Q>{giefk zdJo<&k=E>;eaCM|icgFIvs{rC7D)>Nuzw$sATn8g`BD}w7=gQp4n(RrUR;60IZOVo z@5urwAYSL>Od4TD5i+8U?1^#qRZO9&g+dPdBdYnuAL-3X z4p6_MQ-;)L#!+EO834GYRAEMwLZu;W&Yv|2Kw@J^`yVM8j2Pe9_*7=-YCFiCioB&5 zy=sB{QR4qqG(FA1UawyBRw)t%P%y?oczrs>!OKDzoW&$tm?Z~OlfQJ@`HlE^QPZ+x zNRD*7Fl>f~c3N~jA#_i@!{waK9Ld=vK3^1mveaL~ft-qorbcB(>maf8O!szhr4n*0 z!=*emlk(C3>WGA9DYB7z==*9`d<;m9>Mm`Toin0lsgp&IB|V}d+edu*0y74vSI!bL zEre5QMj~63v~I5DAU;xqk(q;KS^G(Js)Y;HPA7PJl363ODAci>p+sx6&-gne$W6mWB-SPWagVXMmP5hBB4ScZV*NkO zrlt{#-VNuw`X?Mp_x$wKCuxnc;ht)(jnpDi$gRXr)chKC;}7Ww>q9YUM!w*kFgYwd zn|5|3J+5ZYKq4+iAC`3(2eEjT@_9H@UpQk$#G@wAJq1ya1yEPDiVs_s{tPU=Emk4{ zNso>#KxP)EGhjW){ZPzW!GRdE3oaF374)<-MR+dU{2B5`ssEf($_Ym4wv49iainA5 z*$R<#yW`$m9}#4(P%+VTtxL{H&ya8H!U{aD6vmOh1tRD7a@{R0rJo(ZeL_;Y%Nw_R z?JP?UTL79KNVEFu2)P7V_v`kbF6WXFx8g`C9#;&Gheban3m-4Yq^8z&D|PK4=iWye z6vQokgzZm8#D7Xn%Pin?yCUjPc=1Q2lSS0MXDRPIN*n@^)30NgKd(d~DjFs!1qHXr z{fXb*5}SPq%sW0{U7DNwmAUlttC+Z);j+1pDSYb^)1Any*Act!S886zoc)=4T*8N?AKRrxD_{dRA$nu_FSt65GAQIRmI1zA>*#c*OhM$RUC?`E{_9?-Hmys z>E7YBa_>gOH#b?%gBfK>yR+KnSeslhx<-#6AZB|r@7 z6(r!Nj~A<^`(kPZ{=Vq!^;RtfnPUV=x7=z%D(YCHeKbVb-$UmoSNpoJio^XsE(n!V z4Xs^(I1ZKi;9_$J=s}EUIKJLF7&W@?D?x9nGeanDL{565cDhbW(C#W-f&|`aQPZfa z#3uI$YrJZQncY!a7^tfz*UtB=>^I;wO_~JyAz|^Tpdb%9c9GHCSD;By#w9$`IM>px9pTUw|80Bjla&Hfy51q!> z$#7csw{ErIE)(ft5^b$?lQB~%5MWKyL#xsN9K%udlwUjcW~|Kv0YSi~M+Cxnl=M>l zxL->%UEpeb&rZYv13F~*lh9#fYl5FGliAKEY$$<&o+y1(!vt|0qHZ!zK(gJPthQcF zejEnKdM^;g1pZbDr$;t2$$pO0l4u%0pm#JA5K@E#i4?7SiafFV7?Otue;Ge;g3YCqfRNSGG(g zRwWPcMjkbmcN9=5<`Z;)8*xwr0Ft2((j~zUzlTT=1+Tv6UqKJ$;%X;Z3S1((myL|_ z9r^8-`Nhaa!xx7Yf2KpZQB#>+;SU5)U*)eI_u<|UC>|rcUg>t|>+8_hXQ72J_KZ0R z`2_dXGAeW{Jj4>b#w8-3rB{uO{?QR*H>fT>*?+;U1wU7B7Xb-#eI7fYattk;H2OSN zP|f_b*h8_gl2PELyUpZodhpOZ2yHNm?Qq-&qe#kMOc^w z^H`C_IQoF&v0ixSVL8%chF%wsfh)@ldG{cX6sA$o;0&oziib8S@hI4U<|1lCM4^Ev=F@i0z7*6JR&Fp2N8&FNtTw!I&3m{fc>M zGXXb6GyTta(YwR{hM~zXQI{Y*fv=7}-{*D24qS18i=CSN*20S_xb$SmWzFlv@wREf z4p?^AT&Hbk0vsX-Fe&%zIerT2{pLT#uYCtpV*mQ|sdv!+3J(hao`*s^z>n&9#(Ir4 z6&@Y#>sM|*B2;?yu$+anO4NdQpF)k~1?~^?9%meMnXl`gDxNNQ7E? zUP>tLhfO4w{o2WZ9}Pg-?)!2kT6qR$lOg2h=BD*2!xNmoGTmTa3SM?4|upr@Lb2Eo8DQ`Fw}*fv#}ajd#Vs_)AQ90nC) z_E@wf`+!Xn9E(}LSqZ9kDM{$VF$LmF^`1!~M)vpWi?R{{1!K?5d6Sm+aC z`kA>5bvPH`as?XTu{4OtqQZ z&m9nvq>mpBzwVs0e2b`W}!W_Z2 z$d%-Y!E&8|$smm4N(#R^l)WeR?e=7iWl`8$t}@qtZY z@{%?ko0E5laXT_f?M8@u`=k}!cn!dqEG)M>qY~WF{O*ao3-7fS^5}K=>G#Sd3oa|Sj`=b11DU4 z{wT3l!l!=o*_p?W6I;98DwdWXKap2O9mW=4`XL-hw3^OknTXB*{794$b(l0c1(gb{ zN`o}fOkDU3=Rn*l+_6hkc{toPUMg~}5*=`uOw=N5I>{RPT_R~gOitf(B6 z}}v!e?0gQA%uLp;X%pB08*FwD;QUM z(Q~6&q;Z;GHu%{fq}x;qkfi{5LvKI&Zz) zhnh}l{KApB;*GjFDC5e*owq+0c*7l`Uu94u1^$nKg^WJbpU>Hr2xhXpYoaL#n^mUR7QB0BPTvAqEt5iJ;aV-QGdvMdGYxZ zDR!BfeR_L@)W=eJUxt2c{5Z)WNf>G5uNrTqU(7o0$}_J0Yh5<#Hjt;#(qssCw?JW2K&hxBU;&{ z4`jfb^@=Y^-yftx?dNTX$i=#2z<4?fTDZim9Dk1}#WBs&4l1r`&(%p13via2ys0v-umy%QIz3tsC(EfNN9q*X)o9SK5qEH!NW zkx=BzG;pfh(W={_Fc29Kby&;f^&%h)m7Z5t9Bb3fF-bFP%Scgl5Ih~SgaEk%2CAYO z;ForyNedn+2>=AQybLEG3xY&q)j>J5SdQmU&HyeVevb%FKRC>zy3a}%e4m=l5Ac)ejNlH)kl~kbZvjgA5PNSkv!y>fw%lQBlj)hx@l7;UXW= zj%<+uYYVi&Jx0mSI+YttAN%}(E3SXjq=x8oJU!|hB=Ry-WP((m#<4tvQOpouMCqr~ zf=}|y0f%SI$N_!6VBqgHhXmq;1n13pd1UqB%i&5_cl#Ta)~B1!UYjghJj}N9yjsG{j62c?hDmf@xAm#o9Gh zBte6k9ch$MVMoU^X?8D0aS<{n{obG%=E-*qW3qhFvny+;U)^ew_1kVxmXxw0+1~#; zz5aEkJLYZYy^M}xp|iBWcJrSiwU1F?V_`+m`QxYvN)?^_z0Yqco{B%$(IP?LlponW z!c8rCkb^&R`Wdv4k^)BN{1t{*6W!)S!0yB^{9!{pcwUj8kbLXj9|D_GriOE-nL)l&^LzmXYv;77xk z#6jR&@LLR}x|e+CY?53=@?!1i)q?TCB%_5x`_;Ve0+jDz`LX18fuA*9g3w=6Wv=44 zjb92L&}w$p-bDUB>h9#*@>xNj30alR0%ROMr(a<$iz3KwqG4<<0b5^-9X>jG?X&zc zdhYM{GJ(?t_ZkST9k!YbM$v&gIr#_STmw{u_N&34VY(@WQa|~Dr)+S64VONp%XR+m zH-#?7I|Vdh=wHy*$<%wRHfzMD%>IjtU%XTbNF5UkP8V%OvGvxyxvtPTf+^@s=8Ihq z_=!6dboJ>*MU98!0j|PnYDBw^ai|AnY3{Wvt#_0+W1@5TqKeFk<|&CrLgX0+mX`T{I1eNfQuAg+KJ^SX#J zU{J~pcbArZ^fJB3uO%^4ops$FjK3&fxfudkDqbvEBb4KW)%`MhZ1dzbdgXj{TypgU z>b?|L{s`sb+j}@K$BvfixUXy@m@x7~Q4j>5r-C-C-fX7q4jl0byW+OZ|Gf5lwDwu9 zY`+AT+Z3oJpO;3(XeNUKa`K@U8f@u7rF7`$I>swUB2tmi#d8yCC;f6^7`*&k9hni~BOo4m+nY0wWV zej*~5473g=+A{fI7qz?GwOr`{n|#iWL~0tRb+ z*B$4dxG|sDMX8<7jTYB=^CO$8oAsLzYj(KuEm$Xc{Hi^bX`@Wf)=}IzRpPm>x7@an z!3#I9M5bnVp9k+6%FP{N`^tflS`(_vGx=1Qw$9V6y}s2T6`Nlg%W%dpF4O$Dibc3O zIc8rQdCxyih2@e-aM|J56zY;L`o~PwA%z3uaF|f8KqQ9hd$SH1#)wt;=HUJ@Mp87n z@*@Htljz7y&SnNF?JGhI-Qwa_0en4@2Xn<59FmC-3H*?B+?@l>1l(LEp)FG6)uT*e zk$x88&ohu9FM(T$=3P?*O`Z77eAqld*>+7hLo&u1qb!5R< z_Y7=!xMlE#k#qtgQSKNr5}7!wnBMA|(bt-hLUIno0hR%2$#X=?8X}#lT zk=Vblge1)2rdP64fVhP&3C?0^Pe5Gaa3+?WDIyz}h7aY5j#{pdDw2ihDWw)G7s$BMykFh*5lH#uamNgS4uj88ZFA{bYCbY>xt6U z-K(ZQId*VDu~~P{OnvbOkU%>!wUT-@(;dk#erjQ;Q2qx+2@W3)K#Gg`Z|G29yM?7k z!9$VAgjdAKW0c42qFJ}-EK(7C?b3Q_UdfM?90m;GrU=F6;A6AFrAb-zeed%@;!AUs zFPF-$Ii_V}s5x9>Q8SbaK{0Ovukm;&dRtw|5J~1ps+(BQ<@Rl0gS$xoOdqXJiT5*o$`D+QfiXuct{jPtEoA2wSORmFm%V~w zZe2&d>MUCL83!AQlo8{K6hGy7Jg!+O>fI+~hxX0y5%Hc}!Ozog+HY6pGOiA3-wK|+ zZX0u5%>9y6OnH%Lx$SU8G4mEv^yV$M^4ZzMBH#?%QyTIkPUCLS`+Y=2lVWv}MRg#~ zp~T^q&ha=Y(&eL3U_T-k0dQA85Un}t;w2jX+%oNeb>zV;pI$C5GgM~3cGYz*95S6t z7vT$!GgYiEjS&)RFwqK@s< z6Gw{c9?L*RGDFeS^J-aK7lNav5y5A1P7x2ebU)US`zX-5+(?B|R7duhXniT%TkPRE zqfcCp@rl#z;lLp$15$A@33SL4YYYO|@YwVZkm%rAvP(U!wn%oykw&f|d0q>ShM1bW z;R;G_FiHzh$Mn)Kym);`3`@C5OnuU-KNx?GzvCK`;Sf9%b>DfQMH%`TO9D?hPM|+Z^pN{ zmU(-0iofHA7Y~76WY$C@RDJtEBh3K6vw}aQHmA|!t4sk9va= z!VMR2rnS1Fp!KnJw2}={edH9MR&w65dZV>0WbU}(Y1CPuYB~~()KS*Pr`!#?e&Bc; zg?N1Up+pd*B2WG3u{0mn4U|z&+pR+9?ReZbr#nsOt7;1Fj6ML^vA9K9`wevs+eYO1 z+IICRNB|?*5e)Sd#+UD*4mR5IMRiDCg!~2Xce<5aq~q&HUqVpK_Rk=2Om^p~U#PC{ z515l0=hmgXSnwT(qnU@$`<_P*^TU#CBo3>CU2NP;)=^uTou3O87bijfB!iRo!m|hE@e2j(9tKk*UBh)bQXVHzz9z8l*l8RoMo^GOg~l zXnc8w{&`o!*s)iF1eYS+qT@MLaI4zM-g%+kZWgT1TJx-_n2#n9S&ouq!vZj{xE6CW z!OZtez9QWH#sLI|WsW%~rt6AWP--J(!MZlVEAdS?6)1b2`T#4-U@e4!)*<_-MU z7e70R_yattz9IH3n~RY(SX(M$wId*Kj>n$^CIK9-kw=O?Ue+qp6Zz2i-je(m5LV*J#H}qF93s+-z(bQdNRQ=%rYl9*L~)bX!o*Z z4?dpBUQ4j@A1s#mTqN|4RoVncB`CTudAf(*W85x(Bm#_WuUQ74zc%$w3;fSR_2Tyz zBA;EKePABrVH)$p{%{}h#!un@9{f%Nu%Y;2r-vq?;z31C2UgJWG$6R=Wf7-1jXv#d zGjnLAMfkNJgnsB-g+b@?INvT@Y38mckC-Gs?E7zGOZCej0|9l|#06tS0R3P@s8nY3 zjQ8$7>_GeU{3#CY+1izkP#R)5KNm1$zM?&a+2d#8PIjyQz~qd{MZDps{+=FNh3T@a zd_HStJ)ecTDb=aJ%wBE`9){^*A+F~pyP%Lr1I~w?9qGukvEoUe7|;{STv?9I=i6mW z=Y{!83l(diFv3G}ZYSXZ_?1dt3V}@n)dN!_2JGR%l?Kj&E(RLLvEyDGG@^v3B+DDn z0YefTi#I2PJvKTBobh?8-SnCbllb8)hVL6=^`9JpG$C+NAA<&r9PvB> z4jkZc;56xFlAQ!uiW`Clyy!z5BNP?@`H+ojrQkkZ)g*m_&<^$6$xihfRX5nDLU6dOU!gRuc~UolQYYt&KcU|B=q@0T(%XKj!&sDiN%U!(BKe{=`?Dz!lQAZ6pMQLolH$$9?Iif zt0YJHmrZlzT=#S!RiK+?nl;uZ&FVlDK*DZ>>dr4W*-RXWhCYL&0^;cEil0k94GW$7 zMKpo=DI)k9?DXYmVb0LzyBtxoZy2Uungmj6opEMdhhI|F|I4nA+g9_3u`9U(Yb{tp z87SA}$!Ea0FRS<3(Z;i%-QEoHOH9PZ9(s7J;|ON40z)cp|N8DeF2#e!O7UG7@rgpV z`E`1*m^IsJa~XT0-Ot+c8!pK(xUSy4lP!J1Su)*F<=h4De?g4v!r=Hqj(E0rM9PsE z;`8E3VX3t9=46rEci}*mIp!vY0QsvmM@0)Vek>*nxgy0t>U%(61aCB_l7gzh)6(QU z11G`$T`Zqep03FOio#QOpOgTyA~IS<9S#*%XDF@Y3ukGjfRC+;&F2{i>?7Y7YJ9_= zyK4S$hQVv49^{{CTv_E??8t**WLuv-q?jgjlLnFW5_youE4Qb!T8@Bs5X6E|&_3|D zzPojqLS}u$o9&t`h}mTk>uOzfCAtEwd6AS(PB)L|;C=)~y$bdotM+!qs{ltXFRvTc z2++>lr@I=yBxCVv4&+?vQ?0C$DD)E(+(=ub5v0G3uWuylR{)TvN=;hOy(fx#XU)P6 zTW>1(?=Tx%U%s+9gn8jPl`OI3vT-D?{A9src^<~E&)wUO4@?j%s$gO0W!vm8y~|tl z{#&1wtI4`MyFHu8$koduBKDCRU;Cast4U>~k*W^$V=U@8?A|^XH-*X{!0nabxLK-( z+zLMYEqwRwjU(KrbML8NC|=HP z5p4^t&KWH9)A;@WqrG!|WcvO8_hgy%psX5r_>ZVGi7XunN6FJ z^O=^&v6_m6Y9u*TBXa1p>Qn6_Bqi!2pWnW>e!qX$_pY0-Ti5lto(GH9y7<=D z3R9o%Z3x6V1hHq-@~~e8Y2W3c)$@00x*tkohO$-WCozwxWhsYvN~7Vgsh<@?R2Rf9 zTzpD-Vr=r0DQHW(5A@}sRzsFLzvH0=J~N$GE1m5S>tm6Si+upGXIUQ3Rk61Q>FzWx zkx;a`Xd|V)YKNAq9sh%I-j>ZDdb+9pYx>BmQ|&TC`DSHBzo)`bZqM9*6%yzw@nW1z zAbttYlu`-Evf^WQ6*J-@$=|bowhS-}y^PW$tg;Tv;<9k*SrWmNF)-{~jx~P(s@4OD zC82>`mJEM8E6x~&3z9@QpWTnGj`=H*j?%-zQ6mD~H>7OFK`dZEadQiEqcJgI;MXNp zF~3RR-9ip%$^fb+PN>$?i+48HJou$;lDFY9v6pG}P$BZMgZ~bJh~@FZ8s$3&<8bnJ zZVkhFQ`smXFMgKu5GqSkxYbg4Tns(Cm&hB=sB;6MD5s420q|F}N7!ETK%m(NX9QuK(nyXz?ut~9BtR|n`=ns zNax7yFFsyT!j!BHGD^!4|1WfJuBLK!570gdREL5CIDhON_5jNRK@ zYu5F;0|rp%2Ug(o8Z+pK5xwSpi-SI5%Qd>(&;C-TpqSmB09+Nie$e`bOzoL#IeJc> z;Vyu5<;l8f`kRn%(eTpAy@w+(5xPRYS2&`an@3aeeK(X16oSFR4`1NZ$UqlP{LNEs zReNkO%!l$wr^Mxs`*vgcYH(>;wK;=kW5**iY8q|#r#|}HW(5bfK4f*rF%&%hX}{1v zB@^6Jcf(lsxd7>SrXy}q5)T4BUu-4Wl21Ato`&{h@&}Oa;!l1M@Gkr z3ymZ7{;HHz-XFNa!QL*X>l^2*V)e2d!D9PflrW%&-UXQ;QcqGClF3F_V$JtYUvV{4 zlrMn0j@t+nQWy#oRSBe-ZuC}DPhP+B88CzO7Q3NmxK(MYsSa_0vfW++`#KO;_#vapqYm4jnTeM_R=5KKCKrqgSbzc|mS zzhO44&Fo4%SymGH*4#hd*ZclYCz63so5+~+G_H%3+U{PdC-*T&dg0imEf0BEzh-U7 z_goD}ei69oz3ODvYiu{nN6WeL`I~p62JcadF0s2T?O60TmB7l+bd5Qqt5Zhww2FWG z7QgR)p^Xr9vGD(p6$G2}nsjPsgsid2?U7i_qbB z>U)Q0C`^gnsjAHxduO4@ySO4T_-NpwB#5D!;Ve7xWkG%jYW7qM9DDB%9lo|={uRb( zwzvM6lS!NLn=FAB`s>YUkvA2@=?Byim2jMZBzFhcn$1uElHhQ0P|u-%D{vAx@y+va z;cV6e^|TC5=BR&$dL&$p9};jiKvyrzblXvsw4O{m@2w?NA$6si1&AD~aR!m_(HR<{AEZhmL?7P2LiPni+v7*@cca+WRy>O@rygG}OM>p5-Mcgq<$W8@5aXMHROdQP}tbFhUE}#E_x}HMYQA z<&(q$&w;y(zGty=d8gNM*y=*?FIg%kD#g)VP46y!h!p_Fr_j+y37b9bQ+=zv*Mi$p=IvVCP;22QV~;hfhU zwi*6Jj|F06?lf3HKrV(p)z7uXUAlk+PFWnKzBm)lj;JJ5|3;K$O`nmO=VWawA!Hu= z>+*|hkA}dM>rb!|o#ZQ~?ibgG>-VQBHI*au7K6bAc5U}%%4U5jkz-a}O!^6l($Bry zgBYKW+-j}+SxHar4!^FH2PPypcSBD6*1Yr_;n5tpXY6Fu;t5-RT?v!0=y zlNZ~|jyJmZ8}hgI+ibu$2XA-pFS zk<1H!&~R?4xVd5w+P4sCGKT2>byQ3MxtHrVoZBY8Mr*{@3@mnRKW!43&spVd2ssZU zL$RjiHE3tGA>-ZUYApMWqkhb9!%zWzbPy6~ja+9Ry*-MvE;L*I(b~$bbDe?Et&K&O zyE^5hzAMOft2QtP2+1{oaIK&hF0?8kw-=52J3&p=I#`13+qLX#=qt~Xz;3-7ge(}6 zbHn=4jSj&jp_$M7v0a2oK=DY+y4j5u(Ivgnvv?6}>I1Xp5_Zg7zCpZJt_3_P*1^+! zUjDA``yXyLNkm1(1#0 zon(^kXD!c7ONowDV-bM!!*wRSgQAItJSDCkt=dMOL7Mg#sbldSw*=sDzE`G%mZS%2 z-J>VF6D+fOa}LmWJK3Y4b9v+9YuW9Ppq9v6lx8ku zZ^uV#7K-|N?kPWS24B7yvkkFZDRg}MaIo~dVrJF<6t$S+&n#zrPsqUG=_*9aRK2)8M)!}%P|)_bP} zBB%F+VZ$>I858QT?|!gQSgSfk=}+|S~!ZVBT*ay&%1qry5jn z+&E69X5Uh5xnb#eg@(e5ttYYlzE>{zS>U-{vE!mYUsO~u4(t7WN7+y5KFYf9S}nhP zz_2X#c<=k8=zCR~=$-*N@lR(aD+Ww|#s&uq#O0SKPnzH4xYg~u3%bEg<&P)5x25KX{_JLc^QvldL*Eq7@e#6U;~XKNqzn}V%L_aBRk`4BOP zCn~mRFPi_MuLe(;Du?P1z;L{tiDMWaT49WCcUb;db|(nFgCf$`<+Y3SkcvK}9tVmD z6z%HyvHd8(3;ML>`LsCL4$nJ$(Bo<;TNJ}lAj>Bk0R|k1V}52ZT7AXF8f^*|72X`K zV<+?Gs=my{=|~G5JabhMssL8hhnJ+Pd0ic-1Bty%U)UugJlutb{ID-PXAl5x*O}Y= zEOMFejG12ek*7X1Fn?PW*$8r;nwpv2MLnUHE6n>Rm2WyfvD`) zNpS-W-4aMm7QP!zL>u#v- X|C=iK-*c!KkO>(6cMkurbFldzZAtJm literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/logos/api.svg b/src/renderer/src/assets/logos/api.svg new file mode 100644 index 0000000..64960f9 --- /dev/null +++ b/src/renderer/src/assets/logos/api.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/renderer/src/assets/logos/atlascloud.svg b/src/renderer/src/assets/logos/atlascloud.svg new file mode 100644 index 0000000..f847919 --- /dev/null +++ b/src/renderer/src/assets/logos/atlascloud.svg @@ -0,0 +1 @@ +Atlas Cloud \ No newline at end of file diff --git a/src/renderer/src/assets/logos/atomicchat.svg b/src/renderer/src/assets/logos/atomicchat.svg new file mode 100644 index 0000000..33235d9 --- /dev/null +++ b/src/renderer/src/assets/logos/atomicchat.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/src/assets/logos/cerebras-color.svg b/src/renderer/src/assets/logos/cerebras-color.svg new file mode 100644 index 0000000..c8bab7b --- /dev/null +++ b/src/renderer/src/assets/logos/cerebras-color.svg @@ -0,0 +1 @@ +Cerebras \ No newline at end of file diff --git a/src/renderer/src/assets/logos/cerebras.svg b/src/renderer/src/assets/logos/cerebras.svg new file mode 100644 index 0000000..c8bab7b --- /dev/null +++ b/src/renderer/src/assets/logos/cerebras.svg @@ -0,0 +1 @@ +Cerebras \ No newline at end of file diff --git a/src/renderer/src/assets/logos/claude-color.svg b/src/renderer/src/assets/logos/claude-color.svg new file mode 100644 index 0000000..62dc0db --- /dev/null +++ b/src/renderer/src/assets/logos/claude-color.svg @@ -0,0 +1 @@ +Claude \ No newline at end of file diff --git a/src/renderer/src/assets/logos/deepseek-color.svg b/src/renderer/src/assets/logos/deepseek-color.svg new file mode 100644 index 0000000..3fc2302 --- /dev/null +++ b/src/renderer/src/assets/logos/deepseek-color.svg @@ -0,0 +1 @@ +DeepSeek \ No newline at end of file diff --git a/src/renderer/src/assets/logos/dingtalk.svg b/src/renderer/src/assets/logos/dingtalk.svg new file mode 100644 index 0000000..5852574 --- /dev/null +++ b/src/renderer/src/assets/logos/dingtalk.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/renderer/src/assets/logos/discord.svg b/src/renderer/src/assets/logos/discord.svg new file mode 100644 index 0000000..e6c391a --- /dev/null +++ b/src/renderer/src/assets/logos/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/logos/email.svg b/src/renderer/src/assets/logos/email.svg new file mode 100644 index 0000000..6cc70e3 --- /dev/null +++ b/src/renderer/src/assets/logos/email.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/fireworks-color.svg b/src/renderer/src/assets/logos/fireworks-color.svg new file mode 100644 index 0000000..a23445c --- /dev/null +++ b/src/renderer/src/assets/logos/fireworks-color.svg @@ -0,0 +1 @@ +Fireworks \ No newline at end of file diff --git a/src/renderer/src/assets/logos/fireworksai.svg b/src/renderer/src/assets/logos/fireworksai.svg new file mode 100644 index 0000000..a23445c --- /dev/null +++ b/src/renderer/src/assets/logos/fireworksai.svg @@ -0,0 +1 @@ +Fireworks \ No newline at end of file diff --git a/src/renderer/src/assets/logos/gemini-color.svg b/src/renderer/src/assets/logos/gemini-color.svg new file mode 100644 index 0000000..62681df --- /dev/null +++ b/src/renderer/src/assets/logos/gemini-color.svg @@ -0,0 +1 @@ +Gemini \ No newline at end of file diff --git a/src/renderer/src/assets/logos/grok.svg b/src/renderer/src/assets/logos/grok.svg new file mode 100644 index 0000000..efb1a61 --- /dev/null +++ b/src/renderer/src/assets/logos/grok.svg @@ -0,0 +1 @@ +Grok \ No newline at end of file diff --git a/src/renderer/src/assets/logos/groq.svg b/src/renderer/src/assets/logos/groq.svg new file mode 100644 index 0000000..7294646 --- /dev/null +++ b/src/renderer/src/assets/logos/groq.svg @@ -0,0 +1 @@ +Groq \ No newline at end of file diff --git a/src/renderer/src/assets/logos/home-assist.svg b/src/renderer/src/assets/logos/home-assist.svg new file mode 100644 index 0000000..c76c739 --- /dev/null +++ b/src/renderer/src/assets/logos/home-assist.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/huggingface.svg b/src/renderer/src/assets/logos/huggingface.svg new file mode 100644 index 0000000..4545933 --- /dev/null +++ b/src/renderer/src/assets/logos/huggingface.svg @@ -0,0 +1 @@ +HuggingFace \ No newline at end of file diff --git a/src/renderer/src/assets/logos/imessage.svg b/src/renderer/src/assets/logos/imessage.svg new file mode 100644 index 0000000..5363f53 --- /dev/null +++ b/src/renderer/src/assets/logos/imessage.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/lark.svg b/src/renderer/src/assets/logos/lark.svg new file mode 100644 index 0000000..7501af6 --- /dev/null +++ b/src/renderer/src/assets/logos/lark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/lmstudio.svg b/src/renderer/src/assets/logos/lmstudio.svg new file mode 100644 index 0000000..ea0816b --- /dev/null +++ b/src/renderer/src/assets/logos/lmstudio.svg @@ -0,0 +1 @@ +LM Studio \ No newline at end of file diff --git a/src/renderer/src/assets/logos/matrix-dark.svg b/src/renderer/src/assets/logos/matrix-dark.svg new file mode 100644 index 0000000..56e9a21 --- /dev/null +++ b/src/renderer/src/assets/logos/matrix-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/logos/mattermost-dark.svg b/src/renderer/src/assets/logos/mattermost-dark.svg new file mode 100644 index 0000000..ccd39ee --- /dev/null +++ b/src/renderer/src/assets/logos/mattermost-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/logos/meta-color.svg b/src/renderer/src/assets/logos/meta-color.svg new file mode 100644 index 0000000..a8a8d94 --- /dev/null +++ b/src/renderer/src/assets/logos/meta-color.svg @@ -0,0 +1 @@ +Meta \ No newline at end of file diff --git a/src/renderer/src/assets/logos/mimo.svg b/src/renderer/src/assets/logos/mimo.svg new file mode 100644 index 0000000..b8ba03b --- /dev/null +++ b/src/renderer/src/assets/logos/mimo.svg @@ -0,0 +1 @@ +XiaomiMiMo \ No newline at end of file diff --git a/src/renderer/src/assets/logos/minimax-color.svg b/src/renderer/src/assets/logos/minimax-color.svg new file mode 100644 index 0000000..beb7adb --- /dev/null +++ b/src/renderer/src/assets/logos/minimax-color.svg @@ -0,0 +1 @@ +Minimax \ No newline at end of file diff --git a/src/renderer/src/assets/logos/mistral-color.svg b/src/renderer/src/assets/logos/mistral-color.svg new file mode 100644 index 0000000..8e03e24 --- /dev/null +++ b/src/renderer/src/assets/logos/mistral-color.svg @@ -0,0 +1 @@ +Mistral \ No newline at end of file diff --git a/src/renderer/src/assets/logos/moonshot.svg b/src/renderer/src/assets/logos/moonshot.svg new file mode 100644 index 0000000..fb56ac1 --- /dev/null +++ b/src/renderer/src/assets/logos/moonshot.svg @@ -0,0 +1 @@ +MoonshotAI \ No newline at end of file diff --git a/src/renderer/src/assets/logos/nousresearch.svg b/src/renderer/src/assets/logos/nousresearch.svg new file mode 100644 index 0000000..a0537eb --- /dev/null +++ b/src/renderer/src/assets/logos/nousresearch.svg @@ -0,0 +1 @@ +NousResearch \ No newline at end of file diff --git a/src/renderer/src/assets/logos/nvidia-color.svg b/src/renderer/src/assets/logos/nvidia-color.svg new file mode 100644 index 0000000..a9683c2 --- /dev/null +++ b/src/renderer/src/assets/logos/nvidia-color.svg @@ -0,0 +1 @@ +Nvidia \ No newline at end of file diff --git a/src/renderer/src/assets/logos/ollama.svg b/src/renderer/src/assets/logos/ollama.svg new file mode 100644 index 0000000..cc887e3 --- /dev/null +++ b/src/renderer/src/assets/logos/ollama.svg @@ -0,0 +1 @@ +Ollama \ No newline at end of file diff --git a/src/renderer/src/assets/logos/openai.svg b/src/renderer/src/assets/logos/openai.svg new file mode 100644 index 0000000..78caf4f --- /dev/null +++ b/src/renderer/src/assets/logos/openai.svg @@ -0,0 +1 @@ +OpenAI \ No newline at end of file diff --git a/src/renderer/src/assets/logos/opencode.svg b/src/renderer/src/assets/logos/opencode.svg new file mode 100644 index 0000000..9c4cb89 --- /dev/null +++ b/src/renderer/src/assets/logos/opencode.svg @@ -0,0 +1 @@ +opencode \ No newline at end of file diff --git a/src/renderer/src/assets/logos/openrouter.svg b/src/renderer/src/assets/logos/openrouter.svg new file mode 100644 index 0000000..e6cca2a --- /dev/null +++ b/src/renderer/src/assets/logos/openrouter.svg @@ -0,0 +1 @@ +OpenRouter \ No newline at end of file diff --git a/src/renderer/src/assets/logos/perplexity-color.svg b/src/renderer/src/assets/logos/perplexity-color.svg new file mode 100644 index 0000000..5f5a5ab --- /dev/null +++ b/src/renderer/src/assets/logos/perplexity-color.svg @@ -0,0 +1 @@ +Perplexity \ No newline at end of file diff --git a/src/renderer/src/assets/logos/python.svg b/src/renderer/src/assets/logos/python.svg new file mode 100644 index 0000000..bf1b625 --- /dev/null +++ b/src/renderer/src/assets/logos/python.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/renderer/src/assets/logos/qqbot.svg b/src/renderer/src/assets/logos/qqbot.svg new file mode 100644 index 0000000..189598a --- /dev/null +++ b/src/renderer/src/assets/logos/qqbot.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/renderer/src/assets/logos/qwen.svg b/src/renderer/src/assets/logos/qwen.svg new file mode 100644 index 0000000..f2d0ada --- /dev/null +++ b/src/renderer/src/assets/logos/qwen.svg @@ -0,0 +1 @@ +Qwen \ No newline at end of file diff --git a/src/renderer/src/assets/logos/signal.svg b/src/renderer/src/assets/logos/signal.svg new file mode 100644 index 0000000..edc2280 --- /dev/null +++ b/src/renderer/src/assets/logos/signal.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/renderer/src/assets/logos/slack.svg b/src/renderer/src/assets/logos/slack.svg new file mode 100644 index 0000000..69a4eb6 --- /dev/null +++ b/src/renderer/src/assets/logos/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/logos/sms.svg b/src/renderer/src/assets/logos/sms.svg new file mode 100644 index 0000000..ee43ba3 --- /dev/null +++ b/src/renderer/src/assets/logos/sms.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/telegram.svg b/src/renderer/src/assets/logos/telegram.svg new file mode 100644 index 0000000..0d40168 --- /dev/null +++ b/src/renderer/src/assets/logos/telegram.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/together-color.svg b/src/renderer/src/assets/logos/together-color.svg new file mode 100644 index 0000000..8c9ec11 --- /dev/null +++ b/src/renderer/src/assets/logos/together-color.svg @@ -0,0 +1 @@ +together.ai \ No newline at end of file diff --git a/src/renderer/src/assets/logos/togetherai.svg b/src/renderer/src/assets/logos/togetherai.svg new file mode 100644 index 0000000..8c9ec11 --- /dev/null +++ b/src/renderer/src/assets/logos/togetherai.svg @@ -0,0 +1 @@ +together.ai \ No newline at end of file diff --git a/src/renderer/src/assets/logos/twitter.svg b/src/renderer/src/assets/logos/twitter.svg new file mode 100644 index 0000000..d5172eb --- /dev/null +++ b/src/renderer/src/assets/logos/twitter.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/renderer/src/assets/logos/vllm.svg b/src/renderer/src/assets/logos/vllm.svg new file mode 100644 index 0000000..54acc3d --- /dev/null +++ b/src/renderer/src/assets/logos/vllm.svg @@ -0,0 +1 @@ +vLLM \ No newline at end of file diff --git a/src/renderer/src/assets/logos/webhook.svg b/src/renderer/src/assets/logos/webhook.svg new file mode 100644 index 0000000..b3847c4 --- /dev/null +++ b/src/renderer/src/assets/logos/webhook.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/wechat.svg b/src/renderer/src/assets/logos/wechat.svg new file mode 100644 index 0000000..166fe1f --- /dev/null +++ b/src/renderer/src/assets/logos/wechat.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/renderer/src/assets/logos/wecom.svg b/src/renderer/src/assets/logos/wecom.svg new file mode 100644 index 0000000..cbb3d4a --- /dev/null +++ b/src/renderer/src/assets/logos/wecom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/renderer/src/assets/logos/whatsapp-icon.svg b/src/renderer/src/assets/logos/whatsapp-icon.svg new file mode 100644 index 0000000..b722289 --- /dev/null +++ b/src/renderer/src/assets/logos/whatsapp-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/renderer/src/assets/logos/yuanbao.svg b/src/renderer/src/assets/logos/yuanbao.svg new file mode 100644 index 0000000..e2e376a --- /dev/null +++ b/src/renderer/src/assets/logos/yuanbao.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/renderer/src/assets/logos/zai.svg b/src/renderer/src/assets/logos/zai.svg new file mode 100644 index 0000000..04ba2d9 --- /dev/null +++ b/src/renderer/src/assets/logos/zai.svg @@ -0,0 +1 @@ +Z.ai \ No newline at end of file diff --git a/src/renderer/src/assets/main.css b/src/renderer/src/assets/main.css new file mode 100644 index 0000000..c7980c9 --- /dev/null +++ b/src/renderer/src/assets/main.css @@ -0,0 +1,14635 @@ +@import "tailwindcss"; + +/* ======================================================================== + Hermes One Desktop — Clean Design System + Dark + Light mode, no gradients, flat design + ======================================================================== */ + +/* ----- Dark Theme (default) ----- */ +[data-theme="dark"] { + --bg-primary: #212121; + --bg-secondary: #171717; + --bg-tertiary: #2f2f2f; + --bg-elevated: #303030; + --bg-hover: #3a3a3a; + --bg-active: #424242; + --accent: #003f7a; + --accent-hover: #0055a4; + --accent-subtle: rgba(0, 63, 122, 0.15); + --accent-text: #006acd; + --primary-yellow: #f5c518; + --text-primary: #ececec; + --text-secondary: #b4b4b4; + --text-muted: #8e8e8e; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.1); + --border-focus: #003f7a; + --success: #22c55e; + --success-bg: rgba(34, 197, 94, 0.1); + --error: #ef4444; + --error-bg: rgba(239, 68, 68, 0.1); + --warning: #f59e0b; + --warning-bg: rgba(245, 158, 11, 0.1); + --user-bubble: #003f7a; + --user-bubble-text: #ffffff; + --agent-bubble: #2f2f2f; + --agent-bubble-text: #ececec; + --code-bg: #1a1a1a; + --scrollbar-thumb: #424242; + --scrollbar-hover: #555555; + --selection: rgba(0, 100, 180, 0.7); +} + +/* ----- Light Theme ----- */ +[data-theme="light"] { + --bg-primary: #ffffff; + --bg-secondary: #f8f8f8; + --bg-tertiary: #f0f0f0; + --bg-elevated: #e8e8e8; + --bg-hover: #ebebeb; + --bg-active: #e0e0e0; + --accent: #003f7a; + --accent-hover: #002d58; + --accent-subtle: rgba(0, 63, 122, 0.08); + --accent-text: #003f7a; + --primary-yellow: #f5c518; + --text-primary: #111111; + --text-secondary: #555555; + --text-muted: #999999; + --border: #e5e5e5; + --border-bright: #d4d4d4; + --border-focus: #003f7a; + --success: #16a34a; + --success-bg: rgba(22, 163, 74, 0.08); + --error: #dc2626; + --error-bg: rgba(220, 38, 38, 0.06); + --warning: #d97706; + --warning-bg: rgba(217, 119, 6, 0.08); + --user-bubble: #003f7a; + --user-bubble-text: #ffffff; + --agent-bubble: #f0f0f0; + --agent-bubble-text: #111111; + --code-bg: #f5f5f5; + --scrollbar-thumb: #d4d4d4; + --scrollbar-hover: #bbbbbb; + --selection: rgba(0, 63, 122, 0.3); +} + +/* ----- Dracula ----- */ +[data-theme="dracula"] { + --bg-primary: #282a36; + --bg-secondary: #21222c; + --bg-tertiary: #343746; + --bg-elevated: #343746; + --bg-hover: #44475a; + --bg-active: #4d5066; + --accent: #bd93f9; + --accent-hover: #caa9fa; + --accent-subtle: rgba(189, 147, 249, 0.16); + --accent-text: #bd93f9; + --primary-yellow: #f1fa8c; + --text-primary: #f8f8f2; + --text-secondary: #c3c3d0; + --text-muted: #6272a4; + --border: rgba(255, 255, 255, 0.07); + --border-bright: rgba(255, 255, 255, 0.13); + --border-focus: #bd93f9; + --success: #50fa7b; + --success-bg: rgba(80, 250, 123, 0.12); + --error: #ff5555; + --error-bg: rgba(255, 85, 85, 0.12); + --warning: #f1fa8c; + --warning-bg: rgba(241, 250, 140, 0.12); + --user-bubble: #bd93f9; + --user-bubble-text: #282a36; + --agent-bubble: #343746; + --agent-bubble-text: #f8f8f2; + --code-bg: #21222c; + --scrollbar-thumb: #44475a; + --scrollbar-hover: #6272a4; + --selection: rgba(189, 147, 249, 0.7); +} + +/* ----- Nord ----- */ +[data-theme="nord"] { + --bg-primary: #2e3440; + --bg-secondary: #272c36; + --bg-tertiary: #3b4252; + --bg-elevated: #3b4252; + --bg-hover: #434c5e; + --bg-active: #4c566a; + --accent: #88c0d0; + --accent-hover: #8fbcbb; + --accent-subtle: rgba(136, 192, 208, 0.16); + --accent-text: #88c0d0; + --primary-yellow: #ebcb8b; + --text-primary: #eceff4; + --text-secondary: #d8dee9; + --text-muted: #7b88a1; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.12); + --border-focus: #88c0d0; + --success: #a3be8c; + --success-bg: rgba(163, 190, 140, 0.14); + --error: #bf616a; + --error-bg: rgba(191, 97, 106, 0.14); + --warning: #ebcb8b; + --warning-bg: rgba(235, 203, 139, 0.14); + --user-bubble: #5e81ac; + --user-bubble-text: #eceff4; + --agent-bubble: #3b4252; + --agent-bubble-text: #eceff4; + --code-bg: #272c36; + --scrollbar-thumb: #434c5e; + --scrollbar-hover: #4c566a; + --selection: rgba(136, 192, 208, 0.7); +} + +/* ----- One Dark ----- */ +[data-theme="one-dark"] { + --bg-primary: #282c34; + --bg-secondary: #21252b; + --bg-tertiary: #2c313a; + --bg-elevated: #2c313a; + --bg-hover: #2f3540; + --bg-active: #3e4451; + --accent: #61afef; + --accent-hover: #74b9f1; + --accent-subtle: rgba(97, 175, 239, 0.16); + --accent-text: #61afef; + --primary-yellow: #e5c07b; + --text-primary: #d7dae0; + --text-secondary: #abb2bf; + --text-muted: #6b727f; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.1); + --border-focus: #61afef; + --success: #98c379; + --success-bg: rgba(152, 195, 121, 0.14); + --error: #e06c75; + --error-bg: rgba(224, 108, 117, 0.14); + --warning: #e5c07b; + --warning-bg: rgba(229, 192, 123, 0.14); + --user-bubble: #61afef; + --user-bubble-text: #282c34; + --agent-bubble: #2c313a; + --agent-bubble-text: #d7dae0; + --code-bg: #21252b; + --scrollbar-thumb: #3e4451; + --scrollbar-hover: #4b5263; + --selection: rgba(97, 175, 239, 0.7); +} + +/* ----- GitHub Dark ----- */ +[data-theme="github-dark"] { + --bg-primary: #0d1117; + --bg-secondary: #010409; + --bg-tertiary: #161b22; + --bg-elevated: #161b22; + --bg-hover: #1f242c; + --bg-active: #21262d; + --accent: #1f6feb; + --accent-hover: #388bfd; + --accent-subtle: rgba(56, 139, 253, 0.16); + --accent-text: #58a6ff; + --primary-yellow: #d29922; + --text-primary: #c9d1d9; + --text-secondary: #8b949e; + --text-muted: #6e7681; + --border: #30363d; + --border-bright: #444c56; + --border-focus: #1f6feb; + --success: #3fb950; + --success-bg: rgba(63, 185, 80, 0.14); + --error: #f85149; + --error-bg: rgba(248, 81, 73, 0.14); + --warning: #d29922; + --warning-bg: rgba(210, 153, 34, 0.14); + --user-bubble: #1f6feb; + --user-bubble-text: #ffffff; + --agent-bubble: #161b22; + --agent-bubble-text: #c9d1d9; + --code-bg: #161b22; + --scrollbar-thumb: #30363d; + --scrollbar-hover: #484f58; + --selection: rgba(56, 139, 253, 0.7); +} + +/* ----- Monokai ----- */ +[data-theme="monokai"] { + --bg-primary: #272822; + --bg-secondary: #1e1f1c; + --bg-tertiary: #2d2e28; + --bg-elevated: #34352f; + --bg-hover: #3e3d32; + --bg-active: #49483e; + --accent: #66d9ef; + --accent-hover: #7ee0f2; + --accent-subtle: rgba(102, 217, 239, 0.16); + --accent-text: #66d9ef; + --primary-yellow: #e6db74; + --text-primary: #f8f8f2; + --text-secondary: #c5c8c6; + --text-muted: #75715e; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.12); + --border-focus: #66d9ef; + --success: #a6e22e; + --success-bg: rgba(166, 226, 46, 0.14); + --error: #f92672; + --error-bg: rgba(249, 38, 114, 0.14); + --warning: #e6db74; + --warning-bg: rgba(230, 219, 116, 0.14); + --user-bubble: #f92672; + --user-bubble-text: #ffffff; + --agent-bubble: #2d2e28; + --agent-bubble-text: #f8f8f2; + --code-bg: #1e1f1c; + --scrollbar-thumb: #49483e; + --scrollbar-hover: #75715e; + --selection: rgba(102, 217, 239, 0.7); +} + +/* ----- Solarized Dark ----- */ +[data-theme="solarized-dark"] { + --bg-primary: #002b36; + --bg-secondary: #00252e; + --bg-tertiary: #073642; + --bg-elevated: #073642; + --bg-hover: #0a4250; + --bg-active: #0e4b5a; + --accent: #268bd2; + --accent-hover: #3a9bdc; + --accent-subtle: rgba(38, 139, 210, 0.16); + --accent-text: #2aa198; + --primary-yellow: #b58900; + --text-primary: #93a1a1; + --text-secondary: #839496; + --text-muted: #586e75; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.1); + --border-focus: #268bd2; + --success: #859900; + --success-bg: rgba(133, 153, 0, 0.16); + --error: #dc322f; + --error-bg: rgba(220, 50, 47, 0.16); + --warning: #b58900; + --warning-bg: rgba(181, 137, 0, 0.16); + --user-bubble: #268bd2; + --user-bubble-text: #002b36; + --agent-bubble: #073642; + --agent-bubble-text: #93a1a1; + --code-bg: #00252e; + --scrollbar-thumb: #073642; + --scrollbar-hover: #586e75; + --selection: rgba(38, 139, 210, 0.7); +} + +/* ----- Gruvbox Dark ----- */ +[data-theme="gruvbox-dark"] { + --bg-primary: #282828; + --bg-secondary: #1d2021; + --bg-tertiary: #3c3836; + --bg-elevated: #3c3836; + --bg-hover: #504945; + --bg-active: #665c54; + --accent: #83a598; + --accent-hover: #8ec07c; + --accent-subtle: rgba(131, 165, 152, 0.16); + --accent-text: #83a598; + --primary-yellow: #fabd2f; + --text-primary: #ebdbb2; + --text-secondary: #d5c4a1; + --text-muted: #928374; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.12); + --border-focus: #83a598; + --success: #b8bb26; + --success-bg: rgba(184, 187, 38, 0.14); + --error: #fb4934; + --error-bg: rgba(251, 73, 52, 0.14); + --warning: #fabd2f; + --warning-bg: rgba(250, 189, 47, 0.14); + --user-bubble: #83a598; + --user-bubble-text: #282828; + --agent-bubble: #3c3836; + --agent-bubble-text: #ebdbb2; + --code-bg: #1d2021; + --scrollbar-thumb: #504945; + --scrollbar-hover: #665c54; + --selection: rgba(131, 165, 152, 0.7); +} + +/* ----- Tokyo Night ----- */ +[data-theme="tokyo-night"] { + --bg-primary: #1a1b26; + --bg-secondary: #16161e; + --bg-tertiary: #1f2335; + --bg-elevated: #1f2335; + --bg-hover: #292e42; + --bg-active: #343b58; + --accent: #7aa2f7; + --accent-hover: #89b4fa; + --accent-subtle: rgba(122, 162, 247, 0.16); + --accent-text: #7aa2f7; + --primary-yellow: #e0af68; + --text-primary: #c0caf5; + --text-secondary: #a9b1d6; + --text-muted: #565f89; + --border: rgba(255, 255, 255, 0.06); + --border-bright: rgba(255, 255, 255, 0.1); + --border-focus: #7aa2f7; + --success: #9ece6a; + --success-bg: rgba(158, 206, 106, 0.14); + --error: #f7768e; + --error-bg: rgba(247, 118, 142, 0.14); + --warning: #e0af68; + --warning-bg: rgba(224, 175, 104, 0.14); + --user-bubble: #7aa2f7; + --user-bubble-text: #1a1b26; + --agent-bubble: #1f2335; + --agent-bubble-text: #c0caf5; + --code-bg: #16161e; + --scrollbar-thumb: #343b58; + --scrollbar-hover: #565f89; + --selection: rgba(122, 162, 247, 0.7); +} + +/* ----- GitHub Light ----- */ +[data-theme="github-light"] { + --bg-primary: #ffffff; + --bg-secondary: #f6f8fa; + --bg-tertiary: #eaeef2; + --bg-elevated: #eaeef2; + --bg-hover: #eef1f4; + --bg-active: #e1e5ea; + --accent: #0969da; + --accent-hover: #0860c9; + --accent-subtle: rgba(9, 105, 218, 0.08); + --accent-text: #0969da; + --primary-yellow: #9a6700; + --text-primary: #1f2328; + --text-secondary: #57606a; + --text-muted: #8c959f; + --border: #d0d7de; + --border-bright: #afb8c1; + --border-focus: #0969da; + --success: #1a7f37; + --success-bg: rgba(26, 127, 55, 0.08); + --error: #cf222e; + --error-bg: rgba(207, 34, 46, 0.07); + --warning: #9a6700; + --warning-bg: rgba(154, 103, 0, 0.08); + --user-bubble: #0969da; + --user-bubble-text: #ffffff; + --agent-bubble: #f6f8fa; + --agent-bubble-text: #1f2328; + --code-bg: #f6f8fa; + --scrollbar-thumb: #d0d7de; + --scrollbar-hover: #afb8c1; + --selection: rgba(9, 105, 218, 0.3); +} + +/* ----- Solarized Light ----- */ +[data-theme="solarized-light"] { + --bg-primary: #fdf6e3; + --bg-secondary: #f4eeda; + --bg-tertiary: #eee8d5; + --bg-elevated: #eee8d5; + --bg-hover: #e7e0c9; + --bg-active: #ddd6be; + --accent: #268bd2; + --accent-hover: #1d6fa5; + --accent-subtle: rgba(38, 139, 210, 0.1); + --accent-text: #268bd2; + --primary-yellow: #b58900; + --text-primary: #586e75; + --text-secondary: #657b83; + --text-muted: #93a1a1; + --border: #e0d9c3; + --border-bright: #d3cbb0; + --border-focus: #268bd2; + --success: #859900; + --success-bg: rgba(133, 153, 0, 0.1); + --error: #dc322f; + --error-bg: rgba(220, 50, 47, 0.08); + --warning: #b58900; + --warning-bg: rgba(181, 137, 0, 0.1); + --user-bubble: #268bd2; + --user-bubble-text: #fdf6e3; + --agent-bubble: #eee8d5; + --agent-bubble-text: #586e75; + --code-bg: #eee8d5; + --scrollbar-thumb: #d3cbb0; + --scrollbar-hover: #b9b393; + --selection: rgba(38, 139, 210, 0.3); +} + +/* ----- Manrope ----- */ +@font-face { + font-family: "Manrope"; + src: url("./fonts/Manrope-Regular.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("./fonts/Manrope-Medium.ttf") format("truetype"); + font-weight: 500; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("./fonts/Manrope-SemiBold.ttf") format("truetype"); + font-weight: 600; + font-style: normal; + font-display: swap; +} +@font-face { + font-family: "Manrope"; + src: url("./fonts/Manrope-Bold.ttf") format("truetype"); + font-weight: 700; + font-style: normal; + font-display: swap; +} + +/* ----- Cairo ----- */ +@font-face { + font-family: "Cairo"; + src: url("./fonts/Cairo-Regular.ttf") format("truetype"); + font-weight: 400; + font-style: normal; + font-display: swap; + /* Scope Cairo to Arabic glyphs only; Latin etc. falls through to Manrope */ + unicode-range: U+0600-06FF, U+0750-077F, U+0870-089F, U+08A0-08FF, + U+FB50-FDFF, U+FE70-FEFF; +} +@font-face { + font-family: "Cairo"; + src: url("./fonts/Cairo-Medium.ttf") format("truetype"); + font-weight: 500; + font-style: normal; + font-display: swap; + unicode-range: U+0600-06FF, U+0750-077F, U+0870-089F, U+08A0-08FF, + U+FB50-FDFF, U+FE70-FEFF; +} +@font-face { + font-family: "Cairo"; + src: url("./fonts/Cairo-SemiBold.ttf") format("truetype"); + font-weight: 600; + font-style: normal; + font-display: swap; + unicode-range: U+0600-06FF, U+0750-077F, U+0870-089F, U+08A0-08FF, + U+FB50-FDFF, U+FE70-FEFF; +} +@font-face { + font-family: "Cairo"; + src: url("./fonts/Cairo-Bold.ttf") format("truetype"); + font-weight: 700; + font-style: normal; + font-display: swap; + unicode-range: U+0600-06FF, U+0750-077F, U+0870-089F, U+08A0-08FF, + U+FB50-FDFF, U+FE70-FEFF; +} + +/* ----- Shared Tokens ----- */ +:root { + --radius-sm: 6px; + --radius-md: 10px; + --radius-lg: 14px; + --radius-xl: 20px; + --transition: 150ms ease; + --font-sans: + "Cairo", "Manrope", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --font-mono: + "SF Mono", "Fira Code", "JetBrains Mono", Menlo, Consolas, monospace; +} + +/* ----- Squared corners (radius toggle off) ----- */ +html[data-radius="none"] { + --radius-sm: 0px; + --radius-md: 0px; + --radius-lg: 0px; + --radius-xl: 0px; +} + +/* ----- Body ----- */ +body { + font-family: var(--font-sans); + background: var(--bg-primary); + color: var(--text-primary); + transition: + background-color 0.2s ease, + color 0.2s ease; +} + +/* ----- App Shell ----- */ +.app { + height: 100vh; + display: flex; + flex-direction: column; + background: var(--bg-primary); +} + +.drag-region { + -webkit-app-region: drag; + height: 28px; + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 1000; +} + +.app-content { + flex: 1; + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* ----- Shared Components ----- */ +.screen { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 40px; + overflow-y: auto; +} + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 8px; + padding: 10px 24px; + border-radius: var(--radius-sm); + font-size: 14px; + font-weight: 600; + border: none; + cursor: pointer; + transition: all var(--transition); + font-family: var(--font-sans); + line-height: 1; + white-space: nowrap; + flex-shrink: 0; +} + +.btn-primary { + background: var(--accent); + color: #fff; +} + +.btn-primary:hover:not(:disabled) { + background: var(--accent-hover); +} + +.btn-secondary { + background: var(--bg-elevated); + color: var(--text-primary); + border: 1px solid var(--border-bright); +} + +.btn-secondary:hover:not(:disabled) { + background: var(--bg-hover); +} + +.btn-sm { + padding: 6px 14px; + font-size: 13px; +} + +.btn-danger { + background: var(--error); + color: #fff; + border: none; +} + +.btn-danger:hover:not(:disabled) { + opacity: 0.9; +} + +.btn-ghost { + background: transparent; + color: var(--text-secondary); + border: none; + cursor: pointer; + padding: 6px 10px; + border-radius: var(--radius-sm); + font-size: 13px; + font-family: var(--font-sans); + transition: all var(--transition); +} + +.btn-ghost:hover { + color: var(--text-primary); + background: var(--bg-tertiary); +} + +.btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +.input { + width: 100%; + padding: 10px 14px; + background: var(--bg-primary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-md); + color: var(--text-primary); + font-size: 14px; + font-family: var(--font-sans); + outline: none; + transition: border-color var(--transition); + box-sizing: border-box; +} + +.input:focus { + border-color: var(--border-focus); +} + +.input::placeholder { + color: var(--text-muted); +} + +/* ----- Loading ----- */ +.loading-screen { + background: var(--bg-primary); +} + +.loading-spinner { + width: 28px; + height: 28px; + border: 2.5px solid var(--border-bright); + border-top-color: var(--accent); + border-radius: 50%; + animation: spin 0.8s linear infinite; +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* ── Remote mode notice ── */ +.remote-notice { + flex: 1; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 6px; + padding: 40px; + text-align: center; +} + +.remote-notice-icon { + color: var(--text-muted); + opacity: 0.4; + margin-bottom: 4px; +} + +.remote-notice-title { + font-size: 15px; + font-weight: 600; + color: var(--text-secondary); +} + +.remote-notice-desc { + font-size: 13px; + color: var(--text-muted); + max-width: 360px; + line-height: 1.5; +} + +/* ======================================================================== + WELCOME SCREEN + ======================================================================== */ +.welcome-screen { + text-align: center; + gap: 0; +} + +.welcome-logo { + border-radius: var(--radius-lg); +} + +.welcome-title { + font-size: 32px; + font-weight: 700; + letter-spacing: -0.5px; + margin-bottom: 10px; + color: var(--text-primary); +} + +.welcome-subtitle { + font-size: 15px; + color: var(--text-secondary); + margin-bottom: 36px; + max-width: 400px; + line-height: 1.7; +} + +.welcome-button { + padding: 12px 32px; + font-size: 15px; + margin-bottom: 16px; +} + +.welcome-note { + font-size: 13px; + color: var(--text-muted); +} + +.welcome-actions { + display: flex; + flex-direction: column; + align-items: center; + gap: 0; + width: 100%; + max-width: 480px; +} + +.welcome-divider { + display: flex; + align-items: center; + width: 100%; + gap: 16px; + margin: 20px 0; + color: var(--text-muted); + font-size: 13px; +} + +.welcome-divider::before, +.welcome-divider::after { + content: ""; + flex: 1; + height: 1px; + background: var(--border); +} + +.welcome-terminal-option { + width: 100%; + text-align: left; +} + +.welcome-terminal-label { + font-size: 13px; + color: var(--text-secondary); + margin-bottom: 8px; +} + +.welcome-terminal-box { + display: flex; + align-items: center; + gap: 8px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 10px 12px; + margin-bottom: 16px; +} + +.welcome-terminal-box code { + flex: 1; + font-family: var(--font-mono); + font-size: 12px; + color: var(--text-secondary); + word-break: break-all; + -webkit-user-select: text; + user-select: text; +} + +.welcome-copy-btn { + flex-shrink: 0; +} + +.welcome-recheck-btn { + padding: 10px 24px; +} + +.welcome-recheck-btn + .welcome-recheck-btn { + margin-top: 10px; +} + +.welcome-remote-card { + width: 100%; + max-width: 420px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 20px; + text-align: left; + display: flex; + flex-direction: column; + gap: 10px; +} + +.welcome-remote-label { + font-size: 13px; + font-weight: 500; + color: var(--text-secondary); +} + +.welcome-remote-row { + display: flex; + gap: 8px; + align-items: center; +} + +.welcome-remote-input { + flex: 1; + min-width: 0; + padding: 9px 12px; + border-radius: var(--radius-sm); + border: 1px solid var(--border); + background: var(--bg-primary); + color: var(--text-primary); + font-size: 13px; + font-family: var(--font-mono); + outline: none; + transition: border-color var(--transition); +} + +.welcome-remote-input:focus { + border-color: var(--accent); +} + +.welcome-remote-error { + font-size: 12px; + color: var(--error, #ef4444); + margin: 0; +} + +.welcome-remote-hint { + font-size: 12px; + color: var(--text-muted); + margin: 0; +} + +/* ======================================================================== + INSTALL SCREEN + ======================================================================== */ +.install-screen { + padding-top: 60px; + justify-content: flex-start; +} + +.install-title { + font-size: 22px; + font-weight: 700; + margin-bottom: 28px; + color: var(--text-primary); +} + +.install-progress-container { + width: 100%; + max-width: 500px; + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 20px; +} + +.install-progress-bar { + flex: 1; + height: 4px; + background: var(--bg-tertiary); + border-radius: 2px; + overflow: hidden; +} + +.install-progress-fill { + height: 100%; + background: var(--accent); + border-radius: 2px; + transition: width 0.5s ease; +} + +.install-percent { + font-size: 13px; + font-weight: 600; + color: var(--text-secondary); + min-width: 36px; + text-align: right; + font-variant-numeric: tabular-nums; +} + +.install-step-info { + text-align: center; + margin-bottom: 8px; +} + +.install-step-title { + font-size: 14px; + font-weight: 600; + color: var(--text-primary); +} + +.install-step-detail { + font-size: 13px; + color: var(--text-secondary); + margin-top: 2px; +} + +.install-log { + width: 100%; + max-width: 620px; + flex: 1; + min-height: 200px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 16px; + margin-top: 20px; + overflow-y: auto; + font-family: var(--font-mono); + font-size: 12px; + color: var(--text-muted); + line-height: 1.7; + white-space: pre-wrap; + word-break: break-all; + -webkit-user-select: text; + user-select: text; +} + +.install-progress-fill--error { + background: var(--error) !important; +} + +.install-error-banner { + width: 100%; + max-width: 620px; + background: var(--error-bg); + border: 1px solid var(--error); + border-radius: var(--radius-md); + padding: 14px 16px; + display: flex; + flex-direction: column; + gap: 10px; +} + +/* Pre-install confirmation (issue #272) */ +.install-confirm { + width: 100%; + max-width: 620px; + display: flex; + flex-direction: column; + gap: 14px; + margin-top: 12px; +} + +.install-confirm-location { + display: flex; + flex-direction: column; + gap: 6px; +} + +.install-confirm-label { + font-size: 13px; + color: var(--text-secondary); +} + +.install-confirm-path { + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 10px 12px; + font-family: var(--font-mono); + font-size: 12px; + color: var(--text-primary); + word-break: break-all; + -webkit-user-select: text; + user-select: text; +} + +.install-confirm-state { + font-size: 14px; + color: var(--text-primary); + margin: 0; +} + +.install-confirm-state--replace { + padding: 10px 12px; + background: var(--warning-bg); + border: 1px solid var(--warning); + border-radius: var(--radius-md); +} + +.install-confirm-note, +.install-confirm-hint { + font-size: 12px; + color: var(--text-secondary); + margin: 0; +} + +.install-confirm-hint { + color: var(--text-muted); +} + +.install-confirm-actions { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-top: 4px; +} + +.install-confirm-error { + font-size: 13px; + color: var(--error); + margin: 0; +} + +.verify-warning-banner { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 8px 14px; + background: var(--warning-bg); + border-radius: var(--radius-sm); + border: 0.5px solid var(--warning); + margin-bottom: 20px; +} + +.verify-warning-text { + font-size: 12px; + color: var(--text-primary); + line-height: 1.4; +} + +.verify-warning-actions { + display: flex; + gap: 6px; + flex-shrink: 0; +} + +.install-error-text { + font-size: 13px; + color: var(--error); + line-height: 1.5; + margin: 0; +} + +.install-error-actions { + display: flex; + gap: 8px; +} + +.install-error { + text-align: center; + margin-top: 16px; + color: var(--error); + font-size: 14px; + max-width: 500px; + line-height: 1.5; +} + +.install-done { + margin-top: 20px; +} + +/* ======================================================================== + SETUP SCREEN + ======================================================================== */ +.setup-screen { + padding: 48px 24px; + justify-content: flex-start; + overflow-y: auto; +} + +.setup-panel { + width: 100%; + max-width: min(640px, 92vw); + margin: 0 auto; + padding: 32px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-lg); + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.28); +} + +.setup-title { + font-size: 22px; + font-weight: 700; + margin-bottom: 6px; + text-align: center; + color: var(--text-primary); +} + +.setup-subtitle { + font-size: 13.5px; + color: var(--text-secondary); + text-align: center; + margin-bottom: 24px; +} + +.setup-provider-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 8px; + width: 100%; + margin-bottom: 24px; +} + +.setup-provider-card { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + gap: 9px; + padding: 14px 8px 12px; + background: var(--bg-primary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + cursor: pointer; + transition: all var(--transition); + font-family: var(--font-sans); + color: var(--text-primary); +} + +.setup-provider-card:hover { + border-color: var(--border-bright); + background: var(--bg-tertiary); + transform: translateY(-1px); +} + +.setup-provider-card.selected { + border-color: var(--accent-text); + background: var(--accent-subtle); + box-shadow: inset 0 0 0 1px var(--accent-text); +} + +.setup-provider-card:focus-visible { + outline: 2px solid var(--accent-text); + outline-offset: 2px; +} + +.setup-provider-logo { + display: grid; + place-items: center; + width: 40px; + height: 40px; + border-radius: 11px; + background: var(--bg-tertiary); + transition: background var(--transition); +} + +.setup-provider-card.selected .setup-provider-logo { + background: rgba(255, 255, 255, 0.07); +} + +.setup-provider-name { + font-size: 12px; + font-weight: 600; + line-height: 1.25; + text-align: center; + color: var(--text-secondary); +} + +.setup-provider-card.selected .setup-provider-name { + color: var(--text-primary); +} + +.setup-provider-check { + position: absolute; + top: 6px; + right: 6px; + display: grid; + place-items: center; + width: 16px; + height: 16px; + border-radius: 50%; + background: var(--accent-text); + color: #fff; +} + +.setup-form { + width: 100%; +} + +/* The Providers tab reuses the setup preset chips for its main provider + picker (flex-wrap, logo + name), consistent with the local/remote chips. */ +.providers-provider-chips { + margin-bottom: 10px; +} + +/* Section title that carries a trailing action (e.g. the provider "Change" + button) on its right edge. */ +.settings-section-title-row { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; +} + +/* Read-only provider summary shown when a provider is configured and the grid + is collapsed. */ +.provider-summary { + display: flex; + align-items: center; + gap: 12px; + padding: 12px 14px; + background: var(--bg-primary); + border: 1px solid var(--border); + border-radius: var(--radius-md); +} + +.provider-summary .brand-logo { + width: 24px; + height: 24px; + flex-shrink: 0; +} + +.provider-summary-name { + font-size: 14px; + font-weight: 600; + color: var(--text-primary); +} + +.provider-summary-meta { + font-size: 12px; + color: var(--text-muted); + margin-top: 2px; + word-break: break-all; +} + +.setup-label { + display: block; + font-size: 13px; + font-weight: 600; + color: var(--text-secondary); + margin-bottom: 8px; +} + +.setup-input-group { + position: relative; + margin-bottom: 12px; +} + +.setup-input-group .input { + padding-right: 60px; +} + +.setup-toggle-visibility { + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); + background: none; + border: none; + color: var(--text-muted); + font-size: 12px; + font-weight: 600; + cursor: pointer; + padding: 4px 8px; + border-radius: var(--radius-sm); + font-family: var(--font-sans); + transition: color var(--transition); +} + +.setup-toggle-visibility:hover { + color: var(--text-primary); +} + +.setup-link { + display: inline-flex; + align-items: center; + gap: 4px; + color: var(--accent-text); + font-size: 13px; + cursor: pointer; + border: none; + background: none; + padding: 0; + margin-bottom: 20px; + font-family: var(--font-sans); + transition: color var(--transition); +} + +.setup-link:hover { + color: var(--accent-hover); +} + +.setup-local-presets { + display: flex; + flex-wrap: wrap; + gap: 10px; + margin-bottom: 16px; +} + +.setup-local-preset { + display: inline-flex; + align-items: center; + gap: 7px; + padding: 6px 12px; + background: var(--bg-secondary); + border: 1.5px solid var(--border); + border-radius: var(--radius-sm); + cursor: pointer; + transition: all var(--transition); + font-family: var(--font-sans); + font-size: 13px; + font-weight: 600; + color: var(--text-secondary); +} + +.setup-local-preset .brand-logo { + width: 16px; + height: 16px; + opacity: 0.85; +} + +.setup-local-preset:hover { + border-color: var(--border-bright); +} + +.setup-local-preset.active { + border-color: var(--accent); + color: var(--accent-text); + background: var(--accent-subtle); +} + +.setup-field-hint { + font-size: 12px; + color: var(--text-muted); + margin-top: 6px; + margin-bottom: 16px; +} + +.setup-label-optional { + font-weight: 400; + color: var(--text-muted); + font-size: 12px; + margin-left: 4px; +} + +.setup-error { + color: var(--error); + font-size: 13px; + margin-bottom: 12px; +} + +.setup-continue { + width: 100%; + padding: 12px; + font-size: 15px; + margin-top: 4px; +} + +/* Keep the disabled CTA legible: a visibly dimmed (not invisible) label. */ +.setup-continue:disabled { + opacity: 0.45; + cursor: not-allowed; +} + +/* ======================================================================== + LAYOUT (Sidebar + Content) + ======================================================================== */ +.layout { + display: flex; + flex: 1; + overflow: hidden; +} + +.sidebar { + width: 250px; + background: var(--bg-secondary); + border-right: none; + display: flex; + flex-direction: column; + flex-shrink: 0; + /* Nav labels are controls, not content — don't let click/drag select text. */ + -webkit-user-select: none; + user-select: none; + transition: + width var(--transition), + padding var(--transition); + /* Flush full-height panel: square right edge against the content, left + corners kept rounded to follow the window's rounded corners. */ + border-radius: 16px 0 0 16px; +} + +.sidebar-collapsed .sidebar { + width: 64px; +} + +.sidebar-brand { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + padding: 20px 14px 20px 20px; + margin-top: 25px; +} + +.sidebar-logo { + height: 30px; + width: 150px; + /* Follow the foreground colour (white on dark themes, black on light) rather + than a fixed brand yellow, so the wordmark always reads against the bg. */ + background-color: var(--text-primary); + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + -webkit-mask-size: contain; +} + +.sidebar-collapse-toggle { + width: 30px; + height: 30px; + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + border: none; + border-radius: var(--radius-md); + background: transparent; + color: var(--text-muted); + cursor: pointer; + transition: all var(--transition); +} + +.sidebar-collapse-toggle:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +/* Collapsed brand: circular mark by default, expand icon on hover. Both are + stacked in a fixed 16px box and toggled via opacity only, so the button + never reflows (no size jiggle). */ +.sidebar-collapse-swap { + position: relative; + width: 16px; + height: 16px; + flex-shrink: 0; +} + +.sidebar-collapse-mark { + position: absolute; + inset: 0; + margin: auto; + width: 20px; + height: 20px; + border-radius: 50%; + /* White on dark themes, dark on light — follows the foreground colour. */ + background: var(--text-primary); + transition: opacity var(--transition); +} + +.sidebar-collapse-expand-icon { + position: absolute; + inset: 0; + margin: auto; + opacity: 0; + transition: opacity var(--transition); +} + +.sidebar-collapse-toggle:hover .sidebar-collapse-mark, +.sidebar-collapse-toggle:focus-visible .sidebar-collapse-mark { + opacity: 0; +} + +.sidebar-collapse-toggle:hover .sidebar-collapse-expand-icon, +.sidebar-collapse-toggle:focus-visible .sidebar-collapse-expand-icon { + opacity: 1; +} + +.sidebar-collapsed .sidebar-brand { + justify-content: center; + padding: 18px 10px; + margin-top: 18px; +} + +.sidebar-collapsed .sidebar-logo { + display: none; +} + +.sidebar-brand-icon { + width: 30px; + height: 30px; + background: var(--accent); + border-radius: var(--radius-sm); + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; + font-weight: 700; + color: #fff; +} + +.sidebar-brand-name { + font-size: 16px; + font-weight: 700; + color: var(--text-primary); +} + +.sidebar-nav { + flex: 0 0 auto; + padding: 0 8px; + display: flex; + flex-direction: column; + gap: 2px; +} + +.sidebar-chat-section { + flex: 1 1 auto; + min-height: 0; + min-width: 0; + padding: 8px 8px 0; + display: flex; + flex-direction: column; + gap: 2px; + overflow: hidden; +} + +.sidebar-collapsed .sidebar-nav { + padding: 0 10px; + align-items: center; +} + +.sidebar-collapsed .sidebar-chat-section { + flex: 1 1 auto; + min-height: auto; + padding: 8px 10px 0; + align-items: center; + overflow: visible; +} + +.sidebar-nav-item { + display: flex; + align-items: center; + gap: 10px; + padding: 7px 10px; + border-radius: var(--radius-md); + cursor: pointer; + transition: all var(--transition); + font-size: 13px; + border: none; + background: none; + width: 100%; + min-width: 0; + text-align: left; + font-family: var(--font-sans); +} + +.sidebar-new-chat { + flex: 0 0 auto; +} + +.sidebar-nav-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.sidebar-nav-item:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.sidebar-nav-item.active { + background: var(--accent-subtle); + color: var(--accent-text); +} + +.sidebar-nav-item svg { + flex-shrink: 0; +} + +.sidebar-collapsed .sidebar-nav-item { + width: 40px; + height: 40px; + justify-content: center; + gap: 0; + padding: 0; +} + +.sidebar-collapsed .sidebar-nav-label { + display: none; +} + +/* Collapsible Sessions section (ChatGPT-style recent chats) */ +.sidebar-nav-sessions { + position: relative; + display: flex; + flex-direction: column; + gap: 2px; + min-height: 0; + min-width: 0; + flex: 1 1 auto; +} + +.sidebar-chat-scroll { + flex: 1 1 auto; + min-height: 0; + min-width: 0; + overflow-y: auto; + overflow-x: hidden; + scrollbar-width: none; + -ms-overflow-style: none; +} + +.sidebar-chat-scroll::-webkit-scrollbar { + width: 0; + height: 0; +} + +.sidebar-chat-scrollbar { + position: absolute; + top: 0; + right: 3px; + bottom: 0; + z-index: 3; + width: 6px; + pointer-events: none; + opacity: 0; + transition: opacity 160ms ease; +} + +.sidebar-chat-scrollbar.visible { + opacity: 1; +} + +.sidebar-chat-scrollbar-thumb { + width: 5px; + min-height: 32px; + border-radius: 999px; + background: color-mix(in srgb, var(--text-muted) 70%, transparent); +} + +.sidebar-collapsed .sidebar-nav-sessions { + flex: 0 0 auto; +} + +.sidebar-collapsed .sidebar-chat-scroll { + display: none; +} + +.sidebar-recent-sessions-wrap { + display: grid; + min-width: 0; + grid-template-rows: 0fr; + transition: + grid-template-rows 200ms ease, + opacity 200ms ease; + opacity: 0; +} + +.sidebar-recent-sessions-wrap.expanded { + grid-template-rows: 1fr; + opacity: 1; +} + +.sidebar-recent-sessions { + /* min-height:0 + overflow:hidden let the grid 0fr/1fr track clip cleanly. */ + min-height: 0; + min-width: 0; + overflow: visible; + display: flex; + flex-direction: column; + gap: 1px; + margin-bottom: 2px; +} + +.sidebar-recent-section { + min-width: 0; + display: flex; + flex-direction: column; +} + +.sidebar-recent-section-toggle { + width: 100%; + min-width: 0; + display: flex; + align-items: center; + gap: 8px; + margin: 8px 0 3px; + padding: 4px 14px; + border: none; + border-radius: var(--radius-md); + background: none; + color: var(--text-muted); + cursor: pointer; + font-family: var(--font-sans); + font-size: 11px; + font-weight: 500; + text-align: left; + transition: + background var(--transition), + color var(--transition); +} + +.sidebar-recent-section-toggle:hover { + color: var(--text-secondary); +} + +.sidebar-recent-section-toggle svg { + flex-shrink: 0; +} + +.sidebar-recent-section-toggle span { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.sidebar-recent-disclosure-icon { + margin-left: auto; + color: var(--text-muted); +} + +.sidebar-recent-collapse { + display: grid; + grid-template-rows: 0fr; + opacity: 0; + transition: + grid-template-rows 180ms ease, + opacity 180ms ease; +} + +.sidebar-recent-collapse.expanded { + grid-template-rows: 1fr; + opacity: 1; +} + +.sidebar-recent-collapse-inner { + min-height: 0; + min-width: 0; + overflow: hidden; + display: flex; + flex-direction: column; + gap: 1px; +} + +.sidebar-recent-project { + display: flex; + flex-direction: column; + gap: 1px; + min-width: 0; +} + +.sidebar-recent-project-heading { + width: 100%; + display: flex; + align-items: center; + gap: 7px; + min-width: 0; + padding: 6px 14px; + border: none; + border-radius: var(--radius-md); + background: none; + + cursor: pointer; + font-family: var(--font-sans); + font-size: 12px; + font-weight: 500; + text-align: left; + transition: + background var(--transition), + color var(--transition); +} + +.sidebar-recent-project-heading:hover { + background: var(--bg-tertiary); +} + +.sidebar-recent-project-heading svg { + flex-shrink: 0; +} + +.sidebar-recent-project-heading span { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +@media (prefers-reduced-motion: reduce) { + .sidebar-recent-sessions-wrap, + .sidebar-recent-collapse { + transition: none; + } +} + +.sidebar-recent-session { + display: flex; + align-items: center; + gap: 9px; + width: 100%; + min-width: 0; + padding: 6px 10px; + border: none; + background: none; + border-radius: var(--radius-md); + cursor: pointer; + text-align: left; + font-family: var(--font-sans); + font-size: 12px; + + transition: all var(--transition); +} + +.sidebar-recent-session.project-child { + padding-left: 28px; +} + +.sidebar-recent-session-dot { + flex-shrink: 0; + color: var(--text-muted); +} + +.sidebar-recent-session-dot--active { + color: var(--accent-text, var(--accent)); +} + +.sidebar-recent-session-dot--loading { + color: var(--accent-text, var(--accent)); + animation: spin 0.8s linear infinite; +} + +.sidebar-recent-session:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.sidebar-recent-session.active { + /* Active state is shown by the bullet + text color only — no filled + background (keeps the list visually quiet). */ + color: var(--accent-text); +} + +.sidebar-recent-session-title { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.sidebar-recent-empty { + padding: 6px 10px; + color: var(--text-muted); + font-size: 12px; +} + +.sidebar-recent-loading { + display: flex; + align-items: center; + gap: 9px; + padding: 6px 10px; + margin-top: 1px; + font-family: var(--font-sans); + font-size: 12px; + font-weight: 500; + color: var(--text-muted); +} + +/* ── Session row "options" affordance (ChatGPT-style …) ── */ +.sidebar-recent-session { + position: relative; +} + +.sidebar-recent-session-options { + position: absolute; + right: 4px; + top: 50%; + transform: translateY(-50%); + display: flex; + align-items: center; + justify-content: center; + width: 24px; + height: 24px; + padding: 0; + border: none; + border-radius: var(--radius-sm, 6px); + background: var(--bg-tertiary); + color: var(--text-secondary); + cursor: pointer; + opacity: 0; + transition: + opacity var(--transition), + background var(--transition), + color var(--transition); +} + +/* Reveal the … on hover/focus of the row, or while its menu is open. */ +.sidebar-recent-session:hover .sidebar-recent-session-options, +.sidebar-recent-session:focus-within .sidebar-recent-session-options, +.sidebar-recent-session.menu-open .sidebar-recent-session-options { + opacity: 1; +} + +.sidebar-recent-session-options:hover { + background: var(--bg-elevated); + color: var(--text-primary); +} + +/* Keep the title clear of the … control when it is visible. */ +.sidebar-recent-session:hover .sidebar-recent-session-title, +.sidebar-recent-session:focus-within .sidebar-recent-session-title, +.sidebar-recent-session.menu-open .sidebar-recent-session-title { + padding-right: 24px; +} + +.sidebar-recent-session.menu-open { + background: var(--bg-tertiary); +} + +.sidebar-recent-session.editing { + padding: 3px 10px; +} + +.sidebar-recent-session-rename { + flex: 1 1 auto; + min-width: 0; + padding: 4px 6px; + border: 1px solid var(--accent, var(--border-bright)); + border-radius: var(--radius-sm, 6px); + background: var(--bg-primary, var(--bg-secondary)); + color: var(--text-primary); + font-family: var(--font-sans); + font-size: 12px; + outline: none; +} + +/* ── Floating session context menu (portal to body) ── */ +.sidebar-session-menu { + position: fixed; + z-index: 1000; + display: flex; + flex-direction: column; + padding: 4px; + border: 1px solid var(--border-bright); + border-radius: var(--radius-md); + background: var(--bg-elevated); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.36); + font-family: var(--font-sans); + /* Open animation scales from the anchored top-left corner. */ + transform-origin: top left; + will-change: transform, opacity; +} + +/* Height-animating wrapper (motion `layout`) that clips the cross-sliding + pages so neither spills past the rounded menu edge during the swap. */ +.sidebar-session-menu-body { + position: relative; + min-width: 0; + overflow: hidden; +} + +.sidebar-session-menu-page { + display: flex; + flex-direction: column; + min-width: 0; +} + +/* While a page is exiting (popLayout pins it absolutely), it must overlay the + incoming page at full width rather than collapse. */ +.sidebar-session-menu-body > .sidebar-session-menu-page { + width: 100%; +} + +.sidebar-session-menu-item { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + padding: 7px 10px; + border: none; + border-radius: var(--radius-sm, 6px); + background: none; + color: var(--text-primary); + cursor: pointer; + font-family: inherit; + font-size: 13px; + text-align: left; + transition: + background var(--transition), + color var(--transition); +} + +.sidebar-session-menu-item svg { + flex-shrink: 0; + color: var(--text-secondary); +} + +.sidebar-session-menu-item span { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.sidebar-session-menu-item:hover { + background: var(--bg-tertiary); +} + +.sidebar-session-menu-item--danger { + color: var(--error); +} + +.sidebar-session-menu-item--danger svg { + color: var(--error); +} + +.sidebar-session-menu-chevron { + flex: 0 0 auto !important; + margin-left: auto; +} + +.sidebar-session-menu-divider { + height: 1px; + margin: 4px 6px; + background: var(--border-bright); +} + +.sidebar-session-menu-back { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 7px 10px; + border: none; + border-radius: var(--radius-sm, 6px); + background: none; + color: var(--text-secondary); + cursor: pointer; + font-family: inherit; + font-size: 12px; + font-weight: 500; + text-align: left; +} + +.sidebar-session-menu-back:hover { + color: var(--text-primary); +} + +.sidebar-session-menu-back-icon { + transform: rotate(180deg); +} + +.sidebar-session-menu-scroll { + display: flex; + flex-direction: column; + max-height: 220px; + overflow-y: auto; +} + +.sidebar-session-menu-project-name { + flex: 1 1 auto; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.sidebar-session-menu-check { + flex: 0 0 auto !important; + margin-left: auto; + color: var(--accent-text, var(--accent)) !important; +} + +.sidebar-session-menu-empty { + padding: 8px 10px; + color: var(--text-muted); + font-size: 12px; +} + +/* ── Sidebar delete confirmation (portal to body) ── */ +.sidebar-session-delete-overlay { + position: fixed; + inset: 0; + z-index: 1100; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0, 0, 0, 0.45); +} + +.sidebar-session-delete-modal { + width: min(360px, calc(100vw - 32px)); + padding: 18px; + border: 1px solid var(--border-bright); + border-radius: var(--radius-lg); + background: var(--bg-secondary); + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4); +} + +.sidebar-session-delete-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + margin-bottom: 10px; +} + +.sidebar-session-delete-header h3 { + margin: 0; + font-size: 15px; + font-weight: 600; + color: var(--text-primary); +} + +.sidebar-session-delete-close { + display: flex; + align-items: center; + justify-content: center; +} + +.sidebar-session-delete-body { + margin: 0 0 18px; + color: var(--text-secondary); + font-size: 13px; + line-height: 1.5; +} + +.sidebar-session-delete-footer { + display: flex; + justify-content: flex-end; + gap: 8px; +} + +/* Full-list sessions modal (sidebar "Show more" / Cmd+K). Reuses + .models-modal-overlay for the backdrop; sized to 80% of the viewport. */ +.sessions-modal { + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-lg); + width: 80vw; + height: 80vh; + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4); + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* ── Profile avatar (shared: nav, active bar, manage page) ── */ +.profile-avatar { + flex-shrink: 0; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + overflow: hidden; + line-height: 1; +} +.profile-avatar-img { + object-fit: cover; +} +.profile-avatar-letter { + color: #fff; + font-weight: 700; +} +.profile-avatar-logo { + background: var(--bg-elevated); +} + +/* ── Active sessions bar (concurrent / multi-agent runs) ── */ +.active-sessions-bar { + display: flex; + /* Tabs stretch to the full strip height so the active tab's fill reaches the + bottom edge and merges seamlessly into the content below. */ + align-items: stretch; + gap: 0; + /* This strip IS the window's title-bar drag region (browser-style): empty + space drags the window. It sits above the global .drag-region (z 1000) so + it owns the top band of the content column; the chips opt back out of + dragging (no-drag) so they stay clickable. Always present — with no extra + tabs it's simply an empty drag area, costing no dedicated bar height. */ + position: relative; + z-index: 1001; + -webkit-app-region: drag; + min-height: 34px; + padding: 0 8px 0 12px; + overflow-x: auto; + /* Darker toolbar shade so the lighter active tab (--bg-primary) reads as + part of the page below it. */ + background: var(--bg-secondary); + flex-shrink: 0; + /* Scrollable but with no visible scrollbar. */ + scrollbar-width: none; + -ms-overflow-style: none; +} + +.active-sessions-bar::-webkit-scrollbar { + display: none; +} + +/* Flat tab: no border or fill, just text. Adjacent tabs are separated by a thin + vertical divider (::before); the active tab fills with the page colour and + rounds its top so it looks docked to the content beneath. */ +.active-session-chip { + display: flex; + align-items: center; + gap: 6px; + max-width: 160px; + flex-shrink: 0; + /* Opt out of the strip's drag region so the chip is clickable. */ + -webkit-app-region: no-drag; + position: relative; + padding: 0 12px; + border: none; + border-radius: 8px 8px 0 0; + background: transparent; + color: var(--text-secondary); + cursor: pointer; + font-family: var(--font-sans); + font-size: 12px; + white-space: nowrap; + transition: + background var(--transition), + color var(--transition); +} + +/* Divider between two adjacent tabs (drawn on the right tab's left edge). */ +.active-session-chip + .active-session-chip::before { + content: ""; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 1px; + height: 16px; + background: var(--border-bright); +} + +.active-session-chip:hover { + color: var(--text-primary); + background: rgba(255, 255, 255, 0.05); +} + +.active-session-chip.active { + /* Same colour as the content area below → the tab merges into the page. */ + background: var(--bg-primary); + color: var(--text-primary); +} + +/* Drop the dividers flanking the active tab so it reads as one docked panel. */ +.active-session-chip.active::before, +.active-session-chip.active + .active-session-chip::before { + opacity: 0; +} + +/* Loading state reuses an avatar-sized circle filled with the profile colour + (set inline) so the spinner reads as "this agent is working". */ +.active-session-chip-avatar { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 18px; + height: 18px; + border-radius: 50%; + line-height: 1; +} + +.active-session-chip-spinner { + flex-shrink: 0; + /* Sits on the profile's colour-filled avatar circle. */ + color: #fff; + animation: spin 0.8s linear infinite; +} + +.active-session-chip-title { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0.7; +} + +/* The focused tab's label reads at full strength. */ +.active-session-chip.active .active-session-chip-title, +.active-session-chip:hover .active-session-chip-title { + opacity: 1; +} + +.active-session-chip-close { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + padding: 0; + border: none; + border-radius: 4px; + background: none; + color: inherit; + cursor: pointer; + /* Revealed on hover / for the active tab to keep idle chips clean. */ + opacity: 0; + transition: opacity var(--transition); +} +.active-session-chip:hover .active-session-chip-close, +.active-session-chip.active .active-session-chip-close, +.active-session-chip-close:focus-visible { + opacity: 0.7; +} +.active-session-chip-close:hover { + opacity: 1; + background: var(--bg-elevated); +} + +/* Browser-style new-tab button at the end of the strip. Sits above the drag + region so it stays clickable. */ +.active-session-new { + -webkit-app-region: no-drag; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + width: 28px; + height: 28px; + margin-left: 4px; + margin-top: 4px; + padding: 0; + border: none; + border-radius: 6px; + background: none; + color: var(--text-secondary); + cursor: pointer; + transition: + background var(--transition), + color var(--transition); +} +.active-session-new:hover { + background: var(--bg-elevated); + color: var(--text-primary); +} + +/* Sidebar footer with theme switcher */ +.sidebar-footer { + padding: 12px; + display: flex; + flex-direction: column; + gap: 8px; +} + +.sidebar-collapsed .sidebar-footer { + align-items: center; + margin-top: auto; + padding: 10px; +} + +.sidebar-footer-actions { + display: grid; + grid-template-columns: repeat(5, minmax(0, 1fr)); + gap: 4px; + width: 100%; +} + +.sidebar-footer-action { + position: relative; + width: 100%; + height: 34px; + display: inline-flex; + align-items: center; + justify-content: center; + border: none; + border-radius: var(--radius-md); + background: transparent; + color: var(--text-muted); + cursor: pointer; + transition: + background var(--transition), + color var(--transition); +} + +.sidebar-footer-action:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.sidebar-footer-action.active { + background: var(--accent-subtle); + color: var(--accent-text); +} + +.sidebar-footer-action svg { + flex-shrink: 0; +} + +.sidebar-footer-action[data-tooltip]::after { + content: attr(data-tooltip); + position: absolute; + left: 50%; + top: -8px; + z-index: 60; + transform: translate(-50%, -100%); + pointer-events: none; + opacity: 0; + white-space: nowrap; + padding: 5px 7px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--bg-elevated); + color: var(--text-primary); + box-shadow: var(--shadow-md); + font-size: 11px; + font-weight: 500; + line-height: 1; + transition: opacity 120ms ease; +} + +.sidebar-footer-action[data-tooltip]:first-child::after { + left: 0; + transform: translateY(-100%); +} + +.sidebar-footer-action[data-tooltip]:last-child::after { + left: auto; + right: 0; + transform: translateY(-100%); +} + +.sidebar-footer-action[data-tooltip]:hover::after, +.sidebar-footer-action[data-tooltip]:focus-visible::after { + opacity: 1; +} + +.sidebar-collapsed .sidebar-footer-actions { + grid-template-columns: 40px; + justify-content: center; + gap: 2px; +} + +.sidebar-collapsed .sidebar-footer-action { + width: 40px; + height: 40px; + border-radius: var(--radius-md); +} + +.sidebar-collapsed .sidebar-footer-action svg { + width: 16px; + height: 16px; +} + +.sidebar-collapsed .sidebar-footer-action[data-tooltip]::after, +.sidebar-collapsed .sidebar-footer-action[data-tooltip]:first-child::after, +.sidebar-collapsed .sidebar-footer-action[data-tooltip]:last-child::after { + left: calc(100% + 8px); + right: auto; + top: 50%; + transform: translateY(-50%); +} + +/* ── Profile switcher (sidebar footer) ──────────────────── */ +.profile-switcher { + position: relative; + width: 100%; +} + +.profile-switcher.compact { + width: 40px; +} + +.profile-switcher-trigger { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 8px 10px; + background: none; + border: 1px solid transparent; + border-radius: var(--radius-md); + color: var(--text-secondary); + font-size: 13px; + font-weight: 500; + font-family: var(--font-sans); + cursor: pointer; + text-align: left; + transition: all var(--transition); +} + +.profile-switcher.compact .profile-switcher-trigger { + width: 40px; + height: 40px; + justify-content: center; + gap: 0; + padding: 0; +} + +.profile-switcher-trigger:hover, +.profile-switcher-trigger.open { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.profile-switcher-name { + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.profile-switcher-chevron { + flex-shrink: 0; + color: var(--text-muted); + transition: transform var(--transition); +} + +.profile-switcher-trigger.open .profile-switcher-chevron { + transform: rotate(180deg); +} + +/* Profile icon — green when that profile's gateway is running. */ +.profile-icon { + flex-shrink: 0; + color: var(--text-muted); +} + +.profile-icon.running { + color: var(--success, #22c55e); +} + +/* Popover menu, anchored above the trigger. */ +.profile-menu { + position: absolute; + bottom: calc(100% + 8px); + left: 0; + right: 0; + min-width: 260px; + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-lg); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.4); + padding: 6px; + z-index: 200; + animation: profileMenuIn 0.12s ease; +} + +.profile-switcher.compact .profile-menu { + left: calc(100% + 8px); + right: auto; + bottom: 0; +} + +@keyframes profileMenuIn { + from { + opacity: 0; + transform: translateY(4px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.profile-menu-active-section { + display: flex; + align-items: center; + gap: 12px; + width: 100%; + padding: 12px 10px 14px; + border: none; + border-radius: var(--radius-md); + background: transparent; + color: inherit; + font: inherit; + text-align: left; + cursor: pointer; + transition: background var(--transition); +} + +.profile-menu-active-section:hover { + background: var(--bg-tertiary); +} + +.profile-menu-avatar { + position: relative; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; +} + +.profile-menu-avatar-dot { + position: absolute; + bottom: 1px; + right: 1px; + width: 10px; + height: 10px; + border-radius: 50%; + background: var(--success); + border: 2px solid var(--bg-secondary); +} + +.profile-menu-active-section .profile-menu-name { + font-size: 14px; + font-weight: 600; +} + +.profile-menu-active-section .profile-menu-meta { + font-size: 12px; +} + +.profile-menu-divider { + height: 1px; + background: var(--border); + margin: 0 4px; +} + +.profile-menu-list { + display: flex; + flex-direction: column; + gap: 2px; + max-height: 260px; + overflow-y: auto; + padding-top: 4px; +} + +.profile-menu-item { + display: flex; + align-items: center; + gap: 10px; + width: 100%; + padding: 8px 10px; + background: none; + border: none; + border-radius: var(--radius-md); + cursor: pointer; + text-align: left; + font-family: var(--font-sans); + transition: background var(--transition); +} + +.profile-menu-item:hover { + background: var(--bg-tertiary); +} + +.profile-menu-item.active { + background: var(--accent-subtle); +} + +.profile-menu-info { + flex: 1; + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; +} + +.profile-menu-name { + display: flex; + align-items: center; + gap: 6px; + font-size: 13px; + font-weight: 600; + color: var(--text-primary); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.profile-menu-tag { + font-size: 11px; + font-weight: 500; + color: var(--text-muted); +} + +.profile-menu-gateway { + flex-shrink: 0; + margin-left: auto; + width: 8px; + height: 8px; + border-radius: 50%; + background: var(--text-muted); + opacity: 0.4; +} + +.profile-menu-gateway.active { + background: var(--success); + opacity: 1; +} + +.profile-menu-meta { + font-size: 11px; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.profile-menu-check { + flex-shrink: 0; + color: var(--accent-text, var(--accent)); +} + +.profile-menu-manage { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + margin-top: 6px; + padding: 9px 10px; + background: none; + border: none; + border-top: 1px solid var(--border); + border-radius: 0 0 var(--radius-md) var(--radius-md); + color: var(--text-secondary); + font-size: 13px; + font-weight: 500; + font-family: var(--font-sans); + cursor: pointer; + text-align: left; + transition: all var(--transition); +} + +.profile-menu-manage:hover { + background: var(--bg-tertiary); + color: var(--text-primary); +} + +.profile-menu-manage svg { + flex-shrink: 0; + color: var(--text-muted); +} + +.sidebar-update-btn { + display: flex; + align-items: center; + gap: 6px; + width: 100%; + padding: 6px 10px; + margin-bottom: 8px; + background: var(--accent); + border: none; + border-radius: 6px; + color: #fff; + font-size: 11px; + font-weight: 600; + cursor: pointer; + transition: background var(--transition); +} + +.sidebar-collapsed .sidebar-update-btn { + width: 40px; + height: 40px; + justify-content: center; + padding: 0; + margin-bottom: 0; +} + +.sidebar-collapsed .sidebar-update-btn span { + display: none; +} + +.sidebar-update-btn:hover { + background: var(--accent-hover); +} + +.sidebar-update-btn:disabled { + cursor: default; + opacity: 0.75; +} + +.sidebar-update-btn:disabled:hover { + background: var(--accent); +} + +.sidebar-update-btn.error { + background: var(--error); +} + +.sidebar-update-btn.error:hover { + background: var(--error); +} + +/* Theme Switcher */ +.theme-switcher { + display: flex; + background: var(--bg-tertiary); + border-radius: var(--radius-sm); + padding: 2px; + gap: 2px; +} + +.theme-switcher-btn { + flex: 1; + display: flex; + align-items: center; + justify-content: center; + padding: 5px 0; + border: none; + background: transparent; + border-radius: 4px; + cursor: pointer; + color: var(--text-muted); + transition: all var(--transition); +} + +.theme-switcher-btn:hover { + color: var(--text-secondary); +} + +.theme-switcher-btn.active { + background: var(--bg-elevated); + color: var(--text-primary); +} + +.content { + flex: 1; + overflow: hidden; + display: flex; + flex-direction: column; +} + +/* ======================================================================== + CHAT + ======================================================================== */ +.chat-container { + display: flex; + flex-direction: column; + height: 100%; + position: relative; +} + +/* Chat body: holds messages and worktree panel side by side */ +.chat-body { + display: flex; + flex: 1; + overflow: hidden; +} + +/* Worktree panel - file explorer on the right */ +.worktree-panel { + width: 240px; + flex-shrink: 0; + background: var(--bg-secondary); + border-left: 1px solid var(--border); + display: flex; + flex-direction: column; + overflow: hidden; + position: relative; +} + +/* Drag handle on the left edge to free-resize the context folder tree. */ +.worktree-resize-handle { + position: absolute; + left: -3px; + top: 0; + width: 7px; + height: 100%; + cursor: col-resize; + z-index: 20; + background: transparent; + transition: background var(--transition); +} + +.worktree-resize-handle:hover, +.worktree-resize-handle-active { + background: color-mix(in srgb, var(--accent-text) 45%, transparent); +} + +.worktree-header { + display: flex; + align-items: center; + gap: 8px; + padding: 7px 12px; + border-bottom: 1px solid var(--border); + background: var(--bg-tertiary); + flex-shrink: 0; +} + +.worktree-header-icon { + color: var(--accent-text); + flex-shrink: 0; +} + +.worktree-header-title { + flex: 1; + min-width: 0; + font-size: 13px; + font-weight: 600; + color: var(--text-primary); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.worktree-header-action { + width: 26px; + height: 26px; + flex-shrink: 0; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0; + color: var(--accent-text); + opacity: 1; + background: transparent; + border: 0; + border-radius: 6px; +} + +.worktree-header-action:hover { + opacity: 1; + color: var(--accent-text); + background: color-mix(in srgb, var(--accent-text) 10%, transparent); +} + +.worktree-header-action svg { + width: 18px; + height: 18px; + stroke-width: 2.2; +} + +.worktree-terminal-error { + padding: 8px 12px; + font-size: 12px; + line-height: 1.4; + color: var(--error); + border-top: 1px solid var(--border); + background: var(--error-bg); +} + +.worktree-content { + flex: 1; + overflow-y: auto; + padding: 8px 0; +} + +.worktree-row { + display: flex; + align-items: center; + gap: 4px; + padding: 4px 8px; + cursor: pointer; + transition: background-color var(--transition); + user-select: none; +} + +.worktree-row:hover { + background: var(--bg-hover); +} + +.worktree-chevron { + display: flex; + align-items: center; + justify-content: center; + width: 14px; + height: 14px; + color: var(--text-muted); + flex-shrink: 0; +} + +.worktree-chevron-placeholder { + display: inline-block; + width: 14px; + height: 14px; + flex-shrink: 0; +} + +.worktree-icon { + flex-shrink: 0; +} + +.worktree-folder-icon { + color: rgba(255, 255, 255, 0.56); +} + +.worktree-file-icon { + color: var(--text-muted); +} + +.worktree-name { + font-size: 12px; + color: var(--text-primary); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.worktree-loading, +.worktree-empty { + font-size: 12px; + color: var(--text-muted); + padding: 8px 14px; +} + +.worktree-error { + font-size: 12px; + color: var(--error); + padding: 8px 14px; +} + +/* File viewer modal */ +.file-viewer-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + padding: 40px; +} + +.file-viewer-modal { + background: #1e1e1e; + border: 1px solid #333; + border-radius: 8px; + width: 100%; + max-width: 900px; + height: 85vh; + display: flex; + flex-direction: column; + overflow: hidden; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.6); +} + +.file-viewer-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 16px; + border-bottom: 1px solid #333; + background: #252526; + flex-shrink: 0; +} + +.file-viewer-title { + display: flex; + align-items: center; + gap: 10px; + min-width: 0; +} + +.file-viewer-icon { + color: #858585; + flex-shrink: 0; +} + +.file-viewer-filename { + font-size: 13px; + font-weight: 500; + color: #cccccc; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-family: var(--font-mono); +} + +.file-viewer-size { + font-size: 11px; + color: #858585; + margin-left: 8px; + font-family: var(--font-mono); +} + +.file-viewer-actions { + display: flex; + align-items: center; + gap: 4px; +} + +.file-viewer-open { + opacity: 0.8; + padding: 6px 10px; + color: #cccccc; + display: flex; + align-items: center; + gap: 6px; + font-size: 12px; +} + +.file-viewer-open:hover { + opacity: 1; + background: #3c3c3c; + border-radius: 4px; +} + +.file-viewer-open-text { + font-size: 12px; + font-weight: 500; +} + +.file-viewer-close { + opacity: 0.7; + padding: 6px; + color: #cccccc; +} + +.file-viewer-close:hover { + opacity: 1; + background: #3c3c3c; + border-radius: 4px; +} + +/* Binary file placeholder */ +.file-viewer-binary { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; + gap: 12px; + color: #858585; +} + +.file-viewer-binary-icon { + font-size: 48px; + opacity: 0.5; +} + +.file-viewer-binary-text { + font-size: 14px; + font-weight: 500; + color: #cccccc; +} + +.file-viewer-binary-hint { + font-size: 12px; + color: #858585; +} + +/* Image viewer styles */ +.file-viewer-image-container { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + padding: 20px; + background: #1e1e1e; + overflow: auto; +} + +.file-viewer-image { + max-width: 100%; + max-height: 100%; + object-fit: contain; + border-radius: 4px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5); +} + +.file-viewer-content { + flex: 1; + overflow: auto; + background: #1e1e1e; +} + +.file-viewer-loading, +.file-viewer-error { + display: flex; + align-items: center; + justify-content: center; + height: 100%; + font-size: 14px; + color: #858585; +} + +.file-viewer-error { + color: #f48771; +} + +.file-viewer-truncated { + padding: 10px 16px; + background: rgba(255, 204, 0, 0.1); + border-bottom: 1px solid #333; + font-size: 12px; + color: #cccccc; + font-family: var(--font-mono); +} + +/* VS Code-like code viewer with line numbers */ +.file-viewer-code { + margin: 0; + padding: 0; + background: #1e1e1e; + font-family: var(--font-mono); + font-size: 13px; + line-height: 1.5; + display: flex; +} + +.file-viewer-code code { + display: block; + padding: 16px; + padding-left: 16px; + background: #1e1e1e; + color: #d4d4d4; + white-space: pre; + overflow-x: auto; + tab-size: 2; +} + +/* Custom scrollbar for file viewer */ +.file-viewer-content::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +.file-viewer-content::-webkit-scrollbar-track { + background: #1e1e1e; +} + +.file-viewer-content::-webkit-scrollbar-thumb { + background: #424242; + border-radius: 5px; +} + +.file-viewer-content::-webkit-scrollbar-thumb:hover { + background: #4f4f4f; +} + +/* Override highlight.js styles for VS Code dark theme look */ +.file-viewer-modal .hljs { + background: #1e1e1e; + color: #d4d4d4; +} + +/* Keyword - blue */ +.file-viewer-modal .hljs-keyword, +.file-viewer-modal .hljs-selector-tag, +.file-viewer-modal .hljs-subst { + color: #569cd6; + font-weight: normal; +} + +/* String - orange/red */ +.file-viewer-modal .hljs-string, +.file-viewer-modal .hljs-regexp, +.file-viewer-modal .hljs-addition, +.file-viewer-modal .hljs-attribute { + color: #ce9178; +} + +/* Number - light green */ +.file-viewer-modal .hljs-number, +.file-viewer-modal .hljs-literal { + color: #b5cea8; +} + +/* Function/method - yellow */ +.file-viewer-modal .hljs-title, +.file-viewer-modal .hljs-title.class_, +.file-viewer-modal .hljs-title.function_, +.file-viewer-modal .hljs-built_in { + color: #dcdcaa; +} + +/* Variable - light blue */ +.file-viewer-modal .hljs-variable, +.file-viewer-modal .hljs-template-variable, +.file-viewer-modal .hljs-params { + color: #9cdcfe; +} + +/* Property - light blue */ +.file-viewer-modal .hljs-property, +.file-viewer-modal .hljs-attr { + color: #9cdcfe; +} + +/* Comment - green */ +.file-viewer-modal .hljs-comment, +.file-viewer-modal .hljs-quote { + color: #6a9955; + font-style: italic; +} + +/* Operator - light */ +.file-viewer-modal .hljs-operator, +.file-viewer-modal .hljs-punctuation { + color: #d4d4d4; +} + +/* Tag (HTML/XML) - blue */ +.file-viewer-modal .hljs-tag { + color: #569cd6; +} + +/* Tag name - red */ +.file-viewer-modal .hljs-name { + color: #569cd6; +} + +/* Tag attribute - light blue */ +.file-viewer-modal .hljs-attr { + color: #9cdcfe; +} + +/* CSS property - light blue */ +.file-viewer-modal .hljs-selector-id, +.file-viewer-modal .hljs-selector-class, +.file-viewer-modal .hljs-selector-attr, +.file-viewer-modal .hljs-selector-pseudo { + color: #d7ba7d; +} + +/* Type/Class - greenish */ +.file-viewer-modal .hljs-type, +.file-viewer-modal .hljs-class_ { + color: #4ec9b0; +} + +/* Meta - gray */ +.file-viewer-modal .hljs-meta { + color: #808080; +} + +/* Emphasis - bold */ +.file-viewer-modal .hljs-emphasis { + font-style: italic; +} + +/* Strong - bold */ +.file-viewer-modal .hljs-strong { + font-weight: bold; +} + +/* Built-in constant */ +.file-viewer-modal .hljs-built_in, +.file-viewer-modal .hljs-builtin-name { + color: #dcdcaa; +} + +/* Clickable file rows in worktree */ +.worktree-row-file { + cursor: pointer; +} + +.worktree-row-file:hover .worktree-name { + color: var(--accent-text); +} + +/* File icon wrapper for react-file-icon */ +.worktree-file-icon-wrapper { + width: 18px; + height: 18px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + color: rgba(255, 255, 255, 0.56); +} + +.worktree-file-icon-wrapper svg { + width: 100%; + height: 100%; +} + +.worktree-file-icon-wrapper svg * { + fill: currentColor !important; +} + +.worktree-file-icon-wrapper svg [fill="none"], +.worktree-file-icon-wrapper svg [style*="fill:none"] { + fill: none !important; +} + +.worktree-file-icon-wrapper svg [stroke]:not([stroke="none"]), +.worktree-file-icon-wrapper svg [style*="stroke:"] { + stroke: currentColor !important; +} + +.folder-picker-overlay { + position: fixed; + inset: 0; + z-index: 1200; + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + background: rgba(0, 0, 0, 0.54); +} + +.folder-picker-modal { + display: flex; + width: min(680px, calc(100vw - 32px)); + max-height: min(620px, calc(100vh - 48px)); + min-height: 420px; + flex-direction: column; + overflow: hidden; + border: 1px solid var(--border); + border-radius: 8px; + background: var(--surface); + color: var(--text-primary); + box-shadow: 0 20px 70px rgba(0, 0, 0, 0.4); +} + +.folder-picker-header, +.folder-picker-footer { + display: flex; + flex-shrink: 0; + align-items: center; + gap: 10px; + padding: 10px 12px; + border-bottom: 1px solid var(--border); +} + +.folder-picker-footer { + justify-content: flex-end; + border-top: 1px solid var(--border); + border-bottom: 0; +} + +.folder-picker-title { + display: flex; + min-width: 0; + flex: 1; + align-items: center; + gap: 8px; + font-size: 13px; + font-weight: 600; +} + +.folder-picker-title svg { + color: var(--accent-text); +} + +.folder-picker-path-row { + display: flex; + flex-shrink: 0; + align-items: center; + gap: 8px; + padding: 10px 12px 8px; +} + +.folder-picker-input { + min-width: 0; + flex: 1; + height: 30px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--surface-elevated); + color: var(--text-primary); + font-family: var(--font-mono); + font-size: 12px; + outline: none; + padding: 0 9px; +} + +.folder-picker-input:focus { + border-color: var(--accent-text); + box-shadow: 0 0 0 2px color-mix(in srgb, var(--accent-text) 20%, transparent); +} + +.folder-picker-icon-btn { + display: inline-flex; + width: 28px; + height: 28px; + flex-shrink: 0; + align-items: center; + justify-content: center; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--text-secondary); + cursor: pointer; +} + +.folder-picker-icon-btn:hover:not(:disabled), +.folder-picker-icon-btn:focus-visible { + background: var(--surface-hover); + color: var(--text-primary); + outline: none; +} + +.folder-picker-icon-btn:disabled { + cursor: default; + opacity: 0.35; +} + +.folder-picker-breadcrumbs { + display: flex; + flex-shrink: 0; + gap: 4px; + overflow-x: auto; + padding: 0 12px 10px; + scrollbar-width: thin; +} + +.folder-picker-crumb { + display: inline-flex; + max-width: 180px; + flex-shrink: 0; + align-items: center; + gap: 4px; + border: 0; + border-radius: 5px; + background: transparent; + color: var(--text-secondary); + cursor: pointer; + font-size: 12px; + padding: 4px 6px; +} + +.folder-picker-crumb span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.folder-picker-crumb:hover, +.folder-picker-crumb:focus-visible { + background: var(--surface-hover); + color: var(--text-primary); + outline: none; +} + +.folder-picker-list { + min-height: 0; + flex: 1; + overflow-y: auto; + padding: 4px 8px 8px; + scrollbar-width: thin; +} + +.folder-picker-list:focus-visible { + outline: 2px solid color-mix(in srgb, var(--accent-text) 38%, transparent); + outline-offset: -2px; +} + +.folder-picker-row { + display: flex; + width: 100%; + min-width: 0; + align-items: center; + gap: 9px; + border: 0; + border-radius: 6px; + background: transparent; + color: var(--text-primary); + cursor: pointer; + font-size: 13px; + padding: 7px 9px; + text-align: left; +} + +.folder-picker-row svg { + flex-shrink: 0; + color: rgba(255, 255, 255, 0.58); +} + +.folder-picker-row span { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.folder-picker-row:hover, +.folder-picker-row:focus-visible, +.folder-picker-row-active { + background: var(--surface-hover); + outline: none; +} + +.folder-picker-row-active { + color: var(--accent-text); +} + +.folder-picker-state { + display: flex; + min-height: 180px; + align-items: center; + justify-content: center; + gap: 8px; + padding: 16px; + color: var(--text-secondary); + font-size: 13px; + text-align: center; +} + +.folder-picker-loader { + animation: spin 0.9s linear infinite; +} + +/* Worktree toggle button in header */ +.chat-worktree-toggle { + opacity: 0.5; + margin-left: 2px; + transition: + opacity 0.15s, + color 0.15s; +} + +.chat-worktree-toggle:hover { + opacity: 0.8; +} + +.chat-worktree-active { + opacity: 1; + color: var(--accent-text); +} + +.chat-worktree-active:hover { + opacity: 1; +} + +.chat-header { + padding: 14px 24px; + border-bottom: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: space-between; + flex-shrink: 0; +} + +.chat-header-title { + font-size: 15px; + font-weight: 600; + color: var(--text-primary); +} + +.chat-header-actions { + display: flex; + align-items: center; + gap: 4px; +} + +.chat-clear-btn { + opacity: 0.6; +} + +.chat-clear-btn:hover { + opacity: 1; +} + +.chat-fast-wrapper { + position: relative; +} + +.chat-fast-btn { + opacity: 0.5; + transition: + opacity 0.15s, + color 0.15s; +} + +.chat-fast-btn:hover { + opacity: 0.8; +} + +.chat-fast-active { + opacity: 1; + color: #f59e0b; +} + +.chat-fast-active:hover { + opacity: 1; +} + +.chat-fast-popover { + display: none; + position: absolute; + bottom: calc(100% + 8px); + right: 0; + z-index: 100; + width: 220px; + padding: 10px 12px; + background: var(--bg-tertiary, var(--bg-secondary)); + border: 1px solid var(--border); + border-radius: 8px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25); + pointer-events: none; +} + +.chat-fast-popover strong { + display: block; + font-size: 12px; + margin-bottom: 4px; + color: var(--text-primary); +} + +.chat-fast-popover span { + font-size: 11px; + line-height: 1.4; + color: var(--text-secondary); +} + +.chat-fast-wrapper:hover .chat-fast-popover { + display: block; +} + +/* Context folder control (issue #27) */ +.chat-ctxfolder { + display: flex; + align-items: center; +} + +.chat-ctxfolder-btn { + display: flex; + align-items: center; + gap: 5px; + opacity: 0.6; + max-width: 180px; +} + +.chat-ctxfolder-btn:hover { + opacity: 1; +} + +.chat-ctxfolder-set { + opacity: 0.85; +} + +.chat-ctxfolder-name { + font-size: 12px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-ctxfolder-clear { + opacity: 0.45; + padding: 2px; +} + +.chat-ctxfolder-clear:hover { + opacity: 1; +} + +.chat-cost { + color: var(--text-tertiary); +} + +.chat-messages { + flex: 1; + overflow-y: auto; + padding: 24px; + /* Block flow, NOT a flex column. `content-visibility: auto` on the rows + (below) lets the browser skip layout/paint for off-screen messages, which + is what keeps typing fast in long conversations (#748). A flex column + defeats that: it measures every child's intrinsic size to lay the column + out, forcing layout of skipped subtrees and reporting a wrong + `scrollHeight` — which would also break the auto-scroll math in + useChatScroll. Inter-row spacing that the flex `gap` used to provide now + comes from each row's own bottom margin/padding. */ +} + +/* Empty state */ +.chat-empty { + /* The scroll container is block flow now (see .chat-messages), so `flex: 1` + no longer stretches this to fill the height. `min-height: 100%` makes it + fill the container so its own flex centering still works. */ + min-height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 12px; + animation: chatEmptyFadeIn 0.5s ease-out; +} + +@keyframes chatEmptyFadeIn { + from { + opacity: 0; + transform: translateY(12px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.chat-empty-icon { + width: 80px; + height: 80px; + border-radius: 50%; + background: #000; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 4px; +} + +/* The wordmark SVG ships with a black fill; recolour it to white via masking so + it reads on the black circle, regardless of the source artwork's colours. */ +.chat-empty-logo { + width: 52px; + height: 40px; + background-color: #fff; + mask-repeat: no-repeat; + mask-position: center; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + -webkit-mask-position: center; + -webkit-mask-size: contain; +} + +.chat-empty-text { + font-size: 22px; + font-weight: 600; + color: var(--text-primary); +} + +.chat-empty-hint { + font-size: 14px; + color: var(--text-muted); + max-width: 360px; + text-align: center; + line-height: 1.5; +} + +.chat-empty-suggestions { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 8px; + margin-top: 16px; + max-width: 480px; +} + +.chat-suggestion { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 8px 16px; + border-radius: 20px; + border: 1px solid var(--border); + background: var(--bg-secondary); + color: var(--text-secondary); + font-size: 13px; + cursor: pointer; + transition: + background 0.15s ease, + color 0.15s ease, + border-color 0.15s ease; +} + +.chat-suggestion svg { + flex-shrink: 0; +} + +.chat-suggestion:hover { + background: var(--bg-elevated); + color: var(--text-primary); + border-color: var(--accent); +} + +/* Messages */ +.chat-message { + display: flex; + gap: 12px; + width: 100%; + max-width: 85%; + animation: messageIn 0.2s ease; + position: relative; + /* Replaces the old container flex `gap` (now block flow). Also gives the + hover timestamp (.chat-bubble-time, ~15px below the bubble) room *inside* + this box so the paint containment that `content-visibility` implies does + not clip it. */ + padding-bottom: 16px; + /* Skip layout + paint for rows scrolled out of view. This turns the + per-keystroke document reflow from O(all messages) into O(visible rows), + fixing the input lag in long conversations. `auto` for the intrinsic size + means the real measured height is remembered after a row renders once, so + the scrollbar stays accurate; 120px is only the first-paint estimate. */ + content-visibility: auto; + contain-intrinsic-size: auto 120px; +} + +@keyframes messageIn { + from { + opacity: 0; + transform: translateY(4px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.chat-message-user { + /* Right-align in block flow (replaces the flex-column `align-self: flex-end`). + `row-reverse` keeps the bubble on the outer edge with the avatar inside. */ + margin-left: auto; + flex-direction: row-reverse; +} + +/* Agent rows are left-aligned by default in block flow — no rule needed. */ + +/* Continuation rows of a turn (thinking/tool rows + answer that share one + avatar). Pull them closer to the row above so the turn reads as one block + rather than several spaced-out bubbles. */ +.chat-message--grouped { + margin-top: -8px; +} + +.chat-avatar { + width: 28px; + height: 28px; + border-radius: var(--radius-sm); + display: flex; + align-items: center; + justify-content: center; + font-size: 11px; + font-weight: 700; + flex-shrink: 0; +} + +.chat-avatar-agent { + border-radius: 50px; + overflow: hidden; +} + +.chat-avatar-agent img { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; + display: block; +} + +.chat-bubble { + position: relative; + padding: 10px 16px; + border-radius: var(--radius-lg); + font-size: 14px; + line-height: 1.65; + white-space: pre-wrap; + word-wrap: break-word; + overflow-wrap: break-word; + min-width: 0; + max-width: 100%; + overflow-x: auto; + -webkit-user-select: text; + user-select: text; +} + +.chat-bubble-user { + background: var(--user-bubble); + color: var(--user-bubble-text); + border-bottom-right-radius: 4px; +} + +.chat-bubble-agent { + background: var(--agent-bubble); + color: var(--agent-bubble-text); + border-bottom-left-radius: 4px; + /* Agent messages are rendered markdown HTML — preserve structure + via the elements themselves, not literal whitespace. Overrides + .chat-bubble's pre-wrap, which would otherwise turn newlines + between

  1. tags into visible blank lines. */ + white-space: normal; +} + +.chat-bubble-error { + border: 1px solid color-mix(in srgb, var(--error) 35%, transparent); + background: var(--error-bg); +} + +/* Copy button — hidden by default, shown on bubble hover */ +.chat-bubble-actions { + position: absolute; + top: 6px; + right: 8px; + display: flex; + gap: 4px; + opacity: 0; + transition: opacity 0.15s ease; +} + +.chat-bubble:hover .chat-bubble-actions { + opacity: 1; +} + +/* Hover timestamp — sits just below the bubble, revealed on row hover. + Anchored inside .chat-message's bottom padding (not overflowing it): the + `content-visibility` on .chat-message implies paint containment, which would + clip anything spilling past the box, so this sits at bottom:1px within the + 16px padding instead of overflowing at -15px. */ +.chat-bubble-time { + position: absolute; + bottom: 1px; + font-size: 11px; + line-height: 1; + color: var(--text-secondary); + white-space: nowrap; + pointer-events: none; + opacity: 0; + transition: opacity 0.15s ease; +} + +/* Agent rows start after the avatar (28px + 12px gap); user rows are + right-aligned. Anchor the time to the bubble's outer edge accordingly. */ +.chat-message-agent .chat-bubble-time { + left: 40px; +} + +.chat-message-user .chat-bubble-time { + right: 0; +} + +.chat-message:hover .chat-bubble-time { + opacity: 1; +} + +.chat-bubble-copy { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + padding: 0; + background: var(--bg-elevated); + border: 1px solid var(--border-bright); + border-radius: var(--radius-sm); + color: var(--text-secondary); + cursor: pointer; + transition: all var(--transition); +} + +.chat-bubble-copy:hover { + background: var(--bg-hover); + color: var(--text-primary); + border-color: var(--border-focus, var(--accent)); +} + +.chat-error-message { + color: var(--error); + font-weight: 500; + white-space: pre-wrap; +} + +.chat-bubble-agent pre, +.chat-bubble-agent code { + /* Restore preserved whitespace inside code blocks and inline code. */ + white-space: pre-wrap; +} + +.chat-bubble-agent code { + background: var(--code-bg); + padding: 2px 6px; + border-radius: 4px; + font-family: var(--font-mono); + font-size: 13px; +} + +.chat-bubble-agent pre { + background: var(--code-bg); + padding: 12px; + border-radius: var(--radius-sm); + margin: 8px 0; + overflow-x: auto; + font-family: var(--font-mono); + font-size: 13px; + line-height: 1.5; +} + +.chat-bubble-agent pre code { + background: none; + padding: 0; +} + +.chat-code-block { + border-radius: 6px; + overflow: hidden; + margin: 6px 0 !important; +} + +.chat-code-collapsed { + max-height: 180px; + overflow: hidden; + mask-image: linear-gradient(to bottom, black 70%, transparent 100%); + -webkit-mask-image: linear-gradient(to bottom, black 70%, transparent 100%); +} + +.chat-code-expand-btn { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + padding: 8px; + background: var(--code-bg); + border: none; + border-top: 1px solid var(--border); + color: var(--accent-text); + font-size: 11px; + font-weight: 600; + cursor: pointer; + transition: background var(--transition); +} + +.chat-code-expand-btn:hover { + background: var(--bg-hover); +} + +.chat-code-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 4px 12px; + background: var(--code-bg); +} + +.chat-code-lang { + font-size: 11px; + color: var(--text-muted); + font-weight: 600; + text-transform: lowercase; +} + +.chat-code-copy { + background: none; + border: none; + color: var(--text-muted); + font-size: 11px; + cursor: pointer; + padding: 2px 4px; + border-radius: 3px; + display: flex; + align-items: center; + gap: 4px; + transition: color var(--transition); +} + +.chat-code-copy:hover { + color: var(--text-primary); +} + +.chat-code-block + * { + margin-top: 6px !important; +} + +.chat-bubble-agent .chat-code-block pre, +.chat-bubble-agent .chat-code-block div[class*="prism"] { + margin: 0 !important; + padding: 12px !important; + background: var(--code-bg) !important; +} + +.chat-code-block span[class*="token"] { + background: none !important; +} + +/* Diff view */ +.chat-diff-content { + font-family: var(--font-mono); + font-size: 13px; + line-height: 1.5; + padding: 8px 0; + overflow-x: auto; +} + +.chat-diff-line { + padding: 0 12px; + white-space: pre; +} + +.chat-diff-add { + background: rgba(34, 197, 94, 0.12); + color: #4ade80; +} + +.chat-diff-remove { + background: rgba(239, 68, 68, 0.12); + color: #f87171; +} + +.chat-diff-hunk { + color: var(--accent-text); + opacity: 0.7; +} + +/* Approval bar */ +.chat-approval-bar { + display: flex; + gap: 8px; + margin-top: 8px; + margin-left: 42px; +} + +.chat-approval-btn { + padding: 5px 16px; + border: none; + border-radius: 6px; + font-size: 12px; + font-weight: 600; + cursor: pointer; + transition: background var(--transition); +} + +.chat-approve { + background: var(--success); + color: #fff; +} + +.chat-approve:hover { + background: #16a34a; +} + +.chat-deny { + background: var(--bg-elevated); + color: var(--text-secondary); +} + +.chat-deny:hover { + background: var(--bg-hover); +} + +/* Inline clarify card — a mid-turn question rendered in the transcript. */ +.chat-clarify { + margin-top: 8px; + /* Not a .chat-message, so it doesn't carry the row padding-bottom that now + provides inter-row spacing — add the 16px the container's flex gap used + to give it. */ + margin-bottom: 16px; + margin-left: 42px; + padding: 14px 16px; + border: 1px solid var(--border); + border-left: 3px solid var(--accent, #2563eb); + border-radius: 8px; + background: var(--bg-elevated); + display: flex; + flex-direction: column; + gap: 10px; + max-width: 640px; +} + +.chat-clarify-question { + font-size: 13px; + line-height: 1.5; + color: var(--text-primary); + white-space: pre-wrap; + word-break: break-word; +} + +.chat-clarify-choices { + display: flex; + flex-direction: column; + gap: 6px; +} + +.chat-clarify-choice { + text-align: left; + padding: 9px 12px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--bg-base); + color: var(--text-primary); + font-size: 13px; + cursor: pointer; + transition: + background var(--transition), + border-color var(--transition); +} + +.chat-clarify-choice:hover { + border-color: var(--accent, #2563eb); + background: var(--bg-hover); +} + +.chat-clarify-choice:disabled { + opacity: 0.6; + cursor: default; +} + +.chat-clarify-open { + display: flex; + flex-direction: column; + gap: 8px; +} + +.chat-clarify-textarea { + width: 100%; + padding: 9px 11px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--bg-base); + color: var(--text-primary); + font-size: 14px; + font-family: inherit; + resize: vertical; + box-sizing: border-box; +} + +.chat-clarify-textarea:focus { + outline: none; + border-color: var(--accent, #2563eb); +} + +.chat-clarify-send { + align-self: flex-end; + padding: 6px 16px; + border: none; + border-radius: 6px; + background: var(--accent, #2563eb); + color: #fff; + font-size: 12px; + font-weight: 600; + cursor: pointer; +} + +.chat-clarify-send:disabled { + opacity: 0.5; + cursor: default; +} + +.chat-clarify-skip { + align-self: flex-start; + padding: 0; + border: none; + background: transparent; + color: var(--text-secondary); + font-size: 12px; + cursor: pointer; +} + +.chat-clarify-skip:hover { + color: var(--text-primary); + text-decoration: underline; +} + +.chat-clarify--resolved { + opacity: 0.85; +} + +.chat-clarify-answer { + font-size: 13px; + color: var(--text-secondary); + padding: 6px 10px; + border-radius: 6px; + background: var(--bg-base); +} + +.chat-clarify-error { + font-size: 12px; + color: var(--danger, #ef4444); + margin-top: 2px; +} + +/* Override Tailwind preflight spacing inside agent bubbles */ +.chat-bubble-agent p { + margin: 0 0 0.85em !important; + padding: 0 !important; +} +.chat-bubble-agent p:last-child { + margin-bottom: 0 !important; +} +.chat-bubble-agent ul, +.chat-bubble-agent ol { + margin: 0.5em 0 0.75em 1.5em !important; + padding: 0 !important; + list-style: revert !important; +} +.chat-bubble-agent li { + margin: 0 0 2px !important; + padding: 0 !important; +} +.chat-bubble-agent li > p { + margin: 0 !important; +} +.chat-bubble-agent li > ul, +.chat-bubble-agent li > ol { + margin: 2px 0 2px 16px !important; +} +.chat-bubble-agent h1, +.chat-bubble-agent h2, +.chat-bubble-agent h3, +.chat-bubble-agent h4 { + margin: 1em 0 0.5em !important; + padding: 0 !important; + font-weight: 600; +} +.chat-bubble-agent h1:first-child, +.chat-bubble-agent h2:first-child, +.chat-bubble-agent h3:first-child { + margin-top: 0 !important; +} +.chat-bubble-agent blockquote { + margin: 4px 0 !important; + padding: 2px 10px !important; +} +.chat-bubble-agent hr { + margin: 8px 0 !important; + padding: 0 !important; +} +.chat-bubble-agent table { + margin: 6px 0 !important; + padding: 0 !important; +} +.chat-bubble-agent pre { + margin: 6px 0 !important; +} + +.chat-bubble-agent h1 { + font-size: 17px; +} +.chat-bubble-agent h2 { + font-size: 15px; +} +.chat-bubble-agent h3 { + font-size: 14px; +} + +.chat-bubble-agent blockquote { + border-left: 3px solid var(--border-bright); + margin: 4px 0; + padding: 2px 10px; + color: var(--text-secondary); +} + +.chat-bubble-agent a { + color: var(--accent-text); + text-decoration: none; +} + +.chat-bubble-agent a:hover { + text-decoration: underline; +} + +.chat-bubble-agent hr { + border: none; + border-top: 1px solid var(--border); + margin: 8px 0; +} + +.chat-bubble-agent table { + border-collapse: collapse; + margin: 8px 0; + font-size: 13px; + width: 100%; +} + +.chat-bubble-agent th, +.chat-bubble-agent td { + border: 1px solid var(--border-bright); + padding: 6px 10px; + text-align: left; +} + +.chat-bubble-agent th { + font-weight: 600; + background: var(--code-bg); +} + +.chat-bubble-agent pre { + margin: 6px 0; +} + +/* Typing indicator */ +.chat-typing { + display: inline-flex; + gap: 5px; + padding: 4px 0; +} + +.chat-typing-dot { + display: block; + width: 6px; + height: 6px; + background: var(--text-muted); + border-radius: 50%; + animation: typingBounce 1.4s infinite; +} + +.chat-typing-dot:nth-child(2) { + animation-delay: 0.2s; +} + +.chat-typing-dot:nth-child(3) { + animation-delay: 0.4s; +} + +@keyframes typingBounce { + 0%, + 60%, + 100% { + transform: translateY(0); + opacity: 0.4; + } + 30% { + transform: translateY(-4px); + opacity: 1; + } +} + +.chat-queue-indicator { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 4px; + + font-size: 12px; + color: var(--text-secondary); + margin-bottom: 15px; +} + +.chat-queue-icon { + flex-shrink: 0; + color: var(--accent, #8b7cf6); +} + +.chat-queue-single { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* Single-message row lays the icon + text out horizontally. */ +.chat-queue-indicator:not(.chat-queue-collapsible) { + flex-direction: row; + align-items: center; +} + +.chat-queue-toggle { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 0; + background: none; + border: none; + color: var(--text-secondary); + font-size: 12px; + cursor: pointer; +} + +.chat-queue-toggle:hover { + color: var(--text-primary); +} + +.chat-queue-list { + list-style: none; + margin: 0; + padding: 4px 0 0; + width: 100%; + max-height: 140px; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: 2px; +} + +.chat-queue-item { + display: flex; + align-items: center; + gap: 8px; + max-width: 100%; + padding: 3px 8px; + border-radius: var(--radius-sm, 6px); + background: var(--bg-tertiary, rgba(255, 255, 255, 0.04)); + color: var(--text-secondary); +} + +.chat-queue-item-text { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-queue-remove { + flex-shrink: 0; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 2px; + margin-left: auto; + background: none; + border: none; + color: var(--text-muted); + cursor: pointer; + border-radius: var(--radius-sm, 6px); +} + +.chat-queue-remove:hover { + color: var(--text-primary); + background: var(--bg-hover, rgba(255, 255, 255, 0.08)); +} + +/* Input area */ +.chat-input-area { + position: relative; + padding: 12px 24px 16px; + border-top: 1px solid var(--border); + flex-shrink: 0; +} + +.chat-input-wrapper { + display: flex; + flex-direction: column; + align-items: stretch; + gap: 6px; + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-lg); + padding: 10px 10px 8px; + transition: border-color var(--transition); +} + +.chat-input-wrapper:focus-within { + border-color: var(--border-focus); +} + +.chat-input { + width: 100%; + background: none; + border: none; + color: var(--text-primary); + font-size: 14px; + font-family: var(--font-sans); + padding: 4px 6px; + outline: none; + resize: none; + min-height: 20px; + max-height: 120px; + overflow-y: auto; + line-height: 1.4; + box-sizing: border-box; +} + +/* Bottom toolbar row: attach/mic + model/folder pickers, send pushed right. */ +.chat-input-toolbar { + display: flex; + align-items: center; + gap: 4px; +} + +.chat-input-toolbar-spacer { + flex: 1; +} + +/* Thin separator between the icon buttons and the picker chips. */ +.chat-input-toolbar-divider { + width: 1px; + align-self: stretch; + margin: 4px 4px; + background: var(--border-bright); +} + +.chat-input::placeholder { + color: var(--text-muted); +} + +.chat-send-btn { + width: 34px; + height: 34px; + border-radius: var(--radius-sm); + background: var(--accent); + border: none; + color: #fff; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition); + flex-shrink: 0; +} + +.chat-send-btn:hover:not(:disabled) { + background: var(--accent-hover); +} + +.chat-send-btn:disabled { + opacity: 0.25; + cursor: not-allowed; +} + +.chat-stop-btn { + background: var(--error); +} + +.chat-stop-btn:hover { + background: #dc2626; +} + +.chat-btw-btn { + width: 34px; + height: 34px; + border-radius: var(--radius-sm); + background: var(--bg-hover); + border: none; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + font-size: 16px; + transition: background var(--transition); +} + +.chat-btw-btn:hover { + background: var(--bg-active); +} + +/* ── Attachments ────────────────────────────────────── */ + +.chat-attach-btn { + width: 34px; + height: 34px; + border-radius: var(--radius-sm); + background: transparent; + border: none; + color: var(--text-muted); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + transition: + background var(--transition), + color var(--transition); +} + +.chat-attach-btn:hover:not(:disabled) { + background: var(--bg-hover); + color: var(--text-primary); +} + +.chat-attach-btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +/* Voice-input button — shares the attach button's shape. */ +.chat-mic-btn { + width: 34px; + height: 34px; + border-radius: var(--radius-sm); + background: transparent; + border: none; + color: var(--text-muted); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + transition: + background var(--transition), + color var(--transition); +} + +.chat-mic-btn:hover:not(:disabled) { + background: var(--bg-hover); + color: var(--text-primary); +} + +.chat-mic-btn:disabled { + opacity: 0.4; + cursor: not-allowed; +} + +/* Recording: red, gently pulsing so it's clearly "live". */ +.chat-mic-btn--recording { + color: var(--danger, #ef4444); + animation: chatMicPulse 1.2s ease-in-out infinite; +} + +@keyframes chatMicPulse { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.45; + } +} + +.chat-voice-error { + margin-top: 6px; +} + +/* Context-window gauge — circular % ring with a hover/focus tooltip. */ +.chat-ctx-gauge { + position: relative; + width: 30px; + height: 30px; + flex-shrink: 0; + display: flex; + align-items: center; + justify-content: center; + cursor: default; + outline: none; +} + +.chat-ctx-gauge-track { + stroke: var(--border, rgba(255, 255, 255, 0.12)); +} + +.chat-ctx-gauge-fill { + stroke: var(--accent, #4ade80); + transition: stroke-dasharray var(--transition); +} + +.chat-ctx-gauge-num { + position: absolute; + font-size: 9px; + font-weight: 600; + color: var(--text-secondary); + font-variant-numeric: tabular-nums; +} + +.chat-ctx-tooltip { + position: absolute; + bottom: calc(100% + 8px); + right: 0; + z-index: 20; + min-width: 220px; + padding: 10px 12px; + border-radius: var(--radius-md, 8px); + background: var(--bg-elevated, #1c1c22); + border: 1px solid var(--border, rgba(255, 255, 255, 0.12)); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4); + color: var(--text-secondary); + font-size: 12px; + line-height: 1.6; + white-space: nowrap; + opacity: 0; + visibility: hidden; + transform: translateY(4px); + transition: + opacity var(--transition), + transform var(--transition), + visibility var(--transition); + pointer-events: none; +} + +.chat-ctx-gauge:hover .chat-ctx-tooltip, +.chat-ctx-gauge:focus-visible .chat-ctx-tooltip { + opacity: 1; + visibility: visible; + transform: translateY(0); +} + +.chat-ctx-tooltip-title { + font-weight: 600; + color: var(--text-primary); + margin-bottom: 4px; +} + +.chat-attachment-strip { + display: flex; + flex-wrap: wrap; + gap: 8px; + align-items: center; + margin-bottom: 6px; + padding: 8px 10px; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); +} + +.chat-attachment-error { + flex: 0 0 100%; + font-size: 12px; + color: var(--error); + padding-top: 2px; +} + +/* Pre-send readiness banner — shown above the chat input when the + * desktop detects an obvious misconfiguration (missing API key for + * the active provider, etc.). Fail-open: only renders when validation + * has flagged a specific issue. */ +.chat-readiness-banner { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 6px 10px; + margin-bottom: 6px; + padding: 8px 12px; + background: var(--bg-secondary); + border: 1px solid var(--warning, var(--border)); + border-left-width: 3px; + border-radius: 6px; + font-size: 12.5px; + color: var(--text-primary); +} + +.chat-readiness-message { + flex: 1 1 auto; + min-width: 0; +} + +.chat-readiness-fix { + flex: 0 0 auto; + font-weight: 500; + color: var(--text-secondary); +} + +/* ConfigHealthBanner — appears at the top of Chat when the startup + * audit found inconsistencies. One-liner summary + link to Diagnose. */ +.config-health-banner { + display: flex; + align-items: center; + gap: 12px; + padding: 8px 14px; + margin: 0; + border-bottom: 1px solid var(--border); + font-size: 12.5px; +} + +.config-health-banner-error { + background: var(--error-bg, var(--bg-secondary)); + color: var(--error, var(--text-primary)); +} + +.config-health-banner-warning { + background: var(--warning-bg, var(--bg-secondary)); + color: var(--text-primary); +} + +.config-health-banner-info { + background: var(--bg-secondary); + color: var(--text-secondary); +} + +.config-health-banner-text { + flex: 1 1 auto; + min-width: 0; +} + +.config-health-banner-actions { + display: flex; + align-items: center; + gap: 8px; + flex: 0 0 auto; +} + +.config-health-banner-link { + background: transparent; + border: none; + color: inherit; + text-decoration: underline; + cursor: pointer; + font: inherit; + padding: 2px 4px; +} + +.config-health-banner-dismiss { + background: transparent; + border: none; + color: inherit; + cursor: pointer; + padding: 2px; + display: flex; + align-items: center; + justify-content: center; + opacity: 0.75; +} + +.config-health-banner-dismiss:hover { + opacity: 1; +} + +/* Diagnose panel inside Settings */ +.diagnose-header { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; +} + +.diagnose-rerun-btn { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 4px 10px; + font-size: 12px; + border: 1px solid var(--border); + background: var(--bg-secondary); + color: var(--text-primary); + border-radius: 4px; + cursor: pointer; +} + +.diagnose-rerun-btn:disabled { + opacity: 0.5; + cursor: not-allowed; +} + +.diagnose-loading, +.diagnose-empty { + padding: 12px; + display: flex; + align-items: center; + gap: 8px; + color: var(--text-secondary); + font-size: 13px; +} + +.diagnose-issue-list { + list-style: none; + padding: 0; + margin: 8px 0 0; + display: flex; + flex-direction: column; + gap: 10px; +} + +.diagnose-issue { + padding: 10px 12px; + border: 1px solid var(--border); + border-left-width: 3px; + border-radius: 6px; + background: var(--bg-secondary); +} + +.diagnose-issue-error { + border-left-color: var(--error, #c0392b); +} + +.diagnose-issue-warning { + border-left-color: var(--warning, #d6a700); +} + +.diagnose-issue-info { + border-left-color: var(--text-secondary); +} + +.diagnose-issue-head { + display: flex; + align-items: center; + gap: 8px; +} + +.diagnose-issue-code { + font-family: var(--font-mono, monospace); + font-size: 11px; + color: var(--text-secondary); +} + +.diagnose-issue-message { + margin: 6px 0 0; + font-size: 13px; + font-weight: 500; +} + +.diagnose-issue-detail { + margin: 4px 0 0; + color: var(--text-secondary); + font-size: 12px; +} + +.diagnose-issue-locations { + list-style: disc inside; + margin: 6px 0 0; + padding-left: 4px; + color: var(--text-secondary); + font-size: 11.5px; + font-family: var(--font-mono, monospace); +} + +.diagnose-issue-fix { + margin-top: 8px; + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; +} + +.diagnose-fix-btn { + padding: 4px 12px; + font-size: 12px; + background: var(--accent, var(--bg-tertiary)); + color: var(--accent-fg, var(--text-primary)); + border: 1px solid var(--border); + border-radius: 4px; + cursor: pointer; +} + +.diagnose-fix-btn:disabled { + opacity: 0.6; + cursor: not-allowed; +} + +.diagnose-issue-fix-desc { + font-size: 12px; + color: var(--text-secondary); +} + +.diagnose-issue-result { + margin: 6px 0 0; + font-size: 12px; + color: var(--text-secondary); + font-style: italic; +} + +.diag-icon-error { + color: var(--error, #c0392b); +} + +.diag-icon-warning { + color: var(--warning, #d6a700); +} + +.diag-icon-info, +.diag-icon-ok { + color: var(--text-secondary); +} + +.attachment-chip { + position: relative; + display: inline-flex; + align-items: center; + border-radius: var(--radius-sm); + background: var(--bg-primary); + border: 1px solid var(--border-bright); +} + +.attachment-chip-thumb { + display: block; + padding: 0; + margin: 0; + background: none; + border: none; + cursor: pointer; + border-radius: var(--radius-sm); + overflow: hidden; + width: 56px; + height: 56px; +} + +.attachment-chip-thumb img { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +.attachment-chip-file { + display: inline-flex; + align-items: center; + gap: 6px; + padding: 6px 10px; + color: var(--text-primary); + font-size: 12px; + max-width: 220px; +} + +.attachment-chip-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.attachment-chip-remove { + position: absolute; + top: -6px; + right: -6px; + width: 18px; + height: 18px; + border-radius: 50%; + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + color: var(--text-primary); + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + line-height: 0; +} + +.attachment-chip-remove:hover { + background: var(--error); + color: #fff; + border-color: var(--error); +} + +.chat-message-attachments { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-bottom: 6px; +} + +/* Drop overlay covers the whole chat container while a file drag is active */ +.chat-drop-overlay { + position: absolute; + inset: 0; + background: rgba(0, 0, 0, 0.45); + display: flex; + align-items: center; + justify-content: center; + pointer-events: none; + z-index: 100; + backdrop-filter: blur(2px); +} + +.chat-drop-overlay-inner { + border: 2px dashed var(--accent); + border-radius: var(--radius-lg); + padding: 24px 36px; + color: #fff; + font-size: 16px; + font-weight: 600; + background: rgba(0, 0, 0, 0.35); +} + +.chat-image-preview-backdrop { + position: fixed; + inset: 0; + background: rgba(0, 0, 0, 0.85); + display: flex; + align-items: center; + justify-content: center; + z-index: 200; + cursor: zoom-out; +} + +.chat-image-preview-image { + max-width: 90vw; + max-height: 90vh; + border-radius: var(--radius-md); + cursor: default; +} + +.chat-image-preview-actions { + position: fixed; + top: 16px; + right: 16px; + display: flex; + flex-direction: row; + gap: 8px; + z-index: 201; +} + +/* Lightbox action buttons — light-on-dark so they read on the backdrop. */ +.chat-image-preview-btn { + display: inline-flex; + flex-direction: row; + align-items: center; + gap: 6px; + padding: 6px 12px; + border: 1px solid rgba(255, 255, 255, 0.3); + border-radius: 8px; + background: rgba(255, 255, 255, 0.12); + color: #fff; + cursor: pointer; + font-size: 13px; +} + +.chat-image-preview-btn:hover { + background: rgba(255, 255, 255, 0.22); +} + +/* ── Agent-generated media (issue #299) ─────────────── */ + +.chat-media-image { + max-width: 100%; + max-height: 320px; + border-radius: 8px; + cursor: pointer; + display: block; + margin: 6px 0; +} + +.chat-media-loading, +.chat-media-error { + font-size: 13px; + color: var(--text-secondary); +} + +.chat-media-error { + color: var(--warning, #d08770); +} + +.chat-media-file { + display: inline-flex; + flex-direction: row; + align-items: center; + gap: 6px; + padding: 6px 10px; + border: 1px solid var(--border); + border-radius: 8px; + background: transparent; + cursor: pointer; + font-size: 13px; +} + +/* ── Slash Command Menu ─────────────────────────────── */ + +.slash-menu-overlay { + position: fixed; + inset: 0; + z-index: 49; + background: rgba(5, 8, 12, 0.58); +} + +.slash-menu { + position: fixed; + top: 46%; + left: 50%; + width: min(720px, calc(100vw - 64px)); + transform: translate(-50%, -50%); + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: 14px; + box-shadow: 0 20px 64px rgba(0, 0, 0, 0.48); + max-height: min(560px, calc(100vh - 160px)); + display: flex; + flex-direction: column; + overflow: hidden; + z-index: 50; +} + +.slash-menu-search { + display: flex; + align-items: center; + gap: 12px; + min-height: 54px; + padding: 0 16px; + color: var(--text-secondary); + border-bottom: 1px solid var(--border); +} + +.slash-menu-search-query { + flex: 1; + color: var(--text-primary); + font-family: var(--font-mono); + font-size: 15px; +} + +.slash-menu kbd { + padding: 2px 6px; + border: 1px solid var(--border); + border-radius: 5px; + background: var(--bg-tertiary); + color: var(--text-muted); + font-family: var(--font-mono); + font-size: 10px; + font-weight: 500; +} + +.slash-menu-list { + position: relative; + flex: 1; + min-height: 0; + height: min(420px, calc(100vh - 256px)); + overflow-y: auto; + overscroll-behavior: contain; + padding: 10px; +} + +.slash-menu-virtual-content { + position: relative; + width: 100%; + contain: layout paint style; +} + +.slash-menu-group-label { + position: absolute; + inset: 0 0 auto; + box-sizing: border-box; + padding: 7px 10px 5px; + color: var(--text-muted); + font-size: 10px; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.slash-menu-item { + position: absolute; + inset: 0 0 auto; + box-sizing: border-box; + display: grid; + grid-template-columns: 28px minmax(130px, 0.75fr) minmax(0, 1.5fr) auto; + align-items: center; + gap: 8px; + width: 100%; + padding: 4px 10px; + border: none; + background: none; + border-radius: 10px; + cursor: pointer; + text-align: left; + transition: background 0.1s; +} + +.slash-menu-item:hover, +.slash-menu-item-active { + background: var(--bg-hover); +} + +.slash-menu-item-icon { + width: 28px; + height: 28px; + padding: 5px; + border-radius: 7px; + background: var(--bg-tertiary); + color: var(--text-muted); + display: flex; + align-items: center; + justify-content: center; + transition: color 0.1s; +} + +.slash-menu-item:hover .slash-menu-item-icon, +.slash-menu-item-active .slash-menu-item-icon { + color: var(--accent-text, var(--text-primary)); + background: color-mix(in srgb, var(--accent) 18%, var(--bg-tertiary)); +} + +.slash-menu-item-name { + font-size: 13px; + color: var(--text-primary); + white-space: nowrap; +} + +.slash-menu-item-desc { + font-size: 12px; + color: var(--text-secondary); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.slash-menu-item-badge { + padding: 3px 7px; + border: 1px solid var(--border); + border-radius: 6px; + color: var(--text-muted); + font-size: 10px; + white-space: nowrap; +} + +.slash-menu-footer { + display: flex; + align-items: center; + gap: 16px; + min-height: 42px; + padding: 0 16px; + border-top: 1px solid var(--border); + color: var(--text-muted); + font-size: 11px; +} + +.slash-menu-footer > span { + display: inline-flex; + align-items: center; + gap: 6px; +} + +.slash-menu-count { + margin-left: auto; +} + +@media (max-width: 720px) { + .slash-menu { + width: calc(100vw - 28px); + } + + .slash-menu-item { + grid-template-columns: 28px minmax(100px, 0.8fr) minmax(0, 1.2fr); + } + + .slash-menu-item-badge { + display: none; + } +} + +.chat-header-left { + display: flex; + align-items: center; + gap: 10px; +} + +.chat-token-counter { + font-size: 11px; + color: var(--text-muted); + background: var(--bg-tertiary); + padding: 2px 8px; + border-radius: 10px; +} + +.chat-tool-progress { + font-size: 13px; + color: var(--text-secondary); + animation: fadeIn 0.2s ease; +} + +.chat-tool-progress-inline { + font-size: 12px; + color: var(--text-muted); + padding: 2px 60px; + animation: fadeIn 0.2s ease; +} + +/* ── Chat history sub-rows (reasoning / tool_call / tool_result) ─────── + * + * Surfaced for resumed sessions: see src/main/sessions.ts + * `expandRowsToHistory`. These are
    / widgets so the + * default-closed state and toggle behavior are native — no JS event + * juggling required. The chevron is purely visual; the click target is + * the whole summary row. + */ +.chat-message-history > .chat-history { + flex: 1; + min-width: 0; +} + +.chat-history { + display: block; + width: 100%; + border: 1px solid var(--border, rgba(127, 127, 127, 0.18)); + border-radius: 8px; + background: transparent; + font-size: 13px; + color: var(--text-secondary); + overflow: hidden; +} + +.chat-history--reasoning { + border-left: 3px solid var(--accent, #8b7cf6); +} +.chat-history--tool-call { + border-left: 3px solid var(--info, #4aa8ff); +} +.chat-history--tool-result { + border-left: 3px solid var(--success, #4ac38a); +} + +.chat-history-header { + display: flex; + align-items: center; + gap: 8px; + padding: 6px 10px; + cursor: pointer; + user-select: none; + list-style: none; + font-size: 12px; + color: var(--text-secondary); +} + +.chat-history-header::-webkit-details-marker { + display: none; +} + +.chat-history-header:hover { + background: var(--hover, rgba(127, 127, 127, 0.06)); +} + +.chat-history-chevron { + display: inline-block; + width: 12px; + transition: transform 0.15s ease; + font-size: 10px; + color: var(--text-muted); +} + +.chat-history-chevron--open { + transform: rotate(90deg); +} + +.chat-history-label { + display: flex; + align-items: baseline; + gap: 8px; + min-width: 0; + flex: 1; + overflow: hidden; +} + +.chat-history-title { + font-weight: 600; + color: var(--text-secondary); + text-transform: lowercase; + letter-spacing: 0.02em; +} + +.chat-history-tool-name { + font-family: var(--font-mono, ui-monospace, SFMono-Regular, monospace); + font-size: 12px; + color: var(--text-primary); + background: var(--code-bg, rgba(127, 127, 127, 0.08)); + padding: 1px 6px; + border-radius: 4px; +} + +.chat-history-tool-summary, +.chat-history-meta { + color: var(--text-muted); + font-size: 11px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + min-width: 0; +} + +.chat-history-body { + border-top: 1px solid var(--border, rgba(127, 127, 127, 0.12)); + padding: 8px 10px; + background: var(--code-bg, rgba(127, 127, 127, 0.04)); +} + +.chat-history-pre { + margin: 0; + font-family: var(--font-mono, ui-monospace, SFMono-Regular, monospace); + font-size: 12px; + line-height: 1.5; + white-space: pre-wrap; + word-break: break-word; + color: var(--text-primary); +} + +.chat-history-pre--code { + white-space: pre; + overflow-x: auto; +} + +.chat-history-pre--scroll { + max-height: 600px; + overflow-y: auto; +} + +.chat-history-attachments { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-bottom: 8px; +} + +/* ── Grouped tool activity ───────────────────────────────────────────── + * + * A contiguous burst of tool calls/results folds into one collapsible + * block (ChatGPT/Claude style) instead of one bubble per call. The + * collapsed summary shows the most recent step; the run and each step + * expand smoothly via a grid-template-rows height transition. + */ +.chat-message-history > .chat-tool-group, +.chat-message-history > .chat-reasoning-group { + flex: 1; + min-width: 0; +} + +.chat-tool-group { + width: 100%; +} + +.chat-tool-group-summary { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 4px 6px; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + text-align: left; + font: inherit; + /* Normal state: dim. Brightens on hover (see below). */ + color: var(--text-muted); +} + +.chat-tool-group-summary:hover, +.chat-tool-group-summary:focus-visible { + color: var(--text-primary); +} + +/* Chevron lives on the right and only appears on hover (or while expanded), + matching the Codex-style collapsible row. */ +.chat-tool-group-chevron { + flex-shrink: 0; + color: var(--text-muted); + opacity: 0; + transition: + opacity 0.15s ease, + transform 0.18s ease; +} + +.chat-tool-group-summary:hover .chat-tool-group-chevron, +.chat-tool-group-summary:focus-visible .chat-tool-group-chevron { + opacity: 1; +} + +.chat-tool-group-chevron--open { + opacity: 1; + transform: rotate(90deg); +} + +.chat-tool-group-icon { + flex-shrink: 0; + color: var(--text-muted); +} + +.chat-tool-group-summary:hover .chat-tool-group-icon { + color: var(--text-secondary); +} + +.chat-tool-group-spinner { + flex-shrink: 0; + display: inline-flex; +} + +.chat-tool-group-name { + font-size: 13px; + font-weight: 600; + color: inherit; + flex-shrink: 0; +} + +.chat-tool-group-detail { + font-size: 12px; + color: var(--text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + /* Size to content (capped) so it doesn't stretch and shove the chevron to + the far edge — the chevron stays beside the title cluster. */ + flex: 0 1 auto; + min-width: 0; + max-width: 340px; +} + +/* ── Reasoning group (mirrors tool-group styling) ───────────────────── */ +.chat-reasoning-group { + width: 100%; +} + +.chat-reasoning-group-summary { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 4px 6px; + border: none; + border-radius: 6px; + background: transparent; + cursor: pointer; + text-align: left; + font: inherit; + /* Normal state: dim. Brightens on hover (see below). */ + color: var(--text-muted); +} + +.chat-reasoning-group-summary:hover, +.chat-reasoning-group-summary:focus-visible { + color: var(--text-primary); +} + +.chat-reasoning-group-chevron { + flex-shrink: 0; + color: var(--text-muted); + opacity: 0; + transition: + opacity 0.15s ease, + transform 0.18s ease; +} + +.chat-reasoning-group-summary:hover .chat-reasoning-group-chevron, +.chat-reasoning-group-summary:focus-visible .chat-reasoning-group-chevron { + opacity: 1; +} + +.chat-reasoning-group-chevron--open { + opacity: 1; + transform: rotate(90deg); +} + +.chat-reasoning-group-icon { + flex-shrink: 0; + color: var(--text-muted); +} + +.chat-reasoning-group-summary:hover .chat-reasoning-group-icon { + color: var(--text-secondary); +} + +.chat-reasoning-group-spinner { + flex-shrink: 0; + display: inline-flex; +} + +.chat-reasoning-group-title { + font-size: 13px; + font-weight: 600; + color: inherit; + flex-shrink: 0; +} + +/* Smooth height animation without measuring: 0fr → 1fr collapses the row. */ +.chat-tool-collapse { + display: grid; + grid-template-rows: 0fr; + transition: grid-template-rows 0.22s ease; +} + +.chat-tool-collapse--open { + grid-template-rows: 1fr; +} + +.chat-tool-collapse-inner { + overflow: hidden; + min-height: 0; +} + +.chat-tool-group-items { + display: flex; + flex-direction: column; + border-top: 1px solid var(--border, rgba(127, 127, 127, 0.12)); +} + +/* ── A single step inside the group ──────────────────────────────────── */ +.chat-tool-item { + border-bottom: 1px solid var(--border, rgba(127, 127, 127, 0.08)); +} +.chat-tool-item:last-child { + border-bottom: none; +} + +.chat-tool-item-header { + display: flex; + align-items: center; + gap: 8px; + width: 100%; + padding: 6px 12px 6px 14px; + border: none; + background: transparent; + cursor: pointer; + text-align: left; + font: inherit; +} + +.chat-tool-item-header:hover { + background: var(--hover, rgba(127, 127, 127, 0.05)); +} + +.chat-tool-item-chevron { + flex-shrink: 0; + color: var(--text-muted); + transition: transform 0.18s ease; +} +.chat-tool-item-chevron--open { + transform: rotate(90deg); +} + +.chat-tool-item-dot { + flex-shrink: 0; + width: 7px; + height: 7px; + border-radius: 50%; +} +.chat-tool-item-dot--call { + background: var(--info, #4aa8ff); +} +.chat-tool-item-dot--result { + background: var(--success, #4ac38a); +} +.chat-tool-item-dot--failed { + background: var(--danger, #e5544b); +} + +.chat-tool-item-kind { + font-size: 11px; + color: var(--text-muted); + text-transform: lowercase; + letter-spacing: 0.02em; + flex-shrink: 0; +} + +.chat-tool-item-name { + font-size: 12px; + font-weight: 500; + color: var(--text-primary); + flex-shrink: 0; +} + +.tool-glyph { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + color: var(--text-secondary, var(--text-muted)); +} + +.tool-glyph svg { + width: 100%; + height: 100%; +} + +.chat-tool-item-glyph { + color: var(--text-muted); +} + +.chat-tool-item-glyph--failed { + color: var(--danger, #ef4444); +} + +.chat-tool-item-detail { + font-size: 11px; + color: var(--text-muted); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + flex: 1; + min-width: 0; +} + +.chat-tool-item-body { + padding: 8px 12px 10px 32px; + background: var(--code-bg, rgba(127, 127, 127, 0.04)); +} + +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* Model picker */ +.chat-model-bar { + position: relative; + display: flex; + align-items: center; +} + +/* Shared chip style for the input-footer controls (model + folder). */ +.chat-meta-chip { + display: flex; + align-items: center; + gap: 4px; + background: none; + border: none; + color: var(--text-muted); + font-size: 11px; + cursor: pointer; + padding: 4px 6px; + border-radius: 4px; + transition: all var(--transition); +} + +.chat-meta-chip:hover, +.chat-meta-chip--active { + color: var(--text-secondary); + background: var(--bg-hover); +} + +.chat-ctxfolder-picker { + position: relative; + display: flex; + align-items: center; +} + +.chat-ctxfolder-group { + position: relative; + display: flex; + align-items: center; + gap: 2px; +} + +.chat-ctxfolder-dropdown { + position: absolute; + bottom: 100%; + inset-inline-start: 0; + margin-bottom: 6px; + width: 230px; + max-height: 320px; + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-md); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); + z-index: 200; + padding: 6px; + display: flex; + flex-direction: column; +} + +.chat-ctxfolder-dropdown-header { + font-size: 11px; + color: var(--text-muted); + padding: 2px 8px 6px; + font-weight: 500; +} + +.chat-ctxfolder-dropdown-list { + display: flex; + flex-direction: column; + gap: 1px; + max-height: 220px; + overflow-y: auto; +} + +.chat-ctxfolder-dropdown-item { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding: 6px 8px; + background: none; + border: none; + border-radius: var(--radius-sm); + color: var(--text-primary); + font-size: 12px; + cursor: pointer; + text-align: left; + transition: background var(--transition); +} + +.chat-ctxfolder-dropdown-item:hover { + background: var(--bg-hover); +} + +.chat-ctxfolder-dropdown-item--active { + color: var(--text-secondary); +} + +.chat-ctxfolder-dropdown-item-name { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-ctxfolder-dropdown-item-check { + color: var(--text-secondary); + flex-shrink: 0; + margin-left: 8px; +} + +.chat-ctxfolder-dropdown-empty { + font-size: 12px; + color: var(--text-muted); + padding: 8px; + text-align: center; +} + +.chat-ctxfolder-dropdown-divider { + height: 1px; + background: var(--border-subtle); + margin: 4px 0; + flex-shrink: 0; +} + +.chat-ctxfolder-dropdown-item--open { + color: var(--text-secondary); +} + +.chat-ctxfolder-name { + max-width: 160px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-meta-chip-icon { + display: flex; + align-items: center; + justify-content: center; + background: none; + border: none; + color: var(--text-muted); + cursor: pointer; + padding: 3px; + border-radius: 4px; + transition: all var(--transition); +} + +.chat-meta-chip-icon:hover, +.chat-meta-chip-icon--active { + color: var(--text-secondary); + background: var(--bg-hover); +} + +.chat-model-trigger { + display: flex; + align-items: center; + gap: 4px; + background: none; + border: none; + color: var(--text-muted); + font-size: 11px; + cursor: pointer; + padding: 4px 8px; + border-radius: 4px; + transition: all var(--transition); +} + +.chat-model-trigger:hover { + color: var(--text-secondary); + background: var(--bg-hover); +} + +.chat-model-name { + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-model-dropdown { + position: absolute; + bottom: 100%; + inset-inline-start: 0; + margin-bottom: 4px; + width: 320px; + max-height: 360px; + overflow-y: auto; + overflow-x: hidden; + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-md); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); + z-index: 100; + padding: 6px; +} + +/* Reasoning effort picker */ +.chat-reasoning-bar { + position: relative; + display: flex; + align-items: center; +} + +.chat-reasoning-trigger { + display: flex; + align-items: center; + gap: 4px; + background: none; + border: none; + color: var(--text-muted); + font-size: 11px; + cursor: pointer; + padding: 4px 8px; + border-radius: 4px; + transition: all var(--transition); +} + +.chat-reasoning-trigger:hover, +.chat-reasoning-trigger[aria-expanded="true"] { + color: var(--text-secondary); + background: var(--bg-hover); +} + +.chat-reasoning-name { + max-width: 140px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-reasoning-dropdown { + position: absolute; + bottom: 100%; + inset-inline-start: 0; + margin-bottom: 4px; + width: 280px; + background: var(--bg-secondary); + border: 1px solid var(--border-bright); + border-radius: var(--radius-md); + box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); + z-index: 100; + padding: 6px; +} + +.chat-reasoning-header { + font-size: 10px; + font-weight: 700; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + text-align: start; + padding: 6px 8px 4px; +} + +.chat-reasoning-hint { + color: var(--text-muted); + font-size: 11px; + line-height: 1.35; + padding: 0 8px 6px; +} + +.chat-reasoning-error { + color: var(--danger); + font-size: 11px; + line-height: 1.35; + padding: 0 8px 6px; +} + +.chat-reasoning-option { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + width: 100%; + padding: 8px; + border: none; + background: none; + color: var(--text-primary); + cursor: pointer; + border-radius: 4px; + text-align: left; + transition: background var(--transition); +} + +.chat-reasoning-option:hover { + background: var(--bg-hover); +} + +.chat-reasoning-option.active { + background: var(--accent-subtle); + color: var(--accent-text); +} + +.chat-reasoning-option-copy { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; +} + +.chat-reasoning-option-label { + font-size: 12px; + font-weight: 600; +} + +.chat-reasoning-option-description { + color: var(--text-muted); + font-size: 11px; + line-height: 1.3; +} + +.chat-reasoning-option.active .chat-reasoning-option-description { + color: var(--accent-text); + opacity: 0.8; +} + +.chat-reasoning-check { + flex-shrink: 0; +} + +.chat-model-search-input, +.chat-model-custom-input { + box-sizing: border-box; +} + +.chat-model-group { + margin-bottom: 4px; +} + +.chat-model-group-label { + font-size: 10px; + font-weight: 700; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 6px 8px 4px; +} + +.chat-model-option { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + padding: 6px 8px; + border: none; + background: none; + color: var(--text-primary); + font-size: 12px; + cursor: pointer; + border-radius: 4px; + text-align: left; + transition: background var(--transition); +} + +.chat-model-option:hover { + background: var(--bg-hover); +} + +.chat-model-option.active { + background: var(--accent-subtle); + color: var(--accent-text); +} + +.chat-model-option-label { + font-weight: 500; +} + +.chat-model-option-id { + font-size: 10px; + color: var(--text-muted); + max-width: 160px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.chat-model-custom { + padding: 4px 8px 6px; +} + +.chat-model-search-input, +.chat-model-custom-input { + width: 100%; + padding: 5px 8px; + font-size: 12px; + border: 1px solid var(--border); + border-radius: 4px; + color: var(--text-primary); +} + +.chat-model-search-input:focus, +.chat-model-custom-input:focus { + outline: none; + border-color: var(--border-focus); +} + +.chat-model-custom-input { + background: var(--bg-tertiary); +} + +.chat-model-search-input { + position: sticky; + top: 0; + background: var(--bg-secondary); +} + +/* ======================================================================== + SETTINGS + ======================================================================== */ +.settings-container { + padding: 24px 32px; + overflow-y: auto; + height: 100%; +} + +.settings-header { + font-size: 20px; + font-weight: 700; + margin-bottom: 5px; + color: var(--text-primary); +} + +.settings-section { + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 20px; + margin-bottom: 16px; +} + +.settings-section-title { + font-size: 12px; + font-weight: 700; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.8px; + margin-bottom: 16px; +} + +.settings-field { + margin-bottom: 18px; +} + +.settings-field:last-child { + margin-bottom: 0; +} + +.settings-field-label { + font-size: 13px; + font-weight: 600; + color: var(--text-primary); + margin-bottom: 6px; + display: flex; + align-items: center; + gap: 8px; +} + +.settings-field-value { + font-size: 13px; + color: var(--text-secondary); + font-family: var(--font-mono); +} + +.settings-field-hint { + font-size: 12px; + color: var(--text-muted); + margin-top: 4px; +} + +.settings-transport-status { + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; + margin-top: 8px; + font-size: 12px; + color: var(--text-muted); +} + +.settings-transport-status span:first-child { + font-weight: 700; +} + +.settings-transport-status code { + font-family: var(--font-mono); + font-size: 11px; + color: var(--text-secondary); + background: var(--bg-primary); + border: 1px solid var(--border); + border-radius: var(--radius-sm); + padding: 2px 6px; +} + +.settings-transport-status--ok span:first-child { + color: var(--success, #22c55e); +} + +.settings-transport-status--warn span:first-child { + color: var(--warning, #f59e0b); +} + +.settings-input-row { + display: flex; + gap: 8px; + align-items: center; +} + +.settings-input-row .input { + flex: 1; +} + +.settings-select { + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 12px center; + padding-right: 36px; + cursor: pointer; +} + +.settings-toggle-btn { + font-size: 12px; + font-weight: 600; + white-space: nowrap; +} + +.settings-pool-add { + display: flex; + gap: 8px; + align-items: center; + margin-bottom: 12px; +} + +.settings-pool-add .input { + box-sizing: border-box; +} + +.settings-pool-group { + margin-top: 10px; +} + +.settings-pool-provider { + display: flex; + align-items: center; + gap: 6px; + font-size: 11px; + font-weight: 700; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: 6px; +} + +.settings-provider-row { + display: flex; + align-items: center; + gap: 10px; +} + +.settings-provider-row .input { + flex: 1; +} + +.settings-model-row { + display: flex; + align-items: center; + gap: 8px; +} + +.settings-model-row .input { + flex: 1; +} + +.provider-keys-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); + gap: 12px; +} + +.provider-key-card { + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 14px; + display: flex; + flex-direction: column; + gap: 8px; +} + +.provider-key-card-head { + display: flex; + align-items: center; + gap: 10px; +} + +.provider-key-card-title { + font-size: 13px; + font-weight: 600; + color: var(--text-primary); + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.provider-key-card .settings-input-row { + margin: 0; +} + +.provider-key-card .settings-field-hint { + font-size: 11px; + color: var(--text-muted); +} + +/* Configured-provider card (clickable → config modal) + Add tile */ +.provider-config-card { + display: flex; + align-items: center; + gap: 10px; + text-align: left; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 12px 14px; + cursor: pointer; + transition: + border-color 0.15s ease, + background 0.15s ease; +} +.provider-config-card:hover { + background: var(--bg-hover, var(--bg-secondary)); + border-color: var(--text-muted); +} +.provider-config-card-body { + display: flex; + flex-direction: column; + min-width: 0; + flex: 1; +} +.provider-config-card-title { + font-size: 13px; + font-weight: 600; + color: var(--text-primary); +} +.provider-config-card-sub { + font-size: 11px; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.provider-config-card-edit { + color: var(--text-muted); + flex-shrink: 0; +} + +.provider-add-card { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + border: 1px dashed var(--border); + border-radius: var(--radius-md); + padding: 12px 14px; + color: var(--text-muted); + font-size: 13px; + font-weight: 600; + cursor: pointer; + background: transparent; + transition: + border-color 0.15s ease, + color 0.15s ease; +} +.provider-add-card:hover { + border-color: var(--text-primary); + color: var(--text-primary); +} + +/* Add-provider picker modal */ +.provider-picker-search { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 12px; + color: var(--text-muted); +} +.provider-picker-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); + gap: 10px; + /* Fixed scroll region so the modal keeps a stable height as search filters + the list (it no longer shrinks down to one result). */ + height: 44vh; + align-content: start; + overflow-y: auto; +} +.provider-picker-item { + display: flex; + align-items: center; + gap: 10px; + text-align: left; + background: var(--bg-secondary); + border: 1px solid var(--border); + border-radius: var(--radius-md); + padding: 10px 12px; + cursor: pointer; + transition: + border-color 0.15s ease, + background 0.15s ease; +} +.provider-picker-item:hover { + border-color: var(--text-muted); +} +.provider-picker-item-body { + display: flex; + flex-direction: column; + min-width: 0; +} +.provider-picker-item-title { + font-size: 13px; + font-weight: 600; + color: var(--text-primary); +} +.provider-picker-item-hint { + font-size: 11px; + color: var(--text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.provider-remove-btn { + color: var(--danger, #c0392b); + margin-right: auto; +} + +/* ===== Provider config modal (polished, scoped) ===== */ +.provider-modal { + width: 560px; + border-radius: var(--radius-xl); +} +.provider-modal .models-modal-header { + padding: 28px 32px 0; + border-bottom: none; +} +.provider-modal .models-modal-body { + padding: 24px 32px 8px; + gap: 0; +} +.provider-modal .models-modal-footer { + padding: 20px 32px 24px; + margin-top: 8px; +} +/* Rounder inputs + buttons inside this modal */ +.provider-modal .input { + padding: 13px 16px; + border-radius: var(--radius-lg); + font-size: 14px; +} +.provider-modal .btn { + border-radius: var(--radius-md); +} + +/* Header: logo tile + title (scoped so it beats .models-modal-title) */ +.provider-modal .provider-modal-title { + display: flex; + align-items: center; + gap: 14px; + font-size: 20px; + font-weight: 700; +} +/* Understated remove action (reference shows it muted, not danger-red) */ +.provider-modal .provider-remove-btn { + color: var(--text-secondary); +} +.provider-modal .provider-remove-btn:hover { + color: var(--text-primary); +} +.provider-modal-logo { + display: inline-flex; + align-items: center; + justify-content: center; + width: 48px; + height: 48px; + border: 1px solid var(--border-bright); + border-radius: var(--radius-lg); + background: var(--bg-elevated); + flex-shrink: 0; +} + +/* Key input row: leading icon + input + Show */ +.provider-key-row { + display: flex; + align-items: center; + gap: 14px; +} +.provider-key-icon { + color: var(--text-muted); + flex-shrink: 0; +} +.provider-key-row .input { + flex: 1; + min-width: 0; +} +.provider-key-row .settings-toggle-btn { + flex-shrink: 0; + color: var(--text-secondary); + font-size: 14px; + padding: 6px 4px; +} +.provider-key-row .settings-toggle-btn:hover { + color: var(--text-primary); + background: transparent; +} + +/* Custom-provider modal: hint shown before a base URL is entered */ +.provider-custom-hint { + margin-top: 20px; +} + +/* Logo dropdown (model-picker provider select): brand logo inside the control + and in each option, since a native setApiKeyValue(e.target.value)} + onKeyDown={(e) => { + if (e.key === "Enter") void handleSaveApiKey(); + }} + placeholder={t("diagnose.apiKeyModal.placeholder")} + style={{ flex: 1 }} + autoFocus + /> + +

~ha6XZejoxlS-qI}>9cA& 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

T*sav>bj0 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 a!&y9PuruEHH*ul<%!>KbBcF_s=zjod;0$a4 literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Cairo-Regular.ttf b/src/renderer/src/assets/fonts/Cairo-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..81c3544e9ee799350e1f81c29d9819d701fe3697 GIT binary patch literal 91500 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Cairo-SemiBold.ttf b/src/renderer/src/assets/fonts/Cairo-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..993230d05b694481f28d46afba243cb844a5e75c GIT binary patch literal 91724 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%0A3zX=^bh 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Manrope-Bold.ttf b/src/renderer/src/assets/fonts/Manrope-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..62a618393905652a9696e015386f431b21a1a50b GIT binary patch literal 96800 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�Sq=K;W>my*Ny_rw9I(*8$zllSC8jm)m^F|t&Xjx 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

4Cz**@6c)hqyhN69DH65 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 M*<$A3PvX)24TIUt#{d8T literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Manrope-Medium.ttf b/src/renderer/src/assets/fonts/Manrope-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c6d28def6d565eaa53a76eb39d3fa9d9e908709a GIT binary patch literal 96904 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 So@LBn6aeac|8FK#Cj$T&UW(lS literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Manrope-Regular.ttf b/src/renderer/src/assets/fonts/Manrope-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9a108f1cee9d7b9f52e9427d4a9105db838566ac GIT binary patch literal 96832 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 QI<01StVU#a{}Zq6A7-l(L;wH) literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/fonts/Manrope-SemiBold.ttf b/src/renderer/src/assets/fonts/Manrope-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..46a13d61989936eaba29502ec364048f246ec2e1 GIT binary patch literal 96936 zcmd442YeRA_C7u{Z%Z$vK?13e&`A$SC~0&;2^|s=LP!E>q)-i@h|-G!QlbVy#Cii_ zLn$f8>q9z7~$?#>1OCS*_|AyG31r;Lx^Hei28Li|2PqU2F2y}~zlTrimsdJwtNQ^v)O zTex}lH@F^+>#mvk8ATTze;iAQBd)c#vNKAG5buKfYMgDd^A^rZ>i?ZRA&d7BqSxnS zWz6(naQq_fKZyI$If!tnv0aDj?zrxllV7^v={ubl5#k<8i2cUA!pw|Yf4sbq5Zxn$ zXin#6EGT04$Wf$sKzjdzjQp(1r>~+s=8pRXMTI4$$;|acoc6{Op`kQ5X|3glgC%Q8JHIKct-+)o#Lc=h)wfN_UROUwLCM+DFJWzcJ6~ z->pAj`>}0LTxtp9vG`M~-$Dr*w9#E%h3l=-nY~NG*-DW@K2#ERbTsjwqr{~Q899_3 zBaZi&)DD|*Y?42r&+z-|-kM6B{0Z+XKe`ASLDjYhSE|OzVM_c}k#d+3CsnW?2Bt;~P^dL!O z0ZJ@JY&_!fpqrK{nu;HZ{4+@|DI@uf@{Gm3Y~0C1xy6m{jzF$#l7o6J>oRg#7HUfaLxn=1xU~3=MO0r;GBgL{gFNg zA)b3E%JoP2yq5|PGM3C+Wh|jP?oAN6Id8mne-Z``Ir*D#W?rwtO$M0<{&<@*$P65L z-SctH`S3>^uQ!g25#dtE#9#E<-<6NKOtVFcO2J<~LR^C~pa;2R4$78z;qB*Pu9aLi z{Jv=)^}v1eKD3lTBubAWp(GMNCDa$WhM=UOq;HGmHK)IvJM-ETAon7&P-u#z*Zw3N zwTF>DkQmnvE?4t5_><8{Ur1)-UZ&8PIA{WwJJ&6)OPvvxbg@L%#%#G~%FtImk*g3A zj^^EER)%WT^^Ln_14bOzNGzH=dGKhtI+Myy`#HgLu`U=Qf!vlylV3w+ZfvcwrRHI zwoluBW?N_1-7d>+k=-GCXZvaPFWdj>VCxX#Fw$YNLxICehg}W_9Zou2b<{Yva~$MY z>bTSKoa0YUZJk1#1~?6O%5!?esnY2Ur%O(EodcYQJ1=*B$N8R1oXdKbFI_vku5taf zO>~>GHgCAuyG?Pca@V@2x}Wms?XlG3sHcNxThET3sh-pF8aX+mCI(wf)5o?K-4&*waDpJI(hA z-}imb`nC7#?AOmP&2OdOTYlgAyZVRw5A&bxzrp`C{|o+g0i6Rf0_F#74R|}?a$vW> z#{&NoG$ZIj$Hb1OJB{n~da!TsqrtaB3PNso9^Lt+E;d~jcDdAbSl8p-`gD7{+aKLK zcTewL(fy|$U3#SVc&f+OJ#P1m>Y3N`#hyR+3hPzg>r|*m=)BM?pfkV84Nj2R<|Kj;FvHmp*-Qmgf|lIB}OF9NZg)yEva47xTIA{#|GIC8a=3D(079)2X7ht z*O1;r3WgjR>NeDGXynkbLl+L+JM{d}yTjTJ3m-Oa*y3TkhP^lJ>*3zRgNMfspE`WW z@QUI4h94Y$Yh^ zK=QQY$C5WBKbibY^8Vzvliy4JDEY=H$5G=)rH)!L>Zwr&M_n5A^XTBw8Kd(@FC2Yj z^oL{AW8%jQ8#8vylrgKud^Xl~Y|_|~W9N;1ee9*N*T#M`_OBF{GCZX+))lB+sa)-%NC-0nmaB|HQk12De zyfWqWDOaa_Gv(*0VN-La7EOI*>e{KBr&dheGxf?e-)Xti=1zNM+UwH}PdhQ~lWE^g z`(@f6(;89-qz+CUl{zyuFSRsvL+X>M&!j$|`a$ZM)X!3{q<)p=mo`0ZPTGRB6={#B zJ(Kow+S_Rt(te-bYx?r(Yo=dM4@l2UpOd~n{fqRQ8QP3q88I2FGak>_m+{pMzZnx| zJTl|e8E?!uGNV2-A+sd&`OJfv-_GnXv-8Z*nM-CK&9cpM%^I3DHEUhghgr3={AT6M zS~TmU>^9lMvQx6BW@l#4$u7xWoc&1l+U!f&*R#LNzMXwHhvnGkxaV}p3C_vQ*_rc7 z&h=dP++Mjkxi94&nQb?F?g2b<2y-o1Rym zcPQ^vUUl9#d4J?5=8woP&fk{*X@RD|tDs9kSi!`C=>=N~o+|iP!Mg>=3(gl@FZj0L zmx4bE8VYrV&V@dOiG^bda|??LD+-Sm-YERO@P3g^kw=kl(SV}CMN^A1iyka`q-bN& zHpB1BxuJ8j=e}F)R6M14XYq~V`z1?Cs!Hya_AOmedb;$_GVij4vfQ%yWgE+$Dmz;C zY1vov$UOIXUFOBlOPlxLyiex+F<&>o{rs}|ug(8z{%;FB7xY*VwP4|bnuT*0u2{Hk z;ogNu7gjI)b&=DekVSEe(iUA@Ja+M-#s7J5{)1;8tSj$S9#)=IKDPX!@=fJC%6FF^ zF8{Fn)AF0;KbPNMVz>5yiiE6cKt!krc zm+A#omFgqaS+%!1Nd161K|Ni)N&PSNJL(^NSNJ~ddlyLP?(gj%=pXDK>i>X$qJO%7 zk^e&fRsOsEU-p01f4~1h|3m(V{f`EC1_TB?5%78-3)BQU2et|H2=os01y&9TOb^WJ zboz$shV4CuCm}q*VTKFEyjDp)X-^tS`(R!gMn{9kO8PI>7Ce5)s#T@n@e%O2UbRWJ zTlJ!9zv{G_sD0EO)qT~8>W%7G)rZvI`z`~ImEh6Mzpa0J!DAnp$5Q`g;PC~S$F~hU zZZz=dYR2PC@JMgy?%`>T;fay{3{EZnxWM_J{$b)qNJCnK4&fZoVErH*hwyv#$)H(0 zr2O5yPDt(4+KK$SHl+5k+PGR;+x6xd{Py3xO~}okZ+>(02F_pJ{N(0aH}@iBd*ihm zFWz{TkQ=LRY`?Mb#)=y=ZX^ic!-ld6Y&aXi_OjjVIX0TT zj~2Bh?T8-AK)_a*M(tMfaVzgXmAF&r$Kh~dJW(V1EHkQ?}SUQm{WP{lt zHiV5Ku6TB~C7yW3_aI()8ta9pwqVkoB#{1O02v5vp9rgMGVHK?lFoL))?P`LlNIDq z@)Rkeoyc3{1yV&0lQ+n_x zjGSI{5N$_?Ko<`I4PFE$yn|=N_ecjkOZt)%#D~030>~+#!bh-2tMSBl5w__Uq!XS& zV@M5&Cf9)#H%V`DgT#`rVHa}M zuXkYw-zVdV9u{sro=(r|Dqw40(b znnsYtv?F!chU;_6n%!iL|>+_(pTueXcc{p z9;658+w=%MO1IJN^cdYt-=c5QL-ZZ`E`6Q8K@S7>o~AF-{WO(sp{wY7bTxgSuAv{0 z9W;SFNe7bcG#)EmZ(?QOZLBQp$11{WK+%K5iM&qiv09)eF9H2uAv*FZRucY&)ti^` zlyC_sdznO#FG&bFOS+JAq$@d3x{(WbzW9_RlArM${1eH*YC)R{a+L&+){PS(&!vW`ZR^)!ZTpuNdj8bx-|VL|J(%RkD5TdG;t< z!@ilbBdhObRwPq7o;0ZI;(5RTFvVu)+%M;UM6wZ$Y=FRvbIU8vbbk?t>m>u znR`*6C9OgHYp4rn=1M9hYIuRUHe5k?hfJMtjs>X@|08Ih>O4>zr2Yx@bMhgTW)w{Z zX`e&cE1IB>z{~%DY~CcX>Tki%CDhBy_rTedbY!T;8XY5R)Nc}ZOVVsc{{IrGe;{_c z6~xDq)Oys58L&ChIFXsAq%I+&{}-eihjO_r=HhIP-b4H|WVGgYoO$?#e?V1@@(g9) zpx=%m-jdFOm$Rg;`fS50=%1{g{M_)StfM@R>nYdK{vd;nvXF*bppVsUQ3eS2M1EB# zaehYSL8V&3g&3GfY0ZUhhrEY>zhyx#y-bX zF^+G8Ul8yumX9$_6z-iMYjwjxMF{_Z^moY`ja|cC?H01eW)pF@S&Dd$54*?^jC+oG zT-UB}tV4dH8-x2E;6G9tucFNVpzg28P{Aw5LX2}UHg}U`^(ge&8|Yt|)K|cZ$(Yf6 ziuUP9FZEvNpF*;}s-MUF^915gfw&&=`^wn#BH>D3Xg{9oL7t`F|NQ50WaExxDUCA{+Ih+gfUMEe3Sc<^CkKjvJ`#H z`yc&l*3Sg8=9v8~`bO#FkK{Cc$pFnU5~SUaapFkawNDX$?GO^GeS>u8{VA~aD)@Uw z=9|k`2XX{~f6Y*gOFOblv}+pTZp!KAAdIw{-q2HwM}d)FBd#y{<887)^991_3+T@R zj3ZG7tB3xqgKTi$Kq!OXS92bCy}V8}^kf9mY$Y?*3lR4@&Kp2i&`wWWzlM8P$Xs;8TeF<$Gsvlx3%f$ zxB7Q=Z=x@M27QNd+>cZ-?2)jItn4SZIjIMLZxFo)nWWM^stv$`0jMuQ zB9TW<$J3}5P!H7tlAUqPW;(=vS4n{ zab3`K!T3H)hVr>lGXS`-5#db4ofdY-X!KvW1{k7-o@!U2zInJ09oC&h8t5^X55}Kp zmx}X)`ZZU{ZBCp|&adGbJZVa(gQk>R;`~8pKhx|ci3lfw%GIgJpA6cFvCQ=s^R~{G zEU-&NoKn_ya+|kLBcHX?Xj^_Q+U!AQ>N=20O%K=}8PK~>GF{7URy*LQA7uLo@Uag$ z$cgi*T1Xb!oWwok;puo8Y&hfw!uYt&4xw_1FKRr!pdFWN?vqNw7eDOi0d|b25(kYKM<2;tSe!>g^D;^ch&wGMy0|Gx z{^YNOvE%$n_3*eU{^X63qel3X&0|N6^e4sG&d0vTxUs|i@nk}<4&;RLD4v{EczV&` z%9*&}NxBVj!*i^Ml@yLGrm$}@gTlOIWDMoAX=Yi2=VKDjfiI3tt%J1;jogM1Ia zhdfd%j#tI;b8$Q;j;F=(xHujW$G61sKtWl4F?qSLcxD0FQ-llhbV+W(EV8YnY(@!r zyritCgsd&)@sA4r(4XjQiC1`NAk2L#_>MUiiqPv=O~aL>5n2(3{{dpShXB_Re&h>R z6uQEXSa-wGP8@B-(Mud5Tg1aB14mDBY>T6mKghnw?vC9B{EirYFWSZ0^~BE~zn->V z+wQe}#CC@5Fxyz0vo_Iq?*5Xj#p=cctVJ1rd>jZb4Ar!Ty9h~F4C`06YzE6@Gg%g! z#j@EFwv^4oeOs~em4=n3bgWh_z`9YnNv@8>*(_Iql#ji|-eyPHG4?6aI-8Y{Bb9-5 zv%PqBJ}lPG6dpo}2b+ZT(=7WIr}-t;ee6)PkAuriZ_r~m%6BUUAT$2#6A zQib)tCFp%deKj9K8r=;cg4Hgpf@@wyEc{`_nP3$W%Vq2xo`c+i1u1gKAtlFyat?l0 zavT)_KeK{rDaB7(Y@!UMjS9 z1g?%F)DvM|hOa1>^Yk)eJ+ZsYV>{qTX@8Mt5;T~SjkudeCW*W4#oYn8tHLVm2&@TG ztitkoIllz!i<~2P7U36;e&HOB#eIMIK2JrlBFpO#X=#!O^H@r|As2jpKs=q)Qqgx< zv&DTeN+{NWkxIp-jnc(g>H#i;HiYUVsY!kQzDQdsm8RlnMgDWdok!(6{H)xW&F^US zi0Le!KIb3q%9V;cyzWrk zzaa8*&E)M`$d=0Y+;Q&>{EYgxz$90NS*{G0ZIWvlS!R+e-6Yp6vs}|zmPxK*GD=A@ zOq1_i1s9=axl&oCd=EX0J6y_qq%icKG?Uw6ZdYNZcE*hEik}8HKzpoV`(m8C084rx zHTS~uAz{Fl_9PO!6~5T1=!+eVe%P7lL=y1pioJ?KSkdOQa}V$~1$dW^-vI2l%pe2d zVY3iv7h|_&4B`7NQ?T>0l1u~2JwZ~jlk^P9AiMC(BYVj6Bp+-48^~N*P5;D>49B2p z;EwxSa^m}|(|~WWsI@)E9-?OF(Hqc2gw}xeGJl{jgKeW_5A!>0IgZaE#tAWBVO{Jw z%(9Q7-N#re&qc>W2ZK>Zdmyq4tm|<|`x{Nc@f$h@$E%d%%2i-2MeSEMh;*lK&G5mH5&rSPhbIv;r%d3T=}uVax5QFzRVvfC5ck(e)*bQ-H^4{ zAZ@yquA}Se26~*HpdZqc^c4Mwo~CE$$Mh3=mVQdl(ev~I{fu6um+0px$qRc)Gq8u0 zEAJF3`$SJ;r)U@5O`n6^^9uHh_-@ewdc>q|t(bEu-DDQ0!4<_0r^2z2Cbaw^SWR6K ztA^Guqk-6IlMsaWgg0ctJv^sj$8H4neqy0F-63b*dmUIX+OA@u>;aaDb1&A1CE(nX z^=9!n_h2zB4(IMHnhnIc8;fGF3b6AW$zVIME-V5o5h~W1g|k?kLs%H=Yr@@Hk|6q- zb2x$gh+YSu1}R={ogBfXFFe=$SpW-UL98R|#DZI)_wy_?KLLDA;_`vEe1n}~NXgJU z%1&Mj{e$*(Mw`1r4&5P}o{(2)E5=i~*@)s=F8&%SfNxg*;Oz}Bb@Gwe_f=C3)nZ@n zBz*X6sU3EM9movoNM4~%)S0@#AMjORS|?yz37CX0HIQ`kH9 z!ajIA*qW!Y7v7$np&h6%_Qd_MGuV~ zdcbDuNxPF?vIcJLWhjY(Kge)8f{p~@Uxd|j2|JLZ z$mj48;d_HAbQ~Qo&_mvrOPmDJS6WXufU%9FmhMy4zDD`v7fsdBknRR?s?b^UqjboZ(PEU zjbtQ7b~3E4QP@G=Ot)bFeKZ*(_L8wv4Dal*(A33-edVXggYc$bL@R+B&jL6006F&3 z=jlGoVC7^#_T>MK(LJ8NfW73G$OQT_FycN(7P5*=6zH;_9)R{Qp|3&zAA&`-RO~;$ ziT&ue<^AZxVxRgL_g26@^!xM!dYnuJYTTkH$RP#ouupuNd?z6uIY!>2XW_~4v?cP< z%a}>OpkLA}c(%JnuhSZOgWjaI^eg%`{f2%^zoXyNALx(tCwhziO#e-Pp||B7{5yOP zpYPz)yLd9ZNAJ^ms;3PM())2OlYIcJp@+3`90m-F0Io#=>tcX^eSnF5S*-B?7{CUyI2O+mSRzYegW&%$1fDFz zgeS{Lc)N^(Ckua;PJy4xc+5Bx4ftgGbZxpukOL1B{;Zt`AC>~fpV8-Hr=0JX^PThg z;u)OJ#Sg-NW(nDe6$L(*Kg^c1N7xGNmOlpHl~rstcFotqgJnH@ZTQamsP znpfGsSQY$I?!X559d?>Co*8}NZJ;K*Ng#O^-YSn_T}O*qdH~yxef-zhL1GUJC=FIv ze=?B04)32g1qL4?E_f?MD&^Xvlq3|>2z;0Lq#u=X~?>U$m*-yYb6kFzh~L$rfzC(p4fWE(8058+L64c<0HIVP64(-zGt@Q&+-rTtimlNqRY%4v(CN$@}aZ_AUF4eb0ViKa%yZ&=SZxc+^zG zo8}7qkG{al(RFfz{e*RnpS5u_inHcr>B#yJ1o>J{ zAJ<#Hj+4)F{AZw0&LS}ApW?BBMysQOw2{Q{zGcq%?3QDz! znHflhQ*mKNsWwSmNoB>$yd}tWCCFtb$h;*)+9esvk+aC`#K-B9gD?h_JfUV z@VL;h@Nm1qhGNu1W@HrG4>3;@mXshjFQK=~7N;F=qG?Go|4GrB@kV}=i$rmDiwydqnl*iv1~fg-rgVB~ zPrlzHIyo{-4F1r_FwqR0B?O5KlVlMYDxdo(=>(J@oe)ZBWT+e;s^k|#821G;I17-$ zS%?eiC5?^@6JUdD0XDcV#D}wTt)vs+iFncdp^@Qoec^I_;WEGB3cqstaGB3=na^;U zpKzJKaG9@gg)gOix&CmOzi^qaP$iwhx6*#49+}@zx%^PMzEHWIP`R9Ng+IBz&~V%F zC8fm~xuuy4r5?fj$;WqOQg3H*4vQ2c8QX^Pb+pBGoW*s#axIk;AxkVmmRN)=u?SgW zQA!Uh_vIEv$SsVL^G7N7R(&q7kwLB9v<-oh*?ESt5~g zeUWl~kutxL3cqstNSV(_na@a>pGcX%NSUulg)gOix&BC*zet&{C?%c3x6*#49+}@L zx%?=(z9_k#D7le;@Uz3A}ll@BE}+pZ;R_b z=GRe)=GPGx8WdsBAekS_^n=XvM_TY7X~9pV1;3FN{6$*u7nxvDev+_Y)+vjB{w@iLp3g=OgCOCN;NtsSCs%7U6LzR6W7O1 z)L&XyP*~z1*C;M*P@@Rg@(QK|9xtd-`x8)+lg|mF2BzL#CmU74}i3>YX zn-mlcmy*bh6&E&WtO)29Wfd3pES;sr!wx@{&gWM)r8&h}{8~4wu&h{|bLWZsCAkau z{SrKi74Se-F20<=6BOi%0=PWFLwgG#!dU735{jDwPTmm&HN~yilhZ zFs8DMx5cILwhOp>bkL!dXl$I7=E89u{Sjm0wi4 zuq3Ng5_o)+gVHE2XXkh3nMxVUhBS&^MM3+dR3AXgJ9#HHv2Yq&T!BO8iRT2@@( zY)mamaT3=Caf_yhg+=Q!BsFr%EG$}Rl)Q_Og^An+j}elZhepIiX~f`lR4_qYc^4H6 zy_}w1Tv|LG7gBk`K}qZ**kOgbx8!$5+_~QwahLqg#EuX5gA#iobFzvHu#&^~aX6{5 z#*Q5_U-+#N<`&7*wwvO_{~F6ZsQ(G!HePjD{*H zUBk+TQYGFrTfLQhF7>XUUAJ1qPj@1auUt}y0RLOf+dZxHTriHg#CizB#_u5mP?L><54CE_e( zYE`dHTBB%!QloU1^P)86PmVc*a)qAqmLn|i%d9@B)++1eDy50M>BcJwDdal1tfW#z z9a1XO9%!gB=ERN_5o8i&400Lqzoxa(c!#5^@k+|qnqyOWj1n-W;2}9a)>yVAKjU@d zkTu=lslc(J?;Gd(zs59}^uMUh1Zl1DY-}+&Gtsf;_%P;?LZTN0a-ob0V@_i_W1Qg0 zpe^R{(v@6hRl}Q-zA9-%KbW9|tbY~=-0;4fpO11$-^C2Alp@z5-AU(H4K5&Fib?PC zc>X7$h*1}$SaF1JnBd5weq#zLmxSUx))d7}ky++fj2@(t&&F~rL(2HDj5l8Meui|U z@mQg7Z!EcS?Z&*V4H;V}q#$t(vq|~0rfbSQ>D+h@2JT@rbIj$l0q3`2ufjdggL`7U zH=Zj*+G?bR_Q{+HTrlOLaV}A&slJ+oB_99#M^lcJ(v3YMwOWb)$7hbO*8VypGRoSG z=HiUp8T&%&hvsrwzh{aL)>H6UgN&MLN7GrY-oZS-MY>^Zi@Btc!s@uQ9xGQ8E0@_M zYMPEStBn24NF$ag87=v1oI**-&z7l8@8PaMGRsjZ<@sOCSgoCH%(-msl{7mvky_R( z>+&#axstnajB}q1J5Cz zrCdz!S}R++Z{*vUUKugQ81s;|Jmx9DgFNbZys@{XoM;2*R6LzE&6%-8k-CMs)|grf z8OEPHQZ4Trugzs_jBgw=r0g%ogvpGDvX>|o2tXI zNMkQq-uZ7_OZqRh%QzNVZfA3-)*3zhC%iW&iRSM8le+$wdAM{H^lp9({a3hP_zn}r zY8ipAW(3Yr@Usku_kBMS13$=QtjLYVZvZ?B3&=oHgm;4`3NObg7(1unUw<0@SFaNO z6{bu0YS16>j=GEYm%f14?HKs7Pr^5LdcbEh75<~s@tvJ;_-1CqZ!{0T-tfzui|>N* zukQ2{zLo>TS9;>;GI&`g;A=gP;@d|n;Y~RNzLcBbDf$F{WAOEy9qB)OfW8l}{4DwbJoe_%PvEInPS3&{ zZv*`lzIdDH1@3W2KZC#BPI?I*cTdsJxxX5{jMd3AkgpfkCEMZW3qL)4&l&!8+{2Fl z7$hEpV{gbkM95tOxetX$Zwe&sDCExYWvsbKgOAg}>u&+Pz}?^rS`I(GCHOg!rQ{)m zABOLn4jynj@Rq?&{G8zXwi}*p{H+HsctRh62j5ZQdB?w@MafC>5j@{ci+8v9x2Wvk z3w#0bpWzEqcIeGZ2!D>B9sF7^BU}xSH#_*eT|xLNem?MlyNS1WYvI%D4KLK&Scm-& zz9iKh+HeQ0{0%=F_!IsKpXIywQU0ASco*Ks!mS4S;RO%>wzMsAg}-t;(h*_Gyoa2GHv=5-#XEeMn)?b9ANUH7!;!zu zqsEt=CKE?^38x`E1MgQkLGLo*RElprAwHMpA|CpOm_k~JV-YPP&d|iUNLfNl5L1eG zhMeI0yBP81v>f4O@c#9M_wPdpKaBURG| zdqQj1A^irtZ=%LGq&5;Qw0INgf;R*nM+wkov~&wRf<564ycN=T68^w;+!GjWte{UL z%`@-?ZVxTrg}cw3HRW>!H~~O@DHZ= zM%BwG?G;*uln3A$tihM6-oWuK`W6X*NATN7gRfK(8;qI5#2cQ$M{xHjJqm7*(PM~t zkG==Vzfa#s{0I166~!A7C(t_|(hrFT-i$bj@=wuIh{qce=&3XG3{rkfKL+QY&`*#T z?@J)&96bmA&(rfrd4XO;O8(}A1|GzhA(Lua4JlorS8&Am#QPLAv<8yAL2n=pKBk9w zj8(+^NPmR1f1*D@+PCN}#Qco!_&H(p{(|srdK)S4&^rkKMt?(^-znZ-!Fc`?;ky)i z2w&rS;OaiTk8nM$hd;cY>Je_B4a61x$MD;S4>I0Cfgdv7W`ZxWiu8g%vYK>+PqK#C z!!KD&0^pmh!G0*_C=!f_g#M%v=dqEylj@9?G} zJe^HPIGv>o`E;b+T!ixOoV5$nFwdGEQEns#E)YZj_@WX!SE$sgX2234y{89j%CD`qZr;t28!XmW}q1SY8kwE`P-HVajmi zc;_YX&Wk*VpNl{}JAryZ0`=@nP_L~(y&x0R>j2a{3{T@D0{f1^57{2bCt=@7l!mX5 z;k}>Jz%;yfg~31GD-7-SBoU(9J=hTN{CHjso36fNor?4eAO+@C9H-L^Xgo(cH-U6ce2zs}!ngvw0~#oh&RHOxoj^KU6Qm2` zb1%x|?>Tf6Nark&jtQir0_mJEcRq?y#F5TLM!MB_=fO$FJG|?F8adLb1ky?9<{{7x z-=Q#|n-=J{1K7dQjS6)02fFP>m}40gSk_%&nZ3X=4}oQl0>#<@#a=-g%=S1Q!21m@ zz%sls%HMB5m?N6K8J2Mrqb4ZkfVYs2gJ+Iko&vwx3H)jUvR6jm%uC)-hO}|I^KZz5`Dq(OC|8Dg9(07yb*B|^5H0^GC?uBMkp3! zf?_IIBmZd?mN^LgYSRe6f(3s03;gOK@QVukauE0xDv+xSFv|{zh95AFBUgYxE?0qB zZ3Jd{1FhVF7aqVYSG;SXU{)I$vp6>S3T*Nd*yJm)$xmRDufQfhfla;woBRYe`3h|E z6WHV~u*qHEk-Z5Xc?mpnhHdpE5O5pY24v*eWM_g+c+0lcqx@X{62Chx zcU-=8`PQ}V-}r5GZR=8P^1I+-_H%Xea^Y>|Qowm1+P;s65xW(&2rgajAhea|<7brj zmrT{*uPx`vwJk5j%SGf9rQn*&3!H*up5IB7fs`UQS|POq=i@H%&c|HaIv;Yba`tq# zand{e>GZ2(BB;Oeb0GHfY)9y{8W#;y9Rv@kL-nfaRm>dxZBzdB5B@&@cw&A@#!SIy zmiD9&zYbzH@x^@cka#O(H)g1P!2bxK{nvO;n4@~0!0-YJD-`d0af@@Mz~1!&b+-!C zeNrIpHi5L;1;*|W=(UIQ9~GiNAwI zUWKJ~gj5M!Iv^~n*Z4c80_N&IiK2InLjqA}0h6oD^gK6l@eb@)3V?ihRP~oFbp{@1v6QV&r~~w=Fx8%Xr5! zm|Ta=F`U%kjiw2tmT{ZoD`9hdEk^V=Vl00vM)7xI{CDZZ2KPQeb5IW>=cj_pbtSOL8m|; zflh_2919AhogFHZ z6-ur`t}0yNi&Xf(h+GH*sX%Iw2BZb)KsF#-kR8Y#8;~2w9pnM> z1bKmmz}I6a=)c{6SJ94Z;Ql(O26O{-6ZHROAC5tPj0KGYO=@tVX`o!t22ktzx607J z)yQ)NR13Ndvew_w$7cIHpuq+Gz774pjSbg-&qjbIfw&HA`XBeY3wqs!>_bg2fL;Va zqshylS3s|V{spQ6?FStIy#_i6dL8rz=uHqt0C^k4*OK1>y$d=FIs*D{Yt;YW5Fwbv z;z=MD&jGP`Yd;oG0Y9lnQIn6qX`_|B-HQLo2nsCkHTC|z~TZj*+J;)an1&Rj6 zfF^+^gQkF{f~J8|L201rpmb0MXa*<~G!v8sngz-R<$!WQvq5t}d7yky0cb9$9J?b+ zLCZi7fwq9Qf}R9z18oQG05zv6r%}#XP)qa0{~A}Cnit^xLNN;i8S&wu((Ff8OaQJs$R3J4-1JZ(YApRX3TaX>d9^?SR_d&5{;Et6_ zcRYK$Vu|jRX?K8jf?ful1i^a*^Gh}6 zmuk`9KOybUNP8RCzaji5`WEeF{;(1P8t(EwWSl<=3($wm`5z;D1#Gn`>q1xwF2X{0`^@6?7IrscNMVjDq!DLz`m=1eOCcHpo08`ez*sHrDzue zsX%Iw2BZb)KsF#-kR8Y#8;~2w9pnM>1bKmAV>M~h@jjCfy22p; zUC8q+^6bI+dC*HB-Y0M4ETMIUu=RK!okH9>q(vJs{wgr`Dlqmc@Sl-zd#?g>e+BHl z3fOxUqOZUwY`zNEd=;?yDi|=CO@Q|!WfMft`C>-KcWr>(@L$AgV#kI$HWVXc81~EX{F{>e8({7aPl*%0501daX-h%;ib9&O`{fi$ zTnWYqWB6vh$gkltHk2_><9|G0C;$umV+Jw!Ab$H;rRzN4C&UP@6c)x&;WW~0X?sPo>xH6E1>5U(DMrD zc?I;m0(xEnJ+FYCS3u7zpyw6P^9tyB1@s)>QUd`Epyw6P^9rE*1-O)f&E(p`?m)6Zw>6<8rZ)zuzzb{|JK0%t%3bp1N*lI_HPaB-x}Dz zHL!ncVE@*@{;h%iTLY`64k%d%l&k|v)&V8!fRc4U$vU899Z<3kC|L)TtOH8c0VV5z zl664II-q17P_mBTJJ&$UIv`{n5V8&kSqFry147mTA?tvUb<_rA3$g>*gB(DPASaMB z$OYsIY6Efuxr01Fo**yK7&01rZlkf|HX6EJ0UW3hJ(Y{Iwcgr*_>B!UuwLr$L|g}? ztOHWk0V(T%l664I8dxuNK*u^DV;#mv1+b(7SW>}z8hFCdvJPlj2ehmMQr2O|Wi-&T z4ro~iw5-F^aUGDd4oF!Cq^!f3s=$-dF+3^ZD{Kub*>q3_C=-+gPX;x#Egc%lk<$eu z3eU>i0!3^EV)2!4XccyrKq`7Gwvq2RVQoK~5lNkPFBa)CS}RatC>U zJV9O{MXUCqrWZgjf?fh)ltG)Sp-t7$rfO(YHMFT3+Efi~s)jaILz}9hP1Vq*YG@Ny zhd_rw?||L~9R?i%9fJ?Sd!YA0AAtBf2`4}wf=+|ZAkD|1Pe5mJ{VC`i=sf5Gh>zrp zpi2mUj`L-lfn4MZ(3c2b0o`q=g{IX)(`uncNlf`;9~Omhq9c?+6U z4Na=0PvX1{v>mhy*Ly(EgI)qbF3_x6XjU~es}`D73(cy9X5E5j-GXM_f>zyvR@FkQ zYN1uNSUstRX4OKgYN1uN(5hN!RV}ot7Ftyct*V7q-2(1-19!aHI>@0DW-cGhT>R^l zKCpp(U<3PL=JLVJ<%5~a2Q!xsW-cFKnh$0!AIw}nn7Mo~bNOKA^1;mIgPF?*GnWr$ zE+5QXKA5?DFmquy8!U&NJm`k+Fh&qk5*6Ul>2K00b?!AdvmJ*9pD$3j+s%)r+XS9-ck}56}#IMcwqE~pIG^)qVvIUQu)TQRFd99iH;A@liM_bD}_2ue%9V`u@f4t79 z2oF_r?dy20K&mxzkhK=-%g>zAJ@bEQrAigyW+qY5%E1vrqI=fwSzkY>g;wgH{d1mW zJGljMMy-pw$?rsekX4Idtxof2g`*<);Epp(ZRrPjE!*$M3mk;Y(LU{4klsPzg8j*bZT zWl*$`2v03-re9QnJ;o;|`UZMBtn?W-r{}ojqz(b?91+&vhOS8pnf!456bnvu{-?}ax}!3F5~M$0;cp68(rN*&O1z5#E+KkIl+ zZ>XkG6NGYqV6_>*et}aqR@z~q(8hMqa~t+-xc7F`?SLl#+p;A%KdLO(u6KjsTw;LUm$cAHO4`e!kGFvV#q?>%RnKE+o*41rv(2RRk7Io?U`=<9!TK{18g21V% zojP>#Xp_||oZc|2Tpq0$N8AqM){mj~h;UC&56tQznB60Tfx=+Lw0-P}gu?jv!h}SA zOzbsaK(8KgarN(8FrjsgFG@%(NJuD1Oel(fEUrh-fdhN?h`XC(#s-%GpP6)9fc@MG z0~c12-$cHuNP+HwUJfh0Q|9y>Z$SF{D=m4LXFf>ot~RS&)UEvr`pl6RxC`6LBOpeY zRw`EnW#VSmcKvIa+{QZlv}#-Z11!1z0Q*o=d1A0+Z0X-YSf6)7pKt;#T8kC|CZLn; zfe56;H9(T6E<_S+P^W|){Vq*q(f%3pU-SzLJh6P~ySXQ$vj)ZG_B+vQ@_=!9u)|{;YBgD!BYYer z1$Jank!?CggsZ)Ds3%aX_0W29gAE#`X5Uon&+XbpL#yx7!2>ULz5LSlkKr)&$@Z5n zcfB}J|F-X8I<}^Ujy-(;QlBSZUj65D&;7ajm92d)-RIV*s6|+nSU2J}rK;JwRKqY; z-D$o)VRI%nS*cPdpLaRlM|i~mD%_f_mTtimd`e$`FuD1vb$R>u>o4AYw#mwQi}k)j zuI~H`#u%d^F~ahVL?A{dy0m!_u=64D9YVW$2Xq`2Ib=n*-f;{2H_w#b*WG!UQ;1iW zPA(s_2Ysf*O(~(ro8^%AyiSpiG^@8DpGPS>NL8n{Y<{wNUJO=C(;`y(2OfH`E@cb4 zS^azX+M*U}U3~4@-Rvft%>U;PqOrjkbKy0L5$5IT*~Y`2X?0p{PzYD_{ulwl!7ycm zg4WUx-1Ea<_-@|3?_LPccmMh4z_gA9s|Loe%Ii2i;Ac%G(|MfIfAZ#A`cF=J=-5fM z)?>?;iZukzdrGfAs9)YJ6SDdrYn}~!cSM$fR!jT|mW>6*b%ad#6R8PQt_3>w zVWaBzvy(K^V&%n>z}5qNEhr{xvD-7iC!JFBwZRi~-2WP?m)A@5=TrW)HbEVYQo- z_?J>5jP~_=?wxB~tZc8FmJBrsz zHDQ4MbiMuqlNvY#t}rSba&xV~n6sYyhwJqxjJXxFTM>*>H(w3nbz5{e^TmT${b^%< zJ_d!YZBTfn1a50vwX{u}@@=DsEWHUdG+|_0^2#l2At!;i#=$6;dn{ODL%)v>UuySR@EnsNVUV+~Cj)Jm0#Y%*cRHf_V2)W~iL z8#YK@t>7yc{@zY2+mEY{G*+ukv@l=aHEM%EVAV~u5j%rM1YWBeU;iL;sK2ABJg=X9 zp?*8ZYHqR3)*R+@R}!8uObx@3U@az0PfTTa>VPrItr>Vpf3fM#!I>}8o+tFQSIouk z$2V_3GYkJq$tT+v@6U18e~6`UF_1ymh9rgOHbHNYopmg=!=brmxHD%M^ zdURi#zBZ@yAHK%5Ueu2@HfR1GzvbE?Uu$axN7qeO`o_14JFV$b@;T`)q0s3vDHTT*q`A*}8E4q&3u5^y|{=kF<&-tuP2%!;55_G+<;1+a$s@ zz%{}(2*O(b^^-r+;ztUMj{o~M1ZrMB|QUhyBkXA`gVdquKdGxzAYfSU0 zYEGPx@w`E?CS-k~rbWzBCKY{}T#~6RVZsL`l^CjX!G}uXqVha{Rz)2={%2u3=^$CY zB!~)V8f+&0Yv&bHiKlFM0fQ}5a05?)1X+8Lc%q`3y?A<)HAw92!4H5%%d13?7w@?M z-g~@`0=_n+IEzDpF8F9YJiGy>{ zun!!}*6}$*?5S8?_dvl9)bCIVinK+Sam>wSlhuv z5`FsV%UwQoDjD2sRy$YiMe63$=TL`z>%$VJhemfy?XUXmevg4OC-uslhCWAWYJZ_w zeCC%l3&3Nw*lfij-PE{zgZk~ZT9N!*@e}xl2J^9qWgq+jSr!9YxB zmGyD;eypl~G=xaj)*n#wT=tT+Y(z&fR-`gmlvD3swDhyZ^$ljFnP6SAWyxYxs_Id) zM#ct?2y3zU*y#kXw~`Q5z0hCG!phi$Cds3dtyRV+PY-)gq}M#J4aR$b@a@6>sp6`B zotIO8K-6Ln{We2)0VW>w8<}-|CTcflSmtC9?0W2NL7TxzN)#2^9N;mCZK(eid1(IE zbivp4J~HP5Bem_2-a)jBQVx+=esx`Y7%xNVj((``HC^8msZXf;{*|Hn;(oB|%lq)B z5*F=UmL5cI4P}=4!o6Q>Bu=$o$xGl{|h;v zK}wBt^SRgsxs_)=rAoS3Uf%Y_&p_e_|Ob%S$k&ymA)<^(G;H>^O+j!=yc<-#mv zY~%|P&<|7d^4fB)FqVQa4x+^H!g50hg&ZTOy3@r)%K{Pt{d}Dg2X>CCFT03xHI;W? zdT5!AZKX=}Ktivq6xHYVfbsV(7$n7!AONK{@u;G3t6JRDX2ElcJgpdxCPI_R`CXjVR7SJi_FQq$!i{+@dXP-W{r0vTViyRVk%nMq15ke72DPpM^?4i z2!n*BHIttF+dp#8Q|nOFQd5>FT1p2tWxCY0u0fWoE3FvqN}otOpWLIsVAYx|iCZ0B zs$tyXoz*;Rk~O@pMX>_)_;>=!a^DiZD$t5y#0su8U%fD&TQO=HV=lL@Tj)5p9IHU_ z%{O0K7itC4DI9Q{JwQCQHnQ4VVrONeCBcMdnX_i@w?hAAPPOCUAJ#$m#>9BSLKf3{ zOmuWh5TnlB?bvNVpQroxif30p=I?ds-JbOAC zBx%MUpEz3TSqmPkTb^6Z`3!_pSnI|f*Lg@%W#AQBPtEvkNuKP{YgGF;L@HLhKmWU8 zRZtIBNmFud#fY(xYulE`Pb0bFA-5HyNkO%H;MNa5QUib|=2HE;qsxNz4u5m3Y0Vo# zLmK-{v^?~bR%OZ~FR4+hT7U@a6O={Mnjew0cN6BcMGIRVs+t|<>$P|!GqHSiu z#8+@yF=AD}@?Ei792}d)JZ=Q*pKaCfR1lf3dB`&oo>g0ta1EA3?lsQ>Uw|Lm;)E#M z;gy&Xxi4@xLMCDZoyNp?>2y@5X@QT+TVD26MLQqba>ncaM{Q_PvmAM^INDyd&hyh1 zwQcSfwL91nYj`r3o=`IJWIl=TC-ZCgY7T#5N4!mn=7?I3Cqe37xGz21zKEy5HhgBs z`a5=mec`hsR#t)nToGZq0S)JlK_30vFW5DD^sWW%2e|9k(0unW&w*Lmu`_Co^O)IDQMqHBwQ8lt9jMV=suAmy;n;u{|M+r_QmJs> z4B@UNYcJC55kvds1xNOww0E!m@8#>a(^-*oI{ElB8Wb3q8Lmfp`ueu+!y;n0j~cl- zcJy@pefm*Uub^?=!&8Ggg~~ldHi8dwfs;cq&9JWyZ^=GvA{cTMN{pGuUb`bfn==x=r za#u^W%g?UT9y}kx#vX5q2lgf(z=M>IZ=Mrn1w>MUR`4S|%X;%sl%lMS7?iLnmi|(l z0yeacE8~(%Yxu$%9PcGQw*BxwW?QVaw8$LumKS04-mT-#e2u0>4k_MZs#PDsK3KH0 z4<@f(Vy&Ym3+dET#XavLe3_RHm)I7A*PEx8##iOx?!?&Eop*P&{W9Rf+KG=(_UV<- zS-&B=DD{C=KW=*byX_rrIL}z0GJ3_RLD>=1E_~_y*urofOW`P?<=&y9p7bZ z%B$;dwS%n-N$3#T%{w4ScJo>=^zSyvs^ix`YaQ2hv6jR8#kiCCH#-F85u z%d;%J227` zadZfGNegikE}59MJ+NFH$t?x$bn8Wh387j#a8_{liM>XZ52I;Mr3d^JHh=;!rZc1@)x|*)=4p{wQ!pBl#mW^%H?Q#|+kI*%|ku1+f@Shdg?#ok-gOpX7QKZbUuiW+RI8U&<$_cl- z_&cQcc$v@u&a1uTxo+IiQ3|HN%G1R}sbrH5OO{!~T0Q!JdkNw#Xn4d1N4dthy7RY5 z;2J3Q!PM;Z3;O!UFZR!QC?WBooPHM{*Vp^5x%Z-K9lc*ZZEad;SlZgDs^#~KU%0yl&W&W)L-4GWC>@RDjqhaD4qLB@aF`+(`fRJ6`t^|)WlAkyxcOn zagAm^5G~crQQX%AEv!{Y=NLetaczcC-&9SokYpNRP4}7IW&-1qum6bOuHL!WtRy8VKT4QUfaHXHPClxPSS|zYn_8P1PSYcjX zL2IdezHZh9<%dK^!^$_lmt|d4EThr$`=~|@v${UkJRf((s#quRAyyl-Apm1(P0UJ* zHA8kg^^EPkw!ddLkD-3`OB*r3AE_Vh6ri%1Pt{J@cTY7{x1=X`<+T|u1+&`a6|a^# zIAwhtnsE`#pPidxgg<>ileiT4iWcX@u%6YtELg@hX4ir^l$ER2h=g;3vD36nn$$y! zUKwazD=lThm!+DMir__Bjf%1CpGKP>)^*l`G0#?Lu(<-!ZdMkZnqpd!A75+gB&=04 zox(bZ6@7BEx&dOrcw;?x5ZfM&-%v4Uze)Yq&ahZWl6aS99v$Da<#P{hdj9#8KYH@D zBTeHWXjm_5N>Cg<1xoXEB7vS_mB@;8=m}=0zt^}5u^!Y!@tE`1>N7YtW6pnA%=tI) z-R?M9zio8V8%cN%TX`GG+WSb>6^eao<;|qdjrnWh)udrfu*}ziB#H3#A&KW}_^v!$ zlDMCWx&{`87B&^EZ2s@MzWW#W4)EqL^xd(&AEEx_uXLUglGM#cN_bp|lvuUkFT7ED zSf6%<_M*M6ii1A&oc@gd400Y-52QH6!Ji`P-Wl|YC_z{s+#`Z(0IyCdNA1Tu-Pu}U z%Ibn;k%lt)%+KEtpvS-+d5-hZwB6>e3E^rBy(8=_y8Tx>h~RDaZ%Rq9Ez0+jr`58=Tm`@6d-Mf|FC zUk|fVQqas7NoOf})~=qN1o+z+SMUSTIqeiD_zz$wOm0mV7U^-7EX__O~g8kMlgT25Zsa{?qU@!29QCfY| zr7a!T4GA-M8~~Ee)dB`zVL2qLQ*29kXMAmxrZR9Jh3@l9p8n=z$*wKjE zzSA_L#sM>f5eL+sG)>TvcT}+*FN+DJnpXk;r1r14R(=wAyg|pn+;z4)b|ei_1md1X zEL8xj1Ngwfjt+pWvan?pwbKCDKdWF{XsyU=<%d&7%u9)R>1tjaol}##(e`ckFE4EQ zKi`49UUiQAXx@~ngkEN{F?olp{X8SxJSN#q**1AXWtxqpgRQB@@+FDsp&O3m%?emJ zMm7B}hsug)N96{1mpc#W17)B4c!YX-M0-Hb7@qP#_~d330=-1p{506oeK07(wkJfH zhZ1@ZPChl>vKt^b{EVWJf4kb8PeE}yRx4HipHJGAa~+j4TD_jUOAv8mW1*;G(Sjh! zx7W#%W>rL zF?uM@Rs+`6rPEGzNR8RZ8X7e>s4-_&oU#YPj?=aH-O0tkD!5bFZu2 z|8yPB)Edr53%3mVFS@UzuFK!A{};6IWAX9vMp;M;ow@M;3l67u^+fwSm5KS_3F#uY z)L%vBX~dX%Md4xX^}u{QwO02uV(Uk>$Ikc(dj;zXQxjW_pL|%E9OhqA^ne~18+oB0 zUweP-)AZvHwI(a(zAB!wH;~);_h(PuA)K=)cOe*$yK-5Nm^K5-9oS43Ptzk1w?g>S zjt&#H>HqBr4b?S5Xi7aze|}Ss5X-eyZGQR@5)MBc{&Zsmaj!Sz+kor(L;cVs4c9&5 zl6tBReytuX%+c*)IS9(9?5>Wi-3PxtdFR!dPb&1?4(8jWj=t*`r%$?oeu*Q@_J!-s z>@9j)GIYuHeHx8cqJiv1n4=2FjTi-M3Ft;jwSM%Z-K8&}z3cg;J^C4|Cq4Z4laC?D zeUvd^@u)3{r^OsZ%P&ueHZ#Txo*ZewwX6N}wE7wOH~4IBKOx>|{s@PkW|7ihUJssv z060%ahp*siWcnk3T&Bba)F6Y$jO2>8uHoevI?Cb8W1r=?ORb(IQ$x^b__>_twt0 zp1iA)%z`xwD{+m2bAb$czMswvh>n~S3ID{BU1BA!h>R!fF@Hj5MX!g?KY5=ei6LtR zoj(LlFEFI>Ke5bypwG)T`AIu`yK@+(RsQ5XWuvPw0f~+|aT9P=7X4V}=(#diI0dj& z5X?4X#kowW3(FjJvzD1c>Y0_bBlx^VazQTO@e*BLELQ|wUYsc<;Qf>N?*FE8@t1oV zKP@!AOc(7bstVb*dGdO`Ns}US)<&Pm z40oNJs&qEz`nbi0#-^Tle$(VdvF_%)mD|i!qY@^EOscI3_Qu14YNs7++?~<(*TKS5vu2(w%syFKdNLP1 z@vtuOK0te05w2SxgR8EH2DQ7yf@pF&_1Jey2wC>Sk+ZGtAKTZZPhS-dXVGpiSgO1c z@Tc8&LXR9LWb2vTq3H!VO~uDQ%t-S+Z~{H73h>kRf#&SMp{R$~KjAzKb9*^lkyVOzg}cDUoUqXwFxj{9}Z zjq@}_1wmHFv4tD4rpbH1T~0{Vw|i1{jq9`Kqe_Q{ zzY@b@>?^6zgR(n%k9XT-wrnXw%UKh>=#OV9+g)unE0OX`>RL)SoPYg zhY!6%$jgmKUgD0f7Go0<-pPJ=J#r$ z8#eAga9~I7Cif3UwHv9v;yAlH)$y~0-?&@&_N};!=PqA({_QC#5nB$D_C^Rqi+qv8 zNzn4b*773Gm3;A+@7`<%6E)QKJuL*O-4+ol^tK`opNA)%o_ z2NoJB@E9UM1YWXf4;w_ILlzi9MC8DaC9jIRRvjU6e>W=L25Hh;jg9E#+S@Ihm`}?P zTB7%g&yl=WB3>Y?FgC66UKzyen>)fNHEMX;X;DT8P#)T@myztOYZLRzPn$WRwVPRvn={-98! z@QxlB@CO;}2CrrS1N*wW*O^CrJqCIrN_##>_97Im*$vWOk~nP56{VfVOJWfHKkgP9 z#7 z3;Vm1Lx#GenPX_72N(rIf1XlkaDDaULJGec>;V6W@of-aaqrX=wZ0X>DsEFO&O?Lz zEY;l2cJ1OBi(hVtNdhaWb0yX zGqa781j_pZ&bTuevuJ@WP?ZMDD$ot|b}TOhc`V@aF{r-M*tEtqLoPY3jG3}5f(&?7 z-otvum5q87S%C)5h|e7xK5AJ8@#0)spY=>|E7=%DzA&iQGW`K?Ww|1VtDbC;r@?-Q zR)~7v6ZC}F$`yH#@ZaUYvlOMJLGQ zi3Cov1V@TBup=Z)p~vtkxa7LBRrj_%9k=!bpFYn zt900b)7{bzuG|wu?i-O1VDbf9xVgM(m)l= zM|1^eX{>*O+MPRqr`S0ykpbwjgr=Zop9NsuFDNDc+LoHAYl6e&q!j+Shi$7iBW6&U z^L@dAt_B`4!Fu!B?{VU6kX}8jW_|4zUJ=A@eRpb|*o<09?DxrrK zR0owz@SArs>)L76P=2`Zj>?GcU$|!N?C_b#vU5()SHU)3NyhW3|4SJ!!h$hj>j#qv zOva-Ov(PJaDSGZab;?^&*y$AVU0{h?56E~;bxnOs3Neolel&JY@(xQdo#$@J+#kJp_6U7FvK6I?PcR$T_{l=8lgn z^l}*KV|OESp-voxWD{ePJzW1$BdT7RwTv8i93E^nN6Ts$*j9REp8m1tdg@7G?5z{I zM}?yy^u&0^e6UISsH0|Thb2bqG-pDgcc11Q{$<6gUk)DrWo7j*hxYE?yL-mk(fjPS z64G>nkWE|LjgFrX+P5^f96j+~*74cTyboi5@v`}h%Pm;EM2eW{hk+5ZuXMp-e16gZ zFby>1b1RIOX+?(g0_=zk?bHKR%84`tS@gYKll+t3}M0iz6KBhJiuQyU-J5jcmT6^czyNbLFpaAS*;T3Bt>UGuVE~3)OArq^z!P* zg7i~UgB?U7m_3FX=+}KLCU+&Tt~;B3l78zJ*m;{Zcy$e+Mb(ti<anL=w*WTrvg_AD}^els>=AO@rt^;<@bx?ovLUH9Nfv_z&~(z`)jzCcT0i z|MPVsA|==90Q=0l8YzQZ&%CsvlmU1;oG4n8?vFcjbO96nvN}Mi1)4_2;NBk*mgtu? z&^I1(+@f_slN5jB?!ZHPKnWg;M>Ez85|%vbgq^Aj6&>cogP$Ic*AgC10SEin1Muox zozT!|bMH2qdWK5{G|hzVx)9=j>{Q^fb%+6EMCrQ(RvEFfBT}goHe&q%1N_$oqkrjL zgF0gcRWctKT#-b1j8qcqV0lqJ}B#6;&5XMw24Od&~wWZnx& zw(HFA(30&LP^93YE`ZG0ao!N`aYo*txom@#1gqM)cdl3osd@UP{KeWc5cjd#SNn{g z>gM2fUEurGo^hlBzI*GA4^Z74ea0{zOmAk~<7VWqk9Q184vy1fHVD7#!mcZWw954( zC`M=%$H2OBGkTXB3%&t3J{*3d&E>$CGHXI-_8)qlz%znIm{!(Om+U_<*Lxev{u4&Z z`?vko_8VQ^IscCrq07W z*ntmVl;~FGmWY-9%&oco&l}F%Qmx?na6KP<2hJU=VM(v^5n`;$&kS^3h)P;px?*(6 z(yaFUz<%K#g9~Q*1gr@33mFJ*f`^X&X|{GsMbCej_Ht5Y&JS08j{XnU4zu3y^b4Hx zK+i6%k+)!$3n5+G#68O3g4Ne@GBArV^U8u3P*X$fk;apyQ$MbBXo z*w9khSUR}*Z`)7$Z7I&3<5szRL*v+@*OphlRo?3plghlTg+o^^U)wPD`$4A*e5-x*(G&rFx4yWjLWUh7-t@orf*7R;*CNYD_6W}J;u`%n%vSjpRw{{a# zYAmI?Iw$$ZtQishV_7Rzrd*we&r@zJa$&GW`a`DVm={y3<2 z-w%5At*lsDNnVxvPL0SZ4hS2RJfzKncNr3^oH{=+|Ja3Sq3?naSQo_AaY?}fR$AcOB?-9;Xn4cImxbZ7S8);s_f`j{p3;OBR5RuF0>^^ zWGhFS^`W1$Tmxu}GlRD96l0Ly7(?WAwb+lUY`V5dK51$aJao1UYd^L;SAJ0LO5kiA z%*CZPvQr30uw&TcsmbW?)itjybfG}r>NWY!B`J$)mhzUr4q@xM=G(rArR}>{W z5y+8Z79^}IU@hiK&`A&+w{qa6(GaC%vEZ?eP+J%WO{zR;4N1~LVqUfri~rux^4ne? zaD5Pq{?f^+pS456gUE2s2tuIH8`e6L?wUve(GTMoF2}#<0whZCZb6gsK8CVU>{LyI z(+@dAt6au6&eJkrYridL~df1 zzTTdhgJHi-7c9wnWzsEZ=)D?@m2n@jROXx_&^_tI^!e6>Yw?Y zkb(-B4^BM}FQ|ekQb;{=o$w+C`IAp?>^+p#1@*8TXQw)H=fdMD_24}?9?UTBKAu_z zdAT#SR4?k~>>tDtRFo6G_jGrbEo+#~MX3SfSPvdZd(e8Y26tzAxpfIQ=;!+`Xl{Na z*+b_n=*)J+`_bLRhUbJtTktrD)iNWy_P|9?@S&T$`GUUa!|}(nhDVoenTp5pF0RIG zy~Ns?ka^SLtNA0RIJZ;o#HS<=9(iOBW{qlsQK_>DgT>zP@>Vm<3 z;+o;W)(k6%3osv%w9C6wzK(wA+`30kK^F>jVWTsthrDeNJ@rZ|?Q`}MbBaX_byfJ( zzuM6Z9aTPi>%vptj^!5&VhS3qxaPNlMhmL}XtZ~X!i0LT5x@h;_kvYftJ>!oq5L|r zC-&Eca(;N*hnz3!XzWS3j1Ly8eOg;UE(bbDIgZQ|Ui#>(d*|+b^`Y=m6XY2O6O|49 z27g-L;Y{0p2kjA{$YqRQvF;vvS%_8(Tp2h}Ri#~;5#1|~G^S|{^(O5KpIQx)m(`k* z@W&&qingBnqi6zeGdv~Ds8elEt;V@ZR@?JZmxh@Z)N1i)vt4@+61-FI>3P`DAoT0f z9Gi}nqNE1{0eSN)*6 zOO^{OU>t2=P6fl;Jz*p)tkJT@ChS@`Ven@pJDeolP@RNivEU}Yrfmhc9NcYCmlWS& z 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/hermes-icon.svg b/src/renderer/src/assets/hermes-icon.svg new file mode 100644 index 0000000..d15da9d --- /dev/null +++ b/src/renderer/src/assets/hermes-icon.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/src/assets/hermes-one.svg b/src/renderer/src/assets/hermes-one.svg new file mode 100644 index 0000000..194c41d --- /dev/null +++ b/src/renderer/src/assets/hermes-one.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/renderer/src/assets/hermesbg.webp b/src/renderer/src/assets/hermesbg.webp new file mode 100644 index 0000000000000000000000000000000000000000..33da676916215c15abb3136884720c44b7c6912c GIT binary patch literal 17198 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/icons/hdtoken.webp b/src/renderer/src/assets/icons/hdtoken.webp new file mode 100644 index 0000000000000000000000000000000000000000..311365ccaa78356f0d74764e36403e60e96eb60e GIT binary patch literal 52752 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ℜO7Uq1|NEYY_5P$EemkYJtCtuxDwAr;VU0RL)M9Tz_<8Y7RWxWZq z{?!{#4isaJ(VL9x^OgzciXUc4HN3J^f$~!^D&z(}hkCcSzrpzdim<1I6xnZVC z4G660l%177aWFl7y)-}#@u z7wSuG#43E0Ss%xE(%yTeSILbZ<78%q|CUH|qfZ3D_?4y1tEEsxc_g%C&1SNaMh_{$ zB4S~TwD6-{C@=74q?vk~kJT^BlEzo&K0=#i{2`Eq3QQ2##mPV`_uWR9P-oDp?qn3O ztDmmCF$+ix%LYFCh|v?p+#{SgCprj?r-W>^4eck`LkC+TFxTmjH9VR@f96I34M33MKApn zyfP$=(+&o^^k)}G2Zk*c?w{eYt@JV^N#eRZ9T zw#7;cdHL@bnpKS#UY#uuzcdOGFG-8m~SDHMN@v7Xhw4$U_IWcqmEKFMCeUcB~8>~4AGMZoMh%{7?HLZS~A z6p0zK8FrUuobA417A2i+AV8B?C39aTnBOEkab~*NPZ>f)=z*MEFg2r&MH6^w%yocV z0Z1J%uJrS1!lO84YT)NYLG!ZNp?0oU4E`*Y0O33DBoSWLBAnFcze`D!i1{b$6~STf+NQ8qgJEpSvTR2U#?jL2ep znA~EbO(H<21DFCwDV|&f{LdZ*kYR8y^-dX z-V?}8Weg-8m#o2?1B;BQa(YpH+4mOK zVjC!)0I_qe*wF}I*MDVYv&06Pwre>>v;znCP>7{bTDwR)oVd|5fN)eQV5GMe)E`pR|%X$Ga(?nsd1wb2Q%0T z5EaDEtnU4f5t2uFHB+>4b1oxZJZZAoH#^a`t8Jcg`tMK3=KUL4Ho53=W4~ziCg%_^ zsIn-TP2ds2&xEOBhWkqqSIX8_@K<}E`D!kz-)?gMf3->SJJk^1!{oNn6iKmOY4Yso zhrBg-J|>GDk03aOyj(|=OYaU0;6L>Y{G4=x`5=Nf90G=Y29X)0&4`TBhSsk}#zFx} zxXOv!5#v7IZKaodv=g_Kk0oQ36E23r=fqd%TE*^a_5hJNlo?t!2Pc8wA$th+pp0vTxIZ%ps|&grc%MaO^662 zF7suA2kiqIgnFOc>q`2PFCDF|(r3b9A_PWj)NhE%OtUDCmBPap0=c18*YSaZ57lb7LJc zpAz9ECq3fIJ%{?`gYdRIP>i<%qfPU*7FjT|72J2zD5|YUt<@VqFOWU$Dz~Rp1xicmo z&H^!)RJ$KGihk{r5b`5oYWBT|PxsG-TW6&GM*`e12@om5NPQWJz;M zY>cRcqB&N{+R~0MkkEl?-Kyuqza%%Ma)X-t_{fv8JlM8)1r5~*JAP$EO0L0_+~XX2 ztJE*%S)vuWU~%ttkgN49y0wFkwG=E8urKZq_hQi}GtI%$FV?$0lC!9DzxOg3e>cdS zeJEN9!wf{adfZjDBU=`pF9R|4d9rJsxJ1yp#A-)LRk?}4CGHZ%?0Sfwd-CXwy=h-N z$?RYQlN%dW1AvQCHxvl6az&KesuyOg9oc+NHArHq2Af!WqNziXi$Fd;A+}`lvd2lj zVKW*zzKEmdj`<0_`0@cBvP&kd*#o&WDg1uCK0i{hhgL$qeCrw-OMft$vNXepgQ4?u z`N}JWhrwGevLPzKfg&unKv$9^%}XS25)qFemP?rSNFyI4XkIczp*MB-Ht}k)(tfG( zP`B;SerslNLeiL{F2;e2F$fnXu9Q2b$`f9Os`q!1ei}ke~EvGZ#A)27PGs*w<+U%=!_*4q~+lESJcN zi<`laiYZ&{U(AeMN>3B7Ko!cw$_?=+W?bYf*y-c7pUa*_v&U~+qc5uV zI?zG{lbC^frBAiP5x-8H&1JpQ$FRu&|68Y?(#J#Hi?^UAc;v) zYmxSJ&baQtIWe!Q-WSKt>DkqYMRnb6SPH?|=~1Ud@?iDkx!4I$J>~%8J^PcnVv7*Z z`h5XbKL$Z%f8qN5AV-1o`SzzUjC=(MtS{?h7{uJ3X5$tTQ6m7X8uL61*{&WQ@>x|b z5Jo#?cZ7_&3=l^&W`9h2gaU5Cig;p4QwnIk zMIA|`pN?I{-_fRD?ln)r?Tmvs|3(ggUqg)l;kS|F^87FGhqGnt<@EAC_MQ|vRXrcY z{>~_nf9#0jP)N#L5^vUy3Q^P8(EbRj75TLK30&hyK<1U27T42?o&Q2p6h&}-|Aa0LB{%6&itSnCdw+aly7O zzSrjbY3yiWz{b@;N`or>u4}iP4uGpoV&Z~~pHMS&!MU9w$}=YPYLa30;j7cQJZ&%_ z0L!>O2EagQYF=J>9RzO5e*<86E!8QBsQtEf{7^UvSX&GQ^PhOajCcL|wWQz>FaIoH5?cRcl%lFwe__ zy_``Xk~d=p?Vezj#Zo^rDea(07ICFLZt24E;l-tvP4kCIIqb0O?nri^lfO}iEWz*! zZ{jL5I8#xga?vkdXkw&uSOPiaMcV$FlH4-z}i@zDL^a#036B6ev_cpn*q;_RmL@oe-*N{ z(9@B>8$$PhjA4|=u>}k*u>X{H`vKIDlA5J{YXPD&6$Ob4=_68W4=5w zK%j7%)sBBUIAgT)AI&FTB#hWqQJ^efs$D zZ)W-r14`b8mM8OOPzd*}+ZN7&NxY9=yo47xGR)@zwdVA<591`gz=ta_S7q!y#zQZ= zCYMBg)yEcn&(;;Mune18RUqQC@%VEt+;|JbOZ#&-xY%p{*Sd=a6-}7FbXJ4!(MHBW z4h3`?I>+sS1e3zt@v!j=jO=FzEn=2v`@#hFrtM^f-{yl>VyxnXeW{J@a%RAL_*ES= zcM>Kw+R!E?FW@4)!sQgNY%j;<=ASq+LI2sB<3~i#*Lbx%vy3U&^ z=Sp1I>d)P3YJFoWYrPpm8Me$h3$@kcBAppMnJhOwJ(}sYMIPN=cQj;2GxO(Pat{RN&E{E#b}nVJ4nWSnbx=WRj)Tub^k%yY*WDwRX!#$=DkBu}7hq)naCJ zV^K~9e(mCe5e`nqOPISq<%D;8dbAo>U1|$%Y>M!TK$cDpZ~|9`MLYa8q$;Ok4QuSp1mTMf49WTu)PIf}b#P|m1Mvnk3M?H*2_ zwX+SG_Ccn+)V&8emW<&oxWPDv0UQF51smm;7@FRiw4q};TY;?*=AyQ=_dzhvpGOux zF!a$>rWl_qaOjv64-&cpF-GVWYs4_{m0D0WXc$%pUZo*zl}*dfXTn zlfWyyiH{u^kn;pXC^&dtwFeN_v`2u@v3oIlVFb9BiyLH~9k>szC(qtw?Z8_wSL?amD`!j@=1zkd+{=(2 zQoO;axB(!-?$6b3&2A`|(Bki;{?BL0+M^qrg8DSHd9lz`mDZ$klUsa*T|e94%ww~D zOKw8IA63s)QfC+1dSHU}GKoSuSpzi{?Pr+MIcN%9orpsIlkHCRSJ3ob527Tn+#PY!)snsO%CXm_oab?RcsRvZRzAr~DUzes zDf_^Zh@YwLveE=2r4|AB$%qzD_M~3{ReJ^b#ZERLrt!CC{`EnhbP0uan-F>0{wkcJ z9FySe7`0>SNbkEHM)Enj|~fx<3&(L zp2hfdD~GK-vb%G5oxr?sZ#pYxOV5pHq*8*;X*_HFGtGDE!B#GhRg z0Oaf-)33L71duXfJ;Ddykg<9r00h>sP6|`$bh}*8aH6U#Eh}zv7I$-~%}ru2NDrdq zbyRsa9bnR{%%7ckqWZSxLHWbAWV$l(M+qf*EjyPjqaw*XM)n_(WN?B8JfC! zoeUCfNd^#MF0GM~rlDfndu-Wt1Z4Z!-2^NIhG(9Q;7u_HqyGptl>xHkAJ_G^mg%M| zZYp7+7$(O%j~H*e3`8hQ^BTzj(m5ZSE_PFkgWNHuH+5VlH-5vmPhHd=hHG;dvb_bm zbVYNQ-b4=FYkjvfW)lC(cUNdrwjJ>o)LjgVF$1kkzbh68V0?_kuzhsbD&8Wjbb8g& zQGjD11%!(jloE_dg|d=Jc2@C$4Z1BsGl9@^v|SB)m$ zj>7TLnZDfmGVZ`J5}!x!#8@#pS=`MO0r$@=Iwou!If=DBXX%ZIi3~$M)gIJXotPYp zq3~?UWcty&T|v&5H_1q#v3gpINJzlMqrG;b9$5dr+D)q(m6tB^O&f$n$ZMk zP++~zIk3hs2WR!)m!a-M31?E!lGdru6NFUbL4dnC2WF-_51Y7CPoxjGyyiQ<2b@zz zulFk|^rS#As?sanGhhrt=|59HVVkWq2cyA@C;*N-tyezwIn*Zc8o#2i1@N69p*O&2c4wMEVDhf#NE`wQ;ir) zh^2lACtJy{ij15x(9`W_E04VfO(is6WcG50+-PKt6R2=6->}sXz+|_howBC=%KHi_ zzM?NE5m!u~`YqSSa4Gqudc3pUeivX~hVE`VGdB599NqS7barKh8o8r-W$RCuh84E^hXYd%U0POrFM8rV@IiK z{n#Y8qmEYwEfqC{7YI&xYMTKW!{IG>5h2iVzTdW}AbuRqB@8{9SP52`&O_5Jaer}G z5Hq$dH@Zfr%SS?C=^TB&-9 z*1`5Y=9~1ui$CkTc@%=6)|&(O{nIZtzd=K+Tk0<40;kuxe6eB-oLRN z5ReW*s_92n?xonx8pcbmqM`sXnq|wUHt=02XkiA@Cxw?EB3+3_b2K?CXs5 zZ_+ATyPX}X8Qjn~_Gv1ip!WKSB^pgb@Y~6yE-rt7WRN$3&i2jY?nX^uSgq^`SDAfp zGHY}IAq`s;i@0%AR)(ts4&Ccdx(&aC*K})r&4xm;y_G>HN?OVF_)^YtQ0Wyszj<%F zO!diPH_JhVMX85DV$o^>;CoQa1qcHu77K^btAV3I+0Z@ahEU6P6f<(%;?gKnESE{h zzmP9L3=lAj7VNC1=A8kjDVd>HG+@2_9U?h^7 z6x|SJt=lP$kF5$|YYW314teN;7qDQ&EBM>e&gPtQ!DHEYXUdsd-&|MPZZG95+x+dc zsRStpr$VNL7AIBv)ctc4w~$Qt(B9(9)4g2y{;^JSQa$mh(~dXvT<4)s>(u@lU@y4H zk6|X)?8$Ii_lx;HR-TBs9@iq>fAvsPozrZJFnq$29&!2gkWlHL03vEcu(OVAk)Uc^TMprk+WNR2Bte`0`|o8+IuB+>;V}E3|G~Aq3W$WGygu=`< z`i^G5(>cBN`B78g9i|mQ4SA&?{R>yZxCbdBXM2xa0To?xE9K2aPG_Lk2zPW!Z*3NA z>-hMWv(dSCSL8#Q=4oxqp;u;0#VN5-#}c4tjoxHVd_<7m^sZv+ z7DwAw6uAUHEaoFn0m_726gv~W`1qBDk!~60#v0l?^(NJ<%DIiL_CuA!T!jvaVRqOS zs~QahH4jO;dPb8d176-?FWwpG8S1DK^~)V5!vB)qH`Y#``9l9VPk+;9Guj(X38rciUm5{eT5$ zmj;HRYB)M{QIX+eO!mnJ{Rfb zzAiCwM=@we_XGqW!h7uTqakZ->u-2Tfl(})`=Y1tJ9f;l;Gn4ws9Hyr9|!0C!Lrp? zNq%Kyh?pV_5?_tSZZxKC%}6#w-)OywQ;wA&Oo+X;>{QpdI%1cGL$)aqV0O7=4Spa< zW0>CtFj#|h1#t2In%3+*spXe-ob_QeXuG*jRrd?5o>45FXchy z{m3-EmactXHJl#Sb;9skJny2ad$=z@Uggo&{|s@tPNH^N8`-fgJmr~-{HCRQV1OzJ zBdpwN1Vz~adT4wz)5;yg);>4BE%A_eJv7PcAdEnh_TYE`nJI<2+-s&`{ zv``vmd;u68%zdC}Y4_mK(0~nk45=qOe@!o~^ipmLRTVvsNC^EppC>%FJOZ^%6X`nx z^~bmn#=s^$j6(i{8uxjIJ4ISm6TI%WNdmSi#$CYuo5Dda_Rfc%5ZT4Q<8M`BSqZ(x z_Wqc)_&n=H-)m+;BK{u>UO%A}zzAta)LePR&-7IEdOTxNkO~%^;Fm0i2e|A$ka(eC zKIB+Wl3BX2dBMnksGJzQ1SQWxfIGqeck!RY1eIx;vb$H~P2bc!>lcaUQ8?+4c2jSe z5{!-W2~?x?5>a@k&Qq&$0bh@ao^@AMBANeEGMd*<(Cm)o4`;~h6@PK(TD^ktGo~IQ z@&OZhfG>2CXVQbcg8K!WR63he8U^?!zFfV94;^0r%? za$$lJgNUEZ?eiR=Tha}bu!+(3XrAGEZsD}E7^bZEnj&-m8(n;4jcIK8 z2$Eo&FQmEUB;~p*5?M)unD?3U4d}@Z5hc?0!@?!j4-8@m7P<+m7%4jJH6bu zvjYRLBxkDkj1K9^#=u1tGU+QCr1-e9l7!WIzJy_Tc^8N^#mVJ3Lkt}xp39z~u_kzz zzK~sjh-KEd@&K%6RG({|M}ss@qzIXO66o3v__eJ|wb51ucCf^daERh{OodP@)br>0 z_-=kwylxG2j}z0saoVRr93X(5)9~YwVr?2Pz{PYhr8&~B+Giw}`i2P(nKjS0C%d_{rCH_n$LGlYF(`Ajlnvn2~9F3iGo~r33X%kqQ!g0EN=FaP9A;$YN8-E7O)UoYZ_=Z4O5^0vFD557g}heG-mqUw#+ zi{~qgDn8$ERsR9tcON3rxh3YM{Gt^w1Go8_zM z(E#@5l3mwm`TFZ}?nun%N330Qt#IG+rfTknC;wA$PlPI*B-zkG*J2*3{zx05ok$Al zzV8k=dRwnK7Z@9^j+SB@#PfEA^)9S80X=b`>Mk@}n>D)2i;OYS*5R!KTWQHsC(_{2 z=P;Zpy?aev&Vs=^#98bc+~5dEWuEOnJr#r0uG+9yOzV{~bUiXbKhBJ@uk2a-*SDFV zSKN@M-m2nB%q5-+yADFoD!@sEi?CsB-qK~_uxwDkwiIp`D!rk(`7vmTQ545_+&$MT z2QTfnzQG&^^f()HeS8%gKt+P%Lk-agVpl@$HwArcILhp7v%G6o@R4i2{P zBYRq8*Vd%_x)@u(9W_lt$}im!BKICqR{WCnJVOB*RCg?idDbW;5fH8uz6-aRX8b|^ zudo+PjjmGRXu*&XA#=ou}| z1bLaP6tFex)yF3q{U_M(&&{VNof2<(qgPUSqk|vd)*bm?bCIFTR69c zZ6EB@N?Pl%#UYpYY%2a}?eU)NEC4w`#=o!ptn!5Lc-Z>cNe9JNqGh5N zKEX#iM;k-<*3!zGXAzJjTm~5D_eTbs;!`^niT-c$Mix|wFN@Kt6ENA!ZFiX>^z2oT zl=E-$@axhPT>I^B;el)cp~Zm*$Go`a>KZ)in*sp>1A#?yk;kS_)GXY5j$z_Pw7LKM z_!61Z53<2-SJA&R#6+s&NcWahrd)OYH;=_Dd=bKoOC%P$sdLc!qMM)QpNmkGd$JLL zGyq0JaaZkdd9lrA92UF`uO~1=)f| z`Hsyt2wZzEiIB>xvH}6K4Xb2HrLQ6>SCL2$-C>Qm$##H%y$oHp4X*Eht5${@4Y4Iu zDHzqczZ@00`LOq5y@!N+XMSC!&hhAZZRUA9>HIYy;Zfo{4biBdQQzX& z9j(thcZ=HQxAe&VjfaGOdH-xT#{hA0&p(3pu2LFi-GgqPBb8*INRjKc_?zezd-k?# zWA5^2hrCVWH`LZ?56! zWz%n88@R$;NX@zQS2^+k;tBs8>8qfuOEZImYmSK5#BV(ji zT4>p-`N2Ao>SK3;nyA%aJ1(b`x-_@I^2%sh8&LqU*@C?Cu27YKSXY`iLHKCn*i*1b z;jXR5;mZu>H7T1#>^%_!`l5+dY%uB4PCunKY^2*s4@hFjQ`(&+vkKn#CR%m7it>{O zimZHpjp4`?yV!1VMg)sr2P|!^vHOyqo?IT}3%LRWyzoaKNx)M&7lpQ-AJ(nroSiI0CC;Q+9^1Y#$U}OScxw$~n#x6Jw^&Nz_- zo=^&u#x-u;!ZgY2yjPh1gzrxo&Cp883{K1xzuwu8^x@n~O%sm-uSBj|(A(6-xDYT< z7u<#g^TZf=N28^->$`XHt_D;Q2T=q$KAjW^Fvvos1FV9s+xRFfnbd)|(Yb4IK<$3PzpMZ$e5-y|nsX_j(STyjtm+#DBP+oHd z3jX$F5Rs#+_}D}3>f`zb-4de|0UVV?Y+s+lxrlZm_j#Mjq($;#FF)50A9R?lnC>j1 zm@e0)NIWUn$=m7(8$q3_A8u3Uakxo#GgpW80ouacJGf9!cprk;pmd~bcOOgp0rKrwusoaH zIl&zEy!uUcVcN(aNCM2l23ITK#ed(A8FWbX{Dje5nLKKlss5Uk8T;U91`Go7vd7zh zbrp$iX(5i^w103#W+qGqyTRVC-wk<&YiJEPHYXL`mw#%L-~nJxa???yQF) z(bno|!e3cxcv@dxXHOo_DTRGxt0ghQfnLOc|86i;H~1Svw7Y)$)bGe+j_^;-ioOI? zn%Q)K&!5M}ha!x0ZCz4qdZ_zD9ma7gDZJfhHF}2n&q)k&G|5PC^)&X)X5XT68oO$FVXza3BGRZm}q zAyR7gqq4NbM9RC$kDP>Hz@oleje&bZs?c{Icy7# zuh;!_*JLCMl`QE1Bbg}3L|#lW z9c@ic%}pE}d%}slZ+~4SgK&Jm)#gzb7W>GTG5-#Nx51*6ME(_GL4f9R!V25FKm;oz zpx3z5CKScW$*7P$8*5(S=^zwC{~M7xm#rUEWx758--(QFdiN;A*f3fb{lQUR>dY{P zMH;@xzM`B^!X=Nkhvx>Pur~@sn3R}yoo2T`_RkEjHME|8g-Sx{6C(g9dr?0lTIfq# zcsl?{&`TjmdCBJ(B7^61kR$(f!fBI4-gwvDy~pN0?;dSu>##zVj`=}7l^df zf;TBBeoX{yjlyM(H*eX_kKF{pzpB&@Me^qozV&LIn>1~&fDwrEalO{Mj1)|jNqb06 zzhptNX}d~uOe<7tYyhbPn@L+MWl-dfHnXbw=1qyP3whO3_t^^vwEqjD0rRac<%@!c zI-8x$*F`1J(hW8*%6yGc?Y0<#P$1Ycee+yFBuxwmuaGNjQ+ZN1UAkKAzDhC}L9y`j ztB-W(R_IkYBurHogem;>yOtQ^Q4#}eB8Gc-(rkA1LOI!2+ejBIv;jAQ@JPBfFswZS zSuH|jDmqIdX5F&bj;VpECei41FRe(*)A(bbbS6*VWy{r_iD{zX)$LQZ_Z@BGb*R@0 zT9l)&4ABbJ>(6U=nRwa(__McIdqZozBjqnAUaRBPsCjplPUgdEK4gW5-6yL}?Pg8a z%0HKaFwS2W3{Hv(aDwf7Zl@D|?O71uqW#j`t3G#49@hzm_BvktYcI##9ir73^E^f9 z+UYg#3fh$s@@&->m0VAhFCnL2)!$_;n|O2@-tE^xsLMnrhZa9DqGJ;5)F+zngv%^z z<_kNiV{&wSQT_10rfO*Qj7eImb)<9(@a7k4ZsflaZ5^jV|1X~o?>a!vlw`jxQ8peE ziHO`bm@>Q2e>@c8VF8XCjX*zCwmh_a|99fqMD1f8xIyZ9-1aCYxf6OZNC(Wb@e}zd zaHzMNMGCp^c;nGwmz`IL0d$sxplKCQ#|WXOHVZToO>kRvXAMuAX0-mx8GDcE>A~)t zPmx2GhB1?aYXeCjbf&8!_2uF1;D9^w@{+^^&8)Wz^pkLhenLJ|Jnf_`ecu&17@br8 zH30PNxGIab5I@21oic5#^?d1H!C>p2Dp1mRaMa_2H!=CJc)v#6SNDQ zETZfwww6!B$vH{(p zDbE@Y7B_wwY7(QBTc~RW-Cx01yH_5_I-_3yx|V)YvQ+=Q(B1hahvKU^FDq8Et@pw6 zScQin@93RiE?|dfn4Lt%9-`q0Y_A1Iz=1S^Q%i2}OY#hpE2V<0*D1_fH#DP|VTJP5 zynz#aVA*}=f!~|VVvOx~a+^;f*r;+J9e!U!`?*2VYqB&Y3>4+WKxBxF%7&Gzyvt~r zYmCpB3OVqR{QcxMyj`Es51N~@g<;O{Azk6TePua1YTfh--J97_{ITF3vLo>({2`Dr zDWD5h8sG9!H>R|!aqArFt)*ei0E|&_mYG?oP)2b5C_sAy7hnC28=prH9-t-hfe-&D zAE-1k*xx+|&f$eMhHWMK)YU_B~20exU#8OFijcXHDt`;NPxZxJSj z`Xfj0d6FW$;yA%aU$48j!Ecr;VaxeAbT83ZF+Uq~d`M1iLywz+sj0OmXV3*2)2@0H zWZ}<|C8S=Q$*6F3@i9Luld(SIgC761LxWkMLo7f=mm^{V8nL!yDZ^Ke@jMmQiNT&P z+j6(c)jgng-oEN;LHh^D(OZu~lHcU7QwB!MPx_GgLBc=xfY~m1! zz2HR2Fn=fKLfCV$jRHyj-|oo!_9GE<;W zpWqI!_E54iIA1M1vG?!4Sqf*Zb^MlZTT)C~p?sBpNwv z5lPc!&Jts#cj19yrCQu!lVnJ@ZeyOEpfzpFlpIra*=8XHtm=RAdi$M+JGfKXONRP0 zcW0K#XtmqOw^%lX&j?KTlDy6<7eV-P2gP=2qY!KY=L$1Ks%z3qS~l2(H!orT;5VQ6 zKMEl{^%XnAI~C|MEXOW7{P&j8d1SV6!DR+!SA}c!_Qi&n*KMAu`mWKDGFVJ%`WFX1 zDM#~fC-3=}ZM;l)inhI@?y~WQO`Qhn?;*ZtY$AF>y+7{tqU5Gm*O zs4{TjHnP61-T|23N_ZW|H>Ug=)g%>E(=a~ObGsM7sicwo1tJa9)qOt+X1d$U#+`q{ z6?c+}ejp*NYuvnYxd&<>WT7TOZU~Yeb>BasBVQ%B7yf>80GCs@o22G}2P=-NJxmmLnRNz%#~ciNFp{4->ck z$n0J>gWkbY!Z3`Dl6=;!l~(-4af?s06*9F#?Gl0{=F@9(g77Zo{+rbGQPh3DE8^?f zU{$HT(3{Wvf}MKAPikkbE)qUe8^g1(>CC##3R+~yGE$eA*G^_m7fdO%%Kau+l)E9o z)p^%(4kbk;7+aAYb~o%PC<~b=Y$Kv=1J_fihN{cJi19dlHn|+;Z(L~m>jK2u#IMde z*sOOD&{Y~dndxP>t&`myQO#T1|LMvA{^pb#a(oN8=)WMw-v5$|!GH6)PHy6j|3nw7 z{^9R`;bBwbEwHSX)a^%oGpEoe0B_D-B$|~DAzmGS8fxopKt<2ojptq20WMJGKzb0ztd3i@TXLhxB1lU$OXYx zuKsO=`u}oZ!chXAObvscliT8sba2q~DSV|S!7WXjK&kl{M-9EoDV6ND@(}ppSV3i+ zj92tg>-BAjOdf$zW>#-F`-so}4;cWCJ*B>kGb#lj^PwfjqWIM>c<3-f+(=xhS(eDuL>{<%Deu( zom*Tq9@p+kZ=i^nsxXTs#@PAu0T5S&r0%7G&G6akIWta^`fep&FL}9LZYQlcpu23 z|LeAb*8_?p19B)PO*Q}lnMVKTaLBhS4tP~rUOMVk=O9v6)caKn*~(z+8f=CGX#zN;TxFHehpp+{@;0fy5np3JEmf zr6>ieO=S{YXTBTh+*8&JA5sQho<-_i@584Q>I4+y*HUOemGV}}x;Z7C!_Q{<2bH_(!K+Td*MMhlp!|cT6tWo;dSD>E`+~Guyg*-s%!^i6 z2yHfIPN(O=A$=~-EtVe-={sO?#;B_3$Sq#wgw#{br?_LsoSPudoNsm-Mw?$ zkpVGeU}cc(v-Yd_@1*~8t$Hbj%%ez@KW_1@32kH_ZS`tIL}`&NX3(r^D50mTIJwf8 zDZe|~OeIyjpC~EGqQh#pWN*9TD3Ipx28nV$sALTvjhTIiBLbg>T<{s#y_g8ZjS zKR)7uow@ms^m6gzY@41FUeL57wovgq0iL&W#PZW+cXAqsX!9xMB2l>s5Jba*wiKS$ ze@s32=BHPbi^+M`*f-o`02b2kJ_X z2;!56qq^rYB@LY`cx;zWkt#f@GHi%l4#s!DX1rxPy}7m!_sm_i-31>#{Fb8}+#9lH zEk3eY&6g1Z}tQrNXh{!NaIyTF1g&C{JM>#qP7j}R zQkI9)0Yaz@`;r(YmN)V9O3Dy}uXrjC(F3+`SwAcj_G@@0vEw{P-5w{XB(sKwp}uQe znY6^y$_I`@Nx4VpIOcgt4dFq#`=}htY}`MNZm7gN+h~DsS@d?ySCg7Zr20nWYR7yB z0NcLI7@^NgmPNvSWoh&4E{7UHfg+irm`Q;eWcpMCwB)DIW6*n`)wCCNwmUo5#L78%nBC6BQ17TLB4pW^A2mIgJPhkRr`3()&U@_nOxW~IeA5hSqxdIo zAEs4xqsP+;i$dM38J`+-;~~`#aRvOl4Q6S|yx~oo2L&^S$%E z7CDKR!h!%O50nVF{%L6e$3UT0GU?{Xz@D;Qxf2uxhU+fcbsPB?pnZxFIEgN~DiC&KZc9dzVOIK!;7lzI<8Y#;AqeL)zFXH>bgS&qd$*)OhGjRnS9D zkjNciQen-c-6G*N)VoSVqco!^vwglhso%%EC`t7L{hKlaD0?2Q6o%$3-8AzRebVgk zXkohzUYe%!>-(fq&MX^{Q6CihUn0?#2y(=JDR?ac0svvm_s3L!gnbfrs%O$I9KuIH zP|#B=j^ArV=vUZ87|lb-J$i*@M7aGY04@&)wF4dSxqkw?^YoE@I5KMT$lnh%p~m%0 zp#^wK0NE5mzZkvKMH4W?7_E`2$&xWb!i65YkmNHBGINW`u+Y)BI-JTnz!(uQ&23pw z&TsExP&n|W!PZoP7ALCS(l#rGlYNYKg>|1}dRY{K5ALMHtinB!T zLt9f9jlHuY&~%J|h<#>MN|nOy;?7>%Ttstm$`rSL&}W~7FPUzjRfwwLvkH%Nj_T8#O@ z?VvXo#AnEtbY#e8m{t9n{{a1Y=igTm7;F`rjCbZLa!;5HeUX3HtUWVfLi>C7+%D;= ze!>$X13|++4E>^#w<98H z=L=r99s<7{4T%j$DCD`_?q4{6eV=CYl)P4N*YpxhRyDw%^r-Dds;|)Gkk2ltkcnIg5q;D_(Xx@icAgr|$S+9bWlpKFtEj4rttFGN8 zA1Pdf{jEN?(@DeJwlIa0@9L@qS7SjFr8j0mGJ3o$!xuw-Qc#0q9EuR4mc!!)W~=_C zPvF$Vu1{dNR#mmQ_nLm$aPOw_VbpbXlG4@u)$OwdR%^HLJIcQpb64b!4j=XK>>S6 zN@WhNTJsiqyQ$a%MEWPA&v=|M+v}sOLLB=GBkf*y&j`}Sj)dPFA|d7Pa*Up$UBDHp zc_z<5{P5FQX^a{BYVp40BnAd{c;nc=JsEd`gY=uslIq=bH);qvlgkRfLMIzJbGk4o zf~ChpS-w;i!_(HI4o<#O{t(>Db=E80@%m@dzbcL7g$Pp;z^cH*WKiOC+m>ZrgqoRL zs(Sw}=|^G=p@=fZr$*Nu!3=Z1uDQ!ffzBi*{03}*DUn@B?L{|=5qeYyDJ~wnS!Fa} zLdba|U>9sOES=MMFTP&fPXD)otkNgXSASToPh+;TNC1p3qe_5H2q98ZK&+0oPJ>|5 z-iVo-SyKnMts>1I0rgqCsR`sk%h>3I3fAG>R<$0i!ZZB~fXqR{89yV}l~S7h1RHzq z2^|ZTj(F%);m2E#X16sf4?XI8@G}}RckTELyv>=_ZL9HTg<%$}I4&jg7nPW-3y&Us z2Yz!1w}KY8-qD~JlD-jA2xS{$nzRi8l%aripQP=P7)dZ-6agbeuIVC^VXg&7=r)!O zN8Gu|S9G$f#XKDXiw6`6vtIZpzf)g~?1<^DY-CIIO7Z5^Rn2FMHk81f5B zp~Yu=SP`g+fj2V60rZq)9(X+29Z#bh+h&#^BwJze*5Nk zm;{@y5-7%H)X@7_F@fDBPfnvUIX1=FFo=0uC}Wm;I9N{bjB81}RgGZbY@#0A|E zEed03K2LNtpji)_Qn^@Beq3A&a@rV=ry}p~!`I~k41}WJAFNP=+GMxK$6Fv_YRb=P zk;KABjB+Dhg<`*xM5`AoZSS~x$}wSCtYCs)+8(XnM(V^Z{*@5(b}&Rd*MZ=_;F=$LPp+fk59t9+uZ6b?G-cx}$3 zwMQDn<3O8*A8z9mU04*nB$R7DNPN;FW?xTxrbimUZFZ<5O~5oeVx$xrH#j#Onbmi4 zRjuDt=+_tGMPw`sVH+rXr_+NCcL63soLT_PrH_w+thFf>^t*tgPt1M3j##=<;LDOf zVmK+vW_;$&ck#Tmm=G-hWz#BHhis%Gb8!IAVFoF@?u^GDk>KTYY(h`DR?_Qhf-a5- zX-1AIMDD_m+aj+M4(|k1FhFTuV`(qgGVDp1WH`x+Gve)nx&YeSIzm{6{P+nE4Y~er z8D+YL6pcexbUzLJd(P{IHpn8!(k_^Q9SN=EoD|8nO~ZFwI9w|rI^!L4npEpmlwSYw zSf{1%Qt$=Pip0&EddZUQ&ie`JDl+gi?+Yp>ek0hzT?9jm@J=ViI5`Tl9+Ruk*0e5f zQdh8x%e59A3XV0`K`h1D;u^+c{Dw^_O3v2roi8a)&N(*a)JEAiFrSY~YAi(_z=I6k zL%Sy0ZC)0?qBM2rKPlQmVDm{8Qa>I+YV~jR9{MbRQYX;zW?2Q3m_n2Q)fV}F+nZ4zJ9wm zf{BT522ef{rgA)YWYT|ZP_?50F20v~xQ#z3l-9%BMCi9uTZNQkt!kD?voDETo8$fQ z`Mb+Gk=1$Ou0X^(KrlJ}*i&Me{|P6~Hn_J6p+3)=X0(qj-AgpG5bkz)!{hA#ypEru zV?U-?q_fzt8%VqCsZ8YOY;E*2I|Ge92N2-vlL4H4k_ZjI2~35<=6}%@&1I4a7YEhj z02K5p_$-(gZWS-qx?O15p*mVz?|H}CT51T`I>uT&D*OxuBq624m7s*J-)n|$Db%F$ zQ@FXC#zlU(_|w2oV~fKG_^Oby7NV+WZ~Rc$6`oP@-_k~WW%FQJX$F=3{w#*zmmQ7B zvM!|Ek=1m;2uvpBg0;V?xo4HNS~lPV&ug?=cpC=&KL#A@s2`XMGNh%Y_=KF1Ms3-s zF(8v59F6Hm*ji3Pde6#@9}2Q7c343Q3!%g3jG!g)z8E7;Oy5&+;I{v5<8OMeR^JfS z9k>hBmwArnwzNg(a#;FeGsXhRZ@jiXDla20gK6L_v~8miJ#j3CCIWBZSoL#4UV7U| zK-j7_^?d`L^d(t&%D#_qLX+mEW^)60J}sj%?f2@L)$TT>Osk7GY`b)VGR(uG9?54Z zVztFUnKj&$?eEozS(<0;s~zJ*=^9=S5$rsEDYj%I`8{u5e_HQ(z`e@>^=@?TU$j0P z>Wb7VEg;{zdRer!QvL2bzhuag2QIMVqto5{5!Co~|SL=!X2r z`R6#COr)<#2l&A~s#PnBE(Yl|0p!@XVzIdZSr|@JMIpxjP#~j`=H}9}w0Y4`xYGK_ zl*fn?*QL~=r~;n`s-8lo#1d$mwTEW5zwQ3O-xusIj&m(d13%mT^XVRYe{Bl$xX zs=R9a+%Dy>mBVk3KxbiU*9^`E;J~PhwxRC!1f41v$q~nU1GE4DPSsK}aH7+&t{wT>@C@n%@*M6&Ru;gYI#C@SJ1S)vu@7Y z7tv;&)&k7;p-L>UBdSFZPP=T2kBcRpH38{jul0}Ty(%uF*+=W0u%q8pits;(uzKd) zRG8PFP1JQ_#lTK_!p`K3N^2?pa$TnwVkpA&YC)tJ?EGtM*vEH zJB9f05-+3pIaCYFhV7+X`9j7p>?Ov8Eocj0SX%Q9C!N^fLLKt4!=-g}Qd+d`)^3xXz+darB-BjB%a+vhoout%`v?B$hNACMf6wf=1?>yT>23-6e|@ zw`Jt~$JhDzIJ=D~4X4C8j`;;*)LkG2fo!YI=Ey%Y^DqbK0Xpj<0R3b~b4PT(jE8?A zjZRPsTPX<$7`Pp?JdOcoiq^1APdVObNR_N)(S7L_sHXc?BAMXi#R z>S(7@=_j~ir`ROb=`_N`CkheN!wvz2N~*^B*KHs5! z`0Ch%mHNZdqj!#p=U#b00C!>`+4kldrB*gv`s`c>b|1Zet~I4Q*RjMaz)Amt04+rl zqrH7Y6*sUu&4{ zS9+|4G7!jWk9<8LT#P;XG$@ni>u`WOk`KGhfZ19{x{$Rr_sS1pZ}2in>j~Ya`1tHl zHmFkberazGz{0)S+N_SwZGC3v8Mh#w7x-3Cj%X*ZF^+Kld8#q7*^A_Q z*;6A1i^O61T(Ep23()#wFJMymw38$tPGEa?gZy_L^O`>8wQ6~1-zeez_bNq;tK)y; zE#)#Z9NJ}%27-Vl(b4^X!w{xtoA;Z2dP3AZjv>#~LjW?=Icv=L8Vsz(og(M-b=G+_ zAHEi}warV?-|Ez=jCBap?Fgrug8lM`Ua0JJ7RV9-%5HS-aM zEr21e$^ap!VV*$<=y~W9`R97C)kv2-`7SpaYMYqoUD>r^4!q}F*Tb-Y%5fG|J26Nb zfA@}(Bp`pZ=cLh%##cyc*A(YD!5etB_M9j%UFvO~Q&WVH2EW!6tkiFI|*H(CY}YoviS} zFli@UXZ?xLuvXC0XUOeuTzU0jlu2I(Lh4%wT^ND~&2A4d8rt$e4Xjhwwz?zhnA1Vc z0sPL&XaX;?Ho;EyEZ?H!54naOkv~Ksc`^+^i2JG{2VSC~ClTj)Bp8?P05pD@0cK0R zjM4F4s?rk6Sc*!-rpGlK4C@i5%Ui*9>%;=@ZU-9cT8a)m0C0;{sImL^eGdnF!UynX zA6NyY7o>uZHYV^-tazQOAL&&0T?X7*`ce&g1mx4nXDgcd=VLySX+ixl+M12F6K|=x ze3Q*06EE`dR!FoX7(X7`#3_;9krG zm3|wGk^1Pu(ryl(_D)2rn`^~j>5SDn!?_BDN|U}E*$?LOFK-|IH+eEm6hXr78%G!& z+%Pa;BJ!2nV-Irz7a&bLa!_{OC!N{~NQOIYSz*F$re8Ld8-Lm?{ zsVY*#Nid(0wW^}g9`TP3OFMm7VhWPMJ~wWI>a zX++(MuO$Z$gV~~=B@bKyKG85VKuR8i0~>@d3%Q<#H;}b49fM`HT6(lE-QFkgH~OLCyA8SXrrk%C+wVd%nCg#v{HX1FT5X&-=en&?Is8hkH*V* zpR0FPtj8GZ7clf{tJV8Z`?{M?>8+a^`EpAcp928CA)U!k| z-tREnYP{NDpC$YY^t_sF)IQ&wsAYB68w{JcRVGPaQa3GE4#)#bcMcM;4K+*iUw;@` z?-?CP5J?>WL6%47L`priS7cHp8iaP8JACQQu z9+y)JX(9;iF?5ObjL3g$BZ7=wUMYPt8!930#<=_0b+5+2PoqEF$Sq~;I-K3Q@Q57t z8DM@W;$HycocT-_3smr=)Nv`5^FAK)vJ&M2Wqg$-CNfT6DHkBCYnSK-f`%LSJA4V@ zB|DT>&>5FQ=l1!#F~)(**E*l$ywP33=ZfowYPccH=_}dny!+Bkf@K~9e z-$+PHlpX4OnXLJM4>PflmLq#dqM+lO4zAnz<6^DY-VILcFsYLiEcn3qiPtt zwEh98Dr$#~cQ3RZ)%*BpN?!8(s{ue)-0V?m(ssaj%oWvflDoBYxF!-)5viOBo1j+N z*4-$9cW$e=AYCNBBxEy_k%H|c56@asHxIbCHJ*+~(_rt)<+%Dx%TwU6Y1%9$8Lx|D z+?fBBhlWVkr!lq-P_Y`%SZ{YVRKXJew~2Ho6q(9*&h0G3(T&~%Mc;UMBZ|R^S>atH zk69`Xn@gf=|AmYfpS)sCe^onSmF@8QIVVLANTKwli1$As;M&UbQ#6vOFMig_doPQm z%=WBK%Xs7+3Oh`YUV_~~!eB(KVKF}Iz+J%~`&67N4+|}uSB+*MtAmu6LQFNavXe{6 z#Yy-FAZYZ$vV^So+8c-~3Q+(mCapQod>fu{Gaj$K4$K(=JqF$}*Io%!a{nyq^gAsa z61i&mQQBwj;Nae5##?!lGrN%r?(RIvu$^TOYZ+}NTbDF3&P__v7Eg0wrMw>%r5Jsc zmAYlSyFPsQZzd`%ynuVjDcT(xNpv4#Mj`^42y!ArH{XrMV(}?8z2He56Djn9TBS=} zU6AC(I6n?Q{$VhGkp{*x93df5I!zw>s{Lf*-^N`37F%;cx5fRmGUo4~~^Hsu$>eFGSN7NT`3 zUv}!MH_B3cK44%ecfk|0@|>6I5D%pkyR?IDQ_KwD(@^_fd7MAbi;Yp6QEP4mPPq(? z0awWc53+6tE5^oQmF-a+=~4{MOr;rwJd1Q0>R4!V`MVedD~;K~yRZI&-sm*ed5)5i z`{})&jQWr-$~Fp3AIe0jfk91;m_6zOoG}HO>baHtFq!gye8cvvf-u6c=6}*hlK)Pw z>Xi#FH77nvYFr^*z+XMd8{%9Ib{ThZk%JZ@;O-2XQ=YG1UI{8zCj0Rll!>vYPj>Tc zj$xaROMJK%7#t+@?Joi#z$(QURoaregBHh&$gS4hJ9CPP^wOGBM`h+SbWq!?Ff(DP z`Gn_?j}+OphI1qlRL4p{51YI6+E?SC2WVOBUOX^)(;)JlStHi9#5I7B8tgixRWL9T zbCqkol&K^#QE2cjDIL#RqZCl{E@0hW`9TF>;dlFXeT#2X)eKcecj&jccS;zvhYGyh zjur&2UPvW}{Sz2d6m&s23CVT6?`$u=Cot$v1=aCj1GME2kvGKiunfsx{!lt2h%TUd z_#lG^M|5q=YQl38eMU_O74mIhKmY&$W|xGeJ-C6~fbcWW^T$ts2QUp%j;s+1eU5TZ z#|s8WooqdX_|AJ0Hs_mtU}|$e$ugi-g)G8=Q7l>*I&3$uC+eI)e>(~!yHa>CH$(1( zWBUe?8Z=8ePp%hK%I%K$nREOP$XML-UpLP2PCo2sqPe(Z|Cy_XCT@Jcx0%_!As`+n z+18DaLS|GT_@2fUUsn+9fq&46N(P`I^0jwi@vOx4D{R^xWUUtFEkV#m`L<+gK4f-x zb79je8|4?#Qc3Db*ZHo9IAIk-ERhkyFxnS;o|gf?1@MjmaSV?0IP5J&3A`z30EG-@ znxXm0ra(M($GFz-Q2t8|Ki%n}U_xb5G44i`Fu8Iz6C$Nmq&Kp?C&6Y^Z8K<~pCrjd zCR|0;5TZEwwfw<2N57gUoDG&pBC-S2jyjkoi|QyP$=^60bm8*E4qD`M~3h|I^8w8Pi)no)tmO0^1W@pMHM}Rf!=X;V-nzND z5=pD<96dk;g`|dmYexM$$)d_#K{-%kD@>mgZ=j2b9!6qg{zNV|dK@%(OX@V)(M%Cc8nXy=$5$&>*gCc%O9ng!HZ4K>I5Kb^E ze)9zChc6xecUPMkuv{jCO+1vZF!d#C8Ndi*)e6g4BwFVNk(xdv!QYR7MCBp#AZ)rZ zH@MiWUA&C|8&2u4Q87Wfur=7S6D!L%JaL-&cuO?8l$V62`_`)1jQhQgcqYdd zo|KJY*vU{*ovJ5&xvSAB^fnskgsjo_7itZ4I9_$;iUO>b&iw8=U`;|T62{azOxpS> zZ9*i1elzw~>e|EV%r$^CcA*wHVRYy4l4p{DZQf@8U_vFVcJcG?p z*R;C+y7LCph4E+^Zez1$>8r%4m7E~CTM?~RCTSTyn^Dwuzl7l6D`wUq56iJ`O5s(2 z(n%VFs}~yj3Cuqb10K5?u?y(UAmh&BvTH&lfidetjma!PnU*?$cP{E=zik?f$ovGm!2-YFkE*<$1F8Dx;Rs`}gga?i?7bx&~E z*njt+ojXI_GlgGm6h??awF?J;0nbwLE|ehGhEYRB0`Z0Jy4nq*TCN`{I)bycr|lAs z6n7Q-%8>OO>Ny(5Z3`|J%c}RixOW|FL=sGLK?$!hkym%uKK9-weod-(8!oH z@Fch7d!3_C5KQCp%9ym&%qA-}5b;$;4;s02cy+>QsF;)FvApF=*uSDXB8&cP>Ck0r zL-dmqPg$8&*P~$f3U8BaOBSZqc3TG#H4}HC{)}JK2C{XqVVm3t^tavDC=R99lfvG7 z?)6x{alfM{3jVhe7z7#49pVv8P324$HU8_*KgiAU~WB#}AIx zPf$arlFkHP}!7?gnAFuPA!JXV?gt=}p(M@9ffXg(Yr$OJxL(C0vyiuxD9 z$#B5WYjJ~4#iVVZF|;Y@ri^K+2XO_eD1^i;nT6Ow>}K%7(y`>k9z}54aRlNRsRfZ% zrd|3|A#D0*%HN4jP@q(~j_B)&!fAK@9042})dA~9U;`WgSV@h@nk@tgiXj*FbhhLw zCaa`a3q90{o(c!8(Bk%>1e>1e9#*$UPND@z3j=HC_}J)ytqT9LJOmn72M;XH9J8@{ecTMHFBs`jya^~`VOZwo#P;5?k zZPV~vA;4nL%F647M*cabyXd&FegfPeY&nE?v>{4i9bOh9MqRF+P*5Ho)lK5oIpSR5 z2%SD)l1hgKE%~Z%mT3Y2!OF@$X?Vner1~3O9Z1u2T`d+i%wh1?%NqNDuBfyuM7#XA zp(U8lg9z|51%-Qq<|^|TBO+v({{iBl?Q!6a=I!9;k#2??>-+`FHBTQI=5{v0OhlW` z)+@K__Cn%^XezL>&v%@t%Y<1m^G^T|)%7p2E+3AKX7H+>f&O{7lJ2BWj$Ja)qz;W$S{9CG`~d>PQKdZ4 z`f6+Kmwf5~ECb;@`s)JTBUg!G@AYQRYKA9o>wV*F;fUaT&5C<{WM#&dcW|~I#CpVV zz#HF_^2+i9|G<-B5eFW4wpgQYGWVc3FRI7|;syNX5d}YN8sgQiTPDu@dN#YR9z|KGe z&NUsz7ERH@W@&w%He6N+0K?I1=k8xI6)}Ijdw``ia*E`4f2fnx-)!Zp`d4x$D^E;m z^-yWEKO{%I*z~^HTG6$t8_Bt1asF2>b5PNYHor8HKUryJTv)9yUX(ws5dTU!f!d$R-~> zc^jj5>qX88OuuZa9&UGpNfy8E;38hKKf|u;{tM+dbS<36Rypra)mP$_=Yeyseo|3x z=mLBoTh^6-46pJzYYjs#N^qi>StrWpWxHyF8Y!zh{^2bG{v!;~7}$GDM-(h?V`;s- zG_0yN$qL4aQ(vZHrn@CeU}*PiU(~qieL;V8niBRS{lRqcQCm|AvbF{^yrYVKLp30|^FKR)FP8ooGH*RxJVq`>%qCLr(E#2mfGY7aTMSzm zJ?$@r14dTAa1@5VOG}Fy-Vc`)-*|I*o+U5tRi+&JKk~7PP2`9Feld_$rM`&h0}*73 zNQ?3n`#iR3tOY&eUl-Ky4=tDtj+I4J_akLerpKewa*J!~w^Mt1d`u~Z4)>e$x6__2 zg}JH<;F##P*SVd$pn1)!tctL9oQm)VOMl&>G4LEb8;Q}42M0#4M?iRs$86dcEi*7= zNj*UBfc+aqdC-OTgOvw4m~y_m{*wcfh>)43ZThH(o5$`X{!BkUL-jVW>y!B3&)kjL zohkAAjY&MI&kI9pB5Ax@^eXX~L8b-~w3aHT!8JW+)`r$@-^ZXIe?9PQ+3wL#V*->A zeYjC6(^ZPi>SGOiZUtw9KJ3?{L}9Rm4GYM6U!zRf?UQc^J)_@XRX%i_KS#LEI0Orc zDKbYZxS-2kUP|{yO9g^5<+-t3ln2U|7?Wjg2Fs$)WLDIVKAxu|E9C-lCs=M;EfGxM zF`L}?eZB|NKFe^h-h45a1B1VcFXlU(?Rjky(5i;pP*WD4L^fI^&2*`t6>GK66F>U_ zliY&AJ_MW9@(aem$71`9;(o-^=+(2FEWk||ChWAWMBPDVAi;u3YsI>HXJoymfh{38 z*;tH8E&;7ErwSwh00000020qs&JdHFhDejy@+oKXz-lj`)_5rikiWk2kYVf!>mFGM zy7AL4x0dZ|oZTisls`Aem;`S6yfNfyvY+o_sF!83LEUA#D9d>OoShv1Q19h;g@ACu z0(si{2lhTCHuwS=XX&?fl8cDQI3*F=cSU&eyoflY1E?!-hWLjM=au=;%k^9WTb-KW zzX+iyC6zmBqzCs0l@;Qbn}8EJ!(m!3ZO3Ta2Mvxl4VkFT6`wuuBj`cENoJT z(pO43KVT)&lUm>!izFy9>4<9zpH>L$6|+Y_z!1=22j`r05p^0qfB*mh00000 E0N>rV$^ZZW literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/icons/index.tsx b/src/renderer/src/assets/icons/index.tsx new file mode 100644 index 0000000..77931f8 --- /dev/null +++ b/src/renderer/src/assets/icons/index.tsx @@ -0,0 +1,63 @@ +export { + ArrowRight, + Bot, + Brain, + Building, + ChevronDown, + ChevronRight, + Circle, + Clock, + Compass, + Copy, + Database, + Download, + Pencil, + Plug, + Workflow, + ExternalLink, + Folder, + KeyRound, + Layers, + Loader, + Monitor, + Moon, + PanelLeftClose, + PanelLeftOpen, + Plus, + Puzzle, + Search, + Send, + Settings, + Signal, + Sparkles, + Sun, + Timer, + User, + Users, + Wallet, + Wrench, + X, +} from "lucide-react"; + +export { RefreshCw as Refresh } from "lucide-react"; +export { Play, Pause, Zap, TriangleAlert as Alert } from "lucide-react"; +export { Trash2 as Trash } from "lucide-react"; +export { MessageSquare as ChatBubble } from "lucide-react"; +export { Square as Stop } from "lucide-react"; +export { Globe } from "lucide-react"; +export { Check } from "lucide-react"; +export { Ban } from "lucide-react"; +export { RotateCcw } from "lucide-react"; +export { Loader2 as Spinner } from "lucide-react"; +export { Columns3 as Kanban } from "lucide-react"; +export { Eye as VisionIcon } from "lucide-react"; +export { Minimize2 as CompressionIcon } from "lucide-react"; +export { FileText as TitleIcon } from "lucide-react"; +export { Filter as TriageIcon } from "lucide-react"; +export { Shield as ApprovalIcon } from "lucide-react"; +export { Folder as CuratorIcon } from "lucide-react"; +export { User as ProfileIcon } from "lucide-react"; +export { MoreHorizontal } from "lucide-react"; +export { Pin } from "lucide-react"; +export { PinOff } from "lucide-react"; +export { FolderInput } from "lucide-react"; diff --git a/src/renderer/src/assets/iconv2.png b/src/renderer/src/assets/iconv2.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2b3bcaf9a50c7ce9130ee084f8654ba491f606 GIT binary patch literal 47148 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 literal 0 HcmV?d00001 diff --git a/src/renderer/src/assets/images/one-chat.svg b/src/renderer/src/assets/images/one-chat.svg new file mode 100644 index 0000000..205675f --- /dev/null +++ b/src/renderer/src/assets/images/one-chat.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/renderer/src/assets/loadingo.gif b/src/renderer/src/assets/loadingo.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb24b0842fb2e590d88545343fb3c5c1753bdf6f GIT binary patch literal 610440 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 ^CH+aM4ZXirCBeie768fEWK_)WqV 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ðY=V--Z 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

+ + {t("diagnose.apiKeyModal.hint")} + + + +
+ + +
+ + + )} + + ); +} + +export default ConfigHealthBanner; diff --git a/src/renderer/src/components/ErrorBoundary.tsx b/src/renderer/src/components/ErrorBoundary.tsx new file mode 100644 index 0000000..c65c99b --- /dev/null +++ b/src/renderer/src/components/ErrorBoundary.tsx @@ -0,0 +1,57 @@ +import { Component } from "react"; +import type { ErrorInfo, ReactNode } from "react"; +import i18n from "i18next"; + +interface Props { + children: ReactNode; + fallback?: ReactNode; +} + +interface State { + hasError: boolean; + error: Error | null; +} + +class ErrorBoundary extends Component { + constructor(props: Props) { + super(props); + this.state = { hasError: false, error: null }; + } + + static getDerivedStateFromError(error: Error): State { + return { hasError: true, error }; + } + + componentDidCatch(error: Error, info: ErrorInfo): void { + console.error("[ErrorBoundary]", error, info.componentStack); + } + + render(): ReactNode { + if (this.state.hasError) { + if (this.props.fallback) return this.props.fallback; + + return ( +
+
+

+ {i18n.t("common.errorTitle")} +

+

+ {this.state.error?.message || i18n.t("common.errorMessage")} +

+ +
+
+ ); + } + + return this.props.children; + } +} + +export default ErrorBoundary; diff --git a/src/renderer/src/components/FollowUsModal.tsx b/src/renderer/src/components/FollowUsModal.tsx new file mode 100644 index 0000000..6e8de81 --- /dev/null +++ b/src/renderer/src/components/FollowUsModal.tsx @@ -0,0 +1,91 @@ +import { useEffect, useState } from "react"; +import { X } from "lucide-react"; +import { useI18n } from "./useI18n"; + +const STORAGE_KEY = "hermes-follow-x-dismissed"; +const X_URL = "https://x.com/HermesOneApp"; + +/** Inline X (Twitter) logo — lucide-react removed the Twitter icon. */ +function XLogo({ + size = 24, + className, +}: { + size?: number; + className?: string; +}): React.JSX.Element { + return ( + + + + ); +} + +function FollowUsModal(): React.JSX.Element | null { + const { t } = useI18n(); + const [visible, setVisible] = useState(false); + + useEffect(() => { + // Only show if user hasn't previously dismissed + if (localStorage.getItem(STORAGE_KEY) !== "true") { + setVisible(true); + } + }, []); + + const handleFollow = (): void => { + void window.hermesAPI.openExternal(X_URL); + handleDismiss(); + }; + + const handleDismiss = (): void => { + localStorage.setItem(STORAGE_KEY, "true"); + setVisible(false); + }; + + if (!visible) return null; + + return ( +
+
e.stopPropagation()}> +
+

{t("chat.followUs.title")}

+ +
+
+
+ +
+

+ {t("chat.followUs.description")} +

+
+
+ + +
+
+
+ ); +} + +export default FollowUsModal; diff --git a/src/renderer/src/components/FontProvider.tsx b/src/renderer/src/components/FontProvider.tsx new file mode 100644 index 0000000..fc460c0 --- /dev/null +++ b/src/renderer/src/components/FontProvider.tsx @@ -0,0 +1,58 @@ +import { createContext, useContext, useEffect, useState } from "react"; +import { + DEFAULT_FONT, + FONT_OPTIONS, + FONT_STORAGE_KEY as STORAGE_KEY, +} from "../constants"; + +interface FontContextValue { + font: string; + setFont: (font: string) => void; +} + +const FontContext = createContext({ + font: DEFAULT_FONT, + setFont: () => {}, +}); + +function stackFor(font: string): string { + return ( + FONT_OPTIONS.find((opt) => opt.value === font)?.stack ?? + FONT_OPTIONS.find((opt) => opt.value === DEFAULT_FONT)!.stack + ); +} + +function isKnownFont(value: string | null): value is string { + return !!value && FONT_OPTIONS.some((opt) => opt.value === value); +} + +export function FontProvider({ + children, +}: { + children: React.ReactNode; +}): React.JSX.Element { + const [font, setFontState] = useState(() => { + const stored = localStorage.getItem(STORAGE_KEY); + return isKnownFont(stored) ? stored : DEFAULT_FONT; + }); + + function setFont(next: string): void { + setFontState(next); + localStorage.setItem(STORAGE_KEY, next); + } + + // Apply the chosen stack to --font-sans on , overriding the CSS default. + useEffect(() => { + document.documentElement.style.setProperty("--font-sans", stackFor(font)); + }, [font]); + + return ( + + {children} + + ); +} + +export function useFont(): FontContextValue { + return useContext(FontContext); +} diff --git a/src/renderer/src/components/HermesAccountModal.tsx b/src/renderer/src/components/HermesAccountModal.tsx new file mode 100644 index 0000000..f551964 --- /dev/null +++ b/src/renderer/src/components/HermesAccountModal.tsx @@ -0,0 +1,165 @@ +import { useState, useEffect, useRef } from "react"; +import { X, Check, Copy } from "../assets/icons"; +import { useI18n } from "./useI18n"; +import HermesLogo from "./common/HermesLogo"; +import type { + DeviceCodeInfo, + HermesAccountUser, +} from "../../../shared/account"; + +interface HermesAccountModalProps { + profile?: string; + onClose: () => void; + onSignedIn: (user: HermesAccountUser) => void; +} + +type Status = "running" | "success" | "error"; + +/** + * Drives the Hermes One account device-login (RFC 8628). The main process + * requests a code, opens the browser to the approval page, and polls for the + * token; this modal shows the user_code to confirm — with a loader spinning + * around the brand mark while it waits — and reports the result. + */ +function HermesAccountModal({ + profile, + onClose, + onSignedIn, +}: HermesAccountModalProps): React.JSX.Element { + const { t } = useI18n(); + const [status, setStatus] = useState("running"); + const [error, setError] = useState(""); + const [code, setCode] = useState(null); + const [copied, setCopied] = useState(false); + // Guard the single-flight login against React StrictMode's double effect. + const startedRef = useRef(false); + // Keep the latest onSignedIn without re-subscribing the IPC listeners. + const onSignedInRef = useRef(onSignedIn); + onSignedInRef.current = onSignedIn; + + useEffect(() => { + const offCode = window.hermesAPI.onAccountLoginCode((info) => + setCode(info), + ); + if (!startedRef.current) { + startedRef.current = true; + window.hermesAPI + .accountLogin(profile) + .then((res) => { + if (res.success && res.user) { + setStatus("success"); + onSignedInRef.current(res.user); + // First cloud-agent sync right at sign-in; the Agents screen + // hears about it via the agent-sync-updated event. + void window.hermesAPI.syncAgents?.().catch(() => {}); + } else { + setStatus("error"); + setError(res.error || t("providers.hermesAccount.failed")); + } + }) + .catch((err: unknown) => { + setStatus("error"); + setError( + (err as Error)?.message || t("providers.hermesAccount.failed"), + ); + }); + } + return offCode; + }, [profile, t]); + + function handleClose(): void { + // Abandoning mid-flow: stop the polling loop in the main process. + if (status === "running") void window.hermesAPI.cancelAccountLogin(); + onClose(); + } + + function copyCode(): void { + if (!code) return; + navigator.clipboard + .writeText(code.userCode) + .then(() => { + setCopied(true); + setTimeout(() => setCopied(false), 1500); + }) + .catch(() => { + // Clipboard unavailable (e.g. permission denied) — don't claim "Copied". + }); + } + + const subtitle = + status === "error" + ? error + : status === "success" + ? t("providers.hermesAccount.successHint") + : t("providers.hermesAccount.codeHint"); + + const footerStatus = + status === "running" + ? t("providers.hermesAccount.waitingHint") + : status === "success" + ? t("providers.hermesAccount.signedIn") + : t("providers.hermesAccount.failed"); + + return ( +
+
e.stopPropagation()}> + + +
+ {status === "running" && ( +
+ +

+ {t("providers.hermesAccount.modalTitle")} +

+

{subtitle}

+ + {status === "running" && code && ( + <> +
{code.userCode}
+ + + )} + +
+ {footerStatus} + +
+
+
+ ); +} + +export default HermesAccountModal; diff --git a/src/renderer/src/components/I18nContext.ts b/src/renderer/src/components/I18nContext.ts new file mode 100644 index 0000000..33409c2 --- /dev/null +++ b/src/renderer/src/components/I18nContext.ts @@ -0,0 +1,9 @@ +import { createContext } from "react"; +import type { AppLocale } from "../../../shared/i18n"; + +export type I18nContextValue = { + locale: AppLocale; + setLocale: (locale: AppLocale) => void; +}; + +export const I18nContext = createContext(null); diff --git a/src/renderer/src/components/I18nProvider.test.tsx b/src/renderer/src/components/I18nProvider.test.tsx new file mode 100644 index 0000000..6474ce7 --- /dev/null +++ b/src/renderer/src/components/I18nProvider.test.tsx @@ -0,0 +1,116 @@ +import { act, fireEvent, render, screen } from "@testing-library/react"; +import { vi } from "vitest"; +import { + DEFAULT_ACTIVE_LOCALE, + setLocale as setSharedLocale, + type AppLocale, +} from "../../../shared/i18n"; +import { I18nProvider } from "./I18nProvider"; +import { useI18n } from "./useI18n"; + +function Probe(): React.JSX.Element { + const { t } = useI18n(); + return
{t("welcome.title")}
; +} + +function LocaleSwitcherProbe(): React.JSX.Element { + const { t, setLocale } = useI18n(); + + return ( + <> + +
{t("welcome.title")}
+ + ); +} + +function installHermesAPI( + api: Pick, +): void { + Object.defineProperty(window, "hermesAPI", { + configurable: true, + value: api, + }); +} + +describe("I18nProvider", () => { + const getLocale = vi.fn().mockResolvedValue(DEFAULT_ACTIVE_LOCALE); + const setLocale = vi.fn().mockResolvedValue(DEFAULT_ACTIVE_LOCALE); + + beforeEach(() => { + installHermesAPI({ + getLocale, + setLocale, + }); + getLocale.mockClear(); + setLocale.mockClear(); + getLocale.mockResolvedValue(DEFAULT_ACTIVE_LOCALE); + setLocale.mockResolvedValue(DEFAULT_ACTIVE_LOCALE); + }); + + afterEach(() => { + setSharedLocale(DEFAULT_ACTIVE_LOCALE); + try { + localStorage.removeItem("hermes-locale"); + } catch { + /* ignore */ + } + }); + + it("renders English translations by default", async () => { + await act(async () => { + render( + + + , + ); + }); + + expect( + await screen.findByText("Welcome to Hermes One"), + ).toBeInTheDocument(); + }); + + it("renders Spanish translations after switching locale", async () => { + render( + + + , + ); + + await act(async () => { + fireEvent.click( + screen.getByRole("button", { name: "Switch to Spanish" }), + ); + }); + + expect(setLocale).toHaveBeenLastCalledWith("es"); + expect(await screen.findByText("Bienvenido a Hermes")).toBeInTheDocument(); + }); + + it("does not overwrite the main-process locale with the startup fallback", async () => { + let resolveMainLocale: (locale: AppLocale) => void = () => {}; + getLocale.mockReturnValue( + new Promise((resolve) => { + resolveMainLocale = resolve; + }), + ); + + render( + + + , + ); + + await act(async () => {}); + + expect(setLocale).not.toHaveBeenCalled(); + + await act(async () => { + resolveMainLocale("es"); + }); + + expect(setLocale).toHaveBeenLastCalledWith("es"); + expect(await screen.findByText("Bienvenido a Hermes")).toBeInTheDocument(); + }); +}); diff --git a/src/renderer/src/components/I18nProvider.tsx b/src/renderer/src/components/I18nProvider.tsx new file mode 100644 index 0000000..a576486 --- /dev/null +++ b/src/renderer/src/components/I18nProvider.tsx @@ -0,0 +1,115 @@ +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { I18nextProvider, initReactI18next } from "react-i18next"; +import { + APP_LOCALES, + DEFAULT_ACTIVE_LOCALE, + getLocaleDirection, + setLocale as setSharedLocale, + sharedI18n, + type AppLocale, +} from "../../../shared/i18n"; +import { I18nContext, type I18nContextValue } from "./I18nContext"; + +void sharedI18n.use(initReactI18next); + +const STORAGE_KEY = "hermes-locale"; + +// Mirror the whole UI for right-to-left languages (e.g. Hebrew) by +// setting the document's dir/lang. Kept in sync with the active locale. +function applyDocumentLocale(locale: AppLocale): void { + if (typeof document === "undefined") return; + const root = document.documentElement; + root.setAttribute("dir", getLocaleDirection(locale)); + root.setAttribute("lang", locale); +} + +function readStoredLocale(): AppLocale { + try { + const raw = localStorage.getItem(STORAGE_KEY); + if (raw && (APP_LOCALES as string[]).includes(raw)) { + return raw as AppLocale; + } + } catch { + /* ignore */ + } + return DEFAULT_ACTIVE_LOCALE; +} + +const initialLocale = readStoredLocale(); +setSharedLocale(initialLocale); +applyDocumentLocale(initialLocale); + +export function I18nProvider({ + children, +}: { + children: React.ReactNode; +}): React.JSX.Element { + const [locale, setLocaleState] = useState(initialLocale); + const [mainLocaleLoaded, setMainLocaleLoaded] = useState( + () => !window.hermesAPI?.getLocale, + ); + const userSelectedLocale = useRef(false); + + const setLocale = useCallback((nextLocale: AppLocale) => { + userSelectedLocale.current = true; + setLocaleState(nextLocale); + }, []); + + useEffect(() => { + let cancelled = false; + const getMainLocale = window.hermesAPI?.getLocale; + + if (!getMainLocale) { + return; + } + + void getMainLocale() + .then((mainLocale) => { + if (cancelled || !mainLocale || userSelectedLocale.current) return; + setLocaleState(mainLocale); + }) + .catch(() => { + /* ignore */ + }) + .finally(() => { + if (!cancelled) { + setMainLocaleLoaded(true); + } + }); + + return () => { + cancelled = true; + }; + }, []); + + useEffect(() => { + if (!mainLocaleLoaded && !userSelectedLocale.current) return; + + if (sharedI18n.language !== locale) { + setSharedLocale(locale); + } + applyDocumentLocale(locale); + void window.hermesAPI?.setLocale?.(locale).catch(() => { + /* ignore */ + }); + try { + localStorage.setItem(STORAGE_KEY, locale); + } catch { + /* ignore */ + } + }, [locale, mainLocaleLoaded]); + + const value = useMemo( + () => ({ + locale, + setLocale, + }), + [locale, setLocale], + ); + + return ( + + {children} + + ); +} diff --git a/src/renderer/src/components/MediaImage.lightbox.test.tsx b/src/renderer/src/components/MediaImage.lightbox.test.tsx new file mode 100644 index 0000000..7c633a8 --- /dev/null +++ b/src/renderer/src/components/MediaImage.lightbox.test.tsx @@ -0,0 +1,76 @@ +import { fireEvent, render } from "@testing-library/react"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { MediaImage } from "./MediaImage"; +import type { MediaToken } from "../screens/Chat/mediaUtils"; + +vi.mock("./useI18n", () => ({ + useI18n: () => ({ + t: (key: string) => key, + }), +})); + +const token: MediaToken = { + src: "data:image/png;base64,iVBORw0KGgo=", + isUrl: true, + isImage: true, + name: "pic.png", +}; + +function openLightbox(): ReturnType { + const view = render(); + fireEvent.click(view.getByAltText("pic.png")); + return view; +} + +describe("MediaImage lightbox", () => { + beforeEach(() => { + Object.defineProperty(window, "hermesAPI", { + configurable: true, + value: { + saveMediaFile: vi.fn(async () => true), + showMediaMenu: vi.fn(), + }, + }); + }); + + it("portals the lightbox to document.body so paint containment cannot clip it", () => { + // Regression for the content-visibility clipping bug: `.chat-message` rows + // imply paint containment (#748), which traps an inline fixed backdrop + // inside the row. Rendering under is the escape hatch — this pins + // the backdrop's DOM location, not just its presence. + const { container } = openLightbox(); + const backdrop = document.querySelector(".chat-image-preview-backdrop"); + expect(backdrop).not.toBeNull(); + expect(backdrop?.parentElement).toBe(document.body); + expect(container.querySelector(".chat-image-preview-backdrop")).toBeNull(); + }); + + it("closes on Escape and consumes the key before bubble-phase listeners", () => { + // FileViewer binds an unguarded document-level (bubble) Escape listener. + // The lightbox is the topmost modal, so one keypress must close only it — + // capture + stopPropagation keeps the panel behind it open. + const panelListener = vi.fn(); + document.addEventListener("keydown", panelListener); + try { + openLightbox(); + fireEvent.keyDown(document.body, { key: "Escape" }); + expect(document.querySelector(".chat-image-preview-backdrop")).toBeNull(); + expect(panelListener).not.toHaveBeenCalled(); + } finally { + document.removeEventListener("keydown", panelListener); + } + }); + + it("closes on backdrop click but not on clicks inside the action bar", () => { + openLightbox(); + const actions = document.querySelector(".chat-image-preview-actions"); + expect(actions).not.toBeNull(); + fireEvent.click(actions!); + expect( + document.querySelector(".chat-image-preview-backdrop"), + ).not.toBeNull(); + + fireEvent.click(document.querySelector(".chat-image-preview-backdrop")!); + expect(document.querySelector(".chat-image-preview-backdrop")).toBeNull(); + }); +}); diff --git a/src/renderer/src/components/MediaImage.tsx b/src/renderer/src/components/MediaImage.tsx new file mode 100644 index 0000000..b573ab9 --- /dev/null +++ b/src/renderer/src/components/MediaImage.tsx @@ -0,0 +1,205 @@ +import { useState, useEffect } from "react"; +import { createPortal } from "react-dom"; +import { Download, X } from "lucide-react"; +import { useLightboxClose } from "../hooks/useLightboxClose"; +import type { MediaToken } from "../screens/Chat/mediaUtils"; +import { useI18n } from "./useI18n"; + +/** + * Returns an `onContextMenu` handler that opens a native right-click menu + * for a media element — "Open" (hands the file to the OS default handler, + * or a web URL to the browser) and "Save as…". The labels are resolved + * through i18n here so the native menu matches the active UI locale, since + * the menu itself is built in the main process (issue #299). + */ +function useMediaContextMenu( + token: MediaToken, +): (event: React.MouseEvent) => void { + const { t } = useI18n(); + return (event) => { + event.preventDefault(); + window.hermesAPI.showMediaMenu(token.src, token.name, { + open: t("chat.media.open"), + saveAs: t("chat.media.saveAs"), + }); + }; +} + +/** + * Renders an agent-delivered image (issue #299). Data URLs and http(s) + * URLs render directly; local filesystem paths are resolved to a data URL + * through the main process. Clicking the image opens a zoom/lightbox + * overlay with a localized save action. + */ +export function MediaImage({ + token, +}: { + token: MediaToken; +}): React.JSX.Element { + const { t } = useI18n(); + const isDirect = + token.src.startsWith("data:") || /^https?:\/\//i.test(token.src); + const [resolved, setResolved] = useState( + isDirect ? token.src : null, + ); + const [failed, setFailed] = useState(false); + const [zoomed, setZoomed] = useState(false); + useLightboxClose(zoomed, () => setZoomed(false)); + const resolvedToken = { ...token, src: resolved ?? token.src }; + const onContextMenu = useMediaContextMenu(resolvedToken); + + useEffect(() => { + if (isDirect) return; + let cancelled = false; + window.hermesAPI + .readMediaFile(token.src) + .then((dataUrl) => { + if (cancelled) return; + if (dataUrl) setResolved(dataUrl); + else setFailed(true); + }) + .catch(() => { + if (!cancelled) setFailed(true); + }); + return () => { + cancelled = true; + }; + }, [token.src, isDirect]); + + if (failed) { + return ( + ⚠ Could not load {token.name} + ); + } + + if (!resolved) { + return Loading {token.name}…; + } + + return ( + <> + {token.name} setZoomed(true)} + onContextMenu={onContextMenu} + onError={() => setFailed(true)} + /> + {/* Portal to : `.chat-message` rows use `content-visibility: auto` + (chat perf), whose implied paint containment makes the row a + containing block for `position: fixed` descendants — rendered + inline, the backdrop gets trapped and clipped inside the message + row instead of covering the viewport. */} + {zoomed && + createPortal( +
setZoomed(false)} + > + {token.name} e.stopPropagation()} + onContextMenu={onContextMenu} + /> +
e.stopPropagation()} + > + + +
+
, + document.body, + )} + + ); +} + +/** A compact, clickable chip for non-image media — saves the file. */ +export function DownloadChip({ + token, +}: { + token: MediaToken; +}): React.JSX.Element { + const onContextMenu = useMediaContextMenu(token); + return ( + + ); +} + +/** + * Renders one media segment (issue #299). Explicit `MEDIA:` tokens are + * trusted and shown eagerly; a bare-path candidate is first verified to + * point at a real file — until then, and if verification fails, its + * original text is shown verbatim, so a path merely mentioned in prose is + * never turned into media. + */ +export function MediaSegmentView({ + token, + raw, + source, +}: { + token: MediaToken; + raw: string; + source: "media-token" | "bare-path"; +}): React.JSX.Element { + const [verified, setVerified] = useState( + source === "media-token" ? true : null, + ); + + useEffect(() => { + // Only an inferred local path needs verifying; explicit tokens and + // URLs are trusted as-is. + if (source !== "bare-path" || token.isUrl) return; + let cancelled = false; + window.hermesAPI + .mediaFileExists(token.src) + .then((ok) => { + if (!cancelled) setVerified(ok); + }) + .catch(() => { + if (!cancelled) setVerified(false); + }); + return () => { + cancelled = true; + }; + }, [source, token.src, token.isUrl]); + + if (verified !== true) return <>{raw}; + return token.isImage ? ( + + ) : ( + + ); +} + +export default MediaImage; diff --git a/src/renderer/src/components/OAuthLoginModal.tsx b/src/renderer/src/components/OAuthLoginModal.tsx new file mode 100644 index 0000000..a87c1d7 --- /dev/null +++ b/src/renderer/src/components/OAuthLoginModal.tsx @@ -0,0 +1,123 @@ +import { useState, useEffect, useRef } from "react"; +import { X } from "../assets/icons"; +import { useI18n } from "./useI18n"; + +interface OAuthLoginModalProps { + provider: string; + providerLabel: string; + profile?: string; + onClose: () => void; +} + +type Status = "running" | "success" | "error"; + +/** + * Drives an interactive OAuth sign-in for a subscription provider. + * Spawns `hermes auth add --type oauth` in the main process, + * streams the CLI output here, and reports success/failure. The CLI + * opens the system browser for the consent step. + */ +function OAuthLoginModal({ + provider, + providerLabel, + profile, + onClose, +}: OAuthLoginModalProps): React.JSX.Element { + const { t } = useI18n(); + const [log, setLog] = useState(""); + const [status, setStatus] = useState("running"); + const [error, setError] = useState(""); + const logRef = useRef(null); + // The login subprocess is single-flight in the main process. React + // StrictMode (dev) double-invokes effects, so guard against firing a + // second `oauthLogin` that would just bounce off that guard. + const startedRef = useRef(false); + + useEffect(() => { + const cleanup = window.hermesAPI.onOAuthLoginProgress((chunk) => { + setLog((prev) => prev + chunk); + }); + if (!startedRef.current) { + startedRef.current = true; + window.hermesAPI + .oauthLogin(provider, profile) + .then((res) => { + if (res.success) { + setStatus("success"); + } else { + setStatus("error"); + setError(res.error || t("providers.oauth.failed")); + } + }) + .catch((err: unknown) => { + setStatus("error"); + setError((err as Error)?.message || t("providers.oauth.failed")); + }); + } + return cleanup; + }, [provider, profile, t]); + + // Keep the streamed log scrolled to the newest line. + useEffect(() => { + if (logRef.current) { + logRef.current.scrollTop = logRef.current.scrollHeight; + } + }, [log]); + + function handleClose(): void { + // Abandoning a flow mid-OAuth: tell main to kill the CLI subprocess + // so its loopback redirect server doesn't linger. + if (status === "running") { + void window.hermesAPI.cancelOAuthLogin(); + } + onClose(); + } + + return ( +
+
e.stopPropagation()}> +
+

+ {t("providers.oauth.signIn")} — {providerLabel} +

+ +
+
+ {status === "running" && ( +

+ {t("providers.oauth.runningHint")} +

+ )} + {status === "success" && ( +
+ ✓ {t("providers.oauth.successHint")} +
+ )} + {status === "error" && ( +
+ ✗ {error} +
+ )} + {log && ( +
+              {log}
+            
+ )} +
+
+ +
+
+
+ ); +} + +export default OAuthLoginModal; diff --git a/src/renderer/src/components/ProviderKeysSection.tsx b/src/renderer/src/components/ProviderKeysSection.tsx new file mode 100644 index 0000000..a1f8a5f --- /dev/null +++ b/src/renderer/src/components/ProviderKeysSection.tsx @@ -0,0 +1,652 @@ +import { useCallback, useEffect, useMemo, useState } from "react"; +import { + Globe, + KeyRound, + Loader2, + Pencil, + Plus, + Search, + Tag, + X, +} from "lucide-react"; +import type { FieldDef } from "../constants"; +import { providerRouteForEnvKey } from "../constants"; +import { useDiscoveredModels } from "../hooks/useDiscoveredModels"; +import { + CUSTOM_API_KEY_ENV, + customProviderEnvKey, + expectedEnvKeyForUrl, +} from "../../../shared/url-key-map"; +import { useI18n } from "./useI18n"; +import BrandLogo from "./common/BrandLogo"; + +// A route describes how a model saved "under" a provider is persisted: +// `{ provider, baseUrl }`. Native providers keep their slug; OpenAI-compatible +// and custom endpoints use `provider: "custom"` + an explicit base URL. +interface Route { + provider: string; + baseUrl: string; +} + +// A library model as returned by `listModels()`. +interface LibModel { + id: string; + name: string; + provider: string; + model: string; + baseUrl: string; + providerLabel?: string; + createdAt: number; +} + +// Normalize a base URL for equality (trailing slash + case are irrelevant when +// deciding whether a saved `custom` model belongs to a given endpoint). +const normUrl = (u: string): string => + (u || "").trim().replace(/\/+$/, "").toLowerCase(); + +// Host of a base URL, used as a fallback custom-provider title (raw URL if +// unparseable). +const hostOf = (url: string): string => { + try { + return new URL(url).host; + } catch { + return url; + } +}; + +// The LLM-providers key manager. Instead of rendering a static card for EVERY +// known provider (an overwhelming wall of empty inputs), it shows only the +// providers the user has actually configured, plus an "Add provider" action +// that opens a picker → per-provider config modal. Purely a presentation layer +// over the same env state + persistence handlers owned by Providers.tsx. + +interface Props { + items: FieldDef[]; + env: Record; + savedKey: string | null; + visibleKeys: Set; + onChange: (key: string, value: string) => void; + onBlur: (key: string) => void | Promise; + onToggleVisibility: (key: string) => void; + onRemove: (key: string) => void | Promise; +} + +// Per-provider model manager, shown inside a provider's config modal — the +// OpenCode-style "models under a provider" surface. It lists the library models +// that route to this provider and lets the user add/remove more, persisting to +// the same `models.json` library the Models screen uses (so entries appear in +// the chat picker). Routing is derived from the env key via +// `providerRouteForEnvKey`: native providers keep their slug, OpenAI-compatible +// ones save as `custom` + base URL. Add-input autocompletes off live provider +// discovery when a key is present. +function ProviderModelsManager({ + envKey, + apiKey, + route: routeOverride, + providerLabel, +}: { + // Anchor: either an LLM-provider env key (route derived) or an explicit route + // (custom endpoints, where no fixed env key maps to the base URL). + envKey?: string; + apiKey: string; + route?: Route; + // Display name of the custom provider these models belong to. Groups them and + // keys their API key (`CUSTOM_PROVIDER_