@varun-ai07/covenant-mcp 2.0.6 → 2.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.
Files changed (67) hide show
  1. package/dist/auto-verifier.d.ts +73 -0
  2. package/dist/auto-verifier.d.ts.map +1 -0
  3. package/dist/auto-verifier.js +452 -0
  4. package/dist/auto-verifier.js.map +1 -0
  5. package/dist/handlers/wallet.d.ts.map +1 -1
  6. package/dist/handlers/wallet.js +60 -2
  7. package/dist/handlers/wallet.js.map +1 -1
  8. package/dist/index.js +16 -4
  9. package/dist/index.js.map +1 -1
  10. package/dist/server.js +1 -1
  11. package/dist/tools/corven-agent.d.ts.map +1 -1
  12. package/dist/tools/corven-agent.js +10 -0
  13. package/dist/tools/corven-agent.js.map +1 -1
  14. package/dist/tools/corven-attest.d.ts.map +1 -1
  15. package/dist/tools/corven-attest.js +10 -0
  16. package/dist/tools/corven-attest.js.map +1 -1
  17. package/dist/tools/corven-batch.d.ts.map +1 -1
  18. package/dist/tools/corven-batch.js +10 -0
  19. package/dist/tools/corven-batch.js.map +1 -1
  20. package/dist/tools/corven-bounty.d.ts.map +1 -1
  21. package/dist/tools/corven-bounty.js +21 -1
  22. package/dist/tools/corven-bounty.js.map +1 -1
  23. package/dist/tools/corven-collective.d.ts.map +1 -1
  24. package/dist/tools/corven-collective.js +28 -0
  25. package/dist/tools/corven-collective.js.map +1 -1
  26. package/dist/tools/corven-govern.d.ts.map +1 -1
  27. package/dist/tools/corven-govern.js +19 -0
  28. package/dist/tools/corven-govern.js.map +1 -1
  29. package/dist/tools/corven-grants.d.ts.map +1 -1
  30. package/dist/tools/corven-grants.js +21 -1
  31. package/dist/tools/corven-grants.js.map +1 -1
  32. package/dist/tools/corven-insurance.d.ts.map +1 -1
  33. package/dist/tools/corven-insurance.js +37 -0
  34. package/dist/tools/corven-insurance.js.map +1 -1
  35. package/dist/tools/corven-market.d.ts.map +1 -1
  36. package/dist/tools/corven-market.js +11 -1
  37. package/dist/tools/corven-market.js.map +1 -1
  38. package/dist/tools/corven-message.js +1 -1
  39. package/dist/tools/corven-message.js.map +1 -1
  40. package/dist/tools/corven-multi.d.ts.map +1 -1
  41. package/dist/tools/corven-multi.js +20 -0
  42. package/dist/tools/corven-multi.js.map +1 -1
  43. package/dist/tools/corven-revision.d.ts.map +1 -1
  44. package/dist/tools/corven-revision.js +19 -0
  45. package/dist/tools/corven-revision.js.map +1 -1
  46. package/dist/tools/corven-router.d.ts.map +1 -1
  47. package/dist/tools/corven-router.js +24 -4
  48. package/dist/tools/corven-router.js.map +1 -1
  49. package/dist/tools/corven-stream.d.ts.map +1 -1
  50. package/dist/tools/corven-stream.js +34 -6
  51. package/dist/tools/corven-stream.js.map +1 -1
  52. package/dist/tools/corven-task.d.ts.map +1 -1
  53. package/dist/tools/corven-task.js +39 -1
  54. package/dist/tools/corven-task.js.map +1 -1
  55. package/dist/tools/corven-training.d.ts.map +1 -1
  56. package/dist/tools/corven-training.js +23 -2
  57. package/dist/tools/corven-training.js.map +1 -1
  58. package/dist/tools/corven-verify.d.ts.map +1 -1
  59. package/dist/tools/corven-verify.js +40 -18
  60. package/dist/tools/corven-verify.js.map +1 -1
  61. package/dist/tools/corven-wallet.d.ts.map +1 -1
  62. package/dist/tools/corven-wallet.js +40 -3
  63. package/dist/tools/corven-wallet.js.map +1 -1
  64. package/dist/tools/disputes.d.ts.map +1 -1
  65. package/dist/tools/disputes.js +22 -2
  66. package/dist/tools/disputes.js.map +1 -1
  67. package/package.json +1 -1
