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