fix: make product copy direct and factual
Cross-platform packages / Validate source (push) Canceled after 0s
Cross-platform packages / Authorize desktop packaging (push) Canceled after 0s
Cross-platform packages / linux arm64 (push) Canceled after 0s
Cross-platform packages / macos arm64 (push) Canceled after 0s
Cross-platform packages / windows arm64 (push) Canceled after 0s
Cross-platform packages / linux x64 (push) Canceled after 0s
Cross-platform packages / macos x64 (push) Canceled after 0s
Cross-platform packages / windows x64 (push) Canceled after 0s
Cross-platform packages / Publish GitHub and OSS release (push) Canceled after 0s
Deploy website to GitHub Pages / Deploy static website (push) Canceled after 0s

The website, README, and Smart Heartbeat interface used promotional superlatives, generic benefit labels, and personified growth language that obscured the actual product behavior. The English README is now the repository entry point with a separate Chinese version, and both website and in-app copy describe concrete capabilities, reports, suggestions, and execution boundaries.

Release note: 优化官网、README 与智能心跳界面的中英文文案,去除空泛宣传和拟人化表达,改为直接说明产品能力、运行记录与建议内容。
This commit is contained in:
mesalogo
2026-09-02 01:14:16 +08:00
parent b36d688900
commit 1530fa116c
16 changed files with 309 additions and 243 deletions
+1 -1
View File
@@ -10048,7 +10048,7 @@ describe('App', () => {
await screen.findByRole('heading', { name: '智能心跳' })
).toBeInTheDocument()
expect(
await screen.findByRole('tab', { name: '成长概览' })
await screen.findByRole('tab', { name: '运行概览' })
).toBeInTheDocument()
expect(
screen.getByRole('button', { name: '配置智能心跳' })
+8 -8
View File
@@ -28,7 +28,7 @@ const config: AssistantHeartbeatConfig = {
kind: 'projects',
projectIds: ['00000000-0000-4000-8000-000000000101']
},
name: '智能成长回顾',
name: '定期回顾',
timezone: 'Asia/Shanghai',
recurrence: {
type: 'daily',
@@ -202,7 +202,7 @@ describe('HeartbeatCenter', () => {
expect(screen.getByLabelText('Default project')).toBeInTheDocument()
})
it('shows heartbeat health, growth dimensions, and the latest report', () => {
it('shows heartbeat health, run metrics, and the latest report', () => {
render(<HeartbeatCenter {...createProps()} />)
expect(
@@ -218,9 +218,9 @@ describe('HeartbeatCenter', () => {
screen.getByText('本次心跳发现用户偏好简洁回复,并建议整理交付计划。')
).toBeInTheDocument()
const dimensions = screen.getByLabelText('智能心跳成长维度')
const dimensions = screen.getByLabelText('智能心跳运行统计')
expect(
within(dimensions).getByText('记忆沉淀')
within(dimensions).getByText('记忆确认')
).toBeInTheDocument()
expect(
within(dimensions).getByText('行动转化')
@@ -292,7 +292,7 @@ describe('HeartbeatCenter', () => {
screen.getByRole('heading', { level: 2, name: '当前状态' })
).toBeInTheDocument()
expect(
screen.getByRole('heading', { level: 2, name: '成长趋势' })
screen.getByRole('heading', { level: 2, name: '报告趋势' })
).toBeInTheDocument()
expect(
screen.getByRole('heading', { level: 2, name: '本次心跳' })
@@ -311,9 +311,9 @@ describe('HeartbeatCenter', () => {
expect(screen.queryByText('MEMORY GROWTH')).not.toBeInTheDocument()
expect(screen.queryByText('NEXT ACTIONS')).not.toBeInTheDocument()
fireEvent.click(screen.getByRole('tab', { name: '心跳轨迹' }))
fireEvent.click(screen.getByRole('tab', { name: '报告与记录' }))
expect(
screen.getByRole('heading', { level: 2, name: '成长轨迹' })
screen.getByRole('heading', { level: 2, name: '心跳报告' })
).toBeInTheDocument()
expect(
screen.getByRole('heading', { level: 2, name: '运行记录' })
@@ -399,7 +399,7 @@ describe('HeartbeatCenter', () => {
)
await waitFor(() => expect(onRefresh).toHaveBeenCalledOnce())
fireEvent.click(screen.getByRole('tab', { name: '心跳轨迹' }))
fireEvent.click(screen.getByRole('tab', { name: '报告与记录' }))
expect(screen.getByText('模型暂时不可用')).toBeInTheDocument()
fireEvent.click(
screen.getByRole('button', { name: '展开完整报告' })
+4 -3
View File
@@ -241,9 +241,10 @@ export const app = {
prompt: 'Analyze this error and suggest likely causes and troubleshooting steps:\n'
},
write: {
title: 'Draft work content',
description: 'Draft an email, update, or proposal',
prompt: 'Help me draft clear, professional work content:\n'
title: 'Draft an email or update',
description: 'Use the notes below for an email, update, or proposal',
prompt:
'Draft an email, update, or proposal from the following notes. Preserve the facts and relevant details:\n'
}
},
remote: {
@@ -24,25 +24,25 @@ export const heartbeat = {
retry: 'Retry'
},
loading: {
description: 'Loading heartbeat plans, runs, and growth reports.',
description: 'Loading heartbeat plans, runs, and reports.',
title: 'Loading Smart Heartbeat',
failedTitle: 'Could not load Smart Heartbeat',
refreshFailedTitle: 'Could not refresh Smart Heartbeat'
},
tabs: {
ariaLabel: 'Smart Heartbeat views',
overview: 'Growth overview',
overview: 'Run overview',
suggestions: 'Pending suggestions',
history: 'Heartbeat history',
history: 'Reports and runs',
plans: 'Heartbeat plans'
},
currentStatus: {
title: 'Current status',
activePlans: 'Active plans: {{formattedCount}}',
disabled: 'Not enabled',
emptyTitle: 'No growth cadence yet',
emptyTitle: 'No heartbeat plan',
emptyDescription:
'Create a daily or weekly heartbeat so GoodBuddy can keep reviewing and learning.',
'Create a daily or weekly plan to review conversations and tasks in the selected scope and generate suggestions.',
createPlan: 'Create heartbeat plan'
},
recurrence: {
@@ -67,14 +67,14 @@ export const heartbeat = {
resume: 'Resume'
},
metrics: {
ariaLabel: 'Smart Heartbeat growth metrics',
ariaLabel: 'Smart Heartbeat run metrics',
health: 'Heartbeat health',
successfulRuns: '{{completed}}/{{total}} completed successfully',
healthRateAriaLabel: 'Heartbeat success rate {{percent}}',
memory: 'Memory retention',
memory: 'Memory confirmation',
memoryDescription: 'Confirmed memories / heartbeat suggestions',
memoryRateAriaLabel: 'Memory confirmation rate {{percent}}',
insights: 'Insights found',
insights: 'Report insights',
insightReports: 'Heartbeat reports: {{formattedCount}}',
latestInsights: 'Latest report findings: {{formattedCount}}',
awaitingFirstRun: 'Waiting for the first heartbeat',
@@ -83,9 +83,9 @@ export const heartbeat = {
actionRateAriaLabel: 'Suggested task completion rate {{percent}}'
},
trend: {
title: 'Growth trend',
title: 'Report trend',
empty:
'After a heartbeat completes, changes in insights, memories, and suggested actions will appear here.',
'After a heartbeat runs, this chart shows changes in insight, memory, and action suggestion counts.',
insight: 'Insights',
memory: 'Memories',
action: 'Actions',
@@ -94,10 +94,10 @@ export const heartbeat = {
},
latest: {
title: 'Latest heartbeat',
viewHistory: 'View heartbeat history',
viewHistory: 'View reports and runs',
handleSuggestions: 'Review suggestions ({{formattedCount}})',
empty:
'There are no heartbeat reports yet. Run a heartbeat to see what GoodBuddy learned.'
'There are no heartbeat reports yet. Run one to view insight, memory, and action suggestions.'
},
suggestions: {
memoryTitle: 'Memories to confirm',
@@ -117,10 +117,10 @@ export const heartbeat = {
ignoreSuggestion: 'Ignore suggestion'
},
history: {
timelineTitle: 'Growth history',
timelineTitle: 'Heartbeat reports',
reportCount: 'Reports: {{formattedCount}}',
emptyTimeline:
'Each completed heartbeat and what it learned will appear here.',
'Reports from completed heartbeat runs appear here.',
reportSummary:
'{{insights}} insights · {{memories}} memories · {{actions}} actions',
collapseReport: 'Collapse report',
@@ -204,7 +204,7 @@ export const heartbeat = {
enableAriaLabel: 'Enable Smart Heartbeat',
enabling: 'Enabling…',
enable: 'Enable Smart Heartbeat',
defaultName: 'Smart growth review',
defaultName: 'Scheduled review',
empty: 'Smart Heartbeat is not configured for this scope.',
running: 'Running',
paused: 'Paused',
+3 -3
View File
@@ -228,9 +228,9 @@ export const app = {
prompt: '请分析下面的错误信息,给出可能原因和排查步骤:\n'
},
write: {
title: '编写工作内容',
description: '起草邮件、周报或方案',
prompt: '请帮我起草一份清晰、专业的工作内容:\n'
title: '起草邮件或周报',
description: '根据输入信息整理邮件、周报或方案',
prompt: '请根据下面的信息起草邮件、周报或方案;保留事实和必要细节:\n'
}
},
remote: {
@@ -20,25 +20,25 @@ export const heartbeat = {
retry: '重试'
},
loading: {
description: '正在读取心跳计划、运行记录和成长报告。',
description: '正在读取心跳计划、运行记录和心跳报告。',
title: '正在加载智能心跳',
failedTitle: '智能心跳加载失败',
refreshFailedTitle: '智能心跳刷新失败'
},
tabs: {
ariaLabel: '智能心跳视图',
overview: '成长概览',
overview: '运行概览',
suggestions: '待处理建议',
history: '心跳轨迹',
history: '报告与记录',
plans: '心跳计划'
},
currentStatus: {
title: '当前状态',
activePlans: '{{formattedCount}} 个计划运行中',
disabled: '尚未启用',
emptyTitle: '尚未建立成长节奏',
emptyTitle: '尚未配置心跳计划',
emptyDescription:
'配置每日或每周心跳,让 GoodBuddy 持续回顾和学习。',
'创建每日或每周计划,GoodBuddy 将按范围回顾对话和任务并生成建议。',
createPlan: '创建心跳计划'
},
recurrence: {
@@ -63,14 +63,14 @@ export const heartbeat = {
resume: '恢复'
},
metrics: {
ariaLabel: '智能心跳成长维度',
ariaLabel: '智能心跳运行统计',
health: '心跳健康',
successfulRuns: '{{completed}}/{{total}} 次成功完成',
healthRateAriaLabel: '心跳成功率 {{percent}}',
memory: '记忆沉淀',
memory: '记忆确认',
memoryDescription: '已确认记忆 / 心跳建议',
memoryRateAriaLabel: '记忆确认率 {{percent}}',
insights: '洞察发现',
insights: '报告洞察',
insightReports: '来自 {{formattedCount}} 份心跳报告',
latestInsights: '最近一次发现 {{formattedCount}} 条',
awaitingFirstRun: '等待首次心跳',
@@ -79,9 +79,9 @@ export const heartbeat = {
actionRateAriaLabel: '建议任务完成率 {{percent}}'
},
trend: {
title: '成长趋势',
title: '报告趋势',
empty:
'完成心跳后,这里会显示洞察、记忆与行动建议的变化。',
'运行心跳后,这里会显示洞察、记忆和行动建议的数量变化。',
insight: '洞察',
memory: '记忆',
action: '行动',
@@ -90,10 +90,10 @@ export const heartbeat = {
},
latest: {
title: '本次心跳',
viewHistory: '查看心跳轨迹',
viewHistory: '查看报告与记录',
handleSuggestions: '处理 {{formattedCount}} 条建议',
empty:
'尚无心跳报告。运行一次心跳后,你会在这里看到本次学到了什么。'
'尚无心跳报告。运行一次后,可在这里查看洞察、记忆和行动建议。'
},
suggestions: {
memoryTitle: '待确认记忆',
@@ -113,9 +113,9 @@ export const heartbeat = {
ignoreSuggestion: '忽略建议'
},
history: {
timelineTitle: '成长轨迹',
timelineTitle: '心跳报告',
reportCount: '{{formattedCount}} 份报告',
emptyTimeline: '完成心跳后,每次学习和变化都会沉淀在这里。',
emptyTimeline: '每次运行生成的心跳报告会显示在这里。',
reportSummary:
'{{insights}} 条洞察 · {{memories}} 条记忆 · {{actions}} 个行动',
collapseReport: '收起报告',
@@ -197,7 +197,7 @@ export const heartbeat = {
enableAriaLabel: '启用智能心跳',
enabling: '启用中…',
enable: '启用智能心跳',
defaultName: '智能成长回顾',
defaultName: '定期回顾',
empty: '当前范围尚未配置智能心跳。',
running: '运行中',
paused: '已暂停',