@sudocode-ai/cli 0.1.18-dev.0 → 0.1.19

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 (67) hide show
  1. package/README.md +1299 -0
  2. package/dist/auth/claude.d.ts +19 -0
  3. package/dist/auth/claude.d.ts.map +1 -0
  4. package/dist/auth/claude.js +179 -0
  5. package/dist/auth/claude.js.map +1 -0
  6. package/dist/auth/clear.d.ts +17 -0
  7. package/dist/auth/clear.d.ts.map +1 -0
  8. package/dist/auth/clear.js +68 -0
  9. package/dist/auth/clear.js.map +1 -0
  10. package/dist/auth/credentials.d.ts +93 -0
  11. package/dist/auth/credentials.d.ts.map +1 -0
  12. package/dist/auth/credentials.js +255 -0
  13. package/dist/auth/credentials.js.map +1 -0
  14. package/dist/auth/index.d.ts +13 -0
  15. package/dist/auth/index.d.ts.map +1 -0
  16. package/dist/auth/index.js +19 -0
  17. package/dist/auth/index.js.map +1 -0
  18. package/dist/auth/status.d.ts +17 -0
  19. package/dist/auth/status.d.ts.map +1 -0
  20. package/dist/auth/status.js +132 -0
  21. package/dist/auth/status.js.map +1 -0
  22. package/dist/cli/auth-commands.d.ts +34 -0
  23. package/dist/cli/auth-commands.d.ts.map +1 -0
  24. package/dist/cli/auth-commands.js +28 -0
  25. package/dist/cli/auth-commands.js.map +1 -0
  26. package/dist/cli/remote-commands.d.ts +59 -0
  27. package/dist/cli/remote-commands.d.ts.map +1 -0
  28. package/dist/cli/remote-commands.js +391 -0
  29. package/dist/cli/remote-commands.js.map +1 -0
  30. package/dist/cli/update-commands.d.ts.map +1 -1
  31. package/dist/cli/update-commands.js +56 -0
  32. package/dist/cli/update-commands.js.map +1 -1
  33. package/dist/cli.js +130 -0
  34. package/dist/cli.js.map +1 -1
  35. package/dist/db.d.ts +1 -1
  36. package/dist/db.d.ts.map +1 -1
  37. package/dist/db.js +2 -2
  38. package/dist/db.js.map +1 -1
  39. package/dist/remote/claude-auth.d.ts +65 -0
  40. package/dist/remote/claude-auth.d.ts.map +1 -0
  41. package/dist/remote/claude-auth.js +100 -0
  42. package/dist/remote/claude-auth.js.map +1 -0
  43. package/dist/remote/config.d.ts +83 -0
  44. package/dist/remote/config.d.ts.map +1 -0
  45. package/dist/remote/config.js +266 -0
  46. package/dist/remote/config.js.map +1 -0
  47. package/dist/remote/errors.d.ts +18 -0
  48. package/dist/remote/errors.d.ts.map +1 -0
  49. package/dist/remote/errors.js +27 -0
  50. package/dist/remote/errors.js.map +1 -0
  51. package/dist/remote/git-context.d.ts +51 -0
  52. package/dist/remote/git-context.d.ts.map +1 -0
  53. package/dist/remote/git-context.js +107 -0
  54. package/dist/remote/git-context.js.map +1 -0
  55. package/dist/remote/spawn-service.d.ts +86 -0
  56. package/dist/remote/spawn-service.d.ts.map +1 -0
  57. package/dist/remote/spawn-service.js +248 -0
  58. package/dist/remote/spawn-service.js.map +1 -0
  59. package/dist/remote/types.d.ts +82 -0
  60. package/dist/remote/types.d.ts.map +1 -0
  61. package/dist/remote/types.js +5 -0
  62. package/dist/remote/types.js.map +1 -0
  63. package/package.json +4 -7
  64. package/dist/better-sqlite3-loader.d.ts +0 -9
  65. package/dist/better-sqlite3-loader.d.ts.map +0 -1
  66. package/dist/better-sqlite3-loader.js +0 -24
  67. package/dist/better-sqlite3-loader.js.map +0 -1
