@claudexor/review 3.1.1 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/findings.d.ts +11 -0
  2. package/dist/findings.d.ts.map +1 -1
  3. package/dist/findings.js +48 -5
  4. package/dist/findings.js.map +1 -1
  5. package/dist/readiness.d.ts.map +1 -1
  6. package/dist/revalidate.js.map +1 -1
  7. package/dist/reviewEngine.d.ts +2 -4
  8. package/dist/reviewEngine.d.ts.map +1 -1
  9. package/dist/reviewEngine.js +202 -372
  10. package/dist/reviewEngine.js.map +1 -1
  11. package/dist/reviewPrompt.d.ts +122 -1
  12. package/dist/reviewPrompt.d.ts.map +1 -1
  13. package/dist/reviewPrompt.js +102 -17
  14. package/dist/reviewPrompt.js.map +1 -1
  15. package/dist/reviewRuntimeTypes.d.ts +9 -2
  16. package/dist/reviewRuntimeTypes.d.ts.map +1 -1
  17. package/dist/reviewRuntimeTypes.js +9 -1
  18. package/dist/reviewRuntimeTypes.js.map +1 -1
  19. package/dist/reviewerCostKnowledge.d.ts +26 -0
  20. package/dist/reviewerCostKnowledge.d.ts.map +1 -0
  21. package/dist/reviewerCostKnowledge.js +73 -0
  22. package/dist/reviewerCostKnowledge.js.map +1 -0
  23. package/dist/reviewerSpendAccumulator.d.ts +26 -0
  24. package/dist/reviewerSpendAccumulator.d.ts.map +1 -0
  25. package/dist/reviewerSpendAccumulator.js +48 -0
  26. package/dist/reviewerSpendAccumulator.js.map +1 -0
  27. package/dist/reviewerWorkspace.d.ts +24 -0
  28. package/dist/reviewerWorkspace.d.ts.map +1 -0
  29. package/dist/reviewerWorkspace.js +360 -0
  30. package/dist/reviewerWorkspace.js.map +1 -0
  31. package/dist/route.js.map +1 -1
  32. package/dist/sealedReviewEnvelope.d.ts +20 -0
  33. package/dist/sealedReviewEnvelope.d.ts.map +1 -0
  34. package/dist/sealedReviewEnvelope.js +176 -0
  35. package/dist/sealedReviewEnvelope.js.map +1 -0
  36. package/package.json +6 -6
