codexmate 0.0.54 → 0.0.55

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.
@@ -518,12 +518,36 @@ return function render(_ctx, _cache) {
518
518
  ])
519
519
  ]),
520
520
  _createElementVNode("div", { class: "side-rail-lang" }, [
521
- _createElementVNode("button", {
522
- type: "button",
523
- class: "language-settings-link",
524
- "aria-label": _ctx.t('settings.language.sideLabel', { language: _ctx.currentLanguageLabel() }),
525
- onClick: _ctx.openLanguageSettings
526
- }, _toDisplayString(_ctx.t('settings.language.sideLabel', { language: _ctx.currentLanguageLabel() })), 9 /* TEXT, PROPS */, ["aria-label", "onClick"])
521
+ _createElementVNode("div", { class: "side-rail-lang-actions" }, [
522
+ _createElementVNode("button", {
523
+ type: "button",
524
+ class: "language-settings-link",
525
+ "aria-label": _ctx.t('settings.language.sideLabel', { language: _ctx.currentLanguageLabel() }),
526
+ onClick: _ctx.openLanguageSettings
527
+ }, _toDisplayString(_ctx.t('settings.language.sideLabel', { language: _ctx.currentLanguageLabel() })), 9 /* TEXT, PROPS */, ["aria-label", "onClick"]),
528
+ _createElementVNode("button", {
529
+ type: "button",
530
+ class: "side-announcement-button",
531
+ "aria-label": _ctx.t('announcement.providerCache.open'),
532
+ title: _ctx.t('announcement.providerCache.open'),
533
+ onClick: _ctx.openProviderCacheAnnouncementModal
534
+ }, [
535
+ (_openBlock(), _createElementBlock("svg", {
536
+ viewBox: "0 0 20 20",
537
+ fill: "none",
538
+ stroke: "currentColor",
539
+ "stroke-width": "1.7",
540
+ "stroke-linecap": "round",
541
+ "stroke-linejoin": "round",
542
+ width: "16",
543
+ height: "16",
544
+ "aria-hidden": "true"
545
+ }, [
546
+ _createElementVNode("path", { d: "M15 8.5a5 5 0 0 0-10 0c0 2.75-1 4.25-2 5.5h14c-1-1.25-2-2.75-2-5.5Z" }),
547
+ _createElementVNode("path", { d: "M8 16a2 2 0 0 0 4 0" })
548
+ ]))
549
+ ], 8 /* PROPS */, ["aria-label", "title", "onClick"])
550
+ ])
527
551
  ])
528
552
  ]))
529
553
  : _createCommentVNode("v-if", true),
@@ -2891,12 +2915,12 @@ return function render(_ctx, _cache) {
2891
2915
  ], 8 /* PROPS */, ["aria-label"]))
2892
2916
  : _createCommentVNode("v-if", true)
2893
2917
  ]),
2894
- (_ctx.sessionsLoading)
2918
+ (_ctx.sessionsLoading && _ctx.sessionsList.length === 0)
2895
2919
  ? (_openBlock(), _createElementBlock("div", {
2896
2920
  key: 0,
2897
2921
  class: "state-message"
2898
2922
  }, _toDisplayString(_ctx.t('sessions.loadingList')), 1 /* TEXT */))
2899
- : (_ctx.sessionsList.length === 0)
2923
+ : (!_ctx.sessionsLoading && _ctx.sessionsList.length === 0)
2900
2924
  ? (_openBlock(), _createElementBlock("div", {
2901
2925
  key: 1,
2902
2926
  class: "session-empty"
@@ -4913,6 +4937,42 @@ return function render(_ctx, _cache) {
4913
4937
  onChange: _ctx.handleCodexImportChange
4914
4938
  }, null, 40 /* PROPS, NEED_HYDRATION */, ["onChange"])
4915
4939
  ], 8 /* PROPS */, ["aria-label"]),
