@opensaas/stack-cli 0.4.0 → 0.6.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.
Files changed (90) hide show
  1. package/README.md +76 -0
  2. package/dist/commands/migrate.d.ts +9 -0
  3. package/dist/commands/migrate.d.ts.map +1 -0
  4. package/dist/commands/migrate.js +299 -0
  5. package/dist/commands/migrate.js.map +1 -0
  6. package/dist/index.js +3 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/mcp/lib/documentation-provider.d.ts +23 -0
  9. package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
  10. package/dist/mcp/lib/documentation-provider.js +471 -0
  11. package/dist/mcp/lib/documentation-provider.js.map +1 -1
  12. package/dist/mcp/lib/wizards/migration-wizard.d.ts +80 -0
  13. package/dist/mcp/lib/wizards/migration-wizard.d.ts.map +1 -0
  14. package/dist/mcp/lib/wizards/migration-wizard.js +499 -0
  15. package/dist/mcp/lib/wizards/migration-wizard.js.map +1 -0
  16. package/dist/mcp/server/index.d.ts.map +1 -1
  17. package/dist/mcp/server/index.js +103 -0
  18. package/dist/mcp/server/index.js.map +1 -1
  19. package/dist/mcp/server/stack-mcp-server.d.ts +85 -0
  20. package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -1
  21. package/dist/mcp/server/stack-mcp-server.js +219 -0
  22. package/dist/mcp/server/stack-mcp-server.js.map +1 -1
  23. package/dist/migration/generators/migration-generator.d.ts +60 -0
  24. package/dist/migration/generators/migration-generator.d.ts.map +1 -0
  25. package/dist/migration/generators/migration-generator.js +510 -0
  26. package/dist/migration/generators/migration-generator.js.map +1 -0
  27. package/dist/migration/introspectors/index.d.ts +12 -0
  28. package/dist/migration/introspectors/index.d.ts.map +1 -0
  29. package/dist/migration/introspectors/index.js +10 -0
  30. package/dist/migration/introspectors/index.js.map +1 -0
  31. package/dist/migration/introspectors/keystone-introspector.d.ts +59 -0
  32. package/dist/migration/introspectors/keystone-introspector.d.ts.map +1 -0
  33. package/dist/migration/introspectors/keystone-introspector.js +229 -0
  34. package/dist/migration/introspectors/keystone-introspector.js.map +1 -0
  35. package/dist/migration/introspectors/nextjs-introspector.d.ts +59 -0
  36. package/dist/migration/introspectors/nextjs-introspector.d.ts.map +1 -0
  37. package/dist/migration/introspectors/nextjs-introspector.js +159 -0
  38. package/dist/migration/introspectors/nextjs-introspector.js.map +1 -0
  39. package/dist/migration/introspectors/prisma-introspector.d.ts +45 -0
  40. package/dist/migration/introspectors/prisma-introspector.d.ts.map +1 -0
  41. package/dist/migration/introspectors/prisma-introspector.js +190 -0
  42. package/dist/migration/introspectors/prisma-introspector.js.map +1 -0
  43. package/dist/migration/types.d.ts +86 -0
  44. package/dist/migration/types.d.ts.map +1 -0
  45. package/dist/migration/types.js +5 -0
  46. package/dist/migration/types.js.map +1 -0
  47. package/package.json +10 -2
  48. package/plugin/.claude-plugin/plugin.json +15 -0
  49. package/plugin/README.md +112 -0
  50. package/plugin/agents/migration-assistant.md +150 -0
  51. package/plugin/commands/analyze-schema.md +34 -0
  52. package/plugin/commands/generate-config.md +33 -0
  53. package/plugin/commands/validate-migration.md +34 -0
  54. package/plugin/skills/opensaas-migration/SKILL.md +192 -0
  55. package/.turbo/turbo-build.log +0 -4
  56. package/CHANGELOG.md +0 -410
  57. package/CLAUDE.md +0 -298
  58. package/src/commands/__snapshots__/generate.test.ts.snap +0 -413
  59. package/src/commands/dev.test.ts +0 -215
  60. package/src/commands/dev.ts +0 -48
  61. package/src/commands/generate.test.ts +0 -282
  62. package/src/commands/generate.ts +0 -182
  63. package/src/commands/init.ts +0 -34
  64. package/src/commands/mcp.ts +0 -135
  65. package/src/generator/__snapshots__/context.test.ts.snap +0 -361
  66. package/src/generator/__snapshots__/prisma.test.ts.snap +0 -174
  67. package/src/generator/__snapshots__/types.test.ts.snap +0 -1702
  68. package/src/generator/context.test.ts +0 -139
  69. package/src/generator/context.ts +0 -227
  70. package/src/generator/index.ts +0 -7
  71. package/src/generator/lists.test.ts +0 -335
  72. package/src/generator/lists.ts +0 -140
  73. package/src/generator/plugin-types.ts +0 -147
  74. package/src/generator/prisma-config.ts +0 -46
  75. package/src/generator/prisma-extensions.ts +0 -159
  76. package/src/generator/prisma.test.ts +0 -211
  77. package/src/generator/prisma.ts +0 -161
  78. package/src/generator/types.test.ts +0 -268
  79. package/src/generator/types.ts +0 -537
  80. package/src/index.ts +0 -42
  81. package/src/mcp/lib/documentation-provider.ts +0 -203
  82. package/src/mcp/lib/features/catalog.ts +0 -301
  83. package/src/mcp/lib/generators/feature-generator.ts +0 -598
  84. package/src/mcp/lib/types.ts +0 -89
  85. package/src/mcp/lib/wizards/wizard-engine.ts +0 -427
  86. package/src/mcp/server/index.ts +0 -240
  87. package/src/mcp/server/stack-mcp-server.ts +0 -301
  88. package/tsconfig.json +0 -13
  89. package/tsconfig.tsbuildinfo +0 -1
  90. package/vitest.config.ts +0 -26
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Documentation provider - Fetches documentation from the hosted docs site
3
3
  */
