@mushi-mushi/react-native 0.21.0 → 0.23.0

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/CHANGELOG.md DELETED
@@ -1,1062 +0,0 @@
1
- # @mushi-mushi/react-native
2
-
3
- ## 0.21.0
4
-
5
- ### Minor Changes
6
-
7
- - 26e038f: SDK polish from the UI/UX audit pass:
8
-
9
- - **web**: the widget now live-restyles when the OS `prefers-color-scheme`
10
- changes under `theme: 'auto' | 'inherit'`, and mount is hardened so a host
11
- page whose `matchMedia` lacks the modern `addEventListener` can never throw.
12
- Richer banner layout (pill + message + flat actions), `hideOnSelector`
13
- suppression, submit failure-kind surfacing, and expanded i18n copy
14
- (en/es/ja/th).
15
- - **react-native**: banner, bottom-sheet, and floating-button polish;
16
- `submitReport()` now resolves to a typed failure result instead of
17
- `undefined` when called before the provider finishes initializing.
18
- - **core**: additional shared design tokens consumed by the surfaces above.
19
-
20
- ### Patch Changes
21
-
22
- - Updated dependencies [26e038f]
23
- - @mushi-mushi/web@1.26.0
24
- - @mushi-mushi/core@1.26.0
25
-
26
- ## 0.20.1
27
-
28
- ### Patch Changes
29
-
30
- - 5feac27: # v0.20.1 — Post-release SDK reliability fixes
31
-
32
- - **React Native types resolve after publish**: removed the `web-i18n.d.ts` ambient shim that re-exported `MushiLocale` from a monorepo-relative source path (`../../web/src/i18n/types`) that does not exist in a published install. `@mushi-mushi/web` already ships proper `./i18n` types via its `exports` map, which `moduleResolution: "bundler"`/`nodenext` resolves directly.
33
-
34
- - Updated dependencies [5feac27]
35
- - @mushi-mushi/web@1.21.1
36
-
37
- ## 0.20.0
38
-
39
- ### Minor Changes
40
-
41
- - 90bc9d5: Add the `MushiBanner` lime neon banner launcher to the React Native SDK, mirroring the web widget's banner entry point:
42
-
43
- - New `MushiBanner` component with `MushiBannerProps` and the `MUSHI_BANNER_DEFAULT_HEIGHT` constant.
44
- - New `'banner'` value for `widget.trigger` so hosts can render the banner as the passive entry point.
45
- - Reporter-status surface (`reporter-status.ts`) for the My Reports affordance.
46
-
47
- All additions are Hermes-safe (no Node built-ins / browser globals).
48
-
49
- ### Patch Changes
50
-
51
- - Updated dependencies [90bc9d5]
52
- - Updated dependencies [90bc9d5]
53
- - @mushi-mushi/core@1.21.0
54
- - @mushi-mushi/web@1.21.0
55
-
56
- ## 0.19.2
57
-
58
- ### Patch Changes
59
-
60
- - 7b44c97: SDK fixes from automated code review.
61
-
62
- - **Favicon trust boundary** (`@mushi-mushi/core`): `readPageFaviconHref` now returns only http(s) URLs, so a host page can't get a `data:` / `blob:` / `javascript:` favicon rendered into the widget's `<img src>`; anything else falls back to the default mark.
63
- - **Self-hosted credential message** (`@mushi-mushi/core`, `@mushi-mushi/react-native`): the one-time 401/403 "credentials rejected" warning only links to the hosted console when the client is actually using the Cloud endpoint; self-hosted deployments get a console-agnostic message instead of a wrong domain.
64
- - **Offline-queue data loss** (`@mushi-mushi/react-native`): `decryptQueueBlob` now decrypts any blob carrying the encrypted prefix regardless of the current `secureStorage` flag. Previously, toggling `secureStorage` from `true` to `false` returned the still-encrypted string, which failed `JSON.parse` and silently cleared the offline report queue.
65
-
66
- - Updated dependencies [7b44c97]
67
- - @mushi-mushi/core@1.19.2
68
-
69
- ## 0.19.1
70
-
71
- ### Patch Changes
72
-
73
- - 08108e6: Setup UX overhaul: zero-paste `mushi login` browser device-auth, credential error visibility, and docs fixes.
74
-
75
- - **CLI**: `mushi login` now implements RFC 8628 browser device-auth (zero copy-paste). Opens the console in the browser, user clicks Approve, CLI receives a session token automatically, then lists/creates a project and saves the API key. `--api-key` flag remains as the CI/non-interactive fallback.
76
- - **Core SDK**: 401/403 responses now emit a one-time `console.error` with a clear credential-failure message and the console URL, instead of silently entering the offline retry queue.
77
- - **React Native**: Same 401/403 credential-failure detection in `MushiProvider.submitReport` — skips enqueue and surfaces the error immediately.
78
-
79
- - Updated dependencies [08108e6]
80
- - @mushi-mushi/core@1.19.1
81
-
82
- ## 0.19.0
83
-
84
- ### Minor Changes
85
-
86
- - a8f183e: Show the captured screenshot as a visible preview with a configurable
87
- "remove anything sensitive" privacy caption, so reporters can see and consent to
88
- exactly what gets sent.
89
-
90
- - **core/types**: new `widget.screenshotSensitiveHint?: boolean | string` config.
91
- `true` (default) shows the localized caption, a string overrides it verbatim,
92
- `false` hides the caption (the preview + remove control always remain). Travels
93
- in the `widget` block of `GET /v1/sdk/config`, so it's settable per-host via the
94
- SDK and remotely via the Mushi console runtime config.
95
- - **web/widget**: the details step now renders the attached screenshot as an
96
- `<img>` preview (previously only a "Screenshot attached ✓" label) with an
97
- optional privacy caption beneath it. The preview stays in sync through the
98
- annotate/markup flow and clears when the screenshot is removed. Image `src` and
99
- caption are HTML-escaped. New `en`/`es`/`ja`/`th` strings.
100
- - **react-native**: the bottom sheet's existing screenshot thumbnail gains the
101
- same configurable privacy caption, resolved by the provider from
102
- `widget.screenshotSensitiveHint`.
103
-
104
- This lets privacy-sensitive hosts (e.g. finance apps) enable screenshot capture
105
- with an explicit user-facing review-and-remove step instead of disabling it
106
- outright.
107
-
108
- ### Patch Changes
109
-
110
- - Updated dependencies [a8f183e]
111
- - Updated dependencies [a8f183e]
112
- - @mushi-mushi/core@1.19.0
113
-
114
- ## 0.18.1
115
-
116
- ### Patch Changes
117
-
118
- - 8516682: Dependency housekeeping — runtime major-version bumps.
119
-
120
- - **inventory-schema**: migrate to **Zod 4** (`zod@^4.4.3`), aligning with `@mushi-mushi/mcp` and `@mushi-mushi/agents`, which were already on v4. The public API is unchanged; the validation-issue path formatter now handles Zod 4's widened `PropertyKey[]` issue paths.
121
- - **cli**: bump `commander` to **v15** (ESM-only; the CLI is already pure ESM, so the change is transparent to consumers).
122
- - **mcp-ci**: bump `@actions/core` to **v3** (ESM-only, Node 24-ready; bundled via tsup).
123
- - **react-native**: build and test against **react-native 0.86**. `StyleSheet.absoluteFillObject` was dropped from RN 0.86's TypeScript types, so the backdrop style now inlines the equivalent absolute-fill literal — runtime behavior is identical and it compiles against all supported `react-native >= 0.72`.
124
-
125
- ## 0.18.0
126
-
127
- ### Minor Changes
128
-
129
- - 679b158: Report payload + identity parity with the web SDK, and a web-parity bottom sheet.
130
-
131
- - **Reporter identity (fixes anonymous-token reporter):** `submitReport` now emits nested `metadata.user = { id, email, name, provider }` — the shape the server's `resolveEndUser()` reads — while keeping the flat `userId/userEmail/userName` keys for back-compat. Adds a `setUser()` alias next to `identify()`.
132
- - **Sentry-level payload:** every report now carries a per-launch `sessionId`, `sdkPackage`/`sdkVersion`/`appVersion`, a device `fingerprintHash`, and a 50-entry breadcrumb ring buffer that is also sent as a derived repro `timeline` (so the admin "Repro timeline" renders instead of nudging "Upgrade the SDK"). New `addBreadcrumb()` method; `setScreen()` auto-adds a navigation breadcrumb.
133
- - **Screenshots:** new `capture.screenshot` config flag (default on) gating the optional `react-native-view-shot` capture; documented masking guidance for sensitive screens.
134
- - **Design parity:** `MushiBottomSheet` restyled to mirror the web widget — neon-lime (`#0FFF50`) branded header and accent, dark-ink text on accent surfaces, and clearer "Your reports" / "Community" tabs.
135
-
136
- ### Patch Changes
137
-
138
- - Dependency housekeeping — runtime major-version bumps.
139
-
140
- - **inventory-schema**: migrate to **Zod 4** (`zod@^4.4.3`), aligning with `@mushi-mushi/mcp` and `@mushi-mushi/agents`, which were already on v4. The public API is unchanged; the validation-issue path formatter now handles Zod 4's widened `PropertyKey[]` issue paths.
141
- - **cli**: bump `commander` to **v15** (now ESM-only; the CLI is already pure ESM, so the change is transparent to consumers).
142
- - **mcp-ci**: bump `@actions/core` to **v3** (ESM-only, Node 24-ready; bundled via tsup).
143
- - **react-native**: build and test against **react-native 0.86**. `StyleSheet.absoluteFillObject` was dropped from RN 0.86's TypeScript types, so the backdrop style now inlines the equivalent absolute-fill literal — runtime behavior is identical and it compiles against all supported `react-native >= 0.72`.
144
-
145
- - Updated dependencies [679b158]
146
- - @mushi-mushi/core@1.17.0
147
-
148
- ## 0.16.0
149
-
150
- ### Minor Changes
151
-
152
- - 499b716: **Mushi SDK Uplift — Draggable FAB, Themed Popup, Keyboard-Safe Form, Cross-App Community**
153
-
154
- ### Draggable / repositionable FAB
155
- - **Web**: Pointer Events drag with tap-vs-drag threshold (6 px), safe-area clamping, optional edge-snap on release, per-project `localStorage` persistence, arrow-key nudge for keyboard accessibility. New `draggable?: boolean | { persist?, snapToEdge?, axis? }` config type in `@mushi-mushi/core`.
156
- - **React Native**: `PanResponder`-based drag + `AsyncStorage` persistence + safe-area clamping.
157
- - **Flutter**: Long-press-to-drag via `GestureDetector` + `SharedPreferences` persistence + edge-snap.
158
- - **iOS**: `UIPanGestureRecognizer` via `MushiFabDragController` + `UserDefaults` persistence + animated edge-snap.
159
- - **Android**: `OnTouchListener` tap-vs-drag + `SharedPreferences` persistence + optional edge-snap. New `DraggableConfig` data class.
160
-
161
- ### Theme inherit + accent + contrast fixes
162
- - **All platforms**: New `theme: 'inherit'` resolves the host app's dark mode at runtime (`prefers-color-scheme` / `color-scheme` on web, `traitCollection.userInterfaceStyle` on iOS, `UiModeManager` on Android, `Brightness` on Flutter). New `accent` + `accentText` config tokens for brand-color override.
163
- - **Web**: Parameterized `getWidgetStyles(theme, accent)` with `widgetAccent` / `widgetAccentWash` / `widgetAccentInk` tokens; fixed undefined `var(--mushi-text-dim)` references; WCAG AA re-verified in both themes.
164
- - **React Native / Android**: Explicit disabled-state colors (no more white-on-white disabled buttons).
165
-
166
- ### Keyboard-safe "tell us more" form
167
- - **Web**: `visualViewport` manager on `open()`; lifts panel above mobile keyboard; scrolls focused `textarea` / `input` into view; `100dvh` bottom-sheet layout on narrow viewports; torn down on `close()` / `destroy()`.
168
- - **React Native**: `KeyboardAvoidingView` `behavior="height"` (Android) + `ScrollView(keyboardShouldPersistTaps)`.
169
- - **Flutter**: `SingleChildScrollView` + `MediaQuery.viewInsets.bottom` inset.
170
- - **iOS**: `keyboardWillShow` / `keyboardWillHide` observers + `CGAffineTransform` lift.
171
- - **Android**: `SOFT_INPUT_ADJUST_RESIZE` + `ScrollView` wrapper.
172
-
173
- ### Cross-app community layer
174
- - New **in-widget Mushi sign-in** (magic link / OTP) — no password required.
175
- - **Account step**: sign-in form → signed-in profile card with global rank + cross-app navigation.
176
- - **Cross-app reports step**: all reports filed by this tester across every app, grouped by app.
177
- - **Global leaderboard**: top-N ranking from `tester_leaderboard_30d_public`, with my rank highlighted.
178
- - **Server** (Supabase, mushi-mushi project): three new SECURITY DEFINER RPCs — `mushi_link_reporter_token`, `mushi_get_my_cross_app_reports`, `mushi_get_my_reputation`; magic-link route; public leaderboard route. Deployed + verified on remote.
179
- - **Community footer** added to the category-select step: "Join community" entry-point + leaderboard shortcut.
180
- - Cross-domain identity unifies server-side via `tester_id`; per-domain magic-link re-auth is required for different origins (localStorage is per-origin by browser design).
181
-
182
- ### Size budget
183
-
184
- Bundle budget raised from 63 KB → 70 KB gzip (with 3.5 KB headroom) to accommodate the community layer. Community CSS compacted to single-line rules.
185
-
186
- ### Patch Changes
187
-
188
- - Updated dependencies [499b716]
189
- - Updated dependencies [499b716]
190
- - @mushi-mushi/core@1.14.0
191
-
192
- ## 0.15.2
193
-
194
- ### Patch Changes
195
-
196
- - e422d40: Polish the MCP and Cursor integration path with a shared MCP tool catalog, subpath exports for catalog/server consumers, publish-readiness checks, Cursor plugin bundle validation, and marketplace documentation.
197
-
198
- Fix the web SDK export map so TypeScript consumers consistently resolve generated declarations through package exports, and refine the React Native bottom-sheet reporter experience.
199
-
200
- ## 0.15.1
201
-
202
- ### Patch Changes
203
-
204
- - 03fabb9: Session replay + screenshot annotation capture, client-side payload guarding, and a full-stack audit-hardening pass across the SDK, CLI, and MCP.
205
-
206
- ## @mushi-mushi/core
207
- - **New:** `checkReportPayloadSize`, `estimateJsonBytes`, `formatBytes`, and `MAX_REPORT_PAYLOAD_BYTES` payload-guard helpers. `checkReportPayloadSize` serializes once and reports a distinct `serializeFailed` outcome (e.g. circular references in metadata) instead of a generic "too large".
208
- - `submitReport` now surfaces a `SERIALIZE_FAILED` error code (separate from `PAYLOAD_TOO_LARGE`) so callers can tell an oversized report apart from one that could not be serialized.
209
- - **Hardening:** the offline retry queue now treats `PAYLOAD_TOO_LARGE` and `SERIALIZE_FAILED` as permanent failures, so a single oversized report can no longer poison-pill the queue and block every later report.
210
-
211
- ## @mushi-mushi/web
212
- - **New — session replay:** opt-in `capture.replay: 'rrweb' | 'lite' | 'sentry' | 'off'` records a rolling buffer that attaches to the report on submit. rrweb recording masks all text and inputs by default (`maskAllText` + `maskAllInputs`), records continuously from init, and trims the buffer while preserving the most recent full snapshot so replays stay playable. `'off'` is the default.
213
- - **New — screenshot annotation:** the report panel's "Mark up" button opens an interactive overlay (highlight / blur / arrow) so reporters can circle the problem and redact sensitive regions before submitting. The annotation session stays open until the reporter confirms with "Done"; touch strokes now resolve correctly on lift (`touchend`).
214
- - **New — screenshot compression** before upload to keep payloads small.
215
- - **Hardening:** oversized reports are progressively degraded — drop the replay buffer, then the screenshot — before being dropped entirely with a `report:failed` event, so the offline queue is never wedged. The replay capture is now torn down on `Mushi.destroy()` (no observer/listener leak) and guarded against an init/`updateConfig` race that could install a stale capture.
216
-
217
- ## @mushi-mushi/react-native
218
- - Fix `onReportQueued` / `onReportSynced` callback timing: `onReportQueued` now fires after the report is persisted to the offline queue, and `onReportSynced` fires only when a queued report is actually delivered (wired to the async-storage queue drain) rather than misleadingly firing on direct submission.
219
-
220
- ## @mushi-mushi/mcp
221
- - Fix `get_reporter_thread`: it now calls the existing `GET /v1/admin/reports/:id/timeline` endpoint (which includes the reporter/admin comment lane plus fix, QA, and status lanes) instead of a non-existent `/comments` route that returned 404.
222
-
223
- ## @mushi-mushi/cli
224
- - `mushi feedback board` now reads the feature board via `GET /v1/admin/feature-board` with an operator API key (`mcp:read`), fixing the previous 401, and renders real vote counts.
225
- - `mushi doctor --fix` re-runs its checks after applying fixes, so the printed result and exit code reflect the post-fix state.
226
- - Endpoints are normalized consistently (trailing slashes stripped on sub-paths) to prevent double-slash request URLs.
227
-
228
- - Updated dependencies [03fabb9]
229
- - @mushi-mushi/core@1.12.0
230
-
231
- ## 0.15.0
232
-
233
- ### Minor Changes
234
-
235
- - 59d6fce: Reporter two-way loop + fix-merge surface across the SDKs.
236
-
237
- ## @mushi-mushi/core
238
- - Add reporter verify/reopen API client methods and the `not_fixed` feedback signal to the public types.
239
-
240
- ## @mushi-mushi/web
241
- - Reporter widget can confirm a fix (verify) or flag a regression (reopen), and opt into email delivery for status updates.
242
-
243
- ## @mushi-mushi/cli
244
- - New fix-merge lifecycle commands wired to the console merge endpoints.
245
-
246
- ## @mushi-mushi/mcp
247
- - New MCP tools: `merge_fix`, `refresh_ci`, and `reopen_report`; `transition_status` now covers the `verified` / `reopened` states.
248
-
249
- ## @mushi-mushi/mcp-ci
250
- - CLI surface updated for the new fix-merge and CI-refresh tools.
251
-
252
- ## @mushi-mushi/react-native
253
- - Bottom-sheet widget gains reporter verify/reopen actions and notification opt-in.
254
-
255
- ## @mushi-mushi/capacitor
256
- - Plugin definitions and web bridge updated for the reporter verify/reopen flow.
257
-
258
- ### Patch Changes
259
-
260
- - Updated dependencies [59d6fce]
261
- - @mushi-mushi/core@1.11.0
262
-
263
- ## 0.14.0
264
-
265
- ### Minor Changes
266
-
267
- - c0eb84b: Add a cross-platform Reporter API, contributor hall-of-fame, and a headless fix-merge CLI.
268
-
269
- ## @mushi-mushi/core
270
- - Add the Reporter API to `MushiSDKInstance`: `listMyReports()`, `listMyComments(reportId)`, and `replyToReport(reportId, body)` let an anonymous reporter view and follow up on their own submissions, keyed to the persistent reporter token.
271
- - Add `getHallOfFame(limit?)` plus the matching `MushiApiClient.getHallOfFame()` and the new `MushiHallOfFameEntry` type for the public contributor leaderboard.
272
-
273
- ## @mushi-mushi/web
274
- - Implement the Reporter API and `getHallOfFame()` on the web SDK instance. All methods fail soft (return `[]` / `null` instead of throwing) when offline or before a reporter token exists, so they are safe to call on first render.
275
-
276
- ## @mushi-mushi/react
277
- - Expose the Reporter API on the `useMushi()` hook (`listMyReports`, `listMyComments`, `replyToReport`, `getHallOfFame`, `getReputation`, `getTier`) as memoised, render-stable callbacks with no-op fallbacks before the SDK is ready.
278
- - Re-export `MushiReporterReport`, `MushiReporterComment`, `MushiHallOfFameEntry`, `MushiReputationResult`, and `MushiTierResult` for host-app typing.
279
-
280
- ## @mushi-mushi/react-native
281
- - Add optional in-app screenshot capture via `react-native-view-shot` (declared as an optional peer dependency — no-ops gracefully when not installed).
282
- - Re-export `MushiReporterReport`, `MushiReporterComment`, and `MushiHallOfFameEntry` so React Native host apps can type the Reporter API.
283
-
284
- ## @mushi-mushi/cli
285
- - Add `mushi fixes merge <fixId> [--method squash|merge|rebase]` to squash-merge a fix PR and mark the linked report Fixed without leaving the terminal (auto-readies draft PRs first).
286
- - Add `mushi fixes refresh-ci <fixId>` to pull the latest GitHub Actions check-run status on demand. Both commands accept `--json` for scripting and require an admin API key with `mcp:write` scope.
287
-
288
- ### Patch Changes
289
-
290
- - Updated dependencies [c0eb84b]
291
- - @mushi-mushi/core@1.10.0
292
-
293
- ## 0.13.1
294
-
295
- ### Patch Changes
296
-
297
- - a7d6ae8: Release tester marketplace, rewards program, dispatch preflight, proactive triggers, and SDK improvements.
298
-
299
- ## @mushi-mushi/core
300
- - Add `MushiReputationResult`, `MushiTierResult`, `MushiActivityEvent` types for the rewards subsystem.
301
- - Add `pulseTrigger()` method to `MushiSDKInstance` interface — briefly animates the bug-report trigger to invite feedback without opening the widget.
302
- - Add `inpAttribution` field to `MushiPerformanceMetrics` for detailed INP breakdown (eventType, targetSelector, inputDelay, processingDuration, presentationDelay).
303
- - Add `minDescriptionLength` to `MushiWidgetConfig` — enforces a minimum character count before the submit button enables.
304
- - Add `beforeSendFeedback` hook to `MushiConfig` — called before a report is dispatched; return `null` to cancel.
305
- - Add `onCrashedLastRun` hook to `MushiConfig` — called on init if the previous session ended in a crash.
306
- - Add `'report:dispatched'` to `MushiEventType`.
307
-
308
- ## @mushi-mushi/web
309
- - **Rewards subsystem** (`src/rewards.ts`): full tester-rewards API — `initRewards`, `updateRewardsUser`, `getTier`, `enqueueActivity`. Connects to `/v1/rewards/*` backend endpoints.
310
- - **Proactive triggers** (`src/proactive-triggers.ts`): schedule-based and event-based triggers that surface the widget at the right moment without developer code.
311
- - **`pulseTrigger()`**: widget-level pulse animation accessible from `Mushi.pulseTrigger()`.
312
- - **Screenshot simplification**: `screenshot.take()` now returns `Promise<string | null>` — callers no longer need to check an `{ ok, dataUrl }` result object.
313
- - **`beforeSendFeedback` + `onCrashedLastRun`**: lifecycle hooks wired into the init flow.
314
-
315
- ## @mushi-mushi/mcp
316
- - Refactored all tool registrations from the `registerScopedTool` wrapper to the canonical `server.tool()` API — removes a layer of indirection and aligns with the latest `@modelcontextprotocol/sdk` surface.
317
- - Added rewards management tools: `list_top_contributors`, `award_bonus_points`, `set_tier`, `promote_champion`.
318
-
319
- ## @mushi-mushi/cli
320
- - **`mushi project create`** command: provisions a new Mushi project, mints an API key with `mcp:read+write` scope, and writes `.env.local` + `.cursor/mcp.json`.
321
- - **`mushi doctor`**: pre-flight checks — verifies CLI config, endpoint reachability, SDK install, and optional server preflight.
322
- - **`mushi nudge`**: generates a paste-ready `Mushi.init()` snippet tuned for alpha / beta / ga release phases.
323
- - Improved `mushi init` prompts: clearer placeholders and error messages for Project ID and API key fields.
324
-
325
- ## @mushi-mushi/node
326
- - Remove stale `warnedOnce` variable and fix `buildNodeEnvironment` JSDoc comment separation that caused a syntax error on combined branches.
327
-
328
- ## @mushi-mushi/react
329
-
330
- **Breaking change**: `useMushi()` now returns `UseMushiResult` (`{ report, pulseTrigger, isReady }`) instead of the raw `MushiSDKInstance | null`. The raw instance accessor is now `useMushiSdk()`.
331
-
332
- **Migration**: replace `const sdk = useMushi(); sdk?.report()` with `const { report } = useMushi(); report()`.
333
- - New primary hook `useMushi()` returns a stable, destructurable `{ report, pulseTrigger, isReady }` — covers 90% of use cases without the optional-chain dance.
334
- - New `useMushiSdk()` replaces the old `useMushi()` for callers that need direct SDK access.
335
- - Re-export new core types (`MushiReputationResult`, `MushiTierResult`, `MushiActivityEvent`).
336
- - Export new `UseMushiResult` interface.
337
-
338
- ## @mushi-mushi/react-native
339
- - Updated peer dependency range for latest Expo SDK compatibility.
340
-
341
- - Updated dependencies [a7d6ae8]
342
- - @mushi-mushi/core@1.6.0
343
-
344
- ## 0.13.0
345
-
346
- ### Minor Changes
347
-
348
- - ## Mushi Mushi End-to-End Uplift (v1.5.0 / v0.13.0 / v0.8.0)
349
-
350
- Single coordinated release shipping six user feedback items, RN widget UX
351
- hardening, MCP server compliance, CLI ergonomics, and admin console improvements
352
- in one coordinated bump.
353
-
354
- ### Phase 1 — Six glot.it feedback items
355
-
356
- **1.1 `MushiRN.getInstance()` global singleton** (`react-native`)
357
- - Add `packages/react-native/src/instance.ts` with `MushiRN.getInstance()`.
358
- Eliminates the `MushiInstancePublisher` bridge component consumers were
359
- building. `MushiProvider` writes/clears the singleton on mount/unmount via
360
- `setRNInstance` / `clearRNInstance`.
361
- - Export `MushiRN` from `@mushi-mushi/react-native`.
362
-
363
- **1.2 Functional `widget.inset`** (`react-native`)
364
- - `MushiRNConfig.widget.inset` now accepts a function form:
365
- `(ctx: MushiRNInsetCtx) => MushiRNInsetSpec` evaluated live as safe-area
366
- insets or screen dimensions change.
367
- - New `widget.respectSafeArea` option (default `true`) replaces the hardcoded
368
- `Platform.OS === 'ios' ? 50 : 28` bottom offset.
369
- - Shared types `MushiRNInsetSpec` + `MushiRNInsetCtx` added to `@mushi-mushi/core`.
370
-
371
- **1.3 Trigger vocabulary parity** (`react-native`, `core`)
372
- - `MushiRNConfig.widget.trigger` now uses the shared `MushiRNTrigger` type
373
- (superset of `MushiWebTrigger`).
374
- - `'notification-only'` trigger added to both web and RN (see Phase 1.6).
375
- - RN README trigger table updated to list all 8 values with consistent
376
- definitions.
377
-
378
- **1.4 `identify()` dual-call-shape overload** (`core`, `web`, `react-native`)
379
- - Both call shapes now type-check and produce identical output:
380
- ```ts
381
- mushi.identify('usr_42', { email, segment }); // string form (original)
382
- mushi.identify({ id: 'usr_42', email, segment }); // object form (new)
383
- ```
384
- - Runtime fork in web + RN detects `typeof userId === 'object'` and normalises.
385
- - TypeScript overload added to `MushiSDKInstance` in `@mushi-mushi/core`.
386
-
387
- **1.5 `ENOTEMPTY` install doctor** (`cli`)
388
- - New `mushi doctor install` command scans `node_modules/@mushi-mushi/.*-tmp*`
389
- and removes stale npm temp directories that cause ENOTEMPTY on Windows/OneDrive.
390
- - `scripts/mushi-install-doctor.mjs` added for direct invocation.
391
- - Troubleshooting sections added to web + RN READMEs.
392
-
393
- **1.6 Bell-only / `'notification-only'` trigger** (`core`, `web`, `react-native`)
394
- - New `widget.trigger: 'notification-only'` — renders only the unread-reply
395
- badge bubble, not the full trigger button. Tapping opens the reporter panel
396
- ("Your reports") directly.
397
- - New `widget.hideOnRoutesMode: 'all' | 'trigger-only'` (default `'all'`).
398
- When `'trigger-only'`, the SDK auto-switches to `'notification-only'` on
399
- matching routes, preserving reply badge visibility.
400
- - Styles for `.mushi-notification-badge` added to web widget.
401
- - Same option wired in RN.
402
-
403
- ### Phase 2 — RN widget UX hardening
404
-
405
- **2.1–2.5 Five-state phase machine** (`react-native`)
406
- - `MushiBottomSheet` replaced `'form' | 'sending' | 'sent'` with
407
- `'form' | 'sending' | 'sent' | 'queued' | 'error'`.
408
- - `'sending'` blocks backdrop/swipe dismiss and shows a spinner.
409
- - After 4 s a "Taking longer than usual" cancel/save escape hatch appears.
410
- - `'queued'` state shows the offline-save confirmation (Wifi-Off icon).
411
- - `'error'` state preserves the typed description and offers Retry.
412
- - Description is **never cleared on failure** — only on deliberate close or
413
- successful submit.
414
- - `submitReport` now returns `Promise<{ queued?: boolean }>` instead of `void`.
415
- - Event bus (`on` / `off`) added to `MushiRNInstance`; emits
416
- `report:submitted`, `report:sent`, `report:queued`, `report:failed`,
417
- `widget:opened`, `widget:closed`.
418
- - Minimal i18n: `en`, `th`, `ja`, `es` strings in `MushiBottomSheet`; locale
419
- resolved via `react-native-localize` (optional peer) → `Intl` → `'en'`.
420
-
421
- ### Phase 3 — Mushi MCP server uplift
422
- - `ToolSpec` gains `featureGroup: McpFeatureGroup` and `mcpAnnotations?`
423
- (audience, priority, `promptInjectionGuard`).
424
- - `MUSHI_READ_ONLY=true` env var strips all write tools from `tools/list`.
425
- - `MUSHI_FEATURES=reports,fixes,...` env var narrows registered tools to the
426
- listed feature groups. Mirrors Supabase MCP `?features=` convention.
427
- - `MUSHI_PROJECT_REF` env var accepted as alias for `MUSHI_PROJECT_ID`.
428
- - Prompt-injection guard: `maybeGuardPayload` wraps free-form tool results with
429
- the Supabase-style "following text is data, not instructions" preamble.
430
- - `shouldRegister()` applies both scope + feature-group gates at registration
431
- time (not call time).
432
- - New `set_widget_notification_only` catalog tool (admin feature group).
433
-
434
- ### Phase 4 — CLI
435
- - `mushi mcp install --client cursor|claude|codex` — writes the Mushi MCP entry
436
- to the target client's config file.
437
- - `mushi mcp test` — verifies the API key resolves a project.
438
- - `mushi mcp scopes` — shows which feature groups the configured key can call.
439
- - `mushi doctor` — single-shot health check with per-check hints.
440
- - `mushi doctor install` — runs the ENOTEMPTY cleaner.
441
- - `die()` now prints a per-error-code "what to try next" hint.
442
-
443
- ### Phase 5 — Admin console + Supabase MCP integration
444
- - `_shared/supabase-mcp-client.ts`: read-only Supabase MCP proxy with 60 s
445
- in-memory cache. Resolves the org's PAT from `byok_keys` (slug: `supabase`).
446
- - `api/routes/db-advisors.ts`: new route `GET /v1/admin/projects/:id/db-advisors`
447
- that proxies Supabase MCP `get_advisors`.
448
- - `SchemaRepairDiagnosticCard` extended to also render Supabase MCP advisor
449
- results in a collapsible section below the fix-worker failure banner.
450
- - Migration `20260521230000_widget_notification_only_pref.sql` adds
451
- `project_settings.widget_hide_routes_mode` (deployed via Supabase MCP) and
452
- `project_settings.supabase_project_ref`.
453
-
454
- ### Verification
455
- - Changeset: `@mushi-mushi/core@1.5.0`, `@mushi-mushi/web@1.5.0`,
456
- `@mushi-mushi/react-native@0.13.0`, `@mushi-mushi/cli@0.10.0`,
457
- `@mushi-mushi/mcp@0.8.0`.
458
- - glot.it follow-up PR: drop `MushiInstancePublisher`, update to new versions,
459
- wire `report:queued` toast to the RN event bus.
460
-
461
- ### Patch Changes
462
-
463
- - Updated dependencies
464
- - @mushi-mushi/core@1.5.0
465
-
466
- ## 0.12.0
467
-
468
- ### Minor Changes
469
-
470
- - 506df78: Release the full SDK + closed-loop evolution backlog since v0.5.0
471
- (`cf27d81`, 2026-05-10). Covers headless SDK, QA Coverage Suite,
472
- rewards program, native 0.4.0 parity, closed-loop Phases 0–6, and
473
- operator UX hardening for beta users.
474
-
475
- ### Headless SDK (minor — core / web / react / react-native)
476
-
477
- `MushiTrigger` (React + React Native) and `MushiAttach` (React) — wrap
478
- any element or DOM selector to trigger the Mushi widget without the
479
- floating button. The matching `SdkInstallCard` in the console now
480
- generates copy/paste snippets for both patterns.
481
-
482
- ### QA Coverage Suite (minor — core / web)
483
-
484
- Automated user-story tests run on cron through Playwright, Browserbase,
485
- or Firecrawl. Ships with `qa_stories` / `qa_story_runs` /
486
- `qa_story_evidence` schema, the `qa-story-runner` edge function, a
487
- pluggable browser-provider abstraction, and the full admin UI
488
- (`QaCoveragePage` + `QaCoverageTile`).
489
-
490
- ### Rewards program (minor — core / web / react / react-native)
491
-
492
- End-user rewards across all layers: configurable point rules,
493
- GDPR export, Stripe Connect payouts (Enterprise-gated), multi-step
494
- quests, SDK activity batching + tier badges, MCP catalog tools
495
- (`list_top_contributors`, `award_bonus_points`, `set_tier`).
496
-
497
- ### Closed-loop evolution — CLI + MCP (minor)
498
- - **`mushi sync-lessons`** — pulls promoted lessons from
499
- `/v1/admin/lessons` and writes `.mushi/lessons.json` into the
500
- connected repo (supports `--dry-run` and `--json`). Designed for
501
- CI and scheduled refresh PRs.
502
- - **MCP** — `lessons.query(diff_text, max_tokens)` tool for
503
- token-budget-ranked lesson injection into agent / PR-review flows;
504
- expanded catalog surface for Migration Hub and closed-loop resources.
505
-
506
- ### Native parity (Capacitor minor; iOS/Android via Cocoapods/Maven)
507
-
508
- Capacitor re-exports `addBreadcrumb` / `getBreadcrumbs` and the 0.4.0
509
- native parity modules (BreadcrumbCollector, ProactiveDetector,
510
- PIIScrubber, ExceptionNormaliser). iOS/Android SDKs ship at 0.4.0 via
511
- native package managers — not npm.
512
-
513
- ### Plugin packaging (patch)
514
-
515
- PR #98 fixed six plugin packages that shipped with `workspace:*`
516
- instead of `workspace:^`, which broke `npm install` for end users.
517
-
518
- ### Patch surfaces
519
- - `@mushi-mushi/{vue,svelte,angular}` — re-export headless trigger helpers.
520
- - `@mushi-mushi/plugin-sentry` — expanded inbound adapter surface.
521
- - `@mushi-mushi/plugin-sdk` — event schema extensions for rewards +
522
- experiment hooks.
523
-
524
- ### Server + admin (not in this npm release)
525
-
526
- The following ship via Supabase Edge Functions + admin deploy, not npm:
527
- - Closed-loop Phases 1–6: mistake clustering, releases + credits, PDCA
528
- iterate loop, contract drift walker, A/B experiments, anomaly detection,
529
- `/cost` panel.
530
- - Beta banner + structured project-create error UX + personal-org
531
- bootstrap on signup.
532
- - Seven new admin tabs: `/lessons`, `/releases`, `/iterate`, `/drift`,
533
- `/experiments`, `/anomalies`, `/cost`.
534
- - Docs: `closed-loop.mdx`, `EvolutionDiagram`, `LoopComparison`.
535
- - `SELF_HOSTED.md` updated with `mushi.edge_function_post()` cron
536
- patterns (replaces broken `current_setting('app.settings.*')` GUCs).
537
-
538
- ### Patch Changes
539
-
540
- - Updated dependencies [506df78]
541
- - @mushi-mushi/core@1.2.0
542
-
543
- ## 0.11.0
544
-
545
- ### Minor Changes
546
-
547
- - 59627e2: Release the full SDK + closed-loop evolution backlog since v0.5.0
548
- (`cf27d81`, 2026-05-10). Covers headless SDK, QA Coverage Suite,
549
- rewards program, native 0.4.0 parity, closed-loop Phases 0–6, and
550
- operator UX hardening for beta users.
551
-
552
- ### Headless SDK (minor — core / web / react / react-native)
553
-
554
- `MushiTrigger` (React + React Native) and `MushiAttach` (React) — wrap
555
- any element or DOM selector to trigger the Mushi widget without the
556
- floating button. The matching `SdkInstallCard` in the console now
557
- generates copy/paste snippets for both patterns.
558
-
559
- ### QA Coverage Suite (minor — core / web)
560
-
561
- Automated user-story tests run on cron through Playwright, Browserbase,
562
- or Firecrawl. Ships with `qa_stories` / `qa_story_runs` /
563
- `qa_story_evidence` schema, the `qa-story-runner` edge function, a
564
- pluggable browser-provider abstraction, and the full admin UI
565
- (`QaCoveragePage` + `QaCoverageTile`).
566
-
567
- ### Rewards program (minor — core / web / react / react-native)
568
-
569
- End-user rewards across all layers: configurable point rules,
570
- GDPR export, Stripe Connect payouts (Enterprise-gated), multi-step
571
- quests, SDK activity batching + tier badges, MCP catalog tools
572
- (`list_top_contributors`, `award_bonus_points`, `set_tier`).
573
-
574
- ### Closed-loop evolution — CLI + MCP (minor)
575
- - **`mushi sync-lessons`** — pulls promoted lessons from
576
- `/v1/admin/lessons` and writes `.mushi/lessons.json` into the
577
- connected repo (supports `--dry-run` and `--json`). Designed for
578
- CI and scheduled refresh PRs.
579
- - **MCP** — `lessons.query(diff_text, max_tokens)` tool for
580
- token-budget-ranked lesson injection into agent / PR-review flows;
581
- expanded catalog surface for Migration Hub and closed-loop resources.
582
-
583
- ### Native parity (Capacitor minor; iOS/Android via Cocoapods/Maven)
584
-
585
- Capacitor re-exports `addBreadcrumb` / `getBreadcrumbs` and the 0.4.0
586
- native parity modules (BreadcrumbCollector, ProactiveDetector,
587
- PIIScrubber, ExceptionNormaliser). iOS/Android SDKs ship at 0.4.0 via
588
- native package managers — not npm.
589
-
590
- ### Hermes compatibility fix (react-native — patch within minor)
591
-
592
- `packages/react-native/src/provider.tsx` — replaced `new Function()` with
593
- dynamic `import()` (which Hermes 0.84 rejects with `SyntaxError`) with
594
- `require()` wrapped in `try/catch` for both `@react-native-community/netinfo`
595
- and `expo-sensors`. The `shake` and `network` auto-triggers now work correctly
596
- on all Hermes-based RN apps. Companion admin-console improvements:
597
- - `apps/admin/src/lib/frameworkDetect.ts` (new) — paste-your-`package.json`
598
- framework + monorepo detector (React, Vue, Svelte, RN/Expo/Capacitor,
599
- Angular, Vanilla; npm/yarn/pnpm workspaces, Turborepo, Nx, Lerna, Rush)
600
- with confidence scoring, ELI5 guidance, and Hermes version warnings.
601
- - `SdkInstallCard.tsx` — integrates the detector: framework tab is auto-
602
- selected and monorepo install guidance is surfaced on paste.
603
- - `McpPage.tsx` — collapsible monorepo detector panel for workspace-scoped
604
- `mushi-mcp` install guidance.
605
- - `ProjectsPage.tsx` — copyable `MUSHI_PROJECT_ID` chip under each project
606
- card (answers the #1 "where do I find my project ID?" support question).
607
- - `packages/mcp/src/index.ts` — actionable warning when `MUSHI_PROJECT_ID`
608
- is not set, with direct link to the console.
609
-
610
- ### Plugin packaging (patch)
611
-
612
- PR #98 fixed six plugin packages that shipped with `workspace:*`
613
- instead of `workspace:^`, which broke `npm install` for end users.
614
-
615
- ### Patch surfaces
616
- - `@mushi-mushi/{vue,svelte,angular}` — re-export headless trigger helpers.
617
- - `@mushi-mushi/plugin-sentry` — expanded inbound adapter surface.
618
- - `@mushi-mushi/plugin-sdk` — event schema extensions for rewards +
619
- experiment hooks.
620
-
621
- ### Server + admin (not in this npm release)
622
-
623
- The following ship via Supabase Edge Functions + admin deploy, not npm:
624
- - Closed-loop Phases 1–6: mistake clustering, releases + credits, PDCA
625
- iterate loop, contract drift walker, A/B experiments, anomaly detection,
626
- `/cost` panel.
627
- - Beta banner + structured project-create error UX + personal-org
628
- bootstrap on signup.
629
- - Seven new admin tabs: `/lessons`, `/releases`, `/iterate`, `/drift`,
630
- `/experiments`, `/anomalies`, `/cost`.
631
- - Docs: `closed-loop.mdx`, `EvolutionDiagram`, `LoopComparison`.
632
- - `SELF_HOSTED.md` updated with `mushi.edge_function_post()` cron
633
- patterns (replaces broken `current_setting('app.settings.*')` GUCs).
634
-
635
- ### Patch Changes
636
-
637
- - Updated dependencies [59627e2]
638
- - @mushi-mushi/core@1.1.0
639
-
640
- ## 0.8.2
641
-
642
- ### Patch Changes
643
-
644
- - Updated dependencies [84118af]
645
- - @mushi-mushi/core@1.0.0
646
-
647
- ## 0.8.1
648
-
649
- ### Patch Changes
650
-
651
- - Updated dependencies [5e04203]
652
- - @mushi-mushi/core@0.9.0
653
-
654
- ## 0.8.0
655
-
656
- ### Minor Changes
657
-
658
- - ef0036d: Ship SDK dogfood hardening and a two-way reporter channel.
659
- - Ignore Mushi's own config/report/notification requests in network capture and proactive API cascade detection.
660
- - Add `Mushi.diagnose()` for endpoint, CSP, widget, capture, runtime-config, and SDK-version health checks.
661
- - Send `sdkPackage` and `sdkVersion` with reports, expose `/v1/sdk/latest-version`, and surface outdated SDK state in the widget.
662
- - Add `widget.anchor`, deployment presets, privacy screenshot masks/blocks, screenshot removal, `setScreen()`, and normalized repro timelines.
663
- - Add reporter history/reply APIs so the widget can show report status, developer replies, and reporter responses.
664
- - Add Capacitor bottom-dock trigger inset presets.
665
-
666
- ### Patch Changes
667
-
668
- - Updated dependencies [ef0036d]
669
- - @mushi-mushi/core@0.8.0
670
-
671
- ## 0.7.0
672
-
673
- ### Minor Changes
674
-
675
- - 15462c8: Add production-grade trigger controls for embedded apps: manual and attach modes, runtime show/hide APIs, edge-tab and smart-hide behavior, configurable insets, and React Native custom launcher/shake support.
676
-
677
- ### Patch Changes
678
-
679
- - Updated dependencies [15462c8]
680
- - @mushi-mushi/core@0.7.0
681
-
682
- ## 0.3.2
683
-
684
- ### Patch Changes
685
-
686
- - Updated dependencies [48858bb]
687
- - @mushi-mushi/core@0.5.0
688
-
689
- ## 0.3.1
690
-
691
- ### Patch Changes
692
-
693
- - d4d6933: Growth plan — storefronts pass (2026-04-24)
694
-
695
- Phase 0 of the zero-budget 90-day growth plan: polishing the npm pages and
696
- README so they convert attention into stars and installs. No behaviour changes;
697
- metadata only.
698
- - **npm keyword arrays expanded across all 14 publishable packages.** Added
699
- discoverability terms developers actually type into npm search:
700
- `user-report`, `feedback-widget`, `sentry-alternative`, `auto-fix`,
701
- `llm-ops`, `ai-agent`, plus framework-appropriate specifics (e.g.
702
- `claude-code`, `codex`, `copilot` on `@mushi-mushi/mcp`). Keyword counts
703
- after the pass: 14–32 per package.
704
- - **README star CTA footer.** Added the bilingual _"もしMushi-chanのお役に立てたら、
705
- ⭐ をひとつ"_ line with links to the stargazers page, issue tracker, and
706
- Bluesky handle. Research says a single explicit star ask converts 2–5% of
707
- lurkers.
708
- - **New `docs/marketing/` folder** with the full growth kit: `VOICE.md`,
709
- `STOREFRONTS.md`, `snippets.md` (drafted hooks, Show HN, Reddit, LinkedIn,
710
- dev.to, Product Hunt, YouTube Short), `launch-week.md`, `content-plan.md`
711
- (8 compounding blog post outlines), `drip-channels.md` (11 awesome-lists,
712
- 9 newsletter targets, Discord / Slack etiquette), `social-cadence.md`
713
- (Bluesky / X weekly rhythm), and `measurement.md` (the 5 numbers to watch
714
- each Friday).
715
-
716
- No SDK surface or runtime changes — safe to land before any launch week.
717
-
718
- - Updated dependencies [d4d6933]
719
- - @mushi-mushi/core@0.4.1
720
-
721
- ## 0.3.0
722
-
723
- ### Minor Changes
724
-
725
- - 71b2fe8: Full-PDCA dogfood hardening wave (2026-04-22).
726
-
727
- Web SDK:
728
- - New `@mushi-mushi/web/test-utils` entry-point exposing `triggerBug()`,
729
- `openReport()`, and `waitForQueueDrain()` for deterministic Playwright
730
- round-trips. Import from `@mushi-mushi/web/test-utils` — zero cost at
731
- runtime for production bundles.
732
- - Tightened size-limit budget to 15 KB gzipped (previously 30 KB
733
- uncompressed). No API changes.
734
-
735
- Core SDK:
736
- - No code changes; bumped for consistency with the `web` SDK so
737
- downstream frameworks pick up the new test-utils exports transitively.
738
-
739
- Framework SDKs (react / vue / svelte / angular / react-native /
740
- capacitor / node):
741
- - No code changes. Coupled minor bump so the workspace stays on a single
742
- MAJOR.MINOR track; patch-only drift across adapters has historically
743
- caused dependency-resolution confusion for customers.
744
-
745
- Launcher:
746
- - Rewired the Claude Code agent adapter behind the new
747
- `MUSHI_ENABLE_CLAUDE_CODE_AGENT=1` flag and wired it up to the local
748
- `claude` CLI (binary path overridable via `MUSHI_CLAUDE_CODE_BIN`).
749
- The README "Status" column now reflects "working — opt-in".
750
-
751
- ### Patch Changes
752
-
753
- - Updated dependencies [71b2fe8]
754
- - @mushi-mushi/core@0.4.0
755
-
756
- ## 0.2.3
757
-
758
- ### Patch Changes
759
-
760
- - 6e01dc7: Ship `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, and `SECURITY.md` inside every published tarball, and enable npm provenance (sigstore-signed build attestation) for every publishable package. Both changes target package-health signals surfaced by Snyk (`security.snyk.io/package/npm/<name>`) and Socket (`socket.dev/npm/package/<name>`):
761
- - **Community files in-tarball.** Snyk and Socket only credit community signals when the files are shipped inside the npm tarball, not when they live at the monorepo root. A pre-commit guard (`scripts/sync-community-files.mjs --check`) and the `pnpm release` script now auto-sync from the canonical root copies to prevent drift.
762
- - **`publishConfig.provenance: true` everywhere.** The Release workflow already set `NPM_CONFIG_PROVENANCE=true` at the job level, but per-package `publishConfig` is the explicit signal Socket reads for its Supply Chain score. `@mushi-mushi/cli`, `create-mushi-mushi`, and `mushi-mushi` already had it; the remaining 20 publishable packages now match.
763
- - **`.github/FUNDING.yml`** points at GitHub Sponsors so the repo exposes a funding signal to scanners and the GitHub UI.
764
-
765
- No runtime behaviour changes. No breaking changes for consumers.
766
-
767
- - Updated dependencies [6e01dc7]
768
- - @mushi-mushi/core@0.3.1
769
-
770
- ## 0.2.2
771
-
772
- ### Patch Changes
773
-
774
- - Updated dependencies [81336e9]
775
- - @mushi-mushi/core@0.3.0
776
-
777
- ## 0.2.1
778
-
779
- ### Patch Changes
780
-
781
- - fc5c58e: **One-command setup wizard + npm discoverability sweep.**
782
- - **`@mushi-mushi/cli` `0.3.0`**: New `mushi init` command — interactive wizard built on `@clack/prompts` that auto-detects framework (Next, Nuxt, SvelteKit, Angular, Expo, Capacitor, plain React/Vue/Svelte, vanilla), package manager (npm/pnpm/yarn/bun), installs the right SDK, writes env vars with the right prefix (`NEXT_PUBLIC_`, `NUXT_PUBLIC_`, `VITE_`), warns when `.env.local` isn't gitignored, and prints the framework-specific snippet. Idempotent: never overwrites existing `MUSHI_*` env vars. Exposes new `./init` and `./detect` subpath exports for downstream packages.
783
- - **`mushi-mushi` `0.3.0` (NEW, unscoped)**: One-command launcher — `npx mushi-mushi` runs the wizard. Gives the SDK a single brand entry point on npm so users don't have to know to look under `@mushi-mushi/*` first.
784
- - **`create-mushi-mushi` `0.3.0` (NEW)**: `npm create mushi-mushi` — same wizard via the standard npm-create convention.
785
- - **All 16 published packages**: keyword sweep — every package now ships `mushi-mushi` plus its framework-specific terms (`react`, `next.js`, `vue`, `nuxt`, `svelte`, `sveltekit`, `angular`, `react-native`, `expo`, `capacitor`, `ionic`, etc.) plus product terms (`session-replay`, `screenshot`, `shake-to-report`, `sentry-companion`, `error-tracking`, `ai-triage`) for npm search ranking.
786
- - **All SDK READMEs**: discoverability cross-link header at the top — points users to the wizard and to every other framework SDK so people who land on `@mushi-mushi/react` can find `@mushi-mushi/vue` and vice-versa.
787
- - **Root README**: quick-start now leads with `npx mushi-mushi`, with the manual install path documented as the fallback. Packages table gains a row for the launcher.
788
-
789
- - Updated dependencies [fc5c58e]
790
- - Updated dependencies [41b6aa7]
791
- - @mushi-mushi/core@0.2.1
792
-
793
- ## 0.2.0
794
-
795
- ### Minor Changes
796
-
797
- - 7567cee: # v0.6.0 — hardening + agentic-fix orchestration
798
-
799
- This release closes the highest-priority gaps between the V5 whitepaper and the
800
- running code. It is the first of four releases on the [V5.3 roadmap](../MushiMushi_Whitepaper_V5.md#appendix-c-implementation-roadmap)
801
- and the breaking-change surface is **zero** for SDK consumers.
802
-
803
- ## Highlights
804
- - **Vision air-gap**: Stage-2 vision analysis now sees the screenshot only with
805
- trusted metadata; visible text in the image is captured separately and
806
- flagged so prompt-injection attempts (e.g. an attacker writing "ignore all
807
- previous instructions" inside their screenshot) cannot influence
808
- classification. (V5.3 §2.3.2)
809
- - **Judge OpenAI fallback**: `judge-batch` now falls back to OpenAI
810
- (`gpt-4.1` by default) when Anthropic is unavailable, restoring the
811
- self-improvement loop during outages. Configure via
812
- `project_settings.judge_fallback_provider`. (V5.3 §2.7)
813
- - **Blast-radius MV refresh**: `blast_radius_cache` is now refreshed every
814
- 15 minutes via `pg_cron` with a `REFRESH MATERIALIZED VIEW CONCURRENTLY`
815
- guarded by an advisory lock. Per-project graph-edge pruning runs nightly.
816
- (V5.3 §2.4)
817
- - **RAG codebase indexer**: GitHub App webhook + `mushi index <path>` CLI
818
- fallback for non-GitHub git hosts. Symbol-aware chunking (TS/TSX, JS/JSX,
819
- Python, Go, Rust). (V5.3 §2.3.4)
820
- - **Fix dispatch end-to-end**: Admin can dispatch fixes from the report detail
821
- page; status streams over Hono `streamSSE` with Bearer auth and
822
- CVE-2026-29085-safe sanitization. (V5.3 §2.10, §2.16)
823
- - **Sandbox provider abstraction**: `local-noop` (tests) and `e2b` (managed
824
- sandbox) implementations behind a `SandboxProvider` interface; per-event
825
- audit log in `fix_sandbox_events`. The orchestrator refuses `local-noop` in
826
- production. (V5.3 §2.10)
827
- - **True MCP adapter**: `McpFixAgent` speaks JSON-RPC 2.0 with `tools/call`
828
- and supports SEP-1686 long-running Tasks. The misnamed `generic_mcp` agent
829
- is renamed to `rest_fix_worker`; the old export is kept as a deprecated
830
- alias for one more minor. (V5.3 §2.10)
831
- - **BYOK schema**: `byok_anthropic_key_ref` / `byok_openai_key_ref` columns
832
- with audit log; resolver helper falls back to env when no BYOK is set.
833
- End-to-end wiring lands in v0.8.0. (V5.3 §2.18)
834
-
835
- ## Cross-cutting fixes
836
- - Widget min description length raised from 5 to 20 chars (server zod schema
837
- matched). Empirically removes ~30% of unactionable reports.
838
- - `recordPromptResult` now scopes by `(project_id, stage, version)` so two
839
- projects sharing a version label cannot corrupt each other's running
840
- averages. New unique index enforces this.
841
- - Cloud URL: SDK default endpoint now points at the live Supabase Cloud
842
- function URL instead of the unbound `api.mushimushi.dev` placeholder.
843
- Self-hosted users MUST override `apiEndpoint` (no behaviour change).
844
- - README updated to honestly reflect what's shipped vs. scaffolded.
845
-
846
- ## Migrations included
847
-
848
- `20260418000000_vision_air_gap`, `20260418000100_judge_fallback`,
849
- `20260418000200_blast_radius_mv_refresh`, `20260418000300_codebase_indexer`,
850
- `20260418000400_fix_dispatch_jobs`, `20260418000500_sandbox_audit`,
851
- `20260418000600_mcp_agent_enum`, `20260418000700_prompt_versions_unique`,
852
- `20260418000800_byok_keys`.
853
-
854
- ## Breaking changes
855
-
856
- None for SDK consumers. Operators with custom `autofix_agent = 'generic_mcp'`
857
- should migrate to `'rest_fix_worker'` (deprecated alias still works through v0.7).
858
-
859
- - 7567cee: # v0.7.0 — on-device classification, real-time triage, AG-UI, fine-tune pipeline, intelligence reports, AGE phase 1
860
-
861
- focuses on intelligence and operator UX: cheaper inference (move junk
862
- filtering on-device), live collaboration on the report queue, a typed
863
- agent↔frontend streaming protocol, and a real fine-tune lifecycle.
864
-
865
- This release is **non-breaking** for SDK consumers. New surface only.
866
-
867
- ## Highlights
868
- - **On-device pre-classifier** (`@mushi-mushi/wasm-classifier`, public 0.1.0):
869
- ships both a zero-dependency heuristic mode and an ONNX mode (lazy-loads
870
- `onnxruntime-web` only when wired up). Plugs into `submitReport` via
871
- `preFilter.wasmClassifier`. Cuts LLM cost by ~25-40% on noisy widgets and
872
- keeps obvious junk on-device. (V5.3 §2.13)
873
- - **Real-time collaboration on reports**: `report_comments` (threaded,
874
- optionally visible to the reporter) and `report_presence` (15-second TTL,
875
- pruned via `pg_cron`). Admin `ReportDetailPage` now shows presence badges
876
- and a comments panel powered by Supabase Realtime. (V5.3 §2.14)
877
- - **AG-UI streaming protocol** (v0.4): the fix-dispatch SSE stream now emits
878
- typed envelopes (`run.started`, `run.status`, `run.tool_call`,
879
- `run.completed`, `run.failed`, `run.heartbeat`) alongside the legacy
880
- `event: status` frames. Backwards compatible. CVE-2026-29085 sanitization
881
- re-validated for the structured envelope. (V5.3 §2.15)
882
- - **Fine-tune pipeline**: extended `fine_tuning_jobs` with
883
- `export_format`, `validation_report`, `promote_to_stage` and friends.
884
- New helpers `gatherTrainingSamples`, `renderJsonl`, `validateTrainedModel`,
885
- `promoteFineTunedModel`. New REST endpoints
886
- `POST /v1/admin/fine-tuning/:id/{export,validate,promote,reject}`.
887
- Admin UI surfaces the full pipeline stepper with PII-leakage and accuracy
888
- gates before promote is allowed. (V5.3 §2.15 self-improvement loop)
889
- - **Bug intelligence reports**: weekly digests are now persisted to
890
- `intelligence_reports`, listable via `GET /v1/admin/intelligence`, and
891
- exportable as PDF via the browser's native print pipeline (zero new
892
- npm dependencies). New admin page surfaces history + a printable HTML
893
- preview per week. (V5.3 §2.16)
894
- - **Opt-in cross-customer benchmarking**: `intelligence_benchmarks_mv`
895
- enforces k-anonymity ≥ 5 contributing projects per bucket. Per-project
896
- opt-in toggle in Settings; off by default. No project IDs, names, or PII
897
- leak across tenants. Refreshed nightly via `pg_cron`. (V5.3 §2.16)
898
- - **Apache AGE parallel-write graph backend (Phase 1)**: opt-in
899
- `graph_backend = 'sql_age_parallel'` setting mirrors every node/edge into
900
- AGE through SECURITY DEFINER helpers. AGE failures are logged, never
901
- fatal. New `mushi_age_snapshot_drift()` and admin
902
- `GET /v1/admin/graph-backend/status` for drift visibility. SQL stays
903
- authoritative; cutover is reserved for Phase 3 in V5.5. (V5.3 §2.17)
904
-
905
- ## Migrations included
906
-
907
- `20260418000900_realtime_collab`, `20260418001000_finetune_pipeline`,
908
- `20260418001100_intelligence_reports`, `20260418001200_age_parallel_write`.
909
-
910
- ## New dependencies
911
- - `@mushi-mushi/wasm-classifier@0.1.0` — published as a separate package so
912
- consumers who don't want the ONNX runtime in their bundle can stay on the
913
- heuristic mode.
914
-
915
- ## Breaking changes
916
-
917
- None.
918
-
919
- ## Operator notes
920
- - AGE parallel-write is **disabled by default** and requires the AGE
921
- extension to be installed in your Postgres. Managed Supabase Postgres
922
- does not currently ship AGE; the helpers degrade to graceful no-ops.
923
- See `packages/server/supabase/functions/_shared/age-graph.README.md`
924
- for the rollout phases and acceptance criteria for Phase 2 / Phase 3.
925
- - Cross-customer benchmarking opt-in writes a timestamp + the user id who
926
- flipped the switch to `project_settings.benchmarking_optin_*`. There is
927
- no automatic opt-in based on contract type — it is always explicit owner
928
- action.
929
- - The fine-tune validation gate refuses promotion if any of the following
930
- hold on the latest validation report: `accuracy < 0.85`, `driftScore > 0.25`,
931
- or `piiLeakageDetected = true`. Override requires re-running validation
932
- against a corrected eval set; there is intentionally no force-promote.
933
-
934
- - 7567cee: # v0.8.0 — mobile parity, A2A discovery, SOC 2 readiness, residency, BYO storage, BYOK
935
-
936
- closes the platform-parity gap with the V5.3 whitepaper. Mobile gets
937
- first-class native SDKs, the public agent surface becomes A2A-discoverable,
938
- and customers gain the operational levers (residency, storage, keys, audit
939
- evidence) needed to run Mushi in regulated environments.
940
-
941
- This release is **non-breaking** for existing SDK consumers. New surface only.
942
-
943
- ## Highlights
944
- - **Native iOS SDK** (`MushiMushi`, SwiftPM + CocoaPods): shake-to-report
945
- widget, offline queue with SQLite-backed retry, automatic device context
946
- capture, screenshot capture via `UIGraphicsImageRenderer`, optional Sentry
947
- bridge for unified breadcrumbs, and a macOS GitHub Actions matrix.
948
- (V5.3 §2.18)
949
- - **Native Android SDK** (`dev.mushimushi:sdk`, Maven Central + AAR):
950
- feature-equivalent to the iOS SDK — shake detection via `SensorManager`,
951
- bottom-sheet capture UI, `OfflineQueue` with `WorkManager`-style retry,
952
- Sentry breadcrumb bridge, and Android CI. (V5.3 §2.18)
953
- - **Flutter SDK** (`mushi_mushi` on pub.dev): pure-Dart with platform
954
- channel bridges, `RepaintBoundary`-driven screenshot capture, shake
955
- detection via `sensors_plus`, and reuses the same offline-queue
956
- contract as the JS Core SDK. (V5.3 §2.18)
957
- - **Capacitor plugin** (`@mushi-mushi/capacitor`): web fallback delegates
958
- to `@mushi-mushi/core`; native iOS/Android delegate to the standalone
959
- native SDKs so a hybrid app gets the same shake/screenshot UX as a
960
- native app. (V5.3 §2.18)
961
- - **A2A Agent Card discovery**: public endpoints
962
- `GET /.well-known/agent-card` and `GET /v1/agent-card` advertise the
963
- Mushi agent's identity, skills, supported A2A versions, MCP transport
964
- details and auth requirements per the A2A protocol. Other agents can
965
- now negotiate with the Mushi platform without out-of-band config.
966
- (V5.3 §2.19)
967
- - **SOC 2 Type 1 readiness module**: new tables
968
- `project_retention_policies`, `data_subject_requests`, `soc2_evidence`,
969
- the `mushi_apply_retention()` and `mushi_rls_coverage_snapshot()`
970
- SECURITY DEFINER helpers, a nightly `soc2-evidence` Edge Function, and
971
- a new admin **Compliance** page that surfaces the latest control
972
- evidence (CC6.1, CC6.7, CC7.2, CC8.1, A1.2), DSAR queue, and per-table
973
- retention policies. (V5.3 §2.20)
974
- - **Data residency regions (US / EU / JP)**: opt-in pinning per project,
975
- cluster-aware `regionRouter` middleware that 307-redirects cross-region
976
- calls, an SDK-side `resolveRegionEndpoint` that primes a localStorage
977
- cache so subsequent calls go straight to the right cluster, and a
978
- public `region_routing` lookup table. The US cluster remains the
979
- catalog of record for project metadata. (V5.3 §2.21)
980
- - **BYO Storage abstraction** (`s3` / `r2` / `gcs` / `minio` / `supabase`):
981
- per-project `project_storage_settings`, a vault-backed credential model
982
- (no raw keys in DB), a zero-dependency `StorageAdapter` with inline
983
- SigV4 and GCS JWT signing, a healthcheck endpoint, and a new admin
984
- **Storage** page. Screenshots are now uploaded through the adapter
985
- end-to-end. (V5.3 §2.22)
986
- - **BYOK Anthropic / OpenAI keys end-to-end**: `resolveLlmKey` now
987
- flows through `fast-filter`, `classify-report` (text + vision), and
988
- `judge-batch`. Every LLM invocation records `key_source` (`byok`
989
- vs `env`) for billing reconciliation and SOC 2 evidence. New admin
990
- endpoints `GET / PUT / DELETE /v1/admin/byok/:provider` write keys
991
- to Supabase Vault via SECURITY DEFINER `vault_store_secret`, never
992
- to plain DB columns. New **Settings → LLM Keys** panel exposes
993
- rotation, clearing, and last-used timestamps with `…<last4>` hints.
994
- (V5.3 §2.23)
995
-
996
- ## Migrations included
997
-
998
- `20260418001300_soc2_readiness`, `20260418001400_data_residency`,
999
- `20260418001500_byo_storage`, `20260418001600_byok_key_source`.
1000
-
1001
- ## New packages
1002
- - `@mushi-mushi/capacitor@0.2.0` — Capacitor plugin published to npm.
1003
- - `MushiMushi` (iOS) — published to CocoaPods + SwiftPM.
1004
- - `dev.mushimushi:sdk` (Android) — published to Maven Central.
1005
- - `mushi_mushi` (Flutter) — published to pub.dev.
1006
-
1007
- ## Breaking changes
1008
-
1009
- None.
1010
-
1011
- ## Operator notes
1012
- - **Region rollout**: a single-region deploy continues to work unchanged.
1013
- To enable EU/JP, deploy a sibling Supabase project per region, set
1014
- `MUSHI_REGION` on each Edge Function deployment, and CNAME
1015
- `eu.api.mushimushi.dev` / `jp.api.mushimushi.dev` to the corresponding
1016
- cluster. SDKs auto-discover via `/v1/region/resolve` — no SDK upgrade
1017
- required for old clients (they just won't get the redirect optimization).
1018
- - **BYO Storage**: secrets MUST be loaded into Supabase Vault before being
1019
- referenced from `project_storage_settings`. The settings table only
1020
- stores the _vault entry name_; misconfiguration falls back to the
1021
- cluster default Supabase bucket and surfaces in the storage healthcheck
1022
- as `degraded` rather than failing reports.
1023
- - **BYOK**: rotating a key is non-destructive — the old vault entry is
1024
- overwritten and the next LLM call picks up the new value within one
1025
- second (settings cache TTL). To force every node to drop its cached
1026
- resolution, the admin UI's **Clear** button issues a Vault delete plus
1027
- a settings upsert that nulls the ref column.
1028
- - **SOC 2**: the nightly evidence sweep and retention sweep are scheduled
1029
- via `pg_cron`. Verify both jobs are active with
1030
- `SELECT jobname, schedule FROM cron.job WHERE jobname LIKE 'soc2-%' OR jobname LIKE 'mushi-%';`.
1031
- - **A2A Agent Card** is intentionally public (no auth) so peer agents can
1032
- discover Mushi. It advertises auth requirements but never the keys
1033
- themselves.
1034
-
1035
- ### Patch Changes
1036
-
1037
- - 7567cee: Republish all SDK packages with resolved dependency specifiers.
1038
-
1039
- The 0.1.0 tarballs were published with `"@mushi-mushi/core": "workspace:*"` (and similar) baked into `dependencies` because `changeset publish` ran without `changeset version` having rewritten the workspace protocol. Every external `npm install` failed with `EUNSUPPORTEDPROTOCOL`.
1040
-
1041
- This patch republishes every SDK package with real semver ranges in its dependencies. A new pre-publish guard (`scripts/check-workspace-protocol.mjs`) and post-publish verifier (`scripts/verify-published-tarballs.mjs`) prevent recurrence.
1042
-
1043
- - Updated dependencies [7567cee]
1044
- - Updated dependencies [7567cee]
1045
- - Updated dependencies [7567cee]
1046
- - Updated dependencies [7567cee]
1047
- - @mushi-mushi/core@0.2.0
1048
-
1049
- ## 0.1.0
1050
-
1051
- ### Minor Changes
1052
-
1053
- - Initial public release of the Mushi Mushi SDK platform.
1054
- - `@mushi-mushi/core` — universal bug-report engine with structured logging, PII scrubbing, offline queue
1055
- - `@mushi-mushi/web` — browser SDK with session replay, console/network/click capture, proactive detection
1056
- - `@mushi-mushi/react` — React hooks and provider (`MushiProvider`, `useMushi`, `useMushiReport`)
1057
- - `@mushi-mushi/react-native` — React Native SDK with shake-to-report and bottom sheet widget
1058
- - `@mushi-mushi/vue` — Vue 3 composables (`useMushi`) and plugin
1059
- - `@mushi-mushi/svelte` — Svelte stores and context integration
1060
- - `@mushi-mushi/angular` — Angular service and module
1061
- - `@mushi-mushi/mcp` — Model Context Protocol server for AI-assisted triage
1062
- - `@mushi-mushi/cli` — CLI for project setup and report management