4940
+ _createElementVNode("section", {
4941
+ class: "settings-card",
4942
+ "aria-label": _ctx.t('settings.providerCache.title')
4943
+ }, [
4944
+ _createElementVNode("div", { class: "settings-card-main" }, [
4945
+ _createElementVNode("div", { class: "settings-card-content" }, [
4946
+ _createElementVNode("div", { class: "settings-card-title" }, _toDisplayString(_ctx.t('settings.providerCache.title')), 1 /* TEXT */),
4947
+ _createElementVNode("p", { class: "settings-card-desc" }, _toDisplayString(_ctx.t('settings.providerCache.meta')), 1 /* TEXT */),
4948
+ _createElementVNode("p", { class: "settings-card-hint" }, _toDisplayString(_ctx.t('settings.providerCache.hint')), 1 /* TEXT */),
4949
+ (_ctx.providerCacheSyncMessage)
4950
+ ? (_openBlock(), _createElementBlock("p", {
4951
+ key: 0,
4952
+ class: "settings-card-hint provider-cache-sync-message"
4953
+ }, _toDisplayString(_ctx.providerCacheSyncMessage), 1 /* TEXT */))
4954
+ : _createCommentVNode("v-if", true),
4955
+ (_ctx.providerCacheError)
4956
+ ? (_openBlock(), _createElementBlock("p", {
4957
+ key: 1,
4958
+ class: "settings-card-hint form-error"
4959
+ }, _toDisplayString(_ctx.providerCacheError), 1 /* TEXT */))
4960
+ : _createCommentVNode("v-if", true)
4961
+ ])
4962
+ ]),
4963
+ _createElementVNode("div", { class: "settings-card-actions" }, [
4964
+ _createElementVNode("button", {
4965
+ class: "settings-card-action",
4966
+ onClick: $event => (_ctx.openProviderCacheModal({ forceRefresh: true })),
4967
+ disabled: _ctx.providerCacheLoading || _ctx.providerCacheSyncing
4968
+ }, _toDisplayString(_ctx.providerCacheLoading ? _ctx.t('settings.providerCache.loading') : _ctx.t('settings.providerCache.open')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
4969
+ _createElementVNode("button", {
4970
+ class: "settings-card-action",
4971
+ onClick: _ctx.syncProviderCacheRecords,
4972
+ disabled: _ctx.providerCacheLoading || _ctx.providerCacheSyncing
4973
+ }, _toDisplayString(_ctx.providerCacheSyncing ? _ctx.t('settings.providerCache.syncing') : _ctx.t('settings.providerCache.sync')), 9 /* TEXT, PROPS */, ["onClick", "disabled"])
4974
+ ])
4975
+ ], 8 /* PROPS */, ["aria-label"]),
4916
4976
  _createElementVNode("section", {
4917
4977
  class: "settings-card",
4918
4978
  "aria-label": _ctx.t('settings.trashConfig.title')
@@ -6633,10 +6693,327 @@ return function render(_ctx, _cache) {
6633
6693
  ])
6634
6694
  ], 8 /* PROPS */, ["onClick"]))
6635
6695
  : _createCommentVNode("v-if", true),
