codereview-aia 0.1.4 → 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.
Files changed (46) hide show
  1. package/dist/clients/openRouterClient.js +308 -466
  2. package/dist/clients/openRouterClient.js.map +1 -1
  3. package/dist/clients/utils/promptFormatter.js +39 -3
  4. package/dist/clients/utils/promptFormatter.js.map +1 -1
  5. package/dist/clients/utils/tokenCounter.js +10 -35
  6. package/dist/clients/utils/tokenCounter.js.map +1 -1
  7. package/dist/core/ConfigurationService.js +2 -2
  8. package/dist/core/ConfigurationService.js.map +1 -1
  9. package/dist/runtime/cliEntry.js +11 -1
  10. package/dist/runtime/cliEntry.js.map +1 -1
  11. package/dist/runtime/fileCollector.js +18 -17
  12. package/dist/runtime/fileCollector.js.map +1 -1
  13. package/dist/runtime/preprod/batchStreamer.d.ts +54 -0
  14. package/dist/runtime/preprod/batchStreamer.js +159 -0
  15. package/dist/runtime/preprod/batchStreamer.js.map +1 -0
  16. package/dist/runtime/preprod/crEdgeServiceClient.d.ts +30 -0
  17. package/dist/runtime/preprod/crEdgeServiceClient.js +133 -0
  18. package/dist/runtime/preprod/crEdgeServiceClient.js.map +1 -0
  19. package/dist/runtime/preprod/progressTracker.d.ts +21 -0
  20. package/dist/runtime/preprod/progressTracker.js +80 -0
  21. package/dist/runtime/preprod/progressTracker.js.map +1 -0
  22. package/dist/runtime/preprod/webCheck.d.ts +1 -1
  23. package/dist/runtime/preprod/webCheck.js +7 -3
  24. package/dist/runtime/preprod/webCheck.js.map +1 -1
  25. package/dist/runtime/reviewPipeline.d.ts +14 -0
  26. package/dist/runtime/reviewPipeline.js +88 -18
  27. package/dist/runtime/reviewPipeline.js.map +1 -1
  28. package/dist/runtime/runAiCodeReview.d.ts +8 -0
  29. package/dist/runtime/runAiCodeReview.js +56 -20
  30. package/dist/runtime/runAiCodeReview.js.map +1 -1
  31. package/dist/runtime/runtimeConfig.d.ts +1 -1
  32. package/dist/runtime/runtimeConfig.js +1 -1
  33. package/dist/runtime/runtimeConfig.js.map +1 -1
  34. package/dist/runtime/ui/RuntimeApp.js +114 -11
  35. package/dist/runtime/ui/RuntimeApp.js.map +1 -1
  36. package/dist/runtime/ui/screens/ModeSelection.d.ts +1 -0
  37. package/dist/runtime/ui/screens/ModeSelection.js +97 -28
  38. package/dist/runtime/ui/screens/ModeSelection.js.map +1 -1
  39. package/dist/runtime/ui/screens/ProgressScreen.d.ts +11 -2
  40. package/dist/runtime/ui/screens/ProgressScreen.js +28 -6
  41. package/dist/runtime/ui/screens/ProgressScreen.js.map +1 -1
  42. package/dist/runtime/ui/screens/ResultsScreen.js +6 -1
  43. package/dist/runtime/ui/screens/ResultsScreen.js.map +1 -1
  44. package/dist/utils/fileFilters.js +13 -1
  45. package/dist/utils/fileFilters.js.map +1 -1
  46. package/package.json +2 -1