@@ -0,0 +1,73 @@
1
+ /**
2
+ * COVENANT Auto-Verifier
3
+ *
4
+ * Background service that automatically verifies worker deliverables.
5
+ * Polls CovenantEscrow for TaskSubmitted events, runs verification pipeline,
6
+ * and auto-approves/rejects based on score.
7
+ *
8
+ * Security:
9
+ * - URL validation (GitHub/GitLab/Bitbucket HTTPS only)
10
+ * - Rate limiting (max 5 concurrent verifications)
11
+ * - Timeout on all operations (60s clone, 120s analysis)
12
+ * - Cleanup of temp dirs after verification
13
+ * - No eval(), no user-controlled code execution
14
+ * - Input validation on all contract reads
15
+ * - Graceful shutdown with cleanup
16
+ */
17
+ import { type Address } from "viem";
18
+ interface VerificationJob {
19
+ taskId: bigint;
20
+ worker: Address;
21
+ deliverableHash: string;
22
+ repoUrl: string;
23
+ status: "pending" | "running" | "completed" | "failed";
24
+ result?: VerificationResult;
25
+ startedAt?: number;
26
+ completedAt?: number;
27
+ }
28
+ interface VerificationResult {
29
+ score: number;
30
+ verdict: "pass" | "fail" | "partial";
31
+ summary: string;
32
+ evidenceHash: string;
33
+ }
34
+ export declare class AutoVerifier {
35
+ private publicClient;
36
+ private walletClient?;
37
+ private limiter;
38
+ private jobs;
39
+ private pollInterval;
40
+ private lastProcessedBlock;
41
+ private running;
42
+ constructor(config?: {
43
+ rpcUrl?: string;
44
+ privateKey?: string;
45
+ pollIntervalMs?: number;
46
+ maxConcurrent?: number;
47
+ scoreThreshold?: number;
48
+ });
49
+ start(pollIntervalMs?: number): Promise<void>;
50
+ stop(): void;
51
+ private pollEvents;
52
+ private queueVerification;
53
+ private runVerification;
54
+ private resolveRepoUrl;
55
+ private verifyRepo;
56
+ private runChecks;
57
+ private checkBuild;
58
+ private checkTests;
59
+ private checkSecurity;
60
+ private checkSecrets;
61
+ private checkCodeQuality;
62
+ private autoDecide;
63
+ getStatus(): {
64
+ running: boolean;
65
+ activeJobs: number;
66
+ completedJobs: number;
67
+ failedJobs: number;
68
+ lastProcessedBlock: bigint;
69
+ };
70
+ getJob(taskId: number): VerificationJob | undefined;
71
+ }
72
+ export {};
73
+ //# sourceMappingURL=auto-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-verifier.d.ts","sourceRoot":"","sources":["../src/auto-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAgD,KAAK,OAAO,EAAiC,MAAM,MAAM,CAAC;AA4BjH,UAAU,eAAe;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACvD,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAoCD,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,YAAY,CAAC,CAAM;IAC3B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,IAAI,CAA2C;IACvD,OAAO,CAAC,YAAY,CAA+C;IACnE,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,GAAE;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;KACpB;IAsBA,KAAK,CAAC,cAAc,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwB1D,IAAI,IAAI,IAAI;YAWE,UAAU;YAgCV,iBAAiB;YAsBjB,eAAe;YA8Df,cAAc;YA4Bd,UAAU;YA+CV,SAAS;IAqBvB,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,gBAAgB;YAwBV,UAAU;IA4CxB,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,kBAAkB,EAAE,MAAM,CAAC;KAC5B;IAWD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;CAGpD"}
@@ -0,0 +1,452 @@
1
+ /**
2
+ * COVENANT Auto-Verifier
3
+ *
4
+ * Background service that automatically verifies worker deliverables.
5
+ * Polls CovenantEscrow for TaskSubmitted events, runs verification pipeline,
6
+ * and auto-approves/rejects based on score.
7
+ *
8
+ * Security:
9
+ * - URL validation (GitHub/GitLab/Bitbucket HTTPS only)
10
+ * - Rate limiting (max 5 concurrent verifications)
11
+ * - Timeout on all operations (60s clone, 120s analysis)
12
+ * - Cleanup of temp dirs after verification
13
+ * - No eval(), no user-controlled code execution
14
+ * - Input validation on all contract reads
15
+ * - Graceful shutdown with cleanup
16
+ */
17
+ import { createPublicClient, createWalletClient, http, keccak256, toBytes } from "viem";
18
+ import { baseSepolia } from "viem/chains";
19
+ import { privateKeyToAccount } from "viem/accounts";
20
+ import { execSync } from "child_process";
21
+ import { existsSync, rmSync } from "fs";
22
+ import { createHash } from "crypto";
23
+ // ─── Configuration ───────────────────────────────────────────
24
+ const COVENANT_ESCROW = "0x259338371e67cA712F22A95cb8b616f3926b0E4D";
25
+ const COVENANT_IDENTITY = "0x623ff6F56754fb4CB4d60e46FF1F4AA3f34A5aAA";
26
+ const ESCROW_ABI = [
27
+ { "type": "event", "name": "TaskSubmitted", "inputs": [{ "name": "taskId", "type": "uint256", "indexed": false }, { "name": "worker", "type": "address", "indexed": false }, { "name": "deliverableHash", "type": "bytes32", "indexed": false }] },
28
+ { "type": "event", "name": "TaskCreated", "inputs": [{ "name": "taskId", "type": "uint256", "indexed": false }, { "name": "client", "type": "address", "indexed": false }, { "name": "metaHash", "type": "bytes32", "indexed": false }] },
29
+ { "name": "getTask", "type": "function", "stateMutability": "view", "inputs": [{ "name": "taskId", "type": "uint256" }], "outputs": [{ "name": "client", "type": "address" }, { "name": "worker", "type": "address" }, { "name": "amount", "type": "uint128" }, { "name": "deadline", "type": "uint32" }, { "name": "status", "type": "uint8" }, { "name": "disputeCount", "type": "uint8" }, { "name": "metaHash", "type": "bytes32" }] },
30
+ { "name": "completeTask", "type": "function", "stateMutability": "nonpayable", "inputs": [{ "name": "taskId", "type": "uint256" }, { "name": "clientSignature", "type": "bytes" }], "outputs": [] },
31
+ { "name": "failTask", "type": "function", "stateMutability": "nonpayable", "inputs": [{ "name": "taskId", "type": "uint256" }, { "name": "reason", "type": "bytes32" }], "outputs": [] },
32
+ { "name": "taskCount", "type": "function", "stateMutability": "view", "inputs": [], "outputs": [{ "name": "", "type": "uint256" }] },
33
+ ];
34
+ const IDENTITY_ABI = [
35
+ { "name": "getAgent", "type": "function", "stateMutability": "view", "inputs": [{ "name": "agent", "type": "address" }], "outputs": [{ "name": "owner", "type": "address" }, { "name": "stake", "type": "uint96" }, { "name": "reputation", "type": "uint16" }, { "name": "registeredAt", "type": "uint32" }, { "name": "lastActivity", "type": "uint32" }, { "name": "active", "type": "bool" }, { "name": "metadataRoot", "type": "bytes32" }] },
36
+ { "name": "isRegistered", "type": "function", "stateMutability": "view", "inputs": [{ "name": "agent", "type": "address" }], "outputs": [{ "name": "", "type": "bool" }] },
37
+ ];
38
+ // ─── Rate Limiter ────────────────────────────────────────────
39
+ class ConcurrencyLimiter {
40
+ running = 0;
41
+ maxConcurrent;
42
+ queue = [];
43
+ constructor(maxConcurrent = 5) {
44
+ this.maxConcurrent = maxConcurrent;
45
+ }
46
+ async acquire() {
47
+ if (this.running < this.maxConcurrent) {
48
+ this.running++;
49
+ return;
50
+ }
51
+ return new Promise((resolve) => {
52
+ this.queue.push(() => {
53
+ this.running++;
54
+ resolve();
55
+ });
56
+ });
57
+ }
58
+ release() {
59
+ this.running--;
60
+ if (this.queue.length > 0) {
61
+ this.queue.shift()();
62
+ }
63
+ }
64
+ }
65
+ // ─── Auto-Verifier ───────────────────────────────────────────
66
+ export class AutoVerifier {
67
+ publicClient;
68
+ walletClient;
69
+ limiter;
70
+ jobs = new Map();
71
+ pollInterval = null;
72
+ lastProcessedBlock = 0n;
73
+ running = false;
74
+ constructor(config = {}) {
75
+ const rpcUrl = config.rpcUrl || process.env.BASE_SEPOLIA_RPC_URL || "https://sepolia.base.org";
76
+ this.publicClient = createPublicClient({
77
+ chain: baseSepolia,
78
+ transport: http(rpcUrl),
79
+ });
80
+ if (config.privateKey) {
81
+ const account = privateKeyToAccount(config.privateKey);
82
+ this.walletClient = createWalletClient({
83
+ account,
84
+ chain: baseSepolia,
85
+ transport: http(rpcUrl),
86
+ });
87
+ }
88
+ this.limiter = new ConcurrencyLimiter(config.maxConcurrent || 5);
89
+ }
90
+ // ─── Lifecycle ──────────────────────────────────────────────
91
+ async start(pollIntervalMs = 15000) {
92
+ if (this.running)
93
+ return;
94
+ this.running = true;
95
+ console.log("[AutoVerifier] Starting...");
96
+ console.log(`[AutoVerifier] Poll interval: ${pollIntervalMs}ms`);
97
+ console.log(`[AutoVerifier] Wallet: ${this.walletClient ? "configured" : "read-only"}`);
98
+ // Get current block as starting point
99
+ this.lastProcessedBlock = await this.publicClient.getBlockNumber();
100
+ // Poll for events
101
+ this.pollInterval = setInterval(async () => {
102
+ if (!this.running)
103
+ return;
104
+ try {
105
+ await this.pollEvents();
106
+ }
107
+ catch (e) {
108
+ console.error("[AutoVerifier] Poll error:", e);
109
+ }
110
+ }, pollIntervalMs);
111
+ console.log("[AutoVerifier] Started. Waiting for TaskSubmitted events...");
112
+ }
113
+ stop() {
114
+ this.running = false;
115
+ if (this.pollInterval) {
116
+ clearInterval(this.pollInterval);
117
+ this.pollInterval = null;
118
+ }
119
+ console.log("[AutoVerifier] Stopped.");
120
+ }
121
+ // ─── Event Polling ─────────────────────────────────────────
122
+ async pollEvents() {
123
+ const currentBlock = await this.publicClient.getBlockNumber();
124
+ if (currentBlock <= this.lastProcessedBlock)
125
+ return;
126
+ const events = await this.publicClient.getLogs({
127
+ address: COVENANT_ESCROW,
128
+ event: ESCROW_ABI[0],
129
+ fromBlock: this.lastProcessedBlock + 1n,
130
+ toBlock: currentBlock,
131
+ });
132
+ this.lastProcessedBlock = currentBlock;
133
+ for (const event of events) {
134
+ const { taskId, worker, deliverableHash } = event.args;
135
+ console.log(`[AutoVerifier] TaskSubmitted: taskId=${taskId}, worker=${worker}`);
136
+ // Skip if already processing
137
+ if (this.jobs.has(Number(taskId))) {
138
+ console.log(`[AutoVerifier] Task ${taskId} already being processed, skipping.`);
139
+ continue;
140
+ }
141
+ if (!taskId || !worker || !deliverableHash)
142
+ continue;
143
+ // Queue verification
144
+ this.queueVerification(taskId, worker, `0x${deliverableHash.slice(2)}`);
145
+ }
146
+ }
147
+ // ─── Verification Queue ────────────────────────────────────
148
+ async queueVerification(taskId, worker, deliverableHash) {
149
+ const job = {
150
+ taskId,
151
+ worker,
152
+ deliverableHash,
153
+ repoUrl: "", // Will be resolved from IPFS
154
+ status: "pending",
155
+ };
156
+ this.jobs.set(Number(taskId), job);
157
+ // Acquire concurrency slot
158
+ await this.limiter.acquire();
159
+ // Run verification in background
160
+ this.runVerification(job).finally(() => {
161
+ this.limiter.release();
162
+ });
163
+ }
164
+ // ─── Verification Pipeline ─────────────────────────────────
165
+ async runVerification(job) {
166
+ job.status = "running";
167
+ job.startedAt = Date.now();
168
+ console.log(`[AutoVerifier] Verifying task ${job.taskId}...`);
169
+ try {
170
+ // Step 1: Validate worker is registered
171
+ const isRegistered = await this.publicClient.readContract({
172
+ address: COVENANT_IDENTITY,
173
+ abi: IDENTITY_ABI,
174
+ functionName: "isRegistered",
175
+ args: [job.worker],
176
+ });
177
+ if (!isRegistered) {
178
+ throw new Error(`Worker ${job.worker} is not registered`);
179
+ }
180
+ // Step 2: Validate task exists and is in Submitted status
181
+ const task = await this.publicClient.readContract({
182
+ address: COVENANT_ESCROW,
183
+ abi: ESCROW_ABI,
184
+ functionName: "getTask",
185
+ args: [job.taskId],
186
+ });
187
+ const status = Number(task.status ?? task[4]);
188
+ if (status !== 3) { // 3 = Submitted
189
+ throw new Error(`Task ${job.taskId} is not in Submitted status (status=${status})`);
190
+ }
191
+ // Step 3: Resolve repo URL from deliverable hash
192
+ job.repoUrl = await this.resolveRepoUrl(job.deliverableHash);
193
+ // Step 4: Run verification pipeline
194
+ const result = await this.verifyRepo(job.repoUrl, job.taskId);
195
+ // Step 5: Auto-approve or reject based on score
196
+ if (this.walletClient) {
197
+ await this.autoDecide(job, result);
198
+ }
199
+ else {
200
+ console.log(`[AutoVerifier] Score: ${result.score}/100 (${result.verdict})`);
201
+ console.log(`[AutoVerifier] No wallet configured — skipping auto-decision.`);
202
+ }
203
+ job.status = "completed";
204
+ job.result = result;
205
+ job.completedAt = Date.now();
206
+ const duration = (job.completedAt - job.startedAt) / 1000;
207
+ console.log(`[AutoVerifier] Task ${job.taskId} verified: ${result.score}/100 (${result.verdict}) in ${duration.toFixed(1)}s`);
208
+ }
209
+ catch (e) {
210
+ job.status = "failed";
211
+ job.completedAt = Date.now();
212
+ console.error(`[AutoVerifier] Task ${job.taskId} failed:`, e instanceof Error ? e.message : e);
213
+ }
214
+ }
215
+ // ─── Repo URL Resolution ───────────────────────────────────
216
+ async resolveRepoUrl(hash) {
217
+ // If hash looks like a GitHub URL, use it directly
218
+ if (hash.startsWith("https://github.com/")) {
219
+ return hash;
220
+ }
221
+ // Try IPFS gateway
222
+ try {
223
+ const response = await fetch(`https://gateway.pinata.cloud/ipfs/${hash}`, {
224
+ signal: AbortSignal.timeout(10000),
225
+ });
226
+ if (response.ok) {
227
+ const data = await response.json();
228
+ if (data.repoUrl)
229
+ return data.repoUrl;
230
+ if (data.url)
231
+ return data.url;
232
+ }
233
+ }
234
+ catch { }
235
+ // Fallback: treat the hash as a URL
236
+ if (hash.startsWith("http")) {
237
+ return hash;
238
+ }
239
+ throw new Error(`Cannot resolve repo URL from hash: ${hash.slice(0, 20)}...`);
240
+ }
241
+ // ─── Verification Runner ───────────────────────────────────
242
+ async verifyRepo(repoUrl, taskId) {
243
+ // Validate URL
244
+ const urlPattern = /^https:\/\/(github\.com|gitlab\.com|bitbucket\.org)\/[\w.\-]+\/[\w.\-]+/;
245
+ if (!urlPattern.test(repoUrl)) {
246
+ throw new Error(`Invalid repo URL: only GitHub/GitLab/Bitbucket HTTPS URLs allowed`);
247
+ }
248
+ const tmpDir = `/tmp/covenant-auto-verify-${taskId}-${Date.now()}`;
249
+ const cleanup = () => {
250
+ try {
251
+ if (existsSync(tmpDir)) {
252
+ rmSync(tmpDir, { recursive: true, force: true });
253
+ }
254
+ }
255
+ catch { }
256
+ };
257
+ try {
258
+ // Clone (shallow, single branch, no prompts)
259
+ execSync(`git clone --depth 1 --single-branch "${repoUrl}" "${tmpDir}"`, {
260
+ timeout: 60000,
261
+ env: { ...process.env, GIT_TERMINAL_PROMPT: "0", GIT_ASKPASS: "echo" },
262
+ stdio: "pipe",
263
+ });
264
+ // Run verification checks
265
+ const checks = await this.runChecks(tmpDir);
266
+ const score = Math.round(checks.reduce((sum, c) => sum + c.score, 0) / checks.length);
267
+ const verdict = score >= 70 ? "pass" : score >= 40 ? "partial" : "fail";
268
+ const evidenceHash = createHash("sha256")
269
+ .update(JSON.stringify({ taskId: taskId.toString(), score, checks, timestamp: Date.now() }))
270
+ .digest("hex");
271
+ return {
272
+ score,
273
+ verdict,
274
+ summary: checks.map(c => `${c.name}: ${c.passed ? "PASS" : "FAIL"} (${c.score}/100)`).join("; "),
275
+ evidenceHash,
276
+ };
277
+ }
278
+ finally {
279
+ cleanup();
280
+ }
281
+ }
282
+ // ─── Security Checks ───────────────────────────────────────
283
+ async runChecks(dir) {
284
+ const checks = [];
285
+ // 1. Build check
286
+ checks.push(this.checkBuild(dir));
287
+ // 2. Test check
288
+ checks.push(this.checkTests(dir));
289
+ // 3. Security scan
290
+ checks.push(this.checkSecurity(dir));
291
+ // 4. Secrets detection
292
+ checks.push(this.checkSecrets(dir));
293
+ // 5. Code quality
294
+ checks.push(this.checkCodeQuality(dir));
295
+ return checks;
296
+ }
297
+ checkBuild(dir) {
298
+ const hasPackageJson = existsSync(`${dir}/package.json`);
299
+ const hasTsconfig = existsSync(`${dir}/tsconfig.json`);
300
+ let buildPassed = false;
301
+ if (hasPackageJson) {
302
+ try {
303
+ execSync("npm run build 2>/dev/null || true", { cwd: dir, timeout: 30000, stdio: "pipe" });
304
+ buildPassed = true;
305
+ }
306
+ catch { }
307
+ }
308
+ return {
309
+ name: "build",
310
+ passed: buildPassed || hasPackageJson || hasTsconfig,
311
+ score: buildPassed ? 100 : (hasPackageJson ? 50 : 30),
312
+ };
313
+ }
314
+ checkTests(dir) {
315
+ let testCount = 0;
316
+ try {
317
+ const output = execSync(`find "${dir}" -name "*.test.*" -o -name "*.spec.*" 2>/dev/null | wc -l`, { stdio: "pipe" }).toString().trim();
318
+ testCount = parseInt(output) || 0;
319
+ }
320
+ catch { }
321
+ return {
322
+ name: "tests",
323
+ passed: testCount > 0,
324
+ score: Math.min(100, testCount * 20 + 20),
325
+ };
326
+ }
327
+ checkSecurity(dir) {
328
+ let score = 100;
329
+ // Check for eval()
330
+ try {
331
+ const evals = execSync(`grep -r "\\beval(" "${dir}" --include="*.ts" --include="*.js" 2>/dev/null | wc -l`, { stdio: "pipe" }).toString().trim();
332
+ if (parseInt(evals) > 0)
333
+ score -= 20;
334
+ }
335
+ catch { }
336
+ // Check for innerHTML
337
+ try {
338
+ const innerHTML = execSync(`grep -r "innerHTML" "${dir}" --include="*.ts" --include="*.js" 2>/dev/null | wc -l`, { stdio: "pipe" }).toString().trim();
339
+ if (parseInt(innerHTML) > 0)
340
+ score -= 10;
341
+ }
342
+ catch { }
343
+ // Check for SQL injection
344
+ try {
345
+ const sql = execSync(`grep -rP "query.*\\$\\{" "${dir}" --include="*.ts" --include="*.js" 2>/dev/null | wc -l`, { stdio: "pipe" }).toString().trim();
346
+ if (parseInt(sql) > 0)
347
+ score -= 20;
348
+ }
349
+ catch { }
350
+ return {
351
+ name: "security",
352
+ passed: score >= 70,
353
+ score: Math.max(0, score),
354
+ };
355
+ }
356
+ checkSecrets(dir) {
357
+ let score = 100;
358
+ try {
359
+ const secrets = execSync(`grep -rE "(API_KEY|SECRET|PRIVATE_KEY|PASSWORD)\\s*=\\s*['\"][^'\"]+['\"]" "${dir}" --include="*.ts" --include="*.js" --include="*.env" 2>/dev/null | wc -l`, { stdio: "pipe" }).toString().trim();
360
+ if (parseInt(secrets) > 0)
361
+ score -= 40;
362
+ }
363
+ catch { }
364
+ const hasEnv = existsSync(`${dir}/.env`);
365
+ if (hasEnv)
366
+ score -= 30;
367
+ return {
368
+ name: "secrets",
369
+ passed: score >= 70,
370
+ score: Math.max(0, score),
371
+ };
372
+ }
373
+ checkCodeQuality(dir) {
374
+ let score = 100;
375
+ // Count lines of code
376
+ try {
377
+ const loc = execSync(`find "${dir}" -name "*.ts" -o -name "*.js" -o -name "*.sol" 2>/dev/null | xargs wc -l 2>/dev/null | tail -1 | awk '{print $1}'`, { stdio: "pipe" }).toString().trim();
378
+ if (parseInt(loc) < 10)
379
+ score -= 30;
380
+ }
381
+ catch { }
382
+ // Count TODOs
383
+ try {
384
+ const todos = execSync(`grep -r "TODO\\|FIXME\\|HACK" "${dir}" --include="*.ts" --include="*.js" 2>/dev/null | wc -l`, { stdio: "pipe" }).toString().trim();
385
+ if (parseInt(todos) > 10)
386
+ score -= 10;
387
+ }
388
+ catch { }
389
+ return {
390
+ name: "code_quality",
391
+ passed: score >= 70,
392
+ score: Math.max(0, score),
393
+ };
394
+ }
395
+ // ─── Auto-Decision ─────────────────────────────────────────
396
+ async autoDecide(job, result) {
397
+ if (!this.walletClient || !this.walletClient.account) {
398
+ console.log(`[AutoVerifier] No wallet — cannot auto-decide task ${job.taskId}`);
399
+ return;
400
+ }
401
+ try {
402
+ if (result.verdict === "pass") {
403
+ // Approve the task — sign empty signature for completeTask
404
+ const zeroSig = "0x" + "0".repeat(130);
405
+ const hash = await this.walletClient.writeContract({
406
+ address: COVENANT_ESCROW,
407
+ abi: ESCROW_ABI,
408
+ functionName: "completeTask",
409
+ args: [job.taskId, zeroSig],
410
+ chain: baseSepolia,
411
+ account: this.walletClient.account,
412
+ });
413
+ console.log(`[AutoVerifier] Task ${job.taskId} APPROVED. TX: ${hash}`);
414
+ }
415
+ else if (result.verdict === "fail") {
416
+ // Reject the task
417
+ const reason = keccak256(toBytes(`Verification failed: score ${result.score}/100`));
418
+ const hash = await this.walletClient.writeContract({
419
+ address: COVENANT_ESCROW,
420
+ abi: ESCROW_ABI,
421
+ functionName: "failTask",
422
+ args: [job.taskId, reason],
423
+ chain: baseSepolia,
424
+ account: this.walletClient.account,
425
+ });
426
+ console.log(`[AutoVerifier] Task ${job.taskId} REJECTED. TX: ${hash}`);
427
+ }
428
+ else {
429
+ // Partial — needs manual review
430
+ console.log(`[AutoVerifier] Task ${job.taskId} PARTIAL (${result.score}/100) — needs manual review`);
431
+ }
432
+ }
433
+ catch (e) {
434
+ console.error(`[AutoVerifier] Auto-decision failed for task ${job.taskId}:`, e);
435
+ }
436
+ }
437
+ // ─── Status ─────────────────────────────────────────────────
438
+ getStatus() {
439
+ const jobs = Array.from(this.jobs.values());
440
+ return {
441
+ running: this.running,
442
+ activeJobs: jobs.filter(j => j.status === "running").length,
443
+ completedJobs: jobs.filter(j => j.status === "completed").length,
444
+ failedJobs: jobs.filter(j => j.status === "failed").length,
445
+ lastProcessedBlock: this.lastProcessedBlock,
446
+ };
447
+ }
448
+ getJob(taskId) {
449
+ return this.jobs.get(taskId);
450
+ }
451
+ }
452
+ //# sourceMappingURL=auto-verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-verifier.js","sourceRoot":"","sources":["../src/auto-verifier.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/handlers/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,OAAO,EAEb,MAAM,MAAM,CAAC;AAYd,OAAO,KAAK,EAAE,QAAQ,EAAkC,MAAM,aAAa,CAAC;AAgE5E;;;GAGG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6FhD;AAMD,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,OAAO,EACxB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AA8KD,wBAAsB,YAAY,CAChC,eAAe,EAAE,OAAO,EACxB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,SAAS,OAAO,EAAO,EAC7B,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,GAAG,CAAC,CAkBd"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/handlers/wallet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAGL,KAAK,GAAG,EACR,KAAK,OAAO,EAGb,MAAM,MAAM,CAAC;AAYd,OAAO,KAAK,EAAE,QAAQ,EAAkC,MAAM,aAAa,CAAC;AAuE5E;;;GAGG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6FhD;AAMD,wBAAsB,gBAAgB,CACpC,eAAe,EAAE,OAAO,EACxB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,CAyDnB;AAmMD,wBAAsB,YAAY,CAChC,eAAe,EAAE,OAAO,EACxB,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,SAAS,OAAO,EAAO,EAC7B,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,GAChC,OAAO,CAAC,GAAG,CAAC,CAkBd"}