@edgedive/cli 0.1.5 → 0.1.6

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 (43) hide show
  1. package/.env +2 -0
  2. package/.env.local +2 -0
  3. package/.turbo/turbo-build.log +1 -1
  4. package/.turbo/turbo-dev.log +20 -0
  5. package/dist/api/client.d.ts +2 -0
  6. package/dist/api/client.d.ts.map +1 -1
  7. package/dist/api/client.js +23 -1
  8. package/dist/api/client.js.map +1 -1
  9. package/dist/auth/oauth-flow.d.ts +5 -0
  10. package/dist/auth/oauth-flow.d.ts.map +1 -1
  11. package/dist/auth/oauth-flow.js +41 -0
  12. package/dist/auth/oauth-flow.js.map +1 -1
  13. package/dist/auth/pkce.js +1 -5
  14. package/dist/auth/pkce.js.map +1 -1
  15. package/dist/commands/local.d.ts.map +1 -1
  16. package/dist/commands/local.js.map +1 -1
  17. package/dist/commands/takeover.d.ts +10 -0
  18. package/dist/commands/takeover.d.ts.map +1 -0
  19. package/dist/commands/takeover.js +108 -0
  20. package/dist/commands/takeover.js.map +1 -0
  21. package/dist/config/config-manager.d.ts +10 -1
  22. package/dist/config/config-manager.d.ts.map +1 -1
  23. package/dist/config/config-manager.js +25 -11
  24. package/dist/config/config-manager.js.map +1 -1
  25. package/dist/constants.d.ts +3 -0
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +0 -12
  28. package/dist/constants.js.map +1 -1
  29. package/dist/utils/git-utils.d.ts.map +1 -1
  30. package/dist/utils/git-utils.js +1 -3
  31. package/dist/utils/git-utils.js.map +1 -1
  32. package/dist/utils/session-downloader.d.ts.map +1 -1
  33. package/dist/utils/session-downloader.js.map +1 -1
  34. package/package.json +1 -1
  35. package/src/api/client.ts +26 -10
  36. package/src/auth/oauth-flow.ts +53 -0
  37. package/src/auth/pkce.ts +1 -5
  38. package/src/commands/local.ts +17 -7
  39. package/src/config/config-manager.ts +29 -17
  40. package/src/constants.ts +0 -13
  41. package/src/utils/git-utils.ts +2 -8
  42. package/src/utils/session-downloader.ts +1 -6
  43. package/.claude/settings.local.json +0 -9
package/.env ADDED
@@ -0,0 +1,2 @@
1
+ EDGEDIVE_CLIENT_ID=edgedive-cli
2
+ EDGEDIVE_API_URL=https://api.edgedive.com
package/.env.local ADDED
@@ -0,0 +1,2 @@
1
+ EDGEDIVE_CLIENT_ID=edgedive-cli
2
+ EDGEDIVE_API_URL=http://localhost:5001
@@ -1,5 +1,5 @@
1
1
 
2
2
  
3
- > @edgedive/cli@0.1.3 build /Users/nimesh/edgedive/fix-dive-local/packages/edgedive-cli
3
+ > @edgedive/cli@0.1.5 build /Users/nimesh/edgedive/edgedive-monorepo/packages/edgedive-cli
4
4
  > tsc
5
5
 