6696
+ _createCommentVNode(" 项目功能公告模态框 "),
6697
+ (_ctx.showProviderCacheAnnouncementModal)
6698
+ ? (_openBlock(), _createElementBlock("div", {
6699
+ key: 7,
6700
+ class: "modal-overlay project-announcement-overlay",
6701
+ onClick: _withModifiers(_ctx.closeProviderCacheAnnouncementModal, ["self"])
6702
+ }, [
6703
+ _createElementVNode("div", {
6704
+ class: "modal provider-cache-announcement-modal project-announcement-modal",
6705
+ role: "dialog",
6706
+ "aria-modal": "true",
6707
+ "aria-labelledby": "provider-cache-announcement-title"
6708
+ }, [
6709
+ _createElementVNode("button", {
6710
+ type: "button",
6711
+ class: "project-announcement-close",
6712
+ "aria-label": _ctx.t('announcement.project.closeAria'),
6713
+ onClick: _ctx.closeProviderCacheAnnouncementModal
6714
+ }, "×", 8 /* PROPS */, ["aria-label", "onClick"]),
6715
+ _createElementVNode("div", { class: "project-announcement-header" }, [
6716
+ _createElementVNode("div", { class: "project-announcement-eyebrow" }, _toDisplayString(_ctx.t('announcement.project.eyebrow')), 1 /* TEXT */),
6717
+ _createElementVNode("div", {
6718
+ class: "modal-title project-announcement-title",
6719
+ id: "provider-cache-announcement-title"
6720
+ }, _toDisplayString(_ctx.t('announcement.project.title')), 1 /* TEXT */),
6721
+ _createElementVNode("p", { class: "provider-cache-announcement-copy provider-cache-announcement-lede" }, _toDisplayString(_ctx.t('announcement.project.subtitle')), 1 /* TEXT */)
6722
+ ]),
6723
+ _createElementVNode("div", {
6724
+ class: "project-announcement-feature-grid",
6725
+ "aria-label": _ctx.t('announcement.project.features.aria')
6726
+ }, [
6727
+ _createElementVNode("article", { class: "project-announcement-feature-card" }, [
6728
+ _createElementVNode("div", { class: "project-announcement-feature-title" }, _toDisplayString(_ctx.t('announcement.project.feature.config.title')), 1 /* TEXT */),
6729
+ _createElementVNode("div", { class: "project-announcement-feature-meta" }, _toDisplayString(_ctx.t('announcement.project.feature.config.meta')), 1 /* TEXT */)
6730
+ ]),
6731
+ _createElementVNode("article", { class: "project-announcement-feature-card" }, [
6732
+ _createElementVNode("div", { class: "project-announcement-feature-title" }, _toDisplayString(_ctx.t('announcement.project.feature.sessions.title')), 1 /* TEXT */),
6733
+ _createElementVNode("div", { class: "project-announcement-feature-meta" }, _toDisplayString(_ctx.t('announcement.project.feature.sessions.meta')), 1 /* TEXT */)
6734
+ ]),
6735
+ _createElementVNode("article", { class: "project-announcement-feature-card" }, [
6736
+ _createElementVNode("div", { class: "project-announcement-feature-title" }, _toDisplayString(_ctx.t('announcement.project.feature.usage.title')), 1 /* TEXT */),
6737
+ _createElementVNode("div", { class: "project-announcement-feature-meta" }, _toDisplayString(_ctx.t('announcement.project.feature.usage.meta')), 1 /* TEXT */)
6738
+ ]),
6739
+ _createElementVNode("article", { class: "project-announcement-feature-card" }, [
6740
+ _createElementVNode("div", { class: "project-announcement-feature-title" }, _toDisplayString(_ctx.t('announcement.project.feature.tasks.title')), 1 /* TEXT */),
6741
+ _createElementVNode("div", { class: "project-announcement-feature-meta" }, _toDisplayString(_ctx.t('announcement.project.feature.tasks.meta')), 1 /* TEXT */)
6742
+ ]),
6743
+ _createElementVNode("article", { class: "project-announcement-feature-card" }, [
6744
+ _createElementVNode("div", { class: "project-announcement-feature-title" }, _toDisplayString(_ctx.t('announcement.project.feature.skills.title')), 1 /* TEXT */),
6745
+ _createElementVNode("div", { class: "project-announcement-feature-meta" }, _toDisplayString(_ctx.t('announcement.project.feature.skills.meta')), 1 /* TEXT */)
6746
+ ]),
6747
+ _createElementVNode("article", { class: "project-announcement-feature-card" }, [
6748
+ _createElementVNode("div", { class: "project-announcement-feature-title" }, _toDisplayString(_ctx.t('announcement.project.feature.data.title')), 1 /* TEXT */),
6749
+ _createElementVNode("div", { class: "project-announcement-feature-meta" }, _toDisplayString(_ctx.t('announcement.project.feature.data.meta')), 1 /* TEXT */)
6750
+ ])
6751
+ ], 8 /* PROPS */, ["aria-label"]),
6752
+ _createElementVNode("details", {
6753
+ class: "project-announcement-cache-section",
6754
+ "aria-labelledby": "project-announcement-cache-title"
6755
+ }, [
6756
+ _createElementVNode("summary", { class: "project-announcement-section-head" }, [
6757
+ _createElementVNode("span", null, [
6758
+ _createElementVNode("span", {
6759
+ class: "project-announcement-section-title",
6760
+ id: "project-announcement-cache-title"
6761
+ }, _toDisplayString(_ctx.t('announcement.project.cache.title')), 1 /* TEXT */),
6762
+ _createElementVNode("span", { class: "project-announcement-section-meta" }, _toDisplayString(_ctx.t('announcement.project.cache.meta')), 1 /* TEXT */)
6763
+ ]),
6764
+ (_ctx.getProviderCacheAnnouncementSummary().loadedAt)
6765
+ ? (_openBlock(), _createElementBlock("span", {
6766
+ key: 0,
6767
+ class: "provider-cache-loaded-at"
6768
+ }, _toDisplayString(_ctx.t('modal.providerCache.loadedAt')) + ": " + _toDisplayString(_ctx.getProviderCacheAnnouncementSummary().loadedAt), 1 /* TEXT */))
6769
+ : _createCommentVNode("v-if", true)
6770
+ ]),
6771
+ (_ctx.providerCacheError)
6772
+ ? (_openBlock(), _createElementBlock("div", {
6773
+ key: 0,
6774
+ class: "state-message error provider-cache-error"
6775
+ }, _toDisplayString(_ctx.providerCacheError), 1 /* TEXT */))
6776
+ : _createCommentVNode("v-if", true),
6777
+ (_ctx.providerCacheSyncMessage)
6778
+ ? (_openBlock(), _createElementBlock("div", {
6779
+ key: 1,
6780
+ class: "state-message provider-cache-sync-message"
6781
+ }, _toDisplayString(_ctx.providerCacheSyncMessage), 1 /* TEXT */))
6782
+ : _createCommentVNode("v-if", true),
6783
+ (_ctx.providerCacheLoading && !_ctx.providerCacheLoadedOnce)
6784
+ ? (_openBlock(), _createElementBlock("div", {
6785
+ key: 2,
6786
+ class: "state-message"
6787
+ }, _toDisplayString(_ctx.t('modal.providerCache.loading')), 1 /* TEXT */))
6788
+ : _createCommentVNode("v-if", true),
6789
+ _createElementVNode("div", { class: "provider-cache-announcement-body" }, [
6790
+ _createElementVNode("div", {
6791
+ class: "project-announcement-mini-status",
6792
+ "aria-label": _ctx.t('announcement.project.status.aria')
6793
+ }, [
6794
+ _createElementVNode("span", null, [
6795
+ _createTextVNode(_toDisplayString(_ctx.t('announcement.project.status.provider')) + ": ", 1 /* TEXT */),
6796
+ _createElementVNode("strong", null, _toDisplayString(_ctx.currentProvider || _ctx.t('common.notSelected')), 1 /* TEXT */)
6797
+ ]),
6798
+ _createElementVNode("span", null, [
6799
+ _createTextVNode(_toDisplayString(_ctx.t('announcement.project.status.model')) + ": ", 1 /* TEXT */),
6800
+ _createElementVNode("strong", null, _toDisplayString(_ctx.currentModel || _ctx.t('common.notSelected')), 1 /* TEXT */)
6801
+ ]),
6802
+ _createElementVNode("span", null, [
6803
+ _createTextVNode(_toDisplayString(_ctx.t('announcement.project.status.cacheFiles')) + ": ", 1 /* TEXT */),
6804
+ _createElementVNode("strong", null, _toDisplayString(_ctx.getProviderCacheAnnouncementSummary().fileCount), 1 /* TEXT */)
6805
+ ])
6806
+ ], 8 /* PROPS */, ["aria-label"]),
6807
+ _createElementVNode("div", { class: "provider-cache-summary-grid" }, [
6808
+ _createElementVNode("div", { class: "provider-cache-summary-card" }, [
6809
+ _createElementVNode("span", { class: "provider-cache-summary-label" }, _toDisplayString(_ctx.t('announcement.project.cache.files')), 1 /* TEXT */),
6810
+ _createElementVNode("strong", null, _toDisplayString(_ctx.getProviderCacheAnnouncementSummary().fileCount), 1 /* TEXT */)
6811
+ ]),
6812
+ _createElementVNode("div", { class: "provider-cache-summary-card" }, [
6813
+ _createElementVNode("span", { class: "provider-cache-summary-label" }, _toDisplayString(_ctx.t('announcement.project.cache.providers')), 1 /* TEXT */),
6814
+ _createElementVNode("strong", null, _toDisplayString(_ctx.getProviderCacheAnnouncementSummary().providerCount), 1 /* TEXT */)
6815
+ ]),
6816
+ _createElementVNode("div", { class: "provider-cache-summary-card" }, [
6817
+ _createElementVNode("span", { class: "provider-cache-summary-label" }, _toDisplayString(_ctx.t('announcement.project.cache.groups')), 1 /* TEXT */),
6818
+ _createElementVNode("strong", null, _toDisplayString(_ctx.getProviderCacheAnnouncementSummary().groupCount), 1 /* TEXT */)
6819
+ ])
6820
+ ]),
6821
+ _createElementVNode("div", {
6822
+ class: "provider-cache-announcement-list",
6823
+ "aria-label": _ctx.t('announcement.project.cache.groupList')
6824
+ }, [
6825
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getProviderCacheAnnouncementGroups(), (group) => {
6826
+ return (_openBlock(), _createElementBlock("div", {
6827
+ key: group.key,
6828
+ class: "provider-cache-announcement-row"
6829
+ }, [
6830
+ _createElementVNode("span", null, _toDisplayString(group.label), 1 /* TEXT */),
6831
+ _createElementVNode("span", null, _toDisplayString(_ctx.t('announcement.project.cache.groupSummary', { files: group.existingCount, providers: group.providerCount })), 1 /* TEXT */)
6832
+ ]))
6833
+ }), 128 /* KEYED_FRAGMENT */))
6834
+ ], 8 /* PROPS */, ["aria-label"]),
6835
+ _createElementVNode("div", { class: "project-announcement-cache-actions" }, [
6836
+ _createElementVNode("button", {
6837
+ type: "button",
6838
+ class: "btn-tool btn-tool-compact",
6839
+ onClick: _ctx.syncProviderCacheRecords,
6840
+ disabled: _ctx.providerCacheLoading || _ctx.providerCacheSyncing
6841
+ }, _toDisplayString(_ctx.providerCacheSyncing ? _ctx.t('modal.providerCache.syncing') : _ctx.t('announcement.project.cache.sync')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
6842
+ _createElementVNode("button", {
6843
+ type: "button",
6844
+ class: "btn-tool btn-tool-compact",
6845
+ onClick: _ctx.loadProviderCacheRecords,
6846
+ disabled: _ctx.providerCacheLoading
6847
+ }, _toDisplayString(_ctx.providerCacheLoading ? _ctx.t('modal.providerCache.refreshing') : _ctx.t('announcement.project.cache.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
6848
+ _createElementVNode("button", {
6849
+ type: "button",
6850
+ class: "btn-tool btn-tool-compact",
6851
+ onClick: _ctx.openProviderCacheDetailsFromAnnouncement
6852
+ }, _toDisplayString(_ctx.t('announcement.project.cache.details')), 9 /* TEXT, PROPS */, ["onClick"])
6853
+ ])
6854
+ ])
6855
+ ]),
6856
+ _createElementVNode("div", { class: "btn-group provider-cache-footer project-announcement-footer" }, [
6857
+ _createElementVNode("button", {
6858
+ class: "btn btn-confirm",
6859
+ onClick: _ctx.closeProviderCacheAnnouncementModal
6860
+ }, _toDisplayString(_ctx.t('announcement.project.primaryAction')), 9 /* TEXT, PROPS */, ["onClick"])
6861
+ ])
6862
+ ])
6863
+ ], 8 /* PROPS */, ["onClick"]))
6864
+ : _createCommentVNode("v-if", true),
6865
+ _createCommentVNode(" Provider 缓存记录模态框 "),
6866
+ (_ctx.showProviderCacheModal)
6867
+ ? (_openBlock(), _createElementBlock("div", {
6868
+ key: 8,
6869
+ class: "modal-overlay",
6870
+ onClick: _withModifiers(_ctx.closeProviderCacheModal, ["self"])
6871
+ }, [
6872
+ _createElementVNode("div", {
6873
+ class: "modal modal-wide provider-cache-modal",
6874
+ role: "dialog",
6875
+ "aria-modal": "true",
6876
+ "aria-labelledby": "provider-cache-modal-title"
6877
+ }, [
6878
+ _createElementVNode("div", {
6879
+ class: "modal-title",
6880
+ id: "provider-cache-modal-title"
6881
+ }, _toDisplayString(_ctx.t('modal.providerCache.title')), 1 /* TEXT */),
6882
+ _createElementVNode("div", { class: "form-hint provider-cache-root" }, _toDisplayString(_ctx.t('modal.providerCache.root')) + ": " + _toDisplayString((_ctx.providerCacheRecords && _ctx.providerCacheRecords.root) || '~/.codexmate'), 1 /* TEXT */),
6883
+ _createElementVNode("div", { class: "provider-cache-toolbar" }, [
6884
+ _createElementVNode("button", {
6885
+ type: "button",
6886
+ class: "btn-tool btn-tool-compact",
6887
+ onClick: _ctx.loadProviderCacheRecords,
6888
+ disabled: _ctx.providerCacheLoading
6889
+ }, _toDisplayString(_ctx.providerCacheLoading ? _ctx.t('modal.providerCache.refreshing') : _ctx.t('modal.providerCache.refresh')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
6890
+ _createElementVNode("button", {
6891
+ type: "button",
6892
+ class: "btn-tool btn-tool-compact",
6893
+ onClick: _ctx.syncProviderCacheRecords,
6894
+ disabled: _ctx.providerCacheLoading || _ctx.providerCacheSyncing
6895
+ }, _toDisplayString(_ctx.providerCacheSyncing ? _ctx.t('modal.providerCache.syncing') : _ctx.t('modal.providerCache.sync')), 9 /* TEXT, PROPS */, ["onClick", "disabled"]),
6896
+ (_ctx.providerCacheLoadedAt)
6897
+ ? (_openBlock(), _createElementBlock("span", {
6898
+ key: 0,
6899
+ class: "provider-cache-loaded-at"
6900
+ }, _toDisplayString(_ctx.t('modal.providerCache.loadedAt')) + ": " + _toDisplayString(_ctx.providerCacheLoadedAt), 1 /* TEXT */))
6901
+ : _createCommentVNode("v-if", true)
6902
+ ]),
6903
+ (_ctx.providerCacheError)
6904
+ ? (_openBlock(), _createElementBlock("div", {
6905
+ key: 0,
6906
+ class: "state-message error provider-cache-error"
6907
+ }, _toDisplayString(_ctx.providerCacheError), 1 /* TEXT */))
6908
+ : _createCommentVNode("v-if", true),
6909
+ (_ctx.providerCacheSyncMessage)
6910
+ ? (_openBlock(), _createElementBlock("div", {
6911
+ key: 1,
6912
+ class: "state-message provider-cache-sync-message"
6913
+ }, _toDisplayString(_ctx.providerCacheSyncMessage), 1 /* TEXT */))
6914
+ : _createCommentVNode("v-if", true),
6915
+ (_ctx.providerCacheLoading && !_ctx.providerCacheLoadedOnce)
6916
+ ? (_openBlock(), _createElementBlock("div", {
6917
+ key: 2,
6918
+ class: "state-message"
6919
+ }, _toDisplayString(_ctx.t('modal.providerCache.loading')), 1 /* TEXT */))
6920
+ : (_openBlock(), _createElementBlock("div", {
6921
+ key: 3,
6922
+ class: "provider-cache-body"
6923
+ }, [
6924
+ _createElementVNode("div", { class: "provider-cache-groups" }, [
6925
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getProviderCacheGroups(), (group) => {
6926
+ return (_openBlock(), _createElementBlock("section", {
6927
+ key: group.key,
6928
+ class: "provider-cache-group"
6929
+ }, [
6930
+ _createElementVNode("div", { class: "provider-cache-group-header" }, [
6931
+ _createElementVNode("div", { class: "provider-cache-group-title" }, _toDisplayString(group.label), 1 /* TEXT */),
6932
+ _createElementVNode("div", { class: "provider-cache-group-meta" }, _toDisplayString(_ctx.t('modal.providerCache.groupMeta', { count: group.existingCount || 0 })), 1 /* TEXT */)
6933
+ ]),
6934
+ (!_ctx.hasProviderCacheExistingFiles(group))
6935
+ ? (_openBlock(), _createElementBlock("div", {
6936
+ key: 0,
6937
+ class: "provider-cache-empty"
6938
+ }, _toDisplayString(_ctx.t('modal.providerCache.empty')), 1 /* TEXT */))
6939
+ : (_openBlock(), _createElementBlock("div", {
6940
+ key: 1,
6941
+ class: "provider-cache-file-list"
6942
+ }, [
6943
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getProviderCacheExistingFiles(group), (file) => {
6944
+ return (_openBlock(), _createElementBlock("article", {
6945
+ key: _ctx.getProviderCacheFileKey(file),
6946
+ class: "provider-cache-file"
6947
+ }, [
6948
+ _createElementVNode("div", { class: "provider-cache-file-header" }, [
6949
+ _createElementVNode("div", null, [
6950
+ _createElementVNode("div", { class: "provider-cache-file-name" }, _toDisplayString(file.name), 1 /* TEXT */),
6951
+ _createElementVNode("div", { class: "provider-cache-file-summary" }, _toDisplayString(_ctx.getProviderCacheFileSummary(file)), 1 /* TEXT */)
6952
+ ]),
6953
+ _createElementVNode("div", { class: "provider-cache-file-meta" }, [
6954
+ _createElementVNode("span", null, _toDisplayString(_ctx.formatProviderCacheFileSize(file.size)), 1 /* TEXT */),
6955
+ (file.mtime)
6956
+ ? (_openBlock(), _createElementBlock("span", { key: 0 }, _toDisplayString(file.mtime), 1 /* TEXT */))
6957
+ : _createCommentVNode("v-if", true)
6958
+ ])
6959
+ ]),
6960
+ _createElementVNode("div", { class: "provider-cache-file-path" }, _toDisplayString(_ctx.getProviderCacheFilePath(file)), 1 /* TEXT */),
6961
+ (_ctx.hasProviderCacheProviders(file))
6962
+ ? (_openBlock(), _createElementBlock("div", {
6963
+ key: 0,
6964
+ class: "provider-cache-provider-list"
6965
+ }, [
6966
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getProviderCacheFileProviders(file), (provider, providerIndex) => {
6967
+ return (_openBlock(), _createElementBlock("details", {
6968
+ key: provider.name || (_ctx.getProviderCacheFileKey(file) + ':' + providerIndex),
6969
+ class: "provider-cache-provider",
6970
+ open: ""
6971
+ }, [
6972
+ _createElementVNode("summary", { class: "provider-cache-provider-summary" }, [
6973
+ _createElementVNode("span", { class: "provider-cache-provider-name" }, _toDisplayString(provider.name || 'provider'), 1 /* TEXT */),
6974
+ _createElementVNode("span", { class: "provider-cache-provider-badges" }, [
6975
+ (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.getProviderCacheProviderMeta(provider), (item) => {
6976
+ return (_openBlock(), _createElementBlock("span", {
6977
+ key: item.label,
6978
+ class: "provider-cache-provider-badge"
6979
+ }, _toDisplayString(item.label) + ": " + _toDisplayString(item.value), 1 /* TEXT */))
6980
+ }), 128 /* KEYED_FRAGMENT */))
6981
+ ])
6982
+ ]),
6983
+ _createElementVNode("pre", { class: "provider-cache-json provider-cache-json-compact" }, _toDisplayString(_ctx.getProviderCacheProviderText(provider)), 1 /* TEXT */)
6984
+ ]))
6985
+ }), 128 /* KEYED_FRAGMENT */))
6986
+ ]))
6987
+ : _createCommentVNode("v-if", true),
6988
+ _createElementVNode("details", {
6989
+ class: "provider-cache-raw",
6990
+ open: !_ctx.hasProviderCacheProviders(file) || file.ok === false
6991
+ }, [
6992
+ _createElementVNode("summary", null, _toDisplayString(file.ok === false ? _ctx.t('modal.providerCache.errorDetails') : _ctx.t('modal.providerCache.rawJson')), 1 /* TEXT */),
6993
+ _createElementVNode("pre", {
6994
+ class: _normalizeClass(['provider-cache-json', { error: file.ok === false }])
6995
+ }, _toDisplayString(_ctx.getProviderCacheRecordText(file)), 3 /* TEXT, CLASS */)
6996
+ ], 8 /* PROPS */, ["open"])
6997
+ ]))
6998
+ }), 128 /* KEYED_FRAGMENT */))
6999
+ ]))
7000
+ ]))
7001
+ }), 128 /* KEYED_FRAGMENT */))
7002
+ ])
7003
+ ])),
7004
+ _createElementVNode("div", { class: "btn-group provider-cache-footer" }, [
7005
+ _createElementVNode("button", {
7006
+ class: "btn btn-confirm",
7007
+ onClick: _ctx.closeProviderCacheModal
7008
+ }, _toDisplayString(_ctx.t('common.close')), 9 /* TEXT, PROPS */, ["onClick"])
7009
+ ])
7010
+ ])
7011
+ ], 8 /* PROPS */, ["onClick"]))
7012
+ : _createCommentVNode("v-if", true),
6636
7013
  _createCommentVNode(" 添加Claude配置模态框 "),
