Files
zclaw_openfang/desktop/src/constants/hands.ts
iven aa6a9cbd84
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
feat: 新增技能编排引擎和工作流构建器组件
refactor: 统一Hands系统常量到单个源文件
refactor: 更新Hands中文名称和描述

fix: 修复技能市场在连接状态变化时重新加载
fix: 修复身份变更提案的错误处理逻辑

docs: 更新多个功能文档的验证状态和实现位置
docs: 更新Hands系统文档

test: 添加测试文件验证工作区路径
2026-03-25 08:27:25 +08:00

80 lines
2.1 KiB
TypeScript

/**
* Hand ID Constants - Single Source of Truth
*
* All Hand-related constants should reference this file.
* Do NOT hardcode Hand IDs elsewhere.
*/
// === Hand IDs (must match backend zclaw-hands) ===
export const HAND_IDS = {
BROWSER: 'browser',
RESEARCHER: 'researcher',
COLLECTOR: 'collector',
PREDICTOR: 'predictor',
LEAD: 'lead',
TRADER: 'trader',
CLIP: 'clip',
TWITTER: 'twitter',
// Additional hands from backend
SLIDESHOW: 'slideshow',
SPEECH: 'speech',
QUIZ: 'quiz',
WHITEBOARD: 'whiteboard',
} as const;
export type HandIdType = typeof HAND_IDS[keyof typeof HAND_IDS];
// === Hand Categories ===
export const HAND_CATEGORIES = {
RESEARCH: 'research',
DATA: 'data',
AUTOMATION: 'automation',
COMMUNICATION: 'communication',
CONTENT: 'content',
PRODUCTIVITY: 'productivity',
} as const;
export type HandCategoryType = typeof HAND_CATEGORIES[keyof typeof HAND_CATEGORIES];
// === Hand ID to Category Mapping ===
export const HAND_CATEGORY_MAP: Record<string, HandCategoryType> = {
[HAND_IDS.BROWSER]: HAND_CATEGORIES.RESEARCH,
[HAND_IDS.RESEARCHER]: HAND_CATEGORIES.RESEARCH,
[HAND_IDS.COLLECTOR]: HAND_CATEGORIES.DATA,
[HAND_IDS.PREDICTOR]: HAND_CATEGORIES.DATA,
[HAND_IDS.TRADER]: HAND_CATEGORIES.DATA,
[HAND_IDS.LEAD]: HAND_CATEGORIES.COMMUNICATION,
[HAND_IDS.TWITTER]: HAND_CATEGORIES.COMMUNICATION,
[HAND_IDS.CLIP]: HAND_CATEGORIES.CONTENT,
[HAND_IDS.SLIDESHOW]: HAND_CATEGORIES.CONTENT,
[HAND_IDS.SPEECH]: HAND_CATEGORIES.CONTENT,
[HAND_IDS.QUIZ]: HAND_CATEGORIES.PRODUCTIVITY,
[HAND_IDS.WHITEBOARD]: HAND_CATEGORIES.PRODUCTIVITY,
};
// === Helper Functions ===
/**
* Get the category for a Hand ID
*/
export function getHandCategory(handId: string): HandCategoryType {
return HAND_CATEGORY_MAP[handId] || HAND_CATEGORIES.PRODUCTIVITY;
}
/**
* Check if a Hand ID is valid
*/
export function isValidHandId(id: string): id is HandIdType {
return Object.values(HAND_IDS).includes(id as HandIdType);
}
/**
* Get all Hand IDs as an array
*/
export function getAllHandIds(): string[] {
return Object.values(HAND_IDS);
}