@@ -0,0 +1,73 @@
1
+ /** Tracks certainty independently for billed cash and subscription valuation. */
2
+ export class ReviewerCostKnowledge {
3
+ sawNativeRoute = false;
4
+ sawApiRoute = false;
5
+ sawNativeUsage = false;
6
+ sawUnknownUsage = false;
7
+ apiUsageEstimated = false;
8
+ nativeUsageEstimated = false;
9
+ unresolvedApiRoute = false;
10
+ unresolvedUndisclosedRoute = false;
11
+ activeSawEvent = false;
12
+ activeSawNativeRoute = false;
13
+ activeSawApiRoute = false;
14
+ activeSawApiUsage = false;
15
+ startAttempt() {
16
+ this.activeSawEvent = false;
17
+ this.activeSawNativeRoute = false;
18
+ this.activeSawApiRoute = false;
19
+ this.activeSawApiUsage = false;
20
+ }
21
+ observeEvent(route) {
22
+ this.activeSawEvent = true;
23
+ if (route === "local_session") {
24
+ this.sawNativeRoute = true;
25
+ this.activeSawNativeRoute = true;
26
+ }
27
+ else if (route === "api_key") {
28
+ this.sawApiRoute = true;
29
+ this.activeSawApiRoute = true;
30
+ }
31
+ }
32
+ observeUsage(route, estimated) {
33
+ if (route === "local_session") {
34
+ this.sawNativeUsage = true;
35
+ this.nativeUsageEstimated ||= estimated;
36
+ }
37
+ else if (route === "api_key") {
38
+ this.activeSawApiUsage = true;
39
+ this.apiUsageEstimated ||= estimated;
40
+ }
41
+ else {
42
+ this.sawUnknownUsage = true;
43
+ }
44
+ }
45
+ finishAttempt() {
46
+ if (this.activeSawApiRoute && !this.activeSawApiUsage)
47
+ this.unresolvedApiRoute = true;
48
+ if (this.activeSawEvent && !this.activeSawNativeRoute && !this.activeSawApiRoute) {
49
+ this.unresolvedUndisclosedRoute = true;
50
+ }
51
+ }
52
+ snapshot() {
53
+ const unresolvedActiveApi = this.activeSawApiRoute && !this.activeSawApiUsage;
54
+ const unresolvedActiveRoute = this.activeSawEvent && !this.activeSawNativeRoute && !this.activeSawApiRoute;
55
+ const cashUnknown = this.sawUnknownUsage ||
56
+ this.unresolvedApiRoute ||
57
+ unresolvedActiveApi ||
58
+ this.unresolvedUndisclosedRoute ||
59
+ unresolvedActiveRoute ||
60
+ (!this.sawNativeRoute && !this.sawApiRoute);
61
+ return {
62
+ cashKnowledge: cashUnknown ? "unknown" : this.apiUsageEstimated ? "estimated" : "exact",
63
+ valuationKnowledge: this.sawUnknownUsage
64
+ ? "unknown"
65
+ : this.sawNativeUsage
66
+ ? this.nativeUsageEstimated
67
+ ? "estimated"
68
+ : "exact"
69
+ : "unknown",
70
+ };
71
+ }
72
+ }
73
+ //# sourceMappingURL=reviewerCostKnowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerCostKnowledge.js","sourceRoot":"","sources":["../src/reviewerCostKnowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { CostKnowledge } from "@claudexor/schema";
2
+ import { type ReviewerOutput, type ReviewCandidateResult } from "./reviewRuntimeTypes.js";
3
+ export interface PartialReviewerSpend {
4
+ partialCostUsd?: number;
5
+ partialCostEstimated?: boolean;
6
+ partialCashUsd?: number;
7
+ partialCashKnowledge?: CostKnowledge;
8
+ partialValuationUsd?: number;
9
+ partialValuationKnowledge?: CostKnowledge;
10
+ partialUnknownUsd?: number;
11
+ }
12
+ /** Input-ordered panel accounting, kept separate from review orchestration. */
13
+ export declare class ReviewerSpendAccumulator {
14
+ private readonly spend;
15
+ private readonly estimated;
16
+ private readonly cash;
17
+ private readonly cashKnowledge;
18
+ private readonly valuation;
19
+ private readonly valuationKnowledge;
20
+ private readonly unknown;
21
+ constructor(size: number);
22
+ record(index: number, output: ReviewerOutput): void;
23
+ recordPartial(index: number, output: PartialReviewerSpend): void;
24
+ summary(): Pick<ReviewCandidateResult, "reviewSpendUsd" | "reviewSpendEstimated" | "reviewCashUsd" | "reviewCashKnowledge" | "reviewValuationUsd" | "reviewValuationKnowledge" | "reviewUnknownUsd">;
25
+ }
26
+ //# sourceMappingURL=reviewerSpendAccumulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerSpendAccumulator.d.ts","sourceRoot":"","sources":["../src/reviewerSpendAccumulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,aAAa,CAAC;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,yBAAyB,CAAC,EAAE,aAAa,CAAC;IAC1C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,+EAA+E;AAC/E,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAY;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IAEnC,YAAY,IAAI,EAAE,MAAM,EAQvB;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,CAQlD;IAED,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAe/D;IAED,OAAO,IAAI,IAAI,CACb,qBAAqB,EACnB,gBAAgB,GAChB,sBAAsB,GACtB,eAAe,GACf,qBAAqB,GACrB,oBAAoB,GACpB,0BAA0B,GAC1B,kBAAkB,CACrB,CAUA;CACF"}
@@ -0,0 +1,48 @@
1
+ import { summarizeReviewerSpend, } from "./reviewRuntimeTypes.js";
2
+ /** Input-ordered panel accounting, kept separate from review orchestration. */
3
+ export class ReviewerSpendAccumulator {
4
+ spend;
5
+ estimated;
6
+ cash;
7
+ cashKnowledge;
8
+ valuation;
9
+ valuationKnowledge;
10
+ unknown;
11
+ constructor(size) {
12
+ this.spend = Array(size).fill(0);
13
+ this.estimated = Array(size).fill(false);
14
+ this.cash = Array(size).fill(0);
15
+ this.cashKnowledge = Array(size).fill("unknown");
16
+ this.valuation = Array(size).fill(0);
17
+ this.valuationKnowledge = Array(size).fill("unknown");
18
+ this.unknown = Array(size).fill(0);
19
+ }
20
+ record(index, output) {
21
+ this.spend[index] = output.costUsd;
22
+ this.estimated[index] = output.costEstimated;
23
+ this.cash[index] = output.cashUsd;
24
+ this.cashKnowledge[index] = output.cashKnowledge;
25
+ this.valuation[index] = output.valuationUsd;
26
+ this.valuationKnowledge[index] = output.valuationKnowledge;
27
+ this.unknown[index] = output.unknownUsd;
28
+ }
29
+ recordPartial(index, output) {
30
+ const hasCost = typeof output.partialCostUsd === "number" &&
31
+ Number.isFinite(output.partialCostUsd) &&
32
+ output.partialCostUsd >= 0;
33
+ const hasComponentKnowledge = output.partialCashKnowledge !== undefined || output.partialValuationKnowledge !== undefined;
34
+ if (!hasCost && !hasComponentKnowledge)
35
+ return;
36
+ this.spend[index] = hasCost ? (output.partialCostUsd ?? 0) : 0;
37
+ this.estimated[index] = output.partialCostEstimated === true;
38
+ this.cash[index] = output.partialCashUsd ?? 0;
39
+ this.cashKnowledge[index] = output.partialCashKnowledge ?? "unknown";
40
+ this.valuation[index] = output.partialValuationUsd ?? 0;
41
+ this.valuationKnowledge[index] = output.partialValuationKnowledge ?? "unknown";
42
+ this.unknown[index] = output.partialUnknownUsd ?? 0;
43
+ }
44
+ summary() {
45
+ return summarizeReviewerSpend(this.spend, this.cash, this.valuation, this.unknown, this.estimated, this.cashKnowledge, this.valuationKnowledge);
46
+ }
47
+ }
48
+ //# sourceMappingURL=reviewerSpendAccumulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerSpendAccumulator.js","sourceRoot":"","sources":["../src/reviewerSpendAccumulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { ReviewerWorkspace } from "./reviewRuntimeTypes.js";
2
+ export declare function selectReviewerWorkspaceBaseDir(sourceRoot: string, artifactsBaseDir: string, sourceEvidenceDir: string): string;
3
+ export declare function prepareReviewerWorkspace(input: {
4
+ sourceRoot: string;
5
+ sourceEvidenceDir: string;
6
+ workspaceBaseDir: string;
7
+ reviewerDirName: string;
8
+ excludeRoots: string[];
9
+ postimagePaths?: Set<string>;
10
+ candidateCopyPaths: Set<string>;
11
+ preserveEvidenceBytes?: boolean;
12
+ }): Promise<ReviewerWorkspace>;
13
+ export declare function copyReviewEvidencePacket(sourceEvidenceDir: string, persistentEvidenceDir: string, preserveBytes?: boolean): Promise<void>;
14
+ export declare function cleanupTemporaryReviewerWorkspaceBaseDir(workspaceBaseDir: string, artifactsBaseDir: string): Promise<void>;
15
+ export declare function extractDiffPostimagePaths(diff: string): Set<string>;
16
+ interface ReviewerCandidateInventory {
17
+ mode: "git_visible" | "diff_only";
18
+ reason: string | null;
19
+ copyPaths: Set<string>;
20
+ }
21
+ export declare function buildReviewerCandidateInventory(sourceRoot: string, postimagePaths: Set<string>, requireGit: boolean): Promise<ReviewerCandidateInventory>;
22
+ export declare function isSameOrInside(parent: string, target: string): boolean;
23
+ export {};
24
+ //# sourceMappingURL=reviewerWorkspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerWorkspace.d.ts","sourceRoot":"","sources":["../src/reviewerWorkspace.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAOjE,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACxB,MAAM,CAMR;AAWD,wBAAsB,wBAAwB,CAAC,KAAK,EAAE;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiE7B;AAED,wBAAsB,wBAAwB,CAC5C,iBAAiB,EAAE,MAAM,EACzB,qBAAqB,EAAE,MAAM,EAC7B,aAAa,UAAQ,GACpB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AA6ED,wBAAsB,wCAAwC,CAC5D,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAef;AA4FD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CASnE;AAoBD,UAAU,0BAA0B;IAClC,IAAI,EAAE,aAAa,GAAG,WAAW,CAAC;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB;AAED,wBAAsB,+BAA+B,CACnD,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,0BAA0B,CAAC,CA0BrC;AA8FD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAGtE"}
@@ -0,0 +1,360 @@
1
+ import { parseUnifiedDiff, runCapture, runCaptureRaw } from "@claudexor/core";
2
+ import { existsSync, lstatSync, readlinkSync, realpathSync, statSync } from "node:fs";
3
+ import { cp, mkdir, readdir, rm } from "node:fs/promises";
4
+ import { tmpdir } from "node:os";
5
+ import { dirname, isAbsolute, join, normalize, relative, resolve, sep } from "node:path";
6
+ import { containsSecretLikeToken, newId, readTextSafe, redactSecrets, sensitiveResourcePolicy, writeJson, writeText, } from "@claudexor/util";
7
+ const BLOCKED_REVIEWER_RUNTIME_ROOTS = new Set("auth cache daemon home homes logs runs secrets state tmp workspaces".split(" "));
8
+ const TEXT_EVIDENCE_SUFFIXES = [".md", ".txt", ".json", ".yaml", ".yml", ".patch"];
9
+ export function selectReviewerWorkspaceBaseDir(sourceRoot, artifactsBaseDir, sourceEvidenceDir) {
10
+ const durableBase = join(artifactsBaseDir, "workspaces");
11
+ if (!isSameOrInside(sourceRoot, durableBase) && !isSameOrInside(sourceEvidenceDir, durableBase)) {
12
+ return durableBase;
13
+ }
14
+ return join(tmpdir(), `claudexor-review-workspaces-${newId("ws")}`);
15
+ }
16
+ function isTemporaryReviewerWorkspaceBaseDir(baseDir) {
17
+ const resolved = resolve(baseDir);
18
+ const rel = relative(tmpdir(), resolved);
19
+ return (isSameOrInside(tmpdir(), resolved) &&
20
+ rel.split(sep)[0]?.startsWith("claudexor-review-workspaces-") === true);
21
+ }
22
+ export async function prepareReviewerWorkspace(input) {
23
+ const sourceRoot = resolve(input.sourceRoot);
24
+ const workspaceBaseDir = resolve(input.workspaceBaseDir);
25
+ const root = join(workspaceBaseDir, input.reviewerDirName);
26
+ if (!existsSync(sourceRoot)) {
27
+ throw new Error(`candidate root does not exist: ${sourceRoot}`);
28
+ }
29
+ if (isSameOrInside(sourceRoot, root)) {
30
+ throw new Error(`reviewer workspace must be outside candidate root: ${root}`);
31
+ }
32
+ try {
33
+ await rm(root, { recursive: true, force: true });
34
+ await mkdir(root, { recursive: true, mode: 0o700 });
35
+ const excludeRoots = input.excludeRoots.map((p) => resolve(p));
36
+ const resolvedSourceRoot = realpathSync(sourceRoot);
37
+ await cp(sourceRoot, root, {
38
+ recursive: true,
39
+ dereference: false,
40
+ filter: (sourcePath) => shouldCopyReviewerPath(sourceRoot, resolvedSourceRoot, sourcePath, excludeRoots, input.postimagePaths, true, input.candidateCopyPaths),
41
+ });
42
+ const sourceEvidenceDir = resolve(input.sourceEvidenceDir);
43
+ const evidenceDir = join(root, ".claudexor-review-evidence");
44
+ if (existsSync(sourceEvidenceDir)) {
45
+ const resolvedSourceEvidenceDir = realpathSync(sourceEvidenceDir);
46
+ const evidenceExcludeRoots = excludeRoots.filter((root) => !isSameOrInside(root, sourceEvidenceDir));
47
+ await rm(evidenceDir, { recursive: true, force: true });
48
+ await cp(sourceEvidenceDir, evidenceDir, input.preserveEvidenceBytes
49
+ ? { recursive: true, dereference: false }
50
+ : {
51
+ recursive: true,
52
+ dereference: false,
53
+ filter: (sourcePath) => shouldCopyReviewerPath(sourceEvidenceDir, resolvedSourceEvidenceDir, sourcePath, evidenceExcludeRoots),
54
+ });
55
+ }
56
+ await mkdir(evidenceDir, { recursive: true, mode: 0o700 });
57
+ await initializeReviewerWorkspaceGit(root);
58
+ return { root, evidenceDir };
59
+ }
60
+ catch (err) {
61
+ await rm(root, { recursive: true, force: true });
62
+ throw err;
63
+ }
64
+ }
65
+ export async function copyReviewEvidencePacket(sourceEvidenceDir, persistentEvidenceDir, preserveBytes = false) {
66
+ const source = resolve(sourceEvidenceDir);
67
+ const target = resolve(persistentEvidenceDir);
68
+ await rm(target, { recursive: true, force: true });
69
+ if (!existsSync(source)) {
70
+ await mkdir(target, { recursive: true, mode: 0o700 });
71
+ return;
72
+ }
73
+ if (preserveBytes) {
74
+ await mkdir(dirname(target), { recursive: true, mode: 0o700 });
75
+ await cp(source, target, { recursive: true, dereference: false });
76
+ return;
77
+ }
78
+ await mkdir(target, { recursive: true, mode: 0o700 });
79
+ const resolvedSource = realpathSync(source);
80
+ for (const entry of await readdir(source, { withFileTypes: true })) {
81
+ const sourcePath = join(source, entry.name);
82
+ if (!shouldCopyEvidencePacketPath(source, resolvedSource, sourcePath, target)) {
83
+ continue;
84
+ }
85
+ await copyReviewEvidenceEntry(source, resolvedSource, sourcePath, join(target, entry.name), target);
86
+ }
87
+ }
88
+ async function copyReviewEvidenceEntry(sourceEvidenceDir, resolvedSourceEvidenceDir, sourcePath, targetPath, targetEvidenceDir) {
89
+ const stat = lstatSync(sourcePath);
90
+ if (stat.isDirectory()) {
91
+ await mkdir(targetPath, { recursive: true, mode: 0o700 });
92
+ for (const entry of await readdir(sourcePath, { withFileTypes: true })) {
93
+ const childSource = join(sourcePath, entry.name);
94
+ if (!shouldCopyEvidencePacketPath(sourceEvidenceDir, resolvedSourceEvidenceDir, childSource, targetEvidenceDir)) {
95
+ continue;
96
+ }
97
+ await copyReviewEvidenceEntry(sourceEvidenceDir, resolvedSourceEvidenceDir, childSource, join(targetPath, entry.name), targetEvidenceDir);
98
+ }
99
+ return;
100
+ }
101
+ if (stat.isFile() && shouldTextSanitizeEvidenceFile(sourcePath)) {
102
+ const raw = readTextSafe(sourcePath);
103
+ if (raw === null)
104
+ throw new Error(`could not read review evidence file: ${sourcePath}`);
105
+ const text = shouldFailClosedEvidenceFile(sourcePath) ? raw : redactSecrets(raw);
106
+ if (containsSecretLikeToken(text)) {
107
+ throw new Error(`review evidence file contains a secret-like token: ${relative(sourceEvidenceDir, sourcePath)}`);
108
+ }
109
+ writeText(targetPath, text);
110
+ return;
111
+ }
112
+ await mkdir(dirname(targetPath), { recursive: true, mode: 0o700 });
113
+ await cp(sourcePath, targetPath, { recursive: false, dereference: false });
114
+ }
115
+ function shouldTextSanitizeEvidenceFile(path) {
116
+ return TEXT_EVIDENCE_SUFFIXES.some((extension) => path.toLowerCase().endsWith(extension));
117
+ }
118
+ function shouldFailClosedEvidenceFile(path) {
119
+ return path.toLowerCase().endsWith(".patch");
120
+ }
121
+ function shouldCopyEvidencePacketPath(sourceEvidenceDir, resolvedSourceEvidenceDir, sourcePath, targetEvidenceDir) {
122
+ const resolvedSourcePath = resolve(sourcePath);
123
+ if (isSameOrInside(resolvedSourcePath, targetEvidenceDir))
124
+ return false;
125
+ if (isSameOrInside(targetEvidenceDir, resolvedSourcePath))
126
+ return false;
127
+ return shouldCopyReviewerPath(sourceEvidenceDir, resolvedSourceEvidenceDir, resolvedSourcePath, [targetEvidenceDir], new Set(), false);
128
+ }
129
+ export async function cleanupTemporaryReviewerWorkspaceBaseDir(workspaceBaseDir, artifactsBaseDir) {
130
+ if (!isTemporaryReviewerWorkspaceBaseDir(workspaceBaseDir))
131
+ return;
132
+ try {
133
+ await rm(workspaceBaseDir, { recursive: true, force: true });
134
+ }
135
+ catch (err) {
136
+ try {
137
+ writeJson(join(artifactsBaseDir, "reviewer-workspace-base-cleanup-error.json"), {
138
+ reviewer_workspace_base_cleanup: "failed",
139
+ workspace_base_dir: workspaceBaseDir,
140
+ error: redactSecrets(err instanceof Error ? err.message : String(err)),
141
+ });
142
+ }
143
+ catch {
144
+ // Do not let cleanup telemetry hide the review result or the original error.
145
+ }
146
+ }
147
+ }
148
+ function shouldCopyReviewerPath(sourceRoot, resolvedSourceRoot, sourcePath, excludeRoots, postimagePaths = new Set(), enforceContentPolicy = true, candidateCopyPaths) {
149
+ const resolvedSourcePath = resolve(sourcePath);
150
+ const rel = relative(sourceRoot, resolvedSourcePath);
151
+ if (rel && candidateCopyPaths) {
152
+ const normalized = normalizeReviewerRelativePath(rel);
153
+ if (!normalized || !candidateCopyPaths.has(normalized))
154
+ return false;
155
+ }
156
+ if (!isCopyableReviewerSymlink(sourceRoot, resolvedSourceRoot, resolvedSourcePath, excludeRoots)) {
157
+ return false;
158
+ }
159
+ if (excludeRoots.some((root) => isSameOrInside(root, resolvedSourcePath)))
160
+ return false;
161
+ if (!rel)
162
+ return true;
163
+ const normalizedRel = normalizeReviewerRelativePath(rel);
164
+ if (!normalizedRel)
165
+ return false;
166
+ const parts = normalizedRel.split("/");
167
+ if (sensitiveResourcePolicy.classifyPath(rel).sensitive) {
168
+ return false;
169
+ }
170
+ if (parts[0] === ".claudexor") {
171
+ return (isCopyableReviewerClaudexorPath(rel, parts, postimagePaths) &&
172
+ (!enforceContentPolicy || reviewerFileContentAllowed(resolvedSourcePath)));
173
+ }
174
+ if (parts.some((part) => [".git", ".adversarial-review", ".turbo", "node_modules"].includes(part))) {
175
+ return false;
176
+ }
177
+ if (parts.some((part) => [".next", ".cache", "coverage", "dist"].includes(part)) &&
178
+ !isReviewerPostimagePath(rel, postimagePaths)) {
179
+ return false;
180
+ }
181
+ return (!rel.endsWith(".tsbuildinfo") &&
182
+ (!enforceContentPolicy || reviewerFileContentAllowed(resolvedSourcePath)));
183
+ }
184
+ function reviewerFileContentAllowed(path) {
185
+ let targetStat;
186
+ try {
187
+ targetStat = statSync(path);
188
+ }
189
+ catch {
190
+ return false;
191
+ }
192
+ if (!targetStat.isFile())
193
+ return true;
194
+ const content = readTextSafe(path);
195
+ return content !== null && !sensitiveResourcePolicy.containsSensitiveContent(content);
196
+ }
197
+ function isCopyableReviewerClaudexorPath(rel, parts, postimagePaths) {
198
+ if (parts.length === 1) {
199
+ return true;
200
+ }
201
+ if (parts.length === 2 && parts[1] === "config.yaml") {
202
+ return true;
203
+ }
204
+ const runtimeRoot = parts[1]?.toLowerCase();
205
+ if (runtimeRoot && BLOCKED_REVIEWER_RUNTIME_ROOTS.has(runtimeRoot))
206
+ return false;
207
+ return isReviewerPostimagePath(rel, postimagePaths);
208
+ }
209
+ function isReviewerPostimagePath(rel, postimagePaths) {
210
+ const normalized = normalizeReviewerRelativePath(rel);
211
+ if (!normalized)
212
+ return false;
213
+ if (postimagePaths.has(normalized))
214
+ return true;
215
+ const prefix = `${normalized}/`;
216
+ for (const postimage of postimagePaths) {
217
+ if (postimage.startsWith(prefix))
218
+ return true;
219
+ }
220
+ return false;
221
+ }
222
+ export function extractDiffPostimagePaths(diff) {
223
+ const paths = new Set();
224
+ for (const file of parseUnifiedDiff(diff).files) {
225
+ // Reviewer workspaces represent the candidate postimage. Old rename and
226
+ // deletion paths live in DIFF.patch; re-reading them from the live source
227
+ // could pick up an unrelated ignored file recreated at the retired path.
228
+ if (!file.deleted && file.newPath)
229
+ addReviewerPreservePath(paths, file.newPath);
230
+ }
231
+ return paths;
232
+ }
233
+ function addReviewerPreservePath(paths, value) {
234
+ const normalized = normalizeReviewerRelativePath(value);
235
+ if (normalized)
236
+ paths.add(normalized);
237
+ }
238
+ function normalizeReviewerRelativePath(value) {
239
+ if (!value || value === "/dev/null" || isAbsolute(value))
240
+ return null;
241
+ const platformPath = normalize(value);
242
+ // Git paths are slash-delimited, but on POSIX a backslash is a literal file
243
+ // name byte. Convert it only where the host path implementation treats it as
244
+ // a separator; otherwise `safe\\file` must not authorize `safe/file`.
245
+ const normalized = sep === "\\" ? platformPath.replace(/\\/g, "/") : platformPath;
246
+ if (!normalized || normalized === "." || normalized === ".." || normalized.startsWith("../")) {
247
+ return null;
248
+ }
249
+ return normalized;
250
+ }
251
+ export async function buildReviewerCandidateInventory(sourceRoot, postimagePaths, requireGit) {
252
+ const result = await runCaptureRaw("git", ["-C", sourceRoot, "ls-files", "--cached", "--others", "--exclude-standard", "-z", "--"], { env: reviewerGitEnv(), timeoutMs: 30_000 });
253
+ if (result.code !== 0) {
254
+ const detail = redactSecrets((result.stderr || result.stdout || `exit ${String(result.code)}`).trim());
255
+ if (requireGit) {
256
+ throw new Error(`failed to inventory frozen reviewer candidate: ${detail}`);
257
+ }
258
+ return {
259
+ mode: "diff_only",
260
+ reason: detail || "Git inventory unavailable",
261
+ copyPaths: reviewerCopyPathClosure(postimagePaths),
262
+ };
263
+ }
264
+ const visiblePaths = result.stdout.split("\0").filter(Boolean);
265
+ return {
266
+ mode: "git_visible",
267
+ reason: null,
268
+ copyPaths: reviewerCopyPathClosure([...visiblePaths, ...postimagePaths]),
269
+ };
270
+ }
271
+ function reviewerCopyPathClosure(paths) {
272
+ const closure = new Set();
273
+ for (const value of paths) {
274
+ const normalized = normalizeReviewerRelativePath(value);
275
+ if (!normalized)
276
+ continue;
277
+ const parts = normalized.split("/");
278
+ for (let length = 1; length <= parts.length; length += 1) {
279
+ closure.add(parts.slice(0, length).join("/"));
280
+ }
281
+ }
282
+ return closure;
283
+ }
284
+ function isCopyableReviewerSymlink(sourceRoot, resolvedSourceRoot, sourcePath, excludeRoots) {
285
+ let stat;
286
+ try {
287
+ stat = lstatSync(sourcePath);
288
+ }
289
+ catch {
290
+ return false;
291
+ }
292
+ if (!stat.isSymbolicLink())
293
+ return true;
294
+ let linkTarget = "";
295
+ let resolvedTarget = "";
296
+ let targetKind = "other";
297
+ try {
298
+ linkTarget = readlinkSync(sourcePath);
299
+ resolvedTarget = realpathSync(sourcePath);
300
+ const targetStat = statSync(sourcePath);
301
+ targetKind = targetStat.isDirectory() ? "directory" : targetStat.isFile() ? "file" : "other";
302
+ }
303
+ catch {
304
+ return false;
305
+ }
306
+ return sensitiveResourcePolicy.assessSymlink({
307
+ sourceRoot,
308
+ canonicalSourceRoot: resolvedSourceRoot,
309
+ sourcePath,
310
+ linkTarget,
311
+ resolvedTargetPath: resolvedTarget,
312
+ targetKind,
313
+ allowedTargetKinds: ["file", "directory"],
314
+ excludedRoots: excludeRoots,
315
+ relocationRoot: sourceRoot,
316
+ }).allowed;
317
+ }
318
+ async function initializeReviewerWorkspaceGit(root) {
319
+ const noHooks = ["-c", "core.hooksPath=/dev/null"];
320
+ await runGitOrThrow("init", root, ["-c", "init.templateDir=", ...noHooks, "init"]);
321
+ for (const [key, value] of [
322
+ ["user.email", "claudexor-review@example.invalid"],
323
+ ["user.name", "Claudexor Review"],
324
+ ]) {
325
+ await runGitOrThrow(`config ${key}`, root, [...noHooks, "config", key, value]);
326
+ }
327
+ await runGitOrThrow("add", root, [...noHooks, "add", "-A", "--force"]);
328
+ await runGitOrThrow("commit", root, [
329
+ ...noHooks,
330
+ "commit",
331
+ "--allow-empty",
332
+ "--no-verify",
333
+ "--no-gpg-sign",
334
+ "-m",
335
+ "review baseline",
336
+ ]);
337
+ }
338
+ async function runGitOrThrow(label, cwd, args) {
339
+ const result = await runCapture("git", args, {
340
+ cwd,
341
+ env: reviewerGitEnv(),
342
+ timeoutMs: 60_000,
343
+ });
344
+ if (result.code === 0)
345
+ return;
346
+ const detail = redactSecrets((result.stderr || result.stdout || `exit ${result.code}`).trim());
347
+ throw new Error(`failed to prepare reviewer workspace (${label}): ${detail}`);
348
+ }
349
+ function reviewerGitEnv() {
350
+ const gitEnv = Object.fromEntries(Object.keys(process.env)
351
+ .filter((key) => key.startsWith("GIT_"))
352
+ .map((key) => [key, null]));
353
+ gitEnv.GIT_CONFIG_NOSYSTEM = "1";
354
+ return gitEnv;
355
+ }
356
+ export function isSameOrInside(parent, target) {
357
+ const rel = relative(resolve(parent), resolve(target));
358
+ return rel === "" || (!!rel && rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel));
359
+ }
360
+ //# sourceMappingURL=reviewerWorkspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewerWorkspace.js","sourceRoot":"","sources":["../src/reviewerWorkspace.ts"],"names":[],"mappings":"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"}
package/dist/route.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAcnE,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAC7B,SAAyB,EACzB,QAAuB,EACvB,mBAA6B,EAAE;IAE/B,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,IAAI,aAAa,CAAC;IACjE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,KAAK,aAAa,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,WAAW;QACzB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,cAAc,KAAK,UAAU;YAC7B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,UAAU,CAAC;IACjB,OAAO,gBAAgB,CAAC,KAAK,CAAC;QAC5B,SAAS,EAAE;YACT,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;SACzC;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,eAAe,EAAE,cAAc;SAChC;QACD,iBAAiB,EAAE,gBAAgB;QACnC,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA+B,CAAC;IACvE,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,QAAQ,GACZ,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;YAChF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,cAAc,GAClB,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YAC9E,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACjD,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1C,MAAM,SAAS,GACb,CAAC,CAAC,MAAM,KAAK,UAAU;YACvB,aAAa;YACb,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;gBAC1D,CAAC,6BAA6B,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,qBAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,IAAI,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAcnE,gGAAgG;AAChG,MAAM,UAAU,eAAe,CAC7B,SAAyB,EACzB,QAAuB,EACvB,gBAAgB,GAAa,EAAE;IAE/B,MAAM,cAAc,GAAG,QAAQ,CAAC,eAAe,IAAI,aAAa,CAAC;IACjE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,cAAc,KAAK,aAAa,CAAC;IACnF,MAAM,MAAM,GAAG,CAAC,WAAW;QACzB,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,cAAc,KAAK,UAAU;YAC7B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,UAAU,CAAC;IACjB,OAAO,gBAAgB,CAAC,KAAK,CAAC;QAC5B,SAAS,EAAE;YACT,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,eAAe,EAAE,SAAS,CAAC,eAAe;YAC1C,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,IAAI;SACzC;QACD,QAAQ,EAAE;YACR,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;YACnC,eAAe,EAAE,cAAc;SAChC;QACD,iBAAiB,EAAE,gBAAgB;QACnC,MAAM;KACP,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAoB;IACpD,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAA+B,CAAC;IACvE,MAAM,6BAA6B,GAAG,IAAI,GAAG,EAAuB,CAAC;IACrE,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,QAAQ,GACZ,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAkB,CAAC;YAChF,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC1C,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,cAAc,GAClB,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,GAAG,EAAU,CAAC;YAC9E,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACjD,6BAA6B,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,aAAa,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC1C,MAAM,SAAS,GACb,CAAC,CAAC,MAAM,KAAK,UAAU;YACvB,aAAa;YACb,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;gBAC1D,CAAC,6BAA6B,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,qBAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const RELEASE_NATIVE_CHECKLIST_ITEMS: readonly ["sealed_evidence", "intent_and_scope", "runtime_and_security", "tests_and_release"];
2
+ export declare const SEALED_REVIEW_SEVERITY_VALUES: readonly ["BLOCK", "FIX_FIRST", "WARN", "NIT", "OUT_OF_SCOPE", "INSUFFICIENT_EVIDENCE", "NEEDS_HUMAN"];
3
+ export declare const SEALED_REVIEW_CATEGORY_VALUES: readonly ["correctness", "regression", "security", "performance", "maintainability", "test_gap", "spec_gap", "deploy", "architecture", "ux"];
4
+ export interface SealedReviewDecisionFinding {
5
+ severity: string;
6
+ }
7
+ export interface SealedReviewDecisionEnvelopeParse {
8
+ findings: SealedReviewDecisionFinding[];
9
+ rawFindings: unknown[];
10
+ malformed: number;
11
+ error: string | null;
12
+ blocks: unknown[];
13
+ }
14
+ /** Deterministic persisted transcript projection for sealed native reviews. */
15
+ export declare function sealedReviewTranscriptChunk(event: unknown): string | null;
16
+ export declare function sealedReviewTranscriptFromEvents(events: readonly unknown[]): string;
17
+ /** Dependency-free decision parser shared by the product and receipt verifier.
18
+ * Full product normalization still runs the canonical ReviewFinding schema. */
19
+ export declare function parseSealedReviewDecisionEnvelopeDetailed(text: string): SealedReviewDecisionEnvelopeParse;
20
+ //# sourceMappingURL=sealedReviewEnvelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sealedReviewEnvelope.d.ts","sourceRoot":"","sources":["../src/sealedReviewEnvelope.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,YACzC,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,CACX,CAAC;AAEX,eAAO,MAAM,6BAA6B,YACxC,OAAO,EACP,WAAW,EACX,MAAM,EACN,KAAK,EACL,cAAc,EACd,uBAAuB,EACvB,aAAa,CACL,CAAC;AACX,eAAO,MAAM,6BAA6B,YACxC,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,IAAI,CACI,CAAC;AAKX,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,2BAA2B,EAAE,CAAC;IACxC,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AAED,+EAA+E;AAC/E,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAMzE;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAkBnF;AAED;+EAC+E;AAC/E,wBAAgB,yCAAyC,CACvD,IAAI,EAAE,MAAM,GACX,iCAAiC,CAoFnC"}