@mushi-mushi/cli 0.22.1 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/{chunk-JAUKBLPK.js → chunk-AIZRI665.js} +102 -2
- package/dist/chunk-BY5SZYRO.js +6 -0
- package/dist/{chunk-R2HPR2FV.js → chunk-GSQO35YD.js} +520 -27
- package/dist/chunk-WLLFV26V.js +423 -0
- package/dist/{connect-2RM43XHO.js → connect-KX4UGY6Z.js} +10 -7
- package/dist/{connect-JIEIWTF3.js → connect-XFVSH4JZ.js} +1 -1
- package/dist/detect.d.ts +1 -1
- package/dist/detect.js +1 -1
- package/dist/index.js +75 -407
- package/dist/init.js +40 -241
- package/dist/version.js +1 -1
- package/package.json +12 -14
- package/dist/chunk-XEXYGDQV.js +0 -137
- package/dist/chunk-YK4LF7AM.js +0 -6
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> **Your AI wrote it. Mushi tells you why it broke.**
|
|
4
4
|
|
|
5
|
-
Set up the Mushi SDK, wire Cursor MCP, and
|
|
5
|
+
Set up the Mushi SDK, wire Cursor MCP, and review bugs from your terminal.
|
|
6
6
|
|
|
7
7
|
Positioning and product overview: [docs site](https://github.com/kensaurus/mushi-mushi/blob/master/apps/docs/content/quickstart/index.mdx) · [VISION.md](https://github.com/kensaurus/mushi-mushi/blob/master/VISION.md)
|
|
8
8
|
|
|
@@ -51,7 +51,7 @@ npx mushi-mushi
|
|
|
51
51
|
The wizard:
|
|
52
52
|
|
|
53
53
|
1. **Prerequisite step** (unless flags/config already present): open console to create a project, paste existing credentials, or exit to run `mushi login` first.
|
|
54
|
-
2. Detects your framework (Next.js, Nuxt, SvelteKit, Angular, Expo, Capacitor, plain React/Vue/Svelte, or vanilla JS) from `package.json` and config files.
|
|
54
|
+
2. Detects your framework (Next.js, Remix, Astro, Nuxt, SvelteKit, Angular, Expo, Capacitor, Create React App, Solid/SolidStart, plain React/Vue/Svelte, Express/Fastify/Hono, or vanilla JS) from `package.json` and config files — and writes the correct client env-var prefix for each (`NEXT_PUBLIC_`, `VITE_`, `PUBLIC_`, `REACT_APP_`, `EXPO_PUBLIC_`, or bare `MUSHI_*`).
|
|
55
55
|
3. Calls **`GET /v1/sync/whoami`** to verify Project ID + API key before installing anything.
|
|
56
56
|
4. Picks the right SDK package (`@mushi-mushi/react`, `@mushi-mushi/vue`, etc.) plus `@mushi-mushi/web` when the framework SDK is API-only.
|
|
57
57
|
5. Detects your package manager (npm / pnpm / yarn / bun) from your lockfile and installs with that — `shell: false`, with Windows `.cmd` shim resolution.
|
|
@@ -4,6 +4,10 @@ import { join } from "path";
|
|
|
4
4
|
var FRAMEWORK_IDS = [
|
|
5
5
|
"next",
|
|
6
6
|
"react",
|
|
7
|
+
"cra",
|
|
8
|
+
"remix",
|
|
9
|
+
"astro",
|
|
10
|
+
"solid",
|
|
7
11
|
"vue",
|
|
8
12
|
"nuxt",
|
|
9
13
|
"svelte",
|
|
@@ -57,6 +61,90 @@ createRoot(document.getElementById('root')!).render(
|
|
|
57
61
|
<App />
|
|
58
62
|
</MushiProvider>
|
|
59
63
|
)`
|
|
64
|
+
},
|
|
65
|
+
cra: {
|
|
66
|
+
id: "cra",
|
|
67
|
+
label: "Create React App",
|
|
68
|
+
packageName: "@mushi-mushi/react",
|
|
69
|
+
needsWebPackage: false,
|
|
70
|
+
// CRA inlines only REACT_APP_*-prefixed vars into process.env at build time.
|
|
71
|
+
snippet: () => `// src/index.tsx
|
|
72
|
+
import { MushiProvider } from '@mushi-mushi/react'
|
|
73
|
+
|
|
74
|
+
root.render(
|
|
75
|
+
<MushiProvider config={{
|
|
76
|
+
projectId: process.env.REACT_APP_MUSHI_PROJECT_ID,
|
|
77
|
+
apiKey: process.env.REACT_APP_MUSHI_API_KEY,
|
|
78
|
+
}}>
|
|
79
|
+
<App />
|
|
80
|
+
</MushiProvider>
|
|
81
|
+
)`
|
|
82
|
+
},
|
|
83
|
+
remix: {
|
|
84
|
+
id: "remix",
|
|
85
|
+
label: "Remix",
|
|
86
|
+
packageName: "@mushi-mushi/react",
|
|
87
|
+
needsWebPackage: false,
|
|
88
|
+
// Remix doesn't inline client env. Expose public values at runtime via the
|
|
89
|
+
// root loader + window.ENV (works on both the classic compiler and Vite).
|
|
90
|
+
snippet: () => `// app/root.tsx
|
|
91
|
+
import { MushiProvider } from '@mushi-mushi/react'
|
|
92
|
+
import { useLoaderData } from '@remix-run/react'
|
|
93
|
+
|
|
94
|
+
export async function loader() {
|
|
95
|
+
return { ENV: {
|
|
96
|
+
MUSHI_PROJECT_ID: process.env.MUSHI_PROJECT_ID,
|
|
97
|
+
MUSHI_API_KEY: process.env.MUSHI_API_KEY,
|
|
98
|
+
} }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default function App() {
|
|
102
|
+
const { ENV } = useLoaderData<typeof loader>()
|
|
103
|
+
return (
|
|
104
|
+
<html>
|
|
105
|
+
<body>
|
|
106
|
+
<MushiProvider config={{ projectId: ENV.MUSHI_PROJECT_ID, apiKey: ENV.MUSHI_API_KEY }}>
|
|
107
|
+
<Outlet />
|
|
108
|
+
</MushiProvider>
|
|
109
|
+
<Scripts />
|
|
110
|
+
</body>
|
|
111
|
+
</html>
|
|
112
|
+
)
|
|
113
|
+
}`
|
|
114
|
+
},
|
|
115
|
+
astro: {
|
|
116
|
+
id: "astro",
|
|
117
|
+
label: "Astro",
|
|
118
|
+
packageName: "@mushi-mushi/web",
|
|
119
|
+
needsWebPackage: false,
|
|
120
|
+
// Astro exposes only PUBLIC_*-prefixed vars to client code (Vite-based).
|
|
121
|
+
snippet: () => `---
|
|
122
|
+
// src/layouts/Layout.astro (add this <script> once, e.g. in your base layout)
|
|
123
|
+
---
|
|
124
|
+
<script>
|
|
125
|
+
import { Mushi } from '@mushi-mushi/web'
|
|
126
|
+
Mushi.init({
|
|
127
|
+
projectId: import.meta.env.PUBLIC_MUSHI_PROJECT_ID,
|
|
128
|
+
apiKey: import.meta.env.PUBLIC_MUSHI_API_KEY,
|
|
129
|
+
})
|
|
130
|
+
</script>`
|
|
131
|
+
},
|
|
132
|
+
solid: {
|
|
133
|
+
id: "solid",
|
|
134
|
+
label: "Solid",
|
|
135
|
+
packageName: "@mushi-mushi/web",
|
|
136
|
+
needsWebPackage: false,
|
|
137
|
+
// Solid / SolidStart are Vite-based → VITE_*-prefixed client env.
|
|
138
|
+
snippet: () => `// src/index.tsx (or src/app.tsx for SolidStart)
|
|
139
|
+
import { onMount } from 'solid-js'
|
|
140
|
+
import { Mushi } from '@mushi-mushi/web'
|
|
141
|
+
|
|
142
|
+
onMount(() => {
|
|
143
|
+
Mushi.init({
|
|
144
|
+
projectId: import.meta.env.VITE_MUSHI_PROJECT_ID,
|
|
145
|
+
apiKey: import.meta.env.VITE_MUSHI_API_KEY,
|
|
146
|
+
})
|
|
147
|
+
})`
|
|
60
148
|
},
|
|
61
149
|
vue: {
|
|
62
150
|
id: "vue",
|
|
@@ -287,10 +375,16 @@ function detectFramework(cwd, pkg) {
|
|
|
287
375
|
if (deps.has("@angular/core")) return FRAMEWORKS.angular;
|
|
288
376
|
if (deps.has("expo")) return FRAMEWORKS.expo;
|
|
289
377
|
if (deps.has("react-native")) return FRAMEWORKS["react-native"];
|
|
378
|
+
if (deps.has("@remix-run/react") || deps.has("@remix-run/node") || deps.has("@remix-run/serve")) {
|
|
379
|
+
return FRAMEWORKS.remix;
|
|
380
|
+
}
|
|
381
|
+
if (deps.has("astro")) return FRAMEWORKS.astro;
|
|
382
|
+
if (deps.has("@solidjs/start") || deps.has("solid-js")) return FRAMEWORKS.solid;
|
|
290
383
|
if (deps.has("@capacitor/core") && deps.has("react")) return FRAMEWORKS.react;
|
|
291
384
|
if (deps.has("@capacitor/core")) return FRAMEWORKS.capacitor;
|
|
292
385
|
if (deps.has("svelte")) return FRAMEWORKS.svelte;
|
|
293
386
|
if (deps.has("vue")) return FRAMEWORKS.vue;
|
|
387
|
+
if (deps.has("react-scripts")) return FRAMEWORKS.cra;
|
|
294
388
|
if (deps.has("react")) return FRAMEWORKS.react;
|
|
295
389
|
if (deps.has("express")) return FRAMEWORKS.express;
|
|
296
390
|
if (deps.has("fastify")) return FRAMEWORKS.fastify;
|
|
@@ -303,6 +397,12 @@ function detectFramework(cwd, pkg) {
|
|
|
303
397
|
}
|
|
304
398
|
if (existsSync(join(cwd, "svelte.config.js"))) return FRAMEWORKS.svelte;
|
|
305
399
|
if (existsSync(join(cwd, "angular.json"))) return FRAMEWORKS.angular;
|
|
400
|
+
if (existsSync(join(cwd, "remix.config.js")) || existsSync(join(cwd, "remix.config.ts"))) {
|
|
401
|
+
return FRAMEWORKS.remix;
|
|
402
|
+
}
|
|
403
|
+
if (existsSync(join(cwd, "astro.config.mjs")) || existsSync(join(cwd, "astro.config.ts")) || existsSync(join(cwd, "astro.config.js"))) {
|
|
404
|
+
return FRAMEWORKS.astro;
|
|
405
|
+
}
|
|
306
406
|
return FRAMEWORKS.vanilla;
|
|
307
407
|
}
|
|
308
408
|
function detectPackageManager(cwd) {
|
|
@@ -331,7 +431,7 @@ function envVarsToWrite(apiKey, projectId, framework, endpoint) {
|
|
|
331
431
|
endpointLine
|
|
332
432
|
].filter(Boolean).join("\n");
|
|
333
433
|
}
|
|
334
|
-
if (framework.id === "react-native") {
|
|
434
|
+
if (framework.id === "react-native" || framework.id === "remix") {
|
|
335
435
|
return [
|
|
336
436
|
`MUSHI_PROJECT_ID=${projectId}`,
|
|
337
437
|
`MUSHI_API_KEY=${apiKey}`,
|
|
@@ -345,7 +445,7 @@ function envVarsToWrite(apiKey, projectId, framework, endpoint) {
|
|
|
345
445
|
endpointLine ? `EXPO_PUBLIC_${endpointLine}` : null
|
|
346
446
|
].filter(Boolean).join("\n");
|
|
347
447
|
}
|
|
348
|
-
const prefix = framework.id === "next" ? "NEXT_PUBLIC_" : framework.id === "nuxt" ? "NUXT_PUBLIC_" : "VITE_";
|
|
448
|
+
const prefix = framework.id === "next" ? "NEXT_PUBLIC_" : framework.id === "nuxt" ? "NUXT_PUBLIC_" : framework.id === "cra" ? "REACT_APP_" : framework.id === "astro" ? "PUBLIC_" : "VITE_";
|
|
349
449
|
return [
|
|
350
450
|
`${prefix}MUSHI_PROJECT_ID=${projectId}`,
|
|
351
451
|
`${prefix}MUSHI_API_KEY=${apiKey}`,
|