diff --git a/apps/daemon/src/plugins/apply.ts b/apps/daemon/src/plugins/apply.ts index 779e0192f..70beea24c 100644 --- a/apps/daemon/src/plugins/apply.ts +++ b/apps/daemon/src/plugins/apply.ts @@ -21,6 +21,7 @@ import { } from '@open-design/plugin-runtime'; import { renderPluginBlock, + resolveLocalizedText, type AppliedPluginSnapshot, type ApplyResult, type InstalledPluginRecord, @@ -64,6 +65,9 @@ export interface ApplyInput { // `od.context.designSystem.primary: true` without a concrete ref get // bound to this id at apply time. activeProjectDesignSystem?: { id: string; title?: string } | undefined; + // UI locale used to resolve localized manifest strings. Snapshots store + // the resolved string so historical runs never change when translations do. + locale?: string | undefined; // Sync probe over the connector catalog + status maps. When supplied, // apply resolves `od.connectors.*` against the live catalog and // auto-derives an `oauth-prompt` GenUI surface for any not-yet-connected @@ -154,9 +158,7 @@ export function applyPlugin(input: ApplyInput): ApplyComputed { projectMetadata.craftRequires = manifest.od!.context!.craft!.slice(); } - const queryText = typeof manifest.od?.useCase?.query === 'string' - ? manifest.od.useCase.query - : ''; + const queryText = resolveLocalizedText(manifest.od?.useCase?.query, input.locale); const appliedAt = Date.now(); const snapshot: AppliedPluginSnapshot = { @@ -258,10 +260,48 @@ function buildAssetRefs(manifest: PluginManifest): PluginAssetRef[] { return out; } +// Pick a global skill id from od.context.skills[]. Two ref shapes are +// accepted: +// +// - `{ ref: 'skill-id' }` — registry id; returned as-is. +// - `{ path: 'subdir/SKILL.md' }` — plugin-local file; returned as +// undefined so the project record never stores a non-existent skill +// id like 'SKILL.md'. Plugin-local SKILL.md bodies are sourced +// directly by the daemon at prompt-compose time from the installed +// plugin's fsPath (see server.ts) — they do NOT roam into the +// global skills registry. function pickFirstSkillId(manifest: PluginManifest): string | undefined { for (const ref of manifest.od?.context?.skills ?? []) { - const id = (ref?.ref ?? ref?.path ?? '').trim(); - if (id) return id.startsWith('./') ? id.slice(2) : id; + if (typeof ref?.ref === 'string' && ref.ref.trim().length > 0) { + return ref.ref.trim(); + } + const rawPath = typeof ref?.path === 'string' ? ref.path.trim() : ''; + if (!rawPath) continue; + if (isPluginLocalPath(rawPath)) continue; + return rawPath; + } + return undefined; +} + +function isPluginLocalPath(value: string): boolean { + return ( + value.startsWith('./') || + value.startsWith('../') || + value.includes('/') + ); +} + +// Return the first plugin-local skill ref path (relative to plugin +// fsPath), if any. Used by the daemon prompt composer to read a +// plugin's SKILL.md body without re-walking the manifest. Mirrors the +// detection inside `pickFirstSkillId` so the two stay in lockstep. +export function pickFirstLocalSkillPath(manifest: PluginManifest): string | undefined { + for (const ref of manifest.od?.context?.skills ?? []) { + if (typeof ref?.ref === 'string' && ref.ref.trim().length > 0) continue; + const rawPath = typeof ref?.path === 'string' ? ref.path.trim() : ''; + if (!rawPath) continue; + if (!isPluginLocalPath(rawPath)) continue; + return rawPath; } return undefined; } diff --git a/apps/daemon/src/plugins/local-skill.ts b/apps/daemon/src/plugins/local-skill.ts new file mode 100644 index 000000000..996db51f7 --- /dev/null +++ b/apps/daemon/src/plugins/local-skill.ts @@ -0,0 +1,75 @@ +// Plugin-local SKILL.md loader (Stage A of plugin-driven-flow-plan). +// +// Plugins that declare `od.context.skills[{ path: './SKILL.md' }]` ship +// their own skill body inside their plugin folder. Those files never +// register against the global skills registry, so the +// `composeSystemPrompt` skill slot would otherwise be empty. +// +// This module is the lone reader of plugin-local SKILL.md files. It +// stays separate from `apply.ts` because apply.ts is intentionally pure +// (no filesystem reads) — the daemon calls this loader during prompt +// composition, not during snapshot apply. +// +// The returned record mirrors the shape `composeDaemonSystemPrompt` +// already consumes for global skills (`body`, `name`, `dir`) so the +// override is a drop-in. + +import path from 'node:path'; +import { promises as fsp } from 'node:fs'; +import type { InstalledPluginRecord } from '@open-design/contracts'; +import { pickFirstLocalSkillPath } from './apply.js'; + +export interface PluginLocalSkill { + body: string; + name: string; + // Absolute directory containing the SKILL.md — used by + // `stageActiveSkill` to copy companion files into the project cwd. + dir: string; + // Relative path inside the plugin folder, kept for debugging / + // logging. Always normalised (no leading './'). + relpath: string; +} + +export async function loadPluginLocalSkill( + plugin: InstalledPluginRecord, +): Promise { + const manifest = plugin.manifest; + const relpath = pickFirstLocalSkillPath(manifest); + if (!relpath) return null; + const safeRel = stripLeadingDotSlash(relpath); + // Guard against path traversal — the manifest is trusted but we still + // refuse `..` escapes so a bad plugin author can't reach outside its + // own fsPath. + if (safeRel.split('/').some((segment) => segment === '..')) return null; + const abs = path.join(plugin.fsPath, safeRel); + let raw: string; + try { + raw = await fsp.readFile(abs, 'utf8'); + } catch { + return null; + } + const body = stripFrontmatter(raw).trim(); + if (!body) return null; + const name = (manifest.title ?? manifest.name ?? plugin.id).toString(); + return { + body, + name, + dir: path.dirname(abs), + relpath: safeRel, + }; +} + +function stripLeadingDotSlash(value: string): string { + return value.startsWith('./') ? value.slice(2) : value; +} + +// Mirrors the loader inside `atom-bodies.ts`. Kept duplicated here on +// purpose: atom-bodies is the lone reader for atom SKILL.md, and we do +// not want to grow a cross-file import surface for one regex. +function stripFrontmatter(raw: string): string { + if (!raw.startsWith('---')) return raw; + const closeIdx = raw.indexOf('\n---', 3); + if (closeIdx === -1) return raw; + const after = raw.slice(closeIdx + 4); + return after.replace(/^\r?\n/, ''); +} diff --git a/apps/daemon/src/plugins/resolve-snapshot.ts b/apps/daemon/src/plugins/resolve-snapshot.ts index 27040f80b..ebf123e20 100644 --- a/apps/daemon/src/plugins/resolve-snapshot.ts +++ b/apps/daemon/src/plugins/resolve-snapshot.ts @@ -128,7 +128,8 @@ function pickPluginFields(body: Record | null | undefined) { ? (body.grantCaps as unknown[]) .filter((c): c is string => typeof c === 'string') : []; - return { pluginId, snapshotId, pluginInputs, grantCaps }; + const locale = typeof body.locale === 'string' ? body.locale : undefined; + return { pluginId, snapshotId, pluginInputs, grantCaps, locale }; } export function resolvePluginSnapshot(input: ResolveSnapshotInput): ResolveSnapshotResult { @@ -213,6 +214,7 @@ export function resolvePluginSnapshot(input: ResolveSnapshotInput): ResolveSnaps registry: input.registry, activeProjectDesignSystem: input.activeProjectDesignSystem, connectorProbe: input.connectorProbe, + locale: fields.locale, }); } catch (err) { if (err instanceof MissingInputError) { diff --git a/apps/daemon/src/server.ts b/apps/daemon/src/server.ts index fff886019..a2f7a383c 100644 --- a/apps/daemon/src/server.ts +++ b/apps/daemon/src/server.ts @@ -2,6 +2,7 @@ import type { DesktopExportPdfInput, DesktopExportPdfResult } from '@open-design/sidecar-proto'; import express from 'express'; import multer from 'multer'; +import JSZip from 'jszip'; import { execFile, spawn } from 'node:child_process'; import { randomUUID } from 'node:crypto'; import { createRequire } from 'node:module'; @@ -10,6 +11,7 @@ import path from 'node:path'; import fs from 'node:fs'; import os from 'node:os'; import net from 'node:net'; +import { defaultScenarioPluginIdForKind } from '@open-design/contracts'; import { composeSystemPrompt, renderCodexImagegenOverride, @@ -1574,6 +1576,16 @@ const importUpload = multer({ limits: { fileSize: 100 * 1024 * 1024 }, }); +const PLUGIN_UPLOAD_MAX_BYTES = 50 * 1024 * 1024; +const pluginUpload = multer({ + storage: multer.memoryStorage(), + limits: { + fileSize: PLUGIN_UPLOAD_MAX_BYTES, + files: 500, + fieldSize: 2 * 1024 * 1024, + }, +}); + // Project-scoped multi-file upload. Lands files directly in the project // folder (flat — same shape FileWorkspace expects), so the composer's // pasted/dropped/picked images become referenceable filenames the agent @@ -2741,23 +2753,62 @@ export async function startServer({ // failures land on a 4xx here; the project is left in place because // it is already inserted (the snapshot resolver runs after — re- // applying via /api/plugins/:id/apply is the recovery path). + // + // Stage A of plugin-driven-flow-plan: when neither field is set + // we fall back to the bundled scenario plugin for the project's + // kind, so a "naked" Home query still binds a snapshot instead of + // dropping into the legacy plugin-less agent path. The fallback + // is best-effort — if the bundled scenario is not installed (for + // example a stripped-down packaged build) we silently skip and + // the project is created without a snapshot, matching the legacy + // behaviour. let projectAppliedSnapshot = null; - if (req.body && (req.body.pluginId || req.body.appliedPluginSnapshotId)) { + const explicitPlugin = + req.body && (req.body.pluginId || req.body.appliedPluginSnapshotId); + let resolveBody = req.body; + if (!explicitPlugin && metadata && typeof metadata === 'object') { + const fallbackPluginId = defaultScenarioPluginIdForKind(metadata.kind); + if (fallbackPluginId) { + const fallbackPlugin = getInstalledPlugin(db, fallbackPluginId); + if (fallbackPlugin) { + resolveBody = { ...req.body, pluginId: fallbackPluginId }; + } + } + } + if (resolveBody && (resolveBody.pluginId || resolveBody.appliedPluginSnapshotId)) { try { const registry = await loadPluginRegistryView(); const resolved = resolvePluginSnapshot({ db, - body: req.body, + body: resolveBody, projectId: id, conversationId: cid, registry, }); if (resolved && !resolved.ok) { - return res.status(resolved.status).json(resolved.body); + // Fallback bindings must never block project creation. The + // user did not explicitly request this plugin, so a + // capability / missing-input failure here means "skip the + // fallback and let the project exist without a snapshot", + // not "fail the whole create". + if (!explicitPlugin) { + console.warn( + `[plugins] default-scenario fallback skipped for project ${id}: ${resolved.body?.error?.code ?? 'unknown'}`, + ); + } else { + return res.status(resolved.status).json(resolved.body); + } + } else { + projectAppliedSnapshot = resolved; } - projectAppliedSnapshot = resolved; } catch (err) { - return sendApiError(res, 500, 'PLUGIN_APPLY_FAILED', String(err)); + if (!explicitPlugin) { + console.warn( + `[plugins] default-scenario fallback errored for project ${id}: ${err?.message ?? err}`, + ); + } else { + return sendApiError(res, 500, 'PLUGIN_APPLY_FAILED', String(err)); + } } } /** @type {import('@open-design/contracts').CreateProjectResponse} */ @@ -3450,6 +3501,157 @@ export async function startServer({ } }); + async function finishUploadedPluginInstall(stagedFolder, source) { + const warnings = []; + const log = []; + let plugin = null; + let message = 'Install finished.'; + try { + const pluginRoot = await findUploadedPluginRoot(stagedFolder); + for await (const ev of installFromLocalFolder(db, { + source, + _stagedFolder: pluginRoot, + _stagedSourceKind: 'user', + })) { + if (ev.message) log.push(ev.message); + if (Array.isArray(ev.warnings)) warnings.splice(0, warnings.length, ...ev.warnings); + if (ev.kind === 'success') { + plugin = ev.plugin; + message = `Installed ${ev.plugin.title}.`; + break; + } + if (ev.kind === 'error') { + message = ev.message; + break; + } + } + return { ok: Boolean(plugin), plugin, warnings, message, log }; + } finally { + await fs.promises.rm(stagedFolder, { recursive: true, force: true }).catch(() => undefined); + } + } + + async function findUploadedPluginRoot(stagedFolder) { + if (await folderLooksLikePlugin(stagedFolder)) return stagedFolder; + const entries = await fs.promises.readdir(stagedFolder, { withFileTypes: true }); + const dirs = entries.filter((entry) => entry.isDirectory()); + const files = entries.filter((entry) => entry.isFile()); + if (files.length === 0 && dirs.length === 1) { + const nested = path.join(stagedFolder, dirs[0].name); + if (await folderLooksLikePlugin(nested)) return nested; + } + return stagedFolder; + } + + async function folderLooksLikePlugin(folder) { + const names = ['open-design.json', 'SKILL.md', path.join('.claude-plugin', 'plugin.json')]; + for (const name of names) { + if (fs.existsSync(path.join(folder, name))) return true; + } + return false; + } + + function safeUploadRelativePath(input) { + const value = String(input || '').replace(/\\/g, '/'); + if (!value || value.includes('\0') || value.startsWith('/') || /^[A-Za-z]:\//.test(value)) { + throw new Error('invalid upload path'); + } + const parts = value.split('/').filter(Boolean); + if (parts.length === 0 || parts.some((part) => part === '.' || part === '..')) { + throw new Error(`unsafe upload path: ${value}`); + } + return parts.join(path.sep); + } + + async function extractPluginZipToFolder(buffer, stagedFolder) { + if (buffer.length > PLUGIN_UPLOAD_MAX_BYTES) { + throw new Error('zip file too large'); + } + const zip = await JSZip.loadAsync(buffer); + let totalBytes = 0; + const entries = Object.values(zip.files); + if (entries.length === 0) throw new Error('zip contains no files'); + for (const entry of entries) { + if (entry.dir) continue; + const rel = safeUploadRelativePath(entry.name); + const unixMode = typeof entry.unixPermissions === 'number' ? entry.unixPermissions : 0; + if ((unixMode & 0o170000) === 0o120000) { + throw new Error(`zip entry is a symbolic link: ${entry.name}`); + } + const content = await entry.async('nodebuffer'); + totalBytes += content.length; + if (totalBytes > PLUGIN_UPLOAD_MAX_BYTES) { + throw new Error('zip extracted size exceeds 50 MiB'); + } + const dest = path.join(stagedFolder, rel); + await fs.promises.mkdir(path.dirname(dest), { recursive: true }); + await fs.promises.writeFile(dest, content); + } + } + + app.post('/api/plugins/upload-zip', (req, res) => { + pluginUpload.single('file')(req, res, async (err) => { + if (err) return sendMulterError(res, err); + try { + const file = req.file; + if (!file || !file.buffer) { + return res.status(400).json({ error: 'file is required' }); + } + const stagedFolder = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'od-plugin-zip-')); + await extractPluginZipToFolder(file.buffer, stagedFolder); + const result = await finishUploadedPluginInstall( + stagedFolder, + `upload:zip:${decodeMultipartFilename(file.originalname || 'plugin.zip')}`, + ); + res.status(result.ok ? 200 : 400).json(result); + } catch (uploadErr) { + res.status(400).json({ + ok: false, + warnings: [], + message: String(uploadErr?.message || uploadErr), + log: [], + }); + } + }); + }); + + app.post('/api/plugins/upload-folder', (req, res) => { + pluginUpload.array('files', 500)(req, res, async (err) => { + if (err) return sendMulterError(res, err); + const stagedFolder = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'od-plugin-folder-')); + try { + const files = Array.isArray(req.files) ? req.files : []; + if (files.length === 0) { + return res.status(400).json({ error: 'files are required' }); + } + const rawPaths = req.body?.paths; + const paths = Array.isArray(rawPaths) ? rawPaths : rawPaths ? [rawPaths] : []; + let totalBytes = 0; + for (let i = 0; i < files.length; i += 1) { + const file = files[i]; + totalBytes += file.buffer.length; + if (totalBytes > PLUGIN_UPLOAD_MAX_BYTES) { + throw new Error('folder upload exceeds 50 MiB'); + } + const rel = safeUploadRelativePath(paths[i] || file.originalname); + const dest = path.join(stagedFolder, rel); + await fs.promises.mkdir(path.dirname(dest), { recursive: true }); + await fs.promises.writeFile(dest, file.buffer); + } + const result = await finishUploadedPluginInstall(stagedFolder, 'upload:folder'); + res.status(result.ok ? 200 : 400).json(result); + } catch (uploadErr) { + await fs.promises.rm(stagedFolder, { recursive: true, force: true }).catch(() => undefined); + res.status(400).json({ + ok: false, + warnings: [], + message: String(uploadErr?.message || uploadErr), + log: [], + }); + } + }); + }); + app.post('/api/plugins/install', async (req, res) => { const body = req.body && typeof req.body === 'object' ? req.body : {}; let source = typeof body.source === 'string' ? body.source : ''; @@ -3642,9 +3844,10 @@ export async function startServer({ const grantCaps = Array.isArray(body.grantCaps) ? body.grantCaps.filter((c) => typeof c === 'string') : []; + const locale = typeof body.locale === 'string' ? body.locale : undefined; const registry = await loadPluginRegistryView(); - const computed = applyPlugin({ plugin, inputs, registry }); + const computed = applyPlugin({ plugin, inputs, registry, locale }); // Plan §3.B2 — apply-time grants are merged into the snapshot's // capabilitiesGranted so the §9 capability gate sees them, but // they are NOT written back to installed_plugins.capabilities_granted. @@ -6237,6 +6440,37 @@ export async function startServer({ } } + // Stage A of plugin-driven-flow-plan: when the run is bound to a + // plugin snapshot, prefer the plugin's local SKILL.md (declared via + // `od.context.skills[{ path: './SKILL.md' }]`) over the global + // skill. Without this override the agent loses the plugin's + // template / token / layout rules and falls back to generic prompt + // behaviour even though the user explicitly applied the plugin. + if ( + typeof appliedPluginSnapshotId === 'string' + && appliedPluginSnapshotId.length > 0 + ) { + try { + const snap = getSnapshot(db, appliedPluginSnapshotId); + if (snap?.pluginId) { + const plugin = getInstalledPlugin(db, snap.pluginId); + if (plugin) { + const { loadPluginLocalSkill } = await import('./plugins/local-skill.js'); + const local = await loadPluginLocalSkill(plugin); + if (local) { + skillBody = local.body; + skillName = local.name; + activeSkillDir = local.dir; + } + } + } + } catch (err) { + console.warn( + `[plugins] pluginSkillBody load failed: ${err?.message ?? err}`, + ); + } + } + let craftBody; let craftSections; if (skillCraftRequires.length > 0) { @@ -7579,6 +7813,14 @@ export async function startServer({ // for missing-input / capability / not-found / stale, or an ok result // whose `snapshotId` is pinned onto the run object so downstream // code (system prompt block, tool tokens, replay) can reach it. + // + // Stage A of plugin-driven-flow-plan: when neither the body nor the + // project carries plugin info we fall back to the bundled scenario + // plugin for the project's `metadata.kind` so direct callers (CLI / + // SDK / agent-headless runs) get the same auto-binding the web + // create flow already produces. The fallback is silent — a bundled + // scenario that is not installed leaves the run plugin-less, which + // matches the legacy path. let resolvedSnapshot = null; if (typeof req.body?.projectId === 'string' && req.body.projectId) { let registryView; @@ -7587,9 +7829,26 @@ export async function startServer({ } catch (err) { return res.status(500).json({ error: String(err) }); } + const explicitPlugin = + req.body && (req.body.pluginId || req.body.appliedPluginSnapshotId); + let runResolveBody = req.body; + if (!explicitPlugin) { + const projectRow = getProject(db, req.body.projectId); + const hasPin = + typeof projectRow?.appliedPluginSnapshotId === 'string' + && projectRow.appliedPluginSnapshotId.length > 0; + if (!hasPin) { + const fallbackPluginId = defaultScenarioPluginIdForKind( + projectRow?.metadata?.kind, + ); + if (fallbackPluginId && getInstalledPlugin(db, fallbackPluginId)) { + runResolveBody = { ...req.body, pluginId: fallbackPluginId }; + } + } + } const resolved = resolvePluginSnapshot({ db, - body: req.body, + body: runResolveBody, projectId: req.body.projectId, conversationId: typeof req.body.conversationId === 'string' ? req.body.conversationId @@ -7597,9 +7856,16 @@ export async function startServer({ registry: registryView, }); if (resolved && !resolved.ok) { - return res.status(resolved.status).json(resolved.body); + if (!explicitPlugin) { + console.warn( + `[plugins] default-scenario fallback skipped for run on project ${req.body.projectId}: ${resolved.body?.error?.code ?? 'unknown'}`, + ); + } else { + return res.status(resolved.status).json(resolved.body); + } + } else { + resolvedSnapshot = resolved; } - resolvedSnapshot = resolved; } const meta = { ...(req.body || {}) }; if (resolvedSnapshot?.ok) { diff --git a/apps/daemon/tests/plugins-apply.test.ts b/apps/daemon/tests/plugins-apply.test.ts index 38fb41e58..3c320ef82 100644 --- a/apps/daemon/tests/plugins-apply.test.ts +++ b/apps/daemon/tests/plugins-apply.test.ts @@ -75,6 +75,33 @@ describe('applyPlugin', () => { expect(result.result.appliedPlugin.inputs.audience).toBe('general'); }); + it('resolves localized use-case queries at apply time', () => { + const base = pluginFixture(); + const result = applyPlugin({ + plugin: { + ...base, + manifest: { + ...base.manifest, + od: { + ...base.manifest.od, + useCase: { + query: { + en: 'Generate a {{topic}} brief.', + 'zh-CN': '生成一份关于 {{topic}} 的简报。', + }, + }, + }, + }, + }, + inputs: { topic: 'design' }, + registry: REGISTRY, + locale: 'zh-CN', + }); + + expect(result.result.query).toBe('生成一份关于 {{topic}} 的简报。'); + expect(result.result.appliedPlugin.query).toBe('生成一份关于 {{topic}} 的简报。'); + }); + it('grants trusted defaults plus required caps for a trusted plugin', () => { const result = applyPlugin({ plugin: pluginFixture(), inputs: { topic: 'design' }, registry: REGISTRY }); for (const cap of TRUSTED_DEFAULT_CAPABILITIES) { diff --git a/apps/daemon/tests/plugins-local-skill.test.ts b/apps/daemon/tests/plugins-local-skill.test.ts new file mode 100644 index 000000000..c2afdd09f --- /dev/null +++ b/apps/daemon/tests/plugins-local-skill.test.ts @@ -0,0 +1,165 @@ +// Stage A of plugin-driven-flow-plan — plugin-local SKILL.md flow. +// +// Covers: +// - `pickFirstSkillId` returns undefined for local `./SKILL.md` refs +// (so the project record never stores a phantom skill id). +// - `pickFirstLocalSkillPath` exposes the local path for the daemon's +// prompt composer to read on demand. +// - `loadPluginLocalSkill` reads the file, strips frontmatter and +// produces the `{ body, name, dir }` shape the composer drops into +// the `## Active skill` slot. + +import { describe, expect, it } from 'vitest'; +import { mkdtemp, mkdir, rm, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import os from 'node:os'; + +import { + applyPlugin, + pickFirstLocalSkillPath, +} from '../src/plugins/apply.js'; +import { loadPluginLocalSkill } from '../src/plugins/local-skill.js'; +import type { InstalledPluginRecord, PluginManifest } from '@open-design/contracts'; + +function manifestWithSkills(skills: Array<{ ref?: string; path?: string }>): PluginManifest { + return { + name: 'fixture-plugin', + title: 'Fixture Plugin', + version: '0.1.0', + description: 'Stage A test fixture.', + od: { + kind: 'scenario', + taskKind: 'new-generation', + useCase: { query: 'Generate a {{topic}} brief.' }, + inputs: [{ name: 'topic', type: 'string', required: false, default: 'design' }], + context: { skills }, + capabilities: ['prompt:inject'], + }, + }; +} + +function pluginRecord(fsPath: string, manifest: PluginManifest): InstalledPluginRecord { + return { + id: 'fixture-plugin', + title: 'Fixture Plugin', + version: '0.1.0', + sourceKind: 'local', + source: fsPath, + sourceMarketplaceId: undefined, + pinnedRef: undefined, + sourceDigest: undefined, + trust: 'trusted', + capabilitiesGranted: ['prompt:inject'], + fsPath, + installedAt: 0, + updatedAt: 0, + manifest, + }; +} + +const REGISTRY = { + skills: [{ id: 'sample-skill', title: 'Sample Skill' }], + designSystems: [], + craft: [], + atoms: [], +}; + +describe('plugin-local SKILL.md ref detection', () => { + it('pickFirstLocalSkillPath returns the relative path for `./SKILL.md`', () => { + const manifest = manifestWithSkills([{ path: './SKILL.md' }]); + expect(pickFirstLocalSkillPath(manifest)).toBe('./SKILL.md'); + }); + + it('pickFirstLocalSkillPath ignores `ref` entries (those are global skill ids)', () => { + const manifest = manifestWithSkills([{ ref: 'sample-skill' }]); + expect(pickFirstLocalSkillPath(manifest)).toBeUndefined(); + }); + + it('apply does not leak `./SKILL.md` into projectMetadata.skillId', () => { + const manifest = manifestWithSkills([{ path: './SKILL.md' }]); + const computed = applyPlugin({ + plugin: pluginRecord('/tmp/does-not-need-to-exist', manifest), + inputs: { topic: 'design' }, + registry: REGISTRY, + }); + // A local skill ref is plugin-private and must never set the + // project's skill id; otherwise `findSkillById` later returns null + // and the active-skill block silently drops out. + expect(computed.result.projectMetadata.skillId).toBeUndefined(); + }); + + it('apply keeps the global `ref` skill id flowing through to projectMetadata', () => { + const manifest = manifestWithSkills([{ ref: 'sample-skill' }]); + const computed = applyPlugin({ + plugin: pluginRecord('/tmp/does-not-need-to-exist', manifest), + inputs: { topic: 'design' }, + registry: REGISTRY, + }); + expect(computed.result.projectMetadata.skillId).toBe('sample-skill'); + }); +}); + +describe('loadPluginLocalSkill', () => { + it('reads SKILL.md, strips frontmatter, and returns body/name/dir', async () => { + const dir = await mkdtemp(path.join(os.tmpdir(), 'od-plugin-local-skill-')); + try { + const skillPath = path.join(dir, 'SKILL.md'); + await writeFile( + skillPath, + ['---', 'name: fixture-plugin', 'mode: deck', '---', '', '# Body header', '', 'Body line.'].join('\n'), + 'utf8', + ); + const manifest = manifestWithSkills([{ path: './SKILL.md' }]); + const local = await loadPluginLocalSkill(pluginRecord(dir, manifest)); + expect(local).not.toBeNull(); + expect(local!.body.startsWith('# Body header')).toBe(true); + expect(local!.body).toContain('Body line.'); + expect(local!.name).toBe('Fixture Plugin'); + expect(local!.dir).toBe(dir); + expect(local!.relpath).toBe('SKILL.md'); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); + + it('returns null when the manifest has no local skill ref', async () => { + const dir = await mkdtemp(path.join(os.tmpdir(), 'od-plugin-local-skill-')); + try { + const manifest = manifestWithSkills([{ ref: 'sample-skill' }]); + const local = await loadPluginLocalSkill(pluginRecord(dir, manifest)); + expect(local).toBeNull(); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); + + it('returns null when the referenced file is missing', async () => { + const dir = await mkdtemp(path.join(os.tmpdir(), 'od-plugin-local-skill-')); + try { + const manifest = manifestWithSkills([{ path: './SKILL.md' }]); + const local = await loadPluginLocalSkill(pluginRecord(dir, manifest)); + expect(local).toBeNull(); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); + + it('refuses `..` path traversal in the ref', async () => { + const dir = await mkdtemp(path.join(os.tmpdir(), 'od-plugin-local-skill-')); + try { + // Create a SKILL.md outside the plugin folder and try to point at it. + const escapeRoot = await mkdtemp(path.join(os.tmpdir(), 'od-plugin-escape-')); + await writeFile(path.join(escapeRoot, 'SKILL.md'), '# bad', 'utf8'); + const pluginDir = path.join(dir, 'plugin'); + await mkdir(pluginDir, { recursive: true }); + const manifest = manifestWithSkills([ + { path: '../SKILL.md' }, + ]); + const local = await loadPluginLocalSkill(pluginRecord(pluginDir, manifest)); + expect(local).toBeNull(); + await rm(escapeRoot, { recursive: true, force: true }); + } finally { + await rm(dir, { recursive: true, force: true }); + } + }); +}); diff --git a/apps/web/src/components/EntryNavRail.tsx b/apps/web/src/components/EntryNavRail.tsx index cb8beae5a..b63ccd18b 100644 --- a/apps/web/src/components/EntryNavRail.tsx +++ b/apps/web/src/components/EntryNavRail.tsx @@ -2,7 +2,7 @@ // // Renders a narrow icon-only column. The first slot is the brand // logo (clicking navigates to home), followed by primary -// actions (new project, home, projects, tasks, design systems, integrations). A small +// actions (new project, home, projects, tasks, plugins, design systems, integrations). A small // help launcher sits at the bottom and opens a popover with the // canonical "ask for help / submit a feature / what's new / download // desktop" external links. Language switching and other account- @@ -14,7 +14,13 @@ import { EntryHelpMenu } from './EntryHelpMenu'; import { Icon } from './Icon'; import { useT } from '../i18n'; -export type EntryView = 'home' | 'projects' | 'tasks' | 'design-systems' | 'integrations'; +export type EntryView = + | 'home' + | 'projects' + | 'tasks' + | 'plugins' + | 'design-systems' + | 'integrations'; interface Props { view: EntryView; @@ -104,6 +110,15 @@ export function EntryNavRail({ view, onViewChange, onNewProject }: Props) { > + onViewChange('plugins')} + testId="entry-nav-plugins" + > + + = { - prototype: 'od-new-generation', - deck: 'od-new-generation', - template: 'od-new-generation', - image: 'od-new-generation', - video: 'od-new-generation', - audio: 'od-new-generation', - other: 'od-new-generation', -}; - +// Default scenario plugin for each project kind. The mapping lives in +// `@open-design/contracts` so the daemon's `/api/projects` and +// `/api/runs` fallbacks resolve to the same plugin id when no +// `pluginId` is on the request body — plan §3.3 of +// `specs/current/plugin-driven-flow-plan.md`. function defaultPluginIdForKind(metadata: ProjectMetadata): string | null { - return DEFAULT_SCENARIO_PLUGIN_BY_KIND[metadata.kind] ?? null; + return defaultScenarioPluginIdForKind(metadata.kind); } // Theme options exposed in the avatar-popover appearance submenu. @@ -635,6 +627,7 @@ export function EntryShell({ onOpenOrbitSettings={() => onOpenSettings('orbit')} /> ) : null} + {view === 'plugins' ? : null} {view === 'design-systems' ? ( designSystemsLoading ? ( diff --git a/apps/web/src/components/HomeHero.tsx b/apps/web/src/components/HomeHero.tsx index b93b6e9aa..28999de3d 100644 --- a/apps/web/src/components/HomeHero.tsx +++ b/apps/web/src/components/HomeHero.tsx @@ -7,7 +7,8 @@ // composed with the recent-projects strip and plugins section // without owning their data lifecycles. -import { forwardRef } from 'react'; +import { forwardRef, useMemo, useState } from 'react'; +import type { InstalledPluginRecord } from '@open-design/contracts'; import { Icon } from './Icon'; export interface HomeHeroSubmitHandler { @@ -20,6 +21,10 @@ interface Props { onSubmit: HomeHeroSubmitHandler; activePluginTitle: string | null; onClearActivePlugin: () => void; + pluginOptions: InstalledPluginRecord[]; + pluginsLoading: boolean; + pendingPluginId: string | null; + onPickPlugin: (record: InstalledPluginRecord, nextPrompt: string | null) => void; contextItemCount: number; error: string | null; } @@ -31,15 +36,45 @@ export const HomeHero = forwardRef(function HomeHero onSubmit, activePluginTitle, onClearActivePlugin, + pluginOptions, + pluginsLoading, + pendingPluginId, + onPickPlugin, contextItemCount, error, }, ref, ) { + const [selectedIndex, setSelectedIndex] = useState(0); const canSubmit = prompt.trim().length > 0; const placeholder = activePluginTitle ? 'Edit the example query or write your own…' - : 'What do you want to design? Type a prompt, or pick a plugin below…'; + : 'What do you want to design? Type a prompt, @search a plugin, or pick one below…'; + const mention = getPluginMention(prompt); + const pickerOptions = useMemo(() => { + if (!mention) return []; + const q = mention.query.toLowerCase(); + return pluginOptions + .filter((plugin) => { + if (!q) return true; + return [ + plugin.title, + plugin.id, + plugin.manifest?.description ?? '', + ...(plugin.manifest?.tags ?? []), + ] + .join(' ') + .toLowerCase() + .includes(q); + }) + .slice(0, 6); + }, [mention, pluginOptions]); + const pickerOpen = Boolean(mention) && (pluginsLoading || pickerOptions.length > 0); + + function pickPlugin(record: InstalledPluginRecord) { + const nextPrompt = mention ? replaceMentionToken(prompt, mention) : null; + onPickPlugin(record, nextPrompt); + } return (
@@ -83,8 +118,29 @@ export const HomeHero = forwardRef(function HomeHero className="home-hero__input" data-testid="home-hero-input" value={prompt} - onChange={(e) => onPromptChange(e.target.value)} + onChange={(e) => { + onPromptChange(e.target.value); + setSelectedIndex(0); + }} onKeyDown={(e) => { + if (pickerOpen && pickerOptions.length > 0) { + if (e.key === 'ArrowDown') { + e.preventDefault(); + setSelectedIndex((idx) => (idx + 1) % pickerOptions.length); + return; + } + if (e.key === 'ArrowUp') { + e.preventDefault(); + setSelectedIndex((idx) => (idx - 1 + pickerOptions.length) % pickerOptions.length); + return; + } + if (e.key === 'Tab') { + e.preventDefault(); + const selected = pickerOptions[selectedIndex] ?? pickerOptions[0]; + if (selected) pickPlugin(selected); + return; + } + } if ( e.key === 'Enter' && !e.shiftKey && @@ -93,12 +149,56 @@ export const HomeHero = forwardRef(function HomeHero !e.altKey ) { e.preventDefault(); + if (pickerOpen && pickerOptions.length > 0) { + const selected = pickerOptions[selectedIndex] ?? pickerOptions[0]; + if (selected) pickPlugin(selected); + return; + } if (canSubmit) onSubmit(); } }} placeholder={placeholder} rows={3} + aria-controls={pickerOpen ? 'home-hero-plugin-picker' : undefined} + aria-expanded={pickerOpen} /> + {pickerOpen ? ( +
+ {pluginsLoading ? ( +
Loading plugins…
+ ) : ( + pickerOptions.map((plugin, idx) => ( + + )) + )} +
+ ) : null}
to run · Shift+ for new line @@ -125,3 +225,31 @@ export const HomeHero = forwardRef(function HomeHero
); }); + +interface PluginMention { + start: number; + end: number; + query: string; +} + +function getPluginMention(value: string): PluginMention | null { + const start = value.lastIndexOf('@'); + if (start < 0) return null; + const before = value[start - 1]; + if (before && !/\s/.test(before)) return null; + const tail = value.slice(start + 1); + const match = /^[^\s@]*/.exec(tail); + if (!match) return null; + return { + start, + end: start + 1 + match[0].length, + query: match[0], + }; +} + +function replaceMentionToken(value: string, mention: PluginMention): string | null { + const before = value.slice(0, mention.start).trimEnd(); + const after = value.slice(mention.end).trimStart(); + const next = [before, after].filter(Boolean).join(' ').trim(); + return next.length > 0 ? next : null; +} diff --git a/apps/web/src/components/HomeView.tsx b/apps/web/src/components/HomeView.tsx index ea69ac976..65c4e9d94 100644 --- a/apps/web/src/components/HomeView.tsx +++ b/apps/web/src/components/HomeView.tsx @@ -8,15 +8,17 @@ // textarea can live centered in the hero. import { useEffect, useMemo, useRef, useState } from 'react'; -import type { - ApplyResult, - InstalledPluginRecord, +import { + resolveLocalizedText, + type ApplyResult, + type InstalledPluginRecord, } from '@open-design/contracts'; import { applyPlugin, listPlugins, renderPluginBriefTemplate, } from '../state/projects'; +import { useI18n } from '../i18n'; import type { Project } from '../types'; import { HomeHero } from './HomeHero'; import { PluginDetailsModal } from './PluginDetailsModal'; @@ -45,6 +47,7 @@ export function HomeView({ onOpenProject, onViewAllProjects, }: Props) { + const { locale } = useI18n(); const [plugins, setPlugins] = useState([]); const [pluginsLoading, setPluginsLoading] = useState(true); const [pendingApplyId, setPendingApplyId] = useState(null); @@ -71,10 +74,10 @@ export function HomeView({ [active], ); - async function usePlugin(record: InstalledPluginRecord) { + async function usePlugin(record: InstalledPluginRecord, nextPrompt?: string | null) { setPendingApplyId(record.id); setError(null); - const result = await applyPlugin(record.id, {}); + const result = await applyPlugin(record.id, { locale }); setPendingApplyId(null); if (!result) { setError(`Failed to apply ${record.title}. Make sure the daemon is reachable.`); @@ -85,8 +88,10 @@ export function HomeView({ if (field.default !== undefined) inputs[field.name] = field.default; } setActive({ record, result, inputs }); - const query = result.query ?? record.manifest?.od?.useCase?.query ?? ''; - if (query) { + const query = result.query || resolveLocalizedText(record.manifest?.od?.useCase?.query, locale); + if (nextPrompt !== undefined && nextPrompt !== null) { + setPrompt(nextPrompt); + } else if (query) { setPrompt(renderPluginBriefTemplate(query, inputs)); } setDetailsRecord(null); @@ -119,6 +124,10 @@ export function HomeView({ onSubmit={submit} activePluginTitle={active?.record.title ?? null} onClearActivePlugin={clearActive} + pluginOptions={plugins} + pluginsLoading={pluginsLoading} + pendingPluginId={pendingApplyId} + onPickPlugin={(record, nextPrompt) => void usePlugin(record, nextPrompt)} contextItemCount={contextItemCount} error={error} /> diff --git a/apps/web/src/components/InlinePluginsRail.tsx b/apps/web/src/components/InlinePluginsRail.tsx index baa0c0a3d..79e2398f6 100644 --- a/apps/web/src/components/InlinePluginsRail.tsx +++ b/apps/web/src/components/InlinePluginsRail.tsx @@ -12,6 +12,7 @@ import type { InstalledPluginRecord, } from '@open-design/contracts'; import { applyPlugin, listPlugins } from '../state/projects'; +import { useI18n } from '../i18n'; interface Props { // Active project the apply will be scoped to. Omit on Home (the @@ -43,6 +44,7 @@ interface Props { } export function InlinePluginsRail(props: Props) { + const { locale } = useI18n(); const [plugins, setPlugins] = useState([]); const [pendingId, setPendingId] = useState(null); const [error, setError] = useState(null); @@ -68,6 +70,7 @@ export function InlinePluginsRail(props: Props) { setError(null); const result = await applyPlugin(record.id, { ...(props.projectId ? { projectId: props.projectId } : {}), + locale, }); setPendingId(null); if (!result) { diff --git a/apps/web/src/components/PluginDetailView.tsx b/apps/web/src/components/PluginDetailView.tsx index c937bcaa1..b9845346f 100644 --- a/apps/web/src/components/PluginDetailView.tsx +++ b/apps/web/src/components/PluginDetailView.tsx @@ -11,12 +11,14 @@ import { useEffect, useState } from 'react'; import type { ApplyResult, InstalledPluginRecord } from '@open-design/contracts'; import { applyPlugin } from '../state/projects'; import { navigate } from '../router'; +import { useI18n } from '../i18n'; interface Props { pluginId: string; } export function PluginDetailView(props: Props) { + const { locale } = useI18n(); const [plugin, setPlugin] = useState(null); const [error, setError] = useState(null); const [applying, setApplying] = useState(false); @@ -80,7 +82,7 @@ export function PluginDetailView(props: Props) { const onUse = async () => { setApplying(true); setError(null); - const result = await applyPlugin(plugin.id); + const result = await applyPlugin(plugin.id, { locale }); setApplying(false); if (!result) { setError('Apply failed. Make sure the daemon is reachable.'); diff --git a/apps/web/src/components/PluginLoopHome.tsx b/apps/web/src/components/PluginLoopHome.tsx index fb26a2821..050e6ae38 100644 --- a/apps/web/src/components/PluginLoopHome.tsx +++ b/apps/web/src/components/PluginLoopHome.tsx @@ -1,13 +1,15 @@ import { useEffect, useMemo, useRef, useState } from 'react'; -import type { - ApplyResult, - InstalledPluginRecord, +import { + resolveLocalizedText, + type ApplyResult, + type InstalledPluginRecord, } from '@open-design/contracts'; import { applyPlugin, listPlugins, renderPluginBriefTemplate, } from '../state/projects'; +import { useI18n } from '../i18n'; import { Icon } from './Icon'; import { PluginDetailsModal } from './PluginDetailsModal'; import { authorInitials, derivePluginSourceLinks } from '../runtime/plugin-source'; @@ -31,6 +33,7 @@ interface ActivePlugin { } export function PluginLoopHome({ onSubmit }: Props) { + const { locale } = useI18n(); const [plugins, setPlugins] = useState([]); const [loading, setLoading] = useState(true); const [pendingApplyId, setPendingApplyId] = useState(null); @@ -68,7 +71,7 @@ export function PluginLoopHome({ onSubmit }: Props) { async function usePlugin(record: InstalledPluginRecord) { setPendingApplyId(record.id); setError(null); - const result = await applyPlugin(record.id, {}); + const result = await applyPlugin(record.id, { locale }); setPendingApplyId(null); if (!result) { setError(`Failed to apply ${record.title}. Make sure the daemon is reachable.`); @@ -79,7 +82,7 @@ export function PluginLoopHome({ onSubmit }: Props) { if (field.default !== undefined) inputs[field.name] = field.default; } setActive({ record, result, inputs }); - const query = result.query ?? record.manifest?.od?.useCase?.query ?? ''; + const query = result.query || resolveLocalizedText(record.manifest?.od?.useCase?.query, locale); if (query) { setPrompt(renderPluginBriefTemplate(query, inputs)); } diff --git a/apps/web/src/components/PluginsHomeSection.tsx b/apps/web/src/components/PluginsHomeSection.tsx index b1cece695..d414a65b8 100644 --- a/apps/web/src/components/PluginsHomeSection.tsx +++ b/apps/web/src/components/PluginsHomeSection.tsx @@ -32,6 +32,9 @@ interface Props { pendingApplyId: string | null; onUse: (record: InstalledPluginRecord) => void; onOpenDetails: (record: InstalledPluginRecord) => void; + title?: string; + subtitle?: string; + emptyMessage?: string; } export function PluginsHomeSection({ @@ -41,6 +44,9 @@ export function PluginsHomeSection({ pendingApplyId, onUse, onOpenDetails, + title = 'Community', + subtitle = 'Things you can do and tasks to complete — packaged as plugins. Pick one to load a starter prompt, or type freely above.', + emptyMessage = 'Catalog is empty. Bundled plugins ship with Open Design and should appear here automatically — try restarting the daemon if this persists.', }: Props) { const { visiblePlugins, @@ -62,9 +68,9 @@ export function PluginsHomeSection({
-

Community

+

{title}

- Things you can do and tasks to complete — packaged as plugins. Pick one to load a starter prompt, or type freely above. + {subtitle}

@@ -79,8 +85,7 @@ export function PluginsHomeSection({
Loading catalog…
) : visiblePlugins.length === 0 ? (
- Catalog is empty. Bundled plugins ship with Open Design and should appear - here automatically — try restarting the daemon if this persists. + {emptyMessage}
) : ( <> diff --git a/apps/web/src/components/PluginsSection.tsx b/apps/web/src/components/PluginsSection.tsx index cb70f5592..c332a5af9 100644 --- a/apps/web/src/components/PluginsSection.tsx +++ b/apps/web/src/components/PluginsSection.tsx @@ -39,6 +39,7 @@ import { applyPlugin, renderPluginBriefTemplate, } from '../state/projects'; +import { useI18n } from '../i18n'; import { ContextChipStrip } from './ContextChipStrip'; import { InlinePluginsRail } from './InlinePluginsRail'; import { PluginInputsForm } from './PluginInputsForm'; @@ -91,6 +92,7 @@ export interface PluginsSectionHandle { export const PluginsSection = forwardRef( function PluginsSection(props, ref) { + const { locale } = useI18n(); const [applied, setApplied] = useState(null); const [activeRecord, setActiveRecord] = useState(null); const [pluginInputs, setPluginInputs] = useState>({}); @@ -141,6 +143,7 @@ export const PluginsSection = forwardRef( applyById: async (pluginId, record = null) => { const result = await applyPlugin(pluginId, { ...(props.projectId ? { projectId: props.projectId } : {}), + locale, }); if (!result) return null; handleApplied(record, result); @@ -149,7 +152,7 @@ export const PluginsSection = forwardRef( clear, getActiveRecord: () => activeRecord, }), - [props.projectId, handleApplied, clear, activeRecord], + [props.projectId, locale, handleApplied, clear, activeRecord], ); const showRail = props.showRail ?? true; diff --git a/apps/web/src/components/PluginsView.tsx b/apps/web/src/components/PluginsView.tsx new file mode 100644 index 000000000..b313542f8 --- /dev/null +++ b/apps/web/src/components/PluginsView.tsx @@ -0,0 +1,407 @@ +import { useEffect, useMemo, useState } from 'react'; +import type { ApplyResult, InstalledPluginRecord, PluginSourceKind } from '@open-design/contracts'; +import { + applyPlugin, + installPluginSource, + listPluginMarketplaces, + listPlugins, + type PluginInstallOutcome, + type PluginMarketplace, +} from '../state/projects'; +import { Icon } from './Icon'; +import { PluginDetailsModal } from './PluginDetailsModal'; +import { PluginsHomeSection } from './PluginsHomeSection'; +import { useI18n } from '../i18n'; + +type PluginsTab = 'community' | 'mine' | 'marketplaces' | 'team'; + +const USER_SOURCE_KINDS = new Set([ + 'user', + 'project', + 'marketplace', + 'github', + 'url', + 'local', +]); + +const PLUGINS_TABS: ReadonlyArray<{ + id: PluginsTab; + label: string; + hint: string; +}> = [ + { id: 'community', label: 'Community', hint: 'Official catalog' }, + { id: 'mine', label: 'My plugins', hint: 'User-installed' }, + { id: 'marketplaces', label: 'Marketplaces', hint: 'Catalog sources' }, + { id: 'team', label: 'Team / Enterprise', hint: 'Coming soon' }, +]; + +export function PluginsView() { + const { locale } = useI18n(); + const [plugins, setPlugins] = useState([]); + const [marketplaces, setMarketplaces] = useState([]); + const [loading, setLoading] = useState(true); + const [activeTab, setActiveTab] = useState('community'); + const [source, setSource] = useState(''); + const [importOpen, setImportOpen] = useState(false); + const [installing, setInstalling] = useState(false); + const [pendingApplyId, setPendingApplyId] = useState(null); + const [activePlugin, setActivePlugin] = useState<{ + record: InstalledPluginRecord; + result: ApplyResult; + } | null>(null); + const [detailsRecord, setDetailsRecord] = useState(null); + const [notice, setNotice] = useState(null); + + async function refresh() { + setLoading(true); + const [rows, catalogs] = await Promise.all([listPlugins(), listPluginMarketplaces()]); + setPlugins(rows); + setMarketplaces(catalogs); + setLoading(false); + } + + useEffect(() => { + void refresh(); + }, []); + + const officialPlugins = useMemo( + () => plugins.filter((plugin) => plugin.sourceKind === 'bundled'), + [plugins], + ); + const userPlugins = useMemo( + () => plugins.filter((plugin) => USER_SOURCE_KINDS.has(plugin.sourceKind)), + [plugins], + ); + + async function handleInstall() { + const trimmed = source.trim(); + if (!trimmed) return; + setInstalling(true); + setNotice(null); + const outcome = await installPluginSource(trimmed); + setInstalling(false); + setNotice(outcome); + if (outcome.ok) { + setSource(''); + setImportOpen(false); + await refresh(); + setActiveTab('mine'); + } + } + + async function handleUsePlugin(record: InstalledPluginRecord) { + setPendingApplyId(record.id); + setNotice(null); + const result = await applyPlugin(record.id, { locale }); + setPendingApplyId(null); + if (!result) { + setNotice({ + ok: false, + message: `Failed to apply ${record.title}. Make sure the daemon is reachable.`, + }); + return; + } + setActivePlugin({ record, result }); + setDetailsRecord(null); + setNotice({ + ok: true, + message: `${record.title} is ready. Use it from Home with @ search or pick it from the gallery.`, + }); + } + + return ( +
+
+
+

Plugins

+

+ Plugins +

+

+ Browse the same visual plugin catalog from Home, then manage your + user plugins, marketplace sources, and future team catalogs here. +

+
+
+ + +
+
+ +
+ + + +
+ + {importOpen ? ( + + ) : null} + + + + {notice ? : null} + +
+ {loading ?
Loading plugins…
: null} + + {!loading && activeTab === 'community' ? ( + void handleUsePlugin(record)} + onOpenDetails={setDetailsRecord} + title="Community" + subtitle="Things you can do and tasks to complete — packaged as plugins. Pick one to load a starter prompt, or use @ search from Home." + emptyMessage="No official plugins are registered yet. Restart the daemon if this looks wrong." + /> + ) : null} + + {!loading && activeTab === 'mine' ? ( + void handleUsePlugin(record)} + onOpenDetails={setDetailsRecord} + title="My plugins" + subtitle="Plugins installed into your user registry. They appear in @ search and can be consumed by the agent like official plugins." + emptyMessage="No user plugins yet. Use Create / Import to install from GitHub, a daemon-local path, an HTTPS archive, or a marketplace name." + /> + ) : null} + + {!loading && activeTab === 'marketplaces' ? ( + + ) : null} + + {activeTab === 'team' ? : null} +
+ + {detailsRecord ? ( + setDetailsRecord(null)} + onUse={(record) => void handleUsePlugin(record)} + isApplying={pendingApplyId === detailsRecord.id} + /> + ) : null} +
+ ); +} + +function StatCard({ label, value }: { label: string; value: number }) { + return ( +
+ {value} + {label} +
+ ); +} + +function Notice({ + outcome, +}: { + outcome: PluginInstallOutcome | { ok: boolean; message: string }; +}) { + const warnings = 'warnings' in outcome ? outcome.warnings : []; + const log = 'log' in outcome ? outcome.log : []; + return ( +
+
{outcome.message}
+ {warnings.length > 0 ? ( +
+ {warnings.length} warning{warnings.length === 1 ? '' : 's'} +
+ ) : null} + {log.length > 0 ? ( +
+ Install log +
    + {log.map((line, idx) => ( +
  • {line}
  • + ))} +
+
+ ) : null} +
+ ); +} + +function MarketplacesPanel({ marketplaces }: { marketplaces: PluginMarketplace[] }) { + return ( +
+
+
+

Configured marketplaces

+

Marketplace manifests can resolve bare plugin names during install.

+
+ {marketplaces.length} +
+ {marketplaces.length === 0 ? ( +
+ No marketplaces registered yet. Add one with od marketplace add <url>. +
+ ) : ( +
+ {marketplaces.map((marketplace) => ( +
+
+

{marketplace.manifest.name ?? marketplace.url}

+ + {marketplace.url} + +
+
+ {marketplace.trust} + {marketplace.manifest.plugins?.length ?? 0} plugins +
+
+ ))} +
+ )} +
+ ); +} + +function ImportPanel({ + source, + installing, + onSourceChange, + onInstall, +}: { + source: string; + installing: boolean; + onSourceChange: (value: string) => void; + onInstall: () => void; +}) { + return ( +
+
+
+

Create or import a plugin

+

+ Install into the user plugin registry from the sources the daemon + already understands. +

+
+
+
+ +
+ onSourceChange(event.target.value)} + placeholder="github:owner/repo@main/plugins/my-plugin" + disabled={installing} + /> + +
+
+ Supports github:owner/repo[@ref][/subpath], daemon-local paths, + HTTPS .tar.gz/.tgz archives, or marketplace plugin names. +
+
+
+ + + +
+
+ ); +} + +function FutureCard({ + icon, + title, + body, +}: { + icon: 'upload' | 'folder' | 'edit'; + title: string; + body: string; +}) { + return ( +
+ + + +

{title}

+

{body}

+
+ ); +} + +function TeamPanel() { + return ( +
+ + + +
+

Coming soon

+

Private team marketplaces

+

+ This area is reserved for enterprise and team catalogs, private trust + policies, and shared plugin lifecycle controls. +

+
+
+ ); +} diff --git a/apps/web/src/router.ts b/apps/web/src/router.ts index 91ae5954f..1fffc7199 100644 --- a/apps/web/src/router.ts +++ b/apps/web/src/router.ts @@ -9,7 +9,13 @@ import { useEffect, useState } from 'react'; // columns and each sub-view now owns a top-level path so the browser // back/forward buttons work, deep links are shareable, and per-tab // state isn't trapped behind a `useState` boundary. -export type EntryHomeView = 'home' | 'projects' | 'tasks' | 'design-systems' | 'integrations'; +export type EntryHomeView = + | 'home' + | 'projects' + | 'tasks' + | 'plugins' + | 'design-systems' + | 'integrations'; export type Route = | { kind: 'home'; view: EntryHomeView } @@ -40,6 +46,9 @@ export function parseRoute(pathname: string): Route { if (parts[0] === 'tasks') { return { kind: 'home', view: 'tasks' }; } + if (parts[0] === 'plugins' && !parts[1]) { + return { kind: 'home', view: 'plugins' }; + } if (parts[0] === 'integrations') { return { kind: 'home', view: 'integrations' }; } @@ -61,6 +70,7 @@ export function buildPath(route: Route): string { if (route.kind === 'home') { if (route.view === 'projects') return '/projects'; if (route.view === 'tasks') return '/tasks'; + if (route.view === 'plugins') return '/plugins'; if (route.view === 'design-systems') return '/design-systems'; if (route.view === 'integrations') return '/integrations'; return '/'; diff --git a/apps/web/src/state/projects.ts b/apps/web/src/state/projects.ts index cb7cada39..687437228 100644 --- a/apps/web/src/state/projects.ts +++ b/apps/web/src/state/projects.ts @@ -365,12 +365,152 @@ export async function listPlugins(): Promise { } } +export interface PluginInstallOutcome { + ok: boolean; + plugin?: InstalledPluginRecord; + warnings: string[]; + message?: string; + log: string[]; +} + +interface PluginInstallEvent { + kind?: 'progress' | 'success' | 'error'; + phase?: string; + message?: string; + plugin?: InstalledPluginRecord; + warnings?: string[]; +} + +export async function installPluginSource(source: string): Promise { + const log: string[] = []; + try { + const resp = await fetch('/api/plugins/install', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ source }), + }); + if (!resp.ok) { + const message = await readErrorMessage(resp); + return { ok: false, warnings: [], message, log }; + } + if (!resp.body) { + return { + ok: false, + warnings: [], + message: 'Install stream did not start.', + log, + }; + } + + let success: InstalledPluginRecord | undefined; + let warnings: string[] = []; + let errorMessage: string | undefined; + for await (const ev of readServerSentEvents(resp.body)) { + if (ev.message) log.push(ev.message); + if (ev.warnings) warnings = ev.warnings; + if (ev.kind === 'success') success = ev.plugin; + if (ev.kind === 'error') errorMessage = ev.message ?? 'Install failed.'; + } + return { + ok: Boolean(success) && !errorMessage, + plugin: success, + warnings, + message: errorMessage ?? (success ? `Installed ${success.title}.` : 'Install finished.'), + log, + }; + } catch (err) { + return { + ok: false, + warnings: [], + message: (err as Error).message, + log, + }; + } +} + +export async function upgradePlugin(id: string): Promise { + const log: string[] = []; + try { + const resp = await fetch(`/api/plugins/${encodeURIComponent(id)}/upgrade`, { + method: 'POST', + }); + if (!resp.ok) { + const message = await readErrorMessage(resp); + return { ok: false, warnings: [], message, log }; + } + if (!resp.body) { + return { + ok: false, + warnings: [], + message: 'Upgrade stream did not start.', + log, + }; + } + let success: InstalledPluginRecord | undefined; + let warnings: string[] = []; + let errorMessage: string | undefined; + for await (const ev of readServerSentEvents(resp.body)) { + if (ev.message) log.push(ev.message); + if (ev.warnings) warnings = ev.warnings; + if (ev.kind === 'success') success = ev.plugin; + if (ev.kind === 'error') errorMessage = ev.message ?? 'Upgrade failed.'; + } + return { + ok: Boolean(success) && !errorMessage, + plugin: success, + warnings, + message: errorMessage ?? (success ? `Upgraded ${success.title}.` : 'Upgrade finished.'), + log, + }; + } catch (err) { + return { + ok: false, + warnings: [], + message: (err as Error).message, + log, + }; + } +} + +export async function uninstallPlugin(id: string): Promise { + try { + const resp = await fetch(`/api/plugins/${encodeURIComponent(id)}/uninstall`, { + method: 'POST', + }); + return resp.ok; + } catch { + return false; + } +} + +export interface PluginMarketplace { + id: string; + url: string; + trust: 'official' | 'trusted' | 'restricted'; + manifest: { + name?: string; + plugins?: Array<{ name: string; source: string; description?: string }>; + }; +} + +export async function listPluginMarketplaces(): Promise { + try { + const resp = await fetch('/api/marketplaces'); + if (!resp.ok) return []; + const json = (await resp.json()) as { marketplaces?: PluginMarketplace[] }; + return json.marketplaces ?? []; + } catch { + return []; + } +} + export async function applyPlugin( pluginId: string, options: { inputs?: Record; projectId?: string; grantCaps?: string[]; + locale?: string; } = {}, ): Promise { try { @@ -383,6 +523,7 @@ export async function applyPlugin( inputs: options.inputs ?? {}, projectId: options.projectId, grantCaps: options.grantCaps ?? [], + locale: options.locale, }), }, ); @@ -394,6 +535,59 @@ export async function applyPlugin( } } +async function readErrorMessage(resp: Response): Promise { + try { + const json = (await resp.json()) as { + error?: string | { message?: string }; + }; + if (typeof json.error === 'string') return json.error; + if (json.error?.message) return json.error.message; + } catch { + // Fall through to the status text below. + } + return resp.statusText || `HTTP ${resp.status}`; +} + +async function* readServerSentEvents( + body: ReadableStream, +): AsyncGenerator { + const reader = body.getReader(); + const decoder = new TextDecoder(); + let buffer = ''; + try { + while (true) { + const { done, value } = await reader.read(); + if (done) break; + buffer += decoder.decode(value, { stream: true }); + const parts = buffer.split(/\n\n/); + buffer = parts.pop() ?? ''; + for (const part of parts) { + const event = parseServerSentEvent(part); + if (event) yield event; + } + } + buffer += decoder.decode(); + const event = parseServerSentEvent(buffer); + if (event) yield event; + } finally { + reader.releaseLock(); + } +} + +function parseServerSentEvent(raw: string): PluginInstallEvent | null { + const data = raw + .split('\n') + .filter((line) => line.startsWith('data:')) + .map((line) => line.slice(5).trimStart()) + .join('\n'); + if (!data) return null; + try { + return JSON.parse(data) as PluginInstallEvent; + } catch { + return null; + } +} + // Fetch the immutable snapshot pinned to a project / conversation. // Used by ProjectView to surface the active plugin as a context chip // on user messages instead of re-rendering the inline plugin rail diff --git a/apps/web/src/styles/home/home-hero.css b/apps/web/src/styles/home/home-hero.css index 6228f566d..d6bea035a 100644 --- a/apps/web/src/styles/home/home-hero.css +++ b/apps/web/src/styles/home/home-hero.css @@ -81,6 +81,7 @@ background: var(--bg-subtle); } .home-hero__input-card { + position: relative; width: 100%; max-width: 720px; background: var(--bg-panel); @@ -160,6 +161,75 @@ .home-hero__input::placeholder { color: var(--text-soft); } +.home-hero__plugin-picker { + position: absolute; + left: 14px; + right: 14px; + top: calc(100% - 10px); + z-index: 20; + display: flex; + flex-direction: column; + gap: 3px; + max-height: 280px; + overflow: auto; + padding: 6px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--bg-panel); + box-shadow: var(--shadow-lg, 0 14px 36px rgba(0, 0, 0, 0.14)); +} +.home-hero__plugin-picker-empty { + padding: 10px; + color: var(--text-muted); + font-size: 12px; +} +.home-hero__plugin-option { + appearance: none; + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + width: 100%; + padding: 9px 10px; + border: 1px solid transparent; + border-radius: var(--radius-sm); + background: transparent; + color: var(--text); + text-align: left; + cursor: pointer; + transition: background-color 120ms ease, border-color 120ms ease; +} +.home-hero__plugin-option:hover, +.home-hero__plugin-option.is-active { + border-color: var(--border-soft); + background: var(--bg-subtle); +} +.home-hero__plugin-option-main { + display: flex; + flex-direction: column; + gap: 2px; + min-width: 0; +} +.home-hero__plugin-option-main span:first-child { + overflow: hidden; + color: var(--text-strong); + font-size: 13px; + font-weight: 650; + text-overflow: ellipsis; + white-space: nowrap; +} +.home-hero__plugin-option-main span:last-child { + overflow: hidden; + color: var(--text-muted); + font-size: 11.5px; + text-overflow: ellipsis; + white-space: nowrap; +} +.home-hero__plugin-option-meta { + flex: 0 0 auto; + color: var(--text-faint); + font-size: 11px; +} .home-hero__input-foot { display: flex; align-items: center; diff --git a/apps/web/src/styles/home/index.css b/apps/web/src/styles/home/index.css index c15d38038..1d302b93e 100644 --- a/apps/web/src/styles/home/index.css +++ b/apps/web/src/styles/home/index.css @@ -10,6 +10,7 @@ @import './home-hero.css'; @import './recent-projects.css'; @import './plugins-home.css'; +@import './plugins-view.css'; @import './new-project-modal.css'; @import './integrations.css'; @import './tasks.css'; diff --git a/apps/web/src/styles/home/plugins-view.css b/apps/web/src/styles/home/plugins-view.css new file mode 100644 index 000000000..8ae9fa916 --- /dev/null +++ b/apps/web/src/styles/home/plugins-view.css @@ -0,0 +1,466 @@ +.plugins-view { + display: flex; + flex-direction: column; + gap: 18px; +} + +.plugins-view__hero { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 18px; +} + +.plugins-view__kicker { + margin: 0 0 6px; + font-size: 11px; + font-weight: 700; + letter-spacing: 0.11em; + text-transform: uppercase; + color: var(--text-muted); +} + +.plugins-view__lede { + max-width: 620px; + margin: 8px 0 0; + color: var(--text-muted); + font-size: 14px; + line-height: 1.55; +} + +.plugins-view__badge { + display: inline-flex; + align-items: center; + gap: 7px; + flex: 0 0 auto; + padding: 7px 10px; + border: 1px solid var(--border); + border-radius: 999px; + color: var(--text-muted); + background: var(--bg-panel); + font-size: 12px; +} + +.plugins-view__hero-actions { + display: flex; + align-items: center; + gap: 8px; + flex: 0 0 auto; +} + +.plugins-view__stats { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; +} + +.plugins-view__stat { + padding: 14px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--bg-panel); +} + +.plugins-view__stat-value { + display: block; + color: var(--text-strong); + font-family: var(--serif); + font-size: 24px; + font-weight: 600; + line-height: 1; +} + +.plugins-view__stat-label { + display: block; + margin-top: 6px; + color: var(--text-muted); + font-size: 12px; +} + +.plugins-view__tabs { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 8px; + padding: 5px; + border: 1px solid var(--border); + border-radius: var(--radius-lg); + background: var(--bg-subtle); +} + +.plugins-view__tab { + appearance: none; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + min-width: 0; + padding: 9px 10px; + border: 1px solid transparent; + border-radius: var(--radius); + background: transparent; + color: var(--text-muted); + text-align: left; + cursor: pointer; + transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease; +} + +.plugins-view__tab:hover { + background: var(--bg-panel); + color: var(--text); +} + +.plugins-view__tab.is-active { + background: var(--bg-panel); + border-color: var(--border); + color: var(--text-strong); + box-shadow: var(--shadow-sm); +} + +.plugins-view__tab-label { + font-size: 13px; + font-weight: 650; +} + +.plugins-view__tab-hint { + overflow: hidden; + max-width: 100%; + color: var(--text-faint); + font-size: 11px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.plugins-view__gallery, +.plugins-view__section { + display: flex; + flex-direction: column; + gap: 14px; +} + +.plugins-view__gallery > .plugins-home { + width: 100%; +} + +.plugins-view__section-head { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; +} + +.plugins-view__section-head h2, +.plugins-view__team h2, +.plugins-view__marketplace h3, +.plugins-view__future-card h3 { + margin: 0; + color: var(--text-strong); +} + +.plugins-view__section-head h2 { + font-size: 18px; +} + +.plugins-view__section-head p, +.plugins-view__team p, +.plugins-view__future-card p { + margin: 5px 0 0; + color: var(--text-muted); + font-size: 13px; + line-height: 1.45; +} + +.plugins-view__section-count { + flex: 0 0 auto; + color: var(--text-faint); + font-size: 12px; + font-variant-numeric: tabular-nums; +} + +.plugins-view__list, +.plugins-view__marketplaces { + display: flex; + flex-direction: column; + gap: 9px; +} + +.plugins-view__row, +.plugins-view__marketplace, +.plugins-view__install-card, +.plugins-view__team { + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--bg-panel); +} + +.plugins-view__row { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; + padding: 13px; +} + +.plugins-view__row-main { + min-width: 0; +} + +.plugins-view__row-title { + display: flex; + align-items: center; + gap: 8px; + color: var(--text-strong); + font-size: 14px; + font-weight: 650; +} + +.plugins-view__row-main p { + margin: 5px 0 0; + color: var(--text-muted); + font-size: 12.5px; + line-height: 1.45; +} + +.plugins-view__trust { + flex: 0 0 auto; + padding: 2px 6px; + border-radius: 999px; + font-size: 10.5px; + font-weight: 650; + text-transform: uppercase; +} + +.plugins-view__meta { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-top: 8px; + color: var(--text-faint); + font-size: 11.5px; +} + +.plugins-view__meta span { + padding: 2px 6px; + border: 1px solid var(--border-soft); + border-radius: 999px; +} + +.plugins-view__row-actions { + display: flex; + align-items: center; + gap: 7px; + flex: 0 0 auto; +} + +.plugins-view__primary, +.plugins-view__secondary, +.plugins-view__danger { + appearance: none; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + min-height: 32px; + padding: 0 11px; + border-radius: var(--radius-sm); + font-size: 12px; + cursor: pointer; + transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease; +} + +.plugins-view__primary { + border: 1px solid var(--accent); + background: var(--accent); + color: white; +} + +.plugins-view__primary:hover:not(:disabled) { + background: var(--accent-strong); + border-color: var(--accent-strong); +} + +.plugins-view__secondary { + border: 1px solid var(--border); + background: var(--bg-panel); + color: var(--text-muted); +} + +.plugins-view__secondary:hover:not(:disabled) { + border-color: var(--border-strong); + color: var(--text); +} + +.plugins-view__danger { + border: 1px solid var(--red-border); + background: var(--red-bg); + color: var(--red); +} + +.plugins-view__primary:disabled, +.plugins-view__secondary:disabled, +.plugins-view__danger:disabled { + cursor: not-allowed; + opacity: 0.55; +} + +.plugins-view__marketplace { + display: flex; + align-items: flex-start; + justify-content: space-between; + gap: 16px; + padding: 13px; +} + +.plugins-view__marketplace a { + display: inline-block; + margin-top: 5px; + color: var(--text-muted); + font-size: 12px; + word-break: break-all; +} + +.plugins-view__install-card { + display: flex; + flex-direction: column; + gap: 8px; + padding: 14px; +} + +.plugins-view__import { + padding: 14px; + border: 1px solid var(--border); + border-radius: var(--radius-lg); + background: var(--bg-panel); + box-shadow: var(--shadow-sm); +} + +.plugins-view__install-card label { + color: var(--text-strong); + font-size: 13px; + font-weight: 650; +} + +.plugins-view__source-row { + display: flex; + gap: 8px; +} + +.plugins-view__source-row input { + flex: 1 1 auto; + min-width: 0; +} + +.plugins-view__source-help { + color: var(--text-muted); + font-size: 12px; + line-height: 1.45; +} + +.plugins-view__source-help code, +.plugins-view__empty code { + padding: 1px 5px; + border-radius: 3px; + background: var(--bg-subtle); + color: var(--text); + font-size: 11px; +} + +.plugins-view__future-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; +} + +.plugins-view__future-card { + padding: 13px; + border: 1px dashed var(--border); + border-radius: var(--radius); + background: var(--bg-panel); +} + +.plugins-view__future-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; + margin-bottom: 8px; + border: 1px solid var(--border); + border-radius: 50%; + color: var(--text-muted); + background: var(--bg-subtle); +} + +.plugins-view__team { + display: flex; + gap: 12px; + padding: 18px; +} + +.plugins-view__empty { + padding: 20px 16px; + border: 1px dashed var(--border); + border-radius: var(--radius); + color: var(--text-muted); + font-size: 13px; + text-align: center; +} + +.plugins-view__notice { + padding: 10px 12px; + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--bg-panel); + color: var(--text); + font-size: 13px; +} + +.plugins-view__notice.is-success { + border-color: color-mix(in srgb, var(--green, #168a4a) 25%, var(--border)); +} + +.plugins-view__notice.is-error { + border-color: var(--red-border); + background: var(--red-bg); + color: var(--red); +} + +.plugins-view__notice-sub { + margin-top: 3px; + color: var(--text-muted); + font-size: 12px; +} + +.plugins-view__notice-log { + margin-top: 6px; + color: var(--text-muted); + font-size: 12px; +} + +.plugins-view__notice-log ul { + margin: 6px 0 0; + padding-left: 18px; +} + +@media (max-width: 900px) { + .plugins-view__hero, + .plugins-view__hero-actions, + .plugins-view__row, + .plugins-view__marketplace { + flex-direction: column; + } + + .plugins-view__stats, + .plugins-view__tabs, + .plugins-view__future-grid { + grid-template-columns: 1fr; + } + + .plugins-view__row-actions, + .plugins-view__source-row { + width: 100%; + } + + .plugins-view__source-row { + flex-direction: column; + } +} diff --git a/apps/web/tests/components/HomeHero.plugin-picker.test.tsx b/apps/web/tests/components/HomeHero.plugin-picker.test.tsx new file mode 100644 index 000000000..4e0ae1b82 --- /dev/null +++ b/apps/web/tests/components/HomeHero.plugin-picker.test.tsx @@ -0,0 +1,62 @@ +// @vitest-environment jsdom + +import { cleanup, fireEvent, render, screen } from '@testing-library/react'; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import type { InstalledPluginRecord } from '@open-design/contracts'; +import { HomeHero } from '../../src/components/HomeHero'; + +function makePlugin(id: string, title: string): InstalledPluginRecord { + return { + id, + title, + version: '1.0.0', + sourceKind: 'bundled', + source: '/tmp', + trust: 'bundled', + capabilitiesGranted: ['prompt:inject'], + manifest: { + name: id, + version: '1.0.0', + title, + description: 'A plugin fixture', + tags: ['fixture'], + }, + fsPath: '/tmp', + installedAt: 0, + updatedAt: 0, + }; +} + +afterEach(() => { + cleanup(); +}); + +describe('HomeHero plugin picker', () => { + it('opens plugin search from an @ token and returns the prompt without that token', () => { + const onPromptChange = vi.fn(); + const onPickPlugin = vi.fn(); + render( + undefined} + activePluginTitle={null} + onClearActivePlugin={() => undefined} + pluginOptions={[makePlugin('sample-plugin', 'Sample Plugin')]} + pluginsLoading={false} + pendingPluginId={null} + onPickPlugin={onPickPlugin} + contextItemCount={0} + error={null} + />, + ); + + expect(screen.getByTestId('home-hero-plugin-picker')).toBeTruthy(); + fireEvent.mouseDown(screen.getByRole('option', { name: /sample plugin/i })); + + expect(onPickPlugin).toHaveBeenCalledWith( + expect.objectContaining({ id: 'sample-plugin' }), + 'Make', + ); + }); +}); diff --git a/apps/web/tests/components/HomeView.plugin-i18n.test.tsx b/apps/web/tests/components/HomeView.plugin-i18n.test.tsx new file mode 100644 index 000000000..d809f7907 --- /dev/null +++ b/apps/web/tests/components/HomeView.plugin-i18n.test.tsx @@ -0,0 +1,113 @@ +// @vitest-environment jsdom + +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { HomeView } from '../../src/components/HomeView'; +import { I18nProvider } from '../../src/i18n'; + +const PLUGIN_ROW = { + id: 'localized-plugin', + title: 'Localized Plugin', + version: '1.0.0', + trust: 'trusted' as const, + sourceKind: 'bundled' as const, + source: '/tmp/localized', + capabilitiesGranted: ['prompt:inject'], + fsPath: '/tmp/localized', + installedAt: 0, + updatedAt: 0, + manifest: { + name: 'localized-plugin', + title: 'Localized Plugin', + version: '1.0.0', + description: 'A localized fixture', + od: { + kind: 'scenario', + taskKind: 'new-generation', + useCase: { + query: { + en: 'Make a {{topic}} brief.', + 'zh-CN': '生成一份关于 {{topic}} 的简报。', + }, + }, + }, + }, +}; + +const APPLY_RESULT = { + ok: true, + query: '生成一份关于 {{topic}} 的简报。', + contextItems: [], + inputs: [{ name: 'topic', type: 'string', default: '设计系统' }], + assets: [], + mcpServers: [], + trust: 'trusted', + capabilitiesGranted: ['prompt:inject'], + capabilitiesRequired: ['prompt:inject'], + appliedPlugin: { + snapshotId: 'snap-1', + pluginId: 'localized-plugin', + pluginVersion: '1.0.0', + manifestSourceDigest: 'a'.repeat(64), + inputs: {}, + resolvedContext: { items: [] }, + capabilitiesGranted: ['prompt:inject'], + capabilitiesRequired: ['prompt:inject'], + assetsStaged: [], + taskKind: 'new-generation', + appliedAt: 0, + connectorsRequired: [], + connectorsResolved: [], + mcpServers: [], + status: 'fresh', + }, + projectMetadata: {}, +}; + +describe('HomeView plugin i18n', () => { + afterEach(() => { + vi.unstubAllGlobals(); + cleanup(); + }); + + it('hydrates the Home prompt with the localized apply query', async () => { + const fetchMock = vi.fn(async (url) => { + if (typeof url === 'string' && url === '/api/plugins') { + return new Response(JSON.stringify({ plugins: [PLUGIN_ROW] }), { + status: 200, + headers: { 'content-type': 'application/json' }, + }); + } + if (typeof url === 'string' && url.includes('/apply')) { + return new Response(JSON.stringify(APPLY_RESULT), { + status: 200, + headers: { 'content-type': 'application/json' }, + }); + } + throw new Error(`unexpected fetch ${url}`); + }); + vi.stubGlobal('fetch', fetchMock); + + render( + + undefined} + onOpenProject={() => undefined} + onViewAllProjects={() => undefined} + /> + , + ); + + fireEvent.click(await waitFor(() => screen.getByTestId('plugins-home-use-localized-plugin'))); + + const input = await screen.findByTestId('home-hero-input'); + await waitFor(() => { + expect((input as HTMLTextAreaElement).value).toBe('生成一份关于 设计系统 的简报。'); + }); + const [, init] = fetchMock.mock.calls.find(([url]) => ( + typeof url === 'string' && url.includes('/apply') + ))!; + expect(JSON.parse(String(init?.body))).toMatchObject({ locale: 'zh-CN' }); + }); +}); diff --git a/apps/web/tests/components/PluginsView.test.tsx b/apps/web/tests/components/PluginsView.test.tsx new file mode 100644 index 000000000..40659c406 --- /dev/null +++ b/apps/web/tests/components/PluginsView.test.tsx @@ -0,0 +1,148 @@ +// @vitest-environment jsdom + +import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import type { InstalledPluginRecord, PluginSourceKind, TrustTier } from '@open-design/contracts'; +import { PluginsView } from '../../src/components/PluginsView'; +import { + applyPlugin, + installPluginSource, + listPluginMarketplaces, + listPlugins, +} from '../../src/state/projects'; + +vi.mock('../../src/router', () => ({ + navigate: vi.fn(), +})); + +vi.mock('../../src/state/projects', () => ({ + applyPlugin: vi.fn(), + installPluginSource: vi.fn(), + listPluginMarketplaces: vi.fn(), + listPlugins: vi.fn(), + uninstallPlugin: vi.fn(), + upgradePlugin: vi.fn(), +})); + +function makePlugin( + id: string, + sourceKind: PluginSourceKind, + trust: TrustTier, +): InstalledPluginRecord { + return { + id, + title: id === 'official-plugin' ? 'Official Plugin' : 'User Plugin', + version: '1.0.0', + sourceKind, + source: '/tmp', + trust, + capabilitiesGranted: ['prompt:inject'], + manifest: { + name: id, + version: '1.0.0', + title: id, + description: `${id} description`, + od: { + kind: 'scenario', + mode: 'prototype', + }, + }, + fsPath: '/tmp', + installedAt: 0, + updatedAt: 0, + }; +} + +const mockedListPlugins = vi.mocked(listPlugins); +const mockedListMarketplaces = vi.mocked(listPluginMarketplaces); +const mockedInstallPluginSource = vi.mocked(installPluginSource); +const mockedApplyPlugin = vi.mocked(applyPlugin); + +beforeEach(() => { + mockedListPlugins.mockResolvedValue([ + makePlugin('official-plugin', 'bundled', 'bundled'), + makePlugin('user-plugin', 'github', 'restricted'), + ]); + mockedListMarketplaces.mockResolvedValue([ + { + id: 'catalog-1', + url: 'https://example.com/open-design-marketplace.json', + trust: 'official', + manifest: { + name: 'Example Catalog', + plugins: [{ name: 'remote-plugin', source: 'github:owner/repo' }], + }, + }, + ]); + mockedInstallPluginSource.mockResolvedValue({ + ok: true, + plugin: makePlugin('new-plugin', 'github', 'restricted'), + warnings: [], + message: 'Installed New Plugin.', + log: ['Parsing manifest'], + }); + mockedApplyPlugin.mockResolvedValue({ + query: 'Make something.', + contextItems: [], + inputs: [], + assets: [], + mcpServers: [], + trust: 'restricted', + capabilitiesGranted: ['prompt:inject'], + capabilitiesRequired: ['prompt:inject'], + appliedPlugin: { + snapshotId: 'snap-1', + pluginId: 'official-plugin', + pluginVersion: '1.0.0', + manifestSourceDigest: 'a'.repeat(64), + inputs: {}, + resolvedContext: { items: [] }, + capabilitiesGranted: ['prompt:inject'], + capabilitiesRequired: ['prompt:inject'], + assetsStaged: [], + taskKind: 'new-generation', + appliedAt: 0, + connectorsRequired: [], + connectorsResolved: [], + mcpServers: [], + status: 'fresh', + }, + projectMetadata: {}, + }); +}); + +afterEach(() => { + cleanup(); + vi.clearAllMocks(); +}); + +describe('PluginsView', () => { + it('groups official and user-installed plugins', async () => { + render(); + + await waitFor(() => expect(screen.getAllByText('Official Plugin').length).toBeGreaterThan(0)); + expect(screen.queryByText('User Plugin')).toBeNull(); + + fireEvent.click(screen.getByTestId('plugins-tab-mine')); + expect(screen.getAllByText('User Plugin').length).toBeGreaterThan(0); + expect(screen.queryByText('Official Plugin')).toBeNull(); + }); + + it('installs from a supported source string', async () => { + render(); + + expect(screen.queryByTestId('plugins-tab-import')).toBeNull(); + fireEvent.click(await screen.findByTestId('plugins-import-button')); + fireEvent.change(screen.getByLabelText('Plugin source'), { + target: { value: 'github:owner/repo/plugins/my-plugin' }, + }); + fireEvent.click(screen.getByRole('button', { name: 'Install' })); + + await waitFor(() => + expect(mockedInstallPluginSource).toHaveBeenCalledWith( + 'github:owner/repo/plugins/my-plugin', + ), + ); + expect(await screen.findByText('Installed New Plugin.')).toBeTruthy(); + }); +}); diff --git a/apps/web/tests/router-marketplace.test.ts b/apps/web/tests/router-marketplace.test.ts index a68832e5f..ce754d022 100644 --- a/apps/web/tests/router-marketplace.test.ts +++ b/apps/web/tests/router-marketplace.test.ts @@ -16,6 +16,11 @@ describe('router /marketplace', () => { }); }); + it('parses /plugins as the entry-shell plugins tab', () => { + expect(parseRoute('/plugins')).toEqual({ kind: 'home', view: 'plugins' }); + expect(parseRoute('/plugins/')).toEqual({ kind: 'home', view: 'plugins' }); + }); + it('parses /plugins/ as the same detail route (alias)', () => { expect(parseRoute('/plugins/sample-plugin')).toEqual({ kind: 'marketplace-detail', @@ -61,7 +66,9 @@ describe('router entry sub-views', () => { { kind: 'home', view: 'home' } as Route, { kind: 'home', view: 'projects' } as Route, { kind: 'home', view: 'tasks' } as Route, + { kind: 'home', view: 'plugins' } as Route, { kind: 'home', view: 'design-systems' } as Route, + { kind: 'home', view: 'integrations' } as Route, ]) { expect(parseRoute(buildPath(route))).toEqual(route); } diff --git a/apps/web/tests/state/projects.test.ts b/apps/web/tests/state/projects.test.ts new file mode 100644 index 000000000..cf0d94dfb --- /dev/null +++ b/apps/web/tests/state/projects.test.ts @@ -0,0 +1,52 @@ +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { applyPlugin } from '../../src/state/projects'; + +describe('applyPlugin', () => { + afterEach(() => { + vi.unstubAllGlobals(); + }); + + it('passes the current locale to the daemon apply endpoint', async () => { + const fetchMock = vi.fn(async () => new Response( + JSON.stringify({ + query: '生成一份简报。', + contextItems: [], + inputs: [], + assets: [], + mcpServers: [], + projectMetadata: {}, + trust: 'trusted', + capabilitiesGranted: [], + capabilitiesRequired: [], + appliedPlugin: { + snapshotId: 'snap-1', + pluginId: 'sample-plugin', + pluginVersion: '1.0.0', + manifestSourceDigest: 'a'.repeat(64), + inputs: {}, + resolvedContext: { items: [] }, + capabilitiesGranted: [], + capabilitiesRequired: [], + assetsStaged: [], + taskKind: 'new-generation', + appliedAt: 0, + connectorsRequired: [], + connectorsResolved: [], + mcpServers: [], + status: 'fresh', + }, + }), + { status: 200, headers: { 'content-type': 'application/json' } }, + )); + vi.stubGlobal('fetch', fetchMock); + + await applyPlugin('sample-plugin', { locale: 'zh-CN' }); + + const [, init] = fetchMock.mock.calls[0]!; + expect(JSON.parse(String(init?.body))).toMatchObject({ + inputs: {}, + grantCaps: [], + locale: 'zh-CN', + }); + }); +}); diff --git a/docs/plugins-spec.md b/docs/plugins-spec.md index 93a785dc6..32366f6c7 100644 --- a/docs/plugins-spec.md +++ b/docs/plugins-spec.md @@ -252,7 +252,10 @@ Rules of authorship: }, "useCase": { - "query": "Make a 12-slide investor deck for a Series A SaaS startup targeting {{audience}} on {{topic}}.", + "query": { + "en": "Make a 12-slide investor deck for a Series A SaaS startup targeting {{audience}} on {{topic}}.", + "zh-CN": "为一家面向 {{audience}}、主题是 {{topic}} 的 A 轮 SaaS 初创公司制作一份 12 页投资人 deck。" + }, "exampleOutputs": [ { "path": "./examples/b2b-saas/", "title": "B2B SaaS deck" } ] @@ -344,7 +347,7 @@ Rules of authorship: - `od.kind` — registry classification (`skill` / `scenario` / `atom` / `bundle`). - `od.taskKind` — one of the four product scenarios (`new-generation` / `code-migration` / `figma-migration` / `tune-collab`, see §1 "Four product scenarios"). Drives marketplace filters, default input templates, and the recommended pipeline starting point. - `od.preview` — drives the marketplace card and detail page. `entry` is served sandboxed via the daemon (the existing `/api/skills/:id/example` plumbing extended to plugins). -- `od.useCase.query` — the exact text that lands in the brief field on click-to-use. `{{var}}` placeholders bind to `od.inputs`. +- `od.useCase.query` — the exact text that lands in the brief field on click-to-use. It may be a legacy string or a locale map keyed by BCP-47-style locale tags (for example `{ "en": "...", "zh-CN": "..." }`). Apply-time resolution tries the requested locale, base language, `en`, then the first available value. `{{var}}` placeholders bind to `od.inputs`. - `od.context.*` — typed chips that hydrate the `ContextChipStrip` above the input. Each entry compiles to a `ContextItem` (§5.2). - `od.context.atoms` — **unordered set** declaring the atoms a plugin needs. The daemon uses them in default order; intended for simple plugins that don't customize flow. - `od.pipeline` — **ordered pipeline** in which the plugin author explicitly composes atoms into stages, loops, and termination conditions (§10.1). When both `od.pipeline` and `od.context.atoms` are present, `pipeline` wins; `context.atoms` is treated only as chip-strip metadata. diff --git a/docs/plugins-spec.zh-CN.md b/docs/plugins-spec.zh-CN.md index 03ed4c81e..648031025 100644 --- a/docs/plugins-spec.zh-CN.md +++ b/docs/plugins-spec.zh-CN.md @@ -252,7 +252,10 @@ my-plugin/ }, "useCase": { - "query": "Make a 12-slide investor deck for a Series A SaaS startup targeting {{audience}} on {{topic}}.", + "query": { + "en": "Make a 12-slide investor deck for a Series A SaaS startup targeting {{audience}} on {{topic}}.", + "zh-CN": "为一家面向 {{audience}}、主题是 {{topic}} 的 A 轮 SaaS 初创公司制作一份 12 页投资人 deck。" + }, "exampleOutputs": [ { "path": "./examples/b2b-saas/", "title": "B2B SaaS deck" } ] @@ -344,7 +347,7 @@ my-plugin/ - `od.kind`:registry 里的分类(`skill` / `scenario` / `atom` / `bundle`)。 - `od.taskKind`:四类产品场景之一(`new-generation` / `code-migration` / `figma-migration` / `tune-collab`,§1「四类产品场景」)。决定 marketplace filter、初始 inputs 模板、推荐 pipeline 起点。 - `od.preview`:驱动 marketplace 卡片和详情页。`entry` 通过 daemon 以 sandboxed 方式服务(扩展现有 `/api/skills/:id/example` plumbing)。 -- `od.useCase.query`:一键使用时进入 brief 字段的精确文本。`{{var}}` placeholder 绑定到 `od.inputs`。 +- `od.useCase.query`:一键使用时进入 brief 字段的精确文本。它可以是兼容旧 manifest 的字符串,也可以是按 BCP-47 风格 locale key 组织的文本映射(例如 `{ "en": "...", "zh-CN": "..." }`)。apply 时会依次尝试请求的 locale、基础语言、`en`,最后回退到第一个可用值。`{{var}}` placeholder 绑定到 `od.inputs`。 - `od.context.*`:用于填充输入框上方 `ContextChipStrip` 的类型化 chips。每一项都会编译成一个 `ContextItem`(§5.2)。 - `od.context.atoms`:**无序集合**——声明插件需要的 atoms。daemon 仅以默认顺序使用它们;用于不需要自定义流程的简单插件。 - `od.pipeline`:**有序管线**——插件作者显式编排 atoms 的 stages、循环、终止条件(§10.1)。当 `od.pipeline` 与 `od.context.atoms` 同时出现时,pipeline 优先;context.atoms 仅作为 chip strip 展示。 diff --git a/docs/schemas/open-design.plugin.v1.json b/docs/schemas/open-design.plugin.v1.json index cf311bf30..f89283d21 100644 --- a/docs/schemas/open-design.plugin.v1.json +++ b/docs/schemas/open-design.plugin.v1.json @@ -59,7 +59,12 @@ "useCase": { "type": "object", "properties": { - "query": { "type": "string" }, + "query": { + "oneOf": [ + { "type": "string" }, + { "$ref": "#/$defs/LocalizedText" } + ] + }, "exampleOutputs": { "type": "array", "items": { @@ -149,6 +154,11 @@ "properties": { "path": { "type": "string", "minLength": 1 } }, "additionalProperties": true }, + "LocalizedText": { + "type": "object", + "minProperties": 1, + "additionalProperties": { "type": "string" } + }, "Reference": { "type": "object", "properties": { diff --git a/packages/contracts/src/plugins/index.ts b/packages/contracts/src/plugins/index.ts index 3f3120287..ed950db5a 100644 --- a/packages/contracts/src/plugins/index.ts +++ b/packages/contracts/src/plugins/index.ts @@ -4,3 +4,4 @@ export * from './apply.js'; export * from './marketplace.js'; export * from './installed.js'; export * from './events.js'; +export * from './scenario-defaults.js'; diff --git a/packages/contracts/src/plugins/manifest.ts b/packages/contracts/src/plugins/manifest.ts index a24223503..ddf144ad1 100644 --- a/packages/contracts/src/plugins/manifest.ts +++ b/packages/contracts/src/plugins/manifest.ts @@ -36,6 +36,36 @@ export const InputFieldSchema = z.object({ export type InputField = z.infer; +export const LocalizedTextSchema = z.record(z.string()).refine( + (value) => Object.keys(value).length > 0, + { message: 'Localized text must include at least one locale.' }, +); + +export type LocalizedText = string | z.infer; + +export function resolveLocalizedText( + value: LocalizedText | undefined, + locale?: string, + fallbackLocale = 'en', +): string { + if (!value) return ''; + if (typeof value === 'string') return value; + + const candidates = [ + locale, + locale?.split('-')[0], + fallbackLocale, + fallbackLocale.split('-')[0], + ].filter((candidate): candidate is string => Boolean(candidate)); + + for (const candidate of candidates) { + const resolved = value[candidate]; + if (typeof resolved === 'string' && resolved.length > 0) return resolved; + } + + return Object.values(value).find((text) => text.length > 0) ?? ''; +} + export const PipelineStageSchema = z.object({ id: z.string().min(1), atoms: z.array(z.string()), @@ -137,7 +167,7 @@ export const PluginManifestSchema = z.object({ gif: z.string().optional(), }).passthrough().optional(), useCase: z.object({ - query: z.string().optional(), + query: z.union([z.string(), LocalizedTextSchema]).optional(), exampleOutputs: z.array(z.object({ path: z.string(), title: z.string().optional(), diff --git a/packages/contracts/src/plugins/scenario-defaults.ts b/packages/contracts/src/plugins/scenario-defaults.ts new file mode 100644 index 000000000..54cfea935 --- /dev/null +++ b/packages/contracts/src/plugins/scenario-defaults.ts @@ -0,0 +1,62 @@ +// Default scenario plugin bindings (plan §3.3 of plugin-driven-flow-plan). +// +// Both the web client (`EntryShell.handleCreate`) and the daemon +// (`/api/projects` + `/api/runs`) need to know which bundled scenario +// plugin to bind when the caller didn't pick one explicitly. Keeping +// the mapping in contracts lets both sides import the same table so the +// client and the server never disagree about what counts as the +// "default" plugin for a given project kind / task kind. +// +// Today every kind defaults to `od-new-generation`. The plan +// reserves slots for `od-media-generation` (Stage C) and the migration +// scenarios (`od-figma-migration`, `od-code-migration`) once the Home +// chip rail wires them in. + +import type { ProjectKind } from '../api/projects.js'; +import type { AppliedPluginSnapshot } from './apply.js'; + +export type TaskKind = AppliedPluginSnapshot['taskKind']; + +// Plugin ids of the bundled `_official/scenarios/` rows. Kept as a +// string-literal union so a typo here surfaces as a type error in both +// the web shell and the daemon resolver. +export type DefaultScenarioPluginId = + | 'od-new-generation' + | 'od-figma-migration' + | 'od-code-migration' + | 'od-tune-collab'; + +export const DEFAULT_SCENARIO_PLUGIN_BY_KIND: Record = { + prototype: 'od-new-generation', + deck: 'od-new-generation', + template: 'od-new-generation', + // image / video / audio fall back to `od-new-generation` until the + // Stage C scenario (`od-media-generation`) lands. Keeping them + // explicit in the map (instead of using `as Record<...>` shortcuts) + // documents the eventual migration target. + image: 'od-new-generation', + video: 'od-new-generation', + audio: 'od-new-generation', + other: 'od-new-generation', +}; + +export const DEFAULT_SCENARIO_PLUGIN_BY_TASK_KIND: Record = { + 'new-generation': 'od-new-generation', + 'figma-migration': 'od-figma-migration', + 'code-migration': 'od-code-migration', + 'tune-collab': 'od-tune-collab', +}; + +export function defaultScenarioPluginIdForKind( + kind: ProjectKind | undefined, +): DefaultScenarioPluginId | null { + if (!kind) return null; + return DEFAULT_SCENARIO_PLUGIN_BY_KIND[kind] ?? null; +} + +export function defaultScenarioPluginIdForTaskKind( + taskKind: TaskKind | undefined, +): DefaultScenarioPluginId | null { + if (!taskKind) return null; + return DEFAULT_SCENARIO_PLUGIN_BY_TASK_KIND[taskKind] ?? null; +} diff --git a/packages/contracts/tests/plugins-manifest.test.ts b/packages/contracts/tests/plugins-manifest.test.ts new file mode 100644 index 000000000..a5b0eb0d0 --- /dev/null +++ b/packages/contracts/tests/plugins-manifest.test.ts @@ -0,0 +1,45 @@ +import { describe, expect, it } from 'vitest'; +import { + PluginManifestSchema, + resolveLocalizedText, +} from '../src/plugins/manifest.js'; + +describe('plugin manifest localized text', () => { + it('accepts legacy string use-case queries', () => { + const manifest = PluginManifestSchema.parse({ + name: 'sample-plugin', + version: '1.0.0', + od: { + useCase: { + query: 'Make a {{topic}} brief.', + }, + }, + }); + + expect(manifest.od?.useCase?.query).toBe('Make a {{topic}} brief.'); + }); + + it('accepts locale-map use-case queries', () => { + const manifest = PluginManifestSchema.parse({ + name: 'sample-plugin', + version: '1.0.0', + od: { + useCase: { + query: { + en: 'Make a {{topic}} brief.', + 'zh-CN': '围绕 {{topic}} 写一份简报。', + }, + }, + }, + }); + + expect(resolveLocalizedText(manifest.od?.useCase?.query, 'zh-CN')).toBe( + '围绕 {{topic}} 写一份简报。', + ); + }); + + it('falls back from exact locale to base language, English, then first value', () => { + expect(resolveLocalizedText({ en: 'English', zh: '中文' }, 'zh-CN')).toBe('中文'); + expect(resolveLocalizedText({ 'zh-CN': '中文' }, 'fr')).toBe('中文'); + }); +}); diff --git a/packages/contracts/tests/scenario-defaults.test.ts b/packages/contracts/tests/scenario-defaults.test.ts new file mode 100644 index 000000000..3647a11e5 --- /dev/null +++ b/packages/contracts/tests/scenario-defaults.test.ts @@ -0,0 +1,48 @@ +// Plan §3.3 of plugin-driven-flow-plan — kind → bundled scenario plugin +// mapping. Web (`EntryShell`) and daemon (`/api/projects`, `/api/runs`) +// share this resolver; the test pins the table so a drift between the +// two surfaces is impossible. + +import { describe, expect, it } from 'vitest'; +import { + DEFAULT_SCENARIO_PLUGIN_BY_KIND, + DEFAULT_SCENARIO_PLUGIN_BY_TASK_KIND, + defaultScenarioPluginIdForKind, + defaultScenarioPluginIdForTaskKind, +} from '../src/plugins/scenario-defaults.js'; + +describe('defaultScenarioPluginIdForKind', () => { + it('maps every supported ProjectKind to a bundled scenario id', () => { + const expected: Record = { + prototype: 'od-new-generation', + deck: 'od-new-generation', + template: 'od-new-generation', + image: 'od-new-generation', + video: 'od-new-generation', + audio: 'od-new-generation', + other: 'od-new-generation', + }; + for (const [kind, pluginId] of Object.entries(expected)) { + expect(defaultScenarioPluginIdForKind(kind as never)).toBe(pluginId); + expect(DEFAULT_SCENARIO_PLUGIN_BY_KIND[kind as never]).toBe(pluginId); + } + }); + + it('returns null for an undefined kind so the daemon can skip the fallback', () => { + expect(defaultScenarioPluginIdForKind(undefined)).toBeNull(); + }); +}); + +describe('defaultScenarioPluginIdForTaskKind', () => { + it('maps every taskKind to the matching scenario plugin', () => { + expect(defaultScenarioPluginIdForTaskKind('new-generation')).toBe('od-new-generation'); + expect(defaultScenarioPluginIdForTaskKind('figma-migration')).toBe('od-figma-migration'); + expect(defaultScenarioPluginIdForTaskKind('code-migration')).toBe('od-code-migration'); + expect(defaultScenarioPluginIdForTaskKind('tune-collab')).toBe('od-tune-collab'); + expect(DEFAULT_SCENARIO_PLUGIN_BY_TASK_KIND['new-generation']).toBe('od-new-generation'); + }); + + it('returns null when the taskKind is missing', () => { + expect(defaultScenarioPluginIdForTaskKind(undefined)).toBeNull(); + }); +}); diff --git a/packages/plugin-runtime/tests/parsers.test.ts b/packages/plugin-runtime/tests/parsers.test.ts index aa9cbd20b..fcb9bd1a1 100644 --- a/packages/plugin-runtime/tests/parsers.test.ts +++ b/packages/plugin-runtime/tests/parsers.test.ts @@ -35,6 +35,23 @@ describe('parseManifest', () => { expect((result.manifest as Record).futureField).toEqual({ hello: 'world' }); } }); + + it('accepts localized use-case queries', () => { + const result = parseManifest(JSON.stringify({ + name: 'sample-plugin', + version: '1.0.0', + od: { + useCase: { + query: { + en: 'Make a brief.', + 'zh-CN': '写一份简报。', + }, + }, + }, + })); + + expect(result.ok).toBe(true); + }); }); describe('parseMarketplace', () => { diff --git a/plugins/_official/design-systems/agentic/open-design.json b/plugins/_official/design-systems/agentic/open-design.json index 6419013b3..9daf38817 100644 --- a/plugins/_official/design-systems/agentic/open-design.json +++ b/plugins/_official/design-systems/agentic/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Agentic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Agentic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Agentic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/airbnb/open-design.json b/plugins/_official/design-systems/airbnb/open-design.json index 6ae5706e2..7fa86c5b0 100644 --- a/plugins/_official/design-systems/airbnb/open-design.json +++ b/plugins/_official/design-systems/airbnb/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Airbnb design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Airbnb design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Airbnb design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/airtable/open-design.json b/plugins/_official/design-systems/airtable/open-design.json index 252b41de2..dc68aa64e 100644 --- a/plugins/_official/design-systems/airtable/open-design.json +++ b/plugins/_official/design-systems/airtable/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Airtable design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Airtable design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Airtable design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/ant/open-design.json b/plugins/_official/design-systems/ant/open-design.json index 1d2ebf84c..d94ca6c13 100644 --- a/plugins/_official/design-systems/ant/open-design.json +++ b/plugins/_official/design-systems/ant/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Ant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Ant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Ant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/apple/open-design.json b/plugins/_official/design-systems/apple/open-design.json index 0c5b158ae..7ee2a8309 100644 --- a/plugins/_official/design-systems/apple/open-design.json +++ b/plugins/_official/design-systems/apple/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Apple design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Apple design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Apple design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/application/open-design.json b/plugins/_official/design-systems/application/open-design.json index b05202a35..c1f8fa2cf 100644 --- a/plugins/_official/design-systems/application/open-design.json +++ b/plugins/_official/design-systems/application/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Application design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Application design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Application design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/arc/open-design.json b/plugins/_official/design-systems/arc/open-design.json index 8e51c17a9..5dacec559 100644 --- a/plugins/_official/design-systems/arc/open-design.json +++ b/plugins/_official/design-systems/arc/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Arc Browser design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Arc Browser design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Arc Browser design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/artistic/open-design.json b/plugins/_official/design-systems/artistic/open-design.json index cbde33293..e5c78c3b7 100644 --- a/plugins/_official/design-systems/artistic/open-design.json +++ b/plugins/_official/design-systems/artistic/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Artistic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Artistic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Artistic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/atelier-zero/open-design.json b/plugins/_official/design-systems/atelier-zero/open-design.json index daabed33e..1a4416cc1 100644 --- a/plugins/_official/design-systems/atelier-zero/open-design.json +++ b/plugins/_official/design-systems/atelier-zero/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Atelier Zero design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Atelier Zero design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Atelier Zero design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/bento/open-design.json b/plugins/_official/design-systems/bento/open-design.json index 62eca7b9b..1343f4d6d 100644 --- a/plugins/_official/design-systems/bento/open-design.json +++ b/plugins/_official/design-systems/bento/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Bento design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Bento design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Bento design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/binance/open-design.json b/plugins/_official/design-systems/binance/open-design.json index 6947ad141..88ecd9757 100644 --- a/plugins/_official/design-systems/binance/open-design.json +++ b/plugins/_official/design-systems/binance/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Binance.US design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Binance.US design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Binance.US design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/bmw-m/open-design.json b/plugins/_official/design-systems/bmw-m/open-design.json index 7d6b15ea2..47bae8a5c 100644 --- a/plugins/_official/design-systems/bmw-m/open-design.json +++ b/plugins/_official/design-systems/bmw-m/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the BMW M design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the BMW M design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the BMW M design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/bmw/open-design.json b/plugins/_official/design-systems/bmw/open-design.json index 5d86d9b68..65f40e130 100644 --- a/plugins/_official/design-systems/bmw/open-design.json +++ b/plugins/_official/design-systems/bmw/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the BMW design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the BMW design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the BMW design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/bold/open-design.json b/plugins/_official/design-systems/bold/open-design.json index 8fc7eee75..bb5d3fa69 100644 --- a/plugins/_official/design-systems/bold/open-design.json +++ b/plugins/_official/design-systems/bold/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Bold design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Bold design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Bold design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/brutalism/open-design.json b/plugins/_official/design-systems/brutalism/open-design.json index d4432103b..daf0a4e27 100644 --- a/plugins/_official/design-systems/brutalism/open-design.json +++ b/plugins/_official/design-systems/brutalism/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Brutalism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Brutalism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Brutalism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/bugatti/open-design.json b/plugins/_official/design-systems/bugatti/open-design.json index 1fb3f2d67..fd3eed5c9 100644 --- a/plugins/_official/design-systems/bugatti/open-design.json +++ b/plugins/_official/design-systems/bugatti/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Bugatti design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Bugatti design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Bugatti design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/cafe/open-design.json b/plugins/_official/design-systems/cafe/open-design.json index d5bf9918c..85bf3858f 100644 --- a/plugins/_official/design-systems/cafe/open-design.json +++ b/plugins/_official/design-systems/cafe/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Cafe design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Cafe design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Cafe design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/cal/open-design.json b/plugins/_official/design-systems/cal/open-design.json index be4aef680..7d20966f5 100644 --- a/plugins/_official/design-systems/cal/open-design.json +++ b/plugins/_official/design-systems/cal/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Cal.com design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Cal.com design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Cal.com design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/canva/open-design.json b/plugins/_official/design-systems/canva/open-design.json index 65f8cacd4..6d39cf400 100644 --- a/plugins/_official/design-systems/canva/open-design.json +++ b/plugins/_official/design-systems/canva/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Canva design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Canva design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Canva design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/claude/open-design.json b/plugins/_official/design-systems/claude/open-design.json index d9aa76694..913de5ef4 100644 --- a/plugins/_official/design-systems/claude/open-design.json +++ b/plugins/_official/design-systems/claude/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Claude (Anthropic) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Claude (Anthropic) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Claude (Anthropic) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/clay/open-design.json b/plugins/_official/design-systems/clay/open-design.json index 3fda7ba24..b14a377c2 100644 --- a/plugins/_official/design-systems/clay/open-design.json +++ b/plugins/_official/design-systems/clay/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Clay design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Clay design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Clay design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/claymorphism/open-design.json b/plugins/_official/design-systems/claymorphism/open-design.json index 40fb6ecc1..8b22fd1d3 100644 --- a/plugins/_official/design-systems/claymorphism/open-design.json +++ b/plugins/_official/design-systems/claymorphism/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Claymorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Claymorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Claymorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/clean/open-design.json b/plugins/_official/design-systems/clean/open-design.json index 67bbcb92e..2dcc4db15 100644 --- a/plugins/_official/design-systems/clean/open-design.json +++ b/plugins/_official/design-systems/clean/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Clean design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Clean design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Clean design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/clickhouse/open-design.json b/plugins/_official/design-systems/clickhouse/open-design.json index 8099cde5d..1cbd75f2a 100644 --- a/plugins/_official/design-systems/clickhouse/open-design.json +++ b/plugins/_official/design-systems/clickhouse/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the ClickHouse design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the ClickHouse design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the ClickHouse design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/cohere/open-design.json b/plugins/_official/design-systems/cohere/open-design.json index 86cbfcc62..8d1fa5f81 100644 --- a/plugins/_official/design-systems/cohere/open-design.json +++ b/plugins/_official/design-systems/cohere/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Cohere design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Cohere design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Cohere design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/coinbase/open-design.json b/plugins/_official/design-systems/coinbase/open-design.json index a2029a607..bc4f83f68 100644 --- a/plugins/_official/design-systems/coinbase/open-design.json +++ b/plugins/_official/design-systems/coinbase/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Coinbase design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Coinbase design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Coinbase design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/colorful/open-design.json b/plugins/_official/design-systems/colorful/open-design.json index d9af1ea52..555c65989 100644 --- a/plugins/_official/design-systems/colorful/open-design.json +++ b/plugins/_official/design-systems/colorful/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Colorful design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Colorful design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Colorful design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/composio/open-design.json b/plugins/_official/design-systems/composio/open-design.json index 366a722af..2de545881 100644 --- a/plugins/_official/design-systems/composio/open-design.json +++ b/plugins/_official/design-systems/composio/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Composio design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Composio design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Composio design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/contemporary/open-design.json b/plugins/_official/design-systems/contemporary/open-design.json index a8543de34..9878be055 100644 --- a/plugins/_official/design-systems/contemporary/open-design.json +++ b/plugins/_official/design-systems/contemporary/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Contemporary design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Contemporary design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Contemporary design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/corporate/open-design.json b/plugins/_official/design-systems/corporate/open-design.json index f7d0fdbf3..eba02c520 100644 --- a/plugins/_official/design-systems/corporate/open-design.json +++ b/plugins/_official/design-systems/corporate/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Corporate design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Corporate design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Corporate design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/cosmic/open-design.json b/plugins/_official/design-systems/cosmic/open-design.json index c474cc6d2..6c0ff51b4 100644 --- a/plugins/_official/design-systems/cosmic/open-design.json +++ b/plugins/_official/design-systems/cosmic/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Cosmic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Cosmic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Cosmic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/creative/open-design.json b/plugins/_official/design-systems/creative/open-design.json index 3ceeb75e1..fb07b1b91 100644 --- a/plugins/_official/design-systems/creative/open-design.json +++ b/plugins/_official/design-systems/creative/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Creative design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Creative design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Creative design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/cursor/open-design.json b/plugins/_official/design-systems/cursor/open-design.json index 7bd75b969..f185091dd 100644 --- a/plugins/_official/design-systems/cursor/open-design.json +++ b/plugins/_official/design-systems/cursor/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Cursor design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Cursor design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Cursor design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/dashboard/open-design.json b/plugins/_official/design-systems/dashboard/open-design.json index 6950b7447..4cc04b3c1 100644 --- a/plugins/_official/design-systems/dashboard/open-design.json +++ b/plugins/_official/design-systems/dashboard/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Dashboard design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Dashboard design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Dashboard design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/default/open-design.json b/plugins/_official/design-systems/default/open-design.json index 7c5682c4a..c07662a1e 100644 --- a/plugins/_official/design-systems/default/open-design.json +++ b/plugins/_official/design-systems/default/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Neutral Modern design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Neutral Modern design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Neutral Modern design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/discord/open-design.json b/plugins/_official/design-systems/discord/open-design.json index 79e8585da..0e7011493 100644 --- a/plugins/_official/design-systems/discord/open-design.json +++ b/plugins/_official/design-systems/discord/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Discord design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Discord design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Discord design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/dithered/open-design.json b/plugins/_official/design-systems/dithered/open-design.json index 8a08df29b..8773869ae 100644 --- a/plugins/_official/design-systems/dithered/open-design.json +++ b/plugins/_official/design-systems/dithered/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Dithered design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Dithered design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Dithered design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/doodle/open-design.json b/plugins/_official/design-systems/doodle/open-design.json index d5f617105..84de11769 100644 --- a/plugins/_official/design-systems/doodle/open-design.json +++ b/plugins/_official/design-systems/doodle/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Doodle design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Doodle design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Doodle design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/dramatic/open-design.json b/plugins/_official/design-systems/dramatic/open-design.json index 1050896c7..25277c8c1 100644 --- a/plugins/_official/design-systems/dramatic/open-design.json +++ b/plugins/_official/design-systems/dramatic/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Dramatic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Dramatic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Dramatic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/duolingo/open-design.json b/plugins/_official/design-systems/duolingo/open-design.json index a2fbfbb50..8c9226783 100644 --- a/plugins/_official/design-systems/duolingo/open-design.json +++ b/plugins/_official/design-systems/duolingo/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Duolingo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Duolingo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Duolingo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/editorial/open-design.json b/plugins/_official/design-systems/editorial/open-design.json index 937f09ffd..b3407a1cc 100644 --- a/plugins/_official/design-systems/editorial/open-design.json +++ b/plugins/_official/design-systems/editorial/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Editorial design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Editorial design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Editorial design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/elegant/open-design.json b/plugins/_official/design-systems/elegant/open-design.json index 4b5362f36..af98ce8a4 100644 --- a/plugins/_official/design-systems/elegant/open-design.json +++ b/plugins/_official/design-systems/elegant/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Elegant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Elegant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Elegant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/elevenlabs/open-design.json b/plugins/_official/design-systems/elevenlabs/open-design.json index 1ce617597..19418c866 100644 --- a/plugins/_official/design-systems/elevenlabs/open-design.json +++ b/plugins/_official/design-systems/elevenlabs/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the ElevenLabs design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the ElevenLabs design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the ElevenLabs design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/energetic/open-design.json b/plugins/_official/design-systems/energetic/open-design.json index 38be336e1..740b05806 100644 --- a/plugins/_official/design-systems/energetic/open-design.json +++ b/plugins/_official/design-systems/energetic/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Energetic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Energetic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Energetic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/enterprise/open-design.json b/plugins/_official/design-systems/enterprise/open-design.json index c8c79d8b3..8fb3e8562 100644 --- a/plugins/_official/design-systems/enterprise/open-design.json +++ b/plugins/_official/design-systems/enterprise/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Enterprise design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Enterprise design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Enterprise design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/expo/open-design.json b/plugins/_official/design-systems/expo/open-design.json index 36423daff..1937a646e 100644 --- a/plugins/_official/design-systems/expo/open-design.json +++ b/plugins/_official/design-systems/expo/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Expo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Expo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Expo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/expressive/open-design.json b/plugins/_official/design-systems/expressive/open-design.json index dfa641507..175baed3d 100644 --- a/plugins/_official/design-systems/expressive/open-design.json +++ b/plugins/_official/design-systems/expressive/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Expressive design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Expressive design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Expressive design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/fantasy/open-design.json b/plugins/_official/design-systems/fantasy/open-design.json index 76153b285..9f6a0a9f6 100644 --- a/plugins/_official/design-systems/fantasy/open-design.json +++ b/plugins/_official/design-systems/fantasy/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Fantasy design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Fantasy design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Fantasy design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/ferrari/open-design.json b/plugins/_official/design-systems/ferrari/open-design.json index 2263f32c2..5106f05ee 100644 --- a/plugins/_official/design-systems/ferrari/open-design.json +++ b/plugins/_official/design-systems/ferrari/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Ferrari design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Ferrari design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Ferrari design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/figma/open-design.json b/plugins/_official/design-systems/figma/open-design.json index 322934c38..1ff621c9a 100644 --- a/plugins/_official/design-systems/figma/open-design.json +++ b/plugins/_official/design-systems/figma/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Figma design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Figma design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Figma design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/flat/open-design.json b/plugins/_official/design-systems/flat/open-design.json index f3d7bbd1b..830524a9b 100644 --- a/plugins/_official/design-systems/flat/open-design.json +++ b/plugins/_official/design-systems/flat/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Flat design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Flat design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Flat design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/framer/open-design.json b/plugins/_official/design-systems/framer/open-design.json index d11c4b8b1..26ef12685 100644 --- a/plugins/_official/design-systems/framer/open-design.json +++ b/plugins/_official/design-systems/framer/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Framer design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Framer design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Framer design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/friendly/open-design.json b/plugins/_official/design-systems/friendly/open-design.json index 45f311117..a0cf599f1 100644 --- a/plugins/_official/design-systems/friendly/open-design.json +++ b/plugins/_official/design-systems/friendly/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Friendly design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Friendly design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Friendly design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/futuristic/open-design.json b/plugins/_official/design-systems/futuristic/open-design.json index b4c6a92db..e18965e93 100644 --- a/plugins/_official/design-systems/futuristic/open-design.json +++ b/plugins/_official/design-systems/futuristic/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Futuristic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Futuristic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Futuristic design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/github/open-design.json b/plugins/_official/design-systems/github/open-design.json index ff3c1c36c..a62b2e62a 100644 --- a/plugins/_official/design-systems/github/open-design.json +++ b/plugins/_official/design-systems/github/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the GitHub design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the GitHub design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the GitHub design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/glassmorphism/open-design.json b/plugins/_official/design-systems/glassmorphism/open-design.json index 2e0e23294..dfe113c2e 100644 --- a/plugins/_official/design-systems/glassmorphism/open-design.json +++ b/plugins/_official/design-systems/glassmorphism/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Glassmorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Glassmorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Glassmorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/gradient/open-design.json b/plugins/_official/design-systems/gradient/open-design.json index fb3785caa..5f0d00c9a 100644 --- a/plugins/_official/design-systems/gradient/open-design.json +++ b/plugins/_official/design-systems/gradient/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Gradient design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Gradient design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Gradient design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/hashicorp/open-design.json b/plugins/_official/design-systems/hashicorp/open-design.json index e0c36cef0..e0b5c6e44 100644 --- a/plugins/_official/design-systems/hashicorp/open-design.json +++ b/plugins/_official/design-systems/hashicorp/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the HashiCorp design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the HashiCorp design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the HashiCorp design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/huggingface/open-design.json b/plugins/_official/design-systems/huggingface/open-design.json index 753e4828b..553a23040 100644 --- a/plugins/_official/design-systems/huggingface/open-design.json +++ b/plugins/_official/design-systems/huggingface/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Hugging Face design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Hugging Face design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Hugging Face design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/ibm/open-design.json b/plugins/_official/design-systems/ibm/open-design.json index 05ba76ba0..51d21ddf1 100644 --- a/plugins/_official/design-systems/ibm/open-design.json +++ b/plugins/_official/design-systems/ibm/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the IBM design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the IBM design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the IBM design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/intercom/open-design.json b/plugins/_official/design-systems/intercom/open-design.json index a31d77973..b08ebabbd 100644 --- a/plugins/_official/design-systems/intercom/open-design.json +++ b/plugins/_official/design-systems/intercom/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Intercom design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Intercom design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Intercom design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/kami/open-design.json b/plugins/_official/design-systems/kami/open-design.json index 2e8cc921a..7e04c22a1 100644 --- a/plugins/_official/design-systems/kami/open-design.json +++ b/plugins/_official/design-systems/kami/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the kami (紙 / 纸) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Use this plugin for the following Chinese-language task: Generate a {{artifactKind}} using the kami (紙 / 纸) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "Generate a {{artifactKind}} using the kami (紙 / 纸) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/kraken/open-design.json b/plugins/_official/design-systems/kraken/open-design.json index 863952365..615801c44 100644 --- a/plugins/_official/design-systems/kraken/open-design.json +++ b/plugins/_official/design-systems/kraken/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Kraken design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Kraken design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Kraken design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/lamborghini/open-design.json b/plugins/_official/design-systems/lamborghini/open-design.json index 5ae8fa316..a0a9a66bc 100644 --- a/plugins/_official/design-systems/lamborghini/open-design.json +++ b/plugins/_official/design-systems/lamborghini/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Lamborghini design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Lamborghini design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Lamborghini design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/levels/open-design.json b/plugins/_official/design-systems/levels/open-design.json index e7927a889..73b74c61e 100644 --- a/plugins/_official/design-systems/levels/open-design.json +++ b/plugins/_official/design-systems/levels/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Levels design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Levels design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Levels design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/linear-app/open-design.json b/plugins/_official/design-systems/linear-app/open-design.json index cbe68b74a..a8e344086 100644 --- a/plugins/_official/design-systems/linear-app/open-design.json +++ b/plugins/_official/design-systems/linear-app/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Linear design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Linear design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Linear design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/lingo/open-design.json b/plugins/_official/design-systems/lingo/open-design.json index 543160bba..bbc7c5dac 100644 --- a/plugins/_official/design-systems/lingo/open-design.json +++ b/plugins/_official/design-systems/lingo/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Lingo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Lingo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Lingo design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/lovable/open-design.json b/plugins/_official/design-systems/lovable/open-design.json index 9aa16d6d6..aea717b84 100644 --- a/plugins/_official/design-systems/lovable/open-design.json +++ b/plugins/_official/design-systems/lovable/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Lovable design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Lovable design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Lovable design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/luxury/open-design.json b/plugins/_official/design-systems/luxury/open-design.json index 856c62442..df2d21983 100644 --- a/plugins/_official/design-systems/luxury/open-design.json +++ b/plugins/_official/design-systems/luxury/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Luxury design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Luxury design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Luxury design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/mastercard/open-design.json b/plugins/_official/design-systems/mastercard/open-design.json index 3c029946e..a8b0b0027 100644 --- a/plugins/_official/design-systems/mastercard/open-design.json +++ b/plugins/_official/design-systems/mastercard/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Mastercard design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Mastercard design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Mastercard design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/material/open-design.json b/plugins/_official/design-systems/material/open-design.json index 41750e1da..5a5fd6827 100644 --- a/plugins/_official/design-systems/material/open-design.json +++ b/plugins/_official/design-systems/material/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Material design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Material design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Material design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/meta/open-design.json b/plugins/_official/design-systems/meta/open-design.json index 42a8b3a27..b4a5d7397 100644 --- a/plugins/_official/design-systems/meta/open-design.json +++ b/plugins/_official/design-systems/meta/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Meta (Store) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Meta (Store) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Meta (Store) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/minimal/open-design.json b/plugins/_official/design-systems/minimal/open-design.json index 8fd5aa160..bc6161177 100644 --- a/plugins/_official/design-systems/minimal/open-design.json +++ b/plugins/_official/design-systems/minimal/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Minimal design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Minimal design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Minimal design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/minimax/open-design.json b/plugins/_official/design-systems/minimax/open-design.json index 4802ce235..ea7d74eac 100644 --- a/plugins/_official/design-systems/minimax/open-design.json +++ b/plugins/_official/design-systems/minimax/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the MiniMax design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the MiniMax design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the MiniMax design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/mintlify/open-design.json b/plugins/_official/design-systems/mintlify/open-design.json index f431571cf..e28450fb4 100644 --- a/plugins/_official/design-systems/mintlify/open-design.json +++ b/plugins/_official/design-systems/mintlify/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Mintlify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Mintlify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Mintlify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/miro/open-design.json b/plugins/_official/design-systems/miro/open-design.json index 7dff1e178..8a7fb8b4b 100644 --- a/plugins/_official/design-systems/miro/open-design.json +++ b/plugins/_official/design-systems/miro/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Miro design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Miro design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Miro design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/mission-control/open-design.json b/plugins/_official/design-systems/mission-control/open-design.json index 48be96a8d..d4f894494 100644 --- a/plugins/_official/design-systems/mission-control/open-design.json +++ b/plugins/_official/design-systems/mission-control/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Mission Control Design System design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Mission Control Design System design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Mission Control Design System design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/mistral-ai/open-design.json b/plugins/_official/design-systems/mistral-ai/open-design.json index ab5677fef..fdb7be630 100644 --- a/plugins/_official/design-systems/mistral-ai/open-design.json +++ b/plugins/_official/design-systems/mistral-ai/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Mistral AI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Mistral AI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Mistral AI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/modern/open-design.json b/plugins/_official/design-systems/modern/open-design.json index f07596d25..b644c2882 100644 --- a/plugins/_official/design-systems/modern/open-design.json +++ b/plugins/_official/design-systems/modern/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Modern design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Modern design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Modern design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/mongodb/open-design.json b/plugins/_official/design-systems/mongodb/open-design.json index c709a0230..c16740156 100644 --- a/plugins/_official/design-systems/mongodb/open-design.json +++ b/plugins/_official/design-systems/mongodb/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the MongoDB design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the MongoDB design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the MongoDB design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/mono/open-design.json b/plugins/_official/design-systems/mono/open-design.json index fcfc6c553..57207d096 100644 --- a/plugins/_official/design-systems/mono/open-design.json +++ b/plugins/_official/design-systems/mono/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Mono design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Mono design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Mono design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/neobrutalism/open-design.json b/plugins/_official/design-systems/neobrutalism/open-design.json index b47b021cc..4396e6d2a 100644 --- a/plugins/_official/design-systems/neobrutalism/open-design.json +++ b/plugins/_official/design-systems/neobrutalism/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Neobrutalism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Neobrutalism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Neobrutalism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/neon/open-design.json b/plugins/_official/design-systems/neon/open-design.json index cf2e89dbe..3dcea8d22 100644 --- a/plugins/_official/design-systems/neon/open-design.json +++ b/plugins/_official/design-systems/neon/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Neon design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Neon design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Neon design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/neumorphism/open-design.json b/plugins/_official/design-systems/neumorphism/open-design.json index 3c78959ac..9af90ce93 100644 --- a/plugins/_official/design-systems/neumorphism/open-design.json +++ b/plugins/_official/design-systems/neumorphism/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Neumorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Neumorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Neumorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/nike/open-design.json b/plugins/_official/design-systems/nike/open-design.json index 557402285..510bce645 100644 --- a/plugins/_official/design-systems/nike/open-design.json +++ b/plugins/_official/design-systems/nike/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Nike design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Nike design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Nike design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/notion/open-design.json b/plugins/_official/design-systems/notion/open-design.json index 95dfb4478..fd1506d8e 100644 --- a/plugins/_official/design-systems/notion/open-design.json +++ b/plugins/_official/design-systems/notion/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Notion design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Notion design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Notion design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/nvidia/open-design.json b/plugins/_official/design-systems/nvidia/open-design.json index 361295458..726daa88d 100644 --- a/plugins/_official/design-systems/nvidia/open-design.json +++ b/plugins/_official/design-systems/nvidia/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the NVIDIA design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the NVIDIA design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the NVIDIA design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/ollama/open-design.json b/plugins/_official/design-systems/ollama/open-design.json index ea37472a8..7d620e8d0 100644 --- a/plugins/_official/design-systems/ollama/open-design.json +++ b/plugins/_official/design-systems/ollama/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Ollama design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Ollama design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Ollama design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/openai/open-design.json b/plugins/_official/design-systems/openai/open-design.json index 178e7db7d..25f089829 100644 --- a/plugins/_official/design-systems/openai/open-design.json +++ b/plugins/_official/design-systems/openai/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the OpenAI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the OpenAI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the OpenAI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/opencode-ai/open-design.json b/plugins/_official/design-systems/opencode-ai/open-design.json index ca3091250..b361729a4 100644 --- a/plugins/_official/design-systems/opencode-ai/open-design.json +++ b/plugins/_official/design-systems/opencode-ai/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the OpenCode design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the OpenCode design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the OpenCode design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/pacman/open-design.json b/plugins/_official/design-systems/pacman/open-design.json index 0848ae4bb..f590975f6 100644 --- a/plugins/_official/design-systems/pacman/open-design.json +++ b/plugins/_official/design-systems/pacman/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Pacman design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Pacman design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Pacman design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/paper/open-design.json b/plugins/_official/design-systems/paper/open-design.json index e0ffd8e3e..b397b4eb1 100644 --- a/plugins/_official/design-systems/paper/open-design.json +++ b/plugins/_official/design-systems/paper/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Paper design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Paper design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Paper design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/perspective/open-design.json b/plugins/_official/design-systems/perspective/open-design.json index d781db9b6..3cd8b3b66 100644 --- a/plugins/_official/design-systems/perspective/open-design.json +++ b/plugins/_official/design-systems/perspective/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Perspective design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Perspective design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Perspective design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/pinterest/open-design.json b/plugins/_official/design-systems/pinterest/open-design.json index 781fb97e4..a1d476e73 100644 --- a/plugins/_official/design-systems/pinterest/open-design.json +++ b/plugins/_official/design-systems/pinterest/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Pinterest design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Pinterest design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Pinterest design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/playstation/open-design.json b/plugins/_official/design-systems/playstation/open-design.json index ff8b0baf7..933cb1e39 100644 --- a/plugins/_official/design-systems/playstation/open-design.json +++ b/plugins/_official/design-systems/playstation/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the PlayStation design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the PlayStation design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the PlayStation design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/posthog/open-design.json b/plugins/_official/design-systems/posthog/open-design.json index 98174203e..ae4a6a4e2 100644 --- a/plugins/_official/design-systems/posthog/open-design.json +++ b/plugins/_official/design-systems/posthog/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the PostHog design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the PostHog design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the PostHog design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/premium/open-design.json b/plugins/_official/design-systems/premium/open-design.json index 4addbfaf8..f34e51058 100644 --- a/plugins/_official/design-systems/premium/open-design.json +++ b/plugins/_official/design-systems/premium/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Premium design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Premium design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Premium design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/professional/open-design.json b/plugins/_official/design-systems/professional/open-design.json index b40dda44e..2484dec66 100644 --- a/plugins/_official/design-systems/professional/open-design.json +++ b/plugins/_official/design-systems/professional/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Professional design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Professional design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Professional design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/publication/open-design.json b/plugins/_official/design-systems/publication/open-design.json index 1f2fc67be..d0ecfc505 100644 --- a/plugins/_official/design-systems/publication/open-design.json +++ b/plugins/_official/design-systems/publication/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Publication design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Publication design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Publication design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/raycast/open-design.json b/plugins/_official/design-systems/raycast/open-design.json index 11338c7d4..e4f4cb973 100644 --- a/plugins/_official/design-systems/raycast/open-design.json +++ b/plugins/_official/design-systems/raycast/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Raycast design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Raycast design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Raycast design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/refined/open-design.json b/plugins/_official/design-systems/refined/open-design.json index 6f03401fe..fade0c9ef 100644 --- a/plugins/_official/design-systems/refined/open-design.json +++ b/plugins/_official/design-systems/refined/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Refined design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Refined design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Refined design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/renault/open-design.json b/plugins/_official/design-systems/renault/open-design.json index 063bb411b..626f945d1 100644 --- a/plugins/_official/design-systems/renault/open-design.json +++ b/plugins/_official/design-systems/renault/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Renault design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Renault design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Renault design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/replicate/open-design.json b/plugins/_official/design-systems/replicate/open-design.json index 682faa147..85181fcfb 100644 --- a/plugins/_official/design-systems/replicate/open-design.json +++ b/plugins/_official/design-systems/replicate/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Replicate design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Replicate design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Replicate design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/resend/open-design.json b/plugins/_official/design-systems/resend/open-design.json index 2448f67e0..e2c0bfec3 100644 --- a/plugins/_official/design-systems/resend/open-design.json +++ b/plugins/_official/design-systems/resend/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Resend design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Resend design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Resend design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/retro/open-design.json b/plugins/_official/design-systems/retro/open-design.json index 3fd0335e0..6a40f61f0 100644 --- a/plugins/_official/design-systems/retro/open-design.json +++ b/plugins/_official/design-systems/retro/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Retro design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Retro design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Retro design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/revolut/open-design.json b/plugins/_official/design-systems/revolut/open-design.json index da64cf680..1791af53b 100644 --- a/plugins/_official/design-systems/revolut/open-design.json +++ b/plugins/_official/design-systems/revolut/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Revolut design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Revolut design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Revolut design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/runwayml/open-design.json b/plugins/_official/design-systems/runwayml/open-design.json index 654b7b33b..6bab679af 100644 --- a/plugins/_official/design-systems/runwayml/open-design.json +++ b/plugins/_official/design-systems/runwayml/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Runway design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Runway design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Runway design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/sanity/open-design.json b/plugins/_official/design-systems/sanity/open-design.json index d85d11ed7..5a64ff998 100644 --- a/plugins/_official/design-systems/sanity/open-design.json +++ b/plugins/_official/design-systems/sanity/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Sanity design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Sanity design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Sanity design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/sentry/open-design.json b/plugins/_official/design-systems/sentry/open-design.json index d84dd93b6..41dca8237 100644 --- a/plugins/_official/design-systems/sentry/open-design.json +++ b/plugins/_official/design-systems/sentry/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Sentry design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Sentry design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Sentry design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/shadcn/open-design.json b/plugins/_official/design-systems/shadcn/open-design.json index 3c6e31ded..af9d66107 100644 --- a/plugins/_official/design-systems/shadcn/open-design.json +++ b/plugins/_official/design-systems/shadcn/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Shadcn design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Shadcn design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Shadcn design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/shopify/open-design.json b/plugins/_official/design-systems/shopify/open-design.json index 0787a6a36..00b946ae3 100644 --- a/plugins/_official/design-systems/shopify/open-design.json +++ b/plugins/_official/design-systems/shopify/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Shopify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Shopify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Shopify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/simple/open-design.json b/plugins/_official/design-systems/simple/open-design.json index ffd232eb9..142afb447 100644 --- a/plugins/_official/design-systems/simple/open-design.json +++ b/plugins/_official/design-systems/simple/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Simple design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Simple design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Simple design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/skeumorphism/open-design.json b/plugins/_official/design-systems/skeumorphism/open-design.json index 3f701b7a8..8db563384 100644 --- a/plugins/_official/design-systems/skeumorphism/open-design.json +++ b/plugins/_official/design-systems/skeumorphism/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Skeumorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Skeumorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Skeumorphism design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/sleek/open-design.json b/plugins/_official/design-systems/sleek/open-design.json index 27cbf645f..9d9357611 100644 --- a/plugins/_official/design-systems/sleek/open-design.json +++ b/plugins/_official/design-systems/sleek/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Sleek design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Sleek design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Sleek design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/spacex/open-design.json b/plugins/_official/design-systems/spacex/open-design.json index 19c42297c..7c058c25f 100644 --- a/plugins/_official/design-systems/spacex/open-design.json +++ b/plugins/_official/design-systems/spacex/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the SpaceX design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the SpaceX design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the SpaceX design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/spacious/open-design.json b/plugins/_official/design-systems/spacious/open-design.json index eed234e98..9c96f2dfb 100644 --- a/plugins/_official/design-systems/spacious/open-design.json +++ b/plugins/_official/design-systems/spacious/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Spacious design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Spacious design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Spacious design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/spotify/open-design.json b/plugins/_official/design-systems/spotify/open-design.json index 3436f51b8..f3d99a161 100644 --- a/plugins/_official/design-systems/spotify/open-design.json +++ b/plugins/_official/design-systems/spotify/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Spotify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Spotify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Spotify design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/starbucks/open-design.json b/plugins/_official/design-systems/starbucks/open-design.json index 6d1fde58e..62da4a85f 100644 --- a/plugins/_official/design-systems/starbucks/open-design.json +++ b/plugins/_official/design-systems/starbucks/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Starbucks design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Starbucks design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Starbucks design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/storytelling/open-design.json b/plugins/_official/design-systems/storytelling/open-design.json index 4da8ed154..6d62eca17 100644 --- a/plugins/_official/design-systems/storytelling/open-design.json +++ b/plugins/_official/design-systems/storytelling/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Storytelling design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Storytelling design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Storytelling design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/stripe/open-design.json b/plugins/_official/design-systems/stripe/open-design.json index 818fcbb13..87d494099 100644 --- a/plugins/_official/design-systems/stripe/open-design.json +++ b/plugins/_official/design-systems/stripe/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Stripe design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Stripe design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Stripe design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/supabase/open-design.json b/plugins/_official/design-systems/supabase/open-design.json index d874e531c..006266adf 100644 --- a/plugins/_official/design-systems/supabase/open-design.json +++ b/plugins/_official/design-systems/supabase/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Supabase design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Supabase design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Supabase design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/superhuman/open-design.json b/plugins/_official/design-systems/superhuman/open-design.json index 6660dc4a3..309334e19 100644 --- a/plugins/_official/design-systems/superhuman/open-design.json +++ b/plugins/_official/design-systems/superhuman/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Superhuman design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Superhuman design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Superhuman design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/tesla/open-design.json b/plugins/_official/design-systems/tesla/open-design.json index a1f2b69c4..6d2e384fe 100644 --- a/plugins/_official/design-systems/tesla/open-design.json +++ b/plugins/_official/design-systems/tesla/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Tesla design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Tesla design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Tesla design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/tetris/open-design.json b/plugins/_official/design-systems/tetris/open-design.json index cb4f47e63..8cd25b3b1 100644 --- a/plugins/_official/design-systems/tetris/open-design.json +++ b/plugins/_official/design-systems/tetris/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Tetris design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Tetris design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Tetris design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/theverge/open-design.json b/plugins/_official/design-systems/theverge/open-design.json index 97dfca099..ed4e24792 100644 --- a/plugins/_official/design-systems/theverge/open-design.json +++ b/plugins/_official/design-systems/theverge/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the The Verge design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the The Verge design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the The Verge design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/together-ai/open-design.json b/plugins/_official/design-systems/together-ai/open-design.json index 646a2b4d9..56366226a 100644 --- a/plugins/_official/design-systems/together-ai/open-design.json +++ b/plugins/_official/design-systems/together-ai/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Together AI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Together AI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Together AI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/totality-festival/open-design.json b/plugins/_official/design-systems/totality-festival/open-design.json index 6dcd329cc..60dfb5a06 100644 --- a/plugins/_official/design-systems/totality-festival/open-design.json +++ b/plugins/_official/design-systems/totality-festival/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Totality Festival design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Totality Festival design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Totality Festival design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/uber/open-design.json b/plugins/_official/design-systems/uber/open-design.json index 80c09d08b..fbb1091ad 100644 --- a/plugins/_official/design-systems/uber/open-design.json +++ b/plugins/_official/design-systems/uber/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Uber design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Uber design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Uber design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/urdu/open-design.json b/plugins/_official/design-systems/urdu/open-design.json index c96c48f8d..4af2708bd 100644 --- a/plugins/_official/design-systems/urdu/open-design.json +++ b/plugins/_official/design-systems/urdu/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Urdu Modern (Indus Script System) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Urdu Modern (Indus Script System) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Urdu Modern (Indus Script System) design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/vercel/open-design.json b/plugins/_official/design-systems/vercel/open-design.json index 5164cbff0..d28586854 100644 --- a/plugins/_official/design-systems/vercel/open-design.json +++ b/plugins/_official/design-systems/vercel/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Vercel design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Vercel design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Vercel design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/vibrant/open-design.json b/plugins/_official/design-systems/vibrant/open-design.json index e3c89dc93..cad882277 100644 --- a/plugins/_official/design-systems/vibrant/open-design.json +++ b/plugins/_official/design-systems/vibrant/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Vibrant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Vibrant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Vibrant design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/vintage/open-design.json b/plugins/_official/design-systems/vintage/open-design.json index 1dbafd1c3..01a5f6a6b 100644 --- a/plugins/_official/design-systems/vintage/open-design.json +++ b/plugins/_official/design-systems/vintage/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Vintage design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Vintage design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Vintage design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/vodafone/open-design.json b/plugins/_official/design-systems/vodafone/open-design.json index 53ca316f4..3bd656f7d 100644 --- a/plugins/_official/design-systems/vodafone/open-design.json +++ b/plugins/_official/design-systems/vodafone/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Vodafone design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Vodafone design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Vodafone design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/voltagent/open-design.json b/plugins/_official/design-systems/voltagent/open-design.json index 158d6bf10..1a948be70 100644 --- a/plugins/_official/design-systems/voltagent/open-design.json +++ b/plugins/_official/design-systems/voltagent/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the VoltAgent design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the VoltAgent design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the VoltAgent design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/warm-editorial/open-design.json b/plugins/_official/design-systems/warm-editorial/open-design.json index b86b71b05..f9f83aa5b 100644 --- a/plugins/_official/design-systems/warm-editorial/open-design.json +++ b/plugins/_official/design-systems/warm-editorial/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Warm Editorial design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Warm Editorial design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Warm Editorial design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/warp/open-design.json b/plugins/_official/design-systems/warp/open-design.json index e836bcffa..3deca1c72 100644 --- a/plugins/_official/design-systems/warp/open-design.json +++ b/plugins/_official/design-systems/warp/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Warp design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Warp design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Warp design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/webflow/open-design.json b/plugins/_official/design-systems/webflow/open-design.json index 5a33cc00f..6a9204a67 100644 --- a/plugins/_official/design-systems/webflow/open-design.json +++ b/plugins/_official/design-systems/webflow/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Webflow design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Webflow design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Webflow design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/wired/open-design.json b/plugins/_official/design-systems/wired/open-design.json index e88cbb4ad..349baea77 100644 --- a/plugins/_official/design-systems/wired/open-design.json +++ b/plugins/_official/design-systems/wired/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the WIRED design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the WIRED design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the WIRED design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/wise/open-design.json b/plugins/_official/design-systems/wise/open-design.json index b625f2875..a4a228b9a 100644 --- a/plugins/_official/design-systems/wise/open-design.json +++ b/plugins/_official/design-systems/wise/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Wise design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Wise design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Wise design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/x-ai/open-design.json b/plugins/_official/design-systems/x-ai/open-design.json index 8319ad368..cbd50eba9 100644 --- a/plugins/_official/design-systems/x-ai/open-design.json +++ b/plugins/_official/design-systems/x-ai/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the xAI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the xAI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the xAI design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/xiaohongshu/open-design.json b/plugins/_official/design-systems/xiaohongshu/open-design.json index 6af226b6e..8b034d707 100644 --- a/plugins/_official/design-systems/xiaohongshu/open-design.json +++ b/plugins/_official/design-systems/xiaohongshu/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Xiaohongshu design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Xiaohongshu design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Xiaohongshu design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/design-systems/zapier/open-design.json b/plugins/_official/design-systems/zapier/open-design.json index b5c8c300b..e9cc3a6a0 100644 --- a/plugins/_official/design-systems/zapier/open-design.json +++ b/plugins/_official/design-systems/zapier/open-design.json @@ -18,7 +18,10 @@ "scenario": "design", "surface": "web", "useCase": { - "query": "Generate a {{artifactKind}} using the Zapier design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + "query": { + "en": "Generate a {{artifactKind}} using the Zapier design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md.", + "zh-CN": "使用这个插件完成以下任务:Generate a {{artifactKind}} using the Zapier design system. Stay faithful to its colour palette, typography, spacing, iconography, and component vocabulary as documented in DESIGN.md." + } }, "inputs": [ { diff --git a/plugins/_official/examples/audio-jingle/open-design.json b/plugins/_official/examples/audio-jingle/open-design.json index 417e7a75e..b777bf38b 100644 --- a/plugins/_official/examples/audio-jingle/open-design.json +++ b/plugins/_official/examples/audio-jingle/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "A 30-second upbeat indie-pop jingle for a coffee shop launch — warm\nelectric piano lead, brushed drums, gentle bass, a single sun-soaked\n\"ahhh\" choir on the chorus. No vocals. Loop-friendly tail.", + "query": { + "en": "A 30-second upbeat indie-pop jingle for a coffee shop launch — warm\nelectric piano lead, brushed drums, gentle bass, a single sun-soaked\n\"ahhh\" choir on the chorus. No vocals. Loop-friendly tail.", + "zh-CN": "使用这个插件完成以下任务:A 30-second upbeat indie-pop jingle for a coffee shop launch — warm\nelectric piano lead, brushed drums, gentle bass, a single sun-soaked\n\"ahhh\" choir on the chorus. No vocals. Loop-friendly tail." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/blog-post/open-design.json b/plugins/_official/examples/blog-post/open-design.json index ff9e07640..f163ef974 100644 --- a/plugins/_official/examples/blog-post/open-design.json +++ b/plugins/_official/examples/blog-post/open-design.json @@ -44,7 +44,10 @@ "entry": "./example.html" }, "useCase": { - "query": "A long-form article / blog post — masthead, hero image placeholder, article body with figures and pull quotes, author byline, related posts. Use when the brief asks for \"blog\", \"article\", \"post\", \"essay\", or \"case study\".", + "query": { + "en": "A long-form article / blog post — masthead, hero image placeholder, article body with figures and pull quotes, author byline, related posts. Use when the brief asks for \"blog\", \"article\", \"post\", \"essay\", or \"case study\".", + "zh-CN": "使用这个插件完成以下任务:A long-form article / blog post — masthead, hero image placeholder, article body with figures and pull quotes, author byline, related posts. Use when the brief asks for \"blog\", \"article\", \"post\", \"essay\", or \"case study\"." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/clinical-case-report/open-design.json b/plugins/_official/examples/clinical-case-report/open-design.json index 2f34f1700..c5e59c4b3 100644 --- a/plugins/_official/examples/clinical-case-report/open-design.json +++ b/plugins/_official/examples/clinical-case-report/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "58-year-old male with 2 hours of substernal chest pain radiating to the left arm, diaphoresis, and ST elevation in leads II, III, aVF. Generate a full emergency cardiology case presentation.", + "query": { + "en": "58-year-old male with 2 hours of substernal chest pain radiating to the left arm, diaphoresis, and ST elevation in leads II, III, aVF. Generate a full emergency cardiology case presentation.", + "zh-CN": "使用这个插件完成以下任务:58-year-old male with 2 hours of substernal chest pain radiating to the left arm, diaphoresis, and ST elevation in leads II, III, aVF. Generate a full emergency cardiology case presentation." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/critique/open-design.json b/plugins/_official/examples/critique/open-design.json index d5f3aef0d..0cb6b1bfa 100644 --- a/plugins/_official/examples/critique/open-design.json +++ b/plugins/_official/examples/critique/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Run a 5-dimension critique on the magazine-web-ppt deck I just generated — score philosophy / hierarchy / detail / function / innovation, give me Keep / Fix / Quick-wins.", + "query": { + "en": "Run a 5-dimension critique on the magazine-web-ppt deck I just generated — score philosophy / hierarchy / detail / function / innovation, give me Keep / Fix / Quick-wins.", + "zh-CN": "使用这个插件完成以下任务:Run a 5-dimension critique on the magazine-web-ppt deck I just generated — score philosophy / hierarchy / detail / function / innovation, give me Keep / Fix / Quick-wins." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/dashboard/open-design.json b/plugins/_official/examples/dashboard/open-design.json index 5331589b5..c03ab171c 100644 --- a/plugins/_official/examples/dashboard/open-design.json +++ b/plugins/_official/examples/dashboard/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Admin / analytics dashboard in a single HTML file. Fixed left sidebar, top bar with user/search, main grid of KPI cards and one or two charts. Use when the brief asks for a \"dashboard\", \"admin\", \"analytics\", or \"control panel\" screen.", + "query": { + "en": "Admin / analytics dashboard in a single HTML file. Fixed left sidebar, top bar with user/search, main grid of KPI cards and one or two charts. Use when the brief asks for a \"dashboard\", \"admin\", \"analytics\", or \"control panel\" screen.", + "zh-CN": "使用这个插件完成以下任务:Admin / analytics dashboard in a single HTML file. Fixed left sidebar, top bar with user/search, main grid of KPI cards and one or two charts. Use when the brief asks for a \"dashboard\", \"admin\", \"analytics\", or \"control panel\" screen." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/dating-web/open-design.json b/plugins/_official/examples/dating-web/open-design.json index f6ccd602d..5122971b5 100644 --- a/plugins/_official/examples/dating-web/open-design.json +++ b/plugins/_official/examples/dating-web/open-design.json @@ -44,7 +44,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design ‘mutuals’ — a dating site for X posters. Daily digest dashboard with stats, mutual-matches bar chart, and a community ticker.", + "query": { + "en": "Design ‘mutuals’ — a dating site for X posters. Daily digest dashboard with stats, mutual-matches bar chart, and a community ticker.", + "zh-CN": "使用这个插件完成以下任务:Design ‘mutuals’ — a dating site for X posters. Daily digest dashboard with stats, mutual-matches bar chart, and a community ticker." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/dcf-valuation/open-design.json b/plugins/_official/examples/dcf-valuation/open-design.json index fe3023111..2cc4a9696 100644 --- a/plugins/_official/examples/dcf-valuation/open-design.json +++ b/plugins/_official/examples/dcf-valuation/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Discounted cash flow valuation and intrinsic value analysis for public companies. Use when the brief asks for DCF, fair value, intrinsic value, price target, undervalued or overvalued analysis, or \"what is this company worth?\"" + "query": { + "en": "Discounted cash flow valuation and intrinsic value analysis for public companies. Use when the brief asks for DCF, fair value, intrinsic value, price target, undervalued or overvalued analysis, or \"what is this company worth?\"", + "zh-CN": "使用这个插件完成以下任务:Discounted cash flow valuation and intrinsic value analysis for public companies. Use when the brief asks for DCF, fair value, intrinsic value, price target, undervalued or overvalued analysis, or \"what is this company worth?\"" + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/design-brief/open-design.json b/plugins/_official/examples/design-brief/open-design.json index 20bc562ae..b8eb4e6d5 100644 --- a/plugins/_official/examples/design-brief/open-design.json +++ b/plugins/_official/examples/design-brief/open-design.json @@ -41,7 +41,10 @@ "entry": "./brief-preview.html" }, "useCase": { - "query": "Parse a structured design brief written in I-Lang protocol format into a concrete design spec. Eliminates ambiguity from vague requests like \"make it professional\" by requiring explicit dimensions: palette, typography, layout, mood, density, and constraints. Trigger keywords: \"design brief\", \"create a design brief\", \"i" + "query": { + "en": "Parse a structured design brief written in I-Lang protocol format into a concrete design spec. Eliminates ambiguity from vague requests like \"make it professional\" by requiring explicit dimensions: palette, typography, layout, mood, density, and constraints. Trigger keywords: \"design brief\", \"create a design brief\", \"i", + "zh-CN": "使用这个插件完成以下任务:Parse a structured design brief written in I-Lang protocol format into a concrete design spec. Eliminates ambiguity from vague requests like \"make it professional\" by requiring explicit dimensions: palette, typography, layout, mood, density, and constraints. Trigger keywords: \"design brief\", \"create a design brief\", \"i" + } }, "inputs": [ { diff --git a/plugins/_official/examples/digital-eguide/open-design.json b/plugins/_official/examples/digital-eguide/open-design.json index dd5a76f5a..4f85c5602 100644 --- a/plugins/_official/examples/digital-eguide/open-design.json +++ b/plugins/_official/examples/digital-eguide/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design 'The Creator's Style & Format Guide' — cover page and one inside spread, lifestyle creator brand.", + "query": { + "en": "Design 'The Creator's Style & Format Guide' — cover page and one inside spread, lifestyle creator brand.", + "zh-CN": "使用这个插件完成以下任务:Design 'The Creator's Style & Format Guide' — cover page and one inside spread, lifestyle creator brand." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/docs-page/open-design.json b/plugins/_official/examples/docs-page/open-design.json index 1275bd0f6..ef8622ebe 100644 --- a/plugins/_official/examples/docs-page/open-design.json +++ b/plugins/_official/examples/docs-page/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\".", + "query": { + "en": "A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\".", + "zh-CN": "使用这个插件完成以下任务:A documentation page — inline-start nav, scrollable article body, inline-end table of contents. Use when the brief mentions \"docs\", \"documentation\", \"guide\", \"API reference\", or \"tutorial\"." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/email-marketing/open-design.json b/plugins/_official/examples/email-marketing/open-design.json index 2302a5db5..eb3a14a91 100644 --- a/plugins/_official/examples/email-marketing/open-design.json +++ b/plugins/_official/examples/email-marketing/open-design.json @@ -44,7 +44,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design a launch email for a sporty running shoe brand — masthead, hero, big headline lockup, specs grid, CTA.", + "query": { + "en": "Design a launch email for a sporty running shoe brand — masthead, hero, big headline lockup, specs grid, CTA.", + "zh-CN": "使用这个插件完成以下任务:Design a launch email for a sporty running shoe brand — masthead, hero, big headline lockup, specs grid, CTA." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/eng-runbook/open-design.json b/plugins/_official/examples/eng-runbook/open-design.json index 149811a47..d626a0cbf 100644 --- a/plugins/_official/examples/eng-runbook/open-design.json +++ b/plugins/_official/examples/eng-runbook/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Write a runbook for our auth service — alerts, dashboards, common procedures, on-call rotation.", + "query": { + "en": "Write a runbook for our auth service — alerts, dashboards, common procedures, on-call rotation.", + "zh-CN": "使用这个插件完成以下任务:Write a runbook for our auth service — alerts, dashboards, common procedures, on-call rotation." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/finance-report/open-design.json b/plugins/_official/examples/finance-report/open-design.json index 70c07fbec..4b7c3edaf 100644 --- a/plugins/_official/examples/finance-report/open-design.json +++ b/plugins/_official/examples/finance-report/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build me a Q3 financial report for an early-stage SaaS — MRR, burn, gross margin, top accounts.", + "query": { + "en": "Build me a Q3 financial report for an early-stage SaaS — MRR, burn, gross margin, top accounts.", + "zh-CN": "使用这个插件完成以下任务:Build me a Q3 financial report for an early-stage SaaS — MRR, burn, gross margin, top accounts." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/flowai-live-dashboard-template/open-design.json b/plugins/_official/examples/flowai-live-dashboard-template/open-design.json index 8ff9e2cbf..f349bb026 100644 --- a/plugins/_official/examples/flowai-live-dashboard-template/open-design.json +++ b/plugins/_official/examples/flowai-live-dashboard-template/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Create a FlowAI-style team management dashboard with Team Members, Team Details and Activity Log tabs, KPI cards, a member table with status badges, a role-distribution bar chart, an online-presence sparkline, top contributors, light/dark mode, and CSV export.", + "query": { + "en": "Create a FlowAI-style team management dashboard with Team Members, Team Details and Activity Log tabs, KPI cards, a member table with status badges, a role-distribution bar chart, an online-presence sparkline, top contributors, light/dark mode, and CSV export.", + "zh-CN": "使用这个插件完成以下任务:Create a FlowAI-style team management dashboard with Team Members, Team Details and Activity Log tabs, KPI cards, a member table with status badges, a role-distribution bar chart, an online-presence sparkline, top contributors, light/dark mode, and CSV export." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/gamified-app/open-design.json b/plugins/_official/examples/gamified-app/open-design.json index 3c8ea8731..b993298a8 100644 --- a/plugins/_official/examples/gamified-app/open-design.json +++ b/plugins/_official/examples/gamified-app/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design a gamified life-management app — multi-screen mobile prototype: cover poster, today's quests with XP, and a quest detail. ‘Daily quests for becoming a better human.’", + "query": { + "en": "Design a gamified life-management app — multi-screen mobile prototype: cover poster, today's quests with XP, and a quest detail. ‘Daily quests for becoming a better human.’", + "zh-CN": "使用这个插件完成以下任务:Design a gamified life-management app — multi-screen mobile prototype: cover poster, today's quests with XP, and a quest detail. ‘Daily quests for becoming a better human.’" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/github-dashboard/open-design.json b/plugins/_official/examples/github-dashboard/open-design.json index 0f2284848..970598502 100644 --- a/plugins/_official/examples/github-dashboard/open-design.json +++ b/plugins/_official/examples/github-dashboard/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build a GitHub dashboard for nexu-io/open-design — stars, forks, contributors, issues, PRs, recent activity, and top contributors.", + "query": { + "en": "Build a GitHub dashboard for nexu-io/open-design — stars, forks, contributors, issues, PRs, recent activity, and top contributors.", + "zh-CN": "使用这个插件完成以下任务:Build a GitHub dashboard for nexu-io/open-design — stars, forks, contributors, issues, PRs, recent activity, and top contributors." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/guizang-ppt/open-design.json b/plugins/_official/examples/guizang-ppt/open-design.json index 59da9bbf3..74b5a3a10 100644 --- a/plugins/_official/examples/guizang-ppt/open-design.json +++ b/plugins/_official/examples/guizang-ppt/open-design.json @@ -44,7 +44,10 @@ "entry": "./index.html" }, "useCase": { - "query": "帮我做一份杂志风的 PPT —— 关于'一人公司 · 被 AI 折叠的组织',25 分钟分享会,目标受众是设计师 + 创业者。先推荐一个方向(Monocle / WIRED / Kinfolk / Domus / Lab)让我选。" + "query": { + "en": "Use this plugin for the following Chinese-language task: 帮我做一份杂志风的 PPT —— 关于'一人公司 · 被 AI 折叠的组织',25 分钟分享会,目标受众是设计师 + 创业者。先推荐一个方向(Monocle / WIRED / Kinfolk / Domus / Lab)让我选。", + "zh-CN": "帮我做一份杂志风的 PPT —— 关于'一人公司 · 被 AI 折叠的组织',25 分钟分享会,目标受众是设计师 + 创业者。先推荐一个方向(Monocle / WIRED / Kinfolk / Domus / Lab)让我选。" + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/hatch-pet/open-design.json b/plugins/_official/examples/hatch-pet/open-design.json index 9f15942a5..e67f1b072 100644 --- a/plugins/_official/examples/hatch-pet/open-design.json +++ b/plugins/_official/examples/hatch-pet/open-design.json @@ -40,7 +40,10 @@ "entry": "./final/spritesheet.png" }, "useCase": { - "query": "Hatch me a tiny pixel-art shiba pet — friendly, sitting upright, with a small pomegranate prop. Use the hatch-pet skill end-to-end." + "query": { + "en": "Hatch me a tiny pixel-art shiba pet — friendly, sitting upright, with a small pomegranate prop. Use the hatch-pet skill end-to-end.", + "zh-CN": "使用这个插件完成以下任务:Hatch me a tiny pixel-art shiba pet — friendly, sitting upright, with a small pomegranate prop. Use the hatch-pet skill end-to-end." + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/hr-onboarding/open-design.json b/plugins/_official/examples/hr-onboarding/open-design.json index 1e2ab189d..53be40c52 100644 --- a/plugins/_official/examples/hr-onboarding/open-design.json +++ b/plugins/_official/examples/hr-onboarding/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build a 30-day onboarding plan for a new product designer joining a 40-person startup.", + "query": { + "en": "Build a 30-day onboarding plan for a new product designer joining a 40-person startup.", + "zh-CN": "使用这个插件完成以下任务:Build a 30-day onboarding plan for a new product designer joining a 40-person startup." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-course-module/open-design.json b/plugins/_official/examples/html-ppt-course-module/open-design.json index a74713682..14c7fab7d 100644 --- a/plugins/_official/examples/html-ppt-course-module/open-design.json +++ b/plugins/_official/examples/html-ppt-course-module/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Use the html-ppt-course-module template to build a 7-slide module deck. Confirm: module title, 3-5 learning objectives (these stick on the left rail), and the MCQ self-check question. Then assemble the deck with serif headings on warm paper.", + "query": { + "en": "Use the html-ppt-course-module template to build a 7-slide module deck. Confirm: module title, 3-5 learning objectives (these stick on the left rail), and the MCQ self-check question. Then assemble the deck with serif headings on warm paper.", + "zh-CN": "使用这个插件完成以下任务:Use the html-ppt-course-module template to build a 7-slide module deck. Confirm: module title, 3-5 learning objectives (these stick on the left rail), and the MCQ self-check question. Then assemble the deck with serif headings on warm paper." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-dir-key-nav-minimal/open-design.json b/plugins/_official/examples/html-ppt-dir-key-nav-minimal/open-design.json index 6821c4518..2b75464ce 100644 --- a/plugins/_official/examples/html-ppt-dir-key-nav-minimal/open-design.json +++ b/plugins/_official/examples/html-ppt-dir-key-nav-minimal/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-dir-key-nav-minimal 模板做一份 8 页极简 keynote。每页一个单色背景 + 一句 160px 大标题 + 几条箭头列表。先告诉我演讲主题,然后帮我把 8 个核心观点拍成 8 页(每页一个 idea)。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-dir-key-nav-minimal 模板做一份 8 页极简 keynote。每页一个单色背景 + 一句 160px 大标题 + 几条箭头列表。先告诉我演讲主题,然后帮我把 8 个核心观点拍成 8 页(每页一个 idea)。", + "zh-CN": "用 html-ppt-dir-key-nav-minimal 模板做一份 8 页极简 keynote。每页一个单色背景 + 一句 160px 大标题 + 几条箭头列表。先告诉我演讲主题,然后帮我把 8 个核心观点拍成 8 页(每页一个 idea)。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-graphify-dark-graph/open-design.json b/plugins/_official/examples/html-ppt-graphify-dark-graph/open-design.json index 724e8d4d5..3a63b10dc 100644 --- a/plugins/_official/examples/html-ppt-graphify-dark-graph/open-design.json +++ b/plugins/_official/examples/html-ppt-graphify-dark-graph/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-graphify-dark-graph 模板做一份 dev-tool 发布会 PPT。深夜渐变背景 + 力导向图谱封面 + 彩虹标题 + JetBrains Mono 命令行。先确认:工具名、核心能力、demo 步骤;要不要现场敲 CLI。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-graphify-dark-graph 模板做一份 dev-tool 发布会 PPT。深夜渐变背景 + 力导向图谱封面 + 彩虹标题 + JetBrains Mono 命令行。先确认:工具名、核心能力、demo 步骤;要不要现场敲 CLI。", + "zh-CN": "用 html-ppt-graphify-dark-graph 模板做一份 dev-tool 发布会 PPT。深夜渐变背景 + 力导向图谱封面 + 彩虹标题 + JetBrains Mono 命令行。先确认:工具名、核心能力、demo 步骤;要不要现场敲 CLI。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-hermes-cyber-terminal/open-design.json b/plugins/_official/examples/html-ppt-hermes-cyber-terminal/open-design.json index b9a7d8d90..746c794ad 100644 --- a/plugins/_official/examples/html-ppt-hermes-cyber-terminal/open-design.json +++ b/plugins/_official/examples/html-ppt-hermes-cyber-terminal/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-hermes-cyber-terminal 模板做一份 CLI / agent 测评 PPT。深色终端风 + scanlines + 命令行标题 + benchmark 柱状图。先确认:被测评对象、3-5 个对比维度、benchmark 数据。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-hermes-cyber-terminal 模板做一份 CLI / agent 测评 PPT。深色终端风 + scanlines + 命令行标题 + benchmark 柱状图。先确认:被测评对象、3-5 个对比维度、benchmark 数据。", + "zh-CN": "用 html-ppt-hermes-cyber-terminal 模板做一份 CLI / agent 测评 PPT。深色终端风 + scanlines + 命令行标题 + benchmark 柱状图。先确认:被测评对象、3-5 个对比维度、benchmark 数据。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-knowledge-arch-blueprint/open-design.json b/plugins/_official/examples/html-ppt-knowledge-arch-blueprint/open-design.json index 02a1dac1e..5fa2a1814 100644 --- a/plugins/_official/examples/html-ppt-knowledge-arch-blueprint/open-design.json +++ b/plugins/_official/examples/html-ppt-knowledge-arch-blueprint/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-knowledge-arch-blueprint 模板做一份系统架构介绍 PPT。奶油纸底 + 锈红高亮 + 蓝图网格 + pipeline 抬高一格 + 衬线大字。先告诉我系统名 + 5-7 个核心模块 + 数据流方向,再写 8-10 页。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-knowledge-arch-blueprint 模板做一份系统架构介绍 PPT。奶油纸底 + 锈红高亮 + 蓝图网格 + pipeline 抬高一格 + 衬线大字。先告诉我系统名 + 5-7 个核心模块 + 数据流方向,再写 8-10 页。", + "zh-CN": "用 html-ppt-knowledge-arch-blueprint 模板做一份系统架构介绍 PPT。奶油纸底 + 锈红高亮 + 蓝图网格 + pipeline 抬高一格 + 衬线大字。先告诉我系统名 + 5-7 个核心模块 + 数据流方向,再写 8-10 页。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-obsidian-claude-gradient/open-design.json b/plugins/_official/examples/html-ppt-obsidian-claude-gradient/open-design.json index 248fed8a3..78b93225e 100644 --- a/plugins/_official/examples/html-ppt-obsidian-claude-gradient/open-design.json +++ b/plugins/_official/examples/html-ppt-obsidian-claude-gradient/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-obsidian-claude-gradient 模板做一份开发者教程 PPT。GitHub 暗紫渐变 + 居中布局 + 紫色 pill + 三色渐变标题 + 配置/步骤代码块。先确认:教什么、目标受众、要不要 MCP/Agent 配置示例。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-obsidian-claude-gradient 模板做一份开发者教程 PPT。GitHub 暗紫渐变 + 居中布局 + 紫色 pill + 三色渐变标题 + 配置/步骤代码块。先确认:教什么、目标受众、要不要 MCP/Agent 配置示例。", + "zh-CN": "用 html-ppt-obsidian-claude-gradient 模板做一份开发者教程 PPT。GitHub 暗紫渐变 + 居中布局 + 紫色 pill + 三色渐变标题 + 配置/步骤代码块。先确认:教什么、目标受众、要不要 MCP/Agent 配置示例。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-pitch-deck/open-design.json b/plugins/_official/examples/html-ppt-pitch-deck/open-design.json index f8aced36c..8b66c9b73 100644 --- a/plugins/_official/examples/html-ppt-pitch-deck/open-design.json +++ b/plugins/_official/examples/html-ppt-pitch-deck/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build a 10-slide pitch deck in HTML for my seed round. Use the html-ppt-pitch-deck full-deck template (white + blue→purple gradient, traction bars, $X.XM ask). Confirm three things first: (1) name + one-line pitch, (2) key traction numbers, (3) ask + use of funds.", + "query": { + "en": "Build a 10-slide pitch deck in HTML for my seed round. Use the html-ppt-pitch-deck full-deck template (white + blue→purple gradient, traction bars, $X.XM ask). Confirm three things first: (1) name + one-line pitch, (2) key traction numbers, (3) ask + use of funds.", + "zh-CN": "使用这个插件完成以下任务:Build a 10-slide pitch deck in HTML for my seed round. Use the html-ppt-pitch-deck full-deck template (white + blue→purple gradient, traction bars, $X.XM ask). Confirm three things first: (1) name + one-line pitch, (2) key traction numbers, (3) ask + use of funds." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-presenter-mode-reveal/open-design.json b/plugins/_official/examples/html-ppt-presenter-mode-reveal/open-design.json index 8cebc15ce..90a002d0b 100644 --- a/plugins/_official/examples/html-ppt-presenter-mode-reveal/open-design.json +++ b/plugins/_official/examples/html-ppt-presenter-mode-reveal/open-design.json @@ -39,7 +39,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-presenter-mode 模板做一份带逐字稿的演讲 PPT。先确认:演讲主题、时长(每页 2-3 分钟)、目标听众。然后帮我每页写 150-300 字的口语化逐字稿(不是讲稿,是提示信号),按 S 能打开 presenter 弹窗。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-presenter-mode 模板做一份带逐字稿的演讲 PPT。先确认:演讲主题、时长(每页 2-3 分钟)、目标听众。然后帮我每页写 150-300 字的口语化逐字稿(不是讲稿,是提示信号),按 S 能打开 presenter 弹窗。", + "zh-CN": "用 html-ppt-presenter-mode 模板做一份带逐字稿的演讲 PPT。先确认:演讲主题、时长(每页 2-3 分钟)、目标听众。然后帮我每页写 150-300 字的口语化逐字稿(不是讲稿,是提示信号),按 S 能打开 presenter 弹窗。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-product-launch/open-design.json b/plugins/_official/examples/html-ppt-product-launch/open-design.json index 5ad7db83e..d40f8a333 100644 --- a/plugins/_official/examples/html-ppt-product-launch/open-design.json +++ b/plugins/_official/examples/html-ppt-product-launch/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Make a product-launch keynote deck in HTML using the html-ppt-product-launch full-deck template (dark hero, warm orange accent, feature cards, pricing tiers). Confirm: product name + tagline, the 3 key features, and pricing tiers — then write the deck.", + "query": { + "en": "Make a product-launch keynote deck in HTML using the html-ppt-product-launch full-deck template (dark hero, warm orange accent, feature cards, pricing tiers). Confirm: product name + tagline, the 3 key features, and pricing tiers — then write the deck.", + "zh-CN": "使用这个插件完成以下任务:Make a product-launch keynote deck in HTML using the html-ppt-product-launch full-deck template (dark hero, warm orange accent, feature cards, pricing tiers). Confirm: product name + tagline, the 3 key features, and pricing tiers — then write the deck." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-taste-brutalist/open-design.json b/plugins/_official/examples/html-ppt-taste-brutalist/open-design.json index db100e8bb..7da08a77f 100644 --- a/plugins/_official/examples/html-ppt-taste-brutalist/open-design.json +++ b/plugins/_official/examples/html-ppt-taste-brutalist/open-design.json @@ -35,7 +35,10 @@ "entry": "./example.html" }, "useCase": { - "query": "16:9 HTML deck in tactical-telemetry / CRT-terminal taste. Deactivated-CRT charcoal slides, white-phosphor monospace, hazard-red accent, scanline overlay, ASCII syntax, density over decoration. Distilled from Leonxlnx/taste-skill `brutalist-skill` (Tactical Telemetry mode).", + "query": { + "en": "16:9 HTML deck in tactical-telemetry / CRT-terminal taste. Deactivated-CRT charcoal slides, white-phosphor monospace, hazard-red accent, scanline overlay, ASCII syntax, density over decoration. Distilled from Leonxlnx/taste-skill `brutalist-skill` (Tactical Telemetry mode).", + "zh-CN": "使用这个插件完成以下任务:16:9 HTML deck in tactical-telemetry / CRT-terminal taste. Deactivated-CRT charcoal slides, white-phosphor monospace, hazard-red accent, scanline overlay, ASCII syntax, density over decoration. Distilled from Leonxlnx/taste-skill `brutalist-skill` (Tactical Telemetry mode)." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-taste-editorial/open-design.json b/plugins/_official/examples/html-ppt-taste-editorial/open-design.json index 58619c5f5..12e8d5578 100644 --- a/plugins/_official/examples/html-ppt-taste-editorial/open-design.json +++ b/plugins/_official/examples/html-ppt-taste-editorial/open-design.json @@ -35,7 +35,10 @@ "entry": "./example.html" }, "useCase": { - "query": "16:9 HTML deck in editorial-minimalist taste. Warm cream slides, serif display + grotesque body, hairline rules, monospace meta, generous macro-whitespace, one accent. Distilled from Leonxlnx/taste-skill `minimalist-skill`.", + "query": { + "en": "16:9 HTML deck in editorial-minimalist taste. Warm cream slides, serif display + grotesque body, hairline rules, monospace meta, generous macro-whitespace, one accent. Distilled from Leonxlnx/taste-skill `minimalist-skill`.", + "zh-CN": "使用这个插件完成以下任务:16:9 HTML deck in editorial-minimalist taste. Warm cream slides, serif display + grotesque body, hairline rules, monospace meta, generous macro-whitespace, one accent. Distilled from Leonxlnx/taste-skill `minimalist-skill`." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-tech-sharing/open-design.json b/plugins/_official/examples/html-ppt-tech-sharing/open-design.json index 6de628df9..4786f76cf 100644 --- a/plugins/_official/examples/html-ppt-tech-sharing/open-design.json +++ b/plugins/_official/examples/html-ppt-tech-sharing/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "帮我用 html-ppt-tech-sharing 模板做一份 8 页的技术分享 PPT。先确认:分享主题、目标听众(同事 / 社区 / 客户)、要不要包含代码片段和 benchmark。GitHub 暗色主题 + JetBrains Mono,agenda + Q&A 页备好。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 帮我用 html-ppt-tech-sharing 模板做一份 8 页的技术分享 PPT。先确认:分享主题、目标听众(同事 / 社区 / 客户)、要不要包含代码片段和 benchmark。GitHub 暗色主题 + JetBrains Mono,agenda + Q&A 页备好。", + "zh-CN": "帮我用 html-ppt-tech-sharing 模板做一份 8 页的技术分享 PPT。先确认:分享主题、目标听众(同事 / 社区 / 客户)、要不要包含代码片段和 benchmark。GitHub 暗色主题 + JetBrains Mono,agenda + Q&A 页备好。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-testing-safety-alert/open-design.json b/plugins/_official/examples/html-ppt-testing-safety-alert/open-design.json index b67cad0da..857b23f00 100644 --- a/plugins/_official/examples/html-ppt-testing-safety-alert/open-design.json +++ b/plugins/_official/examples/html-ppt-testing-safety-alert/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-testing-safety-alert 模板做一份事故复盘 / 安全评审 PPT。红黑 hazard 条 + 红色删除线 + L1/L2/L3 tier 卡片 + policy-yaml 代码块。先告诉我事件时间线、根因、影响范围。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-testing-safety-alert 模板做一份事故复盘 / 安全评审 PPT。红黑 hazard 条 + 红色删除线 + L1/L2/L3 tier 卡片 + policy-yaml 代码块。先告诉我事件时间线、根因、影响范围。", + "zh-CN": "用 html-ppt-testing-safety-alert 模板做一份事故复盘 / 安全评审 PPT。红黑 hazard 条 + 红色删除线 + L1/L2/L3 tier 卡片 + policy-yaml 代码块。先告诉我事件时间线、根因、影响范围。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-weekly-report/open-design.json b/plugins/_official/examples/html-ppt-weekly-report/open-design.json index 7a1e98349..cb8c3570c 100644 --- a/plugins/_official/examples/html-ppt-weekly-report/open-design.json +++ b/plugins/_official/examples/html-ppt-weekly-report/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-weekly-report 模板生成一份周报(7 页)。先问我四件事:本周时间范围、3-5 个核心 KPI 数字、本周已发布 / 已完成的事项、下周计划与风险。然后用模板填好 8 周柱状图和下周表格。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-weekly-report 模板生成一份周报(7 页)。先问我四件事:本周时间范围、3-5 个核心 KPI 数字、本周已发布 / 已完成的事项、下周计划与风险。然后用模板填好 8 周柱状图和下周表格。", + "zh-CN": "用 html-ppt-weekly-report 模板生成一份周报(7 页)。先问我四件事:本周时间范围、3-5 个核心 KPI 数字、本周已发布 / 已完成的事项、下周计划与风险。然后用模板填好 8 周柱状图和下周表格。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-xhs-pastel-card/open-design.json b/plugins/_official/examples/html-ppt-xhs-pastel-card/open-design.json index e03ad05c5..54c65e58a 100644 --- a/plugins/_official/examples/html-ppt-xhs-pastel-card/open-design.json +++ b/plugins/_official/examples/html-ppt-xhs-pastel-card/open-design.json @@ -40,7 +40,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-xhs-pastel-card 模板做一份慢生活主题图文。奶油底 + 马卡龙圆角卡片 + Playfair 斜体序号 + donut 图。先告诉我主题(休息 / 暂停 / 自我照顾…)和 5-7 个想说的点。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-xhs-pastel-card 模板做一份慢生活主题图文。奶油底 + 马卡龙圆角卡片 + Playfair 斜体序号 + donut 图。先告诉我主题(休息 / 暂停 / 自我照顾…)和 5-7 个想说的点。", + "zh-CN": "用 html-ppt-xhs-pastel-card 模板做一份慢生活主题图文。奶油底 + 马卡龙圆角卡片 + Playfair 斜体序号 + donut 图。先告诉我主题(休息 / 暂停 / 自我照顾…)和 5-7 个想说的点。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-xhs-post/open-design.json b/plugins/_official/examples/html-ppt-xhs-post/open-design.json index 3ba7a4374..f393e2674 100644 --- a/plugins/_official/examples/html-ppt-xhs-post/open-design.json +++ b/plugins/_official/examples/html-ppt-xhs-post/open-design.json @@ -40,7 +40,10 @@ "entry": "./example.html" }, "useCase": { - "query": "帮我用 html-ppt-xhs-post 模板做一组 9 张小红书图文(3:4 竖版,810×1080)。先告诉我主题,然后帮我把封面 + 7 页内容 + 结尾 CTA 排好,每页一句标题 + 一段正文 + 关键词 sticker。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 帮我用 html-ppt-xhs-post 模板做一组 9 张小红书图文(3:4 竖版,810×1080)。先告诉我主题,然后帮我把封面 + 7 页内容 + 结尾 CTA 排好,每页一句标题 + 一段正文 + 关键词 sticker。", + "zh-CN": "帮我用 html-ppt-xhs-post 模板做一组 9 张小红书图文(3:4 竖版,810×1080)。先告诉我主题,然后帮我把封面 + 7 页内容 + 结尾 CTA 排好,每页一句标题 + 一段正文 + 关键词 sticker。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-xhs-white-editorial/open-design.json b/plugins/_official/examples/html-ppt-xhs-white-editorial/open-design.json index 8fa084273..61de758a2 100644 --- a/plugins/_official/examples/html-ppt-xhs-white-editorial/open-design.json +++ b/plugins/_official/examples/html-ppt-xhs-white-editorial/open-design.json @@ -39,7 +39,10 @@ "entry": "./example.html" }, "useCase": { - "query": "用 html-ppt-xhs-white-editorial 模板做一份白底杂志风 PPT,中文优先。要点:80-110px display 大标题、彩虹顶部 bar、马卡龙软卡片、黑底白字 .focus pill。先告诉我主题和受众,再写 8-12 页。", + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt-xhs-white-editorial 模板做一份白底杂志风 PPT,中文优先。要点:80-110px display 大标题、彩虹顶部 bar、马卡龙软卡片、黑底白字 .focus pill。先告诉我主题和受众,再写 8-12 页。", + "zh-CN": "用 html-ppt-xhs-white-editorial 模板做一份白底杂志风 PPT,中文优先。要点:80-110px display 大标题、彩虹顶部 bar、马卡龙软卡片、黑底白字 .focus pill。先告诉我主题和受众,再写 8-12 页。" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-8-bit-orbit/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-8-bit-orbit/open-design.json index ab8c7dfa5..643f59b40 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-8-bit-orbit/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-8-bit-orbit/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "8-Bit Orbit — Pixel-art neon arcade aesthetic on a deep navy void. Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos.", + "query": { + "en": "8-Bit Orbit — Pixel-art neon arcade aesthetic on a deep navy void. Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos.", + "zh-CN": "使用这个插件完成以下任务:8-Bit Orbit — Pixel-art neon arcade aesthetic on a deep navy void. Anything that should feel like a CRT screen at 2am: cyberpunk, gaming, web3, indie dev tools, hackathon demos." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-biennale-yellow/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-biennale-yellow/open-design.json index b24fac661..48e0b2ded 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-biennale-yellow/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-biennale-yellow/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Biennale Yellow — Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients. Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, stud", + "query": { + "en": "Biennale Yellow — Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients. Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, stud", + "zh-CN": "使用这个插件完成以下任务:Biennale Yellow — Solar yellow on warm parchment with deep indigo serif and atmospheric sun-glow gradients. Anything that should feel like an art-biennale poster or a museum's annual programme: exhibition decks, arts-institution announcements, design conference brochures, curatorial pitches, literary publications, stud" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-block-frame/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-block-frame/open-design.json index 6d318f27a..5edbb28f0 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-block-frame/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-block-frame/open-design.json @@ -47,7 +47,10 @@ "entry": "./example.html" }, "useCase": { - "query": "BlockFrame — Neobrutalist deck with pastel-neon color blocks and chunky black borders. Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns.", + "query": { + "en": "BlockFrame — Neobrutalist deck with pastel-neon color blocks and chunky black borders. Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns.", + "zh-CN": "使用这个插件完成以下任务:BlockFrame — Neobrutalist deck with pastel-neon color blocks and chunky black borders. Anything that should feel pop-graphic and design-led: indie SaaS launches, agency credentials, creative reviews, brand redesigns." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-blue-professional/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-blue-professional/open-design.json index 425602b5c..2356ca9b1 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-blue-professional/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-blue-professional/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Blue Professional — Cream paper background with electric cobalt blue accents; clean modern professional. Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports.", + "query": { + "en": "Blue Professional — Cream paper background with electric cobalt blue accents; clean modern professional. Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports.", + "zh-CN": "使用这个插件完成以下任务:Blue Professional — Cream paper background with electric cobalt blue accents; clean modern professional. Anything that should feel modern-considered and lightly authoritative: B2B SaaS pitches, consulting deliverables, advisory updates, investor reports." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-bold-poster/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-bold-poster/open-design.json index 72dfdbee1..5d886597e 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-bold-poster/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-bold-poster/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Bold Poster — Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent. Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews.", + "query": { + "en": "Bold Poster — Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent. Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews.", + "zh-CN": "使用这个插件完成以下任务:Bold Poster — Editorial poster aesthetic with massive Shrikhand display and a single fire-engine red accent. Anything that should land like a magazine cover: brand manifestos, founder vision decks, editorial / cultural pitches, creative reviews." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-broadside/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-broadside/open-design.json index c58900c28..baa0767c0 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-broadside/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-broadside/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Broadside — Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack. Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements.", + "query": { + "en": "Broadside — Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack. Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements.", + "zh-CN": "使用这个插件完成以下任务:Broadside — Dark editorial canvas with a single fire orange accent and bilingual Latin/Chinese type stack. Anything that should land like a broadside newspaper headline: brand manifestos, magazine and cultural pitches, design talks, bilingual EN/CN decks, founder vision statements." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-capsule/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-capsule/open-design.json index 7494f5ef7..57b17c6a6 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-capsule/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-capsule/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Capsule — Modular pill-shaped cards on warm bone with a full pastel-pop palette. Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials.", + "query": { + "en": "Capsule — Modular pill-shaped cards on warm bone with a full pastel-pop palette. Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials.", + "zh-CN": "使用这个插件完成以下任务:Capsule — Modular pill-shaped cards on warm bone with a full pastel-pop palette. Anything that should feel modular, modern, and a little Y2K: lifestyle brands, creator portfolios, DTC launches, beauty / wellness, agency credentials." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-cartesian/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-cartesian/open-design.json index 08464143c..d77a58ae7 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-cartesian/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-cartesian/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Cartesian — Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried. Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks.", + "query": { + "en": "Cartesian — Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried. Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks.", + "zh-CN": "使用这个插件完成以下任务:Cartesian — Quiet warm-neutral palette with classical Playfair serifs; tasteful and unhurried. Anything that should feel quiet, considered, and grown-up: investment theses, white papers, advisory work, longform research, gallery / cultural decks." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-cobalt-grid/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-cobalt-grid/open-design.json index f09b86a63..323966595 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-cobalt-grid/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-cobalt-grid/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Cobalt Grid — Electric cobalt italic serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules. Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report.", + "query": { + "en": "Cobalt Grid — Electric cobalt italic serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules. Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report.", + "zh-CN": "使用这个插件完成以下任务:Cobalt Grid — Electric cobalt italic serifs on a graph-paper canvas, anchored by stair-stepped pixel-glitch decorations and slim hairline rules. Anything that should feel like a quietly serious design / research bulletin, art publication, or curated trend report." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-coral/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-coral/open-design.json index 42b5dfec6..dec60a5b0 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-coral/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-coral/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Coral — Cream and coral on near-black, set in oversized Bebas Neue. Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials.", + "query": { + "en": "Coral — Cream and coral on near-black, set in oversized Bebas Neue. Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials.", + "zh-CN": "使用这个插件完成以下任务:Coral — Cream and coral on near-black, set in oversized Bebas Neue. Anything that should feel warm-graphic and editorial: fashion, beauty, fitness, F&B, lifestyle brands, agency credentials." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-creative-mode/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-creative-mode/open-design.json index 7f14a2e11..43e4a4276 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-creative-mode/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-creative-mode/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Creative Mode — Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display. Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews.", + "query": { + "en": "Creative Mode — Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display. Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews.", + "zh-CN": "使用这个插件完成以下任务:Creative Mode — Cream paper canvas with confident multi-color (green, pink, orange, yellow) accents and Archivo Black display. Anything that should feel design-led and confident: creative agency pitches, design studio decks, ad shop credentials, brand creative reviews, art-direction reviews." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-daisy-days/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-daisy-days/open-design.json index 5a038a6bf..c9d89049a 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-daisy-days/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-daisy-days/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Daisy Days — Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm. Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration.", + "query": { + "en": "Daisy Days — Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm. Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration.", + "zh-CN": "使用这个插件完成以下任务:Daisy Days — Cheerful pastel deck with hand-drawn daisies, stars, and rainbows. Friendly, soft, and warm. Anything that should feel friendly, soft, and joyful: educational content, kids and family, wellness programs, community workshops, creator portfolios for craft / illustration." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-editorial-tri-tone/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-editorial-tri-tone/open-design.json index 235dcb4d2..e9b21e4c1 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-editorial-tri-tone/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-editorial-tri-tone/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Editorial Tri-Tone — Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif. Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews.", + "query": { + "en": "Editorial Tri-Tone — Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif. Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews.", + "zh-CN": "使用这个插件完成以下任务:Editorial Tri-Tone — Three-color editorial system: dusty pink, mustard cream, and deep burgundy, set in Bricolage + Instrument Serif. Anything that should feel like a fashion-magazine spread: editorial pitches, fashion brand decks, lifestyle media, art direction reviews." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-grove/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-grove/open-design.json index a403b38ad..c70d5e271 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-grove/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-grove/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Grove — Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent. Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports.", + "query": { + "en": "Grove — Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent. Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports.", + "zh-CN": "使用这个插件完成以下任务:Grove — Forest-green canvas with cream type, classical Playfair serifs, and a single rust accent. Anything that should feel organic, considered, and grown-up: sustainability and wellness brands, outdoor / nature products, wineries and restaurants, literary or arts decks, advisory deliverables, bilingual EN/CN reports." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-long-table/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-long-table/open-design.json index 1c08bfb18..8eb50e144 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-long-table/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-long-table/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Long Table — Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, italic Fraunces, and pill-shaped outlined buttons. Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership p", + "query": { + "en": "Long Table — Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, italic Fraunces, and pill-shaped outlined buttons. Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership p", + "zh-CN": "使用这个插件完成以下任务:Long Table — Warm cream and rust-red supper-club aesthetic with bold uppercase grotesk headlines, italic Fraunces, and pill-shaped outlined buttons. Anything that should feel like a warm, intimate, modern hospitality / community brand: supper clubs, dinner series, small restaurants, creative-studio events, membership p" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-mat/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-mat/open-design.json index 06e09d545..0cd210d46 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-mat/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-mat/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Mat — Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones. Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks.", + "query": { + "en": "Mat — Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones. Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks.", + "zh-CN": "使用这个插件完成以下任务:Mat — Dark sage canvas with bone paper and burnt-orange accent; mid-century modern with wood undertones. Anything that should feel mid-century, tactile, and intentional: design studio credentials, architecture / interior brands, ceramics / craft / furniture, advisory decks." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-monochrome/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-monochrome/open-design.json index d652984f5..062d5eadd 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-monochrome/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-monochrome/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Monochrome — Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all. Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports.", + "query": { + "en": "Monochrome — Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all. Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports.", + "zh-CN": "使用这个插件完成以下任务:Monochrome — Ivory ledger paper with all-black type; Lora serif headlines, Jost body, no color at all. Anything that should feel like a hand-typeset ledger: user research synthesis, white papers, longform reports, academic and policy briefs, advisory deliverables, bilingual EN/CN reports." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-neo-grid-bold/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-neo-grid-bold/open-design.json index 3615ff728..9fe9705fc 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-neo-grid-bold/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-neo-grid-bold/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Neo-Grid Bold — Editorial neo-brutalism with a single neon yellow accent on off-white paper. Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes.", + "query": { + "en": "Neo-Grid Bold — Editorial neo-brutalism with a single neon yellow accent on off-white paper. Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes.", + "zh-CN": "使用这个插件完成以下任务:Neo-Grid Bold — Editorial neo-brutalism with a single neon yellow accent on off-white paper. Anything that should feel confident and editorial-graphic: design-led pitches, brand work, founder talks, conference keynotes." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-peoples-platform/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-peoples-platform/open-design.json index 5d1130f26..f38bf033b 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-peoples-platform/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-peoples-platform/open-design.json @@ -47,7 +47,10 @@ "entry": "./example.html" }, "useCase": { - "query": "People's Platform (Block & Bold) — Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush. Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches.", + "query": { + "en": "People's Platform (Block & Bold) — Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush. Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches.", + "zh-CN": "使用这个插件完成以下任务:People's Platform (Block & Bold) — Activist poster energy: blue, orange, red on cream, with Alfa Slab + Caveat Brush. Anything that should feel honest, loud, and graphic: cultural commentary, manifestos, civic and community decks, design talks, campaign pitches." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-pin-and-paper/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-pin-and-paper/open-design.json index 8b825c20c..38632c8d7 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-pin-and-paper/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-pin-and-paper/open-design.json @@ -47,7 +47,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Pin & Paper — Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture. Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs.", + "query": { + "en": "Pin & Paper — Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture. Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs.", + "zh-CN": "使用这个插件完成以下任务:Pin & Paper — Yellow paper with safety-pin illustrations, ink-blue handwritten Caveat, paper-grain texture. Anything that should feel hand-crafted, warm, and literary: qualitative research findings, founder reflections, longform brand stories, workshop debriefs." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-pink-script/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-pink-script/open-design.json index be54e887d..6e1e25f16 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-pink-script/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-pink-script/open-design.json @@ -47,7 +47,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Pink Script — After Hours — Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury. Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, ed", + "query": { + "en": "Pink Script — After Hours — Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury. Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, ed", + "zh-CN": "使用这个插件完成以下任务:Pink Script — After Hours — Black canvas, hot pink accent, pearl-cream paper, Instrument Serif headlines: late-night editorial luxury. Anything that should feel nocturnal, intentional, and a little luxe: fashion brand decks, creator personal brands, after-hours / nightlife / spirits launches, luxury product reveals, ed" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-playful/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-playful/open-design.json index a7934cced..374d33b86 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-playful/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-playful/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Playful — Sun-warm peach background with Syne display: a friendly indie launch deck. Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks.", + "query": { + "en": "Playful — Sun-warm peach background with Syne display: a friendly indie launch deck. Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks.", + "zh-CN": "使用这个插件完成以下任务:Playful — Sun-warm peach background with Syne display: a friendly indie launch deck. Anything that should feel warm, indie, and approachable: creator portfolios, indie product launches, lifestyle brands, small-business pitches, newsletter / community decks." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-raw-grid/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-raw-grid/open-design.json index 0b1450e98..90ec5d802 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-raw-grid/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-raw-grid/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Raw Grid — Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette. Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios.", + "query": { + "en": "Raw Grid — Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette. Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios.", + "zh-CN": "使用这个插件完成以下任务:Raw Grid — Neo-brutalist deck with thick borders, offset shadows, and a pink/sage/ink palette. Anything that should feel direct and graphic-confident: founder pitches, accelerator demos, brand decks, indie launches, creator portfolios." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-retro-windows/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-retro-windows/open-design.json index d6efff9bc..b3b23163d 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-retro-windows/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-retro-windows/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Retro Windows — Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia. Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks.", + "query": { + "en": "Retro Windows — Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia. Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks.", + "zh-CN": "使用这个插件完成以下任务:Retro Windows — Windows 95 chrome: gray title bars, MS Sans Serif, pixel typography, full nostalgia. Anything that should feel knowingly nostalgic: retro gaming, Y2K-aesthetic brands, creator portfolios with a 90s vibe, tech-history talks, deliberately tongue-in-cheek decks." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-retro-zine/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-retro-zine/open-design.json index 951fb69f9..994550762 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-retro-zine/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-retro-zine/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Retro Zine — Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form. Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks.", + "query": { + "en": "Retro Zine — Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form. Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks.", + "zh-CN": "使用这个插件完成以下任务:Retro Zine — Beige paper with green accent and Bebas Neue + Caveat: a riso-printed zine in HTML form. Anything that should feel printed, lo-fi, and crafted: indie zines and publications, music / arts brands, creator portfolios, small-batch craft launches, community decks." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-sakura-chroma/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-sakura-chroma/open-design.json index d1a336b6d..9c0fa07d5 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-sakura-chroma/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-sakura-chroma/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Sakura Chroma — Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes. Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedul", + "query": { + "en": "Sakura Chroma — Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes. Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedul", + "zh-CN": "使用这个插件完成以下任务:Sakura Chroma — Vintage Japanese cassette-package aesthetic: cream paper, diagonal rainbow ribbons, condensed bold type, JIS-style spec checkboxes. Anything that should feel like a vintage Japanese cassette package or a TDK / Sony / Sakura Color product catalogue: indie hardware brand decks, music-label release schedul" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-scatterbrain/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-scatterbrain/open-design.json index 9fbce6e89..86e8a203f 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-scatterbrain/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-scatterbrain/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Scatterbrain — Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack. Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews.", + "query": { + "en": "Scatterbrain — Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack. Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews.", + "zh-CN": "使用这个插件完成以下任务:Scatterbrain — Post-it inspired: pastel sticky notes, Caveat handwriting, Shrikhand and Zilla Slab type stack. Anything that should feel like a designer's whiteboard: brainstorms, workshops, creative-agency credentials, design-thinking sessions, ideation pitches, art-direction reviews." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-signal/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-signal/open-design.json index 6ab59cf17..9487a7c0b 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-signal/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-signal/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Signal — Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight. Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches.", + "query": { + "en": "Signal — Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight. Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches.", + "zh-CN": "使用这个插件完成以下任务:Signal — Deep navy canvas with bone paper and a single muted-gold accent; institutional with quiet weight. Anything that should feel weighty, considered, and credibly institutional: investor decks, board presentations, consulting deliverables, legal / policy briefs, advisory pitches." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-soft-editorial/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-soft-editorial/open-design.json index e9de69fb1..b2568cac0 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-soft-editorial/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-soft-editorial/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Soft Editorial — Cormorant Garamond serif on warm paper with sage, blush, and lemon accents. Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays.", + "query": { + "en": "Soft Editorial — Cormorant Garamond serif on warm paper with sage, blush, and lemon accents. Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays.", + "zh-CN": "使用这个插件完成以下任务:Soft Editorial — Cormorant Garamond serif on warm paper with sage, blush, and lemon accents. Anything that should feel literary, elegant, and unhurried: editorial features, longform brand stories, gallery / museum decks, advisory deliverables, wedding / lifestyle media, founder essays." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-stencil-tablet/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-stencil-tablet/open-design.json index bfa950d96..da665810a 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-stencil-tablet/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-stencil-tablet/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Stencil & Tablet — Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand. Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos.", + "query": { + "en": "Stencil & Tablet — Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand. Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos.", + "zh-CN": "使用这个插件完成以下任务:Stencil & Tablet — Bone paper with stencil-cut headlines and a six-color earth palette: archaeology meets brand. Anything that should feel archival, tactile, and weighty-graphic: museum and cultural-institution decks, art / architecture brands, longform research, heritage and craft brands, manifestos." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-studio/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-studio/open-design.json index 7ba16f9ee..32aedd188 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-studio/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-studio/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Studio — Black canvas with electric-yellow type; high-voltage design studio aesthetic. Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work.", + "query": { + "en": "Studio — Black canvas with electric-yellow type; high-voltage design studio aesthetic. Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work.", + "zh-CN": "使用这个插件完成以下任务:Studio — Black canvas with electric-yellow type; high-voltage design studio aesthetic. Anything that should feel electric and design-led: studio credentials, creative agency pitches, brand showcases, art-direction reviews, fashion / sneaker brand work." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt-zhangzara-vellum/open-design.json b/plugins/_official/examples/html-ppt-zhangzara-vellum/open-design.json index 2b56636bb..7029c650d 100644 --- a/plugins/_official/examples/html-ppt-zhangzara-vellum/open-design.json +++ b/plugins/_official/examples/html-ppt-zhangzara-vellum/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Vellum — Deep navy canvas with warm-yellow italic Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic. Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder", + "query": { + "en": "Vellum — Deep navy canvas with warm-yellow italic Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic. Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder", + "zh-CN": "使用这个插件完成以下任务:Vellum — Deep navy canvas with warm-yellow italic Cormorant serifs and a single dusty teal accent. A quiet, scholarly aesthetic. Anything that should feel scholarly, literary, and quietly intelligent: research synthesis, white papers, academic and policy briefs, advisory deliverables, longform editorial pieces, founder" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/html-ppt/open-design.json b/plugins/_official/examples/html-ppt/open-design.json index f7c82df0a..22841a9cd 100644 --- a/plugins/_official/examples/html-ppt/open-design.json +++ b/plugins/_official/examples/html-ppt/open-design.json @@ -46,7 +46,10 @@ "entry": "./index.html" }, "useCase": { - "query": "用 html-ppt 做一份 12 页的 HTML PPT。先帮我确认三件事:内容/页数/受众、主题(从 36 套里推荐 2-3 个)、起点全 deck 模板(pitch-deck / tech-sharing / weekly-report / xhs-post / presenter-mode-reveal 任选一个),对齐之后再开始写 slides。" + "query": { + "en": "Use this plugin for the following Chinese-language task: 用 html-ppt 做一份 12 页的 HTML PPT。先帮我确认三件事:内容/页数/受众、主题(从 36 套里推荐 2-3 个)、起点全 deck 模板(pitch-deck / tech-sharing / weekly-report / xhs-post / presenter-mode-reveal 任选一个),对齐之后再开始写 slides。", + "zh-CN": "用 html-ppt 做一份 12 页的 HTML PPT。先帮我确认三件事:内容/页数/受众、主题(从 36 套里推荐 2-3 个)、起点全 deck 模板(pitch-deck / tech-sharing / weekly-report / xhs-post / presenter-mode-reveal 任选一个),对齐之后再开始写 slides。" + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/hyperframes/open-design.json b/plugins/_official/examples/hyperframes/open-design.json index eb79884e8..417c721c3 100644 --- a/plugins/_official/examples/hyperframes/open-design.json +++ b/plugins/_official/examples/hyperframes/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "A 5-second product reveal: a minimal high-end product on a clean cream\nsurface, soft side light, slow camera push-in, restrained motion, no\ntext overlays." + "query": { + "en": "A 5-second product reveal: a minimal high-end product on a clean cream\nsurface, soft side light, slow camera push-in, restrained motion, no\ntext overlays.", + "zh-CN": "使用这个插件完成以下任务:A 5-second product reveal: a minimal high-end product on a clean cream\nsurface, soft side light, slow camera push-in, restrained motion, no\ntext overlays." + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/ib-pitch-book/open-design.json b/plugins/_official/examples/ib-pitch-book/open-design.json index d8fa86fbd..9c84049b6 100644 --- a/plugins/_official/examples/ib-pitch-book/open-design.json +++ b/plugins/_official/examples/ib-pitch-book/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build a 10-page strategic alternatives review pitch book for the Board of\nNorthPeak Industries (NYSE: NPK). Include trading comps, precedent\ntransactions, valuation football field, DCF sensitivity, and a\nrecommended process timeline.", + "query": { + "en": "Build a 10-page strategic alternatives review pitch book for the Board of\nNorthPeak Industries (NYSE: NPK). Include trading comps, precedent\ntransactions, valuation football field, DCF sensitivity, and a\nrecommended process timeline.", + "zh-CN": "使用这个插件完成以下任务:Build a 10-page strategic alternatives review pitch book for the Board of\nNorthPeak Industries (NYSE: NPK). Include trading comps, precedent\ntransactions, valuation football field, DCF sensitivity, and a\nrecommended process timeline." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/image-poster/open-design.json b/plugins/_official/examples/image-poster/open-design.json index 461428411..e86a252dd 100644 --- a/plugins/_official/examples/image-poster/open-design.json +++ b/plugins/_official/examples/image-poster/open-design.json @@ -39,7 +39,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Editorial poster for an indie film festival — one bold abstract\nsilhouette over a warm, slightly grainy paper background; hand-set\nsans serif title at the top, festival dates and venue at the bottom\nin monospace. Muted ochre + ink palette.", + "query": { + "en": "Editorial poster for an indie film festival — one bold abstract\nsilhouette over a warm, slightly grainy paper background; hand-set\nsans serif title at the top, festival dates and venue at the bottom\nin monospace. Muted ochre + ink palette.", + "zh-CN": "使用这个插件完成以下任务:Editorial poster for an indie film festival — one bold abstract\nsilhouette over a warm, slightly grainy paper background; hand-set\nsans serif title at the top, festival dates and venue at the bottom\nin monospace. Muted ochre + ink palette." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/invoice/open-design.json b/plugins/_official/examples/invoice/open-design.json index 3ce24f60a..d903ff589 100644 --- a/plugins/_official/examples/invoice/open-design.json +++ b/plugins/_official/examples/invoice/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Create an invoice from a freelance design studio billing a client for a brand identity project — three line items, 10% retainer, 9% sales tax.", + "query": { + "en": "Create an invoice from a freelance design studio billing a client for a brand identity project — three line items, 10% retainer, 9% sales tax.", + "zh-CN": "使用这个插件完成以下任务:Create an invoice from a freelance design studio billing a client for a brand identity project — three line items, 10% retainer, 9% sales tax." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/kami-deck/open-design.json b/plugins/_official/examples/kami-deck/open-design.json index 7445ba435..bb792baef 100644 --- a/plugins/_official/examples/kami-deck/open-design.json +++ b/plugins/_official/examples/kami-deck/open-design.json @@ -41,7 +41,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Produce a print-grade slide deck in the kami (紙 / 纸) design system — warm parchment background (or ink-blue for cover / chapter slides), serif at one weight, ink-blue accent ≤ 5% per slide, no italic. Horizontal magazine swipe pagination (←/→ · wheel · swipe · ESC overview). One self-contained HTML file, zero dependenc", + "query": { + "en": "Use this plugin for the following Chinese-language task: Produce a print-grade slide deck in the kami (紙 / 纸) design system — warm parchment background (or ink-blue for cover / chapter slides), serif at one weight, ink-blue accent ≤ 5% per slide, no italic. Horizontal magazine swipe pagination (←/→ · wheel · swipe · ESC overview). One self-contained HTML file, zero dependenc", + "zh-CN": "Produce a print-grade slide deck in the kami (紙 / 纸) design system — warm parchment background (or ink-blue for cover / chapter slides), serif at one weight, ink-blue accent ≤ 5% per slide, no italic. Horizontal magazine swipe pagination (←/→ · wheel · swipe · ESC overview). One self-contained HTML file, zero dependenc" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/kami-landing/open-design.json b/plugins/_official/examples/kami-landing/open-design.json index 9b0228c65..ca6ec4acc 100644 --- a/plugins/_official/examples/kami-landing/open-design.json +++ b/plugins/_official/examples/kami-landing/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Produce a print-grade single-page kami (紙 / 纸) document — warm parchment canvas, ink-blue accent, serif at one weight, no italic, no cool grays. The output reads like a professional white paper or studio one-pager, not an app UI. Multilingual by design (EN · zh-CN · ja). One self-contained HTML file, zero dependencies.", + "query": { + "en": "Use this plugin for the following Chinese-language task: Produce a print-grade single-page kami (紙 / 纸) document — warm parchment canvas, ink-blue accent, serif at one weight, no italic, no cool grays. The output reads like a professional white paper or studio one-pager, not an app UI. Multilingual by design (EN · zh-CN · ja). One self-contained HTML file, zero dependencies.", + "zh-CN": "Produce a print-grade single-page kami (紙 / 纸) document — warm parchment canvas, ink-blue accent, serif at one weight, no italic, no cool grays. The output reads like a professional white paper or studio one-pager, not an app UI. Multilingual by design (EN · zh-CN · ja). One self-contained HTML file, zero dependencies." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/kanban-board/open-design.json b/plugins/_official/examples/kanban-board/open-design.json index e12cc3a1d..a7e969585 100644 --- a/plugins/_official/examples/kanban-board/open-design.json +++ b/plugins/_official/examples/kanban-board/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Make me a kanban board for a 5-person growth squad mid-sprint — backlog, doing, review, done.", + "query": { + "en": "Make me a kanban board for a 5-person growth squad mid-sprint — backlog, doing, review, done.", + "zh-CN": "使用这个插件完成以下任务:Make me a kanban board for a 5-person growth squad mid-sprint — backlog, doing, review, done." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/last30days/open-design.json b/plugins/_official/examples/last30days/open-design.json index 1379abb4e..c6d5e5051 100644 --- a/plugins/_official/examples/last30days/open-design.json +++ b/plugins/_official/examples/last30days/open-design.json @@ -44,7 +44,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Recent community and social trend research over the last 30 days. Use when the brief asks what people are saying now, recent sentiment, community reactions, social proof, launch reaction, trend scan, or last-30-days context." + "query": { + "en": "Recent community and social trend research over the last 30 days. Use when the brief asks what people are saying now, recent sentiment, community reactions, social proof, launch reaction, trend scan, or last-30-days context.", + "zh-CN": "使用这个插件完成以下任务:Recent community and social trend research over the last 30 days. Use when the brief asks what people are saying now, recent sentiment, community reactions, social proof, launch reaction, trend scan, or last-30-days context." + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/live-artifact/open-design.json b/plugins/_official/examples/live-artifact/open-design.json index ff2ebf642..f1420cc5a 100644 --- a/plugins/_official/examples/live-artifact/open-design.json +++ b/plugins/_official/examples/live-artifact/open-design.json @@ -42,7 +42,10 @@ "entry": "./index.html" }, "useCase": { - "query": "Create refreshable, auditable Open Design artifacts backed by connector or local data. Trigger when the user asks for live dashboards, refreshable reports, synced views, or reusable data-backed artifacts." + "query": { + "en": "Create refreshable, auditable Open Design artifacts backed by connector or local data. Trigger when the user asks for live dashboards, refreshable reports, synced views, or reusable data-backed artifacts.", + "zh-CN": "使用这个插件完成以下任务:Create refreshable, auditable Open Design artifacts backed by connector or local data. Trigger when the user asks for live dashboards, refreshable reports, synced views, or reusable data-backed artifacts." + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/live-dashboard/open-design.json b/plugins/_official/examples/live-dashboard/open-design.json index d59a18fff..bf077d411 100644 --- a/plugins/_official/examples/live-dashboard/open-design.json +++ b/plugins/_official/examples/live-dashboard/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build me a Notion-style team dashboard for Acme Studio. KPIs: total tasks, done this week, active members, docs in review. Wire it to the Notion connector and let it refresh on demand.", + "query": { + "en": "Build me a Notion-style team dashboard for Acme Studio. KPIs: total tasks, done this week, active members, docs in review. Wire it to the Notion connector and let it refresh on demand.", + "zh-CN": "使用这个插件完成以下任务:Build me a Notion-style team dashboard for Acme Studio. KPIs: total tasks, done this week, active members, docs in review. Wire it to the Notion connector and let it refresh on demand." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/magazine-poster/open-design.json b/plugins/_official/examples/magazine-poster/open-design.json index 14adcab2c..3573a1ce2 100644 --- a/plugins/_official/examples/magazine-poster/open-design.json +++ b/plugins/_official/examples/magazine-poster/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design an editorial magazine-style poster — ‘You don't need a designer to ship your first draft anymore.’ Newsprint paper, six numbered sections.", + "query": { + "en": "Design an editorial magazine-style poster — ‘You don't need a designer to ship your first draft anymore.’ Newsprint paper, six numbered sections.", + "zh-CN": "使用这个插件完成以下任务:Design an editorial magazine-style poster — ‘You don't need a designer to ship your first draft anymore.’ Newsprint paper, six numbered sections." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/meeting-notes/open-design.json b/plugins/_official/examples/meeting-notes/open-design.json index 2cfc8ff7c..142b11aaa 100644 --- a/plugins/_official/examples/meeting-notes/open-design.json +++ b/plugins/_official/examples/meeting-notes/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Write up notes from a 60-minute Growth squad weekly — agenda, decisions, action items with owners, next meeting.", + "query": { + "en": "Write up notes from a 60-minute Growth squad weekly — agenda, decisions, action items with owners, next meeting.", + "zh-CN": "使用这个插件完成以下任务:Write up notes from a 60-minute Growth squad weekly — agenda, decisions, action items with owners, next meeting." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/mobile-app/open-design.json b/plugins/_official/examples/mobile-app/open-design.json index 8c249a222..da478d5d1 100644 --- a/plugins/_official/examples/mobile-app/open-design.json +++ b/plugins/_official/examples/mobile-app/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "A mobile-app screen rendered inside a pixel-accurate iPhone 15 Pro frame on the page. Built by copying the seed `assets/template.html` and pasting one screen archetype from `references/layouts.md`. Use when the brief asks for \"mobile app\", \"iOS app\", \"Android app\", \"phone screen\", or \"app UI\".", + "query": { + "en": "A mobile-app screen rendered inside a pixel-accurate iPhone 15 Pro frame on the page. Built by copying the seed `assets/template.html` and pasting one screen archetype from `references/layouts.md`. Use when the brief asks for \"mobile app\", \"iOS app\", \"Android app\", \"phone screen\", or \"app UI\".", + "zh-CN": "使用这个插件完成以下任务:A mobile-app screen rendered inside a pixel-accurate iPhone 15 Pro frame on the page. Built by copying the seed `assets/template.html` and pasting one screen archetype from `references/layouts.md`. Use when the brief asks for \"mobile app\", \"iOS app\", \"Android app\", \"phone screen\", or \"app UI\"." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/mobile-onboarding/open-design.json b/plugins/_official/examples/mobile-onboarding/open-design.json index 1c3d9e2e1..a9ab8dcbe 100644 --- a/plugins/_official/examples/mobile-onboarding/open-design.json +++ b/plugins/_official/examples/mobile-onboarding/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design a 3-screen mobile onboarding flow for a meditation app — welcome, value props, sign-in.", + "query": { + "en": "Design a 3-screen mobile onboarding flow for a meditation app — welcome, value props, sign-in.", + "zh-CN": "使用这个插件完成以下任务:Design a 3-screen mobile onboarding flow for a meditation app — welcome, value props, sign-in." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/motion-frames/open-design.json b/plugins/_official/examples/motion-frames/open-design.json index 0242ba920..a771a0827 100644 --- a/plugins/_official/examples/motion-frames/open-design.json +++ b/plugins/_official/examples/motion-frames/open-design.json @@ -46,7 +46,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design an animated hero — a rotating type ring around a wireframe globe, with the headline ‘Reach every country.’ Loop at 12s, ready for HyperFrames export.", + "query": { + "en": "Design an animated hero — a rotating type ring around a wireframe globe, with the headline ‘Reach every country.’ Loop at 12s, ready for HyperFrames export.", + "zh-CN": "使用这个插件完成以下任务:Design an animated hero — a rotating type ring around a wireframe globe, with the headline ‘Reach every country.’ Loop at 12s, ready for HyperFrames export." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/open-design-landing-deck/open-design.json b/plugins/_official/examples/open-design-landing-deck/open-design.json index 8c3ac54a3..4743c6625 100644 --- a/plugins/_official/examples/open-design-landing-deck/open-design.json +++ b/plugins/_official/examples/open-design-landing-deck/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Produce a single-file slide deck in the Atelier Zero visual language (warm-paper background, italic-serif emphasis spans, coral terminating dots, surreal collage plates) — Open Design's brand deck recipe. The deck uses **horizontal magazine-style swipe pagination** (←/→, wheel, swipe), a per-slide chrome strip with bra", + "query": { + "en": "Produce a single-file slide deck in the Atelier Zero visual language (warm-paper background, italic-serif emphasis spans, coral terminating dots, surreal collage plates) — Open Design's brand deck recipe. The deck uses **horizontal magazine-style swipe pagination** (←/→, wheel, swipe), a per-slide chrome strip with bra", + "zh-CN": "使用这个插件完成以下任务:Produce a single-file slide deck in the Atelier Zero visual language (warm-paper background, italic-serif emphasis spans, coral terminating dots, surreal collage plates) — Open Design's brand deck recipe. The deck uses **horizontal magazine-style swipe pagination** (←/→, wheel, swipe), a per-slide chrome strip with bra" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/open-design-landing/open-design.json b/plugins/_official/examples/open-design-landing/open-design.json index e3e10811f..48649fcb0 100644 --- a/plugins/_official/examples/open-design-landing/open-design.json +++ b/plugins/_official/examples/open-design-landing/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Produce a world-class single-page editorial landing site in the Atelier Zero visual language (Monocle / Apartamento / Études editorial collage) — the same aesthetic Open Design uses for its own marketing surface. The agent fills a typed `inputs.json` from a brand brief, optionally generates 16 collage assets via gpt-im", + "query": { + "en": "Produce a world-class single-page editorial landing site in the Atelier Zero visual language (Monocle / Apartamento / Études editorial collage) — the same aesthetic Open Design uses for its own marketing surface. The agent fills a typed `inputs.json` from a brand brief, optionally generates 16 collage assets via gpt-im", + "zh-CN": "使用这个插件完成以下任务:Produce a world-class single-page editorial landing site in the Atelier Zero visual language (Monocle / Apartamento / Études editorial collage) — the same aesthetic Open Design uses for its own marketing surface. The agent fills a typed `inputs.json` from a brand brief, optionally generates 16 collage assets via gpt-im" + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/orbit-general/open-design.json b/plugins/_official/examples/orbit-general/open-design.json index 712626fb2..1d223d041 100644 --- a/plugins/_official/examples/orbit-general/open-design.json +++ b/plugins/_official/examples/orbit-general/open-design.json @@ -40,7 +40,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Generate today's Open Orbit morning briefing. I have ~10 connectors connected (GitHub, Linear, Notion, Calendar, 飞书, Sentry, Vercel, Slack, Gmail, Drive). Pull yesterday's activity from each and render the editorial bento dashboard.", + "query": { + "en": "Use this plugin for the following Chinese-language task: Generate today's Open Orbit morning briefing. I have ~10 connectors connected (GitHub, Linear, Notion, Calendar, 飞书, Sentry, Vercel, Slack, Gmail, Drive). Pull yesterday's activity from each and render the editorial bento dashboard.", + "zh-CN": "Generate today's Open Orbit morning briefing. I have ~10 connectors connected (GitHub, Linear, Notion, Calendar, 飞书, Sentry, Vercel, Slack, Gmail, Drive). Pull yesterday's activity from each and render the editorial bento dashboard." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/orbit-github/open-design.json b/plugins/_official/examples/orbit-github/open-design.json index 7dfe4fc69..b94bb755a 100644 --- a/plugins/_official/examples/orbit-github/open-design.json +++ b/plugins/_official/examples/orbit-github/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Generate today's Open Orbit GitHub briefing. GitHub is my only connected connector — pull yesterday's PRs, review requests, issues, CI runs, and merges and render them as a GitHub Notifications + PR-diff page.", + "query": { + "en": "Generate today's Open Orbit GitHub briefing. GitHub is my only connected connector — pull yesterday's PRs, review requests, issues, CI runs, and merges and render them as a GitHub Notifications + PR-diff page.", + "zh-CN": "使用这个插件完成以下任务:Generate today's Open Orbit GitHub briefing. GitHub is my only connected connector — pull yesterday's PRs, review requests, issues, CI runs, and merges and render them as a GitHub Notifications + PR-diff page." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/orbit-gmail/open-design.json b/plugins/_official/examples/orbit-gmail/open-design.json index d9d993856..0606fc085 100644 --- a/plugins/_official/examples/orbit-gmail/open-design.json +++ b/plugins/_official/examples/orbit-gmail/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Generate today's Open Orbit Gmail briefing. Gmail is my only connected connector — pull yesterday's mail and render it as the opened Orbit Daily Digest email inside Gmail's reading view.", + "query": { + "en": "Generate today's Open Orbit Gmail briefing. Gmail is my only connected connector — pull yesterday's mail and render it as the opened Orbit Daily Digest email inside Gmail's reading view.", + "zh-CN": "使用这个插件完成以下任务:Generate today's Open Orbit Gmail briefing. Gmail is my only connected connector — pull yesterday's mail and render it as the opened Orbit Daily Digest email inside Gmail's reading view." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/orbit-linear/open-design.json b/plugins/_official/examples/orbit-linear/open-design.json index f9e56708a..c749d8170 100644 --- a/plugins/_official/examples/orbit-linear/open-design.json +++ b/plugins/_official/examples/orbit-linear/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Generate today's Open Orbit Linear briefing. Linear is my only connected connector — pull yesterday's issue movement, cycle progress, status changes, and assignments and render them in Linear's native Inbox layout.", + "query": { + "en": "Generate today's Open Orbit Linear briefing. Linear is my only connected connector — pull yesterday's issue movement, cycle progress, status changes, and assignments and render them in Linear's native Inbox layout.", + "zh-CN": "使用这个插件完成以下任务:Generate today's Open Orbit Linear briefing. Linear is my only connected connector — pull yesterday's issue movement, cycle progress, status changes, and assignments and render them in Linear's native Inbox layout." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/orbit-notion/open-design.json b/plugins/_official/examples/orbit-notion/open-design.json index c2da2ba1a..06249e002 100644 --- a/plugins/_official/examples/orbit-notion/open-design.json +++ b/plugins/_official/examples/orbit-notion/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Generate today's Open Orbit Notion briefing. Notion is my only connected connector — pull yesterday's document edits, comments, @ mentions, and database row changes and render the digest as a native Notion page.", + "query": { + "en": "Generate today's Open Orbit Notion briefing. Notion is my only connected connector — pull yesterday's document edits, comments, @ mentions, and database row changes and render the digest as a native Notion page.", + "zh-CN": "使用这个插件完成以下任务:Generate today's Open Orbit Notion briefing. Notion is my only connected connector — pull yesterday's document edits, comments, @ mentions, and database row changes and render the digest as a native Notion page." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/pm-spec/open-design.json b/plugins/_official/examples/pm-spec/open-design.json index 9969c44f9..54d24cdb4 100644 --- a/plugins/_official/examples/pm-spec/open-design.json +++ b/plugins/_official/examples/pm-spec/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Write me a PRD for adding two-factor auth to our SaaS app — problem, scope, milestones, open questions.", + "query": { + "en": "Write me a PRD for adding two-factor auth to our SaaS app — problem, scope, milestones, open questions.", + "zh-CN": "使用这个插件完成以下任务:Write me a PRD for adding two-factor auth to our SaaS app — problem, scope, milestones, open questions." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/pptx-html-fidelity-audit/open-design.json b/plugins/_official/examples/pptx-html-fidelity-audit/open-design.json index 9a936f7b7..d53fc6cb5 100644 --- a/plugins/_official/examples/pptx-html-fidelity-audit/open-design.json +++ b/plugins/_official/examples/pptx-html-fidelity-audit/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Audit a python-pptx export against its source HTML deck, identify layout/content drift (footer overflow, cropped content, missing italic/em, lost styling, off-rhythm spacing), and re-export with strict footer-rail + cursor-flow layout discipline. Use this skill whenever the user has a .pptx that was generated from an H" + "query": { + "en": "Audit a python-pptx export against its source HTML deck, identify layout/content drift (footer overflow, cropped content, missing italic/em, lost styling, off-rhythm spacing), and re-export with strict footer-rail + cursor-flow layout discipline. Use this skill whenever the user has a .pptx that was generated from an H", + "zh-CN": "使用这个插件完成以下任务:Audit a python-pptx export against its source HTML deck, identify layout/content drift (footer overflow, cropped content, missing italic/em, lost styling, off-rhythm spacing), and re-export with strict footer-rail + cursor-flow layout discipline. Use this skill whenever the user has a .pptx that was generated from an H" + } }, "context": { "skills": [ diff --git a/plugins/_official/examples/pricing-page/open-design.json b/plugins/_official/examples/pricing-page/open-design.json index 5bb473eec..0ebb09944 100644 --- a/plugins/_official/examples/pricing-page/open-design.json +++ b/plugins/_official/examples/pricing-page/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "A standalone pricing page — header, plan tiers, feature comparison table, and an FAQ. Use when the brief asks for \"pricing\", \"plans\", \"subscription tiers\", or a \"compare plans\" page.", + "query": { + "en": "A standalone pricing page — header, plan tiers, feature comparison table, and an FAQ. Use when the brief asks for \"pricing\", \"plans\", \"subscription tiers\", or a \"compare plans\" page.", + "zh-CN": "使用这个插件完成以下任务:A standalone pricing page — header, plan tiers, feature comparison table, and an FAQ. Use when the brief asks for \"pricing\", \"plans\", \"subscription tiers\", or a \"compare plans\" page." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/replit-deck/open-design.json b/plugins/_official/examples/replit-deck/open-design.json index e0cb72712..b07c085c3 100644 --- a/plugins/_official/examples/replit-deck/open-design.json +++ b/plugins/_official/examples/replit-deck/open-design.json @@ -44,7 +44,10 @@ "entry": "./index.html" }, "useCase": { - "query": "Single-file horizontal-swipe HTML deck in the style of Replit Slides's landing-page template gallery. Eight distinct themes (helix, holm, vance, bevel, world-dark, world-mint, atlas, bluehouse) — each a complete visual system (palette + type + accent) captured from replit.com/slides. Pick one theme, do not mix. For pit" + "query": { + "en": "Single-file horizontal-swipe HTML deck in the style of Replit Slides's landing-page template gallery. Eight distinct themes (helix, holm, vance, bevel, world-dark, world-mint, atlas, bluehouse) — each a complete visual system (palette + type + accent) captured from replit.com/slides. Pick one theme, do not mix. For pit", + "zh-CN": "使用这个插件完成以下任务:Single-file horizontal-swipe HTML deck in the style of Replit Slides's landing-page template gallery. Eight distinct themes (helix, holm, vance, bevel, world-dark, world-mint, atlas, bluehouse) — each a complete visual system (palette + type + accent) captured from replit.com/slides. Pick one theme, do not mix. For pit" + } }, "inputs": [ { diff --git a/plugins/_official/examples/saas-landing/open-design.json b/plugins/_official/examples/saas-landing/open-design.json index d38ff6c90..9883729f0 100644 --- a/plugins/_official/examples/saas-landing/open-design.json +++ b/plugins/_official/examples/saas-landing/open-design.json @@ -40,7 +40,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Single-page SaaS landing with hero, features, social proof, pricing, and CTA. Respects the active DESIGN.md color/typography/layout tokens. Trigger keywords: \"saas landing\", \"marketing page\", \"product landing\".", + "query": { + "en": "Single-page SaaS landing with hero, features, social proof, pricing, and CTA. Respects the active DESIGN.md color/typography/layout tokens. Trigger keywords: \"saas landing\", \"marketing page\", \"product landing\".", + "zh-CN": "使用这个插件完成以下任务:Single-page SaaS landing with hero, features, social proof, pricing, and CTA. Respects the active DESIGN.md color/typography/layout tokens. Trigger keywords: \"saas landing\", \"marketing page\", \"product landing\"." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/simple-deck/open-design.json b/plugins/_official/examples/simple-deck/open-design.json index 8cbd1a1f3..2311689cf 100644 --- a/plugins/_official/examples/simple-deck/open-design.json +++ b/plugins/_official/examples/simple-deck/open-design.json @@ -39,7 +39,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Single-file horizontal-swipe HTML deck. Built by copying the seed `assets/template.html` (which carries the proven 5-rule iframe nav script) and pasting slide layouts from `references/layouts.md`. Pitch decks, product overviews, study material — when you don't need the magazine aesthetic of `magazine-web-ppt`.", + "query": { + "en": "Single-file horizontal-swipe HTML deck. Built by copying the seed `assets/template.html` (which carries the proven 5-rule iframe nav script) and pasting slide layouts from `references/layouts.md`. Pitch decks, product overviews, study material — when you don't need the magazine aesthetic of `magazine-web-ppt`.", + "zh-CN": "使用这个插件完成以下任务:Single-file horizontal-swipe HTML deck. Built by copying the seed `assets/template.html` (which carries the proven 5-rule iframe nav script) and pasting slide layouts from `references/layouts.md`. Pitch decks, product overviews, study material — when you don't need the magazine aesthetic of `magazine-web-ppt`." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/social-carousel/open-design.json b/plugins/_official/examples/social-carousel/open-design.json index eae0eb78c..97523b370 100644 --- a/plugins/_official/examples/social-carousel/open-design.json +++ b/plugins/_official/examples/social-carousel/open-design.json @@ -44,7 +44,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Design a 3-card cinematic social carousel — ‘onwards.’, ‘to the next one.’, ‘looking ahead.’. 1080×1080 squares, drop-into-Instagram ready.", + "query": { + "en": "Design a 3-card cinematic social carousel — ‘onwards.’, ‘to the next one.’, ‘looking ahead.’. 1080×1080 squares, drop-into-Instagram ready.", + "zh-CN": "使用这个插件完成以下任务:Design a 3-card cinematic social carousel — ‘onwards.’, ‘to the next one.’, ‘looking ahead.’. 1080×1080 squares, drop-into-Instagram ready." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/social-media-dashboard/open-design.json b/plugins/_official/examples/social-media-dashboard/open-design.json index 718e2bf2c..05d88fe28 100644 --- a/plugins/_official/examples/social-media-dashboard/open-design.json +++ b/plugins/_official/examples/social-media-dashboard/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Create a social media analytics dashboard using my Design System. Show X, LinkedIn, YouTube, Instagram with follower counts, engagement rate, likes, reposts, trending topics, and top comments.", + "query": { + "en": "Create a social media analytics dashboard using my Design System. Show X, LinkedIn, YouTube, Instagram with follower counts, engagement rate, likes, reposts, trending topics, and top comments.", + "zh-CN": "使用这个插件完成以下任务:Create a social media analytics dashboard using my Design System. Show X, LinkedIn, YouTube, Instagram with follower counts, engagement rate, likes, reposts, trending topics, and top comments." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/social-media-matrix-tracker-template/open-design.json b/plugins/_official/examples/social-media-matrix-tracker-template/open-design.json index a7ae8999e..a39efcc97 100644 --- a/plugins/_official/examples/social-media-matrix-tracker-template/open-design.json +++ b/plugins/_official/examples/social-media-matrix-tracker-template/open-design.json @@ -48,7 +48,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Create a social media matrix tracker dashboard template using my DESIGN.md. Keep the cinematic glassmorphism style, multi-chart analytics sections, hover tooltips, pin/drag range analysis, and light/dark switching.", + "query": { + "en": "Create a social media matrix tracker dashboard template using my DESIGN.md. Keep the cinematic glassmorphism style, multi-chart analytics sections, hover tooltips, pin/drag range analysis, and light/dark switching.", + "zh-CN": "使用这个插件完成以下任务:Create a social media matrix tracker dashboard template using my DESIGN.md. Keep the cinematic glassmorphism style, multi-chart analytics sections, hover tooltips, pin/drag range analysis, and light/dark switching." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/sprite-animation/open-design.json b/plugins/_official/examples/sprite-animation/open-design.json index cfdca8b34..94e8630eb 100644 --- a/plugins/_official/examples/sprite-animation/open-design.json +++ b/plugins/_official/examples/sprite-animation/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Create a sprite-based animation introducing trivia about Nintendo's history. Combine pixel mascots, animated text, and a Hanafuda accent. Use color and type that feel like the Nintendo brand.", + "query": { + "en": "Create a sprite-based animation introducing trivia about Nintendo's history. Combine pixel mascots, animated text, and a Hanafuda accent. Use color and type that feel like the Nintendo brand.", + "zh-CN": "使用这个插件完成以下任务:Create a sprite-based animation introducing trivia about Nintendo's history. Combine pixel mascots, animated text, and a Hanafuda accent. Use color and type that feel like the Nintendo brand." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/team-okrs/open-design.json b/plugins/_official/examples/team-okrs/open-design.json index 0a9bb13a2..91d73c7f4 100644 --- a/plugins/_official/examples/team-okrs/open-design.json +++ b/plugins/_official/examples/team-okrs/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Build an OKR tracker for Q4 — three objectives, three key results each, progress bars, owners, status pills.", + "query": { + "en": "Build an OKR tracker for Q4 — three objectives, three key results each, progress bars, owners, status pills.", + "zh-CN": "使用这个插件完成以下任务:Build an OKR tracker for Q4 — three objectives, three key results each, progress bars, owners, status pills." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/trading-analysis-dashboard-template/open-design.json b/plugins/_official/examples/trading-analysis-dashboard-template/open-design.json index 2b5047b19..c2119aa06 100644 --- a/plugins/_official/examples/trading-analysis-dashboard-template/open-design.json +++ b/plugins/_official/examples/trading-analysis-dashboard-template/open-design.json @@ -43,7 +43,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Create a Wall-Street-grade trading analysis dashboard template with a left rail, risk cockpit, market charts, live/demo mode, and realistic dense data. Keep it single-file HTML.", + "query": { + "en": "Create a Wall-Street-grade trading analysis dashboard template with a left rail, risk cockpit, market charts, live/demo mode, and realistic dense data. Keep it single-file HTML.", + "zh-CN": "使用这个插件完成以下任务:Create a Wall-Street-grade trading analysis dashboard template with a left rail, risk cockpit, market charts, live/demo mode, and realistic dense data. Keep it single-file HTML." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/tweaks/open-design.json b/plugins/_official/examples/tweaks/open-design.json index 9e2abd9d3..662db0012 100644 --- a/plugins/_official/examples/tweaks/open-design.json +++ b/plugins/_official/examples/tweaks/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Wrap this landing page with a tweak panel — accent color, type scale, density, light/dark — persist to localStorage so the user can refresh without losing their choice.", + "query": { + "en": "Wrap this landing page with a tweak panel — accent color, type scale, density, light/dark — persist to localStorage so the user can refresh without losing their choice.", + "zh-CN": "使用这个插件完成以下任务:Wrap this landing page with a tweak panel — accent color, type scale, density, light/dark — persist to localStorage so the user can refresh without losing their choice." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/video-shortform/open-design.json b/plugins/_official/examples/video-shortform/open-design.json index 8965f26a2..e4c5b428e 100644 --- a/plugins/_official/examples/video-shortform/open-design.json +++ b/plugins/_official/examples/video-shortform/open-design.json @@ -38,7 +38,10 @@ "entry": "./example.html" }, "useCase": { - "query": "5-second product reveal — ceramic coffee mug rotating on a soft\npaper backdrop, warm side-light from camera-left, micro dust motes\ndrifting through the beam. Cinematic, 16:9, slow drift on the camera.", + "query": { + "en": "5-second product reveal — ceramic coffee mug rotating on a soft\npaper backdrop, warm side-light from camera-left, micro dust motes\ndrifting through the beam. Cinematic, 16:9, slow drift on the camera.", + "zh-CN": "使用这个插件完成以下任务:5-second product reveal — ceramic coffee mug rotating on a soft\npaper backdrop, warm side-light from camera-left, micro dust motes\ndrifting through the beam. Cinematic, 16:9, slow drift on the camera." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/waitlist-page/open-design.json b/plugins/_official/examples/waitlist-page/open-design.json index 72ca214a3..cc7a0c800 100644 --- a/plugins/_official/examples/waitlist-page/open-design.json +++ b/plugins/_official/examples/waitlist-page/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Make a waitlist page for a design tool — clean, minimal, with a custom logo and one call-to-action.", + "query": { + "en": "Make a waitlist page for a design tool — clean, minimal, with a custom logo and one call-to-action.", + "zh-CN": "使用这个插件完成以下任务:Make a waitlist page for a design tool — clean, minimal, with a custom logo and one call-to-action." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/web-prototype-taste-brutalist/open-design.json b/plugins/_official/examples/web-prototype-taste-brutalist/open-design.json index 91e28a913..ba462ee9b 100644 --- a/plugins/_official/examples/web-prototype-taste-brutalist/open-design.json +++ b/plugins/_official/examples/web-prototype-taste-brutalist/open-design.json @@ -35,7 +35,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Swiss industrial-print web prototype. Newsprint canvas, monolithic black grotesque, viewport-bleeding numerals, hairline grid dividers, hazard-red accent, ASCII syntax decoration. Distilled from Leonxlnx/taste-skill `brutalist-skill` (Swiss Industrial Print mode).", + "query": { + "en": "Swiss industrial-print web prototype. Newsprint canvas, monolithic black grotesque, viewport-bleeding numerals, hairline grid dividers, hazard-red accent, ASCII syntax decoration. Distilled from Leonxlnx/taste-skill `brutalist-skill` (Swiss Industrial Print mode).", + "zh-CN": "使用这个插件完成以下任务:Swiss industrial-print web prototype. Newsprint canvas, monolithic black grotesque, viewport-bleeding numerals, hairline grid dividers, hazard-red accent, ASCII syntax decoration. Distilled from Leonxlnx/taste-skill `brutalist-skill` (Swiss Industrial Print mode)." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/web-prototype-taste-editorial/open-design.json b/plugins/_official/examples/web-prototype-taste-editorial/open-design.json index d797de7f7..5216312ac 100644 --- a/plugins/_official/examples/web-prototype-taste-editorial/open-design.json +++ b/plugins/_official/examples/web-prototype-taste-editorial/open-design.json @@ -35,7 +35,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Editorial-minimalist web prototype. Warm monochrome canvas, serif display + grotesque body, 1px hairline borders, muted pastel chips, generous macro-whitespace, ambient micro-motion. Distilled from Leonxlnx/taste-skill `minimalist-skill`.", + "query": { + "en": "Editorial-minimalist web prototype. Warm monochrome canvas, serif display + grotesque body, 1px hairline borders, muted pastel chips, generous macro-whitespace, ambient micro-motion. Distilled from Leonxlnx/taste-skill `minimalist-skill`.", + "zh-CN": "使用这个插件完成以下任务:Editorial-minimalist web prototype. Warm monochrome canvas, serif display + grotesque body, 1px hairline borders, muted pastel chips, generous macro-whitespace, ambient micro-motion. Distilled from Leonxlnx/taste-skill `minimalist-skill`." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/web-prototype-taste-soft/open-design.json b/plugins/_official/examples/web-prototype-taste-soft/open-design.json index 5b585b415..65b13445a 100644 --- a/plugins/_official/examples/web-prototype-taste-soft/open-design.json +++ b/plugins/_official/examples/web-prototype-taste-soft/open-design.json @@ -35,7 +35,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Apple-tier soft web prototype. Silver/cream canvas, double-bezel cards, button-in-button CTAs, generous squircle radii, spring motion, ambient mesh. Distilled from Leonxlnx/taste-skill `soft-skill` + sections 4–8 of `taste-skill`.", + "query": { + "en": "Apple-tier soft web prototype. Silver/cream canvas, double-bezel cards, button-in-button CTAs, generous squircle radii, spring motion, ambient mesh. Distilled from Leonxlnx/taste-skill `soft-skill` + sections 4–8 of `taste-skill`.", + "zh-CN": "使用这个插件完成以下任务:Apple-tier soft web prototype. Silver/cream canvas, double-bezel cards, button-in-button CTAs, generous squircle radii, spring motion, ambient mesh. Distilled from Leonxlnx/taste-skill `soft-skill` + sections 4–8 of `taste-skill`." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/web-prototype/open-design.json b/plugins/_official/examples/web-prototype/open-design.json index e901b553f..9fd9730fe 100644 --- a/plugins/_official/examples/web-prototype/open-design.json +++ b/plugins/_official/examples/web-prototype/open-design.json @@ -42,7 +42,10 @@ "entry": "./example.html" }, "useCase": { - "query": "General-purpose desktop web prototype. Single self-contained HTML file built by copying the seed `assets/template.html` and pasting section layouts from `references/layouts.md`. Default for any landing / marketing / docs / SaaS page when no more specific skill matches.", + "query": { + "en": "General-purpose desktop web prototype. Single self-contained HTML file built by copying the seed `assets/template.html` and pasting section layouts from `references/layouts.md`. Default for any landing / marketing / docs / SaaS page when no more specific skill matches.", + "zh-CN": "使用这个插件完成以下任务:General-purpose desktop web prototype. Single self-contained HTML file built by copying the seed `assets/template.html` and pasting section layouts from `references/layouts.md`. Default for any landing / marketing / docs / SaaS page when no more specific skill matches." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/weekly-update/open-design.json b/plugins/_official/examples/weekly-update/open-design.json index 885346fbd..f05b15b4d 100644 --- a/plugins/_official/examples/weekly-update/open-design.json +++ b/plugins/_official/examples/weekly-update/open-design.json @@ -40,7 +40,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Make a weekly update deck for the Growth squad — what shipped, in flight, blocked, metrics, asks for next week.", + "query": { + "en": "Make a weekly update deck for the Growth squad — what shipped, in flight, blocked, metrics, asks for next week.", + "zh-CN": "使用这个插件完成以下任务:Make a weekly update deck for the Growth squad — what shipped, in flight, blocked, metrics, asks for next week." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/wireframe-sketch/open-design.json b/plugins/_official/examples/wireframe-sketch/open-design.json index 98f0368cf..03fde63c1 100644 --- a/plugins/_official/examples/wireframe-sketch/open-design.json +++ b/plugins/_official/examples/wireframe-sketch/open-design.json @@ -44,7 +44,10 @@ "entry": "./example.html" }, "useCase": { - "query": "Sketch a hand-drawn wireframe v0.1 for a portal — four tabbed variants on graph paper, marker headlines, sticky-note annotations, hatched chart placeholders.", + "query": { + "en": "Sketch a hand-drawn wireframe v0.1 for a portal — four tabbed variants on graph paper, marker headlines, sticky-note annotations, hatched chart placeholders.", + "zh-CN": "使用这个插件完成以下任务:Sketch a hand-drawn wireframe v0.1 for a portal — four tabbed variants on graph paper, marker headlines, sticky-note annotations, hatched chart placeholders." + }, "exampleOutputs": [ { "path": "./example.html", diff --git a/plugins/_official/examples/x-research/open-design.json b/plugins/_official/examples/x-research/open-design.json index f064f0fe9..1a389be8c 100644 --- a/plugins/_official/examples/x-research/open-design.json +++ b/plugins/_official/examples/x-research/open-design.json @@ -45,7 +45,10 @@ "entry": "./example.html" }, "useCase": { - "query": "X/Twitter public sentiment research for recent market, company, product, or community discourse. Use when the brief asks what people are saying on X, Twitter sentiment, CT sentiment, public opinion, expert posts, or social reaction around a stock, sector, company, product, or market event." + "query": { + "en": "X/Twitter public sentiment research for recent market, company, product, or community discourse. Use when the brief asks what people are saying on X, Twitter sentiment, CT sentiment, public opinion, expert posts, or social reaction around a stock, sector, company, product, or market event.", + "zh-CN": "使用这个插件完成以下任务:X/Twitter public sentiment research for recent market, company, product, or community discourse. Use when the brief asks what people are saying on X, Twitter sentiment, CT sentiment, public opinion, expert posts, or social reaction around a stock, sector, company, product, or market event." + } }, "context": { "skills": [ diff --git a/plugins/_official/image-templates/3d-stone-staircase-evolution-infographic/open-design.json b/plugins/_official/image-templates/3d-stone-staircase-evolution-infographic/open-design.json index 4b2b36c7f..edea22131 100644 --- a/plugins/_official/image-templates/3d-stone-staircase-evolution-infographic/open-design.json +++ b/plugins/_official/image-templates/3d-stone-staircase-evolution-infographic/open-design.json @@ -28,7 +28,10 @@ "poster": "https://cms-assets.youmind.com/media/1776661968404_8a5flm_HGQc_KOaMAA2vt0.jpg" }, "useCase": { - "query": "{\n \"type\": \"evolutionary timeline infographic\",\n \"instruction\": \"Using REFERENCE_0 as a structural base, transform the flat vector design into a highly realistic 3D infographic. Replace the smooth ramps with distinct stone steps and upgrade all organisms to photorealistic 3D models.\",\n \"style\": {\n \"background\": \"{argument name=\\\"background style\\\" default=\\\"vintage textured parchment paper\\\"}\",\n \"staircase\": \"{argument name=\\\"staircase material\\\" default=\\\"realistic textured stone blocks\\\"}\",\n \"subjects\": \"{argument name=\\\"organism style\\\" default=\\\"highly detailed photorealistic 3D renders\\\"}\"\n },\n \"layout\": {\n \"main_title\": \"{argument name=\\\"main title\\\" default=\\\"人类演化\\\"}\",\n \"sections\": [\n {\n \"position\": \"left sidebar\",\n \"count\": 8,\n \"labels\": [\"L0: 单细胞生命\", \"L1: 多细胞生物\", \"L2: 动物界\", \"L3: 脊索动物\", \"L4: 上陆革命\", \"L5: 哺乳纲\", \"L6: 人科演化\", \"L7: 智人纪元\"]\n },\n {\n \"position\": \"top right\",\n \"title\": \"获得的功能 / 失去的功能\",\n \"description\": \"Legend with plus and minus icons\"\n },\n {\n \"position\": \"bottom center\",\n \"title\": \"演化关键里程碑\",\n \"count\": 6,\n \"description\": \"Timeline with a silhouette graphic of 6 figures showing ape-to-human evolution\"\n }\n ],\n \"centerpiece\": {\n \"description\": \"Winding stone staircase with 25 numbered steps featuring specific organisms.\",\n \"count\": 25,\n \"notable_elements\": [\n \"Step 07: Jellyfish\",\n \"Step 09: Ammonite\",\n \"Step 10: Trilobite\",\n \"Step 24: Walking human\",\n \"Step 25: {argument name=\\\"future evolution concept\\\" default=\\\"glowing cosmic silhouette with a question mark\\\"}\"\n ]\n }\n }\n}" + "query": { + "en": "Use this plugin for the following Chinese-language task: {\n \"type\": \"evolutionary timeline infographic\",\n \"instruction\": \"Using REFERENCE_0 as a structural base, transform the flat vector design into a highly realistic 3D infographic. Replace the smooth ramps with distinct stone steps and upgrade all organisms to photorealistic 3D models.\",\n \"style\": {\n \"background\": \"{argument name=\\\"background style\\\" default=\\\"vintage textured parchment paper\\\"}\",\n \"staircase\": \"{argument name=\\\"staircase material\\\" default=\\\"realistic textured stone blocks\\\"}\",\n \"subjects\": \"{argument name=\\\"organism style\\\" default=\\\"highly detailed photorealistic 3D renders\\\"}\"\n },\n \"layout\": {\n \"main_title\": \"{argument name=\\\"main title\\\" default=\\\"人类演化\\\"}\",\n \"sections\": [\n {\n \"position\": \"left sidebar\",\n \"count\": 8,\n \"labels\": [\"L0: 单细胞生命\", \"L1: 多细胞生物\", \"L2: 动物界\", \"L3: 脊索动物\", \"L4: 上陆革命\", \"L5: 哺乳纲\", \"L6: 人科演化\", \"L7: 智人纪元\"]\n },\n {\n \"position\": \"top right\",\n \"title\": \"获得的功能 / 失去的功能\",\n \"description\": \"Legend with plus and minus icons\"\n },\n {\n \"position\": \"bottom center\",\n \"title\": \"演化关键里程碑\",\n \"count\": 6,\n \"description\": \"Timeline with a silhouette graphic of 6 figures showing ape-to-human evolution\"\n }\n ],\n \"centerpiece\": {\n \"description\": \"Winding stone staircase with 25 numbered steps featuring specific organisms.\",\n \"count\": 25,\n \"notable_elements\": [\n \"Step 07: Jellyfish\",\n \"Step 09: Ammonite\",\n \"Step 10: Trilobite\",\n \"Step 24: Walking human\",\n \"Step 25: {argument name=\\\"future evolution concept\\\" default=\\\"glowing cosmic silhouette with a question mark\\\"}\"\n ]\n }\n }\n}", + "zh-CN": "{\n \"type\": \"evolutionary timeline infographic\",\n \"instruction\": \"Using REFERENCE_0 as a structural base, transform the flat vector design into a highly realistic 3D infographic. Replace the smooth ramps with distinct stone steps and upgrade all organisms to photorealistic 3D models.\",\n \"style\": {\n \"background\": \"{argument name=\\\"background style\\\" default=\\\"vintage textured parchment paper\\\"}\",\n \"staircase\": \"{argument name=\\\"staircase material\\\" default=\\\"realistic textured stone blocks\\\"}\",\n \"subjects\": \"{argument name=\\\"organism style\\\" default=\\\"highly detailed photorealistic 3D renders\\\"}\"\n },\n \"layout\": {\n \"main_title\": \"{argument name=\\\"main title\\\" default=\\\"人类演化\\\"}\",\n \"sections\": [\n {\n \"position\": \"left sidebar\",\n \"count\": 8,\n \"labels\": [\"L0: 单细胞生命\", \"L1: 多细胞生物\", \"L2: 动物界\", \"L3: 脊索动物\", \"L4: 上陆革命\", \"L5: 哺乳纲\", \"L6: 人科演化\", \"L7: 智人纪元\"]\n },\n {\n \"position\": \"top right\",\n \"title\": \"获得的功能 / 失去的功能\",\n \"description\": \"Legend with plus and minus icons\"\n },\n {\n \"position\": \"bottom center\",\n \"title\": \"演化关键里程碑\",\n \"count\": 6,\n \"description\": \"Timeline with a silhouette graphic of 6 figures showing ape-to-human evolution\"\n }\n ],\n \"centerpiece\": {\n \"description\": \"Winding stone staircase with 25 numbered steps featuring specific organisms.\",\n \"count\": 25,\n \"notable_elements\": [\n \"Step 07: Jellyfish\",\n \"Step 09: Ammonite\",\n \"Step 10: Trilobite\",\n \"Step 24: Walking human\",\n \"Step 25: {argument name=\\\"future evolution concept\\\" default=\\\"glowing cosmic silhouette with a question mark\\\"}\"\n ]\n }\n }\n}" + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/anime-martial-arts-battle-illustration/open-design.json b/plugins/_official/image-templates/anime-martial-arts-battle-illustration/open-design.json index e233c0b35..ba9de1570 100644 --- a/plugins/_official/image-templates/anime-martial-arts-battle-illustration/open-design.json +++ b/plugins/_official/image-templates/anime-martial-arts-battle-illustration/open-design.json @@ -29,7 +29,10 @@ "poster": "https://cms-assets.youmind.com/media/1776756799880_c8u8w7_HGUKjjaasAAvVRa.jpg" }, "useCase": { - "query": "An anime-style illustration of a {argument name=\"action type\" default=\"high-impact martial arts battle\"} between two young female fighters in a {argument name=\"setting\" default=\"traditional wooden martial arts dojo\"}. In the foreground, a girl with black hair in a high bun wears a {argument name=\"character 1 color theme\" default=\"red and white\"} Chinese-style martial arts outfit with baggy pants. She is in a dynamic, low, forward-thrusting stance, surrounded by swirling red energy and water splashes. In the background to the right, a girl with light purple hair in twin buns wears a {argument name=\"character 2 color theme\" default=\"green and purple\"} Chinese dress with gold embroidery and black tights. She is leaping through the air in a flying kick pose, surrounded by swirling blue energy. The wooden floorboards are splintering from the intense impact, with debris and dust flying through the air. Above them hangs a weathered wooden sign with the text \"{argument name=\"sign text\" default=\"武術会\"}\". The scene features dramatic lighting, a low-angle dynamic perspective, and intense action effects." + "query": { + "en": "Use this plugin for the following Chinese-language task: An anime-style illustration of a {argument name=\"action type\" default=\"high-impact martial arts battle\"} between two young female fighters in a {argument name=\"setting\" default=\"traditional wooden martial arts dojo\"}. In the foreground, a girl with black hair in a high bun wears a {argument name=\"character 1 color theme\" default=\"red and white\"} Chinese-style martial arts outfit with baggy pants. She is in a dynamic, low, forward-thrusting stance, surrounded by swirling red energy and water splashes. In the background to the right, a girl with light purple hair in twin buns wears a {argument name=\"character 2 color theme\" default=\"green and purple\"} Chinese dress with gold embroidery and black tights. She is leaping through the air in a flying kick pose, surrounded by swirling blue energy. The wooden floorboards are splintering from the intense impact, with debris and dust flying through the air. Above them hangs a weathered wooden sign with the text \"{argument name=\"sign text\" default=\"武術会\"}\". The scene features dramatic lighting, a low-angle dynamic perspective, and intense action effects.", + "zh-CN": "An anime-style illustration of a {argument name=\"action type\" default=\"high-impact martial arts battle\"} between two young female fighters in a {argument name=\"setting\" default=\"traditional wooden martial arts dojo\"}. In the foreground, a girl with black hair in a high bun wears a {argument name=\"character 1 color theme\" default=\"red and white\"} Chinese-style martial arts outfit with baggy pants. She is in a dynamic, low, forward-thrusting stance, surrounded by swirling red energy and water splashes. In the background to the right, a girl with light purple hair in twin buns wears a {argument name=\"character 2 color theme\" default=\"green and purple\"} Chinese dress with gold embroidery and black tights. She is leaping through the air in a flying kick pose, surrounded by swirling blue energy. The wooden floorboards are splintering from the intense impact, with debris and dust flying through the air. Above them hangs a weathered wooden sign with the text \"{argument name=\"sign text\" default=\"武術会\"}\". The scene features dramatic lighting, a low-angle dynamic perspective, and intense action effects." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/e-commerce-live-stream-ui-mockup/open-design.json b/plugins/_official/image-templates/e-commerce-live-stream-ui-mockup/open-design.json index d745633ed..51d96d3bf 100644 --- a/plugins/_official/image-templates/e-commerce-live-stream-ui-mockup/open-design.json +++ b/plugins/_official/image-templates/e-commerce-live-stream-ui-mockup/open-design.json @@ -30,7 +30,10 @@ "poster": "https://cms-assets.youmind.com/media/1776699445498_ga2ry5_HGO7H0DWkAApdKK.jpg" }, "useCase": { - "query": "{\n \"type\": \"live stream UI mockup\",\n \"subject\": {\n \"description\": \"portrait of {argument name=\\\"host name\\\" default=\\\"Elon Musk\\\"}, smiling, wearing a black t-shirt with a white technical schematic graphic\",\n \"background\": \"left side shows a screen with '{argument name=\\\"left background logo\\\" default=\\\"SPACEX\\\"}' text, right side shows a red '{argument name=\\\"right background logo\\\" default=\\\"Tesla T logo\\\"}' and a dark car\"\n },\n \"ui_overlay\": {\n \"top_header\": {\n \"host_info\": \"avatar, name '{argument name=\\\"host name\\\" default=\\\"Elon Musk\\\"}', subtext '55.6万本场点赞', red '关注' button\",\n \"rank_badge\": \"gold coin icon with '全站第1名'\",\n \"viewer_stats\": \"3 top viewer avatars with '12.3w', '8.6w', '5.7w', total '68.7万', 'X' close button\",\n \"right_links\": \"'更多直播 >', '礼物展馆 0/24' with blue '经典' tag\"\n },\n \"mid_left_gifts\": {\n \"count\": 2,\n \"items\": [\n \"avatar '科技爱好者', '送小心心', heart icon x 1314\",\n \"avatar '星辰大海', '送火箭', rocket icon x 666\"\n ]\n },\n \"bottom_left_chat\": {\n \"system_message\": \"level 37 badge '宇宙漫游者 加入了直播间'\",\n \"message_count\": 7,\n \"messages\": [\n \"小火箭: 马斯克!未来可期!🚀\",\n \"future: 特斯拉Model 2什么时候出?\",\n \"星空梦想家: SpaceX今年能上火星吗?\",\n \"AI探索者: Neuralink进展如何?\",\n \"帅气的网友: 马总好!\",\n \"Mars: 第一次来你的直播,超激动!\",\n \"用户123: 讲讲AI吧,会取代人类吗?\"\n ]\n },\n \"bottom_right_product_card\": {\n \"hot_tag\": \"orange '热卖 x 1888'\",\n \"image\": \"Tesla Cybertruck\",\n \"title\": \"{argument name=\\\"product name\\\" default=\\\"特斯拉Cybertruck 电动皮卡\\\"}\",\n \"price\": \"{argument name=\\\"product price\\\" default=\\\"¥ 1,618,000\\\"}\",\n \"button\": \"red '抢' button\",\n \"floating_animation\": \"translucent hearts floating up the right edge\"\n },\n \"bottom_bar\": {\n \"input_field\": \"'说点什么...'\",\n \"icons\": [\"smiley face\", \"three dots\", \"shopping cart\", \"gift box\", \"share\"]\n }\n }\n}" + "query": { + "en": "Use this plugin for the following Chinese-language task: {\n \"type\": \"live stream UI mockup\",\n \"subject\": {\n \"description\": \"portrait of {argument name=\\\"host name\\\" default=\\\"Elon Musk\\\"}, smiling, wearing a black t-shirt with a white technical schematic graphic\",\n \"background\": \"left side shows a screen with '{argument name=\\\"left background logo\\\" default=\\\"SPACEX\\\"}' text, right side shows a red '{argument name=\\\"right background logo\\\" default=\\\"Tesla T logo\\\"}' and a dark car\"\n },\n \"ui_overlay\": {\n \"top_header\": {\n \"host_info\": \"avatar, name '{argument name=\\\"host name\\\" default=\\\"Elon Musk\\\"}', subtext '55.6万本场点赞', red '关注' button\",\n \"rank_badge\": \"gold coin icon with '全站第1名'\",\n \"viewer_stats\": \"3 top viewer avatars with '12.3w', '8.6w', '5.7w', total '68.7万', 'X' close button\",\n \"right_links\": \"'更多直播 >', '礼物展馆 0/24' with blue '经典' tag\"\n },\n \"mid_left_gifts\": {\n \"count\": 2,\n \"items\": [\n \"avatar '科技爱好者', '送小心心', heart icon x 1314\",\n \"avatar '星辰大海', '送火箭', rocket icon x 666\"\n ]\n },\n \"bottom_left_chat\": {\n \"system_message\": \"level 37 badge '宇宙漫游者 加入了直播间'\",\n \"message_count\": 7,\n \"messages\": [\n \"小火箭: 马斯克!未来可期!🚀\",\n \"future: 特斯拉Model 2什么时候出?\",\n \"星空梦想家: SpaceX今年能上火星吗?\",\n \"AI探索者: Neuralink进展如何?\",\n \"帅气的网友: 马总好!\",\n \"Mars: 第一次来你的直播,超激动!\",\n \"用户123: 讲讲AI吧,会取代人类吗?\"\n ]\n },\n \"bottom_right_product_card\": {\n \"hot_tag\": \"orange '热卖 x 1888'\",\n \"image\": \"Tesla Cybertruck\",\n \"title\": \"{argument name=\\\"product name\\\" default=\\\"特斯拉Cybertruck 电动皮卡\\\"}\",\n \"price\": \"{argument name=\\\"product price\\\" default=\\\"¥ 1,618,000\\\"}\",\n \"button\": \"red '抢' button\",\n \"floating_animation\": \"translucent hearts floating up the right edge\"\n },\n \"bottom_bar\": {\n \"input_field\": \"'说点什么...'\",\n \"icons\": [\"smiley face\", \"three dots\", \"shopping cart\", \"gift box\", \"share\"]\n }\n }\n}", + "zh-CN": "{\n \"type\": \"live stream UI mockup\",\n \"subject\": {\n \"description\": \"portrait of {argument name=\\\"host name\\\" default=\\\"Elon Musk\\\"}, smiling, wearing a black t-shirt with a white technical schematic graphic\",\n \"background\": \"left side shows a screen with '{argument name=\\\"left background logo\\\" default=\\\"SPACEX\\\"}' text, right side shows a red '{argument name=\\\"right background logo\\\" default=\\\"Tesla T logo\\\"}' and a dark car\"\n },\n \"ui_overlay\": {\n \"top_header\": {\n \"host_info\": \"avatar, name '{argument name=\\\"host name\\\" default=\\\"Elon Musk\\\"}', subtext '55.6万本场点赞', red '关注' button\",\n \"rank_badge\": \"gold coin icon with '全站第1名'\",\n \"viewer_stats\": \"3 top viewer avatars with '12.3w', '8.6w', '5.7w', total '68.7万', 'X' close button\",\n \"right_links\": \"'更多直播 >', '礼物展馆 0/24' with blue '经典' tag\"\n },\n \"mid_left_gifts\": {\n \"count\": 2,\n \"items\": [\n \"avatar '科技爱好者', '送小心心', heart icon x 1314\",\n \"avatar '星辰大海', '送火箭', rocket icon x 666\"\n ]\n },\n \"bottom_left_chat\": {\n \"system_message\": \"level 37 badge '宇宙漫游者 加入了直播间'\",\n \"message_count\": 7,\n \"messages\": [\n \"小火箭: 马斯克!未来可期!🚀\",\n \"future: 特斯拉Model 2什么时候出?\",\n \"星空梦想家: SpaceX今年能上火星吗?\",\n \"AI探索者: Neuralink进展如何?\",\n \"帅气的网友: 马总好!\",\n \"Mars: 第一次来你的直播,超激动!\",\n \"用户123: 讲讲AI吧,会取代人类吗?\"\n ]\n },\n \"bottom_right_product_card\": {\n \"hot_tag\": \"orange '热卖 x 1888'\",\n \"image\": \"Tesla Cybertruck\",\n \"title\": \"{argument name=\\\"product name\\\" default=\\\"特斯拉Cybertruck 电动皮卡\\\"}\",\n \"price\": \"{argument name=\\\"product price\\\" default=\\\"¥ 1,618,000\\\"}\",\n \"button\": \"red '抢' button\",\n \"floating_animation\": \"translucent hearts floating up the right edge\"\n },\n \"bottom_bar\": {\n \"input_field\": \"'说点什么...'\",\n \"icons\": [\"smiley face\", \"three dots\", \"shopping cart\", \"gift box\", \"share\"]\n }\n }\n}" + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/game-screenshot-anime-fighting-game-captain-ryuuga-vs-kaze-renshin/open-design.json b/plugins/_official/image-templates/game-screenshot-anime-fighting-game-captain-ryuuga-vs-kaze-renshin/open-design.json index 4640e5c3d..688c1fc9c 100644 --- a/plugins/_official/image-templates/game-screenshot-anime-fighting-game-captain-ryuuga-vs-kaze-renshin/open-design.json +++ b/plugins/_official/image-templates/game-screenshot-anime-fighting-game-captain-ryuuga-vs-kaze-renshin/open-design.json @@ -35,7 +35,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/game-screenshot-anime-fighting-game-captain-ryuuga-vs-kaze-renshin.jpg" }, "useCase": { - "query": "A high-detail anime fighting game screenshot, 16:9 aspect ratio, cinematic key visual in the style of Street Fighter 6 or Tekken 8 intro art. Two anime male warriors in dynamic combat poses facing each other in the center.\n\n# LEFT FIGHTER\n{argument name=\"left_fighter\" default=\"shirtless, wearing a worn straw hat, red battle-scar across left eye, grinning with clenched teeth, shark-tooth necklace, tattered red cape, black pants with a skull-pattern sash, bare feet, right fist raised ready to strike, orange fire particles and water splashing at his feet, warm orange-red energy aura surrounding him\"}.\n\n# RIGHT FIGHTER\n{argument name=\"right_fighter\" default=\"spiky jet-black hair, wearing an orange martial-arts gi with a single black kanji character on the left chest, blue waistband sash, black wristbands, both hands in a charging pose with a massive crackling blue lightning energy sphere building between them, intense focused expression, bright blue electric aura\"}.\n\n# BACKGROUND\n{argument name=\"background\" default=\"dramatic nighttime Chinese-style temple courtyard, red pagoda architecture, stone-carved dragon columns, dark cloudy sky with blue moonlight, glowing paper lanterns, scattered debris on the ground\"}.\n\n# GAME UI OVERLAY\n- Top bar: two horizontal health bars (red, mostly full) with two smaller blue meter bars below, a round central timer reading \"{argument name=\"timer\" default=\"45\"}\" in white, labeled \"ROUND {argument name=\"round_number\" default=\"2\"}\" below it, left percentage \"{argument name=\"left_hp_percent\" default=\"75%\"}\", right percentage \"{argument name=\"right_hp_percent\" default=\"80%\"}\".\n- Top-left corner: P1 portrait avatar of the left fighter, character name \"{argument name=\"left_name\" default=\"CAPTAIN RYUUGA\"}\" in bold, subtitle \"{argument name=\"left_title\" default=\"KING OF THE SEAS\"}\", {argument name=\"left_emblem\" default=\"skull-and-crossed-swords emblem\"}.\n- Top-right corner: P2 portrait avatar of the right fighter, character name \"{argument name=\"right_name\" default=\"KAZE RENSHIN\"}\" in bold, subtitle \"{argument name=\"right_title\" default=\"DRAGON'S FIST\"}\", {argument name=\"right_emblem\" default=\"dragon emblem\"}.\n- Bottom-left: large orange number \"{argument name=\"left_combo\" default=\"12\"}\" with \"HITS COMBO\" text, horizontal orange gauge bar labeled \"{argument name=\"left_gauge_label\" default=\"3 MAX\"}\".\n- Bottom-right: large blue number \"{argument name=\"right_combo\" default=\"15\"}\" with \"HITS COMBO\" text, horizontal blue gauge bar labeled \"{argument name=\"right_gauge_label\" default=\"MAX 4\"}\".\n\n# Overall style\nCinematic, hyperdetailed, vibrant color grading, high contrast between warm orange (left half) and cool blue (right half), official fighting game key art quality, 4K resolution.\n\n# Negative prompt\nno watermark, no studio logos, no warped Latin or Japanese characters in UI, no gibberish glyphs, no low-res UI, no duplicated HUD widgets, no extra fingers on either fighter, no misaligned or crooked health bars, no copyrighted character likeness (original anime-styled designs only), no modern firearms, no real-world brands, no cluttered or overlapping UI panels, no signature." + "query": { + "en": "A high-detail anime fighting game screenshot, 16:9 aspect ratio, cinematic key visual in the style of Street Fighter 6 or Tekken 8 intro art. Two anime male warriors in dynamic combat poses facing each other in the center.\n\n# LEFT FIGHTER\n{argument name=\"left_fighter\" default=\"shirtless, wearing a worn straw hat, red battle-scar across left eye, grinning with clenched teeth, shark-tooth necklace, tattered red cape, black pants with a skull-pattern sash, bare feet, right fist raised ready to strike, orange fire particles and water splashing at his feet, warm orange-red energy aura surrounding him\"}.\n\n# RIGHT FIGHTER\n{argument name=\"right_fighter\" default=\"spiky jet-black hair, wearing an orange martial-arts gi with a single black kanji character on the left chest, blue waistband sash, black wristbands, both hands in a charging pose with a massive crackling blue lightning energy sphere building between them, intense focused expression, bright blue electric aura\"}.\n\n# BACKGROUND\n{argument name=\"background\" default=\"dramatic nighttime Chinese-style temple courtyard, red pagoda architecture, stone-carved dragon columns, dark cloudy sky with blue moonlight, glowing paper lanterns, scattered debris on the ground\"}.\n\n# GAME UI OVERLAY\n- Top bar: two horizontal health bars (red, mostly full) with two smaller blue meter bars below, a round central timer reading \"{argument name=\"timer\" default=\"45\"}\" in white, labeled \"ROUND {argument name=\"round_number\" default=\"2\"}\" below it, left percentage \"{argument name=\"left_hp_percent\" default=\"75%\"}\", right percentage \"{argument name=\"right_hp_percent\" default=\"80%\"}\".\n- Top-left corner: P1 portrait avatar of the left fighter, character name \"{argument name=\"left_name\" default=\"CAPTAIN RYUUGA\"}\" in bold, subtitle \"{argument name=\"left_title\" default=\"KING OF THE SEAS\"}\", {argument name=\"left_emblem\" default=\"skull-and-crossed-swords emblem\"}.\n- Top-right corner: P2 portrait avatar of the right fighter, character name \"{argument name=\"right_name\" default=\"KAZE RENSHIN\"}\" in bold, subtitle \"{argument name=\"right_title\" default=\"DRAGON'S FIST\"}\", {argument name=\"right_emblem\" default=\"dragon emblem\"}.\n- Bottom-left: large orange number \"{argument name=\"left_combo\" default=\"12\"}\" with \"HITS COMBO\" text, horizontal orange gauge bar labeled \"{argument name=\"left_gauge_label\" default=\"3 MAX\"}\".\n- Bottom-right: large blue number \"{argument name=\"right_combo\" default=\"15\"}\" with \"HITS COMBO\" text, horizontal blue gauge bar labeled \"{argument name=\"right_gauge_label\" default=\"MAX 4\"}\".\n\n# Overall style\nCinematic, hyperdetailed, vibrant color grading, high contrast between warm orange (left half) and cool blue (right half), official fighting game key art quality, 4K resolution.\n\n# Negative prompt\nno watermark, no studio logos, no warped Latin or Japanese characters in UI, no gibberish glyphs, no low-res UI, no duplicated HUD widgets, no extra fingers on either fighter, no misaligned or crooked health bars, no copyrighted character likeness (original anime-styled designs only), no modern firearms, no real-world brands, no cluttered or overlapping UI panels, no signature.", + "zh-CN": "使用这个插件完成以下任务:A high-detail anime fighting game screenshot, 16:9 aspect ratio, cinematic key visual in the style of Street Fighter 6 or Tekken 8 intro art. Two anime male warriors in dynamic combat poses facing each other in the center.\n\n# LEFT FIGHTER\n{argument name=\"left_fighter\" default=\"shirtless, wearing a worn straw hat, red battle-scar across left eye, grinning with clenched teeth, shark-tooth necklace, tattered red cape, black pants with a skull-pattern sash, bare feet, right fist raised ready to strike, orange fire particles and water splashing at his feet, warm orange-red energy aura surrounding him\"}.\n\n# RIGHT FIGHTER\n{argument name=\"right_fighter\" default=\"spiky jet-black hair, wearing an orange martial-arts gi with a single black kanji character on the left chest, blue waistband sash, black wristbands, both hands in a charging pose with a massive crackling blue lightning energy sphere building between them, intense focused expression, bright blue electric aura\"}.\n\n# BACKGROUND\n{argument name=\"background\" default=\"dramatic nighttime Chinese-style temple courtyard, red pagoda architecture, stone-carved dragon columns, dark cloudy sky with blue moonlight, glowing paper lanterns, scattered debris on the ground\"}.\n\n# GAME UI OVERLAY\n- Top bar: two horizontal health bars (red, mostly full) with two smaller blue meter bars below, a round central timer reading \"{argument name=\"timer\" default=\"45\"}\" in white, labeled \"ROUND {argument name=\"round_number\" default=\"2\"}\" below it, left percentage \"{argument name=\"left_hp_percent\" default=\"75%\"}\", right percentage \"{argument name=\"right_hp_percent\" default=\"80%\"}\".\n- Top-left corner: P1 portrait avatar of the left fighter, character name \"{argument name=\"left_name\" default=\"CAPTAIN RYUUGA\"}\" in bold, subtitle \"{argument name=\"left_title\" default=\"KING OF THE SEAS\"}\", {argument name=\"left_emblem\" default=\"skull-and-crossed-swords emblem\"}.\n- Top-right corner: P2 portrait avatar of the right fighter, character name \"{argument name=\"right_name\" default=\"KAZE RENSHIN\"}\" in bold, subtitle \"{argument name=\"right_title\" default=\"DRAGON'S FIST\"}\", {argument name=\"right_emblem\" default=\"dragon emblem\"}.\n- Bottom-left: large orange number \"{argument name=\"left_combo\" default=\"12\"}\" with \"HITS COMBO\" text, horizontal orange gauge bar labeled \"{argument name=\"left_gauge_label\" default=\"3 MAX\"}\".\n- Bottom-right: large blue number \"{argument name=\"right_combo\" default=\"15\"}\" with \"HITS COMBO\" text, horizontal blue gauge bar labeled \"{argument name=\"right_gauge_label\" default=\"MAX 4\"}\".\n\n# Overall style\nCinematic, hyperdetailed, vibrant color grading, high contrast between warm orange (left half) and cool blue (right half), official fighting game key art quality, 4K resolution.\n\n# Negative prompt\nno watermark, no studio logos, no warped Latin or Japanese characters in UI, no gibberish glyphs, no low-res UI, no duplicated HUD widgets, no extra fingers on either fighter, no misaligned or crooked health bars, no copyrighted character likeness (original anime-styled designs only), no modern firearms, no real-world brands, no cluttered or overlapping UI panels, no signature." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/game-screenshot-three-kingdoms-guanyu-slaying-yanliang/open-design.json b/plugins/_official/image-templates/game-screenshot-three-kingdoms-guanyu-slaying-yanliang/open-design.json index c7293389b..63848a7f7 100644 --- a/plugins/_official/image-templates/game-screenshot-three-kingdoms-guanyu-slaying-yanliang/open-design.json +++ b/plugins/_official/image-templates/game-screenshot-three-kingdoms-guanyu-slaying-yanliang/open-design.json @@ -35,7 +35,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/game-screenshot-three-kingdoms-guanyu-slaying-yanliang.jpg" }, "useCase": { - "query": "In-game screenshot from a next-gen action RPG in the style of Black Myth Wukong, Unreal Engine 5 Nanite/Lumen quality. Third-person gameplay camera, tracking from behind and slightly left of the player character as he rides at full gallop.\n\n# Playable character\n{argument name=\"character\" default=\"Guan Yu, a Three Kingdoms legendary general. Towering broad-shouldered figure with a crimson-tinted complexion, long flowing black beard reaching his chest, stern phoenix eyes narrowed, single topknot with gold band. Wearing deep green lamellar armor with gold trim, a massive red-crimson silk cloak billowing dramatically behind him\"}.\n\n# Mount and weapon\nRiding {argument name=\"mount\" default=\"the legendary blood-red Red Hare warhorse\"} mid-gallop, his boots braced in ornate stirrups. Holding overhead {argument name=\"weapon\" default=\"the Blue Dragon Crescent Glaive, a massive curved-blade polearm glowing with faint blue dragon-energy runes\"}.\n\n# Setting\n{argument name=\"setting\" default=\"A stormy muddy battlefield in heavy torrential rain, diagonal rain streaks visible throughout the frame. Thousands of enemy soldiers in dark armor formation parting in panic ahead of him, tall red battle banners with calligraphy characters being trampled, a golden-armored enemy general visible in the middle-distance turning with shock. Dark grey storm clouds with dramatic lightning flashes on the horizon, muddy water splashing from the horse's hooves.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds, polished game-studio UI)\n- Upper-left corner: circular portrait of the bearded character with a red vertical HP bar and blue qi-energy bar, name in Chinese calligraphy font above.\n- Upper-right corner: small round minimap with densely packed red enemy dots and one larger orange diamond marker.\n- Lower-left: 4 circular skill icons with Chinese characters, cooldown rings, one glowing brightly ready to use.\n- Lower-center: a narrow button prompt with thin red border indicating a special finisher combat move.\n- Lower-right: stamina ring filling up as he charges.\n- Center-top: a floating lock-on reticle over the distant enemy general's head with small text label and a boss-style HP bar filling the upper-middle third of the screen, crimson-red colored with a tag indicating Elite enemy.\n\n# Rendering\nPhotorealistic PBR materials, detailed wet green armor reflecting rain and lightning, individual horse mane and tail hairs flying, muddy splash particles, volumetric rain and mist fog, cinematic but with clear gameplay-style third-person framing. Dark moody palette with occasional strobing lightning rim-light on the hero, red cloak luminous against the grey storm. Clean HUD in game-studio polish aesthetic.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the character, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no broken horse anatomy, no signature." + "query": { + "en": "In-game screenshot from a next-gen action RPG in the style of Black Myth Wukong, Unreal Engine 5 Nanite/Lumen quality. Third-person gameplay camera, tracking from behind and slightly left of the player character as he rides at full gallop.\n\n# Playable character\n{argument name=\"character\" default=\"Guan Yu, a Three Kingdoms legendary general. Towering broad-shouldered figure with a crimson-tinted complexion, long flowing black beard reaching his chest, stern phoenix eyes narrowed, single topknot with gold band. Wearing deep green lamellar armor with gold trim, a massive red-crimson silk cloak billowing dramatically behind him\"}.\n\n# Mount and weapon\nRiding {argument name=\"mount\" default=\"the legendary blood-red Red Hare warhorse\"} mid-gallop, his boots braced in ornate stirrups. Holding overhead {argument name=\"weapon\" default=\"the Blue Dragon Crescent Glaive, a massive curved-blade polearm glowing with faint blue dragon-energy runes\"}.\n\n# Setting\n{argument name=\"setting\" default=\"A stormy muddy battlefield in heavy torrential rain, diagonal rain streaks visible throughout the frame. Thousands of enemy soldiers in dark armor formation parting in panic ahead of him, tall red battle banners with calligraphy characters being trampled, a golden-armored enemy general visible in the middle-distance turning with shock. Dark grey storm clouds with dramatic lightning flashes on the horizon, muddy water splashing from the horse's hooves.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds, polished game-studio UI)\n- Upper-left corner: circular portrait of the bearded character with a red vertical HP bar and blue qi-energy bar, name in Chinese calligraphy font above.\n- Upper-right corner: small round minimap with densely packed red enemy dots and one larger orange diamond marker.\n- Lower-left: 4 circular skill icons with Chinese characters, cooldown rings, one glowing brightly ready to use.\n- Lower-center: a narrow button prompt with thin red border indicating a special finisher combat move.\n- Lower-right: stamina ring filling up as he charges.\n- Center-top: a floating lock-on reticle over the distant enemy general's head with small text label and a boss-style HP bar filling the upper-middle third of the screen, crimson-red colored with a tag indicating Elite enemy.\n\n# Rendering\nPhotorealistic PBR materials, detailed wet green armor reflecting rain and lightning, individual horse mane and tail hairs flying, muddy splash particles, volumetric rain and mist fog, cinematic but with clear gameplay-style third-person framing. Dark moody palette with occasional strobing lightning rim-light on the hero, red cloak luminous against the grey storm. Clean HUD in game-studio polish aesthetic.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the character, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no broken horse anatomy, no signature.", + "zh-CN": "使用这个插件完成以下任务:In-game screenshot from a next-gen action RPG in the style of Black Myth Wukong, Unreal Engine 5 Nanite/Lumen quality. Third-person gameplay camera, tracking from behind and slightly left of the player character as he rides at full gallop.\n\n# Playable character\n{argument name=\"character\" default=\"Guan Yu, a Three Kingdoms legendary general. Towering broad-shouldered figure with a crimson-tinted complexion, long flowing black beard reaching his chest, stern phoenix eyes narrowed, single topknot with gold band. Wearing deep green lamellar armor with gold trim, a massive red-crimson silk cloak billowing dramatically behind him\"}.\n\n# Mount and weapon\nRiding {argument name=\"mount\" default=\"the legendary blood-red Red Hare warhorse\"} mid-gallop, his boots braced in ornate stirrups. Holding overhead {argument name=\"weapon\" default=\"the Blue Dragon Crescent Glaive, a massive curved-blade polearm glowing with faint blue dragon-energy runes\"}.\n\n# Setting\n{argument name=\"setting\" default=\"A stormy muddy battlefield in heavy torrential rain, diagonal rain streaks visible throughout the frame. Thousands of enemy soldiers in dark armor formation parting in panic ahead of him, tall red battle banners with calligraphy characters being trampled, a golden-armored enemy general visible in the middle-distance turning with shock. Dark grey storm clouds with dramatic lightning flashes on the horizon, muddy water splashing from the horse's hooves.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds, polished game-studio UI)\n- Upper-left corner: circular portrait of the bearded character with a red vertical HP bar and blue qi-energy bar, name in Chinese calligraphy font above.\n- Upper-right corner: small round minimap with densely packed red enemy dots and one larger orange diamond marker.\n- Lower-left: 4 circular skill icons with Chinese characters, cooldown rings, one glowing brightly ready to use.\n- Lower-center: a narrow button prompt with thin red border indicating a special finisher combat move.\n- Lower-right: stamina ring filling up as he charges.\n- Center-top: a floating lock-on reticle over the distant enemy general's head with small text label and a boss-style HP bar filling the upper-middle third of the screen, crimson-red colored with a tag indicating Elite enemy.\n\n# Rendering\nPhotorealistic PBR materials, detailed wet green armor reflecting rain and lightning, individual horse mane and tail hairs flying, muddy splash particles, volumetric rain and mist fog, cinematic but with clear gameplay-style third-person framing. Dark moody palette with occasional strobing lightning rim-light on the hero, red cloak luminous against the grey storm. Clean HUD in game-studio polish aesthetic.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the character, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no broken horse anatomy, no signature." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/game-screenshot-three-kingdoms-lyubu-yuanmen-archery/open-design.json b/plugins/_official/image-templates/game-screenshot-three-kingdoms-lyubu-yuanmen-archery/open-design.json index 107dc4df2..39b44a5a7 100644 --- a/plugins/_official/image-templates/game-screenshot-three-kingdoms-lyubu-yuanmen-archery/open-design.json +++ b/plugins/_official/image-templates/game-screenshot-three-kingdoms-lyubu-yuanmen-archery/open-design.json @@ -34,7 +34,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/game-screenshot-three-kingdoms-lyubu-yuanmen-archery.jpg" }, "useCase": { - "query": "In-game screenshot from a next-gen action RPG in the style of Black Myth Wukong, Unreal Engine 5 Nanite/Lumen rendering. Third-person over-the-shoulder gameplay camera, positioned about 2 meters behind and slightly above the playable character.\n\n# Playable character\n{argument name=\"character\" default=\"Lü Bu, a Three Kingdoms era Chinese warrior general. Tall muscular build, long black hair tied in a high topknot with a phoenix-feather pin, wearing ornate crimson and blackened-iron lamellar armor with gold trim, a red silk cloak flowing behind him, a fanged guardian mask on his forehead\"}.\n\n# Action pose\nThe character is drawing a massive recurved warbow at full tension, an arrow nocked and glowing with {argument name=\"qi_color\" default=\"orange\"} qi runes, standing firm with a wide battle stance on dry yellow earth.\n\n# Setting\n{argument name=\"setting\" default=\"An ancient Chinese military camp at golden hour, two wooden camp-gate pillars framing the scene with crimson banners bearing a bold calligraphy Chinese character. Distant in the background a lone halberd standing upright about 150 paces away against a blazing orange sunset with god-rays through dust haze. Soldiers silhouetted at the sides watching tensely.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds, game-studio UI polish)\n- Upper-left corner: circular portrait of the character with a red vertical HP bar and blue qi bar, a Chinese calligraphy-style character name above.\n- Upper-right corner: small round minimap with faint glowing dots and a compass ring.\n- Lower-left: 4 circular skill icons with Chinese characters, each with cooldown rings.\n- Lower-center: a narrow white button prompt with game-style border.\n- Lower-right: stamina ring and dodge prompt.\n- Center-screen upper-third: a locked-on target marker floating over the distant halberd with an orange diamond indicator and a small distance readout.\n\n# Rendering\nPhotorealistic PBR materials, detailed fabric folds, subsurface-scattered skin, Unreal Engine 5 Nanite geometry. Golden hour rim lighting, volumetric sand particles, soft lens flare from sun. Slightly hazy atmosphere with depth fog. Cinematic but clearly gameplay-framed, not movie-cutscene.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the character, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no signature." + "query": { + "en": "In-game screenshot from a next-gen action RPG in the style of Black Myth Wukong, Unreal Engine 5 Nanite/Lumen rendering. Third-person over-the-shoulder gameplay camera, positioned about 2 meters behind and slightly above the playable character.\n\n# Playable character\n{argument name=\"character\" default=\"Lü Bu, a Three Kingdoms era Chinese warrior general. Tall muscular build, long black hair tied in a high topknot with a phoenix-feather pin, wearing ornate crimson and blackened-iron lamellar armor with gold trim, a red silk cloak flowing behind him, a fanged guardian mask on his forehead\"}.\n\n# Action pose\nThe character is drawing a massive recurved warbow at full tension, an arrow nocked and glowing with {argument name=\"qi_color\" default=\"orange\"} qi runes, standing firm with a wide battle stance on dry yellow earth.\n\n# Setting\n{argument name=\"setting\" default=\"An ancient Chinese military camp at golden hour, two wooden camp-gate pillars framing the scene with crimson banners bearing a bold calligraphy Chinese character. Distant in the background a lone halberd standing upright about 150 paces away against a blazing orange sunset with god-rays through dust haze. Soldiers silhouetted at the sides watching tensely.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds, game-studio UI polish)\n- Upper-left corner: circular portrait of the character with a red vertical HP bar and blue qi bar, a Chinese calligraphy-style character name above.\n- Upper-right corner: small round minimap with faint glowing dots and a compass ring.\n- Lower-left: 4 circular skill icons with Chinese characters, each with cooldown rings.\n- Lower-center: a narrow white button prompt with game-style border.\n- Lower-right: stamina ring and dodge prompt.\n- Center-screen upper-third: a locked-on target marker floating over the distant halberd with an orange diamond indicator and a small distance readout.\n\n# Rendering\nPhotorealistic PBR materials, detailed fabric folds, subsurface-scattered skin, Unreal Engine 5 Nanite geometry. Golden hour rim lighting, volumetric sand particles, soft lens flare from sun. Slightly hazy atmosphere with depth fog. Cinematic but clearly gameplay-framed, not movie-cutscene.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the character, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no signature.", + "zh-CN": "使用这个插件完成以下任务:In-game screenshot from a next-gen action RPG in the style of Black Myth Wukong, Unreal Engine 5 Nanite/Lumen rendering. Third-person over-the-shoulder gameplay camera, positioned about 2 meters behind and slightly above the playable character.\n\n# Playable character\n{argument name=\"character\" default=\"Lü Bu, a Three Kingdoms era Chinese warrior general. Tall muscular build, long black hair tied in a high topknot with a phoenix-feather pin, wearing ornate crimson and blackened-iron lamellar armor with gold trim, a red silk cloak flowing behind him, a fanged guardian mask on his forehead\"}.\n\n# Action pose\nThe character is drawing a massive recurved warbow at full tension, an arrow nocked and glowing with {argument name=\"qi_color\" default=\"orange\"} qi runes, standing firm with a wide battle stance on dry yellow earth.\n\n# Setting\n{argument name=\"setting\" default=\"An ancient Chinese military camp at golden hour, two wooden camp-gate pillars framing the scene with crimson banners bearing a bold calligraphy Chinese character. Distant in the background a lone halberd standing upright about 150 paces away against a blazing orange sunset with god-rays through dust haze. Soldiers silhouetted at the sides watching tensely.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds, game-studio UI polish)\n- Upper-left corner: circular portrait of the character with a red vertical HP bar and blue qi bar, a Chinese calligraphy-style character name above.\n- Upper-right corner: small round minimap with faint glowing dots and a compass ring.\n- Lower-left: 4 circular skill icons with Chinese characters, each with cooldown rings.\n- Lower-center: a narrow white button prompt with game-style border.\n- Lower-right: stamina ring and dodge prompt.\n- Center-screen upper-third: a locked-on target marker floating over the distant halberd with an orange diamond indicator and a small distance readout.\n\n# Rendering\nPhotorealistic PBR materials, detailed fabric folds, subsurface-scattered skin, Unreal Engine 5 Nanite geometry. Golden hour rim lighting, volumetric sand particles, soft lens flare from sun. Slightly hazy atmosphere with depth fog. Cinematic but clearly gameplay-framed, not movie-cutscene.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the character, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no signature." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/game-screenshot-three-kingdoms-zhaoyun-cradle-escape/open-design.json b/plugins/_official/image-templates/game-screenshot-three-kingdoms-zhaoyun-cradle-escape/open-design.json index 402439670..270c93d78 100644 --- a/plugins/_official/image-templates/game-screenshot-three-kingdoms-zhaoyun-cradle-escape/open-design.json +++ b/plugins/_official/image-templates/game-screenshot-three-kingdoms-zhaoyun-cradle-escape/open-design.json @@ -36,7 +36,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/game-screenshot-three-kingdoms-zhaoyun-cradle-escape.jpg" }, "useCase": { - "query": "Cinematic in-game screenshot from a AAA next-generation action RPG in the style of Black Myth Wukong combined with Elden Ring, rendered in Unreal Engine 5 with full Nanite and Lumen ray-tracing, cinematic post-processing, shallow DOF bokeh, ray-traced reflections, volumetric god-rays and atmospheric dust particles. Third-person gameplay camera, low-angle tracking shot positioned about 3 meters behind the player character.\n\n# Playable character\n{argument name=\"character\" default=\"Zhao Yun, a legendary Three Kingdoms warrior. Athletic build, heroic sharp-featured face visible from side angle, hair tied in a warrior's topknot with a gold band, wearing ornate polished silver-steel plate-lamellar armor with gold trim and deeply engraved dragon patterns etched into each plate — battle-weathered with scratches, dents, and dust stains showing realistic wear. The armor has cinematic PBR metal texture with ray-traced reflections catching the dawn light. A white silk cape tattered at the edges flows dynamically from his shoulders with realistic fabric physics and subsurface scattering\"}.\n\n# Critical pose — the emotional core\nThe character is cradling {argument name=\"child_protected\" default=\"a tiny infant baby (Liu Chan)\"} in the crook of his LEFT arm against his chest — the baby is wrapped in soft cream-white silk swaddling cloth like a traditional Chinese bundled newborn. Only the baby's small round face and one tiny fist are peeking out of the silk. The baby's face shows peaceful sleep: eyes closed, round cheeks, small mouth slightly open. The hero's left arm holds the baby securely and gently, pressed against his armored chest.\n\nHis RIGHT hand is free and wields {argument name=\"weapon\" default=\"a long silver-shafted spear with a gleaming polished mirror-finish tip, the weapon glowing with elegant pale blue wind-energy runes that swirl along the shaft with volumetric light\"}. His right arm is extended mid-swing executing a horizontal sweeping attack. This is the classic \"one arm protecting the precious cargo, one arm fighting for life\" heroic stance.\n\n# Action\nThe spear has just swept horizontally in a dramatic arc, knocking back two enemy cavalry soldiers mid-air — their bodies caught in dynamic motion arcs being thrown backward (not impaled). Visible blue-white energy shockwave ripples outward from the spear's trajectory with particle dust. The hero's white cape whips in a spiraling trail. The protected baby in his left arm remains peacefully undisturbed despite the violence around them — this is the emotional core of the image.\n\n# Setting\n{argument name=\"setting\" default=\"A dramatic hillside battlefield at dawn golden hour, soft pink-gold sunrise breaking over distant mountain silhouettes with painterly cloud formations. A dirt slope scarred with broken battle banners, scattered enemy helmets, spear shafts stuck into the earth. Dozens of dark-armored soldiers with realistic armor details in the middle and far distance, some retreating in panic, some still approaching with raised weapons. A shattered wooden war-chariot in the distant background with visible splintered wood. Volumetric god-rays piercing through morning mist and dust particles, creating tangible light shafts with tyndall effect.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds with gold-trim borders, Elden Ring + Black Myth Wukong polished game-studio UI aesthetic)\n- Upper-left corner: large circular portrait of the hero with a bold red vertical HP bar and blue qi-energy bar beside it, a stylized Chinese calligraphy-like name character above (abstract brushstroke shapes). Below the portrait, a SMALLER secondary circular portrait representing the baby escort, with its own bright green horizontal protection bar labeled \"ESCORT\".\n- Upper-right corner: detailed round minimap with compass ring, showing the player blue dot surrounded by many red enemy dots, with a small yellow arrow indicating an escape route labeled to the edge.\n- Lower-left: 4 circular skill icons with subtle ornate borders, each showing different abstract martial-art glyphs (not readable Chinese, just brush-shape aesthetic), one glowing bright ready to use.\n- Lower-center: a combo counter showing \"x7\" in large bright white-gold numbers with a faint glow effect, above a narrow button prompt with thin bordered design.\n- Lower-right: a stamina ring almost depleted (visual tension), dodge prompt icon.\n- Top-center area: two damage-number popups in large orange-red numbers floating above two of the knocked-back enemies with a bright gold burst effect.\n\n# Rendering\nPhotorealistic PBR materials with sharp detail, detailed engraved silver armor reflecting dawn light, individual hair strands and cape fiber threads rendered, motion blur ONLY on the spinning spear and flung enemies (hero himself crystal sharp with anti-aliased edges), volumetric dawn light with strong Tyndall god-rays piercing through atmospheric dust, fine dust and cherry-petal particles swirling in the air. Cinematic-but-clear gameplay framing with strong rim-lighting separating the hero from background. Color grading: warm golden sunrise palette with cool blue shadows creating teal-orange cinematic contrast.\n\nThe baby face should be photorealistic, peaceful, and untouched by violence — a visual symbol of what the hero is fighting to protect.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the hero or the baby, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no distressed or crying baby, no baby held awkwardly, no blood on the baby, no signature." + "query": { + "en": "Cinematic in-game screenshot from a AAA next-generation action RPG in the style of Black Myth Wukong combined with Elden Ring, rendered in Unreal Engine 5 with full Nanite and Lumen ray-tracing, cinematic post-processing, shallow DOF bokeh, ray-traced reflections, volumetric god-rays and atmospheric dust particles. Third-person gameplay camera, low-angle tracking shot positioned about 3 meters behind the player character.\n\n# Playable character\n{argument name=\"character\" default=\"Zhao Yun, a legendary Three Kingdoms warrior. Athletic build, heroic sharp-featured face visible from side angle, hair tied in a warrior's topknot with a gold band, wearing ornate polished silver-steel plate-lamellar armor with gold trim and deeply engraved dragon patterns etched into each plate — battle-weathered with scratches, dents, and dust stains showing realistic wear. The armor has cinematic PBR metal texture with ray-traced reflections catching the dawn light. A white silk cape tattered at the edges flows dynamically from his shoulders with realistic fabric physics and subsurface scattering\"}.\n\n# Critical pose — the emotional core\nThe character is cradling {argument name=\"child_protected\" default=\"a tiny infant baby (Liu Chan)\"} in the crook of his LEFT arm against his chest — the baby is wrapped in soft cream-white silk swaddling cloth like a traditional Chinese bundled newborn. Only the baby's small round face and one tiny fist are peeking out of the silk. The baby's face shows peaceful sleep: eyes closed, round cheeks, small mouth slightly open. The hero's left arm holds the baby securely and gently, pressed against his armored chest.\n\nHis RIGHT hand is free and wields {argument name=\"weapon\" default=\"a long silver-shafted spear with a gleaming polished mirror-finish tip, the weapon glowing with elegant pale blue wind-energy runes that swirl along the shaft with volumetric light\"}. His right arm is extended mid-swing executing a horizontal sweeping attack. This is the classic \"one arm protecting the precious cargo, one arm fighting for life\" heroic stance.\n\n# Action\nThe spear has just swept horizontally in a dramatic arc, knocking back two enemy cavalry soldiers mid-air — their bodies caught in dynamic motion arcs being thrown backward (not impaled). Visible blue-white energy shockwave ripples outward from the spear's trajectory with particle dust. The hero's white cape whips in a spiraling trail. The protected baby in his left arm remains peacefully undisturbed despite the violence around them — this is the emotional core of the image.\n\n# Setting\n{argument name=\"setting\" default=\"A dramatic hillside battlefield at dawn golden hour, soft pink-gold sunrise breaking over distant mountain silhouettes with painterly cloud formations. A dirt slope scarred with broken battle banners, scattered enemy helmets, spear shafts stuck into the earth. Dozens of dark-armored soldiers with realistic armor details in the middle and far distance, some retreating in panic, some still approaching with raised weapons. A shattered wooden war-chariot in the distant background with visible splintered wood. Volumetric god-rays piercing through morning mist and dust particles, creating tangible light shafts with tyndall effect.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds with gold-trim borders, Elden Ring + Black Myth Wukong polished game-studio UI aesthetic)\n- Upper-left corner: large circular portrait of the hero with a bold red vertical HP bar and blue qi-energy bar beside it, a stylized Chinese calligraphy-like name character above (abstract brushstroke shapes). Below the portrait, a SMALLER secondary circular portrait representing the baby escort, with its own bright green horizontal protection bar labeled \"ESCORT\".\n- Upper-right corner: detailed round minimap with compass ring, showing the player blue dot surrounded by many red enemy dots, with a small yellow arrow indicating an escape route labeled to the edge.\n- Lower-left: 4 circular skill icons with subtle ornate borders, each showing different abstract martial-art glyphs (not readable Chinese, just brush-shape aesthetic), one glowing bright ready to use.\n- Lower-center: a combo counter showing \"x7\" in large bright white-gold numbers with a faint glow effect, above a narrow button prompt with thin bordered design.\n- Lower-right: a stamina ring almost depleted (visual tension), dodge prompt icon.\n- Top-center area: two damage-number popups in large orange-red numbers floating above two of the knocked-back enemies with a bright gold burst effect.\n\n# Rendering\nPhotorealistic PBR materials with sharp detail, detailed engraved silver armor reflecting dawn light, individual hair strands and cape fiber threads rendered, motion blur ONLY on the spinning spear and flung enemies (hero himself crystal sharp with anti-aliased edges), volumetric dawn light with strong Tyndall god-rays piercing through atmospheric dust, fine dust and cherry-petal particles swirling in the air. Cinematic-but-clear gameplay framing with strong rim-lighting separating the hero from background. Color grading: warm golden sunrise palette with cool blue shadows creating teal-orange cinematic contrast.\n\nThe baby face should be photorealistic, peaceful, and untouched by violence — a visual symbol of what the hero is fighting to protect.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the hero or the baby, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no distressed or crying baby, no baby held awkwardly, no blood on the baby, no signature.", + "zh-CN": "使用这个插件完成以下任务:Cinematic in-game screenshot from a AAA next-generation action RPG in the style of Black Myth Wukong combined with Elden Ring, rendered in Unreal Engine 5 with full Nanite and Lumen ray-tracing, cinematic post-processing, shallow DOF bokeh, ray-traced reflections, volumetric god-rays and atmospheric dust particles. Third-person gameplay camera, low-angle tracking shot positioned about 3 meters behind the player character.\n\n# Playable character\n{argument name=\"character\" default=\"Zhao Yun, a legendary Three Kingdoms warrior. Athletic build, heroic sharp-featured face visible from side angle, hair tied in a warrior's topknot with a gold band, wearing ornate polished silver-steel plate-lamellar armor with gold trim and deeply engraved dragon patterns etched into each plate — battle-weathered with scratches, dents, and dust stains showing realistic wear. The armor has cinematic PBR metal texture with ray-traced reflections catching the dawn light. A white silk cape tattered at the edges flows dynamically from his shoulders with realistic fabric physics and subsurface scattering\"}.\n\n# Critical pose — the emotional core\nThe character is cradling {argument name=\"child_protected\" default=\"a tiny infant baby (Liu Chan)\"} in the crook of his LEFT arm against his chest — the baby is wrapped in soft cream-white silk swaddling cloth like a traditional Chinese bundled newborn. Only the baby's small round face and one tiny fist are peeking out of the silk. The baby's face shows peaceful sleep: eyes closed, round cheeks, small mouth slightly open. The hero's left arm holds the baby securely and gently, pressed against his armored chest.\n\nHis RIGHT hand is free and wields {argument name=\"weapon\" default=\"a long silver-shafted spear with a gleaming polished mirror-finish tip, the weapon glowing with elegant pale blue wind-energy runes that swirl along the shaft with volumetric light\"}. His right arm is extended mid-swing executing a horizontal sweeping attack. This is the classic \"one arm protecting the precious cargo, one arm fighting for life\" heroic stance.\n\n# Action\nThe spear has just swept horizontally in a dramatic arc, knocking back two enemy cavalry soldiers mid-air — their bodies caught in dynamic motion arcs being thrown backward (not impaled). Visible blue-white energy shockwave ripples outward from the spear's trajectory with particle dust. The hero's white cape whips in a spiraling trail. The protected baby in his left arm remains peacefully undisturbed despite the violence around them — this is the emotional core of the image.\n\n# Setting\n{argument name=\"setting\" default=\"A dramatic hillside battlefield at dawn golden hour, soft pink-gold sunrise breaking over distant mountain silhouettes with painterly cloud formations. A dirt slope scarred with broken battle banners, scattered enemy helmets, spear shafts stuck into the earth. Dozens of dark-armored soldiers with realistic armor details in the middle and far distance, some retreating in panic, some still approaching with raised weapons. A shattered wooden war-chariot in the distant background with visible splintered wood. Volumetric god-rays piercing through morning mist and dust particles, creating tangible light shafts with tyndall effect.\"}\n\n# IN-GAME HUD OVERLAY (clean semi-transparent dark backgrounds with gold-trim borders, Elden Ring + Black Myth Wukong polished game-studio UI aesthetic)\n- Upper-left corner: large circular portrait of the hero with a bold red vertical HP bar and blue qi-energy bar beside it, a stylized Chinese calligraphy-like name character above (abstract brushstroke shapes). Below the portrait, a SMALLER secondary circular portrait representing the baby escort, with its own bright green horizontal protection bar labeled \"ESCORT\".\n- Upper-right corner: detailed round minimap with compass ring, showing the player blue dot surrounded by many red enemy dots, with a small yellow arrow indicating an escape route labeled to the edge.\n- Lower-left: 4 circular skill icons with subtle ornate borders, each showing different abstract martial-art glyphs (not readable Chinese, just brush-shape aesthetic), one glowing bright ready to use.\n- Lower-center: a combo counter showing \"x7\" in large bright white-gold numbers with a faint glow effect, above a narrow button prompt with thin bordered design.\n- Lower-right: a stamina ring almost depleted (visual tension), dodge prompt icon.\n- Top-center area: two damage-number popups in large orange-red numbers floating above two of the knocked-back enemies with a bright gold burst effect.\n\n# Rendering\nPhotorealistic PBR materials with sharp detail, detailed engraved silver armor reflecting dawn light, individual hair strands and cape fiber threads rendered, motion blur ONLY on the spinning spear and flung enemies (hero himself crystal sharp with anti-aliased edges), volumetric dawn light with strong Tyndall god-rays piercing through atmospheric dust, fine dust and cherry-petal particles swirling in the air. Cinematic-but-clear gameplay framing with strong rim-lighting separating the hero from background. Color grading: warm golden sunrise palette with cool blue shadows creating teal-orange cinematic contrast.\n\nThe baby face should be photorealistic, peaceful, and untouched by violence — a visual symbol of what the hero is fighting to protect.\n\nAspect ratio 16:9 landscape.\n\n# Negative prompt\nno watermark, no studio logos, no warped Chinese characters, no fake gibberish glyphs, no movie-cutscene framing, no first-person view, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no extra fingers on the hero or the baby, no modern clothing, no firearms, no generic Western fantasy look, no cluttered or overlapping UI panels, no distressed or crying baby, no baby held awkwardly, no blood on the baby, no signature." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/game-ui-ancient-china-open-world-mmo-hud/open-design.json b/plugins/_official/image-templates/game-ui-ancient-china-open-world-mmo-hud/open-design.json index a26a3df9b..70e406614 100644 --- a/plugins/_official/image-templates/game-ui-ancient-china-open-world-mmo-hud/open-design.json +++ b/plugins/_official/image-templates/game-ui-ancient-china-open-world-mmo-hud/open-design.json @@ -33,7 +33,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/game-ui-ancient-china-open-world-mmo-hud.jpg" }, "useCase": { - "query": "A full-screen in-game HUD screenshot of a AAA ancient-China open-world MMO, rendered in the cinematic photoreal style of Black Myth: Wukong — Unreal Engine 5 level lighting, volumetric god rays, deep filmic color grading, subtle chromatic aberration, shallow depth of field on the background, razor-sharp foreground.\n\n# 3D scene (underneath the UI)\n- Center of frame: {argument name=\"protagonist\" default=\"a beautiful Chinese female swordswoman in her mid 20s, flowing ivory-white Hanfu robe with pale jade embroidery, long black hair tied with a silk ribbon, jade hairpin, elegant calm expression, holding a slender straight jian sword in a low guard stance, gentle wind lifting her sleeves and hair ribbon\"}, captured in a cinematic third-person over-the-shoulder framing, shot from slightly behind and above her right shoulder so the viewer sees both her profile and the world ahead.\n- Environment: {argument name=\"environment\" default=\"a cold-toned deep-mountain ancient shrine — towering weathered stone steles carved with faded sutras, a half-ruined Tang-dynasty wooden pavilion with curled eaves and peeling vermilion paint, a massive ancient gnarled peach tree with scattered falling petals, dense low-lying mist rolling along mossy stone steps, distant jagged mountain peaks fading into cold blue fog\"}.\n- Lighting: cold teal and desaturated blue base palette with warm amber rim light on the protagonist, faint god rays cutting through the mist, cinematic HDR contrast, filmic grain.\n\n# HUD overlay (drawn cleanly on top of the 3D scene, readable, game-screenshot accurate)\n- Top-left — Character status panel:\n - Circular portrait frame with ornate bronze Chinese cloud-pattern border, inside a stylized portrait of the same protagonist.\n - To the right of the portrait: character name \"{argument name=\"character_name\" default=\"云裳\"}\", level badge \"Lv.{argument name=\"level\" default=\"58\"}\", and a small sect crest tag \"{argument name=\"sect\" default=\"青冥剑宗\"}\" (Qingming Sword Sect).\n - Three stacked bars beneath: red HP bar labeled \"气血\", blue MP/internal-energy bar labeled \"内力\", yellow stamina bar labeled \"体力\". Each bar has crisp numeric readouts in small Song/serif Chinese typography.\n - A row of 5 small buff/debuff icons with faint Chinese seal-script labels and countdown timers.\n- Top-right — Minimap:\n - Round minimap with a brass compass-style frame etched with the 8 trigrams (bagua) around the rim, N/E/S/W marked in small seal-script characters.\n - Inside: a semi-transparent top-down terrain painted in ink-wash style, the player shown as a golden arrow in the center, nearby quest markers as yellow exclamation marks, a blue diamond waypoint, and a red skull for an elite monster.\n - Below the minimap: current region name \"{argument name=\"region\" default=\"天牙关 · 古祠林\"}\" and in-game time \"{argument name=\"in_game_time\" default=\"戌时 · 月明\"}\" in vertical Song typography.\n- Right edge — Quest tracker panel:\n - Semi-transparent parchment-textured vertical panel with faint ink-wash border.\n - Header: \"任务追踪\" in bold Song typography.\n - Active quest: \"{argument name=\"active_quest\" default=\"寻访古祠残卷\"}\" with a short one-line objective beneath in smaller type, e.g. \"前往古祠林深处查探异象 (1/3)\".\n - Two additional quest entries listed below in dimmer color, each with a small circular category icon (main / side / sect).\n- Bottom-center — Skill hotbar:\n - 10 square skill slots arranged horizontally, each with an ornate bronze Chinese-motif border and a dark inner background.\n - Each slot contains a painterly skill icon with a recognizable wuxia theme (sword qi arc, swirling internal-energy palm, stepping-on-snow lightfoot, ink-bird summon, ice-lotus burst, etc.).\n - Hotkey letters 1-0 in small crisp white numerals at the bottom-right of each slot.\n - Two skills are on cooldown with a faint radial sweep overlay and a small remaining-seconds number.\n - Flanking the hotbar on the left: a round \"普攻\" basic-attack button; on the right: a round \"绝技\" ultimate button with a subtle golden glow suggesting it is ready.\n- Bottom-left — Chat window:\n - Semi-transparent dark rounded-rectangle chat panel with a thin gold hairline border.\n - 4-5 recent chat lines in small Chinese typography, each prefixed by a channel tag: [世界], [门派], [队伍], [系统]. Examples: \"[世界] 逍遥子: 天牙关有BOSS刷新了,招人!\", \"[系统] 您已进入秘境「古祠林」,PVP 已开启\", \"[门派] 青冥剑宗 长老: 今晚酉时门派任务集合\".\n- World-space UI (floating in 3D, not screen-locked):\n - A distant NPC in front of the pavilion has a floating nameplate \"{argument name=\"npc_name\" default=\"守祠老人\"}\" with a golden exclamation mark above their head indicating an available quest.\n - A second NPC further back shows a small cyan question mark indicating an in-progress quest turn-in.\n - A faint golden guide-breeze particle trail drifts from the player toward the next objective, fading into the mist.\n\n# Typography & language rules\n- All in-UI text is rendered in clean, crisp Simplified or Traditional Chinese (Song/serif for headings, sans for body); no garbled glyphs, no Latin filler, no lorem.\n- Numbers are Western Arabic digits.\n- HUD elements are readable at a glance but never overpower the protagonist — UI takes no more than ~25% of total frame area in aggregate.\n\n# Final feel\nShould read as a real 4K in-game screenshot of a next-generation Chinese wuxia MMO, somewhere between a Black Myth: Wukong combat moment and a Jianwang 3 scenic screenshot. Cold mountain atmosphere, cinematic protagonist hero framing, precise game-HUD production quality, zero AI-artifact sloppiness on the UI widgets.\n\n# Negative prompt\nno warped Chinese characters, no fake gibberish glyphs, no Western medieval armor, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no floating crooked text, no extra fingers on the protagonist, no modern clothing, no firearms, no generic fantasy elf look, no cluttered or overlapping UI panels, no watermark, no signature." + "query": { + "en": "Use this plugin for the following Chinese-language task: A full-screen in-game HUD screenshot of a AAA ancient-China open-world MMO, rendered in the cinematic photoreal style of Black Myth: Wukong — Unreal Engine 5 level lighting, volumetric god rays, deep filmic color grading, subtle chromatic aberration, shallow depth of field on the background, razor-sharp foreground.\n\n# 3D scene (underneath the UI)\n- Center of frame: {argument name=\"protagonist\" default=\"a beautiful Chinese female swordswoman in her mid 20s, flowing ivory-white Hanfu robe with pale jade embroidery, long black hair tied with a silk ribbon, jade hairpin, elegant calm expression, holding a slender straight jian sword in a low guard stance, gentle wind lifting her sleeves and hair ribbon\"}, captured in a cinematic third-person over-the-shoulder framing, shot from slightly behind and above her right shoulder so the viewer sees both her profile and the world ahead.\n- Environment: {argument name=\"environment\" default=\"a cold-toned deep-mountain ancient shrine — towering weathered stone steles carved with faded sutras, a half-ruined Tang-dynasty wooden pavilion with curled eaves and peeling vermilion paint, a massive ancient gnarled peach tree with scattered falling petals, dense low-lying mist rolling along mossy stone steps, distant jagged mountain peaks fading into cold blue fog\"}.\n- Lighting: cold teal and desaturated blue base palette with warm amber rim light on the protagonist, faint god rays cutting through the mist, cinematic HDR contrast, filmic grain.\n\n# HUD overlay (drawn cleanly on top of the 3D scene, readable, game-screenshot accurate)\n- Top-left — Character status panel:\n - Circular portrait frame with ornate bronze Chinese cloud-pattern border, inside a stylized portrait of the same protagonist.\n - To the right of the portrait: character name \"{argument name=\"character_name\" default=\"云裳\"}\", level badge \"Lv.{argument name=\"level\" default=\"58\"}\", and a small sect crest tag \"{argument name=\"sect\" default=\"青冥剑宗\"}\" (Qingming Sword Sect).\n - Three stacked bars beneath: red HP bar labeled \"气血\", blue MP/internal-energy bar labeled \"内力\", yellow stamina bar labeled \"体力\". Each bar has crisp numeric readouts in small Song/serif Chinese typography.\n - A row of 5 small buff/debuff icons with faint Chinese seal-script labels and countdown timers.\n- Top-right — Minimap:\n - Round minimap with a brass compass-style frame etched with the 8 trigrams (bagua) around the rim, N/E/S/W marked in small seal-script characters.\n - Inside: a semi-transparent top-down terrain painted in ink-wash style, the player shown as a golden arrow in the center, nearby quest markers as yellow exclamation marks, a blue diamond waypoint, and a red skull for an elite monster.\n - Below the minimap: current region name \"{argument name=\"region\" default=\"天牙关 · 古祠林\"}\" and in-game time \"{argument name=\"in_game_time\" default=\"戌时 · 月明\"}\" in vertical Song typography.\n- Right edge — Quest tracker panel:\n - Semi-transparent parchment-textured vertical panel with faint ink-wash border.\n - Header: \"任务追踪\" in bold Song typography.\n - Active quest: \"{argument name=\"active_quest\" default=\"寻访古祠残卷\"}\" with a short one-line objective beneath in smaller type, e.g. \"前往古祠林深处查探异象 (1/3)\".\n - Two additional quest entries listed below in dimmer color, each with a small circular category icon (main / side / sect).\n- Bottom-center — Skill hotbar:\n - 10 square skill slots arranged horizontally, each with an ornate bronze Chinese-motif border and a dark inner background.\n - Each slot contains a painterly skill icon with a recognizable wuxia theme (sword qi arc, swirling internal-energy palm, stepping-on-snow lightfoot, ink-bird summon, ice-lotus burst, etc.).\n - Hotkey letters 1-0 in small crisp white numerals at the bottom-right of each slot.\n - Two skills are on cooldown with a faint radial sweep overlay and a small remaining-seconds number.\n - Flanking the hotbar on the left: a round \"普攻\" basic-attack button; on the right: a round \"绝技\" ultimate button with a subtle golden glow suggesting it is ready.\n- Bottom-left — Chat window:\n - Semi-transparent dark rounded-rectangle chat panel with a thin gold hairline border.\n - 4-5 recent chat lines in small Chinese typography, each prefixed by a channel tag: [世界], [门派], [队伍], [系统]. Examples: \"[世界] 逍遥子: 天牙关有BOSS刷新了,招人!\", \"[系统] 您已进入秘境「古祠林」,PVP 已开启\", \"[门派] 青冥剑宗 长老: 今晚酉时门派任务集合\".\n- World-space UI (floating in 3D, not screen-locked):\n - A distant NPC in front of the pavilion has a floating nameplate \"{argument name=\"npc_name\" default=\"守祠老人\"}\" with a golden exclamation mark above their head indicating an available quest.\n - A second NPC further back shows a small cyan question mark indicating an in-progress quest turn-in.\n - A faint golden guide-breeze particle trail drifts from the player toward the next objective, fading into the mist.\n\n# Typography & language rules\n- All in-UI text is rendered in clean, crisp Simplified or Traditional Chinese (Song/serif for headings, sans for body); no garbled glyphs, no Latin filler, no lorem.\n- Numbers are Western Arabic digits.\n- HUD elements are readable at a glance but never overpower the protagonist — UI takes no more than ~25% of total frame area in aggregate.\n\n# Final feel\nShould read as a real 4K in-game screenshot of a next-generation Chinese wuxia MMO, somewhere between a Black Myth: Wukong combat moment and a Jianwang 3 scenic screenshot. Cold mountain atmosphere, cinematic protagonist hero framing, precise game-HUD production quality, zero AI-artifact sloppiness on the UI widgets.\n\n# Negative prompt\nno warped Chinese characters, no fake gibberish glyphs, no Western medieval armor, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no floating crooked text, no extra fingers on the protagonist, no modern clothing, no firearms, no generic fantasy elf look, no cluttered or overlapping UI panels, no watermark, no signature.", + "zh-CN": "A full-screen in-game HUD screenshot of a AAA ancient-China open-world MMO, rendered in the cinematic photoreal style of Black Myth: Wukong — Unreal Engine 5 level lighting, volumetric god rays, deep filmic color grading, subtle chromatic aberration, shallow depth of field on the background, razor-sharp foreground.\n\n# 3D scene (underneath the UI)\n- Center of frame: {argument name=\"protagonist\" default=\"a beautiful Chinese female swordswoman in her mid 20s, flowing ivory-white Hanfu robe with pale jade embroidery, long black hair tied with a silk ribbon, jade hairpin, elegant calm expression, holding a slender straight jian sword in a low guard stance, gentle wind lifting her sleeves and hair ribbon\"}, captured in a cinematic third-person over-the-shoulder framing, shot from slightly behind and above her right shoulder so the viewer sees both her profile and the world ahead.\n- Environment: {argument name=\"environment\" default=\"a cold-toned deep-mountain ancient shrine — towering weathered stone steles carved with faded sutras, a half-ruined Tang-dynasty wooden pavilion with curled eaves and peeling vermilion paint, a massive ancient gnarled peach tree with scattered falling petals, dense low-lying mist rolling along mossy stone steps, distant jagged mountain peaks fading into cold blue fog\"}.\n- Lighting: cold teal and desaturated blue base palette with warm amber rim light on the protagonist, faint god rays cutting through the mist, cinematic HDR contrast, filmic grain.\n\n# HUD overlay (drawn cleanly on top of the 3D scene, readable, game-screenshot accurate)\n- Top-left — Character status panel:\n - Circular portrait frame with ornate bronze Chinese cloud-pattern border, inside a stylized portrait of the same protagonist.\n - To the right of the portrait: character name \"{argument name=\"character_name\" default=\"云裳\"}\", level badge \"Lv.{argument name=\"level\" default=\"58\"}\", and a small sect crest tag \"{argument name=\"sect\" default=\"青冥剑宗\"}\" (Qingming Sword Sect).\n - Three stacked bars beneath: red HP bar labeled \"气血\", blue MP/internal-energy bar labeled \"内力\", yellow stamina bar labeled \"体力\". Each bar has crisp numeric readouts in small Song/serif Chinese typography.\n - A row of 5 small buff/debuff icons with faint Chinese seal-script labels and countdown timers.\n- Top-right — Minimap:\n - Round minimap with a brass compass-style frame etched with the 8 trigrams (bagua) around the rim, N/E/S/W marked in small seal-script characters.\n - Inside: a semi-transparent top-down terrain painted in ink-wash style, the player shown as a golden arrow in the center, nearby quest markers as yellow exclamation marks, a blue diamond waypoint, and a red skull for an elite monster.\n - Below the minimap: current region name \"{argument name=\"region\" default=\"天牙关 · 古祠林\"}\" and in-game time \"{argument name=\"in_game_time\" default=\"戌时 · 月明\"}\" in vertical Song typography.\n- Right edge — Quest tracker panel:\n - Semi-transparent parchment-textured vertical panel with faint ink-wash border.\n - Header: \"任务追踪\" in bold Song typography.\n - Active quest: \"{argument name=\"active_quest\" default=\"寻访古祠残卷\"}\" with a short one-line objective beneath in smaller type, e.g. \"前往古祠林深处查探异象 (1/3)\".\n - Two additional quest entries listed below in dimmer color, each with a small circular category icon (main / side / sect).\n- Bottom-center — Skill hotbar:\n - 10 square skill slots arranged horizontally, each with an ornate bronze Chinese-motif border and a dark inner background.\n - Each slot contains a painterly skill icon with a recognizable wuxia theme (sword qi arc, swirling internal-energy palm, stepping-on-snow lightfoot, ink-bird summon, ice-lotus burst, etc.).\n - Hotkey letters 1-0 in small crisp white numerals at the bottom-right of each slot.\n - Two skills are on cooldown with a faint radial sweep overlay and a small remaining-seconds number.\n - Flanking the hotbar on the left: a round \"普攻\" basic-attack button; on the right: a round \"绝技\" ultimate button with a subtle golden glow suggesting it is ready.\n- Bottom-left — Chat window:\n - Semi-transparent dark rounded-rectangle chat panel with a thin gold hairline border.\n - 4-5 recent chat lines in small Chinese typography, each prefixed by a channel tag: [世界], [门派], [队伍], [系统]. Examples: \"[世界] 逍遥子: 天牙关有BOSS刷新了,招人!\", \"[系统] 您已进入秘境「古祠林」,PVP 已开启\", \"[门派] 青冥剑宗 长老: 今晚酉时门派任务集合\".\n- World-space UI (floating in 3D, not screen-locked):\n - A distant NPC in front of the pavilion has a floating nameplate \"{argument name=\"npc_name\" default=\"守祠老人\"}\" with a golden exclamation mark above their head indicating an available quest.\n - A second NPC further back shows a small cyan question mark indicating an in-progress quest turn-in.\n - A faint golden guide-breeze particle trail drifts from the player toward the next objective, fading into the mist.\n\n# Typography & language rules\n- All in-UI text is rendered in clean, crisp Simplified or Traditional Chinese (Song/serif for headings, sans for body); no garbled glyphs, no Latin filler, no lorem.\n- Numbers are Western Arabic digits.\n- HUD elements are readable at a glance but never overpower the protagonist — UI takes no more than ~25% of total frame area in aggregate.\n\n# Final feel\nShould read as a real 4K in-game screenshot of a next-generation Chinese wuxia MMO, somewhere between a Black Myth: Wukong combat moment and a Jianwang 3 scenic screenshot. Cold mountain atmosphere, cinematic protagonist hero framing, precise game-HUD production quality, zero AI-artifact sloppiness on the UI widgets.\n\n# Negative prompt\nno warped Chinese characters, no fake gibberish glyphs, no Western medieval armor, no anime cel-shading, no low-res UI, no duplicated HUD widgets, no floating crooked text, no extra fingers on the protagonist, no modern clothing, no firearms, no generic fantasy elf look, no cluttered or overlapping UI panels, no watermark, no signature." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/illustrated-city-food-map/open-design.json b/plugins/_official/image-templates/illustrated-city-food-map/open-design.json index a862d51ae..b1e190cbf 100644 --- a/plugins/_official/image-templates/illustrated-city-food-map/open-design.json +++ b/plugins/_official/image-templates/illustrated-city-food-map/open-design.json @@ -29,7 +29,10 @@ "poster": "https://cms-assets.youmind.com/media/1776662673014_nf0taw_HGRMNDybsAAGG88.jpg" }, "useCase": { - "query": "{\n \"type\": \"illustrated map infographic\",\n \"style\": \"{argument name=\\\"art style\\\" default=\\\"watercolor and ink hand-drawn illustration on vintage parchment\\\"}\",\n \"title_section\": {\n \"text\": \"{argument name=\\\"city name\\\" default=\\\"成都\\\"} {argument name=\\\"map title\\\" default=\\\"吃货暴走地图\\\"}\",\n \"mascot\": \"cartoon red chili pepper wearing sunglasses and giving a thumbs up\"\n },\n \"border\": \"{argument name=\\\"border decoration\\\" default=\\\"vine of green leaves and red chili peppers\\\"}\",\n \"layout\": {\n \"background\": \"textured beige parchment paper with yellow roads, blue rivers, and green park areas\",\n \"sections\": [\n {\n \"title\": \"landmarks\",\n \"count\": 6,\n \"illustrations\": [\"traditional pavilion\", \"traditional monastery\", \"modern skyscraper with climbing panda\", \"tall TV tower\", \"traditional gate\", \"industrial buildings\"],\n \"labels\": [\"人民公园\", \"文殊院\", \"IFS\", \"339电视塔\", \"宽窄巷子\", \"东郊记忆\"]\n },\n {\n \"title\": \"food_spots\",\n \"count\": 12,\n \"illustrations\": [\"mapo tofu\", \"dumplings in chili oil\", \"skewers in pot\", \"sticky rice balls\", \"egg baking cake\", \"nine-grid hotpot\", \"sweet potato noodles\", \"cold skewers\", \"spicy mixed dish\", \"covered tea bowl\", \"ice jelly dessert\", \"spicy rabbit heads\"],\n \"labels\": [\"1 陈麻婆豆腐\", \"2 钟水饺\", \"3 春熙路\", \"4 宽窄巷子·三大炮\", \"5 建设路·叶婆婆蛋烘糕\", \"6 玉林路·小龙坎火锅\", \"7 香香巷·肥肠粉\", \"8 武侯祠大街·钵钵鸡\", \"9 东郊记忆·冒椒火辣\", \"10 人民公园·鹤鸣茶社\", \"11 锦里古街·冰粉\", \"12 双流老妈兔头\"]\n },\n {\n \"title\": \"图例\",\n \"position\": \"bottom-right\",\n \"count\": 5,\n \"items\": [\"red dot\", \"green house\", \"green tree\", \"blue line\", \"yellow double line\"],\n \"labels\": [\"美食地点\", \"地标景点\", \"公园绿地\", \"河流湖泊\", \"主要道路\"]\n }\n ],\n \"centerpiece\": \"giant panda sitting and eating bamboo\",\n \"bottom_right_extras\": [\"vintage compass rose with N, S, E, W\", \"disclaimer text '温馨提示:吃辣需谨慎,肠胃要保护~' with a red chili pepper icon\"]\n }\n}" + "query": { + "en": "Use this plugin for the following Chinese-language task: {\n \"type\": \"illustrated map infographic\",\n \"style\": \"{argument name=\\\"art style\\\" default=\\\"watercolor and ink hand-drawn illustration on vintage parchment\\\"}\",\n \"title_section\": {\n \"text\": \"{argument name=\\\"city name\\\" default=\\\"成都\\\"} {argument name=\\\"map title\\\" default=\\\"吃货暴走地图\\\"}\",\n \"mascot\": \"cartoon red chili pepper wearing sunglasses and giving a thumbs up\"\n },\n \"border\": \"{argument name=\\\"border decoration\\\" default=\\\"vine of green leaves and red chili peppers\\\"}\",\n \"layout\": {\n \"background\": \"textured beige parchment paper with yellow roads, blue rivers, and green park areas\",\n \"sections\": [\n {\n \"title\": \"landmarks\",\n \"count\": 6,\n \"illustrations\": [\"traditional pavilion\", \"traditional monastery\", \"modern skyscraper with climbing panda\", \"tall TV tower\", \"traditional gate\", \"industrial buildings\"],\n \"labels\": [\"人民公园\", \"文殊院\", \"IFS\", \"339电视塔\", \"宽窄巷子\", \"东郊记忆\"]\n },\n {\n \"title\": \"food_spots\",\n \"count\": 12,\n \"illustrations\": [\"mapo tofu\", \"dumplings in chili oil\", \"skewers in pot\", \"sticky rice balls\", \"egg baking cake\", \"nine-grid hotpot\", \"sweet potato noodles\", \"cold skewers\", \"spicy mixed dish\", \"covered tea bowl\", \"ice jelly dessert\", \"spicy rabbit heads\"],\n \"labels\": [\"1 陈麻婆豆腐\", \"2 钟水饺\", \"3 春熙路\", \"4 宽窄巷子·三大炮\", \"5 建设路·叶婆婆蛋烘糕\", \"6 玉林路·小龙坎火锅\", \"7 香香巷·肥肠粉\", \"8 武侯祠大街·钵钵鸡\", \"9 东郊记忆·冒椒火辣\", \"10 人民公园·鹤鸣茶社\", \"11 锦里古街·冰粉\", \"12 双流老妈兔头\"]\n },\n {\n \"title\": \"图例\",\n \"position\": \"bottom-right\",\n \"count\": 5,\n \"items\": [\"red dot\", \"green house\", \"green tree\", \"blue line\", \"yellow double line\"],\n \"labels\": [\"美食地点\", \"地标景点\", \"公园绿地\", \"河流湖泊\", \"主要道路\"]\n }\n ],\n \"centerpiece\": \"giant panda sitting and eating bamboo\",\n \"bottom_right_extras\": [\"vintage compass rose with N, S, E, W\", \"disclaimer text '温馨提示:吃辣需谨慎,肠胃要保护~' with a red chili pepper icon\"]\n }\n}", + "zh-CN": "{\n \"type\": \"illustrated map infographic\",\n \"style\": \"{argument name=\\\"art style\\\" default=\\\"watercolor and ink hand-drawn illustration on vintage parchment\\\"}\",\n \"title_section\": {\n \"text\": \"{argument name=\\\"city name\\\" default=\\\"成都\\\"} {argument name=\\\"map title\\\" default=\\\"吃货暴走地图\\\"}\",\n \"mascot\": \"cartoon red chili pepper wearing sunglasses and giving a thumbs up\"\n },\n \"border\": \"{argument name=\\\"border decoration\\\" default=\\\"vine of green leaves and red chili peppers\\\"}\",\n \"layout\": {\n \"background\": \"textured beige parchment paper with yellow roads, blue rivers, and green park areas\",\n \"sections\": [\n {\n \"title\": \"landmarks\",\n \"count\": 6,\n \"illustrations\": [\"traditional pavilion\", \"traditional monastery\", \"modern skyscraper with climbing panda\", \"tall TV tower\", \"traditional gate\", \"industrial buildings\"],\n \"labels\": [\"人民公园\", \"文殊院\", \"IFS\", \"339电视塔\", \"宽窄巷子\", \"东郊记忆\"]\n },\n {\n \"title\": \"food_spots\",\n \"count\": 12,\n \"illustrations\": [\"mapo tofu\", \"dumplings in chili oil\", \"skewers in pot\", \"sticky rice balls\", \"egg baking cake\", \"nine-grid hotpot\", \"sweet potato noodles\", \"cold skewers\", \"spicy mixed dish\", \"covered tea bowl\", \"ice jelly dessert\", \"spicy rabbit heads\"],\n \"labels\": [\"1 陈麻婆豆腐\", \"2 钟水饺\", \"3 春熙路\", \"4 宽窄巷子·三大炮\", \"5 建设路·叶婆婆蛋烘糕\", \"6 玉林路·小龙坎火锅\", \"7 香香巷·肥肠粉\", \"8 武侯祠大街·钵钵鸡\", \"9 东郊记忆·冒椒火辣\", \"10 人民公园·鹤鸣茶社\", \"11 锦里古街·冰粉\", \"12 双流老妈兔头\"]\n },\n {\n \"title\": \"图例\",\n \"position\": \"bottom-right\",\n \"count\": 5,\n \"items\": [\"red dot\", \"green house\", \"green tree\", \"blue line\", \"yellow double line\"],\n \"labels\": [\"美食地点\", \"地标景点\", \"公园绿地\", \"河流湖泊\", \"主要道路\"]\n }\n ],\n \"centerpiece\": \"giant panda sitting and eating bamboo\",\n \"bottom_right_extras\": [\"vintage compass rose with N, S, E, W\", \"disclaimer text '温馨提示:吃辣需谨慎,肠胃要保护~' with a red chili pepper icon\"]\n }\n}" + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/illustration-crayon-kid-drawing-rework/open-design.json b/plugins/_official/image-templates/illustration-crayon-kid-drawing-rework/open-design.json index 559ea1623..c5ea32dec 100644 --- a/plugins/_official/image-templates/illustration-crayon-kid-drawing-rework/open-design.json +++ b/plugins/_official/image-templates/illustration-crayon-kid-drawing-rework/open-design.json @@ -34,7 +34,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/illustration-crayon-kid-drawing-rework.jpg" }, "useCase": { - "query": "Rework the given image into a crayon-style illustration, transforming the entire scene into something that feels hand-drawn by a 10-year-old. Preserve the general layout and spatial relationships of the original image — transform the style first, embellish second, so small UI elements, faces, and logos stay where they are. Keep the forms simple and slightly imperfect, like a child's drawing — wobbly outlines, uneven strokes, visible waxy crayon texture, soft smudges where colors overlap.\n\nAvoid using the original color palette — replace it with bright, playful crayon colors (sunshine yellow, candy pink, sky blue, mint green, lavender, tangerine, grass green) on a clean white paper background with subtle paper grain. Aim for a soft, cute, and innocent aesthetic.\n\nIncorporate fun, childlike details such as fairy-tale castles or towers in the corners, lollipops and candy, big shiny five-point stars, fluffy rounded clouds, a rainbow arc, a cheerful smiling sun, tiny hearts and sparkles scattered across the page to amplify the playful vibe. Keep the main subject of the reference image clearly recognizable — redraw it in crayon rather than replacing it — and render any visible text as wobbly kid handwriting that stays legible.\n\nThe final result should feel charming, colorful, and full of childlike imagination — like a kid pulled out a fresh crayon box and happily redrew the reference on a sheet of white paper.\n\nNegative prompt: no photo-realistic rendering, no sharp vector lines, no 3D shading, no airbrush gradients, no dark or muddy palette, no adult fine-art technique, no watermark, no frame border, no garbled text." + "query": { + "en": "Rework the given image into a crayon-style illustration, transforming the entire scene into something that feels hand-drawn by a 10-year-old. Preserve the general layout and spatial relationships of the original image — transform the style first, embellish second, so small UI elements, faces, and logos stay where they are. Keep the forms simple and slightly imperfect, like a child's drawing — wobbly outlines, uneven strokes, visible waxy crayon texture, soft smudges where colors overlap.\n\nAvoid using the original color palette — replace it with bright, playful crayon colors (sunshine yellow, candy pink, sky blue, mint green, lavender, tangerine, grass green) on a clean white paper background with subtle paper grain. Aim for a soft, cute, and innocent aesthetic.\n\nIncorporate fun, childlike details such as fairy-tale castles or towers in the corners, lollipops and candy, big shiny five-point stars, fluffy rounded clouds, a rainbow arc, a cheerful smiling sun, tiny hearts and sparkles scattered across the page to amplify the playful vibe. Keep the main subject of the reference image clearly recognizable — redraw it in crayon rather than replacing it — and render any visible text as wobbly kid handwriting that stays legible.\n\nThe final result should feel charming, colorful, and full of childlike imagination — like a kid pulled out a fresh crayon box and happily redrew the reference on a sheet of white paper.\n\nNegative prompt: no photo-realistic rendering, no sharp vector lines, no 3D shading, no airbrush gradients, no dark or muddy palette, no adult fine-art technique, no watermark, no frame border, no garbled text.", + "zh-CN": "使用这个插件完成以下任务:Rework the given image into a crayon-style illustration, transforming the entire scene into something that feels hand-drawn by a 10-year-old. Preserve the general layout and spatial relationships of the original image — transform the style first, embellish second, so small UI elements, faces, and logos stay where they are. Keep the forms simple and slightly imperfect, like a child's drawing — wobbly outlines, uneven strokes, visible waxy crayon texture, soft smudges where colors overlap.\n\nAvoid using the original color palette — replace it with bright, playful crayon colors (sunshine yellow, candy pink, sky blue, mint green, lavender, tangerine, grass green) on a clean white paper background with subtle paper grain. Aim for a soft, cute, and innocent aesthetic.\n\nIncorporate fun, childlike details such as fairy-tale castles or towers in the corners, lollipops and candy, big shiny five-point stars, fluffy rounded clouds, a rainbow arc, a cheerful smiling sun, tiny hearts and sparkles scattered across the page to amplify the playful vibe. Keep the main subject of the reference image clearly recognizable — redraw it in crayon rather than replacing it — and render any visible text as wobbly kid handwriting that stays legible.\n\nThe final result should feel charming, colorful, and full of childlike imagination — like a kid pulled out a fresh crayon box and happily redrew the reference on a sheet of white paper.\n\nNegative prompt: no photo-realistic rendering, no sharp vector lines, no 3D shading, no airbrush gradients, no dark or muddy palette, no adult fine-art technique, no watermark, no frame border, no garbled text." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/infographic-otaku-dance-choreography-breakdown-gokurakujodo-16-panels/open-design.json b/plugins/_official/image-templates/infographic-otaku-dance-choreography-breakdown-gokurakujodo-16-panels/open-design.json index 6d6d921a0..5bf6ba70d 100644 --- a/plugins/_official/image-templates/infographic-otaku-dance-choreography-breakdown-gokurakujodo-16-panels/open-design.json +++ b/plugins/_official/image-templates/infographic-otaku-dance-choreography-breakdown-gokurakujodo-16-panels/open-design.json @@ -36,7 +36,10 @@ "poster": "https://raw.githubusercontent.com/nexu-io/open-design/main/assets/prompt-templates/image/infographic-otaku-dance-choreography-breakdown-gokurakujodo-16-panels.jpg" }, "useCase": { - "query": "A SINGLE vertical image composed as a 4x4 grid (4 columns, 4 rows) of 16 connected square panels, forming a DANCE CHOREOGRAPHY BREAKDOWN CHART for the famous Japanese otaku dance song {argument name=\"song_title\" default=\"極楽浄土\"} ({argument name=\"song_romaji\" default=\"Gokuraku Jodo\"}).\n\nPurpose: this chart will be used as a POSE REFERENCE for AI video generation, so each pose MUST be clearly readable.\n\n=== CHARACTER (must be IDENTICAL in all 16 panels) ===\n{argument name=\"character\" default=\"A cute half-realistic anime idol girl in her late teens, LONG BRIGHT PINK HAIR tied in TWO HIGH TWIN-TAILS with pink ribbons, LARGE sparkling turquoise-blue eyes, fair porcelain skin, soft rosy cheeks, wearing a Japanese-style idol school uniform: white sailor-collar blouse with pink bow, short pleated pink-and-white plaid mini skirt, white thigh-high socks, white Mary-Jane shoes with small heels. Slim petite figure, height about 5'2\\\"\"}.\n\nIMPORTANT: the SAME exact character must appear in ALL 16 panels — same hairstyle, same uniform, same proportions, same face.\n\nArt style: half-realistic anime, similar to Love Live! School Idol or The Idolmaster illustration style, clean line art, soft cell-shading, vivid colors.\n\n=== LAYOUT RULES ===\n- Exactly 4 columns × 4 rows = 16 equally-sized square cells.\n- Thin clean black grid lines separating cells.\n- Each cell shows the character FULL BODY (head to toe visible).\n- Plain light-pink pastel solid background {argument name=\"background_color\" default=\"(#FFE0EC)\"} behind the character in every cell — NO complex backgrounds, NO stage, NO other characters.\n- Character centered in each cell, taking up about 75% of the cell height.\n- Camera angle: straight-on full-body shot, same eye-level angle in every cell.\n- Each cell has a small Japanese caption at the bottom in black text on a white strip showing the pose name.\n- Numbered 1 through 16 in small circles at the top-left corner of each cell.\n\n=== 16 POSES (signature choreography) ===\nPanel 1 (Japanese label \"両手広げ\"): standing upright facing camera, both arms spread wide open to the sides at shoulder height, palms open, bright smile, feet slightly apart.\nPanel 2 (Japanese label \"指さし天井\"): standing, right arm raised high pointing index finger straight up to the ceiling, left hand on hip, winking one eye.\nPanel 3 (Japanese label \"ハート手\"): both hands above head forming a big heart shape with fingers, head tilted cutely to the side, happy smile.\nPanel 4 (Japanese label \"腰くねり\"): hands on hips, hips swayed dramatically to the right side, torso curved in an S-line, playful expression.\nPanel 5 (Japanese label \"投げキッス\"): standing with right hand near lips blowing a kiss forward, left hand extended to the side, eyes half-closed flirty smile.\nPanel 6 (Japanese label \"片膝立ち\"): kneeling on left knee with right leg bent, both hands cupped together near chin, looking up with sparkling eyes.\nPanel 7 (Japanese label \"胸に手\"): standing straight, both hands crossed over the chest, eyes gently closed, serene peaceful expression like praying.\nPanel 8 (Japanese label \"回転ターン\"): mid-spin rotation, twin-tails flying out to one side, skirt flaring, one arm extended outward, dynamic motion.\nPanel 9 (Japanese label \"ウェーブ手\"): standing, both arms doing a wave-motion to the left side, body leaning left, flowing water-like arm gesture.\nPanel 10 (Japanese label \"ジャンプ\"): mid-air jump, both legs bent upward, both arms raised high with fists clenched in victory pose, huge joyful smile.\nPanel 11 (Japanese label \"腕クロス\"): standing, both arms crossed in front of chest forming an X, serious cool idol expression, slight frown.\nPanel 12 (Japanese label \"ダブルピース\"): standing, both hands raised beside face making double peace signs (V-signs) with fingers, wide grin, eyes sparkling.\nPanel 13 (Japanese label \"ポーズ決め\"): signature idol finish pose: right hand on hip, left arm raised with index finger pointing diagonally up-left, head tilted, confident smile.\nPanel 14 (Japanese label \"両手振り\"): both arms raised overhead waving to audience, bright cheerful smile, feet together, facing forward.\nPanel 15 (Japanese label \"しゃがみポーズ\"): crouching/squatting low to the ground, knees together, both hands on knees, looking up cutely at camera.\nPanel 16 (Japanese label \"フィナーレ\"): grand finale pose: both arms spread wide and high in a V shape above head, one leg slightly forward, head thrown back with huge triumphant smile, sparkle effects.\n\n=== OVERALL STYLE ===\nHalf-realistic anime illustration style, similar to Love Live! or The Idolmaster key visuals, clean cel-shading, vibrant colors, high clarity. The whole image should read like an official dance tutorial infographic or a sticker sheet. Keep pose silhouettes CRISP and UNAMBIGUOUS — prioritize pose clarity over artistic flourishes. Do not add motion lines or effects that obscure the body. No speech bubbles. No extra decorations outside the grid.\n\nA clean header at the very top of the image reads {argument name=\"header_text\" default=\"\\\"極楽浄土 振り付け 16連動\\\"\"} in bold Japanese text.\n\nFinal output: ONE coherent 4x4 grid poster, vertical 2:3 aspect ratio, suitable as a dance reference chart.\n\n# Negative prompt\nno watermark, no studio logos, no warped Japanese characters, no gibberish glyphs, no inconsistent character across panels, no mismatched hair or uniform between cells, no motion blur obscuring the pose, no speech bubbles, no extra decorations outside the grid, no multiple characters per cell, no cropped limbs, no missing heads or feet, no broken grid lines, no overlapping panels, no cluttered background behind the character, no extra fingers, no lewd or sexualized framing, no signature." + "query": { + "en": "Use this plugin for the following Chinese-language task: A SINGLE vertical image composed as a 4x4 grid (4 columns, 4 rows) of 16 connected square panels, forming a DANCE CHOREOGRAPHY BREAKDOWN CHART for the famous Japanese otaku dance song {argument name=\"song_title\" default=\"極楽浄土\"} ({argument name=\"song_romaji\" default=\"Gokuraku Jodo\"}).\n\nPurpose: this chart will be used as a POSE REFERENCE for AI video generation, so each pose MUST be clearly readable.\n\n=== CHARACTER (must be IDENTICAL in all 16 panels) ===\n{argument name=\"character\" default=\"A cute half-realistic anime idol girl in her late teens, LONG BRIGHT PINK HAIR tied in TWO HIGH TWIN-TAILS with pink ribbons, LARGE sparkling turquoise-blue eyes, fair porcelain skin, soft rosy cheeks, wearing a Japanese-style idol school uniform: white sailor-collar blouse with pink bow, short pleated pink-and-white plaid mini skirt, white thigh-high socks, white Mary-Jane shoes with small heels. Slim petite figure, height about 5'2\\\"\"}.\n\nIMPORTANT: the SAME exact character must appear in ALL 16 panels — same hairstyle, same uniform, same proportions, same face.\n\nArt style: half-realistic anime, similar to Love Live! School Idol or The Idolmaster illustration style, clean line art, soft cell-shading, vivid colors.\n\n=== LAYOUT RULES ===\n- Exactly 4 columns × 4 rows = 16 equally-sized square cells.\n- Thin clean black grid lines separating cells.\n- Each cell shows the character FULL BODY (head to toe visible).\n- Plain light-pink pastel solid background {argument name=\"background_color\" default=\"(#FFE0EC)\"} behind the character in every cell — NO complex backgrounds, NO stage, NO other characters.\n- Character centered in each cell, taking up about 75% of the cell height.\n- Camera angle: straight-on full-body shot, same eye-level angle in every cell.\n- Each cell has a small Japanese caption at the bottom in black text on a white strip showing the pose name.\n- Numbered 1 through 16 in small circles at the top-left corner of each cell.\n\n=== 16 POSES (signature choreography) ===\nPanel 1 (Japanese label \"両手広げ\"): standing upright facing camera, both arms spread wide open to the sides at shoulder height, palms open, bright smile, feet slightly apart.\nPanel 2 (Japanese label \"指さし天井\"): standing, right arm raised high pointing index finger straight up to the ceiling, left hand on hip, winking one eye.\nPanel 3 (Japanese label \"ハート手\"): both hands above head forming a big heart shape with fingers, head tilted cutely to the side, happy smile.\nPanel 4 (Japanese label \"腰くねり\"): hands on hips, hips swayed dramatically to the right side, torso curved in an S-line, playful expression.\nPanel 5 (Japanese label \"投げキッス\"): standing with right hand near lips blowing a kiss forward, left hand extended to the side, eyes half-closed flirty smile.\nPanel 6 (Japanese label \"片膝立ち\"): kneeling on left knee with right leg bent, both hands cupped together near chin, looking up with sparkling eyes.\nPanel 7 (Japanese label \"胸に手\"): standing straight, both hands crossed over the chest, eyes gently closed, serene peaceful expression like praying.\nPanel 8 (Japanese label \"回転ターン\"): mid-spin rotation, twin-tails flying out to one side, skirt flaring, one arm extended outward, dynamic motion.\nPanel 9 (Japanese label \"ウェーブ手\"): standing, both arms doing a wave-motion to the left side, body leaning left, flowing water-like arm gesture.\nPanel 10 (Japanese label \"ジャンプ\"): mid-air jump, both legs bent upward, both arms raised high with fists clenched in victory pose, huge joyful smile.\nPanel 11 (Japanese label \"腕クロス\"): standing, both arms crossed in front of chest forming an X, serious cool idol expression, slight frown.\nPanel 12 (Japanese label \"ダブルピース\"): standing, both hands raised beside face making double peace signs (V-signs) with fingers, wide grin, eyes sparkling.\nPanel 13 (Japanese label \"ポーズ決め\"): signature idol finish pose: right hand on hip, left arm raised with index finger pointing diagonally up-left, head tilted, confident smile.\nPanel 14 (Japanese label \"両手振り\"): both arms raised overhead waving to audience, bright cheerful smile, feet together, facing forward.\nPanel 15 (Japanese label \"しゃがみポーズ\"): crouching/squatting low to the ground, knees together, both hands on knees, looking up cutely at camera.\nPanel 16 (Japanese label \"フィナーレ\"): grand finale pose: both arms spread wide and high in a V shape above head, one leg slightly forward, head thrown back with huge triumphant smile, sparkle effects.\n\n=== OVERALL STYLE ===\nHalf-realistic anime illustration style, similar to Love Live! or The Idolmaster key visuals, clean cel-shading, vibrant colors, high clarity. The whole image should read like an official dance tutorial infographic or a sticker sheet. Keep pose silhouettes CRISP and UNAMBIGUOUS — prioritize pose clarity over artistic flourishes. Do not add motion lines or effects that obscure the body. No speech bubbles. No extra decorations outside the grid.\n\nA clean header at the very top of the image reads {argument name=\"header_text\" default=\"\\\"極楽浄土 振り付け 16連動\\\"\"} in bold Japanese text.\n\nFinal output: ONE coherent 4x4 grid poster, vertical 2:3 aspect ratio, suitable as a dance reference chart.\n\n# Negative prompt\nno watermark, no studio logos, no warped Japanese characters, no gibberish glyphs, no inconsistent character across panels, no mismatched hair or uniform between cells, no motion blur obscuring the pose, no speech bubbles, no extra decorations outside the grid, no multiple characters per cell, no cropped limbs, no missing heads or feet, no broken grid lines, no overlapping panels, no cluttered background behind the character, no extra fingers, no lewd or sexualized framing, no signature.", + "zh-CN": "A SINGLE vertical image composed as a 4x4 grid (4 columns, 4 rows) of 16 connected square panels, forming a DANCE CHOREOGRAPHY BREAKDOWN CHART for the famous Japanese otaku dance song {argument name=\"song_title\" default=\"極楽浄土\"} ({argument name=\"song_romaji\" default=\"Gokuraku Jodo\"}).\n\nPurpose: this chart will be used as a POSE REFERENCE for AI video generation, so each pose MUST be clearly readable.\n\n=== CHARACTER (must be IDENTICAL in all 16 panels) ===\n{argument name=\"character\" default=\"A cute half-realistic anime idol girl in her late teens, LONG BRIGHT PINK HAIR tied in TWO HIGH TWIN-TAILS with pink ribbons, LARGE sparkling turquoise-blue eyes, fair porcelain skin, soft rosy cheeks, wearing a Japanese-style idol school uniform: white sailor-collar blouse with pink bow, short pleated pink-and-white plaid mini skirt, white thigh-high socks, white Mary-Jane shoes with small heels. Slim petite figure, height about 5'2\\\"\"}.\n\nIMPORTANT: the SAME exact character must appear in ALL 16 panels — same hairstyle, same uniform, same proportions, same face.\n\nArt style: half-realistic anime, similar to Love Live! School Idol or The Idolmaster illustration style, clean line art, soft cell-shading, vivid colors.\n\n=== LAYOUT RULES ===\n- Exactly 4 columns × 4 rows = 16 equally-sized square cells.\n- Thin clean black grid lines separating cells.\n- Each cell shows the character FULL BODY (head to toe visible).\n- Plain light-pink pastel solid background {argument name=\"background_color\" default=\"(#FFE0EC)\"} behind the character in every cell — NO complex backgrounds, NO stage, NO other characters.\n- Character centered in each cell, taking up about 75% of the cell height.\n- Camera angle: straight-on full-body shot, same eye-level angle in every cell.\n- Each cell has a small Japanese caption at the bottom in black text on a white strip showing the pose name.\n- Numbered 1 through 16 in small circles at the top-left corner of each cell.\n\n=== 16 POSES (signature choreography) ===\nPanel 1 (Japanese label \"両手広げ\"): standing upright facing camera, both arms spread wide open to the sides at shoulder height, palms open, bright smile, feet slightly apart.\nPanel 2 (Japanese label \"指さし天井\"): standing, right arm raised high pointing index finger straight up to the ceiling, left hand on hip, winking one eye.\nPanel 3 (Japanese label \"ハート手\"): both hands above head forming a big heart shape with fingers, head tilted cutely to the side, happy smile.\nPanel 4 (Japanese label \"腰くねり\"): hands on hips, hips swayed dramatically to the right side, torso curved in an S-line, playful expression.\nPanel 5 (Japanese label \"投げキッス\"): standing with right hand near lips blowing a kiss forward, left hand extended to the side, eyes half-closed flirty smile.\nPanel 6 (Japanese label \"片膝立ち\"): kneeling on left knee with right leg bent, both hands cupped together near chin, looking up with sparkling eyes.\nPanel 7 (Japanese label \"胸に手\"): standing straight, both hands crossed over the chest, eyes gently closed, serene peaceful expression like praying.\nPanel 8 (Japanese label \"回転ターン\"): mid-spin rotation, twin-tails flying out to one side, skirt flaring, one arm extended outward, dynamic motion.\nPanel 9 (Japanese label \"ウェーブ手\"): standing, both arms doing a wave-motion to the left side, body leaning left, flowing water-like arm gesture.\nPanel 10 (Japanese label \"ジャンプ\"): mid-air jump, both legs bent upward, both arms raised high with fists clenched in victory pose, huge joyful smile.\nPanel 11 (Japanese label \"腕クロス\"): standing, both arms crossed in front of chest forming an X, serious cool idol expression, slight frown.\nPanel 12 (Japanese label \"ダブルピース\"): standing, both hands raised beside face making double peace signs (V-signs) with fingers, wide grin, eyes sparkling.\nPanel 13 (Japanese label \"ポーズ決め\"): signature idol finish pose: right hand on hip, left arm raised with index finger pointing diagonally up-left, head tilted, confident smile.\nPanel 14 (Japanese label \"両手振り\"): both arms raised overhead waving to audience, bright cheerful smile, feet together, facing forward.\nPanel 15 (Japanese label \"しゃがみポーズ\"): crouching/squatting low to the ground, knees together, both hands on knees, looking up cutely at camera.\nPanel 16 (Japanese label \"フィナーレ\"): grand finale pose: both arms spread wide and high in a V shape above head, one leg slightly forward, head thrown back with huge triumphant smile, sparkle effects.\n\n=== OVERALL STYLE ===\nHalf-realistic anime illustration style, similar to Love Live! or The Idolmaster key visuals, clean cel-shading, vibrant colors, high clarity. The whole image should read like an official dance tutorial infographic or a sticker sheet. Keep pose silhouettes CRISP and UNAMBIGUOUS — prioritize pose clarity over artistic flourishes. Do not add motion lines or effects that obscure the body. No speech bubbles. No extra decorations outside the grid.\n\nA clean header at the very top of the image reads {argument name=\"header_text\" default=\"\\\"極楽浄土 振り付け 16連動\\\"\"} in bold Japanese text.\n\nFinal output: ONE coherent 4x4 grid poster, vertical 2:3 aspect ratio, suitable as a dance reference chart.\n\n# Negative prompt\nno watermark, no studio logos, no warped Japanese characters, no gibberish glyphs, no inconsistent character across panels, no mismatched hair or uniform between cells, no motion blur obscuring the pose, no speech bubbles, no extra decorations outside the grid, no multiple characters per cell, no cropped limbs, no missing heads or feet, no broken grid lines, no overlapping panels, no cluttered background behind the character, no extra fingers, no lewd or sexualized framing, no signature." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/momotaro-explainer-slide-in-hybrid-style/open-design.json b/plugins/_official/image-templates/momotaro-explainer-slide-in-hybrid-style/open-design.json index 848c38ef6..fa213a32d 100644 --- a/plugins/_official/image-templates/momotaro-explainer-slide-in-hybrid-style/open-design.json +++ b/plugins/_official/image-templates/momotaro-explainer-slide-in-hybrid-style/open-design.json @@ -27,7 +27,10 @@ "poster": "https://cms-assets.youmind.com/media/1776699414289_t6mebs_HGQQxukbUAA_qc0.jpg" }, "useCase": { - "query": "Create an explanatory slide ({argument name=\"format\" default=\"ponchi-e diagram\"}) for {argument name=\"theme\" default=\"Momotaro\"} that fuses the gentle atmosphere of \"Irasutoya\" with the overwhelming information density of \"Kasumigaseki slides\"." + "query": { + "en": "Create an explanatory slide ({argument name=\"format\" default=\"ponchi-e diagram\"}) for {argument name=\"theme\" default=\"Momotaro\"} that fuses the gentle atmosphere of \"Irasutoya\" with the overwhelming information density of \"Kasumigaseki slides\".", + "zh-CN": "使用这个插件完成以下任务:Create an explanatory slide ({argument name=\"format\" default=\"ponchi-e diagram\"}) for {argument name=\"theme\" default=\"Momotaro\"} that fuses the gentle atmosphere of \"Irasutoya\" with the overwhelming information density of \"Kasumigaseki slides\"." + } }, "inputs": [ { diff --git a/plugins/_official/image-templates/notion-team-dashboard-live-artifact/open-design.json b/plugins/_official/image-templates/notion-team-dashboard-live-artifact/open-design.json index 3067934de..d56b98cdc 100644 --- a/plugins/_official/image-templates/notion-team-dashboard-live-artifact/open-design.json +++ b/plugins/_official/image-templates/notion-team-dashboard-live-artifact/open-design.json @@ -29,7 +29,10 @@ "poster": "https://raw.githubusercontent.com/joeylee12629-star/open-design/feat/prompt-template-live-artifact-dashboard/prompt-templates/image/notion-team-dashboard-live-artifact.preview.png" }, "useCase": { - "query": "{\n \"type\": \"team productivity dashboard screenshot (prompt-only design preview, no live connector data)\",\n \"ui_aesthetic\": \"Notion native — off-white background #FFFFFF with #F7F6F3 sidebar, 14px SF Pro / Inter body, charcoal ink #37352F, hairline grid #ECECEA, accent blue #2EAADC used sparingly. No gradients, no card shadows, no rounded inner cards, no glassmorphism, no purple→pink hero, no emoji icon strip across the top.\",\n \"top_banner\": {\n \"color\": \"soft amber #FDECC8 with #E6CF94 hairline\",\n \"text\": \"Sample data — design preview. This page is a prompt-only Notion-style dashboard mockup; every number, name, and timestamp below is seeded, not pulled from a real Notion workspace or Composio connector. For real refreshable / connector-backed artifacts, see the live-artifact skill.\"\n },\n \"topbar\": {\n \"breadcrumb\": \"{argument name=\\\"workspace name\\\" default=\\\"Acme Studio\\\"} / Workspace / {argument name=\\\"page title\\\" default=\\\"Team Dashboard\\\"}\",\n \"preview_pill\": \"pill on the right reading 'Sample · design preview' with a small neutral-grey dot — do NOT render a 'Live · synced', 'Online', or any live/sync pill\"\n },\n \"page_header\": {\n \"page_emoji\": \"📊 (a single semantically relevant Notion-style emoji, not 🚀 / ✨ / 🔥)\",\n \"title\": \"{argument name=\\\"page title\\\" default=\\\"Team Dashboard\\\"} rendered at 40px weight 700, letter-spacing -0.01em\",\n \"meta_row\": \"Last edited by {argument name=\\\"editor name\\\" default=\\\"Sarah Chen\\\"} · Seeded sample data — for real refreshable / connector-backed runs use the live-artifact skill. Do NOT render a 'Last refreshed just now' label, an 'Auto' toggle, or a 'Refresh from Notion' button anywhere in this row.\"\n },\n \"callout\": \"💡 This is a prompt-only design preview. The numbers, names, and timestamps below are seeded sample data — they are not pulled from a real Notion workspace and not refreshed via the Composio connector. For real refreshable / connector-backed Live Artifacts, use the live-artifact skill.\",\n \"kpi_grid\": {\n \"count\": \"{argument name=\\\"kpi count\\\" default=\\\"4\\\"}\",\n \"items\": [\n {\n \"label\": \"Total tasks\",\n \"value\": \"143\",\n \"delta\": \"↑ 6 vs last week (green)\"\n },\n {\n \"label\": \"Done this week\",\n \"value\": \"24\",\n \"delta\": \"↑ 4 vs last week (green)\"\n },\n {\n \"label\": \"Active members\",\n \"value\": \"11 / 14\",\n \"delta\": \"· Stable (grey)\"\n },\n {\n \"label\": \"Docs awaiting review\",\n \"value\": \"7\",\n \"delta\": \"↓ 2 vs last week (red)\"\n }\n ],\n \"style\": \"1px hairline grid; no shadows; tabular-nums weight 600 numbers; small grey delta line under each KPI; uppercase 12px label-grey labels. All values are seeded sample data.\"\n },\n \"sparkline_card\": {\n \"title\": \"Tasks created · last 7 days (sample)\",\n \"total\": \"100 total (sample)\",\n \"shape\": \"hand-rolled SVG, 7 days Wed→Tue, 2px stroke accent blue, 10% alpha fill below the curve, very light dotted baseline grid\"\n },\n \"activity_feed_card\": {\n \"title\": \"Recent activity (sample)\",\n \"subtitle\": \"Notion-style seeded activity for design preview — not from a real Notion workspace\",\n \"rows\": \"5 rows shaped '<18px round colored avatar with 2-letter initials> ·