claudedesk 1.0.0

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 (182) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +431 -0
  3. package/config/repos.example.json +128 -0
  4. package/config/settings.example.json +64 -0
  5. package/config/skills/code-review.md +76 -0
  6. package/config/skills/full-check.md +26 -0
  7. package/config/skills/lint-fix.md +23 -0
  8. package/dist/api/agent-routes.d.ts +2 -0
  9. package/dist/api/agent-routes.d.ts.map +1 -0
  10. package/dist/api/agent-routes.js +251 -0
  11. package/dist/api/agent-routes.js.map +1 -0
  12. package/dist/api/app-routes.d.ts +2 -0
  13. package/dist/api/app-routes.d.ts.map +1 -0
  14. package/dist/api/app-routes.js +150 -0
  15. package/dist/api/app-routes.js.map +1 -0
  16. package/dist/api/docker-routes.d.ts +2 -0
  17. package/dist/api/docker-routes.d.ts.map +1 -0
  18. package/dist/api/docker-routes.js +167 -0
  19. package/dist/api/docker-routes.js.map +1 -0
  20. package/dist/api/middleware.d.ts +6 -0
  21. package/dist/api/middleware.d.ts.map +1 -0
  22. package/dist/api/middleware.js +293 -0
  23. package/dist/api/middleware.js.map +1 -0
  24. package/dist/api/pin-auth.d.ts +65 -0
  25. package/dist/api/pin-auth.d.ts.map +1 -0
  26. package/dist/api/pin-auth.js +218 -0
  27. package/dist/api/pin-auth.js.map +1 -0
  28. package/dist/api/routes.d.ts +2 -0
  29. package/dist/api/routes.d.ts.map +1 -0
  30. package/dist/api/routes.js +473 -0
  31. package/dist/api/routes.js.map +1 -0
  32. package/dist/api/settings-routes.d.ts +2 -0
  33. package/dist/api/settings-routes.d.ts.map +1 -0
  34. package/dist/api/settings-routes.js +570 -0
  35. package/dist/api/settings-routes.js.map +1 -0
  36. package/dist/api/skill-routes.d.ts +2 -0
  37. package/dist/api/skill-routes.d.ts.map +1 -0
  38. package/dist/api/skill-routes.js +88 -0
  39. package/dist/api/skill-routes.js.map +1 -0
  40. package/dist/api/terminal-routes.d.ts +2 -0
  41. package/dist/api/terminal-routes.d.ts.map +1 -0
  42. package/dist/api/terminal-routes.js +3524 -0
  43. package/dist/api/terminal-routes.js.map +1 -0
  44. package/dist/api/tunnel-routes.d.ts +2 -0
  45. package/dist/api/tunnel-routes.d.ts.map +1 -0
  46. package/dist/api/tunnel-routes.js +196 -0
  47. package/dist/api/tunnel-routes.js.map +1 -0
  48. package/dist/api/workspace-routes.d.ts +3 -0
  49. package/dist/api/workspace-routes.d.ts.map +1 -0
  50. package/dist/api/workspace-routes.js +649 -0
  51. package/dist/api/workspace-routes.js.map +1 -0
  52. package/dist/cli.d.ts +3 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +276 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/client/assets/index-B4r0njGe.js +780 -0
  57. package/dist/client/assets/index-CY_9MyE0.css +1 -0
  58. package/dist/client/favicon.svg +5 -0
  59. package/dist/client/icons/icon-192.svg +5 -0
  60. package/dist/client/icons/icon-512.svg +5 -0
  61. package/dist/client/icons/logo-with-message.png +0 -0
  62. package/dist/client/icons/logo.png +0 -0
  63. package/dist/client/index.html +25 -0
  64. package/dist/client/manifest.json +62 -0
  65. package/dist/client/sw.js +243 -0
  66. package/dist/config/agent-usage.d.ts +34 -0
  67. package/dist/config/agent-usage.d.ts.map +1 -0
  68. package/dist/config/agent-usage.js +87 -0
  69. package/dist/config/agent-usage.js.map +1 -0
  70. package/dist/config/repos.d.ts +34 -0
  71. package/dist/config/repos.d.ts.map +1 -0
  72. package/dist/config/repos.js +412 -0
  73. package/dist/config/repos.js.map +1 -0
  74. package/dist/config/settings.d.ts +634 -0
  75. package/dist/config/settings.d.ts.map +1 -0
  76. package/dist/config/settings.js +459 -0
  77. package/dist/config/settings.js.map +1 -0
  78. package/dist/config/skills.d.ts +18 -0
  79. package/dist/config/skills.d.ts.map +1 -0
  80. package/dist/config/skills.js +174 -0
  81. package/dist/config/skills.js.map +1 -0
  82. package/dist/config/workspaces.d.ts +961 -0
  83. package/dist/config/workspaces.d.ts.map +1 -0
  84. package/dist/config/workspaces.js +482 -0
  85. package/dist/config/workspaces.js.map +1 -0
  86. package/dist/core/app-manager.d.ts +85 -0
  87. package/dist/core/app-manager.d.ts.map +1 -0
  88. package/dist/core/app-manager.js +447 -0
  89. package/dist/core/app-manager.js.map +1 -0
  90. package/dist/core/claude-invoker.d.ts +49 -0
  91. package/dist/core/claude-invoker.d.ts.map +1 -0
  92. package/dist/core/claude-invoker.js +583 -0
  93. package/dist/core/claude-invoker.js.map +1 -0
  94. package/dist/core/claude-session-reader.d.ts +25 -0
  95. package/dist/core/claude-session-reader.d.ts.map +1 -0
  96. package/dist/core/claude-session-reader.js +184 -0
  97. package/dist/core/claude-session-reader.js.map +1 -0
  98. package/dist/core/claude-usage-query.d.ts +78 -0
  99. package/dist/core/claude-usage-query.d.ts.map +1 -0
  100. package/dist/core/claude-usage-query.js +294 -0
  101. package/dist/core/claude-usage-query.js.map +1 -0
  102. package/dist/core/git-credential-helper.d.ts +57 -0
  103. package/dist/core/git-credential-helper.d.ts.map +1 -0
  104. package/dist/core/git-credential-helper.js +176 -0
  105. package/dist/core/git-credential-helper.js.map +1 -0
  106. package/dist/core/git-sandbox.d.ts +135 -0
  107. package/dist/core/git-sandbox.d.ts.map +1 -0
  108. package/dist/core/git-sandbox.js +907 -0
  109. package/dist/core/git-sandbox.js.map +1 -0
  110. package/dist/core/github-integration.d.ts +66 -0
  111. package/dist/core/github-integration.d.ts.map +1 -0
  112. package/dist/core/github-integration.js +350 -0
  113. package/dist/core/github-integration.js.map +1 -0
  114. package/dist/core/github-oauth.d.ts +88 -0
  115. package/dist/core/github-oauth.d.ts.map +1 -0
  116. package/dist/core/github-oauth.js +244 -0
  117. package/dist/core/github-oauth.js.map +1 -0
  118. package/dist/core/gitlab-integration.d.ts +66 -0
  119. package/dist/core/gitlab-integration.d.ts.map +1 -0
  120. package/dist/core/gitlab-integration.js +353 -0
  121. package/dist/core/gitlab-integration.js.map +1 -0
  122. package/dist/core/gitlab-oauth.d.ts +100 -0
  123. package/dist/core/gitlab-oauth.d.ts.map +1 -0
  124. package/dist/core/gitlab-oauth.js +366 -0
  125. package/dist/core/gitlab-oauth.js.map +1 -0
  126. package/dist/core/insights-extractor.d.ts +68 -0
  127. package/dist/core/insights-extractor.d.ts.map +1 -0
  128. package/dist/core/insights-extractor.js +402 -0
  129. package/dist/core/insights-extractor.js.map +1 -0
  130. package/dist/core/logger.d.ts +27 -0
  131. package/dist/core/logger.d.ts.map +1 -0
  132. package/dist/core/logger.js +70 -0
  133. package/dist/core/logger.js.map +1 -0
  134. package/dist/core/process-runner.d.ts +27 -0
  135. package/dist/core/process-runner.d.ts.map +1 -0
  136. package/dist/core/process-runner.js +147 -0
  137. package/dist/core/process-runner.js.map +1 -0
  138. package/dist/core/project-detector.d.ts +30 -0
  139. package/dist/core/project-detector.d.ts.map +1 -0
  140. package/dist/core/project-detector.js +482 -0
  141. package/dist/core/project-detector.js.map +1 -0
  142. package/dist/core/qr-generator.d.ts +18 -0
  143. package/dist/core/qr-generator.d.ts.map +1 -0
  144. package/dist/core/qr-generator.js +61 -0
  145. package/dist/core/qr-generator.js.map +1 -0
  146. package/dist/core/remote-tunnel-manager.d.ts +59 -0
  147. package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
  148. package/dist/core/remote-tunnel-manager.js +235 -0
  149. package/dist/core/remote-tunnel-manager.js.map +1 -0
  150. package/dist/core/shared-docker-manager.d.ts +41 -0
  151. package/dist/core/shared-docker-manager.d.ts.map +1 -0
  152. package/dist/core/shared-docker-manager.js +409 -0
  153. package/dist/core/shared-docker-manager.js.map +1 -0
  154. package/dist/core/skill-executor.d.ts +25 -0
  155. package/dist/core/skill-executor.d.ts.map +1 -0
  156. package/dist/core/skill-executor.js +171 -0
  157. package/dist/core/skill-executor.js.map +1 -0
  158. package/dist/core/terminal-session.d.ts +149 -0
  159. package/dist/core/terminal-session.d.ts.map +1 -0
  160. package/dist/core/terminal-session.js +2340 -0
  161. package/dist/core/terminal-session.js.map +1 -0
  162. package/dist/core/tunnel-manager.d.ts +35 -0
  163. package/dist/core/tunnel-manager.d.ts.map +1 -0
  164. package/dist/core/tunnel-manager.js +137 -0
  165. package/dist/core/tunnel-manager.js.map +1 -0
  166. package/dist/core/usage-manager.d.ts +57 -0
  167. package/dist/core/usage-manager.d.ts.map +1 -0
  168. package/dist/core/usage-manager.js +363 -0
  169. package/dist/core/usage-manager.js.map +1 -0
  170. package/dist/core/ws-manager.d.ts +39 -0
  171. package/dist/core/ws-manager.d.ts.map +1 -0
  172. package/dist/core/ws-manager.js +190 -0
  173. package/dist/core/ws-manager.js.map +1 -0
  174. package/dist/index.d.ts +7 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +229 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/types.d.ts +868 -0
  179. package/dist/types.d.ts.map +1 -0
  180. package/dist/types.js +119 -0
  181. package/dist/types.js.map +1 -0
  182. package/package.json +96 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-integration.js","sourceRoot":"","sources":["../../src/core/gitlab-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * GitLab OAuth Device Flow Implementation
