@vantageos/mosaic 0.3.0 → 0.3.1

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.
Files changed (2) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/package.json +231 -230
package/CHANGELOG.md CHANGED
@@ -28,6 +28,36 @@ Versioning follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
28
28
 
29
29
  ---
30
30
 
31
+ ## [0.3.1] — 2026-06-13 — hotfix: workspace:* leak in published 0.3.0 manifest (Path B — root-cause fix)
32
+
33
+ ### Fixed
34
+ - **External npm install of `@vantageos/mosaic@0.3.0` was broken**: the published manifest carried `"@vantageos/mosaic-tokens": "workspace:*"` as a runtime dependency. The `workspace:*` protocol is a bun/pnpm/yarn monorepo specifier that the npm registry cannot resolve to a real version, so any external `npm install @vantageos/mosaic` failed with `ETARGET No matching version found for @vantageos/mosaic-tokens@workspace:*`. Gamma flag via Pi msg `jn77k1v2414far8z5b7abxgjqn88jq9b`. Task `k1769bhq5f7z56yyfs143jsw5588k7j6` (mission `k57b6d1bzc318pc4gqmhe4tapx88jqbd`).
35
+
36
+ ### Path B — root-cause fix (Gamma defect-owner recommendation, msg `jn7fjf62mnzrwfhe2p9vfwymxn88ks67`)
37
+
38
+ The first iteration of this PR rewrote `packages/mosaic/package.json` source from `workspace:*` → `^0.2.0`, but this approach:
39
+ - broke CI (`ERR_PNPM_OUTDATED_LOCKFILE` — pnpm frozen-lockfile no longer matched the manifest), AND
40
+ - severed the monorepo workspace link (sibling `mosaic-tokens` would resolve from npm, not the local package), AND
41
+ - re-leaks on every future release unless the spec is permanently pinned (which breaks dev linking).
42
+
43
+ Path B keeps the source `workspace:*` reference (lockfile stays valid → CI green) and **rewrites at publish-time only**:
44
+
45
+ - **NEW** `packages/mosaic/scripts/rewrite-workspace-deps.mjs` — Node stdlib-only script. Walks `dependencies` / `peerDependencies` / `devDependencies` / `optionalDependencies`; for every `workspace:*` (or `workspace:^` / `workspace:~`) ref, reads the sibling package's `package.json` `version` field from `packages/<bare-name>/package.json` and rewrites the spec to `^<version>`. Mutates `packages/mosaic/package.json` in place for the duration of the publish step.
46
+ - **MODIFIED** `prepublishOnly` script now runs the rewrite FIRST: `node scripts/rewrite-workspace-deps.mjs && pnpm run build && pnpm run test && pnpm run size-limit && node scripts/check-eta-gate.js`.
47
+ - **NEW** `postpublish` script reverts the mutation via `git checkout HEAD -- package.json`, leaving the source repo in its workspace-linked state for monorepo dev.
48
+
49
+ This preserves monorepo dev (`workspace:*` resolves to the local sibling) AND ships a registry-resolvable manifest (`^<version>` in the published tarball). The rewrite happens during `npm publish` (which invokes `prepublishOnly` automatically), and the postpublish revert ensures no source drift.
50
+
51
+ ### Verify post-publish
52
+ - `npm view @vantageos/mosaic@0.3.1 dependencies` — `@vantageos/mosaic-tokens` shows `^0.2.0`, no `workspace:*` anywhere.
53
+ - Clean install: `mkdir /tmp/smoke && cd /tmp/smoke && npm init -y && npm install @vantageos/mosaic@0.3.1` — exits 0, pulls `@vantageos/mosaic-tokens@0.2.0` from registry.
54
+ - `git diff HEAD -- packages/mosaic/package.json` post-publish — clean (postpublish reverted).
55
+
56
+ ### F-list track
57
+ - Tracked in F-list `k173e0bwvfpmngwrrtcqh3zzj988fnaq` priority MAX. The rewrite script is fleet-wide reusable for any other `@vantageos/*` monorepo package that publishes via `npm publish` (vs `pnpm publish` which auto-rewrites).
58
+
59
+ ---
60
+
31
61
  ## [0.3.0] — GA — 2026-06-13
32
62
 
33
63
  ### Added