4
+ import fs from 'fs-extra';
5
+ import path from 'path';
6
+ import { glob } from 'glob';
4
7
  export class OpenSaasDocumentationProvider {
5
8
  DOCS_API = 'https://stack.opensaas.au/api/search';
6
9
  cache = new Map();
@@ -142,6 +145,474 @@ For ${query}, you can also check:
142
145
  relatedTopics: [],
143
146
  };
144
147
  }
148
+ /**
149
+ * Search local CLAUDE.md files in the monorepo
150
+ */
151
+ async searchLocalDocs(query) {
152
+ const cwd = process.cwd();
153
+ // Find CLAUDE.md files
154
+ const claudeFiles = await glob('**/CLAUDE.md', {
155
+ cwd,
156
+ ignore: ['node_modules/**', '.next/**', 'dist/**', 'build/**'],
157
+ absolute: true,
158
+ });
159
+ const results = [];
160
+ const queryLower = query.toLowerCase();
161
+ const queryTerms = queryLower.split(/\s+/);
162
+ for (const file of claudeFiles) {
163
+ try {
164
+ const content = await fs.readFile(file, 'utf-8');
165
+ const contentLower = content.toLowerCase();
166
+ // Simple relevance scoring
167
+ let score = 0;
168
+ for (const term of queryTerms) {
169
+ if (contentLower.includes(term)) {
170
+ score += (contentLower.match(new RegExp(term, 'g')) || []).length;
171
+ }
172
+ }
173
+ if (score > 0) {
174
+ // Extract relevant section
175
+ const lines = content.split('\n');
176
+ const relevantLines = [];
177
+ let inRelevantSection = false;
178
+ for (const line of lines) {
179
+ const lineLower = line.toLowerCase();
180
+ // Check if line starts a section
181
+ if (line.startsWith('#')) {
182
+ // Check if this section title is relevant
183
+ const titleRelevant = queryTerms.some((term) => lineLower.includes(term));
184
+ if (titleRelevant) {
185
+ inRelevantSection = true;
186
+ relevantLines.push(line);
187
+ }
188
+ else if (inRelevantSection) {
189
+ // We've left the relevant section
190
+ break;
191
+ }
192
+ }
193
+ else if (inRelevantSection) {
194
+ relevantLines.push(line);
195
+ }
196
+ else if (queryTerms.some((term) => lineLower.includes(term))) {
197
+ // Found relevant content outside a section
198
+ relevantLines.push(line);
199
+ }
200
+ }
201
+ if (relevantLines.length > 0) {
202
+ results.push({
203
+ file: path.relative(cwd, file),
204
+ content: relevantLines.slice(0, 50).join('\n'),
205
+ score,
206
+ });
207
+ }
208
+ }
209
+ }
210
+ catch {
211
+ // Skip files that can't be read
212
+ }
213
+ }
214
+ // Sort by score
215
+ results.sort((a, b) => b.score - a.score);
216
+ if (results.length === 0) {
217
+ return { content: '', files: [] };
218
+ }
219
+ const content = results
220
+ .slice(0, 3)
221
+ .map((r) => `### From \`${r.file}\`\n\n${r.content}`)
222
+ .join('\n\n---\n\n');
223
+ return {
224
+ content,
225
+ files: results.map((r) => r.file),
226
+ };
227
+ }
228
+ /**
229
+ * Get example config code for a feature
230
+ */
231
+ async getExampleConfig(feature) {
232
+ const examples = {
233
+ 'blog-with-auth': {
234
+ description: 'A blog application with user authentication and post management',
235
+ code: `import { config, list } from '@opensaas/stack-core'
236
+ import { text, relationship, timestamp, select } from '@opensaas/stack-core/fields'
237
+ import { withAuth, authConfig } from '@opensaas/stack-auth'
238
+
239
+ const isAuthor = ({ session, item }) =>
240
+ session?.userId === item?.authorId
241
+
242
+ export default withAuth(
243
+ config({
244
+ db: {
245
+ provider: 'sqlite',
246
+ url: 'file:./dev.db',
247
+ prismaClientConstructor: (PrismaClient) => {
248
+ // ... adapter setup
249
+ },
250
+ },
251
+ lists: {
252
+ Post: list({
253
+ fields: {
254
+ title: text({ validation: { isRequired: true } }),
255
+ content: text({ ui: { displayMode: 'textarea' } }),
256
+ status: select({
257
+ options: [
258
+ { label: 'Draft', value: 'draft' },
259
+ { label: 'Published', value: 'published' },
260
+ ],
261
+ defaultValue: 'draft',
262
+ }),
263
+ author: relationship({ ref: 'User.posts' }),
264
+ publishedAt: timestamp(),
265
+ },
266
+ access: {
267
+ operation: {
268
+ query: () => true,
269
+ create: ({ session }) => !!session,
270
+ update: isAuthor,
271
+ delete: isAuthor,
272
+ },
273
+ },
274
+ }),
275
+ },
276
+ }),
277
+ authConfig({ emailAndPassword: { enabled: true } })
278
+ )`,
279
+ notes: 'This example uses the auth plugin for user management. The `isAuthor` helper restricts updates to the post creator.',
280
+ sourcePath: 'examples/auth-demo/opensaas.config.ts',
281
+ },
282
+ 'access-control': {
283
+ description: 'Common access control patterns for different scenarios',
284
+ code: `// Public read, authenticated write
285
+ access: {
286
+ operation: {
287
+ query: () => true,
288
+ create: ({ session }) => !!session,
289
+ update: ({ session }) => !!session,
290
+ delete: ({ session }) => !!session,
291
+ },
292
+ }
293
+
294
+ // Only owners can access
295
+ const isOwner = ({ session, item }) =>
296
+ session?.userId === item?.userId
297
+
298
+ access: {
299
+ operation: {
300
+ query: isOwner,
301
+ update: isOwner,
302
+ delete: isOwner,
303
+ },
304
+ filter: {
305
+ query: ({ session }) => ({ userId: { equals: session?.userId } }),
306
+ },
307
+ }
308
+
309
+ // Role-based access
310
+ const isAdmin = ({ session }) => session?.role === 'admin'
311
+ const isOwnerOrAdmin = (args) => isOwner(args) || isAdmin(args)
312
+
313
+ access: {
314
+ operation: {
315
+ query: () => true,
316
+ create: ({ session }) => !!session,
317
+ update: isOwnerOrAdmin,
318
+ delete: isAdmin,
319
+ },
320
+ }`,
321
+ notes: 'Access control functions receive session and item context. Use filter access to automatically scope queries.',
322
+ sourcePath: 'packages/core/CLAUDE.md',
323
+ },
324
+ relationships: {
325
+ description: 'How to define relationships between models',
326
+ code: `lists: {
327
+ User: list({
328
+ fields: {
329
+ name: text(),
330
+ email: text({ isIndexed: 'unique' }),
331
+ posts: relationship({ ref: 'Post.author', many: true }),
332
+ comments: relationship({ ref: 'Comment.author', many: true }),
333
+ },
334
+ }),
335
+
336
+ Post: list({
337
+ fields: {
338
+ title: text(),
339
+ content: text(),
340
+ author: relationship({ ref: 'User.posts' }),
341
+ comments: relationship({ ref: 'Comment.post', many: true }),
342
+ tags: relationship({ ref: 'Tag.posts', many: true }),
343
+ },
344
+ }),
345
+
346
+ Comment: list({
347
+ fields: {
348
+ content: text(),
349
+ author: relationship({ ref: 'User.comments' }),
350
+ post: relationship({ ref: 'Post.comments' }),
351
+ },
352
+ }),
353
+
354
+ Tag: list({
355
+ fields: {
356
+ name: text(),
357
+ posts: relationship({ ref: 'Post.tags', many: true }),
358
+ },
359
+ }),
360
+ }`,
361
+ notes: 'Relationships use `ref: "ListName.fieldName"` format. Set `many: true` for one-to-many or many-to-many.',
362
+ sourcePath: 'examples/blog/opensaas.config.ts',
363
+ },
364
+ hooks: {
365
+ description: 'Data transformation and side effect hooks',
366
+ code: `Post: list({
367
+ fields: {
368
+ title: text(),
369
+ slug: text(),
370
+ status: select({
371
+ options: [
372
+ { label: 'Draft', value: 'draft' },
373
+ { label: 'Published', value: 'published' },
374
+ ],
375
+ }),
376
+ publishedAt: timestamp(),
377
+ },
378
+ hooks: {
379
+ resolveInput: async ({ resolvedData, operation }) => {
380
+ // Auto-generate slug from title
381
+ if (resolvedData.title && !resolvedData.slug) {
382
+ resolvedData.slug = resolvedData.title
383
+ .toLowerCase()
384
+ .replace(/[^a-z0-9]+/g, '-')
385
+ }
386
+
387
+ // Set publishedAt when status changes to published
388
+ if (operation === 'update' && resolvedData.status === 'published') {
389
+ resolvedData.publishedAt = new Date()
390
+ }
391
+
392
+ return resolvedData
393
+ },
394
+ afterOperation: async ({ operation, item }) => {
395
+ // Send notification after publish
396
+ if (operation === 'update' && item?.status === 'published') {
397
+ console.log(\`Post published: \${item.title}\`)
398
+ // await sendNotification(item)
399
+ }
400
+ },
401
+ },
402
+ })`,
403
+ notes: 'resolveInput transforms data before save. afterOperation runs side effects. Use beforeOperation for validation.',
404
+ sourcePath: 'packages/core/CLAUDE.md',
405
+ },
406
+ 'custom-fields': {
407
+ description: 'Creating custom field types',
408
+ code: `// In your field definition file
409
+ import type { BaseFieldConfig } from '@opensaas/stack-core'
410
+ import { z } from 'zod'
411
+
412
+ export type SlugField = BaseFieldConfig & {
413
+ type: 'slug'
414
+ sourceField?: string
415
+ }
416
+
417
+ export function slug(options?: Omit<SlugField, 'type'>): SlugField {
418
+ return {
419
+ type: 'slug',
420
+ ...options,
421
+
422
+ getZodSchema: (fieldName, operation) => {
423
+ if (operation === 'create') {
424
+ return z.string().regex(/^[a-z0-9-]+$/).optional()
425
+ }
426
+ return z.string().regex(/^[a-z0-9-]+$/).optional()
427
+ },
428
+
429
+ getPrismaType: (fieldName) => ({
430
+ type: 'String',
431
+ modifiers: '?',
432
+ attributes: ['@unique'],
433
+ }),
434
+
435
+ getTypeScriptType: () => ({
436
+ type: 'string',
437
+ optional: true,
438
+ }),
439
+ }
440
+ }
441
+
442
+ // Usage in config
443
+ fields: {
444
+ title: text({ validation: { isRequired: true } }),
445
+ urlSlug: slug({ sourceField: 'title' }),
446
+ }`,
447
+ notes: 'Custom fields implement getZodSchema, getPrismaType, and getTypeScriptType methods. See packages/tiptap for a full example.',
448
+ sourcePath: 'examples/custom-field',
449
+ },
450
+ };
451
+ const normalizedFeature = feature.toLowerCase().replace(/\s+/g, '-');
452
+ return examples[normalizedFeature] || null;
453
+ }
454
+ /**
455
+ * Get migration-specific documentation for a project type
456
+ */
457
+ async findMigrationGuide(projectType) {
458
+ const guides = {
459
+ prisma: `# Prisma to OpenSaaS Migration
460
+
461
+ ## Type Mapping
462
+
463
+ | Prisma Type | OpenSaaS Field |
464
+ |-------------|----------------|
465
+ | String | text() |
466
+ | Int | integer() |
467
+ | Boolean | checkbox() |
468
+ | DateTime | timestamp() |
469
+ | Json | text() with custom handling |
470
+ | Enum | select() |
471
+ | @relation | relationship() |
472
+
473
+ ## Key Changes
474
+
475
+ 1. **Models → Lists**: Prisma models become OpenSaaS lists
476
+ 2. **Access Control**: Add operation-level and field-level access
477
+ 3. **Database URL**: Now provided via prismaClientConstructor
478
+ 4. **Relationships**: Use \`ref: 'ListName.fieldName'\` format
479
+
480
+ ## Common Patterns
481
+
482
+ ### Before (Prisma)
483
+ \`\`\`prisma
484
+ model Post {
485
+ id String @id @default(cuid())
486
+ title String
487
+ author User @relation(fields: [authorId], references: [id])
488
+ authorId String
489
+ }
490
+ \`\`\`
491
+
492
+ ### After (OpenSaaS)
493
+ \`\`\`typescript
494
+ Post: list({
495
+ fields: {
496
+ title: text({ validation: { isRequired: true } }),
497
+ author: relationship({ ref: 'User.posts' }),
498
+ },
499
+ access: {
500
+ operation: {
501
+ query: () => true,
502
+ create: ({ session }) => !!session,
503
+ },
504
+ },
505
+ })
506
+ \`\`\`
507
+ `,
508
+ keystone: `# KeystoneJS to OpenSaaS Migration
509
+
510
+ ## Good News!
511
+
512
+ KeystoneJS and OpenSaaS Stack are very similar. Migration is mostly:
513
+ 1. Update import paths
514
+ 2. Minor syntax adjustments
515
+ 3. Add prismaClientConstructor for Prisma 7
516
+
517
+ ## Key Changes
518
+
519
+ ### Imports
520
+ \`\`\`typescript
521
+ // Before (KeystoneJS)
522
+ import { config, list } from '@keystone-6/core'
523
+ import { text, relationship } from '@keystone-6/core/fields'
524
+
525
+ // After (OpenSaaS)
526
+ import { config, list } from '@opensaas/stack-core'
527
+ import { text, relationship } from '@opensaas/stack-core/fields'
528
+ \`\`\`
529
+
530
+ ### Database Config
531
+ \`\`\`typescript
532
+ // Before
533
+ db: {
534
+ provider: 'sqlite',
535
+ url: 'file:./dev.db',
536
+ }
537
+
538
+ // After (Prisma 7 requires adapters)
539
+ db: {
540
+ provider: 'sqlite',
541
+ url: 'file:./dev.db',
542
+ prismaClientConstructor: (PrismaClient) => {
543
+ const db = new Database('./dev.db')
544
+ const adapter = new PrismaBetterSQLite3(db)
545
+ return new PrismaClient({ adapter })
546
+ },
547
+ }
548
+ \`\`\`
549
+
550
+ ## Field Types (1:1 mapping)
551
+
552
+ Most field types work identically:
553
+ - text() → text()
554
+ - integer() → integer()
555
+ - checkbox() → checkbox()
556
+ - timestamp() → timestamp()
557
+ - select() → select()
558
+ - relationship() → relationship()
559
+
560
+ ## Access Control (same patterns)
561
+
562
+ Access control functions work the same way. Just copy them over!
563
+ `,
564
+ nextjs: `# Next.js to OpenSaaS Migration
565
+
566
+ ## Overview
567
+
568
+ If you have a Next.js project without Prisma, you'll need to:
569
+ 1. Define your data models in opensaas.config.ts
570
+ 2. Run the generator to create Prisma schema
571
+ 3. Set up your database
572
+
573
+ ## Steps
574
+
575
+ 1. **Install Dependencies**
576
+ \`\`\`bash
577
+ pnpm add @opensaas/stack-core @prisma/client prisma
578
+ pnpm add -D @prisma/adapter-better-sqlite3 better-sqlite3
579
+ \`\`\`
580
+
581
+ 2. **Create opensaas.config.ts**
582
+ \`\`\`typescript
583
+ import { config, list } from '@opensaas/stack-core'
584
+ import { text, integer } from '@opensaas/stack-core/fields'
585
+
586
+ export default config({
587
+ db: {
588
+ provider: 'sqlite',
589
+ url: 'file:./dev.db',
590
+ prismaClientConstructor: (PrismaClient) => {
591
+ // See examples for adapter setup
592
+ },
593
+ },
594
+ lists: {
595
+ // Define your models here
596
+ },
597
+ })
598
+ \`\`\`
599
+
600
+ 3. **Generate and Push**
601
+ \`\`\`bash
602
+ pnpm opensaas generate
603
+ npx prisma generate
604
+ npx prisma db push
605
+ \`\`\`
606
+
607
+ ## If You're Using an Auth Library
608
+
609
+ - **next-auth**: Consider migrating to Better-auth via @opensaas/stack-auth
610
+ - **clerk**: Can continue using Clerk alongside OpenSaaS
611
+ - **better-auth**: Use @opensaas/stack-auth plugin
612
+ `,
613
+ };
614
+ return guides[projectType.toLowerCase()] || guides.prisma;
615
+ }
145
616
  /**
146
617
  * Clear expired cache entries
147
618
  */
