codexmate 0.1.25 → 0.1.27
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/cli/session-usage.js +10 -4
- package/cli.js +733 -199
- package/lib/cli-sessions.js +1 -1
- package/package.json +3 -3
- package/tools/dev/launch.js +147 -0
- package/web-ui/app.js +13 -3
- package/web-ui/index.html +1 -1
- package/web-ui/logic.prompts-token-count.mjs +49 -0
- package/web-ui/logic.sessions.mjs +30 -15
- package/web-ui/modules/app.computed.dashboard.mjs +1 -0
- package/web-ui/modules/app.computed.prompts.mjs +18 -0
- package/web-ui/modules/app.computed.session.mjs +3 -1
- package/web-ui/modules/app.methods.session-actions.mjs +10 -4
- package/web-ui/modules/app.methods.session-browser.mjs +34 -45
- package/web-ui/modules/app.methods.session-timeline.mjs +1 -0
- package/web-ui/modules/i18n/locales/en.mjs +9 -1
- package/web-ui/modules/i18n/locales/ja.mjs +9 -1
- package/web-ui/modules/i18n/locales/vi.mjs +9 -1
- package/web-ui/modules/i18n/locales/zh-tw.mjs +9 -1
- package/web-ui/modules/i18n/locales/zh.mjs +9 -1
- package/web-ui/partials/index/layout-header.html +4 -2
- package/web-ui/partials/index/panel-prompts.html +14 -0
- package/web-ui/partials/index/panel-sessions.html +19 -4
- package/web-ui/res/web-ui-render.precompiled.js +89 -21
- package/web-ui/session-helpers.mjs +1 -1
- package/web-ui/styles/base-theme.css +24 -0
- package/web-ui/styles/modals-core.css +48 -0
- package/web-ui/styles/sessions-list.css +1 -1
- package/web-ui/styles/sessions-preview.css +56 -7
- package/web-ui/styles/sessions-toolbar-trash.css +1 -7
|
@@ -254,6 +254,8 @@ const en = Object.freeze({
|
|
|
254
254
|
'prompts.editor.previewEmpty': 'Nothing to preview yet',
|
|
255
255
|
'prompts.editor.changeAxis': 'Change navigation axis',
|
|
256
256
|
'prompts.editor.changeAxisTick': 'Line {line} (+{added} / -{removed})',
|
|
257
|
+
'prompts.tokenCount.hint': '~{count} tokens',
|
|
258
|
+
'prompts.tokenCount.diff': 'Tokens: {before} before → {current} now',
|
|
257
259
|
'prompts.presets.title': 'Presets',
|
|
258
260
|
'prompts.presets.hint': 'Manage presets.',
|
|
259
261
|
'prompts.presets.namePlaceholder': 'Preset name',
|
|
@@ -350,6 +352,8 @@ const en = Object.freeze({
|
|
|
350
352
|
'dashboard.sessionSource.claude': 'Claude Code',
|
|
351
353
|
'dashboard.sessionSource.gemini': 'Gemini CLI',
|
|
352
354
|
'dashboard.sessionSource.codebuddy': 'CodeBuddy Code',
|
|
355
|
+
|
|
356
|
+
'dashboard.sessionSource.workbuddy': 'WorkBuddy AI',
|
|
353
357
|
'dashboard.sessionSource.all': 'All',
|
|
354
358
|
'dashboard.sessionPath.all': 'All paths',
|
|
355
359
|
'dashboard.sessionQuery.unsupported': 'Unsupported source',
|
|
@@ -682,7 +686,10 @@ const en = Object.freeze({
|
|
|
682
686
|
'sessions.source.claudeCode': 'Claude Code',
|
|
683
687
|
'sessions.source.gemini': 'Gemini CLI',
|
|
684
688
|
'sessions.source.codebuddy': 'CodeBuddy Code',
|
|
689
|
+
|
|
690
|
+
'sessions.source.workbuddy': 'WorkBuddy AI',
|
|
685
691
|
'sessions.source.pi': 'Pi',
|
|
692
|
+
'sessions.source.opencode': 'OpenCode',
|
|
686
693
|
'sessions.loadingList': 'Loading sessions...',
|
|
687
694
|
'sessions.empty': 'No sessions found',
|
|
688
695
|
'sessions.unknownTime': 'unknown time',
|
|
@@ -694,6 +701,8 @@ const en = Object.freeze({
|
|
|
694
701
|
'sessions.unpin': 'Unpin',
|
|
695
702
|
'sessions.copyResume': 'Copy resume command',
|
|
696
703
|
'sessions.preview.refresh': 'Refresh content',
|
|
704
|
+
'sessions.preview.scrollTop': 'Back to top',
|
|
705
|
+
'sessions.preview.scrollBottom': 'Jump to bottom',
|
|
697
706
|
'sessions.preview.loading': 'Loading...',
|
|
698
707
|
'sessions.batch.select': 'Batch delete',
|
|
699
708
|
'sessions.batch.exit': 'Exit selection',
|
|
@@ -784,7 +793,6 @@ const en = Object.freeze({
|
|
|
784
793
|
'sessions.sort.hot': 'Sort: hot',
|
|
785
794
|
'sessions.sort.hotBadge': 'Hot',
|
|
786
795
|
'sessions.filters.copyLink': 'Copy filter link',
|
|
787
|
-
'sessions.filters.urlBuildFail': 'Failed to build link',
|
|
788
796
|
'sessions.filters.source': 'Source',
|
|
789
797
|
'sessions.filters.path': 'Path',
|
|
790
798
|
'sessions.filters.keyword': 'Keyword',
|
|
@@ -255,6 +255,8 @@ const ja = Object.freeze({
|
|
|
255
255
|
'prompts.editor.previewEmpty': 'プレビューする内容がありません',
|
|
256
256
|
'prompts.editor.changeAxis': '変更ナビゲーション軸',
|
|
257
257
|
'prompts.editor.changeAxisTick': '{line} 行目(+{added} / -{removed})',
|
|
258
|
+
'prompts.tokenCount.hint': '約 {count} トークン',
|
|
259
|
+
'prompts.tokenCount.diff': 'トークン:変更前 {before} → 現在 {current}',
|
|
258
260
|
'prompts.presets.title': 'プリセット',
|
|
259
261
|
'prompts.presets.hint': 'プリセットを管理します。',
|
|
260
262
|
'prompts.presets.namePlaceholder': 'プリセット名',
|
|
@@ -352,6 +354,8 @@ const ja = Object.freeze({
|
|
|
352
354
|
'dashboard.sessionSource.claude': 'Claude Code',
|
|
353
355
|
'dashboard.sessionSource.gemini': 'Gemini CLI',
|
|
354
356
|
'dashboard.sessionSource.codebuddy': 'CodeBuddy Code',
|
|
357
|
+
|
|
358
|
+
'dashboard.sessionSource.workbuddy': 'WorkBuddy AI',
|
|
355
359
|
'dashboard.sessionSource.all': 'すべて',
|
|
356
360
|
'dashboard.sessionPath.all': 'すべてのパス',
|
|
357
361
|
'dashboard.sessionQuery.unsupported': '現在のソースは非対応',
|
|
@@ -684,7 +688,10 @@ const ja = Object.freeze({
|
|
|
684
688
|
'sessions.source.claudeCode': 'Claude Code',
|
|
685
689
|
'sessions.source.gemini': 'Gemini',
|
|
686
690
|
'sessions.source.codebuddy': 'CodeBuddy',
|
|
691
|
+
|
|
692
|
+
'sessions.source.workbuddy': 'WorkBuddy AI',
|
|
687
693
|
'sessions.source.pi': 'Pi',
|
|
694
|
+
'sessions.source.opencode': 'OpenCode',
|
|
688
695
|
'sessions.loadingList': 'セッション一覧を読み込み中...',
|
|
689
696
|
'sessions.empty': 'セッションがありません',
|
|
690
697
|
'sessions.unknownTime': '不明な時間',
|
|
@@ -696,6 +703,8 @@ const ja = Object.freeze({
|
|
|
696
703
|
'sessions.unpin': 'ピン留め解除',
|
|
697
704
|
'sessions.copyResume': '再開コマンドをコピー',
|
|
698
705
|
'sessions.preview.refresh': '更新',
|
|
706
|
+
'sessions.preview.scrollTop': '先頭へ',
|
|
707
|
+
'sessions.preview.scrollBottom': '末尾へ',
|
|
699
708
|
'sessions.preview.loading': 'プレビュー読み込み中...',
|
|
700
709
|
'sessions.batch.select': '一括削除',
|
|
701
710
|
'sessions.batch.exit': '選択を終了',
|
|
@@ -787,7 +796,6 @@ const ja = Object.freeze({
|
|
|
787
796
|
'sessions.sort.hot': '話題順',
|
|
788
797
|
'sessions.sort.hotBadge': '話題',
|
|
789
798
|
'sessions.filters.copyLink': 'リンクをコピー',
|
|
790
|
-
'sessions.filters.urlBuildFail': 'リンク生成失敗',
|
|
791
799
|
'sessions.filters.source': 'ソース',
|
|
792
800
|
'sessions.filters.path': 'パス',
|
|
793
801
|
'sessions.filters.keyword': 'キーワード',
|
|
@@ -283,6 +283,8 @@ const vi = Object.freeze({
|
|
|
283
283
|
'prompts.editor.previewEmpty': 'Chưa có nội dung để xem trước',
|
|
284
284
|
'prompts.editor.changeAxis': 'Trục điều hướng thay đổi',
|
|
285
285
|
'prompts.editor.changeAxisTick': 'Dòng {line} (+{added} / -{removed})',
|
|
286
|
+
'prompts.tokenCount.hint': '~{count} token',
|
|
287
|
+
'prompts.tokenCount.diff': 'Token: trước {before} → hiện tại {current}',
|
|
286
288
|
'prompts.presets.title': 'Preset',
|
|
287
289
|
'prompts.presets.hint': 'Quản lý preset.',
|
|
288
290
|
'prompts.presets.namePlaceholder': 'Tên preset',
|
|
@@ -633,6 +635,8 @@ const vi = Object.freeze({
|
|
|
633
635
|
'dashboard.sessionSource.claude': 'Claude Code',
|
|
634
636
|
'dashboard.sessionSource.gemini': 'Gemini CLI',
|
|
635
637
|
'dashboard.sessionSource.codebuddy': 'CodeBuddy Code',
|
|
638
|
+
|
|
639
|
+
'dashboard.sessionSource.workbuddy': 'WorkBuddy AI',
|
|
636
640
|
'dashboard.sessionSource.all': 'Tất cả',
|
|
637
641
|
'dashboard.sessionPath.all': 'Tất cả đường dẫn',
|
|
638
642
|
'dashboard.sessionQuery.unsupported': 'Nguồn không được hỗ trợ',
|
|
@@ -859,7 +863,10 @@ const vi = Object.freeze({
|
|
|
859
863
|
'sessions.source.claudeCode': 'Claude Code',
|
|
860
864
|
'sessions.source.gemini': 'Gemini CLI',
|
|
861
865
|
'sessions.source.codebuddy': 'CodeBuddy Code',
|
|
866
|
+
|
|
867
|
+
'sessions.source.workbuddy': 'WorkBuddy AI',
|
|
862
868
|
'sessions.source.pi': 'Pi',
|
|
869
|
+
'sessions.source.opencode': 'OpenCode',
|
|
863
870
|
'sessions.loadingList': 'Đang tải phiên làm việc...',
|
|
864
871
|
'sessions.empty': 'Không tìm thấy phiên nào',
|
|
865
872
|
'sessions.unknownTime': 'thời gian không rõ',
|
|
@@ -869,6 +876,8 @@ const vi = Object.freeze({
|
|
|
869
876
|
'sessions.unpin': 'Bỏ ghim',
|
|
870
877
|
'sessions.copyResume': 'Sao chép lệnh tiếp tục',
|
|
871
878
|
'sessions.preview.refresh': 'Làm mới nội dung',
|
|
879
|
+
'sessions.preview.scrollTop': 'Về đầu',
|
|
880
|
+
'sessions.preview.scrollBottom': 'Xuống cuối',
|
|
872
881
|
'sessions.preview.loading': 'Đang tải...',
|
|
873
882
|
'sessions.batch.select': 'Xóa hàng loạt',
|
|
874
883
|
'sessions.batch.exit': 'Thoát chọn',
|
|
@@ -958,7 +967,6 @@ const vi = Object.freeze({
|
|
|
958
967
|
'sessions.sort.hot': 'Sắp xếp: hot',
|
|
959
968
|
'sessions.sort.hotBadge': 'Hot',
|
|
960
969
|
'sessions.filters.copyLink': 'Sao chép link bộ lọc',
|
|
961
|
-
'sessions.filters.urlBuildFail': 'Tạo link thất bại',
|
|
962
970
|
'sessions.filters.source': 'Nguồn',
|
|
963
971
|
'sessions.filters.path': 'Đường dẫn',
|
|
964
972
|
'sessions.filters.keyword': 'Từ khóa',
|
|
@@ -254,6 +254,8 @@ const zhTw = Object.freeze({
|
|
|
254
254
|
'prompts.editor.previewEmpty': '尚無內容可預覽',
|
|
255
255
|
'prompts.editor.changeAxis': '改動導覽軸',
|
|
256
256
|
'prompts.editor.changeAxisTick': '第 {line} 行(+{added} / -{removed})',
|
|
257
|
+
'prompts.tokenCount.hint': '約 {count} tokens',
|
|
258
|
+
'prompts.tokenCount.diff': 'Tokens:修改前 {before} → 目前 {current}',
|
|
257
259
|
'prompts.presets.title': '預設池',
|
|
258
260
|
'prompts.presets.hint': '管理預設。',
|
|
259
261
|
'prompts.presets.namePlaceholder': '預設名稱',
|
|
@@ -350,6 +352,8 @@ const zhTw = Object.freeze({
|
|
|
350
352
|
'dashboard.sessionSource.claude': 'Claude Code',
|
|
351
353
|
'dashboard.sessionSource.gemini': 'Gemini CLI',
|
|
352
354
|
'dashboard.sessionSource.codebuddy': 'CodeBuddy Code',
|
|
355
|
+
|
|
356
|
+
'dashboard.sessionSource.workbuddy': 'WorkBuddy AI',
|
|
353
357
|
'dashboard.sessionSource.all': '全部',
|
|
354
358
|
'dashboard.sessionPath.all': '全部路徑',
|
|
355
359
|
'dashboard.sessionQuery.unsupported': '目前來源不支持',
|
|
@@ -682,7 +686,10 @@ const zhTw = Object.freeze({
|
|
|
682
686
|
'sessions.source.claudeCode': 'Claude Code',
|
|
683
687
|
'sessions.source.gemini': 'Gemini CLI',
|
|
684
688
|
'sessions.source.codebuddy': 'CodeBuddy Code',
|
|
689
|
+
|
|
690
|
+
'sessions.source.workbuddy': 'WorkBuddy AI',
|
|
685
691
|
'sessions.source.pi': 'Pi',
|
|
692
|
+
'sessions.source.opencode': 'OpenCode',
|
|
686
693
|
'sessions.loadingList': '會話載入中...',
|
|
687
694
|
'sessions.empty': '暫無可用會話記錄',
|
|
688
695
|
'sessions.unknownTime': '未知時間',
|
|
@@ -693,6 +700,8 @@ const zhTw = Object.freeze({
|
|
|
693
700
|
'sessions.unpin': '取消置頂',
|
|
694
701
|
'sessions.copyResume': '複製恢復命令',
|
|
695
702
|
'sessions.preview.refresh': '重新整理內容',
|
|
703
|
+
'sessions.preview.scrollTop': '回到頂部',
|
|
704
|
+
'sessions.preview.scrollBottom': '跳到底部',
|
|
696
705
|
'sessions.preview.loading': '載入中...',
|
|
697
706
|
'sessions.batch.select': '批次刪除',
|
|
698
707
|
'sessions.batch.exit': '退出選擇',
|
|
@@ -783,7 +792,6 @@ const zhTw = Object.freeze({
|
|
|
783
792
|
'sessions.sort.hot': '按熱度',
|
|
784
793
|
'sessions.sort.hotBadge': '熱',
|
|
785
794
|
'sessions.filters.copyLink': '複製篩選鏈接',
|
|
786
|
-
'sessions.filters.urlBuildFail': '無法生成鏈接',
|
|
787
795
|
'sessions.filters.source': '來源',
|
|
788
796
|
'sessions.filters.path': '路徑',
|
|
789
797
|
'sessions.filters.keyword': '關鍵詞',
|
|
@@ -254,6 +254,8 @@ const zh = Object.freeze({
|
|
|
254
254
|
'prompts.editor.previewEmpty': '暂无内容可预览',
|
|
255
255
|
'prompts.editor.changeAxis': '改动导航轴',
|
|
256
256
|
'prompts.editor.changeAxisTick': '第 {line} 行(+{added} / -{removed})',
|
|
257
|
+
'prompts.tokenCount.hint': '约 {count} tokens',
|
|
258
|
+
'prompts.tokenCount.diff': 'Tokens:修改前 {before} → 当前 {current}',
|
|
257
259
|
'prompts.presets.title': '预设池',
|
|
258
260
|
'prompts.presets.hint': '管理预设。',
|
|
259
261
|
'prompts.presets.namePlaceholder': '预设名称',
|
|
@@ -350,6 +352,8 @@ const zh = Object.freeze({
|
|
|
350
352
|
'dashboard.sessionSource.claude': 'Claude Code',
|
|
351
353
|
'dashboard.sessionSource.gemini': 'Gemini CLI',
|
|
352
354
|
'dashboard.sessionSource.codebuddy': 'CodeBuddy Code',
|
|
355
|
+
|
|
356
|
+
'dashboard.sessionSource.workbuddy': 'WorkBuddy AI',
|
|
353
357
|
'dashboard.sessionSource.all': '全部',
|
|
354
358
|
'dashboard.sessionPath.all': '全部路径',
|
|
355
359
|
'dashboard.sessionQuery.unsupported': '当前来源不支持',
|
|
@@ -682,7 +686,10 @@ const zh = Object.freeze({
|
|
|
682
686
|
'sessions.source.claudeCode': 'Claude Code',
|
|
683
687
|
'sessions.source.gemini': 'Gemini CLI',
|
|
684
688
|
'sessions.source.codebuddy': 'CodeBuddy Code',
|
|
689
|
+
|
|
690
|
+
'sessions.source.workbuddy': 'WorkBuddy AI',
|
|
685
691
|
'sessions.source.pi': 'Pi',
|
|
692
|
+
'sessions.source.opencode': 'OpenCode',
|
|
686
693
|
'sessions.loadingList': '会话加载中...',
|
|
687
694
|
'sessions.empty': '暂无可用会话记录',
|
|
688
695
|
'sessions.unknownTime': '未知时间',
|
|
@@ -693,6 +700,8 @@ const zh = Object.freeze({
|
|
|
693
700
|
'sessions.unpin': '取消置顶',
|
|
694
701
|
'sessions.copyResume': '复制恢复命令',
|
|
695
702
|
'sessions.preview.refresh': '刷新内容',
|
|
703
|
+
'sessions.preview.scrollTop': '回到顶部',
|
|
704
|
+
'sessions.preview.scrollBottom': '跳到底部',
|
|
696
705
|
'sessions.preview.loading': '加载中...',
|
|
697
706
|
'sessions.batch.select': '批量删除',
|
|
698
707
|
'sessions.batch.exit': '退出选择',
|
|
@@ -783,7 +792,6 @@ const zh = Object.freeze({
|
|
|
783
792
|
'sessions.sort.hot': '按热度',
|
|
784
793
|
'sessions.sort.hotBadge': '热',
|
|
785
794
|
'sessions.filters.copyLink': '复制筛选链接',
|
|
786
|
-
'sessions.filters.urlBuildFail': '无法生成链接',
|
|
787
795
|
'sessions.filters.source': '来源',
|
|
788
796
|
'sessions.filters.path': '路径',
|
|
789
797
|
'sessions.filters.keyword': '关键词',
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
<div class="side-item-title">{{ t('side.sessions.browser') }}</div>
|
|
290
290
|
<div class="side-item-meta">
|
|
291
291
|
<span>{{ t('side.sessions.browser.meta') }}</span>
|
|
292
|
-
<span>{{ t('sessions.sourceLabel', { value: (sessionFilterSource === 'all' ? t('sessions.source.all') : (sessionFilterSource === 'claude' ? 'Claude Code' : (sessionFilterSource === 'gemini' ? 'Gemini CLI' : (sessionFilterSource === 'codebuddy' ? 'CodeBuddy Code' : 'Codex')))) }) }}</span>
|
|
292
|
+
<span>{{ t('sessions.sourceLabel', { value: (sessionFilterSource === 'all' ? t('sessions.source.all') : (sessionFilterSource === 'claude' ? 'Claude Code' : (sessionFilterSource === 'gemini' ? 'Gemini CLI' : (sessionFilterSource === 'codebuddy' ? 'CodeBuddy Code' : (sessionFilterSource === 'workbuddy' ? 'WorkBuddy AI' : 'Codex'))))) }) }}</span>
|
|
293
293
|
</div>
|
|
294
294
|
</button>
|
|
295
295
|
<button
|
|
@@ -527,7 +527,9 @@
|
|
|
527
527
|
? t('sessions.source.gemini')
|
|
528
528
|
: (sessionFilterSource === 'codebuddy'
|
|
529
529
|
? t('sessions.source.codebuddy')
|
|
530
|
-
:
|
|
530
|
+
: (sessionFilterSource === 'workbuddy'
|
|
531
|
+
? t('sessions.source.workbuddy')
|
|
532
|
+
: t('sessions.source.codex')))))) }}
|
|
531
533
|
</span>
|
|
532
534
|
</div>
|
|
533
535
|
<div class="status-chip">
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
<span v-if="agentsPath">
|
|
43
43
|
({{ agentsExists ? t('common.exists') : t('common.notExistsWillCreateOnSave') }})
|
|
44
44
|
</span>
|
|
45
|
+
<span v-if="agentsPath" class="prompts-token-hint">· {{ t('prompts.tokenCount.hint', { count: agentsTokenCount }) }}</span>
|
|
45
46
|
</div>
|
|
46
47
|
<div class="prompts-editor-actions">
|
|
47
48
|
<div class="prompts-editor-group prompts-editor-group--pathref">
|
|
@@ -182,6 +183,12 @@
|
|
|
182
183
|
|
|
183
184
|
<div class="form-group">
|
|
184
185
|
<div v-if="agentsDiffVisible">
|
|
186
|
+
<div
|
|
187
|
+
v-if="!agentsDiffLoading && !agentsDiffError"
|
|
188
|
+
class="agents-diff-token-summary">
|
|
189
|
+
<span class="agents-diff-token-label">{{ t('prompts.tokenCount.diff', { before: agentsDiffTokenStats.before, current: agentsDiffTokenStats.current }) }}</span>
|
|
190
|
+
<span :class="['agents-diff-token-delta', 'agents-diff-token-delta--' + agentsDiffTokenStats.deltaKind]">{{ agentsDiffTokenStats.deltaLabel }}</span>
|
|
191
|
+
</div>
|
|
185
192
|
<div
|
|
186
193
|
v-if="!agentsDiffLoading && !agentsDiffError && !agentsDiffTruncated && (agentsDiffStats.added || agentsDiffStats.removed)"
|
|
187
194
|
class="agents-diff-summary">
|
|
@@ -274,6 +281,7 @@
|
|
|
274
281
|
<span v-if="sysPromptPath">
|
|
275
282
|
({{ sysPromptExists ? t('common.exists') : t('common.notExistsWillCreateOnSave') }})
|
|
276
283
|
</span>
|
|
284
|
+
<span v-if="sysPromptPath" class="prompts-token-hint">· {{ t('prompts.tokenCount.hint', { count: sysPromptTokenCount }) }}</span>
|
|
277
285
|
</div>
|
|
278
286
|
<div class="prompts-editor-actions">
|
|
279
287
|
<div class="prompts-editor-group prompts-editor-group--pathref">
|
|
@@ -335,6 +343,12 @@
|
|
|
335
343
|
</details>
|
|
336
344
|
<div class="form-group">
|
|
337
345
|
<div v-if="sysPromptDiffVisible">
|
|
346
|
+
<div
|
|
347
|
+
v-if="!sysPromptDiffLoading && !sysPromptDiffError"
|
|
348
|
+
class="agents-diff-token-summary">
|
|
349
|
+
<span class="agents-diff-token-label">{{ t('prompts.tokenCount.diff', { before: sysPromptDiffTokenStats.before, current: sysPromptDiffTokenStats.current }) }}</span>
|
|
350
|
+
<span :class="['agents-diff-token-delta', 'agents-diff-token-delta--' + sysPromptDiffTokenStats.deltaKind]">{{ sysPromptDiffTokenStats.deltaLabel }}</span>
|
|
351
|
+
</div>
|
|
338
352
|
<div
|
|
339
353
|
v-if="!sysPromptDiffLoading && !sysPromptDiffError && !sysPromptDiffTruncated && (sysPromptDiffStats.added || sysPromptDiffStats.removed)"
|
|
340
354
|
class="agents-diff-summary">
|
|
@@ -97,9 +97,6 @@
|
|
|
97
97
|
<button class="btn-tool btn-tool-compact" type="button" @click="switchMainTab('dashboard')" :title="t('dashboard.doctor.title')">
|
|
98
98
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="btn-icon-sm"><path d="M22 12h-4l-3 9L9 3l-3 9H2"/></svg>
|
|
99
99
|
</button>
|
|
100
|
-
<button class="btn-tool btn-tool-compact" type="button" @click="copySessionsFilterShareUrl" :disabled="sessionsLoading">
|
|
101
|
-
{{ t('sessions.filters.copyLink') }}
|
|
102
|
-
</button>
|
|
103
100
|
<button class="btn-tool btn-tool-compact" type="button" @click="clearSessionFilters" :disabled="sessionsLoading">
|
|
104
101
|
{{ t('common.resetFilters') }}
|
|
105
102
|
</button>
|
|
@@ -409,7 +406,7 @@
|
|
|
409
406
|
<span class="session-msg-time">{{ msg.timestamp || '' }}</span>
|
|
410
407
|
</div>
|
|
411
408
|
</div>
|
|
412
|
-
<div class="session-msg-content" v-html="
|
|
409
|
+
<div class="session-msg-content" v-html="msg.text || ''"></div>
|
|
413
410
|
<button
|
|
414
411
|
v-if="msg.normalizedRole === 'user'"
|
|
415
412
|
type="button"
|
|
@@ -432,6 +429,24 @@
|
|
|
432
429
|
</div>
|
|
433
430
|
</div>
|
|
434
431
|
</div>
|
|
432
|
+
<div class="session-preview-jump">
|
|
433
|
+
<button
|
|
434
|
+
type="button"
|
|
435
|
+
class="session-match-nav-btn"
|
|
436
|
+
@click="scrollSessionPreviewToTop"
|
|
437
|
+
:title="t('sessions.preview.scrollTop')"
|
|
438
|
+
:aria-label="t('sessions.preview.scrollTop')">
|
|
439
|
+
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 10 8 5 13 10"/></svg>
|
|
440
|
+
</button>
|
|
441
|
+
<button
|
|
442
|
+
type="button"
|
|
443
|
+
class="session-match-nav-btn"
|
|
444
|
+
@click="scrollSessionPreviewToBottom"
|
|
445
|
+
:title="t('sessions.preview.scrollBottom')"
|
|
446
|
+
:aria-label="t('sessions.preview.scrollBottom')">
|
|
447
|
+
<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 8 11 13 6"/></svg>
|
|
448
|
+
</button>
|
|
449
|
+
</div>
|
|
435
450
|
<aside v-if="sessionPreviewRenderEnabled && sessionTimelineNodes.length" :class="['session-timeline', 'session-timeline-' + sessionTimelineStyle]" :aria-label="t('sessions.timeline.aria')">
|
|
436
451
|
<!-- 点状模式 -->
|
|
437
452
|
<template v-if="sessionTimelineStyle === 'dots'">
|
|
@@ -412,7 +412,7 @@ return function render(_ctx, _cache) {
|
|
|
412
412
|
_createElementVNode("div", { class: "side-item-title" }, _toDisplayString(_ctx.t('side.sessions.browser')), 1 /* TEXT */),
|
|
413
413
|
_createElementVNode("div", { class: "side-item-meta" }, [
|
|
414
414
|
_createElementVNode("span", null, _toDisplayString(_ctx.t('side.sessions.browser.meta')), 1 /* TEXT */),
|
|
415
|
-
_createElementVNode("span", null, _toDisplayString(_ctx.t('sessions.sourceLabel', { value: (_ctx.sessionFilterSource === 'all' ? _ctx.t('sessions.source.all') : (_ctx.sessionFilterSource === 'claude' ? 'Claude Code' : (_ctx.sessionFilterSource === 'gemini' ? 'Gemini CLI' : (_ctx.sessionFilterSource === 'codebuddy' ? 'CodeBuddy Code' : 'Codex')))) })), 1 /* TEXT */)
|
|
415
|
+
_createElementVNode("span", null, _toDisplayString(_ctx.t('sessions.sourceLabel', { value: (_ctx.sessionFilterSource === 'all' ? _ctx.t('sessions.source.all') : (_ctx.sessionFilterSource === 'claude' ? 'Claude Code' : (_ctx.sessionFilterSource === 'gemini' ? 'Gemini CLI' : (_ctx.sessionFilterSource === 'codebuddy' ? 'CodeBuddy Code' : (_ctx.sessionFilterSource === 'workbuddy' ? 'WorkBuddy AI' : 'Codex'))))) })), 1 /* TEXT */)
|
|
416
416
|
])
|
|
417
417
|
], 42 /* CLASS, PROPS, NEED_HYDRATION */, ["aria-current", "onPointerdown", "onClick"]),
|
|
418
418
|
_createElementVNode("button", {
|
|
@@ -727,7 +727,9 @@ return function render(_ctx, _cache) {
|
|
|
727
727
|
? _ctx.t('sessions.source.gemini')
|
|
728
728
|
: (_ctx.sessionFilterSource === 'codebuddy'
|
|
729
729
|
? _ctx.t('sessions.source.codebuddy')
|
|
730
|
-
: _ctx.
|
|
730
|
+
: (_ctx.sessionFilterSource === 'workbuddy'
|
|
731
|
+
? _ctx.t('sessions.source.workbuddy')
|
|
732
|
+
: _ctx.t('sessions.source.codex'))))))), 1 /* TEXT */)
|
|
731
733
|
]),
|
|
732
734
|
_createElementVNode("div", { class: "status-chip" }, [
|
|
733
735
|
_createElementVNode("span", { class: "label" }, _toDisplayString(_ctx.t('status.sessionCount')), 1 /* TEXT */),
|
|
@@ -4017,12 +4019,6 @@ return function render(_ctx, _cache) {
|
|
|
4017
4019
|
_createElementVNode("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" })
|
|
4018
4020
|
]))
|
|
4019
4021
|
], 8 /* PROPS */, ["onClick", "title"]),
|
|
4020
|
-
_createElementVNode("button", {
|
|
4021
|
-
class: "btn-tool btn-tool-compact",
|
|
4022
|
-
type: "button",
|
|
4023
|
-
onClick: _ctx.copySessionsFilterShareUrl,
|
|
4024
|
-
disabled: _ctx.sessionsLoading
|
|
4025
|
-
}, _toDisplayString(_ctx.t('sessions.filters.copyLink')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
|
|
4026
4022
|
_createElementVNode("button", {
|
|
4027
4023
|
class: "btn-tool btn-tool-compact",
|
|
4028
4024
|
type: "button",
|
|
@@ -4647,7 +4643,7 @@ return function render(_ctx, _cache) {
|
|
|
4647
4643
|
]),
|
|
4648
4644
|
_createElementVNode("div", {
|
|
4649
4645
|
class: "session-msg-content",
|
|
4650
|
-
innerHTML:
|
|
4646
|
+
innerHTML: msg.text || ''
|
|
4651
4647
|
}, null, 8 /* PROPS */, ["innerHTML"]),
|
|
4652
4648
|
(msg.normalizedRole === 'user')
|
|
4653
4649
|
? (_openBlock(), _createElementBlock("button", {
|
|
@@ -4696,6 +4692,44 @@ return function render(_ctx, _cache) {
|
|
|
4696
4692
|
])
|
|
4697
4693
|
]))
|
|
4698
4694
|
], 40 /* PROPS, NEED_HYDRATION */, ["onScroll"]),
|
|
4695
|
+
_createElementVNode("div", { class: "session-preview-jump" }, [
|
|
4696
|
+
_createElementVNode("button", {
|
|
4697
|
+
type: "button",
|
|
4698
|
+
class: "session-match-nav-btn",
|
|
4699
|
+
onClick: _ctx.scrollSessionPreviewToTop,
|
|
4700
|
+
title: _ctx.t('sessions.preview.scrollTop'),
|
|
4701
|
+
"aria-label": _ctx.t('sessions.preview.scrollTop')
|
|
4702
|
+
}, [
|
|
4703
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
4704
|
+
viewBox: "0 0 16 16",
|
|
4705
|
+
fill: "none",
|
|
4706
|
+
stroke: "currentColor",
|
|
4707
|
+
"stroke-width": "1.8",
|
|
4708
|
+
"stroke-linecap": "round",
|
|
4709
|
+
"stroke-linejoin": "round"
|
|
4710
|
+
}, [
|
|
4711
|
+
_createElementVNode("polyline", { points: "3 10 8 5 13 10" })
|
|
4712
|
+
]))
|
|
4713
|
+
], 8 /* PROPS */, ["onClick", "title", "aria-label"]),
|
|
4714
|
+
_createElementVNode("button", {
|
|
4715
|
+
type: "button",
|
|
4716
|
+
class: "session-match-nav-btn",
|
|
4717
|
+
onClick: _ctx.scrollSessionPreviewToBottom,
|
|
4718
|
+
title: _ctx.t('sessions.preview.scrollBottom'),
|
|
4719
|
+
"aria-label": _ctx.t('sessions.preview.scrollBottom')
|
|
4720
|
+
}, [
|
|
4721
|
+
(_openBlock(), _createElementBlock("svg", {
|
|
4722
|
+
viewBox: "0 0 16 16",
|
|
4723
|
+
fill: "none",
|
|
4724
|
+
stroke: "currentColor",
|
|
4725
|
+
"stroke-width": "1.8",
|
|
4726
|
+
"stroke-linecap": "round",
|
|
4727
|
+
"stroke-linejoin": "round"
|
|
4728
|
+
}, [
|
|
4729
|
+
_createElementVNode("polyline", { points: "3 6 8 11 13 6" })
|
|
4730
|
+
]))
|
|
4731
|
+
], 8 /* PROPS */, ["onClick", "title", "aria-label"])
|
|
4732
|
+
]),
|
|
4699
4733
|
(_ctx.sessionPreviewRenderEnabled && _ctx.sessionTimelineNodes.length)
|
|
4700
4734
|
? (_openBlock(), _createElementBlock("aside", {
|
|
4701
4735
|
key: 0,
|
|
@@ -7034,6 +7068,12 @@ return function render(_ctx, _cache) {
|
|
|
7034
7068
|
_createTextVNode(_toDisplayString(_ctx.agentsPath || _ctx.t('common.notLoaded')) + " ", 1 /* TEXT */),
|
|
7035
7069
|
(_ctx.agentsPath)
|
|
7036
7070
|
? (_openBlock(), _createElementBlock("span", { key: 0 }, " (" + _toDisplayString(_ctx.agentsExists ? _ctx.t('common.exists') : _ctx.t('common.notExistsWillCreateOnSave')) + ") ", 1 /* TEXT */))
|
|
7071
|
+
: _createCommentVNode("v-if", true),
|
|
7072
|
+
(_ctx.agentsPath)
|
|
7073
|
+
? (_openBlock(), _createElementBlock("span", {
|
|
7074
|
+
key: 1,
|
|
7075
|
+
class: "prompts-token-hint"
|
|
7076
|
+
}, "· " + _toDisplayString(_ctx.t('prompts.tokenCount.hint', { count: _ctx.agentsTokenCount })), 1 /* TEXT */))
|
|
7037
7077
|
: _createCommentVNode("v-if", true)
|
|
7038
7078
|
]),
|
|
7039
7079
|
_createElementVNode("div", { class: "prompts-editor-actions" }, [
|
|
@@ -7352,9 +7392,20 @@ return function render(_ctx, _cache) {
|
|
|
7352
7392
|
_createElementVNode("div", { class: "form-group" }, [
|
|
7353
7393
|
(_ctx.agentsDiffVisible)
|
|
7354
7394
|
? (_openBlock(), _createElementBlock("div", { key: 0 }, [
|
|
7355
|
-
(!_ctx.agentsDiffLoading && !_ctx.agentsDiffError
|
|
7395
|
+
(!_ctx.agentsDiffLoading && !_ctx.agentsDiffError)
|
|
7356
7396
|
? (_openBlock(), _createElementBlock("div", {
|
|
7357
7397
|
key: 0,
|
|
7398
|
+
class: "agents-diff-token-summary"
|
|
7399
|
+
}, [
|
|
7400
|
+
_createElementVNode("span", { class: "agents-diff-token-label" }, _toDisplayString(_ctx.t('prompts.tokenCount.diff', { before: _ctx.agentsDiffTokenStats.before, current: _ctx.agentsDiffTokenStats.current })), 1 /* TEXT */),
|
|
7401
|
+
_createElementVNode("span", {
|
|
7402
|
+
class: _normalizeClass(['agents-diff-token-delta', 'agents-diff-token-delta--' + _ctx.agentsDiffTokenStats.deltaKind])
|
|
7403
|
+
}, _toDisplayString(_ctx.agentsDiffTokenStats.deltaLabel), 3 /* TEXT, CLASS */)
|
|
7404
|
+
]))
|
|
7405
|
+
: _createCommentVNode("v-if", true),
|
|
7406
|
+
(!_ctx.agentsDiffLoading && !_ctx.agentsDiffError && !_ctx.agentsDiffTruncated && (_ctx.agentsDiffStats.added || _ctx.agentsDiffStats.removed))
|
|
7407
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
7408
|
+
key: 1,
|
|
7358
7409
|
class: "agents-diff-summary"
|
|
7359
7410
|
}, [
|
|
7360
7411
|
_createElementVNode("span", { class: "agents-diff-stat add" }, "+" + _toDisplayString(_ctx.agentsDiffStats.added), 1 /* TEXT */),
|
|
@@ -7363,26 +7414,26 @@ return function render(_ctx, _cache) {
|
|
|
7363
7414
|
: _createCommentVNode("v-if", true),
|
|
7364
7415
|
(_ctx.agentsDiffLoading)
|
|
7365
7416
|
? (_openBlock(), _createElementBlock("div", {
|
|
7366
|
-
key:
|
|
7417
|
+
key: 2,
|
|
7367
7418
|
class: "state-message"
|
|
7368
7419
|
}, _toDisplayString(_ctx.t('diff.generating')), 1 /* TEXT */))
|
|
7369
7420
|
: (_ctx.agentsDiffError)
|
|
7370
7421
|
? (_openBlock(), _createElementBlock("div", {
|
|
7371
|
-
key:
|
|
7422
|
+
key: 3,
|
|
7372
7423
|
class: "state-message error"
|
|
7373
7424
|
}, _toDisplayString(_ctx.agentsDiffError), 1 /* TEXT */))
|
|
7374
7425
|
: (_ctx.agentsDiffTruncated)
|
|
7375
7426
|
? (_openBlock(), _createElementBlock("div", {
|
|
7376
|
-
key:
|
|
7427
|
+
key: 4,
|
|
7377
7428
|
class: "agents-diff-empty"
|
|
7378
7429
|
}, _toDisplayString(_ctx.t('diff.tooLargeSkip')), 1 /* TEXT */))
|
|
7379
7430
|
: (!_ctx.agentsDiffHasChanges)
|
|
7380
7431
|
? (_openBlock(), _createElementBlock("div", {
|
|
7381
|
-
key:
|
|
7432
|
+
key: 5,
|
|
7382
7433
|
class: "agents-diff-empty"
|
|
7383
7434
|
}, _toDisplayString(_ctx.t('diff.noChanges')), 1 /* TEXT */))
|
|
7384
7435
|
: (_openBlock(), _createElementBlock("div", {
|
|
7385
|
-
key:
|
|
7436
|
+
key: 6,
|
|
7386
7437
|
class: "prompts-diff-frame"
|
|
7387
7438
|
}, [
|
|
7388
7439
|
(_ctx.agentsChangeAxis.ticks.length)
|
|
@@ -7569,6 +7620,12 @@ return function render(_ctx, _cache) {
|
|
|
7569
7620
|
_createTextVNode(_toDisplayString(_ctx.sysPromptPath || _ctx.t('common.notLoaded')) + " ", 1 /* TEXT */),
|
|
7570
7621
|
(_ctx.sysPromptPath)
|
|
7571
7622
|
? (_openBlock(), _createElementBlock("span", { key: 0 }, " (" + _toDisplayString(_ctx.sysPromptExists ? _ctx.t('common.exists') : _ctx.t('common.notExistsWillCreateOnSave')) + ") ", 1 /* TEXT */))
|
|
7623
|
+
: _createCommentVNode("v-if", true),
|
|
7624
|
+
(_ctx.sysPromptPath)
|
|
7625
|
+
? (_openBlock(), _createElementBlock("span", {
|
|
7626
|
+
key: 1,
|
|
7627
|
+
class: "prompts-token-hint"
|
|
7628
|
+
}, "· " + _toDisplayString(_ctx.t('prompts.tokenCount.hint', { count: _ctx.sysPromptTokenCount })), 1 /* TEXT */))
|
|
7572
7629
|
: _createCommentVNode("v-if", true)
|
|
7573
7630
|
]),
|
|
7574
7631
|
_createElementVNode("div", { class: "prompts-editor-actions" }, [
|
|
@@ -7793,9 +7850,20 @@ return function render(_ctx, _cache) {
|
|
|
7793
7850
|
_createElementVNode("div", { class: "form-group" }, [
|
|
7794
7851
|
(_ctx.sysPromptDiffVisible)
|
|
7795
7852
|
? (_openBlock(), _createElementBlock("div", { key: 0 }, [
|
|
7796
|
-
(!_ctx.sysPromptDiffLoading && !_ctx.sysPromptDiffError
|
|
7853
|
+
(!_ctx.sysPromptDiffLoading && !_ctx.sysPromptDiffError)
|
|
7797
7854
|
? (_openBlock(), _createElementBlock("div", {
|
|
7798
7855
|
key: 0,
|
|
7856
|
+
class: "agents-diff-token-summary"
|
|
7857
|
+
}, [
|
|
7858
|
+
_createElementVNode("span", { class: "agents-diff-token-label" }, _toDisplayString(_ctx.t('prompts.tokenCount.diff', { before: _ctx.sysPromptDiffTokenStats.before, current: _ctx.sysPromptDiffTokenStats.current })), 1 /* TEXT */),
|
|
7859
|
+
_createElementVNode("span", {
|
|
7860
|
+
class: _normalizeClass(['agents-diff-token-delta', 'agents-diff-token-delta--' + _ctx.sysPromptDiffTokenStats.deltaKind])
|
|
7861
|
+
}, _toDisplayString(_ctx.sysPromptDiffTokenStats.deltaLabel), 3 /* TEXT, CLASS */)
|
|
7862
|
+
]))
|
|
7863
|
+
: _createCommentVNode("v-if", true),
|
|
7864
|
+
(!_ctx.sysPromptDiffLoading && !_ctx.sysPromptDiffError && !_ctx.sysPromptDiffTruncated && (_ctx.sysPromptDiffStats.added || _ctx.sysPromptDiffStats.removed))
|
|
7865
|
+
? (_openBlock(), _createElementBlock("div", {
|
|
7866
|
+
key: 1,
|
|
7799
7867
|
class: "agents-diff-summary"
|
|
7800
7868
|
}, [
|
|
7801
7869
|
_createElementVNode("span", { class: "agents-diff-stat add" }, "+" + _toDisplayString(_ctx.sysPromptDiffStats.added), 1 /* TEXT */),
|
|
@@ -7804,26 +7872,26 @@ return function render(_ctx, _cache) {
|
|
|
7804
7872
|
: _createCommentVNode("v-if", true),
|
|
7805
7873
|
(_ctx.sysPromptDiffLoading)
|
|
7806
7874
|
? (_openBlock(), _createElementBlock("div", {
|
|
7807
|
-
key:
|
|
7875
|
+
key: 2,
|
|
7808
7876
|
class: "state-message"
|
|
7809
7877
|
}, _toDisplayString(_ctx.t('diff.generating')), 1 /* TEXT */))
|
|
7810
7878
|
: (_ctx.sysPromptDiffError)
|
|
7811
7879
|
? (_openBlock(), _createElementBlock("div", {
|
|
7812
|
-
key:
|
|
7880
|
+
key: 3,
|
|
7813
7881
|
class: "state-message error"
|
|
7814
7882
|
}, _toDisplayString(_ctx.sysPromptDiffError), 1 /* TEXT */))
|
|
7815
7883
|
: (_ctx.sysPromptDiffTruncated)
|
|
7816
7884
|
? (_openBlock(), _createElementBlock("div", {
|
|
7817
|
-
key:
|
|
7885
|
+
key: 4,
|
|
7818
7886
|
class: "agents-diff-empty"
|
|
7819
7887
|
}, _toDisplayString(_ctx.t('diff.tooLargeSkip')), 1 /* TEXT */))
|
|
7820
7888
|
: (!_ctx.sysPromptDiffHasChangesValue)
|
|
7821
7889
|
? (_openBlock(), _createElementBlock("div", {
|
|
7822
|
-
key:
|
|
7890
|
+
key: 5,
|
|
7823
7891
|
class: "agents-diff-empty"
|
|
7824
7892
|
}, _toDisplayString(_ctx.t('diff.noChanges')), 1 /* TEXT */))
|
|
7825
7893
|
: (_openBlock(), _createElementBlock("div", {
|
|
7826
|
-
key:
|
|
7894
|
+
key: 6,
|
|
7827
7895
|
class: "prompts-diff-frame"
|
|
7828
7896
|
}, [
|
|
7829
7897
|
(_ctx.sysChangeAxis.ticks.length)
|
|
@@ -383,7 +383,7 @@ export async function loadActiveSessionDetail(api, options = {}) {
|
|
|
383
383
|
sessionId: this.activeSession.sessionId,
|
|
384
384
|
filePath: this.activeSession.filePath,
|
|
385
385
|
messageLimit,
|
|
386
|
-
preview
|
|
386
|
+
preview,
|
|
387
387
|
});
|
|
388
388
|
|
|
389
389
|
if (requestSeq !== this.sessionDetailRequestSeq) {
|
|
@@ -289,3 +289,27 @@ body::before {
|
|
|
289
289
|
radial-gradient(circle at 86% 18%, rgba(255, 232, 206, 0.36), rgba(255, 232, 206, 0) 30%);
|
|
290
290
|
z-index: 0;
|
|
291
291
|
}
|
|
292
|
+
|
|
293
|
+
/* Site-wide custom scrollbars (class-scoped scrollbar-width:none rules keep priority via specificity) */
|
|
294
|
+
* {
|
|
295
|
+
scrollbar-width: thin;
|
|
296
|
+
scrollbar-color: rgba(137, 111, 94, 0.35) transparent;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
::-webkit-scrollbar {
|
|
300
|
+
width: 8px;
|
|
301
|
+
height: 8px;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
::-webkit-scrollbar-track {
|
|
305
|
+
background: transparent;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
::-webkit-scrollbar-thumb {
|
|
309
|
+
background: rgba(137, 111, 94, 0.35);
|
|
310
|
+
border-radius: 999px;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
::-webkit-scrollbar-thumb:hover {
|
|
314
|
+
background: rgba(137, 111, 94, 0.55);
|
|
315
|
+
}
|