diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index bafc6bd..0115e13 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -6,15 +6,15 @@ "source": { "source": "url", "url": "https://github.com/full-aigc-plugins/deckcraft-plugin.git", - "ref": "v0.1.0-dev.20261109.3" + "ref": "v0.1.0-dev.20261109.4" }, "interface": { - "logo": "https://cdn.jsdelivr.net/gh/full-aigc-plugins/deckcraft-plugin@v0.1.0-dev.20261109.3/assets/official-logo.png", + "logo": "https://cdn.jsdelivr.net/gh/full-aigc-plugins/deckcraft-plugin@v0.1.0-dev.20261109.4/assets/official-logo.png", "displayName": "DeckCraft · Presentations", "shortDescription": "Pitches, weekly reports, training decks and option comparisons" }, - "version": "0.1.0-dev.20261109.3", - "icon": "https://cdn.jsdelivr.net/gh/full-aigc-plugins/deckcraft-plugin@v0.1.0-dev.20261109.3/assets/official-logo.png", + "version": "0.1.0-dev.20261109.4", + "icon": "https://cdn.jsdelivr.net/gh/full-aigc-plugins/deckcraft-plugin@v0.1.0-dev.20261109.4/assets/official-logo.png", "policy": { "installation": "AVAILABLE", "authentication": "ON_USE" diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 53f0133..3ac8bad 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", - "description": "Pitch decks, weekly reports, training material, data stories and option comparisons. Masters, layouts and speaker notes stay editable after export.", + "version": "0.1.0-dev.20261109.4", + "description": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。", "license": "Apache-2.0", "skills": "./skills/", "author": { diff --git a/.codex-plugin/plugin.json b/.codex-plugin/plugin.json index 397f0c1..0eb0fba 100644 --- a/.codex-plugin/plugin.json +++ b/.codex-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", + "version": "0.1.0-dev.20261109.4", "skills": "./skills/", "mcpServers": "./.codex-plugin/mcp.json", "interface": { @@ -11,5 +11,5 @@ "composerIconDark": "./assets/official-logo.png", "shortDescription": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。" }, - "description": "Pitch decks, weekly reports, training material, data stories and option comparisons. Masters, layouts and speaker notes stay editable after export." + "description": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。" } diff --git a/.zcode-plugin/plugin.json b/.zcode-plugin/plugin.json index bc17565..edc3b32 100644 --- a/.zcode-plugin/plugin.json +++ b/.zcode-plugin/plugin.json @@ -1,7 +1,7 @@ { "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", - "description": "Pitch decks, weekly reports, training material, data stories and option comparisons. Masters, layouts and speaker notes stay editable after export.", + "version": "0.1.0-dev.20261109.4", + "description": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。", "license": "Apache-2.0", "skills": "./skills/", "displayName": "DeckCraft", diff --git a/README.en.md b/README.en.md index 305a317..2dd0175 100644 --- a/README.en.md +++ b/README.en.md @@ -2,7 +2,7 @@ > Pitches, weekly reports, training decks and option comparisons -**Version**: 0.1.0-dev.20261109.3 · **License**: Apache-2.0 · **Skills**: 10 · **MCP server**: 1 +**Version**: 0.1.0-dev.20261109.4 · **License**: Apache-2.0 · **Skills**: 10 · **MCP server**: 1 [简体中文](README.md) · [Install](#installation) · [Quick start](#quick-start) · [Project layout](#project-layout) diff --git a/README.md b/README.md index 68e5265..f0afcae 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ > 路演、周报、课件与方案对比,可编辑演示 -**版本**:0.1.0-dev.20261109.3 · **许可证**:Apache-2.0 · **技能**:10 个 · **MCP 服务**:1 个 +**版本**:0.1.0-dev.20261109.4 · **许可证**:Apache-2.0 · **技能**:10 个 · **MCP 服务**:1 个 [English](README.en.md) · [安装](#安装) · [快速开始](#快速开始) · [项目结构](#项目结构) diff --git a/docs/verification/release-candidate.json b/docs/verification/release-candidate.json index c2da66d..ae36c34 100644 --- a/docs/verification/release-candidate.json +++ b/docs/verification/release-candidate.json @@ -1,7 +1,7 @@ { "releaseStatus": "BLOCKED", - "currentVersion": "0.1.0-dev.20261109.3", - "releaseTag": "v0.1.0-dev.20261109.3", + "currentVersion": "0.1.0-dev.20261109.4", + "releaseTag": "v0.1.0-dev.20261109.4", "installableDevelopmentCandidate": true, "limitations": [ "Full creative/domain and all-host UI acceptance remains incomplete.", diff --git a/dsh/package.json b/dsh/package.json index b0ea1dd..61b15ab 100644 --- a/dsh/package.json +++ b/dsh/package.json @@ -1,6 +1,6 @@ { "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", + "version": "0.1.0-dev.20261109.4", "description": "通过 DeckCraft 原生 MCP 和技能创建、检查与导出演示文稿。", "type": "module", "main": "lib/index.js", diff --git a/kimi.plugin.json b/kimi.plugin.json index a7fe938..cbe3ec9 100644 --- a/kimi.plugin.json +++ b/kimi.plugin.json @@ -1,7 +1,7 @@ { "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", - "description": "Pitch decks, weekly reports, training material, data stories and option comparisons. Masters, layouts and speaker notes stay editable after export.", + "version": "0.1.0-dev.20261109.4", + "description": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。", "license": "Apache-2.0", "skills": "./skills/", "interface": { diff --git a/package.json b/package.json index c57115d..a5aca4f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "deckcraft-plugin", - "version": "0.1.0-dev.20261109.3", + "version": "0.1.0-dev.20261109.4", "private": true, "type": "module", "main": "./dsh/lib/index.js", diff --git a/plugin.json b/plugin.json index e7f6073..01366ca 100644 --- a/plugin.json +++ b/plugin.json @@ -1,18 +1,18 @@ { "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json", "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", - "description": "Pitch decks, weekly reports, training material, data stories and option comparisons. Masters, layouts and speaker notes stay editable after export.", + "version": "0.1.0-dev.20261109.4", + "description": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。", "license": "Apache-2.0", "extensions": { "com.openai": { "interface": { - "displayName": "DeckCraft · Presentations", + "displayName": "DeckCraft", "logo": "./assets/official-logo.png", "logoDark": "./assets/official-logo.png", "composerIcon": "./assets/official-logo.png", "composerIconDark": "./assets/official-logo.png", - "shortDescription": "Pitches, weekly reports, training decks and option comparisons" + "shortDescription": "一句话生成可编辑演示文稿:路演、周报、培训和数据叙事,母版、版式与讲稿都能继续改。" } } } diff --git a/ui/bootstrap.mjs b/ui/bootstrap.mjs index 32fe65f..19990da 100644 --- a/ui/bootstrap.mjs +++ b/ui/bootstrap.mjs @@ -100,7 +100,7 @@ async function main(){ if(!initParams)throw Error('MCP initialization required'); if(method==='ping'){emit({id,result:{}});return;} if(method==='tools/list'){emit({id,result:{tools:catalog.tools}});return;} - if(method==='resources/list'){emit({id,result:{resources:catalog.resources||[]}});return;} + if(method==='resources/list'){emit({id,result:alignZcodeResponse(method,params,{resources:catalog.resources||[]},lock.name)});return;} if(method==='resources/templates/list'){emit({id,result:{resourceTemplates:catalog.resourceTemplates||[]}});return;} await engine();emit({id,result:alignZcodeResponse(method,params,await send(method,params),lock.name)}); }catch(error){emit({id:request?.id??null,error:error.rpcError||{code:-32603,message:error.message}});} diff --git a/ui/runtime.lock.json b/ui/runtime.lock.json index 8a5fef3..13d56c3 100644 --- a/ui/runtime.lock.json +++ b/ui/runtime.lock.json @@ -1,6 +1,6 @@ { "name": "deckcraft", - "version": "0.1.0-dev.20261109.3", + "version": "0.1.0-dev.20261109.4", "url": "https://github.com/full-aigc-plugins/deckcraft-plugin/releases/download/v0.1.0-dev.20261019.1/deckcraft-runtime.tgz", "sha256": "60b1cf27cb1da14bb07391584cf50a2660f333a0250d54f533d998d5d5ab102e", "files": { diff --git a/ui/tests/zcode-bootstrap-resources.test.mjs b/ui/tests/zcode-bootstrap-resources.test.mjs new file mode 100644 index 0000000..363902b --- /dev/null +++ b/ui/tests/zcode-bootstrap-resources.test.mjs @@ -0,0 +1,43 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; +import { spawn } from 'node:child_process'; +import { createInterface } from 'node:readline'; +import { readFile } from 'node:fs/promises'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const ui = resolve(dirname(fileURLToPath(import.meta.url)), '..'); +const root = resolve(ui, '..'); +const name = JSON.parse(await readFile(join(root, 'plugin.json'), 'utf8')).name; + +test('ZCode 从实际 MCP 资源列表发现可后台保留的 WASM 面板', async () => { + const child = spawn(process.execPath, [join(ui, 'bootstrap.mjs')], { + cwd: root, + env: { ...process.env, ZCODE_PLUGIN_ROOT: root, ZCODE_PROJECT_DIR: root }, + stdio: ['pipe', 'pipe', 'pipe'], + }); + const pending = new Map(); + createInterface({ input: child.stdout }).on('line', line => { + const message = JSON.parse(line); + const waiter = pending.get(message.id); + if (waiter) { pending.delete(message.id); waiter(message); } + }); + const request = (id, method, params = {}) => new Promise((resolve, reject) => { + const timer = setTimeout(() => { pending.delete(id); reject(new Error(`${method} timed out`)); }, 10000); + pending.set(id, value => { clearTimeout(timer); resolve(value); }); + child.stdin.write(JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n'); + }); + try { + assert.ok((await request(1, 'initialize', { + protocolVersion: '2025-06-18', capabilities: {}, clientInfo: { name: 'zcode-resource-test', version: '1' }, + })).result); + const response = await request(2, 'resources/list'); + const panel = response.result.resources.find(resource => resource.uri === `ui://${name}/panel.html`); + assert.ok(panel, 'panel resource is discoverable'); + assert.equal(panel._meta?.ui?.backgroundRetention, true); + assert.equal(panel._meta?.['zcode/csp']?.wasmUnsafeEval, true); + } finally { + child.kill(); + await new Promise(resolve => child.once('exit', resolve)); + } +});