Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,14 @@ jobs:
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python -m json.tool plugins/quicker/.mcp.json > $null
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
- name: Test real Windows PowerShell transport
- name: Test transport, installation and release packaging
run: python -m unittest discover -s tests -v
- name: Build and verify every release package
run: |
$quickerCheckTag = "v0.0.0-ci.$env:GITHUB_RUN_ID.$env:GITHUB_RUN_ATTEMPT"
git tag $quickerCheckTag HEAD
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python scripts/package-release.py --tag $quickerCheckTag --output-dir .temp/release-ci
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
python scripts/package-release.py --tag $quickerCheckTag --output-dir .temp/release-ci --verify
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ This repository maintains integrations that let external agents use Quicker. Sta
- Check git status before editing and preserve unrelated changes. Use one writer for Git mutations.
- User-facing communication and documentation are Chinese. Code and Agent-facing instructions may use English.
- Write temporary output under .temp/ and distribution archives under dist/; both are ignored.
- Every release must ship every platform's standalone ZIP, the complete source/install ZIP, release-manifest.json and SHA256SUMS.txt, even when only one plugin changed. Follow docs/发布.md and scripts/release-packages.json; build and verify from the tag with scripts/package-release.py. Verify the downloaded release assets as well. Artifact filenames use the release version; plugin manifest versions remain independent.
- For transport changes, run `python -m unittest discover -s tests -v` on Windows. The tests use isolated fixtures; never point them at the user's real settings.
- Validate changed plugin manifests with that platform's current tooling. For Codex, the installed plugin-creator validator is useful locally; the package must not depend on it at runtime.
- For installation changes, verify package discovery and a local install separately from live Quicker acceptance. A mock transport test does not establish real action authoring.
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,6 @@ python -m unittest discover -s tests -v

新增平台先读[接入约定](docs/接入约定.md)和[新增平台](docs/新增平台.md)。贡献者与 Agent 的仓库工作规则见 [AGENTS.md](AGENTS.md)。

每次 Release 提供所有平台的独立 ZIP、完整安装包、发布清单和校验和;即使只更新一个插件也不省略其他平台。发布维护者使用[统一打包与验证流程](docs/发布.md),从指定 tag 生成并校验全部附件。

