@adia-ai/adia-ui-factory 0.8.55 → 0.8.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +3 -2
- package/.codex-plugin/plugin.json +1 -1
- package/.mcp.json +1 -1
- package/CHANGELOG.md +33 -0
- package/README.md +19 -3
- package/__init__.py +6 -1
- package/agents/surface-qa-agent.md +2 -1
- package/commands/app-audit.md +4 -2
- package/commands/app-migration.md +1 -1
- package/commands/app-planning.md +3 -2
- package/commands/find-unused.md +3 -3
- package/commands/gen-ui-wiring.md +1 -1
- package/commands/project-scaffolding.md +3 -2
- package/commands/surface-qa.md +1 -1
- package/commands/theme-audit.md +28 -0
- package/hermes-mcp.yaml +1 -1
- package/package.json +4 -1
- package/plugin.yaml +1 -1
- package/prompts/app-audit.md +4 -2
- package/prompts/app-migration.md +1 -1
- package/prompts/app-planning.md +3 -2
- package/prompts/find-unused.md +3 -3
- package/prompts/gen-ui-wiring.md +1 -1
- package/prompts/project-scaffolding.md +3 -2
- package/prompts/surface-qa.md +1 -1
- package/prompts/theme-audit.md +25 -0
- package/references/authoring-components.md +1 -1
- package/references/composed-surface-rubric.md +1 -1
- package/references/shell-admin.md +1 -1
- package/scripts/adia-lint.mjs +193 -0
- package/scripts/adia-probe.mjs +89 -13
- package/scripts/adia-theme-audit.mjs +1637 -0
- package/scripts/lint-rules.generated.mjs +1700 -0
- package/scripts/theme-audit-fixtures/expected.json +16 -0
- package/scripts/theme-audit-fixtures/fixture-app/index.html +15 -0
- package/scripts/theme-audit-fixtures/fixture-app/sitemap.json +6 -0
- package/scripts/theme-audit-fixtures/fixture-theme.css +99 -0
- package/skills/app-audit/references/gap-classes.md +1 -1
- package/skills/app-migration/SKILL.md +1 -1
- package/skills/app-planning/SKILL.md +5 -1
- package/skills/find-unused/SKILL.md +4 -2
- package/skills/find-unused/references/recon-and-audits.md +3 -3
- package/skills/pattern-catalog/references/annotations.yaml +28 -0
- package/skills/pattern-catalog/references/pattern-index.md +80 -65
- package/skills/project-scaffolding/SKILL.md +6 -6
- package/skills/screen-composition/SKILL.md +6 -4
- package/skills/screen-composition/assets/figma-make/guidelines/components.md +5 -7
- package/skills/shell-selection/SKILL.md +1 -1
- package/skills/surface-qa/SKILL.md +1 -1
- package/skills/surface-qa/references/ci-recipe.md +2 -2
- package/skills/surface-qa/references/verification.md +4 -1
- package/skills/table-composition/references/base-table.md +1 -1
- package/skills/theme-audit/SKILL.md +129 -0
- package/skills/theme-audit/agents/openai.yaml +3 -0
- package/skills/theme-audit/evals/evals.json +20 -0
- package/skills/theme-audit/evals/routing-corpus.json +162 -0
- package/skills/theme-audit/references/report-shape.md +84 -0
- package/skills/token-selection/references/a-alias-layer.md +18 -1
- package/hooks/hooks.json +0 -15
- package/scripts/adia-lint +0 -411
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adia-ui-kit-factory",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.57",
|
|
4
4
|
"description": "Author and verify apps built ON the adia-ui (@adia-ai) light-DOM web-component framework \u2014 orient, scaffold, compose, wire, verify, and migrate across SPA and SSR rendering modes. Wires the a2ui MCP for catalog retrieval, UI generation, and validation.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Kim",
|
|
@@ -15,5 +15,6 @@
|
|
|
15
15
|
"web-components",
|
|
16
16
|
"app-authoring",
|
|
17
17
|
"consumer"
|
|
18
|
-
]
|
|
18
|
+
],
|
|
19
|
+
"hooks": "./adapters/claude/hooks.json"
|
|
19
20
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adia-ui-kit-factory",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.57",
|
|
4
4
|
"description": "Author and verify apps built ON the adia-ui (@adia-ai) light-DOM web-component framework — orient, scaffold, compose, wire, verify, and migrate across SPA and SSR rendering modes. Wires the a2ui MCP for catalog retrieval, UI generation, and validation.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Kim",
|
package/.mcp.json
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog — adia-ui-kit-factory
|
|
2
2
|
|
|
3
|
+
## [0.8.57] — 2026-09-01
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
- **Plugin passes `author-cross-harness-plugins`'s cross-harness validator, modulo one documented, permanent, irreconcilable exception (gh#2668).** `${CLAUDE_PLUGIN_ROOT}`/`$ARGUMENTS`/the `` !`command` `` auto-injection syntax removed from shared `app-migration`, `theme-audit`, `screen-composition`, `project-scaffolding`, `app-planning`, `surface-qa`, and `find-unused` SKILL.md bodies, all eight `commands/*.md` bodies, and their linked reference docs (`surface-qa/references/verification.md`, `find-unused/references/recon-and-audits.md`) — portable `<plugin-root>` prose / "named in the current request" phrasing throughout; `screen-composition`/`app-planning`'s Claude-only auto-injected context block became an explicit "run this yourself" instruction, since Codex has no equivalent auto-injection surface. `hooks/hooks.json` moved to `adapters/claude/hooks.json` (unchanged, `${CLAUDE_PLUGIN_ROOT}`-based); new root `hooks.json` mirrors the same event/matcher/action signature with a monorepo-root-relative command path for Codex's convention-discovered hook surface — an unverified-but-honest fallback documented in `HARNESS-NOTES.md`. **The one exception:** every skill's `disable-model-invocation:`/`user-invocable:` frontmatter — required, explicitly, by this repo's own blocking `check:skills` gate (`plugin-estate-v2.md`'s species-pinning charter) — collides head-on with the validator's opposite requirement on the exact same file, and Codex is hard-pinned to read root `skills/` directly (no adapter escape). The repo's own charter is not weakened; `npm run check:cross-harness-plugins` (`scripts/verify/check-cross-harness-plugins.mjs`, wrapping the vendored `scripts/verify/vendor/validate_cross_harness.py`) treats only this one exact finding shape as accepted (logged as INFO) and still fails on every other portability class. Full reasoning in `HARNESS-NOTES.md`.
|
|
7
|
+
|
|
8
|
+
### Docs
|
|
9
|
+
- **`skills/pattern-catalog/references/pattern-index.md` regenerated for `page-scroll`'s addition (gh#2639, ADR-0098 Fork 4).** `build:patterns-index`'s re-extraction picked up `admin-dashboard.contents.html`/`admin-shell.contents.html`'s tag-list changes under the page-chrome consolidation (`admin-page*` → `page-ui[band]`, `admin-scroll` → `page-scroll`).
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- **`adia-lint` rewritten as a thin Node CLI (`adia-lint.mjs`) consuming a shared generated lint-rule bank, retiring the Python script (gh#2638, LLD-0016, ADR-0099).** The consumer-app structural checks (the forge-shared rules plus SSR-DOUBLE-ROUTER, SSR-TOPLEVEL-IMPORT, HARDCODED-OPEN, SHELL-NESTING, SHELL-RESIZE, LLM-KEY-IN-CLIENT, GENUI-UNVALIDATED, GENUI-DOC-CONFLICT) now live as individually-fixtured rule modules under `scripts/lint/rules/` in the repo root, built into `scripts/lint/generated/rule-bank.mjs` and vendored byte-identically into this plugin, `adia-ui-forge`, and the gen-ui MCP's factory vendor tree (`npm run build:lint-rules`, freshness gated by `npm run check:lint-rules-fresh`). `hooks/hooks.json`'s PostToolUse command changes from `python3 ".../adia-lint" --hook` to `node ".../adia-lint.mjs" --hook`; the CLI contract (including `-h`/`--help`), exit codes, and PostToolUse never-block invariant are unchanged. `npm run check:lint-rules-selftest` proves finding-parity against the retired script's own `selftest()` fixtures. The gen-ui MCP factory server's `lint` tool (`audit_structure`) now spawns the Node CLI directly instead of shelling through `python3`.
|
|
13
|
+
|
|
14
|
+
### Maintenance
|
|
15
|
+
- **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
|
|
16
|
+
- **`.codex-plugin/` touched in this release window** (1 file(s), e.g. `.codex-plugin/plugin.json`) — carried by the entries above.
|
|
17
|
+
- **`agents/` touched in this release window** (1 file(s), e.g. `agents/surface-qa-agent.md`) — carried by the entries above.
|
|
18
|
+
- **`prompts/` touched in this release window** (8 file(s), e.g. `prompts/app-audit.md`) — carried by the entries above.
|
|
19
|
+
|
|
20
|
+
## [0.8.56] — 2026-08-31
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
- **`theme-audit` skill, `/theme-audit` command, and `scripts/adia-theme-audit.mjs` runner (lld-0012 B1–B3, gh#2257).** Audits a consumer app's `theme.css` for the four redundancy classes (restated defaults, token re-derivations, dead selectors, hand-built components) across every sitemap route, with a Playwright class-1 toggle and route discovery (#2308, #2312, #2413). Fixtures under `scripts/theme-audit-fixtures/`; report shape in `skills/theme-audit/references/report-shape.md`; Codex/Pi/Hermes manifests derived (`skills/theme-audit/agents/openai.yaml`, `prompts/theme-audit.md`).
|
|
24
|
+
- **`HARNESS-NOTES.md`** pointer for non-Claude harnesses (gh#2449) — points at `AGENTS.md`/README rather than duplicating install prose.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
- **`scripts/adia-probe.mjs`** gains the route-discovery + class-1 toggle hooks the theme-audit runner drives (#2413); `agents/surface-qa-agent.md` cites the extended probe.
|
|
28
|
+
- **`skills/token-selection/references/a-alias-layer.md`** documents the 15 new `--a-*` aliases from tokens batch C0 and the advisory reroute gate (gh#2240, #2243).
|
|
29
|
+
- **`skills/pattern-catalog/references/{pattern-index.md,annotations.yaml}`** pick up the sidebar-modal pattern (#2226) and the registration/NPI-search and errors surfaces (#2242, #2270); `skills/table-composition/references/base-table.md` follows `table-toolbar-ui`'s count-cluster redesign (#2190); `skills/find-unused/SKILL.md` wording tightened.
|
|
30
|
+
|
|
31
|
+
### Maintenance
|
|
32
|
+
- **`.claude-plugin/plugin.json` version bump** — moves in lockstep with package.json (the `/plugin update` cache key).
|
|
33
|
+
- **`.codex-plugin/` touched in this release window** (1 file(s), e.g. `.codex-plugin/plugin.json`) — carried by the entries above.
|
|
34
|
+
- **`commands/` touched in this release window** (1 file(s), e.g. `commands/theme-audit.md`) — carried by the entries above.
|
|
35
|
+
|
|
3
36
|
## [0.8.55] — 2026-08-28
|
|
4
37
|
|
|
5
38
|
### Changed
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ posture (ADR-0040) is about this plugin working standalone in any consumer
|
|
|
51
51
|
repo once installed some other way (no monorepo path assumptions in its own
|
|
52
52
|
scripts) — it does not add an npm-sourced marketplace entry.
|
|
53
53
|
|
|
54
|
-
## Skills (
|
|
54
|
+
## Skills (20 — `skills/` on disk is the roster; `check:plugin-count-claims` guards this header count)
|
|
55
55
|
|
|
56
56
|
| Skill | Species | Job |
|
|
57
57
|
|---|---|---|
|
|
@@ -74,6 +74,7 @@ scripts) — it does not add an npm-sourced marketplace entry.
|
|
|
74
74
|
| `app-migration` | procedural | version upgrades + port-to-adia sweeps (breaking changes) |
|
|
75
75
|
| `find-unused` | procedural | what a *non*-breaking upgrade left unused — inert opt-in layers, stale workarounds |
|
|
76
76
|
| `surface-qa` | procedural | browser + a11y + composition exit gate |
|
|
77
|
+
| `theme-audit` | procedural | classify a consumer theme.css against the framework's own defaults/tokens/primitives — restated defaults, re-derived tokens, dead selectors, hand-built component work; audit + report only, no rewrites (gh#2257) |
|
|
77
78
|
|
|
78
79
|
## Agents (4)
|
|
79
80
|
|
|
@@ -97,11 +98,20 @@ surface-qa-agent) · `component-model.md` · the `references/contracts/` twins.
|
|
|
97
98
|
|
|
98
99
|
## Commands
|
|
99
100
|
|
|
100
|
-
`/project-scaffolding` · `/app-planning` · `/surface-qa` · `/app-migration` · `/find-unused` · `/gen-ui-wiring` · `/app-audit`
|
|
101
|
+
`/project-scaffolding` · `/app-planning` · `/surface-qa` · `/app-migration` · `/find-unused` · `/gen-ui-wiring` · `/app-audit` · `/theme-audit`
|
|
102
|
+
|
|
103
|
+
## Scripts
|
|
104
|
+
|
|
105
|
+
Consumer-runnable checks shipped as plain Node scripts under `scripts/`, no
|
|
106
|
+
MCP server required: `adia-probe.mjs` (the browser-QA gate; see
|
|
107
|
+
`surface-qa`), `adia-preflight.mjs` (every CI-step prerequisite, each
|
|
108
|
+
failure named with its remedy), `adia-contract-check.mjs` (authored markup
|
|
109
|
+
attributes vs. the shipped component contracts), and `adia-theme-audit.mjs`
|
|
110
|
+
(the theme.css redundancy classifier; see `theme-audit`).
|
|
101
111
|
|
|
102
112
|
## MCP
|
|
103
113
|
|
|
104
|
-
`adia-gen-ui` server pinned: `@adia-ai/mcp@0.8.
|
|
114
|
+
`adia-gen-ui` server pinned: `@adia-ai/mcp@0.8.57` (tool SoT:
|
|
105
115
|
`packages/gen-ui/mcp/TOOLS.md` — the `gen-ui` section; stability rule in
|
|
106
116
|
`references/contracts/`; pin lives in `.mcp.json` — `check:plugin-count-claims`
|
|
107
117
|
guards this README copy against it). The server is `adia-mcp gen-ui`,
|
|
@@ -120,6 +130,12 @@ plug-and-play install** — read this section before promising Pi/Hermes
|
|
|
120
130
|
support for this plugin specifically, since its whole value proposition is
|
|
121
131
|
wiring the `adia-gen-ui` MCP server.
|
|
122
132
|
|
|
133
|
+
`theme-audit`'s `adia-theme-audit` bin runs identically on every harness — a
|
|
134
|
+
plain Node script with no Claude-specific runtime dependency; the
|
|
135
|
+
`/theme-audit` command degrades to invoking the skill directly on Codex and
|
|
136
|
+
Hermes, and becomes a genuine `prompts/theme-audit.md` Pi command via
|
|
137
|
+
`build:harness-manifests`.
|
|
138
|
+
|
|
123
139
|
- **Codex** (gh#1888): `.codex-plugin/plugin.json` + per-skill
|
|
124
140
|
`agents/openai.yaml`, derived; `mcpServers` points at the same
|
|
125
141
|
`.mcp.json` Claude Code uses. No manifest key for hooks/commands/agents —
|
package/__init__.py
CHANGED
|
@@ -263,7 +263,7 @@ def register(ctx):
|
|
|
263
263
|
ctx.register_skill(
|
|
264
264
|
name="find-unused",
|
|
265
265
|
path=Path(os.path.join(_HERE, "skills", "find-unused", "SKILL.md")),
|
|
266
|
-
description="Finds what a non-breaking @adia-ai upgrade shipped that this app never picked up — the opt-in layers nothing imports, the local workarounds a fixed bug made redundant, retired enum values still sitting in stored state, and the fixes that never reached MIGRATION.md. Use after \"we bumped and nothing broke\", \"what are we missing from 0.8.x\", \"are we actually using what we ship\", \"why is [scale]/[theme] doing nothing\", or when a PATCH span needs adoption rather than repair. NOT for breaking-change repair (app-migration); NOT for a first-time install (adia-scaffold); NOT for diagnosing a broken surface (app-audit).",
|
|
266
|
+
description="Finds what a non-breaking @adia-ai upgrade shipped that this app never picked up — the opt-in layers nothing imports, the local workarounds a fixed bug made redundant, retired enum values still sitting in stored state, and the fixes that never reached MIGRATION.md. Use after \"we bumped and nothing broke\", \"what are we missing from 0.8.x\", \"are we actually using what we ship\", \"why is [scale]/[theme] doing nothing\", or when a PATCH span needs adoption rather than repair. NOT for breaking-change repair (app-migration); NOT for a first-time install (adia-scaffold); NOT for diagnosing a broken surface (app-audit); NOT for CSS-only redundancy in a theme file (theme-audit — the CSS-side sibling).",
|
|
267
267
|
)
|
|
268
268
|
ctx.register_skill(
|
|
269
269
|
name="gen-ui-wiring",
|
|
@@ -310,6 +310,11 @@ def register(ctx):
|
|
|
310
310
|
path=Path(os.path.join(_HERE, "skills", "table-composition", "SKILL.md")),
|
|
311
311
|
description="Answers how to display/organize tabular data with table-ui: contained vs uncontained chrome, [raw] (consumer-owned body, a separate axis), opt-in striped rows, and resize/sort defaults that flip between JS .columns and declarative col-def forms, plus inline-edit-grid and tree/hierarchical-row patterns. Use for \"how do I show a table\", \"add sorting/filtering\", \"make this table striped\", \"columns aren't resizable\", \"card vs bare table\", \"editable/spreadsheet grid\", \"tree table / nested rows\", \"huge list of rows\". NOT for composing the surrounding screen (screen-composition), data wiring (data-wiring), OTHER non-table patterns (pattern-catalog), or 1000+-row virtualized lists (list-window-ui).",
|
|
312
312
|
)
|
|
313
|
+
ctx.register_skill(
|
|
314
|
+
name="theme-audit",
|
|
315
|
+
path=Path(os.path.join(_HERE, "skills", "theme-audit", "SKILL.md")),
|
|
316
|
+
description="Classifies a consumer app's theme.css against what the adia-ui framework already ships — restated defaults, re-derived tokens, dead selectors, and hand-built component work. Runs `adia-theme-audit` against a theme file + app root; audits and reports, never rewrites. Use when a theme.css is suspected of restating the kit, after bumping `@adia-ai/web-components`, or before a `find-unused` sweep. NOT for rendering/grading a surface (surface-qa); NOT for picking a token going forward (token-selection); NOT for JS/markup an upgrade left unused (find-unused — the CSS-side sibling); NOT for the framework's OWN token layer in packages/web-components (forge's component-token-audit).",
|
|
317
|
+
)
|
|
313
318
|
ctx.register_skill(
|
|
314
319
|
name="token-selection",
|
|
315
320
|
path=Path(os.path.join(_HERE, "skills", "token-selection", "SKILL.md")),
|
|
@@ -9,6 +9,7 @@ description: |
|
|
|
9
9
|
tools: Read, Grep, Glob, Bash
|
|
10
10
|
skills:
|
|
11
11
|
- surface-qa
|
|
12
|
+
- theme-audit
|
|
12
13
|
# Explicit pin (gh#618, tier corrected gh#1045): a review/critic seat's
|
|
13
14
|
# verdict must not depend on the caller's model tier — never `inherit`.
|
|
14
15
|
# Operator's explicit standing instruction for this seat family: sonnet + xhigh.
|
|
@@ -38,7 +39,7 @@ a surface can pass the browser gate and still be a keyword-driven premature
|
|
|
38
39
|
render (D1) that never traced to a resolved plan. Every claim in the
|
|
39
40
|
proof cites its evidence (the probe JSON, the screenshot path, the element
|
|
40
41
|
inspected). The structure row's evidence comes from running
|
|
41
|
-
`
|
|
42
|
+
`node "${CLAUDE_PLUGIN_ROOT}/scripts/adia-lint.mjs"` over the surface's files via
|
|
42
43
|
Bash — the PostToolUse hook never fires for a seat that writes nothing. A
|
|
43
44
|
gate that cannot run (no dev server, Playwright missing) is reported
|
|
44
45
|
UNMEASURED with the reason, never silently skipped; a dispatch without a
|
package/commands/app-audit.md
CHANGED
|
@@ -6,9 +6,11 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Probe the project context.
|
|
9
|
+
Probe the project context named in the current request (a directory, if given).
|
|
10
10
|
|
|
11
|
-
Run `python3 "
|
|
11
|
+
Run `python3 "<plugin-root>/scripts/adia-info" [dir]` (`<plugin-root>` is `$CLAUDE_PLUGIN_ROOT`
|
|
12
|
+
in Claude Code; the plugin's installed directory in Codex) with the directory named in the
|
|
13
|
+
current request, and present
|
|
12
14
|
the JSON as a short read: each field with the signal it derived from and
|
|
13
15
|
the decision it drives (screen-composition §Current project context carries the
|
|
14
16
|
field→decision table). An `installedVersion` that is null or mismatched vs
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Migrate this codebase.
|
|
9
|
+
Migrate this codebase to the target version named in the current request.
|
|
10
10
|
|
|
11
11
|
Invoke **`app-migration`**: read the shipped guide for the span
|
|
12
12
|
(`node_modules/@adia-ai/web-components/MIGRATION.md` — install/upgrade the
|
package/commands/app-planning.md
CHANGED
|
@@ -6,10 +6,11 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Orient in this repo.
|
|
9
|
+
Orient in this repo, answering the path or question named in the current request.
|
|
10
10
|
|
|
11
11
|
Invoke **`app-planning`** and produce the Orientation Record in the skill's
|
|
12
12
|
own contract shape (Rendering mode · Project shape · Shell · Task ·
|
|
13
13
|
Screen plan (start mode) · → Route · Verify target · Open questions), each
|
|
14
14
|
axis citing its signal. Self-check the record with
|
|
15
|
-
`python3 "
|
|
15
|
+
`python3 "<plugin-root>/scripts/record-lint" -` (`<plugin-root>` is `$CLAUDE_PLUGIN_ROOT` in
|
|
16
|
+
Claude Code; the plugin's installed directory in Codex) before returning it.
|
package/commands/find-unused.md
CHANGED
|
@@ -6,12 +6,12 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Find what this app is not using.
|
|
9
|
+
Find what this app is not using, scoped to the target version named in the current request.
|
|
10
10
|
|
|
11
11
|
Invoke **`find-unused`**: enumerate every `@adia-ai/*` package each manifest
|
|
12
12
|
declares (never assume `web-components`), recon the three versions that differ
|
|
13
|
-
per package — declared range, installed, and the target: **the version in
|
|
14
|
-
|
|
13
|
+
per package — declared range, installed, and the target: **the version named in the current request
|
|
14
|
+
when one was given, registry latest only as the default**. Read
|
|
15
15
|
every `node_modules/@adia-ai/*/CHANGELOG.md` section across the
|
|
16
16
|
installed→target span, then run all four audits — inert opt-in layers, redundant local
|
|
17
17
|
workarounds, retired enum values sitting in persisted state, and shipped
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Build
|
|
9
|
+
Build the gen-UI experience or surface named in the current request.
|
|
10
10
|
|
|
11
11
|
Invoke **`gen-ui-wiring`** and run its generate → validate → render → iterate
|
|
12
12
|
loop; generated A2UI is validated as data before it is serialized, and the
|
|
@@ -6,10 +6,11 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Scaffold
|
|
9
|
+
Scaffold the adia-ui surface named in the current request.
|
|
10
10
|
|
|
11
11
|
Invoke **`project-scaffolding`** to classify the project shape and target, then use
|
|
12
|
-
|
|
12
|
+
`<plugin-root>/scripts/adia-scaffold` (`<plugin-root>` is `$CLAUDE_PLUGIN_ROOT` in Claude
|
|
13
|
+
Code; the plugin's installed directory in Codex) for the mechanical skeleton. Shapes
|
|
13
14
|
the bin doesn't one-shot (rollup, shared-foundation) are composed per the
|
|
14
15
|
project-shapes reference. `inventory <app-root>` scores an existing app
|
|
15
16
|
against the structure rubric (4 mechanized gates with cited paths + the 2
|
package/commands/surface-qa.md
CHANGED
|
@@ -6,7 +6,7 @@ disable-model-invocation: false
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
Verify
|
|
9
|
+
Verify the composed surface named in the current request.
|
|
10
10
|
|
|
11
11
|
Dispatch the **surface-qa-agent** agent on the named surface/URL — the exit
|
|
12
12
|
gate runs ISOLATED from whatever context built the surface (generator ≠
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
wraps: theme-audit
|
|
3
|
+
description: Classify a consumer app's theme.css against what the adia-ui framework already ships — restated defaults, re-derived tokens, dead selectors, hand-built component work. Audit and report only; no rewrites.
|
|
4
|
+
argument-hint: "[--theme <file>] [--app <root>]"
|
|
5
|
+
disable-model-invocation: false
|
|
6
|
+
user-invocable: true
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Audit the theme stylesheet named in the current request.
|
|
10
|
+
|
|
11
|
+
Run `node "<plugin-root>/scripts/adia-theme-audit.mjs" --theme <file>
|
|
12
|
+
--app <root>` (add `--json`/`--json-out <path>` for a structured report,
|
|
13
|
+
`--strict` to exit non-zero on any `high`-confidence finding, `--class
|
|
14
|
+
1,2,3,4` to narrow scope). No `@adia-ai/web-components` resolvable from
|
|
15
|
+
`<app>` → the tool reports `E_NO_FRAMEWORK` with the install remedy; pass
|
|
16
|
+
`--framework-root <checkout>` to audit against an unreleased framework
|
|
17
|
+
checkout instead. No `--base-url`/Playwright unreachable → class 3's
|
|
18
|
+
rendered census degrades to `UNMEASURED` and the run still exits `0`
|
|
19
|
+
(unless `--strict`); static `last-wins` detection still runs.
|
|
20
|
+
|
|
21
|
+
Return the human-readable summary and per-class tables (theme-audit
|
|
22
|
+
§Reading the report). Findings route back to the owning skill — a
|
|
23
|
+
restated default or re-derived token deletes from the theme file directly;
|
|
24
|
+
a hand-built-component finding routes to `screen-composition` to swap in
|
|
25
|
+
the primitive; a dead selector still needs a human's confirmation before
|
|
26
|
+
removal (the census may not have covered every interaction state). Never
|
|
27
|
+
apply a fix inline from this command — theme-audit and its runner never
|
|
28
|
+
rewrite the file, and neither does this wrapper.
|
package/hermes-mcp.yaml
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adia-ai/adia-ui-factory",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.57",
|
|
4
4
|
"description": "Author and verify apps built ON the adia-ui (@adia-ai) light-DOM web-component framework — orient, scaffold, compose, wire, verify, and migrate across SPA and SSR rendering modes. Wires the a2ui MCP for catalog retrieval, UI generation, and validation.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"adia-ui",
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"bugs": {
|
|
20
20
|
"email": "kim.granlund@adia.ai"
|
|
21
21
|
},
|
|
22
|
+
"bin": {
|
|
23
|
+
"adia-theme-audit": "./scripts/adia-theme-audit.mjs"
|
|
24
|
+
},
|
|
22
25
|
"pi": {
|
|
23
26
|
"skills": ["./skills"],
|
|
24
27
|
"prompts": ["./prompts"],
|
package/plugin.yaml
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
name: "adia-ui-kit-factory"
|
|
2
|
-
version: "0.8.
|
|
2
|
+
version: "0.8.57"
|
|
3
3
|
description: "Author and verify apps built ON the adia-ui (@adia-ai) light-DOM web-component framework — orient, scaffold, compose, wire, verify, and migrate across SPA and SSR rendering modes. Wires the a2ui MCP for catalog retrieval, UI generation, and validation."
|
|
4
4
|
manifest_version: 1
|
package/prompts/app-audit.md
CHANGED
|
@@ -3,9 +3,11 @@ description: "Probe this repo's adia-ui project context — declared vs installe
|
|
|
3
3
|
argument-hint: "[dir]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Probe the project context.
|
|
6
|
+
Probe the project context named in the current request (a directory, if given).
|
|
7
7
|
|
|
8
|
-
Run `python3 "
|
|
8
|
+
Run `python3 "<plugin-root>/scripts/adia-info" [dir]` (`<plugin-root>` is `$CLAUDE_PLUGIN_ROOT`
|
|
9
|
+
in Claude Code; the plugin's installed directory in Codex) with the directory named in the
|
|
10
|
+
current request, and present
|
|
9
11
|
the JSON as a short read: each field with the signal it derived from and
|
|
10
12
|
the decision it drives (screen-composition §Current project context carries the
|
|
11
13
|
field→decision table). An `installedVersion` that is null or mismatched vs
|
package/prompts/app-migration.md
CHANGED
|
@@ -3,7 +3,7 @@ description: "Migrate consumer code across @adia-ai versions (or port a foreign
|
|
|
3
3
|
argument-hint: "[target version]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Migrate this codebase.
|
|
6
|
+
Migrate this codebase to the target version named in the current request.
|
|
7
7
|
|
|
8
8
|
Invoke **`app-migration`**: read the shipped guide for the span
|
|
9
9
|
(`node_modules/@adia-ai/web-components/MIGRATION.md` — install/upgrade the
|
package/prompts/app-planning.md
CHANGED
|
@@ -3,10 +3,11 @@ description: "Orient in an existing adia-ui app — classify rendering mode, pro
|
|
|
3
3
|
argument-hint: "[path or question]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Orient in this repo.
|
|
6
|
+
Orient in this repo, answering the path or question named in the current request.
|
|
7
7
|
|
|
8
8
|
Invoke **`app-planning`** and produce the Orientation Record in the skill's
|
|
9
9
|
own contract shape (Rendering mode · Project shape · Shell · Task ·
|
|
10
10
|
Screen plan (start mode) · → Route · Verify target · Open questions), each
|
|
11
11
|
axis citing its signal. Self-check the record with
|
|
12
|
-
`python3 "
|
|
12
|
+
`python3 "<plugin-root>/scripts/record-lint" -` (`<plugin-root>` is `$CLAUDE_PLUGIN_ROOT` in
|
|
13
|
+
Claude Code; the plugin's installed directory in Codex) before returning it.
|
package/prompts/find-unused.md
CHANGED
|
@@ -3,12 +3,12 @@ description: "Find what a clean @adia-ai upgrade left unused — opt-in layers n
|
|
|
3
3
|
argument-hint: "[target version]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Find what this app is not using.
|
|
6
|
+
Find what this app is not using, scoped to the target version named in the current request.
|
|
7
7
|
|
|
8
8
|
Invoke **`find-unused`**: enumerate every `@adia-ai/*` package each manifest
|
|
9
9
|
declares (never assume `web-components`), recon the three versions that differ
|
|
10
|
-
per package — declared range, installed, and the target: **the version in
|
|
11
|
-
|
|
10
|
+
per package — declared range, installed, and the target: **the version named in the current request
|
|
11
|
+
when one was given, registry latest only as the default**. Read
|
|
12
12
|
every `node_modules/@adia-ai/*/CHANGELOG.md` section across the
|
|
13
13
|
installed→target span, then run all four audits — inert opt-in layers, redundant local
|
|
14
14
|
workarounds, retired enum values sitting in persisted state, and shipped
|
package/prompts/gen-ui-wiring.md
CHANGED
|
@@ -3,7 +3,7 @@ description: "Author a generative-UI experience — wire the a2ui runtime, gener
|
|
|
3
3
|
argument-hint: "[experience or surface]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Build
|
|
6
|
+
Build the gen-UI experience or surface named in the current request.
|
|
7
7
|
|
|
8
8
|
Invoke **`gen-ui-wiring`** and run its generate → validate → render → iterate
|
|
9
9
|
loop; generated A2UI is validated as data before it is serialized, and the
|
|
@@ -3,10 +3,11 @@ description: "Scaffold a new adia-ui app, page, or component skeleton (scripts/a
|
|
|
3
3
|
argument-hint: "[spa|ssr|page|component|inventory|selftest] [name or app-root]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Scaffold
|
|
6
|
+
Scaffold the adia-ui surface named in the current request.
|
|
7
7
|
|
|
8
8
|
Invoke **`project-scaffolding`** to classify the project shape and target, then use
|
|
9
|
-
|
|
9
|
+
`<plugin-root>/scripts/adia-scaffold` (`<plugin-root>` is `$CLAUDE_PLUGIN_ROOT` in Claude
|
|
10
|
+
Code; the plugin's installed directory in Codex) for the mechanical skeleton. Shapes
|
|
10
11
|
the bin doesn't one-shot (rollup, shared-foundation) are composed per the
|
|
11
12
|
project-shapes reference. `inventory <app-root>` scores an existing app
|
|
12
13
|
against the structure rubric (4 mechanized gates with cited paths + the 2
|
package/prompts/surface-qa.md
CHANGED
|
@@ -3,7 +3,7 @@ description: "Run the consumer-side exit gate on a composed surface — dispatch
|
|
|
3
3
|
argument-hint: "[url or surface] [key selectors]"
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Verify
|
|
6
|
+
Verify the composed surface named in the current request.
|
|
7
7
|
|
|
8
8
|
Dispatch the **surface-qa-agent** agent on the named surface/URL — the exit
|
|
9
9
|
gate runs ISOLATED from whatever context built the surface (generator ≠
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Classify a consumer app's theme.css against what the adia-ui framework already ships — restated defaults, re-derived tokens, dead selectors, hand-built component work. Audit and report only; no rewrites."
|
|
3
|
+
argument-hint: "[--theme <file>] [--app <root>]"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Audit the theme stylesheet named in the current request.
|
|
7
|
+
|
|
8
|
+
Run `node "<plugin-root>/scripts/adia-theme-audit.mjs" --theme <file>
|
|
9
|
+
--app <root>` (add `--json`/`--json-out <path>` for a structured report,
|
|
10
|
+
`--strict` to exit non-zero on any `high`-confidence finding, `--class
|
|
11
|
+
1,2,3,4` to narrow scope). No `@adia-ai/web-components` resolvable from
|
|
12
|
+
`<app>` → the tool reports `E_NO_FRAMEWORK` with the install remedy; pass
|
|
13
|
+
`--framework-root <checkout>` to audit against an unreleased framework
|
|
14
|
+
checkout instead. No `--base-url`/Playwright unreachable → class 3's
|
|
15
|
+
rendered census degrades to `UNMEASURED` and the run still exits `0`
|
|
16
|
+
(unless `--strict`); static `last-wins` detection still runs.
|
|
17
|
+
|
|
18
|
+
Return the human-readable summary and per-class tables (theme-audit
|
|
19
|
+
§Reading the report). Findings route back to the owning skill — a
|
|
20
|
+
restated default or re-derived token deletes from the theme file directly;
|
|
21
|
+
a hand-built-component finding routes to `screen-composition` to swap in
|
|
22
|
+
the primitive; a dead selector still needs a human's confirmation before
|
|
23
|
+
removal (the census may not have covered every interaction state). Never
|
|
24
|
+
apply a fix inline from this command — theme-audit and its runner never
|
|
25
|
+
rewrite the file, and neither does this wrapper.
|
|
@@ -109,4 +109,4 @@ The mechanizable smells the framework audits — these seed the phase-(c) hook a
|
|
|
109
109
|
| Hardcoded `open` on `<modal-ui>`/`<drawer-ui>` | drive via `.open = true` |
|
|
110
110
|
| `new URL('…', import.meta.url)` literal for a corpus path | hold the path in a variable first |
|
|
111
111
|
|
|
112
|
-
Run the plugin's `scripts/adia-lint` on changed files, the framework's `audit:*` gates when you have the repo, and `mcp__a2ui__check_anti_patterns` / `validate_schema` on generated markup.
|
|
112
|
+
Run the plugin's `scripts/adia-lint.mjs` on changed files, the framework's `audit:*` gates when you have the repo, and `mcp__a2ui__check_anti_patterns` / `validate_schema` on generated markup.
|
|
@@ -72,5 +72,5 @@ Verdict: <shippable | blocked: D#…>
|
|
|
72
72
|
|
|
73
73
|
_Provenance: the two-axis COMPOSE/REALIZE defect-quadrant model is adapted from a component-grading
|
|
74
74
|
rubric; the audit tool names and slot contracts here are the factory plugin's own (`adia-lint`,
|
|
75
|
-
`adia-probe`, the current primitive catalog). Verify a named audit rule against `scripts/adia-lint`'s
|
|
75
|
+
`adia-probe`, the current primitive catalog). Verify a named audit rule against `scripts/adia-lint.mjs`'s
|
|
76
76
|
actual rule set before citing it._
|
|
@@ -89,7 +89,7 @@ SPA mounts the full markup. SSR keeps the shell + chrome fixed and swaps only th
|
|
|
89
89
|
|
|
90
90
|
- **Piecemeal import** → `AdminSidebar`/`AdminCommand` unregistered; `.toggle()/.show()` undefined. Import the barrel.
|
|
91
91
|
- **Wrapping shell children in `<col-ui>`/`<row-ui>`** → breaks the grid (it reads tag selectors). Generics go _inside_ `admin-content`/`admin-page-body`.
|
|
92
|
-
- **Raw `<header>` vs `<header-ui>` inside `<admin-page-header>`**:
|
|
92
|
+
- **Raw `<header>` vs `<header-ui>` inside `<admin-page-header>`**: always use `<header-ui>`. The shell CSS targets `admin-page-header > :is(header, header-ui)` identically for geometry (css/admin-shell.templates.css:39), but only `<header-ui>` has the shadow DOM that routes `slot="heading"` / `slot="description"` / `slot="icon"` / `slot="action"` children — a raw `<header>` matches the CSS rhythm but silently drops every named slot.
|
|
93
93
|
- **`[resizable]` without a child `<div data-sidebar-resize>`** → no drag handle.
|
|
94
94
|
- **Hardcoded `[collapsed]`** → won't auto-clear on resize; use `.collapse()/.expand()`.
|
|
95
95
|
- **Multiple `<admin-page>` in one `<admin-scroll>`** → single-axis scroll breaks; one page per scroll.
|