create-chaaskit 0.1.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 (122) hide show
  1. package/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +25 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/add-infra.d.ts +6 -0
  6. package/dist/commands/add-infra.d.ts.map +1 -0
  7. package/dist/commands/add-infra.js +160 -0
  8. package/dist/commands/add-infra.js.map +1 -0
  9. package/dist/commands/build.d.ts +2 -0
  10. package/dist/commands/build.d.ts.map +1 -0
  11. package/dist/commands/build.js +63 -0
  12. package/dist/commands/build.js.map +1 -0
  13. package/dist/commands/db-sync.d.ts +13 -0
  14. package/dist/commands/db-sync.d.ts.map +1 -0
  15. package/dist/commands/db-sync.js +108 -0
  16. package/dist/commands/db-sync.js.map +1 -0
  17. package/dist/commands/dev.d.ts +7 -0
  18. package/dist/commands/dev.d.ts.map +1 -0
  19. package/dist/commands/dev.js +61 -0
  20. package/dist/commands/dev.js.map +1 -0
  21. package/dist/commands/init.d.ts +9 -0
  22. package/dist/commands/init.d.ts.map +1 -0
  23. package/dist/commands/init.js +214 -0
  24. package/dist/commands/init.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +57 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/templates/.env.example +24 -0
  30. package/dist/templates/README.md +81 -0
  31. package/dist/templates/app/components/AcceptInviteClient.tsx +10 -0
  32. package/dist/templates/app/components/AdminDashboardClient.tsx +10 -0
  33. package/dist/templates/app/components/AdminTeamClient.tsx +10 -0
  34. package/dist/templates/app/components/AdminTeamsClient.tsx +10 -0
  35. package/dist/templates/app/components/AdminUsersClient.tsx +10 -0
  36. package/dist/templates/app/components/ApiKeysClient.tsx +10 -0
  37. package/dist/templates/app/components/AutomationsClient.tsx +10 -0
  38. package/dist/templates/app/components/ChatClient.tsx +13 -0
  39. package/dist/templates/app/components/ClientOnly.tsx +6 -0
  40. package/dist/templates/app/components/DocumentsClient.tsx +10 -0
  41. package/dist/templates/app/components/OAuthConsentClient.tsx +10 -0
  42. package/dist/templates/app/components/PricingClient.tsx +10 -0
  43. package/dist/templates/app/components/TeamSettingsClient.tsx +10 -0
  44. package/dist/templates/app/components/VerifyEmailClient.tsx +10 -0
  45. package/dist/templates/app/entry.client.tsx +12 -0
  46. package/dist/templates/app/entry.server.tsx +67 -0
  47. package/dist/templates/app/root.tsx +91 -0
  48. package/dist/templates/app/routes/_index.tsx +82 -0
  49. package/dist/templates/app/routes/admin._index.tsx +57 -0
  50. package/dist/templates/app/routes/admin.teams.$teamId.tsx +57 -0
  51. package/dist/templates/app/routes/admin.teams._index.tsx +57 -0
  52. package/dist/templates/app/routes/admin.users.tsx +57 -0
  53. package/dist/templates/app/routes/api-keys.tsx +57 -0
  54. package/dist/templates/app/routes/automations.tsx +57 -0
  55. package/dist/templates/app/routes/chat._index.tsx +11 -0
  56. package/dist/templates/app/routes/chat.admin._index.tsx +10 -0
  57. package/dist/templates/app/routes/chat.admin.teams.$teamId.tsx +10 -0
  58. package/dist/templates/app/routes/chat.admin.teams._index.tsx +10 -0
  59. package/dist/templates/app/routes/chat.admin.users.tsx +10 -0
  60. package/dist/templates/app/routes/chat.api-keys.tsx +10 -0
  61. package/dist/templates/app/routes/chat.automations.tsx +10 -0
  62. package/dist/templates/app/routes/chat.documents.tsx +10 -0
  63. package/dist/templates/app/routes/chat.team.$teamId.settings.tsx +10 -0
  64. package/dist/templates/app/routes/chat.thread.$threadId.tsx +11 -0
  65. package/dist/templates/app/routes/chat.tsx +39 -0
  66. package/dist/templates/app/routes/documents.tsx +57 -0
  67. package/dist/templates/app/routes/invite.$token.tsx +10 -0
  68. package/dist/templates/app/routes/login.tsx +334 -0
  69. package/dist/templates/app/routes/oauth.consent.tsx +10 -0
  70. package/dist/templates/app/routes/pricing.tsx +10 -0
  71. package/dist/templates/app/routes/privacy.tsx +197 -0
  72. package/dist/templates/app/routes/register.tsx +398 -0
  73. package/dist/templates/app/routes/shared.$shareId.tsx +226 -0
  74. package/dist/templates/app/routes/team.$teamId.settings.tsx +57 -0
  75. package/dist/templates/app/routes/terms.tsx +173 -0
  76. package/dist/templates/app/routes/thread.$threadId.tsx +102 -0
  77. package/dist/templates/app/routes/verify-email.tsx +10 -0
  78. package/dist/templates/app/routes.ts +47 -0
  79. package/dist/templates/config/app.config.ts +216 -0
  80. package/dist/templates/docs/admin.md +257 -0
  81. package/dist/templates/docs/api-keys.md +403 -0
  82. package/dist/templates/docs/authentication.md +247 -0
  83. package/dist/templates/docs/configuration.md +1212 -0
  84. package/dist/templates/docs/custom-pages.md +466 -0
  85. package/dist/templates/docs/deployment.md +362 -0
  86. package/dist/templates/docs/development.md +411 -0
  87. package/dist/templates/docs/documents.md +293 -0
  88. package/dist/templates/docs/extensions.md +639 -0
  89. package/dist/templates/docs/index.md +139 -0
  90. package/dist/templates/docs/installation.md +286 -0
  91. package/dist/templates/docs/mcp.md +952 -0
  92. package/dist/templates/docs/native-tools.md +688 -0
  93. package/dist/templates/docs/queue.md +514 -0
  94. package/dist/templates/docs/scheduled-prompts.md +279 -0
  95. package/dist/templates/docs/settings.md +415 -0
  96. package/dist/templates/docs/slack.md +318 -0
  97. package/dist/templates/docs/styling.md +288 -0
  98. package/dist/templates/extensions/agents/.gitkeep +0 -0
  99. package/dist/templates/extensions/pages/.gitkeep +0 -0
  100. package/dist/templates/extensions/payment-plans/.gitkeep +0 -0
  101. package/dist/templates/index.html +16 -0
  102. package/dist/templates/infra-aws/.github/workflows/deploy.yml +95 -0
  103. package/dist/templates/infra-aws/README.md +207 -0
  104. package/dist/templates/infra-aws/bin/cdk.ts +18 -0
  105. package/dist/templates/infra-aws/cdk.json +43 -0
  106. package/dist/templates/infra-aws/config/deployment.ts +156 -0
  107. package/dist/templates/infra-aws/lib/chaaskit-stack.ts +419 -0
  108. package/dist/templates/infra-aws/package.json +27 -0
  109. package/dist/templates/infra-aws/scripts/build-app.sh +63 -0
  110. package/dist/templates/infra-aws/tsconfig.json +25 -0
  111. package/dist/templates/package.json +46 -0
  112. package/dist/templates/prisma/schema/base.prisma +584 -0
  113. package/dist/templates/prisma/schema/custom.prisma +24 -0
  114. package/dist/templates/prisma/schema.prisma +271 -0
  115. package/dist/templates/public/favicon.svg +4 -0
  116. package/dist/templates/public/logo.svg +4 -0
  117. package/dist/templates/react-router.config.ts +11 -0
  118. package/dist/templates/server.js +52 -0
  119. package/dist/templates/src/main.tsx +8 -0
  120. package/dist/templates/tsconfig.json +26 -0
  121. package/dist/templates/vite.config.ts +26 -0
  122. package/package.json +46 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { dev } from './commands/dev.js';
