feat: update desktop workflows and app center

This commit is contained in:
inman
2026-05-13 19:14:56 +08:00
parent 20b5aff4ad
commit 7c8781a6e3
160 changed files with 55492 additions and 1423 deletions

View File

@@ -7,6 +7,7 @@ import { useSkillsStore } from '@/stores/skills';
import { useQuickTasksStore } from '@/stores/quick-tasks';
import i18n from '@/i18n';
import type { YinianConfigSnapshot, YinianLocalSkill } from '../../shared/yinian';
import type { QuickTaskConfig } from '@/stores/quick-tasks';
const toastSuccessMock = vi.fn();
const toastErrorMock = vi.fn();
@@ -68,6 +69,19 @@ function clickCapabilityTab(label: '服务下发' | '本地安装') {
fireEvent.click(screen.getByRole('button', { name: new RegExp(`^${label}\\s+\\d+$`) }));
}
function createQuickTask(overrides: Partial<QuickTaskConfig> = {}): QuickTaskConfig {
return {
id: 'quick-daily-report',
name: '生成日报',
description: '生成每日经营日报',
skills: [{ id: 'daily-report', name: '日报生成助手' }],
enabled: true,
showInComposer: true,
updatedAt: 1,
...overrides,
};
}
describe('YinianSkills page', () => {
beforeEach(async () => {
vi.clearAllMocks();
@@ -197,6 +211,38 @@ describe('YinianSkills page', () => {
expect(screen.getByText('/tmp/openclaw/skills/local-summary')).toBeInTheDocument();
});
it('keeps quick capability management on the capability packs page', () => {
useYinianStore.setState({
config: createConfig({
entitlements: [
{
skillId: 'daily-report',
name: '日报生成助手',
version: '1.0.0',
enabled: true,
category: 'reporting',
triggers: ['manual'],
},
],
}),
});
useQuickTasksStore.setState({ tasks: [createQuickTask()] });
render(<YinianSkills />);
expect(screen.getByTestId('yinian-skills-tab-quickTasks')).toHaveTextContent('快捷能力配置');
expect(screen.getByText('生成日报')).toBeInTheDocument();
fireEvent.click(screen.getByTitle('编辑'));
fireEvent.change(screen.getByPlaceholderText('能力名称,例如:生成日报'), {
target: { value: '每日经营日报' },
});
fireEvent.click(screen.getByRole('button', { name: '保存快捷能力' }));
expect(useQuickTasksStore.getState().tasks[0].name).toBe('每日经营日报');
expect(toastSuccessMock).toHaveBeenCalledWith('快捷能力已更新');
});
it('hides OpenClaw built-in skills from local capability packs by default', () => {
useSkillsStore.setState({
skills: [