@@ -1 +1 @@
1
- {"version":3,"file":"documentation-provider.js","sourceRoot":"","sources":["../../../src/mcp/lib/documentation-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documentation-provider.js","sourceRoot":"","sources":["../../../src/mcp/lib/documentation-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,UAAU,CAAA;AACzB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AA+B3B,MAAM,OAAO,6BAA6B;IACvB,QAAQ,GAAG,sCAAsC,CAAA;IAC1D,KAAK,GAAG,IAAI,GAAG,EAA4D,CAAA;IAClE,SAAS,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAA,CAAC,aAAa;IAEzD,2CAA2C;IACnC,aAAa,GAA2B;QAC9C,MAAM,EAAE,aAAa;QACrB,aAAa,EAAE,aAAa;QAC5B,YAAY,EAAE,aAAa;QAC3B,MAAM,EAAE,gBAAgB;QACxB,gBAAgB,EAAE,gBAAgB;QAClC,WAAW,EAAE,gBAAgB;QAC7B,IAAI,EAAE,gBAAgB;QACtB,cAAc,EAAE,gBAAgB;QAChC,KAAK,EAAE,gBAAgB;QACvB,SAAS,EAAE,gBAAgB;QAC3B,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,OAAO;QAClB,OAAO,EAAE,eAAe;QACxB,MAAM,EAAE,eAAe;QACvB,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,iBAAiB;QACzB,iBAAiB,EAAE,iBAAiB;QACpC,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,cAAc;QACtB,MAAM,EAAE,eAAe;QACvB,aAAa,EAAE,eAAe;QAC9B,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,gBAAgB;QAC1B,UAAU,EAAE,YAAY;QACxB,MAAM,EAAE,YAAY;KACrB,CAAA;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,GAAG;QACvD,MAAM,QAAQ,GAAG,UAAU,KAAK,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAA;QAEvD,cAAc;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACvC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7D,OAAO,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;gBAC1C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;iBACnC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aACjD,CAAC,CAAA;YAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;YAC3D,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAA;YAEtD,MAAM,SAAS,GAAwB;gBACrC,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC/C,GAAG,EAAE,4BAA4B;gBACjC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC;gBACpD,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;aACvD,CAAA;YAED,mBAAmB;YACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;YAEpE,OAAO,SAAS,CAAA;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,iCAAiC;QACjC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAA;QAExE,OAAO,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,EAAE,GAAG,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAuB;QACjD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,wCAAwC,CAAA;QACjD,CAAC;QAED,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,WAAW,KAAK,GAAG,CAAC,EAAE,CAAA;YAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;YAC7C,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YAE7C,OAAO,OAAO,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,gBAAgB,KAAK,SAAS,MAAM,CAAC,OAAO,IAAI,CAAA;QACtG,CAAC,CAAC;aACD,IAAI,CAAC,WAAW,CAAC,CAAA;IACtB,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAuB;QACjD,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,MAAM,cAAc,GAAG,iBAAiB,CAAA;QAExC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YACpD,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,YAAY,CAAA;IACrB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,OAAuB;QAClD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;QAEhC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,KAAa;QACnC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE;;;;;MAKT,KAAK;;8CAEmC;YACxC,GAAG,EAAE,4BAA4B;YACjC,YAAY,EAAE,EAAE;YAChB,aAAa,EAAE,EAAE;SAClB,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,KAAa;QACjC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;QAEzB,uBAAuB;QACvB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YAC7C,GAAG;YACH,MAAM,EAAE,CAAC,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC;YAC9D,QAAQ,EAAE,IAAI;SACf,CAAC,CAAA;QAEF,MAAM,OAAO,GAA4D,EAAE,CAAA;QAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QAE1C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBAChD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;gBAE1C,2BAA2B;gBAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;gBACb,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAA;oBACnE,CAAC;gBACH,CAAC;gBAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,2BAA2B;oBAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACjC,MAAM,aAAa,GAAa,EAAE,CAAA;oBAClC,IAAI,iBAAiB,GAAG,KAAK,CAAA;oBAE7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAA;wBAEpC,iCAAiC;wBACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;4BACzB,0CAA0C;4BAC1C,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;4BACzE,IAAI,aAAa,EAAE,CAAC;gCAClB,iBAAiB,GAAG,IAAI,CAAA;gCACxB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;4BAC1B,CAAC;iCAAM,IAAI,iBAAiB,EAAE,CAAC;gCAC7B,kCAAkC;gCAClC,MAAK;4BACP,CAAC;wBACH,CAAC;6BAAM,IAAI,iBAAiB,EAAE,CAAC;4BAC7B,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC1B,CAAC;6BAAM,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;4BAC/D,2CAA2C;4BAC3C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBAC1B,CAAC;oBACH,CAAC;oBAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC7B,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;4BAC9B,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;4BAC9C,KAAK;yBACN,CAAC,CAAA;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QAEzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;QACnC,CAAC;QAED,MAAM,OAAO,GAAG,OAAO;aACpB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;aACpD,IAAI,CAAC,aAAa,CAAC,CAAA;QAEtB,OAAO;YACL,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClC,CAAA;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,MAAM,QAAQ,GAAkC;YAC9C,gBAAgB,EAAE;gBAChB,WAAW,EAAE,iEAAiE;gBAC9E,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CZ;gBACM,KAAK,EACH,qHAAqH;gBACvH,UAAU,EAAE,uCAAuC;aACpD;YAED,gBAAgB,EAAE;gBAChB,WAAW,EAAE,wDAAwD;gBACrE,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCZ;gBACM,KAAK,EACH,8GAA8G;gBAChH,UAAU,EAAE,yBAAyB;aACtC;YAED,aAAa,EAAE;gBACb,WAAW,EAAE,4CAA4C;gBACzD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCZ;gBACM,KAAK,EACH,yGAAyG;gBAC3G,UAAU,EAAE,kCAAkC;aAC/C;YAED,KAAK,EAAE;gBACL,WAAW,EAAE,2CAA2C;gBACxD,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCX;gBACK,KAAK,EACH,iHAAiH;gBACnH,UAAU,EAAE,yBAAyB;aACtC;YAED,eAAe,EAAE;gBACf,WAAW,EAAE,6BAA6B;gBAC1C,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsCZ;gBACM,KAAK,EACH,6HAA6H;gBAC/H,UAAU,EAAE,uBAAuB;aACpC;SACF,CAAA;QAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QACpE,OAAO,QAAQ,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAA;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,WAAmB;QAC1C,MAAM,MAAM,GAA2B;YACrC,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb;YAEK,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDf;YAEK,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDb;SACI,CAAA;QAED,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACpB,CAAC;CACF"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Migration Wizard - Interactive guide for migrating to OpenSaaS Stack
3
+ */
4
+ import type { ProjectType, MigrationSession, IntrospectedSchema } from '../../../migration/types.js';
5
+ export declare class MigrationWizard {
6
+ private sessions;
7
+ private generator;
8
+ constructor();
9
+ /**
10
+ * Start a new migration wizard session
11
+ */
12
+ startMigration(projectType: ProjectType, analysis?: IntrospectedSchema): Promise<{
13
+ content: Array<{
14
+ type: 'text';
15
+ text: string;
16
+ }>;
17
+ }>;
18
+ /**
19
+ * Answer a wizard question
20
+ */
21
+ answerQuestion(sessionId: string, answer: string | boolean | string[]): Promise<{
22
+ content: Array<{
23
+ type: 'text';
24
+ text: string;
25
+ }>;
26
+ }>;
27
+ /**
28
+ * Generate questions based on project type and analysis
29
+ */
30
+ private generateQuestions;
31
+ /**
32
+ * Generate the final migration config
33
+ */
34
+ private generateMigrationConfig;
35
+ /**
36
+ * Check if analysis includes auth-related models
37
+ */
38
+ private hasAuthModels;
39
+ /**
40
+ * Guess which models should have owner-based access
41
+ */
42
+ private guessOwnerModels;
43
+ /**
44
+ * Render a question for display
45
+ */
46
+ private renderQuestion;
47
+ /**
48
+ * Validate an answer
49
+ */
50
+ private validateAnswer;
51
+ /**
52
+ * Normalize boolean answer
53
+ */
54
+ private normalizeBoolean;
55
+ /**
56
+ * Format an answer for display
57
+ */
58
+ private formatAnswer;
59
+ /**
60
+ * Generate a unique session ID
61
+ */
62
+ private generateSessionId;
63
+ /**
64
+ * Render a progress bar
65
+ */
66
+ private renderProgressBar;
67
+ /**
68
+ * Get a session by ID (for testing/debugging)
69
+ */
70
+ getSession(sessionId: string): MigrationSession | undefined;
71
+ /**
72
+ * Clear completed sessions
73
+ */
74
+ clearCompletedSessions(): void;
75
+ /**
76
+ * Clear old sessions (older than 1 hour)
77
+ */
78
+ clearOldSessions(): void;
79
+ }
80
+ //# sourceMappingURL=migration-wizard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-wizard.d.ts","sourceRoot":"","sources":["../../../../src/mcp/lib/wizards/migration-wizard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAGnB,MAAM,6BAA6B,CAAA;AAOpC,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,SAAS,CAAoB;;IAMrC;;OAEG;IACG,cAAc,CAClB,WAAW,EAAE,WAAW,EACxB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAsE9D;;OAEG;IACG,cAAc,CAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAClC,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAwF9D;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6GzB;;OAEG;YACW,uBAAuB;IAgGrC;;OAEG;IACH,OAAO,CAAC,aAAa;IAMrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwBxB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI3D;;OAEG;IACH,sBAAsB,IAAI,IAAI;IAQ9B;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAQzB"}