4
+ import { build } from './commands/build.js';
5
+ const program = new Command();
6
+ program
7
+ .name('chat-saas')
8
+ .description('CLI for managing Chat SaaS applications')
9
+ .version('0.1.0');
10
+ program
11
+ .command('dev')
12
+ .description('Start development servers')
13
+ .option('-p, --port <port>', 'Server port', '3000')
14
+ .option('--client-port <port>', 'Client dev server port', '5173')
15
+ .action(async (options) => {
16
+ await dev(options);
17
+ });
18
+ program
19
+ .command('build')
20
+ .description('Build for production')
21
+ .action(async () => {
22
+ await build();
23
+ });
24
+ program.parse();
25
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,yCAAyC,CAAC;KACtD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;KAClD,MAAM,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,MAAM,CAAC;KAChE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface AddInfraOptions {
2
+ serviceName?: string;
3
+ }
4
+ export declare function addInfra(provider: string, options: AddInfraOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=add-infra.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-infra.d.ts","sourceRoot":"","sources":["../../src/commands/add-infra.ts"],"names":[],"mappings":"AASA,UAAU,eAAe;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmExF"}
@@ -0,0 +1,160 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { fileURLToPath } from 'url';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ const __filename = fileURLToPath(import.meta.url);
7
+ const __dirname = path.dirname(__filename);
8
+ export async function addInfra(provider, options) {
9
+ console.log();
10
+ console.log(chalk.bold('☁️ Add Infrastructure'));
11
+ console.log();
12
+ // Validate provider
13
+ const supportedProviders = ['aws'];
14
+ if (!supportedProviders.includes(provider)) {
15
+ console.log(chalk.red(`Unknown provider: ${provider}`));
16
+ console.log(chalk.yellow(`Supported providers: ${supportedProviders.join(', ')}`));
17
+ process.exit(1);
18
+ }
19
+ // Check if we're in a ChaasKit project
20
+ const packageJsonPath = path.join(process.cwd(), 'package.json');
21
+ if (!await fs.pathExists(packageJsonPath)) {
22
+ console.log(chalk.red('Not in a ChaasKit project directory.'));
23
+ console.log(chalk.yellow('Run this command from your project root.'));
24
+ process.exit(1);
25
+ }
26
+ const targetPath = path.join(process.cwd(), 'cdk');
27
+ // Check if cdk directory already exists
28
+ if (await fs.pathExists(targetPath)) {
29
+ console.log(chalk.yellow('⚠️ The cdk/ directory already exists.'));
30
+ console.log(chalk.yellow('Remove it first if you want to regenerate: rm -rf cdk'));
31
+ process.exit(1);
32
+ }
33
+ const spinner = ora('Adding AWS CDK infrastructure...').start();
34
+ try {
35
+ // Copy CDK template files
36
+ const templatesPath = path.join(__dirname, '../templates/infra-aws');
37
+ await copyInfraTemplates(templatesPath, targetPath, options.serviceName);
38
+ // Update .gitignore
39
+ await updateGitignore();
40
+ spinner.succeed('AWS CDK infrastructure added to ./cdk/');
41
+ // Print next steps
42
+ console.log();
43
+ console.log(chalk.green('✅ Infrastructure code added!'));
44
+ console.log();
45
+ console.log('Next steps:');
46
+ console.log();
47
+ console.log(chalk.cyan(' 1. Configure deployment:'));
48
+ console.log(' Edit cdk/config/deployment.ts with your settings');
49
+ console.log();
50
+ console.log(chalk.cyan(' 2. Install CDK dependencies:'));
51
+ console.log(' cd cdk && npm install');
52
+ console.log();
53
+ console.log(chalk.cyan(' 3. Bootstrap CDK (first time only):'));
54
+ console.log(' npx cdk bootstrap aws://ACCOUNT_ID/REGION');
55
+ console.log();
56
+ console.log(chalk.cyan(' 4. Deploy:'));
57
+ console.log(' npm run deploy');
58
+ console.log();
59
+ console.log(chalk.dim('See cdk/README.md for detailed instructions.'));
60
+ console.log();
61
+ }
62
+ catch (error) {
63
+ spinner.fail('Failed to add infrastructure');
64
+ throw error;
65
+ }
66
+ }
67
+ async function copyInfraTemplates(templatesPath, targetPath, serviceName) {
68
+ // Create directory structure
69
+ await fs.ensureDir(path.join(targetPath, 'bin'));
70
+ await fs.ensureDir(path.join(targetPath, 'lib'));
71
+ await fs.ensureDir(path.join(targetPath, 'config'));
72
+ await fs.ensureDir(path.join(targetPath, 'scripts'));
73
+ await fs.ensureDir(path.join(targetPath, '.github', 'workflows'));
74
+ // Detect service name from package.json if not provided
75
+ let finalServiceName;
76
+ if (serviceName) {
77
+ finalServiceName = serviceName;
78
+ }
79
+ else {
80
+ try {
81
+ const pkg = await fs.readJson(path.join(process.cwd(), 'package.json'));
82
+ finalServiceName = pkg.name || 'my-chaaskit-app';
83
+ }
84
+ catch {
85
+ finalServiceName = 'my-chaaskit-app';
86
+ }
87
+ }
88
+ // Sanitize service name for AWS (lowercase, alphanumeric + hyphens only)
89
+ const sanitizedServiceName = finalServiceName
90
+ .toLowerCase()
91
+ .replace(/[^a-z0-9-]/g, '-')
92
+ .replace(/-+/g, '-')
93
+ .replace(/^-|-$/g, '');
94
+ const templates = [
95
+ // CDK entry point
96
+ { src: 'bin/cdk.ts', dest: 'bin/cdk.ts' },
97
+ // Main stack
98
+ { src: 'lib/chaaskit-stack.ts', dest: 'lib/chaaskit-stack.ts' },
99
+ // Configuration
100
+ {
101
+ src: 'config/deployment.ts',
102
+ dest: 'config/deployment.ts',
103
+ transform: (content) => content.replace(/\{\{SERVICE_NAME\}\}/g, sanitizedServiceName),
104
+ },
105
+ // Build script
106
+ { src: 'scripts/build-app.sh', dest: 'scripts/build-app.sh' },
107
+ // CDK config files
108
+ { src: 'cdk.json', dest: 'cdk.json' },
109
+ { src: 'tsconfig.json', dest: 'tsconfig.json' },
110
+ { src: 'package.json', dest: 'package.json' },
111
+ { src: 'README.md', dest: 'README.md' },
112
+ // GitHub Actions workflow
113
+ {
114
+ src: '.github/workflows/deploy.yml',
115
+ dest: '.github/workflows/deploy.yml',
116
+ transform: (content) => content.replace(/\{\{SERVICE_NAME\}\}/g, sanitizedServiceName),
117
+ },
118
+ ];
119
+ for (const template of templates) {
120
+ const srcPath = path.join(templatesPath, template.src);
121
+ const destPath = path.join(targetPath, template.dest);
122
+ if (await fs.pathExists(srcPath)) {
123
+ let content = await fs.readFile(srcPath, 'utf-8');
124
+ if (template.transform) {
125
+ content = template.transform(content);
126
+ }
127
+ await fs.outputFile(destPath, content);
128
+ // Make shell scripts executable
129
+ if (template.dest.endsWith('.sh')) {
130
+ await fs.chmod(destPath, 0o755);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ async function updateGitignore() {
136
+ const gitignorePath = path.join(process.cwd(), '.gitignore');
137
+ const linesToAdd = [
138
+ '',
139
+ '# CDK',
140
+ 'cdk/cdk.out/',
141
+ 'cdk/node_modules/',
142
+ '*.zip',
143
+ ];
144
+ try {
145
+ let content = '';
146
+ if (await fs.pathExists(gitignorePath)) {
147
+ content = await fs.readFile(gitignorePath, 'utf-8');
148
+ }
149
+ // Check if CDK section already exists
150
+ if (content.includes('# CDK')) {
151
+ return;
152
+ }
153
+ content += linesToAdd.join('\n') + '\n';
154
+ await fs.writeFile(gitignorePath, content);
155
+ }
156
+ catch {
157
+ // Ignore errors updating .gitignore
158
+ }
159
+ }
160
+ //# sourceMappingURL=add-infra.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-infra.js","sourceRoot":"","sources":["../../src/commands/add-infra.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function build(): Promise<void>;
2
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAMA,wBAAsB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAwC3C"}
@@ -0,0 +1,63 @@
1
+ import { spawn } from 'child_process';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ export async function build() {
5
+ console.log();
6
+ console.log(chalk.bold('🏗️ Building ChaasKit Application'));
7
+ console.log();
8
+ const cwd = process.cwd();
9
+ // Build steps
10
+ const steps = [
11
+ {
12
+ name: 'Type checking',
13
+ command: 'npx',
14
+ args: ['tsc', '--noEmit'],
15
+ },
16
+ {
17
+ name: 'Building client',
18
+ command: 'npx',
19
+ args: ['vite', 'build'],
20
+ },
21
+ ];
22
+ for (const step of steps) {
23
+ const spinner = ora(step.name + '...').start();
24
+ try {
25
+ await runCommand(step.command, step.args, { cwd });
26
+ spinner.succeed(step.name);
27
+ }
28
+ catch (error) {
29
+ spinner.fail(step.name);
30
+ console.error(chalk.red(`\nBuild failed during: ${step.name}`));
31
+ process.exit(1);
32
+ }
33
+ }
34
+ console.log();
35
+ console.log(chalk.green('✅ Build complete!'));
36
+ console.log();
37
+ console.log('To start the production server, run:');
38
+ console.log(chalk.cyan(' NODE_ENV=production npx chaaskit-server'));
39
+ console.log();
40
+ }
41
+ function runCommand(command, args, options) {
42
+ return new Promise((resolve, reject) => {
43
+ const child = spawn(command, args, {
44
+ ...options,
45
+ stdio: 'pipe',
46
+ shell: true,
47
+ });
48
+ let stderr = '';
49
+ child.stderr?.on('data', (data) => {
50
+ stderr += data.toString();
51
+ });
52
+ child.on('close', (code) => {
53
+ if (code === 0) {
54
+ resolve();
55
+ }
56
+ else {
57
+ reject(new Error(stderr || `Command failed with code ${code}`));
58
+ }
59
+ });
60
+ child.on('error', reject);
61
+ });
62
+ }
63
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Sync the Prisma schema from @chaaskit/db to the project.
3
+ * Uses Prisma's multi-file schema feature (prismaSchemaFolder).
4
+ *
5
+ * This command:
6
+ * - Copies base.prisma from the package (overwrites existing)
7
+ * - Creates custom.prisma if it doesn't exist (never overwrites)
8
+ * - Preserves any other .prisma files in the schema directory
9
+ */
10
+ export declare function dbSync(options?: {
11
+ force?: boolean;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=db-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-sync.d.ts","sourceRoot":"","sources":["../../src/commands/db-sync.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG7E"}
@@ -0,0 +1,108 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ /**
4
+ * Sync the Prisma schema from @chaaskit/db to the project.
5
+ * Uses Prisma's multi-file schema feature (prismaSchemaFolder).
6
+ *
7
+ * This command:
8
+ * - Copies base.prisma from the package (overwrites existing)
9
+ * - Creates custom.prisma if it doesn't exist (never overwrites)
10
+ * - Preserves any other .prisma files in the schema directory
11
+ */
12
+ export async function dbSync(options = {}) {
13
+ const cwd = process.cwd();
14
+ const targetSchemaDir = path.join(cwd, 'prisma', 'schema');
15
+ // Find the source schema folder in node_modules
16
+ const sourceSchemaDir = path.join(cwd, 'node_modules', '@chaaskit', 'db', 'prisma', 'schema');
17
+ const sourceBasePath = path.join(sourceSchemaDir, 'base.prisma');
18
+ const sourceCustomPath = path.join(sourceSchemaDir, 'custom.prisma');
19
+ const targetBasePath = path.join(targetSchemaDir, 'base.prisma');
20
+ const targetCustomPath = path.join(targetSchemaDir, 'custom.prisma');
21
+ // Check if source schema exists
22
+ try {
23
+ await fs.access(sourceBasePath);
24
+ }
25
+ catch {
26
+ console.error('Error: @chaaskit/db package not found or has old schema format.');
27
+ console.error('Make sure you have installed the latest dependencies: pnpm install');
28
+ process.exit(1);
29
+ }
30
+ // Ensure target schema directory exists
31
+ await fs.mkdir(targetSchemaDir, { recursive: true });
32
+ // Check if this is a migration from single-file schema
33
+ const oldSchemaPath = path.join(cwd, 'prisma', 'schema.prisma');
34
+ let hadOldSchema = false;
35
+ try {
36
+ await fs.access(oldSchemaPath);
37
+ hadOldSchema = true;
38
+ }
39
+ catch {
40
+ // No old schema
41
+ }
42
+ // Check current state
43
+ let targetBaseExists = false;
44
+ let targetCustomExists = false;
45
+ try {
46
+ await fs.access(targetBasePath);
47
+ targetBaseExists = true;
48
+ }
49
+ catch {
50
+ // Base doesn't exist
51
+ }
52
+ try {
53
+ await fs.access(targetCustomPath);
54
+ targetCustomExists = true;
55
+ }
56
+ catch {
57
+ // Custom doesn't exist
58
+ }
59
+ // Copy base.prisma (always overwrite)
60
+ const sourceBaseContent = await fs.readFile(sourceBasePath, 'utf-8');
61
+ let targetBaseContent = '';
62
+ if (targetBaseExists) {
63
+ targetBaseContent = await fs.readFile(targetBasePath, 'utf-8');
64
+ }
65
+ const baseChanged = sourceBaseContent !== targetBaseContent;
66
+ if (baseChanged) {
67
+ await fs.writeFile(targetBasePath, sourceBaseContent, 'utf-8');
68
+ if (targetBaseExists) {
69
+ console.log('Updated: prisma/schema/base.prisma');
70
+ }
71
+ else {
72
+ console.log('Created: prisma/schema/base.prisma');
73
+ }
74
+ }
75
+ else {
76
+ console.log('No changes: prisma/schema/base.prisma is up to date');
77
+ }
78
+ // Create custom.prisma if it doesn't exist (never overwrite)
79
+ if (!targetCustomExists) {
80
+ const sourceCustomContent = await fs.readFile(sourceCustomPath, 'utf-8');
81
+ await fs.writeFile(targetCustomPath, sourceCustomContent, 'utf-8');
82
+ console.log('Created: prisma/schema/custom.prisma');
83
+ }
84
+ else {
85
+ console.log('Preserved: prisma/schema/custom.prisma (your custom models)');
86
+ }
87
+ // Handle migration from old single-file schema
88
+ if (hadOldSchema) {
89
+ console.log('\n--- Migration Notice ---');
90
+ console.log('Found old single-file schema: prisma/schema.prisma');
91
+ console.log('');
92
+ console.log('To migrate your custom models:');
93
+ console.log('1. Open prisma/schema.prisma');
94
+ console.log('2. Copy any custom models you added to prisma/schema/custom.prisma');
95
+ console.log('3. Delete prisma/schema.prisma');
96
+ console.log('');
97
+ console.log('Note: Core models (User, Thread, etc.) are now in base.prisma.');
98
+ console.log('Only copy models YOU created to custom.prisma.');
99
+ }
100
+ printNextSteps();
101
+ }
102
+ function printNextSteps() {
103
+ console.log('\nNext steps:');
104
+ console.log(' 1. Run: pnpm db:generate');
105
+ console.log(' 2. Run: pnpm db:push');
106
+ console.log(' 3. Restart your dev server');
107
+ }
108
+ //# sourceMappingURL=db-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db-sync.js","sourceRoot":"","sources":["../../src/commands/db-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface DevOptions {
2
+ port?: string;
3
+ clientPort?: string;
4
+ }
5
+ export declare function dev(options: DevOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmE5D"}
@@ -0,0 +1,61 @@
1
+ import { spawn } from 'child_process';
2
+ import chalk from 'chalk';
3
+ export async function dev(options) {
4
+ const port = options.port || '3000';
5
+ const clientPort = options.clientPort || '5173';
6
+ console.log();
7
+ console.log(chalk.bold('🚀 Starting ChaasKit Development Server'));
8
+ console.log();
9
+ const processes = [];
10
+ // Handle cleanup
11
+ const cleanup = () => {
12
+ console.log(chalk.yellow('\nShutting down...'));
13
+ processes.forEach(p => {
14
+ if (!p.killed) {
15
+ p.kill('SIGTERM');
16
+ }
17
+ });
18
+ process.exit(0);
19
+ };
20
+ process.on('SIGINT', cleanup);
21
+ process.on('SIGTERM', cleanup);
22
+ // Start the backend server
23
+ console.log(chalk.cyan(`Starting backend server on port ${port}...`));
24
+ const serverProcess = spawn('npx', ['chaaskit-server'], {
25
+ cwd: process.cwd(),
26
+ stdio: 'inherit',
27
+ shell: true,
28
+ env: {
29
+ ...process.env,
30
+ PORT: port,
31
+ },
32
+ });
33
+ processes.push(serverProcess);
34
+ // Start the frontend dev server
35
+ console.log(chalk.cyan(`Starting frontend server on port ${clientPort}...`));
36
+ // Check if there's a local vite config, otherwise use the one from core-client
37
+ const viteProcess = spawn('npx', ['vite', '--host', '--port', clientPort], {
38
+ cwd: process.cwd(),
39
+ stdio: 'inherit',
40
+ shell: true,
41
+ env: {
42
+ ...process.env,
43
+ VITE_API_URL: `http://localhost:${port}`,
44
+ },
45
+ });
46
+ processes.push(viteProcess);
47
+ // Wait for processes to exit
48
+ serverProcess.on('exit', (code) => {
49
+ if (code !== 0) {
50
+ console.log(chalk.red(`Server process exited with code ${code}`));
51
+ }
52
+ });
53
+ viteProcess.on('exit', (code) => {
54
+ if (code !== 0) {
55
+ console.log(chalk.red(`Vite process exited with code ${code}`));
56
+ }
57
+ });
58
+ // Keep the process running
59
+ await new Promise(() => { });
60
+ }
61
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface InitOptions {
2
+ template?: string;
3
+ skipInstall?: boolean;
4
+ useNpm?: boolean;
5
+ useYarn?: boolean;
6
+ }
7
+ export declare function init(projectName: string | undefined, options: InitOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAgBA,UAAU,WAAW;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG/F"}