You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi maintainers — I worked through the open-design issue queue this week and landed 7 small, independent PRs. All sit on top of main, all touch disjoint files, so they can be reviewed and merged in any order without rebase work between them.
Grouped by review lane so different maintainers can pick whichever subset fits their scope:
feat(daemon): add CTA hierarchy static QA pass (refs #2251) #2427feat(daemon): add CTA hierarchy static QA pass — Refs Add Design QA checks for CTA hierarchy #2251. Pure analyseCtaHierarchy(html) function detecting multiple-primary / ambiguous-weight / misleading-prominence regressions in rendered prototypes (EN + 中文 CTA lexicon). HTTP/CLI/UI exposure is a single follow-up PR so AGENTS.md dual-track is satisfied in one shot rather than half-shipped.
CLI — UI/CLI dual-track
feat(cli): add od templates subcommand for user-saved templates #2428feat(cli): add od templates subcommand for user-saved templates — list / save / delete for user-saved project templates. AGENTS.md → "Capability exposure" explicitly calls this gap out (Web UI shipped via NewProjectPanel / ExamplesTab, HTTP shipped, CLI was missing).
Web — i18n
fix(web): localize plugin card actions for Chinese locale (#2079) #2424fix(web): localize plugin card actions for Chinese locale — Closes Plugins tab and page are not localized in Chinese #2079. Investigation found 13/14 strings the issue listed were already t()-wired; only the PluginCard action row (Details / Use / Use with query / Publish / Contribute and their aria-labels) was hard-coded. Adds 15 pluginCard.* keys with full zh-CN + zh-TW translations; other 16 locales flow through the existing ...en fallback.
Each PR ran pnpm guard, pnpm --filter @open-design/daemon typecheck, and either the relevant vitest file or the full daemon suite (2950+ tests). The one repeating flaky failure in tests/orbit.test.ts > tracks the most recent run per template alongside the global last run reproduces on main and passes 14/14 when the file is run in isolation, so I've called it out in each PR rather than blamed it on the change.
TDD shape for behavior changes: red spec first, then implementation; commit messages and PR bodies call out which red spec gates which change. The MCP PRs use vi.stubGlobal('fetch', …) per-baseUrl to dodge the 5-second projectListCache leak between cases; that pattern is documented inline in the test files.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Hi maintainers — I worked through the open-design issue queue this week and landed 7 small, independent PRs. All sit on top of
main, all touch disjoint files, so they can be reviewed and merged in any order without rebase work between them.Grouped by review lane so different maintainers can pick whichever subset fits their scope:
Daemon — agent surface (MCP)
feat(mcp): add create_project tool— Fixes Add MCP support for creating new Open Design projects #2356. Closes the loop so external coding agents can start a fresh Open Design project through MCP instead of asking the user to click "New project" in the desktop UI.feat(mcp): add write_file, delete_file, delete_project tools— companion to feat(mcp): add create_project tool (#2356) #2404; lets the same agent iterate on a file, remove a stale one, or tear down a throwaway project.delete_projectrequires an explicitprojectargument plusconfirm:true(no active-context fallback).Daemon — diagnostics / contracts
feat(daemon): structured diagnostics for agent connection test results— Refs Improve local agent connection test diagnostics #2248 (PR 1 of N). Adds an optionaldiagnosticsblock on the connection-test response (phase,binaryPath,exitCode, stderr/stdout tails). Existingkindanddetailstrings preserved bit-for-bit — additive only, no UI regression. Follow-ups: normalized failure classifier, candidate alternatives, Settings "View details" disclosure.Daemon — internal modules
feat(daemon): add CTA hierarchy static QA pass— Refs Add Design QA checks for CTA hierarchy #2251. PureanalyseCtaHierarchy(html)function detectingmultiple-primary/ambiguous-weight/misleading-prominenceregressions in rendered prototypes (EN + 中文 CTA lexicon). HTTP/CLI/UI exposure is a single follow-up PR so AGENTS.md dual-track is satisfied in one shot rather than half-shipped.CLI — UI/CLI dual-track
feat(cli): add od templates subcommand for user-saved templates—list/save/deletefor user-saved project templates. AGENTS.md → "Capability exposure" explicitly calls this gap out (Web UI shipped viaNewProjectPanel/ExamplesTab, HTTP shipped, CLI was missing).Web — i18n
fix(web): localize plugin card actions for Chinese locale— Closes Plugins tab and page are not localized in Chinese #2079. Investigation found 13/14 strings the issue listed were alreadyt()-wired; only thePluginCardaction row (Details / Use / Use with query / Publish / Contribute and their aria-labels) was hard-coded. Adds 15pluginCard.*keys with full zh-CN + zh-TW translations; other 16 locales flow through the existing...enfallback.Docs
docs(README): refresh stale skills and design-systems counts— Refs docs(README): skills/design-systems counts are stale (31/72 in docs, 64/139 actual on v0.4.1) #2186. English README counts (31 skills / 72 design systems, prototype 27 + deck 4) updated to the currentfind skills -name SKILL.mdreality (132 / 150, prototype 32 + deck 9 + image / video / audio / template / design-system / utility). Translation READMEs intentionally deferred to per-locale follow-up PRs as the issue reporter suggested.Review notes
pnpm guard,pnpm --filter @open-design/daemon typecheck, and either the relevantvitestfile or the full daemon suite (2950+ tests). The one repeating flaky failure intests/orbit.test.ts > tracks the most recent run per template alongside the global last runreproduces onmainand passes 14/14 when the file is run in isolation, so I've called it out in each PR rather than blamed it on the change.vi.stubGlobal('fetch', …)per-baseUrl to dodge the 5-secondprojectListCacheleak between cases; that pattern is documented inline in the test files.Co-authored-by:trailers per AGENTS.md.Happy to split, rebase, or rework any of these — just tag me on the individual PR and I'll iterate.
All reactions