@@ -0,0 +1,391 @@
1
+ /**
2
+ * Remote command handlers
3
+ */
4
+ import chalk from "chalk";
5
+ import Table from "cli-table3";
6
+ import * as readline from "readline";
7
+ import { SpawnConfigManager } from "../remote/config.js";
8
+ import { RemoteSpawnService } from "../remote/spawn-service.js";
9
+ import { formatErrorMessage, ConfigurationError } from "../remote/errors.js";
10
+ /**
11
+ * Handle: sudocode remote <provider> spawn [options]
12
+ */
13
+ export async function handleRemoteSpawn(ctx, provider, options) {
14
+ const spawnService = new RemoteSpawnService(ctx.outputDir);
15
+ try {
16
+ const deployment = await spawnService.spawn({
17
+ provider: provider,
18
+ branch: options.branch,
19
+ repo: options.repo,
20
+ port: options.port,
21
+ machine: options.machine,
22
+ idleTimeout: options.idleTimeout,
23
+ keepAliveHours: options.keepAlive,
24
+ retentionPeriod: options.retention,
25
+ dev: options.dev,
26
+ });
27
+ if (ctx.jsonOutput) {
28
+ console.log(JSON.stringify(deployment, null, 2));
29
+ }
30
+ else {
31
+ // Display deployment information
32
+ console.log(chalk.bold('\nDeployment Information:'));
33
+ console.log(` ID: ${deployment.id}`);
34
+ console.log(` Status: ${formatStatus(deployment.status)}`);
35
+ console.log(chalk.bold('\nURLs:'));
36
+ console.log(chalk.cyan(` Workspace: ${deployment.urls.workspace}`));
37
+ console.log(chalk.cyan(` Sudocode: ${deployment.urls.sudocode}`));
38
+ console.log(chalk.gray(` SSH: ${deployment.urls.ssh}`));
39
+ console.log(chalk.bold('\nConfiguration:'));
40
+ console.log(` Keep-alive: ${deployment.keepAliveHours} hours`);
41
+ console.log(` Idle timeout: ${deployment.idleTimeout} minutes`);
42
+ console.log();
43
+ }
44
+ }
45
+ catch (error) {
46
+ if (ctx.jsonOutput) {
47
+ console.error(JSON.stringify({
48
+ error: formatErrorMessage(error)
49
+ }));
50
+ }
51
+ // Error message already printed by orchestrator with consistent formatting
52
+ process.exit(1);
53
+ }
54
+ }
55
+ /**
56
+ * Handle: sudocode remote <provider> config [options]
57
+ */
58
+ export async function handleRemoteConfig(ctx, provider, options) {
59
+ const manager = new SpawnConfigManager(ctx.outputDir);
60
+ try {
61
+ // Validate provider
62
+ if (provider !== 'codespaces' && provider !== 'coder') {
63
+ throw new ConfigurationError(`Unknown provider '${provider}'.\nSupported providers: codespaces, coder`, 'provider');
64
+ }
65
+ if (provider === 'coder') {
66
+ throw new ConfigurationError("Provider 'coder' is not yet supported.\nCurrently supported: codespaces", 'provider');
67
+ }
68
+ // At this point, TypeScript knows provider is 'codespaces'
69
+ const validProvider = provider;
70
+ // Reset to defaults
71
+ if (options.reset) {
72
+ // Prevent combining --reset with other options
73
+ const hasOtherOptions = !!(options.idleTimeout ||
74
+ options.keepAlive ||
75
+ options.retention ||
76
+ options.machine ||
77
+ options.port);
78
+ if (hasOtherOptions) {
79
+ const errorMsg = "Error: Cannot combine --reset with other options";
80
+ if (ctx.jsonOutput) {
81
+ console.error(JSON.stringify({ error: errorMsg }));
82
+ }
83
+ else {
84
+ console.error(chalk.red(errorMsg));
85
+ }
86
+ process.exit(1);
87
+ }
88
+ manager.resetProviderConfig(validProvider);
89
+ const config = manager.getProviderConfig(validProvider);
90
+ if (ctx.jsonOutput) {
91
+ console.log(JSON.stringify(config, null, 2));
92
+ }
93
+ else {
94
+ console.log(chalk.green(`✓ Spawn configuration reset to defaults for ${provider}`));
95
+ console.log(JSON.stringify(config, null, 2));
96
+ console.log(chalk.gray(`\nUpdated: ${ctx.outputDir}/spawn-config.json`));
97
+ }
98
+ return;
99
+ }
100
+ // Check if any update options are provided
101
+ const hasUpdates = !!(options.idleTimeout ||
102
+ options.keepAlive ||
103
+ options.retention ||
104
+ options.machine ||
105
+ options.port);
106
+ // View current config
107
+ if (!hasUpdates) {
108
+ const config = manager.getProviderConfig(validProvider);
109
+ console.log(JSON.stringify(config, null, 2));
110
+ return;
111
+ }
112
+ // Update config
113
+ const updates = {};
114
+ if (options.port !== undefined) {
115
+ if (options.port < 1024 || options.port > 65535) {
116
+ throw new ConfigurationError(`Port must be between 1024 and 65535`, 'port');
117
+ }
118
+ updates.port = options.port;
119
+ }
120
+ if (options.idleTimeout !== undefined) {
121
+ if (options.idleTimeout < 1) {
122
+ throw new ConfigurationError(`Idle timeout must be at least 1 minute`, 'idleTimeout');
123
+ }
124
+ updates.idleTimeout = options.idleTimeout;
125
+ }
126
+ if (options.keepAlive !== undefined) {
127
+ if (options.keepAlive < 1) {
128
+ throw new ConfigurationError(`Keep-alive must be at least 1 hour`, 'keepAliveHours');
129
+ }
130
+ updates.keepAliveHours = options.keepAlive;
131
+ }
132
+ if (options.retention !== undefined) {
133
+ if (options.retention < 1) {
134
+ throw new ConfigurationError(`Retention period must be at least 1 day`, 'retentionPeriod');
135
+ }
136
+ updates.retentionPeriod = options.retention;
137
+ }
138
+ if (options.machine !== undefined) {
139
+ updates.machine = options.machine;
140
+ }
141
+ manager.updateProviderConfig(validProvider, updates);
142
+ const config = manager.getProviderConfig(validProvider);
143
+ if (ctx.jsonOutput) {
144
+ console.log(JSON.stringify(config, null, 2));
145
+ }
146
+ else {
147
+ console.log(chalk.green(`✓ Spawn configuration updated for ${provider}`));
148
+ // Show what was updated
149
+ const updateMessages = [];
150
+ if (options.port !== undefined) {
151
+ updateMessages.push(` Port: ${options.port}`);
152
+ }
153
+ if (options.idleTimeout !== undefined) {
154
+ updateMessages.push(` Idle timeout: ${options.idleTimeout} minutes`);
155
+ }
156
+ if (options.keepAlive !== undefined) {
157
+ updateMessages.push(` Keep-alive: ${options.keepAlive} hours`);
158
+ }
159
+ if (options.retention !== undefined) {
160
+ updateMessages.push(` Retention: ${options.retention} days`);
161
+ }
162
+ if (options.machine !== undefined) {
163
+ updateMessages.push(` Machine: ${options.machine}`);
164
+ }
165
+ if (updateMessages.length > 0) {
166
+ console.log(updateMessages.join("\n"));
167
+ }
168
+ console.log(chalk.gray(`\nUpdated: ${ctx.outputDir}/spawn-config.json`));
169
+ }
170
+ }
171
+ catch (error) {
172
+ if (ctx.jsonOutput) {
173
+ console.error(JSON.stringify({
174
+ error: formatErrorMessage(error)
175
+ }));
176
+ }
177
+ else {
178
+ const message = formatErrorMessage(error);
179
+ console.error(chalk.red(message));
180
+ }
181
+ process.exit(1);
182
+ }
183
+ }
184
+ /**
185
+ * Handle: sudocode remote <provider> list
186
+ */
187
+ export async function handleRemoteList(ctx, provider) {
188
+ const spawnService = new RemoteSpawnService(ctx.outputDir);
189
+ try {
190
+ const deployments = await spawnService.list(provider);
191
+ if (ctx.jsonOutput) {
192
+ console.log(JSON.stringify(deployments, null, 2));
193
+ return;
194
+ }
195
+ // Empty state
196
+ if (deployments.length === 0) {
197
+ console.log(chalk.yellow(`No active deployments found for ${provider}.\n`));
198
+ console.log(chalk.gray(`Spawn with: sudocode remote ${provider} spawn`));
199
+ return;
200
+ }
201
+ // Display as formatted table
202
+ console.log(chalk.bold(`Active Deployments (${provider}):\n`));
203
+ const table = new Table({
204
+ head: [
205
+ chalk.cyan('ID'),
206
+ chalk.cyan('Repository'),
207
+ chalk.cyan('Branch'),
208
+ chalk.cyan('Status')
209
+ ],
210
+ colWidths: [25, 20, 15, 15]
211
+ });
212
+ for (const deployment of deployments) {
213
+ const repo = `${deployment.git.owner}/${deployment.git.repo}`;
214
+ const status = formatStatus(deployment.status);
215
+ table.push([
216
+ deployment.id,
217
+ repo,
218
+ deployment.git.branch,
219
+ status
220
+ ]);
221
+ }
222
+ console.log(table.toString());
223
+ console.log();
224
+ console.log(chalk.gray(`To view details: sudocode remote ${provider} status <id>`));
225
+ console.log(chalk.gray(`To stop a deployment: sudocode remote ${provider} stop <id>`));
226
+ }
227
+ catch (error) {
228
+ if (ctx.jsonOutput) {
229
+ console.error(JSON.stringify({
230
+ error: formatErrorMessage(error)
231
+ }));
232
+ }
233
+ // Error message already printed by orchestrator with consistent formatting
234
+ process.exit(1);
235
+ }
236
+ }
237
+ /**
238
+ * Handle: sudocode remote <provider> status <id>
239
+ */
240
+ export async function handleRemoteStatus(ctx, provider, id) {
241
+ if (!id) {
242
+ console.error(chalk.red('Error: Deployment ID is required'));
243
+ console.error(chalk.gray(`Usage: sudocode remote ${provider} status <id>`));
244
+ process.exit(1);
245
+ }
246
+ const spawnService = new RemoteSpawnService(ctx.outputDir);
247
+ try {
248
+ const deployment = await spawnService.status(provider, id);
249
+ if (ctx.jsonOutput) {
250
+ console.log(JSON.stringify(deployment, null, 2));
251
+ return;
252
+ }
253
+ // Display detailed information
254
+ console.log(chalk.bold(`Deployment: ${deployment.id}`));
255
+ console.log(`Provider: ${provider}\n`);
256
+ console.log(`Status: ${formatStatus(deployment.status)}`);
257
+ console.log(`Repository: ${deployment.git.owner}/${deployment.git.repo}`);
258
+ console.log(`Branch: ${deployment.git.branch}`);
259
+ console.log(`Created: ${deployment.createdAt}`);
260
+ console.log(chalk.bold('\nURLs:'));
261
+ console.log(chalk.cyan(` Workspace: ${deployment.urls.workspace}`));
262
+ console.log(chalk.cyan(` Sudocode: ${deployment.urls.sudocode}`));
263
+ console.log(chalk.gray(` SSH: ${deployment.urls.ssh}`));
264
+ console.log(chalk.bold('\nConfiguration:'));
265
+ console.log(` Port: ${deployment.urls.sudocode.match(/:(\d+)/)?.[1] || '3000'}`);
266
+ // Provider-specific machine type info
267
+ if (provider === 'codespaces') {
268
+ // Extract from deployment if available
269
+ console.log(` Machine: basicLinux32gb`);
270
+ }
271
+ console.log(` Keep-alive: ${deployment.keepAliveHours} hours`);
272
+ console.log(` Idle timeout: ${deployment.idleTimeout} minutes`);
273
+ if (provider === 'codespaces') {
274
+ console.log(` Retention: 14 days`);
275
+ }
276
+ console.log();
277
+ }
278
+ catch (error) {
279
+ if (ctx.jsonOutput) {
280
+ console.error(JSON.stringify({
281
+ error: formatErrorMessage(error)
282
+ }));
283
+ }
284
+ else {
285
+ // Check if it's a "not found" error
286
+ const errorMsg = formatErrorMessage(error);
287
+ console.error(chalk.red(errorMsg));
288
+ if (errorMsg.includes('not found')) {
289
+ console.error(chalk.gray(`\nList deployments with: sudocode remote ${provider} list`));
290
+ }
291
+ }
292
+ process.exit(1);
293
+ }
294
+ }
295
+ /**
296
+ * Handle: sudocode remote <provider> stop <id>
297
+ */
298
+ export async function handleRemoteStop(ctx, provider, id, options) {
299
+ if (!id) {
300
+ console.error(chalk.red('Error: Deployment ID is required'));
301
+ console.error(chalk.gray(`Usage: sudocode remote ${provider} stop <id>`));
302
+ process.exit(1);
303
+ }
304
+ const spawnService = new RemoteSpawnService(ctx.outputDir);
305
+ try {
306
+ // Skip confirmation if --force flag is provided or in JSON mode
307
+ if (!options.force && !ctx.jsonOutput) {
308
+ const confirmed = await promptConfirmation(`Stop deployment ${id}?\n` +
309
+ ' This will delete the codespace and all uncommitted changes.\n' +
310
+ ' \n' +
311
+ ' Continue?');
312
+ if (!confirmed) {
313
+ console.log(chalk.gray('Cancelled.'));
314
+ return;
315
+ }
316
+ console.log(); // Add blank line after confirmation
317
+ }
318
+ console.log('Stopping deployment...\n');
319
+ await spawnService.stop(provider, id);
320
+ if (ctx.jsonOutput) {
321
+ console.log(JSON.stringify({ success: true, id }));
322
+ }
323
+ else {
324
+ console.log(chalk.green(`✓ Deployment stopped: ${id}`));
325
+ }
326
+ }
327
+ catch (error) {
328
+ if (ctx.jsonOutput) {
329
+ console.error(JSON.stringify({
330
+ error: formatErrorMessage(error)
331
+ }));
332
+ }
333
+ else {
334
+ const errorMsg = formatErrorMessage(error);
335
+ console.error(chalk.red(errorMsg));
336
+ if (errorMsg.includes('not found')) {
337
+ console.error(chalk.gray(`\nList deployments with: sudocode remote ${provider} list`));
338
+ }
339
+ }
340
+ process.exit(1);
341
+ }
342
+ }
343
+ /**
344
+ * Helper function to format deployment status with colors
345
+ */
346
+ function formatStatus(status) {
347
+ switch (status) {
348
+ case 'running':
349
+ return chalk.green(status);
350
+ case 'stopped':
351
+ return chalk.gray(status);
352
+ case 'starting':
353
+ case 'provisioning':
354
+ return chalk.yellow(status);
355
+ case 'stopping':
356
+ return chalk.yellow(status);
357
+ case 'failed':
358
+ return chalk.red(status);
359
+ default:
360
+ return status;
361
+ }
362
+ }
363
+ /**
364
+ * Helper function to prompt for yes/no confirmation
365
+ * Returns true if user confirms, false otherwise
366
+ * Handles Ctrl+C gracefully (returns false)
367
+ */
368
+ function promptConfirmation(message) {
369
+ const rl = readline.createInterface({
370
+ input: process.stdin,
371
+ output: process.stdout
372
+ });
373
+ return new Promise((resolve) => {
374
+ // Handle Ctrl+C gracefully
375
+ const cleanupAndReject = () => {
376
+ rl.close();
377
+ resolve(false);
378
+ };
379
+ rl.on('SIGINT', cleanupAndReject);
380
+ rl.on('close', () => {
381
+ // If closed without answer, treat as "no"
382
+ resolve(false);
383
+ });
384
+ rl.question(chalk.yellow(`⚠ ${message}`) + chalk.gray(' (y/N): '), (answer) => {
385
+ rl.removeListener('SIGINT', cleanupAndReject);
386
+ rl.close();
387
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
388
+ });
389
+ });
390
+ }
391
+ //# sourceMappingURL=remote-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-commands.js","sourceRoot":"","sources":["../../src/cli/remote-commands.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-commands.d.ts","sourceRoot":"","sources":["../../src/cli/update-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgEH;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCvD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDlD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBzD"}
1
+ {"version":3,"file":"update-commands.d.ts","sourceRoot":"","sources":["../../src/cli/update-commands.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2HH;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCvD;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAgDlD;AAED;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBzD"}
@@ -58,6 +58,62 @@ function installPackageWithRetry(packageName) {
58
58
  throw error;
59
59
  }
60
60
  }
