Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
af3dcc2
docs(plugin): design Convax pet platform
Jul 22, 2026
b828fe1
docs(plugin): align pet design with existing v5
Jul 22, 2026
c733922
docs(plugin): plan Convax pet implementation
Jul 22, 2026
f0a4209
feat(plugin): add v5 pet contribution contract
Jul 22, 2026
14185e7
feat(plugin): add Violet Convax pet
Jul 22, 2026
f52fb49
docs(plugin): document pet contributions
Jul 22, 2026
9b2fe0f
docs(plugin): tidy pet implementation plan
Jul 22, 2026
5c329c9
fix(plugin): validate pet sprite packages
Jul 22, 2026
2dd36b3
docs(plugin): redefine pet as feature plugin
Jul 22, 2026
df993f1
docs(plugin): scope pet library to bundled assets
Jul 22, 2026
6333dbd
docs(plugin): plan pet feature refactor
Jul 22, 2026
8c481e4
feat(plugin): define pet feature surfaces
Jul 22, 2026
ce63a0d
feat(plugin): validate packaged pet libraries
Jul 22, 2026
85f6025
feat(plugin): add packaged pet library
Jul 22, 2026
11fcbb3
feat(plugin): add scoped pet host client
Jul 22, 2026
dbee812
feat(plugin): own floating pet surface
Jul 22, 2026
0d720ea
feat(plugin): own pet collection settings
Jul 22, 2026
0aba205
feat(plugin): ship pet feature plugin
Jul 22, 2026
d0da93c
fix(plugin): use browser-relative pet imports
Jul 22, 2026
6581b45
fix(plugin): harden pet surface runtime
Jul 22, 2026
96a32a9
fix(workspaces): sync lockfile metadata
Jul 22, 2026
7e46224
fix(plugin): reject portable pet atlas collisions
Jul 23, 2026
9bfe4fb
fix(plugin): ship Electron-decodable pet atlas
Jul 23, 2026
5dc2d98
merge: sync Convax Pet release with main
Jul 23, 2026
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
15 changes: 12 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,15 @@ ZIP remains portable to Codex and other Agent Skills clients. Because the same s
changes both archives, an owned Skill release must also bump and publish its owner
Plugin; release coverage verifies the deterministic bytes of both.

`convax.plugin/5` adds transport-neutral host capabilities, including a sandboxed
desktop pet feature. One Pet feature Plugin uses the
`convax.plugin-capability/1` compatibility pair and contributes static overlay and
settings surfaces plus a `convax.pet-library/1` packaged collection through
`contributes.pet`. The surfaces use the scoped `convax.pet-host/1` protocol; Convax
retains only the native window, content-free activity projection, validated
navigation, installed asset serving, and bounded persistence. See the working package in
[`packages/plugins/convax-pet`](packages/plugins/convax-pet).

See the working example in
[`packages/plugins/hello-convax`](packages/plugins/hello-convax), then read:

Expand Down Expand Up @@ -116,10 +125,10 @@ Open **Settings → Skills and Plugins** in a compatible Convax build. The catal
loaded from the public Registry above; selecting **Install Plugin** or **Install
Skill** sends only the package id to Convax main, which downloads and validates the
corresponding immutable Release ZIP.
If a v2, v3, or v4 Plugin declares Registry companions, the same install transaction selects
If a v2, v3, v4, or v5 Plugin declares Registry companions, the same install transaction selects
only the exact local platform/architecture artifact and verifies its immutable URL,
byte count, and SHA-256 separately from the static ZIP.
For v4, Plugin-owned Skills are admitted and removed in that same Plugin transaction;
For v4 and v5, Plugin-owned Skills are admitted and removed in that same Plugin transaction;
they are never an independent Convax install action.

