Files
agent-desktop/console/src/utils/skillChangeEvents.ts
T
Pine 8e6b3abac3 feat(channels/market): 阶段 4 渠道/市场层合并上游 v2.2.0
- PluginManager: 采用上游 useMarketPlugins(300行: 分页append/loadingMore/autoLoadBlocked/竞态AbortController/highlightFilter) + MarketPluginList(无限滚动LoadMoreSentinel+PluginViewToggle卡片/列表切换); OfficialPluginList.module.less 保留三处 var(--color-border) 定制+追加上游移动端@media; index.module.less 三向并合; 本地 index.tsx 保留(operator 权限 gate)
- Market: MarketPanel(新 install: MarketInstallController 接口)/useMarketInstall/useMarketSearch/SkillIcon/ResultCard 采用上游
- Channels: ChannelDrawer/channelConfig/constants 上游版; 定制点保留(channelIcons console=var(--color-primary)、PendingApprovalsDrawer var(--color-success))
- api/types/chat.ts 采用上游(ChatGroup/ChatSource/ChatGroupKind/group_id); pages/Agent/Skills/index.tsx 适配 useMarketInstall
- utils: chatGroups.ts + 14 个上游缺失工具测试补齐; CronJobs 测试补齐
- 测试修复: design-mock 补 Tabs 桩(上游 PluginViewToggle 依赖); MarketPluginList.test 采用上游版; skill.test 品牌映射云超服; lazyWithRetry.test 适配本地 dev-server 回退
- 验证: tsc 0 错误、build 通过、阶段 4 相关 45 测试文件 427 用例全过
2026-09-04 13:24:47 +08:00

27 lines
765 B
TypeScript

export interface SkillChangeDetail {
agentId: string;
}
const SKILL_CHANGE_EVENT = "qwenpaw:skills-changed";
export function notifySkillChange(agentId: string): void {
if (typeof window === "undefined") return;
window.dispatchEvent(
new CustomEvent<SkillChangeDetail>(SKILL_CHANGE_EVENT, {
detail: { agentId },
}),
);
}
export function subscribeToSkillChanges(
listener: (detail: SkillChangeDetail) => void,
): () => void {
if (typeof window === "undefined") return () => undefined;
const handleChange = (event: Event) => {
listener((event as CustomEvent<SkillChangeDetail>).detail);
};
window.addEventListener(SKILL_CHANGE_EVENT, handleChange);
return () => window.removeEventListener(SKILL_CHANGE_EVENT, handleChange);
}