From da6a360cfe2d1d7702dac727b28178d1bf6123c3 Mon Sep 17 00:00:00 2001 From: lidf Date: Tue, 7 Apr 2026 01:36:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20install.sh=20=E5=90=88=E5=B9=B6=20skill.?= =?UTF-8?q?json=EF=BC=88=E4=B8=8D=E8=A6=86=E7=9B=96=E5=86=85=E7=BD=AE=20sk?= =?UTF-8?q?ills=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - skill.json 不再直接 cp 覆盖(会丢失 CoPaw 内置 skills) - 改用 Python 合并注入:保留内置 + 追加自定义 - 补全 6 个自定义 skills 注册(5 TOC + voc_research) --- agent/install.sh | 57 ++++++++++++++++++++++++++++-- agent/skill.json | 92 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 132 insertions(+), 17 deletions(-) diff --git a/agent/install.sh b/agent/install.sh index 30ea0e1..e69c399 100755 --- a/agent/install.sh +++ b/agent/install.sh @@ -48,8 +48,8 @@ mkdir -p "$WORKSPACE_DIR/cases" mkdir -p "$WORKSPACE_DIR/iteration_reports" mkdir -p "$WORKSPACE_DIR/memory" -# 核心配置 -for f in AGENTS.md SOUL.md PROFILE.md HEARTBEAT.md agent.json skill.json; do +# 核心配置(skill.json 单独合并,不覆盖) +for f in AGENTS.md SOUL.md PROFILE.md HEARTBEAT.md agent.json; do if [ -f "$SCRIPT_DIR/$f" ]; then cp "$SCRIPT_DIR/$f" "$WORKSPACE_DIR/$f" fi @@ -75,6 +75,59 @@ fi info "文件复制完成" +# ── 合并 skill.json(注入自定义 skills,保留内置 skills)────────────── +info "注册自定义 Skills..." +python3 -c " +import json, os, time + +ws_skill = os.path.expanduser('$WORKSPACE_DIR/skill.json') +repo_skill = '$SCRIPT_DIR/skill.json' + +# 读取工作区已有的 manifest(含内置 skills) +if os.path.exists(ws_skill): + with open(ws_skill) as f: + manifest = json.load(f) +else: + manifest = {'schema_version': 'workspace-skill-manifest.v1', 'version': 0, 'skills': {}} + +# 读取仓库的自定义 skills 定义 +if os.path.exists(repo_skill): + with open(repo_skill) as f: + repo = json.load(f) + for name, skill_cfg in repo.get('skills', {}).items(): + manifest['skills'][name] = skill_cfg + print(f' + {name}') + +# 同时扫描 active_skills 目录,确保所有 SKILL.md 都被注册 +skills_dir = os.path.expanduser('$WORKSPACE_DIR/active_skills') +if os.path.isdir(skills_dir): + for d in os.listdir(skills_dir): + if d.startswith('.'): + continue + skill_md = os.path.join(skills_dir, d, 'SKILL.md') + if os.path.exists(skill_md) and d not in manifest['skills']: + manifest['skills'][d] = { + 'enabled': True, + 'channels': ['all'], + 'source': 'customized', + 'metadata': { + 'name': d, + 'description': '', + 'version_text': '1.0.0', + 'source': 'customized', + 'protected': False, + 'requirements': {'require_bins': [], 'require_envs': []}, + }, + 'requirements': {'require_bins': [], 'require_envs': []}, + } + print(f' + {d} (from dir)') + +manifest['version'] = int(time.time() * 1000) +with open(ws_skill, 'w') as f: + json.dump(manifest, f, indent=2, ensure_ascii=False) +print(' skills 注册完成') +" + # ── 注册到 config.json ───────────────────────────────────────────────── info "注册 Agent..." python3 -c " diff --git a/agent/skill.json b/agent/skill.json index 8f17b9d..0949bbd 100644 --- a/agent/skill.json +++ b/agent/skill.json @@ -1,28 +1,90 @@ { "schema_version": "workspace-skill-manifest.v1", - "version": 1775495795224, + "version": 1775500000000, "skills": { - "voc_research": { + "ude_diagnosis": { "enabled": true, - "channels": [ - "all" - ], + "channels": ["all"], "source": "customized", "metadata": { - "name": "voc_research", - "description": "VOC 研究采集与分析", + "name": "ude_diagnosis", + "description": "UDE 诊断 — TOC 不满意效果分析", "version_text": "1.0.0", "source": "customized", "protected": false, - "requirements": { - "require_bins": [], - "require_envs": [] - } + "requirements": {"require_bins": [], "require_envs": []} }, - "requirements": { - "require_bins": [], - "require_envs": [] - } + "requirements": {"require_bins": [], "require_envs": []} + }, + "conflict_cloud": { + "enabled": true, + "channels": ["all"], + "source": "customized", + "metadata": { + "name": "conflict_cloud", + "description": "冲突图构建 — TOC 对立假设分析", + "version_text": "1.0.0", + "source": "customized", + "protected": false, + "requirements": {"require_bins": [], "require_envs": []} + }, + "requirements": {"require_bins": [], "require_envs": []} + }, + "convention_breaker": { + "enabled": true, + "channels": ["all"], + "source": "customized", + "metadata": { + "name": "convention_breaker", + "description": "惯例揭示与打破 — TOC 核心突破", + "version_text": "1.0.0", + "source": "customized", + "protected": false, + "requirements": {"require_bins": [], "require_envs": []} + }, + "requirements": {"require_bins": [], "require_envs": []} + }, + "negative_branch": { + "enabled": true, + "channels": ["all"], + "source": "customized", + "metadata": { + "name": "negative_branch", + "description": "负面分支预测 — TOC 风险分析", + "version_text": "1.0.0", + "source": "customized", + "protected": false, + "requirements": {"require_bins": [], "require_envs": []} + }, + "requirements": {"require_bins": [], "require_envs": []} + }, + "proposal_assembler": { + "enabled": true, + "channels": ["all"], + "source": "customized", + "metadata": { + "name": "proposal_assembler", + "description": "提案组装 — 黑手党提案最终交付", + "version_text": "1.0.0", + "source": "customized", + "protected": false, + "requirements": {"require_bins": [], "require_envs": []} + }, + "requirements": {"require_bins": [], "require_envs": []} + }, + "voc_research": { + "enabled": true, + "channels": ["all"], + "source": "customized", + "metadata": { + "name": "voc_research", + "description": "VOC 研究采集与分析(需要用户自带 TikHub Key)", + "version_text": "1.0.0", + "source": "customized", + "protected": false, + "requirements": {"require_bins": [], "require_envs": []} + }, + "requirements": {"require_bins": [], "require_envs": []} } } } \ No newline at end of file