@desktalk/core 0.1.0-alpha.2 → 0.1.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/frontend/assets/{frontend-DzPuSfWJ.js → frontend-BGrAEoc-.js} +2 -2
  2. package/dist/frontend/assets/{frontend-DzPuSfWJ.js.map → frontend-BGrAEoc-.js.map} +1 -1
  3. package/dist/frontend/assets/{frontend-Dn0dKARf.js → frontend-BWgJC5kX.js} +2 -2
  4. package/dist/frontend/assets/{frontend-Dn0dKARf.js.map → frontend-BWgJC5kX.js.map} +1 -1
  5. package/dist/frontend/assets/{frontend-yvqb_XNo.js → frontend-CTdbpot-.js} +2 -2
  6. package/dist/frontend/assets/{frontend-yvqb_XNo.js.map → frontend-CTdbpot-.js.map} +1 -1
  7. package/dist/frontend/assets/{frontend-BAknU-ge.js → frontend-CwxhooMD.js} +3 -3
  8. package/dist/frontend/assets/frontend-CwxhooMD.js.map +1 -0
  9. package/dist/frontend/assets/{frontend-DpmnQ1w4.js → frontend-DRTe8-9o.js} +3 -3
  10. package/dist/frontend/assets/frontend-DRTe8-9o.js.map +1 -0
  11. package/dist/frontend/assets/frontend-Dz_8vRz5.js +547 -0
  12. package/dist/frontend/assets/frontend-Dz_8vRz5.js.map +1 -0
  13. package/dist/frontend/assets/{frontend-0mUhlxkg.js → frontend-vY_f4fVI.js} +2 -2
  14. package/dist/frontend/assets/{frontend-0mUhlxkg.js.map → frontend-vY_f4fVI.js.map} +1 -1
  15. package/dist/frontend/assets/{highlighted-body-TPN3WLV5-BheGZsYG.js → highlighted-body-TPN3WLV5-CRT7miki.js} +2 -2
  16. package/dist/frontend/assets/{highlighted-body-TPN3WLV5-BheGZsYG.js.map → highlighted-body-TPN3WLV5-CRT7miki.js.map} +1 -1
  17. package/dist/frontend/assets/index-CI5Mxo87.js +1863 -0
  18. package/dist/frontend/assets/index-CI5Mxo87.js.map +1 -0
  19. package/dist/frontend/assets/index-D6_VuNyY.css +1 -0
  20. package/dist/frontend/index.html +3 -2
  21. package/dist/frontend/logo.png +0 -0
  22. package/dist/i18n/manifest.json +268 -0
  23. package/dist/i18n/zh-CN.json +53 -0
  24. package/dist/i18n/zh.json +60 -0
  25. package/dist/server/auth-routes.d.ts.map +1 -1
  26. package/dist/server/auth-routes.js +2 -2
  27. package/dist/server/auth-routes.js.map +1 -1
  28. package/dist/server/index.d.ts.map +1 -1
  29. package/dist/server/index.js +14 -5
  30. package/dist/server/index.js.map +1 -1
  31. package/dist/server/thumbnail-routes.d.ts +3 -0
  32. package/dist/server/thumbnail-routes.d.ts.map +1 -0
  33. package/dist/server/thumbnail-routes.js +97 -0
  34. package/dist/server/thumbnail-routes.js.map +1 -0
  35. package/dist/services/ai/edit-history.d.ts +3 -7
  36. package/dist/services/ai/edit-history.d.ts.map +1 -1
  37. package/dist/services/ai/edit-history.js +145 -76
  38. package/dist/services/ai/edit-history.js.map +1 -1
  39. package/dist/services/ai/edit-tool.js +1 -1
  40. package/dist/services/ai/edit-tool.js.map +1 -1
  41. package/dist/services/ai/layout-tool.d.ts +8 -0
  42. package/dist/services/ai/layout-tool.d.ts.map +1 -0
  43. package/dist/services/ai/layout-tool.js +105 -0
  44. package/dist/services/ai/layout-tool.js.map +1 -0
  45. package/dist/services/ai/manual-pages/desktop-layout.md +34 -0
  46. package/dist/services/ai/manual-pages/desktop-windows.md +2 -0
  47. package/dist/services/ai/manual-pages/index.d.ts.map +1 -1
  48. package/dist/services/ai/manual-pages/index.js +9 -2
  49. package/dist/services/ai/manual-pages/index.js.map +1 -1
  50. package/dist/services/ai/pi-session-service.d.ts.map +1 -1
  51. package/dist/services/ai/pi-session-service.js +4 -0
  52. package/dist/services/ai/pi-session-service.js.map +1 -1
  53. package/dist/services/ai/redo-edit-tool.js +1 -1
  54. package/dist/services/ai/redo-edit-tool.js.map +1 -1
  55. package/dist/services/ai/undo-edit-tool.js +1 -1
  56. package/dist/services/ai/undo-edit-tool.js.map +1 -1
  57. package/dist/services/file-thumbnail.d.ts +20 -0
  58. package/dist/services/file-thumbnail.d.ts.map +1 -0
  59. package/dist/services/file-thumbnail.js +102 -0
  60. package/dist/services/file-thumbnail.js.map +1 -0
  61. package/dist/services/onboarding-config.d.ts +1 -1
  62. package/dist/services/onboarding-config.d.ts.map +1 -1
  63. package/dist/services/onboarding-config.js +10 -2
  64. package/dist/services/onboarding-config.js.map +1 -1
  65. package/package.json +11 -10
  66. package/dist/frontend/assets/frontend-B1Lvc6Rl.js +0 -413
  67. package/dist/frontend/assets/frontend-B1Lvc6Rl.js.map +0 -1
  68. package/dist/frontend/assets/frontend-BAknU-ge.js.map +0 -1
  69. package/dist/frontend/assets/frontend-DpmnQ1w4.js.map +0 -1
  70. package/dist/frontend/assets/index-BAa2HQwc.css +0 -1
  71. package/dist/frontend/assets/index-BEaTx9Vu.js +0 -1863
  72. package/dist/frontend/assets/index-BEaTx9Vu.js.map +0 -1
