replicas-cli 0.2.23 → 0.2.26

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 (125) hide show
  1. package/dist/index.js +2877 -300
  2. package/package.json +4 -2
  3. package/dist/commands/claude-auth.d.ts +0 -5
  4. package/dist/commands/claude-auth.d.ts.map +0 -1
  5. package/dist/commands/claude-auth.js +0 -52
  6. package/dist/commands/claude-auth.js.map +0 -1
  7. package/dist/commands/code.d.ts +0 -4
  8. package/dist/commands/code.d.ts.map +0 -1
  9. package/dist/commands/code.js +0 -67
  10. package/dist/commands/code.js.map +0 -1
  11. package/dist/commands/codex-auth.d.ts +0 -5
  12. package/dist/commands/codex-auth.d.ts.map +0 -1
  13. package/dist/commands/codex-auth.js +0 -52
  14. package/dist/commands/codex-auth.js.map +0 -1
  15. package/dist/commands/config.d.ts +0 -4
  16. package/dist/commands/config.d.ts.map +0 -1
  17. package/dist/commands/config.js +0 -74
  18. package/dist/commands/config.js.map +0 -1
  19. package/dist/commands/connect.d.ts +0 -4
  20. package/dist/commands/connect.d.ts.map +0 -1
  21. package/dist/commands/connect.js +0 -40
  22. package/dist/commands/connect.js.map +0 -1
  23. package/dist/commands/dev-sync.d.ts +0 -2
  24. package/dist/commands/dev-sync.d.ts.map +0 -1
  25. package/dist/commands/dev-sync.js +0 -78
  26. package/dist/commands/dev-sync.js.map +0 -1
  27. package/dist/commands/init.d.ts +0 -4
  28. package/dist/commands/init.d.ts.map +0 -1
  29. package/dist/commands/init.js +0 -45
  30. package/dist/commands/init.js.map +0 -1
  31. package/dist/commands/login.d.ts +0 -2
  32. package/dist/commands/login.d.ts.map +0 -1
  33. package/dist/commands/login.js +0 -203
  34. package/dist/commands/login.js.map +0 -1
  35. package/dist/commands/logout.d.ts +0 -2
  36. package/dist/commands/logout.d.ts.map +0 -1
  37. package/dist/commands/logout.js +0 -17
  38. package/dist/commands/logout.js.map +0 -1
  39. package/dist/commands/org.d.ts +0 -3
  40. package/dist/commands/org.d.ts.map +0 -1
  41. package/dist/commands/org.js +0 -83
  42. package/dist/commands/org.js.map +0 -1
  43. package/dist/commands/replica.d.ts +0 -19
  44. package/dist/commands/replica.d.ts.map +0 -1
  45. package/dist/commands/replica.js +0 -289
  46. package/dist/commands/replica.js.map +0 -1
  47. package/dist/commands/repositories.d.ts +0 -2
  48. package/dist/commands/repositories.d.ts.map +0 -1
  49. package/dist/commands/repositories.js +0 -41
  50. package/dist/commands/repositories.js.map +0 -1
  51. package/dist/commands/tools.d.ts +0 -2
  52. package/dist/commands/tools.d.ts.map +0 -1
  53. package/dist/commands/tools.js +0 -70
  54. package/dist/commands/tools.js.map +0 -1
  55. package/dist/commands/whoami.d.ts +0 -2
  56. package/dist/commands/whoami.d.ts.map +0 -1
  57. package/dist/commands/whoami.js +0 -31
  58. package/dist/commands/whoami.js.map +0 -1
  59. package/dist/index.d.ts +0 -4
  60. package/dist/index.d.ts.map +0 -1
  61. package/dist/index.js.map +0 -1
  62. package/dist/lib/api.d.ts +0 -7
  63. package/dist/lib/api.d.ts.map +0 -1
  64. package/dist/lib/api.js +0 -81
  65. package/dist/lib/api.js.map +0 -1
  66. package/dist/lib/auth.d.ts +0 -4
  67. package/dist/lib/auth.d.ts.map +0 -1
  68. package/dist/lib/auth.js +0 -62
  69. package/dist/lib/auth.js.map +0 -1
  70. package/dist/lib/claude-oauth.d.ts +0 -10
  71. package/dist/lib/claude-oauth.d.ts.map +0 -1
  72. package/dist/lib/claude-oauth.js +0 -131
  73. package/dist/lib/claude-oauth.js.map +0 -1
  74. package/dist/lib/codex-oauth.d.ts +0 -11
  75. package/dist/lib/codex-oauth.d.ts.map +0 -1
  76. package/dist/lib/codex-oauth.js +0 -183
  77. package/dist/lib/codex-oauth.js.map +0 -1
  78. package/dist/lib/config.d.ts +0 -12
  79. package/dist/lib/config.d.ts.map +0 -1
  80. package/dist/lib/config.js +0 -84
  81. package/dist/lib/config.js.map +0 -1
  82. package/dist/lib/git.d.ts +0 -4
  83. package/dist/lib/git.d.ts.map +0 -1
  84. package/dist/lib/git.js +0 -39
  85. package/dist/lib/git.js.map +0 -1
  86. package/dist/lib/organization.d.ts +0 -5
  87. package/dist/lib/organization.d.ts.map +0 -1
  88. package/dist/lib/organization.js +0 -29
  89. package/dist/lib/organization.js.map +0 -1
  90. package/dist/lib/pkce.d.ts +0 -14
  91. package/dist/lib/pkce.d.ts.map +0 -1
  92. package/dist/lib/pkce.js +0 -37
  93. package/dist/lib/pkce.js.map +0 -1
  94. package/dist/lib/ports.d.ts +0 -3
  95. package/dist/lib/ports.d.ts.map +0 -1
  96. package/dist/lib/ports.js +0 -44
  97. package/dist/lib/ports.js.map +0 -1
  98. package/dist/lib/replicas-config.d.ts +0 -8
  99. package/dist/lib/replicas-config.d.ts.map +0 -1
  100. package/dist/lib/replicas-config.js +0 -64
  101. package/dist/lib/replicas-config.js.map +0 -1
  102. package/dist/lib/ssh-config.d.ts +0 -12
  103. package/dist/lib/ssh-config.d.ts.map +0 -1
  104. package/dist/lib/ssh-config.js +0 -122
  105. package/dist/lib/ssh-config.js.map +0 -1
  106. package/dist/lib/ssh.d.ts +0 -5
  107. package/dist/lib/ssh.d.ts.map +0 -1
  108. package/dist/lib/ssh.js +0 -82
  109. package/dist/lib/ssh.js.map +0 -1
  110. package/dist/lib/supabase.d.ts +0 -5
  111. package/dist/lib/supabase.d.ts.map +0 -1
  112. package/dist/lib/supabase.js +0 -15
  113. package/dist/lib/supabase.js.map +0 -1
  114. package/dist/lib/version-check.d.ts +0 -2
  115. package/dist/lib/version-check.d.ts.map +0 -1
  116. package/dist/lib/version-check.js +0 -44
  117. package/dist/lib/version-check.js.map +0 -1
  118. package/dist/lib/workspace-connection.d.ts +0 -11
  119. package/dist/lib/workspace-connection.d.ts.map +0 -1
  120. package/dist/lib/workspace-connection.js +0 -132
  121. package/dist/lib/workspace-connection.js.map +0 -1
  122. package/dist/types/index.d.ts +0 -52
  123. package/dist/types/index.d.ts.map +0 -1
  124. package/dist/types/index.js +0 -3
  125. package/dist/types/index.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-cli",
