@xopcai/xopcbot 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +57 -52
- package/README.zh-CN.md +56 -49
- package/dist/agent/__tests__/media-processing.test.d.ts +6 -0
- package/dist/agent/__tests__/media-processing.test.js +385 -0
- package/dist/agent/__tests__/media-processing.test.js.map +1 -0
- package/dist/agent/fallback/__tests__/index.test.js +16 -5
- package/dist/agent/fallback/__tests__/index.test.js.map +1 -1
- package/dist/agent/fallback/candidates.d.ts +2 -4
- package/dist/agent/fallback/candidates.js +19 -26
- package/dist/agent/fallback/candidates.js.map +1 -1
- package/dist/agent/helpers.d.ts +1 -0
- package/dist/agent/helpers.js.map +1 -1
- package/dist/agent/index.d.ts +6 -1
- package/dist/agent/index.js +10 -1
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/models/compat.d.ts +35 -0
- package/dist/agent/models/compat.js +110 -0
- package/dist/agent/models/compat.js.map +1 -0
- package/dist/agent/models/fallback.d.ts +38 -0
- package/dist/agent/models/fallback.js +133 -0
- package/dist/agent/models/fallback.js.map +1 -0
- package/dist/agent/models/index.d.ts +10 -0
- package/dist/agent/models/index.js +11 -0
- package/dist/agent/models/index.js.map +1 -0
- package/dist/agent/{model-manager.d.ts → models/manager.d.ts} +2 -8
- package/dist/agent/{model-manager.js → models/manager.js} +38 -24
- package/dist/agent/models/manager.js.map +1 -0
- package/dist/agent/models/scan.d.ts +46 -0
- package/dist/agent/models/scan.js +177 -0
- package/dist/agent/models/scan.js.map +1 -0
- package/dist/agent/models/selection.d.ts +44 -0
- package/dist/agent/models/selection.js +141 -0
- package/dist/agent/models/selection.js.map +1 -0
- package/dist/agent/prompt/index.js +1 -1
- package/dist/agent/prompt/index.js.map +1 -1
- package/dist/agent/service.js +34 -16
- package/dist/agent/service.js.map +1 -1
- package/dist/agent/skills/__tests__/test-framework.test.js +15 -7
- package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -1
- package/dist/agent/skills/config.d.ts +1 -1
- package/dist/agent/skills/config.js +2 -2
- package/dist/agent/skills/config.js.map +1 -1
- package/dist/agent/skills/index.js +15 -28
- package/dist/agent/skills/index.js.map +1 -1
- package/dist/agent/skills/installer.d.ts +1 -1
- package/dist/agent/skills/installer.js +1 -1
- package/dist/agent/skills/scanner.d.ts +1 -1
- package/dist/agent/skills/scanner.js +1 -1
- package/dist/agent/skills/test-framework.js +24 -23
- package/dist/agent/skills/test-framework.js.map +1 -1
- package/dist/agent/skills/types.d.ts +3 -3
- package/dist/agent/skills/types.js +1 -1
- package/dist/agent/skills/watcher.d.ts +1 -1
- package/dist/agent/skills/watcher.js +1 -1
- package/dist/agent/system-prompt.d.ts +67 -0
- package/dist/agent/system-prompt.js +351 -0
- package/dist/agent/system-prompt.js.map +1 -0
- package/dist/agent/tools/__tests__/send-media.test.d.ts +6 -0
- package/dist/agent/tools/__tests__/send-media.test.js +251 -0
- package/dist/agent/tools/__tests__/send-media.test.js.map +1 -0
- package/dist/agent/types.agent-defaults.d.ts +48 -0
- package/dist/agent/types.agent-defaults.js +5 -0
- package/dist/agent/types.agent-defaults.js.map +1 -0
- package/dist/agent/types.d.ts +14 -6
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -1
- package/dist/agent/workspace.d.ts +94 -0
- package/dist/agent/workspace.js +625 -0
- package/dist/agent/workspace.js.map +1 -0
- package/dist/auth/index.js +1 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oauth/index.d.ts +1 -0
- package/dist/auth/oauth/index.js +1 -0
- package/dist/auth/oauth/index.js.map +1 -1
- package/dist/auth/oauth/kimi.d.ts +2 -1
- package/dist/auth/oauth/kimi.js +51 -48
- package/dist/auth/oauth/kimi.js.map +1 -1
- package/dist/auth/oauth/minimax-cn.d.ts +12 -0
- package/dist/auth/oauth/minimax-cn.js +111 -0
- package/dist/auth/oauth/minimax-cn.js.map +1 -0
- package/dist/auth/oauth/qwen.d.ts +5 -0
- package/dist/auth/oauth/qwen.js +54 -84
- package/dist/auth/oauth/qwen.js.map +1 -1
- package/dist/auth/profiles/index.d.ts +0 -2
- package/dist/auth/profiles/index.js +0 -2
- package/dist/auth/profiles/index.js.map +1 -1
- package/dist/auth/storage.js +7 -1
- package/dist/auth/storage.js.map +1 -1
- package/dist/channels/__tests__/media-integration.test.d.ts +6 -0
- package/dist/channels/__tests__/media-integration.test.js +398 -0
- package/dist/channels/__tests__/media-integration.test.js.map +1 -0
- package/dist/channels/__tests__/media.test.d.ts +6 -0
- package/dist/channels/__tests__/media.test.js +251 -0
- package/dist/channels/__tests__/media.test.js.map +1 -0
- package/dist/channels/access-control.d.ts +1 -1
- package/dist/channels/access-control.js +1 -1
- package/dist/channels/draft-stream.d.ts +1 -1
- package/dist/channels/draft-stream.js +1 -1
- package/dist/channels/format.d.ts +1 -1
- package/dist/channels/format.js +1 -1
- package/dist/channels/telegram/command-handler.js +15 -48
- package/dist/channels/telegram/command-handler.js.map +1 -1
- package/dist/channels/telegram/plugin.js +3 -2
- package/dist/channels/telegram/plugin.js.map +1 -1
- package/dist/channels/telegram/webhook.d.ts +1 -1
- package/dist/channels/telegram/webhook.js +1 -1
- package/dist/channels/types.d.ts +1 -1
- package/dist/channels/types.js +1 -1
- package/dist/channels/update-offset-store.d.ts +1 -1
- package/dist/channels/update-offset-store.js +1 -1
- package/dist/cli/commands/auth.js +8 -23
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/gateway.js +9 -1
- package/dist/cli/commands/gateway.js.map +1 -1
- package/dist/cli/commands/models.js +35 -29
- package/dist/cli/commands/models.js.map +1 -1
- package/dist/cli/commands/onboard.js +166 -115
- package/dist/cli/commands/onboard.js.map +1 -1
- package/dist/cli/commands/setup.js +123 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/skills.js +6 -6
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/templates.d.ts +2 -0
- package/dist/cli/templates.js +1 -1
- package/dist/cli/templates.js.map +1 -1
- package/dist/config/defaults.d.ts +19 -0
- package/dist/config/defaults.js +168 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.js +4 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/integration.d.ts +12 -0
- package/dist/config/integration.js +14 -0
- package/dist/config/integration.js.map +1 -0
- package/dist/config/models-json.d.ts +454 -0
- package/dist/config/models-json.js +323 -0
- package/dist/config/models-json.js.map +1 -0
- package/dist/config/paths.d.ts +2 -0
- package/dist/config/paths.js +4 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/reload.d.ts +1 -1
- package/dist/config/reload.js +3 -3
- package/dist/config/reload.js.map +1 -1
- package/dist/config/resolve-config-value.d.ts +36 -0
- package/dist/config/resolve-config-value.js +218 -0
- package/dist/config/resolve-config-value.js.map +1 -0
- package/dist/config/rules.js +3 -2
- package/dist/config/rules.js.map +1 -1
- package/dist/config/schema.d.ts +17 -884
- package/dist/config/schema.js +36 -312
- package/dist/config/schema.js.map +1 -1
- package/dist/config/types.models.d.ts +54 -0
- package/dist/config/types.models.js +2 -0
- package/dist/config/types.models.js.map +1 -0
- package/dist/cron/validation.d.ts +4 -4
- package/dist/gateway/hono/app.js +232 -78
- package/dist/gateway/hono/app.js.map +1 -1
- package/dist/gateway/hono/oauth-async.d.ts +14 -0
- package/dist/gateway/hono/oauth-async.js +285 -0
- package/dist/gateway/hono/oauth-async.js.map +1 -0
- package/dist/gateway/hono/oauth.d.ts +9 -0
- package/dist/gateway/hono/oauth.js +157 -0
- package/dist/gateway/hono/oauth.js.map +1 -0
- package/dist/gateway/hono/sse.js +5 -2
- package/dist/gateway/hono/sse.js.map +1 -1
- package/dist/gateway/process-manager.js +12 -10
- package/dist/gateway/process-manager.js.map +1 -1
- package/dist/gateway/service.d.ts +6 -2
- package/dist/gateway/service.js +20 -6
- package/dist/gateway/service.js.map +1 -1
- package/dist/gateway/static/root/assets/flow-BqIEBwW6.js +2 -0
- package/dist/gateway/static/root/assets/flow-BqIEBwW6.js.map +1 -0
- package/dist/gateway/static/root/assets/main-Br2tw-87.js +5168 -0
- package/dist/gateway/static/root/assets/main-Br2tw-87.js.map +1 -0
- package/dist/gateway/static/root/assets/main-DwlbPf8Z.css +1 -0
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/plugins/index.d.ts +0 -2
- package/dist/plugins/index.js +0 -2
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/types.d.ts +0 -2
- package/dist/plugins/types.js +0 -2
- package/dist/plugins/types.js.map +1 -1
- package/dist/providers/index.d.ts +50 -22
- package/dist/providers/index.js +276 -50
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/model-registry.d.ts +84 -0
- package/dist/providers/model-registry.js +385 -0
- package/dist/providers/model-registry.js.map +1 -0
- package/dist/types/providers.d.ts +2 -63
- package/dist/types/providers.js +1 -1
- package/dist/utils/__tests__/frontmatter.test.d.ts +4 -0
- package/dist/utils/__tests__/frontmatter.test.js +150 -0
- package/dist/utils/__tests__/frontmatter.test.js.map +1 -0
- package/dist/utils/diagnostic-events.d.ts +230 -0
- package/dist/utils/diagnostic-events.js +189 -0
- package/dist/utils/diagnostic-events.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +0 -1
- package/dist/utils/frontmatter.js +15 -79
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/log-stream.d.ts +95 -0
- package/dist/utils/log-stream.js +229 -0
- package/dist/utils/log-stream.js.map +1 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.js +25 -0
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/redact.d.ts +73 -0
- package/dist/utils/redact.js +245 -0
- package/dist/utils/redact.js.map +1 -0
- package/package.json +6 -4
- package/skills/find-skills/SKILL.md +0 -9
- package/dist/__tests__/core.test.js +0 -72
- package/dist/__tests__/core.test.js.map +0 -1
- package/dist/agent/model-manager.js.map +0 -1
- package/dist/cli/commands/configure.d.ts +0 -1
- package/dist/cli/commands/configure.js +0 -173
- package/dist/cli/commands/configure.js.map +0 -1
- package/dist/cli/commands/gateway-daemon.d.ts +0 -1
- package/dist/cli/commands/gateway-daemon.js +0 -141
- package/dist/cli/commands/gateway-daemon.js.map +0 -1
- package/dist/config/__tests__/diff.test.d.ts +0 -1
- package/dist/config/__tests__/diff.test.js +0 -192
- package/dist/config/__tests__/diff.test.js.map +0 -1
- package/dist/config/__tests__/loader.test.d.ts +0 -1
- package/dist/config/__tests__/loader.test.js +0 -356
- package/dist/config/__tests__/loader.test.js.map +0 -1
- package/dist/config/__tests__/paths.test.d.ts +0 -1
- package/dist/config/__tests__/paths.test.js +0 -192
- package/dist/config/__tests__/paths.test.js.map +0 -1
- package/dist/config/__tests__/reload.test.d.ts +0 -1
- package/dist/config/__tests__/reload.test.js +0 -374
- package/dist/config/__tests__/reload.test.js.map +0 -1
- package/dist/config/__tests__/rules.test.d.ts +0 -1
- package/dist/config/__tests__/rules.test.js +0 -204
- package/dist/config/__tests__/rules.test.js.map +0 -1
- package/dist/config/__tests__/schema.test.d.ts +0 -1
- package/dist/config/__tests__/schema.test.js +0 -672
- package/dist/config/__tests__/schema.test.js.map +0 -1
- package/dist/daemon/background-start.d.ts +0 -33
- package/dist/daemon/background-start.js +0 -89
- package/dist/daemon/background-start.js.map +0 -1
- package/dist/daemon/gateway-manager.d.ts +0 -87
- package/dist/daemon/gateway-manager.js +0 -324
- package/dist/daemon/gateway-manager.js.map +0 -1
- package/dist/daemon/index.d.ts +0 -5
- package/dist/daemon/index.js +0 -6
- package/dist/daemon/index.js.map +0 -1
- package/dist/gateway/static/root/assets/main-DevbZW9K.js +0 -2227
- package/dist/gateway/static/root/assets/main-DevbZW9K.js.map +0 -1
- package/dist/gateway/static/root/assets/main-DxZg1Nmz.css +0 -1
- package/dist/providers/__tests__/registry.test.d.ts +0 -1
- package/dist/providers/__tests__/registry.test.js +0 -110
- package/dist/providers/__tests__/registry.test.js.map +0 -1
- package/dist/providers/api-strategies.d.ts +0 -15
- package/dist/providers/api-strategies.js +0 -96
- package/dist/providers/api-strategies.js.map +0 -1
- package/dist/providers/auto-discovery.d.ts +0 -84
- package/dist/providers/auto-discovery.js +0 -236
- package/dist/providers/auto-discovery.js.map +0 -1
- package/dist/providers/config.d.ts +0 -25
- package/dist/providers/config.js +0 -42
- package/dist/providers/config.js.map +0 -1
- package/dist/providers/model-catalog.d.ts +0 -205
- package/dist/providers/model-catalog.js +0 -1071
- package/dist/providers/model-catalog.js.map +0 -1
- package/dist/providers/models-dev-data.d.ts +0 -11
- package/dist/providers/models-dev-data.js +0 -1035
- package/dist/providers/models-dev-data.js.map +0 -1
- package/dist/providers/models-dev.d.ts +0 -30
- package/dist/providers/models-dev.js +0 -42
- package/dist/providers/models-dev.js.map +0 -1
- package/dist/providers/pi-ai.d.ts +0 -62
- package/dist/providers/pi-ai.js +0 -221
- package/dist/providers/pi-ai.js.map +0 -1
- package/dist/providers/provider-catalog.d.ts +0 -173
- package/dist/providers/provider-catalog.js +0 -834
- package/dist/providers/provider-catalog.js.map +0 -1
- package/dist/providers/registry.d.ts +0 -155
- package/dist/providers/registry.js +0 -524
- package/dist/providers/registry.js.map +0 -1
- package/dist/providers/types.d.ts +0 -95
- package/dist/providers/types.js +0 -7
- package/dist/providers/types.js.map +0 -1
- package/dist/session/chat-manager.d.ts +0 -49
- package/dist/session/chat-manager.js +0 -167
- package/dist/session/chat-manager.js.map +0 -1
- package/dist/session/chat-types.d.ts +0 -53
- package/dist/session/chat-types.js +0 -63
- package/dist/session/chat-types.js.map +0 -1
- /package/dist/{__tests__/core.test.d.ts → cli/commands/setup.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:var(--font-sans);font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono);font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}input:where([type=text]),input:where(:not([type])),input:where([type=email]),input:where([type=url]),input:where([type=password]),input:where([type=number]),input:where([type=date]),input:where([type=datetime-local]),input:where([type=month]),input:where([type=search]),input:where([type=tel]),input:where([type=time]),input:where([type=week]),select:where([multiple]),textarea,select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-width:1px;border-radius:0;padding:.5rem .75rem;font-size:1rem;line-height:1.5rem;--tw-shadow: 0 0 #0000}input:where([type=text]):focus,input:where(:not([type])):focus,input:where([type=email]):focus,input:where([type=url]):focus,input:where([type=password]):focus,input:where([type=number]):focus,input:where([type=date]):focus,input:where([type=datetime-local]):focus,input:where([type=month]):focus,input:where([type=search]):focus,input:where([type=tel]):focus,input:where([type=time]):focus,input:where([type=week]):focus,select:where([multiple]):focus,textarea:focus,select:focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);border-color:#2563eb}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-top:0;padding-bottom:0}select{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}select:where([multiple]),select:where([size]:not([size="1"])){background-image:initial;background-position:initial;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}input:where([type=checkbox]),input:where([type=radio]){-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;display:inline-block;vertical-align:middle;background-origin:border-box;-webkit-user-select:none;-moz-user-select:none;user-select:none;flex-shrink:0;height:1rem;width:1rem;color:#2563eb;background-color:#fff;border-color:#6b7280;border-width:1px;--tw-shadow: 0 0 #0000}input:where([type=checkbox]){border-radius:0}input:where([type=radio]){border-radius:100%}input:where([type=checkbox]):focus,input:where([type=radio]):focus{outline:2px solid transparent;outline-offset:2px;--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 2px;--tw-ring-offset-color: #fff;--tw-ring-color: #2563eb;--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}input:where([type=checkbox]):checked,input:where([type=radio]):checked{border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}input:where([type=checkbox]):checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e")}@media(forced-colors:active){input:where([type=checkbox]):checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}input:where([type=radio]):checked{background-image:url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e")}@media(forced-colors:active){input:where([type=radio]):checked{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}input:where([type=checkbox]):checked:hover,input:where([type=checkbox]):checked:focus,input:where([type=radio]):checked:hover,input:where([type=radio]):checked:focus{border-color:transparent;background-color:currentColor}input:where([type=checkbox]):indeterminate{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e");border-color:transparent;background-color:currentColor;background-size:100% 100%;background-position:center;background-repeat:no-repeat}@media(forced-colors:active){input:where([type=checkbox]):indeterminate{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}}input:where([type=checkbox]):indeterminate:hover,input:where([type=checkbox]):indeterminate:focus{border-color:transparent;background-color:currentColor}input:where([type=file]){background:unset;border-color:inherit;border-width:0;border-radius:0;padding:0;font-size:unset;line-height:inherit}input:where([type=file]):focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}html{background-color:#fafaf9!important;color:#1c1917!important}html.dark{background-color:#121212!important;color:#fafaf9!important}*{box-sizing:border-box}html{font-family:var(--font-sans, "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);background:var(--bg-primary, #fafaf9);color:var(--text-primary, #1c1917)}body{margin:0;min-height:100vh}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.mx-auto{margin-left:auto;margin-right:auto}.ml-2{margin-left:.5rem}.ml-auto{margin-left:auto}.mt-2{margin-top:.5rem}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-full{height:100%}.h-screen{height:100vh}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.max-w-3xl{max-width:48rem}.max-w-\[85\%\]{max-width:85%}.max-w-\[calc\(100\%-3rem\)\]{max-width:calc(100% - 3rem)}.max-w-full{max-width:100%}.flex-1{flex:1 1 0%}.flex-shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.resize{resize:both}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.overflow-y-auto{overflow-y:auto}.whitespace-pre-wrap{white-space:pre-wrap}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-width:1px}.border-2{border-width:2px}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.border-t-transparent{border-top-color:transparent}.bg-background{background-color:var(--bg-primary)}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgb(243 244 246 / var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity))}.bg-primary-light{background-color:var(--accent-primary-light)}.p-3{padding:.75rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pb-0{padding-bottom:0}.pb-4{padding-bottom:1rem}.text-center{text-align:center}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.italic{font-style:italic}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-foreground{color:var(--text-primary)}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-primary{color:var(--accent-primary)}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.outline{outline-style:solid}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}:root,html.light{--bg-primary: #fafaf9;--bg-secondary: #f5f5f4;--bg-tertiary: #e7e5e4;--bg-hover: #d6d3d1;--text-primary: #1c1917;--text-secondary: #57534e;--text-muted: #a8a29e;--text-inverse: #fafaf9;--accent-primary: #4f46e5;--accent-primary-hover: #4338ca;--accent-primary-light: #e0e7ff;--accent-success: #059669;--accent-success-light: #d1fae5;--accent-warning: #d97706;--accent-warning-light: #fef3c7;--accent-error: #dc2626;--accent-error-light: #fee2e2;--accent-info: #0891b2;--accent-info-light: #cffafe;--border-color: #e7e5e4;--border-strong: #d6d3d1;--shadow-sm: 0 1px 2px 0 rgb(28 25 23 / .05);--shadow-md: 0 4px 6px -1px rgb(28 25 23 / .08);--shadow-lg: 0 10px 15px -3px rgb(28 25 23 / .08);--shadow-glow: 0 0 20px -5px rgb(79 70 229 / .3);--radius-sm: .375rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-xl: 1rem;--radius-full: 9999px;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", "Fira Code", monospace;--transition-fast: .15s cubic-bezier(.4, 0, .2, 1)}html.dark{--bg-primary: #121212;--bg-secondary: #1a1a1a;--bg-tertiary: #242424;--bg-hover: #333333;--text-primary: #fafaf9;--text-secondary: #a8a29e;--text-muted: #78716c;--text-inverse: #1c1917;--accent-primary: #6366f1;--accent-primary-hover: #818cf8;--accent-primary-light: #312e81;--border-color: #333333;--border-strong: #444444;--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / .3);--shadow-md: 0 4px 6px -1px rgb(0 0 0 / .4);--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .5)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--radius-full)}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideIn{0%{opacity:0;transform:translate(-10px)}to{opacity:1;transform:translate(0)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-fade-in{animation:fadeIn .2s ease-out}.animate-slide-in{animation:slideIn .2s ease-out}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}.animate-spin{animation:spin 1s linear infinite}:focus-visible{outline:2px solid var(--accent-primary);outline-offset:2px}::-moz-selection{background:var(--accent-primary-light);color:var(--accent-primary)}::selection{background:var(--accent-primary-light);color:var(--accent-primary)}pre{background:var(--bg-secondary);border-radius:var(--radius-md);padding:1rem;overflow-x:auto}code{font-family:var(--font-mono);font-size:.875rem}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.gradient-text{background:linear-gradient(135deg,#4f46e5,#7c3aed,#db2777);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.glass{background:#fffc;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}html.dark .glass{background:#1c1917cc}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.shimmer{background:linear-gradient(90deg,var(--bg-secondary) 25%,var(--bg-tertiary) 50%,var(--bg-secondary) 75%);background-size:200% 100%;animation:shimmer 1.5s infinite}.message-bubble{border-radius:var(--radius-lg);padding:.875rem 1rem;transition:all var(--transition-fast);max-width:100%;word-wrap:break-word}.message-bubble.user{background:linear-gradient(135deg,var(--accent-primary) 0%,var(--accent-primary-hover) 100%);color:#fff;box-shadow:var(--shadow-md)}.message-bubble.assistant{background:var(--bg-secondary);border:1px solid var(--border-color);box-shadow:var(--shadow-sm)}.message-item{display:flex;gap:.75rem;animation:fadeIn var(--transition-normal) ease-out;margin-bottom:1rem}.avatar{width:2rem;height:2rem;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:600;flex-shrink:0;background:var(--bg-tertiary);color:var(--text-secondary);border:1px solid var(--border-color);transition:all var(--transition-fast)}.avatar.user{background:var(--gradient-primary);color:#fff;border:none;box-shadow:var(--shadow-sm)}.avatar.assistant{background:linear-gradient(135deg,var(--accent-primary-light) 0%,var(--accent-primary) 100%);color:#fff;border:none;box-shadow:var(--shadow-sm)}.avatar.tool{background:var(--accent-warning);color:#fff;border:none}.message-bubble-left:before{content:"";position:absolute;left:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:6px solid var(--bg-secondary)}.message-bubble-right:before{content:"";position:absolute;right:-6px;top:12px;width:0;height:0;border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:6px solid var(--accent-primary)}@media(max-width:640px){html{font-size:14px}.mobile-full{width:100vw;max-width:100vw}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media print{.no-print{display:none!important}}.shell{display:flex;flex-direction:column;height:100vh;width:100vw;background:var(--bg-primary);overflow:hidden}.topbar{display:flex;align-items:center;justify-content:space-between;height:3.5rem;padding:0 1rem;background:var(--bg-primary);border-bottom:1px solid var(--border-color);flex-shrink:0;z-index:50}.topbar-left,.brand{display:flex;align-items:center;gap:.75rem}.brand-logo{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--radius-md);background:var(--gradient-primary);box-shadow:var(--shadow-glow)}.brand-text{display:flex;flex-direction:column}.brand-title{font-size:.875rem;font-weight:700;letter-spacing:.05em;background:var(--gradient-primary);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.brand-sub{font-size:.6875rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.1em}.topbar-status{display:flex;align-items:center;gap:.5rem}.pill-toggle{display:inline-flex;background:var(--bg-tertiary);border-radius:var(--radius-md);padding:2px}.pill-btn{display:inline-flex;align-items:center;justify-content:center;padding:.375rem .5rem;border:none;background:transparent;color:var(--text-muted);font-size:.75rem;font-weight:500;border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast);min-width:28px}.pill-btn:hover{color:var(--text-secondary)}.pill-btn.active{background:var(--bg-primary);color:var(--accent-primary);font-weight:600;box-shadow:var(--shadow-sm)}.shell-main{display:flex;flex:1;min-height:0;position:relative;overflow:hidden}.nav{width:16rem;background:var(--bg-primary);border-right:1px solid var(--border-color);display:flex;flex-direction:column;flex-shrink:0;transition:width var(--transition-normal),transform var(--transition-normal);overflow-y:auto;z-index:40}.nav--collapsed{width:4.5rem}.nav-overlay{position:fixed;inset:0;background:#0006;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:35;animation:fadeIn var(--transition-fast)}.nav-group{padding:.5rem 0}.nav-label{padding:1rem 1.25rem .5rem;font-size:.7rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.08em}.nav--collapsed .nav-label{display:none}.nav-item{display:flex;align-items:center;gap:.75rem;padding:.625rem 1.25rem;margin:.125rem .5rem;border-radius:var(--radius-md);font-size:.875rem;font-weight:500;color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);position:relative}.nav-item:hover{background:var(--bg-secondary);color:var(--text-primary)}.nav-item--active{background:var(--accent-primary-light);color:var(--accent-primary);font-weight:600}.nav-item--active:before{content:"";position:absolute;left:-.5rem;top:.5rem;bottom:.5rem;width:3px;background:var(--accent-primary);border-radius:0 var(--radius-full) var(--radius-full) 0}.nav--collapsed .nav-item__text{display:none}.nav-item__icon{width:1.25rem;display:flex;justify-content:center;flex-shrink:0}.content{flex:1;display:flex;flex-direction:column;min-width:0;min-height:0;background:var(--bg-primary)}.page-title{font-size:1rem;font-weight:600}.chat-container{display:flex;flex-direction:column;flex:1;overflow:hidden;height:100%}.chat-messages{flex:1;overflow-y:auto;padding:1.5rem 0;position:relative}.chat-messages-inner{max-width:80rem;margin:0 auto;padding:0 1rem;width:100%}.chat-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1rem;border-bottom:1px solid var(--border-color, #e5e7eb);background:var(--bg-primary, #fff);flex-shrink:0}.chat-header-title{display:flex;align-items:center;font-size:1rem;color:var(--text-primary)}.new-session-btn{display:flex;align-items:center;gap:.375rem;padding:.375rem .75rem;font-size:.875rem;font-weight:500;color:var(--text-primary);background:var(--bg-secondary, #f3f4f6);border:1px solid var(--border-color, #e5e7eb);border-radius:.5rem;cursor:pointer;transition:background .2s,border-color .2s}.new-session-btn:hover{background:var(--bg-tertiary, #e5e7eb)}.scroll-to-bottom-btn{position:absolute;bottom:1rem;right:1.5rem;width:2.5rem;height:2.5rem;border-radius:50%;background:var(--color-primary, #3b82f6);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #00000026;transition:transform .2s,background .2s;z-index:10}.scroll-to-bottom-btn:hover{transform:scale(1.05);background:var(--color-primary-hover, #2563eb)}.chat-input-container{padding:0 1.5rem 1.5rem;flex-shrink:0}.chat-input-inner{max-width:80rem;margin:0 auto;width:100%}.editor-container{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);display:flex;flex-direction:column;transition:all var(--transition-normal)}.editor-container:focus-within{border-color:var(--accent-primary);box-shadow:0 0 0 2px var(--accent-primary-light),var(--shadow-md);background:var(--bg-primary)}.input-row{display:flex;align-items:flex-end;gap:.5rem;padding:.5rem 1rem}.text-input{flex:1;background:transparent;border:none;outline:none;resize:none;font-size:.9375rem;line-height:1.5;padding:.5rem 0;min-height:2.5rem;max-height:15rem;color:var(--text-primary)}.input-with-actions{position:relative;display:flex;align-items:center}.input-with-actions .text-input{padding-right:4.5rem;width:100%;box-sizing:border-box}.input-with-actions .input-actions{position:absolute;right:.25rem;top:50%;transform:translateY(-50%)}.input-with-actions .btn-icon{width:1.75rem;height:1.75rem;padding:.25rem}.input-with-actions .btn-icon svg{width:16px;height:16px}.input-actions{display:flex;align-items:center;gap:.5rem;padding-bottom:.25rem}.attach-btn,.send-btn,.stop-btn{width:2.25rem;height:2.25rem;display:flex;align-items:center;justify-content:center;border-radius:var(--radius-md);border:1px solid var(--border-color);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);flex-shrink:0}.attach-btn:hover{background:var(--bg-tertiary)}.send-btn.active{background:var(--accent-primary);color:#fff;border-color:var(--accent-primary)}.stop-btn{background:var(--accent-error);color:#fff;border-color:var(--accent-error)}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;text-align:center;color:var(--text-muted);padding-bottom:5rem}.empty-state .icon{font-size:3rem;margin-bottom:1rem}@media(max-width:768px){.nav{position:fixed;top:3.5rem;left:0;bottom:0;width:16rem;transform:translate(-100%);box-shadow:var(--shadow-xl)}.nav--mobile-open{transform:translate(0)}.content-header{display:none}.chat-input-container{padding:0 1rem 1rem}.input-row{flex-wrap:wrap;padding:.75rem}.text-input{flex:0 0 100%;order:-1;margin-bottom:.5rem;min-height:3rem}.attach-btn{order:1}.input-actions{flex:1;order:2;justify-content:flex-end;gap:.5rem;padding-bottom:0}.attach-btn,.send-btn,.stop-btn{width:2rem;height:2rem}}.settings-overlay{position:fixed;inset:0;background:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:100;animation:fadeIn var(--transition-fast)}.settings-dialog{width:100%;max-width:56rem;height:80vh;background:var(--bg-primary);border-radius:var(--radius-xl);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;overflow:hidden;animation:slideIn var(--transition-normal)}.settings-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.5rem;border-bottom:1px solid var(--border-color);flex-shrink:0}.settings-title{display:flex;align-items:center;gap:.5rem;font-size:1.125rem;font-weight:600;color:var(--text-primary)}.close-btn{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:var(--radius-md);color:var(--text-muted);background:transparent;border:none;cursor:pointer;transition:all var(--transition-fast)}.close-btn:hover{background:var(--bg-secondary);color:var(--text-primary)}.settings-content{display:flex;flex:1;overflow:hidden}.settings-sidebar{width:14rem;border-right:1px solid var(--border-color);padding:1rem .5rem;overflow-y:auto;flex-shrink:0;background:var(--bg-primary)}.sidebar-item{display:flex;align-items:center;gap:.75rem;width:100%;padding:.625rem 1rem;border-radius:var(--radius-md);font-size:.875rem;font-weight:500;color:var(--text-secondary);background:transparent;border:1px solid transparent;cursor:pointer;transition:all var(--transition-fast);text-align:left;margin-bottom:.25rem}.sidebar-item:hover{background:var(--bg-secondary);color:var(--text-primary)}.sidebar-item.active{background:var(--accent-primary-light);color:var(--accent-primary)}.sidebar-item .chevron{margin-left:auto;opacity:0;transition:opacity var(--transition-fast)}.sidebar-item.active .chevron{opacity:1}.settings-main{flex:1;padding:1.5rem 2rem;overflow-y:auto;background:var(--bg-primary)}.section-header{margin-bottom:1.5rem}.section-header h2{font-size:1.25rem;font-weight:600;color:var(--text-primary);margin:0 0 .25rem}.section-description{font-size:.875rem;color:var(--text-muted);margin:0}.fields-grid{display:flex;flex-direction:column;gap:1.25rem}.field-group{display:flex;flex-direction:column;gap:.5rem}.field-header{display:flex;align-items:center;gap:.375rem}.field-label{font-size:.875rem;font-weight:500;color:var(--text-primary)}.required-mark{color:var(--accent-error)}.field-description{font-size:.8125rem;color:var(--text-muted);margin:0;line-height:1.4}.text-input,.textarea-input,.select-input{width:100%;padding:.625rem .875rem;font-size:.875rem;color:var(--text-primary);background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);outline:none;transition:all var(--transition-fast)}.text-input:focus,.textarea-input:focus,.select-input:focus{border-color:var(--accent-primary);box-shadow:0 0 0 2px var(--accent-primary-light)}.textarea-input{resize:vertical;min-height:6rem;max-height:12rem;font-family:inherit}.input-wrapper{position:relative;display:flex;align-items:center}.input-wrapper .text-input{padding-right:2.5rem}.password-toggle{position:absolute;right:.5rem;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;background:transparent;border:none;color:var(--text-muted);cursor:pointer;transition:color var(--transition-fast)}.password-toggle:hover{color:var(--text-primary)}.field-error{display:flex;align-items:center;gap:.375rem;font-size:.8125rem;color:var(--accent-error);padding-top:.25rem}.field-dirty{font-size:.75rem;color:var(--accent-warning);padding-top:.25rem}.toggle-label{display:flex;align-items:center;gap:.75rem;cursor:pointer}.toggle-input{display:none}.toggle-switch{width:2.5rem;height:1.375rem;background:var(--bg-tertiary);border-radius:var(--radius-full);position:relative;transition:background var(--transition-fast);flex-shrink:0}.toggle-switch:after{content:"";position:absolute;top:.125rem;left:.125rem;width:1.125rem;height:1.125rem;background:#fff;border-radius:50%;transition:transform var(--transition-fast);box-shadow:var(--shadow-sm)}.toggle-input:checked+.toggle-switch{background:var(--accent-primary)}.toggle-input:checked+.toggle-switch:after{transform:translate(1.125rem)}.toggle-text{font-size:.875rem;color:var(--text-secondary)}.settings-footer{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--border-color);background:var(--bg-primary);flex-shrink:0}settings-page,session-manager,cron-manager,log-manager,xopcbot-gateway-chat{display:flex;flex:1;min-height:0;overflow:hidden}.settings-page{display:flex;flex:1;min-height:0;overflow:hidden;position:relative;background:var(--bg-primary)}.settings-page .settings-sidebar{width:200px;border-right:1px solid var(--border-color);padding:0;flex-shrink:0;overflow-y:auto}.settings-page .sidebar-header{padding:1rem 1.25rem;border-bottom:1px solid var(--border-color)}.settings-page .sidebar-header h3{font-size:1rem;font-weight:600;color:var(--text-primary);margin:0}.settings-page .sidebar-nav{padding:.75rem .5rem}.settings-page .nav-item{display:flex;align-items:center;gap:.75rem;width:100%;padding:.625rem 1rem;border-radius:var(--radius-md);font-size:.875rem;font-weight:500;color:var(--text-secondary);background:transparent;border:none;cursor:pointer;transition:all var(--transition-fast);text-align:left;margin-bottom:.25rem}.settings-page .nav-item:hover{background:var(--bg-secondary);color:var(--text-primary)}.settings-page .nav-item.active{background:var(--accent-primary-light);color:var(--accent-primary);font-weight:600}.settings-page .settings-main{flex:1;min-height:0;overflow-y:auto;padding:2rem;position:relative;max-width:100%}.settings-page .section-content{max-width:100%;min-height:-moz-min-content;min-height:min-content}@media(min-width:768px){.settings-page .section-content{max-width:700px}}@media(min-width:1200px){.settings-page .section-content{max-width:900px}}.settings-page .section-header{margin-bottom:2rem}.settings-page .section-header h2{font-size:1.5rem;font-weight:600;color:var(--text-primary);margin:0 0 .5rem}.settings-page .section-desc{font-size:.875rem;color:var(--text-secondary);margin:0}.settings-page .fields-grid{display:flex;flex-direction:column;gap:1.5rem}.settings-page .field-group{display:flex;flex-direction:column;gap:.5rem}.settings-page .field-header{display:flex;align-items:center;gap:.5rem}.settings-page .field-label{font-size:.875rem;font-weight:500;color:var(--text-primary)}.settings-page .field-desc{font-size:.8125rem;color:var(--text-secondary);margin:0}.settings-page .text-input,.settings-page .select-input{width:100%;padding:.625rem .875rem;border:1px solid var(--border-color);border-radius:var(--radius-md);font-size:.875rem;background:var(--bg-primary);color:var(--text-primary);transition:all var(--transition-fast)}.settings-page .text-input:focus,.settings-page .select-input:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-alpha)}.settings-page .select-with-search{display:flex;flex-direction:column;gap:.5rem}.settings-page .select-with-search .search-input{padding:.5rem .75rem;font-size:.875rem}.settings-page .select-with-search .select-input{max-height:300px;overflow-y:auto}.settings-page .select-with-search .select-input option.group-header{font-weight:600;color:var(--color-primary);background:var(--bg-secondary)}.settings-page .select-with-search .select-input option:disabled{font-weight:600;color:var(--text-muted);background:var(--bg-secondary)}.settings-page .toggle-label{display:flex;align-items:center;gap:.75rem;cursor:pointer}.settings-page .toggle-input{display:none}.settings-page .toggle-switch{position:relative;width:44px;height:24px;background:var(--bg-secondary);border-radius:12px;transition:all var(--transition-fast)}.settings-page .toggle-switch:after{content:"";position:absolute;top:2px;left:2px;width:20px;height:20px;background:#fff;border-radius:50%;transition:all var(--transition-fast)}.settings-page .toggle-input:checked+.toggle-switch{background:var(--accent-primary)}.settings-page .toggle-input:checked+.toggle-switch:after{transform:translate(20px)}.settings-page .toggle-text{font-size:.875rem;color:var(--text-secondary)}.settings-page .loading-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;gap:1rem}.settings-page .loading-state .spinner{width:32px;height:32px;border:3px solid var(--border-color);border-top-color:var(--accent-primary);border-radius:50%;animation:spin .8s linear infinite}.settings-page .loading-state p{color:var(--text-secondary);font-size:.875rem}.settings-page .floating-save{position:absolute;bottom:2rem;right:2rem;display:flex;align-items:center;gap:1rem;padding:.75rem 1rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg)}.settings-page .dirty-count{font-size:.8125rem;color:var(--text-secondary)}.settings-page .spinner-sm{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.625rem 1rem;border-radius:var(--radius-md);font-size:.875rem;font-weight:500;cursor:pointer;transition:all var(--transition-fast);border:1px solid transparent}.btn-ghost{background:transparent;color:var(--text-secondary)}.btn-ghost:hover{background:var(--bg-secondary);color:var(--text-primary)}.btn-primary{background:var(--accent-primary);color:#fff;box-shadow:var(--shadow-sm)}.btn-primary:hover{background:var(--accent-primary-hover);box-shadow:var(--shadow-md)}.btn-primary:disabled{opacity:.5;cursor:not-allowed}.image-gallery{display:grid;gap:.25rem;max-width:100%;overflow:hidden}.image-gallery img{max-width:80px;max-height:80px;width:80px;height:80px;-o-object-fit:cover;object-fit:cover;border-radius:var(--radius-md);cursor:pointer;transition:transform .15s ease}.image-gallery img:hover{transform:scale(1.05)}.image-gallery.single{grid-template-columns:repeat(auto-fill,minmax(80px,1fr))}.image-gallery.double,.image-gallery.triple,.image-gallery.quad{grid-template-columns:repeat(auto-fill,minmax(60px,1fr))}.attachments-row{display:flex;flex-wrap:wrap;gap:.5rem;padding:.5rem 1rem;border-bottom:1px solid var(--border-color)}.attachment-chip{display:flex;align-items:center;gap:.375rem;padding:.25rem .5rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);font-size:.75rem}.attachment-preview{width:24px;height:24px;display:flex;align-items:center;justify-content:center;overflow:hidden;border-radius:var(--radius-xs)}.attachment-preview img{max-width:100%;max-height:100%;-o-object-fit:cover;object-fit:cover}.attachment-name{max-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary)}.attachment-remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;background:transparent;border:none;color:var(--text-muted);cursor:pointer;border-radius:var(--radius-full);transition:all var(--transition-fast)}.attachment-remove:hover{background:var(--bg-tertiary);color:var(--accent-error)}@media(max-width:768px){.settings-dialog{height:100vh;max-width:100%;border-radius:0}.settings-content{flex-direction:column}.settings-sidebar{width:100%;border-right:none;border-bottom:1px solid var(--border-color);padding:.5rem;display:flex;overflow-x:auto;gap:.25rem}.sidebar-item{flex-shrink:0;padding:.5rem .75rem}.sidebar-item span:not(.chevron){display:none}.sidebar-item.active span:not(.chevron){display:inline}.sidebar-item .chevron{display:none}.settings-main{padding:1rem;flex:1}}.session-manager{display:flex;flex-direction:column;flex:1;min-height:0;padding:1.5rem;gap:1rem;overflow-y:auto}.session-manager__header{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.session-manager__header .page-title{display:flex;align-items:center;gap:.5rem;font-size:1.25rem;font-weight:600;color:var(--text-primary);margin:0}.search-box{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);min-width:280px;transition:border-color var(--transition-fast)}.search-box:focus-within{border-color:var(--accent-primary)}.search-box svg{width:1.125rem;height:1.125rem;color:var(--text-muted);flex-shrink:0}.search-box input{flex:1;background:transparent;border:none;outline:none;font-size:.875rem;color:var(--text-primary)}.search-box input::-moz-placeholder{color:var(--text-muted)}.search-box input::placeholder{color:var(--text-muted)}.session-manager__filters{display:flex;gap:.5rem;flex-wrap:wrap}.filter-btn{display:flex;align-items:center;gap:.375rem;padding:.375rem .75rem;font-size:.8125rem;font-weight:500;color:var(--text-secondary);background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast)}.filter-btn:hover{background:var(--bg-tertiary);border-color:var(--border-strong)}.filter-btn--active{color:var(--accent-primary);background:var(--accent-primary-light);border-color:var(--accent-primary-soft)}.filter-btn svg{width:.875rem;height:.875rem}.session-manager__stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.75rem}.session-list{display:flex;flex-direction:column;gap:1rem}.session-list__toolbar{display:flex;justify-content:space-between;align-items:center;padding:0 .25rem}.session-list__count{font-size:.8125rem;color:var(--text-muted)}.session-list__view-toggle{display:flex;gap:.25rem}.session-list__content{display:grid;gap:.75rem}.session-list__content--grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.session-list__content--list{grid-template-columns:1fr}.session-list__load-more{display:flex;justify-content:center;padding:1rem}.session-card{display:flex;flex-direction:column;padding:1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast);position:relative}.session-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.session-card--selected{border-color:var(--accent-primary);box-shadow:0 0 0 1px var(--accent-primary)}.session-card--archived{opacity:.7}.session-card--archived .session-card__title{text-decoration:line-through;color:var(--text-muted)}.session-card__header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.session-card__channel{display:flex;align-items:center;gap:.375rem}.channel-icon{display:flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--text-muted)}.channel-icon svg{width:1rem;height:1rem}.channel-name{font-size:.6875rem;font-weight:500;text-transform:uppercase;letter-spacing:.025em;color:var(--text-muted)}.session-card__meta{display:flex;align-items:center;gap:.5rem}.pin-badge{display:flex;align-items:center;color:var(--accent-primary)}.pin-badge svg{width:.875rem;height:.875rem;fill:currentColor}.date{font-size:.6875rem;color:var(--text-muted)}.session-card__title{font-size:.9375rem;font-weight:500;color:var(--text-primary);margin-bottom:.75rem;line-height:1.4;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.session-card__stats{display:flex;gap:1rem;margin-bottom:.75rem}.stat{display:flex;align-items:center;gap:.375rem;font-size:.75rem;color:var(--text-muted)}.stat svg{width:.875rem;height:.875rem}.session-card__tags{display:flex;flex-wrap:wrap;gap:.375rem;margin-bottom:.75rem}.tag{display:inline-flex;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;color:var(--text-secondary);background:var(--bg-tertiary);border-radius:var(--radius-sm)}.tag--more{color:var(--text-muted);background:transparent}.session-card__actions{display:flex;gap:.25rem;margin-top:auto;padding-top:.5rem;border-top:1px solid var(--border-subtle);opacity:0;transition:opacity var(--transition-fast)}.session-card:hover .session-card__actions{opacity:1}.session-list--empty{display:flex;align-items:center;justify-content:center;min-height:300px}.empty-state{text-align:center}.empty-state__icon{display:flex;align-items:center;justify-content:center;width:4rem;height:4rem;margin:0 auto 1rem;color:var(--text-muted)}.empty-state__icon svg{width:2.5rem;height:2.5rem}.empty-state__title{font-size:1rem;font-weight:500;color:var(--text-primary);margin-bottom:.375rem}.empty-state__description{font-size:.8125rem;color:var(--text-muted)}.session-list--loading{min-height:300px}.session-list__skeleton{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:.75rem}.skeleton-card{display:flex;flex-direction:column;gap:.75rem;padding:1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md)}.skeleton--header{height:1rem;width:40%}.skeleton--title{height:1.25rem;width:80%}.skeleton--stats{height:.875rem;width:60%}@keyframes skeleton-pulse{0%,to{opacity:1}50%{opacity:.5}}.error-banner{padding:.75rem 1rem;background:var(--accent-error-light);border:1px solid var(--accent-error-soft);border-radius:var(--radius-md);font-size:.8125rem;color:var(--accent-error)}@media(max-width:768px){.session-manager{padding:1rem}.session-manager__header{flex-direction:column;align-items:stretch;gap:.75rem}.session-manager__header .page-title{font-size:1.1rem}.session-manager__header .search-box{width:100%}.session-list__content--grid{grid-template-columns:1fr}.session-card__actions{opacity:1}.cron-manager{padding:1rem}.cron-manager__header{flex-direction:column;align-items:stretch;gap:.75rem}.cron-manager__header .page-title{font-size:1.1rem}.cron-manager__actions{width:100%;justify-content:stretch}.cron-manager__actions .btn{flex:1}}.drawer-overlay{position:fixed;inset:0;background:#00000080;z-index:100}.drawer-backdrop{position:fixed;inset:0;background:#00000080;z-index:100;display:flex;justify-content:flex-end}.drawer{position:fixed;right:0;top:0;width:480px;max-width:100%;height:100%;background:var(--bg-primary);border-left:1px solid var(--border-color);display:flex;flex-direction:column;z-index:101;animation:drawer-slide-in .2s ease-out;box-shadow:-4px 0 12px #0000001a}.drawer--right{right:0;left:auto}@keyframes drawer-slide-in{0%{transform:translate(100%)}to{transform:translate(0)}}.drawer-header{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;border-bottom:1px solid var(--border-color);gap:.75rem}.drawer-header__info{flex:1;min-width:0}.drawer-header__title{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:600;color:var(--text-primary);margin:0;word-break:break-all}.btn-icon{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;background:transparent;border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all var(--transition-fast);flex-shrink:0}.btn-icon:hover{background:var(--bg-tertiary);color:var(--text-primary);border-color:var(--border-color)}.btn-icon svg{width:1.125rem;height:1.125rem}.btn-icon--small{width:1.5rem;height:1.5rem}.btn-icon--small svg{width:.875rem;height:.875rem}.drawer-header__meta{display:flex;align-items:center;gap:.5rem;font-size:.75rem;color:var(--text-muted);flex-wrap:wrap}.drawer-search{padding:.75rem 1rem;border-bottom:1px solid var(--border-color);display:flex;align-items:center;gap:.5rem}.search-input-wrapper{flex:1;display:flex;align-items:center;gap:.5rem;padding:.375rem .75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md)}.search-input-wrapper:focus-within{border-color:var(--accent-primary)}.search-input-wrapper svg{width:1rem;height:1rem;color:var(--text-muted);flex-shrink:0}.search-input-wrapper input{flex:1;background:transparent;border:none;outline:none;font-size:.875rem;color:var(--text-primary)}.search-input-wrapper input::-moz-placeholder{color:var(--text-muted)}.search-input-wrapper input::placeholder{color:var(--text-muted)}.search-nav{display:flex;align-items:center;gap:.25rem}.search-count{font-size:.75rem;color:var(--text-muted);padding:0 .5rem;min-width:3rem;text-align:center}.drawer-content{flex:1;overflow-y:auto;padding:1rem;display:flex;flex-direction:column;gap:1rem}.drawer-content--loading{align-items:center;justify-content:center;gap:.75rem;color:var(--text-muted)}.drawer-content--empty{align-items:center;justify-content:center;color:var(--text-muted)}.message{display:flex;flex-direction:column;gap:.375rem;padding:.75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md)}.message.user{border-left:3px solid var(--accent-primary)}.message.assistant{border-left:3px solid var(--accent-success)}.message--highlight{background:var(--accent-primary-light);border-color:var(--accent-primary-soft)}.message--current{box-shadow:0 0 0 2px var(--accent-primary)}.message__header{display:flex;justify-content:space-between;align-items:center}.message__role{font-size:.6875rem;font-weight:600;text-transform:uppercase;color:var(--text-muted)}.message__time{font-size:.6875rem;color:var(--text-muted)}.message__content{font-size:.875rem;color:var(--text-primary);line-height:1.5;white-space:pre-wrap;word-break:break-word}.search-highlight{background:var(--accent-primary);color:#fff;padding:.125rem .25rem;border-radius:var(--radius-sm)}.drawer-actions{display:flex;gap:.5rem;padding:.75rem 1rem;border-top:1px solid var(--border-color);background:var(--bg-secondary);overflow-x:auto}.archive-badge{display:inline-flex;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;color:var(--text-muted);background:var(--bg-tertiary);border-radius:var(--radius-sm)}.modal-backdrop{position:fixed;inset:0;background:#00000080;z-index:200;display:flex;align-items:center;justify-content:center;padding:1rem}.modal{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-lg);max-width:400px;width:100%;text-align:center;animation:modal-fade-in .15s ease-out;overflow:hidden}.modal--form{max-width:520px;max-height:90vh;display:flex;flex-direction:column;text-align:left}.modal--form .modal__content{flex:1;overflow-y:auto;max-height:calc(90vh - 140px)}.modal__header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--border-color)}.modal__header .modal__title{margin:0}.modal__content{padding:1.5rem}.modal__actions{display:flex;gap:.75rem;justify-content:flex-end;padding:1rem 1.5rem;border-top:1px solid var(--border-color);background:var(--bg-secondary)}.form-field{margin-bottom:1.25rem}.form-field:last-child{margin-bottom:0}.form-field__label{display:block;font-size:.875rem;font-weight:500;color:var(--text-primary);margin-bottom:.5rem}.form-field__input,.form-field__textarea,.form-field__select{width:100%;padding:.625rem .75rem;font-size:.875rem;color:var(--text-primary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-md);transition:border-color var(--transition-fast),box-shadow var(--transition-fast)}.form-field__input:focus,.form-field__textarea:focus,.form-field__select:focus{outline:none;border-color:var(--accent-primary);box-shadow:0 0 0 3px #3b82f61a}.form-field__textarea{min-height:100px;resize:vertical}.form-field__hint{font-size:.75rem;color:var(--text-muted);margin-top:.375rem}@keyframes modal-fade-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.modal__icon{display:flex;justify-content:center;margin-bottom:1rem}.modal__icon svg{width:3rem;height:3rem}.modal__title{font-size:1.125rem;font-weight:600;color:var(--text-primary);margin-bottom:.5rem}.modal__message{font-size:.875rem;color:var(--text-secondary);line-height:1.5;margin-bottom:1.5rem;white-space:pre-line}.modal__actions{display:flex;gap:.75rem;justify-content:center}.text-red-500{color:var(--accent-error)}.text-amber-500{color:var(--accent-warning)}.text-blue-500{color:var(--accent-info)}.text-gray-500{color:var(--text-muted)}@media(max-width:640px){.drawer{width:100%}.drawer-actions{flex-wrap:wrap}.drawer-actions .btn{flex:1;min-width:0}}.cron-manager{display:flex;flex-direction:column;flex:1;min-height:0;padding:1.5rem;gap:1rem;overflow-y:auto}.cron-manager__header{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.cron-manager__header .page-title{display:flex;align-items:center;gap:.5rem;font-size:1.25rem;font-weight:600;color:var(--text-primary);margin:0}.cron-manager__actions{display:flex;gap:.5rem}.cron-manager__stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:.75rem;margin-bottom:1rem}.subagents-manager{display:flex;flex-direction:column;flex:1;min-height:0;padding:1.5rem;gap:1rem;overflow-y:auto}.subagents-manager__header{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}.subagents-manager__header .page-title{display:flex;align-items:center;gap:.5rem;font-size:1.25rem;font-weight:600;color:var(--text-primary);margin:0}.subagents-manager__empty{display:flex;align-items:center;justify-content:center;min-height:400px}.subagents-list{display:flex;flex-direction:column;gap:.75rem}.subagent-card{display:flex;align-items:center;gap:1rem;padding:1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast)}.subagent-card:hover{border-color:var(--border-strong);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.subagent-card__icon{display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;background:linear-gradient(135deg,var(--accent-primary-soft) 0%,var(--accent-primary-light) 100%);border-radius:var(--radius-md);color:var(--accent-primary);flex-shrink:0}.subagent-card__icon svg{width:1.5rem;height:1.5rem}.subagent-card__info{flex:1;min-width:0}.subagent-card__name{font-size:.9375rem;font-weight:600;color:var(--text-primary);margin-bottom:.25rem}.subagent-card__meta{display:flex;align-items:center;gap:.5rem;font-size:.8125rem;color:var(--text-muted)}.subagent-card__meta .meta-item{display:flex;align-items:center;gap:.375rem}.subagent-card__meta .meta-item svg{width:.875rem;height:.875rem}.subagent-card__meta .meta-divider{color:var(--border-strong)}.subagent-card__arrow{color:var(--text-muted);transition:transform var(--transition-fast)}.subagent-card:hover .subagent-card__arrow{transform:translate(2px);color:var(--text-secondary)}.subagent-detail{display:flex;flex-direction:column;gap:1.5rem;animation:fadeIn var(--transition-normal) ease-out}.subagent-detail__header{display:flex;align-items:center;gap:.75rem}.subagent-detail__content{display:flex;flex-direction:column;gap:1.5rem}.subagent-detail__title{display:flex;align-items:center;gap:.75rem;padding-bottom:1rem;border-bottom:1px solid var(--border-color)}.subagent-detail__icon{display:flex;align-items:center;justify-content:center;width:3rem;height:3rem;background:linear-gradient(135deg,var(--accent-primary) 0%,var(--accent-primary-hover) 100%);border-radius:var(--radius-md);color:#fff}.subagent-detail__icon svg{width:1.5rem;height:1.5rem}.subagent-detail__title h2{font-size:1.25rem;font-weight:600;color:var(--text-primary);margin:0}.detail-section{display:flex;flex-direction:column;gap:.75rem}.detail-section .section-title{font-size:.875rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin:0}.detail-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}.detail-item{display:flex;flex-direction:column;gap:.375rem;padding:.75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md)}.detail-item__label{font-size:.75rem;font-weight:500;color:var(--text-muted)}.detail-item__value{font-size:.875rem;color:var(--text-primary)}.detail-item__value--code{font-family:var(--font-mono);font-size:.8125rem;word-break:break-all}.status-badge{display:inline-flex;padding:.25rem .625rem;font-size:.75rem;font-weight:600;text-transform:uppercase;border-radius:var(--radius-sm)}.status-badge--active{color:var(--accent-success);background:var(--accent-success-light)}.status-badge--idle{color:var(--accent-warning);background:var(--accent-warning-light)}.status-badge--archived{color:var(--text-muted);background:var(--bg-tertiary)}.tags-list{display:flex;flex-wrap:wrap;gap:.5rem}.skeleton-list{display:flex;flex-direction:column;gap:.75rem}.skeleton-card{display:flex;align-items:center;gap:1rem;padding:1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md)}.skeleton-card .skeleton--icon{width:3rem;height:3rem;border-radius:var(--radius-md);flex-shrink:0}.skeleton-card .skeleton--content{flex:1;display:flex;flex-direction:column;gap:.5rem}.skeleton-card .skeleton--title{width:40%;height:1rem}.skeleton-card .skeleton--meta{width:60%;height:.75rem}@media(max-width:768px){.subagents-manager{padding:1rem}.subagents-manager__header{flex-direction:column;align-items:stretch}.subagents-manager__header .btn{width:100%}.subagent-card{padding:.875rem}.subagent-card__icon{width:2.5rem;height:2.5rem}.detail-grid{grid-template-columns:1fr}}.log-manager{display:flex;flex-direction:column;flex:1;min-height:0;padding:1rem;gap:.5rem;overflow:hidden;height:calc(100vh - 50px)}.log-manager__header{flex-shrink:0;display:flex;justify-content:space-between;align-items:center;padding:.75rem 0;gap:1rem}.log-manager__title{display:flex;align-items:center;gap:.75rem;color:var(--text-primary)}.title-icon{display:flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;background:var(--gradient-primary);border-radius:var(--radius-md);color:#fff;flex-shrink:0;box-shadow:0 2px 8px #00000026}.title-icon svg{width:1.25rem;height:1.25rem}.title-text{display:flex;flex-direction:column;justify-content:center}.title-text h1{font-size:1.25rem;font-weight:600;color:var(--text-primary)!important;margin:0;line-height:1.2}.title-subtitle{font-size:.8125rem;color:var(--text-muted)!important;margin-top:.125rem;display:block}.log-manager__actions{display:flex;align-items:center;gap:.375rem}.log-manager__actions .btn-icon{position:relative}.log-manager__actions .badge{position:absolute;top:-.25rem;right:-.25rem;min-width:1rem;height:1rem;padding:0 .25rem;font-size:.625rem;font-weight:600;color:#fff;background:var(--primary);border-radius:1rem;display:flex;align-items:center;justify-content:center}.log-manager__actions .btn-icon--active{background:var(--accent-primary, #3b82f6);color:#fff;border-color:var(--accent-primary, #3b82f6);box-shadow:0 2px 8px #3b82f64d}.log-manager__actions .btn-icon--active:hover{background:var(--accent-primary-hover, #2563eb);border-color:var(--accent-primary-hover, #2563eb)}.log-manager__main{display:flex;flex-direction:column;flex:1;min-height:0;gap:.75rem;overflow:hidden}.log-manager__filters{display:flex;flex-direction:column;gap:.625rem;padding:.75rem 1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);flex-shrink:0}.log-manager__filters-row{display:flex;align-items:flex-end;gap:.75rem;flex-wrap:nowrap}.log-manager__filters-row>.filter-group:first-child{flex:0 0 auto}.log-manager__filters-row>.filter-group:nth-child(2){flex:1;min-width:200px;max-width:400px}.log-manager__filters>.filter-row{display:flex;gap:.5rem;flex-wrap:nowrap;align-items:flex-end}.filter-group{display:flex;flex-direction:column;gap:.375rem}.filter-label{font-size:.6875rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.filter-row .filter-group{min-width:120px;flex:1}.filter-row .filter-group:first-child{flex:1.5}.filter-row select,.filter-row input[type=datetime-local],.log-manager__filters select,.log-manager__filters input[type=datetime-local]{padding:.375rem .625rem;font-size:.8125rem;border:1px solid var(--border-color);border-radius:var(--radius-sm);background:var(--bg-primary);color:var(--text-primary);width:100%;height:2rem}.filter-row .btn-ghost{padding:.375rem .75rem;font-size:.8125rem;height:2rem;white-space:nowrap}.log-manager__filters .filter-group{display:flex;flex-direction:column;gap:.375rem}.log-manager__filters .filter-label{font-size:.6875rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.log-manager__filters .search-box{min-width:auto;width:100%;height:2rem;padding:0 .625rem}.log-manager__filters .search-box svg{width:1rem;height:1rem}.log-manager__filters .search-box input{font-size:.8125rem;outline:none;box-shadow:none}.log-manager__filters .search-box:focus-within{border-color:var(--accent-primary);box-shadow:0 0 0 2px var(--accent-primary-light)}.log-manager__filters .level-filters{display:flex;align-items:center;gap:.375rem;flex-wrap:wrap;height:2rem}.level-badge{display:inline-flex;align-items:center;padding:.1875rem .5rem;font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.025em;color:var(--level-color, var(--text-secondary));background:color-mix(in srgb,var(--level-color, var(--bg-tertiary)) 15%,transparent);border:1px solid color-mix(in srgb,var(--level-color, var(--border-color)) 30%,transparent);border-radius:var(--radius-sm);cursor:pointer;transition:all var(--transition-fast)}.level-badge:hover{background:color-mix(in srgb,var(--level-color, var(--bg-tertiary)) 25%,transparent)}.level-badge--active{background:color-mix(in srgb,var(--level-color, var(--accent-primary)) 25%,transparent);border-color:var(--level-color, var(--accent-primary));box-shadow:0 0 0 1px var(--level-color, var(--accent-primary))}.level-badge--small{padding:.125rem .375rem;font-size:.625rem}.log-table-container{display:flex;flex-direction:column;gap:.75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);overflow:auto;flex:1;min-height:0}.log-table{display:table!important;width:100%;table-layout:fixed}.log-table thead{display:table-header-group!important}.log-table tbody{display:table-row-group!important}.log-table tr{display:table-row!important}.log-table th,.log-table td{display:table-cell!important}.log-table{width:100%;border-collapse:collapse;font-size:.8125rem}.log-table th{padding:.5rem .625rem;text-align:left;font-weight:600;color:var(--text-secondary);background:var(--bg-tertiary);border-bottom:1px solid var(--border-color);white-space:nowrap;position:sticky;top:0;z-index:10}.log-table td{padding:.5rem .625rem;border-bottom:1px solid var(--border-subtle);vertical-align:top}.log-row{cursor:pointer;transition:background var(--transition-fast)}.log-row:hover{background:var(--bg-tertiary)}.log-row--trace{border-left:3px solid #9ca3af}.log-row--debug{border-left:3px solid #6b7280}.log-row--info{border-left:3px solid #3b82f6}.log-row--warn{border-left:3px solid #f59e0b}.log-row--error{border-left:3px solid #ef4444}.log-row--fatal{border-left:3px solid #dc2626}.log-cell--time{white-space:nowrap;font-family:var(--font-mono);font-size:.75rem;color:var(--text-muted);width:150px}.log-cell--level{width:70px}.log-cell--module{white-space:nowrap;font-family:var(--font-mono);font-size:.75rem;color:var(--text-secondary);width:180px;max-width:180px;overflow:hidden;text-overflow:ellipsis}.log-cell--message{color:var(--text-primary);line-height:1.4;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-table__load-more{display:flex;justify-content:center;padding:1rem;border-top:1px solid var(--border-color)}.drawer-content{flex:1;overflow-y:auto;padding:1rem 1.25rem}.log-detail{display:flex;flex-direction:column;gap:1rem;padding:0 .5rem}.log-detail__field{display:flex;flex-direction:column;gap:.375rem}.log-detail__field label{font-size:.75rem;font-weight:600;color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em}.log-detail__field code,.log-detail__field pre{font-family:var(--font-mono);font-size:.8125rem;padding:.5rem .75rem;background:var(--bg-tertiary);border-radius:var(--radius-sm);color:var(--text-primary);margin:0}.log-detail__message,.log-detail__meta{font-family:var(--font-mono);font-size:.8125rem;padding:.75rem 1rem;background:var(--bg-tertiary);border-radius:var(--radius-md);color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:300px;overflow-y:auto;margin:0}.log-files{margin-top:.5rem;padding:.75rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md)}.section-title{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;color:var(--text-primary);margin:0 0 .5rem}.files-panel{position:fixed;right:0;top:0;width:320px;max-width:90vw;height:100vh;background:var(--bg-primary);border-left:1px solid var(--border-color);box-shadow:-4px 0 12px #0000001a;transform:translate(100%);transition:transform .2s ease;z-index:100;display:flex;flex-direction:column}.files-panel--open{transform:translate(0)}.files-panel__header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid var(--border-color);background:var(--bg-secondary)}.files-panel__toggle{display:flex;align-items:center;gap:.5rem;padding:0;font-size:.9375rem;font-weight:600;color:var(--text-primary);background:none;border:none;cursor:pointer}.files-panel__content{flex:1;overflow-y:auto;padding:.75rem 1rem}.files-panel__empty{padding:2rem 1rem;text-align:center;color:var(--text-muted);font-size:.875rem}.file-list{display:flex;flex-direction:column;gap:.375rem}.file-item{display:flex;flex-direction:column;gap:.25rem;padding:.5rem .625rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.75rem;transition:border-color var(--transition-fast)}.file-item:hover{border-color:var(--border-hover)}.file-name{display:flex;align-items:center;gap:.375rem;color:var(--text-primary);font-weight:500;word-break:break-all}.file-meta{display:flex;gap:.5rem;font-size:.6875rem;color:var(--text-muted)}.file-size,.file-time{font-family:var(--font-mono)}.skeleton-table{display:flex;flex-direction:column;gap:.5rem;padding:.75rem}.skeleton-row{display:flex;gap:.75rem;padding:.625rem 0;border-bottom:1px solid var(--border-subtle)}.skeleton{background:var(--bg-tertiary);border-radius:var(--radius-sm);animation:skeleton-pulse 2s ease-in-out infinite}.skeleton--time{width:120px;height:1rem}.skeleton--level{width:60px;height:1rem}.skeleton--module{width:120px;height:1rem}.skeleton--message{flex:1;height:1rem}@media(max-width:768px){.log-manager{padding:.75rem;height:auto;min-height:calc(100vh - 50px)}.log-manager__header{flex-direction:column;align-items:stretch;gap:.75rem}.log-manager__actions{width:100%;justify-content:stretch}.log-manager__actions .btn{flex:1}.log-manager__filters{gap:.625rem;padding:.625rem .75rem}.log-manager__filters-row{flex-direction:column;align-items:stretch;gap:.625rem}.log-manager__filters-row>.filter-group:first-child,.log-manager__filters-row>.filter-group:nth-child(2){flex:none;min-width:auto;max-width:none;width:100%}.log-manager__filters>.filter-row{flex-wrap:wrap;gap:.5rem}.filter-row .filter-group{flex:1;min-width:100px}.filter-row .filter-group:first-child{flex:1 1 100%;min-width:auto}.filter-row .filter-group:nth-child(2),.filter-row .filter-group:nth-child(3){flex:1;min-width:120px}.filter-row .btn-ghost{flex:0 0 auto;align-self:flex-end}.log-manager__filters .level-filters{flex-wrap:wrap;height:auto}.level-badge{font-size:.625rem;padding:.125rem .375rem}.filter-row select,.filter-row input[type=datetime-local]{width:100%}.log-table th,.log-table td{padding:.5rem}.log-cell--module{display:none}.log-cell--message{max-width:200px}}@media(max-width:1024px)and (min-width:769px){.log-manager__filters-row{flex-wrap:wrap}.log-manager__filters-row>.filter-group:nth-child(2){flex:1;min-width:180px;max-width:none}.log-manager__filters>.filter-row{flex-wrap:wrap}}.providers-section{display:flex;flex-direction:column;gap:1rem}.provider-card{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);overflow:hidden}.provider-header{display:flex;align-items:center;justify-content:space-between;padding:.875rem 1rem;cursor:pointer;transition:background var(--transition-fast)}.provider-header:hover{background:var(--bg-tertiary)}.provider-title{display:flex;align-items:center;gap:.75rem}.provider-icon{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;background:var(--accent-primary-light);color:var(--accent-primary);border-radius:var(--radius-md)}.provider-name{font-weight:600;color:var(--text-primary)}.provider-model-count{font-size:.75rem;color:var(--text-muted);background:var(--bg-tertiary);padding:.125rem .5rem;border-radius:var(--radius-full)}.provider-actions{display:flex;align-items:center;gap:.5rem}.expand-icon{transition:transform var(--transition-fast)}.expand-icon.expanded{transform:rotate(90deg)}.provider-body{padding:1rem;border-top:1px solid var(--border-color)}.provider-config{display:flex;flex-direction:column;gap:1rem;margin-bottom:1.5rem;padding-bottom:1.5rem;border-bottom:1px solid var(--border-color)}.models-section{display:flex;flex-direction:column;gap:.75rem}.models-header{display:flex;align-items:center;justify-content:space-between}.models-header h4{margin:0;font-size:.875rem;font-weight:600;color:var(--text-secondary)}.models-list{display:flex;flex-direction:column;gap:.5rem}.model-item{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:var(--radius-sm)}.model-info{display:flex;flex-direction:column;gap:.25rem}.model-name{font-weight:500;color:var(--text-primary)}.model-id{font-size:.75rem;color:var(--text-muted);font-family:var(--font-mono)}.model-capabilities{display:flex;gap:.375rem;margin-top:.25rem}.capability-tag{font-size:.6875rem;padding:.125rem .375rem;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:var(--radius-sm)}.capability-tag.image{background:var(--accent-success-light);color:var(--accent-success)}.capability-tag.reasoning{background:var(--accent-primary-light);color:var(--accent-primary)}.model-actions{display:flex;gap:.25rem}.modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:100}.modal-content{background:var(--bg-primary);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:480px;max-height:90vh;overflow:auto}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border-color)}.modal-header h3{margin:0;font-size:1rem;font-weight:600}.modal-body{padding:1.25rem}.modal-footer{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.25rem;border-top:1px solid var(--border-color)}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.checkbox-group{display:flex;gap:1rem}.checkbox-label{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--text-secondary)}.checkbox-label input[type=checkbox]{cursor:pointer}.btn-danger{color:var(--accent-error)}.btn-danger:hover{background:var(--accent-error-light)}.btn-outline{border:1px dashed var(--border-color);background:transparent}.btn-outline:hover{border-color:var(--accent-primary);color:var(--accent-primary)}.btn-full{width:100%}.btn-secondary{background:var(--bg-secondary);color:var(--text-primary);border:1px solid var(--border-color)}.btn-secondary:hover{background:var(--bg-tertiary)}.modal-lg{max-width:720px}.modal-description{color:var(--text-secondary);margin-bottom:1.5rem;font-size:.9375rem}.template-section{margin-bottom:1.5rem}.template-section-title{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;color:var(--text-secondary);margin-bottom:.75rem;text-transform:uppercase;letter-spacing:.025em}.template-icon{display:flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;color:var(--accent-primary)}.template-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.75rem}.template-card{display:flex;flex-direction:column;padding:1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);cursor:pointer;transition:all var(--transition-fast);text-align:left}.template-card:hover{border-color:var(--accent-primary);box-shadow:var(--shadow-sm);transform:translateY(-1px)}.template-card-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.template-card-name{font-weight:600;color:var(--text-primary)}.template-card-badge{font-size:.625rem;font-weight:600;padding:.125rem .375rem;border-radius:var(--radius-sm);text-transform:uppercase}.template-card-badge.api-key{background:var(--accent-success-light);color:var(--accent-success)}.template-card-badge.oauth{background:var(--accent-primary-light);color:var(--accent-primary)}.template-card-models{display:flex;flex-wrap:wrap;gap:.375rem}.template-model-tag{font-size:.6875rem;padding:.125rem .375rem;background:var(--bg-tertiary);color:var(--text-secondary);border-radius:var(--radius-sm)}.template-model-tag.more{background:var(--border-color);color:var(--text-muted)}.template-info{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:1rem;margin-bottom:1rem}.template-info-text{display:flex;gap:.5rem;margin:0 0 .5rem;font-size:.875rem}.template-info-text:last-child{margin-bottom:0}.template-info-label{color:var(--text-muted);font-weight:500}.template-info code{background:var(--bg-tertiary);padding:.125rem .375rem;border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:.8125rem}.oauth-setup{display:flex;flex-direction:column;gap:1rem}.oauth-info{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-md);padding:1rem}.oauth-login-section{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:1.5rem;background:var(--bg-secondary);border:1px dashed var(--border-color);border-radius:var(--radius-md)}.oauth-description{text-align:center;color:var(--text-secondary);font-size:.875rem;margin:0}.btn-oauth{display:flex;align-items:center;gap:.5rem;padding:.75rem 1.5rem}.oauth-icon{display:flex;align-items:center}.checkbox-group-vertical{display:flex;flex-direction:column;gap:.5rem}.field-help{font-size:.75rem;color:var(--text-muted);margin:.375rem 0 0}.save-success{position:fixed;bottom:2rem;left:50%;transform:translate(-50%);padding:.75rem 1.5rem;background:var(--accent-success, #059669);color:#fff;font-size:.875rem;font-weight:500;border-radius:var(--radius-md, .5rem);box-shadow:var(--shadow-lg, 0 10px 15px -3px rgba(0, 0, 0, .1));z-index:100;animation:fadeIn .2s ease-out}.settings-main .spinner-sm{width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite;display:inline-block}.floating-save .dirty-count{font-size:.8125rem;color:var(--text-secondary, #57534e)}:is(:where(.dark) .dark\:bg-blue-900\/30){background-color:#1e3a8a4d}:is(:where(.dark) .dark\:bg-gray-800){--tw-bg-opacity: 1;background-color:rgb(31 41 55 / var(--tw-bg-opacity))}:is(:where(.dark) .dark\:bg-green-900\/30){background-color:#14532d4d}:is(:where(.dark) .dark\:text-blue-400){--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-gray-400){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}:is(:where(.dark) .dark\:text-green-400){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity))}
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
html:not(.light) { background: #0c0a09; }
|
|
13
13
|
}
|
|
14
14
|
</style>
|
|
15
|
-
<script type="module" crossorigin src="/assets/main-
|
|
16
|
-
<link rel="stylesheet" crossorigin href="/assets/main-
|
|
15
|
+
<script type="module" crossorigin src="/assets/main-Br2tw-87.js"></script>
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/assets/main-DwlbPf8Z.css">
|
|
17
17
|
</head>
|
|
18
18
|
<body class="h-screen">
|
|
19
19
|
<div id="app" class="h-full">
|
package/dist/plugins/index.d.ts
CHANGED
package/dist/plugins/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,cAAc,YAAY,CAAC;AAE3B,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAEjF,6BAA6B;AAC7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzG,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/plugins/types.d.ts
CHANGED
package/dist/plugins/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,25 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
*
|
|
2
|
+
* Model provider module - integrates built-in models with custom models from models.json
|
|
3
|
+
*/
|
|
4
|
+
import { type Model, type Api } from '@mariozechner/pi-ai';
|
|
5
|
+
import type { Config } from '../config/schema.js';
|
|
6
|
+
export declare const PROVIDER_ENV_MAP: Record<string, string[]>;
|
|
7
|
+
/**
|
|
8
|
+
* Get API key from environment variables for a provider
|
|
9
|
+
*/
|
|
10
|
+
export declare function getApiKeyFromEnv(provider: string): string | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve model reference. Supports:
|
|
13
|
+
* - "provider/modelId" format
|
|
14
|
+
* - "modelId" auto-detection via pi-ai or custom models
|
|
15
|
+
* @throws if model not found
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveModel(ref: string): Model<Api>;
|
|
18
|
+
export declare function getModelsByProvider(provider: string): readonly Model<Api>[];
|
|
19
|
+
export declare function getAllProviders(): string[];
|
|
20
|
+
export declare function getApiKey(config: Config | null | undefined, provider: string): string | undefined;
|
|
21
|
+
export declare function isProviderConfigured(config: Config | null | undefined, provider: string): boolean;
|
|
22
|
+
export declare function getConfiguredProviders(config: Config | null | undefined): string[];
|
|
23
|
+
export declare function getAllModels(): readonly Model<Api>[];
|
|
24
|
+
export declare function getAvailableModels(config: Config | null | undefined): readonly Model<Api>[];
|
|
25
|
+
/**
|
|
26
|
+
* Get the first available model with a valid API key.
|
|
27
|
+
* Useful when the configured model doesn't have valid credentials.
|
|
13
28
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
29
|
+
* Priority:
|
|
30
|
+
* 1. Use defaultModel from config if available and has API key
|
|
31
|
+
* 2. Use first available model with valid API key
|
|
32
|
+
* 3. Return undefined if no models are available
|
|
16
33
|
*/
|
|
17
|
-
export
|
|
18
|
-
export type {
|
|
19
|
-
export
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
export declare function getFirstAvailableModel(config: Config | null | undefined): Model<Api> | undefined;
|
|
35
|
+
export type { Model, Api } from '@mariozechner/pi-ai';
|
|
36
|
+
export type ProviderCategory = 'common' | 'specialty' | 'oauth' | 'enterprise';
|
|
37
|
+
export interface ProviderMeta {
|
|
38
|
+
name: string;
|
|
39
|
+
category: ProviderCategory;
|
|
40
|
+
supportsOAuth?: boolean;
|
|
41
|
+
supportsApiKey?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare const PROVIDER_META: Record<string, ProviderMeta>;
|
|
44
|
+
export declare function getSortedProviders(): string[];
|
|
45
|
+
export declare function getProviderDisplayName(provider: string): string;
|
|
46
|
+
export declare function providerSupportsOAuth(provider: string): boolean;
|
|
47
|
+
export declare function providerSupportsApiKey(provider: string): boolean;
|
|
48
|
+
export declare const DEFAULT_MODEL = "anthropic/claude-sonnet-4-5";
|
|
49
|
+
export declare const RECOMMENDED_MODELS: readonly ["anthropic/claude-sonnet-4-5", "openai/gpt-4o", "google/gemini-2.5-flash", "groq/llama-3.3-70b", "deepseek/deepseek-chat"];
|
|
50
|
+
export declare const PROVIDER_PREFIX_PATTERNS: Record<string, string[]>;
|
|
51
|
+
export declare function detectProvider(modelId: string): string | undefined;
|
|
52
|
+
export declare function getProviderEnvVars(provider: string): string[];
|
|
53
|
+
export { ModelRegistry, getModelRegistry, resetModelRegistry } from './model-registry.js';
|