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