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.
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/config/repos.example.json +128 -0
- package/config/settings.example.json +64 -0
- package/config/skills/code-review.md +76 -0
- package/config/skills/full-check.md +26 -0
- package/config/skills/lint-fix.md +23 -0
- package/dist/api/agent-routes.d.ts +2 -0
- package/dist/api/agent-routes.d.ts.map +1 -0
- package/dist/api/agent-routes.js +251 -0
- package/dist/api/agent-routes.js.map +1 -0
- package/dist/api/app-routes.d.ts +2 -0
- package/dist/api/app-routes.d.ts.map +1 -0
- package/dist/api/app-routes.js +150 -0
- package/dist/api/app-routes.js.map +1 -0
- package/dist/api/docker-routes.d.ts +2 -0
- package/dist/api/docker-routes.d.ts.map +1 -0
- package/dist/api/docker-routes.js +167 -0
- package/dist/api/docker-routes.js.map +1 -0
- package/dist/api/middleware.d.ts +6 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +293 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/pin-auth.d.ts +65 -0
- package/dist/api/pin-auth.d.ts.map +1 -0
- package/dist/api/pin-auth.js +218 -0
- package/dist/api/pin-auth.js.map +1 -0
- package/dist/api/routes.d.ts +2 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +473 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/settings-routes.d.ts +2 -0
- package/dist/api/settings-routes.d.ts.map +1 -0
- package/dist/api/settings-routes.js +570 -0
- package/dist/api/settings-routes.js.map +1 -0
- package/dist/api/skill-routes.d.ts +2 -0
- package/dist/api/skill-routes.d.ts.map +1 -0
- package/dist/api/skill-routes.js +88 -0
- package/dist/api/skill-routes.js.map +1 -0
- package/dist/api/terminal-routes.d.ts +2 -0
- package/dist/api/terminal-routes.d.ts.map +1 -0
- package/dist/api/terminal-routes.js +3524 -0
- package/dist/api/terminal-routes.js.map +1 -0
- package/dist/api/tunnel-routes.d.ts +2 -0
- package/dist/api/tunnel-routes.d.ts.map +1 -0
- package/dist/api/tunnel-routes.js +196 -0
- package/dist/api/tunnel-routes.js.map +1 -0
- package/dist/api/workspace-routes.d.ts +3 -0
- package/dist/api/workspace-routes.d.ts.map +1 -0
- package/dist/api/workspace-routes.js +649 -0
- package/dist/api/workspace-routes.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +276 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/assets/index-B4r0njGe.js +780 -0
- package/dist/client/assets/index-CY_9MyE0.css +1 -0
- package/dist/client/favicon.svg +5 -0
- package/dist/client/icons/icon-192.svg +5 -0
- package/dist/client/icons/icon-512.svg +5 -0
- package/dist/client/icons/logo-with-message.png +0 -0
- package/dist/client/icons/logo.png +0 -0
- package/dist/client/index.html +25 -0
- package/dist/client/manifest.json +62 -0
- package/dist/client/sw.js +243 -0
- package/dist/config/agent-usage.d.ts +34 -0
- package/dist/config/agent-usage.d.ts.map +1 -0
- package/dist/config/agent-usage.js +87 -0
- package/dist/config/agent-usage.js.map +1 -0
- package/dist/config/repos.d.ts +34 -0
- package/dist/config/repos.d.ts.map +1 -0
- package/dist/config/repos.js +412 -0
- package/dist/config/repos.js.map +1 -0
- package/dist/config/settings.d.ts +634 -0
- package/dist/config/settings.d.ts.map +1 -0
- package/dist/config/settings.js +459 -0
- package/dist/config/settings.js.map +1 -0
- package/dist/config/skills.d.ts +18 -0
- package/dist/config/skills.d.ts.map +1 -0
- package/dist/config/skills.js +174 -0
- package/dist/config/skills.js.map +1 -0
- package/dist/config/workspaces.d.ts +961 -0
- package/dist/config/workspaces.d.ts.map +1 -0
- package/dist/config/workspaces.js +482 -0
- package/dist/config/workspaces.js.map +1 -0
- package/dist/core/app-manager.d.ts +85 -0
- package/dist/core/app-manager.d.ts.map +1 -0
- package/dist/core/app-manager.js +447 -0
- package/dist/core/app-manager.js.map +1 -0
- package/dist/core/claude-invoker.d.ts +49 -0
- package/dist/core/claude-invoker.d.ts.map +1 -0
- package/dist/core/claude-invoker.js +583 -0
- package/dist/core/claude-invoker.js.map +1 -0
- package/dist/core/claude-session-reader.d.ts +25 -0
- package/dist/core/claude-session-reader.d.ts.map +1 -0
- package/dist/core/claude-session-reader.js +184 -0
- package/dist/core/claude-session-reader.js.map +1 -0
- package/dist/core/claude-usage-query.d.ts +78 -0
- package/dist/core/claude-usage-query.d.ts.map +1 -0
- package/dist/core/claude-usage-query.js +294 -0
- package/dist/core/claude-usage-query.js.map +1 -0
- package/dist/core/git-credential-helper.d.ts +57 -0
- package/dist/core/git-credential-helper.d.ts.map +1 -0
- package/dist/core/git-credential-helper.js +176 -0
- package/dist/core/git-credential-helper.js.map +1 -0
- package/dist/core/git-sandbox.d.ts +135 -0
- package/dist/core/git-sandbox.d.ts.map +1 -0
- package/dist/core/git-sandbox.js +907 -0
- package/dist/core/git-sandbox.js.map +1 -0
- package/dist/core/github-integration.d.ts +66 -0
- package/dist/core/github-integration.d.ts.map +1 -0
- package/dist/core/github-integration.js +350 -0
- package/dist/core/github-integration.js.map +1 -0
- package/dist/core/github-oauth.d.ts +88 -0
- package/dist/core/github-oauth.d.ts.map +1 -0
- package/dist/core/github-oauth.js +244 -0
- package/dist/core/github-oauth.js.map +1 -0
- package/dist/core/gitlab-integration.d.ts +66 -0
- package/dist/core/gitlab-integration.d.ts.map +1 -0
- package/dist/core/gitlab-integration.js +353 -0
- package/dist/core/gitlab-integration.js.map +1 -0
- package/dist/core/gitlab-oauth.d.ts +100 -0
- package/dist/core/gitlab-oauth.d.ts.map +1 -0
- package/dist/core/gitlab-oauth.js +366 -0
- package/dist/core/gitlab-oauth.js.map +1 -0
- package/dist/core/insights-extractor.d.ts +68 -0
- package/dist/core/insights-extractor.d.ts.map +1 -0
- package/dist/core/insights-extractor.js +402 -0
- package/dist/core/insights-extractor.js.map +1 -0
- package/dist/core/logger.d.ts +27 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +70 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/process-runner.d.ts +27 -0
- package/dist/core/process-runner.d.ts.map +1 -0
- package/dist/core/process-runner.js +147 -0
- package/dist/core/process-runner.js.map +1 -0
- package/dist/core/project-detector.d.ts +30 -0
- package/dist/core/project-detector.d.ts.map +1 -0
- package/dist/core/project-detector.js +482 -0
- package/dist/core/project-detector.js.map +1 -0
- package/dist/core/qr-generator.d.ts +18 -0
- package/dist/core/qr-generator.d.ts.map +1 -0
- package/dist/core/qr-generator.js +61 -0
- package/dist/core/qr-generator.js.map +1 -0
- package/dist/core/remote-tunnel-manager.d.ts +59 -0
- package/dist/core/remote-tunnel-manager.d.ts.map +1 -0
- package/dist/core/remote-tunnel-manager.js +235 -0
- package/dist/core/remote-tunnel-manager.js.map +1 -0
- package/dist/core/shared-docker-manager.d.ts +41 -0
- package/dist/core/shared-docker-manager.d.ts.map +1 -0
- package/dist/core/shared-docker-manager.js +409 -0
- package/dist/core/shared-docker-manager.js.map +1 -0
- package/dist/core/skill-executor.d.ts +25 -0
- package/dist/core/skill-executor.d.ts.map +1 -0
- package/dist/core/skill-executor.js +171 -0
- package/dist/core/skill-executor.js.map +1 -0
- package/dist/core/terminal-session.d.ts +149 -0
- package/dist/core/terminal-session.d.ts.map +1 -0
- package/dist/core/terminal-session.js +2340 -0
- package/dist/core/terminal-session.js.map +1 -0
- package/dist/core/tunnel-manager.d.ts +35 -0
- package/dist/core/tunnel-manager.d.ts.map +1 -0
- package/dist/core/tunnel-manager.js +137 -0
- package/dist/core/tunnel-manager.js.map +1 -0
- package/dist/core/usage-manager.d.ts +57 -0
- package/dist/core/usage-manager.d.ts.map +1 -0
- package/dist/core/usage-manager.js +363 -0
- package/dist/core/usage-manager.js.map +1 -0
- package/dist/core/ws-manager.d.ts +39 -0
- package/dist/core/ws-manager.d.ts.map +1 -0
- package/dist/core/ws-manager.js +190 -0
- package/dist/core/ws-manager.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +229 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +868 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +119 -0
- package/dist/types.js.map +1 -0
- 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"}
|