mirror of
https://github.com/iflytek/skillhub.git
synced 2026-10-06 02:48:28 +00:00
97 lines
7.8 KiB
Markdown
97 lines
7.8 KiB
Markdown
## Why
|
||
|
||
PR #828 已经完成 Suite 版本模型、套件专区搜索和原子安装,但创建或更新包含多个本地 Skill 的
|
||
Suite 时,维护者仍需逐个创建或上传 Skill,再手工把 Suite 固定到对应版本。Suite 还可能引用
|
||
维护者并不拥有的公开 Skill,因此 Bundle 发布必须区分“操作者有权创建或发布的包内容”和
|
||
“操作者只能复用的外部精确引用”。
|
||
|
||
## What Changes
|
||
|
||
- 为创建和更新 Suite 增加共用的两阶段导入:通过一个 ZIP,或受支持浏览器选择的一个根目录,
|
||
一次提交多个 Skill 文件夹;先预览成员与发布动作,再明确确认。确认前不得创建 Skill、
|
||
SkillVersion、Suite、SuiteVersion、扫描或审核任务。
|
||
- Manifest 使用两种成员形式描述完整的目标 Suite 快照:一种是操作者有权发布的已有 Skill 包,
|
||
或操作者有权在目标 Namespace 创建的新 Skill 包;另一种是不修改、也不要求归 Suite 维护者
|
||
所有的精确 PUBLISHED SkillVersion 引用。
|
||
- Bundle 先校验唯一 Manifest、成员目录边界和文件归属,再将每个目录独立还原为以 `SKILL.md`
|
||
为根的普通 Skill 包,复用现有路径、大小、扩展名、内容签名、YAML、元数据和合规校验。任一成员
|
||
存在阻塞错误时不得确认,也不得通过猜测目录或静默选择冲突字段继续。
|
||
- 新增持久化 Bundle 发布操作。只有具备独立创建或发布权限且携带包的成员进入现有校验、扫描和
|
||
审核流程;所有包版本均为 PUBLISHED 且全部引用仍然有效后,才原子创建新 Suite 及首个草稿,
|
||
或为已有 Suite 创建 DRAFT SuiteVersion。
|
||
- Bundle 确认后进入独立发布任务详情;“我的套件”以“技能套件/发布任务”页签分离结果和过程,
|
||
发布任务按“需要处理/进行中/最近完成”分层。停止创建 Suite 后保留任务、已创建的 SkillVersion
|
||
和审核任务,并继续提供成员版本与审核入口。
|
||
- 未变化成员继续使用原精确版本,不创建版本、扫描或审核;支持添加、移除、调整顺序和显式重新
|
||
固定引用成员版本。
|
||
- 任意成员 Skill 均可展示当前用户可见的所属 Suite,不再只支持 Entry Skill。
|
||
- 技能市场(`/search`)与套件专区(`/suites`)保持独立。#828 已经交付的套件专区和类型化 Suite
|
||
搜索无需替换。
|
||
- 新 SuiteVersion 提交或发布前必须具备非空摘要和 Markdown 概述;不完整的 DRAFT 仍可保存,
|
||
已发布历史数据仍可读取。
|
||
- Suite 可以配置自己的 Label,并复用 Registry 的 Label 定义和权限类型,用于套件专区筛选。
|
||
Suite Label 不向成员 Skill 级联。Skill Tag 仍是指向 PUBLISHED SkillVersion 的版本别名,不引入 Suite。
|
||
- 暂不支持覆盖无权管理的已有 Skill、批量迁移 Namespace、按成员关键词提升 Suite 排名、CLI 上传
|
||
Bundle、嵌套 Suite 和跨 Registry 成员。
|
||
|
||
## 相对 Issue #847 的需求取舍
|
||
|
||
| Issue 原提议 | 结论 | OpenSpec 决策 |
|
||
|---|---|---|
|
||
| 上传一个多 Skill 归档 | 保留 | 归档只上传一次;预览使用不占位且有期限的 PreviewSession,确认后才创建并占位的 ExecutionOperation。 |
|
||
| 每个 Suite 成员都必须在归档中有目录 | 调整 | 只有需要发布内容的成员才提供包目录;纯引用成员在 Manifest 中填写精确已发布版本。 |
|
||
| 被引用 Skill 必须属于 Suite 维护者 | 拒绝 | Suite 可以引用其他人发布的合规公开 Skill;引用权限与发布权限相互独立。 |
|
||
| 通过 fingerprint 判断包内容变化 | 保留并澄清 | 携带包的成员使用现有 Skill 规范化 fingerprint;纯引用成员比较精确 SkillVersion 身份。 |
|
||
| 未变化的包不升版、不重新扫描 | 保留 | 继续引用当前精确 SkillVersion。 |
|
||
| 变化的包沿用现有 Skill 发布流程 | 保留 | 仅限操作者已经具备该 Skill 的独立发布权限。 |
|
||
| 包成员变化后立刻创建 SuiteVersion | 调整 | 等全部包版本 PUBLISHED、全部引用仍有效后,再创建一个 DRAFT SuiteVersion;创建模式同时原子创建 Suite 容器。 |
|
||
| 消除 N 次上传和 N 个审核任务 | 调整 | 消除 N 次人工上传,但变化 Skill 仍独立审核,Suite 仍保留自身审核。 |
|
||
| Bundle 自动创建不存在的 Skill | 保留并收紧 | 仅允许在操作者具备 Skill 创建权限的 Namespace 中创建;坐标冲突、越权或 Namespace 不可写时阻塞整个预览。 |
|
||
| 批量设置 labels/tags | 调整 | 为 Suite 自身配置 Label,不向成员 Skill 扩散;Suite 不支持 SkillVersion Tag。 |
|
||
| 把 Suite 结果并入技能市场 | 拒绝 | 技能市场与套件专区保持分开;`/suites` 已提供 Suite 搜索和卡片。 |
|
||
| 成员关键词提升 Suite 排名 | 延后 | 相关性和隐私安全索引需要单独提案。 |
|
||
| 任意成员展示所属 Suite | 保留 | 仅返回最新、可见、ACTIVE、非隐藏、PUBLISHED 的 Suite 引用,并标明是否为 Entry。 |
|
||
| Suite 摘要或概述为空 | 调整 | DRAFT 可暂时不完整,但新提交或直接发布必须同时具备摘要和概述,发布页不能用泛化文案冒充。 |
|
||
| 保留 #828 精确引用模型 | 保持不变 | SuiteVersion 仍只引用精确 PUBLISHED SkillVersion,发布后保持不可变。 |
|
||
|
||
## Capabilities
|
||
|
||
### New Capabilities
|
||
|
||
- `suite-bundle-publishing`:从一个归档或根目录预览、确认、跟踪、恢复并完成 Suite 创建或更新,
|
||
同时严格区分有权创建/发布的包内容与非本人所有的精确版本引用。
|
||
- `suite-member-discovery`:保持技能市场与套件专区独立,同时让任意成员 Skill 展示经过隐私过滤的
|
||
所属 Suite。
|
||
- `suite-metadata`:要求 Suite 具备有效展示内容并支持 Suite 自有 Label,不修改成员 Skill 元数据
|
||
或 SkillVersion Tag。
|
||
|
||
### Modified Capabilities
|
||
|
||
无。现有 `add-skill-suites` 变更尚未归档为主 OpenSpec capability;这些增量 capability 依赖它,
|
||
但不修改其精确引用和生命周期要求。
|
||
|
||
## Impact
|
||
|
||
- **领域与持久化**:新增 Bundle 操作、目标坐标占用、成员结果和 Suite-to-Label 关联;不增加
|
||
SkillVersion 或 SuiteVersion 生命周期状态。
|
||
- **API / OpenAPI**:新增预览、确认、状态、取消、重试和 Suite Label 接口;扩展 Skill 详情中的
|
||
Suite 引用和套件专区标签筛选;技能与套件发现 API 继续分开。
|
||
- **对象存储**:按操作临时保存一个上传归档,支持过期和补偿清理;日志不得保存归档内容。
|
||
- **安全与治理**:复用包校验、Scanner、Namespace 权限、单 Skill 审核、Suite 审核和审计规则;
|
||
管理 Suite 不会获得被引用 Skill 的发布权限。
|
||
- **性能**:每个携带包成员只解压和计算一次 hash;批量读取引用与权限;未变化成员不扫描;限制
|
||
归档和成员规模;反向引用不得产生 N+1 查询。
|
||
- **Web**:在“创建 Suite”和“创建新版本”中增加手工组合/本地导入选择,新增 Bundle 差异预览、
|
||
权限提示和进度页;增加所属 Suite、发布信息校验、Suite Label,以及按需展开的 Entry Skill
|
||
固定版本说明。技能市场与套件专区导航保持不变。
|
||
- **兼容性**:现有单 Skill 发布、单 Skill Label/Tag 管理、Suite 管理和安装 API、旧客户端以及
|
||
已发布 SuiteVersion 快照保持不变。
|
||
|
||
## 分阶段交付
|
||
|
||
OpenSpec 保留完整产品方向,但实现和 PR 按以下边界拆分,后续阶段不得绕过第一阶段建立的权限、
|
||
生命周期和性能约束:
|
||
|
||
1. Suite 创建/更新 Bundle、成员格式验证、权限重检、生命周期协调和 Web 进度闭环。
|
||
2. 基于 Suite 当前 `latestVersionId` 的任意成员反向发现。
|
||
3. Suite Label、展示信息发布校验、概述模板和 Entry Skill 固定版本说明。
|