@opensaas/stack-cli 0.1.6 → 0.3.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +215 -0
- package/CLAUDE.md +60 -12
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +10 -1
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/mcp.d.ts +6 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +116 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/generator/context.d.ts.map +1 -1
- package/dist/generator/context.js +21 -3
- package/dist/generator/context.js.map +1 -1
- package/dist/generator/index.d.ts +3 -0
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +3 -0
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/lists.d.ts +31 -0
- package/dist/generator/lists.d.ts.map +1 -0
- package/dist/generator/lists.js +91 -0
- package/dist/generator/lists.js.map +1 -0
- package/dist/generator/plugin-types.d.ts +10 -0
- package/dist/generator/plugin-types.d.ts.map +1 -0
- package/dist/generator/plugin-types.js +122 -0
- package/dist/generator/plugin-types.js.map +1 -0
- package/dist/generator/prisma-config.d.ts +17 -0
- package/dist/generator/prisma-config.d.ts.map +1 -0
- package/dist/generator/prisma-config.js +40 -0
- package/dist/generator/prisma-config.js.map +1 -0
- package/dist/generator/prisma.d.ts.map +1 -1
- package/dist/generator/prisma.js +1 -2
- package/dist/generator/prisma.js.map +1 -1
- package/dist/generator/types.d.ts.map +1 -1
- package/dist/generator/types.js +53 -1
- package/dist/generator/types.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/lib/documentation-provider.d.ts +43 -0
- package/dist/mcp/lib/documentation-provider.d.ts.map +1 -0
- package/dist/mcp/lib/documentation-provider.js +163 -0
- package/dist/mcp/lib/documentation-provider.js.map +1 -0
- package/dist/mcp/lib/features/catalog.d.ts +26 -0
- package/dist/mcp/lib/features/catalog.d.ts.map +1 -0
- package/dist/mcp/lib/features/catalog.js +291 -0
- package/dist/mcp/lib/features/catalog.js.map +1 -0
- package/dist/mcp/lib/generators/feature-generator.d.ts +35 -0
- package/dist/mcp/lib/generators/feature-generator.d.ts.map +1 -0
- package/dist/mcp/lib/generators/feature-generator.js +546 -0
- package/dist/mcp/lib/generators/feature-generator.js.map +1 -0
- package/dist/mcp/lib/types.d.ts +80 -0
- package/dist/mcp/lib/types.d.ts.map +1 -0
- package/dist/mcp/lib/types.js +5 -0
- package/dist/mcp/lib/types.js.map +1 -0
- package/dist/mcp/lib/wizards/wizard-engine.d.ts +71 -0
- package/dist/mcp/lib/wizards/wizard-engine.d.ts.map +1 -0
- package/dist/mcp/lib/wizards/wizard-engine.js +356 -0
- package/dist/mcp/lib/wizards/wizard-engine.js.map +1 -0
- package/dist/mcp/server/index.d.ts +8 -0
- package/dist/mcp/server/index.d.ts.map +1 -0
- package/dist/mcp/server/index.js +202 -0
- package/dist/mcp/server/index.js.map +1 -0
- package/dist/mcp/server/stack-mcp-server.d.ts +92 -0
- package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -0
- package/dist/mcp/server/stack-mcp-server.js +265 -0
- package/dist/mcp/server/stack-mcp-server.js.map +1 -0
- package/package.json +9 -7
- package/src/commands/__snapshots__/generate.test.ts.snap +61 -21
- package/src/commands/dev.test.ts +0 -1
- package/src/commands/generate.test.ts +18 -8
- package/src/commands/generate.ts +12 -0
- package/src/commands/mcp.ts +135 -0
- package/src/generator/__snapshots__/context.test.ts.snap +8 -8
- package/src/generator/__snapshots__/prisma.test.ts.snap +8 -16
- package/src/generator/__snapshots__/types.test.ts.snap +605 -9
- package/src/generator/context.test.ts +13 -8
- package/src/generator/context.ts +21 -3
- package/src/generator/index.ts +3 -0
- package/src/generator/lists.test.ts +335 -0
- package/src/generator/lists.ts +102 -0
- package/src/generator/plugin-types.ts +147 -0
- package/src/generator/prisma-config.ts +46 -0
- package/src/generator/prisma.test.ts +0 -10
- package/src/generator/prisma.ts +1 -2
- package/src/generator/types.test.ts +0 -12
- package/src/generator/types.ts +56 -1
- package/src/index.ts +4 -0
- package/src/mcp/lib/documentation-provider.ts +203 -0
- package/src/mcp/lib/features/catalog.ts +301 -0
- package/src/mcp/lib/generators/feature-generator.ts +598 -0
- package/src/mcp/lib/types.ts +89 -0
- package/src/mcp/lib/wizards/wizard-engine.ts +427 -0
- package/src/mcp/server/index.ts +240 -0
- package/src/mcp/server/stack-mcp-server.ts +301 -0
- package/tsconfig.tsbuildinfo +1 -1
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,220 @@
|
|
|
1
1
|
# @opensaas/stack-cli
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies []:
|
|
8
|
+
- @opensaas/stack-core@0.3.0
|
|
9
|
+
|
|
10
|
+
## 0.2.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- [#107](https://github.com/OpenSaasAU/stack/pull/107) [`f4f3966`](https://github.com/OpenSaasAU/stack/commit/f4f3966faedba07d2cf412fab826d81e30c63a6c) Thanks [@borisno2](https://github.com/borisno2)! - # Add MCP Server for AI-Assisted Development
|
|
15
|
+
|
|
16
|
+
## New Features
|
|
17
|
+
|
|
18
|
+
### CLI Package (@opensaas/stack-cli)
|
|
19
|
+
- **New `opensaas mcp` command group** for AI-assisted development:
|
|
20
|
+
- `opensaas mcp install` - Install MCP server in Claude Code
|
|
21
|
+
- `opensaas mcp uninstall` - Remove MCP server from Claude Code
|
|
22
|
+
- `opensaas mcp start` - Start MCP server directly (for debugging)
|
|
23
|
+
- **Feature-driven development tools**:
|
|
24
|
+
- Interactive feature implementation wizards (authentication, blog, comments, file-upload, semantic-search)
|
|
25
|
+
- Live documentation search from stack.opensaas.au
|
|
26
|
+
- Code generation following OpenSaaS best practices
|
|
27
|
+
- Smart feature suggestions based on your current app
|
|
28
|
+
- Config validation
|
|
29
|
+
- **MCP tools available in Claude Code**:
|
|
30
|
+
- `opensaas_implement_feature` - Start feature wizard
|
|
31
|
+
- `opensaas_feature_docs` - Search documentation
|
|
32
|
+
- `opensaas_list_features` - Browse available features
|
|
33
|
+
- `opensaas_suggest_features` - Get personalized recommendations
|
|
34
|
+
- `opensaas_validate_feature` - Validate implementations
|
|
35
|
+
|
|
36
|
+
### create-opensaas-app
|
|
37
|
+
- **Interactive MCP setup prompt** during project creation
|
|
38
|
+
- Option to enable AI development tools automatically
|
|
39
|
+
- Automatic installation of MCP server if user opts in
|
|
40
|
+
- Helpful instructions if MCP installation is declined or fails
|
|
41
|
+
|
|
42
|
+
## Installation
|
|
43
|
+
|
|
44
|
+
Enable AI development tools for an existing project:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npx @opensaas/stack-cli mcp install
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Or during project creation:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm create opensaas-app@latest my-app
|
|
54
|
+
# When prompted: Enable AI development tools? → yes
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Benefits
|
|
58
|
+
- **Build apps faster**: Describe what you want to build, get complete implementations
|
|
59
|
+
- **Feature-driven development**: Work with high-level features instead of low-level config
|
|
60
|
+
- **Best practices baked in**: Generated code follows OpenSaaS Stack patterns
|
|
61
|
+
- **Live documentation**: Always up-to-date docs from the official site
|
|
62
|
+
- **Single toolkit**: All developer commands in one CLI
|
|
63
|
+
|
|
64
|
+
## Example Usage
|
|
65
|
+
|
|
66
|
+
With Claude Code installed and the MCP server enabled, you can:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
You: "I want to build a food tracking app"
|
|
70
|
+
|
|
71
|
+
Claude Code uses MCP tools to:
|
|
72
|
+
1. Ask clarifying questions about requirements
|
|
73
|
+
2. Implement authentication feature (wizard)
|
|
74
|
+
3. Create custom Food and FoodLog lists
|
|
75
|
+
4. Generate complete code with UI and access control
|
|
76
|
+
5. Provide testing and deployment guidance
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- [#132](https://github.com/OpenSaasAU/stack/pull/132) [`fcf5cb8`](https://github.com/OpenSaasAU/stack/commit/fcf5cb8bbd55d802350b8d97e342dd7f6368163b) Thanks [@borisno2](https://github.com/borisno2)! - Upgrade to Prisma 7 with database adapter support
|
|
80
|
+
|
|
81
|
+
## Breaking Changes
|
|
82
|
+
|
|
83
|
+
### Required `prismaClientConstructor`
|
|
84
|
+
|
|
85
|
+
Prisma 7 requires database adapters. All configs must now include `prismaClientConstructor`:
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3'
|
|
89
|
+
import Database from 'better-sqlite3'
|
|
90
|
+
|
|
91
|
+
export default config({
|
|
92
|
+
db: {
|
|
93
|
+
provider: 'sqlite',
|
|
94
|
+
prismaClientConstructor: (PrismaClient) => {
|
|
95
|
+
const db = new Database(process.env.DATABASE_URL || './dev.db')
|
|
96
|
+
const adapter = new PrismaBetterSQLite3(db)
|
|
97
|
+
return new PrismaClient({ adapter })
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
})
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Removed `url` from `DatabaseConfig`
|
|
104
|
+
|
|
105
|
+
The `url` field has been removed from the `DatabaseConfig` type. Database connection URLs are now passed directly to adapters in `prismaClientConstructor`:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
// ❌ Before (Prisma 6)
|
|
109
|
+
db: {
|
|
110
|
+
provider: 'sqlite',
|
|
111
|
+
url: 'file:./dev.db', // url in config
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ✅ After (Prisma 7)
|
|
115
|
+
db: {
|
|
116
|
+
provider: 'sqlite',
|
|
117
|
+
prismaClientConstructor: (PrismaClient) => {
|
|
118
|
+
const adapter = new PrismaBetterSQLite3({ url: './dev.db' }) // url in adapter
|
|
119
|
+
return new PrismaClient({ adapter })
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Generated Schema Changes
|
|
125
|
+
- Generator provider changed from `prisma-client-js` to `prisma-client`
|
|
126
|
+
- Removed `url` field from datasource block
|
|
127
|
+
- Database URL now passed via adapter in `prismaClientConstructor`
|
|
128
|
+
|
|
129
|
+
### Required Dependencies
|
|
130
|
+
|
|
131
|
+
Install the appropriate adapter for your database:
|
|
132
|
+
- **SQLite**: `@prisma/adapter-better-sqlite3` + `better-sqlite3`
|
|
133
|
+
- **PostgreSQL**: `@prisma/adapter-pg` + `pg`
|
|
134
|
+
- **MySQL**: `@prisma/adapter-mysql` + `mysql2`
|
|
135
|
+
|
|
136
|
+
## Migration Steps
|
|
137
|
+
1. Install Prisma 7 and adapter:
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
pnpm add @prisma/client@7 @prisma/adapter-better-sqlite3 better-sqlite3
|
|
141
|
+
pnpm add -D prisma@7
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
2. Update your `opensaas.config.ts` to include `prismaClientConstructor` (see example above)
|
|
145
|
+
3. Regenerate schema and client:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
pnpm generate
|
|
149
|
+
npx prisma generate
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
4. Push schema to database:
|
|
153
|
+
```bash
|
|
154
|
+
pnpm db:push
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
See the updated documentation in CLAUDE.md for more examples including PostgreSQL and custom adapters.
|
|
158
|
+
|
|
159
|
+
### Patch Changes
|
|
160
|
+
|
|
161
|
+
- [#107](https://github.com/OpenSaasAU/stack/pull/107) [`f4f3966`](https://github.com/OpenSaasAU/stack/commit/f4f3966faedba07d2cf412fab826d81e30c63a6c) Thanks [@borisno2](https://github.com/borisno2)! - Add strict typing for plugin runtime services
|
|
162
|
+
|
|
163
|
+
This change implements fully typed plugin runtime services, providing autocomplete and type safety for `context.plugins` throughout the codebase.
|
|
164
|
+
|
|
165
|
+
**Core Changes:**
|
|
166
|
+
- Extended `Plugin` type with optional `runtimeServiceTypes` metadata for type-safe code generation
|
|
167
|
+
- Converted `OpenSaasConfig` and `AccessContext` from `type` to `interface` to enable module augmentation
|
|
168
|
+
- Plugins can now declare their runtime service type information
|
|
169
|
+
|
|
170
|
+
**Auth Plugin:**
|
|
171
|
+
- Added `AuthRuntimeServices` interface defining runtime service types
|
|
172
|
+
- Exported runtime types from package
|
|
173
|
+
- Users now get full autocomplete for `context.plugins.auth.getUser()` and `context.plugins.auth.getCurrentUser()`
|
|
174
|
+
|
|
175
|
+
**RAG Plugin:**
|
|
176
|
+
- Added `RAGRuntimeServices` interface defining runtime service types
|
|
177
|
+
- Exported runtime types from package
|
|
178
|
+
- Users now get full autocomplete for `context.plugins.rag.generateEmbedding()` and `context.plugins.rag.generateEmbeddings()`
|
|
179
|
+
|
|
180
|
+
**CLI Generator:**
|
|
181
|
+
- Enhanced plugin types generator to import and use plugin runtime service types
|
|
182
|
+
- Generated `.opensaas/plugin-types.ts` now includes proper type imports
|
|
183
|
+
- `PluginServices` interface extends `Record<string, Record<string, any> | undefined>` for type compatibility
|
|
184
|
+
- Maintains backwards compatibility with plugins that don't provide type metadata
|
|
185
|
+
|
|
186
|
+
**UI Package:**
|
|
187
|
+
- Updated `AdminUI` props to accept contexts with typed plugin services
|
|
188
|
+
- Ensures compatibility between generated context types and UI components
|
|
189
|
+
|
|
190
|
+
**Benefits:**
|
|
191
|
+
- Full TypeScript autocomplete for all plugin runtime methods
|
|
192
|
+
- Compile-time type checking catches errors early
|
|
193
|
+
- Better IDE experience with hover documentation and jump-to-definition
|
|
194
|
+
- Backwards compatible - third-party plugins without type metadata continue to work
|
|
195
|
+
- Zero type errors in examples
|
|
196
|
+
|
|
197
|
+
**Example:**
|
|
198
|
+
|
|
199
|
+
```typescript
|
|
200
|
+
const context = await getContext()
|
|
201
|
+
|
|
202
|
+
// Fully typed with autocomplete
|
|
203
|
+
context.plugins.auth.getUser('123') // (userId: string) => Promise<unknown>
|
|
204
|
+
context.plugins.rag.generateEmbedding('text') // (text: string, providerName?: string) => Promise<number[]>
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
- Updated dependencies [[`fcf5cb8`](https://github.com/OpenSaasAU/stack/commit/fcf5cb8bbd55d802350b8d97e342dd7f6368163b), [`3851a3c`](https://github.com/OpenSaasAU/stack/commit/3851a3cf72e78dc6f01a73c6fff97deca6fad043), [`f4f3966`](https://github.com/OpenSaasAU/stack/commit/f4f3966faedba07d2cf412fab826d81e30c63a6c)]:
|
|
208
|
+
- @opensaas/stack-core@0.2.0
|
|
209
|
+
|
|
210
|
+
## 0.1.7
|
|
211
|
+
|
|
212
|
+
### Patch Changes
|
|
213
|
+
|
|
214
|
+
- 372d467: Add sudo to context to bypass access control
|
|
215
|
+
- Updated dependencies [372d467]
|
|
216
|
+
- @opensaas/stack-core@0.1.7
|
|
217
|
+
|
|
3
218
|
## 0.1.6
|
|
4
219
|
|
|
5
220
|
### Patch Changes
|
package/CLAUDE.md
CHANGED
|
@@ -87,11 +87,10 @@ Outputs:
|
|
|
87
87
|
```prisma
|
|
88
88
|
datasource db {
|
|
89
89
|
provider = "sqlite"
|
|
90
|
-
url = env("DATABASE_URL")
|
|
91
90
|
}
|
|
92
91
|
|
|
93
92
|
generator client {
|
|
94
|
-
provider = "prisma-client
|
|
93
|
+
provider = "prisma-client"
|
|
95
94
|
}
|
|
96
95
|
|
|
97
96
|
model Post {
|
|
@@ -102,6 +101,31 @@ model Post {
|
|
|
102
101
|
}
|
|
103
102
|
```
|
|
104
103
|
|
|
104
|
+
**Note:** Prisma 7 no longer includes `url` in the schema. The database URL is passed to PrismaClient via adapters in the `prismaClientConstructor` function.
|
|
105
|
+
|
|
106
|
+
### Prisma CLI Config (`prisma.config.ts`)
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
import 'dotenv/config'
|
|
110
|
+
import { defineConfig, env } from 'prisma/config'
|
|
111
|
+
|
|
112
|
+
export default defineConfig({
|
|
113
|
+
schema: 'prisma/schema.prisma',
|
|
114
|
+
datasource: {
|
|
115
|
+
url: env('DATABASE_URL'),
|
|
116
|
+
},
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Purpose:** Prisma 7 requires this file at the project root for CLI commands like `prisma db push` and `prisma migrate dev` to work. This is separate from the runtime configuration.
|
|
121
|
+
|
|
122
|
+
**Key points:**
|
|
123
|
+
|
|
124
|
+
- Generated automatically by `opensaas generate`
|
|
125
|
+
- Requires `dotenv` package to load `.env` files
|
|
126
|
+
- Reads `DATABASE_URL` from environment variables
|
|
127
|
+
- Only used by Prisma CLI commands, not by application runtime
|
|
128
|
+
|
|
105
129
|
### Types (`.opensaas/types.ts`)
|
|
106
130
|
|
|
107
131
|
```typescript
|
|
@@ -128,13 +152,16 @@ import { createContext } from '@opensaas/stack-core'
|
|
|
128
152
|
import { PrismaClient } from '@prisma/client'
|
|
129
153
|
import config from '../opensaas.config'
|
|
130
154
|
|
|
131
|
-
|
|
155
|
+
// Prisma 7 requires adapters - PrismaClient created via prismaClientConstructor
|
|
156
|
+
const prisma = config.db.prismaClientConstructor(PrismaClient)
|
|
132
157
|
|
|
133
158
|
export function getContext(session?: any) {
|
|
134
159
|
return createContext(config, prisma, session)
|
|
135
160
|
}
|
|
136
161
|
```
|
|
137
162
|
|
|
163
|
+
**Note:** The actual generated context is more sophisticated with async config resolution and singleton management, but this shows the core pattern.
|
|
164
|
+
|
|
138
165
|
## Integration Points
|
|
139
166
|
|
|
140
167
|
### With @opensaas/stack-core
|
|
@@ -155,9 +182,9 @@ export function getContext(session?: any) {
|
|
|
155
182
|
|
|
156
183
|
Workflow:
|
|
157
184
|
|
|
158
|
-
1. `opensaas generate` → creates `prisma/schema.prisma`
|
|
185
|
+
1. `opensaas generate` → creates `prisma/schema.prisma` and `prisma.config.ts`
|
|
159
186
|
2. `npx prisma generate` → creates Prisma Client
|
|
160
|
-
3. `npx prisma db push` → pushes schema to database
|
|
187
|
+
3. `npx prisma db push` → pushes schema to database (uses `prisma.config.ts` for datasource URL)
|
|
161
188
|
|
|
162
189
|
## Common Patterns
|
|
163
190
|
|
|
@@ -195,30 +222,51 @@ pnpm next dev
|
|
|
195
222
|
- run: pnpm test
|
|
196
223
|
```
|
|
197
224
|
|
|
198
|
-
### Custom Prisma Client
|
|
225
|
+
### Custom Prisma Client (Required in Prisma 7)
|
|
199
226
|
|
|
200
|
-
|
|
227
|
+
**All configs must provide `prismaClientConstructor`** with a database adapter:
|
|
201
228
|
|
|
202
229
|
```typescript
|
|
230
|
+
// SQLite example
|
|
231
|
+
import { PrismaBetterSQLite3 } from '@prisma/adapter-better-sqlite3'
|
|
232
|
+
import Database from 'better-sqlite3'
|
|
233
|
+
|
|
234
|
+
config({
|
|
235
|
+
db: {
|
|
236
|
+
provider: 'sqlite',
|
|
237
|
+
url: process.env.DATABASE_URL || 'file:./dev.db',
|
|
238
|
+
prismaClientConstructor: (PrismaClient) => {
|
|
239
|
+
const db = new Database(process.env.DATABASE_URL || './dev.db')
|
|
240
|
+
const adapter = new PrismaBetterSQLite3(db)
|
|
241
|
+
return new PrismaClient({ adapter })
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
})
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
```typescript
|
|
248
|
+
// PostgreSQL example
|
|
249
|
+
import { PrismaPg } from '@prisma/adapter-pg'
|
|
250
|
+
import pg from 'pg'
|
|
251
|
+
|
|
203
252
|
config({
|
|
204
253
|
db: {
|
|
205
254
|
provider: 'postgresql',
|
|
206
255
|
url: process.env.DATABASE_URL,
|
|
207
256
|
prismaClientConstructor: (PrismaClient) => {
|
|
208
|
-
|
|
257
|
+
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL })
|
|
258
|
+
const adapter = new PrismaPg(pool)
|
|
209
259
|
return new PrismaClient({ adapter })
|
|
210
260
|
},
|
|
211
261
|
},
|
|
212
262
|
})
|
|
213
263
|
```
|
|
214
264
|
|
|
215
|
-
Generated context uses
|
|
265
|
+
Generated context always uses the constructor:
|
|
216
266
|
|
|
217
267
|
```typescript
|
|
218
268
|
// .opensaas/context.ts
|
|
219
|
-
const prisma = config.db.prismaClientConstructor
|
|
220
|
-
? config.db.prismaClientConstructor(PrismaClient)
|
|
221
|
-
: new PrismaClient()
|
|
269
|
+
const prisma = config.db.prismaClientConstructor(PrismaClient)
|
|
222
270
|
```
|
|
223
271
|
|
|
224
272
|
## Type Patching
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAiBA,wBAAsB,eAAe,kBA+KpC"}
|
|
@@ -4,7 +4,7 @@ import { execSync } from 'child_process';
|
|
|
4
4
|
import chalk from 'chalk';
|
|
5
5
|
import ora from 'ora';
|
|
6
6
|
import { createJiti } from 'jiti';
|
|
7
|
-
import { writePrismaSchema, writeTypes, writeContext, patchPrismaTypes, } from '../generator/index.js';
|
|
7
|
+
import { writePrismaSchema, writePrismaConfig, writeTypes, writeLists, writeContext, writePluginTypes, patchPrismaTypes, } from '../generator/index.js';
|
|
8
8
|
export async function generateCommand() {
|
|
9
9
|
console.log(chalk.bold('\n🚀 OpenSaas Generator\n'));
|
|
10
10
|
const cwd = process.cwd();
|
|
@@ -51,15 +51,24 @@ export async function generateCommand() {
|
|
|
51
51
|
const generatorSpinner = ora('Generating schema and types...').start();
|
|
52
52
|
try {
|
|
53
53
|
const prismaSchemaPath = path.join(cwd, 'prisma', 'schema.prisma');
|
|
54
|
+
const prismaConfigPath = path.join(cwd, 'prisma.config.ts');
|
|
54
55
|
const typesPath = path.join(cwd, '.opensaas', 'types.ts');
|
|
56
|
+
const listsPath = path.join(cwd, '.opensaas', 'lists.ts');
|
|
55
57
|
const contextPath = path.join(cwd, '.opensaas', 'context.ts');
|
|
58
|
+
const pluginTypesPath = path.join(cwd, '.opensaas', 'plugin-types.ts');
|
|
56
59
|
writePrismaSchema(config, prismaSchemaPath);
|
|
60
|
+
writePrismaConfig(config, prismaConfigPath);
|
|
57
61
|
writeTypes(config, typesPath);
|
|
62
|
+
writeLists(config, listsPath);
|
|
58
63
|
writeContext(config, contextPath);
|
|
64
|
+
writePluginTypes(config, pluginTypesPath);
|
|
59
65
|
generatorSpinner.succeed(chalk.green('Schema generation complete'));
|
|
60
66
|
console.log(chalk.green('✅ Prisma schema generated'));
|
|
67
|
+
console.log(chalk.green('✅ Prisma config generated'));
|
|
61
68
|
console.log(chalk.green('✅ TypeScript types generated'));
|
|
69
|
+
console.log(chalk.green('✅ Lists namespace generated'));
|
|
62
70
|
console.log(chalk.green('✅ Context factory generated'));
|
|
71
|
+
console.log(chalk.green('✅ Plugin types generated'));
|
|
63
72
|
// Execute afterGenerate hooks if plugins are present
|
|
64
73
|
if (config.plugins && config.plugins.length > 0) {
|
|
65
74
|
const afterGenSpinner = ora('Running plugin afterGenerate hooks...').start();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8FnC,wBAAgB,gBAAgB,IAAI,OAAO,CAoC1C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP command group for AI-assisted development
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
import { dirname, join } from 'path';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
function getServerPath() {
|
|
11
|
+
// In development: cli/dist/mcp/server/index.js
|
|
12
|
+
// In production: same structure
|
|
13
|
+
return join(__dirname, '..', 'mcp', 'server', 'index.js');
|
|
14
|
+
}
|
|
15
|
+
function installMCPServer() {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
console.log('📦 Installing OpenSaaS Stack MCP server...\n');
|
|
18
|
+
const serverPath = getServerPath();
|
|
19
|
+
const claudeCommand = ['claude', 'mcp', 'add', 'opensaas-stack', '--', 'node', serverPath];
|
|
20
|
+
console.log(`Running: ${claudeCommand.join(' ')}\n`);
|
|
21
|
+
const child = spawn(claudeCommand[0], claudeCommand.slice(1), {
|
|
22
|
+
stdio: 'inherit',
|
|
23
|
+
});
|
|
24
|
+
child.on('close', (code) => {
|
|
25
|
+
if (code === 0) {
|
|
26
|
+
console.log('\n✅ OpenSaaS Stack MCP server installed successfully!');
|
|
27
|
+
console.log('\n📖 Available tools:');
|
|
28
|
+
console.log(' - opensaas_implement_feature');
|
|
29
|
+
console.log(' - opensaas_feature_docs');
|
|
30
|
+
console.log(' - opensaas_list_features');
|
|
31
|
+
console.log(' - opensaas_suggest_features');
|
|
32
|
+
console.log(' - opensaas_validate_feature');
|
|
33
|
+
console.log('\n🚀 Restart Claude Code to use the MCP tools.');
|
|
34
|
+
resolve();
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
console.error(`\n❌ Installation failed with code ${code}. Please ensure Claude Code is installed.`);
|
|
38
|
+
reject(new Error(`Installation failed with code ${code}`));
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
child.on('error', (error) => {
|
|
42
|
+
console.error('\n❌ Error during installation:', error.message);
|
|
43
|
+
console.error('\nMake sure Claude Code is installed and the "claude" command is available.');
|
|
44
|
+
reject(error);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function uninstallMCPServer() {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
console.log('🗑️ Uninstalling OpenSaaS Stack MCP server...\n');
|
|
51
|
+
const child = spawn('claude', ['mcp', 'remove', 'opensaas-stack'], {
|
|
52
|
+
stdio: 'inherit',
|
|
53
|
+
});
|
|
54
|
+
child.on('close', (code) => {
|
|
55
|
+
if (code === 0) {
|
|
56
|
+
console.log('\n✅ OpenSaaS Stack MCP server uninstalled successfully.');
|
|
57
|
+
resolve();
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
console.error(`\n❌ Uninstall failed with code ${code}`);
|
|
61
|
+
reject(new Error(`Uninstall failed with code ${code}`));
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
child.on('error', (error) => {
|
|
65
|
+
console.error('\n❌ Error during uninstall:', error.message);
|
|
66
|
+
reject(error);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function startMCPServer() {
|
|
71
|
+
console.log('🚀 Starting OpenSaaS Stack MCP server...\n');
|
|
72
|
+
const serverPath = getServerPath();
|
|
73
|
+
const child = spawn('node', [serverPath], {
|
|
74
|
+
stdio: 'inherit',
|
|
75
|
+
});
|
|
76
|
+
child.on('error', (error) => {
|
|
77
|
+
console.error('❌ Error starting server:', error.message);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function createMCPCommand() {
|
|
82
|
+
const mcp = new Command('mcp');
|
|
83
|
+
mcp.description('MCP server for AI-assisted development with Claude Code');
|
|
84
|
+
mcp
|
|
85
|
+
.command('install')
|
|
86
|
+
.description('Install MCP server in Claude Code')
|
|
87
|
+
.action(async () => {
|
|
88
|
+
try {
|
|
89
|
+
await installMCPServer();
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
mcp
|
|
97
|
+
.command('uninstall')
|
|
98
|
+
.description('Remove MCP server from Claude Code')
|
|
99
|
+
.action(async () => {
|
|
100
|
+
try {
|
|
101
|
+
await uninstallMCPServer();
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
mcp
|
|
109
|
+
.command('start')
|
|
110
|
+
.description('Start MCP server directly (for debugging)')
|
|
111
|
+
.action(() => {
|
|
112
|
+
startMCPServer();
|
|
113
|
+
});
|
|
114
|
+
return mcp;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0L9D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAU7E"}
|
|
@@ -12,9 +12,27 @@ export function generateContext(config) {
|
|
|
12
12
|
// Check if storage is configured
|
|
13
13
|
const hasStorage = !!config.storage && Object.keys(config.storage).length > 0;
|
|
14
14
|
// Generate the Prisma client instantiation code
|
|
15
|
+
// Prisma 7 requires adapters, so prismaClientConstructor must be provided
|
|
15
16
|
const prismaInstantiation = hasCustomConstructor
|
|
16
17
|
? `resolvedConfig.db.prismaClientConstructor!(PrismaClient)`
|
|
17
|
-
: `
|
|
18
|
+
: `(() => {
|
|
19
|
+
throw new Error(
|
|
20
|
+
'Prisma 7 requires a database adapter. Please add prismaClientConstructor to your opensaas.config.ts db configuration.\\n\\n' +
|
|
21
|
+
'Example for SQLite:\\n' +
|
|
22
|
+
'import { PrismaBetterSQLite3 } from \\'@prisma/adapter-better-sqlite3\\'\\n' +
|
|
23
|
+
'import Database from \\'better-sqlite3\\'\\n\\n' +
|
|
24
|
+
'db: {\\n' +
|
|
25
|
+
' provider: \\'sqlite\\',\\n' +
|
|
26
|
+
' url: process.env.DATABASE_URL || \\'file:./dev.db\\',\\n' +
|
|
27
|
+
' prismaClientConstructor: (PrismaClient) => {\\n' +
|
|
28
|
+
' const db = new Database(process.env.DATABASE_URL || \\'./dev.db\\')\\n' +
|
|
29
|
+
' const adapter = new PrismaBetterSQLite3(db)\\n' +
|
|
30
|
+
' return new PrismaClient({ adapter })\\n' +
|
|
31
|
+
' }\\n' +
|
|
32
|
+
'}\\n\\n' +
|
|
33
|
+
'See https://www.prisma.io/docs/orm/overview/databases/database-drivers for more information.'
|
|
34
|
+
)
|
|
35
|
+
})()`;
|
|
18
36
|
// Generate storage utilities if storage is configured
|
|
19
37
|
const storageUtilities = hasStorage
|
|
20
38
|
? `
|
|
@@ -97,7 +115,7 @@ const storage = {
|
|
|
97
115
|
|
|
98
116
|
import { getContext as getOpensaasContext } from '@opensaas/stack-core'
|
|
99
117
|
import type { Session as OpensaasSession, OpenSaasConfig } from '@opensaas/stack-core'
|
|
100
|
-
import { PrismaClient } from './prisma-client'
|
|
118
|
+
import { PrismaClient } from './prisma-client/client'
|
|
101
119
|
import type { Context } from './types'
|
|
102
120
|
import configOrPromise from '../opensaas.config'
|
|
103
121
|
|
|
@@ -106,7 +124,7 @@ const configPromise = Promise.resolve(configOrPromise)
|
|
|
106
124
|
let resolvedConfig: OpenSaasConfig | null = null
|
|
107
125
|
|
|
108
126
|
// Internal Prisma singleton - managed automatically
|
|
109
|
-
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient |
|
|
127
|
+
const globalForPrisma = globalThis as unknown as { prisma: PrismaClient | null }
|
|
110
128
|
let prisma: PrismaClient | null = null
|
|
111
129
|
|
|
112
130
|
async function getPrisma() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAA;IAEhE,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7E,gDAAgD;IAChD,MAAM,mBAAmB,GAAG,oBAAoB;QAC9C,CAAC,CAAC,0DAA0D;QAC5D,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/generator/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,wDAAwD;IACxD,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAA;IAEhE,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;IAE7E,gDAAgD;IAChD,0EAA0E;IAC1E,MAAM,mBAAmB,GAAG,oBAAoB;QAC9C,CAAC,CAAC,0DAA0D;QAC5D,CAAC,CAAC;;;;;;;;;;;;;;;;;SAiBG,CAAA;IAEP,sDAAsD;IACtD,MAAM,gBAAgB,GAAG,UAAU;QACjC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDL;QACG,CAAC,CAAC;;;;;;;;;;;;;;;;;;CAkBL,CAAA;IAEC,2CAA2C;IAC3C,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCA4BgC,mBAAmB;;;;;;;;;;;;EAY1D,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2CjB,CAAA;AACD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAsB,EAAE,UAAkB;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAA;IAEvC,0BAA0B;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,CAAC;IAED,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { generatePrismaSchema, writePrismaSchema } from './prisma.js';
|
|
2
|
+
export { generatePrismaConfig, writePrismaConfig } from './prisma-config.js';
|
|
2
3
|
export { generateTypes, writeTypes } from './types.js';
|
|
4
|
+
export { generateListsNamespace, writeLists } from './lists.js';
|
|
3
5
|
export { patchPrismaTypes } from './type-patcher.js';
|
|
4
6
|
export { generateContext, writeContext } from './context.js';
|
|
7
|
+
export { generatePluginTypes, writePluginTypes } from './plugin-types.js';
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACrE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA"}
|
package/dist/generator/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { generatePrismaSchema, writePrismaSchema } from './prisma.js';
|
|
2
|
+
export { generatePrismaConfig, writePrismaConfig } from './prisma-config.js';
|
|
2
3
|
export { generateTypes, writeTypes } from './types.js';
|
|
4
|
+
export { generateListsNamespace, writeLists } from './lists.js';
|
|
3
5
|
export { patchPrismaTypes } from './type-patcher.js';
|
|
4
6
|
export { generateContext, writeContext } from './context.js';
|
|
7
|
+
export { generatePluginTypes, writePluginTypes } from './plugin-types.js';
|
|
5
8
|
//# sourceMappingURL=index.js.map
|