@@ -0,0 +1,20 @@
1
+
2
+ > @edgedive/cli@0.1.3 dev /Users/nimesh/edgedive/edgedive-monorepo/packages/edgedive-cli
3
+ > tsc --watch
4
+
5
+ [7:38:41 PM] Starting compilation in watch mode...
6
+
7
+ [7:38:41 PM] Found 0 errors. Watching for file changes.
8
+
9
+ [10:45:44 AM] File change detected. Starting incremental compilation...
10
+
11
+ [10:45:44 AM] Found 0 errors. Watching for file changes.
12
+
13
+ [10:45:45 AM] File change detected. Starting incremental compilation...
14
+
15
+ [10:45:45 AM] Found 0 errors. Watching for file changes.
16
+
17
+ [1:23:54 PM] File change detected. Starting incremental compilation...
18
+
19
+ [1:23:54 PM] Found 0 errors. Watching for file changes.
20
+
@@ -36,6 +36,8 @@ export interface TakeoverResponse {
36
36
  export declare class EdgediveApiClient {
37
37
  private client;
38
38
  private configManager;
39
+ private oauthFlow;
40
+ private isRefreshing;
39
41
  constructor(configManager: ConfigManager);
40
42
  /**
41
43
  * Get session takeover information by PR URL
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAiBxC;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiB5D,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAmBpF;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,SAAS,EAAE;QACT,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,YAAY,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE;QACb,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,YAAY,CAAkB;gBAE1B,aAAa,EAAE,aAAa;IAoCxC;;OAEG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAe5D,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBpF;;OAEG;IACG,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgBjF"}
@@ -3,17 +3,39 @@
3
3
  */
4
4
  import axios from 'axios';
5
5
  import { API_CONFIG, TIMEOUTS } from '../constants.js';
6
+ import { OAuthFlow } from '../auth/oauth-flow.js';
6
7
  export class EdgediveApiClient {
7
8
  client;
8
9
  configManager;
10
+ oauthFlow;
11
+ isRefreshing = false;
9
12
  constructor(configManager) {
10
13
  this.configManager = configManager;
14
+ this.oauthFlow = new OAuthFlow(configManager);
11
15
  this.client = axios.create({
12
16
  baseURL: API_CONFIG.BASE_URL,
13
17
  timeout: TIMEOUTS.DEFAULT_REQUEST_MS,
14
18
  });
15
- // Add request interceptor to inject auth token
19
+ // Add request interceptor to inject auth token and handle refresh
16
20
  this.client.interceptors.request.use(async (config) => {
21
+ // Check if token needs refresh
22
+ const currentConfig = await this.configManager.load();
23
+ if (this.configManager.isTokenExpiringSoon(currentConfig) && !this.isRefreshing) {
24
+ this.isRefreshing = true;
25
+ try {
26
+ console.log('🔄 Access token expiring soon, refreshing...');
27
+ await this.oauthFlow.refreshAccessToken();
28
+ console.log('✅ Token refreshed successfully');
29
+ }
30
+ catch (error) {
31
+ console.error('❌ Failed to refresh token:', error.message);
32
+ console.log('Please run "dive login" to re-authenticate');
33
+ throw error;
34
+ }
35
+ finally {
36
+ this.isRefreshing = false;
37
+ }
38
+ }
17
39
  const token = await this.configManager.getAccessToken();
18
40
  if (token) {
19
41
  config.headers.Authorization = `Bearer ${token}`;
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ export interface OAuthTokenResponse {
7
7
  token_type: string;
8
8
  expires_in: number;
9
9
  scope: string;
10
+ refresh_token: string;
10
11
  }
11
12
  export declare class OAuthFlow {
12
13
  private configManager;
@@ -23,5 +24,9 @@ export declare class OAuthFlow {
23
24
  * Exchange authorization code for access token
24
25
  */
25
26
  private exchangeCodeForToken;
27
+ /**
28
+ * Refresh access token using refresh token
29
+ */
30
+ refreshAccessToken(): Promise<OAuthTokenResponse | null>;
26
31
  }
27
32
  //# sourceMappingURL=oauth-flow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-flow.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIxC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAqC9C;;OAEG;YACW,mBAAmB;IAyHjC;;OAEG;YACW,oBAAoB;CA+BnC"}
1
+ {"version":3,"file":"oauth-flow.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-flow.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,EAAE,aAAa;IAIxC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAsC9C;;OAEG;YACW,mBAAmB;IAyHjC;;OAEG;YACW,oBAAoB;IAiClC;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;CA8C/D"}
@@ -42,6 +42,7 @@ export class OAuthFlow {
42
42
  tokenType: tokenResponse.token_type,
43
43
  expiresAt,
44
44
  scope: tokenResponse.scope,
45
+ refreshToken: tokenResponse.refresh_token,
45
46
  });
46
47
  return tokenResponse;
47
48
  }
@@ -166,6 +167,7 @@ export class OAuthFlow {
166
167
  try {
167
168
  const tokenUrl = new URL(API_CONFIG.TOKEN_PATH, API_CONFIG.BASE_URL);
168
169
  const response = await axios.post(tokenUrl.toString(), new URLSearchParams({
170
+ grant_type: 'authorization_code',
169
171
  code,
170
172
  code_verifier: codeVerifier,
171
173
  }), {
@@ -183,5 +185,44 @@ export class OAuthFlow {
183
185
  throw new Error(`Failed to exchange code for token: ${error.message}`);
184
186
  }
185
187
  }
188
+ /**
189
+ * Refresh access token using refresh token
190
+ */
191
+ async refreshAccessToken() {
192
+ try {
193
+ const refreshToken = await this.configManager.getRefreshToken();
194
+ if (!refreshToken) {
195
+ return null;
196
+ }
197
+ const tokenUrl = new URL(API_CONFIG.TOKEN_PATH, API_CONFIG.BASE_URL);
198
+ const response = await axios.post(tokenUrl.toString(), new URLSearchParams({
199
+ grant_type: 'refresh_token',
200
+ refresh_token: refreshToken,
201
+ }), {
202
+ headers: {
203
+ 'Content-Type': 'application/x-www-form-urlencoded',
204
+ },
205
+ timeout: TIMEOUTS.DEFAULT_REQUEST_MS,
206
+ });
207
+ // Save new tokens to config
208
+ const expiresAt = Date.now() + response.data.expires_in * 1000;
209
+ await this.configManager.save({
210
+ accessToken: response.data.access_token,
211
+ tokenType: response.data.token_type,
212
+ expiresAt,
213
+ scope: response.data.scope,
214
+ refreshToken: response.data.refresh_token,
215
+ });
216
+ return response.data;
217
+ }
218
+ catch (error) {
219
+ // If refresh fails, clear the config so user needs to login again
220
+ await this.configManager.delete();
221
+ if (error.response) {
222
+ throw new Error(`Failed to refresh token: ${error.response.data?.error || error.message}`);
223
+ }
224
+ throw new Error(`Failed to refresh token: ${error.message}`);
225
+ }
226
+ }
186
227
  }
187
228
  //# sourceMappingURL=oauth-flow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-flow.js","sourceRoot":"","sources":["../../src/auth/oauth-flow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-flow.js","sourceRoot":"","sources":["../../src/auth/oauth-flow.ts"],"names":[],"mappings":"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"}
package/dist/auth/pkce.js CHANGED
@@ -19,10 +19,6 @@ export function generateCodeChallenge(verifier) {
19
19
  * Base64 URL encode (without padding)
20
20
  */
21
21
  function base64URLEncode(buffer) {
22
- return buffer
23
- .toString('base64')
24
- .replace(/\+/g, '-')
25
- .replace(/\//g, '_')
26
- .replace(/=/g, '');
22
+ return buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
27
23
  }
28
24
  //# sourceMappingURL=pkce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/auth/pkce.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;IACnE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,MAAM;SACV,QAAQ,CAAC,QAAQ,CAAC;SAClB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"pkce.js","sourceRoot":"","sources":["../../src/auth/pkce.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;IACnE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc;IACrC,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7F,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiInF"}
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA6InF"}
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/commands/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Takeover command - download agent session for local development
3
+ */
4
+ interface TakeoverOptions {
5
+ prUrl?: string;
6
+ issueUrl?: string;
7
+ }
8
+ export declare function takeoverCommand({ prUrl, issueUrl }: TakeoverOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=takeover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeover.d.ts","sourceRoot":"","sources":["../../src/commands/takeover.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA6HzF"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Takeover command - download agent session for local development
3
+ */
4
+ import chalk from 'chalk';
5
+ import { ConfigManager } from '../config/config-manager.js';
6
+ import { EdgediveApiClient } from '../api/client.js';
7
+ import { SessionDownloader } from '../utils/session-downloader.js';
8
+ import { GitUtils } from '../utils/git-utils.js';
9
+ import { launchClaudeSession } from '../utils/claude-launcher.js';
10
+ export async function takeoverCommand({ prUrl, issueUrl }) {
11
+ const configManager = new ConfigManager();
12
+ const apiClient = new EdgediveApiClient(configManager);
13
+ const downloader = new SessionDownloader();
14
+ try {
15
+ console.log(chalk.bold('\n🔧 Edgedive Session Takeover\n'));
16
+ // Check for Windows platform
17
+ if (process.platform === 'win32') {
18
+ console.log(chalk.red('❌ Windows is not currently supported for the takeover command.\n'));
19
+ console.log(chalk.yellow('Please use macOS or Linux to takeover agent sessions.\n'));
20
+ process.exit(1);
21
+ }
22
+ // Check if authenticated
23
+ if (!(await configManager.isAuthenticated())) {
24
+ console.log(chalk.red('❌ You are not logged in.\n'));
25
+ console.log(chalk.yellow('Please run: edgedive login\n'));
26
+ process.exit(1);
27
+ }
28
+ if (!prUrl && !issueUrl) {
29
+ console.log(chalk.red('❌ Missing takeover identifier.\n'));
30
+ console.log(chalk.yellow('Provide either --pr-url https://github.com/owner/repo/pull/123 or --issue-url https://linear.app/...\n'));
31
+ process.exit(1);
32
+ }
33
+ let takeoverData;
34
+ if (prUrl) {
35
+ // Validate PR URL format
36
+ const prUrlPattern = /^https?:\/\/github\.com\/([^\/]+)\/([^\/]+)\/pull\/(\d+)/;
37
+ if (!prUrlPattern.test(prUrl)) {
38
+ console.log(chalk.red('❌ Invalid PR URL format.\n'));
39
+ console.log(chalk.yellow('Expected format: https://github.com/owner/repo/pull/123\n'));
40
+ process.exit(1);
41
+ }
42
+ console.log(chalk.dim(`PR URL: ${prUrl}\n`));
43
+ console.log('🔍 Fetching session information...\n');
44
+ takeoverData = await apiClient.getTakeoverByPrUrl(prUrl);
45
+ }
46
+ else {
47
+ console.log(chalk.dim(`Linear Issue URL: ${issueUrl}\n`));
48
+ console.log('🔍 Fetching session information...\n');
49
+ takeoverData = await apiClient.getTakeoverByLinearIssueUrl(issueUrl);
50
+ }
51
+ console.log(chalk.green('✅ Found agent session!\n'));
52
+ if (takeoverData.github_pr?.url) {
53
+ console.log(chalk.dim(`PR URL: ${takeoverData.github_pr.url}`));
54
+ }
55
+ console.log(chalk.bold('Session Information:'));
56
+ console.log(chalk.dim(` Session ID: ${takeoverData.session_id}`));
57
+ console.log(chalk.dim(` Agent Type: ${takeoverData.agent_type}`));
58
+ console.log(chalk.dim(` Status: ${takeoverData.status}`));
59
+ console.log(chalk.dim(` Repository: ${takeoverData.repository.owner}/${takeoverData.repository.name}`));
60
+ console.log(chalk.dim(` Branch: ${takeoverData.repository.branch}`));
61
+ if (takeoverData.linear_issue) {
62
+ console.log(chalk.dim(` Linear Issue: ${takeoverData.linear_issue.identifier}`));
63
+ console.log(chalk.dim(` Linear URL: ${takeoverData.linear_issue.url}`));
64
+ }
65
+ // Verify current repository matches PR source
66
+ const cwd = process.cwd();
67
+ let repoInfo;
68
+ try {
69
+ repoInfo = await GitUtils.verifyRepoMatches(takeoverData.repository.owner, takeoverData.repository.name, cwd);
70
+ }
71
+ catch (error) {
72
+ console.error(chalk.red(`\n❌ ${error.message}\n`));
73
+ console.log(chalk.yellow('Run this command from within the target repository checked out locally.'));
74
+ process.exit(1);
75
+ }
76
+ console.log(chalk.green(`✅ Using repository at ${repoInfo.rootPath}`));
77
+ // Download session files into Claude projects directory
78
+ const { claudeSessionId, claudeSessionPath } = await downloader.downloadSession(takeoverData, repoInfo.rootPath);
79
+ // Ensure PR branch is checked out locally
80
+ try {
81
+ await GitUtils.ensureBranchCheckedOut(takeoverData.repository.branch, repoInfo.rootPath);
82
+ console.log(chalk.green(`✅ Checked out branch ${takeoverData.repository.branch}`));
83
+ }
84
+ catch (error) {
85
+ console.error(chalk.red(`\n❌ Failed to checkout branch ${takeoverData.repository.branch}: ${error.message}\n`));
86
+ console.log(chalk.yellow('Resolve the git issue above and rerun the takeover command.'));
87
+ process.exit(1);
88
+ }
89
+ console.log(chalk.blue(`\n🚀 Launching Claude session ${claudeSessionId}...\n`));
90
+ try {
91
+ await launchClaudeSession(claudeSessionId, repoInfo.rootPath);
92
+ console.log(chalk.green('\n✅ Claude session closed. Happy debugging!\n'));
93
+ }
94
+ catch (error) {
95
+ console.error(chalk.red(`\n❌ Failed to start Claude automatically: ${error.message}\n`));
96
+ console.log(chalk.yellow(`You can resume manually with: claude -r ${claudeSessionId} (from ${repoInfo.rootPath})`));
97
+ process.exit(1);
98
+ }
99
+ }
100
+ catch (error) {
101
+ console.error(chalk.red(`\n❌ Takeover failed: ${error.message}\n`));
102
+ if (error.message.includes('401') || error.message.includes('Unauthorized')) {
103
+ console.log(chalk.yellow('Your session may have expired. Please run: edgedive login\n'));
104
+ }
105
+ process.exit(1);
106
+ }
107
+ }
108
+ //# sourceMappingURL=takeover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"takeover.js","sourceRoot":"","sources":["../../src/commands/takeover.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAOlE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAmB;IACxE,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAE5D,6BAA6B;QAC7B,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC;YAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yDAAyD,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,wGAAwG,CACzG,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,YAAY,CAAC;QAEjB,IAAI,KAAK,EAAE,CAAC;YACV,yBAAyB;YACzB,MAAM,YAAY,GAAG,0DAA0D,CAAC;YAChF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAAC,CAAC;gBACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,YAAY,GAAG,MAAM,SAAS,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;YACpD,YAAY,GAAG,MAAM,SAAS,CAAC,2BAA2B,CAAC,QAAS,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACrD,IAAI,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAEtE,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,YAAY,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,YAAY,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,8CAA8C;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,QAAQ,CAAC;QAEb,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CACzC,YAAY,CAAC,UAAU,CAAC,KAAK,EAC7B,YAAY,CAAC,UAAU,CAAC,IAAI,EAC5B,GAAG,CACJ,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yEAAyE,CAAC,CAAC,CAAC;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEvE,wDAAwD;QACxD,MAAM,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,MAAM,UAAU,CAAC,eAAe,CAC7E,YAAY,EACZ,QAAQ,CAAC,QAAQ,CAClB,CAAC;QAEF,0CAA0C;QAC1C,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YAChH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6DAA6D,CAAC,CAAC,CAAC;YACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,eAAe,OAAO,CAAC,CAAC,CAAC;QAEjF,IAAI,CAAC;YACH,MAAM,mBAAmB,CAAC,eAAe,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,2CAA2C,eAAe,UAAU,QAAQ,CAAC,QAAQ,GAAG,CACzF,CACF,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAEpE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6DAA6D,CAAC,CAAC,CAAC;QAC3F,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -6,6 +6,7 @@ export interface EdgediveConfig {
6
6
  tokenType?: string;
7
7
  expiresAt?: number;
8
8
  scope?: string;
9
+ refreshToken?: string;
9
10
  }
10
11
  export declare class ConfigManager {
11
12
  private configPath;
@@ -27,9 +28,17 @@ export declare class ConfigManager {
27
28
  */
28
29
  isAuthenticated(): Promise<boolean>;
29
30
  /**
30
- * Get access token
31
+ * Get access token (even if expired - let the API client handle refresh)
31
32
  */
32
33
  getAccessToken(): Promise<string | null>;
34
+ /**
35
+ * Get refresh token
36
+ */
37
+ getRefreshToken(): Promise<string | null>;
38
+ /**
39
+ * Check if token is expired or will expire soon (within 5 minutes)
40
+ */
41
+ isTokenExpiringSoon(config: EdgediveConfig): boolean;
33
42
  /**
34
43
  * Get configuration directory path
35
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;;IAQ3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IAYrC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAU7B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAczC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAW9C;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;;IAQ3B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,cAAc,CAAC;IAYrC;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAU7B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBzC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK9C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK/C;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO;IAQpD;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB"}
@@ -58,26 +58,40 @@ export class ConfigManager {
58
58
  */
59
59
  async isAuthenticated() {
60
60
  const config = await this.load();
61
- if (!config.accessToken) {
62
- return false;
61
+ // If we have an access token that's not expired, we're authenticated
62
+ if (config.accessToken && (!config.expiresAt || config.expiresAt > Date.now())) {
63
+ return true;
63
64
  }
64
- // Check if token is expired
65
- if (config.expiresAt && config.expiresAt < Date.now()) {
66
- return false;
65
+ // If we have a refresh token, we can refresh, so consider authenticated
66
+ if (config.refreshToken) {
67
+ return true;
67
68
  }
68
- return true;
69
+ return false;
69
70
  }
70
71
  /**
71
- * Get access token
72
+ * Get access token (even if expired - let the API client handle refresh)
72
73
  */
73
74
  async getAccessToken() {
74
75
  const config = await this.load();
75
- // Check if token is expired
76
- if (config.expiresAt && config.expiresAt < Date.now()) {
77
- return null;
78
- }
79
76
  return config.accessToken || null;
80
77
  }
78
+ /**
79
+ * Get refresh token
80
+ */
81
+ async getRefreshToken() {
82
+ const config = await this.load();
83
+ return config.refreshToken || null;
84
+ }
85
+ /**
86
+ * Check if token is expired or will expire soon (within 5 minutes)
87
+ */
88
+ isTokenExpiringSoon(config) {
89
+ if (!config.expiresAt) {
90
+ return false;
91
+ }
92
+ // Consider token expiring if less than 5 minutes remaining
93
+ return config.expiresAt < Date.now() + 5 * 60 * 1000;
94
+ }
81
95
  /**
82
96
  * Get configuration directory path
83
97
  */
@@ -1 +1 @@
1
- {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,7 @@
1
1
  import 'dotenv/config';
2
+ /**
3
+ * Edgedive CLI Constants
4
+ */
2
5
  export declare const OAUTH_CONFIG: {
3
6
  CLIENT_ID: string;
4
7
  REDIRECT_URI: string;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAoBvB,eAAO,MAAM,YAAY;;;;CAIxB,CAAC;AAGF,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC;AAGF,eAAO,MAAM,YAAY;;;;;CAKxB,CAAC;AAGF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;GAEG;AAGH,eAAO,MAAM,YAAY;;;;CAIxB,CAAC;AAGF,eAAO,MAAM,UAAU;;;;;CAKtB,CAAC;AAGF,eAAO,MAAM,YAAY;;;;;CAKxB,CAAC;AAGF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC"}
package/dist/constants.js CHANGED
@@ -2,18 +2,6 @@ import 'dotenv/config';
2
2
  /**
3
3
  * Edgedive CLI Constants
4
4
  */
5
- // Validate required environment variables
6
- const getRequiredEnv = (key, fallback) => {
7
- const value = process.env[key];
8
- if (!value) {
9
- if (fallback) {
10
- console.warn(`Warning: ${key} not set, using default: ${fallback}`);
11
- return fallback;
12
- }
13
- throw new Error(`Missing required environment variable: ${key}`);
14
- }
15
- return value;
16
- };
17
5
  // OAuth configuration
18
6
  export const OAUTH_CONFIG = {
19
7
  CLIENT_ID: 'edgedive-cli',
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;GAEG;AAEH,0CAA0C;AAC1C,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,QAAiB,EAAU,EAAE;IAChE,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,YAAY,GAAG,4BAA4B,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,cAAc;IACzB,YAAY,EAAE,gCAAgC;IAC9C,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,0BAA0B;IACpC,cAAc,EAAE,sBAAsB;IACtC,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,qCAAqC;CACrD,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,SAAS;IACrB,mBAAmB,EAAE,UAAU;CAChC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,MAAM,EAAE,2BAA2B;CACxD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAEvB;;GAEG;AAEH,sBAAsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,cAAc;IACzB,YAAY,EAAE,gCAAgC;IAC9C,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF,oBAAoB;AACpB,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,QAAQ,EAAE,0BAA0B;IACpC,cAAc,EAAE,sBAAsB;IACtC,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,qCAAqC;CACrD,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,SAAS;IACrB,mBAAmB,EAAE,UAAU;CAChC,CAAC;AAEF,gBAAgB;AAChB,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,kBAAkB,EAAE,KAAK;IACzB,kBAAkB,EAAE,MAAM,EAAE,2BAA2B;CACxD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAyBD,qBAAa,QAAQ;WACN,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAIzC,iBAAiB,CAC5B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC;WAuBf,sBAAsB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC;CAiDjB"}
1
+ {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAuBD,qBAAa,QAAQ;WACN,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAIzC,iBAAiB,CAC5B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC;WAuBf,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiDrF"}
@@ -2,9 +2,7 @@ import { promisify } from 'util';
2
2
  import { exec as execCb } from 'child_process';
3
3
  const exec = promisify(execCb);
4
4
  function parseGithubRemote(remoteUrl) {
5
- const patterns = [
6
- /github\.com[:/](?<owner>[^/]+)\/(?<repo>[^/.]+)(?:\.git)?$/,
7
- ];
5
+ const patterns = [/github\.com[:/](?<owner>[^/]+)\/(?<repo>[^/.]+)(?:\.git)?$/];
8
6
  for (const pattern of patterns) {
9
7
  const match = remoteUrl.match(pattern);
10
8
  if (match && match.groups) {
@@ -1 +1 @@
1
- {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAO/B,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,MAAM,QAAQ,GAAG;QACf,4DAA4D;KAC7D,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvC,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;gBACvC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;aACtC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,OAAe,EAAE,GAAW;IAChD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,OAAO,QAAQ;IACnB,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,GAAW;QAClC,OAAO,MAAM,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAC5B,aAAqB,EACrB,YAAoB,EACpB,GAAW;QAEX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;QACJ,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;QAClE,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC;QAE/D,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,oBAAoB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,kCAAkC,aAAa,IAAI,YAAY,GAAG,CAClH,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,CACjC,MAAc,EACd,QAAgB;QAEhB,qBAAqB;QACrB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,6BAA6B,EAAE,QAAQ,CAAC,CAAC;QAE5E,+BAA+B;QAC/B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,0BAA0B,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;aACxF,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAEtB,4EAA4E;QAC5E,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,gBAAgB,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;YACjD,kCAAkC;YAClC,MAAM,MAAM,CAAC,6BAA6B,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9D,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,+DAA+D;YAC/D,kBAAkB,GAAG,KAAK,CAAC;QAC7B,CAAC;QAED,kCAAkC;QAClC,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,gCAAgC;YAChC,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,MAAM,CAAC,eAAe,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;YACD,OAAO;QACT,CAAC;QAED,uCAAuC;QACvC,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,MAAM,CAAC,YAAY,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC7C,gCAAgC;YAChC,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,MAAM,CAAC,eAAe,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;YAClD,CAAC;YACD,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,IAAI,kBAAkB,EAAE,CAAC;YACvB,qBAAqB;YACrB,MAAM,MAAM,CAAC,eAAe,MAAM,WAAW,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,iDAAiD;YACjD,MAAM,MAAM,CAAC,eAAe,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"git-utils.js","sourceRoot":"","sources":["../../src/utils/git-utils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-downloader.d.ts","sourceRoot":"","sources":["../../src/utils/session-downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,mBAAmB;YAWb,YAAY;IAapB,eAAe,CACnB,WAAW,EAAE,gBAAgB,EAC7B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;CAiBnE"}
1
+ {"version":3,"file":"session-downloader.d.ts","sourceRoot":"","sources":["../../src/utils/session-downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,mBAAmB;YAMb,YAAY;IAapB,eAAe,CACnB,WAAW,EAAE,gBAAgB,EAC7B,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC;CAiBnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-downloader.js","sourceRoot":"","sources":["../../src/utils/session-downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGzD,MAAM,OAAO,iBAAiB;IACpB,qBAAqB,CAAC,aAAqB;QACjD,OAAO,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAEO,mBAAmB,CAAC,aAAqB;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,IAAI,CACd,OAAO,EACP,YAAY,CAAC,UAAU,EACvB,YAAY,CAAC,mBAAmB,EAChC,SAAS,CACV,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,UAAkB;QACxD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpC,YAAY,EAAE,aAAa;gBAC3B,OAAO,EAAE,QAAQ,CAAC,kBAAkB;aACrC,CAAC,CAAC;YAEH,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,WAA6B,EAC7B,aAAqB;QAErB,IAAI,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC;QAE7C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,eAAe,QAAQ,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAErF,OAAO,CAAC,GAAG,CAAC,oCAAoC,iBAAiB,IAAI,CAAC,CAAC;QAEvE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAChD,CAAC;CACF"}
1
+ {"version":3,"file":"session-downloader.js","sourceRoot":"","sources":["../../src/utils/session-downloader.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAGzD,MAAM,OAAO,iBAAiB;IACpB,qBAAqB,CAAC,aAAqB;QACjD,OAAO,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAEO,mBAAmB,CAAC,aAAqB;QAC/C,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,UAAU,EAAE,YAAY,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;IAClG,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,GAAW,EAAE,UAAkB;QACxD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE;gBACpC,YAAY,EAAE,aAAa;gBAC3B,OAAO,EAAE,QAAQ,CAAC,kBAAkB;aACrC,CAAC,CAAC;YAEH,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,8BAA8B,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,WAA6B,EAC7B,aAAqB;QAErB,IAAI,eAAe,GAAG,WAAW,CAAC,UAAU,CAAC;QAE7C,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC9E,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,eAAe,QAAQ,CAAC,CAAC;QAClF,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;QAErF,OAAO,CAAC,GAAG,CAAC,oCAAoC,iBAAiB,IAAI,CAAC,CAAC;QAEvE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAChD,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edgedive/cli",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Edgedive CLI for agent session takeover and management",
5
5
  "type": "module",
6
6
  "bin": {
package/src/api/client.ts CHANGED
@@ -5,6 +5,7 @@
5
5
  import axios, { AxiosInstance } from 'axios';
6
6
  import { API_CONFIG, TIMEOUTS } from '../constants.js';
7
7
  import { ConfigManager } from '../config/config-manager.js';
8
+ import { OAuthFlow } from '../auth/oauth-flow.js';
8
9
 
9
10
  export interface TakeoverResponse {
10
11
  session_id: string;
@@ -41,16 +42,37 @@ export interface TakeoverResponse {
41
42
  export class EdgediveApiClient {
42
43
  private client: AxiosInstance;
43
44
  private configManager: ConfigManager;
45
+ private oauthFlow: OAuthFlow;
46
+ private isRefreshing: boolean = false;
44
47
 
45
48
  constructor(configManager: ConfigManager) {
46
49
  this.configManager = configManager;
50
+ this.oauthFlow = new OAuthFlow(configManager);
47
51
  this.client = axios.create({
48
52
  baseURL: API_CONFIG.BASE_URL,
49
53
  timeout: TIMEOUTS.DEFAULT_REQUEST_MS,
50
54
  });
51
55
 
52
- // Add request interceptor to inject auth token
56
+ // Add request interceptor to inject auth token and handle refresh
53
57
  this.client.interceptors.request.use(async (config) => {
58
+ // Check if token needs refresh
59
+ const currentConfig = await this.configManager.load();
60
+
61
+ if (this.configManager.isTokenExpiringSoon(currentConfig) && !this.isRefreshing) {
62
+ this.isRefreshing = true;
63
+ try {
64
+ console.log('🔄 Access token expiring soon, refreshing...');
65
+ await this.oauthFlow.refreshAccessToken();
66
+ console.log('✅ Token refreshed successfully');
67
+ } catch (error: any) {
68
+ console.error('❌ Failed to refresh token:', error.message);
69
+ console.log('Please run "dive login" to re-authenticate');
70
+ throw error;
71
+ } finally {
72
+ this.isRefreshing = false;
73
+ }
74
+ }
75
+
54
76
  const token = await this.configManager.getAccessToken();
55
77
  if (token) {
56
78
  config.headers.Authorization = `Bearer ${token}`;
@@ -71,9 +93,7 @@ export class EdgediveApiClient {
71
93
  } catch (error: any) {
72
94
  if (error.response) {
73
95
  const errorData = error.response.data;
74
- throw new Error(
75
- errorData?.error || `API request failed: ${error.response.status}`
76
- );
96
+ throw new Error(errorData?.error || `API request failed: ${error.response.status}`);
77
97
  }
78
98
  throw new Error(`API request failed: ${error.message}`);
79
99
  }
@@ -90,9 +110,7 @@ export class EdgediveApiClient {
90
110
  } catch (error: any) {
91
111
  if (error.response) {
92
112
  const errorData = error.response.data;
93
- throw new Error(
94
- errorData?.error || `API request failed: ${error.response.status}`
95
- );
113
+ throw new Error(errorData?.error || `API request failed: ${error.response.status}`);
96
114
  }
97
115
  throw new Error(`API request failed: ${error.message}`);
98
116
  }
@@ -112,9 +130,7 @@ export class EdgediveApiClient {
112
130
  } catch (error: any) {
113
131
  if (error.response) {
114
132
  const errorData = error.response.data;
115
- throw new Error(
116
- errorData?.error || `Upload failed: ${error.response.status}`
117
- );
133
+ throw new Error(errorData?.error || `Upload failed: ${error.response.status}`);
118
134
  }
119
135
  throw new Error(`Upload failed: ${error.message}`);
120
136
  }
@@ -15,6 +15,7 @@ export interface OAuthTokenResponse {
15
15
  token_type: string;
16
16
  expires_in: number;
17
17
  scope: string;
18
+ refresh_token: string;
18
19
  }
19
20
 
20
21
  export class OAuthFlow {
@@ -59,6 +60,7 @@ export class OAuthFlow {
59
60
  tokenType: tokenResponse.token_type,
60
61
  expiresAt,
61
62
  scope: tokenResponse.scope,
63
+ refreshToken: tokenResponse.refresh_token,
62
64
  });
63
65
 
64
66
  return tokenResponse;
@@ -201,6 +203,7 @@ export class OAuthFlow {
201
203
  const response = await axios.post<OAuthTokenResponse>(
202
204
  tokenUrl.toString(),
203
205
  new URLSearchParams({
206
+ grant_type: 'authorization_code',
204
207
  code,
205
208
  code_verifier: codeVerifier,
206
209
  }),
@@ -222,4 +225,54 @@ export class OAuthFlow {
222
225
  throw new Error(`Failed to exchange code for token: ${error.message}`);
223
226
  }
224
227
  }
228
+
229
+ /**
230
+ * Refresh access token using refresh token
231
+ */
232
+ async refreshAccessToken(): Promise<OAuthTokenResponse | null> {
233
+ try {
234
+ const refreshToken = await this.configManager.getRefreshToken();
235
+ if (!refreshToken) {
236
+ return null;
237
+ }
238
+
239
+ const tokenUrl = new URL(API_CONFIG.TOKEN_PATH, API_CONFIG.BASE_URL);
240
+
241
+ const response = await axios.post<OAuthTokenResponse>(
242
+ tokenUrl.toString(),
243
+ new URLSearchParams({
244
+ grant_type: 'refresh_token',
245
+ refresh_token: refreshToken,
246
+ }),
247
+ {
248
+ headers: {
249
+ 'Content-Type': 'application/x-www-form-urlencoded',
250
+ },
251
+ timeout: TIMEOUTS.DEFAULT_REQUEST_MS,
252
+ }
253
+ );
254
+
255
+ // Save new tokens to config
256
+ const expiresAt = Date.now() + response.data.expires_in * 1000;
257
+ await this.configManager.save({
258
+ accessToken: response.data.access_token,
259
+ tokenType: response.data.token_type,
260
+ expiresAt,
261
+ scope: response.data.scope,
262
+ refreshToken: response.data.refresh_token,
263
+ });
264
+
265
+ return response.data;
266
+ } catch (error: any) {
267
+ // If refresh fails, clear the config so user needs to login again
268
+ await this.configManager.delete();
269
+
270
+ if (error.response) {
271
+ throw new Error(
272
+ `Failed to refresh token: ${error.response.data?.error || error.message}`
273
+ );
274
+ }
275
+ throw new Error(`Failed to refresh token: ${error.message}`);
276
+ }
277
+ }
225
278
  }
package/src/auth/pkce.ts CHANGED
@@ -23,9 +23,5 @@ export function generateCodeChallenge(verifier: string): string {
23
23
  * Base64 URL encode (without padding)
24
24
  */
25
25
  function base64URLEncode(buffer: Buffer): string {
26
- return buffer
27
- .toString('base64')
28
- .replace(/\+/g, '-')
29
- .replace(/\//g, '_')
30
- .replace(/=/g, '');
26
+ return buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
31
27
  }
@@ -74,7 +74,9 @@ export async function localCommand({ prUrl, issueUrl }: LocalOptions): Promise<v
74
74
  console.log(chalk.dim(` Session ID: ${sessionData.session_id}`));
75
75
  console.log(chalk.dim(` Agent Type: ${sessionData.agent_type}`));
76
76
  console.log(chalk.dim(` Status: ${sessionData.status}`));
77
- console.log(chalk.dim(` Repository: ${sessionData.repository.owner}/${sessionData.repository.name}`));
77
+ console.log(
78
+ chalk.dim(` Repository: ${sessionData.repository.owner}/${sessionData.repository.name}`)
79
+ );
78
80
  console.log(chalk.dim(` Branch: ${sessionData.repository.branch}`));
79
81
 
80
82
  if (sessionData.linear_issue) {
@@ -94,7 +96,9 @@ export async function localCommand({ prUrl, issueUrl }: LocalOptions): Promise<v
94
96
  );
95
97
  } catch (error: any) {
96
98
  console.error(chalk.red(`\n❌ ${error.message}\n`));
97
- console.log(chalk.yellow('Run this command from within the target repository checked out locally.'));
99
+ console.log(
100
+ chalk.yellow('Run this command from within the target repository checked out locally.')
101
+ );
98
102
  process.exit(1);
99
103
  }
100
104
 
@@ -111,7 +115,11 @@ export async function localCommand({ prUrl, issueUrl }: LocalOptions): Promise<v
111
115
  await GitUtils.ensureBranchCheckedOut(sessionData.repository.branch, repoInfo.rootPath);
112
116
  console.log(chalk.green(`✅ Checked out branch ${sessionData.repository.branch}`));
113
117
  } catch (error: any) {
114
- console.error(chalk.red(`\n❌ Failed to checkout branch ${sessionData.repository.branch}: ${error.message}\n`));
118
+ console.error(
119
+ chalk.red(
120
+ `\n❌ Failed to checkout branch ${sessionData.repository.branch}: ${error.message}\n`
121
+ )
122
+ );
115
123
  console.log(chalk.yellow('Resolve the git issue above and rerun the local command.'));
116
124
  process.exit(1);
117
125
  }
@@ -124,7 +132,11 @@ export async function localCommand({ prUrl, issueUrl }: LocalOptions): Promise<v
124
132
 
125
133
  // Upload Claude session file back to server
126
134
  // Use the session info from the SessionEnd hook if available, otherwise fall back to original path
127
- await uploadClaudeSessionFile(apiClient, sessionData, sessionEndInfo || { claudeSessionPath });
135
+ await uploadClaudeSessionFile(
136
+ apiClient,
137
+ sessionData,
138
+ sessionEndInfo || { claudeSessionPath }
139
+ );
128
140
  } catch (error: any) {
129
141
  console.error(chalk.red(`\n❌ Failed to start Claude automatically: ${error.message}\n`));
130
142
  console.log(
@@ -169,9 +181,7 @@ async function uploadClaudeSessionFile(
169
181
  await fs.access(sessionFilePath);
170
182
  } catch {
171
183
  console.log(
172
- chalk.yellow(
173
- `⚠️ Claude session file not found at ${sessionFilePath}, skipping upload`
174
- )
184
+ chalk.yellow(`⚠️ Claude session file not found at ${sessionFilePath}, skipping upload`)
175
185
  );
176
186
  return;
177
187
  }
@@ -12,6 +12,7 @@ export interface EdgediveConfig {
12
12
  tokenType?: string;
13
13
  expiresAt?: number;
14
14
  scope?: string;
15
+ refreshToken?: string;
15
16
  }
16
17
 
17
18
  export class ConfigManager {
@@ -45,11 +46,7 @@ export class ConfigManager {
45
46
  try {
46
47
  const configDir = path.dirname(this.configPath);
47
48
  await fs.mkdir(configDir, { recursive: true, mode: 0o700 });
48
- await fs.writeFile(
49
- this.configPath,
50
- JSON.stringify(config, null, 2),
51
- { mode: 0o600 }
52
- );
49
+ await fs.writeFile(this.configPath, JSON.stringify(config, null, 2), { mode: 0o600 });
53
50
  } catch (error: any) {
54
51
  throw new Error(`Failed to save config: ${error.message}`);
55
52
  }
@@ -73,30 +70,45 @@ export class ConfigManager {
73
70
  */
74
71
  async isAuthenticated(): Promise<boolean> {
75
72
  const config = await this.load();
76
- if (!config.accessToken) {
77
- return false;
73
+
74
+ // If we have an access token that's not expired, we're authenticated
75
+ if (config.accessToken && (!config.expiresAt || config.expiresAt > Date.now())) {
76
+ return true;
78
77
  }
79
78
 
80
- // Check if token is expired
81
- if (config.expiresAt && config.expiresAt < Date.now()) {
82
- return false;
79
+ // If we have a refresh token, we can refresh, so consider authenticated
80
+ if (config.refreshToken) {
81
+ return true;
83
82
  }
84
83
 
85
- return true;
84
+ return false;
86
85
  }
87
86
 
88
87
  /**
89
- * Get access token
88
+ * Get access token (even if expired - let the API client handle refresh)
90
89
  */
91
90
  async getAccessToken(): Promise<string | null> {
92
91
  const config = await this.load();
92
+ return config.accessToken || null;
93
+ }
93
94
 
94
- // Check if token is expired
95
- if (config.expiresAt && config.expiresAt < Date.now()) {
96
- return null;
97
- }
95
+ /**
96
+ * Get refresh token
97
+ */
98
+ async getRefreshToken(): Promise<string | null> {
99
+ const config = await this.load();
100
+ return config.refreshToken || null;
101
+ }
98
102
 
99
- return config.accessToken || null;
103
+ /**
104
+ * Check if token is expired or will expire soon (within 5 minutes)
105
+ */
106
+ isTokenExpiringSoon(config: EdgediveConfig): boolean {
107
+ if (!config.expiresAt) {
108
+ return false;
109
+ }
110
+ // Consider token expiring if less than 5 minutes remaining
111
+ return config.expiresAt < Date.now() + 5 * 60 * 1000;
100
112
  }
101
113
 
102
114
  /**
package/src/constants.ts CHANGED
@@ -4,19 +4,6 @@ import 'dotenv/config';
4
4
  * Edgedive CLI Constants
5
5
  */
6
6
 
7
- // Validate required environment variables
8
- const getRequiredEnv = (key: string, fallback?: string): string => {
9
- const value = process.env[key];
10
- if (!value) {
11
- if (fallback) {
12
- console.warn(`Warning: ${key} not set, using default: ${fallback}`);
13
- return fallback;
14
- }
15
- throw new Error(`Missing required environment variable: ${key}`);
16
- }
17
- return value;
18
- };
19
-
20
7
  // OAuth configuration
21
8
  export const OAUTH_CONFIG = {
22
9
  CLIENT_ID: 'edgedive-cli',
@@ -9,9 +9,7 @@ export interface RepoVerification {
9
9
  }
10
10
 
11
11
  function parseGithubRemote(remoteUrl: string): { owner: string; repo: string } | null {
12
- const patterns = [
13
- /github\.com[:/](?<owner>[^/]+)\/(?<repo>[^/.]+)(?:\.git)?$/,
14
- ];
12
+ const patterns = [/github\.com[:/](?<owner>[^/]+)\/(?<repo>[^/.]+)(?:\.git)?$/];
15
13
 
16
14
  for (const pattern of patterns) {
17
15
  const match = remoteUrl.match(pattern);
@@ -63,10 +61,7 @@ export class GitUtils {
63
61
  return { rootPath, remoteUrl };
64
62
  }
65
63
 
66
- static async ensureBranchCheckedOut(
67
- branch: string,
68
- rootPath: string
69
- ): Promise<void> {
64
+ static async ensureBranchCheckedOut(branch: string, rootPath: string): Promise<void> {
70
65
  // Get current branch
71
66
  const currentBranch = await runGit('rev-parse --abbrev-ref HEAD', rootPath);
72
67
 
@@ -116,4 +111,3 @@ export class GitUtils {
116
111
  }
117
112
  }
118
113
  }
119
-
@@ -17,12 +17,7 @@ export class SessionDownloader {
17
17
  private getClaudeProjectDir(workspacePath: string): string {
18
18
  const homeDir = os.homedir();
19
19
  const sanitized = this.sanitizeWorkspacePath(workspacePath);
20
- return path.join(
21
- homeDir,
22
- LOCAL_CONFIG.CLAUDE_DIR,
23
- LOCAL_CONFIG.CLAUDE_PROJECTS_DIR,
24
- sanitized
25
- );
20
+ return path.join(homeDir, LOCAL_CONFIG.CLAUDE_DIR, LOCAL_CONFIG.CLAUDE_PROJECTS_DIR, sanitized);
26
21
  }
27
22
 
28
23
  private async downloadFile(url: string, targetPath: string): Promise<void> {
@@ -1,9 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(gh pr view:*)"
5
- ],
6
- "deny": [],
7
- "ask": []
8
- }
9
- }