package/package.json CHANGED
@@ -1,231 +1,232 @@
1
1
  {
2
- "name": "@vantageos/mosaic",
3
- "version": "0.3.0",
4
- "description": "Fleet-wide MCP UI design system — 6-category taxonomy, Zod-validated, registry-gated, streaming-ready, cross-runtime (React 19 + Preact 10).",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js",
13
- "require": "./dist/index.cjs"
14
- },
15
- "./progress": {
16
- "types": "./dist/progress.d.ts",
17
- "import": "./dist/progress.js",
18
- "require": "./dist/progress.cjs"
19
- },
20
- "./input": {
21
- "types": "./dist/input.d.ts",
22
- "import": "./dist/input.js",
23
- "require": "./dist/input.cjs"
24
- },
25
- "./display": {
26
- "types": "./dist/display.d.ts",
27
- "import": "./dist/display.js",
28
- "require": "./dist/display.cjs"
29
- },
30
- "./artifacts": {
31
- "types": "./dist/artifacts.d.ts",
32
- "import": "./dist/artifacts.js",
33
- "require": "./dist/artifacts.cjs"
34
- },
35
- "./confirmation": {
36
- "types": "./dist/confirmation.d.ts",
37
- "import": "./dist/confirmation.js",
38
- "require": "./dist/confirmation.cjs"
39
- },
40
- "./media": {
41
- "types": "./dist/media.d.ts",
42
- "import": "./dist/media.js",
43
- "require": "./dist/media.cjs"
44
- },
45
- "./forms": {
46
- "types": "./dist/forms.d.ts",
47
- "import": "./dist/forms.js",
48
- "require": "./dist/forms.cjs"
49
- },
50
- "./react": {
51
- "types": "./dist/react/index.d.ts",
52
- "import": "./dist/react/index.js",
53
- "require": "./dist/react/index.cjs"
54
- },
55
- "./react/progress": {
56
- "types": "./dist/react/progress.d.ts",
57
- "import": "./dist/react/progress.js",
58
- "require": "./dist/react/progress.cjs"
59
- },
60
- "./react/input": {
61
- "types": "./dist/react/input.d.ts",
62
- "import": "./dist/react/input.js",
63
- "require": "./dist/react/input.cjs"
64
- },
65
- "./react/display": {
66
- "types": "./dist/react/display.d.ts",
67
- "import": "./dist/react/display.js",
68
- "require": "./dist/react/display.cjs"
69
- },
70
- "./react/artifacts": {
71
- "types": "./dist/react/artifacts.d.ts",
72
- "import": "./dist/react/artifacts.js",
73
- "require": "./dist/react/artifacts.cjs"
74
- },
75
- "./react/confirmation": {
76
- "types": "./dist/react/confirmation.d.ts",
77
- "import": "./dist/react/confirmation.js",
78
- "require": "./dist/react/confirmation.cjs"
79
- },
80
- "./react/media": {
81
- "types": "./dist/react/media.d.ts",
82
- "import": "./dist/react/media.js",
83
- "require": "./dist/react/media.cjs"
84
- },
85
- "./react/forms": {
86
- "types": "./dist/react/forms.d.ts",
87
- "import": "./dist/react/forms.js",
88
- "require": "./dist/react/forms.cjs"
89
- },
90
- "./preact": {
91
- "types": "./dist/preact/index.d.ts",
92
- "import": "./dist/preact/index.js"
93
- },
94
- "./preact/progress": {
95
- "types": "./dist/preact/progress.d.ts",
96
- "import": "./dist/preact/progress.js"
97
- },
98
- "./preact/input": {
99
- "types": "./dist/preact/input.d.ts",
100
- "import": "./dist/preact/input.js"
101
- },
102
- "./preact/display": {
103
- "types": "./dist/preact/display.d.ts",
104
- "import": "./dist/preact/display.js"
105
- },
106
- "./preact/artifacts": {
107
- "types": "./dist/preact/artifacts.d.ts",
108
- "import": "./dist/preact/artifacts.js"
109
- },
110
- "./preact/confirmation": {
111
- "types": "./dist/preact/confirmation.d.ts",
112
- "import": "./dist/preact/confirmation.js"
113
- },
114
- "./preact/media": {
115
- "types": "./dist/preact/media.d.ts",
116
- "import": "./dist/preact/media.js"
117
- },
118
- "./preact/forms": {
119
- "types": "./dist/preact/forms.d.ts",
120
- "import": "./dist/preact/forms.js"
121
- },
122
- "./tokens": {
123
- "types": "./dist/tokens.d.ts",
124
- "import": "./dist/tokens.js",
125
- "require": "./dist/tokens.cjs"
126
- },
127
- "./server": {
128
- "types": "./dist/server.d.ts",
129
- "import": "./dist/server.js",
130
- "require": "./dist/server.cjs"
131
- },
132
- "./registry.yaml": "./registry.yaml"
133
- },
134
- "files": [
135
- "dist",
136
- "registry.yaml",
137
- "README.md",
138
- "CHANGELOG.md"
139
- ],
140
- "sideEffects": false,
141
- "scripts": {
142
- "prebuild": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
143
- "build": "NODE_OPTIONS=--max-old-space-size=8192 tsup",
144
- "dev": "tsup --watch",
145
- "test": "vitest run",
146
- "lint": "biome check --error-on-warnings src",
147
- "size-limit": "size-limit",
148
- "build-storybook": "storybook build -o storybook-static",
149
- "prepublishOnly": "pnpm run build && pnpm run test && pnpm run size-limit && node scripts/check-eta-gate.js"
150
- },
151
- "peerDependencies": {
152
- "@hookform/resolvers": "^3.10.0",
153
- "@mcp-ui/client": "7.1.1",
154
- "preact": "^10.25.0",
155
- "react": "^19.1.0",
156
- "react-dom": "^19.1.0",
157
- "react-hook-form": "^7.54.0",
158
- "react-i18next": "15.5.2",
159
- "rxjs": "^7.8.0"
160
- },
161
- "peerDependenciesMeta": {
162
- "@hookform/resolvers": {
163
- "optional": true
164
- },
165
- "@mcp-ui/client": {
166
- "optional": true
167
- },
168
- "preact": {
169
- "optional": true
170
- },
171
- "react": {
172
- "optional": true
173
- },
174
- "react-dom": {
175
- "optional": true
176
- },
177
- "react-hook-form": {
178
- "optional": true
179
- },
180
- "react-i18next": {
181
- "optional": true
182
- },
183
- "rxjs": {
184
- "optional": true
185
- }
186
- },
187
- "dependencies": {
188
- "@lit-labs/react": "1.0.6",
189
- "@mcp-ui/server": "6.1.0",
190
- "@tanstack/react-virtual": "3.13.6",
191
- "@vantageos/mosaic-tokens": "workspace:*",
192
- "dompurify": "3.2.4",
193
- "marked": "15.0.7",
194
- "zod": "3.25.28"
195
- },
196
- "devDependencies": {
197
- "@axe-core/playwright": "4.10.1",
198
- "@babel/parser": "7.29.7",
199
- "@babel/traverse": "7.29.7",
200
- "@biomejs/biome": "1.9.4",
201
- "@hookform/resolvers": "^3.10.0",
202
- "@playwright/test": "1.50.1",
203
- "@size-limit/preset-small-lib": "11.2.0",
204
- "@storybook/builder-vite": "8.6.18",
205
- "@storybook/react": "8.6.18",
206
- "@storybook/react-vite": "8.6.18",
207
- "@storybook/test-runner": "0.21.0",
208
- "@tailwindcss/vite": "4.1.8",
209
- "@testing-library/react": "16.3.0",
210
- "@testing-library/user-event": "14.6.1",
211
- "@types/babel__traverse": "7.28.0",
212
- "@types/dompurify": "3.0.5",
213
- "@types/react": "19.1.0",
214
- "@types/react-dom": "19.1.0",
215
- "@vitejs/plugin-react": "4.3.4",
216
- "@vitest/coverage-v8": "3.2.2",
217
- "jsdom": "26.0.0",
218
- "preact": "10.27.1",
219
- "react": "19.1.0",
220
- "react-dom": "19.1.0",
221
- "react-hook-form": "^7.54.0",
222
- "size-limit": "11.2.0",
223
- "storybook": "8.6.18",
224
- "tailwindcss": "4.1.8",
225
- "tsup": "8.4.0",
226
- "typescript": "5.8.3",
227
- "vite": "6.3.5",
228
- "vite-plugin-singlefile": "2.1.0",
229
- "vitest": "3.2.2"
230
- }
231
- }
2
+ "name": "@vantageos/mosaic",
3
+ "version": "0.3.1",
4
+ "description": "Fleet-wide MCP UI design system — 6-category taxonomy, Zod-validated, registry-gated, streaming-ready, cross-runtime (React 19 + Preact 10).",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./progress": {
16
+ "types": "./dist/progress.d.ts",
17
+ "import": "./dist/progress.js",
18
+ "require": "./dist/progress.cjs"
19
+ },
20
+ "./input": {
21
+ "types": "./dist/input.d.ts",
22
+ "import": "./dist/input.js",
23
+ "require": "./dist/input.cjs"
24
+ },
25
+ "./display": {
26
+ "types": "./dist/display.d.ts",
27
+ "import": "./dist/display.js",
28
+ "require": "./dist/display.cjs"
29
+ },
30
+ "./artifacts": {
31
+ "types": "./dist/artifacts.d.ts",
32
+ "import": "./dist/artifacts.js",
33
+ "require": "./dist/artifacts.cjs"
34
+ },
35
+ "./confirmation": {
36
+ "types": "./dist/confirmation.d.ts",
37
+ "import": "./dist/confirmation.js",
38
+ "require": "./dist/confirmation.cjs"
39
+ },
40
+ "./media": {
41
+ "types": "./dist/media.d.ts",
42
+ "import": "./dist/media.js",
43
+ "require": "./dist/media.cjs"
44
+ },
45
+ "./forms": {
46
+ "types": "./dist/forms.d.ts",
47
+ "import": "./dist/forms.js",
48
+ "require": "./dist/forms.cjs"
49
+ },
50
+ "./react": {
51
+ "types": "./dist/react/index.d.ts",
52
+ "import": "./dist/react/index.js",
53
+ "require": "./dist/react/index.cjs"
54
+ },
55
+ "./react/progress": {
56
+ "types": "./dist/react/progress.d.ts",
57
+ "import": "./dist/react/progress.js",
58
+ "require": "./dist/react/progress.cjs"
59
+ },
60
+ "./react/input": {
61
+ "types": "./dist/react/input.d.ts",
62
+ "import": "./dist/react/input.js",
63
+ "require": "./dist/react/input.cjs"
64
+ },
65
+ "./react/display": {
66
+ "types": "./dist/react/display.d.ts",
67
+ "import": "./dist/react/display.js",
68
+ "require": "./dist/react/display.cjs"
69
+ },
70
+ "./react/artifacts": {
71
+ "types": "./dist/react/artifacts.d.ts",
72
+ "import": "./dist/react/artifacts.js",
73
+ "require": "./dist/react/artifacts.cjs"
74
+ },
75
+ "./react/confirmation": {
76
+ "types": "./dist/react/confirmation.d.ts",
77
+ "import": "./dist/react/confirmation.js",
78
+ "require": "./dist/react/confirmation.cjs"
79
+ },
80
+ "./react/media": {
81
+ "types": "./dist/react/media.d.ts",
82
+ "import": "./dist/react/media.js",
83
+ "require": "./dist/react/media.cjs"
84
+ },
85
+ "./react/forms": {
86
+ "types": "./dist/react/forms.d.ts",
87
+ "import": "./dist/react/forms.js",
88
+ "require": "./dist/react/forms.cjs"
89
+ },
90
+ "./preact": {
91
+ "types": "./dist/preact/index.d.ts",
92
+ "import": "./dist/preact/index.js"
93
+ },
94
+ "./preact/progress": {
95
+ "types": "./dist/preact/progress.d.ts",
96
+ "import": "./dist/preact/progress.js"
97
+ },
98
+ "./preact/input": {
99
+ "types": "./dist/preact/input.d.ts",
100
+ "import": "./dist/preact/input.js"
101
+ },
102
+ "./preact/display": {
103
+ "types": "./dist/preact/display.d.ts",
104
+ "import": "./dist/preact/display.js"
105
+ },
106
+ "./preact/artifacts": {
107
+ "types": "./dist/preact/artifacts.d.ts",
108
+ "import": "./dist/preact/artifacts.js"
109
+ },
110
+ "./preact/confirmation": {
111
+ "types": "./dist/preact/confirmation.d.ts",
112
+ "import": "./dist/preact/confirmation.js"
113
+ },
114
+ "./preact/media": {
115
+ "types": "./dist/preact/media.d.ts",
116
+ "import": "./dist/preact/media.js"
117
+ },
118
+ "./preact/forms": {
119
+ "types": "./dist/preact/forms.d.ts",
120
+ "import": "./dist/preact/forms.js"
121
+ },
122
+ "./tokens": {
123
+ "types": "./dist/tokens.d.ts",
124
+ "import": "./dist/tokens.js",
125
+ "require": "./dist/tokens.cjs"
126
+ },
127
+ "./server": {
128
+ "types": "./dist/server.d.ts",
129
+ "import": "./dist/server.js",
130
+ "require": "./dist/server.cjs"
131
+ },
132
+ "./registry.yaml": "./registry.yaml"
133
+ },
134
+ "files": [
135
+ "dist",
136
+ "registry.yaml",
137
+ "README.md",
138
+ "CHANGELOG.md"
139
+ ],
140
+ "sideEffects": false,
141
+ "scripts": {
142
+ "prebuild": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
143
+ "build": "NODE_OPTIONS=--max-old-space-size=8192 tsup",
144
+ "dev": "tsup --watch",
145
+ "test": "vitest run",
146
+ "lint": "biome check --error-on-warnings src",
147
+ "size-limit": "size-limit",
148
+ "build-storybook": "storybook build -o storybook-static",
149
+ "prepublishOnly": "node scripts/rewrite-workspace-deps.mjs && pnpm run build && pnpm run test && pnpm run size-limit && node scripts/check-eta-gate.js",
150
+ "postpublish": "git checkout HEAD -- package.json && echo '[postpublish] reverted package.json — workspace:* refs restored for monorepo dev'"
151
+ },
152
+ "peerDependencies": {
153
+ "@hookform/resolvers": "^3.10.0",
154
+ "@mcp-ui/client": "7.1.1",
155
+ "preact": "^10.25.0",
156
+ "react": "^19.1.0",
157
+ "react-dom": "^19.1.0",
158
+ "react-hook-form": "^7.54.0",
159
+ "react-i18next": "15.5.2",
160
+ "rxjs": "^7.8.0"
161
+ },
162
+ "peerDependenciesMeta": {
163
+ "@hookform/resolvers": {
164
+ "optional": true
165
+ },
166
+ "@mcp-ui/client": {
167
+ "optional": true
168
+ },
169
+ "preact": {
170
+ "optional": true
171
+ },
172
+ "react": {
173
+ "optional": true
174
+ },
175
+ "react-dom": {
176
+ "optional": true
177
+ },
178
+ "react-hook-form": {
179
+ "optional": true
180
+ },
181
+ "react-i18next": {
182
+ "optional": true
183
+ },
184
+ "rxjs": {
185
+ "optional": true
186
+ }
187
+ },
188
+ "dependencies": {
189
+ "@lit-labs/react": "1.0.6",
190
+ "@mcp-ui/server": "6.1.0",
191
+ "@tanstack/react-virtual": "3.13.6",
192
+ "@vantageos/mosaic-tokens": "^0.2.0",
193
+ "dompurify": "3.2.4",
194
+ "marked": "15.0.7",
195
+ "zod": "3.25.28"
196
+ },
197
+ "devDependencies": {
198
+ "@axe-core/playwright": "4.10.1",
199
+ "@babel/parser": "7.29.7",
200
+ "@babel/traverse": "7.29.7",
201
+ "@biomejs/biome": "1.9.4",
202
+ "@hookform/resolvers": "^3.10.0",
203
+ "@playwright/test": "1.50.1",
204
+ "@size-limit/preset-small-lib": "11.2.0",
205
+ "@storybook/builder-vite": "8.6.18",
206
+ "@storybook/react": "8.6.18",
207
+ "@storybook/react-vite": "8.6.18",
208
+ "@storybook/test-runner": "0.21.0",
209
+ "@tailwindcss/vite": "4.1.8",
210
+ "@testing-library/react": "16.3.0",
211
+ "@testing-library/user-event": "14.6.1",
212
+ "@types/babel__traverse": "7.28.0",
213
+ "@types/dompurify": "3.0.5",
214
+ "@types/react": "19.1.0",
215
+ "@types/react-dom": "19.1.0",
216
+ "@vitejs/plugin-react": "4.3.4",
217
+ "@vitest/coverage-v8": "3.2.2",
218
+ "jsdom": "26.0.0",
219
+ "preact": "10.27.1",
220
+ "react": "19.1.0",
221
+ "react-dom": "19.1.0",
222
+ "react-hook-form": "^7.54.0",
223
+ "size-limit": "11.2.0",
224
+ "storybook": "8.6.18",
225
+ "tailwindcss": "4.1.8",
226
+ "tsup": "8.4.0",
227
+ "typescript": "5.8.3",
228
+ "vite": "6.3.5",
229
+ "vite-plugin-singlefile": "2.1.0",
230
+ "vitest": "3.2.2"
231
+ }
232
+ }