Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/bright-lions-create.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": patch
---

Add `oz-ui create` for scaffolding Vite + React + TypeScript OpenZeppelin UI apps with preset layouts, EVM wallet wiring, and agent-friendly JSON output.
5 changes: 5 additions & 0 deletions .changeset/keen-foxes-scaffold-skill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": minor
---

Add `oz-ui create init` for installing the `scaffold-dapp` AI skill into a workspace, mirroring the assistant-asset bootstrap that `oz-ui migrate init` provides for the migrate flow. The new subcommand copies `templates/skills/scaffold-dapp/SKILL.md` into the selected agent profile destinations (`.agents/skills/scaffold-dapp`, `.claude/skills/scaffold-dapp`, `.cursor/skills/scaffold-dapp`) and records the selection in `.oz-ui-create.json` for follow-up runs. Like the migrate flow, the JSON envelope (`action: "create-init"`) carries `schemaVersion` and `cli` metadata. Internal: `agent-assets/profiles.ts` was refactored so its `skillDirectoriesForProfiles` and `expectedSkillPathsForProfiles` helpers take a `skillId` argument, letting the same registry serve both `migrate-to-oz-uikit` and `scaffold-dapp` without per-skill duplication.
5 changes: 5 additions & 0 deletions .changeset/large-pugs-rewrite.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": patch
---

Migrate the deterministic component rewriter (`oz-ui migrate execute`) from regex/brace-counting to an AST-based implementation built on the TypeScript compiler. Import swaps, JSX tag renames, prop renames, and the radix namespace-member transforms (unwrap / omit / close-as-child / rename) now operate on the parsed syntax tree and edit via offset splices, so they no longer corrupt files with aliased or multiline imports, JSX attribute values containing `>` or parentheses, or tags whose names are prefixes of one another. The rewriter is also now a no-op when no legacy import references the source component, instead of injecting an unused OpenZeppelin import.
5 changes: 5 additions & 0 deletions .changeset/quiet-foxes-add-wallet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": minor
---

Add `oz-ui add wallet` — installs OpenZeppelin UI wallet wiring (providers, runtime adapter, app config, optional RainbowKit kit config) into an existing project, patches the entry file to wrap the render tree with `<OzProviders>`, and installs required dependencies. Idempotent on re-run; supports `--ecosystem`, `--kit`, `--skip-install`, `--force`, and `--json`.
5 changes: 5 additions & 0 deletions .changeset/quiet-jaguars-envelope.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": patch
---

Add a stable JSON output envelope to every `oz-ui --json` payload (success and error). Each payload now ships with `schemaVersion` and `cli: { name, version }` so agent consumers (e.g. the `scaffold-dapp` and `migrate-to-oz-uikit` skills) can detect contract drift the same way they do for `migration-manifest.json`. Existing payload fields are unchanged. Internally, `oz-ui create`'s template generator was split from a single 650-line module into a `templates/` directory (per-layout modules, shared helpers, embedded asset) so new layouts and contents can be added without churning a mega-file.
5 changes: 5 additions & 0 deletions .changeset/sharp-otters-rewire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": patch
---

Harden React entry-file patching with an AST-based transformer shared by `oz-ui add wallet` and `oz-ui migrate init`. The previous regex/brace-counting approach could corrupt entry files containing parentheses inside JSX strings, legacy `ReactDOM.render`, sync/arrow `bootstrap` functions, or `createRoot` stored in a variable. The new transformer parses the source with the TypeScript compiler, wraps only the JSX render argument (preserving any container argument), injects config initialization into an existing bootstrap (or creates one) without duplicating declarations, and bails safely without writing on unsupported shapes. `oz-ui add wallet` now reports an `entryFilePatchReason` and emits manual-wiring next steps when the entry file cannot be patched automatically.
5 changes: 5 additions & 0 deletions .changeset/wise-melons-import-scan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openzeppelin/ui-cli": patch
---

Consolidate migration import detection onto a single AST-based extractor shared by the component matcher and the pattern scanner. The pattern scanner previously parsed imports with regexes, which could match `import` text inside comments or strings (false positives) and maintained a second import-parsing implementation. Both analyzers now use the TypeScript compiler, so `oz-ui migrate analyze` and `doctor` detect static, side-effect, re-export (`export … from`), and dynamic (`import()`) module references consistently and no longer flag commented-out or quoted import text.
10 changes: 10 additions & 0 deletions .changeset/witty-pandas-button-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'@openzeppelin/ui-cli': patch
---

Fix a false-positive in the component-replacement verifier where a legitimately
remaining intrinsic tag (e.g. a `<button>` produced by a Radix `asChild`
conversion) was reported as an unmigrated component. The raw-HTML check is now
AST-based and only fails when the OZ target component is not adopted in the file,
so it ignores `<button>` occurrences inside comments/strings and no longer
confuses sibling tags like `<ButtonGroup>` with `<Button>`.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,8 @@ This project uses [GitHub Speckit](https://github.com/github/spec-kit) for spec-

- [Migration Guide](./docs/MIGRATION.md) - Migrate from `@openzeppelin/ui-builder-`* packages
- [LLM-led migration reference](./packages/cli/docs/LLM_MIGRATION_REFERENCE.md) - AI-assisted workflow for `@openzeppelin/ui-cli` (optional)
- [CLI create matrix](./packages/cli/docs/CREATE_MATRIX.md) - Presets, options, features, generated files, and supported combinations for `oz-ui create`
- [CLI create recipes](./packages/cli/docs/CREATE_RECIPES.md) - Architecture for `oz-ui create` presets, layouts, and feature combinations
- [DevOps Setup Guide](./docs/DEVOPS_SETUP.md) - CI/CD secrets and GitHub App configuration
- [Operations Runbook](./docs/RUNBOOK.md) - Release management and incident procedures

Expand Down
Loading
Loading