61
+ // Refresh Volta shim if sudocode is managed by Volta
62
+ // This is necessary because Volta caches package locations at shell initialization
63
+ if (isUsingVoltaForSudocode()) {
64
+ console.log();
65
+ console.log(chalk.dim("Detected Volta - refreshing package shim..."));
66
+ try {
67
+ execSync(`volta install ${packageName}`, { stdio: "inherit" });
68
+ }
69
+ catch (voltaError) {
70
+ // Volta refresh failed - not critical since npm install succeeded
71
+ console.log(chalk.yellow("Warning: Failed to refresh Volta shim"));
72
+ console.log(chalk.dim("You may need to re-install sudocode"));
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * Check if sudocode was installed via Volta
78
+ *
79
+ * Volta is a Node.js version manager that creates shims for globally installed packages.
80
+ * When a package is installed via npm while Volta is active, the binary is placed in
81
+ * Volta's managed directory (typically ~/.volta/bin or $VOLTA_HOME/bin).
82
+ *
83
+ * This function detects if the sudocode binary is managed by Volta by:
84
+ * 1. Checking if Volta is installed on the system
85
+ * 2. Getting the actual path of the sudocode executable
86
+ * 3. Verifying the path is within Volta's managed directories
87
+ *
88
+ * Why this matters:
89
+ * Volta caches the resolved paths of executables at shell initialization time.
90
+ * When sudocode is updated via `npm install -g`, the files are updated but the
91
+ * current shell session continues to use the old cached path until the shell
92
+ * is restarted. This is Volta's intended behavior for performance.
93
+ *
94
+ * @returns true if sudocode binary is managed by Volta, false otherwise
95
+ */
96
+ function isUsingVoltaForSudocode() {
97
+ try {
98
+ // First check if Volta exists on the system
99
+ execSync("volta --version", { stdio: "pipe" });
100
+ // Get the actual path of the sudocode binary
101
+ const binPath = execSync("which sudocode", {
102
+ stdio: "pipe",
103
+ encoding: "utf8",
104
+ }).trim();
105
+ // Check VOLTA_HOME environment variable if set (user may have custom location)
106
+ const voltaHome = process.env.VOLTA_HOME;
107
+ if (voltaHome) {
108
+ return binPath.startsWith(voltaHome);
109
+ }
110
+ // Fall back to checking for default /.volta/ directory in path
111
+ return binPath.includes("/.volta/");
112
+ }
113
+ catch {
114
+ // Volta not installed, which command failed, or other error
115
+ return false;
116
+ }
61
117
  }
62
118
  /**
63
119
  * Handle update check command
@@ -1 +1 @@
1
- {"version":3,"file":"update-commands.js","sourceRoot":"","sources":["../../src/cli/update-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-commands.js","sourceRoot":"","sources":["../../src/cli/update-commands.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -21,6 +21,8 @@ import { handleInit } from "./cli/init-commands.js";
21
21
  import { handleUpdate, handleUpdateCheck } from "./cli/update-commands.js";
22
22
  import { handlePluginList, handlePluginInstall, handlePluginStatus, handlePluginUninstall, handlePluginConfigure, handlePluginTest, handlePluginInfo, } from "./cli/plugin-commands.js";
23
23
  import { handleResolveConflicts, handleMergeDriver, handleInitMergeDriver, handleRemoveMergeDriver, } from "./cli/merge-commands.js";
24
+ import { handleAuthClearCommand, handleAuthStatusCommand, handleAuthClaudeCommand } from "./cli/auth-commands.js";
25
+ import { handleRemoteSpawn, handleRemoteConfig, handleRemoteList, handleRemoteStatus, handleRemoteStop, } from "./cli/remote-commands.js";
24
26
  import { getUpdateNotification } from "./update-checker.js";
25
27
  import { VERSION } from "./version.js";
26
28
  // Global state
@@ -515,6 +517,134 @@ plugin
515
517
  .action(async (name) => {
516
518
  await handlePluginInfo(getContext(), name);
517
519
  });
520
+ // ============================================================================
521
+ // AUTH COMMANDS
522
+ // ============================================================================
523
+ const auth = program
524
+ .command("auth")
525
+ .description("Manage authentication for AI services");
526
+ auth
527
+ .command("claude")
528
+ .description("Configure Claude Code authentication via OAuth")
529
+ .option("-f, --force", "Overwrite existing token without confirmation")
530
+ .action(async (options) => {
531
+ // Auth commands don't need database context, but we need to provide it for consistency
532
+ await handleAuthClaudeCommand(getContext(), options);
533
+ });
534
+ auth
535
+ .command("status")
536
+ .description("Check authentication status for all services")
537
+ .action(async (options) => {
538
+ // Auth commands don't need database context, but we need to provide it for consistency
539
+ await handleAuthStatusCommand(getContext(), options);
540
+ });
541
+ auth
542
+ .command("clear")
543
+ .description("Clear all stored authentication credentials")
544
+ .option("-f, --force", "Skip confirmation prompt")
545
+ .action(async (options) => {
546
+ // Auth commands don't need database context, but we need to provide it for consistency
547
+ await handleAuthClearCommand(getContext(), options);
548
+ });
549
+ // ============================================================================
550
+ // REMOTE COMMANDS
551
+ // ============================================================================
552
+ const remote = program
553
+ .command('remote')
554
+ .description('Manage remote sudocode deployments');
555
+ // Codespaces provider
556
+ const codespaces = remote
557
+ .command('codespaces')
558
+ .description('Manage GitHub Codespaces deployments');
559
+ codespaces
560
+ .command('spawn')
561
+ .description('Spawn sudocode to GitHub Codespaces')
562
+ .option('--branch <name>', 'Branch to spawn')
563
+ .option('--repo <owner/repo>', 'Repository to spawn')
564
+ .option('--port <number>', 'Server port', parseInt)
565
+ .option('--machine <type>', 'Machine type')
566
+ .option('--idle-timeout <minutes>', 'Idle timeout in minutes', parseInt)
567
+ .option('--keep-alive <hours>', 'Keep-alive hours', parseInt)
568
+ .option('--retention <days>', 'Retention period in days', parseInt)
569
+ .option('--dev', 'Spawn in development mode (uses local sudocode packages)')
570
+ .action(async (options) => {
571
+ await handleRemoteSpawn(getContext(), 'codespaces', options);
572
+ });
573
+ codespaces
574
+ .command('config')
575
+ .description('Configure codespaces settings')
576
+ .option('--idle-timeout <minutes>', 'Idle timeout in minutes', parseInt)
577
+ .option('--keep-alive <hours>', 'Keep-alive duration in hours', parseInt)
578
+ .option('--retention <days>', 'Retention period in days', parseInt)
579
+ .option('--machine <type>', 'Machine type')
580
+ .option('--port <number>', 'Server port', parseInt)
581
+ .option('--reset', 'Reset to defaults')
582
+ .action(async (options) => {
583
+ await handleRemoteConfig(getContext(), 'codespaces', options);
584
+ });
585
+ codespaces
586
+ .command('list')
587
+ .description('List all codespaces deployments')
588
+ .action(async () => {
589
+ await handleRemoteList(getContext(), 'codespaces');
590
+ });
591
+ codespaces
592
+ .command('status <id>')
593
+ .description('Get codespaces deployment status')
594
+ .action(async (id) => {
595
+ await handleRemoteStatus(getContext(), 'codespaces', id);
596
+ });
597
+ codespaces
598
+ .command('stop <id>')
599
+ .description('Stop a codespaces deployment')
600
+ .option('-f, --force', 'Skip confirmation')
601
+ .action(async (id, options) => {
602
+ await handleRemoteStop(getContext(), 'codespaces', id, options);
603
+ });
604
+ // Coder provider (not yet supported)
605
+ const coder = remote
606
+ .command('coder')
607
+ .description('Manage Coder deployments (not yet supported)');
608
+ coder
609
+ .command('spawn')
610
+ .description('Spawn sudocode to Coder (not yet supported)')
611
+ .action(async () => {
612
+ console.error(chalk.red("✗ Provider 'coder' is not yet supported"));
613
+ console.error(chalk.gray(" Currently supported: codespaces"));
614
+ process.exit(1);
615
+ });
616
+ coder
617
+ .command('config')
618
+ .description('Configure coder settings (not yet supported)')
619
+ .action(async () => {
620
+ console.error(chalk.red("✗ Provider 'coder' is not yet supported"));
621
+ console.error(chalk.gray(" Currently supported: codespaces"));
622
+ process.exit(1);
623
+ });
624
+ coder
625
+ .command('list')
626
+ .description('List all coder deployments (not yet supported)')
627
+ .action(async () => {
628
+ console.error(chalk.red("✗ Provider 'coder' is not yet supported"));
629
+ console.error(chalk.gray(" Currently supported: codespaces"));
630
+ process.exit(1);
631
+ });
632
+ coder
633
+ .command('status <id>')
634
+ .description('Get coder deployment status (not yet supported)')
635
+ .action(async () => {
636
+ console.error(chalk.red("✗ Provider 'coder' is not yet supported"));
637
+ console.error(chalk.gray(" Currently supported: codespaces"));
638
+ process.exit(1);
639
+ });
640
+ coder
641
+ .command('stop <id>')
642
+ .description('Stop a coder deployment (not yet supported)')
643
+ .action(async () => {
644
+ console.error(chalk.red("✗ Provider 'coder' is not yet supported"));
645
+ console.error(chalk.gray(" Currently supported: codespaces"));
646
+ process.exit(1);
647
+ });
518
648
  // Parse arguments
519
649
  program.parse(process.argv);
520
650
  // Check for updates (non-blocking)