参考:[OpenAI 插件打包规范](https://developers.openai.com/plugins/build/plugins)、[Cursor 插件规范](https://cursor.com/docs/reference/plugins)。
56 changes: 56 additions & 0 deletions docs/发布.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# 发布完整插件集合

每次 GitHub Release 都必须提供 **Codex、Cursor、Claude Code、通用 MCP 的全部独立 ZIP**,即使本次只修改其中一个插件。最新 Release 应能直接找到所有平台的安装包,不能要求用户到旧版本寻找其他插件。

## 单一清单与版本

`scripts/release-packages.json` 是安装包和共享资源的唯一名单,供共享源码同步与发布打包使用。每项声明平台 id、包目录、插件 manifest,以及适用的 MCP / marketplace 入口。新增平台时同时更新该清单;打包器会核对名单与 tag 下所有受跟踪 `plugins/<目录>` 一致。

文件名统一使用发布批次版本,包内 manifest 保留平台自己的版本。例如批次 `v0.2.2` 会生成 `quicker-cursor-0.2.2.zip`,即使其中的 Cursor 插件仍为 `0.2.0`。不要为凑齐附件擅自递增未变更的插件版本。`release-manifest.json` 分别记录 `releaseVersion`、各包 `packageVersion`、源 tag / commit、附件名、大小和 SHA-256。

当前每批必须有 7 个附件:

- `quicker-agent-integrations-<发布版本>.zip`:完整源码安装包,含各平台包、安装器、市场入口、文档与许可证。
- `quicker-codex-<发布版本>.zip`、`quicker-cursor-<发布版本>.zip`、`quicker-claude-<发布版本>.zip`、`quicker-mcp-<发布版本>.zip`:所有独立包。
- `release-manifest.json`:可审查的批次与包版本记录。
- `SHA256SUMS.txt`:覆盖全部 ZIP 及发布清单。

独立 ZIP 的根目录统一为 `quicker/`,包含隐藏 manifest、必需脚本、技能及该 tag 的 MIT 许可证。完整包根目录为 `quicker-agent-integrations-<发布版本>/`。

## 生成与验证

先提交变更、完成 PR / CI 和本次发布授权,再选定发布 tag。将以下 `v0.2.2` 替换为实际已存在的本地 SemVer tag;打包脚本不会创建 tag、上传文件或修改 Release。

```powershell
git fetch origin --tags
python scripts/package-release.py --tag v0.2.2
python scripts/package-release.py --tag v0.2.2 --verify
```

默认输出到 `dist/v0.2.2/`,可用 `--output-dir` 指定新目录。生成要求输出目录为空,避免混入上次附件或覆盖已有文件。校验模式只读,检查附件集合、ZIP 路径、文件内容和权限、tag 中的版本、完整校验和。缺包、清单遗漏受跟踪平台、共享副本漂移、缺少必需入口或附件内容与 tag 不同都会失败。

打包内容直接读取 tag 的 Git tree / blob,保留隐藏文件,不读取工作区中的修改、未跟踪文件或 ignored `plugins/codex` 等工具产物。若 `.temp/`、`dist/`、`.quicker/`、`.venv/` 或 `__pycache__/` 根目录被误提交到 tag,脚本会拒绝打包。历史上尚未包含发布清单的 tag 不适用此流程;不要将当前工作区文件冒充旧 tag 内容。

CI 在自己的临时检出中创建本地测试 tag,实际打出整套附件并再次校验;不会推送测试 tag 或创建 Release。另有隔离 Git fixture 测试,覆盖全部平台、版本区别、标签内容隔离以及篡改检测。

## 上传与发布后检查

核对生成的 `release-manifest.json` 和发布说明,再按清单上传全部附件,不手工挑选“本次变化”的平台。以下命令从清单构造附件列表;发布说明应提前写在 `.temp/`:

```powershell
$quickerReleaseDir = Join-Path (Get-Location) 'dist/v0.2.2'
$quickerRelease = Get-Content (Join-Path $quickerReleaseDir 'release-manifest.json') -Raw | ConvertFrom-Json
$quickerAssets = @($quickerRelease.artifacts | ForEach-Object { Join-Path $quickerReleaseDir $_.file })
$quickerAssets += Join-Path $quickerReleaseDir 'release-manifest.json'
$quickerAssets += Join-Path $quickerReleaseDir 'SHA256SUMS.txt'
gh release create $quickerRelease.tag @quickerAssets --target $quickerRelease.sourceCommit --title "Quicker Agent Integrations $($quickerRelease.tag)" --notes-file .temp/release-notes.md
```

上传后下载全部附件到另一个新目录,再以同一 tag 校验,确认远端 Release 没有漏项:

```powershell
gh release download v0.2.2 --dir dist/v0.2.2-downloaded
python scripts/package-release.py --tag v0.2.2 --output-dir dist/v0.2.2-downloaded --verify
```

已有 Release 缺附件时,以原 tag 内容补齐完整集合并更新清单和校验和;不要移动已公开的 tag。发布包完整性、平台安装和真实 Quicker 写动作验收分别记录,不能相互替代。
1 change: 1 addition & 0 deletions docs/新增平台.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
| 项目 | 完成要求 |
| --- | --- |
| 安装单元 | 独立包目录中包含清单、MCP 配置、流程引导、必需脚本及引用文件,并在该平台市场清单中声明路径。使用平台支持的包内路径机制,保留隐藏配置文件。 |
| 发布集合 | 将平台登记到 `scripts/release-packages.json`,确保以后每批 Release 都包含其独立 ZIP;包版本与发布批次分别记录,遵循[发布约定](发布.md)。 |
| 安装与更新 | 提供可执行命令或已验证的官方安装步骤,列出安装期与运行期依赖、更新、卸载和重新加载方式。安装仅修改本插件受管内容,保留用户其他配置。 |
| 平台引导 | 正确路由 Quicker 工具,解释虚拟路径、显式 slot、运行时知识、草稿默认结果和错误恢复;将平台特有提示留在本平台。 |
| 自动验证 | 校验清单和引用文件,运行传输契约测试,覆盖平台启动参数、路径解析及安装包独立运行。 |
Expand Down
Loading
Loading