@orcapt/cli 1.0.1 ā 1.0.3
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 +0 -16
- package/bin/orca.js +30 -61
- package/package.json +1 -1
- package/src/commands/db.js +11 -11
- package/src/commands/fetch-doc.js +3 -3
- package/src/commands/kickstart-node.js +18 -18
- package/src/commands/kickstart-python.js +12 -13
- package/src/commands/lambda.js +24 -24
- package/src/commands/login.js +6 -6
- package/src/commands/storage.js +54 -183
- package/src/commands/ui.js +21 -21
- package/src/utils/index.js +1 -1
package/README.md
CHANGED
|
@@ -409,22 +409,6 @@ orcapt storage download my-bucket file.txt ./downloads/
|
|
|
409
409
|
orcapt storage delete my-bucket file.txt
|
|
410
410
|
```
|
|
411
411
|
|
|
412
|
-
#### Permission Management
|
|
413
|
-
|
|
414
|
-
```bash
|
|
415
|
-
# Add permission
|
|
416
|
-
orcapt storage permission add my-bucket \
|
|
417
|
-
--target-type=user \
|
|
418
|
-
--target-id=user123 \
|
|
419
|
-
--read \
|
|
420
|
-
--write
|
|
421
|
-
|
|
422
|
-
# List permissions
|
|
423
|
-
orcapt storage permission list my-bucket
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
---
|
|
427
|
-
|
|
428
412
|
### šļø Database Commands
|
|
429
413
|
|
|
430
414
|
Create and manage PostgreSQL databases.
|
package/bin/orca.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* Entry point for the
|
|
4
|
+
* orcapt CLI - Command Line Interface
|
|
5
|
+
* Entry point for the orcapt CLI tool
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const { program } = require('commander');
|
|
@@ -15,17 +15,15 @@ const { login, isLoggedIn, getCredentials, clearCredentials } = require('../src/
|
|
|
15
15
|
const { uiInit, uiStart, uiRemove } = require('../src/commands/ui');
|
|
16
16
|
const { dbCreate, dbList, dbRemove } = require('../src/commands/db');
|
|
17
17
|
const fetchDoc = require('../src/commands/fetch-doc');
|
|
18
|
-
const {
|
|
19
|
-
bucketCreate,
|
|
20
|
-
bucketList,
|
|
18
|
+
const {
|
|
19
|
+
bucketCreate,
|
|
20
|
+
bucketList,
|
|
21
21
|
bucketInfo,
|
|
22
22
|
bucketDelete,
|
|
23
|
-
fileUpload,
|
|
23
|
+
fileUpload,
|
|
24
24
|
fileDownload,
|
|
25
25
|
fileList,
|
|
26
|
-
fileDelete
|
|
27
|
-
permissionAdd,
|
|
28
|
-
permissionList
|
|
26
|
+
fileDelete
|
|
29
27
|
} = require('../src/commands/storage');
|
|
30
28
|
const { lambdaDeploy, lambdaList, lambdaInvoke, lambdaLogs, lambdaRemove, lambdaInfo } = require('../src/commands/lambda');
|
|
31
29
|
|
|
@@ -35,15 +33,15 @@ const packageJson = JSON.parse(
|
|
|
35
33
|
);
|
|
36
34
|
|
|
37
35
|
program
|
|
38
|
-
.name('
|
|
39
|
-
.description('CLI tool for managing
|
|
36
|
+
.name('orcapt')
|
|
37
|
+
.description('CLI tool for managing orcapt projects')
|
|
40
38
|
.version(packageJson.version);
|
|
41
39
|
|
|
42
40
|
// Middleware to check if user is logged in
|
|
43
41
|
function requireAuth(commandName) {
|
|
44
42
|
if (!isLoggedIn()) {
|
|
45
43
|
console.log(chalk.red('\nā You must be logged in to use this command'));
|
|
46
|
-
console.log(chalk.cyan('Please run:'), chalk.yellow('
|
|
44
|
+
console.log(chalk.cyan('Please run:'), chalk.yellow('orcapt login'), chalk.cyan('first\n'));
|
|
47
45
|
process.exit(1);
|
|
48
46
|
}
|
|
49
47
|
}
|
|
@@ -51,7 +49,7 @@ function requireAuth(commandName) {
|
|
|
51
49
|
// Login command
|
|
52
50
|
program
|
|
53
51
|
.command('login')
|
|
54
|
-
.description('Authenticate with
|
|
52
|
+
.description('Authenticate with orcapt')
|
|
55
53
|
.action(login);
|
|
56
54
|
|
|
57
55
|
// Logout command
|
|
@@ -82,18 +80,18 @@ program
|
|
|
82
80
|
console.log(chalk.cyan('============================================================\n'));
|
|
83
81
|
} else {
|
|
84
82
|
console.log(chalk.red('\nā Not authenticated'));
|
|
85
|
-
console.log(chalk.cyan('Run:'), chalk.yellow('
|
|
83
|
+
console.log(chalk.cyan('Run:'), chalk.yellow('orcapt login'), chalk.cyan('to authenticate\n'));
|
|
86
84
|
}
|
|
87
85
|
});
|
|
88
86
|
|
|
89
87
|
// UI commands
|
|
90
88
|
const uiCmd = program
|
|
91
89
|
.command('ui')
|
|
92
|
-
.description('Manage
|
|
90
|
+
.description('Manage orcapt UI installation and execution');
|
|
93
91
|
|
|
94
92
|
uiCmd
|
|
95
93
|
.command('init')
|
|
96
|
-
.description('Install
|
|
94
|
+
.description('Install orcapt UI globally')
|
|
97
95
|
.action(() => {
|
|
98
96
|
requireAuth('ui init');
|
|
99
97
|
uiInit();
|
|
@@ -101,7 +99,7 @@ uiCmd
|
|
|
101
99
|
|
|
102
100
|
uiCmd
|
|
103
101
|
.command('start')
|
|
104
|
-
.description('Start the
|
|
102
|
+
.description('Start the orcapt UI')
|
|
105
103
|
.option('-p, --port <number>', 'Port for the frontend UI', '3000')
|
|
106
104
|
.option('-a, --agent-port <number>', 'Port for the agent backend', '5001')
|
|
107
105
|
.action((options) => {
|
|
@@ -111,7 +109,7 @@ uiCmd
|
|
|
111
109
|
|
|
112
110
|
uiCmd
|
|
113
111
|
.command('remove')
|
|
114
|
-
.description('Uninstall
|
|
112
|
+
.description('Uninstall orcapt UI')
|
|
115
113
|
.action(() => {
|
|
116
114
|
requireAuth('ui remove');
|
|
117
115
|
uiRemove();
|
|
@@ -150,27 +148,27 @@ dbCmd
|
|
|
150
148
|
// Kickstart command with subcommands for different languages
|
|
151
149
|
const kickstartCmd = program
|
|
152
150
|
.command('kickstart')
|
|
153
|
-
.description('Quick setup for a new
|
|
151
|
+
.description('Quick setup for a new orcapt project')
|
|
154
152
|
.action(() => {
|
|
155
153
|
requireAuth('kickstart');
|
|
156
|
-
console.log(chalk.cyan('\nš Usage:'), chalk.white('
|
|
154
|
+
console.log(chalk.cyan('\nš Usage:'), chalk.white('orcapt kickstart <language> [options]\n'));
|
|
157
155
|
console.log(chalk.cyan('Available languages:\n'));
|
|
158
156
|
console.log(chalk.green(' python'), ' - Python-based agent (FastAPI + OpenAI)', chalk.green('ā Available'));
|
|
159
157
|
console.log(chalk.green(' node'), ' - Node.js-based agent (Express + OpenAI)', chalk.green('ā Available'));
|
|
160
158
|
console.log(chalk.yellow(' go'), ' - Go-based agent', chalk.yellow('š§ Coming soon'));
|
|
161
159
|
console.log();
|
|
162
160
|
console.log(chalk.cyan('Examples:'));
|
|
163
|
-
console.log(chalk.white('
|
|
164
|
-
console.log(chalk.white('
|
|
161
|
+
console.log(chalk.white(' orcapt kickstart python'));
|
|
162
|
+
console.log(chalk.white(' orcapt kickstart node'));
|
|
165
163
|
console.log();
|
|
166
|
-
console.log(chalk.cyan('Help:'), chalk.white('
|
|
164
|
+
console.log(chalk.cyan('Help:'), chalk.white('orcapt kickstart <language> --help\n'));
|
|
167
165
|
});
|
|
168
166
|
|
|
169
167
|
// Python starter kit
|
|
170
168
|
kickstartCmd
|
|
171
169
|
.command('python')
|
|
172
|
-
.description('Set up a Python-based
|
|
173
|
-
.option('-d, --directory <name>', 'Directory name for the project', '
|
|
170
|
+
.description('Set up a Python-based orcapt agent (FastAPI + OpenAI)')
|
|
171
|
+
.option('-d, --directory <name>', 'Directory name for the project', 'orcapt-kickstart')
|
|
174
172
|
.option('-p, --port <number>', 'Port for the frontend UI', '3000')
|
|
175
173
|
.option('-a, --agent-port <number>', 'Port for the agent backend', '5001')
|
|
176
174
|
.option('--no-start', 'Skip starting the servers after setup')
|
|
@@ -182,8 +180,8 @@ kickstartCmd
|
|
|
182
180
|
// Node.js starter kit
|
|
183
181
|
kickstartCmd
|
|
184
182
|
.command('node')
|
|
185
|
-
.description('Set up a Node.js-based
|
|
186
|
-
.option('-d, --directory <name>', 'Directory name for the project', '
|
|
183
|
+
.description('Set up a Node.js-based orcapt agent (Express + OpenAI)')
|
|
184
|
+
.option('-d, --directory <name>', 'Directory name for the project', 'orcapt-kickstart')
|
|
187
185
|
.option('-p, --port <number>', 'Port for the frontend UI', '3000')
|
|
188
186
|
.option('-a, --agent-port <number>', 'Port for the agent backend', '5001')
|
|
189
187
|
.option('--no-start', 'Skip starting the servers after setup')
|
|
@@ -194,10 +192,10 @@ kickstartCmd
|
|
|
194
192
|
|
|
195
193
|
kickstartCmd
|
|
196
194
|
.command('go')
|
|
197
|
-
.description('Set up a Go-based
|
|
195
|
+
.description('Set up a Go-based orcapt agent (Coming soon)')
|
|
198
196
|
.action(() => {
|
|
199
197
|
console.log(chalk.yellow('\nā Go starter kit is coming soon!'));
|
|
200
|
-
console.log(chalk.cyan('For now, use:'), chalk.white('
|
|
198
|
+
console.log(chalk.cyan('For now, use:'), chalk.white('orcapt kickstart python\n'));
|
|
201
199
|
});
|
|
202
200
|
|
|
203
201
|
// Fetch commands
|
|
@@ -207,7 +205,7 @@ const fetchCmd = program
|
|
|
207
205
|
|
|
208
206
|
fetchCmd
|
|
209
207
|
.command('doc')
|
|
210
|
-
.description('Download
|
|
208
|
+
.description('Download orcapt SDK documentation')
|
|
211
209
|
.action(fetchDoc);
|
|
212
210
|
|
|
213
211
|
// Storage commands
|
|
@@ -296,36 +294,7 @@ storageCmd
|
|
|
296
294
|
fileDelete(bucket, fileKey);
|
|
297
295
|
});
|
|
298
296
|
|
|
299
|
-
// Permission commands
|
|
300
|
-
const permissionCmd = storageCmd
|
|
301
|
-
.command('permission')
|
|
302
|
-
.description('Manage bucket permissions');
|
|
303
|
-
|
|
304
|
-
permissionCmd
|
|
305
|
-
.command('add <bucket>')
|
|
306
|
-
.description('Add permission to bucket')
|
|
307
|
-
.option('--target-type <type>', 'Target type (user, workspace, public, api_key)', 'user')
|
|
308
|
-
.option('--target-id <id>', 'Target ID (user ID, workspace ID, etc.)')
|
|
309
|
-
.option('--resource-type <type>', 'Resource type (bucket, folder, file)', 'bucket')
|
|
310
|
-
.option('--resource-path <path>', 'Resource path (for folder/file permissions)')
|
|
311
|
-
.option('--read', 'Grant read permission', false)
|
|
312
|
-
.option('--write', 'Grant write permission', false)
|
|
313
|
-
.option('--delete', 'Grant delete permission', false)
|
|
314
|
-
.option('--list', 'Grant list permission', false)
|
|
315
|
-
.option('--valid-until <date>', 'Permission expiry date (ISO 8601)')
|
|
316
|
-
.option('--reason <text>', 'Reason for granting permission')
|
|
317
|
-
.action((bucket, options) => {
|
|
318
|
-
requireAuth('storage permission add');
|
|
319
|
-
permissionAdd(bucket, options);
|
|
320
|
-
});
|
|
321
|
-
|
|
322
|
-
permissionCmd
|
|
323
|
-
.command('list <bucket>')
|
|
324
|
-
.description('List bucket permissions')
|
|
325
|
-
.action((bucket) => {
|
|
326
|
-
requireAuth('storage permission list');
|
|
327
|
-
permissionList(bucket);
|
|
328
|
-
});
|
|
297
|
+
// Permission commands removed as per user request
|
|
329
298
|
|
|
330
299
|
// Ship command - Deploy Docker images to Lambda
|
|
331
300
|
program
|
|
@@ -392,7 +361,7 @@ lambdaCmd
|
|
|
392
361
|
// Handle unknown commands
|
|
393
362
|
program.on('command:*', () => {
|
|
394
363
|
console.error(chalk.red(`\nā Invalid command: ${program.args.join(' ')}\n`));
|
|
395
|
-
console.log(chalk.cyan('Run'), chalk.yellow('
|
|
364
|
+
console.log(chalk.cyan('Run'), chalk.yellow('orcapt --help'), chalk.cyan('to see available commands\n'));
|
|
396
365
|
process.exit(1);
|
|
397
366
|
});
|
|
398
367
|
|
package/package.json
CHANGED
package/src/commands/db.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Manage PostgreSQL databases via
|
|
2
|
+
* orcapt Database Commands
|
|
3
|
+
* Manage PostgreSQL databases via orcapt Deploy API
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
const chalk = require('chalk');
|
|
@@ -11,7 +11,7 @@ const { getCredentials } = require('./login');
|
|
|
11
11
|
const { API_BASE_URL, API_ENDPOINTS } = require('../config');
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* Make API request to
|
|
14
|
+
* Make API request to orcapt Deploy API
|
|
15
15
|
*/
|
|
16
16
|
function makeApiRequest(method, path, credentials) {
|
|
17
17
|
return new Promise((resolve, reject) => {
|
|
@@ -73,7 +73,7 @@ async function dbCreate(options) {
|
|
|
73
73
|
const credentials = getCredentials();
|
|
74
74
|
if (!credentials) {
|
|
75
75
|
console.log(chalk.red('ā Not authenticated'));
|
|
76
|
-
console.log(chalk.cyan('Please run:'), chalk.yellow('
|
|
76
|
+
console.log(chalk.cyan('Please run:'), chalk.yellow('orcapt login'), chalk.cyan('first\n'));
|
|
77
77
|
process.exit(1);
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -112,7 +112,7 @@ async function dbCreate(options) {
|
|
|
112
112
|
|
|
113
113
|
if (error.statusCode === 401) {
|
|
114
114
|
console.log(chalk.red('\nā Authentication failed'));
|
|
115
|
-
console.log(chalk.yellow('Your session may have expired. Please run:'), chalk.white('
|
|
115
|
+
console.log(chalk.yellow('Your session may have expired. Please run:'), chalk.white('orcapt login\n'));
|
|
116
116
|
} else if (error.response && error.response.detail) {
|
|
117
117
|
console.log(chalk.red(`\nā ${error.response.detail}\n`));
|
|
118
118
|
} else {
|
|
@@ -134,7 +134,7 @@ async function dbList() {
|
|
|
134
134
|
const credentials = getCredentials();
|
|
135
135
|
if (!credentials) {
|
|
136
136
|
console.log(chalk.red('ā Not authenticated'));
|
|
137
|
-
console.log(chalk.cyan('Please run:'), chalk.yellow('
|
|
137
|
+
console.log(chalk.cyan('Please run:'), chalk.yellow('orcapt login'), chalk.cyan('first\n'));
|
|
138
138
|
process.exit(1);
|
|
139
139
|
}
|
|
140
140
|
|
|
@@ -152,7 +152,7 @@ async function dbList() {
|
|
|
152
152
|
|
|
153
153
|
if (response.count === 0) {
|
|
154
154
|
console.log(chalk.yellow('No databases found'));
|
|
155
|
-
console.log(chalk.cyan('\nCreate one with:'), chalk.white('
|
|
155
|
+
console.log(chalk.cyan('\nCreate one with:'), chalk.white('orcapt db create --postgres'));
|
|
156
156
|
} else {
|
|
157
157
|
console.log(chalk.green(`ā Found ${response.count} database${response.count > 1 ? 's' : ''}`));
|
|
158
158
|
console.log(chalk.cyan('============================================================\n'));
|
|
@@ -172,7 +172,7 @@ async function dbList() {
|
|
|
172
172
|
|
|
173
173
|
if (error.statusCode === 401) {
|
|
174
174
|
console.log(chalk.red('\nā Authentication failed'));
|
|
175
|
-
console.log(chalk.yellow('Your session may have expired. Please run:'), chalk.white('
|
|
175
|
+
console.log(chalk.yellow('Your session may have expired. Please run:'), chalk.white('orcapt login\n'));
|
|
176
176
|
} else if (error.response && error.response.detail) {
|
|
177
177
|
console.log(chalk.red(`\nā ${error.response.detail}\n`));
|
|
178
178
|
} else {
|
|
@@ -188,7 +188,7 @@ async function dbList() {
|
|
|
188
188
|
async function dbRemove(databaseName) {
|
|
189
189
|
if (!databaseName) {
|
|
190
190
|
console.log(chalk.red('\nā Database name is required'));
|
|
191
|
-
console.log(chalk.cyan('Usage:'), chalk.white('
|
|
191
|
+
console.log(chalk.cyan('Usage:'), chalk.white('orcapt db remove <database-name>\n'));
|
|
192
192
|
process.exit(1);
|
|
193
193
|
}
|
|
194
194
|
|
|
@@ -200,7 +200,7 @@ async function dbRemove(databaseName) {
|
|
|
200
200
|
const credentials = getCredentials();
|
|
201
201
|
if (!credentials) {
|
|
202
202
|
console.log(chalk.red('ā Not authenticated'));
|
|
203
|
-
console.log(chalk.cyan('Please run:'), chalk.yellow('
|
|
203
|
+
console.log(chalk.cyan('Please run:'), chalk.yellow('orcapt login'), chalk.cyan('first\n'));
|
|
204
204
|
process.exit(1);
|
|
205
205
|
}
|
|
206
206
|
|
|
@@ -228,7 +228,7 @@ async function dbRemove(databaseName) {
|
|
|
228
228
|
|
|
229
229
|
if (error.statusCode === 401) {
|
|
230
230
|
console.log(chalk.red('\nā Authentication failed'));
|
|
231
|
-
console.log(chalk.yellow('Your session may have expired. Please run:'), chalk.white('
|
|
231
|
+
console.log(chalk.yellow('Your session may have expired. Please run:'), chalk.white('orcapt login\n'));
|
|
232
232
|
} else if (error.statusCode === 404) {
|
|
233
233
|
console.log(chalk.red(`\nā Database '${databaseName}' not found or doesn't belong to your workspace\n`));
|
|
234
234
|
} else if (error.response && error.response.detail) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fetch Documentation Command
|
|
3
|
-
* Downloads
|
|
3
|
+
* Downloads orcapt SDK documentation based on project type
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
const fs = require('fs').promises;
|
|
@@ -131,7 +131,7 @@ async function ensureDocsDirectory() {
|
|
|
131
131
|
* @returns {Promise<void>}
|
|
132
132
|
*/
|
|
133
133
|
async function downloadDocumentation(type) {
|
|
134
|
-
const spinner = ora(`Downloading
|
|
134
|
+
const spinner = ora(`Downloading orcapt ${type === 'python' ? 'Python' : 'Node.js'} SDK documentation...`).start();
|
|
135
135
|
|
|
136
136
|
try {
|
|
137
137
|
const docsPath = await ensureDocsDirectory();
|
|
@@ -163,7 +163,7 @@ async function downloadDocumentation(type) {
|
|
|
163
163
|
async function fetchDoc() {
|
|
164
164
|
try {
|
|
165
165
|
console.log(chalk.cyan('\n============================================================'));
|
|
166
|
-
console.log(chalk.cyan('š
|
|
166
|
+
console.log(chalk.cyan('š orcapt - Fetch Documentation'));
|
|
167
167
|
console.log(chalk.cyan('============================================================\n'));
|
|
168
168
|
|
|
169
169
|
// Check if we're in a project root
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Kickstart command for Node.js - Quick setup for a new
|
|
2
|
+
* Kickstart command for Node.js - Quick setup for a new Orcapt Node.js project
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
const path = require('path');
|
|
@@ -85,7 +85,7 @@ async function checkPrerequisites() {
|
|
|
85
85
|
* Clone repository
|
|
86
86
|
*/
|
|
87
87
|
async function cloneRepository(directory) {
|
|
88
|
-
const spinner = ora('Cloning
|
|
88
|
+
const spinner = ora('Cloning Orcapt Node.js starter kit from GitHub...').start();
|
|
89
89
|
|
|
90
90
|
try {
|
|
91
91
|
const git = simpleGit();
|
|
@@ -105,9 +105,9 @@ async function fixPackageJson(projectPath) {
|
|
|
105
105
|
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
106
106
|
|
|
107
107
|
// Replace local file reference with npm package
|
|
108
|
-
if (packageJson.dependencies && packageJson.dependencies['@
|
|
109
|
-
if (packageJson.dependencies['@
|
|
110
|
-
packageJson.dependencies['@
|
|
108
|
+
if (packageJson.dependencies && packageJson.dependencies['@orcapt/sdk']) {
|
|
109
|
+
if (packageJson.dependencies['@orcapt/sdk'].startsWith('file:')) {
|
|
110
|
+
packageJson.dependencies['@orcapt/sdk'] = '^1.0.0';
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
|
|
@@ -254,16 +254,16 @@ async function startAgent(projectPath, agentPort) {
|
|
|
254
254
|
}
|
|
255
255
|
|
|
256
256
|
/**
|
|
257
|
-
* Start
|
|
257
|
+
* Start Orcapt-UI frontend server
|
|
258
258
|
*/
|
|
259
259
|
async function startUI(projectPath, port, agentPort) {
|
|
260
|
-
const spinner = ora(`Starting
|
|
260
|
+
const spinner = ora(`Starting Orcapt-UI server on port ${port}...`).start();
|
|
261
261
|
|
|
262
262
|
try {
|
|
263
263
|
const uiProcess = spawnBackground('npx', [
|
|
264
264
|
'-y',
|
|
265
|
-
'@
|
|
266
|
-
'
|
|
265
|
+
'@orcapt/ui',
|
|
266
|
+
'orcapt',
|
|
267
267
|
`--port=${port}`,
|
|
268
268
|
`--agent-port=${agentPort}`
|
|
269
269
|
], {
|
|
@@ -275,13 +275,13 @@ async function startUI(projectPath, port, agentPort) {
|
|
|
275
275
|
|
|
276
276
|
// Check if process is still running
|
|
277
277
|
if (uiProcess.exitCode !== null) {
|
|
278
|
-
throw new Error('
|
|
278
|
+
throw new Error('Orcapt-UI process exited immediately');
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
spinner.succeed(chalk.green(`
|
|
281
|
+
spinner.succeed(chalk.green(`Orcapt-UI started (PID: ${uiProcess.pid})`));
|
|
282
282
|
return uiProcess;
|
|
283
283
|
} catch (error) {
|
|
284
|
-
spinner.fail('Failed to start
|
|
284
|
+
spinner.fail('Failed to start Orcapt-UI');
|
|
285
285
|
throw error;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
@@ -293,7 +293,7 @@ async function kickstartNode(options) {
|
|
|
293
293
|
try {
|
|
294
294
|
const { directory, port, agentPort, start } = options;
|
|
295
295
|
|
|
296
|
-
print.title('š
|
|
296
|
+
print.title('š Orcapt Kickstart - Node.js');
|
|
297
297
|
|
|
298
298
|
// Check prerequisites
|
|
299
299
|
await checkPrerequisites();
|
|
@@ -342,7 +342,7 @@ async function kickstartNode(options) {
|
|
|
342
342
|
{
|
|
343
343
|
type: 'confirm',
|
|
344
344
|
name: 'start',
|
|
345
|
-
message: 'Do you want to start the agent and
|
|
345
|
+
message: 'Do you want to start the agent and Orcapt-UI servers now?',
|
|
346
346
|
default: true
|
|
347
347
|
}
|
|
348
348
|
]).then(answers => answers.start) : false;
|
|
@@ -353,7 +353,7 @@ async function kickstartNode(options) {
|
|
|
353
353
|
console.log(chalk.gray(` cd ${directory}`));
|
|
354
354
|
console.log(chalk.gray(` node main.js --dev`));
|
|
355
355
|
console.log(chalk.gray(` # In another terminal:`));
|
|
356
|
-
console.log(chalk.gray(` npx -y @
|
|
356
|
+
console.log(chalk.gray(` npx -y @orcapt/ui orcapt --port=${port} --agent-port=${agentPort}`));
|
|
357
357
|
console.log();
|
|
358
358
|
return;
|
|
359
359
|
}
|
|
@@ -368,8 +368,8 @@ async function kickstartNode(options) {
|
|
|
368
368
|
const uiProcess = await startUI(projectPath, port, agentPort);
|
|
369
369
|
|
|
370
370
|
// Display success message
|
|
371
|
-
print.title('š
|
|
372
|
-
print.url('
|
|
371
|
+
print.title('š Orcapt is running!');
|
|
372
|
+
print.url('Orcapt-UI', `http://localhost:${port}`);
|
|
373
373
|
print.url('Agent ', `http://localhost:${agentPort}`);
|
|
374
374
|
console.log();
|
|
375
375
|
print.warning('Press Ctrl+C to stop both servers');
|
|
@@ -409,7 +409,7 @@ async function kickstartNode(options) {
|
|
|
409
409
|
|
|
410
410
|
uiProcess.on('exit', (code) => {
|
|
411
411
|
if (code !== 0 && code !== null) {
|
|
412
|
-
print.error('
|
|
412
|
+
print.error('Orcapt-UI stopped unexpectedly');
|
|
413
413
|
if (agentProcess && !agentProcess.killed) {
|
|
414
414
|
agentProcess.kill();
|
|
415
415
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Kickstart command - Quick setup for a new
|
|
2
|
+
* Kickstart command - Quick setup for a new Orcapt project
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
const path = require('path');
|
|
@@ -91,7 +91,7 @@ async function checkPrerequisites() {
|
|
|
91
91
|
* Clone repository
|
|
92
92
|
*/
|
|
93
93
|
async function cloneRepository(directory) {
|
|
94
|
-
const spinner = ora('Cloning
|
|
94
|
+
const spinner = ora('Cloning Orcapt starter kit from GitHub...').start();
|
|
95
95
|
|
|
96
96
|
try {
|
|
97
97
|
const git = simpleGit();
|
|
@@ -150,7 +150,6 @@ async function startBackend(projectPath, agentPort) {
|
|
|
150
150
|
try {
|
|
151
151
|
const venvPaths = getVenvPaths();
|
|
152
152
|
const pythonPath = path.join(projectPath, venvPaths.python);
|
|
153
|
-
|
|
154
153
|
const backendProcess = spawnBackground(pythonPath, ['main.py', '--dev'], {
|
|
155
154
|
cwd: projectPath,
|
|
156
155
|
env: { ...process.env, PORT: agentPort }
|
|
@@ -176,7 +175,7 @@ async function startBackend(projectPath, agentPort) {
|
|
|
176
175
|
* Start frontend server
|
|
177
176
|
*/
|
|
178
177
|
async function startFrontend(projectPath, port, agentPort) {
|
|
179
|
-
const spinner = ora(`Starting
|
|
178
|
+
const spinner = ora(`Starting Orcapt-UI server on port ${port}...`).start();
|
|
180
179
|
|
|
181
180
|
try {
|
|
182
181
|
const tryStart = async (pkgOrBin) => {
|
|
@@ -197,16 +196,16 @@ async function startFrontend(projectPath, port, agentPort) {
|
|
|
197
196
|
let frontendProcess;
|
|
198
197
|
try {
|
|
199
198
|
// Prefer new bin name
|
|
200
|
-
frontendProcess = await tryStart('
|
|
199
|
+
frontendProcess = await tryStart('orcapt-ui');
|
|
201
200
|
} catch (_) {
|
|
202
201
|
// Fallback to package name
|
|
203
|
-
frontendProcess = await tryStart('@
|
|
202
|
+
frontendProcess = await tryStart('@orcapt/ui');
|
|
204
203
|
}
|
|
205
204
|
|
|
206
|
-
spinner.succeed(chalk.green(`
|
|
205
|
+
spinner.succeed(chalk.green(`Orcapt-UI started (PID: ${frontendProcess.pid})`));
|
|
207
206
|
return frontendProcess;
|
|
208
207
|
} catch (error) {
|
|
209
|
-
spinner.fail('Failed to start
|
|
208
|
+
spinner.fail('Failed to start Orcapt-UI');
|
|
210
209
|
throw error;
|
|
211
210
|
}
|
|
212
211
|
}
|
|
@@ -218,7 +217,7 @@ async function kickstart(options) {
|
|
|
218
217
|
try {
|
|
219
218
|
const { directory, port, agentPort, start } = options;
|
|
220
219
|
|
|
221
|
-
print.title('š
|
|
220
|
+
print.title('š Orcapt Kickstart - Python');
|
|
222
221
|
|
|
223
222
|
// Check prerequisites
|
|
224
223
|
const pythonCmd = await checkPrerequisites();
|
|
@@ -282,7 +281,7 @@ async function kickstart(options) {
|
|
|
282
281
|
console.log(chalk.gray(` ${getVenvPaths().activate}`));
|
|
283
282
|
console.log(chalk.gray(` python main.py --dev`));
|
|
284
283
|
console.log(chalk.gray(` # In another terminal:`));
|
|
285
|
-
console.log(chalk.gray(` npx -y @
|
|
284
|
+
console.log(chalk.gray(` npx -y @orcapt/ui orca --port=${port} --agent-port=${agentPort}`));
|
|
286
285
|
console.log();
|
|
287
286
|
return;
|
|
288
287
|
}
|
|
@@ -297,8 +296,8 @@ async function kickstart(options) {
|
|
|
297
296
|
const frontendProcess = await startFrontend(projectPath, port, agentPort);
|
|
298
297
|
|
|
299
298
|
// Display success message
|
|
300
|
-
print.title('š
|
|
301
|
-
print.url('
|
|
299
|
+
print.title('š Orcapt is running!');
|
|
300
|
+
print.url('Orcapt-UI', `http://localhost:${port}`);
|
|
302
301
|
print.url('Agent ', `http://localhost:${agentPort}`);
|
|
303
302
|
console.log();
|
|
304
303
|
print.warning('Press Ctrl+C to stop both servers');
|
|
@@ -338,7 +337,7 @@ async function kickstart(options) {
|
|
|
338
337
|
|
|
339
338
|
frontendProcess.on('exit', (code) => {
|
|
340
339
|
if (code !== 0 && code !== null) {
|
|
341
|
-
print.error('
|
|
340
|
+
print.error('Orcapt-UI stopped unexpectedly');
|
|
342
341
|
if (backendProcess && !backendProcess.killed) {
|
|
343
342
|
backendProcess.kill();
|
|
344
343
|
}
|