The `microvoid/convax-plugins` repository, Registry, and Release assets are public
Expand Down Expand Up @@ -191,7 +200,7 @@ entries only.
Third-party Plugin ZIPs are inert. Web surfaces are static HTML/CSS/JavaScript
rendered by Convax in an iframe with exactly `sandbox="allow-scripts"`; they cannot
contain native executables, Node/Electron code, network permissions, or a generic
host bridge. A v2, v3, or v4 Tool Plugin may name a separately installed external command.
host bridge. A v2, v3, v4, or v5 Tool Plugin may name a separately installed external command.
Convax resolves and fingerprints it during explicit Plugin install/update; that
transaction is consent to the exact binding, so later calls do not show a separate
command prompt. It never becomes part of the ZIP. A Registry companion is an independent immutable Release asset,
Expand Down
13 changes: 10 additions & 3 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,13 @@ manifest 为生成能力和/或固定服务动作声明一个单独安装的裸
Agent Skills 的客户端使用。由于同一份源码会同时改变两个压缩包,发布插件拥有的技能时
必须同步提升并发布所属插件版本;发布覆盖检查会校验双方的确定性产物字节。

`convax.plugin/5` 新增与传输方式无关的宿主能力,其中包括沙箱化桌面宠物功能。一个
Pet 功能插件使用 `convax.plugin-capability/1` 兼容性组合,通过 `contributes.pet`
提供静态悬浮窗、设置页面和 `convax.pet-library/1` 内置宠物库。页面通过受限的
`convax.pet-host/1` 协议使用宿主能力;Convax 仅保留原生窗口、无内容活动投影、
受控导航、已安装资产读取和有限持久化。可参考完整示例
[`packages/plugins/convax-pet`](packages/plugins/convax-pet)。

可以先阅读完整示例
[`packages/plugins/hello-convax`](packages/plugins/hello-convax),然后参考:

Expand Down Expand Up @@ -95,9 +102,9 @@ Agent Skills 的客户端使用。由于同一份源码会同时改变两个压
在兼容版本的 Convax 中打开“设置 → 技能与插件”。能力目录从上面的公开 Registry
加载。点击安装插件或安装技能后,渲染进程只会把包标识传给主进程,由主进程下载并
校验对应的不可变 Release ZIP。
若 v2、v3 或 v4 插件声明了 Registry companion,同一次安装会只选择当前平台和架构的精确工件,
若 v2、v3、v4v5 插件声明了 Registry companion,同一次安装会只选择当前平台和架构的精确工件,
并在静态 ZIP 之外独立校验其不可变 URL、字节数和 SHA-256。
对于 v4,插件拥有的技能也在同一插件事务中接纳和移除,不能在 Convax 中独立安装或卸载。
对于 v4 和 v5,插件拥有的技能也在同一插件事务中接纳和移除,不能在 Convax 中独立安装或卸载。

`microvoid/convax-plugins` 仓库、Registry 和 Release 资源都是公开的,不需要
GitHub 账号或令牌。主应用仓库 `microvoid/convax` 可以继续保持私有,不会影响包安装。
Expand Down Expand Up @@ -162,7 +169,7 @@ Registry 条目、为 ZIP 创建来源证明并发布 GitHub Release。Pages 工

第三方插件 ZIP 只能包含惰性文件。Web 界面只能是静态 HTML、CSS 和 JavaScript,
并由 Convax 放入仅带 `sandbox="allow-scripts"` 的 iframe 中运行;ZIP 不能包含原生
可执行文件、Node/Electron 代码、网络权限或通用宿主桥接。v2、v3 或 v4 工具插件可以声明一个
可执行文件、Node/Electron 代码、网络权限或通用宿主桥接。v2、v3、v4v5 工具插件可以声明一个
单独安装的外部命令。Convax 会在用户明确安装或更新插件时独立解析并校验指纹;这次
操作即表示同意运行该精确绑定,后续调用不会再弹出本地命令确认。该命令不会进入 ZIP。
Registry companion 是独立且不可变的 Release 工件,仅在目标、大小和摘要全部精确校验后
Expand Down
4 changes: 4 additions & 0 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

21 changes: 20 additions & 1 deletion docs/packaging.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,25 @@ license notice. Its generation and/or service contribution uses one declared
must never appear anywhere below `package/`; validation and packing do not install,
build, or execute companion source under `packages/tools/`.

## Pet feature Plugin assets

A `convax.plugin/5` Pet feature package remains inert, offline Web content. Its ZIP
contains the manifest, license, documentation, static overlay and settings pages,
browser JavaScript/CSS, a `convax.pet-library/1` document, and its referenced PNG
or WebP atlases. The manifest's `contributes.pet` object names the packaged library
and both static surfaces. The ZIP must not contain a runtime, executable,
dependency tree, installer, remote script, or server. The Plugin uses the
transport-neutral `convax.plugin-capability/1` compatibility pair and the narrow
`convax.pet-host/1` surface protocol.

