@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.
- package/README.md +76 -0
- package/dist/commands/migrate.d.ts +9 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +299 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/lib/documentation-provider.d.ts +23 -0
- package/dist/mcp/lib/documentation-provider.d.ts.map +1 -1
- package/dist/mcp/lib/documentation-provider.js +471 -0
- package/dist/mcp/lib/documentation-provider.js.map +1 -1
- package/dist/mcp/lib/wizards/migration-wizard.d.ts +80 -0
- package/dist/mcp/lib/wizards/migration-wizard.d.ts.map +1 -0
- package/dist/mcp/lib/wizards/migration-wizard.js +499 -0
- package/dist/mcp/lib/wizards/migration-wizard.js.map +1 -0
- package/dist/mcp/server/index.d.ts.map +1 -1
- package/dist/mcp/server/index.js +103 -0
- package/dist/mcp/server/index.js.map +1 -1
- package/dist/mcp/server/stack-mcp-server.d.ts +85 -0
- package/dist/mcp/server/stack-mcp-server.d.ts.map +1 -1
- package/dist/mcp/server/stack-mcp-server.js +219 -0
- package/dist/mcp/server/stack-mcp-server.js.map +1 -1
- package/dist/migration/generators/migration-generator.d.ts +60 -0
- package/dist/migration/generators/migration-generator.d.ts.map +1 -0
- package/dist/migration/generators/migration-generator.js +510 -0
- package/dist/migration/generators/migration-generator.js.map +1 -0
- package/dist/migration/introspectors/index.d.ts +12 -0
- package/dist/migration/introspectors/index.d.ts.map +1 -0
- package/dist/migration/introspectors/index.js +10 -0
- package/dist/migration/introspectors/index.js.map +1 -0
- package/dist/migration/introspectors/keystone-introspector.d.ts +59 -0
- package/dist/migration/introspectors/keystone-introspector.d.ts.map +1 -0
- package/dist/migration/introspectors/keystone-introspector.js +229 -0
- package/dist/migration/introspectors/keystone-introspector.js.map +1 -0
- package/dist/migration/introspectors/nextjs-introspector.d.ts +59 -0
- package/dist/migration/introspectors/nextjs-introspector.d.ts.map +1 -0
- package/dist/migration/introspectors/nextjs-introspector.js +159 -0
- package/dist/migration/introspectors/nextjs-introspector.js.map +1 -0
- package/dist/migration/introspectors/prisma-introspector.d.ts +45 -0
- package/dist/migration/introspectors/prisma-introspector.d.ts.map +1 -0
- package/dist/migration/introspectors/prisma-introspector.js +190 -0
- package/dist/migration/introspectors/prisma-introspector.js.map +1 -0
- package/dist/migration/types.d.ts +86 -0
- package/dist/migration/types.d.ts.map +1 -0
- package/dist/migration/types.js +5 -0
- package/dist/migration/types.js.map +1 -0
- package/package.json +10 -2
- package/plugin/.claude-plugin/plugin.json +15 -0
- package/plugin/README.md +112 -0
- package/plugin/agents/migration-assistant.md +150 -0
- package/plugin/commands/analyze-schema.md +34 -0
- package/plugin/commands/generate-config.md +33 -0
- package/plugin/commands/validate-migration.md +34 -0
- package/plugin/skills/opensaas-migration/SKILL.md +192 -0
- package/.turbo/turbo-build.log +0 -4
- package/CHANGELOG.md +0 -410
- package/CLAUDE.md +0 -298
- package/src/commands/__snapshots__/generate.test.ts.snap +0 -413
- package/src/commands/dev.test.ts +0 -215
- package/src/commands/dev.ts +0 -48
- package/src/commands/generate.test.ts +0 -282
- package/src/commands/generate.ts +0 -182
- package/src/commands/init.ts +0 -34
- package/src/commands/mcp.ts +0 -135
- package/src/generator/__snapshots__/context.test.ts.snap +0 -361
- package/src/generator/__snapshots__/prisma.test.ts.snap +0 -174
- package/src/generator/__snapshots__/types.test.ts.snap +0 -1702
- package/src/generator/context.test.ts +0 -139
- package/src/generator/context.ts +0 -227
- package/src/generator/index.ts +0 -7
- package/src/generator/lists.test.ts +0 -335
- package/src/generator/lists.ts +0 -140
- package/src/generator/plugin-types.ts +0 -147
- package/src/generator/prisma-config.ts +0 -46
- package/src/generator/prisma-extensions.ts +0 -159
- package/src/generator/prisma.test.ts +0 -211
- package/src/generator/prisma.ts +0 -161
- package/src/generator/types.test.ts +0 -268
- package/src/generator/types.ts +0 -537
- package/src/index.ts +0 -42
- package/src/mcp/lib/documentation-provider.ts +0 -203
- package/src/mcp/lib/features/catalog.ts +0 -301
- package/src/mcp/lib/generators/feature-generator.ts +0 -598
- package/src/mcp/lib/types.ts +0 -89
- package/src/mcp/lib/wizards/wizard-engine.ts +0 -427
- package/src/mcp/server/index.ts +0 -240
- package/src/mcp/server/stack-mcp-server.ts +0 -301
- package/tsconfig.json +0 -13
- package/tsconfig.tsbuildinfo +0 -1
- package/vitest.config.ts +0 -26
package/README.md
CHANGED
|
@@ -143,6 +143,82 @@ pnpm db:push # Create database
|
|
|
143
143
|
pnpm dev # Start dev server
|
|
144
144
|
```
|
|
145
145
|
|
|
146
|
+
### `opensaas migrate`
|
|
147
|
+
|
|
148
|
+
Migrate an existing Prisma, KeystoneJS, or Next.js project to OpenSaas Stack.
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
opensaas migrate [options]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**Options:**
|
|
155
|
+
|
|
156
|
+
- `--with-ai` - Enable AI-guided migration with Claude Code
|
|
157
|
+
- `--type <type>` - Force project type detection (prisma, nextjs, keystone)
|
|
158
|
+
|
|
159
|
+
**What it does:**
|
|
160
|
+
|
|
161
|
+
1. Detects project type (Prisma, KeystoneJS, Next.js)
|
|
162
|
+
2. Analyzes schema and counts models
|
|
163
|
+
3. With `--with-ai`: Sets up Claude Code integration
|
|
164
|
+
4. Provides next steps for migration
|
|
165
|
+
|
|
166
|
+
**Examples:**
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Basic migration analysis
|
|
170
|
+
opensaas migrate
|
|
171
|
+
|
|
172
|
+
# AI-guided migration (recommended)
|
|
173
|
+
opensaas migrate --with-ai
|
|
174
|
+
|
|
175
|
+
# Force project type
|
|
176
|
+
opensaas migrate --type prisma --with-ai
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
**AI-Assisted Migration (with --with-ai):**
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
🚀 OpenSaas Stack Migration
|
|
183
|
+
|
|
184
|
+
✔ Detected: prisma, nextjs
|
|
185
|
+
✔ Found 8 models
|
|
186
|
+
├─ User (6 fields)
|
|
187
|
+
├─ Post (10 fields)
|
|
188
|
+
├─ Comment (5 fields)
|
|
189
|
+
└─ ...
|
|
190
|
+
✔ Claude Code ready
|
|
191
|
+
├─ Created .claude directory
|
|
192
|
+
├─ Generated migration assistant
|
|
193
|
+
└─ Registered MCP server
|
|
194
|
+
|
|
195
|
+
✅ Analysis complete!
|
|
196
|
+
|
|
197
|
+
🤖 Next Steps:
|
|
198
|
+
|
|
199
|
+
1. Open this project in Claude Code
|
|
200
|
+
2. Ask: "Help me migrate to OpenSaas Stack"
|
|
201
|
+
3. Follow the interactive wizard
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**After running:**
|
|
205
|
+
|
|
206
|
+
1. Open project in Claude Code
|
|
207
|
+
2. Ask: "Help me migrate to OpenSaas Stack"
|
|
208
|
+
3. Answer wizard questions about:
|
|
209
|
+
- Database configuration
|
|
210
|
+
- Authentication needs
|
|
211
|
+
- Access control patterns
|
|
212
|
+
- Admin UI preferences
|
|
213
|
+
4. Claude generates `opensaas.config.ts`
|
|
214
|
+
5. Install dependencies and run `opensaas generate`
|
|
215
|
+
|
|
216
|
+
**Manual Migration:**
|
|
217
|
+
|
|
218
|
+
Without `--with-ai`, the command provides project analysis and you create the config manually.
|
|
219
|
+
|
|
220
|
+
**See also:** [Migration Guide](https://stack.opensaas.au/docs/guides/migration)
|
|
221
|
+
|
|
146
222
|
## Usage in Projects
|
|
147
223
|
|
|
148
224
|
### Quick Start (New Projects)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration command - Helps migrate existing projects to OpenSaaS Stack
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
/**
|
|
6
|
+
* Create the migrate command for Commander
|
|
7
|
+
*/
|
|
8
|
+
export declare function createMigrateCommand(): Command;
|
|
9
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AA8UnC;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAkB9C"}
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration command - Helps migrate existing projects to OpenSaaS Stack
|
|
3
|
+
*/
|
|
4
|
+
import { Command } from 'commander';
|
|
5
|
+
import * as fs from 'fs';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ora from 'ora';
|
|
9
|
+
/**
|
|
10
|
+
* Detect what type of project this is
|
|
11
|
+
*/
|
|
12
|
+
async function detectProjectType(cwd) {
|
|
13
|
+
const types = [];
|
|
14
|
+
// Check for Prisma
|
|
15
|
+
const prismaSchemaPath = path.join(cwd, 'prisma', 'schema.prisma');
|
|
16
|
+
if (fs.existsSync(prismaSchemaPath)) {
|
|
17
|
+
types.push('prisma');
|
|
18
|
+
}
|
|
19
|
+
// Check for KeystoneJS
|
|
20
|
+
const keystoneConfigPath = path.join(cwd, 'keystone.config.ts');
|
|
21
|
+
const keystoneAltPath = path.join(cwd, 'keystone.ts');
|
|
22
|
+
if (fs.existsSync(keystoneConfigPath) || fs.existsSync(keystoneAltPath)) {
|
|
23
|
+
types.push('keystone');
|
|
24
|
+
}
|
|
25
|
+
// Check for Next.js
|
|
26
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
27
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
28
|
+
const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
29
|
+
if (pkg.dependencies?.next || pkg.devDependencies?.next) {
|
|
30
|
+
types.push('nextjs');
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return types;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Analyze a Prisma schema
|
|
37
|
+
*/
|
|
38
|
+
async function analyzePrismaSchema(cwd) {
|
|
39
|
+
const schemaPath = path.join(cwd, 'prisma', 'schema.prisma');
|
|
40
|
+
const schema = fs.readFileSync(schemaPath, 'utf-8');
|
|
41
|
+
// Extract models
|
|
42
|
+
const modelRegex = /model\s+(\w+)\s*\{([^}]+)\}/g;
|
|
43
|
+
const models = [];
|
|
44
|
+
let match;
|
|
45
|
+
while ((match = modelRegex.exec(schema)) !== null) {
|
|
46
|
+
const name = match[1];
|
|
47
|
+
const body = match[2];
|
|
48
|
+
const fieldCount = body
|
|
49
|
+
.split('\n')
|
|
50
|
+
.filter((line) => line.trim() && !line.trim().startsWith('@@') && !line.trim().startsWith('//')).length;
|
|
51
|
+
models.push({ name, fieldCount });
|
|
52
|
+
}
|
|
53
|
+
// Extract provider
|
|
54
|
+
const providerMatch = schema.match(/provider\s*=\s*"(\w+)"/);
|
|
55
|
+
const provider = providerMatch ? providerMatch[1] : 'unknown';
|
|
56
|
+
return { models, provider };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Ensure directory exists
|
|
60
|
+
*/
|
|
61
|
+
function ensureDir(dirPath) {
|
|
62
|
+
if (!fs.existsSync(dirPath)) {
|
|
63
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get plugin source path (relative to CLI package)
|
|
68
|
+
*/
|
|
69
|
+
function getPluginSourcePath() {
|
|
70
|
+
// This will be the path to the plugin directory within the installed CLI package
|
|
71
|
+
const cliPackageDir = path.dirname(path.dirname(new URL(import.meta.url).pathname));
|
|
72
|
+
return path.join(cliPackageDir, 'plugin');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Setup Claude Code integration with plugin
|
|
76
|
+
*/
|
|
77
|
+
async function setupClaudeCode(cwd, analysis) {
|
|
78
|
+
const claudeDir = path.join(cwd, '.claude');
|
|
79
|
+
// Create .claude directory
|
|
80
|
+
ensureDir(claudeDir);
|
|
81
|
+
// Create .mcp.json at project root (project-scoped MCP configuration)
|
|
82
|
+
const mcpConfig = {
|
|
83
|
+
mcpServers: {
|
|
84
|
+
'opensaas-migration': {
|
|
85
|
+
type: 'stdio',
|
|
86
|
+
command: 'npx',
|
|
87
|
+
args: ['-y', '@opensaas/stack-cli', 'mcp', 'start'],
|
|
88
|
+
env: {},
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
fs.writeFileSync(path.join(cwd, '.mcp.json'), JSON.stringify(mcpConfig, null, 2));
|
|
93
|
+
// Write project metadata file for the plugin to read
|
|
94
|
+
const projectMetadata = {
|
|
95
|
+
projectTypes: analysis.projectTypes,
|
|
96
|
+
provider: analysis.provider || 'sqlite',
|
|
97
|
+
models: analysis.models || [],
|
|
98
|
+
hasAuth: analysis.hasAuth || false,
|
|
99
|
+
cwd: analysis.cwd,
|
|
100
|
+
};
|
|
101
|
+
fs.writeFileSync(path.join(claudeDir, 'opensaas-project.json'), JSON.stringify(projectMetadata, null, 2));
|
|
102
|
+
// Configure Claude Code plugin in settings.json
|
|
103
|
+
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
104
|
+
let settings = {};
|
|
105
|
+
// Read existing settings if they exist
|
|
106
|
+
if (fs.existsSync(settingsPath)) {
|
|
107
|
+
try {
|
|
108
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
// If settings file is invalid, start fresh
|
|
112
|
+
settings = {};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Get the plugin source path
|
|
116
|
+
const pluginSource = getPluginSourcePath();
|
|
117
|
+
// Add plugin configuration
|
|
118
|
+
if (!settings.plugins) {
|
|
119
|
+
settings.plugins = {};
|
|
120
|
+
}
|
|
121
|
+
if (!settings.plugins.installed) {
|
|
122
|
+
settings.plugins.installed = [];
|
|
123
|
+
}
|
|
124
|
+
// Check if plugin is already installed
|
|
125
|
+
const pluginId = 'opensaas-migration@local';
|
|
126
|
+
const isInstalled = settings.plugins.installed.some((p) => typeof p === 'string' ? p === pluginId : p.id === pluginId);
|
|
127
|
+
if (!isInstalled) {
|
|
128
|
+
settings.plugins.installed.push({
|
|
129
|
+
id: pluginId,
|
|
130
|
+
source: pluginSource,
|
|
131
|
+
enabled: true,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
// Write settings back
|
|
135
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
136
|
+
// Create a simple README explaining the setup
|
|
137
|
+
const readmeContent = `# OpenSaaS Stack Migration
|
|
138
|
+
|
|
139
|
+
This project is set up for AI-assisted migration to OpenSaaS Stack.
|
|
140
|
+
|
|
141
|
+
## Project Summary
|
|
142
|
+
|
|
143
|
+
- **Project Types:** ${analysis.projectTypes.join(', ')}
|
|
144
|
+
- **Database Provider:** ${analysis.provider || 'Not detected'}
|
|
145
|
+
- **Models Detected:** ${analysis.models?.length || 0}
|
|
146
|
+
|
|
147
|
+
${analysis.models && analysis.models.length > 0
|
|
148
|
+
? `\n### Models\n\n${analysis.models.map((m) => `- ${m.name} (${m.fieldCount} fields)`).join('\n')}`
|
|
149
|
+
: ''}
|
|
150
|
+
|
|
151
|
+
## Quick Start
|
|
152
|
+
|
|
153
|
+
Ask Claude: **"Help me migrate to OpenSaaS Stack"**
|
|
154
|
+
|
|
155
|
+
Claude will guide you through:
|
|
156
|
+
1. Reviewing your current schema
|
|
157
|
+
2. Configuring access control
|
|
158
|
+
3. Setting up authentication (optional)
|
|
159
|
+
4. Generating \`opensaas.config.ts\`
|
|
160
|
+
|
|
161
|
+
## What's Configured
|
|
162
|
+
|
|
163
|
+
### OpenSaaS Migration Plugin
|
|
164
|
+
|
|
165
|
+
The migration assistant plugin provides:
|
|
166
|
+
- **Migration Assistant Agent**: Contextual help throughout the migration
|
|
167
|
+
- **Slash Commands**: \`/analyze-schema\`, \`/generate-config\`, \`/validate-migration\`
|
|
168
|
+
- **Migration Skill**: Expert knowledge about migration patterns
|
|
169
|
+
|
|
170
|
+
### MCP Server
|
|
171
|
+
|
|
172
|
+
The \`.mcp.json\` file configures the OpenSaaS migration MCP server with tools for:
|
|
173
|
+
- Schema analysis
|
|
174
|
+
- Interactive migration wizard
|
|
175
|
+
- Documentation search
|
|
176
|
+
- Code generation
|
|
177
|
+
|
|
178
|
+
When you open this project in Claude Code, you may be prompted to approve the MCP server.
|
|
179
|
+
|
|
180
|
+
## Resources
|
|
181
|
+
|
|
182
|
+
- [OpenSaaS Stack Documentation](https://stack.opensaas.au/)
|
|
183
|
+
- [Migration Guide](https://stack.opensaas.au/guides/migration)
|
|
184
|
+
- [GitHub Repository](https://github.com/OpenSaasAU/stack)
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
*Generated by \`npx @opensaas/stack-cli migrate --with-ai\`*
|
|
189
|
+
`;
|
|
190
|
+
fs.writeFileSync(path.join(claudeDir, 'README.md'), readmeContent);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Main migrate command
|
|
194
|
+
*/
|
|
195
|
+
async function migrateCommand(options) {
|
|
196
|
+
const cwd = process.cwd();
|
|
197
|
+
console.log(chalk.bold.cyan('\n🚀 OpenSaaS Stack Migration\n'));
|
|
198
|
+
// Step 1: Detect project type
|
|
199
|
+
const spinner = ora('Detecting project type...').start();
|
|
200
|
+
let projectTypes;
|
|
201
|
+
if (options.type) {
|
|
202
|
+
projectTypes = [options.type];
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
projectTypes = await detectProjectType(cwd);
|
|
206
|
+
}
|
|
207
|
+
if (projectTypes.length === 0) {
|
|
208
|
+
spinner.fail(chalk.red('No recognizable project found'));
|
|
209
|
+
console.log(chalk.dim('\nThis command works with:'));
|
|
210
|
+
console.log(chalk.dim(' - Prisma projects (prisma/schema.prisma)'));
|
|
211
|
+
console.log(chalk.dim(' - KeystoneJS projects (keystone.config.ts)'));
|
|
212
|
+
console.log(chalk.dim(' - Next.js projects (package.json with next)'));
|
|
213
|
+
console.log(chalk.dim('\nUse --type to force a project type.'));
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
spinner.succeed(chalk.green(`Detected: ${projectTypes.join(', ')}`));
|
|
217
|
+
// Step 2: Analyze schema
|
|
218
|
+
const analysisSpinner = ora('Analyzing schema...').start();
|
|
219
|
+
const analysis = {
|
|
220
|
+
projectTypes,
|
|
221
|
+
cwd,
|
|
222
|
+
};
|
|
223
|
+
if (projectTypes.includes('prisma')) {
|
|
224
|
+
try {
|
|
225
|
+
const prismaAnalysis = await analyzePrismaSchema(cwd);
|
|
226
|
+
analysis.models = prismaAnalysis.models;
|
|
227
|
+
analysis.provider = prismaAnalysis.provider;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Prisma analysis failed, continue without it
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (analysis.models && analysis.models.length > 0) {
|
|
234
|
+
analysisSpinner.succeed(chalk.green(`Found ${analysis.models.length} models`));
|
|
235
|
+
// Display model tree
|
|
236
|
+
const lastIndex = analysis.models.length - 1;
|
|
237
|
+
analysis.models.forEach((model, index) => {
|
|
238
|
+
const prefix = index === lastIndex ? '└─' : '├─';
|
|
239
|
+
console.log(chalk.dim(` ${prefix} ${model.name} (${model.fieldCount} fields)`));
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
analysisSpinner.succeed(chalk.yellow('No models found (will create from scratch)'));
|
|
244
|
+
}
|
|
245
|
+
// Step 3: Setup Claude Code (if --with-ai)
|
|
246
|
+
if (options.withAi) {
|
|
247
|
+
const claudeSpinner = ora('Setting up Claude Code...').start();
|
|
248
|
+
try {
|
|
249
|
+
await setupClaudeCode(cwd, analysis);
|
|
250
|
+
claudeSpinner.succeed(chalk.green('Claude Code ready'));
|
|
251
|
+
console.log(chalk.dim(' ├─ Created .claude directory'));
|
|
252
|
+
console.log(chalk.dim(' ├─ Installed opensaas-migration plugin'));
|
|
253
|
+
console.log(chalk.dim(' ├─ Configured .claude/settings.json'));
|
|
254
|
+
console.log(chalk.dim(' ├─ Wrote opensaas-project.json (project metadata)'));
|
|
255
|
+
console.log(chalk.dim(' └─ Created .mcp.json (MCP server config)'));
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
claudeSpinner.fail(chalk.red('Failed to setup Claude Code'));
|
|
259
|
+
console.error(error);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Step 4: Display next steps
|
|
263
|
+
console.log(chalk.green('\n✅ Analysis complete!\n'));
|
|
264
|
+
if (options.withAi) {
|
|
265
|
+
console.log(chalk.bold('🤖 Next Steps:\n'));
|
|
266
|
+
console.log(chalk.cyan(' 1. Open this project in Claude Code'));
|
|
267
|
+
console.log(chalk.cyan(' 2. Ask: "Help me migrate to OpenSaaS Stack"'));
|
|
268
|
+
console.log(chalk.cyan(' 3. Follow the interactive wizard'));
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
console.log(chalk.bold('📝 Next Steps:\n'));
|
|
272
|
+
console.log(chalk.cyan(' 1. Run with --with-ai for AI-guided migration'));
|
|
273
|
+
console.log(chalk.cyan(' 2. Or manually create opensaas.config.ts'));
|
|
274
|
+
console.log(chalk.dim('\n See: https://stack.opensaas.au/guides/migration'));
|
|
275
|
+
}
|
|
276
|
+
console.log(chalk.dim(`\n📚 Documentation: https://stack.opensaas.au/guides/migration\n`));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Create the migrate command for Commander
|
|
280
|
+
*/
|
|
281
|
+
export function createMigrateCommand() {
|
|
282
|
+
const migrate = new Command('migrate');
|
|
283
|
+
migrate.description('Migrate an existing project to OpenSaaS Stack');
|
|
284
|
+
migrate
|
|
285
|
+
.option('--with-ai', 'Enable AI-guided migration with Claude Code')
|
|
286
|
+
.option('--type <type>', 'Force project type (prisma, nextjs, keystone)')
|
|
287
|
+
.action(async (options) => {
|
|
288
|
+
try {
|
|
289
|
+
await migrateCommand(options);
|
|
290
|
+
process.exit(0);
|
|
291
|
+
}
|
|
292
|
+
catch (error) {
|
|
293
|
+
console.error(chalk.red('\n❌ Migration failed:'), error);
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
return migrate;
|
|
298
|
+
}
|
|
299
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import { generateCommand } from './commands/generate.js';
|
|
|
4
4
|
import { initCommand } from './commands/init.js';
|
|
5
5
|
import { devCommand } from './commands/dev.js';
|
|
6
6
|
import { createMCPCommand } from './commands/mcp.js';
|
|
7
|
+
import { createMigrateCommand } from './commands/migrate.js';
|
|
7
8
|
const program = new Command();
|
|
8
9
|
program.name('opensaas').description('OpenSaas Stack CLI').version('0.1.0');
|
|
9
10
|
program
|
|
@@ -33,5 +34,7 @@ program
|
|
|
33
34
|
});
|
|
34
35
|
// Add MCP command group
|
|
35
36
|
program.addCommand(createMCPCommand());
|
|
37
|
+
// Add migrate command
|
|
38
|
+
program.addCommand(createMigrateCommand());
|
|
36
39
|
program.parse();
|
|
37
40
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;AAE3E,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,qEAAqE,CAAC;KAClF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,eAAe,EAAE,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,aAAa,EAAE,sCAAsC,CAAC;KAC7D,kBAAkB,EAAE,CAAC,sCAAsC;KAC3D,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;IACrC,MAAM,IAAI,GAAG,EAAE,CAAA;IACf,IAAI,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACvC,IAAI,OAAO,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC9C,MAAM,WAAW,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC,CAAC,CAAA;AAEJ,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,oDAAoD,CAAC;KACjE,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,UAAU,EAAE,CAAA;AACpB,CAAC,CAAC,CAAA;AAEJ,wBAAwB;AACxB,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAEtC,sBAAsB;AACtB,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;AAE1C,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
* Documentation provider - Fetches documentation from the hosted docs site
|
|
3
3
|
*/
|
|
4
4
|
import type { DocumentationLookup } from './types.js';
|
|
5
|
+
interface LocalDocResult {
|
|
6
|
+
content: string;
|
|
7
|
+
files: string[];
|
|
8
|
+
}
|
|
9
|
+
interface ExampleConfig {
|
|
10
|
+
description: string;
|
|
11
|
+
code: string;
|
|
12
|
+
notes?: string;
|
|
13
|
+
sourcePath: string;
|
|
14
|
+
}
|
|
5
15
|
export declare class OpenSaasDocumentationProvider {
|
|
6
16
|
private readonly DOCS_API;
|
|
7
17
|
private cache;
|
|
@@ -31,6 +41,18 @@ export declare class OpenSaasDocumentationProvider {
|
|
|
31
41
|
* Fallback documentation when API is unavailable
|
|
32
42
|
*/
|
|
33
43
|
private getFallbackDocs;
|
|
44
|
+
/**
|
|
45
|
+
* Search local CLAUDE.md files in the monorepo
|
|
46
|
+
*/
|
|
47
|
+
searchLocalDocs(query: string): Promise<LocalDocResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Get example config code for a feature
|
|
50
|
+
*/
|
|
51
|
+
getExampleConfig(feature: string): Promise<ExampleConfig | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Get migration-specific documentation for a project type
|
|
54
|
+
*/
|
|
55
|
+
findMigrationGuide(projectType: string): Promise<string>;
|
|
34
56
|
/**
|
|
35
57
|
* Clear expired cache entries
|
|
36
58
|
*/
|
|
@@ -40,4 +62,5 @@ export declare class OpenSaasDocumentationProvider {
|
|
|
40
62
|
*/
|
|
41
63
|
clearCache(): void;
|
|
42
64
|
}
|
|
65
|
+
export {};
|
|
43
66
|
//# sourceMappingURL=documentation-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentation-provider.d.ts","sourceRoot":"","sources":["../../../src/mcp/lib/documentation-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"documentation-provider.d.ts","sourceRoot":"","sources":["../../../src/mcp/lib/documentation-provider.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAkBrD,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,UAAU,aAAa;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,6BAA6B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyC;IAClE,OAAO,CAAC,KAAK,CAAsE;IACnF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAG3C,OAAO,CAAC,aAAa,CA4BpB;IAED;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0CxF;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAO/D;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsF7D;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA0OtE;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmK9D;;OAEG;IACH,iBAAiB,IAAI,IAAI;IASzB;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB"}
|