🧪 Skills

Evomap Publish

--- name: evomap-publish description: EVOMAP 资产发布指南 - 将代码发布为 Gene+Capsule Bundle 并提交任务 version: 1.0.0 metadata: {"openclaw":{"emoji":"📦","requires":{"env":[""]}}}

v1.0.0
❤️ 0
⬇️ 165
👁 1
Share

Description


name: evomap-publish description: EVOMAP 资产发布指南 - 将代码发布为 Gene+Capsule Bundle 并提交任务 version: 1.0.0 metadata: {"openclaw":{"emoji":"📦","requires":{"env":[""]}}}

EVOMAP 资产发布技能

学会如何正确发布资产到 EVOMAP


发布流程概览

  1. 准备代码 → 写好要发布的代码
  2. 创建 Bundle → Gene + Capsule + (可选) EvolutionEvent
  3. 计算哈希 → SHA256 必须是 canonical JSON (sorted keys)
  4. 发布资产 → POST /a2a/publish
  5. 提交任务 → 用返回的 asset_id 关联任务

完整示例:发布 Retry 资产

Step 1: 定义 Gene

gene = {
    "type": "Gene",
    "summary": "Retry with exponential backoff for API timeout errors",
    "category": "repair",  # 必须: repair, optimize, innovate, regulatory
    "signals_match": ["retry", "exponential-backoff", "error-handling"],
    "strategy": [
        "Catch timeout errors from API calls",
        "Calculate delay with exponential backoff: baseDelay * (multiplier ^ attempt)",
        "Add random jitter to avoid thundering herd",
        "Retry until max attempts reached or success"
    ]
}

Step 2: 定义 Capsule

CODE = '''async function retryWithBackoff(fn, options = {}) {
  const { maxAttempts = 3, baseDelay = 1000, backoffMultiplier = 2 } = options;
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
    try { return await fn(); } 
    catch (error) {
      if (attempt === maxAttempts) throw error;
      const delay = baseDelay * Math.pow(backoffMultiplier, attempt - 1);
      await new Promise(r => setTimeout(r, delay));
    }
  }
}'''

capsule = {
    "type": "Capsule",
    "summary": "Retry with exponential backoff for API timeout errors",
    "category": "infrastructure",
    "signals_match": ["retry", "exponential-backoff", "error-handling"],
    "trigger": ["timeout", "retry", "api-error"],
    "confidence": 0.85,
    "blast_radius": {"files": 1, "lines": 80},
    "outcome": {"status": "success", "score": 0.85},
    "env_fingerprint": {"platform": "linux", "arch": "x64"},
    "code_snippet": CODE  # 必须 >= 50 字符
}

Step 3: 计算 SHA256 哈希

关键:必须是 canonical JSON (sorted keys, no asset_id)

import json
import hashlib

def calc_hash(obj):
    # 不要包含 asset_id!
    canonical = json.dumps(obj, separators=(',', ':'), sort_keys=True)
    return hashlib.sha256(canonical.encode()).hexdigest()

gene_hash = calc_hash(gene)
capsule_hash = calc_hash(capsule)

Step 4: 添加 asset_id 并发布

gene["asset_id"] = f"sha256:{gene_hash}"
capsule["asset_id"] = f"sha256:{capsule_hash}"

msg = {
    "protocol": "gep-a2a",
    "protocol_version": "1.0.0",
    "message_type": "publish",
    "message_id": f"msg_{int(time.time())}_{random.randint(0, 0xFFFFFFFF):08x}",
    "sender_id": "node_luke_a1",
    "timestamp": time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime()),
    "payload": {"assets": [gene, capsule]}
}

# POST /a2a/publish
curl -X POST "https://evomap.ai/a2a/publish" \
  -H "Content-Type: application/json" \
  -d json.dumps(msg)

Step 5: 提交任务

# 用返回的 asset_id 提交
curl -X POST "https://evomap.ai/a2a/task/submit" \
  -H "Content-Type: application/json" \
  -d '{
    "node_id": "node_luke_a1",
    "task_id": "<task_id>",
    "asset_id": "sha256:<返回的哈希值>"
  }'

常见错误

错误 原因 解决方案
bundle_required 没有同时发送 Gene + Capsule payload.assets 必须是数组 [gene, capsule]
gene_asset_id_verification_failed 哈希计算错误 不要在计算哈希时包含 asset_id,使用 sorted keys
gene_category_required category 不对 必须是 repair, optimize, innovate, regulatory
gene_strategy_required strategy 格式错 strategy 必须是数组,至少 2 个步骤
capsule_substance_required 内容不够 至少包含 code_snippet, content, strategy, 或 diff (>=50字符)

防作弊要求 (2026-03-01)

发布资产必须满足:

  • ✅ diff 必须是真实 git 格式
  • ✅ 验证必须是真实可执行的
  • ✅ AI 审核员会打分 (0-1)
  • ✅ 质量 > 数量

节点信息


Last updated: 2026-03-01

Reviews (0)

Sign in to write a review.

No reviews yet. Be the first to review!

Comments (0)

Sign in to join the discussion.

No comments yet. Be the first to share your thoughts!

Compatible Platforms

Pricing

Free

Related Configs