@@ -0,0 +1,54 @@
1
+ export type BatchPhase = 'idle' | 'buffering' | 'sending' | 'success' | 'error' | 'creating-run';
2
+ export interface BatchStatusUpdate {
3
+ phase: BatchPhase;
4
+ batchOrdinal?: number;
5
+ batchesCompleted?: number;
6
+ totalBatches?: number;
7
+ bufferedFiles?: number;
8
+ error?: string;
9
+ attempt?: number;
10
+ }
11
+ export interface FileFindingsPayload {
12
+ path: string;
13
+ findings: unknown[];
14
+ }
15
+ interface BatchStreamerOptions {
16
+ initialRunId?: string;
17
+ repo: string;
18
+ branch?: string;
19
+ commitSha?: string;
20
+ targetUrl?: string;
21
+ recipientEmail?: string;
22
+ totalFiles: number;
23
+ batchSize?: number;
24
+ onStatus?: (update: BatchStatusUpdate) => void;
25
+ }
26
+ /**
27
+ * Handles buffering CR findings and streaming them to cr-edge-service.
28
+ *
29
+ * Manual smoke test:
30
+ * 1. cd cr/cr-aia && pnpm install && pnpm build
31
+ * 2. PREPROD_TARGET_URL="https://example.com" CR_EDGE_BASE_URL="https://cr.ai.enki.si" node dist/index.js
32
+ * 3. Select the Preprod mode and review a repo with >5 files so multiple batches stream.
33
+ * 4. Tail the CLI logs for "Submitted CR batch" during the run and query `preprod_cr_batches`
34
+ * for the reported run_id in Supabase to verify rows appear before the CLI completes.
35
+ */
36
+ export declare class BatchStreamer {
37
+ private readonly options;
38
+ private readonly batchSize;
39
+ private readonly totalBatchEstimate;
40
+ private buffer;
41
+ private batchIndex;
42
+ private runId?;
43
+ private hasMarkedFinal;
44
+ constructor(options: BatchStreamerOptions);
45
+ getRunId(): string | undefined;
46
+ primeRun(): Promise<string>;
47
+ addFiles(files: FileFindingsPayload[]): Promise<void>;
48
+ finish(): Promise<void>;
49
+ private ensureRunId;
50
+ private sendChunk;
51
+ private emitStatus;
52
+ private withRetries;
53
+ }
54
+ export {};
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BatchStreamer = void 0;
7
+ const logger_1 = __importDefault(require("../../utils/logger"));
8
+ const crEdgeServiceClient_1 = require("./crEdgeServiceClient");
9
+ const DEFAULT_BATCH_SIZE = 5;
10
+ const MAX_RETRIES = 3;
11
+ const BASE_BACKOFF_MS = 750;
12
+ /**
13
+ * Handles buffering CR findings and streaming them to cr-edge-service.
14
+ *
15
+ * Manual smoke test:
16
+ * 1. cd cr/cr-aia && pnpm install && pnpm build
17
+ * 2. PREPROD_TARGET_URL="https://example.com" CR_EDGE_BASE_URL="https://cr.ai.enki.si" node dist/index.js
18
+ * 3. Select the Preprod mode and review a repo with >5 files so multiple batches stream.
19
+ * 4. Tail the CLI logs for "Submitted CR batch" during the run and query `preprod_cr_batches`
20
+ * for the reported run_id in Supabase to verify rows appear before the CLI completes.
21
+ */
22
+ class BatchStreamer {
23
+ options;
24
+ batchSize;
25
+ totalBatchEstimate;
26
+ buffer = [];
27
+ batchIndex = 0;
28
+ runId;
29
+ hasMarkedFinal = false;
30
+ constructor(options) {
31
+ this.options = options;
32
+ this.batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
33
+ this.totalBatchEstimate = Math.max(1, Math.ceil(options.totalFiles / this.batchSize));
34
+ this.runId = options.initialRunId;
35
+ }
36
+ getRunId() {
37
+ return this.runId;
38
+ }
39
+ async primeRun() {
40
+ return this.ensureRunId();
41
+ }
42
+ async addFiles(files) {
43
+ if (!files.length) {
44
+ return;
45
+ }
46
+ for (const file of files) {
47
+ if (!file.path)
48
+ continue;
49
+ this.buffer.push(file);
50
+ }
51
+ this.emitStatus({ phase: 'buffering', bufferedFiles: this.buffer.length });
52
+ while (this.buffer.length >= this.batchSize) {
53
+ const chunk = this.buffer.splice(0, this.batchSize);
54
+ await this.sendChunk(chunk, false);
55
+ }
56
+ }
57
+ async finish() {
58
+ if (this.hasMarkedFinal) {
59
+ return;
60
+ }
61
+ if (this.buffer.length > 0) {
62
+ const chunk = this.buffer.splice(0, this.buffer.length);
63
+ await this.sendChunk(chunk, true);
64
+ return;
65
+ }
66
+ await this.sendChunk([], true);
67
+ }
68
+ async ensureRunId() {
69
+ if (this.runId) {
70
+ return this.runId;
71
+ }
72
+ this.emitStatus({ phase: 'creating-run' });
73
+ this.runId = await this.withRetries('create preprod run', async () => {
74
+ return (0, crEdgeServiceClient_1.createPreprodRun)({
75
+ repo: this.options.repo,
76
+ branch: this.options.branch,
77
+ commit_sha: this.options.commitSha,
78
+ target_url: this.options.targetUrl,
79
+ recipient_email: this.options.recipientEmail,
80
+ });
81
+ });
82
+ logger_1.default.info('Created preprod run', { run_id: this.runId });
83
+ return this.runId;
84
+ }
85
+ async sendChunk(files, markFinal) {
86
+ if (files.length === 0 && this.batchIndex === 0 && !markFinal) {
87
+ return;
88
+ }
89
+ const runId = await this.ensureRunId();
90
+ const batchOrdinal = this.batchIndex + 1;
91
+ const isFinal = markFinal;
92
+ this.emitStatus({
93
+ phase: 'sending',
94
+ batchOrdinal,
95
+ batchesCompleted: this.batchIndex,
96
+ totalBatches: this.totalBatchEstimate,
97
+ });
98
+ await this.withRetries('submit CR batch', async () => {
99
+ await (0, crEdgeServiceClient_1.submitCrBatch)({
100
+ run_id: runId,
101
+ batch_index: this.batchIndex,
102
+ files,
103
+ is_final: isFinal,
104
+ });
105
+ logger_1.default.info('Submitted CR batch', {
106
+ run_id: runId,
107
+ batch_index: this.batchIndex,
108
+ file_count: files.length,
109
+ is_final: isFinal,
110
+ });
111
+ });
112
+ this.batchIndex += 1;
113
+ if (isFinal) {
114
+ this.hasMarkedFinal = true;
115
+ }
116
+ this.emitStatus({
117
+ phase: 'success',
118
+ batchOrdinal,
119
+ batchesCompleted: this.batchIndex,
120
+ totalBatches: this.totalBatchEstimate,
121
+ bufferedFiles: this.buffer.length,
122
+ });
123
+ }
124
+ emitStatus(update) {
125
+ this.options.onStatus?.({
126
+ ...update,
127
+ totalBatches: update.totalBatches ?? this.totalBatchEstimate,
128
+ });
129
+ }
130
+ async withRetries(label, fn) {
131
+ let attempt = 0;
132
+ let lastError;
133
+ while (attempt < MAX_RETRIES) {
134
+ attempt += 1;
135
+ try {
136
+ return await fn();
137
+ }
138
+ catch (error) {
139
+ lastError = error;
140
+ const message = error instanceof Error ? error.message : String(error);
141
+ logger_1.default.warn(`Failed to ${label} (attempt ${attempt}/${MAX_RETRIES}): ${message}`, error);
142
+ this.emitStatus({
143
+ phase: 'error',
144
+ batchOrdinal: this.batchIndex + 1,
145
+ totalBatches: this.totalBatchEstimate,
146
+ error: message,
147
+ attempt,
148
+ });
149
+ if (attempt >= MAX_RETRIES) {
150
+ throw new crEdgeServiceClient_1.CrEdgeServiceError(`Unable to ${label}: ${message}`, { cause: error });
151
+ }
152
+ await new Promise((resolve) => setTimeout(resolve, BASE_BACKOFF_MS * Math.pow(2, attempt - 1)));
153
+ }
154
+ }
155
+ throw lastError instanceof Error ? lastError : new Error(`Failed to ${label}`);
156
+ }
157
+ }
158
+ exports.BatchStreamer = BatchStreamer;
159
+ //# sourceMappingURL=batchStreamer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchStreamer.js","sourceRoot":"","sources":["../../../src/runtime/preprod/batchStreamer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare class CrEdgeServiceError extends Error {
2
+ status?: number;
3
+ detail?: string;
4
+ constructor(message: string, options?: {
5
+ status?: number;
6
+ detail?: string;
7
+ cause?: unknown;
8
+ });
9
+ }
10
+ export declare function createPreprodRun(params: {
11
+ repo?: string;
12
+ branch?: string;
13
+ commit_sha?: string;
14
+ target_url?: string;
15
+ recipient_email?: string;
16
+ }): Promise<string>;
17
+ export declare function submitCrBatch(params: {
18
+ run_id: string;
19
+ batch_index: number;
20
+ files: Array<{
21
+ path: string;
22
+ findings: unknown[];
23
+ }>;
24
+ is_final: boolean;
25
+ }): Promise<string>;
26
+ export declare function updatePreprodRunMetadata(params: {
27
+ run_id: string;
28
+ status?: string;
29
+ metadata?: Record<string, unknown>;
30
+ }): Promise<void>;
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CrEdgeServiceError = void 0;
4
+ exports.createPreprodRun = createPreprodRun;
5
+ exports.submitCrBatch = submitCrBatch;
6
+ exports.updatePreprodRunMetadata = updatePreprodRunMetadata;
7
+ const DEFAULT_CR_EDGE_BASE_URL = 'https://cr.ai.enki.si';
8
+ function resolveCrEdgeBaseUrl() {
9
+ const configured = process.env.CR_EDGE_BASE_URL || process.env.CR_AIA_CR_EDGE_BASE_URL;
10
+ const base = (configured || DEFAULT_CR_EDGE_BASE_URL).trim();
11
+ return base.replace(/\/$/, '');
12
+ }
13
+ class CrEdgeServiceError extends Error {
14
+ status;
15
+ detail;
16
+ constructor(message, options) {
17
+ super(message, options?.cause ? { cause: options.cause } : undefined);
18
+ this.name = 'CrEdgeServiceError';
19
+ this.status = options?.status;
20
+ this.detail = options?.detail;
21
+ }
22
+ }
23
+ exports.CrEdgeServiceError = CrEdgeServiceError;
24
+ async function extractErrorDetail(response) {
25
+ const contentType = response.headers.get('content-type') || '';
26
+ if (contentType.includes('application/json')) {
27
+ try {
28
+ const payload = (await response.json());
29
+ return payload?.error?.message || payload?.message || payload?.detail || JSON.stringify(payload);
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ }
35
+ try {
36
+ const textBody = await response.text();
37
+ return textBody.length > 200 ? `${textBody.slice(0, 200)}…` : textBody;
38
+ }
39
+ catch {
40
+ return undefined;
41
+ }
42
+ }
43
+ async function createPreprodRun(params) {
44
+ const baseUrl = resolveCrEdgeBaseUrl();
45
+ const endpoint = `${baseUrl}/api/preprod/runs`;
46
+ let response;
47
+ try {
48
+ response = await fetch(endpoint, {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Content-Type': 'application/json',
52
+ },
53
+ body: JSON.stringify(params),
54
+ });
55
+ }
56
+ catch (networkError) {
57
+ const message = networkError instanceof Error ? networkError.message : 'Failed to create preprod run due to network error';
58
+ throw new CrEdgeServiceError(`Failed to create preprod run: ${message}`, { cause: networkError });
59
+ }
60
+ if (!response.ok) {
61
+ const detail = await extractErrorDetail(response);
62
+ const suffix = detail ? ` ${detail}` : '';
63
+ throw new CrEdgeServiceError(`Failed to create preprod run (${response.status}).${suffix}`, {
64
+ status: response.status,
65
+ detail,
66
+ });
67
+ }
68
+ const data = (await response.json());
69
+ return data.run_id;
70
+ }
71
+ async function submitCrBatch(params) {
72
+ const baseUrl = resolveCrEdgeBaseUrl();
73
+ const endpoint = `${baseUrl}/api/preprod/runs/${params.run_id}/cr-batches`;
74
+ let response;
75
+ try {
76
+ response = await fetch(endpoint, {
77
+ method: 'POST',
78
+ headers: {
79
+ 'Content-Type': 'application/json',
80
+ },
81
+ body: JSON.stringify({
82
+ run_id: params.run_id,
83
+ batch_index: params.batch_index,
84
+ files: params.files,
85
+ is_final: params.is_final,
86
+ }),
87
+ });
88
+ }
89
+ catch (networkError) {
90
+ const message = networkError instanceof Error ? networkError.message : 'Failed to submit batch due to network error';
91
+ throw new CrEdgeServiceError(`Failed to submit CR batch: ${message}`, { cause: networkError });
92
+ }
93
+ if (!response.ok) {
94
+ const detail = await extractErrorDetail(response);
95
+ const suffix = detail ? ` ${detail}` : '';
96
+ throw new CrEdgeServiceError(`Failed to submit CR batch (${response.status}).${suffix}`, {
97
+ status: response.status,
98
+ detail,
99
+ });
100
+ }
101
+ const data = (await response.json());
102
+ return data.batch_id;
103
+ }
104
+ async function updatePreprodRunMetadata(params) {
105
+ const baseUrl = resolveCrEdgeBaseUrl();
106
+ const endpoint = `${baseUrl}/api/preprod/runs/${params.run_id}`;
107
+ let response;
108
+ try {
109
+ response = await fetch(endpoint, {
110
+ method: 'PATCH',
111
+ headers: {
112
+ 'Content-Type': 'application/json',
113
+ },
114
+ body: JSON.stringify({
115
+ status: params.status,
116
+ metadata: params.metadata,
117
+ }),
118
+ });
119
+ }
120
+ catch (networkError) {
121
+ const message = networkError instanceof Error ? networkError.message : 'Failed to update run due to network error';
122
+ throw new CrEdgeServiceError(`Failed to update preprod run: ${message}`, { cause: networkError });
123
+ }
124
+ if (!response.ok) {
125
+ const detail = await extractErrorDetail(response);
126
+ const suffix = detail ? ` ${detail}` : '';
127
+ throw new CrEdgeServiceError(`Failed to update preprod run (${response.status}).${suffix}`, {
128
+ status: response.status,
129
+ detail,
130
+ });
131
+ }
132
+ }
133
+ //# sourceMappingURL=crEdgeServiceClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crEdgeServiceClient.js","sourceRoot":"","sources":["../../../src/runtime/preprod/crEdgeServiceClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ interface ProgressSnapshot {
2
+ workspace: string;
3
+ runId?: string;
4
+ nextGroup: number;
5
+ totalGroups: number;
6
+ updatedAt: string;
7
+ }
8
+ export declare class PreprodProgressTracker {
9
+ private readonly workspaceRoot;
10
+ private readonly outputDir;
11
+ private readonly filePath;
12
+ constructor(workspaceRoot: string, outputDir: string);
13
+ load(): ProgressSnapshot | null;
14
+ markGroupComplete(params: {
15
+ runId?: string;
16
+ nextGroup: number;
17
+ totalGroups: number;
18
+ }): Promise<void>;
19
+ clear(): void;
20
+ }
21
+ export {};
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PreprodProgressTracker = void 0;
7
+ const node_fs_1 = require("node:fs");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const logger_1 = __importDefault(require("../../utils/logger"));
10
+ const crEdgeServiceClient_1 = require("./crEdgeServiceClient");
11
+ class PreprodProgressTracker {
12
+ workspaceRoot;
13
+ outputDir;
14
+ filePath;
15
+ constructor(workspaceRoot, outputDir) {
16
+ this.workspaceRoot = workspaceRoot;
17
+ this.outputDir = outputDir;
18
+ this.filePath = node_path_1.default.join(this.outputDir, 'preprod-progress.json');
19
+ }
20
+ load() {
21
+ if (!(0, node_fs_1.existsSync)(this.filePath)) {
22
+ return null;
23
+ }
24
+ try {
25
+ const raw = (0, node_fs_1.readFileSync)(this.filePath, 'utf-8');
26
+ const parsed = JSON.parse(raw);
27
+ return parsed.workspace === this.workspaceRoot ? parsed : null;
28
+ }
29
+ catch (error) {
30
+ logger_1.default.warn(`Failed to read preprod progress snapshot: ${error instanceof Error ? error.message : String(error)}`);
31
+ return null;
32
+ }
33
+ }
34
+ async markGroupComplete(params) {
35
+ const snapshot = {
36
+ workspace: this.workspaceRoot,
37
+ runId: params.runId,
38
+ nextGroup: params.nextGroup,
39
+ totalGroups: params.totalGroups,
40
+ updatedAt: new Date().toISOString(),
41
+ };
42
+ try {
43
+ (0, node_fs_1.mkdirSync)(node_path_1.default.dirname(this.filePath), { recursive: true });
44
+ (0, node_fs_1.writeFileSync)(this.filePath, JSON.stringify(snapshot, null, 2), 'utf-8');
45
+ }
46
+ catch (error) {
47
+ logger_1.default.warn(`Failed to persist preprod progress snapshot: ${error instanceof Error ? error.message : String(error)}`);
48
+ }
49
+ if (params.runId) {
50
+ try {
51
+ await (0, crEdgeServiceClient_1.updatePreprodRunMetadata)({
52
+ run_id: params.runId,
53
+ metadata: {
54
+ progress: {
55
+ next_group: params.nextGroup,
56
+ total_groups: params.totalGroups,
57
+ updated_at: snapshot.updatedAt,
58
+ },
59
+ },
60
+ });
61
+ }
62
+ catch (error) {
63
+ logger_1.default.debug(`Failed to sync preprod progress to Supabase: ${error instanceof Error ? error.message : String(error)}`);
64
+ }
65
+ }
66
+ }
67
+ clear() {
68
+ if (!(0, node_fs_1.existsSync)(this.filePath)) {
69
+ return;
70
+ }
71
+ try {
72
+ (0, node_fs_1.rmSync)(this.filePath);
73
+ }
74
+ catch (error) {
75
+ logger_1.default.debug(`Failed to clear preprod progress snapshot: ${error instanceof Error ? error.message : String(error)}`);
76
+ }
77
+ }
78
+ }
79
+ exports.PreprodProgressTracker = PreprodProgressTracker;
80
+ //# sourceMappingURL=progressTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressTracker.js","sourceRoot":"","sources":["../../../src/runtime/preprod/progressTracker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- export declare function triggerManualWebCheck(targetUrl: string): Promise<void>;
1
+ export declare function triggerManualWebCheck(targetUrl: string, runId?: string): Promise<void>;
@@ -79,13 +79,17 @@ async function sendWebCheckRequest(endpoint, payload) {
79
79
  });