3
- "version": "0.2.23",
3
+ "version": "0.2.26",
4
4
  "description": "CLI for managing Replicas workspaces - SSH into cloud dev environments with automatic port forwarding",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -10,7 +10,7 @@
10
10
  "dist"
11
11
  ],
12
12
  "scripts": {
13
- "build": "tsc",
13
+ "build": "tsup",
14
14
  "dev": "tsx src/index.ts",
15
15
  "start": "node dist/index.js",
16
16
  "prepublishOnly": "yarn build"
@@ -45,7 +45,9 @@
45
45
  "tslib": "^2.6.2"
46
46
  },
47
47
  "devDependencies": {
48
+ "@replicas/shared": "*",
48
49
  "@types/node": "^20.11.0",
50
+ "tsup": "^8.5.0",
49
51
  "tsx": "^4.7.0",
50
52
  "typescript": "^5.3.3"
51
53
  }
@@ -1,5 +0,0 @@
1
- export interface ClaudeAuthOptions {
2
- user?: boolean;
3
- }
4
- export declare function claudeAuthCommand(options?: ClaudeAuthOptions): Promise<void>;
5
- //# sourceMappingURL=claude-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-auth.d.ts","sourceRoot":"","sources":["../../src/commands/claude-auth.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,iBAAsB,iBAsDtE"}
@@ -1,52 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.claudeAuthCommand = claudeAuthCommand;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const api_1 = require("../lib/api");
9
- const claude_oauth_1 = require("../lib/claude-oauth");
10
- async function claudeAuthCommand(options = {}) {
11
- const isUserScoped = options.user === true;
12
- const scopeLabel = isUserScoped ? 'personal' : 'organization';
13
- console.log(chalk_1.default.cyan(`Authenticating with Claude Code (${scopeLabel})...\n`));
14
- try {
15
- const tokens = await (0, claude_oauth_1.runClaudeOAuthFlow)();
16
- console.log(chalk_1.default.gray('\nUploading credentials to Replicas...'));
17
- // Upload credentials to Replicas API
18
- const endpoint = isUserScoped ? '/v1/claude/user/credentials' : '/v1/claude/credentials';
19
- const response = await (0, api_1.orgAuthenticatedFetch)(endpoint, {
20
- method: 'POST',
21
- body: {
22
- access_token: tokens.accessToken,
23
- refresh_token: tokens.refreshToken,
24
- token_type: tokens.tokenType,
25
- scope: tokens.scope,
26
- expires_at: tokens.expiresAt,
27
- refresh_token_expires_at: tokens.refreshTokenExpiresAt,
28
- },
29
- });
30
- if (!response.success) {
31
- throw new Error(response.error || 'Failed to upload Claude credentials to Replicas');
32
- }
33
- console.log(chalk_1.default.green('\n✓ Claude authentication complete!'));
34
- if (response.email) {
35
- console.log(chalk_1.default.gray(` Account: ${response.email}`));
36
- }
37
- if (response.planType) {
38
- console.log(chalk_1.default.gray(` Plan: ${response.planType}`));
39
- }
40
- if (isUserScoped) {
41
- console.log(chalk_1.default.gray('\nYour personal Claude credentials have been saved.\n'));
42
- }
43
- else {
44
- console.log(chalk_1.default.gray('\nYou can now use Claude Code in your workspaces.\n'));
45
- }
46
- }
47
- catch (error) {
48
- console.log(chalk_1.default.red('\n✗ Error:'), error instanceof Error ? error.message : error);
49
- process.exit(1);
50
- }
51
- }
52
- //# sourceMappingURL=claude-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"claude-auth.js","sourceRoot":"","sources":["../../src/commands/claude-auth.ts"],"names":[],"mappings":";;;;;AAQA,8CAsDC;AA9DD,kDAA0B;AAC1B,oCAAmD;AACnD,sDAAyD;AAMlD,KAAK,UAAU,iBAAiB,CAAC,UAA6B,EAAE;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;IAC3C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,oCAAoC,UAAU,QAAQ,CAAC,CAAC,CAAC;IAEhF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAkB,GAAE,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,wBAAwB,CAAC;QACzF,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAqB,EAO1C,QAAQ,EACR;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,aAAa,EAAE,MAAM,CAAC,YAAY;gBAClC,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,wBAAwB,EAAE,MAAM,CAAC,qBAAqB;aACvD;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,iDAAiD,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAChE,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare function codeCommand(workspaceName: string, options: {
2
- copy?: boolean;
3
- }): Promise<void>;
4
- //# sourceMappingURL=code.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqEnG"}
@@ -1,67 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.codeCommand = codeCommand;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const child_process_1 = require("child_process");
9
- const config_1 = require("../lib/config");
10
- const workspace_connection_1 = require("../lib/workspace-connection");
11
- const ssh_config_1 = require("../lib/ssh-config");
12
- async function codeCommand(workspaceName, options) {
13
- if (!(0, config_1.isAuthenticated)()) {
14
- console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
15
- process.exit(1);
16
- }
17
- try {
18
- const { workspace, sshKeyPath, portMappings, repoName } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, options);
19
- const hostAlias = (0, ssh_config_1.getWorkspaceHostAlias)(workspace.name);
20
- console.log(chalk_1.default.blue('\nConfiguring SSH connection...'));
21
- (0, ssh_config_1.addOrUpdateSSHConfigEntry)({
22
- host: hostAlias,
23
- hostname: workspace.ipv4_address,
24
- user: 'ubuntu',
25
- identityFile: sshKeyPath,
26
- portForwards: portMappings,
27
- });
28
- console.log(chalk_1.default.green(`✓ SSH config entry created: ${hostAlias}`));
29
- const remotePath = repoName
30
- ? `/home/ubuntu/workspaces/${repoName}`
31
- : '/home/ubuntu';
32
- const ideCommand = (0, config_1.getIdeCommand)();
33
- const fullCommand = `${ideCommand} --remote ssh-remote+${hostAlias} ${remotePath}`;
34
- console.log(chalk_1.default.blue(`\nOpening ${ideCommand} for workspace ${workspace.name}...`));
35
- console.log(chalk_1.default.gray(`Command: ${fullCommand}`));
36
- if (portMappings.size > 0) {
37
- console.log(chalk_1.default.cyan('\nPort forwarding configured:'));
38
- for (const [remotePort, localPort] of portMappings) {
39
- console.log(chalk_1.default.cyan(` • localhost:${localPort} → workspace:${remotePort}`));
40
- }
41
- }
42
- const ide = (0, child_process_1.spawn)(ideCommand, [
43
- '--remote',
44
- `ssh-remote+${hostAlias}`,
45
- remotePath
46
- ], {
47
- stdio: 'inherit',
48
- detached: false,
49
- });
50
- ide.on('error', (error) => {
51
- console.error(chalk_1.default.red(`\nFailed to launch ${ideCommand}: ${error.message}`));
52
- console.log(chalk_1.default.yellow(`\nMake sure ${ideCommand} is installed and available in your PATH.`));
53
- console.log(chalk_1.default.gray(`You can configure a different IDE with: replicas config set ide <command>`));
54
- process.exit(1);
55
- });
56
- ide.on('close', (code) => {
57
- if (code === 0) {
58
- console.log(chalk_1.default.green(`\n✓ ${ideCommand} closed successfully.\n`));
59
- }
60
- });
61
- }
62
- catch (error) {
63
- console.error(chalk_1.default.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}`));
64
- process.exit(1);
65
- }
66
- }
67
- //# sourceMappingURL=code.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"code.js","sourceRoot":"","sources":["../../src/commands/code.ts"],"names":[],"mappings":";;;;;AAMA,kCAqEC;AA3ED,kDAA0B;AAC1B,iDAAsC;AACtC,0CAA+D;AAC/D,sEAAyE;AACzE,kDAAqF;AAE9E,KAAK,UAAU,WAAW,CAAC,aAAqB,EAAE,OAA2B;IAClF,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAA,iDAA0B,EACxF,aAAa,EACb,OAAO,CACR,CAAC;QAEF,MAAM,SAAS,GAAG,IAAA,kCAAqB,EAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAExD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC3D,IAAA,sCAAyB,EAAC;YACxB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,SAAS,CAAC,YAAa;YACjC,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,UAAU;YACxB,YAAY,EAAE,YAAY;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAC,CAAC;QAErE,MAAM,UAAU,GAAG,QAAQ;YACzB,CAAC,CAAC,2BAA2B,QAAQ,EAAE;YACvC,CAAC,CAAC,cAAc,CAAC;QAEnB,MAAM,UAAU,GAAG,IAAA,sBAAa,GAAE,CAAC;QAEnC,MAAM,WAAW,GAAG,GAAG,UAAU,wBAAwB,SAAS,IAAI,UAAU,EAAE,CAAC;QAEnF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,UAAU,kBAAkB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,WAAW,EAAE,CAAC,CAAC,CAAC;QAEnD,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,qBAAK,EAAC,UAAU,EAAE;YAC5B,UAAU;YACV,cAAc,SAAS,EAAE;YACzB,UAAU;SACX,EAAE;YACD,KAAK,EAAE,SAAS;YAChB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,sBAAsB,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC/E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,eAAe,UAAU,2CAA2C,CAAC,CAAC,CAAC;YAChG,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC,CAAC;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,UAAU,yBAAyB,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,5 +0,0 @@
1
- export interface CodexAuthOptions {
2
- user?: boolean;
3
- }
4
- export declare function codexAuthCommand(options?: CodexAuthOptions): Promise<void>;
5
- //# sourceMappingURL=codex-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-auth.d.ts","sourceRoot":"","sources":["../../src/commands/codex-auth.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,gBAAqB,iBAoDpE"}
@@ -1,52 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.codexAuthCommand = codexAuthCommand;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const api_1 = require("../lib/api");
9
- const codex_oauth_1 = require("../lib/codex-oauth");
10
- async function codexAuthCommand(options = {}) {
11
- const isUserScoped = options.user === true;
12
- const scopeLabel = isUserScoped ? 'personal' : 'organization';
13
- console.log(chalk_1.default.cyan(`Authenticating with Codex (${scopeLabel})...\n`));
14
- try {
15
- // Run OAuth flow (opens browser, starts local server, gets tokens)
16
- const tokens = await (0, codex_oauth_1.runCodexOAuthFlow)();
17
- console.log(chalk_1.default.gray('\nUploading credentials to Replicas...'));
18
- // Upload credentials to Replicas API
19
- const endpoint = isUserScoped ? '/v1/codex/user/credentials' : '/v1/codex/credentials';
20
- const response = await (0, api_1.orgAuthenticatedFetch)(endpoint, {
21
- method: 'POST',
22
- body: {
23
- access_token: tokens.accessToken,
24
- refresh_token: tokens.refreshToken,
25
- id_token: tokens.idToken,
26
- },
27
- });
28
- if (response.success) {
29
- console.log(chalk_1.default.green('\n✓ Codex authentication complete!'));
30
- if (response.email) {
31
- console.log(chalk_1.default.gray(` Account: ${response.email}`));
32
- }
33
- if (response.planType) {
34
- console.log(chalk_1.default.gray(` Plan: ${response.planType}`));
35
- }
36
- if (isUserScoped) {
37
- console.log(chalk_1.default.gray('\nYour personal Codex credentials have been saved.\n'));
38
- }
39
- else {
40
- console.log(chalk_1.default.gray('\nYou can now use Codex in your workspaces.\n'));
41
- }
42
- }
43
- else {
44
- throw new Error(response.error || 'Failed to upload Codex credentials to Replicas');
45
- }
46
- }
47
- catch (error) {
48
- console.log(chalk_1.default.red('\n✗ Error:'), error instanceof Error ? error.message : error);
49
- process.exit(1);
50
- }
51
- }
52
- //# sourceMappingURL=codex-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-auth.js","sourceRoot":"","sources":["../../src/commands/codex-auth.ts"],"names":[],"mappings":";;;;;AAQA,4CAoDC;AA5DD,kDAA0B;AAC1B,oCAAmD;AACnD,oDAAuD;AAMhD,KAAK,UAAU,gBAAgB,CAAC,UAA4B,EAAE;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC;IAC3C,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8BAA8B,UAAU,QAAQ,CAAC,CAAC,CAAC;IAE1E,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAiB,GAAE,CAAC;QAEzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAElE,qCAAqC;QACrC,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,uBAAuB,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,IAAA,2BAAqB,EAO1C,QAAQ,EACR;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,YAAY,EAAE,MAAM,CAAC,WAAW;gBAChC,aAAa,EAAE,MAAM,CAAC,YAAY;gBAClC,QAAQ,EAAE,MAAM,CAAC,OAAO;aACzB;SACF,CACF,CAAC;QAEF,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;YAC/D,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC1D,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,gDAAgD,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare function configGetCommand(key: string): Promise<void>;
2
- export declare function configSetCommand(key: string, value: string): Promise<void>;
3
- export declare function configListCommand(): Promise<void>;
4
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAGA,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBjE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhF;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBvD"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.configGetCommand = configGetCommand;
7
- exports.configSetCommand = configSetCommand;
8
- exports.configListCommand = configListCommand;
9
- const chalk_1 = __importDefault(require("chalk"));
10
- const config_1 = require("../lib/config");
11
- async function configGetCommand(key) {
12
- if (!(0, config_1.isAuthenticated)()) {
13
- console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
14
- process.exit(1);
15
- }
16
- try {
17
- if (key === 'ide') {
18
- const ideCommand = (0, config_1.getIdeCommand)();
19
- console.log(chalk_1.default.green(`\nIDE command: ${ideCommand}\n`));
20
- }
21
- else {
22
- console.log(chalk_1.default.red(`Unknown config key: ${key}`));
23
- console.log(chalk_1.default.gray('Available keys: ide'));
24
- process.exit(1);
25
- }
26
- }
27
- catch (error) {
28
- console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
29
- process.exit(1);
30
- }
31
- }
32
- async function configSetCommand(key, value) {
33
- if (!(0, config_1.isAuthenticated)()) {
34
- console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
35
- process.exit(1);
36
- }
37
- try {
38
- if (key === 'ide') {
39
- (0, config_1.setIdeCommand)(value);
40
- console.log(chalk_1.default.green(`\n✓ IDE command set to: ${value}\n`));
41
- }
42
- else {
43
- console.log(chalk_1.default.red(`Unknown config key: ${key}`));
44
- console.log(chalk_1.default.gray('Available keys: ide'));
45
- process.exit(1);
46
- }
47
- }
48
- catch (error) {
49
- console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
50
- process.exit(1);
51
- }
52
- }
53
- async function configListCommand() {
54
- if (!(0, config_1.isAuthenticated)()) {
55
- console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
56
- process.exit(1);
57
- }
58
- try {
59
- const config = (0, config_1.readConfig)();
60
- if (!config) {
61
- console.log(chalk_1.default.red('No config found. Please login first.'));
62
- process.exit(1);
63
- }
64
- console.log(chalk_1.default.green('\nCurrent configuration:'));
65
- console.log(chalk_1.default.gray(` Organization ID: ${config.organization_id || '(not set)'}`));
66
- console.log(chalk_1.default.gray(` IDE command: ${config.ide_command || 'code (default)'}`));
67
- console.log();
68
- }
69
- catch (error) {
70
- console.error(chalk_1.default.red(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`));
71
- process.exit(1);
72
- }
73
- }
74
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export declare function connectCommand(workspaceName: string, options: {
2
- copy?: boolean;
3
- }): Promise<void>;
4
- //# sourceMappingURL=connect.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAKA,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCtG"}
@@ -1,40 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.connectCommand = connectCommand;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const config_1 = require("../lib/config");
9
- const ssh_1 = require("../lib/ssh");
10
- const workspace_connection_1 = require("../lib/workspace-connection");
11
- async function connectCommand(workspaceName, options) {
12
- if (!(0, config_1.isAuthenticated)()) {
13
- console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
14
- process.exit(1);
15
- }
16
- try {
17
- const { workspace, sshKeyPath, portMappings } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, options);
18
- console.log(chalk_1.default.blue(`\nConnecting to ${workspace.name}...`));
19
- let sshCommand = `ssh -i ${sshKeyPath}`;
20
- for (const [remotePort, localPort] of portMappings) {
21
- sshCommand += ` -L ${localPort}:localhost:${remotePort}`;
22
- }
23
- sshCommand += ` ubuntu@${workspace.ipv4_address}`;
24
- console.log(chalk_1.default.gray(`SSH command: ${sshCommand}`));
25
- if (portMappings.size > 0) {
26
- console.log(chalk_1.default.cyan('\nPort forwarding active:'));
27
- for (const [remotePort, localPort] of portMappings) {
28
- console.log(chalk_1.default.cyan(` • localhost:${localPort} → workspace:${remotePort}`));
29
- }
30
- }
31
- console.log(chalk_1.default.gray('\nPress Ctrl+D to disconnect.\n'));
32
- await (0, ssh_1.connectSSH)(sshKeyPath, workspace.ipv4_address, portMappings);
33
- console.log(chalk_1.default.green('\n✓ Disconnected from workspace.\n'));
34
- }
35
- catch (error) {
36
- console.error(chalk_1.default.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}`));
37
- process.exit(1);
38
- }
39
- }
40
- //# sourceMappingURL=connect.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":";;;;;AAKA,wCAsCC;AA3CD,kDAA0B;AAC1B,0CAAgD;AAChD,oCAAwC;AACxC,sEAAyE;AAElE,KAAK,UAAU,cAAc,CAAC,aAAqB,EAAE,OAA2B;IACrF,IAAI,CAAC,IAAA,wBAAe,GAAE,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,IAAA,iDAA0B,EAC9E,aAAa,EACb,OAAO,CACR,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAEhE,IAAI,UAAU,GAAG,UAAU,UAAU,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;YACnD,UAAU,IAAI,OAAO,SAAS,cAAc,UAAU,EAAE,CAAC;QAC3D,CAAC;QACD,UAAU,IAAI,WAAW,SAAS,CAAC,YAAY,EAAE,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;QAEtD,IAAI,YAAY,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;YACrD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,YAAY,EAAE,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,gBAAgB,UAAU,EAAE,CAAC,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3D,MAAM,IAAA,gBAAU,EAAC,UAAU,EAAE,SAAS,CAAC,YAAa,EAAE,YAAY,CAAC,CAAC;QAEpE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function devSyncCommand(workspaceName: string): Promise<void>;
2
- //# sourceMappingURL=dev-sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-sync.d.ts","sourceRoot":"","sources":["../../src/commands/dev-sync.ts"],"names":[],"mappings":"AAMA,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EzE"}
@@ -1,78 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.devSyncCommand = devSyncCommand;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const child_process_1 = require("child_process");
9
- const path_1 = __importDefault(require("path"));
10
- const config_1 = require("../lib/config");
11
- const workspace_connection_1 = require("../lib/workspace-connection");
12
- async function devSyncCommand(workspaceName) {
13
- if (!(0, config_1.isAuthenticated)()) {
14
- console.log(chalk_1.default.red('Not logged in. Please run "replicas login" first.'));
15
- process.exit(1);
16
- }
17
- try {
18
- const { workspace, sshKeyPath } = await (0, workspace_connection_1.prepareWorkspaceConnection)(workspaceName, {});
19
- if (!workspace.ipv4_address) {
20
- throw new Error('Workspace does not have an IP address');
21
- }
22
- console.log(chalk_1.default.blue(`\nSyncing engine to ${workspace.name}...`));
23
- // Path to dev-sync.sh script in engine/scripts/
24
- // From cli/dist/commands/ -> ../../../engine/scripts/
25
- const scriptPath = path_1.default.resolve(__dirname, '../../../engine/scripts/dev-sync.sh');
26
- // Spawn the dev-sync script
27
- const devSync = (0, child_process_1.spawn)(scriptPath, [
28
- '--ip',
29
- workspace.ipv4_address,
30
- '--key',
31
- sshKeyPath,
32
- ], {
33
- stdio: 'inherit',
34
- shell: true,
35
- });
36
- // Wait for the script to complete
37
- await new Promise((resolve, reject) => {
38
- devSync.on('close', (code) => {
39
- if (code === 0) {
40
- resolve();
41
- }
42
- else {
43
- reject(new Error(`dev-sync script exited with code ${code}`));
44
- }
45
- });
46
- devSync.on('error', (error) => {
47
- reject(error);
48
- });
49
- });
50
- console.log(chalk_1.default.green('\n✓ Engine synced successfully.\n'));
51
- console.log(chalk_1.default.blue('Viewing logs (Ctrl+C to exit)...\n'));
52
- // Follow logs after sync
53
- const logs = (0, child_process_1.spawn)('ssh', [
54
- '-i',
55
- sshKeyPath,
56
- `ubuntu@${workspace.ipv4_address}`,
57
- 'sudo journalctl -fu replicas-engine',
58
- ], {
59
- stdio: 'inherit',
60
- });
61
- // Handle Ctrl+C gracefully
62
- process.on('SIGINT', () => {
63
- logs.kill('SIGTERM');
64
- console.log(chalk_1.default.green('\n\n✓ Disconnected from logs.\n'));
65
- process.exit(0);
66
- });
67
- await new Promise((resolve) => {
68
- logs.on('close', () => {
69
- resolve();
70
- });
71
- });
72
- }
73
- catch (error) {
74
- console.error(chalk_1.default.red(`\nError: ${error instanceof Error ? error.message : 'Unknown error'}`));
75
- process.exit(1);
76
- }
77
- }
78
- //# sourceMappingURL=dev-sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dev-sync.js","sourceRoot":"","sources":["../../src/commands/dev-sync.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export declare function initCommand(options: {
2
- force?: boolean;
3
- }): void;
4
- //# sourceMappingURL=init.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAmBA,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAsC9D"}
@@ -1,45 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.initCommand = initCommand;
7
- const chalk_1 = __importDefault(require("chalk"));
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const REPLICAS_CONFIG_FILENAME = 'replicas.json';
11
- function getDefaultConfig() {
12
- return {
13
- copy: [],
14
- ports: [],
15
- systemPrompt: '',
16
- startHook: {
17
- timeout: 300000,
18
- commands: [],
19
- },
20
- };
21
- }
22
- function initCommand(options) {
23
- const configPath = path_1.default.join(process.cwd(), REPLICAS_CONFIG_FILENAME);
24
- if (fs_1.default.existsSync(configPath) && !options.force) {
25
- console.log(chalk_1.default.yellow(`${REPLICAS_CONFIG_FILENAME} already exists in this directory.`));
26
- console.log(chalk_1.default.gray('Use --force to overwrite the existing file.'));
27
- return;
28
- }
29
- const defaultConfig = getDefaultConfig();
30
- const configContent = JSON.stringify(defaultConfig, null, 2);
31
- try {
32
- fs_1.default.writeFileSync(configPath, configContent + '\n', 'utf-8');
33
- console.log(chalk_1.default.green(`✓ Created ${REPLICAS_CONFIG_FILENAME}`));
34
- console.log('');
35
- console.log(chalk_1.default.gray('Configuration options:'));
36
- console.log(chalk_1.default.gray(' copy - Files to sync to the workspace (e.g., [".env"])'));
37
- console.log(chalk_1.default.gray(' ports - Ports to forward from the workspace (e.g., [3000, 8080])'));
38
- console.log(chalk_1.default.gray(' systemPrompt - Custom instructions for AI coding assistants'));
39
- console.log(chalk_1.default.gray(' startHook - Commands to run on workspace startup'));
40
- }
41
- catch (error) {
42
- throw new Error(`Failed to create ${REPLICAS_CONFIG_FILENAME}: ${error instanceof Error ? error.message : 'Unknown error'}`);
43
- }
44
- }
45
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;AAmBA,kCAsCC;AAzDD,kDAA0B;AAC1B,4CAAoB;AACpB,gDAAwB;AAGxB,MAAM,wBAAwB,GAAG,eAAe,CAAC;AAEjD,SAAS,gBAAgB;IACvB,OAAO;QACL,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE;YACT,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE;SACb;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,WAAW,CAAC,OAA4B;IACtD,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAEtE,IAAI,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,GAAG,wBAAwB,oCAAoC,CAChE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IACzC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,YAAE,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,aAAa,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAC9E,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CACvF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAC5E,CAAC;QACF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CACnE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,oBAAoB,wBAAwB,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC5G,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function loginCommand(): Promise<void>;
2
- //# sourceMappingURL=login.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAgBA,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA6MlD"}