@mushi-mushi/mcp 0.29.0 → 0.29.2

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/README.md CHANGED
@@ -9,6 +9,8 @@
9
9
 
10
10
  The [Model Context Protocol](https://modelcontextprotocol.io/) server for [Mushi Mushi](https://github.com/kensaurus/mushi-mushi). It lets Cursor, Claude Code, VS Code or any MCP client read your app's bug reports, get a plain-English diagnosis with a fix to start from, and dispatch or merge fixes. Your editor's own model does the work, so you need no second LLM key.
11
11
 
12
+ Docs: [MCP guide](https://kensaur.us/mushi-mushi/docs/sdks/mcp) · [tool reference](https://kensaur.us/mushi-mushi/docs/sdks/mcp-tools)
13
+
12
14
  ```mermaid
13
15
  flowchart LR
14
16
  A["Bug reports<br/>in Mushi"] --> B["This MCP server"] --> C["Your editor<br/>'what's broken in prod?'"] --> D["Fix: you, or a<br/>draft PR from an agent"]
@@ -29,7 +31,7 @@ Restart the editor and ask *"what's broken in prod?"*. For Cursor and Claude, `s
29
31
  "mcpServers": {
30
32
  "mushi-mushi": {
31
33
  "command": "npx",
32
- "args": ["-y", "@mushi-mushi/mcp@0.29.0"],
34
+ "args": ["-y", "@mushi-mushi/mcp@0.29.2"],
33
35
  "env": {
34
36
  "MUSHI_API_KEY": "mushi_xxxxxxxxxxxxxxxxxxxx",
35
37
  "MUSHI_PROJECT_ID": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
package/dist/catalog.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  TOOL_CATALOG,
9
9
  USE_MUSHI_INTENTS,
10
10
  routeUseMushiIntent
11
- } from "./chunk-MOW6PVHK.js";
11
+ } from "./chunk-6SHKBN6R.js";
12
12
  export {
13
13
  ALL_SCOPES,
14
14
  CODEBASE_TOOL_CATALOG,
@@ -120,7 +120,7 @@ var TOOL_CATALOG = [
120
120
  {
121
121
  name: "list_gate_findings",
122
122
  title: "Gate findings",
123
- description: "List recent inventory gate runs and their findings for a project, newest first. Returns { runs: [{ id, gate, status, findings_count, \u2026 }], findings: [{ severity, rule_id, message, file_path, node_id, \u2026 }] }. Filter by gate (dead_handler | mock_leak | api_contract | crawl | status_claim | spec_drift | orphan_endpoint | unknown_call | schema_drift | code_health | design_drift | ci_drift | deploy_drift | env_drift | radar | portfolio_radar | portfolio_radar_ci | store_review) or finding severity (info | warn | error). The *_drift gates are the App Recipe checks: design_drift is code that drifts off the design tokens, ci_drift / deploy_drift / env_drift are CI, deploy and env vars that drift from the recipe; radar is the Mushi setup checks (a rejected provider key, no spend cap or AI budget, a webhook that never delivered, a stale code index), each with a suggested_fix (a spend-cap fix is applied in the console by a signed-in project admin, not through an API key); portfolio_radar / portfolio_radar_ci / store_review are the app hole checks (prefer get_radar). Available on every plan. Read-only. Use to see which CI gates failed on the last crawl; use diff_inventory to compare two commits, or get_inventory for the full snapshot.",
123
+ description: "List recent inventory gate runs and their findings for a project, newest first. Returns { runs: [{ id, gate, status, findings_count, \u2026 }], findings: [{ severity, rule_id, message, file_path, node_id, \u2026 }] }. Filter by gate (dead_handler | mock_leak | api_contract | crawl | status_claim | spec_drift | orphan_endpoint | unknown_call | schema_drift | code_health | design_drift | ci_drift | deploy_drift | env_drift | radar | portfolio_radar | portfolio_radar_ci | portfolio_radar_vulns | store_review) or finding severity (info | warn | error). The *_drift gates are the App Recipe checks: design_drift is code that drifts off the design tokens, ci_drift / deploy_drift / env_drift are CI, deploy and env vars that drift from the recipe; radar is the Mushi setup checks (a rejected provider key, no spend cap or AI budget, a webhook that never delivered, a stale code index), each with a suggested_fix (a spend-cap fix is applied in the console by a signed-in project admin, not through an API key); portfolio_radar / portfolio_radar_ci / portfolio_radar_vulns / store_review are the app hole checks (prefer get_radar). Available on every plan. Read-only. Use to see which CI gates failed on the last crawl; use diff_inventory to compare two commits, or get_inventory for the full snapshot.",
124
124
  scope: "mcp:read",
125
125
  hints: { readOnly: true, idempotent: true, openWorld: true },
126
126
  useCase: "Show me what CI gates failed on the last run."
package/dist/clients.d.ts CHANGED
@@ -49,7 +49,7 @@ import { FeatureGroup } from './feature-groups.js';
49
49
  * editor launch. Synced to package.json by `scripts/sync-mcp-pin.mjs` — never
50
50
  * hand-edit the version.
51
51
  */
52
- declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.29.0";
52
+ declare const MCP_PIN_SPEC = "@mushi-mushi/mcp@0.29.2";
53
53
  interface StdioConfig {
54
54
  command: string;
55
55
  args: string[];
package/dist/clients.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-7RWHDJPZ.js";
9
9
 
10
10
  // src/clients.ts
11
- var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.29.0";
11
+ var MCP_PIN_SPEC = "@mushi-mushi/mcp@0.29.2";
12
12
  var PIN_SPEC_RE = /^@mushi-mushi\/mcp@\d+\.\d+\.\d+$/;
13
13
  function pinOf(pinSpec) {
14
14
  return pinSpec && PIN_SPEC_RE.test(pinSpec) ? pinSpec : MCP_PIN_SPEC;
package/dist/index.js CHANGED
@@ -196,7 +196,7 @@ var TOOL_CATALOG = [
196
196
  {
197
197
  name: "list_gate_findings",
198
198
  title: "Gate findings",
199
- description: "List recent inventory gate runs and their findings for a project, newest first. Returns { runs: [{ id, gate, status, findings_count, \u2026 }], findings: [{ severity, rule_id, message, file_path, node_id, \u2026 }] }. Filter by gate (dead_handler | mock_leak | api_contract | crawl | status_claim | spec_drift | orphan_endpoint | unknown_call | schema_drift | code_health | design_drift | ci_drift | deploy_drift | env_drift | radar | portfolio_radar | portfolio_radar_ci | store_review) or finding severity (info | warn | error). The *_drift gates are the App Recipe checks: design_drift is code that drifts off the design tokens, ci_drift / deploy_drift / env_drift are CI, deploy and env vars that drift from the recipe; radar is the Mushi setup checks (a rejected provider key, no spend cap or AI budget, a webhook that never delivered, a stale code index), each with a suggested_fix (a spend-cap fix is applied in the console by a signed-in project admin, not through an API key); portfolio_radar / portfolio_radar_ci / store_review are the app hole checks (prefer get_radar). Available on every plan. Read-only. Use to see which CI gates failed on the last crawl; use diff_inventory to compare two commits, or get_inventory for the full snapshot.",
199
+ description: "List recent inventory gate runs and their findings for a project, newest first. Returns { runs: [{ id, gate, status, findings_count, \u2026 }], findings: [{ severity, rule_id, message, file_path, node_id, \u2026 }] }. Filter by gate (dead_handler | mock_leak | api_contract | crawl | status_claim | spec_drift | orphan_endpoint | unknown_call | schema_drift | code_health | design_drift | ci_drift | deploy_drift | env_drift | radar | portfolio_radar | portfolio_radar_ci | portfolio_radar_vulns | store_review) or finding severity (info | warn | error). The *_drift gates are the App Recipe checks: design_drift is code that drifts off the design tokens, ci_drift / deploy_drift / env_drift are CI, deploy and env vars that drift from the recipe; radar is the Mushi setup checks (a rejected provider key, no spend cap or AI budget, a webhook that never delivered, a stale code index), each with a suggested_fix (a spend-cap fix is applied in the console by a signed-in project admin, not through an API key); portfolio_radar / portfolio_radar_ci / portfolio_radar_vulns / store_review are the app hole checks (prefer get_radar). Available on every plan. Read-only. Use to see which CI gates failed on the last crawl; use diff_inventory to compare two commits, or get_inventory for the full snapshot.",
200
200
  scope: "mcp:read",
201
201
  hints: { readOnly: true, idempotent: true, openWorld: true },
202
202
  useCase: "Show me what CI gates failed on the last run."
@@ -1489,7 +1489,7 @@ var MUSHI_DOCS_INDEX = [
1489
1489
  route: "/",
1490
1490
  markdown: "index.md",
1491
1491
  keywords: ["know", "ai-built", "app", "broke", "fix", "ready"],
1492
- headings: ["This is what a diagnosis looks like", "See it in action", "What this is (and is not)", "Get started with the SDK", "Install in your framework", "One queue. Sentry flows in, fixes flow out."],
1492
+ headings: ["The problem it solves", "A real example from our own sites", "What this is (and is not)", "Where it stands today", "This is what a diagnosis looks like", "See it in action", "Get started", "Install it in your app"],
1493
1493
  excerpt: "Your AI shipped it. Mushi tells you why it broke: a plain-English diagnosis and a ready fix in your editor. Open source, Sentry optional."
1494
1494
  },
1495
1495
  {
@@ -1618,6 +1618,15 @@ var MUSHI_DOCS_INDEX = [
1618
1618
  headings: ["What's tracked", "Charts", "Controlling costs", "Export", "Related pages"],
1619
1619
  excerpt: "The Cost page shows LLM token use and estimated spend per model and pipeline for a Mushi project, so you can see what each diagnosis costs."
1620
1620
  },
1621
+ {
1622
+ title: "Spend credits",
1623
+ url: docUrl("/admin/credits"),
1624
+ route: "/admin/credits",
1625
+ markdown: "admin/credits.md",
1626
+ keywords: ["admin", "credits", "spend"],
1627
+ headings: ["Cursor: fix bugs", "Cursor: improve your apps with skills", "Firecrawl: find bugs on your live sites", "Site audit", "Search rank", "Where the fixes go"],
1628
+ excerpt: "Spend credits lists expiring Cursor and Firecrawl credits and every way Mushi can spend them fixing bugs, improving apps with skills and checking sites."
1629
+ },
1621
1630
  {
1622
1631
  title: "Dashboard",
1623
1632
  url: docUrl("/admin/dashboard"),
@@ -1852,6 +1861,15 @@ var MUSHI_DOCS_INDEX = [
1852
1861
  headings: ["What you see", "Data source", "Related"],
1853
1862
  excerpt: "The Overview page is the organization-wide portfolio view \u2014 seven-day activity and open tickets for every connected project at a glance."
1854
1863
  },
1864
+ {
1865
+ title: "Pipeline",
1866
+ url: docUrl("/admin/pipeline"),
1867
+ route: "/admin/pipeline",
1868
+ markdown: "admin/pipeline.md",
1869
+ keywords: ["admin", "pipeline"],
1870
+ headings: ["Stages", "Who opens fixes", "Stuck groups", "Release trains", "Intake and deploys"],
1871
+ excerpt: "The console Pipeline page shows every bug from report to deploy, where it is stuck and why, with one-click fixes."
1872
+ },
1855
1873
  {
1856
1874
  title: "Portfolio",
1857
1875
  url: docUrl("/admin/portfolio"),
@@ -2065,7 +2083,7 @@ var MUSHI_DOCS_INDEX = [
2065
2083
  route: "/admin/ux-runs",
2066
2084
  markdown: "admin/ux-runs.md",
2067
2085
  keywords: ["admin", "ux-runs", "runs", "ux"],
2068
- headings: ["Run in the cloud", "What you see", "File as bug", "Where the changes are"],
2086
+ headings: ["Run in the cloud", "What you see", "File as bug", "Audit signed-in screens", "Where the changes are"],
2069
2087
  excerpt: "Each screen your coding agent worked on in a mushi ux run, with its plan, every attempt, before and after screenshots, and what was kept."
2070
2088
  },
2071
2089
  {
@@ -2338,6 +2356,15 @@ var MUSHI_DOCS_INDEX = [
2338
2356
  headings: ["Storage", "Why both pgvector and AGE?", "Indexing", "Bug Ontology"],
2339
2357
  excerpt: "How Mushi links reports, components, fixes and developers in a per-project knowledge graph, with pgvector for similarity and Apache AGE for traversal."
2340
2358
  },
2359
+ {
2360
+ title: "Known holes in dependencies",
2361
+ url: docUrl("/concepts/known-holes"),
2362
+ route: "/concepts/known-holes",
2363
+ markdown: "concepts/known-holes.md",
2364
+ keywords: ["concepts", "known-holes", "known", "holes", "dependencies"],
2365
+ headings: ["What Mushi checks", "What becomes a report", "How bad is it", "The fix", "What leaves Mushi", "Where to see it", "Data sources"],
2366
+ excerpt: "Mushi checks the exact versions in your lockfiles and runtime pins against published advisories, and files each fixable hole as a bug with the upgrade."
2367
+ },
2341
2368
  {
2342
2369
  title: "Multi-repo coordinated fixes",
2343
2370
  url: docUrl("/concepts/multi-repo-fixes"),
@@ -2668,8 +2695,8 @@ var MUSHI_DOCS_INDEX = [
2668
2695
  route: "/plugins/bugsnag",
2669
2696
  markdown: "plugins/bugsnag.md",
2670
2697
  keywords: ["plugins", "bugsnag"],
2671
- headings: ["Setup", "Package", "Events"],
2672
- excerpt: "Mirror Mushi bug reports into Bugsnag and close the Bugsnag error when the fix PR merges \u2014 install from the marketplace and map release stages."
2698
+ headings: ["Setup (self-hosted Mushi)", "Package", "Events"],
2699
+ excerpt: "Copy triaged Mushi bug reports into Bugsnag and mark the error fixed when Mushi applies a fix \u2014 a self-hosted plugin with a Data API token."
2673
2700
  },
2674
2701
  {
2675
2702
  title: "Building a plugin",
@@ -2686,8 +2713,8 @@ var MUSHI_DOCS_INDEX = [
2686
2713
  route: "/plugins/crashlytics",
2687
2714
  markdown: "plugins/crashlytics.md",
2688
2715
  keywords: ["plugins", "crashlytics"],
2689
- headings: ["Setup", "Package", "Events"],
2690
- excerpt: "Push Mushi mobile bug reports into Firebase Crashlytics issues and close them when fixes merge \u2014 service account setup and app ID mapping."
2716
+ headings: ["Setup (self-hosted Mushi)", "Package", "Events"],
2717
+ excerpt: "Flag fixed Mushi reports in Firebase Remote Config so your mobile app can hide stale crash notices \u2014 a self-hosted plugin with a Google access token."
2691
2718
  },
2692
2719
  {
2693
2720
  title: "Cursor Cloud Agent",
@@ -2695,7 +2722,7 @@ var MUSHI_DOCS_INDEX = [
2695
2722
  route: "/plugins/cursor-cloud",
2696
2723
  markdown: "plugins/cursor-cloud.md",
2697
2724
  keywords: ["plugins", "cursor-cloud", "cursor", "cloud", "agent"],
2698
- headings: ["Prerequisites", "Setup", "Behaviour", "Fixes view integration", "Common tasks", "Limiting dispatch to critical reports only", "Triggering manually", "Reviewing what the agent did"],
2725
+ headings: ["Prerequisites", "Setup", "Behaviour", "Fixes view integration", "Common tasks", "Which reports start an agent", "Triggering manually", "Reviewing what the agent did"],
2699
2726
  excerpt: "Dispatch a Cursor Cloud Agent automatically when a Mushi report qualifies \u2014 it investigates, drafts a fix and opens a PR that links back to Mushi."
2700
2727
  },
2701
2728
  {
@@ -2704,8 +2731,8 @@ var MUSHI_DOCS_INDEX = [
2704
2731
  route: "/plugins/discord",
2705
2732
  markdown: "plugins/discord.md",
2706
2733
  keywords: ["plugins", "discord"],
2707
- headings: ["Setup", "Package", "Events"],
2708
- excerpt: "Post Mushi report and fix events to a Discord channel through a webhook \u2014 create the webhook, install the plugin, and choose which events to send."
2734
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
2735
+ excerpt: "Post Mushi report and fix events to a Discord channel \u2014 paste a channel webhook on the Integrations page, or run the self-hosted Discord plugin."
2709
2736
  },
2710
2737
  {
2711
2738
  title: "Webhook events",
@@ -2722,8 +2749,8 @@ var MUSHI_DOCS_INDEX = [
2722
2749
  route: "/plugins/github-issues",
2723
2750
  markdown: "plugins/github-issues.md",
2724
2751
  keywords: ["plugins", "github-issues", "github", "issues"],
2725
- headings: ["Setup", "Package", "Events"],
2726
- excerpt: "Open a labelled GitHub issue for every classified Mushi report, with a link back to the report \u2014 target repo, default labels and assignee settings."
2752
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
2753
+ excerpt: "Open a GitHub issue for every triaged Mushi report and close it when the fix lands \u2014 set it up on the Integrations page, or self-host the plugin."
2727
2754
  },
2728
2755
  {
2729
2756
  title: "Jira Cloud",
@@ -2731,8 +2758,8 @@ var MUSHI_DOCS_INDEX = [
2731
2758
  route: "/plugins/jira",
2732
2759
  markdown: "plugins/jira.md",
2733
2760
  keywords: ["plugins", "jira", "cloud"],
2734
- headings: ["Setup", "Package", "Events"],
2735
- excerpt: "Two-way sync between Mushi reports and Jira Cloud issues \u2014 create issues on classification, sync status, and comment fix summaries when fixes land."
2761
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
2762
+ excerpt: "Open Jira Cloud issues from Mushi bug reports and keep their status in step \u2014 set it up on the Integrations page, or self-host the Jira plugin."
2736
2763
  },
2737
2764
  {
2738
2765
  title: "Linear",
@@ -2740,8 +2767,8 @@ var MUSHI_DOCS_INDEX = [
2740
2767
  route: "/plugins/linear",
2741
2768
  markdown: "plugins/linear.md",
2742
2769
  keywords: ["plugins", "linear"],
2743
- headings: ["Setup", "Behaviour", "Label mapping example", "Troubleshooting"],
2744
- excerpt: "File a Linear issue automatically when Mushi classifies a bug report \u2014 create a Linear API key, install the plugin, and choose the team and filters."
2770
+ headings: ["Setup (self-run plugin)", "Behaviour", "Troubleshooting"],
2771
+ excerpt: "File Linear issues from Mushi bug reports \u2014 connect Linear on the Integrations page, or run the self-hosted Linear plugin with an API key and team id."
2745
2772
  },
2746
2773
  {
2747
2774
  title: "Microsoft Teams",
@@ -2749,8 +2776,8 @@ var MUSHI_DOCS_INDEX = [
2749
2776
  route: "/plugins/msteams",
2750
2777
  markdown: "plugins/msteams.md",
2751
2778
  keywords: ["plugins", "msteams", "microsoft", "teams"],
2752
- headings: ["Setup", "Package", "Events"],
2753
- excerpt: "Send Adaptive Cards to a Microsoft Teams channel when Mushi classifies a report or a fix lands \u2014 incoming webhook setup and severity filters."
2779
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
2780
+ excerpt: "Send cards to a Microsoft Teams channel when Mushi triages a report or a fix lands \u2014 paste a webhook on the Integrations page, or self-host the plugin."
2754
2781
  },
2755
2782
  {
2756
2783
  title: "PagerDuty",
@@ -2758,8 +2785,8 @@ var MUSHI_DOCS_INDEX = [
2758
2785
  route: "/plugins/pagerduty",
2759
2786
  markdown: "plugins/pagerduty.md",
2760
2787
  keywords: ["plugins", "pagerduty"],
2761
- headings: ["Setup", "Behaviour", "Troubleshooting"],
2762
- excerpt: "Page your on-call rotation through PagerDuty when a P0 or P1 bug report lands in Mushi \u2014 Events API v2 integration key setup and filters."
2788
+ headings: ["Setup (self-run plugin)", "Behaviour", "Troubleshooting"],
2789
+ excerpt: "Page your on-call rotation through PagerDuty when Mushi triages a bug as critical, and resolve it when the fix lands \u2014 Events API v2 routing key setup."
2763
2790
  },
2764
2791
  {
2765
2792
  title: "Rollbar",
@@ -2767,8 +2794,8 @@ var MUSHI_DOCS_INDEX = [
2767
2794
  route: "/plugins/rollbar",
2768
2795
  markdown: "plugins/rollbar.md",
2769
2796
  keywords: ["plugins", "rollbar"],
2770
- headings: ["Setup", "Package", "Events"],
2771
- excerpt: "Mirror Mushi bug reports into Rollbar items and resolve them when fixes ship \u2014 access token, environment name, and dedup key mapping."
2797
+ headings: ["Setup (self-hosted Mushi)", "Package", "Events"],
2798
+ excerpt: "Copy triaged Mushi bug reports into Rollbar items and resolve them when fixes ship \u2014 a self-hosted plugin with an access token and project id."
2772
2799
  },
2773
2800
  {
2774
2801
  title: "Sentry",
@@ -2776,7 +2803,7 @@ var MUSHI_DOCS_INDEX = [
2776
2803
  route: "/plugins/sentry",
2777
2804
  markdown: "plugins/sentry.md",
2778
2805
  keywords: ["plugins", "sentry"],
2779
- headings: ["Route Sentry errors into Mushi (inbound)", "Setup (outbound plugin)", "Package", "Events"],
2806
+ headings: ["Route Sentry errors into Mushi (inbound)", "Copy Mushi reports into Sentry (outbound plugin)", "Package", "Events"],
2780
2807
  excerpt: "Two-way Sentry integration \u2014 Sentry errors flow into Mushi's queue, merging a Mushi fix resolves the Sentry issue, and critical reports mirror back."
2781
2808
  },
2782
2809
  {
@@ -2785,8 +2812,8 @@ var MUSHI_DOCS_INDEX = [
2785
2812
  route: "/plugins/slack",
2786
2813
  markdown: "plugins/slack.md",
2787
2814
  keywords: ["plugins", "slack", "app"],
2788
- headings: ["Setup", "What's on the card", "Acting from the channel", "Slash commands", "Package", "Events", "Troubleshooting"],
2789
- excerpt: "Triage Mushi bug reports from Slack \u2014 each classified report posts as a card with its root cause and buttons to dispatch a fix, resolve or dismiss."
2815
+ headings: ["Setup", "What's on the card", "Acting from the channel", "Slash commands", "Package", "What gets posted", "Troubleshooting"],
2816
+ excerpt: "Triage Mushi bug reports from Slack \u2014 add the app from the Integrations page, and each report posts as a card with buttons to fix, resolve or dismiss."
2790
2817
  },
2791
2818
  {
2792
2819
  title: "Zapier",
@@ -2794,7 +2821,7 @@ var MUSHI_DOCS_INDEX = [
2794
2821
  route: "/plugins/zapier",
2795
2822
  markdown: "plugins/zapier.md",
2796
2823
  keywords: ["plugins", "zapier"],
2797
- headings: ["Setup", "Signature verification in Zapier", "Common Zaps", "Troubleshooting"],
2824
+ headings: ["Setup (no server)", "Setup (with the relay package)", "Common Zaps", "Troubleshooting"],
2798
2825
  excerpt: "Send every Mushi event to Zapier and on to thousands of apps such as Notion, Google Sheets and HubSpot \u2014 Catch Hook setup and event filters."
2799
2826
  },
2800
2827
  {
@@ -2812,7 +2839,7 @@ var MUSHI_DOCS_INDEX = [
2812
2839
  route: "/quickstart",
2813
2840
  markdown: "quickstart/index.md",
2814
2841
  keywords: ["quickstart", "fix", "first", "bug", "60", "seconds", "choose", "stack"],
2815
- headings: ["Start here (MCP)", "Pick your stack", "How do I install the SDK?", "Troubleshooting"],
2842
+ headings: ["What you need", "The fastest way: one command", "Start here (editor first)", "Pick your stack", "How do I install the SDK?", "Troubleshooting"],
2816
2843
  excerpt: "Install Mushi with npx mushi-mushi, connect Cursor or Claude Code over MCP, and turn user bug reports into plain-English diagnoses with ready fixes."
2817
2844
  },
2818
2845
  {
@@ -2831,7 +2858,7 @@ var MUSHI_DOCS_INDEX = [
2831
2858
  markdown: "quickstart/angular.md",
2832
2859
  keywords: ["quickstart", "angular"],
2833
2860
  headings: [],
2834
- excerpt: "Add Mushi to an Angular 17+ app \u2014 register the Mushi service and error handler as factory providers so uncaught errors and user bug reports reach your queue."
2861
+ excerpt: "Add Mushi to an Angular 17+ app: one provideMushi() call registers the Mushi service and error handler, so uncaught errors and bug reports reach your queue."
2835
2862
  },
2836
2863
  {
2837
2864
  title: "Capacitor quickstart",
@@ -2993,7 +3020,7 @@ var MUSHI_DOCS_INDEX = [
2993
3020
  markdown: "sdks/angular.md",
2994
3021
  keywords: ["sdks", "angular", "@mushi-mushi/angular"],
2995
3022
  headings: ["API surface", "Setup (standalone bootstrap)", "Submitting a report", "Identifying users"],
2996
- excerpt: "API reference for @mushi-mushi/angular \u2014 MushiService, MushiErrorHandler and the MUSHI_CONFIG token, wired with factory providers in an Angular 17+ app."
3023
+ excerpt: "API reference for @mushi-mushi/angular \u2014 provideMushi(), MushiService, MushiErrorHandler and the MUSHI_CONFIG token in an Angular 17+ app."
2997
3024
  },
2998
3025
  {
2999
3026
  title: "In-SDK Ask assistant",
@@ -3037,7 +3064,7 @@ var MUSHI_DOCS_INDEX = [
3037
3064
  route: "/sdks/core",
3038
3065
  markdown: "sdks/core.md",
3039
3066
  keywords: ["sdks", "core", "@mushi-mushi/core"],
3040
- headings: ["Install", "API", "Mushi.init(config) (web) / MushiProvider (React Native)", "MushiWidgetConfig (selected keys)", "submitReport(input)", "flushOfflineQueueNow()", "PII scrubbing utilities (1.27+)", "Region resolution"],
3067
+ headings: ["Install", "API", "Mushi.init(config) (web) / MushiProvider (React Native)", "MushiWidgetConfig (selected keys)", "captureEvent(input)", "Offline queue", "PII scrubbing utilities (1.27+)", "Region resolution"],
3041
3068
  excerpt: "Reference for @mushi-mushi/core \u2014 the MushiConfig shape, widget options, PII scrubbing helpers and region resolution shared by every Mushi JavaScript SDK."
3042
3069
  },
3043
3070
  {
@@ -3046,7 +3073,7 @@ var MUSHI_DOCS_INDEX = [
3046
3073
  route: "/sdks/eslint-plugin",
3047
3074
  markdown: "sdks/eslint-plugin.md",
3048
3075
  keywords: ["sdks", "eslint-plugin", "eslint", "plugin", "eslint-plugin-mushi-mushi"],
3049
- headings: ["Install", "Recommended preset", "Rules", "mushi-mushi/no-dead-handler", "mushi-mushi/no-mock-leak", "Combining with the gates action"],
3076
+ headings: ["Install", "Turn on the two rules", "The recommended preset", "Rules", "mushi-mushi/no-dead-handler", "mushi-mushi/no-mock-leak", "In CI"],
3050
3077
  excerpt: "eslint-plugin-mushi-mushi flags empty event handlers and leftover mock data in production code \u2014 the no-dead-handler and no-mock-leak rules and preset."
3051
3078
  },
3052
3079
  {
@@ -3083,7 +3110,7 @@ var MUSHI_DOCS_INDEX = [
3083
3110
  markdown: "sdks/inventory-schema.md",
3084
3111
  keywords: ["sdks", "inventory-schema", "inventory", "schema", "@mushi-mushi/inventory-schema"],
3085
3112
  headings: ["Install", "What inventory.yaml looks like", "Programmatic use", "JSON Schema"],
3086
- excerpt: "The Zod schema, JSON Schema and TypeScript types for inventory.yaml \u2014 the contract that Mushi's gates, crawler, ESLint plugin and CLI all read."
3113
+ excerpt: "The Zod schema, JSON Schema and TypeScript types for inventory.yaml: your app's pages, the buttons and forms on each, what they do, and the tests that prove it."
3087
3114
  },
3088
3115
  {
3089
3116
  title: "MushiMushi (iOS)",
@@ -3109,7 +3136,7 @@ var MUSHI_DOCS_INDEX = [
3109
3136
  route: "/sdks/mcp",
3110
3137
  markdown: "sdks/mcp.md",
3111
3138
  keywords: ["sdks", "mcp", "bug", "report", "server", "cursor", "claude", "code", "@mushi-mushi/mcp"],
3112
- headings: ["Two transports", "Spec traceability for dispatchfix"],
3139
+ headings: ["Quick start", "Two transports", "Spec traceability for dispatchfix"],
3113
3140
  excerpt: "Reference for @mushi-mushi/mcp, the Mushi MCP server for Cursor, Claude Code, VS Code and Windsurf \u2014 stdio and hosted HTTP transports, scopes and setup."
3114
3141
  },
3115
3142
  {
@@ -3118,8 +3145,8 @@ var MUSHI_DOCS_INDEX = [
3118
3145
  route: "/sdks/mcp-ci",
3119
3146
  markdown: "sdks/mcp-ci.md",
3120
3147
  keywords: ["sdks", "mcp-ci", "mcp", "@mushi-mushi/mcp-ci"],
3121
- headings: ["Quick start", "Commands", "In your IDE", "Inputs"],
3122
- excerpt: "@mushi-mushi/mcp-ci is Mushi's GitHub Action \u2014 run the five-gate composite check on pull requests, draft inventory entries, and bootstrap crawler auth."
3148
+ headings: ["Quick start", "Gates on every PR", "Commands", "In your IDE", "Inputs", "Outputs"],
3149
+ excerpt: "@mushi-mushi/mcp-ci is Mushi's GitHub Action: fail a PR while reports wait for triage, dispatch a fix, run the pre-release gates and refresh crawler sign-in."
3123
3150
  },
3124
3151
  {
3125
3152
  title: "MCP tools reference",
@@ -3154,7 +3181,7 @@ var MUSHI_DOCS_INDEX = [
3154
3181
  route: "/sdks/node",
3155
3182
  markdown: "sdks/node.md",
3156
3183
  keywords: ["sdks", "node", "node.js", "server", "error", "reporting", "sdk", "@mushi-mushi/node"],
3157
- headings: ["Install", "Express", "Fastify", "Hono", "Process-level fallbacks", "Programmatic submit", "PII and credential scrubbing"],
3184
+ headings: ["Install", "Create a client", "Express", "Fastify", "Hono", "Process-level fallbacks", "Programmatic submit", "PII and credential scrubbing"],
3158
3185
  excerpt: "Report server errors from Node with @mushi-mushi/node \u2014 Express, Fastify and Hono error handlers that tag each report with route, request ID and user."
3159
3186
  },
3160
3187
  {
@@ -3164,7 +3191,7 @@ var MUSHI_DOCS_INDEX = [
3164
3191
  markdown: "sdks/plugin-sdk.md",
3165
3192
  keywords: ["sdks", "plugin-sdk", "plugin", "sdk", "@mushi-mushi/plugin-sdk"],
3166
3193
  headings: ["Install", "Express adapter", "Hono adapter", "Verify a signature manually", "Wire format", "See also"],
3167
- excerpt: "Build a Mushi plugin in TypeScript with @mushi-mushi/plugin-sdk \u2014 verify webhook signatures, dedupe deliveries and handle lifecycle events in Express."
3194
+ excerpt: "Build a Mushi plugin in TypeScript with @mushi-mushi/plugin-sdk \u2014 verify webhook signatures, dedupe deliveries and handle lifecycle events in Express or Hono."
3168
3195
  },
3169
3196
  {
3170
3197
  title: "SDK presets",
@@ -3220,6 +3247,15 @@ var MUSHI_DOCS_INDEX = [
3220
3247
  headings: ["API surface", "Setup", "Submitting a report"],
3221
3248
  excerpt: "Reference for @mushi-mushi/svelte \u2014 initMushi, getMushi and the SvelteKit error hooks that forward client and server errors to your Mushi queue."
3222
3249
  },
3250
+ {
3251
+ title: "@mushi-mushi/ux",
3252
+ url: docUrl("/sdks/ux"),
3253
+ route: "/sdks/ux",
3254
+ markdown: "sdks/ux.md",
3255
+ keywords: ["sdks", "ux", "@mushi-mushi/ux"],
3256
+ headings: ["Quick start", "From studio to merge", "What a run does", "Safety", "Agents", "Commands", "Audit and explore signed-in screens", "On GitHub Actions"],
3257
+ excerpt: "@mushi-mushi/ux runs your coding agent over each screen of your app, measures every change and keeps only the ones that help, on a branch you review."
3258
+ },
3223
3259
  {
3224
3260
  title: "@mushi-mushi/vue",
3225
3261
  url: docUrl("/sdks/vue"),
@@ -3235,8 +3271,8 @@ var MUSHI_DOCS_INDEX = [
3235
3271
  route: "/sdks/wasm-classifier",
3236
3272
  markdown: "sdks/wasm-classifier.md",
3237
3273
  keywords: ["sdks", "wasm-classifier", "wasm", "classifier", "@mushi-mushi/wasm-classifier"],
3238
- headings: [],
3239
- excerpt: "@mushi-mushi/wasm-classifier runs a small on-device model in the browser to drop junk bug reports before they reach your LLM, cutting classification cost."
3274
+ headings: ["Use it with the web SDK", "Call it directly", "ONNX backend (experimental)"],
3275
+ excerpt: "@mushi-mushi/wasm-classifier filters junk bug reports in the browser, before they reach the server or your LLM."
3240
3276
  },
3241
3277
  {
3242
3278
  title: "JavaScript bug reporting SDK for the browser",
@@ -3889,6 +3925,7 @@ var GATE_IDS = [
3889
3925
  "radar",
3890
3926
  "portfolio_radar",
3891
3927
  "portfolio_radar_ci",
3928
+ "portfolio_radar_vulns",
3892
3929
  "store_review"
3893
3930
  ];
3894
3931
  var GATE_FINDING_SEVERITIES = ["info", "warn", "error"];
@@ -6365,7 +6402,8 @@ function createMushiServer(config) {
6365
6402
  method: "PATCH",
6366
6403
  body: JSON.stringify({
6367
6404
  status: args.status,
6368
- reason: args.reason,
6405
+ // Kept as a team note on the report (the console's Triage note).
6406
+ note: args.reason,
6369
6407
  closed_reason: args.closedReason,
6370
6408
  reporter_message: args.reporterMessage
6371
6409
  })
package/dist/server.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  TDD_TOOL_CATALOG,
5
5
  TOOL_CATALOG,
6
6
  routeUseMushiIntent
7
- } from "./chunk-MOW6PVHK.js";
7
+ } from "./chunk-6SHKBN6R.js";
8
8
  import {
9
9
  MUSHI_SERVER_METADATA
10
10
  } from "./chunk-FJRPC4VR.js";
@@ -32,7 +32,7 @@ var MUSHI_DOCS_INDEX = [
32
32
  route: "/",
33
33
  markdown: "index.md",
34
34
  keywords: ["know", "ai-built", "app", "broke", "fix", "ready"],
35
- headings: ["This is what a diagnosis looks like", "See it in action", "What this is (and is not)", "Get started with the SDK", "Install in your framework", "One queue. Sentry flows in, fixes flow out."],
35
+ headings: ["The problem it solves", "A real example from our own sites", "What this is (and is not)", "Where it stands today", "This is what a diagnosis looks like", "See it in action", "Get started", "Install it in your app"],
36
36
  excerpt: "Your AI shipped it. Mushi tells you why it broke: a plain-English diagnosis and a ready fix in your editor. Open source, Sentry optional."
37
37
  },
38
38
  {
@@ -161,6 +161,15 @@ var MUSHI_DOCS_INDEX = [
161
161
  headings: ["What's tracked", "Charts", "Controlling costs", "Export", "Related pages"],
162
162
  excerpt: "The Cost page shows LLM token use and estimated spend per model and pipeline for a Mushi project, so you can see what each diagnosis costs."
163
163
  },
164
+ {
165
+ title: "Spend credits",
166
+ url: docUrl("/admin/credits"),
167
+ route: "/admin/credits",
168
+ markdown: "admin/credits.md",
169
+ keywords: ["admin", "credits", "spend"],
170
+ headings: ["Cursor: fix bugs", "Cursor: improve your apps with skills", "Firecrawl: find bugs on your live sites", "Site audit", "Search rank", "Where the fixes go"],
171
+ excerpt: "Spend credits lists expiring Cursor and Firecrawl credits and every way Mushi can spend them fixing bugs, improving apps with skills and checking sites."
172
+ },
164
173
  {
165
174
  title: "Dashboard",
166
175
  url: docUrl("/admin/dashboard"),
@@ -395,6 +404,15 @@ var MUSHI_DOCS_INDEX = [
395
404
  headings: ["What you see", "Data source", "Related"],
396
405
  excerpt: "The Overview page is the organization-wide portfolio view \u2014 seven-day activity and open tickets for every connected project at a glance."
397
406
  },
407
+ {
408
+ title: "Pipeline",
409
+ url: docUrl("/admin/pipeline"),
410
+ route: "/admin/pipeline",
411
+ markdown: "admin/pipeline.md",
412
+ keywords: ["admin", "pipeline"],
413
+ headings: ["Stages", "Who opens fixes", "Stuck groups", "Release trains", "Intake and deploys"],
414
+ excerpt: "The console Pipeline page shows every bug from report to deploy, where it is stuck and why, with one-click fixes."
415
+ },
398
416
  {
399
417
  title: "Portfolio",
400
418
  url: docUrl("/admin/portfolio"),
@@ -608,7 +626,7 @@ var MUSHI_DOCS_INDEX = [
608
626
  route: "/admin/ux-runs",
609
627
  markdown: "admin/ux-runs.md",
610
628
  keywords: ["admin", "ux-runs", "runs", "ux"],
611
- headings: ["Run in the cloud", "What you see", "File as bug", "Where the changes are"],
629
+ headings: ["Run in the cloud", "What you see", "File as bug", "Audit signed-in screens", "Where the changes are"],
612
630
  excerpt: "Each screen your coding agent worked on in a mushi ux run, with its plan, every attempt, before and after screenshots, and what was kept."
613
631
  },
614
632
  {
@@ -881,6 +899,15 @@ var MUSHI_DOCS_INDEX = [
881
899
  headings: ["Storage", "Why both pgvector and AGE?", "Indexing", "Bug Ontology"],
882
900
  excerpt: "How Mushi links reports, components, fixes and developers in a per-project knowledge graph, with pgvector for similarity and Apache AGE for traversal."
883
901
  },
902
+ {
903
+ title: "Known holes in dependencies",
904
+ url: docUrl("/concepts/known-holes"),
905
+ route: "/concepts/known-holes",
906
+ markdown: "concepts/known-holes.md",
907
+ keywords: ["concepts", "known-holes", "known", "holes", "dependencies"],
908
+ headings: ["What Mushi checks", "What becomes a report", "How bad is it", "The fix", "What leaves Mushi", "Where to see it", "Data sources"],
909
+ excerpt: "Mushi checks the exact versions in your lockfiles and runtime pins against published advisories, and files each fixable hole as a bug with the upgrade."
910
+ },
884
911
  {
885
912
  title: "Multi-repo coordinated fixes",
886
913
  url: docUrl("/concepts/multi-repo-fixes"),
@@ -1211,8 +1238,8 @@ var MUSHI_DOCS_INDEX = [
1211
1238
  route: "/plugins/bugsnag",
1212
1239
  markdown: "plugins/bugsnag.md",
1213
1240
  keywords: ["plugins", "bugsnag"],
1214
- headings: ["Setup", "Package", "Events"],
1215
- excerpt: "Mirror Mushi bug reports into Bugsnag and close the Bugsnag error when the fix PR merges \u2014 install from the marketplace and map release stages."
1241
+ headings: ["Setup (self-hosted Mushi)", "Package", "Events"],
1242
+ excerpt: "Copy triaged Mushi bug reports into Bugsnag and mark the error fixed when Mushi applies a fix \u2014 a self-hosted plugin with a Data API token."
1216
1243
  },
1217
1244
  {
1218
1245
  title: "Building a plugin",
@@ -1229,8 +1256,8 @@ var MUSHI_DOCS_INDEX = [
1229
1256
  route: "/plugins/crashlytics",
1230
1257
  markdown: "plugins/crashlytics.md",
1231
1258
  keywords: ["plugins", "crashlytics"],
1232
- headings: ["Setup", "Package", "Events"],
1233
- excerpt: "Push Mushi mobile bug reports into Firebase Crashlytics issues and close them when fixes merge \u2014 service account setup and app ID mapping."
1259
+ headings: ["Setup (self-hosted Mushi)", "Package", "Events"],
1260
+ excerpt: "Flag fixed Mushi reports in Firebase Remote Config so your mobile app can hide stale crash notices \u2014 a self-hosted plugin with a Google access token."
1234
1261
  },
1235
1262
  {
1236
1263
  title: "Cursor Cloud Agent",
@@ -1238,7 +1265,7 @@ var MUSHI_DOCS_INDEX = [
1238
1265
  route: "/plugins/cursor-cloud",
1239
1266
  markdown: "plugins/cursor-cloud.md",
1240
1267
  keywords: ["plugins", "cursor-cloud", "cursor", "cloud", "agent"],
1241
- headings: ["Prerequisites", "Setup", "Behaviour", "Fixes view integration", "Common tasks", "Limiting dispatch to critical reports only", "Triggering manually", "Reviewing what the agent did"],
1268
+ headings: ["Prerequisites", "Setup", "Behaviour", "Fixes view integration", "Common tasks", "Which reports start an agent", "Triggering manually", "Reviewing what the agent did"],
1242
1269
  excerpt: "Dispatch a Cursor Cloud Agent automatically when a Mushi report qualifies \u2014 it investigates, drafts a fix and opens a PR that links back to Mushi."
1243
1270
  },
1244
1271
  {
@@ -1247,8 +1274,8 @@ var MUSHI_DOCS_INDEX = [
1247
1274
  route: "/plugins/discord",
1248
1275
  markdown: "plugins/discord.md",
1249
1276
  keywords: ["plugins", "discord"],
1250
- headings: ["Setup", "Package", "Events"],
1251
- excerpt: "Post Mushi report and fix events to a Discord channel through a webhook \u2014 create the webhook, install the plugin, and choose which events to send."
1277
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
1278
+ excerpt: "Post Mushi report and fix events to a Discord channel \u2014 paste a channel webhook on the Integrations page, or run the self-hosted Discord plugin."
1252
1279
  },
1253
1280
  {
1254
1281
  title: "Webhook events",
@@ -1265,8 +1292,8 @@ var MUSHI_DOCS_INDEX = [
1265
1292
  route: "/plugins/github-issues",
1266
1293
  markdown: "plugins/github-issues.md",
1267
1294
  keywords: ["plugins", "github-issues", "github", "issues"],
1268
- headings: ["Setup", "Package", "Events"],
1269
- excerpt: "Open a labelled GitHub issue for every classified Mushi report, with a link back to the report \u2014 target repo, default labels and assignee settings."
1295
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
1296
+ excerpt: "Open a GitHub issue for every triaged Mushi report and close it when the fix lands \u2014 set it up on the Integrations page, or self-host the plugin."
1270
1297
  },
1271
1298
  {
1272
1299
  title: "Jira Cloud",
@@ -1274,8 +1301,8 @@ var MUSHI_DOCS_INDEX = [
1274
1301
  route: "/plugins/jira",
1275
1302
  markdown: "plugins/jira.md",
1276
1303
  keywords: ["plugins", "jira", "cloud"],
1277
- headings: ["Setup", "Package", "Events"],
1278
- excerpt: "Two-way sync between Mushi reports and Jira Cloud issues \u2014 create issues on classification, sync status, and comment fix summaries when fixes land."
1304
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
1305
+ excerpt: "Open Jira Cloud issues from Mushi bug reports and keep their status in step \u2014 set it up on the Integrations page, or self-host the Jira plugin."
1279
1306
  },
1280
1307
  {
1281
1308
  title: "Linear",
@@ -1283,8 +1310,8 @@ var MUSHI_DOCS_INDEX = [
1283
1310
  route: "/plugins/linear",
1284
1311
  markdown: "plugins/linear.md",
1285
1312
  keywords: ["plugins", "linear"],
1286
- headings: ["Setup", "Behaviour", "Label mapping example", "Troubleshooting"],
1287
- excerpt: "File a Linear issue automatically when Mushi classifies a bug report \u2014 create a Linear API key, install the plugin, and choose the team and filters."
1313
+ headings: ["Setup (self-run plugin)", "Behaviour", "Troubleshooting"],
1314
+ excerpt: "File Linear issues from Mushi bug reports \u2014 connect Linear on the Integrations page, or run the self-hosted Linear plugin with an API key and team id."
1288
1315
  },
1289
1316
  {
1290
1317
  title: "Microsoft Teams",
@@ -1292,8 +1319,8 @@ var MUSHI_DOCS_INDEX = [
1292
1319
  route: "/plugins/msteams",
1293
1320
  markdown: "plugins/msteams.md",
1294
1321
  keywords: ["plugins", "msteams", "microsoft", "teams"],
1295
- headings: ["Setup", "Package", "Events"],
1296
- excerpt: "Send Adaptive Cards to a Microsoft Teams channel when Mushi classifies a report or a fix lands \u2014 incoming webhook setup and severity filters."
1322
+ headings: ["Setup (Mushi Cloud, no code)", "Self-hosted plugin"],
1323
+ excerpt: "Send cards to a Microsoft Teams channel when Mushi triages a report or a fix lands \u2014 paste a webhook on the Integrations page, or self-host the plugin."
1297
1324
  },
1298
1325
  {
1299
1326
  title: "PagerDuty",
@@ -1301,8 +1328,8 @@ var MUSHI_DOCS_INDEX = [
1301
1328
  route: "/plugins/pagerduty",
1302
1329
  markdown: "plugins/pagerduty.md",
1303
1330
  keywords: ["plugins", "pagerduty"],
1304
- headings: ["Setup", "Behaviour", "Troubleshooting"],
1305
- excerpt: "Page your on-call rotation through PagerDuty when a P0 or P1 bug report lands in Mushi \u2014 Events API v2 integration key setup and filters."
1331
+ headings: ["Setup (self-run plugin)", "Behaviour", "Troubleshooting"],
1332
+ excerpt: "Page your on-call rotation through PagerDuty when Mushi triages a bug as critical, and resolve it when the fix lands \u2014 Events API v2 routing key setup."
1306
1333
  },
1307
1334
  {
1308
1335
  title: "Rollbar",
@@ -1310,8 +1337,8 @@ var MUSHI_DOCS_INDEX = [
1310
1337
  route: "/plugins/rollbar",
1311
1338
  markdown: "plugins/rollbar.md",
1312
1339
  keywords: ["plugins", "rollbar"],
1313
- headings: ["Setup", "Package", "Events"],
1314
- excerpt: "Mirror Mushi bug reports into Rollbar items and resolve them when fixes ship \u2014 access token, environment name, and dedup key mapping."
1340
+ headings: ["Setup (self-hosted Mushi)", "Package", "Events"],
1341
+ excerpt: "Copy triaged Mushi bug reports into Rollbar items and resolve them when fixes ship \u2014 a self-hosted plugin with an access token and project id."
1315
1342
  },
1316
1343
  {
1317
1344
  title: "Sentry",
@@ -1319,7 +1346,7 @@ var MUSHI_DOCS_INDEX = [
1319
1346
  route: "/plugins/sentry",
1320
1347
  markdown: "plugins/sentry.md",
1321
1348
  keywords: ["plugins", "sentry"],
1322
- headings: ["Route Sentry errors into Mushi (inbound)", "Setup (outbound plugin)", "Package", "Events"],
1349
+ headings: ["Route Sentry errors into Mushi (inbound)", "Copy Mushi reports into Sentry (outbound plugin)", "Package", "Events"],
1323
1350
  excerpt: "Two-way Sentry integration \u2014 Sentry errors flow into Mushi's queue, merging a Mushi fix resolves the Sentry issue, and critical reports mirror back."
1324
1351
  },
1325
1352
  {
@@ -1328,8 +1355,8 @@ var MUSHI_DOCS_INDEX = [
1328
1355
  route: "/plugins/slack",
1329
1356
  markdown: "plugins/slack.md",
1330
1357
  keywords: ["plugins", "slack", "app"],
1331
- headings: ["Setup", "What's on the card", "Acting from the channel", "Slash commands", "Package", "Events", "Troubleshooting"],
1332
- excerpt: "Triage Mushi bug reports from Slack \u2014 each classified report posts as a card with its root cause and buttons to dispatch a fix, resolve or dismiss."
1358
+ headings: ["Setup", "What's on the card", "Acting from the channel", "Slash commands", "Package", "What gets posted", "Troubleshooting"],
1359
+ excerpt: "Triage Mushi bug reports from Slack \u2014 add the app from the Integrations page, and each report posts as a card with buttons to fix, resolve or dismiss."
1333
1360
  },
1334
1361
  {
1335
1362
  title: "Zapier",
@@ -1337,7 +1364,7 @@ var MUSHI_DOCS_INDEX = [
1337
1364
  route: "/plugins/zapier",
1338
1365
  markdown: "plugins/zapier.md",
1339
1366
  keywords: ["plugins", "zapier"],
1340
- headings: ["Setup", "Signature verification in Zapier", "Common Zaps", "Troubleshooting"],
1367
+ headings: ["Setup (no server)", "Setup (with the relay package)", "Common Zaps", "Troubleshooting"],
1341
1368
  excerpt: "Send every Mushi event to Zapier and on to thousands of apps such as Notion, Google Sheets and HubSpot \u2014 Catch Hook setup and event filters."
1342
1369
  },
1343
1370
  {
@@ -1355,7 +1382,7 @@ var MUSHI_DOCS_INDEX = [
1355
1382
  route: "/quickstart",
1356
1383
  markdown: "quickstart/index.md",
1357
1384
  keywords: ["quickstart", "fix", "first", "bug", "60", "seconds", "choose", "stack"],
1358
- headings: ["Start here (MCP)", "Pick your stack", "How do I install the SDK?", "Troubleshooting"],
1385
+ headings: ["What you need", "The fastest way: one command", "Start here (editor first)", "Pick your stack", "How do I install the SDK?", "Troubleshooting"],
1359
1386
  excerpt: "Install Mushi with npx mushi-mushi, connect Cursor or Claude Code over MCP, and turn user bug reports into plain-English diagnoses with ready fixes."
1360
1387
  },
1361
1388
  {
@@ -1374,7 +1401,7 @@ var MUSHI_DOCS_INDEX = [
1374
1401
  markdown: "quickstart/angular.md",
1375
1402
  keywords: ["quickstart", "angular"],
1376
1403
  headings: [],
1377
- excerpt: "Add Mushi to an Angular 17+ app \u2014 register the Mushi service and error handler as factory providers so uncaught errors and user bug reports reach your queue."
1404
+ excerpt: "Add Mushi to an Angular 17+ app: one provideMushi() call registers the Mushi service and error handler, so uncaught errors and bug reports reach your queue."
1378
1405
  },
1379
1406
  {
1380
1407
  title: "Capacitor quickstart",
@@ -1536,7 +1563,7 @@ var MUSHI_DOCS_INDEX = [
1536
1563
  markdown: "sdks/angular.md",
1537
1564
  keywords: ["sdks", "angular", "@mushi-mushi/angular"],
1538
1565
  headings: ["API surface", "Setup (standalone bootstrap)", "Submitting a report", "Identifying users"],
1539
- excerpt: "API reference for @mushi-mushi/angular \u2014 MushiService, MushiErrorHandler and the MUSHI_CONFIG token, wired with factory providers in an Angular 17+ app."
1566
+ excerpt: "API reference for @mushi-mushi/angular \u2014 provideMushi(), MushiService, MushiErrorHandler and the MUSHI_CONFIG token in an Angular 17+ app."
1540
1567
  },
1541
1568
  {
1542
1569
  title: "In-SDK Ask assistant",
@@ -1580,7 +1607,7 @@ var MUSHI_DOCS_INDEX = [
1580
1607
  route: "/sdks/core",
1581
1608
  markdown: "sdks/core.md",
1582
1609
  keywords: ["sdks", "core", "@mushi-mushi/core"],
1583
- headings: ["Install", "API", "Mushi.init(config) (web) / MushiProvider (React Native)", "MushiWidgetConfig (selected keys)", "submitReport(input)", "flushOfflineQueueNow()", "PII scrubbing utilities (1.27+)", "Region resolution"],
1610
+ headings: ["Install", "API", "Mushi.init(config) (web) / MushiProvider (React Native)", "MushiWidgetConfig (selected keys)", "captureEvent(input)", "Offline queue", "PII scrubbing utilities (1.27+)", "Region resolution"],
1584
1611
  excerpt: "Reference for @mushi-mushi/core \u2014 the MushiConfig shape, widget options, PII scrubbing helpers and region resolution shared by every Mushi JavaScript SDK."
1585
1612
  },
1586
1613
  {
@@ -1589,7 +1616,7 @@ var MUSHI_DOCS_INDEX = [
1589
1616
  route: "/sdks/eslint-plugin",
1590
1617
  markdown: "sdks/eslint-plugin.md",
1591
1618
  keywords: ["sdks", "eslint-plugin", "eslint", "plugin", "eslint-plugin-mushi-mushi"],
1592
- headings: ["Install", "Recommended preset", "Rules", "mushi-mushi/no-dead-handler", "mushi-mushi/no-mock-leak", "Combining with the gates action"],
1619
+ headings: ["Install", "Turn on the two rules", "The recommended preset", "Rules", "mushi-mushi/no-dead-handler", "mushi-mushi/no-mock-leak", "In CI"],
1593
1620
  excerpt: "eslint-plugin-mushi-mushi flags empty event handlers and leftover mock data in production code \u2014 the no-dead-handler and no-mock-leak rules and preset."
1594
1621
  },
1595
1622
  {
@@ -1626,7 +1653,7 @@ var MUSHI_DOCS_INDEX = [
1626
1653
  markdown: "sdks/inventory-schema.md",
1627
1654
  keywords: ["sdks", "inventory-schema", "inventory", "schema", "@mushi-mushi/inventory-schema"],
1628
1655
  headings: ["Install", "What inventory.yaml looks like", "Programmatic use", "JSON Schema"],
1629
- excerpt: "The Zod schema, JSON Schema and TypeScript types for inventory.yaml \u2014 the contract that Mushi's gates, crawler, ESLint plugin and CLI all read."
1656
+ excerpt: "The Zod schema, JSON Schema and TypeScript types for inventory.yaml: your app's pages, the buttons and forms on each, what they do, and the tests that prove it."
1630
1657
  },
1631
1658
  {
1632
1659
  title: "MushiMushi (iOS)",
@@ -1652,7 +1679,7 @@ var MUSHI_DOCS_INDEX = [
1652
1679
  route: "/sdks/mcp",
1653
1680
  markdown: "sdks/mcp.md",
1654
1681
  keywords: ["sdks", "mcp", "bug", "report", "server", "cursor", "claude", "code", "@mushi-mushi/mcp"],
1655
- headings: ["Two transports", "Spec traceability for dispatchfix"],
1682
+ headings: ["Quick start", "Two transports", "Spec traceability for dispatchfix"],
1656
1683
  excerpt: "Reference for @mushi-mushi/mcp, the Mushi MCP server for Cursor, Claude Code, VS Code and Windsurf \u2014 stdio and hosted HTTP transports, scopes and setup."
1657
1684
  },
1658
1685
  {
@@ -1661,8 +1688,8 @@ var MUSHI_DOCS_INDEX = [
1661
1688
  route: "/sdks/mcp-ci",
1662
1689
  markdown: "sdks/mcp-ci.md",
1663
1690
  keywords: ["sdks", "mcp-ci", "mcp", "@mushi-mushi/mcp-ci"],
1664
- headings: ["Quick start", "Commands", "In your IDE", "Inputs"],
1665
- excerpt: "@mushi-mushi/mcp-ci is Mushi's GitHub Action \u2014 run the five-gate composite check on pull requests, draft inventory entries, and bootstrap crawler auth."
1691
+ headings: ["Quick start", "Gates on every PR", "Commands", "In your IDE", "Inputs", "Outputs"],
1692
+ excerpt: "@mushi-mushi/mcp-ci is Mushi's GitHub Action: fail a PR while reports wait for triage, dispatch a fix, run the pre-release gates and refresh crawler sign-in."
1666
1693
  },
1667
1694
  {
1668
1695
  title: "MCP tools reference",
@@ -1697,7 +1724,7 @@ var MUSHI_DOCS_INDEX = [
1697
1724
  route: "/sdks/node",
1698
1725
  markdown: "sdks/node.md",
1699
1726
  keywords: ["sdks", "node", "node.js", "server", "error", "reporting", "sdk", "@mushi-mushi/node"],
1700
- headings: ["Install", "Express", "Fastify", "Hono", "Process-level fallbacks", "Programmatic submit", "PII and credential scrubbing"],
1727
+ headings: ["Install", "Create a client", "Express", "Fastify", "Hono", "Process-level fallbacks", "Programmatic submit", "PII and credential scrubbing"],
1701
1728
  excerpt: "Report server errors from Node with @mushi-mushi/node \u2014 Express, Fastify and Hono error handlers that tag each report with route, request ID and user."
1702
1729
  },
1703
1730
  {
@@ -1707,7 +1734,7 @@ var MUSHI_DOCS_INDEX = [
1707
1734
  markdown: "sdks/plugin-sdk.md",
1708
1735
  keywords: ["sdks", "plugin-sdk", "plugin", "sdk", "@mushi-mushi/plugin-sdk"],
1709
1736
  headings: ["Install", "Express adapter", "Hono adapter", "Verify a signature manually", "Wire format", "See also"],
1710
- excerpt: "Build a Mushi plugin in TypeScript with @mushi-mushi/plugin-sdk \u2014 verify webhook signatures, dedupe deliveries and handle lifecycle events in Express."
1737
+ excerpt: "Build a Mushi plugin in TypeScript with @mushi-mushi/plugin-sdk \u2014 verify webhook signatures, dedupe deliveries and handle lifecycle events in Express or Hono."
1711
1738
  },
1712
1739
  {
1713
1740
  title: "SDK presets",
@@ -1763,6 +1790,15 @@ var MUSHI_DOCS_INDEX = [
1763
1790
  headings: ["API surface", "Setup", "Submitting a report"],
1764
1791
  excerpt: "Reference for @mushi-mushi/svelte \u2014 initMushi, getMushi and the SvelteKit error hooks that forward client and server errors to your Mushi queue."
1765
1792
  },
1793
+ {
1794
+ title: "@mushi-mushi/ux",
1795
+ url: docUrl("/sdks/ux"),
1796
+ route: "/sdks/ux",
1797
+ markdown: "sdks/ux.md",
1798
+ keywords: ["sdks", "ux", "@mushi-mushi/ux"],
1799
+ headings: ["Quick start", "From studio to merge", "What a run does", "Safety", "Agents", "Commands", "Audit and explore signed-in screens", "On GitHub Actions"],
1800
+ excerpt: "@mushi-mushi/ux runs your coding agent over each screen of your app, measures every change and keeps only the ones that help, on a branch you review."
1801
+ },
1766
1802
  {
1767
1803
  title: "@mushi-mushi/vue",
1768
1804
  url: docUrl("/sdks/vue"),
@@ -1778,8 +1814,8 @@ var MUSHI_DOCS_INDEX = [
1778
1814
  route: "/sdks/wasm-classifier",
1779
1815
  markdown: "sdks/wasm-classifier.md",
1780
1816
  keywords: ["sdks", "wasm-classifier", "wasm", "classifier", "@mushi-mushi/wasm-classifier"],
1781
- headings: [],
1782
- excerpt: "@mushi-mushi/wasm-classifier runs a small on-device model in the browser to drop junk bug reports before they reach your LLM, cutting classification cost."
1817
+ headings: ["Use it with the web SDK", "Call it directly", "ONNX backend (experimental)"],
1818
+ excerpt: "@mushi-mushi/wasm-classifier filters junk bug reports in the browser, before they reach the server or your LLM."
1783
1819
  },
1784
1820
  {
1785
1821
  title: "JavaScript bug reporting SDK for the browser",
@@ -2498,6 +2534,7 @@ var GATE_IDS = [
2498
2534
  "radar",
2499
2535
  "portfolio_radar",
2500
2536
  "portfolio_radar_ci",
2537
+ "portfolio_radar_vulns",
2501
2538
  "store_review"
2502
2539
  ];
2503
2540
  var GATE_FINDING_SEVERITIES = ["info", "warn", "error"];
@@ -4974,7 +5011,8 @@ function createMushiServer(config) {
4974
5011
  method: "PATCH",
4975
5012
  body: JSON.stringify({
4976
5013
  status: args.status,
4977
- reason: args.reason,
5014
+ // Kept as a team note on the report (the console's Triage note).
5015
+ note: args.reason,
4978
5016
  closed_reason: args.closedReason,
4979
5017
  reporter_message: args.reporterMessage
4980
5018
  })
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mushi-mushi/mcp",
3
3
  "mcpName": "io.github.kensaurus/mushi-mushi",
4
- "version": "0.29.0",
4
+ "version": "0.29.2",
5
5
  "license": "MIT",
6
6
  "description": "MCP server for Cursor, Claude Code and Copilot. The bug mediator for AI-built apps: plain-English diagnosis + a ready fix, in your editor.",
7
7
  "type": "module",
@@ -44,8 +44,8 @@
44
44
  "dependencies": {
45
45
  "@modelcontextprotocol/core": "^2.3.1",
46
46
  "@modelcontextprotocol/server": "^2.3.1",
47
- "zod": "^4.4.3",
48
- "@mushi-mushi/core": "^1.33.2"
47
+ "zod": "^4.6.7",
48
+ "@mushi-mushi/core": "^1.33.3"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@sentry/node": "^10.57.0"