@musnows/scriverse 0.8.5 → 0.8.7
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 +1 -0
- package/dist/ai-model-pricing.js +530 -0
- package/dist/ai-model-pricing.js.map +1 -0
- package/dist/ai-protocol.js +335 -15
- package/dist/ai-protocol.js.map +1 -1
- package/dist/ai-retry.js +1 -1
- package/dist/ai-retry.js.map +1 -1
- package/dist/ai.js +1083 -139
- package/dist/ai.js.map +1 -1
- package/dist/app.js +222 -25
- package/dist/app.js.map +1 -1
- package/dist/attachment-download.js +26 -0
- package/dist/attachment-download.js.map +1 -0
- package/dist/attachment-storage.js +8 -6
- package/dist/attachment-storage.js.map +1 -1
- package/dist/cli-contract.js +6 -4
- package/dist/cli-contract.js.map +1 -1
- package/dist/database.js +363 -4
- package/dist/database.js.map +1 -1
- package/dist/public/ai-image-attachments.d.ts +21 -0
- package/dist/public/ai-image-attachments.js +42 -0
- package/dist/public/ai-usage.d.ts +1 -0
- package/dist/public/ai-usage.js +11 -0
- package/dist/public/app.js +1030 -106
- package/dist/public/display-labels.d.ts +2 -1
- package/dist/public/display-labels.js +6 -6
- package/dist/public/index.html +42 -7
- package/dist/public/model-config.d.ts +6 -4
- package/dist/public/model-config.js +10 -2
- package/dist/public/styles.css +157 -6
- package/dist/s3-backup.js +21 -0
- package/dist/s3-backup.js.map +1 -1
- package/dist/security.js +2 -1
- package/dist/security.js.map +1 -1
- package/dist/server-runtime.js +6 -0
- package/dist/server-runtime.js.map +1 -1
- package/dist/store.js +550 -44
- package/dist/store.js.map +1 -1
- package/dist/upload-limits.js +10 -4
- package/dist/upload-limits.js.map +1 -1
- package/dist/user-auth.js +3 -0
- package/dist/user-auth.js.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/version.js +1 -1
- package/dist/writing-progress-time.js +15 -0
- package/dist/writing-progress-time.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,8 @@ export function reviewStatusLabel(value: unknown): string;
|
|
|
10
10
|
export function taskScopeLabel(value: unknown): string;
|
|
11
11
|
export function providerStatusLabel(value: unknown): string;
|
|
12
12
|
export function providerConnectionLabel(value: unknown): string;
|
|
13
|
-
export
|
|
13
|
+
export type ProviderProtocolOption = { value: string; label: string };
|
|
14
|
+
export function providerProtocolLabel(value: unknown, protocolOptions?: ReadonlyArray<ProviderProtocolOption>): string;
|
|
14
15
|
export function chapterVersionSourceLabel(value: unknown): string;
|
|
15
16
|
export function occurrenceRoleLabel(value: unknown): string;
|
|
16
17
|
export function searchResultTypeLabel(value: unknown): string;
|
|
@@ -65,12 +65,12 @@ export function providerConnectionLabel(value) {
|
|
|
65
65
|
return enumLabel({ unchecked: "未测试", success: "连接正常", failed: "连接失败" }, value, "未知连接状态");
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
export function providerProtocolLabel(value) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
},
|
|
68
|
+
export function providerProtocolLabel(value, protocolOptions = []) {
|
|
69
|
+
const normalized = String(value ?? "").trim();
|
|
70
|
+
const option = Array.isArray(protocolOptions)
|
|
71
|
+
? protocolOptions.find((candidate) => candidate?.value === normalized)
|
|
72
|
+
: null;
|
|
73
|
+
return typeof option?.label === "string" ? option.label : enumLabel({}, normalized, "未知接口协议");
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
export function chapterVersionSourceLabel(value) {
|
package/dist/public/index.html
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
<link rel="icon" href="/icon.svg?v=20260712" type="image/svg+xml">
|
|
11
11
|
<link rel="manifest" href="/site.webmanifest">
|
|
12
12
|
<link rel="stylesheet" href="/vendor/vditor/dist/index.css?v=3.11.2">
|
|
13
|
-
<link rel="stylesheet" href="/styles.css?v=20260816-task-scope-volume-collapse-v2&feature=ai-tool-call-copy-feedback-v2&feature=ai-send-control-v3&feature=character-gender-v1&feature=character-filter-state-v1&feature=relationship-canvas-scale-v1&feature=relationship-table-scroll-v1&feature=galaxy-compact-controls-v2&feature=galaxy-motion-mode-v2&feature=chapter-search-replace-v3&feature=task-auto-run-ring-center-v3&feature=character-relationship-delete-v1&feature=ai-assistant-workspace-v2&feature=mobile-module-tab-position-v1&feature=volume-detail-icon-v1&feature=editor-actions-flow-v1&feature=reader-controls-subpanel-v1&feature=reader-focus-ring-v1&feature=ai-message-actions-v1&feature=assistant-responsive-navigation-v2&feature=ai-composer-square-controls-v2&feature=annotation-line-counts-v1&feature=line-number-gutter-fill-v1&feature=ai-relationship-roleplay-v1&feature=ai-model-picker-v1&feature=markdown-word-count-five-digit-v2&feature=ai-stream-character-count-stable-v1&feature=annotation-marker-offset-v1&feature=mobile-ai-entry-hidden-v1&feature=phone-client-entry-v1&feature=ai-stream-idle-timeout-v1">
|
|
13
|
+
<link rel="stylesheet" href="/styles.css?v=20260816-task-scope-volume-collapse-v2&feature=ai-tool-call-copy-feedback-v2&feature=ai-send-control-v3&feature=character-gender-v1&feature=character-filter-state-v1&feature=relationship-canvas-scale-v1&feature=relationship-table-scroll-v1&feature=galaxy-compact-controls-v2&feature=galaxy-motion-mode-v2&feature=chapter-search-replace-v3&feature=task-auto-run-ring-center-v3&feature=character-relationship-delete-v1&feature=ai-assistant-workspace-v2&feature=mobile-module-tab-position-v1&feature=volume-detail-icon-v1&feature=editor-actions-flow-v1&feature=reader-controls-subpanel-v1&feature=reader-focus-ring-v1&feature=ai-message-actions-v1&feature=assistant-responsive-navigation-v2&feature=ai-composer-square-controls-v2&feature=annotation-line-counts-v1&feature=line-number-gutter-fill-v1&feature=ai-relationship-roleplay-v1&feature=ai-model-picker-v1&feature=markdown-word-count-five-digit-v2&feature=ai-stream-character-count-stable-v1&feature=annotation-marker-offset-v1&feature=mobile-ai-entry-hidden-v1&feature=phone-client-entry-v1&feature=ai-stream-idle-timeout-v1&feature=ai-user-message-width-v2&feature=ai-chat-image-attachments-v9&feature=ai-message-image-preview-v1&feature=ai-thinking-scroll-v2&feature=toast-click-dismiss-v3&feature=character-avatar-v6&feature=admin-ai-conversations-v1&feature=ai-usage-pricing-v1&feature=ai-usage-pricing-badge-v2&feature=ai-token-quota-positive-v5&feature=ai-token-usage-details-v1&feature=ai-token-usage-details-centered-v1&feature=ai-stream-connection-seconds-v1">
|
|
14
14
|
</head>
|
|
15
15
|
<body class="auth-pending">
|
|
16
16
|
<section id="auth-view" class="auth-view hidden" aria-labelledby="auth-title">
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
<button type="button" data-module="races"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><circle cx="11" cy="4" r="2"/><circle cx="18" cy="8" r="2"/><circle cx="20" cy="16" r="2"/><path d="M9 10a5 5 0 0 1 5 5v3.5a3.5 3.5 0 0 1-6.84 1.045Q6.52 17.48 4.46 16.84A3.5 3.5 0 0 1 5.5 10Z"/></svg>种族</button>
|
|
135
135
|
<button class="ai-analysis-entry" type="button" data-module="tasks"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/><path d="M20 3v4"/><path d="M22 5h-4"/><path d="M4 17v2"/><path d="M5 18H3"/></svg>AI 分析</button>
|
|
136
136
|
<button id="module-more-button" type="button" aria-expanded="false"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg><span class="nav-label">更多</span></button>
|
|
137
|
-
<button id="ai-assistant-entry" class="module-nav-secondary hidden ai-assistant-entry" type="button" aria-controls="ai-panel" aria-expanded="false"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="
|
|
137
|
+
<button id="ai-assistant-entry" class="module-nav-secondary hidden ai-assistant-entry" type="button" aria-controls="ai-panel" aria-expanded="false"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 5.25a3.25 3.25 0 0 0-5.95 1.82A3.74 3.74 0 0 0 4.7 13.5a3.25 3.25 0 0 0 4.55 4.53A3.6 3.6 0 0 0 12 19.5"></path><path d="M12 5.25a3.25 3.25 0 0 1 5.95 1.82 3.74 3.74 0 0 1 1.35 6.43 3.25 3.25 0 0 1-4.55 4.53A3.6 3.6 0 0 1 12 19.5"></path><path d="M12 5.25v14.25"></path><path d="M8 9.1c1.1.1 2 .9 2.25 1.95"></path><path d="M16 9.1c-1.1.1-2 .9-2.25 1.95"></path></svg>创作助手</button>
|
|
138
138
|
<button id="reader-open-button" class="module-nav-secondary hidden" type="button" aria-label="打开沉浸式阅读预览" title="阅读预览"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M3 5.5A2.5 2.5 0 0 1 5.5 3H11v16H5.5A2.5 2.5 0 0 0 3 21.5Z"/><path d="M21 5.5A2.5 2.5 0 0 0 18.5 3H13v16h5.5a2.5 2.5 0 0 1 2.5 2.5Z"/></svg>阅读预览</button>
|
|
139
139
|
<button class="module-nav-secondary hidden" type="button" data-module="comments"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="M21 15a4 4 0 0 1-4 4H8l-5 3V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4Z"/><path d="M8 9h8M8 13h5"/></svg><span class="nav-label">正文评论</span></button>
|
|
140
140
|
<button class="module-nav-secondary hidden" type="button" data-module="outlines"><svg class="nav-icon" viewBox="0 0 24 24" aria-hidden="true"><path d="m3 17 2 2 4-4"/><path d="m3 7 2 2 4-4"/><path d="M13 6h8"/><path d="M13 12h8"/><path d="M13 18h8"/></svg><span class="nav-label">大纲/伏笔</span></button>
|
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
<div class="settings-detail-actions">
|
|
188
188
|
<button id="platform-usage-return" class="ghost-button settings-parent-button" type="button">返回设置</button>
|
|
189
189
|
<button id="platform-usage-refresh" class="ghost-button" type="button">刷新</button>
|
|
190
|
+
<button id="platform-usage-pricing-refresh" class="ghost-button hidden" type="button">刷新模型价格</button>
|
|
190
191
|
</div>
|
|
191
192
|
</div>
|
|
192
193
|
<div id="platform-usage-content" class="module-content usage-page-content"></div>
|
|
@@ -214,6 +215,7 @@
|
|
|
214
215
|
<button id="platform-ai-button" class="settings-hub-card hidden" type="button" data-settings-action="ai"><span class="settings-card-mark">AI</span><strong>AI 管理</strong><small>供应商、模型、上下文与全局提示词</small></button>
|
|
215
216
|
<button id="platform-usage-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">T</span><strong>Token 用量</strong><small>总消耗、缓存命中率、每日网格与作品明细</small></button>
|
|
216
217
|
<button id="user-management-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">人</span><strong>用户管理</strong><small>管理员、普通用户与账户状态</small></button>
|
|
218
|
+
<button id="admin-ai-conversations-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">话</span><strong>Chat 对话</strong><small>查看所有作品、所有用户的对话记录</small></button>
|
|
217
219
|
<button id="platform-ui-settings-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">界</span><strong>界面与分页</strong><small>设置通知位置、银河图性能及各模块的单页数量</small></button>
|
|
218
220
|
<button id="s3-backup-button" class="settings-hub-card hidden" type="button"><span class="settings-card-mark">S3</span><strong>S3 备份</strong><small>将整个系统的数据库和图片同步到多个目标</small></button>
|
|
219
221
|
<button id="collaboration-button" class="settings-hub-card" type="button"><span class="settings-card-mark">协</span><strong>作品协作</strong><small>邀请注册用户共同编辑当前作品</small></button>
|
|
@@ -330,7 +332,6 @@
|
|
|
330
332
|
<div class="ai-heading-title"><span id="ai-status-dot" class="status-dot" role="status" aria-label="创作助手状态:正常" title="创作助手状态:正常"></span><strong>创作助手</strong></div>
|
|
331
333
|
<div class="ai-heading-actions">
|
|
332
334
|
<button id="ai-conversation-switcher" class="ai-conversation-switcher" type="button" aria-label="切换打开的对话" aria-controls="ai-conversation-switcher-menu" aria-expanded="false" aria-haspopup="dialog" title="切换打开的对话"><span id="ai-conversation-title">新对话</span><small id="ai-open-conversation-count">1</small><svg viewBox="0 0 12 8" aria-hidden="true" focusable="false"><path d="M1 1.5 6 6.5l5-5"></path></svg></button>
|
|
333
|
-
<button id="ai-workspace-close" class="hidden" type="button" aria-label="退出多会话工作台">退出</button>
|
|
334
335
|
<button id="ai-history-toggle" type="button" aria-label="历史记录" aria-controls="ai-history-dialog" aria-expanded="false" aria-haspopup="dialog" title="历史记录"><svg class="ai-heading-action-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M3 12a9 9 0 1 0 3-6.7L3 8"></path><path d="M3 3v5h5M12 7v5l3.5 2"></path></svg></button>
|
|
335
336
|
<button id="ai-new-conversation" type="button" aria-label="新建对话" title="新建对话">+</button>
|
|
336
337
|
</div>
|
|
@@ -384,6 +385,9 @@
|
|
|
384
385
|
</select>
|
|
385
386
|
</div>
|
|
386
387
|
<div class="prompt-composer">
|
|
388
|
+
<div id="ai-image-attachments" class="ai-image-attachments hidden" aria-label="待发送的图片附件" aria-live="polite"></div>
|
|
389
|
+
<button id="ai-attachment-button" class="ai-attachment-button hidden" type="button" aria-label="添加图片附件" title="添加图片附件"><svg class="ai-image-button-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><rect x="3.5" y="4.5" width="17" height="15" rx="2"></rect><circle cx="9" cy="10" r="1.5"></circle><path d="m5.5 17 4.4-4.4 3.3 3.1 2.2-2.2 3.1 3.5"></path></svg></button>
|
|
390
|
+
<input id="ai-attachment-input" class="ai-attachment-input" type="file" accept="image/png,image/jpeg,.jpg,.jpeg" multiple aria-label="选择图片附件">
|
|
387
391
|
<div id="ai-prompt" class="ai-prompt" contenteditable="true" role="textbox" aria-multiline="true" aria-autocomplete="list" aria-controls="ai-mention-menu" aria-haspopup="listbox" aria-expanded="false" aria-keyshortcuts="Enter" title="Enter 发送,Shift+Enter 换行" data-placeholder="告诉 AI 你想讨论或修改什么……"></div>
|
|
388
392
|
<div id="ai-mention-menu" class="ai-mention-menu hidden" role="listbox" aria-label="引用角色、设定、章节或上下文能力"></div>
|
|
389
393
|
<div class="prompt-composer-actions">
|
|
@@ -395,7 +399,8 @@
|
|
|
395
399
|
<button id="ai-model-picker" class="ai-model-picker" type="button" aria-haspopup="dialog" aria-expanded="false" aria-controls="ai-model-popover" aria-label="选择实际使用模型" title="选择实际使用模型"><svg class="ai-model-picker-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M12 5.25a3.25 3.25 0 0 0-5.95 1.82A3.74 3.74 0 0 0 4.7 13.5a3.25 3.25 0 0 0 4.55 4.53A3.6 3.6 0 0 0 12 19.5"></path><path d="M12 5.25a3.25 3.25 0 0 1 5.95 1.82 3.74 3.74 0 0 1 1.35 6.43 3.25 3.25 0 0 1-4.55 4.53A3.6 3.6 0 0 1 12 19.5"></path><path d="M12 5.25v14.25"></path><path d="M8 9.1c1.1.1 2 .9 2.25 1.95"></path><path d="M16 9.1c-1.1.1-2 .9-2.25 1.95"></path><path d="M8.3 15.3c1.15-.05 2.1-.85 2.3-1.95"></path><path d="M15.7 15.3c-1.15-.05-2.1-.85-2.3-1.95"></path></svg></button>
|
|
396
400
|
<section id="ai-model-popover" class="ai-model-popover hidden" role="dialog" aria-labelledby="ai-model-popover-title">
|
|
397
401
|
<label id="ai-model-popover-title" for="ai-model">实际使用模型</label>
|
|
398
|
-
<select id="ai-model" aria-label="实际使用模型"><option value="">使用创作助手时加载模型</option></select>
|
|
402
|
+
<select id="ai-model" class="ai-model-native-select" aria-label="实际使用模型"><option value="">使用创作助手时加载模型</option></select>
|
|
403
|
+
<div id="ai-model-options" class="ai-model-options" role="listbox" aria-labelledby="ai-model-popover-title"></div>
|
|
399
404
|
</section>
|
|
400
405
|
<button id="ai-send" class="ai-send-button" type="button" data-state="send" aria-label="发送消息" title="发送消息"><svg class="ai-send-button-icon" viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M21 3 9.5 14.5M21 3l-7 18-4.5-6.5L3 10l18-7Z"></path></svg></button>
|
|
401
406
|
</div>
|
|
@@ -499,7 +504,7 @@
|
|
|
499
504
|
</div>
|
|
500
505
|
<input id="new-import-file" class="hidden" type="file" accept=".txt,.docx">
|
|
501
506
|
<input id="cover-file" class="hidden" type="file" accept="image/png,image/jpeg,image/webp">
|
|
502
|
-
<input id="avatar-file" class="hidden" type="file" accept="image/png,image/jpeg,image/webp
|
|
507
|
+
<input id="avatar-file" class="hidden" type="file" accept="image/png,image/jpeg,image/webp">
|
|
503
508
|
|
|
504
509
|
<dialog id="background-task-dialog" class="dialog wide-dialog background-task-dialog" aria-labelledby="background-task-dialog-title">
|
|
505
510
|
<form method="dialog">
|
|
@@ -921,6 +926,28 @@
|
|
|
921
926
|
</div>
|
|
922
927
|
</dialog>
|
|
923
928
|
|
|
929
|
+
<dialog id="admin-ai-conversations-dialog" class="dialog wide-dialog admin-ai-conversations-dialog" aria-labelledby="admin-ai-conversations-title">
|
|
930
|
+
<div class="dialog-header">
|
|
931
|
+
<div><span class="eyebrow">系统管理员</span><h2 id="admin-ai-conversations-title">Chat 对话列表</h2><p class="dialog-header-meta">只读查看平台内所有作品和用户的对话。</p></div>
|
|
932
|
+
<div class="settings-dialog-header-actions">
|
|
933
|
+
<button id="admin-ai-conversations-filter-toggle" class="module-filter-toggle" type="button" aria-label="筛选 Chat 对话" aria-controls="admin-ai-conversations-filter-panel" aria-expanded="false" title="筛选 Chat 对话"><svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"><path d="M4 5h16l-6.5 7.2v5.3l-3 1.5v-6.8L4 5Z"></path></svg></button>
|
|
934
|
+
<button id="admin-ai-conversations-settings-return" class="ghost-button settings-parent-button" type="button">返回设置</button>
|
|
935
|
+
<button id="admin-ai-conversations-close" class="dialog-close" aria-label="关闭 Chat 对话列表" type="button">×</button>
|
|
936
|
+
</div>
|
|
937
|
+
</div>
|
|
938
|
+
<div class="admin-ai-conversations-body">
|
|
939
|
+
<form id="admin-ai-conversations-filter-panel" class="admin-ai-conversations-filters hidden" method="get">
|
|
940
|
+
<label>关键词<input id="admin-ai-conversations-query" name="q" type="search" maxlength="200" placeholder="对话、作品或用户"></label>
|
|
941
|
+
<label>作品<select id="admin-ai-conversations-work" name="workId"><option value="">全部作品</option></select></label>
|
|
942
|
+
<label>用户<select id="admin-ai-conversations-user" name="userId"><option value="">全部用户</option></select></label>
|
|
943
|
+
<div class="admin-ai-conversations-filter-actions"><button id="admin-ai-conversations-reset" class="ghost-button" type="button">重置</button><button class="primary-button" type="submit">应用筛选</button></div>
|
|
944
|
+
</form>
|
|
945
|
+
<p id="admin-ai-conversations-summary" class="admin-ai-conversations-summary" role="status" aria-live="polite">正在读取对话……</p>
|
|
946
|
+
<div id="admin-ai-conversations-list" class="admin-ai-conversations-list" aria-live="polite"></div>
|
|
947
|
+
</div>
|
|
948
|
+
<div class="dialog-actions"><button id="admin-ai-conversations-refresh" class="ghost-button" type="button">刷新</button><button id="admin-ai-conversations-load-more" class="primary-button hidden" type="button">加载更多</button></div>
|
|
949
|
+
</dialog>
|
|
950
|
+
|
|
924
951
|
<dialog id="chapter-annotations-dialog" class="dialog wide-dialog chapter-annotations-dialog" aria-labelledby="chapter-annotations-title">
|
|
925
952
|
<div class="dialog-header"><div><span class="eyebrow">正文协作</span><h2 id="chapter-annotations-title">正文评论</h2><p id="chapter-annotations-meta" class="dialog-header-meta">在正文行上点击右键即可添加评论。</p></div><button id="chapter-annotations-close" class="dialog-close" aria-label="关闭正文评论" type="button">×</button></div>
|
|
926
953
|
<div id="chapter-annotations-list" class="chapter-annotations-list" aria-live="polite"></div>
|
|
@@ -1066,7 +1093,7 @@
|
|
|
1066
1093
|
<dialog id="avatar-crop-dialog" class="dialog avatar-crop-dialog" aria-labelledby="avatar-crop-dialog-title" aria-describedby="avatar-crop-dialog-description">
|
|
1067
1094
|
<div class="dialog-header">
|
|
1068
1095
|
<div>
|
|
1069
|
-
<span class="eyebrow">个人账户</span>
|
|
1096
|
+
<span id="avatar-crop-dialog-eyebrow" class="eyebrow">个人账户</span>
|
|
1070
1097
|
<h2 id="avatar-crop-dialog-title">裁剪头像</h2>
|
|
1071
1098
|
<p id="avatar-crop-dialog-description" class="dialog-header-meta">拖动选区或四角手柄调整范围,圆形预览即最终显示效果。</p>
|
|
1072
1099
|
</div>
|
|
@@ -1144,6 +1171,14 @@
|
|
|
1144
1171
|
</div>
|
|
1145
1172
|
</dialog>
|
|
1146
1173
|
|
|
1174
|
+
<dialog id="ai-image-preview-dialog" class="dialog ai-image-preview-dialog" aria-labelledby="ai-image-preview-title">
|
|
1175
|
+
<div class="dialog-header">
|
|
1176
|
+
<div><span id="ai-image-preview-title" class="eyebrow">图片附件</span><p id="ai-image-preview-meta" class="dialog-header-meta"></p></div>
|
|
1177
|
+
<button id="ai-image-preview-close" class="dialog-close" aria-label="关闭图片预览" type="button">×</button>
|
|
1178
|
+
</div>
|
|
1179
|
+
<div class="ai-image-preview-body"><img id="ai-image-preview-image" alt=""></div>
|
|
1180
|
+
</dialog>
|
|
1181
|
+
|
|
1147
1182
|
<dialog id="ai-history-dialog" class="dialog wide-dialog ai-history-dialog" aria-labelledby="ai-history-dialog-title">
|
|
1148
1183
|
<div class="dialog-header">
|
|
1149
1184
|
<div><span class="eyebrow">对话管理</span><h2 id="ai-history-dialog-title">历史记录</h2></div>
|
|
@@ -1210,6 +1245,6 @@
|
|
|
1210
1245
|
<div id="auth-loading" class="auth-loading" role="status" aria-label="正在载入工作台"></div>
|
|
1211
1246
|
<script id="vditorIconScript" src="/vendor/vditor/dist/js/icons/ant.js?v=3.11.2"></script>
|
|
1212
1247
|
<script src="/vendor/vditor/dist/index.min.js?v=3.11.2"></script>
|
|
1213
|
-
<script type="module" src="/app.js?v=20260816-extended-thinking-effort-v1&feature=ai-tool-call-copy-feedback-v2&feature=ai-send-control-v2&feature=analysis-task-queue-refresh-v1&feature=character-gender-v1&feature=character-filter-state-v1&feature=relationship-canvas-scale-v1&feature=relationship-table-scroll-v1&feature=ai-session-id-copy-v2&feature=galaxy-motion-mode-v3&feature=galaxy-edge-label-threshold-v1&feature=calculate-time-tool-v1&feature=analysis-task-expired-toast-v1&feature=global-replace-volume-v1&feature=chapter-search-replace-v1&feature=chapter-save-toast-v1&feature=character-relationship-delete-v1&feature=character-relationship-group-v1&feature=analysis-task-stability-delay-v1&feature=ai-assistant-workspace-
|
|
1248
|
+
<script type="module" src="/app.js?v=20260816-extended-thinking-effort-v1&feature=ai-tool-call-copy-feedback-v2&feature=ai-send-control-v2&feature=analysis-task-queue-refresh-v1&feature=character-gender-v1&feature=character-filter-state-v1&feature=relationship-canvas-scale-v1&feature=relationship-table-scroll-v1&feature=ai-session-id-copy-v2&feature=galaxy-motion-mode-v3&feature=galaxy-edge-label-threshold-v1&feature=calculate-time-tool-v1&feature=analysis-task-expired-toast-v1&feature=global-replace-volume-v1&feature=chapter-search-replace-v1&feature=chapter-save-toast-v1&feature=character-relationship-delete-v1&feature=character-relationship-group-v1&feature=analysis-task-stability-delay-v1&feature=ai-assistant-workspace-v2&feature=volume-detail-icon-v1&feature=volume-story-order-v1&feature=reader-manual-chapter-navigation-v1&feature=ai-message-reference-badges-v1&feature=ai-message-actions-v1&feature=assistant-responsive-navigation-v3&feature=annotation-permissions-v1&feature=annotation-line-counts-v1&feature=ai-relationship-roleplay-v1&feature=ai-roleplay-user-character-visibility-v1&feature=ai-roleplay-story-recall-v1&feature=ai-model-picker-v1&feature=ai-fork-model-unlock-v1&feature=context-percent-format-v1&feature=annotation-precise-locate-v1&feature=markdown-word-count-stable-v1&feature=ai-stream-character-count-stable-v2&feature=ai-process-empty-intermediate-v1&feature=ai-feed-scroll-follow-v1&feature=ai-message-retry-v1&feature=ai-stream-idle-timeout-v2&feature=ai-config-delete-v1&feature=ai-provider-protocol-options-v1&feature=ai-provider-thinking-type-v1&feature=ai-chat-image-attachments-v8&feature=ai-message-image-preview-v1&feature=ai-thinking-scroll-v2&feature=ai-image-conversation-model-lock-v1&feature=toast-click-dismiss-v2&feature=system-restart-dialog-delay-v1&feature=character-avatar-v6&feature=character-death-position-v1&feature=admin-ai-conversations-v1&feature=ai-usage-pricing-v1&feature=ai-usage-pricing-badge-v2&feature=ai-usage-pricing-label-v1&feature=ai-usage-token-breakdown-v1&feature=ai-usage-pricing-cache-v2&feature=ai-usage-pricing-manual-refresh-v1&feature=ai-monthly-token-quota-v1&feature=ai-provider-token-quota-v1&feature=ai-token-quota-positive-v6&feature=ai-model-thinking-label-v1&feature=ai-model-picker-focus-v1&feature=ai-provider-model-import-v1&feature=ai-assistant-brain-icon-v1&feature=ai-token-usage-details-v1&feature=ai-token-usage-details-centered-v1&feature=ai-token-usage-raw-input-v1&feature=ai-stream-connection-seconds-v1&feature=phone-client-entry-v1&feature=ai-usage-pricing-cache-v1&feature=ai-model-thinking-label-v3&feature=ai-roleplay-speaker-label-v1"></script>
|
|
1214
1249
|
</body>
|
|
1215
1250
|
</html>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export const MODEL_PURPOSE_OPTIONS: ReadonlyArray<readonly [string, string]>;
|
|
2
|
-
export const MODEL_THINKING_EFFORT_OPTIONS: ReadonlyArray<readonly ["default" | "low" | "medium" | "high" | "xhigh" | "max", string]>;
|
|
2
|
+
export const MODEL_THINKING_EFFORT_OPTIONS: ReadonlyArray<readonly ["default" | "auto" | "low" | "medium" | "high" | "xhigh" | "max", string]>;
|
|
3
3
|
export const MIN_MODEL_CONTEXT_WINDOW: number;
|
|
4
4
|
export const RECOMMENDED_MODEL_CONTEXT_WINDOW: number;
|
|
5
|
-
export
|
|
5
|
+
export type ModelProviderProtocolOption = { value: string; supportsMultimodal?: boolean };
|
|
6
|
+
export function supportsMultimodalModelProtocol(protocol: string | null | undefined, protocolOptions?: ReadonlyArray<ModelProviderProtocolOption>): boolean;
|
|
6
7
|
|
|
7
8
|
export type ModelFormValues = {
|
|
8
9
|
displayName: string;
|
|
@@ -12,7 +13,7 @@ export type ModelFormValues = {
|
|
|
12
13
|
temperature: number;
|
|
13
14
|
maxTokens: number;
|
|
14
15
|
thinkingEnabled: boolean;
|
|
15
|
-
thinkingEffort: "default" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
16
|
+
thinkingEffort: "default" | "auto" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
16
17
|
multimodalEnabled: boolean;
|
|
17
18
|
imageToolDefault: boolean;
|
|
18
19
|
enabled: boolean;
|
|
@@ -22,5 +23,6 @@ export function normalizeModelPurposes(purposes: unknown): string[];
|
|
|
22
23
|
export function isKimiModelId(modelId: unknown): boolean;
|
|
23
24
|
export function modelContextWindowGuidance(value: unknown): { belowMinimum: boolean; showRecommendation: boolean };
|
|
24
25
|
export function modelFormValues(model?: Record<string, unknown> | null): ModelFormValues;
|
|
25
|
-
export function modelPayload(values: ModelFormValues, existingPreset?: Record<string, unknown>): Record<string, unknown> & { thinkingEnabled: boolean; thinkingEffort: "default" | "low" | "medium" | "high" | "xhigh" | "max" };
|
|
26
|
+
export function modelPayload(values: ModelFormValues, existingPreset?: Record<string, unknown>): Record<string, unknown> & { thinkingEnabled: boolean; thinkingEffort: "default" | "auto" | "low" | "medium" | "high" | "xhigh" | "max" };
|
|
26
27
|
export function modelOptionLabel(model: Record<string, unknown> | null | undefined): string;
|
|
28
|
+
export function modelThinkingEffortLabel(model: Record<string, unknown> | null | undefined): string;
|
|
@@ -11,6 +11,7 @@ export const MODEL_PURPOSE_OPTIONS = Object.freeze([
|
|
|
11
11
|
|
|
12
12
|
export const MODEL_THINKING_EFFORT_OPTIONS = Object.freeze([
|
|
13
13
|
["default", "模型默认"],
|
|
14
|
+
["auto", "自动(auto)"],
|
|
14
15
|
["low", "低(low)"],
|
|
15
16
|
["medium", "中(medium)"],
|
|
16
17
|
["high", "高(high)"],
|
|
@@ -23,8 +24,9 @@ const modelThinkingEfforts = new Set(MODEL_THINKING_EFFORT_OPTIONS.map(([value])
|
|
|
23
24
|
export const MIN_MODEL_CONTEXT_WINDOW = 32_768;
|
|
24
25
|
export const RECOMMENDED_MODEL_CONTEXT_WINDOW = 128_000;
|
|
25
26
|
|
|
26
|
-
export function supportsMultimodalModelProtocol(protocol) {
|
|
27
|
-
return
|
|
27
|
+
export function supportsMultimodalModelProtocol(protocol, protocolOptions = []) {
|
|
28
|
+
return Array.isArray(protocolOptions)
|
|
29
|
+
&& protocolOptions.some((option) => option?.value === protocol && option?.supportsMultimodal === true);
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
const purposeAliases = new Map([
|
|
@@ -99,3 +101,9 @@ export function modelOptionLabel(model) {
|
|
|
99
101
|
const modelName = String(model?.displayName ?? model?.modelId ?? "").trim();
|
|
100
102
|
return [providerName, modelName].filter(Boolean).join(" · ");
|
|
101
103
|
}
|
|
104
|
+
|
|
105
|
+
export function modelThinkingEffortLabel(model) {
|
|
106
|
+
if (model?.thinkingEnabled !== true) return "";
|
|
107
|
+
const thinkingEffort = String(model?.thinkingEffort ?? "").trim().toLowerCase();
|
|
108
|
+
return thinkingEffort && thinkingEffort !== "default" ? thinkingEffort : "default";
|
|
109
|
+
}
|
package/dist/public/styles.css
CHANGED
|
@@ -482,6 +482,9 @@ input[type="checkbox"][hidden] { display: none; }
|
|
|
482
482
|
.user-avatar { position: relative; display: inline-grid; flex: 0 0 auto; place-items: center; width: 36px; height: 36px; overflow: hidden; border-radius: 50%; background: var(--accent); color: white; font-size: 13px; font-weight: 650; line-height: 1; }
|
|
483
483
|
.user-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
|
|
484
484
|
.user-avatar-fallback { display: grid; width: 100%; height: 100%; place-items: center; }
|
|
485
|
+
.character-avatar { position: relative; display: inline-grid; flex: 0 0 auto; place-items: center; width: 36px; height: 36px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--accent) 30%, var(--line)); border-radius: 50%; background: color-mix(in srgb, var(--accent) 14%, var(--surface)); color: var(--accent-dark); font-size: 13px; font-weight: 650; line-height: 1; }
|
|
486
|
+
.character-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
|
|
487
|
+
.character-avatar-fallback { display: grid; width: 100%; height: 100%; place-items: center; }
|
|
485
488
|
.account-button > .account-avatar { width: 26px; height: 26px; font-size: 11px; }
|
|
486
489
|
.account-button > span:last-child { max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11px; }
|
|
487
490
|
.account-menu { position: absolute; z-index: 80; top: 48px; right: 84px; display: grid; width: 180px; min-width: 0; gap: 4px; padding: 12px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface); box-shadow: var(--shadow); }
|
|
@@ -664,6 +667,9 @@ body.is-panel-resizing { cursor: col-resize; user-select: none; }
|
|
|
664
667
|
.settings-work-note { max-width: 1000px; margin: 18px auto 0; color: var(--muted); font-size: 11px; }
|
|
665
668
|
.usage-page-content { width: 100%; max-width: 1400px; margin: 0 auto; padding-top: 0; }
|
|
666
669
|
.usage-overview { min-width: 0; container-name: usage-overview; container-type: inline-size; }
|
|
670
|
+
.usage-overview-header { align-items: flex-start; gap: 16px; }
|
|
671
|
+
.usage-overview-header > div { min-width: 0; }
|
|
672
|
+
.usage-details-button { flex: 0 0 auto; min-height: 32px; padding: 7px 11px; font-size: 11px; }
|
|
667
673
|
.usage-stat-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
|
|
668
674
|
.usage-stat {
|
|
669
675
|
display: grid;
|
|
@@ -676,7 +682,10 @@ body.is-panel-resizing { cursor: col-resize; user-select: none; }
|
|
|
676
682
|
background: var(--surface-soft);
|
|
677
683
|
}
|
|
678
684
|
.usage-stat.is-primary { border-color: color-mix(in srgb, var(--accent) 42%, var(--line)); background: color-mix(in srgb, var(--accent) 6%, var(--surface-soft)); }
|
|
685
|
+
.usage-stat-label { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; }
|
|
679
686
|
.usage-stat > span { color: var(--muted); font-size: 10px; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; }
|
|
687
|
+
.usage-stat-label > span:first-child { min-width: 0; overflow: hidden; color: var(--muted); font-size: 10px; font-weight: 600; letter-spacing: .06em; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; }
|
|
688
|
+
.usage-cost-bubble { flex: 0 0 auto; max-width: 100%; padding: 6px 10px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--accent) 62%, var(--line)); border-radius: 999px; background: color-mix(in srgb, var(--accent) 22%, var(--surface)); box-shadow: 0 4px 12px color-mix(in srgb, var(--accent) 14%, transparent); color: var(--accent-dark); font: 700 10px/1.1 var(--font-latin), var(--font-cjk), monospace; letter-spacing: .02em; text-overflow: ellipsis; white-space: nowrap; }
|
|
680
689
|
.usage-stat strong { margin: 10px 0 5px; overflow: hidden; color: var(--ink); font: 600 clamp(23px, 2.8vw, 34px)/1 var(--font-latin), ui-monospace, monospace; letter-spacing: -.035em; text-overflow: ellipsis; white-space: nowrap; }
|
|
681
690
|
.usage-stat.is-primary strong { color: var(--accent-dark); }
|
|
682
691
|
.usage-stat small { overflow-wrap: anywhere; color: var(--muted); font-size: 9px; line-height: 1.45; }
|
|
@@ -732,10 +741,41 @@ body.is-panel-resizing { cursor: col-resize; user-select: none; }
|
|
|
732
741
|
.usage-work-table th:first-child, .usage-work-table td:first-child { text-align: left; }
|
|
733
742
|
.usage-work-table tbody th { max-width: 320px; overflow: hidden; color: var(--ink); font-weight: 600; text-overflow: ellipsis; }
|
|
734
743
|
.usage-work-table tbody tr:last-child > * { border-bottom: 0; }
|
|
744
|
+
.toast.token-usage-details-toast {
|
|
745
|
+
display: grid;
|
|
746
|
+
grid-template-rows: auto minmax(0, 1fr);
|
|
747
|
+
width: min(720px, calc(100vw - 48px));
|
|
748
|
+
max-width: none;
|
|
749
|
+
max-height: min(72dvh, 560px);
|
|
750
|
+
padding: 0;
|
|
751
|
+
overflow: hidden;
|
|
752
|
+
border-color: color-mix(in srgb, var(--accent) 42%, var(--line));
|
|
753
|
+
background: var(--panel);
|
|
754
|
+
color: var(--ink);
|
|
755
|
+
pointer-events: auto;
|
|
756
|
+
}
|
|
757
|
+
.token-usage-details-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 11px 12px 10px 14px; border-bottom: 1px solid var(--line); }
|
|
758
|
+
.token-usage-details-heading { display: flex; min-width: 0; align-items: center; gap: 8px; }
|
|
759
|
+
.token-usage-details-heading strong { font-size: 12px; }
|
|
760
|
+
.token-usage-details-heading span { min-width: 0; overflow: hidden; color: var(--accent-dark); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
|
|
761
|
+
.token-usage-details-close { flex: 0 0 auto; min-height: 28px; padding: 5px 9px; font-size: 10px; }
|
|
762
|
+
.token-usage-details-body { display: grid; gap: 10px; min-height: 0; padding: 12px 14px 14px; overflow-y: auto; color: var(--muted); font-size: 11px; line-height: 1.6; overscroll-behavior: contain; }
|
|
763
|
+
.token-usage-details-note { margin: 0; }
|
|
764
|
+
.token-usage-details-table-scroll { min-width: 0; overflow-x: auto; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }
|
|
765
|
+
.token-usage-details-table { width: 100%; min-width: 690px; border-collapse: collapse; color: var(--ink); font: 10px/1.45 var(--font-latin), var(--font-cjk), monospace; }
|
|
766
|
+
.token-usage-details-table caption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
|
|
767
|
+
.token-usage-details-table th, .token-usage-details-table td { padding: 9px 10px; border-bottom: 1px solid var(--line); text-align: right; white-space: nowrap; }
|
|
768
|
+
.token-usage-details-table thead th { background: var(--surface-soft); color: var(--muted); font-size: 9px; font-weight: 600; letter-spacing: .03em; }
|
|
769
|
+
.token-usage-details-table th:first-child, .token-usage-details-table td:first-child { text-align: left; }
|
|
770
|
+
.token-usage-details-table tbody th { max-width: 240px; overflow: hidden; text-overflow: ellipsis; font-weight: 600; }
|
|
771
|
+
.token-usage-details-table tfoot th, .token-usage-details-table tfoot td { border-top: 1px solid color-mix(in srgb, var(--accent) 38%, var(--line)); border-bottom: 0; background: color-mix(in srgb, var(--accent) 6%, var(--surface-soft)); font-weight: 700; }
|
|
772
|
+
.token-usage-details-table tbody tr:last-child > * { border-bottom: 0; }
|
|
735
773
|
@container usage-overview (max-width: 760px) {
|
|
736
774
|
.usage-stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
737
775
|
}
|
|
738
776
|
@container usage-overview (max-width: 420px) {
|
|
777
|
+
.usage-overview-header { flex-wrap: wrap; }
|
|
778
|
+
.usage-details-button { width: 100%; }
|
|
739
779
|
.usage-stat-grid { grid-template-columns: minmax(0, 1fr); }
|
|
740
780
|
}
|
|
741
781
|
.product-footer { display: flex; flex: 0 0 auto; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px 12px; width: 100%; max-width: 1400px; margin: auto auto 0; padding-top: 20px; border-top: 1px solid color-mix(in srgb, var(--line) 76%, transparent); color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
@@ -806,6 +846,28 @@ body.is-panel-resizing { cursor: col-resize; user-select: none; }
|
|
|
806
846
|
cursor: not-allowed;
|
|
807
847
|
opacity: .46;
|
|
808
848
|
}
|
|
849
|
+
.dialog.admin-ai-conversations-dialog { width: min(1040px, 94vw); height: min(760px, calc(100dvh - 24px)); max-height: calc(100dvh - 24px); overflow: hidden; }
|
|
850
|
+
.admin-ai-conversations-dialog { grid-template-rows: auto minmax(0, 1fr) auto; }
|
|
851
|
+
.admin-ai-conversations-dialog[open] { display: grid; }
|
|
852
|
+
.admin-ai-conversations-body { display: grid; grid-template-rows: auto auto minmax(0, 1fr); gap: 12px; min-height: 0; padding: 16px 24px 0; }
|
|
853
|
+
.admin-ai-conversations-filters { display: grid; grid-template-columns: minmax(220px, 1.4fr) repeat(2, minmax(160px, 1fr)) auto; align-items: end; gap: 10px; padding: 13px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-soft); }
|
|
854
|
+
.admin-ai-conversations-filters label { display: grid; gap: 6px; min-width: 0; color: var(--muted); font-size: 10px; font-weight: 650; }
|
|
855
|
+
.admin-ai-conversations-filters :is(input, select) { width: 100%; min-height: 36px; padding: 7px 10px; border: 1px solid var(--line); border-radius: 4px; background-color: var(--surface); color: var(--ink); font-size: 12px; }
|
|
856
|
+
.admin-ai-conversations-filter-actions { display: flex; gap: 7px; }
|
|
857
|
+
.admin-ai-conversations-filter-actions button { min-height: 36px; white-space: nowrap; }
|
|
858
|
+
.admin-ai-conversations-summary { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.5; }
|
|
859
|
+
.admin-ai-conversations-list { display: grid; align-content: start; gap: 9px; min-height: 0; overflow-y: auto; padding: 0 2px 16px 0; }
|
|
860
|
+
.admin-ai-conversation-row { display: grid; gap: 11px; min-width: 0; padding: 14px 15px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-soft); }
|
|
861
|
+
.admin-ai-conversation-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; min-width: 0; }
|
|
862
|
+
.admin-ai-conversation-heading > div { display: grid; gap: 4px; min-width: 0; }
|
|
863
|
+
.admin-ai-conversation-heading strong { overflow: hidden; color: var(--ink); font-size: 13px; font-weight: 650; line-height: 1.4; text-overflow: ellipsis; white-space: nowrap; }
|
|
864
|
+
.admin-ai-conversation-heading small, .admin-ai-conversation-heading > span { color: var(--muted); font-size: 9px; line-height: 1.5; }
|
|
865
|
+
.admin-ai-conversation-heading > span { flex: 0 0 auto; padding: 3px 7px; border: 1px solid var(--line); border-radius: 999px; background: var(--surface); white-space: nowrap; }
|
|
866
|
+
.admin-ai-conversation-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 7px; margin: 0; }
|
|
867
|
+
.admin-ai-conversation-meta > div { display: grid; gap: 3px; min-width: 0; padding: 7px 9px; border-radius: 5px; background: var(--surface); }
|
|
868
|
+
.admin-ai-conversation-meta dt { color: var(--muted); font-size: 8px; }
|
|
869
|
+
.admin-ai-conversation-meta dd { overflow: hidden; margin: 0; color: var(--ink); font-size: 10px; line-height: 1.45; text-overflow: ellipsis; white-space: nowrap; }
|
|
870
|
+
.admin-ai-conversation-row > p { display: -webkit-box; overflow: hidden; margin: 0; color: var(--muted); font-size: 10px; line-height: 1.6; overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
|
|
809
871
|
.dialog.s3-backup-dialog { width: min(900px, 94vw); }
|
|
810
872
|
.s3-backup-body { display: grid; gap: 18px; max-height: calc(88vh - 86px); overflow-y: auto; padding: 18px 24px 24px; }
|
|
811
873
|
.s3-backup-encryption { display: grid; gap: 12px; min-width: 0; margin: 0; padding: 15px 16px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-soft); }
|
|
@@ -1082,6 +1144,9 @@ body.work-viewer-mode .character-editor-actions { display: none !important; }
|
|
|
1082
1144
|
.avatar-settings-actions { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
1083
1145
|
.avatar-settings-actions button { min-height: 32px; padding: 6px 11px; font-size: 11px; }
|
|
1084
1146
|
.avatar-settings-actions button:disabled { cursor: wait; opacity: .5; }
|
|
1147
|
+
.character-avatar-settings { grid-column: 1 / -1; }
|
|
1148
|
+
.character-avatar-editor-preview { grid-row: 1 / 3; width: 76px; height: 76px; border-width: 2px; font-size: 26px; }
|
|
1149
|
+
.character-avatar-settings .avatar-settings-copy small { max-width: 520px; }
|
|
1085
1150
|
.avatar-crop-dialog { width: min(720px, 94vw); }
|
|
1086
1151
|
.avatar-crop-body { display: grid; grid-template-columns: minmax(0, 1fr) 96px; gap: 16px; align-items: start; padding: 18px 24px 8px; }
|
|
1087
1152
|
.avatar-crop-stage {
|
|
@@ -1484,6 +1549,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
1484
1549
|
.character-card { cursor: pointer; }
|
|
1485
1550
|
.character-row { grid-template-columns: minmax(140px, .28fr) minmax(0, 1fr) auto; }
|
|
1486
1551
|
.character-card-heading { display: flex; min-width: 0; align-items: center; gap: 7px; }
|
|
1552
|
+
.character-card-heading .character-avatar { width: 32px; height: 32px; font-size: 12px; }
|
|
1487
1553
|
.character-card-heading h3 { min-width: 0; }
|
|
1488
1554
|
.record-card.has-card-edit .character-card-heading { padding-right: 34px; }
|
|
1489
1555
|
.record-card.has-card-edit .character-card-heading h3 { padding-right: 0; }
|
|
@@ -2538,19 +2604,36 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2538
2604
|
.context-compact-threshold-field { width: min(100%, 280px); }
|
|
2539
2605
|
.agent-tool-call-limit-field { width: min(100%, 280px); }
|
|
2540
2606
|
.daily-token-quota-field { width: min(100%, 144px); }
|
|
2607
|
+
.monthly-token-quota-field { width: min(100%, 144px); }
|
|
2541
2608
|
.agent-tool-call-global-multiplier-field { width: auto; min-width: 0; }
|
|
2542
2609
|
.book-summary-context-percent-field input, .context-compact-threshold-field input, .agent-tool-call-limit-field input, .daily-token-quota-field input { width: 64px; min-height: 32px; padding: 5px 8px; font-size: 13px; font-family: var(--font-latin), monospace; }
|
|
2543
2610
|
.daily-token-quota-field input { width: 144px; }
|
|
2611
|
+
.monthly-token-quota-field input { width: 144px; }
|
|
2612
|
+
.monthly-token-quota-field input { min-height: 32px; padding: 5px 8px; font-size: 13px; font-family: var(--font-latin), monospace; }
|
|
2613
|
+
.token-quota-warning, .provider-token-quota-warning { display: block; color: var(--accent-dark); font-size: 10px; font-weight: 600; line-height: 1.5; }
|
|
2614
|
+
.token-quota-warning.hidden, .provider-token-quota-warning.hidden { display: none; }
|
|
2544
2615
|
.config-inline-save { display: flex; align-items: flex-end; gap: 10px; margin: 14px 0 4px; flex-wrap: wrap; }
|
|
2545
2616
|
.config-inline-save .book-summary-context-percent-field,
|
|
2546
2617
|
.config-inline-save .context-compact-threshold-field,
|
|
2547
2618
|
.config-inline-save .agent-tool-call-limit-field,
|
|
2548
2619
|
.config-inline-save .daily-token-quota-field { display: grid; gap: 6px; width: 64px; margin: 0; color: var(--muted); font-size: 10px; }
|
|
2620
|
+
.config-inline-save .monthly-token-quota-field { display: grid; gap: 6px; width: 64px; margin: 0; color: var(--muted); font-size: 10px; }
|
|
2549
2621
|
.config-inline-save .book-summary-context-percent-field,
|
|
2550
2622
|
.config-inline-save .context-compact-threshold-field { grid-template-columns: minmax(110px, 130px) 88px; align-items: center; column-gap: 12px; width: min(100%, 230px); }
|
|
2551
2623
|
.config-inline-save .book-summary-context-percent-field input,
|
|
2552
2624
|
.config-inline-save .context-compact-threshold-field input { width: 88px; }
|
|
2553
2625
|
.config-inline-save .daily-token-quota-field { width: 144px; }
|
|
2626
|
+
.config-inline-save .monthly-token-quota-field { width: 144px; }
|
|
2627
|
+
@media (min-width: 641px) {
|
|
2628
|
+
.config-inline-save .daily-token-quota-field,
|
|
2629
|
+
.config-inline-save .monthly-token-quota-field { flex: 0 1 360px; width: min(100%, 360px); min-width: 240px; }
|
|
2630
|
+
.config-inline-save .daily-token-quota-field input,
|
|
2631
|
+
.config-inline-save .monthly-token-quota-field input { width: 100%; }
|
|
2632
|
+
.config-inline-save > .token-quota-warning { flex: 1 1 220px; width: min(100%, 260px); min-width: 200px; align-self: flex-end; margin-bottom: 8px; }
|
|
2633
|
+
}
|
|
2634
|
+
@media (max-width: 640px) {
|
|
2635
|
+
.config-inline-save > .token-quota-warning { flex: 1 1 106px; width: auto; min-width: 0; align-self: center; }
|
|
2636
|
+
}
|
|
2554
2637
|
.config-inline-save .agent-tool-call-global-multiplier-field { display: grid; gap: 6px; width: auto; margin: 0; color: var(--muted); font-size: 10px; }
|
|
2555
2638
|
.config-inline-save > .config-checkbox-field { display: inline-flex !important; align-items: center; gap: 8px; min-height: 32px; margin: 0; color: var(--muted); font-size: calc(11px * var(--ui-font-scale)); line-height: 1.4; white-space: nowrap; }
|
|
2556
2639
|
.config-inline-save > .config-checkbox-field input[type="checkbox"] { width: 18px; min-width: 18px; height: 18px; }
|
|
@@ -2617,7 +2700,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2617
2700
|
.assistant-message.is-search-target, .user-message.is-search-target { outline: 2px solid var(--accent); outline-offset: 3px; }
|
|
2618
2701
|
.assistant-message.is-error { border: 1px solid color-mix(in srgb, var(--accent) 42%, var(--line)); border-left: 3px solid var(--accent); background: color-mix(in srgb, var(--accent) 8%, var(--paper-deep)); }
|
|
2619
2702
|
.assistant-message.has-message-actions, .user-message.has-message-actions { margin-bottom: 42px; }
|
|
2620
|
-
.user-message { margin-left:
|
|
2703
|
+
.user-message { width: fit-content; max-width: 60%; margin-left: auto; background: var(--accent); color: #fff; }
|
|
2621
2704
|
.assistant-message > .message-heading, .user-message > .message-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 5px; opacity: .65; font-size: 9px; }
|
|
2622
2705
|
.message-heading > span { letter-spacing: .12em; }.message-heading time { flex: 0 0 auto; font-variant-numeric: tabular-nums; letter-spacing: .03em; }
|
|
2623
2706
|
.assistant-message.is-error > .message-heading { color: var(--accent-dark); opacity: 1; }
|
|
@@ -2667,6 +2750,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2667
2750
|
.message-body .markdown-image small { color: var(--muted); font-size: 9px; line-height: 1.45; text-align: center; }
|
|
2668
2751
|
.message-meta { margin-top: 8px; color: var(--muted); font-size: 9px; }
|
|
2669
2752
|
.message-meta .ai-stream-character-count { display: inline-block; min-width: 6ch; font-variant-numeric: tabular-nums; text-align: right; }
|
|
2753
|
+
.message-meta .ai-stream-connection-seconds { display: inline-block; min-width: 3ch; font-variant-numeric: tabular-nums; text-align: right; }
|
|
2670
2754
|
.ai-process-details { margin: 0 0 10px; overflow: hidden; border: 1px solid var(--line); border-radius: 5px; background: color-mix(in srgb, var(--surface-soft) 82%, transparent); }
|
|
2671
2755
|
.ai-process-details > summary { display: flex; align-items: center; justify-content: space-between; gap: 9px; padding: 8px 10px; color: var(--muted); cursor: pointer; font-size: 10px; list-style: none; }
|
|
2672
2756
|
.ai-process-details > summary::-webkit-details-marker { display: none; }
|
|
@@ -2678,7 +2762,10 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2678
2762
|
.ai-process-list { display: grid; gap: 7px; padding: 9px; }
|
|
2679
2763
|
.ai-process-step { display: grid; min-width: 0; gap: 5px; }
|
|
2680
2764
|
.ai-process-step > small { color: var(--muted); font: 8px/1.4 var(--font-latin), monospace; }
|
|
2681
|
-
.ai-process-step-body { max-height: 220px; overflow: auto; padding: 8px 9px; border-left: 2px solid color-mix(in srgb, var(--accent) 46%, var(--line)); background: var(--paper-deep); color: var(--muted); font-size: 10px; }
|
|
2765
|
+
.ai-process-step-body { max-height: 220px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-color: var(--muted) var(--surface-soft); scrollbar-gutter: stable; scrollbar-width: thin; -webkit-overflow-scrolling: touch; padding: 8px 9px; border-left: 2px solid color-mix(in srgb, var(--accent) 46%, var(--line)); background: var(--paper-deep); color: var(--muted); font-size: 10px; }
|
|
2766
|
+
.ai-process-step-body::-webkit-scrollbar { width: 8px; }
|
|
2767
|
+
.ai-process-step-body::-webkit-scrollbar-track { background: var(--surface-soft); }
|
|
2768
|
+
.ai-process-step-body::-webkit-scrollbar-thumb { border-radius: 4px; background: var(--muted); }
|
|
2682
2769
|
.ai-process-intermediate-step .ai-process-step-body { border-left-color: var(--muted); }
|
|
2683
2770
|
.ai-process-tool-step { padding-top: 1px; }
|
|
2684
2771
|
@keyframes ai-process-pulse { 0%, 100% { opacity: .45; transform: scale(.8); } 50% { opacity: 1; transform: scale(1); } }
|
|
@@ -2726,6 +2813,25 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2726
2813
|
.prompt-options .ai-roleplay-user-character { grid-column: 1 / -1; }
|
|
2727
2814
|
.ai-panel.is-roleplaying .ai-roleplay-character { border-color: color-mix(in srgb, var(--accent) 52%, var(--line)); background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--accent-dark); }
|
|
2728
2815
|
.prompt-composer { position: relative; }
|
|
2816
|
+
.ai-image-attachments { display: flex; gap: 5px; max-height: 38px; margin-bottom: 6px; overflow-x: auto; overflow-y: hidden; padding: 5px 0 0; }
|
|
2817
|
+
.ai-image-attachment { display: inline-flex; flex: 0 0 auto; align-items: center; width: auto; height: 28px; margin: 0; padding: 2px 3px 2px 4px; border: 1px solid color-mix(in srgb, var(--accent) 48%, var(--line)); border-radius: 5px; background: var(--paper); }
|
|
2818
|
+
.ai-image-attachment-preview { display: inline-flex; align-items: center; gap: 4px; width: auto; height: 22px; min-width: 0; padding: 0 3px 0 0; border: 0; background: transparent; color: var(--ink); font: 9px/1 var(--font-cjk), sans-serif; white-space: nowrap; cursor: zoom-in; }
|
|
2819
|
+
.ai-image-attachment-preview:hover, .ai-image-attachment-preview:focus-visible { color: var(--accent-dark); outline: 2px solid color-mix(in srgb, var(--accent) 72%, transparent); outline-offset: 1px; }
|
|
2820
|
+
.ai-image-attachment-preview img { display: block; flex: 0 0 20px; width: 20px; height: 20px; object-fit: cover; border-radius: 2px; }
|
|
2821
|
+
.ai-image-attachment-label { overflow: hidden; text-overflow: ellipsis; }
|
|
2822
|
+
.ai-image-attachment-remove { display: grid; flex: 0 0 17px; place-items: center; width: 17px; height: 20px; padding: 0; border: 0; border-left: 1px solid color-mix(in srgb, var(--accent) 24%, var(--line)); background: transparent; color: var(--muted); font: 13px/1 var(--font-latin), sans-serif; }
|
|
2823
|
+
.ai-image-attachment-remove:hover, .ai-image-attachment-remove:focus-visible { color: var(--accent); outline: 0; }
|
|
2824
|
+
.ai-image-preview-dialog { width: min(900px, 94vw); max-width: calc(100vw - 24px); }
|
|
2825
|
+
.ai-image-preview-dialog .dialog-header { padding: 12px 16px 9px; }
|
|
2826
|
+
.ai-image-preview-dialog .dialog-header .eyebrow { font-size: 9px; }
|
|
2827
|
+
.ai-image-preview-dialog .dialog-header-meta { margin-top: 4px; font-size: 10px; }
|
|
2828
|
+
.ai-image-preview-body { display: grid; place-items: center; min-height: 180px; max-height: calc(88vh - 106px); padding: 16px 20px 20px; overflow: auto; background: var(--paper); }
|
|
2829
|
+
.ai-image-preview-body img { display: block; max-width: 100%; max-height: calc(88vh - 150px); width: auto; height: auto; object-fit: contain; border-radius: 3px; }
|
|
2830
|
+
.ai-attachment-input { position: absolute; width: 1px; height: 1px; overflow: hidden; opacity: 0; pointer-events: none; }
|
|
2831
|
+
.ai-attachment-button { position: absolute; bottom: 8px; left: 8px; z-index: 2; display: grid; place-items: center; width: 32px; min-width: 32px; min-height: 32px; height: 32px; padding: 0; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--muted); }
|
|
2832
|
+
.ai-attachment-button:hover, .ai-attachment-button:focus-visible { border-color: color-mix(in srgb, var(--accent) 56%, var(--line)); background: color-mix(in srgb, var(--accent) 8%, var(--surface)); color: var(--accent-dark); outline: 0; }
|
|
2833
|
+
.ai-attachment-button:disabled { cursor: wait; opacity: .56; }
|
|
2834
|
+
.ai-image-button-icon { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.7; }
|
|
2729
2835
|
.ai-mention-menu { position: absolute; z-index: 20; left: 0; right: 0; bottom: calc(100% + 6px); max-height: 230px; overflow-y: auto; padding: 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); box-shadow: 0 12px 34px rgba(49,42,32,.18); }
|
|
2730
2836
|
.ai-mention-option { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 8px; width: 100%; padding: 7px 8px; border: 0; border-radius: 4px; background: transparent; text-align: left; }
|
|
2731
2837
|
.ai-mention-option:hover, .ai-mention-option:focus-visible, .ai-mention-option.is-active { background: var(--paper-deep); }
|
|
@@ -2763,8 +2869,18 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2763
2869
|
.ai-model-popover.hidden { display: none; }
|
|
2764
2870
|
.ai-model-popover::after { position: absolute; right: 49px; bottom: -6px; width: 10px; height: 10px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); background: var(--paper); content: ""; transform: rotate(45deg); }
|
|
2765
2871
|
.ai-model-popover > label { color: var(--muted); font-size: 10px; font-weight: 600; }
|
|
2766
|
-
.ai-model-
|
|
2767
|
-
.ai-model-
|
|
2872
|
+
.ai-model-native-select { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
|
|
2873
|
+
.ai-model-options { display: grid; max-height: 240px; gap: 3px; overflow-y: auto; }
|
|
2874
|
+
.ai-model-option { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; min-height: 42px; padding: 7px 8px; border: 1px solid transparent; border-radius: 5px; background: transparent; color: var(--ink); text-align: left; }
|
|
2875
|
+
.ai-model-option:hover, .ai-model-option:focus-visible, .ai-model-option[aria-selected="true"] { border-color: color-mix(in srgb, var(--accent) 35%, var(--line)); background: color-mix(in srgb, var(--accent) 8%, var(--surface)); outline: 0; }
|
|
2876
|
+
.ai-model-option:disabled { cursor: wait; opacity: .56; }
|
|
2877
|
+
.ai-model-option-copy { display: grid; min-width: 0; gap: 3px; }
|
|
2878
|
+
.ai-model-option-copy strong, .ai-model-option-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
2879
|
+
.ai-model-option-copy strong { color: var(--ink); font-size: 10px; font-weight: 600; }
|
|
2880
|
+
.ai-model-option-copy small { color: var(--muted); font: 9px/1.2 var(--font-latin), var(--font-cjk), sans-serif; }
|
|
2881
|
+
.ai-model-option-image { display: grid; flex: 0 0 20px; place-items: center; width: 20px; height: 20px; border-radius: 4px; background: color-mix(in srgb, var(--accent) 12%, transparent); color: var(--accent-dark); }
|
|
2882
|
+
.ai-model-option-image-icon { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.6; }
|
|
2883
|
+
.ai-model-options-empty { margin: 0; padding: 10px 8px; color: var(--muted); font-size: 10px; text-align: center; }
|
|
2768
2884
|
.ai-context-distribution { display: grid; gap: 10px; }
|
|
2769
2885
|
.ai-context-distribution-row { display: grid; gap: 5px; }
|
|
2770
2886
|
.ai-context-distribution-label { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; font: 10px/1.3 var(--font-latin), sans-serif; }
|
|
@@ -2783,6 +2899,10 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2783
2899
|
.ai-send-button:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 24%, transparent), 0 4px 12px rgba(139,61,44,.2); }
|
|
2784
2900
|
.ai-send-button:disabled { cursor: wait; opacity: .62; }
|
|
2785
2901
|
.ai-send-button-icon { width: 17px; height: 17px; overflow: visible; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.8; }
|
|
2902
|
+
.ai-message-images { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
|
|
2903
|
+
.ai-message-image-preview { display: block; width: 68px; height: 68px; padding: 0; overflow: hidden; border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line)); border-radius: 5px; background: var(--paper); cursor: zoom-in; }
|
|
2904
|
+
.ai-message-image-preview:hover, .ai-message-image-preview:focus-visible { outline: 2px solid color-mix(in srgb, var(--accent) 72%, transparent); outline-offset: 1px; }
|
|
2905
|
+
.ai-message-image-preview img { display: block; width: 100%; height: 100%; object-fit: cover; }
|
|
2786
2906
|
.ai-send-button.is-stop .ai-send-button-icon { width: 15px; height: 15px; fill: currentColor; stroke: none; }
|
|
2787
2907
|
.ai-citations { display: grid; gap: 6px; max-height: 190px; overflow-y: auto; margin-bottom: 8px; }
|
|
2788
2908
|
.ai-citation-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; border: 1px solid var(--line); border-radius: 5px; background: var(--paper); overflow: hidden; }
|
|
@@ -2814,7 +2934,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2814
2934
|
display: grid;
|
|
2815
2935
|
gap: 8px;
|
|
2816
2936
|
z-index: 2147483647;
|
|
2817
|
-
pointer-events:
|
|
2937
|
+
pointer-events: auto;
|
|
2818
2938
|
box-shadow: none;
|
|
2819
2939
|
}
|
|
2820
2940
|
.toast-region::backdrop { display: none; }
|
|
@@ -2822,6 +2942,17 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2822
2942
|
.toast-region[data-position="top-right"]:popover-open { top: 78px; right: 24px; bottom: auto; left: auto; }
|
|
2823
2943
|
.toast-region[data-position="bottom-right"],
|
|
2824
2944
|
.toast-region[data-position="bottom-right"]:popover-open { top: auto; right: 24px; bottom: 24px; left: auto; }
|
|
2945
|
+
.toast-region.token-usage-details-region,
|
|
2946
|
+
.toast-region.token-usage-details-region:popover-open {
|
|
2947
|
+
top: 50%;
|
|
2948
|
+
right: auto;
|
|
2949
|
+
bottom: auto;
|
|
2950
|
+
left: 50%;
|
|
2951
|
+
width: min(720px, calc(100vw - 32px));
|
|
2952
|
+
max-width: calc(100vw - 32px);
|
|
2953
|
+
transform: translate(-50%, -50%);
|
|
2954
|
+
}
|
|
2955
|
+
.toast-region.token-usage-details-region .token-usage-details-toast { width: 100%; }
|
|
2825
2956
|
.toast {
|
|
2826
2957
|
max-width: 360px;
|
|
2827
2958
|
padding: 11px 15px;
|
|
@@ -2833,7 +2964,9 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
2833
2964
|
font-size: 12px;
|
|
2834
2965
|
line-height: 1.55;
|
|
2835
2966
|
animation: toast-appear-top .18s ease;
|
|
2967
|
+
pointer-events: auto;
|
|
2836
2968
|
}
|
|
2969
|
+
.toast:not(.toast-confirmation):not(.chapter-insight-toast) { cursor: pointer; }
|
|
2837
2970
|
.toast.ai-new-conversation-toast { white-space: pre-line; }
|
|
2838
2971
|
.toast-region[data-position="bottom-right"] .toast { animation-name: toast-appear-bottom; }
|
|
2839
2972
|
.toast.error {
|
|
@@ -3002,6 +3135,12 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3002
3135
|
.background-task-actions #background-task-open-analysis { margin-right: auto; }
|
|
3003
3136
|
.merge-dialog-note { margin: 0; padding: 10px 12px; border-left: 2px solid var(--accent); background: var(--surface-soft); color: var(--muted); font-size: 11px; line-height: 1.6; }
|
|
3004
3137
|
.form-field { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
|
|
3138
|
+
.provider-token-quota-fields { gap: 9px; padding: 12px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
|
|
3139
|
+
.provider-token-quota-fields > small { color: var(--muted); font-size: 9px; line-height: 1.5; }
|
|
3140
|
+
.provider-token-quota-row { display: grid; grid-template-columns: minmax(132px, .7fr) minmax(0, 1fr); align-items: end; gap: 10px; padding: 9px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface); }
|
|
3141
|
+
.provider-token-quota-toggle { color: var(--ink) !important; font-size: 10px !important; }
|
|
3142
|
+
.provider-token-quota-input { display: grid; gap: 5px; min-width: 0; }
|
|
3143
|
+
.provider-token-quota-input input:disabled { opacity: .58; }
|
|
3005
3144
|
.model-multimodal-fields { gap: 9px; padding: 12px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
|
|
3006
3145
|
.model-multimodal-heading { color: var(--ink); font-size: 12px; font-weight: 600; }
|
|
3007
3146
|
.model-multimodal-fields .model-capability-option { display: grid !important; grid-template-columns: 16px minmax(0, 1fr); align-items: start; gap: 9px; margin: 0; padding: 10px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface); color: var(--ink) !important; transition: border-color .15s ease, background-color .15s ease; }
|
|
@@ -3574,6 +3713,17 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3574
3713
|
.member-permission-form .primary-button { justify-self: stretch; }
|
|
3575
3714
|
.access-row { grid-template-columns: minmax(0, 1fr); align-items: stretch; }
|
|
3576
3715
|
.access-row select, .access-row button { width: 100%; }
|
|
3716
|
+
.admin-ai-conversations-dialog .dialog-header { gap: 10px; }
|
|
3717
|
+
.admin-ai-conversations-dialog .dialog-header > div:first-child { min-width: 0; }
|
|
3718
|
+
.admin-ai-conversations-dialog .dialog-header-meta { display: none; }
|
|
3719
|
+
.admin-ai-conversations-dialog .settings-dialog-header-actions { flex-wrap: wrap; justify-content: flex-end; }
|
|
3720
|
+
.admin-ai-conversations-dialog .settings-parent-button { order: 3; width: 100%; }
|
|
3721
|
+
.admin-ai-conversations-body { padding: 12px 16px 0; }
|
|
3722
|
+
.admin-ai-conversations-filters { grid-template-columns: minmax(0, 1fr); align-items: stretch; }
|
|
3723
|
+
.admin-ai-conversations-filter-actions button { flex: 1 1 0; }
|
|
3724
|
+
.admin-ai-conversation-heading { align-items: stretch; flex-direction: column; gap: 7px; }
|
|
3725
|
+
.admin-ai-conversation-heading > span { align-self: flex-start; }
|
|
3726
|
+
.admin-ai-conversation-meta { grid-template-columns: minmax(0, 1fr); }
|
|
3577
3727
|
.work-access-field { align-items: stretch; flex-direction: column; }
|
|
3578
3728
|
.onboarding-popover { width: calc(100vw - 24px); }
|
|
3579
3729
|
.onboarding-popover-header { padding-inline: 15px; }
|
|
@@ -3655,6 +3805,7 @@ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0
|
|
|
3655
3805
|
.account-settings-form, .password-settings-form, .api-key-settings, .api-key-result { grid-template-columns: minmax(0, 1fr); }
|
|
3656
3806
|
.avatar-settings { grid-template-columns: 64px minmax(0, 1fr); }
|
|
3657
3807
|
.profile-avatar-preview { width: 64px; height: 64px; }
|
|
3808
|
+
.character-avatar-editor-preview { width: 64px; height: 64px; }
|
|
3658
3809
|
.avatar-crop-body { grid-template-columns: minmax(0, 1fr); gap: 12px; padding: 14px 16px 4px; }
|
|
3659
3810
|
.avatar-crop-side { grid-template-columns: auto 1fr; align-items: center; justify-items: start; gap: 10px; padding-top: 0; }
|
|
3660
3811
|
.avatar-crop-preview { width: 64px; height: 64px; }
|
|
@@ -4022,7 +4173,7 @@ body { font-size: var(--ui-font-size); }
|
|
|
4022
4173
|
.guard-card strong, .guard-card p, .message-actions button { font-size: calc(10px * var(--ai-font-scale)); }
|
|
4023
4174
|
.ai-context-warning strong { font-size: calc(11px * var(--ai-font-scale)); }
|
|
4024
4175
|
.ai-context-warning p, .ai-context-warning button { font-size: calc(9px * var(--ai-font-scale)); }
|
|
4025
|
-
.prompt-options select, .ai-model-popover > label, .ai-model-
|
|
4176
|
+
.prompt-options select, .ai-model-popover > label, .ai-model-option-copy strong, .ai-model-options-empty, .ai-mention-option strong, .ai-mention-empty { font-size: calc(10px * var(--ai-font-scale)); }
|
|
4026
4177
|
.ai-mention-option small { font-size: calc(8px * var(--ai-font-scale)); }
|
|
4027
4178
|
.ai-prompt { font-size: var(--ai-font-size); }
|
|
4028
4179
|
.ai-prompt-reference { font-size: calc(10px * var(--ai-font-scale)); }
|