6637
7014
  (_ctx.showClaudeConfigModal)
6638
7015
  ? (_openBlock(), _createElementBlock("div", {
6639
- key: 7,
7016
+ key: 9,
6640
7017
  class: "modal-overlay",
6641
7018
  onClick: _withModifiers(_ctx.closeClaudeConfigModal, ["self"])
6642
7019
  }, [
@@ -6788,7 +7165,7 @@ return function render(_ctx, _cache) {
6788
7165
  _createCommentVNode(" 编辑Claude配置模态框 "),
6789
7166
  (_ctx.showEditConfigModal)
6790
7167
  ? (_openBlock(), _createElementBlock("div", {
6791
- key: 8,
7168
+ key: 10,
6792
7169
  class: "modal-overlay",
6793
7170
  onClick: _withModifiers(_ctx.closeEditConfigModal, ["self"])
6794
7171
  }, [
@@ -6941,7 +7318,7 @@ return function render(_ctx, _cache) {
6941
7318
  _createCommentVNode(" Codex bridge pool modal "),
6942
7319
  (_ctx.showCodexBridgePoolModal)
6943
7320
  ? (_openBlock(), _createElementBlock("div", {
6944
- key: 9,
7321
+ key: 11,
6945
7322
  class: "modal-overlay",
6946
7323
  onClick: _withModifiers($event => (_ctx.showCodexBridgePoolModal = false), ["self"])
6947
7324
  }, [
@@ -7034,7 +7411,7 @@ return function render(_ctx, _cache) {
7034
7411
  : _createCommentVNode("v-if", true),
7035
7412
  (_ctx.showClaudeBridgePoolModal)
7036
7413
  ? (_openBlock(), _createElementBlock("div", {
7037
- key: 10,
7414
+ key: 12,
7038
7415
  class: "modal-overlay",
7039
7416
  onClick: _withModifiers($event => (_ctx.showClaudeBridgePoolModal = false), ["self"])
7040
7417
  }, [
@@ -7128,7 +7505,7 @@ return function render(_ctx, _cache) {
7128
7505
  _createCommentVNode(" Webhook settings modal "),
7129
7506
  (_ctx.showWebhookModal)
7130
7507
  ? (_openBlock(), _createElementBlock("div", {
7131
- key: 11,
7508
+ key: 13,
7132
7509
  class: "modal-overlay",
7133
7510
  onClick: _withModifiers(_ctx.closeWebhookModal, ["self"])
7134
7511
  }, [
@@ -7201,7 +7578,7 @@ return function render(_ctx, _cache) {
7201
7578
  : _createCommentVNode("v-if", true),
7202
7579
  (_ctx.showOpenclawConfigModal)
7203
7580
  ? (_openBlock(), _createElementBlock("div", {
7204
- key: 12,
7581
+ key: 14,
7205
7582
  class: "modal-overlay",
7206
7583
  onClick: _withModifiers($event => (!(_ctx.openclawSaving || _ctx.openclawApplying) && _ctx.closeOpenclawConfigModal()), ["self"])
7207
7584
  }, [
@@ -7913,7 +8290,7 @@ return function render(_ctx, _cache) {
7913
8290
  : _createCommentVNode("v-if", true),
7914
8291
  (_ctx.showConfigTemplateModal)
7915
8292
  ? (_openBlock(), _createElementBlock("div", {
7916
- key: 13,
8293
+ key: 15,
7917
8294
  class: "modal-overlay",
7918
8295
  onClick: _withModifiers($event => (!_ctx.configTemplateApplying && _ctx.closeConfigTemplateModal()), ["self"])
7919
8296
  }, [
@@ -8058,7 +8435,7 @@ return function render(_ctx, _cache) {
8058
8435
  : _createCommentVNode("v-if", true),
8059
8436
  (_ctx.showAgentsModal)
8060
8437
  ? (_openBlock(), _createElementBlock("div", {
8061
- key: 14,
8438
+ key: 16,
8062
8439
  class: "modal-overlay",
8063
8440
  onClick: _withModifiers(_ctx.closeAgentsModal, ["self"])
8064
8441
  }, [
@@ -8225,7 +8602,7 @@ return function render(_ctx, _cache) {
8225
8602
  : _createCommentVNode("v-if", true),
8226
8603
  (_ctx.showSkillsModal)
8227
8604
  ? (_openBlock(), _createElementBlock("div", {
8228
- key: 15,
8605
+ key: 17,
8229
8606
  class: "modal-overlay",
8230
8607
  onClick: _withModifiers(_ctx.closeSkillsModal, ["self"])
8231
8608
  }, [
@@ -8523,7 +8900,7 @@ return function render(_ctx, _cache) {
8523
8900
  }, null, 40 /* PROPS, NEED_HYDRATION */, ["onChange"]),
8524
8901
  (_ctx.showHealthCheckModal)
8525
8902
  ? (_openBlock(), _createElementBlock("div", {
8526
- key: 16,
8903
+ key: 18,
8527
8904
  class: "modal-overlay",
8528
8905
  onClick: _withModifiers($event => (_ctx.showHealthCheckModal = false), ["self"])
8529
8906
  }, [
@@ -8614,7 +8991,7 @@ return function render(_ctx, _cache) {
8614
8991
  : _createCommentVNode("v-if", true),
8615
8992
  (_ctx.showConfirmDialog)
8616
8993
  ? (_openBlock(), _createElementBlock("div", {
8617
- key: 17,
8994
+ key: 19,
8618
8995
  class: "modal-overlay",
8619
8996
  onClick: _withModifiers(_ctx.closeConfirmDialog, ["self"])
8620
8997
  }, [
@@ -8652,7 +9029,7 @@ return function render(_ctx, _cache) {
8652
9029
  _createCommentVNode(" Toast "),
8653
9030
  (_ctx.message)
8654
9031
  ? (_openBlock(), _createElementBlock("div", {
8655
- key: 18,
9032
+ key: 20,
8656
9033
  class: _normalizeClass(['toast', _ctx.messageType]),
8657
9034
  role: "status",
8658
9035
  "aria-live": "polite",
@@ -284,6 +284,21 @@ body::after {
284
284
  transform: translateY(0);
285
285
  }
286
286
 
287
+ .lang-switch-track[data-lang="vi"] .lang-switch-vi {
288
+ opacity: 1;
289
+ transform: translateY(0);
290
+ }
291
+
292
+ .lang-switch-track[data-lang="vi"] .lang-switch-en,
293
+ .lang-switch-track[data-lang="vi"] .lang-switch-zh {
294
+ opacity: 0;
295
+ }
296
+
297
+ .lang-switch-track[data-lang="zh"] .lang-switch-vi,
298
+ .lang-switch-track[data-lang="en"] .lang-switch-vi {
299
+ opacity: 0;
300
+ }
301
+
287
302
  .lang-switch-track[data-lang="zh"] .lang-switch-en {
288
303
  opacity: 0;
289
304
  }
@@ -844,11 +859,46 @@ body::after {
844
859
  transform: translateY(0);
845
860
  }
846
861
 
847
- .side-rail-lang .language-settings-link {
862
+ .side-rail-lang-actions {
848
863
  width: calc(100% - 20px);
864
+ display: flex;
865
+ align-items: center;
866
+ justify-content: center;
867
+ gap: 8px;
868
+ }
869
+
870
+ .side-rail-lang .language-settings-link {
871
+ min-width: 0;
872
+ flex: 1 1 auto;
849
873
  box-shadow: none;
850
874
  }
851
875
 
876
+ .side-announcement-button {
877
+ flex: 0 0 36px;
878
+ width: 36px;
879
+ height: 36px;
880
+ display: inline-grid;
881
+ place-items: center;
882
+ border-radius: 999px;
883
+ border: 1px solid rgba(163, 146, 134, 0.28);
884
+ background: rgba(255, 253, 252, 0.92);
885
+ color: var(--color-text-secondary);
886
+ box-shadow: none;
887
+ cursor: pointer;
888
+ transition: background-color var(--transition-fast) var(--ease-smooth), border-color var(--transition-fast) var(--ease-smooth), color var(--transition-fast) var(--ease-smooth), transform var(--transition-fast) var(--ease-smooth);
889
+ }
890
+
891
+ .side-announcement-button:hover {
892
+ border-color: rgba(200, 121, 99, 0.58);
893
+ background: rgba(255, 255, 255, 0.96);
894
+ color: var(--color-text-primary);
895
+ transform: translateY(-1px);
896
+ }
897
+
898
+ .side-announcement-button:active {
899
+ transform: translateY(0);
900
+ }
901
+
852
902
  .lang-fab .language-settings-link {
853
903
  pointer-events: auto;
854
904
  position: relative;