arcagent-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -0
- package/dist/auth/apiKeyAuth.d.ts +16 -0
- package/dist/auth/apiKeyAuth.d.ts.map +1 -0
- package/dist/auth/apiKeyAuth.js +65 -0
- package/dist/auth/apiKeyAuth.js.map +1 -0
- package/dist/config.d.ts +21 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +63 -0
- package/dist/config.js.map +1 -0
- package/dist/convex/client.d.ts +7 -0
- package/dist/convex/client.d.ts.map +1 -0
- package/dist/convex/client.js +60 -0
- package/dist/convex/client.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +370 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/clerk.d.ts +12 -0
- package/dist/lib/clerk.d.ts.map +1 -0
- package/dist/lib/clerk.js +77 -0
- package/dist/lib/clerk.js.map +1 -0
- package/dist/lib/context.d.ts +30 -0
- package/dist/lib/context.d.ts.map +1 -0
- package/dist/lib/context.js +73 -0
- package/dist/lib/context.js.map +1 -0
- package/dist/lib/crypto.d.ts +14 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +25 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/httpError.d.ts +10 -0
- package/dist/lib/httpError.d.ts.map +1 -0
- package/dist/lib/httpError.js +13 -0
- package/dist/lib/httpError.js.map +1 -0
- package/dist/lib/lruCache.d.ts +13 -0
- package/dist/lib/lruCache.d.ts.map +1 -0
- package/dist/lib/lruCache.js +52 -0
- package/dist/lib/lruCache.js.map +1 -0
- package/dist/lib/rateLimit.d.ts +14 -0
- package/dist/lib/rateLimit.d.ts.map +1 -0
- package/dist/lib/rateLimit.js +108 -0
- package/dist/lib/rateLimit.js.map +1 -0
- package/dist/lib/sessionStore.d.ts +15 -0
- package/dist/lib/sessionStore.d.ts.map +1 -0
- package/dist/lib/sessionStore.js +86 -0
- package/dist/lib/sessionStore.js.map +1 -0
- package/dist/lib/telemetry.d.ts +21 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +43 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/toolHelper.d.ts +13 -0
- package/dist/lib/toolHelper.d.ts.map +1 -0
- package/dist/lib/toolHelper.js +20 -0
- package/dist/lib/toolHelper.js.map +1 -0
- package/dist/lib/toolProfiles.d.ts +62 -0
- package/dist/lib/toolProfiles.d.ts.map +1 -0
- package/dist/lib/toolProfiles.js +110 -0
- package/dist/lib/toolProfiles.js.map +1 -0
- package/dist/lib/types.d.ts +128 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +101 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/cancelBounty.d.ts +3 -0
- package/dist/tools/cancelBounty.d.ts.map +1 -0
- package/dist/tools/cancelBounty.js +59 -0
- package/dist/tools/cancelBounty.js.map +1 -0
- package/dist/tools/checkNotifications.d.ts +3 -0
- package/dist/tools/checkNotifications.d.ts.map +1 -0
- package/dist/tools/checkNotifications.js +69 -0
- package/dist/tools/checkNotifications.js.map +1 -0
- package/dist/tools/claimBounty.d.ts +3 -0
- package/dist/tools/claimBounty.d.ts.map +1 -0
- package/dist/tools/claimBounty.js +59 -0
- package/dist/tools/claimBounty.js.map +1 -0
- package/dist/tools/createBounty.d.ts +3 -0
- package/dist/tools/createBounty.d.ts.map +1 -0
- package/dist/tools/createBounty.js +90 -0
- package/dist/tools/createBounty.js.map +1 -0
- package/dist/tools/extendClaim.d.ts +3 -0
- package/dist/tools/extendClaim.d.ts.map +1 -0
- package/dist/tools/extendClaim.js +68 -0
- package/dist/tools/extendClaim.js.map +1 -0
- package/dist/tools/fundBountyEscrow.d.ts +3 -0
- package/dist/tools/fundBountyEscrow.d.ts.map +1 -0
- package/dist/tools/fundBountyEscrow.js +49 -0
- package/dist/tools/fundBountyEscrow.js.map +1 -0
- package/dist/tools/getAgentProfile.d.ts +3 -0
- package/dist/tools/getAgentProfile.d.ts.map +1 -0
- package/dist/tools/getAgentProfile.js +45 -0
- package/dist/tools/getAgentProfile.js.map +1 -0
- package/dist/tools/getBountyDetails.d.ts +3 -0
- package/dist/tools/getBountyDetails.d.ts.map +1 -0
- package/dist/tools/getBountyDetails.js +79 -0
- package/dist/tools/getBountyDetails.js.map +1 -0
- package/dist/tools/getBountyGenerationStatus.d.ts +3 -0
- package/dist/tools/getBountyGenerationStatus.d.ts.map +1 -0
- package/dist/tools/getBountyGenerationStatus.js +71 -0
- package/dist/tools/getBountyGenerationStatus.js.map +1 -0
- package/dist/tools/getClaimStatus.d.ts +3 -0
- package/dist/tools/getClaimStatus.d.ts.map +1 -0
- package/dist/tools/getClaimStatus.js +78 -0
- package/dist/tools/getClaimStatus.js.map +1 -0
- package/dist/tools/getLeaderboard.d.ts +3 -0
- package/dist/tools/getLeaderboard.d.ts.map +1 -0
- package/dist/tools/getLeaderboard.js +40 -0
- package/dist/tools/getLeaderboard.js.map +1 -0
- package/dist/tools/getMyAgentStats.d.ts +3 -0
- package/dist/tools/getMyAgentStats.d.ts.map +1 -0
- package/dist/tools/getMyAgentStats.js +65 -0
- package/dist/tools/getMyAgentStats.js.map +1 -0
- package/dist/tools/getRepoMap.d.ts +3 -0
- package/dist/tools/getRepoMap.d.ts.map +1 -0
- package/dist/tools/getRepoMap.js +139 -0
- package/dist/tools/getRepoMap.js.map +1 -0
- package/dist/tools/getSubmissionFeedback.d.ts +3 -0
- package/dist/tools/getSubmissionFeedback.d.ts.map +1 -0
- package/dist/tools/getSubmissionFeedback.js +81 -0
- package/dist/tools/getSubmissionFeedback.js.map +1 -0
- package/dist/tools/getTestSuites.d.ts +3 -0
- package/dist/tools/getTestSuites.d.ts.map +1 -0
- package/dist/tools/getTestSuites.js +64 -0
- package/dist/tools/getTestSuites.js.map +1 -0
- package/dist/tools/getVerificationStatus.d.ts +3 -0
- package/dist/tools/getVerificationStatus.d.ts.map +1 -0
- package/dist/tools/getVerificationStatus.js +115 -0
- package/dist/tools/getVerificationStatus.js.map +1 -0
- package/dist/tools/importWorkItem.d.ts +3 -0
- package/dist/tools/importWorkItem.d.ts.map +1 -0
- package/dist/tools/importWorkItem.js +156 -0
- package/dist/tools/importWorkItem.js.map +1 -0
- package/dist/tools/listBounties.d.ts +3 -0
- package/dist/tools/listBounties.d.ts.map +1 -0
- package/dist/tools/listBounties.js +49 -0
- package/dist/tools/listBounties.js.map +1 -0
- package/dist/tools/listMySubmissions.d.ts +3 -0
- package/dist/tools/listMySubmissions.d.ts.map +1 -0
- package/dist/tools/listMySubmissions.js +46 -0
- package/dist/tools/listMySubmissions.js.map +1 -0
- package/dist/tools/rateAgent.d.ts +3 -0
- package/dist/tools/rateAgent.d.ts.map +1 -0
- package/dist/tools/rateAgent.js +94 -0
- package/dist/tools/rateAgent.js.map +1 -0
- package/dist/tools/registerAccount.d.ts +3 -0
- package/dist/tools/registerAccount.d.ts.map +1 -0
- package/dist/tools/registerAccount.js +103 -0
- package/dist/tools/registerAccount.js.map +1 -0
- package/dist/tools/releaseClaim.d.ts +3 -0
- package/dist/tools/releaseClaim.d.ts.map +1 -0
- package/dist/tools/releaseClaim.js +43 -0
- package/dist/tools/releaseClaim.js.map +1 -0
- package/dist/tools/setupPaymentMethod.d.ts +3 -0
- package/dist/tools/setupPaymentMethod.d.ts.map +1 -0
- package/dist/tools/setupPaymentMethod.js +53 -0
- package/dist/tools/setupPaymentMethod.js.map +1 -0
- package/dist/tools/setupPayoutAccount.d.ts +3 -0
- package/dist/tools/setupPayoutAccount.d.ts.map +1 -0
- package/dist/tools/setupPayoutAccount.js +44 -0
- package/dist/tools/setupPayoutAccount.js.map +1 -0
- package/dist/tools/submitSolution.d.ts +3 -0
- package/dist/tools/submitSolution.d.ts.map +1 -0
- package/dist/tools/submitSolution.js +98 -0
- package/dist/tools/submitSolution.js.map +1 -0
- package/dist/tools/workspaceApplyPatch.d.ts +41 -0
- package/dist/tools/workspaceApplyPatch.d.ts.map +1 -0
- package/dist/tools/workspaceApplyPatch.js +328 -0
- package/dist/tools/workspaceApplyPatch.js.map +1 -0
- package/dist/tools/workspaceBatchRead.d.ts +3 -0
- package/dist/tools/workspaceBatchRead.d.ts.map +1 -0
- package/dist/tools/workspaceBatchRead.js +95 -0
- package/dist/tools/workspaceBatchRead.js.map +1 -0
- package/dist/tools/workspaceBatchWrite.d.ts +3 -0
- package/dist/tools/workspaceBatchWrite.d.ts.map +1 -0
- package/dist/tools/workspaceBatchWrite.js +94 -0
- package/dist/tools/workspaceBatchWrite.js.map +1 -0
- package/dist/tools/workspaceCrashReports.d.ts +3 -0
- package/dist/tools/workspaceCrashReports.d.ts.map +1 -0
- package/dist/tools/workspaceCrashReports.js +76 -0
- package/dist/tools/workspaceCrashReports.js.map +1 -0
- package/dist/tools/workspaceEditFile.d.ts +3 -0
- package/dist/tools/workspaceEditFile.d.ts.map +1 -0
- package/dist/tools/workspaceEditFile.js +93 -0
- package/dist/tools/workspaceEditFile.js.map +1 -0
- package/dist/tools/workspaceExec.d.ts +3 -0
- package/dist/tools/workspaceExec.d.ts.map +1 -0
- package/dist/tools/workspaceExec.js +65 -0
- package/dist/tools/workspaceExec.js.map +1 -0
- package/dist/tools/workspaceExecStream.d.ts +3 -0
- package/dist/tools/workspaceExecStream.d.ts.map +1 -0
- package/dist/tools/workspaceExecStream.js +110 -0
- package/dist/tools/workspaceExecStream.js.map +1 -0
- package/dist/tools/workspaceGlob.d.ts +3 -0
- package/dist/tools/workspaceGlob.d.ts.map +1 -0
- package/dist/tools/workspaceGlob.js +78 -0
- package/dist/tools/workspaceGlob.js.map +1 -0
- package/dist/tools/workspaceGrep.d.ts +3 -0
- package/dist/tools/workspaceGrep.d.ts.map +1 -0
- package/dist/tools/workspaceGrep.js +184 -0
- package/dist/tools/workspaceGrep.js.map +1 -0
- package/dist/tools/workspaceListFiles.d.ts +3 -0
- package/dist/tools/workspaceListFiles.d.ts.map +1 -0
- package/dist/tools/workspaceListFiles.js +86 -0
- package/dist/tools/workspaceListFiles.js.map +1 -0
- package/dist/tools/workspaceReadFile.d.ts +3 -0
- package/dist/tools/workspaceReadFile.d.ts.map +1 -0
- package/dist/tools/workspaceReadFile.js +94 -0
- package/dist/tools/workspaceReadFile.js.map +1 -0
- package/dist/tools/workspaceSearch.d.ts +3 -0
- package/dist/tools/workspaceSearch.d.ts.map +1 -0
- package/dist/tools/workspaceSearch.js +102 -0
- package/dist/tools/workspaceSearch.js.map +1 -0
- package/dist/tools/workspaceShell.d.ts +3 -0
- package/dist/tools/workspaceShell.d.ts.map +1 -0
- package/dist/tools/workspaceShell.js +64 -0
- package/dist/tools/workspaceShell.js.map +1 -0
- package/dist/tools/workspaceStatus.d.ts +3 -0
- package/dist/tools/workspaceStatus.d.ts.map +1 -0
- package/dist/tools/workspaceStatus.js +105 -0
- package/dist/tools/workspaceStatus.js.map +1 -0
- package/dist/tools/workspaceWriteFile.d.ts +3 -0
- package/dist/tools/workspaceWriteFile.d.ts.map +1 -0
- package/dist/tools/workspaceWriteFile.js +81 -0
- package/dist/tools/workspaceWriteFile.js.map +1 -0
- package/dist/worker/client.d.ts +9 -0
- package/dist/worker/client.d.ts.map +1 -0
- package/dist/worker/client.js +53 -0
- package/dist/worker/client.js.map +1 -0
- package/dist/workspace/cache.d.ts +29 -0
- package/dist/workspace/cache.d.ts.map +1 -0
- package/dist/workspace/cache.js +57 -0
- package/dist/workspace/cache.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerSubmitSolution = registerSubmitSolution;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const client_1 = require("../convex/client");
|
|
6
|
+
const toolHelper_1 = require("../lib/toolHelper");
|
|
7
|
+
const context_1 = require("../lib/context");
|
|
8
|
+
const cache_1 = require("../workspace/cache");
|
|
9
|
+
const client_2 = require("../worker/client");
|
|
10
|
+
function registerSubmitSolution(server) {
|
|
11
|
+
(0, toolHelper_1.registerTool)(server, "submit_solution", "Submit your workspace changes for verification. Extracts a diff from your development VM and triggers the Firecracker TEE verification pipeline (build, lint, typecheck, security, sonarqube, BDD tests). Your workspace stays alive so you can iterate if verification fails.", {
|
|
12
|
+
bountyId: zod_1.z.string().describe("The bounty ID"),
|
|
13
|
+
description: zod_1.z.string().optional().describe("Optional description of your solution"),
|
|
14
|
+
}, async (args) => {
|
|
15
|
+
// SECURITY (H4): Enforce scope
|
|
16
|
+
(0, context_1.requireScope)("submissions:write");
|
|
17
|
+
// SECURITY (C1): Resolve agentId from auth context
|
|
18
|
+
const authUser = (0, context_1.getAuthUser)();
|
|
19
|
+
const agentId = authUser?.userId;
|
|
20
|
+
if (!agentId) {
|
|
21
|
+
return {
|
|
22
|
+
content: [{ type: "text", text: "Error: Authentication required." }],
|
|
23
|
+
isError: true,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// Resolve workspace from auth context — SECURITY (W6): never accept workspaceId from params
|
|
27
|
+
const ws = await (0, cache_1.getWorkspaceForAgent)(agentId, args.bountyId);
|
|
28
|
+
if (!ws.found || ws.status !== "ready") {
|
|
29
|
+
return {
|
|
30
|
+
content: [{
|
|
31
|
+
type: "text",
|
|
32
|
+
text: ws.found
|
|
33
|
+
? `Workspace is not ready (status: ${ws.status}). Use \`workspace_status\` to check.`
|
|
34
|
+
: "No workspace found. Claim the bounty first with `claim_bounty`, then wait for the workspace to be ready.",
|
|
35
|
+
}],
|
|
36
|
+
isError: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Extract diff from dev VM
|
|
40
|
+
let diffResult;
|
|
41
|
+
try {
|
|
42
|
+
diffResult = await (0, client_2.callWorker)(ws.workerHost, "/api/workspace/diff", {
|
|
43
|
+
workspaceId: ws.workspaceId,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const message = err instanceof Error ? err.message : "Failed to extract diff";
|
|
48
|
+
return {
|
|
49
|
+
content: [{ type: "text", text: `Failed to extract diff from workspace: ${message}` }],
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
if (!diffResult.hasChanges) {
|
|
54
|
+
return {
|
|
55
|
+
content: [{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: "No changes detected in workspace. Make changes to the code first, then submit again.",
|
|
58
|
+
}],
|
|
59
|
+
isError: true,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
// Submit diff for verification via Convex
|
|
63
|
+
try {
|
|
64
|
+
const result = await (0, client_1.callConvex)("/api/mcp/submissions/create-from-workspace", {
|
|
65
|
+
bountyId: args.bountyId,
|
|
66
|
+
agentId,
|
|
67
|
+
workspaceId: ws.workspaceId,
|
|
68
|
+
diffPatch: diffResult.diffPatch,
|
|
69
|
+
description: args.description,
|
|
70
|
+
});
|
|
71
|
+
let text = `# Solution Submitted\n\n`;
|
|
72
|
+
text += `**Submission ID:** ${result.submissionId}\n`;
|
|
73
|
+
text += `**Verification ID:** ${result.verificationId}\n`;
|
|
74
|
+
text += `**Changed files:** ${diffResult.changedFiles.length}\n\n`;
|
|
75
|
+
text += `### Changes\n\`\`\`\n${diffResult.diffStat}\n\`\`\`\n\n`;
|
|
76
|
+
text += `## Verification Pipeline\n\n`;
|
|
77
|
+
text += `Your changes are being verified in a clean Firecracker VM:\n`;
|
|
78
|
+
text += `1. **Patch Apply** - Apply your diff to a clean clone\n`;
|
|
79
|
+
text += `2. **Build** - Compile/install dependencies\n`;
|
|
80
|
+
text += `3. **Lint** - Code quality check\n`;
|
|
81
|
+
text += `4. **Typecheck** - Type safety verification\n`;
|
|
82
|
+
text += `5. **Security** - Trivy + Semgrep scan\n`;
|
|
83
|
+
text += `6. **SonarQube** - Static analysis\n`;
|
|
84
|
+
text += `7. **Tests** - BDD test execution (public + hidden)\n\n`;
|
|
85
|
+
text += `Use \`get_verification_status\` with verification ID \`${result.verificationId}\` to check progress.\n\n`;
|
|
86
|
+
text += `Your workspace stays alive — if verification fails, read the feedback with \`get_submission_feedback\`, fix the code, and resubmit.`;
|
|
87
|
+
return { content: [{ type: "text", text }] };
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
const message = err instanceof Error ? err.message : "Submission failed";
|
|
91
|
+
return {
|
|
92
|
+
content: [{ type: "text", text: `Failed to submit solution: ${message}` }],
|
|
93
|
+
isError: true,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=submitSolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"submitSolution.js","sourceRoot":"","sources":["../../src/tools/submitSolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
/** Represents a single operation parsed from a V4A patch. */
|
|
3
|
+
interface PatchOperation {
|
|
4
|
+
type: "add" | "update" | "delete";
|
|
5
|
+
path: string;
|
|
6
|
+
moveTo?: string;
|
|
7
|
+
/** For "add": lines to write (without leading '+'). */
|
|
8
|
+
addLines?: string[];
|
|
9
|
+
/** For "update": parsed sections with context anchors and change lines. */
|
|
10
|
+
sections?: PatchSection[];
|
|
11
|
+
}
|
|
12
|
+
/** A section within an update hunk, anchored by an @@ line. */
|
|
13
|
+
interface PatchSection {
|
|
14
|
+
anchor: string | null;
|
|
15
|
+
changes: PatchChange[];
|
|
16
|
+
isEof: boolean;
|
|
17
|
+
}
|
|
18
|
+
interface PatchChange {
|
|
19
|
+
type: "insert" | "delete" | "context";
|
|
20
|
+
text: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse V4A patch format into structured operations.
|
|
24
|
+
*
|
|
25
|
+
* Format:
|
|
26
|
+
* *** Begin Patch
|
|
27
|
+
* *** Update File: path/to/file.ts
|
|
28
|
+
* @@ context anchor line
|
|
29
|
+
* -removed line
|
|
30
|
+
* +added line
|
|
31
|
+
* context line (space prefix = keep)
|
|
32
|
+
* *** Add File: path/to/new.ts
|
|
33
|
+
* +line 1
|
|
34
|
+
* +line 2
|
|
35
|
+
* *** Delete File: path/to/old.ts
|
|
36
|
+
* *** End Patch
|
|
37
|
+
*/
|
|
38
|
+
export declare function parseV4APatch(patch: string): PatchOperation[];
|
|
39
|
+
export declare function registerWorkspaceApplyPatch(server: McpServer): void;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=workspaceApplyPatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceApplyPatch.d.ts","sourceRoot":"","sources":["../../src/tools/workspaceApplyPatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,6DAA6D;AAC7D,UAAU,cAAc;IACtB,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,+DAA+D;AAC/D,UAAU,YAAY;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAuI7D;AA6DD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAsLnE"}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseV4APatch = parseV4APatch;
|
|
4
|
+
exports.registerWorkspaceApplyPatch = registerWorkspaceApplyPatch;
|
|
5
|
+
const zod_1 = require("zod");
|
|
6
|
+
const context_1 = require("../lib/context");
|
|
7
|
+
const cache_1 = require("../workspace/cache");
|
|
8
|
+
const client_1 = require("../worker/client");
|
|
9
|
+
const toolHelper_1 = require("../lib/toolHelper");
|
|
10
|
+
/**
|
|
11
|
+
* Parse V4A patch format into structured operations.
|
|
12
|
+
*
|
|
13
|
+
* Format:
|
|
14
|
+
* *** Begin Patch
|
|
15
|
+
* *** Update File: path/to/file.ts
|
|
16
|
+
* @@ context anchor line
|
|
17
|
+
* -removed line
|
|
18
|
+
* +added line
|
|
19
|
+
* context line (space prefix = keep)
|
|
20
|
+
* *** Add File: path/to/new.ts
|
|
21
|
+
* +line 1
|
|
22
|
+
* +line 2
|
|
23
|
+
* *** Delete File: path/to/old.ts
|
|
24
|
+
* *** End Patch
|
|
25
|
+
*/
|
|
26
|
+
function parseV4APatch(patch) {
|
|
27
|
+
const lines = patch.split("\n");
|
|
28
|
+
const operations = [];
|
|
29
|
+
let i = 0;
|
|
30
|
+
// Find *** Begin Patch
|
|
31
|
+
while (i < lines.length) {
|
|
32
|
+
if (lines[i].trim() === "*** Begin Patch") {
|
|
33
|
+
i++;
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
i++;
|
|
37
|
+
}
|
|
38
|
+
if (i >= lines.length) {
|
|
39
|
+
throw new Error("Invalid V4A patch: missing '*** Begin Patch' header");
|
|
40
|
+
}
|
|
41
|
+
let currentOp = null;
|
|
42
|
+
let currentSection = null;
|
|
43
|
+
function finalizeCurrentOp() {
|
|
44
|
+
if (currentOp) {
|
|
45
|
+
if (currentSection && currentOp.sections) {
|
|
46
|
+
currentOp.sections.push(currentSection);
|
|
47
|
+
currentSection = null;
|
|
48
|
+
}
|
|
49
|
+
operations.push(currentOp);
|
|
50
|
+
currentOp = null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
while (i < lines.length) {
|
|
54
|
+
const line = lines[i];
|
|
55
|
+
const trimmed = line.trim();
|
|
56
|
+
// End of patch
|
|
57
|
+
if (trimmed === "*** End Patch") {
|
|
58
|
+
finalizeCurrentOp();
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
// New file operation headers
|
|
62
|
+
if (trimmed.startsWith("*** Add File:")) {
|
|
63
|
+
finalizeCurrentOp();
|
|
64
|
+
const path = trimmed.slice("*** Add File:".length).trim();
|
|
65
|
+
currentOp = { type: "add", path, addLines: [] };
|
|
66
|
+
i++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (trimmed.startsWith("*** Delete File:")) {
|
|
70
|
+
finalizeCurrentOp();
|
|
71
|
+
const path = trimmed.slice("*** Delete File:".length).trim();
|
|
72
|
+
currentOp = { type: "delete", path };
|
|
73
|
+
i++;
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (trimmed.startsWith("*** Update File:")) {
|
|
77
|
+
finalizeCurrentOp();
|
|
78
|
+
const path = trimmed.slice("*** Update File:".length).trim();
|
|
79
|
+
currentOp = { type: "update", path, sections: [] };
|
|
80
|
+
i++;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Move directive (rename within an update)
|
|
84
|
+
if (trimmed.startsWith("*** Move to:") && currentOp?.type === "update") {
|
|
85
|
+
currentOp.moveTo = trimmed.slice("*** Move to:".length).trim();
|
|
86
|
+
i++;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
// End of file marker
|
|
90
|
+
if (trimmed === "*** End of File" && currentOp?.type === "update") {
|
|
91
|
+
if (currentSection) {
|
|
92
|
+
currentSection.isEof = true;
|
|
93
|
+
currentOp.sections.push(currentSection);
|
|
94
|
+
currentSection = null;
|
|
95
|
+
}
|
|
96
|
+
i++;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
// Context anchor (@@)
|
|
100
|
+
if ((line === "@@" || line.startsWith("@@ ")) && currentOp?.type === "update") {
|
|
101
|
+
// Finalize previous section
|
|
102
|
+
if (currentSection && currentOp.sections) {
|
|
103
|
+
currentOp.sections.push(currentSection);
|
|
104
|
+
}
|
|
105
|
+
const anchor = line === "@@" ? null : line.slice(3);
|
|
106
|
+
currentSection = { anchor, changes: [], isEof: false };
|
|
107
|
+
i++;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
// Change lines within an update section
|
|
111
|
+
if (currentOp?.type === "update" && currentSection) {
|
|
112
|
+
if (line.startsWith("+")) {
|
|
113
|
+
currentSection.changes.push({ type: "insert", text: line.slice(1) });
|
|
114
|
+
}
|
|
115
|
+
else if (line.startsWith("-")) {
|
|
116
|
+
currentSection.changes.push({ type: "delete", text: line.slice(1) });
|
|
117
|
+
}
|
|
118
|
+
else if (line.startsWith(" ")) {
|
|
119
|
+
currentSection.changes.push({ type: "context", text: line.slice(1) });
|
|
120
|
+
}
|
|
121
|
+
else if (line === "") {
|
|
122
|
+
// Empty line in context (some patches use bare empty lines as context)
|
|
123
|
+
currentSection.changes.push({ type: "context", text: "" });
|
|
124
|
+
}
|
|
125
|
+
i++;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
// Add lines for a new file
|
|
129
|
+
if (currentOp?.type === "add" && currentOp.addLines) {
|
|
130
|
+
if (line.startsWith("+")) {
|
|
131
|
+
currentOp.addLines.push(line.slice(1));
|
|
132
|
+
}
|
|
133
|
+
i++;
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
// Skip unrecognized lines
|
|
137
|
+
i++;
|
|
138
|
+
}
|
|
139
|
+
// Handle case where *** End Patch was missing
|
|
140
|
+
finalizeCurrentOp();
|
|
141
|
+
if (operations.length === 0) {
|
|
142
|
+
throw new Error("Invalid V4A patch: no operations found");
|
|
143
|
+
}
|
|
144
|
+
return operations;
|
|
145
|
+
}
|
|
146
|
+
function buildEditOperations(op) {
|
|
147
|
+
if (op.type !== "update" || !op.sections)
|
|
148
|
+
return [];
|
|
149
|
+
const edits = [];
|
|
150
|
+
const targetPath = op.moveTo ?? op.path;
|
|
151
|
+
for (const section of op.sections) {
|
|
152
|
+
const oldLines = [];
|
|
153
|
+
const newLines = [];
|
|
154
|
+
// If there is an anchor, it becomes the first context line
|
|
155
|
+
if (section.anchor !== null) {
|
|
156
|
+
oldLines.push(section.anchor);
|
|
157
|
+
newLines.push(section.anchor);
|
|
158
|
+
}
|
|
159
|
+
for (const change of section.changes) {
|
|
160
|
+
switch (change.type) {
|
|
161
|
+
case "context":
|
|
162
|
+
oldLines.push(change.text);
|
|
163
|
+
newLines.push(change.text);
|
|
164
|
+
break;
|
|
165
|
+
case "delete":
|
|
166
|
+
oldLines.push(change.text);
|
|
167
|
+
break;
|
|
168
|
+
case "insert":
|
|
169
|
+
newLines.push(change.text);
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Only produce an edit if there is actually a difference
|
|
174
|
+
const oldText = oldLines.join("\n");
|
|
175
|
+
const newText = newLines.join("\n");
|
|
176
|
+
if (oldText !== newText) {
|
|
177
|
+
edits.push({ path: targetPath, oldString: oldText, newString: newText });
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return edits;
|
|
181
|
+
}
|
|
182
|
+
// ---------------------------------------------------------------------------
|
|
183
|
+
// MCP Tool Registration
|
|
184
|
+
// ---------------------------------------------------------------------------
|
|
185
|
+
function registerWorkspaceApplyPatch(server) {
|
|
186
|
+
(0, toolHelper_1.registerTool)(server, "workspace_apply_patch", "Apply a V4A-format patch to your workspace. The V4A format supports creating, updating, and deleting " +
|
|
187
|
+
"files in a single atomic patch. Format:\n" +
|
|
188
|
+
"```\n" +
|
|
189
|
+
"*** Begin Patch\n" +
|
|
190
|
+
"*** Update File: src/main.ts\n" +
|
|
191
|
+
"@@ context anchor line\n" +
|
|
192
|
+
"-removed line\n" +
|
|
193
|
+
"+added line\n" +
|
|
194
|
+
" kept line\n" +
|
|
195
|
+
"*** Add File: src/new.ts\n" +
|
|
196
|
+
"+line 1\n" +
|
|
197
|
+
"+line 2\n" +
|
|
198
|
+
"*** Delete File: src/old.ts\n" +
|
|
199
|
+
"*** End Patch\n" +
|
|
200
|
+
"```\n" +
|
|
201
|
+
"Context lines (prefixed with space) and @@ anchors locate the edit position. " +
|
|
202
|
+
"No line numbers needed.", {
|
|
203
|
+
bountyId: zod_1.z.string().describe("The bounty ID you have claimed"),
|
|
204
|
+
patch: zod_1.z.string().describe("V4A-format patch string"),
|
|
205
|
+
}, async (args) => {
|
|
206
|
+
// SECURITY (H4): Scope enforcement — needs both read (for context matching) and write
|
|
207
|
+
(0, context_1.requireScope)("workspace:write");
|
|
208
|
+
// SECURITY (C1): Identity from auth context
|
|
209
|
+
const user = (0, context_1.requireAuthUser)();
|
|
210
|
+
const ws = await (0, cache_1.getWorkspaceForAgent)(user.userId, args.bountyId);
|
|
211
|
+
if (!ws.found || ws.status !== "ready") {
|
|
212
|
+
return {
|
|
213
|
+
content: [
|
|
214
|
+
{
|
|
215
|
+
type: "text",
|
|
216
|
+
text: ws.found
|
|
217
|
+
? `Workspace is not ready (status: ${ws.status}).`
|
|
218
|
+
: "No workspace found. Claim the bounty first.",
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
isError: true,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
// Parse the V4A patch
|
|
225
|
+
let operations;
|
|
226
|
+
try {
|
|
227
|
+
operations = parseV4APatch(args.patch);
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
const message = err instanceof Error ? err.message : "Patch parsing failed";
|
|
231
|
+
return {
|
|
232
|
+
content: [{ type: "text", text: `Parse error: ${message}` }],
|
|
233
|
+
isError: true,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
const results = [];
|
|
237
|
+
let errors = 0;
|
|
238
|
+
for (const op of operations) {
|
|
239
|
+
// SECURITY (W3): Defense-in-depth path validation for every file in the patch
|
|
240
|
+
const paths = [op.path, op.moveTo].filter(Boolean);
|
|
241
|
+
const traversalBlocked = paths.some((p) => {
|
|
242
|
+
const norm = p.replace(/\\/g, "/");
|
|
243
|
+
return norm.includes("..") && !norm.startsWith("/workspace/");
|
|
244
|
+
});
|
|
245
|
+
if (traversalBlocked) {
|
|
246
|
+
results.push(`- \`${op.path}\` -- SKIPPED: path traversal not allowed`);
|
|
247
|
+
errors++;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
try {
|
|
251
|
+
switch (op.type) {
|
|
252
|
+
case "add": {
|
|
253
|
+
// Write new file via write-file endpoint
|
|
254
|
+
const content = (op.addLines ?? []).join("\n");
|
|
255
|
+
const writeResult = await (0, client_1.callWorker)(ws.workerHost, "/api/workspace/write-file", {
|
|
256
|
+
workspaceId: ws.workspaceId,
|
|
257
|
+
path: op.path,
|
|
258
|
+
content,
|
|
259
|
+
});
|
|
260
|
+
results.push(`- \`${writeResult.path}\` -- CREATED (${writeResult.bytesWritten} bytes)`);
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case "delete": {
|
|
264
|
+
// Delete file via exec endpoint
|
|
265
|
+
await (0, client_1.callWorker)(ws.workerHost, "/api/workspace/exec", {
|
|
266
|
+
workspaceId: ws.workspaceId,
|
|
267
|
+
command: `rm -f "${op.path}"`,
|
|
268
|
+
timeoutMs: 10000,
|
|
269
|
+
});
|
|
270
|
+
results.push(`- \`${op.path}\` -- DELETED`);
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
case "update": {
|
|
274
|
+
// Handle rename if moveTo is specified
|
|
275
|
+
if (op.moveTo && op.moveTo !== op.path) {
|
|
276
|
+
await (0, client_1.callWorker)(ws.workerHost, "/api/workspace/exec", {
|
|
277
|
+
workspaceId: ws.workspaceId,
|
|
278
|
+
command: `mkdir -p "$(dirname "${op.moveTo}")" && mv "${op.path}" "${op.moveTo}"`,
|
|
279
|
+
timeoutMs: 10000,
|
|
280
|
+
});
|
|
281
|
+
results.push(`- \`${op.path}\` -- RENAMED to \`${op.moveTo}\``);
|
|
282
|
+
}
|
|
283
|
+
// Apply each edit section
|
|
284
|
+
const edits = buildEditOperations(op);
|
|
285
|
+
const targetPath = op.moveTo ?? op.path;
|
|
286
|
+
if (edits.length === 0 && !op.moveTo) {
|
|
287
|
+
results.push(`- \`${op.path}\` -- NO CHANGES (no diff sections)`);
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
let totalReplacements = 0;
|
|
291
|
+
for (const edit of edits) {
|
|
292
|
+
const editResult = await (0, client_1.callWorker)(ws.workerHost, "/api/workspace/edit-file", {
|
|
293
|
+
workspaceId: ws.workspaceId,
|
|
294
|
+
path: edit.path,
|
|
295
|
+
oldString: edit.oldString,
|
|
296
|
+
newString: edit.newString,
|
|
297
|
+
replaceAll: false,
|
|
298
|
+
});
|
|
299
|
+
totalReplacements += editResult.replacements;
|
|
300
|
+
}
|
|
301
|
+
if (edits.length > 0) {
|
|
302
|
+
results.push(`- \`${targetPath}\` -- UPDATED (${edits.length} section${edits.length > 1 ? "s" : ""}, ${totalReplacements} replacement${totalReplacements > 1 ? "s" : ""})`);
|
|
303
|
+
}
|
|
304
|
+
break;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
catch (err) {
|
|
309
|
+
const message = err instanceof Error ? err.message : "Operation failed";
|
|
310
|
+
results.push(`- \`${op.path}\` -- ERROR: ${message}`);
|
|
311
|
+
errors++;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const summary = errors > 0
|
|
315
|
+
? `Patch applied with ${errors} error${errors > 1 ? "s" : ""} (${operations.length} operations):`
|
|
316
|
+
: `Patch applied successfully (${operations.length} operation${operations.length > 1 ? "s" : ""}):`;
|
|
317
|
+
return {
|
|
318
|
+
content: [
|
|
319
|
+
{
|
|
320
|
+
type: "text",
|
|
321
|
+
text: `${summary}\n${results.join("\n")}`,
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
...(errors > 0 ? { isError: true } : {}),
|
|
325
|
+
};
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=workspaceApplyPatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceApplyPatch.js","sourceRoot":"","sources":["../../src/tools/workspaceApplyPatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceBatchRead.d.ts","sourceRoot":"","sources":["../../src/tools/workspaceBatchRead.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwGlE"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerWorkspaceBatchRead = registerWorkspaceBatchRead;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const context_1 = require("../lib/context");
|
|
6
|
+
const cache_1 = require("../workspace/cache");
|
|
7
|
+
const client_1 = require("../worker/client");
|
|
8
|
+
const toolHelper_1 = require("../lib/toolHelper");
|
|
9
|
+
function registerWorkspaceBatchRead(server) {
|
|
10
|
+
(0, toolHelper_1.registerTool)(server, "workspace_batch_read", "Read multiple files from your workspace in a single request. Much faster than reading files one by one. " +
|
|
11
|
+
"Max 10 files per batch. Paths relative to /workspace.", {
|
|
12
|
+
bountyId: zod_1.z.string().describe("The bounty ID you have claimed"),
|
|
13
|
+
paths: zod_1.z
|
|
14
|
+
.array(zod_1.z.string())
|
|
15
|
+
.min(1)
|
|
16
|
+
.max(10)
|
|
17
|
+
.describe("Array of file paths relative to /workspace (max 10)"),
|
|
18
|
+
maxLinesPerFile: zod_1.z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Max lines per file (default 1000, max 1000)"),
|
|
22
|
+
}, async (args) => {
|
|
23
|
+
// SECURITY (H4): Scope enforcement
|
|
24
|
+
(0, context_1.requireScope)("workspace:read");
|
|
25
|
+
// SECURITY (C1): Identity from auth context, never from parameters
|
|
26
|
+
const user = (0, context_1.requireAuthUser)();
|
|
27
|
+
const ws = await (0, cache_1.getWorkspaceForAgent)(user.userId, args.bountyId);
|
|
28
|
+
if (!ws.found || ws.status !== "ready") {
|
|
29
|
+
return {
|
|
30
|
+
content: [
|
|
31
|
+
{
|
|
32
|
+
type: "text",
|
|
33
|
+
text: ws.found
|
|
34
|
+
? `Workspace is not ready (status: ${ws.status}).`
|
|
35
|
+
: "No workspace found. Claim the bounty first.",
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
isError: true,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// SECURITY (W3): Defense-in-depth path traversal check on each path
|
|
42
|
+
for (const p of args.paths) {
|
|
43
|
+
const norm = p.replace(/\\/g, "/");
|
|
44
|
+
if (norm.includes("..") && !norm.startsWith("/workspace/")) {
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: "text",
|
|
49
|
+
text: "Path traversal not allowed. Paths must resolve within /workspace/.",
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
isError: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
try {
|
|
57
|
+
const result = await (0, client_1.callWorker)(ws.workerHost, "/api/workspace/batch-read", {
|
|
58
|
+
workspaceId: ws.workspaceId,
|
|
59
|
+
paths: args.paths,
|
|
60
|
+
maxLinesPerFile: args.maxLinesPerFile
|
|
61
|
+
? parseInt(args.maxLinesPerFile, 10)
|
|
62
|
+
: undefined,
|
|
63
|
+
});
|
|
64
|
+
const parts = result.files.map((f) => {
|
|
65
|
+
if (f.error) {
|
|
66
|
+
return `**${f.path}** — ${f.error}`;
|
|
67
|
+
}
|
|
68
|
+
if (f.isBinary) {
|
|
69
|
+
return `**${f.path}** — binary file, cannot display`;
|
|
70
|
+
}
|
|
71
|
+
const lines = (f.content ?? "").split("\n");
|
|
72
|
+
const numbered = lines
|
|
73
|
+
.map((line, i) => `${String(i + 1).padStart(5)} ${line}`)
|
|
74
|
+
.join("\n");
|
|
75
|
+
return `**${f.path}** (${f.totalLines ?? 0} lines total)\n\`\`\`\n${numbered}\n\`\`\``;
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
content: [
|
|
79
|
+
{
|
|
80
|
+
type: "text",
|
|
81
|
+
text: parts.join("\n\n---\n\n"),
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
const message = err instanceof Error ? err.message : "Batch read failed";
|
|
88
|
+
return {
|
|
89
|
+
content: [{ type: "text", text: `Error: ${message}` }],
|
|
90
|
+
isError: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=workspaceBatchRead.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceBatchRead.js","sourceRoot":"","sources":["../../src/tools/workspaceBatchRead.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaceBatchWrite.d.ts","sourceRoot":"","sources":["../../src/tools/workspaceBatchWrite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8GnE"}
|