@@ -0,0 +1 @@
1
+ @charset "UTF-8";._dockIcon_1xw56_1{display:flex;width:48px;height:48px;align-items:center;justify-content:center;font-size:20px;transition:box-shadow .2s ease,transform .2s ease,border-color .2s ease}._dockIconImage_1xw56_11{width:100%;height:100%;border-radius:inherit;object-fit:cover;display:block}._panel_uttta_1{position:fixed;z-index:10050;display:grid;grid-template-columns:repeat(auto-fill,100px);gap:8px;min-width:340px;max-width:580px;padding:16px;border:1px solid var(--dt-glass-border);border-radius:8px;background:var(--dt-dock-bg);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);box-shadow:0 8px 28px var(--dt-shadow-color),0 1px 0 var(--dt-glass-highlight) inset,0 0 0 1px oklch(from var(--dt-accent) l c h/.3),0 0 6px 1px oklch(from var(--dt-accent) l c h/.15)}._empty_uttta_18{grid-column:1/-1;padding:12px 8px;color:var(--dt-text-muted);font-size:12px}._item_uttta_25{display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px 8px;border:0;border-radius:8px;background:transparent;color:var(--dt-text);cursor:pointer;font-family:inherit;font-size:12px;text-align:center;transition:background .12s ease}._item_uttta_25:hover{background:var(--dt-accent-ghost)}._icon_uttta_45{width:48px;height:48px;flex-shrink:0;font-size:28px}._label_uttta_52{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3}._actionsBar_1otoq_2{display:flex;align-items:center;gap:6px;height:100%;padding:0 12px;overflow:visible;background:var(--dt-actions-bar-bg);border-bottom:1px solid color-mix(in oklab,var(--dt-accent) 40%,transparent);color:var(--dt-text);font-size:13px;position:relative;z-index:10000}._launcherWrapper_1otoq_18{position:relative}._appName_1otoq_22{margin-right:12px;padding:4px 10px;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--dt-text);cursor:pointer;font-family:inherit;font-size:13px;font-weight:700;white-space:nowrap;transition:background .15s ease,border-color .15s ease}._appName_1otoq_22:hover{background:color-mix(in oklab,var(--dt-surface) 64%,transparent);border-color:var(--dt-border-subtle)}._appNameActive_1otoq_41{background:color-mix(in oklab,var(--dt-surface) 80%,transparent);border-color:var(--dt-border)}._splitToggle_1otoq_47{display:flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;border:1px solid transparent;border-radius:6px;background:transparent;color:var(--dt-text);cursor:pointer;opacity:.72;transition:background .15s ease,border-color .15s ease,color .15s ease,opacity .15s ease}._splitToggle_1otoq_47:hover{background:color-mix(in oklab,var(--dt-surface) 64%,transparent);border-color:var(--dt-border-subtle);opacity:1}._splitToggleActive_1otoq_68{border-color:color-mix(in oklab,var(--dt-accent) 50%,transparent);color:var(--dt-accent);opacity:1}._splitToggleActive_1otoq_68:hover{background:var(--dt-accent-ghost);border-color:var(--dt-accent)}._separator_1otoq_79{width:1px;height:16px;margin:0 6px;background:var(--dt-border-subtle)}._action_1otoq_2{padding:4px 10px;border:1px solid var(--dt-border);border-radius:12px;background:color-mix(in oklab,var(--dt-surface) 64%,transparent);color:var(--dt-text);cursor:pointer;font-family:inherit;font-size:12px;white-space:nowrap;transition:background .15s ease,border-color .15s ease,color .15s ease}._action_1otoq_2:hover{border-color:var(--dt-accent);background:var(--dt-accent-ghost);color:var(--dt-accent)}._glowing_1otoq_104{animation:_accent-pulse_1otoq_1 1.2s ease-out}@keyframes _accent-pulse_1otoq_1{0%{border-color:var(--dt-accent)}to{border-color:var(--dt-border)}}._builtinAction_1otoq_116{opacity:.92}._builtinAction_1otoq_116:hover{opacity:1}._overlay_196os_1{position:absolute;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:24px;background:color-mix(in srgb,var(--dt-bg) 58%,transparent);backdrop-filter:blur(10px) saturate(.84)}._card_196os_13{display:flex;flex-direction:column;align-items:center;gap:12px;min-width:min(320px,100vw - 48px);padding:24px 28px;border:1px solid color-mix(in srgb,var(--dt-border) 88%,transparent);border-radius:18px;background:color-mix(in srgb,var(--dt-surface) 84%,transparent);box-shadow:0 20px 48px color-mix(in srgb,var(--dt-bg) 55%,transparent);text-align:center}._spinner_196os_27{width:28px;height:28px;border:3px solid color-mix(in srgb,var(--dt-border) 75%,transparent);border-top-color:var(--dt-accent);border-radius:999px;animation:_spin_196os_27 .9s linear infinite}._title_196os_36{color:var(--dt-text);font-size:18px;font-weight:600}._subtitle_196os_42{color:var(--dt-text-muted);font-size:13px;line-height:1.5;max-width:32ch}@keyframes _spin_196os_27{0%{transform:rotate(0)}to{transform:rotate(360deg)}}._resizer_z2l6k_1{z-index:10;display:flex;align-items:center;justify-content:center;min-width:0;min-height:0;background:transparent}._horizontal_z2l6k_11{cursor:col-resize;flex-direction:row;width:100%;height:100%}._vertical_z2l6k_18{cursor:row-resize;flex-direction:column;width:100%;height:100%}._bar_z2l6k_25{border-radius:1px;opacity:.22;transition:opacity .15s ease,background-color .15s ease}._horizontal_z2l6k_11 ._bar_z2l6k_25{width:2px;height:100%;background:var(--dt-accent)}._vertical_z2l6k_18 ._bar_z2l6k_25{width:100%;height:2px;background:var(--dt-accent)}._resizer_z2l6k_1:hover ._bar_z2l6k_25,._resizer_z2l6k_1:active ._bar_z2l6k_25{opacity:.72}._overlay_19iyv_1{position:absolute;inset:0;z-index:15;pointer-events:none}._tileZone_19iyv_8{position:absolute;pointer-events:all}._highlight_19iyv_13{position:absolute;background:color-mix(in oklab,var(--dt-accent) 20%,transparent);border:2px dashed var(--dt-accent);border-radius:2px;transition:left .1s ease,top .1s ease,right .1s ease,bottom .1s ease,width .1s ease,height .1s ease;pointer-events:none}@keyframes sd-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes sd-blurIn{0%{opacity:0;filter:blur(4px)}to{opacity:1;filter:blur(0)}}@keyframes sd-slideUp{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}[data-sd-animate]{animation:var(--sd-animation, sd-fadeIn) var(--sd-duration, .15s) var(--sd-easing, ease) both}._thinkingBlock_x27ux_1{margin-bottom:8px;border:1px dashed color-mix(in oklab,var(--dt-border) 60%,transparent);border-radius:6px;background:color-mix(in oklab,var(--dt-surface) 30%,var(--dt-bg));overflow:hidden}._thinkingToggle_x27ux_9{display:flex;align-items:center;gap:6px;width:100%;padding:6px 0;border:none;background:none;color:var(--dt-text-muted);font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.03em;cursor:pointer;user-select:none}._thinkingChevron_x27ux_26{display:inline-block;font-size:10px;transition:transform .15s ease;transform:rotate(0)}._thinkingChevronOpen_x27ux_33{transform:rotate(90deg)}._thinkingContent_x27ux_37{padding:6px 10px 8px;border-top:1px dashed color-mix(in oklab,var(--dt-border) 40%,transparent);font-family:var(--font-mono);font-size:11px;line-height:1.4;color:var(--dt-text-muted);max-height:300px;overflow-y:auto;word-break:break-word}._thinkingContent_x27ux_37>:first-child{margin-top:0}._thinkingContent_x27ux_37>:last-child{margin-bottom:0}._thinkingContent_x27ux_37 p,._thinkingContent_x27ux_37 ul,._thinkingContent_x27ux_37 ol,._thinkingContent_x27ux_37 pre,._thinkingContent_x27ux_37 blockquote,._thinkingContent_x27ux_37 table,._thinkingContent_x27ux_37 h1,._thinkingContent_x27ux_37 h2,._thinkingContent_x27ux_37 h3,._thinkingContent_x27ux_37 h4,._thinkingContent_x27ux_37 h5,._thinkingContent_x27ux_37 h6{margin:0 0 .75em}._thinkingContent_x27ux_37 ul,._thinkingContent_x27ux_37 ol{padding-left:1.25em}._thinkingContent_x27ux_37 li+li{margin-top:.25em}._thinkingContent_x27ux_37 code{padding:.15em .4em;border-radius:6px;background:color-mix(in oklab,var(--dt-bg) 85%,transparent);font-family:var(--font-mono);font-size:.92em}._thinkingContent_x27ux_37 pre{overflow-x:auto;padding:.8em .95em;border:1px solid var(--dt-border-subtle);border-radius:12px;background:color-mix(in oklab,var(--dt-bg) 92%,transparent)}._thinkingContent_x27ux_37 pre code{padding:0;background:transparent}._thinkingContent_x27ux_37 blockquote{padding-left:.9em;border-left:3px solid var(--dt-border-subtle);color:var(--dt-text-secondary)}._thinkingContent_x27ux_37 a{color:var(--dt-accent);text-decoration:underline;text-underline-offset:.16em}._thinkingContent_x27ux_37 table{width:100%;border-collapse:collapse}._thinkingContent_x27ux_37 th,._thinkingContent_x27ux_37 td{padding:.45em .55em;border:1px solid var(--dt-border-subtle);text-align:left}._thinkingContent_x27ux_37 hr{margin:.9em 0;border:0;border-top:1px solid var(--dt-border-subtle)}._thinkingStreamingDot_x27ux_119{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--dt-text-muted);animation:_thinkingBounce_x27ux_1 1.4s ease-in-out infinite;vertical-align:middle;margin-left:4px}@keyframes _thinkingBounce_x27ux_1{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}._answeredQuestion_3nr33_1,._pendingQuestion_3nr33_2{display:flex;flex-direction:column;gap:10px;padding:10px 16px 12px;border-left:3px solid color-mix(in oklab,var(--dt-accent) 65%,var(--dt-border));background:color-mix(in oklab,var(--dt-accent) 7%,var(--dt-bg));font-family:var(--font-mono);font-size:12px;line-height:1.4}._answeredQuestion_3nr33_1{gap:4px;background:color-mix(in oklab,var(--dt-surface) 55%,var(--dt-bg));border-left-color:color-mix(in oklab,var(--dt-text-secondary) 50%,var(--dt-border))}._questionLabel_3nr33_20,._prompt_3nr33_21{color:var(--dt-text);font-weight:600}._answerLabel_3nr33_26{color:var(--dt-text-muted)}._controlsRow_3nr33_30{display:flex;gap:8px;align-items:center}._textInput_3nr33_36{min-width:0;flex:1 1 auto;padding:8px 10px;border:1px solid var(--dt-border-subtle);border-radius:10px;background:color-mix(in oklab,var(--dt-surface) 92%,transparent);color:var(--dt-text);font:inherit}._optionList_3nr33_47{display:flex;flex-direction:column;gap:8px}._optionItem_3nr33_53{display:flex;gap:8px;align-items:center;color:var(--dt-text-secondary)}._submitButton_3nr33_60,._secondaryButton_3nr33_61{padding:8px 12px;border:1px solid var(--dt-border-subtle);border-radius:10px;font:inherit;cursor:pointer}._submitButton_3nr33_60{background:color-mix(in oklab,var(--dt-accent) 20%,var(--dt-surface));color:var(--dt-text)}._secondaryButton_3nr33_61{background:color-mix(in oklab,var(--dt-surface) 90%,transparent);color:var(--dt-text-secondary)}._submitButton_3nr33_60:disabled{cursor:not-allowed;opacity:.55}@media(max-width:640px){._controlsRow_3nr33_30{flex-direction:column;align-items:stretch}}._message_xcgfi_1{padding:12px 16px;font-family:var(--font-mono);font-size:12px;line-height:1.3;color:color-mix(in oklab,var(--dt-text) 85%,var(--dt-text-secondary))}._messageCompact_xcgfi_9{display:flex;align-items:center;gap:8px;padding:8px 10px;overflow:hidden}._messageUser_xcgfi_17{background:color-mix(in oklab,var(--dt-accent) 8%,var(--dt-bg));border-left:3px solid color-mix(in oklab,var(--dt-accent) 75%,var(--dt-border))}._messageAssistant_xcgfi_23{background:color-mix(in oklab,var(--dt-info) 6%,var(--dt-bg));border-left:3px solid color-mix(in oklab,var(--dt-info) 75%,var(--dt-border))}._messageToolCall_xcgfi_29{display:flex;align-items:center;gap:6px;padding:4px 16px;font-family:var(--font-mono);font-size:11px;line-height:1.4;color:var(--dt-text-muted);background:color-mix(in oklab,var(--dt-surface) 40%,var(--dt-bg));border-left:3px solid color-mix(in oklab,var(--dt-text-secondary) 55%,var(--dt-bg))}._toolCallLabel_xcgfi_42{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._messageHeader_xcgfi_48{display:flex;align-items:center;gap:8px;margin-bottom:8px}._messageSpeaker_xcgfi_55{font-weight:700;font-size:12px;letter-spacing:.05em;flex-shrink:0}._compactMessageText_xcgfi_62{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._messageUser_xcgfi_17 ._messageSpeaker_xcgfi_55{color:color-mix(in oklab,var(--dt-accent) 70%,var(--dt-text))}._messageAssistant_xcgfi_23 ._messageSpeaker_xcgfi_55{color:color-mix(in oklab,var(--dt-info) 70%,var(--dt-text))}._voiceSourceBadge_xcgfi_77{display:inline-flex;align-items:center;padding:1px 6px;border-radius:3px;background:var(--dt-surface);color:var(--dt-text-muted);font-size:10px;font-weight:600;letter-spacing:.03em;text-transform:lowercase;font-family:var(--font-mono)}._markdownContent_xcgfi_91{word-break:break-word}._markdownContent_xcgfi_91>:first-child{margin-top:0}._markdownContent_xcgfi_91>:last-child{margin-bottom:0}._markdownContent_xcgfi_91 p,._markdownContent_xcgfi_91 ul,._markdownContent_xcgfi_91 ol,._markdownContent_xcgfi_91 pre,._markdownContent_xcgfi_91 blockquote,._markdownContent_xcgfi_91 table,._markdownContent_xcgfi_91 h1,._markdownContent_xcgfi_91 h2,._markdownContent_xcgfi_91 h3,._markdownContent_xcgfi_91 h4,._markdownContent_xcgfi_91 h5,._markdownContent_xcgfi_91 h6{margin:0 0 .75em}._markdownContent_xcgfi_91 ul,._markdownContent_xcgfi_91 ol{padding-left:1.25em}._markdownContent_xcgfi_91 li+li{margin-top:.25em}._markdownContent_xcgfi_91 code{padding:.15em .4em;border-radius:6px;background:color-mix(in oklab,var(--dt-bg) 85%,transparent);font-family:var(--font-mono);font-size:.92em}._markdownContent_xcgfi_91 pre{overflow-x:auto;padding:.8em .95em;border:1px solid var(--dt-border-subtle);border-radius:12px;background:color-mix(in oklab,var(--dt-bg) 92%,transparent)}._markdownContent_xcgfi_91 pre code{padding:0;background:transparent}._markdownContent_xcgfi_91 blockquote{padding-left:.9em;border-left:3px solid var(--dt-accent-subtle);color:var(--dt-text-secondary)}._markdownContent_xcgfi_91 a{color:var(--dt-accent);text-decoration:underline;text-underline-offset:.16em}._markdownContent_xcgfi_91 table{width:100%;border-collapse:collapse;font-size:12px}._markdownContent_xcgfi_91 th,._markdownContent_xcgfi_91 td{padding:.45em .55em;border:1px solid var(--dt-border-subtle);text-align:left}._markdownContent_xcgfi_91 hr{margin:.9em 0;border:0;border-top:1px solid var(--dt-border-subtle)}._thinkingIndicator_xcgfi_166{display:flex;align-items:center;gap:4px;padding:4px 0}._thinkingDot_xcgfi_173{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--dt-text-muted);animation:_thinkingBounce_xcgfi_1 1.4s ease-in-out infinite}._thinkingDot_xcgfi_173:nth-child(2){animation-delay:.2s}._thinkingDot_xcgfi_173:nth-child(3){animation-delay:.4s}@keyframes _thinkingBounce_xcgfi_1{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}._controlFrame_1v03g_2{position:relative;border-top:1px solid var(--dt-border-subtle);background:var(--dt-bg)}._controlFrameCompact_1v03g_8{border-top:none;background:transparent}._slashMenu_1v03g_14{position:absolute;bottom:100%;left:0;right:0;margin:0;padding:4px;list-style:none;background:var(--dt-surface);border:1px solid var(--dt-border);border-bottom:none;border-radius:8px 8px 0 0;box-shadow:0 -4px 16px #0000001f;font-family:var(--font-mono);font-size:13px;z-index:10}._slashMenuItem_1v03g_32{display:flex;align-items:baseline;gap:10px;padding:6px 10px;border-radius:6px;cursor:pointer;transition:background .1s}._slashMenuItemActive_1v03g_42{background:var(--dt-accent-ghost)}._slashMenuName_1v03g_46{color:var(--dt-accent);font-weight:600;white-space:nowrap}._slashMenuDesc_1v03g_52{color:var(--dt-text-muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}._inputRow_1v03g_60{display:flex;align-items:flex-end;gap:8px;padding:12px 16px}._inputRowCompact_1v03g_67{gap:6px;padding:8px 10px}._input_1v03g_60{flex:1;padding:8px 0;border:none;border-bottom:2px solid var(--dt-border);border-radius:0;outline:none;background:transparent;color:var(--dt-text);font-family:var(--font-mono);font-size:14px;line-height:1.4;resize:none;transition:border-color .2s}._input_1v03g_60::placeholder{color:var(--dt-text-muted)}._input_1v03g_60:focus{border-color:var(--dt-accent)}._input_1v03g_60:disabled{opacity:.6;cursor:not-allowed}._inputCompact_1v03g_98{padding:6px 0;font-size:13px}._statusRow_1v03g_103{display:flex;align-items:center;gap:12px;padding:6px 16px 8px;border-top:1px solid var(--dt-border-subtle);background:var(--dt-bg-subtle);font-family:var(--font-mono);font-size:11px}._statusItem_1v03g_114{color:var(--dt-text-muted)}._statusDivider_1v03g_118{color:var(--dt-border);user-select:none}._voiceButton_1v03g_123{display:flex;width:36px;height:36px;flex-shrink:0;align-items:center;justify-content:center;border:1px solid var(--dt-border);border-radius:4px;background:var(--dt-surface);color:var(--dt-text-secondary);cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}._voiceButton_1v03g_123:hover{border-color:var(--dt-accent);background:var(--dt-accent-ghost);color:var(--dt-accent)}._voiceButtonCompact_1v03g_143{width:32px;height:32px}._voiceButtonActive_1v03g_148{background:var(--dt-danger-subtle);border-color:var(--dt-danger);color:var(--dt-danger)}._voiceButtonActive_1v03g_148:hover{background:color-mix(in oklab,var(--dt-danger) 15%,var(--dt-surface));border-color:var(--dt-danger);color:var(--dt-danger)}@keyframes _voicePulse_1v03g_1{0%,to{box-shadow:0 0 color-mix(in oklab,var(--dt-danger) 22%,transparent)}50%{box-shadow:0 0 0 6px color-mix(in oklab,var(--dt-danger) 0%,transparent)}}._infoPanel_1fshd_1{display:flex;height:100%;flex-direction:column;overflow:hidden;border-left:1px solid var(--dt-border-subtle);background:color-mix(in oklab,var(--dt-info-panel-bg) 88%,transparent);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%)}._header_1fshd_12{display:flex;align-items:center;justify-content:space-between;padding:10px 8px;border-bottom:1px solid var(--dt-border-subtle);background:var(--dt-bg-subtle);color:var(--dt-text);font-family:var(--font-mono);font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase}._headerPrimary_1fshd_27{position:relative;display:flex;flex:1;min-width:0;align-items:center;gap:12px}._sessionControls_1fshd_36{position:relative;display:flex;flex:1;min-width:0;align-items:center;gap:8px}._sessionControls_1fshd_36 dt-select{flex:1 1 0%;min-width:0}._newSessionButton_1fshd_49{border:1px solid var(--dt-border-subtle);background:color-mix(in oklab,var(--dt-surface) 88%,transparent);color:var(--dt-text);transition:border-color .14s ease,background-color .14s ease,color .14s ease}._newSessionButton_1fshd_49:hover:not(:disabled){border-color:color-mix(in oklab,var(--dt-accent) 35%,var(--dt-border-subtle));background:color-mix(in oklab,var(--dt-surface) 94%,var(--dt-accent-ghost))}._newSessionButton_1fshd_49:disabled{cursor:not-allowed;opacity:.5}._newSessionButton_1fshd_49{display:inline-flex;width:30px;height:30px;align-items:center;justify-content:center;border-radius:999px;font-size:16px;line-height:1}._headerControls_1fshd_75{display:flex;align-items:center;gap:12px}._tokenCount_1fshd_81{color:var(--dt-text-muted);font-size:11px;font-weight:500}@media(max-width:640px){._header_1fshd_12{align-items:flex-start;flex-direction:column;gap:8px}._headerPrimary_1fshd_27{width:100%;flex-direction:column;align-items:flex-start}._sessionControls_1fshd_36{width:100%}._headerControls_1fshd_75{width:100%;justify-content:space-between}}._messages_1fshd_106{display:flex;flex:1;flex-direction:column;overflow-y:auto;padding:0}._placeholder_1fshd_114{display:flex;flex:1;align-items:center;justify-content:center;padding:20px;color:var(--dt-text-muted);font-size:13px;text-align:center}._queuedMessage_1fshd_125{padding:12px 16px;border-left:3px solid color-mix(in oklab,var(--dt-warning, var(--dt-accent)) 70%,var(--dt-border));background:color-mix(in oklab,var(--dt-warning, var(--dt-accent)) 8%,var(--dt-bg));color:color-mix(in oklab,var(--dt-text) 85%,var(--dt-text-secondary));font-family:var(--font-mono);font-size:12px;line-height:1.3;opacity:.9}._queuedMessageHeader_1fshd_136{display:flex;align-items:center;gap:8px;margin-bottom:8px}._queuedSpeaker_1fshd_143{color:color-mix(in oklab,var(--dt-warning, var(--dt-accent)) 70%,var(--dt-text));font-size:12px;font-weight:700;letter-spacing:.05em}._queuedBadge_1fshd_150{display:inline-flex;align-items:center;padding:1px 6px;border-radius:3px;background:var(--dt-surface);color:var(--dt-text-muted);font-size:10px;font-weight:600;letter-spacing:.03em;text-transform:lowercase}._queuedMessageBody_1fshd_163{word-break:break-word}._partialTranscript_1fshd_167{display:flex;align-items:center;gap:8px;padding:10px 14px;border:1px solid color-mix(in oklab,var(--dt-accent) 35%,var(--dt-border));border-radius:12px;background:var(--dt-accent-ghost);color:var(--dt-text-secondary);font-size:13px;font-style:italic}._partialDot_1fshd_180{display:inline-block;width:8px;height:8px;flex-shrink:0;border-radius:50%;background:var(--dt-accent);animation:_statusBlink_1fshd_1 .6s ease-in-out infinite}._voiceListening_1fshd_190,._voiceSpeaking_1fshd_191,._voiceProcessing_1fshd_192{display:flex;align-items:center;gap:8px;padding:8px 14px;font-size:12px}._voiceListening_1fshd_190{color:var(--dt-text-muted)}._listeningDot_1fshd_204{display:inline-block;width:8px;height:8px;flex-shrink:0;border-radius:50%;background:var(--dt-success);animation:_statusBlink_1fshd_1 2s ease-in-out infinite}._voiceSpeaking_1fshd_191{color:var(--dt-danger)}._speakingWave_1fshd_218{display:inline-block;width:12px;height:12px;flex-shrink:0;border-radius:50%;background:color-mix(in oklab,var(--dt-danger) 70%,transparent);animation:_speakingPulse_1fshd_1 .8s ease-in-out infinite}@keyframes _speakingPulse_1fshd_1{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}}._voiceProcessing_1fshd_192{color:var(--dt-info)}._voiceError_1fshd_242{padding:10px 14px;border:1px solid color-mix(in oklab,var(--dt-danger) 40%,var(--dt-border));border-radius:12px;background:var(--dt-danger-subtle);color:var(--dt-danger);font-size:12px}._compactPanel_gtst9_1{position:fixed;top:16px;right:16px;width:320px;max-width:calc(100vw - 32px);max-height:calc(100vh - 32px);z-index:30;display:flex;flex-direction:column;background:color-mix(in srgb,var(--dt-bg) 92%,transparent);backdrop-filter:blur(20px) saturate(160%);border:1px solid var(--dt-border);border-radius:12px;box-shadow:0 8px 32px color-mix(in oklab,black 40%,transparent),0 2px 8px color-mix(in oklab,black 20%,transparent);animation:_slideIn_gtst9_1 .2s cubic-bezier(.2,.9,.2,1);user-select:none}@keyframes _slideIn_gtst9_1{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}._dragHandle_gtst9_30{height:20px;display:flex;align-items:center;justify-content:center;cursor:grab;border-bottom:1px solid var(--dt-border);background:color-mix(in srgb,var(--dt-fg) 4%,transparent);border-radius:12px 12px 0 0;transition:background .15s ease}._dragHandle_gtst9_30:hover{background:color-mix(in srgb,var(--dt-fg) 8%,transparent)}._dragHandle_gtst9_30:active{cursor:grabbing}._dragHandleLine_gtst9_50{width:32px;height:3px;background:color-mix(in srgb,var(--dt-fg) 30%,transparent);border-radius:2px}._messageArea_gtst9_57{flex:1;overflow-y:auto;padding:8px 10px;max-height:120px}._placeholder_gtst9_64{padding:12px;text-align:center;color:color-mix(in srgb,var(--dt-fg) 50%,transparent);font-size:12px}._partialTranscript_gtst9_71{display:flex;align-items:center;gap:8px;padding:6px 10px;margin-top:6px;background:color-mix(in srgb,var(--dt-accent) 10%,transparent);border-radius:6px;font-size:12px;color:var(--dt-fg);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}._partialDot_gtst9_86{width:6px;height:6px;background:var(--dt-accent);border-radius:50%;animation:_pulse_gtst9_1 1s ease-in-out infinite}@keyframes _pulse_gtst9_1{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.2)}}._voiceListening_gtst9_104,._voiceSpeaking_gtst9_105,._voiceProcessing_gtst9_106{display:flex;align-items:center;gap:8px;padding:6px 10px;margin-top:6px;font-size:12px;color:color-mix(in srgb,var(--dt-fg) 70%,transparent)}._listeningDot_gtst9_116,._speakingWave_gtst9_117{width:6px;height:6px;background:var(--dt-accent);border-radius:50%}._listeningDot_gtst9_116{animation:_pulse_gtst9_1 1s ease-in-out infinite}._speakingWave_gtst9_117{animation:_wave_gtst9_1 .8s ease-in-out infinite}@keyframes _wave_gtst9_1{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.6}}._voiceProcessing_gtst9_106{background:color-mix(in srgb,var(--dt-fg) 5%,transparent);border-radius:6px}._commandInputWrapper_gtst9_147{border-top:1px solid var(--dt-border);padding:0;background:color-mix(in srgb,var(--dt-fg) 2%,transparent);border-radius:0 0 12px 12px}._messageArea_gtst9_57::-webkit-scrollbar{width:6px}._messageArea_gtst9_57::-webkit-scrollbar-track{background:transparent}._messageArea_gtst9_57::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--dt-fg) 20%,transparent);border-radius:3px}._messageArea_gtst9_57::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--dt-fg) 30%,transparent)}._window_k9cdu_1{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;border:1px solid color-mix(in oklab,var(--dt-accent) 60%,var(--dt-border));border-radius:2px;box-shadow:0 4px 20px color-mix(in oklab,black 60%,transparent);transition:border-color .2s ease,box-shadow .2s ease}._windowFocused_k9cdu_16{border-color:color-mix(in oklab,var(--dt-accent) 80%,var(--dt-border));box-shadow:0 4px 24px color-mix(in oklab,black 70%,transparent),0 0 12px color-mix(in oklab,var(--dt-accent) 15%,transparent)}._windowDragging_k9cdu_21{opacity:.5;border:1px dashed color-mix(in oklab,var(--dt-accent) 60%,var(--dt-border));box-shadow:none;transition:opacity .15s ease,border-color .15s ease}._windowFullscreen_k9cdu_28{position:fixed;top:calc(var(--actions-bar-height) + 58px);right:64px;bottom:64px;left:64px;width:auto;height:auto;z-index:25;border-radius:2px;border:1px solid color-mix(in oklab,var(--dt-accent) 60%,var(--dt-border));box-shadow:0 24px 72px color-mix(in oklab,black 80%,transparent),0 0 20px color-mix(in oklab,var(--dt-accent) 20%,transparent);transform-origin:center center;animation:_maximizeZoomIn_k9cdu_1 .22s cubic-bezier(.2,.9,.2,1)}@keyframes _maximizeZoomIn_k9cdu_1{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}._chrome_k9cdu_54{display:flex;height:24px;flex-shrink:0;align-items:center;padding:0 10px;background:color-mix(in oklab,var(--dt-surface) 70%,black);border-bottom:1px solid color-mix(in oklab,var(--dt-accent) 40%,var(--dt-border));user-select:none}._trafficLights_k9cdu_65{display:flex;gap:6px;margin-right:10px}._trafficLight_k9cdu_65{width:10px;height:10px;padding:0;border:1px solid currentColor;border-radius:2px;cursor:pointer;background:transparent;color:var(--dt-text-muted);transition:all .1s ease}._trafficLight_k9cdu_65:hover{color:var(--dt-accent);border-color:var(--dt-accent);background:var(--dt-accent)}._trafficLightClose_k9cdu_88{color:var(--dt-danger);border-color:var(--dt-danger)}._trafficLightClose_k9cdu_88:hover{color:var(--dt-text-on-accent);background:var(--dt-danger);border-color:var(--dt-danger)}._trafficLightFullscreen_k9cdu_99{color:var(--dt-success);border-color:var(--dt-success)}._trafficLightFullscreen_k9cdu_99:hover{color:var(--dt-text-on-accent);background:var(--dt-success);border-color:var(--dt-success)}._title_k9cdu_110{flex:1;overflow:hidden;color:color-mix(in oklab,var(--dt-accent) 70%,var(--dt-text-muted));font-family:var(--font-mono, "SF Mono", Monaco, "Cascadia Code", "Roboto Mono", Consolas, monospace);font-size:10px;font-weight:600;letter-spacing:.08em;text-align:center;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}._body_k9cdu_124{flex:1;min-height:0;overflow:auto;background:color-mix(in oklab,var(--dt-bg) 85%,black)}._tileSplit_zwnh1_1{display:grid;width:100%;height:100%;min-width:0;min-height:0}._tileSplitHorizontal_zwnh1_9{grid-template-rows:minmax(0,1fr);align-items:stretch}._tileSplitVertical_zwnh1_14{grid-template-columns:minmax(0,1fr);align-items:stretch}._tilePane_zwnh1_19,._tileLeaf_zwnh1_20{min-width:0;min-height:0}._tileLeaf_zwnh1_20{width:100%;height:100%}._shell_1jqjo_1{display:flex;flex-direction:column;width:100vw;height:100vh;background:var(--dt-wallpaper) center/cover no-repeat;position:fixed;top:0;left:0}._actionsBar_1jqjo_12{flex:0 0 var(--actions-bar-height);min-height:42px;position:relative;z-index:30}._content_1jqjo_19{display:grid;flex:1 1 auto;min-width:0;min-height:0;position:relative;overflow:hidden}._desktop_1jqjo_28{flex:1 1 auto;position:relative;overflow:hidden;min-width:0;min-height:0}._assistantPane_1jqjo_36{min-width:0;min-height:0;overflow:hidden}._maximizedMask_1jqjo_42{position:absolute;inset:0;z-index:20;background:color-mix(in srgb,var(--dt-bg) 46%,transparent);backdrop-filter:blur(4px) saturate(.84);pointer-events:none}._page_1nc9w_1{display:flex;align-items:center;justify-content:center;width:100vw;height:100vh;background:var(--dt-wallpaper) center/cover no-repeat}._logo_1nc9w_10{font-size:28px;font-weight:700;color:var(--dt-text);letter-spacing:-.5px}._form_1nc9w_17{display:flex;flex-direction:column;gap:16px;width:100%}._field_1nc9w_24{display:flex;flex-direction:column;gap:6px}._label_1nc9w_30{font-size:12px;font-weight:500;color:var(--dt-text-secondary);text-transform:uppercase;letter-spacing:.5px}._input_1nc9w_38{padding:10px 12px;font-size:14px;font-family:var(--font-ui);color:var(--dt-text);background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:2px;outline:none;transition:border-color .15s ease}._input_1nc9w_38:focus{border-color:var(--dt-accent)}._input_1nc9w_38::placeholder{color:var(--dt-text-muted)}._error_1nc9w_56{font-size:13px;color:var(--dt-danger);text-align:center;min-height:1.4em}._modal_2xb7m_1{display:flex;flex-direction:column;gap:24px;padding:40px 36px 36px;max-width:90vw;background:var(--dt-bg);border:1px solid var(--dt-border);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -1px #0000000f}._small_2xb7m_13{width:360px}._medium_2xb7m_17{width:560px}._large_2xb7m_21{width:720px}@media(max-width:640px){._modal_2xb7m_1{width:min(92vw,560px);padding:28px 20px 20px}._small_2xb7m_13{width:min(92vw,360px)}._medium_2xb7m_17{width:min(92vw,560px)}._large_2xb7m_21{width:min(92vw,720px)}}._page_kb1dd_1{display:flex;align-items:center;justify-content:center;width:100vw;height:100vh;background:var(--dt-wallpaper) center/cover no-repeat}._header_kb1dd_10{text-align:center}._title_kb1dd_14{font-size:22px;font-weight:700;color:var(--dt-text);margin-bottom:4px}._subtitle_kb1dd_21{font-size:14px;color:var(--dt-text-secondary)}._stepIndicator_kb1dd_26{display:flex;justify-content:center;gap:8px}._dot_kb1dd_32{width:8px;height:8px;border-radius:50%;background:var(--dt-border);transition:background .2s ease}._dotActive_kb1dd_40{background:var(--dt-accent)}._dotCompleted_kb1dd_45{background:var(--dt-accent-subtle)}._body_kb1dd_50{display:flex;flex-direction:column;gap:16px}._welcomeOptions_kb1dd_56{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}._providerList_kb1dd_62{display:flex;flex-direction:column;gap:12px}._providerCard_kb1dd_68{margin:0}._providerCard_kb1dd_68 dt-card{display:block;margin:0}._providerCardBody_kb1dd_77{display:flex;flex-direction:column;gap:14px}._providerCardHeader_kb1dd_83{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}._providerCardTitleRow_kb1dd_90{display:flex;align-items:center;gap:8px}._providerCardTitle_kb1dd_90{font-size:14px;font-weight:600;color:var(--dt-text)}._providerCardActions_kb1dd_102{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}._providerButtonWrap_kb1dd_109,._providerActionButtonWrap_kb1dd_110{display:inline-flex}._providerButtonWrap_kb1dd_109 dt-button,._providerActionButtonWrap_kb1dd_110 dt-button{display:inline-flex}._providerSelectWrap_kb1dd_119{width:100%}._providerSelectWrap_kb1dd_119 dt-select{display:block;width:100%}._providerFieldGrid_kb1dd_128{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}._field_kb1dd_134{display:flex;flex-direction:column;gap:6px}._label_kb1dd_140{font-size:12px;font-weight:500;color:var(--dt-text-secondary);text-transform:uppercase;letter-spacing:.5px}._input_kb1dd_148{padding:10px 12px;font-size:14px;font-family:var(--font-ui);color:var(--dt-text);background:var(--dt-surface);border:1px solid var(--dt-border);border-radius:2px;outline:none;transition:border-color .15s ease,background .15s ease}._input_kb1dd_148:focus{border-color:var(--dt-accent);background:var(--dt-bg)}._input_kb1dd_148::placeholder{color:var(--dt-text-muted)}._colorControl_kb1dd_167{display:flex;gap:10px}._colorInput_kb1dd_172{width:44px;min-width:44px;height:40px;padding:4px;border:1px solid var(--dt-border);border-radius:2px;background:var(--dt-surface);cursor:pointer}._footer_kb1dd_183{display:flex;justify-content:space-between;gap:12px}._error_kb1dd_189{font-size:13px;color:var(--dt-danger);text-align:center;min-height:1.4em}._welcomeText_kb1dd_196{font-size:14px;line-height:1.6;color:var(--dt-text-secondary);text-align:center}._hintText_kb1dd_203{font-size:13px;line-height:1.5;color:var(--dt-text-secondary);text-align:center;margin:0}._doneText_kb1dd_211{font-size:15px;line-height:1.6;color:var(--dt-text);text-align:center}._footerActions_kb1dd_218{display:flex;gap:8px;margin-left:auto}@media(max-width:640px){._providerCardHeader_kb1dd_83,._providerCardActions_kb1dd_102,._footer_kb1dd_183,._footerActions_kb1dd_218{flex-direction:column}._welcomeOptions_kb1dd_56{grid-template-columns:1fr}._providerCardActions_kb1dd_102,._footerActions_kb1dd_218{margin-left:0}._providerButtonWrap_kb1dd_109,._providerActionButtonWrap_kb1dd_110{width:100%}._providerFieldGrid_kb1dd_128{grid-template-columns:1fr}._providerButtonWrap_kb1dd_109 dt-button,._providerActionButtonWrap_kb1dd_110 dt-button{width:100%;margin-left:0}}:root{--dt-accent-h: 286;--dt-accent-c: .234;--dt-accent-l: .623;--dt-mode-sign: -1;--dt-scale-50: oklch(.98 .005 286);--dt-scale-100: oklch(.94 .01 286);--dt-scale-150: oklch(.88 .015 286);--dt-scale-200: oklch(.8 .02 286);--dt-scale-300: oklch(.7 .025 286);--dt-scale-400: oklch(.6 .03 286);--dt-scale-500: oklch(.5 .04 286);--dt-scale-600: oklch(.4 .03 286);--dt-scale-700: oklch(.32 .025 286);--dt-scale-800: oklch(.24 .03 286);--dt-scale-850: oklch(.2 .035 286);--dt-scale-900: oklch(.16 .04 286);--dt-scale-950: oklch(.12 .05 286);--dt-bg: var(--dt-scale-50);--dt-bg-subtle: var(--dt-scale-100);--dt-surface: var(--dt-scale-100);--dt-surface-hover: var(--dt-scale-150);--dt-surface-active: var(--dt-scale-200);--dt-overlay: oklch(.98 .005 286 / .85);--dt-text: var(--dt-scale-950);--dt-text-secondary: var(--dt-scale-600);--dt-text-muted: var(--dt-scale-500);--dt-text-on-accent: var(--dt-scale-50);--dt-border: var(--dt-scale-200);--dt-border-subtle: oklch(.88 .015 286 / .6);--dt-border-strong: var(--dt-scale-300);--dt-accent: oklch(.623 .234 286);--dt-accent-hover: oklch(.573 .234 286);--dt-accent-active: oklch(.523 .234 286);--dt-accent-subtle: oklch(.623 .234 286 / .15);--dt-accent-ghost: oklch(.623 .234 286 / .08);--dt-danger: oklch(.45 .18 25);--dt-danger-subtle: oklch(.45 .18 25 / .15);--dt-success: oklch(.45 .18 155);--dt-success-subtle: oklch(.45 .18 155 / .15);--dt-warning: oklch(.45 .18 80);--dt-warning-subtle: oklch(.45 .18 80 / .15);--dt-info: oklch(.45 .18 250);--dt-info-subtle: oklch(.45 .18 250 / .15);--dt-dock-bg: var(--dt-overlay);--dt-actions-bar-bg: var(--dt-bg-subtle);--dt-window-chrome: var(--dt-surface);--dt-window-body: var(--dt-bg);--dt-info-panel-bg: var(--dt-bg-subtle);--dt-wallpaper: linear-gradient( 135deg, oklch(.85 .06 286) 0%, oklch(.8 .08 286) 50%, oklch(.75 .03 316) 100% );--dt-glass: oklch(.94 .01 286 / .7);--dt-glass-border: oklch(.12 .05 286 / .12);--dt-glass-highlight: oklch(.98 .005 286 / .45);--dt-shadow-color: oklch(.12 .05 286 / .15);--color-bg: var(--dt-bg);--color-surface: var(--dt-surface);--color-surface-hover: var(--dt-surface-hover);--color-border: var(--dt-border);--color-border-subtle: var(--dt-border-subtle);--color-text: var(--dt-text);--color-text-muted: var(--dt-text-muted);--color-accent: var(--dt-accent);--color-accent-hover: var(--dt-accent-hover);--color-danger: var(--dt-danger);--color-success: var(--dt-success);--color-warning: var(--dt-warning);--color-warning-bg: var(--dt-warning-subtle);--color-info: var(--dt-info);--color-dock-bg: var(--dt-dock-bg);--color-actions-bar-bg: var(--dt-actions-bar-bg);--color-window-chrome: var(--dt-window-chrome);--color-window-body: var(--dt-window-body);--color-top-bar-bg: var(--dt-actions-bar-bg);--color-top-bar-text: var(--dt-text);--color-top-bar-text-shadow: none;--desktop-wallpaper: var(--dt-wallpaper);--desktop-window-bg: var(--dt-info-panel-bg);--font-display: "Sora", system-ui, -apple-system, sans-serif;--font-ui: "Work Sans", system-ui, -apple-system, sans-serif;--font-sans: var(--font-ui);--font-mono: "SF Mono", "Fira Code", "Cascadia Code", monospace;--dock-height: 64px;--actions-bar-height: 36px;--info-panel-width: 320px;--window-chrome-height: 36px;--border-radius: 8px}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow:hidden;font-family:var(--font-sans);font-size:14px;color:var(--dt-text);background:var(--dt-bg)}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}
@@ -4,6 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>DeskTalk</title>
7
+ <link rel="icon" type="image/png" href="/logo.png" />
7
8
  <link rel="stylesheet" href="/api/ui/fonts/fonts.css" />
8
9
  <style>
9
10
  /* Prevent flash of unstyled content */
@@ -13,8 +14,8 @@
13
14
  margin: 0;
14
15
  }
15
16
  </style>
16
- <script type="module" crossorigin src="/assets/index-BEaTx9Vu.js"></script>
17
- <link rel="stylesheet" crossorigin href="/assets/index-BAa2HQwc.css">
17
+ <script type="module" crossorigin src="/assets/index-CI5Mxo87.js"></script>
18
+ <link rel="stylesheet" crossorigin href="/assets/index-D6_VuNyY.css">
18
19
  </head>
19
20
  <body>
20
21
  <div id="root"></div>
Binary file
@@ -2,6 +2,7 @@
2
2
  "packageName": "@desktalk/core",
3
3
  "packageScope": "core",
4
4
  "locales": [
5
+ "zh",
5
6
  "zh-CN"
6
7
  ],
7
8
  "messages": [
@@ -15,6 +16,273 @@
15
16
  "defaultText": "Close",
16
17
  "placeholders": []
17
18
  },
19
+ {
20
+ "key": "onboard.account.confirmPassword",
21
+ "defaultText": "Confirm Password",
22
+ "placeholders": []
23
+ },
24
+ {
25
+ "key": "onboard.account.confirmPasswordPlaceholder",
26
+ "defaultText": "Re-enter your password",
27
+ "placeholders": []
28
+ },
29
+ {
30
+ "key": "onboard.account.displayName",
31
+ "defaultText": "Display Name",
32
+ "placeholders": []
33
+ },
34
+ {
35
+ "key": "onboard.account.displayNamePlaceholder",
36
+ "defaultText": "Your display name",
37
+ "placeholders": []
38
+ },
39
+ {
40
+ "key": "onboard.account.errors.displayNameRequired",
41
+ "defaultText": "Display name is required.",
42
+ "placeholders": []
43
+ },
44
+ {
45
+ "key": "onboard.account.errors.passwordMismatch",
46
+ "defaultText": "Passwords do not match.",
47
+ "placeholders": []
48
+ },
49
+ {
50
+ "key": "onboard.account.errors.passwordShort",
51
+ "defaultText": "Password must be at least 8 characters.",
52
+ "placeholders": []
53
+ },
54
+ {
55
+ "key": "onboard.account.errors.usernameInvalid",
56
+ "defaultText": "Username must be 1-32 alphanumeric characters, hyphens, or underscores.",
57
+ "placeholders": []
58
+ },
59
+ {
60
+ "key": "onboard.account.errors.usernameRequired",
61
+ "defaultText": "Username is required.",
62
+ "placeholders": []
63
+ },
64
+ {
65
+ "key": "onboard.account.password",
66
+ "defaultText": "Password",
67
+ "placeholders": []
68
+ },
69
+ {
70
+ "key": "onboard.account.passwordPlaceholder",
71
+ "defaultText": "At least 8 characters",
72
+ "placeholders": []
73
+ },
74
+ {
75
+ "key": "onboard.account.subtitle",
76
+ "defaultText": "Choose your credentials",
77
+ "placeholders": []
78
+ },
79
+ {
80
+ "key": "onboard.account.title",
81
+ "defaultText": "Create Admin Account",
82
+ "placeholders": []
83
+ },
84
+ {
85
+ "key": "onboard.account.username",
86
+ "defaultText": "Username",
87
+ "placeholders": []
88
+ },
89
+ {
90
+ "key": "onboard.account.usernamePlaceholder",
91
+ "defaultText": "e.g. admin",
92
+ "placeholders": []
93
+ },
94
+ {
95
+ "key": "onboard.ai.apiKeyPlaceholder",
96
+ "defaultText": "Enter your API key",
97
+ "placeholders": []
98
+ },
99
+ {
100
+ "key": "onboard.ai.baseUrlPlaceholder",
101
+ "defaultText": "Custom API endpoint",
102
+ "placeholders": []
103
+ },
104
+ {
105
+ "key": "onboard.ai.body",
106
+ "defaultText": "Set up an AI provider so DeskTalk's assistant is ready to use. You can change these settings later in Preferences.",
107
+ "placeholders": []
108
+ },
109
+ {
110
+ "key": "onboard.ai.modelPlaceholder",
111
+ "defaultText": "e.g. gpt-4o",
112
+ "placeholders": []
113
+ },
114
+ {
115
+ "key": "onboard.ai.subtitle",
116
+ "defaultText": "Configure your AI provider (optional)",
117
+ "placeholders": []
118
+ },
119
+ {
120
+ "key": "onboard.ai.title",
121
+ "defaultText": "AI Configuration",
122
+ "placeholders": []
123
+ },
124
+ {
125
+ "key": "onboard.common.addProvider",
126
+ "defaultText": "Add provider",
127
+ "placeholders": []
128
+ },
129
+ {
130
+ "key": "onboard.common.apiKey",
131
+ "defaultText": "API Key",
132
+ "placeholders": []
133
+ },
134
+ {
135
+ "key": "onboard.common.back",
136
+ "defaultText": "Back",
137
+ "placeholders": []
138
+ },
139
+ {
140
+ "key": "onboard.common.baseUrlOptional",
141
+ "defaultText": "Base URL (optional)",
142
+ "placeholders": []
143
+ },
144
+ {
145
+ "key": "onboard.common.default",
146
+ "defaultText": "Default",
147
+ "placeholders": []
148
+ },
149
+ {
150
+ "key": "onboard.common.delete",
151
+ "defaultText": "Delete",
152
+ "placeholders": []
153
+ },
154
+ {
155
+ "key": "onboard.common.modelOptional",
156
+ "defaultText": "Model (optional)",
157
+ "placeholders": []
158
+ },
159
+ {
160
+ "key": "onboard.common.next",
161
+ "defaultText": "Next",
162
+ "placeholders": []
163
+ },
164
+ {
165
+ "key": "onboard.common.provider",
166
+ "defaultText": "Provider",
167
+ "placeholders": []
168
+ },
169
+ {
170
+ "key": "onboard.common.setDefault",
171
+ "defaultText": "Set as default",
172
+ "placeholders": []
173
+ },
174
+ {
175
+ "key": "onboard.common.skip",
176
+ "defaultText": "Skip",
177
+ "placeholders": []
178
+ },
179
+ {
180
+ "key": "onboard.done.body",
181
+ "defaultText": "Welcome, {displayUserName}. Click below to enter your DeskTalk desktop.",
182
+ "placeholders": [
183
+ "displayUserName"
184
+ ]
185
+ },
186
+ {
187
+ "key": "onboard.done.enter",
188
+ "defaultText": "Enter Desktop",
189
+ "placeholders": []
190
+ },
191
+ {
192
+ "key": "onboard.done.loading",
193
+ "defaultText": "Setting up...",
194
+ "placeholders": []
195
+ },
196
+ {
197
+ "key": "onboard.done.subtitle",
198
+ "defaultText": "Your admin account is ready",
199
+ "placeholders": []
200
+ },
201
+ {
202
+ "key": "onboard.done.title",
203
+ "defaultText": "All Set!",
204
+ "placeholders": []
205
+ },
206
+ {
207
+ "key": "onboard.voice.apiKeyPlaceholder",
208
+ "defaultText": "Enter your STT API key",
209
+ "placeholders": []
210
+ },
211
+ {
212
+ "key": "onboard.voice.azureApiVersion",
213
+ "defaultText": "Azure API Version",
214
+ "placeholders": []
215
+ },
216
+ {
217
+ "key": "onboard.voice.azureDeployment",
218
+ "defaultText": "Azure Deployment",
219
+ "placeholders": []
220
+ },
221
+ {
222
+ "key": "onboard.voice.baseUrl",
223
+ "defaultText": "Base URL",
224
+ "placeholders": []
225
+ },
226
+ {
227
+ "key": "onboard.voice.body",
228
+ "defaultText": "Set up a speech-to-text provider for voice input. You can change these settings later in Preferences.",
229
+ "placeholders": []
230
+ },
231
+ {
232
+ "key": "onboard.voice.model",
233
+ "defaultText": "Model",
234
+ "placeholders": []
235
+ },
236
+ {
237
+ "key": "onboard.voice.provider",
238
+ "defaultText": "STT Provider",
239
+ "placeholders": []
240
+ },
241
+ {
242
+ "key": "onboard.voice.subtitle",
243
+ "defaultText": "Configure speech-to-text (optional)",
244
+ "placeholders": []
245
+ },
246
+ {
247
+ "key": "onboard.voice.title",
248
+ "defaultText": "Voice Configuration",
249
+ "placeholders": []
250
+ },
251
+ {
252
+ "key": "onboard.welcome.accentColorLabel",
253
+ "defaultText": "Accent Color",
254
+ "placeholders": []
255
+ },
256
+ {
257
+ "key": "onboard.welcome.accentColorPicker",
258
+ "defaultText": "Accent color picker",
259
+ "placeholders": []
260
+ },
261
+ {
262
+ "key": "onboard.welcome.body",
263
+ "defaultText": "DeskTalk is a browser-based desktop environment with an AI assistant and modular MiniApps. Since this is the first time running DeskTalk, you'll need to create an administrator account.",
264
+ "placeholders": []
265
+ },
266
+ {
267
+ "key": "onboard.welcome.getStarted",
268
+ "defaultText": "Get Started",
269
+ "placeholders": []
270
+ },
271
+ {
272
+ "key": "onboard.welcome.languageLabel",
273
+ "defaultText": "Language",
274
+ "placeholders": []
275
+ },
276
+ {
277
+ "key": "onboard.welcome.subtitle",
278
+ "defaultText": "Choose your language and accent before creating your admin account",
279
+ "placeholders": []
280
+ },
281
+ {
282
+ "key": "onboard.welcome.title",
283
+ "defaultText": "Welcome to DeskTalk",
284
+ "placeholders": []
285
+ },
18
286
  {
19
287
  "key": "split.mode",
20
288
  "defaultText": "Split mode",
@@ -2,6 +2,59 @@
2
2
  "applications": "应用程序",
3
3
  "close": "关闭",
4
4
  "miniapp.loading": "正在加载 MiniApp...",
5
+ "onboard.account.confirmPassword": "确认密码",
6
+ "onboard.account.confirmPasswordPlaceholder": "再次输入你的密码",
7
+ "onboard.account.displayName": "显示名称",
8
+ "onboard.account.displayNamePlaceholder": "你的显示名称",
9
+ "onboard.account.errors.displayNameRequired": "必须填写显示名称。",
10
+ "onboard.account.errors.passwordMismatch": "两次输入的密码不一致。",
11
+ "onboard.account.errors.passwordShort": "密码至少需要 8 个字符。",
12
+ "onboard.account.errors.usernameInvalid": "用户名必须为 1-32 个字母、数字、连字符或下划线。",
13
+ "onboard.account.errors.usernameRequired": "必须填写用户名。",
14
+ "onboard.account.password": "密码",
15
+ "onboard.account.passwordPlaceholder": "至少 8 个字符",
16
+ "onboard.account.subtitle": "选择你的登录信息",
17
+ "onboard.account.title": "创建管理员账户",
18
+ "onboard.account.username": "用户名",
19
+ "onboard.account.usernamePlaceholder": "例如:admin",
20
+ "onboard.ai.apiKeyPlaceholder": "输入你的 API Key",
21
+ "onboard.ai.baseUrlPlaceholder": "自定义 API 端点",
22
+ "onboard.ai.body": "配置一个 AI 提供商,让 DeskTalk 助手随时可用。你之后也可以在偏好设置中修改这些选项。",
23
+ "onboard.ai.modelPlaceholder": "例如:gpt-4o",
24
+ "onboard.ai.subtitle": "配置你的 AI 提供商(可选)",
25
+ "onboard.ai.title": "AI 配置",
26
+ "onboard.common.addProvider": "添加提供商",
27
+ "onboard.common.apiKey": "API Key",
28
+ "onboard.common.back": "返回",
29
+ "onboard.common.baseUrlOptional": "基础 URL(可选)",
30
+ "onboard.common.default": "默认",
31
+ "onboard.common.delete": "删除",
32
+ "onboard.common.modelOptional": "模型(可选)",
33
+ "onboard.common.next": "下一步",
34
+ "onboard.common.provider": "提供商",
35
+ "onboard.common.setDefault": "设为默认",
36
+ "onboard.common.skip": "跳过",
37
+ "onboard.done.body": "欢迎,{displayUserName}。点击下方进入你的 DeskTalk 桌面。",
38
+ "onboard.done.enter": "进入桌面",
39
+ "onboard.done.loading": "正在设置...",
40
+ "onboard.done.subtitle": "你的管理员账户已准备完成",
41
+ "onboard.done.title": "全部就绪!",
42
+ "onboard.voice.apiKeyPlaceholder": "输入你的 STT API Key",
43
+ "onboard.voice.azureApiVersion": "Azure API 版本",
44
+ "onboard.voice.azureDeployment": "Azure 部署",
45
+ "onboard.voice.baseUrl": "基础 URL",
46
+ "onboard.voice.body": "配置一个语音转文本提供商以启用语音输入。你之后也可以在偏好设置中修改这些选项。",
47
+ "onboard.voice.model": "模型",
48
+ "onboard.voice.provider": "STT 提供商",
49
+ "onboard.voice.subtitle": "配置语音转文本(可选)",
50
+ "onboard.voice.title": "语音配置",
51
+ "onboard.welcome.accentColorLabel": "主题色",
52
+ "onboard.welcome.accentColorPicker": "主题色选择器",
53
+ "onboard.welcome.body": "DeskTalk 是一个基于浏览器的桌面环境,内置 AI 助手和模块化 MiniApp。首次运行时,你需要先创建一个管理员账户。",
54
+ "onboard.welcome.getStarted": "开始使用",
55
+ "onboard.welcome.languageLabel": "语言",
56
+ "onboard.welcome.subtitle": "在创建管理员账户前先选择语言和主题色",
57
+ "onboard.welcome.title": "欢迎使用 DeskTalk",
5
58
  "window.maximize": "最大化",
6
59
  "window.restore": "还原"
7
60
  }
@@ -0,0 +1,60 @@
1
+ {
2
+ "applications": "应用程序",
3
+ "close": "关闭",
4
+ "miniapp.loading": "正在加载 MiniApp...",
5
+ "onboard.account.confirmPassword": "确认密码",
6
+ "onboard.account.confirmPasswordPlaceholder": "再次输入你的密码",
7
+ "onboard.account.displayName": "显示名称",
8
+ "onboard.account.displayNamePlaceholder": "你的显示名称",
9
+ "onboard.account.errors.displayNameRequired": "必须填写显示名称。",
10
+ "onboard.account.errors.passwordMismatch": "两次输入的密码不一致。",
11
+ "onboard.account.errors.passwordShort": "密码至少需要 8 个字符。",
12
+ "onboard.account.errors.usernameInvalid": "用户名必须为 1-32 个字母、数字、连字符或下划线。",
13
+ "onboard.account.errors.usernameRequired": "必须填写用户名。",
14
+ "onboard.account.password": "密码",
15
+ "onboard.account.passwordPlaceholder": "至少 8 个字符",
16
+ "onboard.account.subtitle": "选择你的登录信息",
17
+ "onboard.account.title": "创建管理员账户",
18
+ "onboard.account.username": "用户名",
19
+ "onboard.account.usernamePlaceholder": "例如:admin",
20
+ "onboard.ai.apiKeyPlaceholder": "输入你的 API Key",
21
+ "onboard.ai.baseUrlPlaceholder": "自定义 API 端点",
22
+ "onboard.ai.body": "配置一个 AI 提供商,让 DeskTalk 助手随时可用。你之后也可以在偏好设置中修改这些选项。",
23
+ "onboard.ai.modelPlaceholder": "例如:gpt-4o",
24
+ "onboard.ai.subtitle": "配置你的 AI 提供商(可选)",
25
+ "onboard.ai.title": "AI 配置",
26
+ "onboard.common.addProvider": "添加提供商",
27
+ "onboard.common.apiKey": "API Key",
28
+ "onboard.common.back": "返回",
29
+ "onboard.common.baseUrlOptional": "基础 URL(可选)",
30
+ "onboard.common.default": "默认",
31
+ "onboard.common.delete": "删除",
32
+ "onboard.common.modelOptional": "模型(可选)",
33
+ "onboard.common.next": "下一步",
34
+ "onboard.common.provider": "提供商",
35
+ "onboard.common.setDefault": "设为默认",
36
+ "onboard.common.skip": "跳过",
37
+ "onboard.done.body": "欢迎,{displayUserName}。点击下方进入你的 DeskTalk 桌面。",
38
+ "onboard.done.enter": "进入桌面",
39
+ "onboard.done.loading": "正在设置...",
40
+ "onboard.done.subtitle": "你的管理员账户已准备完成",
41
+ "onboard.done.title": "全部就绪!",
42
+ "onboard.voice.apiKeyPlaceholder": "输入你的 STT API Key",
43
+ "onboard.voice.azureApiVersion": "Azure API 版本",
44
+ "onboard.voice.azureDeployment": "Azure 部署",
45
+ "onboard.voice.baseUrl": "基础 URL",
46
+ "onboard.voice.body": "配置一个语音转文本提供商以启用语音输入。你之后也可以在偏好设置中修改这些选项。",
47
+ "onboard.voice.model": "模型",
48
+ "onboard.voice.provider": "STT 提供商",
49
+ "onboard.voice.subtitle": "配置语音转文本(可选)",
50
+ "onboard.voice.title": "语音配置",
51
+ "onboard.welcome.accentColorLabel": "主题色",
52
+ "onboard.welcome.accentColorPicker": "主题色选择器",
53
+ "onboard.welcome.body": "DeskTalk 是一个基于浏览器的桌面环境,内置 AI 助手和模块化 MiniApp。首次运行时,你需要先创建一个管理员账户。",
54
+ "onboard.welcome.getStarted": "开始使用",
55
+ "onboard.welcome.languageLabel": "语言",
56
+ "onboard.welcome.subtitle": "在创建管理员账户前先选择语言和主题色",
57
+ "onboard.welcome.title": "欢迎使用 DeskTalk",
58
+ "window.maximize": "最大化",
59
+ "window.restore": "还原"
60
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-routes.d.ts","sourceRoot":"","sources":["../../src/server/auth-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAC/D,OAAO,iBAAiB,CAAC;AAezB,QAAA,MAAM,WAAW,qBAAqB,CAAC;AAYvC,wBAAsB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAoLpE;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"auth-routes.d.ts","sourceRoot":"","sources":["../../src/server/auth-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,SAAS,CAAC;AAC/D,OAAO,iBAAiB,CAAC;AAezB,QAAA,MAAM,WAAW,qBAAqB,CAAC;AAYvC,wBAAsB,UAAU,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAuLpE;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -118,7 +118,7 @@ export async function authRoutes(app) {
118
118
  reply.code(403);
119
119
  return { error: 'System is already set up. An admin account exists.' };
120
120
  }
121
- const { username, displayName, password, aiConfig, voiceConfig } = req.body ?? {};
121
+ const { username, displayName, password, language, accentColor, aiConfig, voiceConfig } = req.body ?? {};
122
122
  if (!username || !displayName || !password) {
123
123
  reply.code(400);
124
124
  return { error: 'Username, displayName, and password are required.' };
@@ -139,7 +139,7 @@ export async function authRoutes(app) {
139
139
  const user = createUser(username, password, 'admin', displayName);
140
140
  ensureUserHome(username);
141
141
  // Persist optional provider configuration from onboarding
142
- saveOnboardingConfig(username, aiConfig, voiceConfig);
142
+ saveOnboardingConfig(username, aiConfig, voiceConfig, language, accentColor);
143
143
  // Automatically log the admin in
144
144
  const token = createSession(username);
145
145
  reply.setCookie(COOKIE_NAME, token, cookieOptions(isSecure));
@@ -1 +1 @@
1
- {"version":3,"file":"auth-routes.js","sourceRoot":"","sources":["../../src/server/auth-routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth-routes.js","sourceRoot":"","sources":["../../src/server/auth-routes.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAavE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB;AAGD,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,IAAI,CAAC,EAAE,UAAU,CAAC;KACnB;CACF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,4TAiMxD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAO7B,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAcvE,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB;AAGD,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,cAAc;QACtB,IAAI,CAAC,EAAE,UAAU,CAAC;KACnB;CACF;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,4TA6MxD"}
@@ -18,6 +18,7 @@ import { voiceRoutes } from './voice-routes.js';
18
18
  import { apiRoutes } from './api-routes.js';
19
19
  import { dtfsRoutes } from './dtfs-routes.js';
20
20
  import { monacoRoutes } from './monaco-routes.js';
21
+ import { thumbnailRoutes } from './thumbnail-routes.js';
21
22
  const __filename = fileURLToPath(import.meta.url);
22
23
  const __dirname = dirname(__filename);
23
24
  const corePackageRoot = join(__dirname, '..', '..');
@@ -91,21 +92,25 @@ export async function createServer(options) {
91
92
  '/api/auth/me',
92
93
  '/api/setup/status',
93
94
  '/api/setup',
95
+ '/api/i18n/catalog',
94
96
  '/api/preferences/public',
95
97
  '/api/ui/desktalk-theme.css',
96
98
  ]);
97
99
  app.addHook('onRequest', async (req, reply) => {
100
+ const requestPath = req.url.split('?', 1)[0] ?? req.url;
98
101
  // Skip auth for public routes
99
- if (PUBLIC_ROUTES.has(req.url))
102
+ if (PUBLIC_ROUTES.has(requestPath))
100
103
  return;
101
- if (req.url.startsWith('/api/ui/') && req.url.endsWith('.js'))
104
+ if (requestPath.startsWith('/api/ui/') && requestPath.endsWith('.js'))
102
105
  return;
103
- if (req.url.startsWith('/api/ui/fonts/'))
106
+ if (requestPath.startsWith('/api/ui/fonts/'))
104
107
  return;
105
- if (req.url.startsWith('/api/miniapps/text-edit/monaco/'))
108
+ if (requestPath.startsWith('/api/miniapps/text-edit/monaco/'))
106
109
  return;
107
110
  // Skip auth for static file requests (non-API, non-WS, non-dtfs)
108
- if (!req.url.startsWith('/api/') && !req.url.startsWith('/ws') && !req.url.startsWith('/@dtfs'))
111
+ if (!requestPath.startsWith('/api/') &&
112
+ !requestPath.startsWith('/ws') &&
113
+ !requestPath.startsWith('/@dtfs'))
109
114
  return;
110
115
  const token = req.cookies[COOKIE_NAME];
111
116
  if (!token) {
@@ -141,6 +146,10 @@ export async function createServer(options) {
141
146
  });
142
147
  await app.register(monacoRoutes);
143
148
  await app.register(dtfsRoutes);
149
+ await app.register(thumbnailRoutes);
150
+ app.get('/favicon.ico', async (_req, reply) => {
151
+ return reply.redirect('/logo.png');
152
+ });
144
153
  app.setNotFoundHandler(async (req, reply) => {
145
154
  if (req.url.startsWith('/api/') || req.url.startsWith('/ws')) {
146
155
  reply.code(404);