@kodus/cli 0.4.7 → 0.4.9
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/README.md +77 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +1 -5
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +10 -71
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/hook/install.d.ts +1 -1
- package/dist/commands/hook/install.d.ts.map +1 -1
- package/dist/commands/hook/uninstall.d.ts +1 -1
- package/dist/commands/hook/uninstall.d.ts.map +1 -1
- package/dist/commands/memory/disable.d.ts +1 -1
- package/dist/commands/memory/disable.d.ts.map +1 -1
- package/dist/commands/pr.d.ts +1 -2
- package/dist/commands/pr.d.ts.map +1 -1
- package/dist/commands/pr.js +1 -243
- package/dist/commands/pr.js.map +1 -1
- package/dist/commands/review.d.ts +1 -2
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +1 -314
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -14
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/update.d.ts +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +24 -1
- package/dist/commands/update.js.map +1 -1
- package/dist/features/pr/command.d.ts +4 -0
- package/dist/features/pr/command.d.ts.map +1 -0
- package/dist/features/pr/command.js +222 -0
- package/dist/features/pr/command.js.map +1 -0
- package/dist/features/repo-config/actions.d.ts +33 -0
- package/dist/features/repo-config/actions.d.ts.map +1 -0
- package/dist/features/repo-config/actions.js +260 -0
- package/dist/features/repo-config/actions.js.map +1 -0
- package/dist/features/repo-config/command.d.ts +15 -0
- package/dist/features/repo-config/command.d.ts.map +1 -0
- package/dist/features/repo-config/command.js +135 -0
- package/dist/features/repo-config/command.js.map +1 -0
- package/dist/features/review/command.d.ts +4 -0
- package/dist/features/review/command.d.ts.map +1 -0
- package/dist/features/review/command.js +248 -0
- package/dist/features/review/command.js.map +1 -0
- package/dist/features/review/diff.d.ts +23 -0
- package/dist/features/review/diff.d.ts.map +1 -0
- package/dist/features/review/diff.js +47 -0
- package/dist/features/review/diff.js.map +1 -0
- package/dist/features/review/errors.d.ts +3 -0
- package/dist/features/review/errors.d.ts.map +1 -0
- package/dist/features/review/errors.js +26 -0
- package/dist/features/review/errors.js.map +1 -0
- package/dist/features/review/no-changes.d.ts +6 -0
- package/dist/features/review/no-changes.d.ts.map +1 -0
- package/dist/features/review/no-changes.js +31 -0
- package/dist/features/review/no-changes.js.map +1 -0
- package/dist/features/review/options.d.ts +7 -0
- package/dist/features/review/options.d.ts.map +1 -0
- package/dist/features/review/options.js +18 -0
- package/dist/features/review/options.js.map +1 -0
- package/dist/features/review/result.d.ts +11 -0
- package/dist/features/review/result.d.ts.map +1 -0
- package/dist/features/review/result.js +49 -0
- package/dist/features/review/result.js.map +1 -0
- package/dist/formatters/json.d.ts +1 -1
- package/dist/formatters/json.d.ts.map +1 -1
- package/dist/formatters/markdown.d.ts +1 -1
- package/dist/formatters/markdown.d.ts.map +1 -1
- package/dist/formatters/markdown.js.map +1 -1
- package/dist/formatters/prompt.d.ts +1 -1
- package/dist/formatters/prompt.d.ts.map +1 -1
- package/dist/formatters/repo-config.d.ts +7 -0
- package/dist/formatters/repo-config.d.ts.map +1 -0
- package/dist/formatters/repo-config.js +99 -0
- package/dist/formatters/repo-config.js.map +1 -0
- package/dist/formatters/terminal.d.ts +1 -1
- package/dist/formatters/terminal.d.ts.map +1 -1
- package/dist/formatters/terminal.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/api/api-core.d.ts +15 -0
- package/dist/services/api/api-core.d.ts.map +1 -0
- package/dist/services/api/api-core.js +292 -0
- package/dist/services/api/api-core.js.map +1 -0
- package/dist/services/api/api.interface.d.ts +16 -1
- package/dist/services/api/api.interface.d.ts.map +1 -1
- package/dist/services/api/api.real.d.ts +12 -20
- package/dist/services/api/api.real.d.ts.map +1 -1
- package/dist/services/api/api.real.js +8 -545
- package/dist/services/api/api.real.js.map +1 -1
- package/dist/services/api/auth.api.d.ts +17 -0
- package/dist/services/api/auth.api.d.ts.map +1 -0
- package/dist/services/api/auth.api.js +73 -0
- package/dist/services/api/auth.api.js.map +1 -0
- package/dist/services/api/config.api.d.ts +24 -0
- package/dist/services/api/config.api.d.ts.map +1 -0
- package/dist/services/api/config.api.js +78 -0
- package/dist/services/api/config.api.js.map +1 -0
- package/dist/services/api/memory.api.d.ts +10 -0
- package/dist/services/api/memory.api.d.ts.map +1 -0
- package/dist/services/api/memory.api.js +19 -0
- package/dist/services/api/memory.api.js.map +1 -0
- package/dist/services/api/review.api.d.ts +26 -0
- package/dist/services/api/review.api.d.ts.map +1 -0
- package/dist/services/api/review.api.js +117 -0
- package/dist/services/api/review.api.js.map +1 -0
- package/dist/services/api/sessions.api.js +1 -1
- package/dist/services/api/sessions.api.js.map +1 -1
- package/dist/services/api/trial.api.d.ts +10 -0
- package/dist/services/api/trial.api.d.ts.map +1 -0
- package/dist/services/api/trial.api.js +11 -0
- package/dist/services/api/trial.api.js.map +1 -0
- package/dist/services/auth.service.d.ts +1 -1
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +1 -1
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/context.service.d.ts +1 -1
- package/dist/services/context.service.d.ts.map +1 -1
- package/dist/services/fix.service.d.ts +1 -1
- package/dist/services/fix.service.d.ts.map +1 -1
- package/dist/services/git.service.d.ts +2 -2
- package/dist/services/git.service.d.ts.map +1 -1
- package/dist/services/git.service.js +25 -172
- package/dist/services/git.service.js.map +1 -1
- package/dist/services/lifecycle-events.d.ts +49 -0
- package/dist/services/lifecycle-events.d.ts.map +1 -0
- package/dist/services/lifecycle-events.js +86 -0
- package/dist/services/lifecycle-events.js.map +1 -0
- package/dist/services/lifecycle-git-context.d.ts +15 -0
- package/dist/services/lifecycle-git-context.d.ts.map +1 -0
- package/dist/services/lifecycle-git-context.js +23 -0
- package/dist/services/lifecycle-git-context.js.map +1 -0
- package/dist/services/lifecycle-local-turn-state.d.ts +14 -0
- package/dist/services/lifecycle-local-turn-state.d.ts.map +1 -0
- package/dist/services/lifecycle-local-turn-state.js +18 -0
- package/dist/services/lifecycle-local-turn-state.js.map +1 -0
- package/dist/services/lifecycle-transcript.d.ts +25 -0
- package/dist/services/lifecycle-transcript.d.ts.map +1 -0
- package/dist/services/lifecycle-transcript.js +29 -0
- package/dist/services/lifecycle-transcript.js.map +1 -0
- package/dist/services/lifecycle-turn-data.d.ts +11 -0
- package/dist/services/lifecycle-turn-data.d.ts.map +1 -0
- package/dist/services/lifecycle-turn-data.js +23 -0
- package/dist/services/lifecycle-turn-data.js.map +1 -0
- package/dist/services/lifecycle.service.d.ts.map +1 -1
- package/dist/services/lifecycle.service.js +63 -132
- package/dist/services/lifecycle.service.js.map +1 -1
- package/dist/services/repo-config.service.d.ts.map +1 -1
- package/dist/services/repo-config.service.js +2 -8
- package/dist/services/repo-config.service.js.map +1 -1
- package/dist/services/repo-settings-wizard.service.d.ts +19 -0
- package/dist/services/repo-settings-wizard.service.d.ts.map +1 -0
- package/dist/services/repo-settings-wizard.service.js +260 -0
- package/dist/services/repo-settings-wizard.service.js.map +1 -0
- package/dist/services/repo-settings.service.d.ts +20 -0
- package/dist/services/repo-settings.service.d.ts.map +1 -0
- package/dist/services/repo-settings.service.js +86 -0
- package/dist/services/repo-settings.service.js.map +1 -0
- package/dist/services/review-auth-fallback.d.ts +7 -0
- package/dist/services/review-auth-fallback.d.ts.map +1 -0
- package/dist/services/review-auth-fallback.js +25 -0
- package/dist/services/review-auth-fallback.js.map +1 -0
- package/dist/services/review-config-builder.d.ts +19 -0
- package/dist/services/review-config-builder.d.ts.map +1 -0
- package/dist/services/review-config-builder.js +17 -0
- package/dist/services/review-config-builder.js.map +1 -0
- package/dist/services/review-file-filter.d.ts +3 -0
- package/dist/services/review-file-filter.d.ts.map +1 -0
- package/dist/services/review-file-filter.js +35 -0
- package/dist/services/review-file-filter.js.map +1 -0
- package/dist/services/review-normalizer.d.ts +6 -0
- package/dist/services/review-normalizer.d.ts.map +1 -0
- package/dist/services/review-normalizer.js +62 -0
- package/dist/services/review-normalizer.js.map +1 -0
- package/dist/services/review-verbose.d.ts +28 -0
- package/dist/services/review-verbose.d.ts.map +1 -0
- package/dist/services/review-verbose.js +52 -0
- package/dist/services/review-verbose.js.map +1 -0
- package/dist/services/review.service.d.ts +1 -5
- package/dist/services/review.service.d.ts.map +1 -1
- package/dist/services/review.service.js +55 -182
- package/dist/services/review.service.js.map +1 -1
- package/dist/types/auth.d.ts +18 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/cli.d.ts +33 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +2 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/config.d.ts +47 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +8 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +15 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +8 -191
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -14
- package/dist/types/index.js.map +1 -1
- package/dist/types/repo-config.d.ts +24 -0
- package/dist/types/repo-config.d.ts.map +1 -0
- package/dist/types/repo-config.js +2 -0
- package/dist/types/repo-config.js.map +1 -0
- package/dist/types/review.d.ts +112 -0
- package/dist/types/review.d.ts.map +1 -0
- package/dist/types/review.js +2 -0
- package/dist/types/review.js.map +1 -0
- package/dist/types/trial.d.ts +10 -0
- package/dist/types/trial.d.ts.map +1 -0
- package/dist/types/trial.js +2 -0
- package/dist/types/trial.js.map +1 -0
- package/dist/ui/interactive-formatters.d.ts +6 -0
- package/dist/ui/interactive-formatters.d.ts.map +1 -0
- package/dist/ui/interactive-formatters.js +61 -0
- package/dist/ui/interactive-formatters.js.map +1 -0
- package/dist/ui/interactive-helpers.d.ts +12 -0
- package/dist/ui/interactive-helpers.d.ts.map +1 -0
- package/dist/ui/interactive-helpers.js +51 -0
- package/dist/ui/interactive-helpers.js.map +1 -0
- package/dist/ui/interactive-renderers.d.ts +6 -0
- package/dist/ui/interactive-renderers.d.ts.map +1 -0
- package/dist/ui/interactive-renderers.js +82 -0
- package/dist/ui/interactive-renderers.js.map +1 -0
- package/dist/ui/interactive.d.ts +1 -9
- package/dist/ui/interactive.d.ts.map +1 -1
- package/dist/ui/interactive.js +11 -187
- package/dist/ui/interactive.js.map +1 -1
- package/dist/utils/auth-mode.d.ts +7 -0
- package/dist/utils/auth-mode.d.ts.map +1 -0
- package/dist/utils/auth-mode.js +42 -0
- package/dist/utils/auth-mode.js.map +1 -0
- package/dist/utils/banner.d.ts.map +1 -1
- package/dist/utils/banner.js +2 -14
- package/dist/utils/banner.js.map +1 -1
- package/dist/utils/command-context.d.ts +1 -1
- package/dist/utils/command-context.d.ts.map +1 -1
- package/dist/utils/command-errors.d.ts.map +1 -1
- package/dist/utils/command-errors.js +25 -1
- package/dist/utils/command-errors.js.map +1 -1
- package/dist/utils/commander-errors.d.ts +8 -0
- package/dist/utils/commander-errors.d.ts.map +1 -0
- package/dist/utils/commander-errors.js +79 -0
- package/dist/utils/commander-errors.js.map +1 -0
- package/dist/utils/commander-setup.d.ts +3 -0
- package/dist/utils/commander-setup.d.ts.map +1 -0
- package/dist/utils/commander-setup.js +10 -0
- package/dist/utils/commander-setup.js.map +1 -0
- package/dist/utils/credentials.d.ts +1 -1
- package/dist/utils/credentials.d.ts.map +1 -1
- package/dist/utils/git-diff.d.ts +5 -0
- package/dist/utils/git-diff.d.ts.map +1 -0
- package/dist/utils/git-diff.js +14 -0
- package/dist/utils/git-diff.js.map +1 -0
- package/dist/utils/git-file-reader.d.ts +22 -0
- package/dist/utils/git-file-reader.d.ts.map +1 -0
- package/dist/utils/git-file-reader.js +45 -0
- package/dist/utils/git-file-reader.js.map +1 -0
- package/dist/utils/git-file-selection.d.ts +14 -0
- package/dist/utils/git-file-selection.d.ts.map +1 -0
- package/dist/utils/git-file-selection.js +20 -0
- package/dist/utils/git-file-selection.js.map +1 -0
- package/dist/utils/git-file-targets.d.ts +4 -0
- package/dist/utils/git-file-targets.d.ts.map +1 -0
- package/dist/utils/git-file-targets.js +11 -0
- package/dist/utils/git-file-targets.js.map +1 -0
- package/dist/utils/git-remote.d.ts +7 -0
- package/dist/utils/git-remote.d.ts.map +1 -0
- package/dist/utils/git-remote.js +60 -0
- package/dist/utils/git-remote.js.map +1 -0
- package/dist/utils/git-status.d.ts +7 -0
- package/dist/utils/git-status.d.ts.map +1 -0
- package/dist/utils/git-status.js +36 -0
- package/dist/utils/git-status.js.map +1 -0
- package/dist/utils/input-validation.d.ts +1 -1
- package/dist/utils/input-validation.d.ts.map +1 -1
- package/dist/utils/rate-limit.d.ts +1 -1
- package/dist/utils/repo-settings-dashboard.d.ts +6 -0
- package/dist/utils/repo-settings-dashboard.d.ts.map +1 -0
- package/dist/utils/repo-settings-dashboard.js +36 -0
- package/dist/utils/repo-settings-dashboard.js.map +1 -0
- package/dist/utils/repo-settings-patterns.d.ts +7 -0
- package/dist/utils/repo-settings-patterns.d.ts.map +1 -0
- package/dist/utils/repo-settings-patterns.js +66 -0
- package/dist/utils/repo-settings-patterns.js.map +1 -0
- package/dist/utils/repo-settings-schema.d.ts +6 -0
- package/dist/utils/repo-settings-schema.d.ts.map +1 -0
- package/dist/utils/repo-settings-schema.js +70 -0
- package/dist/utils/repo-settings-schema.js.map +1 -0
- package/dist/utils/review-output.d.ts +4 -0
- package/dist/utils/review-output.d.ts.map +1 -0
- package/dist/utils/review-output.js +18 -0
- package/dist/utils/review-output.js.map +1 -0
- package/dist/utils/skills-sync-manifest.d.ts +5 -0
- package/dist/utils/skills-sync-manifest.d.ts.map +1 -0
- package/dist/utils/skills-sync-manifest.js +39 -0
- package/dist/utils/skills-sync-manifest.js.map +1 -0
- package/dist/utils/skills-sync-paths.d.ts +5 -0
- package/dist/utils/skills-sync-paths.d.ts.map +1 -0
- package/dist/utils/skills-sync-paths.js +60 -0
- package/dist/utils/skills-sync-paths.js.map +1 -0
- package/dist/utils/skills-sync-targets.d.ts +3 -0
- package/dist/utils/skills-sync-targets.d.ts.map +1 -0
- package/dist/utils/skills-sync-targets.js +211 -0
- package/dist/utils/skills-sync-targets.js.map +1 -0
- package/dist/utils/skills-sync.d.ts.map +1 -1
- package/dist/utils/skills-sync.js +4 -241
- package/dist/utils/skills-sync.js.map +1 -1
- package/dist/utils/team-key-auth.d.ts +5 -0
- package/dist/utils/team-key-auth.d.ts.map +1 -0
- package/dist/utils/team-key-auth.js +14 -0
- package/dist/utils/team-key-auth.js.map +1 -0
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-core.js","sourceRoot":"","sources":["../../../src/services/api/api-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
import type { AuthResponse,
|
|
1
|
+
import type { AuthResponse, UserInfo } from '../../types/auth.js';
|
|
2
|
+
import type { CodeReviewParameter, ConfigAddRepositoriesResponse, ConfigRepository, ConfigTeam } from '../../types/config.js';
|
|
3
|
+
import type { MemoryCaptureApiRequest, MemoryCaptureApiResponse } from '../../types/memory.js';
|
|
4
|
+
import type { RepositorySettings } from '../../types/repo-config.js';
|
|
5
|
+
import type { BusinessValidationResponse, PullRequestSuggestionsResponse, ReviewConfig, ReviewResult, TrialReviewResult } from '../../types/review.js';
|
|
6
|
+
import type { TrialStatus } from '../../types/trial.js';
|
|
2
7
|
import type { SessionApiEvent } from '../../types/session-events.js';
|
|
3
8
|
export interface IAuthApi {
|
|
4
9
|
login(email: string, password: string): Promise<AuthResponse>;
|
|
@@ -46,7 +51,17 @@ export interface IMemoryApi {
|
|
|
46
51
|
export interface IConfigApi {
|
|
47
52
|
getAvailableRepositories(accessToken: string): Promise<ConfigRepository[]>;
|
|
48
53
|
getSelectedRepositories(accessToken: string): Promise<ConfigRepository[]>;
|
|
54
|
+
getTeams(accessToken: string): Promise<ConfigTeam[]>;
|
|
49
55
|
addRepositories(accessToken: string, repositoryIds: string[]): Promise<ConfigAddRepositoriesResponse>;
|
|
56
|
+
getCodeReviewParameter(accessToken: string, teamId: string): Promise<CodeReviewParameter>;
|
|
57
|
+
createOrUpdateCodeReviewParameter(accessToken: string, params: {
|
|
58
|
+
teamId: string;
|
|
59
|
+
repositoryId?: string;
|
|
60
|
+
configValue: Record<string, unknown>;
|
|
61
|
+
}): Promise<CodeReviewParameter>;
|
|
62
|
+
updateCodeReviewParameterRepositories(accessToken: string, teamId: string): Promise<unknown>;
|
|
63
|
+
getRepositorySettings(accessToken: string, repositoryId: string): Promise<RepositorySettings>;
|
|
64
|
+
updateRepositorySettings(accessToken: string, repositoryId: string, settings: RepositorySettings): Promise<RepositorySettings>;
|
|
50
65
|
}
|
|
51
66
|
export interface ISessionsApi {
|
|
52
67
|
sendEvent(event: SessionApiEvent, repoRoot: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.interface.d.ts","sourceRoot":"","sources":["../../../src/services/api/api.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"api.interface.d.ts","sourceRoot":"","sources":["../../../src/services/api/api.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,17 @@
|
|
|
1
|
-
import type { IKodusApi,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export
|
|
9
|
-
/**
|
|
10
|
-
* Returns Cloudflare Access headers when configured.
|
|
11
|
-
* Priority: env vars > config.json
|
|
12
|
-
*
|
|
13
|
-
* Required when the API is behind Cloudflare Access (zero-trust proxy).
|
|
14
|
-
*/
|
|
15
|
-
export declare function getCloudflareAccessHeaders(): Promise<Record<string, string>>;
|
|
16
|
-
export declare function request<T>(endpoint: string, options?: RequestInit): Promise<T>;
|
|
1
|
+
import type { IKodusApi, ITrialApi, ISessionsApi } from './api.interface.js';
|
|
2
|
+
import { request, resetApiConfigCache, resolveApiBaseUrl, getCloudflareAccessHeaders } from './api-core.js';
|
|
3
|
+
import { RealConfigApi } from './config.api.js';
|
|
4
|
+
import { RealReviewApi } from './review.api.js';
|
|
5
|
+
import { RealAuthApi } from './auth.api.js';
|
|
6
|
+
import { RealMemoryApi } from './memory.api.js';
|
|
7
|
+
export declare const _resetConfigCache: typeof resetApiConfigCache;
|
|
8
|
+
export { request, resolveApiBaseUrl, getCloudflareAccessHeaders };
|
|
17
9
|
export declare class RealApi implements IKodusApi {
|
|
18
|
-
auth:
|
|
19
|
-
config:
|
|
20
|
-
review:
|
|
10
|
+
auth: RealAuthApi;
|
|
11
|
+
config: RealConfigApi;
|
|
12
|
+
review: RealReviewApi;
|
|
21
13
|
trial: ITrialApi;
|
|
22
|
-
memory:
|
|
14
|
+
memory: RealMemoryApi;
|
|
23
15
|
sessions: ISessionsApi;
|
|
24
16
|
}
|
|
25
17
|
//# sourceMappingURL=api.real.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.real.d.ts","sourceRoot":"","sources":["../../../src/services/api/api.real.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"api.real.d.ts","sourceRoot":"","sources":["../../../src/services/api/api.real.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,SAAS,EACT,SAAS,EACT,YAAY,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACH,OAAO,EACP,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC7B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,iBAAiB,4BAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,CAAC;AAElE,qBAAa,OAAQ,YAAW,SAAS;IACrC,IAAI,cAAqB;IACzB,MAAM,gBAAuB;IAC7B,MAAM,gBAAuB;IAC7B,KAAK,EAAE,SAAS,CAAsB;IACtC,MAAM,gBAAuB;IAC7B,QAAQ,EAAE,YAAY,CAAyB;CAClD"}
|
|
@@ -1,549 +1,12 @@
|
|
|
1
|
-
import { ApiError } from '../../types/index.js';
|
|
2
1
|
import { RealSessionsApi } from './sessions.api.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (_configCache === undefined) {
|
|
12
|
-
_configCache = await loadConfig();
|
|
13
|
-
}
|
|
14
|
-
return _configCache;
|
|
15
|
-
}
|
|
16
|
-
/** @internal Exported for testing only. */
|
|
17
|
-
export function _resetConfigCache() {
|
|
18
|
-
_configCache = undefined;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Validates a custom API URL. Returns it if valid, or null if invalid.
|
|
22
|
-
*/
|
|
23
|
-
function validateApiUrl(customUrl) {
|
|
24
|
-
const defaultUrl = 'https://api.kodus.io';
|
|
25
|
-
try {
|
|
26
|
-
const url = new URL(customUrl);
|
|
27
|
-
const isLocalhost = url.hostname === 'localhost' || url.hostname === '127.0.0.1';
|
|
28
|
-
if (url.protocol !== 'https:' && !isLocalhost) {
|
|
29
|
-
cliError('Security Error: API URL must use HTTPS protocol');
|
|
30
|
-
cliError(`Falling back to default: ${defaultUrl}`);
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
const standardDomains = ['api.kodus.io', 'localhost', '127.0.0.1'];
|
|
34
|
-
const isStandard = standardDomains.some((domain) => url.hostname === domain || url.hostname.endsWith(`.${domain}`));
|
|
35
|
-
if (!isStandard && isCliVerboseMode()) {
|
|
36
|
-
cliDebug(`Warning: Using non-standard API URL: ${url.hostname}`);
|
|
37
|
-
}
|
|
38
|
-
return customUrl;
|
|
39
|
-
}
|
|
40
|
-
catch {
|
|
41
|
-
cliError('Invalid API URL format:', customUrl);
|
|
42
|
-
cliError(`Falling back to default: ${defaultUrl}`);
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Returns the API base URL.
|
|
48
|
-
* Priority: KODUS_API_URL env var > config.json apiUrl > default
|
|
49
|
-
*/
|
|
50
|
-
export async function resolveApiBaseUrl() {
|
|
51
|
-
const defaultUrl = 'https://api.kodus.io';
|
|
52
|
-
// Env var takes priority
|
|
53
|
-
if (process.env.KODUS_API_URL) {
|
|
54
|
-
return validateApiUrl(process.env.KODUS_API_URL) ?? defaultUrl;
|
|
55
|
-
}
|
|
56
|
-
// Then config file
|
|
57
|
-
const config = await getCachedConfig();
|
|
58
|
-
if (config?.apiUrl) {
|
|
59
|
-
return validateApiUrl(config.apiUrl) ?? defaultUrl;
|
|
60
|
-
}
|
|
61
|
-
return defaultUrl;
|
|
62
|
-
}
|
|
63
|
-
const REQUEST_TIMEOUT_MS = 20 * 60 * 1000; // 20 minutes
|
|
64
|
-
/**
|
|
65
|
-
* Returns Cloudflare Access headers when configured.
|
|
66
|
-
* Priority: env vars > config.json
|
|
67
|
-
*
|
|
68
|
-
* Required when the API is behind Cloudflare Access (zero-trust proxy).
|
|
69
|
-
*/
|
|
70
|
-
export async function getCloudflareAccessHeaders() {
|
|
71
|
-
const clientId = process.env.CF_ACCESS_CLIENT_ID;
|
|
72
|
-
const clientSecret = process.env.CF_ACCESS_CLIENT_SECRET;
|
|
73
|
-
if (clientId && clientSecret) {
|
|
74
|
-
return {
|
|
75
|
-
'CF-Access-Client-Id': clientId,
|
|
76
|
-
'CF-Access-Client-Secret': clientSecret,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
const config = await getCachedConfig();
|
|
80
|
-
if (config?.cfAccessClientId && config?.cfAccessClientSecret) {
|
|
81
|
-
return {
|
|
82
|
-
'CF-Access-Client-Id': config.cfAccessClientId,
|
|
83
|
-
'CF-Access-Client-Secret': config.cfAccessClientSecret,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
return {};
|
|
87
|
-
}
|
|
88
|
-
function getDefaultApiErrorMessage(statusCode, endpoint) {
|
|
89
|
-
const endpointPath = endpoint.split('?')[0] || endpoint;
|
|
90
|
-
if (statusCode === 400) {
|
|
91
|
-
return `Invalid request sent to Kodus API (${endpointPath}).`;
|
|
92
|
-
}
|
|
93
|
-
if (statusCode === 401) {
|
|
94
|
-
if (endpointPath === '/pull-requests/suggestions') {
|
|
95
|
-
return 'Authentication failed while fetching pull request suggestions. Run: kodus auth login or configure a valid team key.';
|
|
96
|
-
}
|
|
97
|
-
return 'Authentication failed. Run: kodus auth login or configure a valid team key.';
|
|
98
|
-
}
|
|
99
|
-
if (statusCode === 403) {
|
|
100
|
-
return `Access denied for Kodus API endpoint (${endpointPath}).`;
|
|
101
|
-
}
|
|
102
|
-
if (statusCode === 404) {
|
|
103
|
-
return `Kodus API endpoint not found (${endpointPath}).`;
|
|
104
|
-
}
|
|
105
|
-
if (statusCode === 422) {
|
|
106
|
-
return `Kodus API could not process the request (${endpointPath}).`;
|
|
107
|
-
}
|
|
108
|
-
if (statusCode === 429) {
|
|
109
|
-
return 'Rate limit exceeded. Please try again later.';
|
|
110
|
-
}
|
|
111
|
-
if (statusCode >= 500) {
|
|
112
|
-
return 'Kodus API is currently unavailable. Please try again.';
|
|
113
|
-
}
|
|
114
|
-
return `Request failed with status ${statusCode}`;
|
|
115
|
-
}
|
|
116
|
-
function normalizeApiErrorMessage(statusCode, endpoint, errorData) {
|
|
117
|
-
if (errorData.code === 'DEVICE_LIMIT_REACHED') {
|
|
118
|
-
const limit = errorData.details?.limit;
|
|
119
|
-
const activeDevices = errorData.details?.current ?? errorData.details?.activeDevices;
|
|
120
|
-
if (typeof limit === 'number' && typeof activeDevices === 'number') {
|
|
121
|
-
return `Device limit reached (${activeDevices}/${limit}). Remove an old device or contact your admin.`;
|
|
122
|
-
}
|
|
123
|
-
return 'Device limit reached for this organization. Remove an old device or contact your admin.';
|
|
124
|
-
}
|
|
125
|
-
const fallbackMessage = getDefaultApiErrorMessage(statusCode, endpoint);
|
|
126
|
-
if (!errorData.message || typeof errorData.message !== 'string') {
|
|
127
|
-
return fallbackMessage;
|
|
128
|
-
}
|
|
129
|
-
// Keep auth/permission/server errors deterministic and always in CLI English.
|
|
130
|
-
// 404 is excluded: the backend may return meaningful "not found" details
|
|
131
|
-
// (e.g. "Pull request not found") that are more useful than the generic message.
|
|
132
|
-
if (statusCode === 401 ||
|
|
133
|
-
statusCode === 403 ||
|
|
134
|
-
statusCode === 429 ||
|
|
135
|
-
statusCode >= 500) {
|
|
136
|
-
return fallbackMessage;
|
|
137
|
-
}
|
|
138
|
-
const trimmed = errorData.message.trim();
|
|
139
|
-
if (!trimmed) {
|
|
140
|
-
return fallbackMessage;
|
|
141
|
-
}
|
|
142
|
-
const hasNonAscii = /[^\p{ASCII}]/u.test(trimmed);
|
|
143
|
-
if (hasNonAscii) {
|
|
144
|
-
return fallbackMessage;
|
|
145
|
-
}
|
|
146
|
-
return trimmed;
|
|
147
|
-
}
|
|
148
|
-
export async function request(endpoint, options = {}) {
|
|
149
|
-
const baseUrl = await resolveApiBaseUrl();
|
|
150
|
-
const url = `${baseUrl}${endpoint}`;
|
|
151
|
-
let deviceIdentity;
|
|
152
|
-
if (isCliVerboseMode()) {
|
|
153
|
-
cliDebug(`[API] ${options.method || 'GET'} ${url}`);
|
|
154
|
-
}
|
|
155
|
-
try {
|
|
156
|
-
deviceIdentity = await getDeviceIdentity();
|
|
157
|
-
}
|
|
158
|
-
catch (error) {
|
|
159
|
-
if (isCliVerboseMode()) {
|
|
160
|
-
cliDebug('[API] Unable to resolve device id:', error);
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
const cfHeaders = await getCloudflareAccessHeaders();
|
|
164
|
-
const controller = new AbortController();
|
|
165
|
-
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
166
|
-
let response;
|
|
167
|
-
try {
|
|
168
|
-
response = await fetch(url, {
|
|
169
|
-
...options,
|
|
170
|
-
signal: controller.signal,
|
|
171
|
-
headers: {
|
|
172
|
-
'Content-Type': 'application/json',
|
|
173
|
-
...cfHeaders,
|
|
174
|
-
...(deviceIdentity?.deviceId
|
|
175
|
-
? { 'X-Kodus-Device-Id': deviceIdentity.deviceId }
|
|
176
|
-
: {}),
|
|
177
|
-
...(deviceIdentity?.deviceToken
|
|
178
|
-
? { 'X-Kodus-Device-Token': deviceIdentity.deviceToken }
|
|
179
|
-
: {}),
|
|
180
|
-
...options.headers,
|
|
181
|
-
},
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
catch (error) {
|
|
185
|
-
clearTimeout(timeout);
|
|
186
|
-
if (error instanceof DOMException && error.name === 'AbortError') {
|
|
187
|
-
throw new ApiError(408, 'Request timed out. The server took too long to respond. Please try again.');
|
|
188
|
-
}
|
|
189
|
-
throw error;
|
|
190
|
-
}
|
|
191
|
-
clearTimeout(timeout);
|
|
192
|
-
const responseDeviceToken = response.headers.get('x-kodus-device-token');
|
|
193
|
-
if (responseDeviceToken) {
|
|
194
|
-
await updateDeviceToken(responseDeviceToken).catch(() => { });
|
|
195
|
-
}
|
|
196
|
-
const contentType = response.headers.get('content-type') || '';
|
|
197
|
-
const isJson = contentType.includes('application/json');
|
|
198
|
-
if (!response.ok) {
|
|
199
|
-
const rawError = isJson
|
|
200
|
-
? await response.json().catch(() => ({ message: 'Request failed' }))
|
|
201
|
-
: { message: `Request failed with status ${response.status}` };
|
|
202
|
-
// Unwrap API envelope: errors may arrive as { data: { code, message, ... } }
|
|
203
|
-
// Only unwrap if the top-level object has no message/code of its own.
|
|
204
|
-
const errorData = rawError &&
|
|
205
|
-
typeof rawError === 'object' &&
|
|
206
|
-
'data' in rawError &&
|
|
207
|
-
rawError.data &&
|
|
208
|
-
typeof rawError.data === 'object' &&
|
|
209
|
-
!('message' in rawError) &&
|
|
210
|
-
!('code' in rawError)
|
|
211
|
-
? rawError.data
|
|
212
|
-
: rawError;
|
|
213
|
-
const errorMessage = normalizeApiErrorMessage(response.status, endpoint, errorData);
|
|
214
|
-
if (isCliVerboseMode()) {
|
|
215
|
-
cliDebug('[API] Error:', {
|
|
216
|
-
status: response.status,
|
|
217
|
-
url,
|
|
218
|
-
contentType,
|
|
219
|
-
errorData,
|
|
220
|
-
normalizedMessage: errorMessage,
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
throw new ApiError(response.status, errorMessage);
|
|
224
|
-
}
|
|
225
|
-
if (!isJson) {
|
|
226
|
-
const text = await response.text();
|
|
227
|
-
const preview = text.substring(0, 100);
|
|
228
|
-
cliError(`[API] Expected JSON but received ${contentType || 'unknown content-type'}`);
|
|
229
|
-
cliError(`[API] URL: ${url}`);
|
|
230
|
-
cliError(`[API] Response preview: ${preview}...`);
|
|
231
|
-
throw new ApiError(500, `API returned invalid response (expected JSON, got ${contentType || 'HTML'})`);
|
|
232
|
-
}
|
|
233
|
-
const json = (await response.json());
|
|
234
|
-
if (isCliVerboseMode()) {
|
|
235
|
-
cliDebug('[API] Raw response structure:', Object.keys(json));
|
|
236
|
-
if (json && typeof json === 'object') {
|
|
237
|
-
// Log key fields without logging full content (could be huge)
|
|
238
|
-
const preview = {};
|
|
239
|
-
for (const key of Object.keys(json)) {
|
|
240
|
-
const val = json[key];
|
|
241
|
-
if (typeof val === 'string' && val.length > 100) {
|
|
242
|
-
preview[key] = `[string: ${val.length} chars]`;
|
|
243
|
-
}
|
|
244
|
-
else if (Array.isArray(val)) {
|
|
245
|
-
preview[key] = `[array: ${val.length} items]`;
|
|
246
|
-
}
|
|
247
|
-
else if (typeof val === 'object' && val !== null) {
|
|
248
|
-
preview[key] = `[object: ${Object.keys(val).join(', ')}]`;
|
|
249
|
-
}
|
|
250
|
-
else {
|
|
251
|
-
preview[key] = val;
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
cliDebug('[API] Response preview:', JSON.stringify(preview, null, 2));
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
// API usually returns { data: {...}, statusCode, type }
|
|
258
|
-
// Return only .data when present.
|
|
259
|
-
if (json && typeof json === 'object' && 'data' in json) {
|
|
260
|
-
return json.data;
|
|
261
|
-
}
|
|
262
|
-
return json;
|
|
263
|
-
}
|
|
264
|
-
const RETRY_BACKOFF_MS = [1000, 3000];
|
|
265
|
-
const RETRYABLE_STATUS_CODES = new Set([429, 500, 502, 503, 504]);
|
|
266
|
-
async function requestWithRetry(endpoint, options = {}) {
|
|
267
|
-
let lastError;
|
|
268
|
-
for (let attempt = 0; attempt <= RETRY_BACKOFF_MS.length; attempt++) {
|
|
269
|
-
try {
|
|
270
|
-
return await request(endpoint, options);
|
|
271
|
-
}
|
|
272
|
-
catch (error) {
|
|
273
|
-
lastError = error;
|
|
274
|
-
const isLastAttempt = attempt >= RETRY_BACKOFF_MS.length;
|
|
275
|
-
if (isLastAttempt) {
|
|
276
|
-
break;
|
|
277
|
-
}
|
|
278
|
-
// Only retry on network errors or retryable status codes
|
|
279
|
-
const isRetryable = (error instanceof ApiError &&
|
|
280
|
-
RETRYABLE_STATUS_CODES.has(error.statusCode)) ||
|
|
281
|
-
(!(error instanceof ApiError) && error instanceof Error);
|
|
282
|
-
if (!isRetryable) {
|
|
283
|
-
break;
|
|
284
|
-
}
|
|
285
|
-
if (isCliVerboseMode()) {
|
|
286
|
-
cliDebug(`[API] Retry ${attempt + 1}/${RETRY_BACKOFF_MS.length} after ${RETRY_BACKOFF_MS[attempt]}ms`);
|
|
287
|
-
}
|
|
288
|
-
await new Promise((resolve) => setTimeout(resolve, RETRY_BACKOFF_MS[attempt]));
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
throw lastError;
|
|
292
|
-
}
|
|
293
|
-
class RealAuthApi {
|
|
294
|
-
async login(email, password) {
|
|
295
|
-
const response = await requestWithRetry('/auth/login', {
|
|
296
|
-
method: 'POST',
|
|
297
|
-
body: JSON.stringify({ email, password }),
|
|
298
|
-
});
|
|
299
|
-
// Map API response into the CLI auth shape.
|
|
300
|
-
return {
|
|
301
|
-
accessToken: response.accessToken,
|
|
302
|
-
refreshToken: response.refreshToken,
|
|
303
|
-
expiresIn: 3600, // Default: 1 hour
|
|
304
|
-
user: {
|
|
305
|
-
id: 'unknown', // Login response does not include user profile fields.
|
|
306
|
-
email,
|
|
307
|
-
orgs: [],
|
|
308
|
-
},
|
|
309
|
-
};
|
|
310
|
-
}
|
|
311
|
-
async refresh(refreshToken) {
|
|
312
|
-
return requestWithRetry('/auth/refresh', {
|
|
313
|
-
method: 'POST',
|
|
314
|
-
body: JSON.stringify({ refreshToken }),
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
async logout(accessToken) {
|
|
318
|
-
await requestWithRetry('/auth/logout', {
|
|
319
|
-
method: 'POST',
|
|
320
|
-
headers: {
|
|
321
|
-
Authorization: `Bearer ${accessToken}`,
|
|
322
|
-
},
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
async generateCIToken(accessToken) {
|
|
326
|
-
const response = await requestWithRetry('/auth/ci-token', {
|
|
327
|
-
method: 'POST',
|
|
328
|
-
headers: {
|
|
329
|
-
Authorization: `Bearer ${accessToken}`,
|
|
330
|
-
},
|
|
331
|
-
});
|
|
332
|
-
return response.token;
|
|
333
|
-
}
|
|
334
|
-
async verify(accessToken) {
|
|
335
|
-
// SECURITY NOTE: This performs basic client-side JWT validation without signature verification.
|
|
336
|
-
// This is acceptable for a CLI client where:
|
|
337
|
-
// 1. The token is securely stored locally and only accessed by the user
|
|
338
|
-
// 2. The API validates the token signature on every request
|
|
339
|
-
// 3. We only check format and expiration to avoid unnecessary API calls
|
|
340
|
-
//
|
|
341
|
-
// For production security, all authorization decisions MUST be made by the API
|
|
342
|
-
// after validating the token signature.
|
|
343
|
-
if (!accessToken || !accessToken.startsWith('eyJ')) {
|
|
344
|
-
return { valid: false };
|
|
345
|
-
}
|
|
346
|
-
try {
|
|
347
|
-
// Decode JWT payload (without signature validation)
|
|
348
|
-
const parts = accessToken.split('.');
|
|
349
|
-
if (parts.length !== 3) {
|
|
350
|
-
return { valid: false };
|
|
351
|
-
}
|
|
352
|
-
const payload = JSON.parse(Buffer.from(parts[1], 'base64').toString());
|
|
353
|
-
// Check expiration
|
|
354
|
-
if (payload.exp && payload.exp * 1000 < Date.now()) {
|
|
355
|
-
return { valid: false };
|
|
356
|
-
}
|
|
357
|
-
return {
|
|
358
|
-
valid: true,
|
|
359
|
-
user: {
|
|
360
|
-
id: payload.sub || 'unknown',
|
|
361
|
-
email: payload.email || 'unknown',
|
|
362
|
-
orgs: [],
|
|
363
|
-
},
|
|
364
|
-
};
|
|
365
|
-
}
|
|
366
|
-
catch (error) {
|
|
367
|
-
if (isCliVerboseMode()) {
|
|
368
|
-
cliDebug('Token verification failed:', error);
|
|
369
|
-
}
|
|
370
|
-
return { valid: false };
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
class RealReviewApi {
|
|
375
|
-
async analyze(diff, accessToken, config) {
|
|
376
|
-
const isTeamKey = accessToken.startsWith('kodus_');
|
|
377
|
-
if (isCliVerboseMode()) {
|
|
378
|
-
cliDebug('[API] analyze() called');
|
|
379
|
-
cliDebug(`[API] - diff length: ${diff.length} chars`);
|
|
380
|
-
cliDebug(`[API] - isTeamKey: ${isTeamKey}`);
|
|
381
|
-
cliDebug(`[API] - config files: ${config?.files?.length ?? 0}`);
|
|
382
|
-
}
|
|
383
|
-
if (isTeamKey) {
|
|
384
|
-
return requestWithRetry('/cli/review', {
|
|
385
|
-
method: 'POST',
|
|
386
|
-
headers: {
|
|
387
|
-
'X-Team-Key': accessToken,
|
|
388
|
-
},
|
|
389
|
-
body: JSON.stringify({ diff, config }),
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
let teamId;
|
|
393
|
-
try {
|
|
394
|
-
const payload = JSON.parse(Buffer.from(accessToken.split('.')[1], 'base64').toString());
|
|
395
|
-
teamId = payload.organizationId;
|
|
396
|
-
}
|
|
397
|
-
catch {
|
|
398
|
-
// Ignore if cannot decode
|
|
399
|
-
}
|
|
400
|
-
const endpoint = teamId
|
|
401
|
-
? `/cli/review?teamId=${encodeURIComponent(teamId)}`
|
|
402
|
-
: '/cli/review';
|
|
403
|
-
return requestWithRetry(endpoint, {
|
|
404
|
-
method: 'POST',
|
|
405
|
-
headers: {
|
|
406
|
-
Authorization: `Bearer ${accessToken}`,
|
|
407
|
-
},
|
|
408
|
-
body: JSON.stringify({ diff, config }),
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
async analyzeWithMetrics(diff, accessToken, config, metrics) {
|
|
412
|
-
const isTeamKey = accessToken.startsWith('kodus_');
|
|
413
|
-
if (isTeamKey) {
|
|
414
|
-
return requestWithRetry('/cli/review', {
|
|
415
|
-
method: 'POST',
|
|
416
|
-
headers: {
|
|
417
|
-
'X-Team-Key': accessToken,
|
|
418
|
-
},
|
|
419
|
-
body: JSON.stringify({
|
|
420
|
-
diff,
|
|
421
|
-
config,
|
|
422
|
-
...metrics,
|
|
423
|
-
}),
|
|
424
|
-
});
|
|
425
|
-
}
|
|
426
|
-
return this.analyze(diff, accessToken, config);
|
|
427
|
-
}
|
|
428
|
-
async getPullRequestSuggestions(accessToken, params) {
|
|
429
|
-
const query = new URLSearchParams();
|
|
430
|
-
if (params.prUrl) {
|
|
431
|
-
query.set('prUrl', params.prUrl);
|
|
432
|
-
}
|
|
433
|
-
if (params.prNumber !== undefined) {
|
|
434
|
-
query.set('prNumber', params.prNumber.toString());
|
|
435
|
-
}
|
|
436
|
-
if (params.repositoryId) {
|
|
437
|
-
query.set('repositoryId', params.repositoryId);
|
|
438
|
-
}
|
|
439
|
-
if (params.format) {
|
|
440
|
-
query.set('format', params.format);
|
|
441
|
-
}
|
|
442
|
-
if (params.severity) {
|
|
443
|
-
query.set('severity', params.severity);
|
|
444
|
-
}
|
|
445
|
-
if (params.category) {
|
|
446
|
-
query.set('category', params.category);
|
|
447
|
-
}
|
|
448
|
-
const queryString = query.toString();
|
|
449
|
-
const endpoint = `/pull-requests/suggestions${queryString ? `?${queryString}` : ''}`;
|
|
450
|
-
const isTeamKey = accessToken.startsWith('kodus_');
|
|
451
|
-
return requestWithRetry(endpoint, {
|
|
452
|
-
headers: {
|
|
453
|
-
...(isTeamKey
|
|
454
|
-
? { 'X-Team-Key': accessToken }
|
|
455
|
-
: { Authorization: `Bearer ${accessToken}` }),
|
|
456
|
-
},
|
|
457
|
-
});
|
|
458
|
-
}
|
|
459
|
-
async triggerBusinessValidation(accessToken, params) {
|
|
460
|
-
const isTeamKey = accessToken.startsWith('kodus_');
|
|
461
|
-
const body = {};
|
|
462
|
-
if (params.repository) {
|
|
463
|
-
body.repository = params.repository;
|
|
464
|
-
}
|
|
465
|
-
if (params.taskUrl) {
|
|
466
|
-
body.taskUrl = params.taskUrl;
|
|
467
|
-
}
|
|
468
|
-
if (params.taskId) {
|
|
469
|
-
body.taskId = params.taskId;
|
|
470
|
-
}
|
|
471
|
-
if (params.diff) {
|
|
472
|
-
body.diff = params.diff;
|
|
473
|
-
}
|
|
474
|
-
return requestWithRetry('/cli/business-validation', {
|
|
475
|
-
method: 'POST',
|
|
476
|
-
headers: {
|
|
477
|
-
...(isTeamKey
|
|
478
|
-
? { 'X-Team-Key': accessToken }
|
|
479
|
-
: { Authorization: `Bearer ${accessToken}` }),
|
|
480
|
-
},
|
|
481
|
-
body: JSON.stringify(body),
|
|
482
|
-
});
|
|
483
|
-
}
|
|
484
|
-
async trialAnalyze(diff, fingerprint) {
|
|
485
|
-
if (isCliVerboseMode()) {
|
|
486
|
-
cliDebug('[API] trialAnalyze() called');
|
|
487
|
-
cliDebug(`[API] - diff length: ${diff.length} chars`);
|
|
488
|
-
cliDebug(`[API] - fingerprint: ${fingerprint.substring(0, 8)}...`);
|
|
489
|
-
}
|
|
490
|
-
return requestWithRetry('/cli/trial/review', {
|
|
491
|
-
method: 'POST',
|
|
492
|
-
body: JSON.stringify({ diff, fingerprint }),
|
|
493
|
-
});
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
class RealTrialApi {
|
|
497
|
-
async getStatus(fingerprint) {
|
|
498
|
-
return requestWithRetry(`/cli/trial/status?fingerprint=${fingerprint}`);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
class RealMemoryApi {
|
|
502
|
-
async submitCapture(payload, accessToken) {
|
|
503
|
-
const isTeamKey = accessToken.startsWith('kodus_');
|
|
504
|
-
const headers = isTeamKey
|
|
505
|
-
? { 'X-Team-Key': accessToken }
|
|
506
|
-
: { Authorization: `Bearer ${accessToken}` };
|
|
507
|
-
return request('/cli/memory/captures', {
|
|
508
|
-
method: 'POST',
|
|
509
|
-
headers,
|
|
510
|
-
body: JSON.stringify(payload),
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
class RealConfigApi {
|
|
515
|
-
async getAvailableRepositories(accessToken) {
|
|
516
|
-
return requestWithRetry('/cli/config/repositories/available', {
|
|
517
|
-
headers: {
|
|
518
|
-
...(accessToken.startsWith('kodus_')
|
|
519
|
-
? { 'X-Team-Key': accessToken }
|
|
520
|
-
: { Authorization: `Bearer ${accessToken}` }),
|
|
521
|
-
},
|
|
522
|
-
});
|
|
523
|
-
}
|
|
524
|
-
async getSelectedRepositories(accessToken) {
|
|
525
|
-
return requestWithRetry('/cli/config/repositories/selected', {
|
|
526
|
-
headers: {
|
|
527
|
-
...(accessToken.startsWith('kodus_')
|
|
528
|
-
? { 'X-Team-Key': accessToken }
|
|
529
|
-
: { Authorization: `Bearer ${accessToken}` }),
|
|
530
|
-
},
|
|
531
|
-
});
|
|
532
|
-
}
|
|
533
|
-
async addRepositories(accessToken, repositoryIds) {
|
|
534
|
-
return requestWithRetry('/cli/config/repositories', {
|
|
535
|
-
method: 'POST',
|
|
536
|
-
headers: {
|
|
537
|
-
...(accessToken.startsWith('kodus_')
|
|
538
|
-
? { 'X-Team-Key': accessToken }
|
|
539
|
-
: { Authorization: `Bearer ${accessToken}` }),
|
|
540
|
-
},
|
|
541
|
-
body: JSON.stringify({
|
|
542
|
-
repositoryIds,
|
|
543
|
-
}),
|
|
544
|
-
});
|
|
545
|
-
}
|
|
546
|
-
}
|
|
2
|
+
import { request, resetApiConfigCache, resolveApiBaseUrl, getCloudflareAccessHeaders, } from './api-core.js';
|
|
3
|
+
import { RealConfigApi } from './config.api.js';
|
|
4
|
+
import { RealReviewApi } from './review.api.js';
|
|
5
|
+
import { RealAuthApi } from './auth.api.js';
|
|
6
|
+
import { RealTrialApi } from './trial.api.js';
|
|
7
|
+
import { RealMemoryApi } from './memory.api.js';
|
|
8
|
+
export const _resetConfigCache = resetApiConfigCache;
|
|
9
|
+
export { request, resolveApiBaseUrl, getCloudflareAccessHeaders };
|
|
547
10
|
export class RealApi {
|
|
548
11
|
auth = new RealAuthApi();
|
|
549
12
|
config = new RealConfigApi();
|