skillhub/docs/00-product-direction.md
dongmucat 8c8b047cbb docs(protocol): adopt .agents/skills (plural) as canonical universal fallback
Resolve historical naming drift between protocol spec and CLI by adopting the
plural form across both docs:

- docs/07-skill-protocol.md: drop the drift caveat; the four-tier priority is
  now stated as .agents/skills / ~/.agents/skills / .claude/skills /
  ~/.claude/skills directly.
- docs/00-product-direction.md: align with the same plural form.

The CLI already uses .agents/skills (cli/src/agents/profiles/generic-fallback.ts
and cli/src/agents/resolver.ts). No code change required.
2026-05-19 10:49:31 +08:00

162 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# skillhub 产品定位与 MVP 范围
## 1. 定位
单实例共享技能注册中心Skills Hub / Registry不是多租户平台。
- 平台只有一个共享注册中心实例
- 隔离边界是 namespace不是租户
- `@global` 是平台级公共空间,由平台管理员管理
- `@team-*` 是协作与治理边界(部门/团队),不是租户边界
- 公共技能visibility=PUBLIC匿名可浏览和下载
以 ClawHub 为产品蓝本(继承产品模型,不照搬技术实现),以 OpenSkills 借鉴 SKILL.md 格式和目录结构约定(不兼容其客户端运行时行为)。
同时,一期必须提供 ClawHub CLI 协议兼容层:服务端需要暴露一组与 ClawHub CLI 兼容的 registry API使现有 ClawHub CLI 在不修改或仅最小配置修改的前提下可完成 registry 侧查询、解析、下载、发布、校验等核心操作。
## 1.2 身份主键约束(已冻结)
- 用户身份主键全链路统一使用 `string`,不得使用 `int` / `long` / `bigint` 作为平台用户标识的正式契约类型。
- 该约束覆盖认证主体、API 入参/出参、权限判定、审计、资源 owner、creator、updater、reviewer、actor、submittedBy 等全部用户关联字段。
- 原因:平台需要兼容外部 SSO / OAuth / OIDC / SCIM 等身份源,外部 UID 通常是稳定字符串,不应先压缩为本地自增整数再作为系统主契约继续传播。
- 旧版草案中任何“整型用户标识”写法都已失效,当前唯一有效约束是“平台用户标识全链路使用字符串主键”。
### 1.1 技能坐标体系(已冻结)
skillhub 内部使用 namespace 坐标模型:`@{namespace_slug}/{skill_slug}`
ClawHub CLI 使用单一 slug 模型slug 校验规则为 `[a-z0-9]([a-z0-9-]*[a-z0-9])?`,不允许 `/` 出现。
为同时满足两套模型,定义以下双向映射规则:
**映射规则:**
| skillhub 坐标 | 兼容层 canonical slug | 说明 |
|---|---|---|
| `@global/my-skill` | `my-skill` | 全局空间省略前缀,直接使用 skill slug |
| `@team-name/my-skill` | `team-name--my-skill` | 团队空间使用 `{namespace_slug}--{skill_slug}` 格式 |
**约束规则:**
- 分隔符为双连字符 `--`
- skill slug 和 namespace slug 均禁止包含 `--`(在校验规则中追加此限制)
- slug 格式校验更新为:`[a-z0-9]([a-z0-9-]*[a-z0-9])?`,且不得包含连续两个以上的连字符 `--`
- 兼容层解析 canonical slug 时:包含 `--` 则拆分为 `namespace_slug` + `skill_slug`,不包含则视为 `@global/{slug}`
- 冲突规则:如果 `@global/team-name--my-skill``@team-name/my-skill` 产生冲突,以 `--` 拆分优先(即优先解析为团队空间技能)。全局空间的 skill slug 禁止包含 `--` 以避免歧义
- 保留字规则namespace slug 保留词列表同样适用于 canonical slug 的 namespace 部分
**显示规则:**
- Web 端始终显示完整坐标:`@global/my-skill``@team-name/my-skill`
- ClawHub CLI 兼容层返回 canonical slug`my-skill``team-name--my-skill`
- skillhub 自有 CLI 支持两种格式输入,内部统一转换为 namespace 坐标
**Well-known 发现:**
- skillhub 服务端提供 `/.well-known/clawhub.json`,返回 `{ "apiBase": "/api/v1" }`
- ClawHub CLI 通过此机制自动发现兼容层 API 基地址
## 2. 参考项目取舍
### 2.1 继承 ClawHub 的部分
- Skill Registry 的整体产品边界
- 技能版本、标签、下载的业务模型
- 发布后治理机制(报告、标记、隐藏、撤回)
- Web 浏览、详情页、上传发布、管理后台的功能切分
- 公共查询 API 与 CLI API 的双通道设计
- ClawHub CLI 所依赖的 registry API 协议面
- Skill 元数据提取与服务端校验思路
- 审计、收藏、评分、统计、运营标签等扩展位
不直接继承:
- Convex 数据模型与运行时
- 向量检索的一期实现方式
### 2.2 借鉴 OpenSkills 的部分
- `SKILL.md` 格式兼容frontmatter + markdown body
- 技能包目录结构约定SKILL.md + references/ + scripts/ + assets/
- 四级目录优先级(`.agents/skills``~/.agents/skills``.claude/skills``~/.claude/skills`
- 目录名作为 lookup key安装后目录名 = skill slug
- AGENTS.md `<skill>` 描述块格式兼容
- 目标skillhub CLI 安装的技能可被 OpenSkills/Claude 兼容客户端发现和使用
不直接继承:
- 以 CLI 为中心的产品定位
- "无服务端"的前提
## 3. 产品原则
- Hub 优先服务端是核心CLI 和 Agent 集成是入口能力
- 兼容优先:兼容 `SKILL.md` 及常见目录约定
- CLI 兼容优先:除 skillhub CLI 外,一期明确要求实现 ClawHub CLI 协议兼容层
- 分层优先:搜索、对象存储都必须有可替换边界
- 开放认证:基于标准 OAuth2 协议,一期 GitHub 登录,架构支持后续扩展多 Provider
- 审计优先:企业内部分发平台必须保留发布、下载、删除、授权等审计链路
## 4. 一期 MVP 功能
核心能力:
- 技能发布(当前版本采用“提交 → 审核 → 上线”;`SUPER_ADMIN` 保留直发能力)
- 技能版本管理semver + 标签)
- 技能浏览、详情、下载(公共技能匿名可访问)
- 标签管理(`latest` 系统保留只读 + 自定义标签人工维护)
- 技能包文件校验与 SKILL.md 元数据抽取
- 基于 PostgreSQL 全文索引的搜索
命名空间与组织:
- 单一全局命名空间(`@global/skill-name`),由平台管理员管理,不支持多个平台级 namespace
- 团队/部门命名空间(`@team-slug/skill-name`
- 命名空间成员管理
- 创建技能时选择归属空间
审核流程:
- 当前版本:普通用户发布后进入审核,审核通过后上线
- `SUPER_ADMIN` 发布可直达 `PUBLISHED`
- 分级审核:团队空间由团队管理员审核,全局空间由平台管理员审核
- 团队技能提升到全局需平台管理员二次审核
- 平台管理员只负责全局空间审核与提升审核,不介入团队空间审核
- 当前不引入自动审核;`PrePublishValidator` 仅作为未来扩展点保留,默认实现为 `NoOp`
- 撤回审核语义统一为 `PENDING_REVIEW → DRAFT`,不再走删除版本记录
- skill 生命周期管理读模型统一为 `headlineVersion / publishedVersion / ownerPreviewVersion / resolutionMode`
- `hidden` 是独立治理覆盖层,不属于 skill 容器状态机
认证与权限:
- OAuth2 标准登录(一期 GitHub OAuth
- CLI 认证采用 OAuth Device Flow由 Web 授权后签发 CLI 可用凭证
- API Token 保留为平台通用凭证能力,用于自动化、兼容层和后续扩展
- ClawHub CLI 协议兼容层(一期聚焦 search、resolve、download、publish、whoami 等核心接口)
- RBAC 角色权限体系平台角色SUPER_ADMIN / SKILL_ADMIN / USER_ADMIN / AUDITOR + 命名空间角色)
- 管理后台:用户角色管理、发布审核
社交功能:
- 收藏star
- 评分1-5 分)
审计:
- 发布、审核、下载、删除等关键操作审计
## 5. 一期明确不做(含后续规划)
- 评论 → Phase 5 上线,含举报机制
- 自动安全扫描 → Phase 5 上线,接入 `PrePublishValidator` 扩展点
- 举报/标记机制 → Phase 5 上线,配合评论和治理闭环
- 向量搜索 → 当前进入第一阶段规划,仅做搜索增强,不引入推荐系统
- 在线编辑器 → 暂不规划
- Webhook/事件通知 → Phase 5预留扩展点
- 技能依赖/兼容性声明 → 暂不规划(预留 `parsed_metadata_json` 字段)
### latest 语义说明
这是有意的产品决策,不是继承 ClawHub 的回滚模型:
- `latest` 自动跟随最新已发布版本,只读,不可手动移动
- 回滚/稳定通道管理通过自定义标签实现(如 `stable``beta``stable-2026q1`
- ClawHub 的"通过移动 latest 做回滚"能力被替换为"通过自定义标签做通道管理"
## 6. 一期核心约束
- Skill 包视为"文本资源包",不接受二进制大文件
- 技能包主入口文件固定为 `SKILL.md`
- 元数据以 `SKILL.md` frontmatter 为主,数据库持久化解析结果
- 文件内容原文存对象存储,检索面向数据库中的派生字段与可索引文本
- Web 认证、CLI Device Flow 与 API Token 凭证统一汇聚到平台用户体系
- 公共技能visibility=PUBLIC匿名可浏览和下载无需登录