80
80
  }
81
81
  }
82
- async function triggerManualWebCheck(targetUrl) {
82
+ async function triggerManualWebCheck(targetUrl, runId) {
83
83
  const baseUrl = resolveAiaBaseUrl();
84
84
  const manualEndpoint = `${baseUrl}/api/manual/check`;
85
85
  const legacyEndpoint = `${baseUrl}/api/check-website`;
86
86
  const missingEndpointStatuses = new Set([404, 405, 501]);
87
+ const payload = { url: targetUrl };
88
+ if (runId) {
89
+ payload.run_id = runId;
90
+ }
87
91
  try {
88
- await sendWebCheckRequest(manualEndpoint, { url: targetUrl });
92
+ await sendWebCheckRequest(manualEndpoint, payload);
89
93
  return;
90
94
  }
91
95
  catch (error) {
@@ -93,6 +97,6 @@ async function triggerManualWebCheck(targetUrl) {
93
97
  throw error;
94
98
  }
95
99
  }
96
- await sendWebCheckRequest(legacyEndpoint, { url: targetUrl, options: {} });
100
+ await sendWebCheckRequest(legacyEndpoint, { url: targetUrl, options: {}, run_id: runId });
97
101
  }
98
102
  //# sourceMappingURL=webCheck.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webCheck.js","sourceRoot":"","sources":["../../../src/runtime/preprod/webCheck.ts"],"names":[],"mappings":";;AAuFA,sDAgBC;AAvGD,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAElD,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC/E,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI;aACnB,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC;aAC3C,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC;aACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;aACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC9G,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;AAC/E,CAAC;AAED,MAAM,oBAAqB,SAAQ,KAAK;IACtC,MAAM,CAAU;IAChB,MAAM,CAAU;IAEhB,YAAY,OAAe,EAAE,OAA+D;QAC1F,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAChC,CAAC;CACF;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAkB;IAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAC/D,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuD,CAAC;YAC9F,OAAO,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAChF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAAC,QAAgB,EAAE,OAAgC;IACnF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAC/B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GACX,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,sDAAsD,CAAC;QAChH,MAAM,IAAI,oBAAoB,CAAC,iCAAiC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,oBAAoB,CAAC,yBAAyB,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,EAAE;YACpF,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,SAAiB;IAC3D,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,GAAG,OAAO,mBAAmB,CAAC;IACrD,MAAM,cAAc,GAAG,GAAG,OAAO,oBAAoB,CAAC;IACtD,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,KAAK,YAAY,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5G,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"webCheck.js","sourceRoot":"","sources":["../../../src/runtime/preprod/webCheck.ts"],"names":[],"mappings":"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"}
@@ -2,13 +2,22 @@ import { type FileCollectionMode } from './fileCollector';
2
2
  import type { WordPressStandardsReport } from '../types/review';
3
3
  export type ReviewStage = 'preparing' | 'collecting' | 'reviewing' | 'merging';
4
4
  export type ReviewMode = FileCollectionMode;
5
+ export type StreamingPhase = 'idle' | 'buffering' | 'sending' | 'success' | 'error' | 'creating-run' | 'triggering-webcheck';
5
6
  export interface StageUpdate {
6
7
  filesFound?: number;
7
8
  currentFile?: string;
8
9
  fileIndex?: number;
9
10
  totalFiles?: number;
11
+ filesReviewed?: number;
10
12
  uncommittedFiles?: number;
11
13
  contextFiles?: number;
14
+ streamingPhase?: StreamingPhase;
15
+ streamingBatchOrdinal?: number;
16
+ streamingBatchTotal?: number;
17
+ streamingBatchesCompleted?: number;
18
+ streamingBufferedFiles?: number;
19
+ streamingLastError?: string;
20
+ streamingRetryAttempt?: number;
12
21
  }
13
22
  export interface ReviewOptions {
14
23
  model: string;
@@ -16,6 +25,8 @@ export interface ReviewOptions {
16
25
  debug?: boolean;
17
26
  mode?: ReviewMode;
18
27
  preprodTargetUrl?: string;
28
+ preprodRunId?: string;
29
+ recipientEmail?: string;
19
30
  onStage?: (stage: ReviewStage, info?: StageUpdate) => void;
20
31
  forceWordPress?: boolean;
21
32
  disableWordPress?: boolean;
@@ -23,6 +34,7 @@ export interface ReviewOptions {
23
34
  wordpressPhpcsPath?: string;
24
35
  wordpressPhpcsStandard?: string;
25
36
  wordpressPhpcsTestVersion?: string;
37
+ startGroup?: number;
26
38
  }
27
39
  export interface ReviewTotals {
28
40
  critical: number;
@@ -40,8 +52,10 @@ export interface ReviewResult {
40
52
  uncommitted: number;
41
53
  context: number;
42
54
  };
55
+ estimatedCostUSD?: number;
43
56
  reportSummary?: string;
44
57
  reportPath?: string;
58
+ finalizationByEdgeService?: boolean;
45
59
  wordpressReport?: WordPressStandardsReport;
46
60
  }
47
61
  export declare function executeReview(options: ReviewOptions): Promise<ReviewResult>;