diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 84e7df620..9d628bacf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,3 +80,28 @@ jobs: - name: Test MCP run: bun run --cwd mcp test + + openclaw: + name: OpenClaw + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Bun + uses: oven-sh/setup-bun@v2 + with: + bun-version: 1.3.1 + + - name: Install dependencies + run: bun install --frozen-lockfile + + - name: Build OpenClaw dependencies + run: | + bun run --cwd packages/protocol build + bun run --cwd packages/oauth-core build + bun run --cwd packages/bot-api-types build + bun run --cwd sdk build + + - name: Check OpenClaw + run: bun run --cwd openclaw check diff --git a/openclaw/README.md b/openclaw/README.md index a5c130a58..0c6cc2898 100644 --- a/openclaw/README.md +++ b/openclaw/README.md @@ -39,7 +39,7 @@ the plugin version for your OpenClaw release line: | OpenClaw line | Inline plugin | Exact install | | --- | --- | --- | -| `2026.8.x` (`>=2026.8.2`) | `0.0.66` | `openclaw plugins install @inline-openclaw/inline --force --accept-capabilities` | +| `2026.8.x` (`>=2026.8.2`) | `0.0.67` | `openclaw plugins install @inline-openclaw/inline --force --accept-capabilities` | | `2026.7.x` (`>=2026.7.1`) | `0.0.63` | `openclaw plugins install @inline-openclaw/inline@0.0.63 --force` | | `2026.6.x` (`>=2026.6.11`, including extended-stable `2026.6.34`) | `0.0.63` | `openclaw plugins install @inline-openclaw/inline@0.0.63 --force` | @@ -50,12 +50,12 @@ alias for older host APIs. | Plugin version | OpenClaw host | Inline realtime SDK | Status | Notes | | --- | --- | --- | --- | --- | -| `0.0.66` | `>=2026.8.2 <2026.9.0` | `0.0.17` | Current | Bounds direct account probes so SDK cleanup completes before the host deadline. | +| `0.0.67` | `>=2026.8.2 <2026.9.0` | `0.0.17` | Current | Keeps the manifest compatible with ClawHub's metadata transport without changing the channel schema. | +| `0.0.66` | `>=2026.8.2 <2026.9.0` | `0.0.17` | Previous | Bounds direct account probes so SDK cleanup completes before the host deadline. | | `0.0.65` | `>=2026.8.2 <2026.9.0` | `0.0.17` | Previous | Makes chat-triggered updates noninteractive by explicitly accepting the trusted Inline capability surface. | | `0.0.64` | `>=2026.8.2 <2026.9.0` | `0.0.17` | Previous | Supports the stable 2026.8 plugin SDK and preserves DM/group reply-thread routing. | | `0.0.63` | `>=2026.6.11 || >=2026.7.1-0` | `0.0.16` | Previous | Applies live-safe settings writes without restarting the Inline channel before it can answer. | | `0.0.62` | `>=2026.6.11 || >=2026.7.1-0` | `0.0.16` | Previous | Keeps the thread-only Following control out of direct-message agent settings, where the server does not support it. | -| `0.0.61` | `>=2026.6.11 || >=2026.7.1-0` | `0.0.16` | Previous | Bounds model discovery through provider authentication so agent settings return a fallback instead of hanging indefinitely. | From npm: diff --git a/openclaw/docs/openclaw-setup.md b/openclaw/docs/openclaw-setup.md index 90316221f..dbdd44bf1 100644 --- a/openclaw/docs/openclaw-setup.md +++ b/openclaw/docs/openclaw-setup.md @@ -8,7 +8,7 @@ Need a bot token first? See `docs/create-inline-bot.md`. Choose the Inline plugin version that matches the installed OpenClaw line: -- OpenClaw `2026.8.x` (`>=2026.8.2`): Inline plugin `0.0.66` — `openclaw plugins install @inline-openclaw/inline --force --accept-capabilities` +- OpenClaw `2026.8.x` (`>=2026.8.2`): Inline plugin `0.0.67` — `openclaw plugins install @inline-openclaw/inline --force --accept-capabilities` - OpenClaw `2026.7.x` (`>=2026.7.1`): Inline plugin `0.0.63` — `openclaw plugins install @inline-openclaw/inline@0.0.63 --force` - OpenClaw `2026.6.x` (`>=2026.6.11`, including extended-stable `2026.6.34`): Inline plugin `0.0.63` — `openclaw plugins install @inline-openclaw/inline@0.0.63 --force` diff --git a/openclaw/openclaw.plugin.json b/openclaw/openclaw.plugin.json index 2d8312037..ef6dd625e 100644 --- a/openclaw/openclaw.plugin.json +++ b/openclaw/openclaw.plugin.json @@ -24,7 +24,6 @@ "channelConfigs": { "inline": { "schema": { - "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": true, "properties": { diff --git a/openclaw/package.json b/openclaw/package.json index 213d745fd..178f036ea 100644 --- a/openclaw/package.json +++ b/openclaw/package.json @@ -1,6 +1,6 @@ { "name": "@inline-openclaw/inline", - "version": "0.0.66", + "version": "0.0.67", "license": "Apache-2.0", "repository": { "type": "git", diff --git a/openclaw/src/manifest.test.ts b/openclaw/src/manifest.test.ts index 268787e93..1c473e626 100644 --- a/openclaw/src/manifest.test.ts +++ b/openclaw/src/manifest.test.ts @@ -17,6 +17,20 @@ function collectRefs(value: unknown, path: string[] = []): string[] { ) } +function collectDollarPrefixedKeys(value: unknown, path: string[] = []): string[] { + if (!value || typeof value !== "object") { + return [] + } + if (Array.isArray(value)) { + return value.flatMap((entry, index) => collectDollarPrefixedKeys(entry, [...path, String(index)])) + } + return Object.entries(value as Record).flatMap(([key, entry]) => { + const entryPath = [...path, key] + const own = key.startsWith("$") ? [entryPath.join(".")] : [] + return own.concat(collectDollarPrefixedKeys(entry, entryPath)) + }) +} + describe("plugin manifest", () => { it("openclaw.plugin.json declares the inline plugin + channel", async () => { const manifestPath = path.resolve(__dirname, "..", "openclaw.plugin.json") @@ -61,6 +75,9 @@ describe("plugin manifest", () => { ]), ) expect(json.channelEnvVars).toBeUndefined() + // ClawHub transports manifest metadata through Convex, which rejects + // dollar-prefixed object keys before the package scanner can run. + expect(collectDollarPrefixedKeys(json)).toEqual([]) const schema = json.channelConfigs?.inline?.schema const streaming = schema?.properties?.streaming as | {