@mushi-mushi/react-native 0.20.1 → 0.22.0

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