+
已保存的声明式候选 这些候选尚未应用到人设、MCP 或模型运行配置。
{{ item.key.replace('community-candidate:', '') }} {{ item.value }} 删除候选
@@ -163,5 +163,6 @@ label { display: grid; gap: var(--space-xs); }
input, select { color: var(--color-text-primary); background: var(--color-background-secondary); border: 1px solid var(--color-border-subtle); padding: var(--space-sm); }
.community-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: var(--space-md); }
.community-card { display: grid; gap: var(--space-sm); text-align: left; padding: var(--space-lg); color: var(--color-text-primary); background: var(--color-background-secondary); border: 1px solid var(--color-border-subtle); border-radius: var(--radius-md); overflow-wrap: anywhere; }
+.saved-candidates { margin-top: var(--space-xl); }
pre, dd { white-space: pre-wrap; overflow-wrap: anywhere; max-width: 100%; }
diff --git a/frontend/src/features/community/DesktopPackages.spec.ts b/frontend/src/features/community/DesktopPackages.spec.ts
index f748e2d..c22342e 100644
--- a/frontend/src/features/community/DesktopPackages.spec.ts
+++ b/frontend/src/features/community/DesktopPackages.spec.ts
@@ -12,6 +12,18 @@ import DesktopPackages from './DesktopPackages.vue'
const item = { package_key: 'package-key', source: 'https://example.com/', namespace: 'examples', package_id: 'reviewer', version: '1.0.0', state: 'staged' }
beforeEach(() => { native.invoke.mockReset(); native.workspace.vaultId = 'vault-one' })
function component() { return mount(DesktopPackages, { props: { refreshKey: 0 }, global: { stubs: { AppDialog: { template: '' } } } }) }
+it('uses themed surfaces for the section, empty state, and staged package rows', async () => {
+ native.invoke.mockResolvedValueOnce([])
+ const empty = component(); await flushPromises()
+ expect(empty.get('section.desktop-packages').classes()).toContain('panel')
+ expect(empty.get('.empty-state').text()).toContain('本页没有暂存包')
+ empty.unmount()
+
+ native.invoke.mockResolvedValueOnce([item])
+ const populated = component(); await flushPromises()
+ expect(populated.get('.package-list > li').classes()).toContain('item-card')
+ populated.unmount()
+})
it('loads durable staged metadata and previews without issuing install commands', async () => {
native.invoke.mockImplementation(async command => command === 'extension_staged' ? [item] : {
fingerprint: 'fingerprint', dependencies: { packages: [{ ...item, permissions: ['notes.read'] }] }, changes: [{ target: { configuration: {} }, expected_revision: null }],
diff --git a/frontend/src/features/community/DesktopPackages.vue b/frontend/src/features/community/DesktopPackages.vue
index 49fae03..99c6e1c 100644
--- a/frontend/src/features/community/DesktopPackages.vue
+++ b/frontend/src/features/community/DesktopPackages.vue
@@ -53,20 +53,31 @@ onBeforeUnmount(() => ++generation)
-
- 桌面已暂存包
- 暂存包保存在桌面安装库中,重启后仍可查看。暂存不代表已经安装或获得运行权限。
- 刷新暂存列表
- {{ error }}
- 正在检查…
- 本页没有暂存包。
-
- {{ item.namespace }}/{{ item.package_id }} · {{ item.version }}
- {{ item.source }}
查看安装预览
-
- 上一页
- 第 {{ page + 1 }} 页
- 下一页
+
+
+ {{ error }}
+ 正在检查…
+
+ 本页没有暂存包
+ 从社区目录校验并暂存包后,可在这里查看安装预览。
+
+
+
+ {{ item.namespace }}/{{ item.package_id }} · {{ item.version }} {{ item.source }}
+ 查看安装预览
+
+
+
{{ selected.package_id }} · {{ selected.version }}
请先打开要使用此包的笔记库。
@@ -88,9 +99,16 @@ onBeforeUnmount(() => ++generation)
diff --git a/frontend/src/features/help/FunctionPlotHelpView.vue b/frontend/src/features/help/FunctionPlotHelpView.vue
index 19d9d23..fea84d5 100644
--- a/frontend/src/features/help/FunctionPlotHelpView.vue
+++ b/frontend/src/features/help/FunctionPlotHelpView.vue
@@ -84,6 +84,7 @@ y = x^2 / 8
03
{{ t('可用数学语法', 'Supported math syntax') }}
{{ t('支持 +、-、*、/、^,变量 x,常量 pi、e,以及以下单参数函数。2x、2(x+1) 等隐式乘法也可使用。', 'Use +, -, *, /, ^, variable x, constants pi and e, and the single-argument functions below. Implicit multiplication such as 2x and 2(x+1) is also supported.') }}
+ {{ t('图例会自动使用 LaTeX 数学排版:幂显示为上标,除法显示为分式,函数名使用数学字体。', 'Legends are typeset automatically with LaTeX: powers use superscripts, division uses fractions, and function names use mathematical typography.') }}
{{ name }}(x)