3
+ *
4
+ * The device flow allows CLI/desktop apps to authenticate without a callback URL:
5
+ * 1. Request a device code from GitLab
6
+ * 2. User goes to gitlab.com/-/profile/device and enters the code
7
+ * 3. App polls GitLab until user completes authorization
8
+ * 4. GitLab returns access token
9
+ *
10
+ * See: https://docs.gitlab.com/ee/api/oauth2.html#device-authorization-grant
11
+ */
12
+ export interface DeviceCodeResponse {
13
+ deviceCode: string;
14
+ userCode: string;
15
+ verificationUri: string;
16
+ expiresIn: number;
17
+ interval: number;
18
+ }
19
+ export interface TokenResponse {
20
+ accessToken: string;
21
+ tokenType: string;
22
+ scope: string;
23
+ refreshToken?: string;
24
+ expiresIn?: number;
25
+ }
26
+ export interface GitLabUser {
27
+ username: string;
28
+ name: string | null;
29
+ avatarUrl: string;
30
+ }
31
+ export type PollStatus = 'pending' | 'success' | 'expired' | 'error';
32
+ export interface PollResult {
33
+ status: PollStatus;
34
+ token?: TokenResponse;
35
+ error?: string;
36
+ }
37
+ export declare class GitLabDeviceAuth {
38
+ private clientId;
39
+ constructor(clientId: string);
40
+ /**
41
+ * Step 1: Request a device code from GitLab
42
+ * User will need to visit the verification URI and enter the user code
43
+ */
44
+ requestDeviceCode(scope?: string): Promise<DeviceCodeResponse>;
45
+ /**
46
+ * Step 2: Poll for access token
47
+ * Call this periodically (respecting the interval) until authorization completes
48
+ */
49
+ pollForToken(deviceCode: string): Promise<PollResult>;
50
+ /**
51
+ * Get the polling interval for a device code session
52
+ */
53
+ getPollingInterval(deviceCode: string): number;
54
+ /**
55
+ * Cancel an active device code session
56
+ */
57
+ cancelSession(deviceCode: string): void;
58
+ /**
59
+ * Get user info using an access token
60
+ */
61
+ getUser(accessToken: string): Promise<GitLabUser>;
62
+ /**
63
+ * Verify that an access token is still valid
64
+ */
65
+ verifyToken(accessToken: string): Promise<boolean>;
66
+ /**
67
+ * Refresh an expired access token using a refresh token
68
+ */
69
+ refreshAccessToken(refreshToken: string): Promise<TokenResponse | null>;
70
+ }
71
+ /**
72
+ * Synchronous wrapper for refreshing GitLab token using temp script approach
73
+ */
74
+ export declare function refreshGitLabTokenSync(clientId: string, refreshToken: string): TokenResponse | null;
75
+ /**
76
+ * Create a new GitLab API client with an access token
77
+ * For making authenticated GitLab API calls
78
+ */
79
+ export declare class GitLabAPI {
80
+ private accessToken;
81
+ constructor(accessToken: string);
82
+ private request;
83
+ getUser(): Promise<GitLabUser>;
84
+ createProject(name: string, visibility?: 'private' | 'public' | 'internal', description?: string): Promise<{
85
+ id: number;
86
+ name: string;
87
+ pathWithNamespace: string;
88
+ webUrl: string;
89
+ httpUrlToRepo: string;
90
+ sshUrlToRepo: string;
91
+ }>;
92
+ listProjects(page?: number, perPage?: number): Promise<Array<{
93
+ id: number;
94
+ name: string;
95
+ pathWithNamespace: string;
96
+ webUrl: string;
97
+ visibility: string;
98
+ }>>;
99
+ }
100
+ //# sourceMappingURL=gitlab-oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-oauth.d.ts","sourceRoot":"","sources":["../../src/core/gitlab-oauth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAGD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAUD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAI5B;;;OAGG;IACG,iBAAiB,CAAC,KAAK,GAAE,MAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuCrF;;;OAGG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA4E3D;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAK9C;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBvD;;OAEG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcxD;;OAEG;IACG,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;CAuC9E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CA4EnG;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAAS;gBAEhB,WAAW,EAAE,MAAM;YAIjB,OAAO;IAsBf,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAS9B,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,SAAS,GAAG,QAAQ,GAAG,UAAsB,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAC1H,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IAwBI,YAAY,CAAC,IAAI,GAAE,MAAU,EAAE,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,KAAK,CAAC;QACxE,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;CAUJ"}
@@ -0,0 +1,366 @@
1
+ /**
2
+ * GitLab OAuth Device Flow Implementation
3
+ *
4
+ * The device flow allows CLI/desktop apps to authenticate without a callback URL:
5
+ * 1. Request a device code from GitLab
6
+ * 2. User goes to gitlab.com/-/profile/device and enters the code
7
+ * 3. App polls GitLab until user completes authorization
8
+ * 4. GitLab returns access token
9
+ *
10
+ * See: https://docs.gitlab.com/ee/api/oauth2.html#device-authorization-grant
11
+ */
12
+ // Store active device flow sessions (device_code -> pending state)
13
+ const activeSessions = new Map();
14
+ export class GitLabDeviceAuth {
15
+ clientId;
16
+ constructor(clientId) {
17
+ this.clientId = clientId;
18
+ }
19
+ /**
20
+ * Step 1: Request a device code from GitLab
21
+ * User will need to visit the verification URI and enter the user code
22
+ */
23
+ async requestDeviceCode(scope = 'api read_user') {
24
+ const response = await fetch('https://gitlab.com/oauth/authorize_device', {
25
+ method: 'POST',
26
+ headers: {
27
+ 'Accept': 'application/json',
28
+ 'Content-Type': 'application/x-www-form-urlencoded',
29
+ },
30
+ body: new URLSearchParams({
31
+ client_id: this.clientId,
32
+ scope,
33
+ }).toString(),
34
+ });
35
+ if (!response.ok) {
36
+ const error = await response.text();
37
+ throw new Error(`Failed to request device code: ${error}`);
38
+ }
39
+ const data = await response.json();
40
+ const result = {
41
+ deviceCode: data.device_code,
42
+ userCode: data.user_code,
43
+ verificationUri: data.verification_uri || 'https://gitlab.com/-/profile/device',
44
+ expiresIn: data.expires_in,
45
+ interval: data.interval || 5,
46
+ };
47
+ // Store session for polling
48
+ activeSessions.set(result.deviceCode, {
49
+ deviceCode: result.deviceCode,
50
+ interval: result.interval,
51
+ expiresAt: Date.now() + (result.expiresIn * 1000),
52
+ clientId: this.clientId,
53
+ });
54
+ return result;
55
+ }
56
+ /**
57
+ * Step 2: Poll for access token
58
+ * Call this periodically (respecting the interval) until authorization completes
59
+ */
60
+ async pollForToken(deviceCode) {
61
+ const session = activeSessions.get(deviceCode);
62
+ if (!session) {
63
+ return { status: 'error', error: 'Device code session not found' };
64
+ }
65
+ // Check if expired
66
+ if (Date.now() > session.expiresAt) {
67
+ activeSessions.delete(deviceCode);
68
+ return { status: 'expired', error: 'Device code has expired' };
69
+ }
70
+ try {
71
+ const response = await fetch('https://gitlab.com/oauth/token', {
72
+ method: 'POST',
73
+ headers: {
74
+ 'Accept': 'application/json',
75
+ 'Content-Type': 'application/x-www-form-urlencoded',
76
+ },
77
+ body: new URLSearchParams({
78
+ client_id: session.clientId,
79
+ device_code: deviceCode,
80
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
81
+ }).toString(),
82
+ });
83
+ const data = await response.json();
84
+ // Check for errors
85
+ if (data.error) {
86
+ switch (data.error) {
87
+ case 'authorization_pending':
88
+ // User hasn't completed authorization yet - keep polling
89
+ return { status: 'pending' };
90
+ case 'slow_down':
91
+ // Too many requests - increase interval
92
+ session.interval += 5;
93
+ return { status: 'pending' };
94
+ case 'expired_token':
95
+ activeSessions.delete(deviceCode);
96
+ return { status: 'expired', error: 'Device code has expired' };
97
+ case 'access_denied':
98
+ activeSessions.delete(deviceCode);
99
+ return { status: 'error', error: 'User denied authorization' };
100
+ default:
101
+ return { status: 'error', error: data.error_description || data.error };
102
+ }
103
+ }
104
+ // Success! We got the token
105
+ if (data.access_token) {
106
+ activeSessions.delete(deviceCode);
107
+ return {
108
+ status: 'success',
109
+ token: {
110
+ accessToken: data.access_token,
111
+ tokenType: data.token_type,
112
+ scope: data.scope,
113
+ refreshToken: data.refresh_token,
114
+ expiresIn: data.expires_in,
115
+ },
116
+ };
117
+ }
118
+ return { status: 'error', error: 'Unexpected response from GitLab' };
119
+ }
120
+ catch (error) {
121
+ const errorMsg = error instanceof Error ? error.message : String(error);
122
+ return { status: 'error', error: errorMsg };
123
+ }
124
+ }
125
+ /**
126
+ * Get the polling interval for a device code session
127
+ */
128
+ getPollingInterval(deviceCode) {
129
+ const session = activeSessions.get(deviceCode);
130
+ return session?.interval || 5;
131
+ }
132
+ /**
133
+ * Cancel an active device code session
134
+ */
135
+ cancelSession(deviceCode) {
136
+ activeSessions.delete(deviceCode);
137
+ }
138
+ /**
139
+ * Get user info using an access token
140
+ */
141
+ async getUser(accessToken) {
142
+ const response = await fetch('https://gitlab.com/api/v4/user', {
143
+ headers: {
144
+ 'Accept': 'application/json',
145
+ 'Authorization': `Bearer ${accessToken}`,
146
+ },
147
+ });
148
+ if (!response.ok) {
149
+ const error = await response.text();
150
+ throw new Error(`Failed to get user info: ${error}`);
151
+ }
152
+ const data = await response.json();
153
+ return {
154
+ username: data.username,
155
+ name: data.name,
156
+ avatarUrl: data.avatar_url,
157
+ };
158
+ }
159
+ /**
160
+ * Verify that an access token is still valid
161
+ */
162
+ async verifyToken(accessToken) {
163
+ try {
164
+ const response = await fetch('https://gitlab.com/api/v4/user', {
165
+ headers: {
166
+ 'Accept': 'application/json',
167
+ 'Authorization': `Bearer ${accessToken}`,
168
+ },
169
+ });
170
+ return response.ok;
171
+ }
172
+ catch {
173
+ return false;
174
+ }
175
+ }
176
+ /**
177
+ * Refresh an expired access token using a refresh token
178
+ */
179
+ async refreshAccessToken(refreshToken) {
180
+ try {
181
+ const response = await fetch('https://gitlab.com/oauth/token', {
182
+ method: 'POST',
183
+ headers: {
184
+ 'Accept': 'application/json',
185
+ 'Content-Type': 'application/x-www-form-urlencoded',
186
+ },
187
+ body: new URLSearchParams({
188
+ client_id: this.clientId,
189
+ refresh_token: refreshToken,
190
+ grant_type: 'refresh_token',
191
+ }).toString(),
192
+ });
193
+ if (!response.ok) {
194
+ const error = await response.text();
195
+ console.error(`[GitLabDeviceAuth] Failed to refresh token: ${error}`);
196
+ return null;
197
+ }
198
+ const data = await response.json();
199
+ if (data.access_token) {
200
+ return {
201
+ accessToken: data.access_token,
202
+ tokenType: data.token_type,
203
+ scope: data.scope,
204
+ refreshToken: data.refresh_token,
205
+ expiresIn: data.expires_in,
206
+ };
207
+ }
208
+ return null;
209
+ }
210
+ catch (error) {
211
+ console.error(`[GitLabDeviceAuth] Error refreshing token:`, error);
212
+ return null;
213
+ }
214
+ }
215
+ }
216
+ /**
217
+ * Synchronous wrapper for refreshing GitLab token using temp script approach
218
+ */
219
+ export function refreshGitLabTokenSync(clientId, refreshToken) {
220
+ const { execSync } = require('child_process');
221
+ const { writeFileSync, readFileSync, unlinkSync } = require('fs');
222
+ const { tmpdir } = require('os');
223
+ const { join } = require('path');
224
+ const { randomUUID } = require('crypto');
225
+ const tempScriptPath = join(tmpdir(), `gitlab-refresh-${randomUUID()}.mjs`);
226
+ const tempResultPath = join(tmpdir(), `gitlab-refresh-result-${randomUUID()}.json`);
227
+ const scriptContent = `
228
+ import { writeFileSync } from 'fs';
229
+ try {
230
+ const response = await fetch('https://gitlab.com/oauth/token', {
231
+ method: 'POST',
232
+ headers: {
233
+ 'Accept': 'application/json',
234
+ 'Content-Type': 'application/x-www-form-urlencoded',
235
+ },
236
+ body: new URLSearchParams({
237
+ client_id: ${JSON.stringify(clientId)},
238
+ refresh_token: ${JSON.stringify(refreshToken)},
239
+ grant_type: 'refresh_token',
240
+ }).toString(),
241
+ });
242
+
243
+ const text = await response.text();
244
+
245
+ if (!response.ok) {
246
+ writeFileSync(${JSON.stringify(tempResultPath)}, JSON.stringify({ success: false, error: text }));
247
+ } else {
248
+ const data = JSON.parse(text);
249
+ if (data.access_token) {
250
+ writeFileSync(${JSON.stringify(tempResultPath)}, JSON.stringify({
251
+ success: true,
252
+ accessToken: data.access_token,
253
+ tokenType: data.token_type,
254
+ scope: data.scope,
255
+ refreshToken: data.refresh_token,
256
+ expiresIn: data.expires_in
257
+ }));
258
+ } else {
259
+ writeFileSync(${JSON.stringify(tempResultPath)}, JSON.stringify({ success: false, error: 'No access_token in response' }));
260
+ }
261
+ }
262
+ } catch (e) {
263
+ writeFileSync(${JSON.stringify(tempResultPath)}, JSON.stringify({ success: false, error: e.message }));
264
+ }
265
+ `;
266
+ try {
267
+ writeFileSync(tempScriptPath, scriptContent);
268
+ execSync(`node "${tempScriptPath}"`, { encoding: 'utf-8', timeout: 15000 });
269
+ const resultJson = readFileSync(tempResultPath, 'utf-8');
270
+ const result = JSON.parse(resultJson);
271
+ if (result.success) {
272
+ return {
273
+ accessToken: result.accessToken,
274
+ tokenType: result.tokenType,
275
+ scope: result.scope,
276
+ refreshToken: result.refreshToken,
277
+ expiresIn: result.expiresIn,
278
+ };
279
+ }
280
+ console.error(`[GitLab] Token refresh failed: ${result.error}`);
281
+ return null;
282
+ }
283
+ catch (error) {
284
+ console.error(`[GitLab] Token refresh error:`, error);
285
+ return null;
286
+ }
287
+ finally {
288
+ try {
289
+ unlinkSync(tempScriptPath);
290
+ }
291
+ catch { }
292
+ try {
293
+ unlinkSync(tempResultPath);
294
+ }
295
+ catch { }
296
+ }
297
+ }
298
+ /**
299
+ * Create a new GitLab API client with an access token
300
+ * For making authenticated GitLab API calls
301
+ */
302
+ export class GitLabAPI {
303
+ accessToken;
304
+ constructor(accessToken) {
305
+ this.accessToken = accessToken;
306
+ }
307
+ async request(endpoint, options = {}) {
308
+ const url = endpoint.startsWith('https://')
309
+ ? endpoint
310
+ : `https://gitlab.com/api/v4${endpoint}`;
311
+ const response = await fetch(url, {
312
+ ...options,
313
+ headers: {
314
+ 'Accept': 'application/json',
315
+ 'Authorization': `Bearer ${this.accessToken}`,
316
+ ...options.headers,
317
+ },
318
+ });
319
+ if (!response.ok) {
320
+ const error = await response.text();
321
+ throw new Error(`GitLab API error: ${response.status} - ${error}`);
322
+ }
323
+ return response.json();
324
+ }
325
+ async getUser() {
326
+ const data = await this.request('/user');
327
+ return {
328
+ username: data.username,
329
+ name: data.name,
330
+ avatarUrl: data.avatar_url,
331
+ };
332
+ }
333
+ async createProject(name, visibility = 'private', description) {
334
+ const data = await this.request('/projects', {
335
+ method: 'POST',
336
+ headers: {
337
+ 'Content-Type': 'application/json',
338
+ },
339
+ body: JSON.stringify({
340
+ name,
341
+ visibility,
342
+ description,
343
+ initialize_with_readme: false,
344
+ }),
345
+ });
346
+ return {
347
+ id: data.id,
348
+ name: data.name,
349
+ pathWithNamespace: data.path_with_namespace,
350
+ webUrl: data.web_url,
351
+ httpUrlToRepo: data.http_url_to_repo,
352
+ sshUrlToRepo: data.ssh_url_to_repo,
353
+ };
354
+ }
355
+ async listProjects(page = 1, perPage = 30) {
356
+ const data = await this.request(`/projects?owned=true&page=${page}&per_page=${perPage}&order_by=updated_at`);
357
+ return data.map((project) => ({
358
+ id: project.id,
359
+ name: project.name,
360
+ pathWithNamespace: project.path_with_namespace,
361
+ webUrl: project.web_url,
362
+ visibility: project.visibility,
363
+ }));
364
+ }
365
+ }
366
+ //# sourceMappingURL=gitlab-oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab-oauth.js","sourceRoot":"","sources":["../../src/core/gitlab-oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { JobInsights } from '../types.js';
2
+ /**
3
+ * Extracts insights from Claude's output to explain what was done and why.
4
+ * Parses the conversational output and structures it into actionable insights.
5
+ */
6
+ export declare class InsightsExtractor {
7
+ /**
8
+ * Extract insights from a job's Claude output
9
+ */
10
+ extractFromJob(artifactsDir: string, changedFiles?: string[]): JobInsights | null;
11
+ /**
12
+ * Extract insights from a create-repo workflow (scaffolded projects)
13
+ */
14
+ extractFromCreateRepo(artifactsDir: string, params?: Record<string, string>): JobInsights | null;
15
+ /**
16
+ * Extract what was created in a scaffolded project
17
+ */
18
+ private extractCreationSolution;
19
+ /**
20
+ * Extract reasoning for architectural decisions in scaffolded project
21
+ */
22
+ private extractCreationReasoning;
23
+ /**
24
+ * Extract list of created files from output
25
+ */
26
+ private extractCreatedFiles;
27
+ /**
28
+ * Parse Claude's output and extract structured insights
29
+ */
30
+ private parseOutput;
31
+ /**
32
+ * Extract the problem description from prompt and output
33
+ */
34
+ private extractProblem;
35
+ /**
36
+ * Extract what Claude did to fix the issue
37
+ */
38
+ private extractSolution;
39
+ /**
40
+ * Extract reasoning for why this approach was chosen
41
+ */
42
+ private extractReasoning;
43
+ /**
44
+ * Extract per-file change explanations
45
+ */
46
+ private extractFileChanges;
47
+ /**
48
+ * Identify common patterns/issues from the output
49
+ */
50
+ private identifyPatterns;
51
+ /**
52
+ * Generate prevention tips based on identified patterns
53
+ */
54
+ private generatePreventionTips;
55
+ /**
56
+ * Generate a one-line summary
57
+ */
58
+ private generateSummary;
59
+ /**
60
+ * Generate generic file change description based on file type
61
+ */
62
+ private generateFileChangeDescription;
63
+ private cleanErrorMessage;
64
+ private capitalizeFirst;
65
+ private escapeRegex;
66
+ }
67
+ export declare const insightsExtractor: InsightsExtractor;
68
+ //# sourceMappingURL=insights-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insights-extractor.d.ts","sourceRoot":"","sources":["../../src/core/insights-extractor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,IAAI;IA6BjF;;OAEG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,GAAG,IAAI;IAsChG;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwC/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IA0BhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoB3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqCtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyCvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgC9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAmBrC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,WAAW;CAGpB;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}