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
@@ -1,183 +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.runCodexOAuthFlow = runCodexOAuthFlow;
7
- const http_1 = __importDefault(require("http"));
8
- const url_1 = require("url");
9
- const open_1 = __importDefault(require("open"));
10
- const pkce_1 = require("./pkce");
11
- const CODEX_OAUTH_CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
12
- const AUTHORIZATION_ENDPOINT = 'https://auth.openai.com/oauth/authorize';
13
- const TOKEN_ENDPOINT = 'https://auth.openai.com/oauth/token';
14
- const CALLBACK_PORT = 1455;
15
- const CALLBACK_PATH = '/auth/callback';
16
- const WEB_APP_URL = process.env.REPLICAS_WEB_URL || 'https://replicas.dev';
17
- /**
18
- * Build OAuth authorization URL with PKCE
19
- */
20
- function buildAuthorizationUrl(codeChallenge, state) {
21
- const redirectUri = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
22
- const params = new URLSearchParams({
23
- response_type: 'code',
24
- client_id: CODEX_OAUTH_CLIENT_ID,
25
- redirect_uri: redirectUri,
26
- scope: 'openid profile email offline_access',
27
- code_challenge: codeChallenge,
28
- code_challenge_method: 'S256',
29
- id_token_add_organizations: 'true',
30
- codex_cli_simplified_flow: 'true',
31
- state: state,
32
- originator: 'codex_cli_rs',
33
- });
34
- return `${AUTHORIZATION_ENDPOINT}?${params.toString()}`;
35
- }
36
- /**
37
- * Exchange authorization code for tokens
38
- */
39
- async function exchangeCodeForTokens(code, codeVerifier) {
40
- const redirectUri = `http://localhost:${CALLBACK_PORT}${CALLBACK_PATH}`;
41
- const params = new URLSearchParams({
42
- grant_type: 'authorization_code',
43
- code: code,
44
- redirect_uri: redirectUri,
45
- client_id: CODEX_OAUTH_CLIENT_ID,
46
- code_verifier: codeVerifier,
47
- });
48
- const response = await fetch(TOKEN_ENDPOINT, {
49
- method: 'POST',
50
- headers: {
51
- 'Content-Type': 'application/x-www-form-urlencoded',
52
- },
53
- body: params.toString(),
54
- });
55
- if (!response.ok) {
56
- const errorText = await response.text();
57
- throw new Error(`Failed to exchange code for tokens: ${response.status} ${errorText}`);
58
- }
59
- const data = await response.json();
60
- return {
61
- idToken: data.id_token,
62
- accessToken: data.access_token,
63
- refreshToken: data.refresh_token,
64
- };
65
- }
66
- /**
67
- * Start local HTTP server to receive OAuth callback
68
- */
69
- function startCallbackServer(expectedState, codeVerifier) {
70
- return new Promise((resolve, reject) => {
71
- const server = http_1.default.createServer(async (req, res) => {
72
- try {
73
- if (!req.url) {
74
- res.writeHead(400);
75
- res.end('Bad Request');
76
- return;
77
- }
78
- const url = new url_1.URL(req.url, `http://127.0.0.1:${CALLBACK_PORT}`);
79
- // Handle callback
80
- if (url.pathname === CALLBACK_PATH) {
81
- const code = url.searchParams.get('code');
82
- const state = url.searchParams.get('state');
83
- const error = url.searchParams.get('error');
84
- const errorDescription = url.searchParams.get('error_description');
85
- // Check for errors from OAuth provider
86
- if (error) {
87
- const errorMessage = encodeURIComponent(`${error}: ${errorDescription || 'Unknown error'}`);
88
- res.writeHead(302, { 'Location': `${WEB_APP_URL}/codex/oauth/error?message=${errorMessage}` });
89
- res.end();
90
- server.close();
91
- reject(new Error(`OAuth error: ${error} - ${errorDescription}`));
92
- return;
93
- }
94
- // Validate state (CSRF protection)
95
- if (state !== expectedState) {
96
- const errorMessage = encodeURIComponent('State parameter mismatch. Possible CSRF attack.');
97
- res.writeHead(302, { 'Location': `${WEB_APP_URL}/codex/oauth/error?message=${errorMessage}` });
98
- res.end();
99
- server.close();
100
- reject(new Error('State mismatch - possible CSRF attack'));
101
- return;
102
- }
103
- // Validate code
104
- if (!code) {
105
- const errorMessage = encodeURIComponent('No authorization code received.');
106
- res.writeHead(302, { 'Location': `${WEB_APP_URL}/codex/oauth/error?message=${errorMessage}` });
107
- res.end();
108
- server.close();
109
- reject(new Error('No authorization code received'));
110
- return;
111
- }
112
- // Exchange code for tokens
113
- try {
114
- const tokens = await exchangeCodeForTokens(code, codeVerifier);
115
- res.writeHead(302, { 'Location': `${WEB_APP_URL}/codex/oauth/success` });
116
- res.end();
117
- server.close();
118
- resolve(tokens);
119
- }
120
- catch (tokenError) {
121
- const errorMessage = encodeURIComponent(tokenError instanceof Error ? tokenError.message : 'Unknown error');
122
- res.writeHead(302, { 'Location': `${WEB_APP_URL}/codex/oauth/error?message=${errorMessage}` });
123
- res.end();
124
- server.close();
125
- reject(tokenError);
126
- }
127
- }
128
- else {
129
- res.writeHead(404);
130
- res.end('Not Found');
131
- }
132
- }
133
- catch (serverError) {
134
- res.writeHead(500);
135
- res.end('Internal Server Error');
136
- server.close();
137
- reject(serverError);
138
- }
139
- });
140
- // Handle server errors
141
- server.on('error', (err) => {
142
- if (err.code === 'EADDRINUSE') {
143
- reject(new Error(`Port ${CALLBACK_PORT} is already in use. Please close any other OAuth flows and try again.`));
144
- }
145
- else {
146
- reject(err);
147
- }
148
- });
149
- // Start server
150
- server.listen(CALLBACK_PORT, '127.0.0.1');
151
- });
152
- }
153
- /**
154
- * Run the complete OAuth flow
155
- * Opens browser, starts local server, waits for callback, exchanges code for tokens
156
- */
157
- async function runCodexOAuthFlow() {
158
- // Generate PKCE codes and state
159
- const pkce = (0, pkce_1.generatePkceCodes)();
160
- const state = (0, pkce_1.generateState)();
161
- // Build authorization URL
162
- const authUrl = buildAuthorizationUrl(pkce.codeChallenge, state);
163
- // Start callback server (non-blocking)
164
- const tokensPromise = startCallbackServer(state, pkce.codeVerifier);
165
- // Wait a moment for server to start
166
- await new Promise(resolve => setTimeout(resolve, 500));
167
- console.log('If the browser does not open automatically, visit:');
168
- console.log(authUrl);
169
- console.log();
170
- // Open browser
171
- try {
172
- await (0, open_1.default)(authUrl);
173
- }
174
- catch (openError) {
175
- console.warn('Failed to open browser automatically. Please open the URL manually.');
176
- }
177
- console.log('Waiting for authentication...');
178
- // Wait for callback and token exchange
179
- const tokens = await tokensPromise;
180
- console.log('✓ Successfully obtained Codex credentials');
181
- return tokens;
182
- }
183
- //# sourceMappingURL=codex-oauth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codex-oauth.js","sourceRoot":"","sources":["../../src/lib/codex-oauth.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- import { Config } from '../types';
2
- declare const CONFIG_DIR: string;
3
- export declare function readConfig(): Config | null;
4
- export declare function writeConfig(config: Config): void;
5
- export declare function deleteConfig(): void;
6
- export declare function isAuthenticated(): boolean;
7
- export declare function setOrganizationId(organizationId: string): void;
8
- export declare function getOrganizationId(): string | null;
9
- export declare function setIdeCommand(ideCommand: string): void;
10
- export declare function getIdeCommand(): string;
11
- export { CONFIG_DIR };
12
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,QAAA,MAAM,UAAU,QAAuC,CAAC;AASxD,wBAAgB,UAAU,IAAI,MAAM,GAAG,IAAI,CAY1C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAWhD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAGtC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -1,84 +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.CONFIG_DIR = void 0;
7
- exports.readConfig = readConfig;
8
- exports.writeConfig = writeConfig;
9
- exports.deleteConfig = deleteConfig;
10
- exports.isAuthenticated = isAuthenticated;
11
- exports.setOrganizationId = setOrganizationId;
12
- exports.getOrganizationId = getOrganizationId;
13
- exports.setIdeCommand = setIdeCommand;
14
- exports.getIdeCommand = getIdeCommand;
15
- const fs_1 = __importDefault(require("fs"));
16
- const path_1 = __importDefault(require("path"));
17
- const os_1 = __importDefault(require("os"));
18
- const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.replicas');
19
- exports.CONFIG_DIR = CONFIG_DIR;
20
- const CONFIG_FILE = path_1.default.join(CONFIG_DIR, 'config.json');
21
- function ensureConfigDir() {
22
- if (!fs_1.default.existsSync(CONFIG_DIR)) {
23
- fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
24
- }
25
- }
26
- function readConfig() {
27
- if (!fs_1.default.existsSync(CONFIG_FILE)) {
28
- return null;
29
- }
30
- try {
31
- const data = fs_1.default.readFileSync(CONFIG_FILE, 'utf-8');
32
- return JSON.parse(data);
33
- }
34
- catch (error) {
35
- console.error('Error reading config file:', error);
36
- return null;
37
- }
38
- }
39
- function writeConfig(config) {
40
- ensureConfigDir();
41
- try {
42
- fs_1.default.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), {
43
- mode: 0o600, // Only owner can read/write
44
- });
45
- }
46
- catch (error) {
47
- console.error('Error writing config file:', error);
48
- throw error;
49
- }
50
- }
51
- function deleteConfig() {
52
- if (fs_1.default.existsSync(CONFIG_FILE)) {
53
- fs_1.default.unlinkSync(CONFIG_FILE);
54
- }
55
- }
56
- function isAuthenticated() {
57
- const config = readConfig();
58
- return config !== null && !!config.access_token;
59
- }
60
- function setOrganizationId(organizationId) {
61
- const config = readConfig();
62
- if (!config) {
63
- throw new Error('No config file found. Please login first.');
64
- }
65
- config.organization_id = organizationId;
66
- writeConfig(config);
67
- }
68
- function getOrganizationId() {
69
- const config = readConfig();
70
- return config?.organization_id || null;
71
- }
72
- function setIdeCommand(ideCommand) {
73
- const config = readConfig();
74
- if (!config) {
75
- throw new Error('No config file found. Please login first.');
76
- }
77
- config.ide_command = ideCommand;
78
- writeConfig(config);
79
- }
80
- function getIdeCommand() {
81
- const config = readConfig();
82
- return config?.ide_command || 'code';
83
- }
84
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
package/dist/lib/git.d.ts DELETED
@@ -1,4 +0,0 @@
1
- export declare function getGitRoot(): string;
2
- export declare function getGitRepoName(): string;
3
- export declare function isInsideGitRepo(): boolean;
4
- //# sourceMappingURL=git.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAUnC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAGvC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAUzC"}
package/dist/lib/git.js DELETED
@@ -1,39 +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.getGitRoot = getGitRoot;
7
- exports.getGitRepoName = getGitRepoName;
8
- exports.isInsideGitRepo = isInsideGitRepo;
9
- const child_process_1 = require("child_process");
10
- const path_1 = __importDefault(require("path"));
11
- function getGitRoot() {
12
- try {
13
- const root = (0, child_process_1.execSync)('git rev-parse --show-toplevel', {
14
- encoding: 'utf-8',
15
- stdio: ['pipe', 'pipe', 'pipe'],
16
- }).trim();
17
- return root;
18
- }
19
- catch (error) {
20
- throw new Error('Not inside a git repository');
21
- }
22
- }
23
- function getGitRepoName() {
24
- const root = getGitRoot();
25
- return path_1.default.basename(root);
26
- }
27
- function isInsideGitRepo() {
28
- try {
29
- (0, child_process_1.execSync)('git rev-parse --is-inside-work-tree', {
30
- encoding: 'utf-8',
31
- stdio: ['pipe', 'pipe', 'pipe'],
32
- });
33
- return true;
34
- }
35
- catch {
36
- return false;
37
- }
38
- }
39
- //# sourceMappingURL=git.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/lib/git.ts"],"names":[],"mappings":";;;;;AAGA,gCAUC;AAED,wCAGC;AAED,0CAUC;AA9BD,iDAAyC;AACzC,gDAAwB;AAExB,SAAgB,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAA,wBAAQ,EAAC,+BAA+B,EAAE;YACrD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,OAAO,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,eAAe;IAC7B,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,qCAAqC,EAAE;YAC9C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -1,5 +0,0 @@
1
- import { Organization } from '../types';
2
- export declare function fetchOrganizations(): Promise<Organization[]>;
3
- export declare function setActiveOrganization(organizationId: string): Promise<void>;
4
- export declare function ensureOrganization(): Promise<string>;
5
- //# sourceMappingURL=organization.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/lib/organization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAQxC,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAKlE;AAED,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASjF;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAW1D"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchOrganizations = fetchOrganizations;
4
- exports.setActiveOrganization = setActiveOrganization;
5
- exports.ensureOrganization = ensureOrganization;
6
- const api_1 = require("./api");
7
- const config_1 = require("./config");
8
- async function fetchOrganizations() {
9
- const response = await (0, api_1.authenticatedFetch)('/v1/user/organizations');
10
- return response.organizations;
11
- }
12
- async function setActiveOrganization(organizationId) {
13
- const organizations = await fetchOrganizations();
14
- const organization = organizations.find(org => org.id === organizationId);
15
- if (!organization) {
16
- throw new Error(`Organization with ID ${organizationId} not found or you don't have access to it.`);
17
- }
18
- (0, config_1.setOrganizationId)(organizationId);
19
- }
20
- async function ensureOrganization() {
21
- const organizations = await fetchOrganizations();
22
- if (organizations.length === 0) {
23
- throw new Error('You are not a member of any organization. Please contact support.');
24
- }
25
- const defaultOrg = organizations[0];
26
- (0, config_1.setOrganizationId)(defaultOrg.id);
27
- return defaultOrg.id;
28
- }
29
- //# sourceMappingURL=organization.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"organization.js","sourceRoot":"","sources":["../../src/lib/organization.ts"],"names":[],"mappings":";;AAQA,gDAKC;AAED,sDASC;AAED,gDAWC;AApCD,+BAA2C;AAC3C,qCAAwE;AAMjE,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,MAAM,IAAA,wBAAkB,EACvC,wBAAwB,CACzB,CAAC;IACF,OAAO,QAAQ,CAAC,aAAa,CAAC;AAChC,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,cAAsB;IAChE,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,cAAc,CAAC,CAAC;IAE1E,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,wBAAwB,cAAc,4CAA4C,CAAC,CAAC;IACtG,CAAC;IAED,IAAA,0BAAuB,EAAC,cAAc,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,kBAAkB;IACtC,MAAM,aAAa,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEjD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,IAAA,0BAAuB,EAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAEvC,OAAO,UAAU,CAAC,EAAE,CAAC;AACvB,CAAC"}
@@ -1,14 +0,0 @@
1
- export interface PkceCodes {
2
- codeVerifier: string;
3
- codeChallenge: string;
4
- }
5
- /**
6
- * Generate PKCE (Proof Key for Code Exchange) codes for OAuth flow
7
- * Implements RFC 7636 for enhanced security
8
- */
9
- export declare function generatePkceCodes(): PkceCodes;
10
- /**
11
- * Generate random state for OAuth flow
12
- */
13
- export declare function generateState(): string;
14
- //# sourceMappingURL=pkce.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pkce.d.ts","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,SAAS,CAsB7C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
package/dist/lib/pkce.js DELETED
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.generatePkceCodes = generatePkceCodes;
4
- exports.generateState = generateState;
5
- const crypto_1 = require("crypto");
6
- /**
7
- * Generate PKCE (Proof Key for Code Exchange) codes for OAuth flow
8
- * Implements RFC 7636 for enhanced security
9
- */
10
- function generatePkceCodes() {
11
- // Generate 32 random bytes for code verifier
12
- const verifierBytes = (0, crypto_1.randomBytes)(32);
13
- const codeVerifier = verifierBytes
14
- .toString('base64')
15
- .replace(/\+/g, '-')
16
- .replace(/\//g, '_')
17
- .replace(/=+$/, '');
18
- // Create SHA256 hash for code challenge
19
- const hash = (0, crypto_1.createHash)('sha256');
20
- hash.update(codeVerifier);
21
- const codeChallenge = hash
22
- .digest('base64')
23
- .replace(/\+/g, '-')
24
- .replace(/\//g, '_')
25
- .replace(/=+$/, '');
26
- return {
27
- codeVerifier,
28
- codeChallenge,
29
- };
30
- }
31
- /**
32
- * Generate random state for OAuth flow
33
- */
34
- function generateState() {
35
- return (0, crypto_1.randomBytes)(16).toString('hex');
36
- }
37
- //# sourceMappingURL=pkce.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/lib/pkce.ts"],"names":[],"mappings":";;AAWA,8CAsBC;AAKD,sCAEC;AAxCD,mCAAiD;AAOjD;;;GAGG;AACH,SAAgB,iBAAiB;IAC/B,6CAA6C;IAC7C,MAAM,aAAa,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,aAAa;SAC/B,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtB,wCAAwC;IACxC,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,aAAa,GAAG,IAAI;SACvB,MAAM,CAAC,QAAQ,CAAC;SAChB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEtB,OAAO;QACL,YAAY;QACZ,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,OAAO,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC"}
@@ -1,3 +0,0 @@
1
- export declare function findAvailablePort(desiredPort: number): Promise<number>;
2
- export declare function mapPortsToLocal(remotePorts: number[]): Promise<Map<number, number>>;
3
- //# sourceMappingURL=ports.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/lib/ports.ts"],"names":[],"mappings":"AAqBA,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAe5E;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CASzF"}
package/dist/lib/ports.js DELETED
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.findAvailablePort = findAvailablePort;
4
- exports.mapPortsToLocal = mapPortsToLocal;
5
- const child_process_1 = require("child_process");
6
- async function isPortAvailable(port) {
7
- try {
8
- // Use lsof to check if anything is listening on this port
9
- // -i :PORT - show network files on this port
10
- // -P - show port numbers (not service names)
11
- // -n - don't resolve hostnames
12
- (0, child_process_1.execSync)(`lsof -i :${port} -P -n | grep LISTEN`, {
13
- encoding: 'utf-8',
14
- stdio: ['pipe', 'pipe', 'pipe'],
15
- });
16
- return false;
17
- }
18
- catch (error) {
19
- // lsof returns exit code 1 if nothing found, which throws an error
20
- // This means the port is available
21
- return true;
22
- }
23
- }
24
- async function findAvailablePort(desiredPort) {
25
- const baseHundred = Math.floor(desiredPort / 100) * 100;
26
- const maxPort = desiredPort >= baseHundred && desiredPort < baseHundred + 100
27
- ? baseHundred + 99
28
- : desiredPort + 100;
29
- for (let port = desiredPort; port <= maxPort; port++) {
30
- if (await isPortAvailable(port)) {
31
- return port;
32
- }
33
- }
34
- throw new Error(`Could not find available port in range ${desiredPort}-${maxPort}`);
35
- }
36
- async function mapPortsToLocal(remotePorts) {
37
- const portMap = new Map();
38
- for (const remotePort of remotePorts) {
39
- const localPort = await findAvailablePort(remotePort);
40
- portMap.set(remotePort, localPort);
41
- }
42
- return portMap;
43
- }
44
- //# sourceMappingURL=ports.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/lib/ports.ts"],"names":[],"mappings":";;AAqBA,8CAeC;AAED,0CASC;AA/CD,iDAAyC;AAEzC,KAAK,UAAU,eAAe,CAAC,IAAY;IACzC,IAAI,CAAC;QACH,0DAA0D;QAC1D,6CAA6C;QAC7C,6CAA6C;QAC7C,+BAA+B;QAC/B,IAAA,wBAAQ,EAAC,YAAY,IAAI,sBAAsB,EAAE;YAC/C,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IACxD,MAAM,OAAO,GAAG,WAAW,IAAI,WAAW,IAAI,WAAW,GAAG,WAAW,GAAG,GAAG;QAC3E,CAAC,CAAC,WAAW,GAAG,EAAE;QAClB,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC;IAEtB,KAAK,IAAI,IAAI,GAAG,WAAW,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACrD,IAAI,MAAM,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CACb,0CAA0C,WAAW,IAAI,OAAO,EAAE,CACnE,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,WAAqB;IACzD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,8 +0,0 @@
1
- import { ReplicasConfig } from '../types';
2
- export declare function readReplicasConfig(): ReplicasConfig | null;
3
- export declare function validateCopyFiles(copyFiles: string[]): {
4
- valid: string[];
5
- invalid: string[];
6
- };
7
- export declare function getAbsoluteCopyPath(relativePath: string): string;
8
- //# sourceMappingURL=replicas-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replicas-config.d.ts","sourceRoot":"","sources":["../../src/lib/replicas-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAuC1D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAe7F;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAGhE"}
@@ -1,64 +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.readReplicasConfig = readReplicasConfig;
7
- exports.validateCopyFiles = validateCopyFiles;
8
- exports.getAbsoluteCopyPath = getAbsoluteCopyPath;
9
- const fs_1 = __importDefault(require("fs"));
10
- const path_1 = __importDefault(require("path"));
11
- const git_1 = require("./git");
12
- function readReplicasConfig() {
13
- try {
14
- const gitRoot = (0, git_1.getGitRoot)();
15
- const configPath = path_1.default.join(gitRoot, 'replicas.json');
16
- if (!fs_1.default.existsSync(configPath)) {
17
- return null;
18
- }
19
- const data = fs_1.default.readFileSync(configPath, 'utf-8');
20
- const config = JSON.parse(data);
21
- if (config.copy && !Array.isArray(config.copy)) {
22
- throw new Error('Invalid replicas.json: "copy" must be an array of file paths');
23
- }
24
- if (config.ports && !Array.isArray(config.ports)) {
25
- throw new Error('Invalid replicas.json: "ports" must be an array of port numbers');
26
- }
27
- if (config.ports && !config.ports.every(p => typeof p === 'number')) {
28
- throw new Error('Invalid replicas.json: all ports must be numbers');
29
- }
30
- if (config.organizationId && typeof config.organizationId !== 'string') {
31
- throw new Error('Invalid replicas.json: "organizationId" must be a string');
32
- }
33
- if (config.systemPrompt && typeof config.systemPrompt !== 'string') {
34
- throw new Error('Invalid replicas.json: "systemPrompt" must be a string');
35
- }
36
- return config;
37
- }
38
- catch (error) {
39
- if (error instanceof Error) {
40
- throw error;
41
- }
42
- throw new Error('Failed to read replicas.json');
43
- }
44
- }
45
- function validateCopyFiles(copyFiles) {
46
- const gitRoot = (0, git_1.getGitRoot)();
47
- const valid = [];
48
- const invalid = [];
49
- for (const file of copyFiles) {
50
- const fullPath = path_1.default.join(gitRoot, file);
51
- if (fs_1.default.existsSync(fullPath)) {
52
- valid.push(file);
53
- }
54
- else {
55
- invalid.push(file);
56
- }
57
- }
58
- return { valid, invalid };
59
- }
60
- function getAbsoluteCopyPath(relativePath) {
61
- const gitRoot = (0, git_1.getGitRoot)();
62
- return path_1.default.join(gitRoot, relativePath);
63
- }
64
- //# sourceMappingURL=replicas-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"replicas-config.js","sourceRoot":"","sources":["../../src/lib/replicas-config.ts"],"names":[],"mappings":";;;;;AAKA,gDAuCC;AAED,8CAeC;AAED,kDAGC;AAlED,4CAAoB;AACpB,gDAAwB;AAExB,+BAAmC;AAEnC,SAAgB,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAEvD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;QAElD,IAAI,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;QAED,IAAI,MAAM,CAAC,cAAc,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAAmB;IACnD,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,mBAAmB,CAAC,YAAoB;IACtD,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;IAC7B,OAAO,cAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC1C,CAAC"}
@@ -1,12 +0,0 @@
1
- interface SSHConfigEntry {
2
- host: string;
3
- hostname: string;
4
- user: string;
5
- identityFile: string;
6
- portForwards?: Map<number, number>;
7
- }
8
- export declare function removeSSHConfigEntry(host: string): void;
9
- export declare function addOrUpdateSSHConfigEntry(entry: SSHConfigEntry): void;
10
- export declare function getWorkspaceHostAlias(workspaceName: string): string;
11
- export {};
12
- //# sourceMappingURL=ssh-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssh-config.d.ts","sourceRoot":"","sources":["../../src/lib/ssh-config.ts"],"names":[],"mappings":"AAQA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AA8CD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmCvD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CA8CrE;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEnE"}