For `spriteVersion: 2`, the sprite sheet is exactly 1536×1872 pixels: eight columns
of 192-pixel cells and nine rows of 208-pixel cells. The ordinary 2 MiB per-file
limit still applies. Keep asset paths package-relative and let Convax inspect
dimensions, format, transparency, and decoded image safety before installation.
The Plugin owns presentation, animation rules, collection, and selection. The host
owns the native floating window and exposes only bounded, content-free Agent
activity data.

The matching source metadata declares the reviewed tool directory and build output
for each target. For example:

Expand Down Expand Up @@ -69,7 +88,7 @@ mode, size and SHA-256 checks as a native companion. Native companions remain va

## Plugin-owned Skill composition

A `convax.plugin/4` manifest may declare `contributes.skills` entries such as
A `convax.plugin/4` or `convax.plugin/5` manifest may declare `contributes.skills` entries such as
`{"name":"ffmpeg-canvas","path":"skills/ffmpeg-canvas"}`. The named Skill remains
an independent workspace and standard portable Skill package. Its source metadata
declares `ownerPluginId`.
Expand Down
66 changes: 58 additions & 8 deletions docs/plugin-authoring.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ DOM, use browser storage as shared application state, or access Node/Electron.

`convax.plugin/2` through `convax.plugin/5` may instead be headless
executable Tool Plugins. New executable Plugins should use v3, or v4 when they own
Skills; use v5 only when they contribute an LLM provider. Their ZIP still contains no executable code: the manifest names a separately distributed bare
Skills; use v5 for transport-neutral capabilities such as an LLM provider or Pet
feature. Their ZIP still contains no executable code: the manifest names a separately distributed bare
`mcp-stdio` command for generation and/or fixed service actions. The Registry may
bind that command to verified platform artifacts that Convax installs into
host-owned storage. Explicit Plugin install/update authorizes that exact binding;
Expand All @@ -21,8 +22,8 @@ documented fields are accepted. Source metadata must use the matching pair:

- `convax.plugin/1` with `convax.plugin-host/1`;
- `convax.plugin/2` with `convax.plugin-host/2`;
- `convax.plugin/3` with `convax.plugin-host/3`.
- `convax.plugin/4` with `convax.plugin-host/4`.
- `convax.plugin/3` with `convax.plugin-host/3`;
- `convax.plugin/4` with `convax.plugin-host/4`;
- `convax.plugin/5` with `convax.plugin-capability/1`.

The v1 schema is static-only:
Expand Down Expand Up @@ -51,9 +52,55 @@ a companion `SKILL.md` inside the same Plugin ZIP; installing it remains an expl
independent user action. This legacy field is available only through v3. Do not use
it for a Skill whose lifecycle belongs to its Plugin.

## Pet contribution

`convax.plugin/5` adds a sandboxed Pet feature contribution. A package contributes
one Pet feature Plugin and
owns its static overlay, settings, packaged collection, animation rules, and
selection. Its `convax.plugin-capability/1` compatibility label describes manifest
support; the surfaces use the separate `convax.pet-host/1` protocol:

The `contributes.pet` object declares the library and both static feature surfaces:

```json
{
"schema": "convax.plugin/5",
"id": "convax-pet",
"name": "Convax Pet",
"description": "A local desktop companion and pet library for Convax activity.",
"version": "0.2.1",
"capabilities": [
"pet.activity.read",
"pet.activity.open",
"pet.preferences.write"
],
"contributes": {
"pet": {
"library": "pet-library.json",
"overlay": "pet/index.html",
"settings": "settings/index.html",
"protocol": "convax.pet-host/1"
}
}
}
```

The `convax.pet-library/1` document contains one to 64 unique pet entries. Each
entry supplies `id`, `displayName`, `description`, package-relative `spritesheet`,
`spriteVersion: 2`, and `alt`. Every atlas is a 1536×1872 PNG or WebP containing
eight 192×208 cells across and nine state rows in this order: `idle`,
`running-right`, `running-left`, `waving`, `jumping`, `failed`, `waiting`,
`running`, and `review`.

