feat: add tool status management and localization for skill installation

- Updated chat message types to include tool statuses.
- Enhanced localization files for English, Thai, and Chinese to support new tool status messages.
- Modified HomePage and SkillsPage components to handle tool statuses in chat messages.
- Implemented tool status merging and updating logic in the chat store.
- Added handling for tool status events in the gateway event processing.
- Created tests for chat message rendering with tool statuses and skill installation shortcuts.
- Improved gateway event dispatching for tool lifecycle events.
This commit is contained in:
duanshuwen
2026-04-23 20:27:54 +08:00
parent 979fb0a0f6
commit df600272d6
29 changed files with 2041 additions and 384 deletions

View File

@@ -1,5 +1,22 @@
import { ClawHubService } from '@electron/gateway/clawhub';
import {
SkillInstallService,
SkillInstallServiceError,
type SkillInstallRequest,
} from '@electron/service/skill-install-service';
import { getAllSkillConfigs, updateSkillConfig } from '@electron/utils/skill-config';
import type { GatewayRpcReturns } from '../types';
import type { GatewayEvent, GatewayRpcParams, GatewayRpcReturns } from '../types';
type GatewayBroadcast = (event: GatewayEvent) => void;
function broadcastSkillsRuntimeChanged(broadcast?: GatewayBroadcast, reason = 'skills:changed'): void {
broadcast?.({
type: 'runtime:changed',
topics: ['skills'],
reason,
syncedAt: new Date().toISOString(),
});
}
export async function handleSkillsStatus(): Promise<GatewayRpcReturns['skills.status']> {
const configs = await getAllSkillConfigs();
@@ -43,3 +60,28 @@ export async function handleSkillsUpdate(
return { success: true };
}
export async function handleSkillsInstall(
params: GatewayRpcParams['skills.install'],
broadcast?: GatewayBroadcast,
): Promise<GatewayRpcReturns['skills.install']> {
const request = params as SkillInstallRequest;
const installService = new SkillInstallService({
clawHubService: new ClawHubService(),
});
try {
const result = await installService.install(request);
broadcastSkillsRuntimeChanged(
broadcast,
`skills:install:${result.source}:${result.slug}`,
);
return result;
} catch (error) {
if (error instanceof SkillInstallServiceError) {
throw new Error(error.message);
}
throw error instanceof Error ? error : new Error(String(error));
}
}