@braingrid/cli 0.2.0 → 0.2.1
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/CHANGELOG.md +32 -0
- package/README.md +54 -38
- package/dist/chunk-KNVWIF3L.js +401 -0
- package/dist/chunk-KNVWIF3L.js.map +1 -0
- package/dist/cli.js +6236 -245
- package/dist/cli.js.map +1 -1
- package/dist/gh-installer-B65ZOOC4.js +13 -0
- package/dist/gh-installer-B65ZOOC4.js.map +1 -0
- package/package.json +19 -11
- package/dist/build-config.d.ts +0 -26
- package/dist/build-config.d.ts.map +0 -1
- package/dist/build-config.js +0 -45
- package/dist/build-config.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.d.ts +0 -13
- package/dist/handlers/auth.handlers.d.ts.map +0 -1
- package/dist/handlers/auth.handlers.js +0 -111
- package/dist/handlers/auth.handlers.js.map +0 -1
- package/dist/handlers/index.d.ts +0 -13
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -13
- package/dist/handlers/index.js.map +0 -1
- package/dist/handlers/init.handlers.d.ts +0 -10
- package/dist/handlers/init.handlers.d.ts.map +0 -1
- package/dist/handlers/init.handlers.js +0 -638
- package/dist/handlers/init.handlers.js.map +0 -1
- package/dist/handlers/project.handlers.d.ts +0 -36
- package/dist/handlers/project.handlers.d.ts.map +0 -1
- package/dist/handlers/project.handlers.js +0 -309
- package/dist/handlers/project.handlers.js.map +0 -1
- package/dist/handlers/requirement.handlers.d.ts +0 -32
- package/dist/handlers/requirement.handlers.d.ts.map +0 -1
- package/dist/handlers/requirement.handlers.js +0 -264
- package/dist/handlers/requirement.handlers.js.map +0 -1
- package/dist/handlers/status.handlers.d.ts +0 -12
- package/dist/handlers/status.handlers.d.ts.map +0 -1
- package/dist/handlers/status.handlers.js +0 -212
- package/dist/handlers/status.handlers.js.map +0 -1
- package/dist/handlers/task.handlers.d.ts +0 -29
- package/dist/handlers/task.handlers.d.ts.map +0 -1
- package/dist/handlers/task.handlers.js +0 -326
- package/dist/handlers/task.handlers.js.map +0 -1
- package/dist/handlers/types.d.ts +0 -10
- package/dist/handlers/types.d.ts.map +0 -1
- package/dist/handlers/types.js +0 -5
- package/dist/handlers/types.js.map +0 -1
- package/dist/handlers/update.handlers.d.ts +0 -16
- package/dist/handlers/update.handlers.d.ts.map +0 -1
- package/dist/handlers/update.handlers.js +0 -119
- package/dist/handlers/update.handlers.js.map +0 -1
- package/dist/services/auth.d.ts +0 -59
- package/dist/services/auth.d.ts.map +0 -1
- package/dist/services/auth.js +0 -549
- package/dist/services/auth.js.map +0 -1
- package/dist/services/claude.d.ts +0 -18
- package/dist/services/claude.d.ts.map +0 -1
- package/dist/services/claude.js +0 -164
- package/dist/services/claude.js.map +0 -1
- package/dist/services/credential-store.d.ts +0 -47
- package/dist/services/credential-store.d.ts.map +0 -1
- package/dist/services/credential-store.js +0 -89
- package/dist/services/credential-store.js.map +0 -1
- package/dist/services/internal/github-service.d.ts +0 -67
- package/dist/services/internal/github-service.d.ts.map +0 -1
- package/dist/services/internal/github-service.js +0 -81
- package/dist/services/internal/github-service.js.map +0 -1
- package/dist/services/internal/repository-service.d.ts +0 -79
- package/dist/services/internal/repository-service.d.ts.map +0 -1
- package/dist/services/internal/repository-service.js +0 -88
- package/dist/services/internal/repository-service.js.map +0 -1
- package/dist/services/oauth2-auth.d.ts +0 -76
- package/dist/services/oauth2-auth.d.ts.map +0 -1
- package/dist/services/oauth2-auth.js +0 -451
- package/dist/services/oauth2-auth.js.map +0 -1
- package/dist/services/project-service.d.ts +0 -24
- package/dist/services/project-service.d.ts.map +0 -1
- package/dist/services/project-service.js +0 -60
- package/dist/services/project-service.js.map +0 -1
- package/dist/services/requirement-service.d.ts +0 -32
- package/dist/services/requirement-service.d.ts.map +0 -1
- package/dist/services/requirement-service.js +0 -91
- package/dist/services/requirement-service.js.map +0 -1
- package/dist/services/task-service.d.ts +0 -22
- package/dist/services/task-service.d.ts.map +0 -1
- package/dist/services/task-service.js +0 -52
- package/dist/services/task-service.js.map +0 -1
- package/dist/types/api.d.ts +0 -16
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/api.js +0 -5
- package/dist/types/api.js.map +0 -1
- package/dist/types/auth.d.ts +0 -73
- package/dist/types/auth.d.ts.map +0 -1
- package/dist/types/auth.js +0 -2
- package/dist/types/auth.js.map +0 -1
- package/dist/types/claude.d.ts +0 -22
- package/dist/types/claude.d.ts.map +0 -1
- package/dist/types/claude.js +0 -2
- package/dist/types/claude.js.map +0 -1
- package/dist/types/github.d.ts +0 -105
- package/dist/types/github.d.ts.map +0 -1
- package/dist/types/github.js +0 -6
- package/dist/types/github.js.map +0 -1
- package/dist/types/local-project.d.ts +0 -30
- package/dist/types/local-project.d.ts.map +0 -1
- package/dist/types/local-project.js +0 -24
- package/dist/types/local-project.js.map +0 -1
- package/dist/types/project.d.ts +0 -56
- package/dist/types/project.d.ts.map +0 -1
- package/dist/types/project.js +0 -5
- package/dist/types/project.js.map +0 -1
- package/dist/types/requirement.d.ts +0 -69
- package/dist/types/requirement.d.ts.map +0 -1
- package/dist/types/requirement.js +0 -5
- package/dist/types/requirement.js.map +0 -1
- package/dist/types/task.d.ts +0 -44
- package/dist/types/task.d.ts.map +0 -1
- package/dist/types/task.js +0 -5
- package/dist/types/task.js.map +0 -1
- package/dist/utils/axios-retry.d.ts +0 -25
- package/dist/utils/axios-retry.d.ts.map +0 -1
- package/dist/utils/axios-retry.js +0 -174
- package/dist/utils/axios-retry.js.map +0 -1
- package/dist/utils/axios-with-auth.d.ts +0 -10
- package/dist/utils/axios-with-auth.d.ts.map +0 -1
- package/dist/utils/axios-with-auth.js +0 -118
- package/dist/utils/axios-with-auth.js.map +0 -1
- package/dist/utils/cli-tools.d.ts +0 -30
- package/dist/utils/cli-tools.d.ts.map +0 -1
- package/dist/utils/cli-tools.js +0 -199
- package/dist/utils/cli-tools.js.map +0 -1
- package/dist/utils/command-execution.d.ts +0 -30
- package/dist/utils/command-execution.d.ts.map +0 -1
- package/dist/utils/command-execution.js +0 -264
- package/dist/utils/command-execution.js.map +0 -1
- package/dist/utils/command-parser.d.ts +0 -85
- package/dist/utils/command-parser.d.ts.map +0 -1
- package/dist/utils/command-parser.js +0 -287
- package/dist/utils/command-parser.js.map +0 -1
- package/dist/utils/config.d.ts +0 -10
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -77
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -17
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -115
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/formatting.d.ts +0 -10
- package/dist/utils/formatting.d.ts.map +0 -1
- package/dist/utils/formatting.js +0 -122
- package/dist/utils/formatting.js.map +0 -1
- package/dist/utils/gh-installer.d.ts +0 -31
- package/dist/utils/gh-installer.d.ts.map +0 -1
- package/dist/utils/gh-installer.js +0 -296
- package/dist/utils/gh-installer.js.map +0 -1
- package/dist/utils/git-installer.d.ts +0 -31
- package/dist/utils/git-installer.d.ts.map +0 -1
- package/dist/utils/git-installer.js +0 -290
- package/dist/utils/git-installer.js.map +0 -1
- package/dist/utils/git.d.ts +0 -60
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js +0 -144
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/github-repo.d.ts +0 -43
- package/dist/utils/github-repo.d.ts.map +0 -1
- package/dist/utils/github-repo.js +0 -113
- package/dist/utils/github-repo.js.map +0 -1
- package/dist/utils/id-normalization.d.ts +0 -26
- package/dist/utils/id-normalization.d.ts.map +0 -1
- package/dist/utils/id-normalization.js +0 -45
- package/dist/utils/id-normalization.js.map +0 -1
- package/dist/utils/jwt.d.ts +0 -45
- package/dist/utils/jwt.d.ts.map +0 -1
- package/dist/utils/jwt.js +0 -64
- package/dist/utils/jwt.js.map +0 -1
- package/dist/utils/local-store.d.ts +0 -36
- package/dist/utils/local-store.d.ts.map +0 -1
- package/dist/utils/local-store.js +0 -94
- package/dist/utils/local-store.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -176
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/package-manager-installer.d.ts +0 -36
- package/dist/utils/package-manager-installer.d.ts.map +0 -1
- package/dist/utils/package-manager-installer.js +0 -106
- package/dist/utils/package-manager-installer.js.map +0 -1
- package/dist/utils/package-manager.d.ts +0 -31
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js +0 -133
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/projects.d.ts +0 -23
- package/dist/utils/projects.d.ts.map +0 -1
- package/dist/utils/projects.js +0 -36
- package/dist/utils/projects.js.map +0 -1
- package/dist/utils/repository-access.d.ts +0 -89
- package/dist/utils/repository-access.d.ts.map +0 -1
- package/dist/utils/repository-access.js +0 -132
- package/dist/utils/repository-access.js.map +0 -1
- package/dist/utils/requirements.d.ts +0 -43
- package/dist/utils/requirements.d.ts.map +0 -1
- package/dist/utils/requirements.js +0 -79
- package/dist/utils/requirements.js.map +0 -1
- package/dist/utils/spinner.d.ts +0 -47
- package/dist/utils/spinner.d.ts.map +0 -1
- package/dist/utils/spinner.js +0 -101
- package/dist/utils/spinner.js.map +0 -1
- package/dist/utils/status-parser.d.ts +0 -95
- package/dist/utils/status-parser.d.ts.map +0 -1
- package/dist/utils/status-parser.js +0 -205
- package/dist/utils/status-parser.js.map +0 -1
- package/dist/utils/tasks.d.ts +0 -21
- package/dist/utils/tasks.d.ts.map +0 -1
- package/dist/utils/tasks.js +0 -63
- package/dist/utils/tasks.js.map +0 -1
- package/dist/utils/workspace-manager.d.ts +0 -65
- package/dist/utils/workspace-manager.d.ts.map +0 -1
- package/dist/utils/workspace-manager.js +0 -98
- package/dist/utils/workspace-manager.js.map +0 -1
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Requirement Types from OpenAPI Specification
|
|
3
|
-
*/
|
|
4
|
-
export type RequirementStatus = 'IDEA' | 'PLANNED' | 'IN_PROGRESS' | 'REVIEW' | 'COMPLETED' | 'CANCELLED';
|
|
5
|
-
export interface Requirement {
|
|
6
|
-
id: string;
|
|
7
|
-
short_id?: string;
|
|
8
|
-
name: string;
|
|
9
|
-
description?: string | null;
|
|
10
|
-
status: RequirementStatus;
|
|
11
|
-
assigned_to?: string | null;
|
|
12
|
-
assignee?: {
|
|
13
|
-
id: string;
|
|
14
|
-
first_name: string;
|
|
15
|
-
last_name: string;
|
|
16
|
-
email: string;
|
|
17
|
-
} | null;
|
|
18
|
-
task_progress?: {
|
|
19
|
-
total: number;
|
|
20
|
-
completed: number;
|
|
21
|
-
progress_percentage: number;
|
|
22
|
-
} | null;
|
|
23
|
-
complexity?: number;
|
|
24
|
-
readiness?: number;
|
|
25
|
-
req_id?: number;
|
|
26
|
-
created_at: string;
|
|
27
|
-
updated_at: string;
|
|
28
|
-
}
|
|
29
|
-
export interface RequirementDetail extends Requirement {
|
|
30
|
-
content?: string | null;
|
|
31
|
-
tasks?: RequirementTask[];
|
|
32
|
-
}
|
|
33
|
-
export interface RequirementTask {
|
|
34
|
-
id: string;
|
|
35
|
-
number: number;
|
|
36
|
-
title: string;
|
|
37
|
-
status: RequirementStatus;
|
|
38
|
-
complexity?: number;
|
|
39
|
-
readiness?: number;
|
|
40
|
-
req_id?: number;
|
|
41
|
-
assigned_to?: string | null;
|
|
42
|
-
blocked_by: string[];
|
|
43
|
-
created_at: string;
|
|
44
|
-
updated_at: string;
|
|
45
|
-
started_at?: string | null;
|
|
46
|
-
finished_at?: string | null;
|
|
47
|
-
content?: string;
|
|
48
|
-
requirement_id?: string;
|
|
49
|
-
}
|
|
50
|
-
export interface CreateRequirementRequest {
|
|
51
|
-
prompt: string;
|
|
52
|
-
repositories?: string[];
|
|
53
|
-
return_content?: 0 | 1;
|
|
54
|
-
}
|
|
55
|
-
export interface UpdateRequirementRequest {
|
|
56
|
-
status?: RequirementStatus;
|
|
57
|
-
name?: string;
|
|
58
|
-
description?: string;
|
|
59
|
-
}
|
|
60
|
-
export interface ListRequirementsResponse {
|
|
61
|
-
requirements: Requirement[];
|
|
62
|
-
pagination: {
|
|
63
|
-
page: number;
|
|
64
|
-
limit: number;
|
|
65
|
-
total: number;
|
|
66
|
-
has_more: boolean;
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=requirement.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requirement.d.ts","sourceRoot":"","sources":["../../src/types/requirement.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,iBAAiB,GAC1B,MAAM,GACN,SAAS,GACT,aAAa,GACb,QAAQ,GACR,WAAW,GACX,WAAW,CAAC;AAEf,MAAM,WAAW,WAAW;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,EAAE;QACV,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACd,GAAG,IAAI,CAAC;IACT,aAAa,CAAC,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;KAC5B,GAAG,IAAI,CAAC;IACT,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACrD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACxC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAwB;IACxC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;KAClB,CAAC;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"requirement.js","sourceRoot":"","sources":["../../src/types/requirement.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/types/task.d.ts
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Task Types from OpenAPI Specification
|
|
3
|
-
*/
|
|
4
|
-
export type TaskStatus = 'PLANNED' | 'IN_PROGRESS' | 'COMPLETED' | 'CANCELLED';
|
|
5
|
-
export interface Task {
|
|
6
|
-
id: string;
|
|
7
|
-
number: string;
|
|
8
|
-
title: string;
|
|
9
|
-
content?: string;
|
|
10
|
-
status: TaskStatus;
|
|
11
|
-
complexity: number;
|
|
12
|
-
readiness: number;
|
|
13
|
-
blocked_by: string[];
|
|
14
|
-
started_at?: string;
|
|
15
|
-
finished_at?: string;
|
|
16
|
-
requirement?: {
|
|
17
|
-
id: string;
|
|
18
|
-
title: string;
|
|
19
|
-
status: TaskStatus;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
export interface CreateTaskRequest {
|
|
23
|
-
title: string;
|
|
24
|
-
content?: string;
|
|
25
|
-
complexity?: number;
|
|
26
|
-
readiness?: number;
|
|
27
|
-
}
|
|
28
|
-
export interface UpdateTaskRequest {
|
|
29
|
-
status?: TaskStatus;
|
|
30
|
-
title?: string;
|
|
31
|
-
content?: string;
|
|
32
|
-
complexity?: number;
|
|
33
|
-
readiness?: number;
|
|
34
|
-
}
|
|
35
|
-
export interface ListTasksResponse {
|
|
36
|
-
tasks: Task[];
|
|
37
|
-
pagination: {
|
|
38
|
-
page: number;
|
|
39
|
-
limit: number;
|
|
40
|
-
total: number;
|
|
41
|
-
has_more: boolean;
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=task.d.ts.map
|
package/dist/types/task.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC;AAE/E,MAAM,WAAW,IAAI;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,UAAU,CAAC;KACnB,CAAC;CACF;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,UAAU,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;KAClB,CAAC;CACF"}
|
package/dist/types/task.js
DELETED
package/dist/types/task.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/types/task.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
|
-
export interface RetryOptions {
|
|
3
|
-
maxRetries?: number;
|
|
4
|
-
initialDelay?: number;
|
|
5
|
-
maxDelay?: number;
|
|
6
|
-
backoffMultiplier?: number;
|
|
7
|
-
retryableStatuses?: number[];
|
|
8
|
-
onRetry?: (attempt: number, delay: number, error: unknown) => void;
|
|
9
|
-
}
|
|
10
|
-
export declare function sleep(ms: number): Promise<void>;
|
|
11
|
-
export declare function calculateDelay(attempt: number, initialDelay: number, maxDelay: number, backoffMultiplier: number): number;
|
|
12
|
-
export declare function isRetryableError(error: unknown, retryableStatuses: number[]): boolean;
|
|
13
|
-
export declare const axiosInstance: AxiosInstance;
|
|
14
|
-
export declare function axiosWithRetry<T = unknown>(config: AxiosRequestConfig, options?: RetryOptions): Promise<AxiosResponse<T>>;
|
|
15
|
-
export declare class RetryableHttpClient {
|
|
16
|
-
private defaultOptions;
|
|
17
|
-
constructor(defaultOptions?: RetryOptions);
|
|
18
|
-
get<T = unknown>(url: string, config?: AxiosRequestConfig, options?: RetryOptions): Promise<AxiosResponse<T>>;
|
|
19
|
-
post<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig, options?: RetryOptions): Promise<AxiosResponse<T>>;
|
|
20
|
-
patch<T = unknown>(url: string, data?: unknown, config?: AxiosRequestConfig, options?: RetryOptions): Promise<AxiosResponse<T>>;
|
|
21
|
-
delete<T = unknown>(url: string, config?: AxiosRequestConfig, options?: RetryOptions): Promise<AxiosResponse<T>>;
|
|
22
|
-
}
|
|
23
|
-
export declare const retryableHttpClient: RetryableHttpClient;
|
|
24
|
-
export declare function createAxiosConfig(init?: RequestInit): AxiosRequestConfig;
|
|
25
|
-
//# sourceMappingURL=axios-retry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axios-retry.d.ts","sourceRoot":"","sources":["../../src/utils/axios-retry.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEhF,MAAM,WAAW,YAAY;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACnE;AAWD,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;AAED,wBAAgB,cAAc,CAC7B,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACvB,MAAM,CAIR;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,OAAO,CAmCrF;AAGD,eAAO,MAAM,aAAa,EAAE,aAO1B,CAAC;AAEH,wBAAsB,cAAc,CAAC,CAAC,GAAG,OAAO,EAC/C,MAAM,EAAE,kBAAkB,EAC1B,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CA8C3B;AAGD,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,cAAc,CAAe;gBAEzB,cAAc,CAAC,EAAE,YAAY;IAInC,GAAG,CAAC,CAAC,GAAG,OAAO,EACpB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAOtB,IAAI,CAAC,CAAC,GAAG,OAAO,EACrB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAgBtB,KAAK,CAAC,CAAC,GAAG,OAAO,EACtB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAgBtB,MAAM,CAAC,CAAC,GAAG,OAAO,EACvB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,kBAAkB,EAC3B,OAAO,CAAC,EAAE,YAAY,GACpB,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CAM5B;AAGD,eAAO,MAAM,mBAAmB,qBAK9B,CAAC;AAGH,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,kBAAkB,CAwCxE"}
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
const DEFAULT_OPTIONS = {
|
|
3
|
-
maxRetries: 3,
|
|
4
|
-
initialDelay: 1000, // 1 second
|
|
5
|
-
maxDelay: 30000, // 30 seconds
|
|
6
|
-
backoffMultiplier: 2,
|
|
7
|
-
retryableStatuses: [408, 429, 500, 502, 503, 504], // Timeout, Too Many Requests, Server Errors
|
|
8
|
-
onRetry: () => { }, // No-op by default
|
|
9
|
-
};
|
|
10
|
-
export async function sleep(ms) {
|
|
11
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
12
|
-
}
|
|
13
|
-
export function calculateDelay(attempt, initialDelay, maxDelay, backoffMultiplier) {
|
|
14
|
-
const exponentialDelay = initialDelay * Math.pow(backoffMultiplier, attempt - 1);
|
|
15
|
-
const jitteredDelay = exponentialDelay * (0.5 + Math.random() * 0.5); // Add jitter
|
|
16
|
-
return Math.min(jitteredDelay, maxDelay);
|
|
17
|
-
}
|
|
18
|
-
export function isRetryableError(error, retryableStatuses) {
|
|
19
|
-
// Type guard to check if error has expected properties
|
|
20
|
-
const hasErrorCode = (err) => typeof err === 'object' && err !== null && 'code' in err;
|
|
21
|
-
const hasErrorMessage = (err) => typeof err === 'object' && err !== null;
|
|
22
|
-
const hasResponseStatus = (err) => typeof err === 'object' && err !== null && 'response' in err;
|
|
23
|
-
// Network errors are always retryable
|
|
24
|
-
if (hasErrorCode(error)) {
|
|
25
|
-
if (error.code === 'ECONNRESET' ||
|
|
26
|
-
error.code === 'ETIMEDOUT' ||
|
|
27
|
-
error.code === 'ENOTFOUND' ||
|
|
28
|
-
error.code === 'ECONNREFUSED' ||
|
|
29
|
-
error.code === 'ECONNABORTED') {
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
if (hasErrorMessage(error) && error.message) {
|
|
34
|
-
if (error.message.includes('network') || error.message.includes('Network')) {
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Check if it's an HTTP error with a retryable status
|
|
39
|
-
if (hasResponseStatus(error) && error.response?.status) {
|
|
40
|
-
if (retryableStatuses.includes(error.response.status)) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return false;
|
|
45
|
-
}
|
|
46
|
-
// Create axios instance with default config
|
|
47
|
-
export const axiosInstance = axios.create({
|
|
48
|
-
timeout: 120000, // 2 minutes default timeout
|
|
49
|
-
headers: {
|
|
50
|
-
'User-Agent': 'Braingrid-CLI',
|
|
51
|
-
},
|
|
52
|
-
// Don't throw on any status to handle errors ourselves
|
|
53
|
-
validateStatus: () => true,
|
|
54
|
-
});
|
|
55
|
-
export async function axiosWithRetry(config, options) {
|
|
56
|
-
const opts = { ...DEFAULT_OPTIONS, ...options };
|
|
57
|
-
let lastError;
|
|
58
|
-
for (let attempt = 1; attempt <= opts.maxRetries + 1; attempt++) {
|
|
59
|
-
try {
|
|
60
|
-
const response = await axiosInstance.request(config);
|
|
61
|
-
// Check if the response status is retryable
|
|
62
|
-
if (response.status >= 400 &&
|
|
63
|
-
opts.retryableStatuses.includes(response.status) &&
|
|
64
|
-
attempt <= opts.maxRetries) {
|
|
65
|
-
const error = new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
66
|
-
error.response = response;
|
|
67
|
-
error.status = response.status;
|
|
68
|
-
throw error;
|
|
69
|
-
}
|
|
70
|
-
return response;
|
|
71
|
-
}
|
|
72
|
-
catch (error) {
|
|
73
|
-
lastError = error;
|
|
74
|
-
// Check if we should retry
|
|
75
|
-
if (attempt <= opts.maxRetries && isRetryableError(error, opts.retryableStatuses)) {
|
|
76
|
-
const delay = calculateDelay(attempt, opts.initialDelay, opts.maxDelay, opts.backoffMultiplier);
|
|
77
|
-
opts.onRetry(attempt, delay, error);
|
|
78
|
-
await sleep(delay);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
// If not retryable or max retries exceeded, throw the error
|
|
82
|
-
throw error;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
// This should never be reached, but just in case
|
|
86
|
-
throw lastError || new Error('Unexpected error in axiosWithRetry');
|
|
87
|
-
}
|
|
88
|
-
// Enhanced wrapper for common use cases
|
|
89
|
-
export class RetryableHttpClient {
|
|
90
|
-
constructor(defaultOptions) {
|
|
91
|
-
this.defaultOptions = defaultOptions || {};
|
|
92
|
-
}
|
|
93
|
-
async get(url, config, options) {
|
|
94
|
-
return axiosWithRetry({ ...config, method: 'GET', url }, { ...this.defaultOptions, ...options });
|
|
95
|
-
}
|
|
96
|
-
async post(url, data, config, options) {
|
|
97
|
-
return axiosWithRetry({
|
|
98
|
-
...config,
|
|
99
|
-
method: 'POST',
|
|
100
|
-
url,
|
|
101
|
-
data,
|
|
102
|
-
headers: {
|
|
103
|
-
'Content-Type': 'application/json',
|
|
104
|
-
...config?.headers,
|
|
105
|
-
},
|
|
106
|
-
}, { ...this.defaultOptions, ...options });
|
|
107
|
-
}
|
|
108
|
-
async patch(url, data, config, options) {
|
|
109
|
-
return axiosWithRetry({
|
|
110
|
-
...config,
|
|
111
|
-
method: 'PATCH',
|
|
112
|
-
url,
|
|
113
|
-
data,
|
|
114
|
-
headers: {
|
|
115
|
-
'Content-Type': 'application/json',
|
|
116
|
-
...config?.headers,
|
|
117
|
-
},
|
|
118
|
-
}, { ...this.defaultOptions, ...options });
|
|
119
|
-
}
|
|
120
|
-
async delete(url, config, options) {
|
|
121
|
-
return axiosWithRetry({ ...config, method: 'DELETE', url }, { ...this.defaultOptions, ...options });
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
// Export a default instance for convenience
|
|
125
|
-
export const retryableHttpClient = new RetryableHttpClient({
|
|
126
|
-
onRetry: (attempt, delay, error) => {
|
|
127
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
128
|
-
console.warn(`Retry attempt ${attempt} after ${delay}ms due to:`, errorMessage);
|
|
129
|
-
},
|
|
130
|
-
});
|
|
131
|
-
// Helper function to convert headers for cookie support
|
|
132
|
-
export function createAxiosConfig(init) {
|
|
133
|
-
const config = {};
|
|
134
|
-
if (init) {
|
|
135
|
-
// Convert method
|
|
136
|
-
if (init.method)
|
|
137
|
-
config.method = init.method;
|
|
138
|
-
// Convert headers
|
|
139
|
-
if (init.headers) {
|
|
140
|
-
const headers = {};
|
|
141
|
-
if (init.headers instanceof Headers) {
|
|
142
|
-
init.headers.forEach((value, key) => {
|
|
143
|
-
headers[key] = value;
|
|
144
|
-
});
|
|
145
|
-
config.headers = headers;
|
|
146
|
-
}
|
|
147
|
-
else if (Array.isArray(init.headers)) {
|
|
148
|
-
init.headers.forEach(([key, value]) => {
|
|
149
|
-
headers[key] = value;
|
|
150
|
-
});
|
|
151
|
-
config.headers = headers;
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
config.headers = init.headers;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
// Convert body to data
|
|
158
|
-
if (init.body) {
|
|
159
|
-
if (typeof init.body === 'string') {
|
|
160
|
-
try {
|
|
161
|
-
config.data = JSON.parse(init.body);
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
config.data = init.body;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
else {
|
|
168
|
-
config.data = init.body;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return config;
|
|
173
|
-
}
|
|
174
|
-
//# sourceMappingURL=axios-retry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axios-retry.js","sourceRoot":"","sources":["../../src/utils/axios-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Axios instance with authentication and automatic token refresh
|
|
3
|
-
*/
|
|
4
|
-
import { AxiosInstance } from 'axios';
|
|
5
|
-
import { BraingridAuth } from '../services/auth.js';
|
|
6
|
-
/**
|
|
7
|
-
* Create an axios instance with automatic token refresh on 401 errors and auth redirects
|
|
8
|
-
*/
|
|
9
|
-
export declare function createAuthenticatedAxios(auth: BraingridAuth): AxiosInstance;
|
|
10
|
-
//# sourceMappingURL=axios-with-auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axios-with-auth.d.ts","sourceRoot":"","sources":["../../src/utils/axios-with-auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAc,EAAE,aAAa,EAA0C,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA+BpD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CA2G3E"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Axios instance with authentication and automatic token refresh
|
|
3
|
-
*/
|
|
4
|
-
import axios from 'axios';
|
|
5
|
-
import { getLogger } from './logger.js';
|
|
6
|
-
const logger = getLogger();
|
|
7
|
-
/**
|
|
8
|
-
* Check if a response is a redirect to an auth endpoint
|
|
9
|
-
*/
|
|
10
|
-
function isAuthRedirect(error) {
|
|
11
|
-
const status = error.response?.status;
|
|
12
|
-
if (!status || (status !== 302 && status !== 307 && status !== 303)) {
|
|
13
|
-
return false;
|
|
14
|
-
}
|
|
15
|
-
const location = error.response?.headers?.location;
|
|
16
|
-
if (!location) {
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
// Check if redirecting to auth endpoints (WorkOS, AuthKit, etc.)
|
|
20
|
-
const authPatterns = [
|
|
21
|
-
'/auth/',
|
|
22
|
-
'/oauth2/',
|
|
23
|
-
'workos.com',
|
|
24
|
-
'authkit.app',
|
|
25
|
-
'/user_management/authorize',
|
|
26
|
-
];
|
|
27
|
-
return authPatterns.some(pattern => location.toLowerCase().includes(pattern));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Create an axios instance with automatic token refresh on 401 errors and auth redirects
|
|
31
|
-
*/
|
|
32
|
-
export function createAuthenticatedAxios(auth) {
|
|
33
|
-
const instance = axios.create({
|
|
34
|
-
maxRedirects: 0, // Don't follow redirects - treat them as errors
|
|
35
|
-
validateStatus: status => status >= 200 && status < 300, // Only accept 2xx as success
|
|
36
|
-
});
|
|
37
|
-
// Request interceptor to add auth headers
|
|
38
|
-
instance.interceptors.request.use(async (config) => {
|
|
39
|
-
const session = await auth.getStoredSession();
|
|
40
|
-
if (session) {
|
|
41
|
-
config.headers.Authorization = `Bearer ${session.sealed_session}`;
|
|
42
|
-
}
|
|
43
|
-
return config;
|
|
44
|
-
}, error => Promise.reject(error));
|
|
45
|
-
// Response interceptor to handle 401 errors, auth redirects, and refresh token
|
|
46
|
-
instance.interceptors.response.use(response => {
|
|
47
|
-
// Log successful API calls for debugging/testing
|
|
48
|
-
const method = response.config.method?.toUpperCase() || 'UNKNOWN';
|
|
49
|
-
const url = response.config.url || 'unknown';
|
|
50
|
-
const status = response.status;
|
|
51
|
-
logger.debug(`[API] ${method} ${url} -> ${status}`);
|
|
52
|
-
return response;
|
|
53
|
-
}, async (error) => {
|
|
54
|
-
const originalRequest = error.config;
|
|
55
|
-
// Log API error details for debugging/testing
|
|
56
|
-
const method = error.config?.method?.toUpperCase() || 'UNKNOWN';
|
|
57
|
-
const url = error.config?.url || 'unknown';
|
|
58
|
-
const status = error.response?.status || 'NO_RESPONSE';
|
|
59
|
-
// Extract request params (query params or request body)
|
|
60
|
-
let params = '';
|
|
61
|
-
if (error.config?.params) {
|
|
62
|
-
params = JSON.stringify(error.config.params);
|
|
63
|
-
}
|
|
64
|
-
else if (error.config?.data) {
|
|
65
|
-
try {
|
|
66
|
-
const data = typeof error.config.data === 'string'
|
|
67
|
-
? JSON.parse(error.config.data)
|
|
68
|
-
: error.config.data;
|
|
69
|
-
// Truncate long prompts for readability
|
|
70
|
-
if (data.prompt && data.prompt.length > 100) {
|
|
71
|
-
data.prompt = data.prompt.substring(0, 100) + '...';
|
|
72
|
-
}
|
|
73
|
-
params = JSON.stringify(data);
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
params = String(error.config.data).substring(0, 200);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
logger.debug(`[API] ${method} ${url} -> ${status}`, { params });
|
|
80
|
-
// Check if this is an auth failure (401 or redirect to auth)
|
|
81
|
-
const is401 = error.response?.status === 401;
|
|
82
|
-
const isRedirectToAuth = isAuthRedirect(error);
|
|
83
|
-
// If auth failure and we haven't retried yet, attempt token refresh
|
|
84
|
-
if ((is401 || isRedirectToAuth) && !originalRequest._retry) {
|
|
85
|
-
originalRequest._retry = true;
|
|
86
|
-
if (isRedirectToAuth) {
|
|
87
|
-
logger.debug('[AUTH] Received redirect to auth endpoint - token likely expired');
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
logger.debug('[AUTH] Received 401 error - attempting token refresh');
|
|
91
|
-
}
|
|
92
|
-
// Attempt to refresh the token
|
|
93
|
-
const refreshed = await auth.refreshSession();
|
|
94
|
-
if (refreshed) {
|
|
95
|
-
logger.debug('[AUTH] Token refreshed - retrying request');
|
|
96
|
-
// Get the new session and update the request headers
|
|
97
|
-
const session = await auth.getStoredSession();
|
|
98
|
-
if (session && originalRequest.headers) {
|
|
99
|
-
originalRequest.headers.Authorization = `Bearer ${session.sealed_session}`;
|
|
100
|
-
}
|
|
101
|
-
// Retry the original request with the new token
|
|
102
|
-
return instance(originalRequest);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
logger.warn('[AUTH] Token refresh failed - clearing session');
|
|
106
|
-
// Refresh failed, clear the session
|
|
107
|
-
await auth.clearSession();
|
|
108
|
-
// Return a more user-friendly error
|
|
109
|
-
const authError = new Error('Authentication expired. Please run "braingrid login" to re-authenticate.');
|
|
110
|
-
return Promise.reject(authError);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
// For all other errors or if retry already happened, just reject
|
|
114
|
-
return Promise.reject(error);
|
|
115
|
-
});
|
|
116
|
-
return instance;
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=axios-with-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axios-with-auth.js","sourceRoot":"","sources":["../../src/utils/axios-with-auth.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAgE,MAAM,OAAO,CAAC;AAErF,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAE3B;;GAEG;AACH,SAAS,cAAc,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC;IACtC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAA8B,CAAC;IACzE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACd,CAAC;IAED,iEAAiE;IACjE,MAAM,YAAY,GAAG;QACpB,QAAQ;QACR,UAAU;QACV,YAAY;QACZ,aAAa;QACb,4BAA4B;KAC5B,CAAC;IAEF,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAmB;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC;QAC7B,YAAY,EAAE,CAAC,EAAE,gDAAgD;QACjE,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,6BAA6B;KACtF,CAAC,CAAC;IAEH,0CAA0C;IAC1C,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAChC,KAAK,EAAC,MAAM,EAAC,EAAE;QACd,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,OAAO,CAAC,cAAc,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC,EACD,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAC9B,CAAC;IAEF,+EAA+E;IAC/E,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACjC,QAAQ,CAAC,EAAE;QACV,iDAAiD;QACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;QAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,SAAS,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE/B,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,CAAC,CAAC;QAEpD,OAAO,QAAQ,CAAC;IACjB,CAAC,EACD,KAAK,EAAE,KAAiB,EAAE,EAAE;QAC3B,MAAM,eAAe,GAAG,KAAK,CAAC,MAA2D,CAAC;QAE1F,8CAA8C;QAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,SAAS,CAAC;QAChE,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,aAAa,CAAC;QAEvD,wDAAwD;QACxD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC1B,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACJ,MAAM,IAAI,GACT,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;oBACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;oBAC/B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;gBACtB,wCAAwC;gBACxC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;gBACrD,CAAC;gBACD,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACR,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACtD,CAAC;QACF,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAEhE,6DAA6D;QAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;QAC7C,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;QAE/C,oEAAoE;QACpE,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YAC5D,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC;YAE9B,IAAI,gBAAgB,EAAE,CAAC;gBACtB,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;YACtE,CAAC;YAED,+BAA+B;YAC/B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE9C,IAAI,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAE1D,qDAAqD;gBACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC9C,IAAI,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;oBACxC,eAAe,CAAC,OAAO,CAAC,aAAa,GAAG,UAAU,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5E,CAAC;gBAED,gDAAgD;gBAChD,OAAO,QAAQ,CAAC,eAAe,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;gBAC9D,oCAAoC;gBACpC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;gBAE1B,oCAAoC;gBACpC,MAAM,SAAS,GAAG,IAAI,KAAK,CAC1B,0EAA0E,CAC1E,CAAC;gBACF,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACF,CAAC;QAED,iEAAiE;QACjE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC,CACD,CAAC;IAEF,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CLI Tools Detection Utilities
|
|
3
|
-
*
|
|
4
|
-
* Detects installed AI coding tools and CLI utilities:
|
|
5
|
-
* - Checks if common AI IDE CLIs are installed
|
|
6
|
-
* - Gets version information where available
|
|
7
|
-
* - Cross-platform support (macOS, Linux, Windows)
|
|
8
|
-
*/
|
|
9
|
-
export interface CliToolInfo {
|
|
10
|
-
name: string;
|
|
11
|
-
command: string;
|
|
12
|
-
installed: boolean;
|
|
13
|
-
version?: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Check if a CLI command is installed
|
|
17
|
-
* Uses user's shell to access PATH (supports shell-installed CLIs)
|
|
18
|
-
*/
|
|
19
|
-
export declare function isCliInstalled(command: string): Promise<boolean>;
|
|
20
|
-
/**
|
|
21
|
-
* Get the version of a CLI tool
|
|
22
|
-
* Returns null if version cannot be determined
|
|
23
|
-
*/
|
|
24
|
-
export declare function getCliVersion(command: string, versionFlag?: string, parser?: (output: string) => string | null): Promise<string | null>;
|
|
25
|
-
/**
|
|
26
|
-
* Check all configured CLI tools in parallel
|
|
27
|
-
* Returns array of CLI tool information
|
|
28
|
-
*/
|
|
29
|
-
export declare function checkInstalledCliTools(): Promise<CliToolInfo[]>;
|
|
30
|
-
//# sourceMappingURL=cli-tools.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli-tools.d.ts","sourceRoot":"","sources":["../../src/utils/cli-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAsGD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYtE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAClC,OAAO,EAAE,MAAM,EACf,WAAW,GAAE,MAAoB,EACjC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACxC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBxB;AA6CD;;;GAGG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAarE"}
|