The settings and overlay pages run with no Node, Electron, remote network, native
path, or arbitrary IPC access. Their surface-scoped `convax.pet-host/1` ports expose
only content-free activity, validated navigation, overlay movement, preferences,
and wake/tuck lifecycle. Installation never wakes the pet automatically. New pets
ship as library entries in a new version of the same feature Plugin.

## Plugin-owned Skills

`convax.plugin/4` replaces the ambiguous singular `skill` field with explicit
`convax.plugin/4` and `convax.plugin/5` replace the ambiguous singular `skill` field with explicit
Plugin-owned Skill contributions. The owner must still provide a real Plugin
capability—such as a sandboxed Canvas renderer, an executable generation/service
runtime, or a renderer-mediated generation action—beyond merely wrapping a Skill:
Expand Down Expand Up @@ -272,9 +319,12 @@ The v5 compatibility pair deliberately uses the independently versioned

## Host connection

Convax transfers one fresh `MessagePort` to each mounted Plugin node. Accept it only
from `window.parent`, for the host protocol matching the manifest major (`/1`,
`/2`, `/3`, `/4`, or `/5`), the exact Plugin id, and only once:
Convax transfers one fresh `MessagePort` to each mounted Plugin node using the
versioned `convax.plugin-host/1` through `/4` protocols. Accept it only from
`window.parent`, for the host protocol matching the manifest major, the exact
Plugin id, and only once. The transport-neutral v5 compatibility label does not by
itself grant this Canvas port. A Pet feature provider instead receives a separate
`convax.pet-host/1` port only on its declared overlay and settings surfaces:

```js
const PROTOCOL = "convax.plugin-host/1";
Expand Down Expand Up @@ -341,5 +391,5 @@ host operations.
No remote scripts/assets, iframe network APIs, popups, downloads, eval-generated
code, native/WASM executables, packaged Node servers, filesystem paths, secrets,
telemetry, service workers, or generic method forwarding. Do not edit `.convax`
files. A v2, v3, or v4 external runtime is a separately installed and authorized tool, never a
files. A v2, v3, v4, or v5 external runtime is a separately installed and authorized tool, never a
Plugin ZIP asset. Use host capabilities only.
20 changes: 18 additions & 2 deletions docs/registry-spec.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,27 @@ rejected. Skill compatibility is exactly `{"skillSchema":"opencode.skill/1"}`.
Artifact objects contain only `url`, `size`, and lowercase hex `sha256`; URLs always
target `microvoid/convax-plugins` Release assets.

## Pet feature Plugins

One Pet feature Plugin is a `convax.plugin/5` capability published through the
normal Plugin Registry item. Its complete embedded manifest contains
`contributes.pet` with package-relative `library`, `overlay`, and `settings` paths
plus `protocol: "convax.pet-host/1"`. It requests exactly `pet.activity.read`,
`pet.activity.open`, and `pet.preferences.write`, and has no runtime or companion
executable. The `convax.plugin-capability/1` compatibility label remains the
transport-neutral admission contract.

Clients validate both static surface entries, the strict `convax.pet-library/1`
document, and every referenced atlas before activation. Installation does not
imply waking the pet. The Plugin owns presentation and its packaged collection;
Convax owns only native windowing, activity projection, navigation validation, and
bounded persistence.

## Plugin-owned Skills

A Skill item may additionally contain `ownerPluginId`. This is lifecycle metadata
for Convax, not an Agent Skills field. The id must resolve to a Plugin item whose
`convax.plugin/4` manifest contains a matching `contributes.skills` item. The
`convax.plugin/4` or `convax.plugin/5` manifest contains a matching `contributes.skills` item. The
Registry is rejected if either side is missing.

Convax may show an owned Skill as a normal Skill detail with a “Provided by”
Expand All @@ -83,7 +99,7 @@ Release entry; a new Skill entry cannot be published beside stale owner Plugin b

## Verified companion executables

An external v2, v3, or v4 runtime is distributed beside, never inside, its static Plugin ZIP.
An external v2, v3, v4, or v5 runtime is distributed beside, never inside, its static Plugin ZIP.
Its Plugin item has the following optional strict field:

```json
Expand Down
Loading