技能市场 (marketplace)
Headless 命令 — 不依赖桌面 GUI,直接使用核心包运行。适用于服务器、CI/CD、容器化等无桌面环境。
核心特性
- 技能服务发布: 发布技能服务,支持版本管理、定价、端点配置
- 服务状态管理: 草稿、已发布、已弃用、已暂停四种状态流转
- 调用记录: 记录每次技能调用的输入输出、耗时、状态
- 调用统计: 聚合调用次数、成功率、平均耗时等指标
- 所有者与定价: 绑定 DID 所有者,支持自定义定价策略
概述
ChainlessChain CLI 技能市场模块 (Phase 65) 提供去中心化的技能服务发布和调用管理。publish 发布技能服务(名称、版本、描述、端点、定价),status 管理服务生命周期状态。record 记录调用事件(调用者、输入输出、耗时、成功/失败),invocations 查看调用列表,stats 聚合统计。
受治理的 Skill 候选安装(0.166.24)
以下命令用于可安装 Skill 的候选治理;原有 publish/list/record/stats 继续管理远程技能服务。部署需要签名的 marketplaceHost,未配置时返回 unavailable。
# 检查签名清单,并使用返回的摘要固定安装输入
cc marketplace inspect safe-refactor --skill-version 2.0.0
cc marketplace install safe-refactor --skill-version 2.0.0 --manifest sha256:<digest>
cc marketplace state safe-refactor
# 每步使用最新 state digest 与部署方核验过的 Pilot/撤销回执
cc marketplace rollout safe-refactor --expected-state sha256:<state-digest> --receipt receipt:<pilot-reference>
cc marketplace revoke safe-refactor --expected-state sha256:<state-digest> --receipt receipt:<revocation-reference>安装版本必须使用 --skill-version;--version 保留给 CLI 自身版本。安装会核对清单、包、适配输出和 SBOM 摘要,写入实际 Candidate v2 文件并独立回读。成功返回 candidate-staged、materialized:true、activated:false。更新必须添加 --expected-state;陈旧状态、文件损坏或已撤销清单不能继续晋升。
rollout 一次只前进一阶段:candidate → shadow → canary → active;回执引用仍由独立 authority 验证。命令报错但外部结果不确定时,先读取 state 并由管理员对账,不盲目重试。revoke 需真实回滚后才记录 rolled-back。
显式发布 Eval 徽章
cc marketplace serve-badge safe-refactor --skill-version 2.0.0 --manifest sha256:<digest>默认仅监听 127.0.0.1:8321,命令运行期间提供只读首页和 /badge.json,不会安装或修改 Skill。评测快照默认 600 秒到期;--snapshot-seconds 允许 1–3600 秒,到期须重新核验并启动。需要对外提供时由管理员明确配置监听地址、TLS 反向代理和访问策略。
徽章展示指定版本、目标、评测分数/样本量和来源摘要,不返回租户、候选内容或私有审核回执;每次访问复核当前签名与已记录撤销,异常返回 503。徽章不是安装授权,也不是本项目通用性能承诺。
签名部署同时设置绝对路径 CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_DESCRIPTOR 和 CHAINLESSCHAIN_EVOLUTION_DEPLOYMENT_TRUST_ROOT,allowlist 包含 marketplace。目标、catalog、PKI、适配/Eval/Pilot/回滚 authority 均由部署提供。详细合同见市场接线说明。
命令参考
marketplace status-types — 服务状态类型
chainlesschain marketplace status-types
chainlesschain marketplace status-types --json列出服务状态:draft、published、deprecated、suspended。
marketplace invocation-statuses — 调用状态类型
chainlesschain marketplace invocation-statuses --json列出调用状态:pending、running、success、failed、timeout。
marketplace publish — 发布服务
chainlesschain marketplace publish "weather-skill"
chainlesschain marketplace publish "code-review" -v 2.0.0 -d "代码审查服务" -e "https://api.example.com/review" -o did:key:abc -p '{"perCall":0.01}' --json发布技能服务。-v 版本 (默认 1.0.0),-d 描述,-e 调用端点,-o 所有者 DID,-p 定价 JSON,-s 初始状态 (默认 published)。
marketplace list — 列出服务
chainlesschain marketplace list
chainlesschain marketplace list -s published -o did:key:abc -n weather --limit 20 --json列出服务。可按状态、所有者 DID、名称子串过滤。
marketplace show — 查看服务详情
chainlesschain marketplace show <service-id> --json显示服务完整信息:名称、版本、状态、描述、端点、所有者、调用次数。
marketplace status — 更新服务状态
chainlesschain marketplace status <service-id> deprecated
chainlesschain marketplace status <service-id> suspended --json转换服务状态 (draft|published|deprecated|suspended)。
marketplace record — 记录调用
chainlesschain marketplace record <service-id>
chainlesschain marketplace record <service-id> -c did:key:xyz -i '{"query":"天气"}' -o '{"result":"晴"}' -s success -d 230 --json
chainlesschain marketplace record <service-id> -s failed -e "超时" -d 5000记录技能调用。-c 调用者 DID,-i 输入 JSON,-o 输出 JSON,-s 状态 (默认 success),-d 耗时 (ms),-e 错误信息。
marketplace invocations — 列出调用
chainlesschain marketplace invocations
chainlesschain marketplace invocations -s <service-id> -c did:key:xyz -S failed --limit 20 --json列出调用记录。可按服务、调用者、状态过滤。
marketplace stats — 调用统计
chainlesschain marketplace stats
chainlesschain marketplace stats -s <service-id> --json聚合调用统计。可按单个服务过滤。返回总调用数、各状态分布、平均耗时等。
数据库表
| 表名 | 说明 |
|---|---|
marketplace_services | 技能服务(名称、版本、描述、端点、所有者、定价、状态、调用数) |
marketplace_invocations | 调用记录(服务 ID、调用者、输入输出、状态、耗时、错误信息) |
系统架构
用户命令 → marketplace.js (Commander) → skill-marketplace.js
│
┌───────────────────────────┼───────────────┐
▼ ▼ ▼
服务管理 调用管理 统计
(publish/list/show/status) (record/invocations) (stats)
▼ ▼ ▼
marketplace_services marketplace_invocations 聚合查询配置参考
# marketplace publish
<name> # 服务名称(必填)
-v, --version <v> # 版本 (默认 1.0.0)
-d, --description <text> # 描述
-e, --endpoint <url> # 调用端点
-o, --owner <did> # 所有者 DID
-p, --pricing <json> # 定价 JSON
-s, --status <s> # 初始状态 (默认 published)
# marketplace record
<service-id> # 服务 ID(必填)
-c, --caller <did> # 调用者 DID
-i, --input <json> # 输入 JSON
-o, --output <json> # 输出 JSON
-s, --status <s> # pending|running|success|failed|timeout
-d, --duration-ms <n> # 耗时 (ms)
-e, --error <text> # 错误信息
# marketplace list / invocations
--limit <n> # 最大条目数 (默认 50)
--json # JSON 输出性能指标
| 操作 | 目标 | 实际 | 状态 |
|---|---|---|---|
| publish 发布服务 | < 200ms | ~100ms | OK |
| record 记录调用 | < 150ms | ~70ms | OK |
| list 列出 (50 条) | < 300ms | ~130ms | OK |
| stats 聚合统计 | < 500ms | ~250ms | OK |
| invocations 列出 | < 300ms | ~140ms | OK |
关键文件
| 文件 | 职责 |
|---|---|
packages/cli/src/commands/marketplace.js | marketplace 命令主入口 (Phase 65) |
packages/cli/src/lib/skill-marketplace.js | 服务发布、调用记录、统计聚合核心实现 |
测试覆盖率
__tests__/unit/skill-marketplace.test.js — 73 tests覆盖服务 publish/list/show/delete、invocation 记录与状态、按 provider/tag 聚合统计、搜索、分页。
安全考虑
- 服务鉴权:
publish仅记录元数据,真实调用走上游 gateway;密钥不落 SQLite 明文 - 价格/配额:CLI 不强制,业务层应通过策略/SLA 校验
- 调用幂等:
record带requestId去重 - 审计:所有发布/调用事件进
marketplace_audit - 恶意服务:建议叠加 allowlist / signed manifest(生产环境)
故障排查
| 症状 | 可能原因 | 解决方案 |
|---|---|---|
publish 拒 | name 冲突 / tag 非法 | list 检查或改名 |
record 丢失 | provider 未注册 | 先 publish |
stats 空 | 时间窗太窄 | --since 放宽 |
| 搜索无结果 | 索引未更新 | 重启 CLI 或 rebuild-index |
使用示例
# 1. 发布服务
sid=$(cc marketplace publish "image-ocr" --provider did:key:z6... \
--version 1.0.0 --tags ocr,vision --json | jq -r .id)
# 2. 记录调用
cc marketplace record $sid --caller did:key:alice --status ok --latency-ms 120
# 3. 查看
cc marketplace list --tag ocr
cc marketplace show $sid
cc marketplace stats $sid
cc marketplace invocations $sid --limit 50相关文档
- Skill Loader
- Agent Economy
- V2 设计文档(如可用)
- 设计文档:
docs/design/modules/77_技能市场.md
