@intent-engine/cli 0.1.39 → 0.1.41

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 (137) hide show
  1. package/dist/src/agent/actions.d.ts +2 -1
  2. package/dist/src/agent/actions.js.map +1 -1
  3. package/dist/src/agent/create.d.ts +5 -1
  4. package/dist/src/agent/create.js +26 -3
  5. package/dist/src/agent/create.js.map +1 -1
  6. package/dist/src/agent/everyday.js +8 -0
  7. package/dist/src/agent/everyday.js.map +1 -1
  8. package/dist/src/agent/hash.d.ts +1 -0
  9. package/dist/src/agent/hash.js +14 -0
  10. package/dist/src/agent/hash.js.map +1 -0
  11. package/dist/src/agent/jobs.d.ts +2 -0
  12. package/dist/src/agent/jobs.js +109 -0
  13. package/dist/src/agent/jobs.js.map +1 -0
  14. package/dist/src/agent/mcp.d.ts +2 -0
  15. package/dist/src/agent/mcp.js +30 -7
  16. package/dist/src/agent/mcp.js.map +1 -1
  17. package/dist/src/agent/problems.d.ts +4 -0
  18. package/dist/src/agent/problems.js +9 -5
  19. package/dist/src/agent/problems.js.map +1 -1
  20. package/dist/src/agent/profile.js +6 -3
  21. package/dist/src/agent/profile.js.map +1 -1
  22. package/dist/src/agent/read.d.ts +1 -1
  23. package/dist/src/agent/read.js +3 -37
  24. package/dist/src/agent/read.js.map +1 -1
  25. package/dist/src/agent/registry.js +4 -1
  26. package/dist/src/agent/registry.js.map +1 -1
  27. package/dist/src/agent/reputation.d.ts +13 -0
  28. package/dist/src/agent/reputation.js +46 -6
  29. package/dist/src/agent/reputation.js.map +1 -1
  30. package/dist/src/agent/spec.d.ts +1 -0
  31. package/dist/src/agent/spec.js +6 -1
  32. package/dist/src/agent/spec.js.map +1 -1
  33. package/dist/src/agent/wallet/account.js +9 -3
  34. package/dist/src/agent/wallet/account.js.map +1 -1
  35. package/dist/src/agent/wallet/attest.js +7 -4
  36. package/dist/src/agent/wallet/attest.js.map +1 -1
  37. package/dist/src/agent/wallet/committee.js +5 -2
  38. package/dist/src/agent/wallet/committee.js.map +1 -1
  39. package/dist/src/agent/wallet/delivery.d.ts +2 -0
  40. package/dist/src/agent/wallet/delivery.js +94 -39
  41. package/dist/src/agent/wallet/delivery.js.map +1 -1
  42. package/dist/src/agent/wallet/escrow.d.ts +2 -0
  43. package/dist/src/agent/wallet/escrow.js +60 -21
  44. package/dist/src/agent/wallet/escrow.js.map +1 -1
  45. package/dist/src/agent/wallet/guard.d.ts +8 -2
  46. package/dist/src/agent/wallet/guard.js +7 -5
  47. package/dist/src/agent/wallet/guard.js.map +1 -1
  48. package/dist/src/agent/wallet/offer.d.ts +2 -1
  49. package/dist/src/agent/wallet/offer.js +4 -4
  50. package/dist/src/agent/wallet/offer.js.map +1 -1
  51. package/dist/src/agent/wallet/receipt.d.ts +6 -1
  52. package/dist/src/agent/wallet/receipt.js +53 -13
  53. package/dist/src/agent/wallet/receipt.js.map +1 -1
  54. package/dist/src/agent/wallet/record.d.ts +1 -1
  55. package/dist/src/agent/wallet/record.js +1 -1
  56. package/dist/src/agent/wallet/record.js.map +1 -1
  57. package/dist/src/agent/wallet/split.js +5 -2
  58. package/dist/src/agent/wallet/split.js.map +1 -1
  59. package/dist/src/agent/wallet/trade.d.ts +6 -0
  60. package/dist/src/agent/wallet/trade.js +49 -17
  61. package/dist/src/agent/wallet/trade.js.map +1 -1
  62. package/dist/src/agent/wallet/unwrap.d.ts +2 -0
  63. package/dist/src/agent/wallet/unwrap.js +46 -0
  64. package/dist/src/agent/wallet/unwrap.js.map +1 -0
  65. package/dist/src/agent/wallet/wait.d.ts +2 -0
  66. package/dist/src/agent/wallet/wait.js +12 -9
  67. package/dist/src/agent/wallet/wait.js.map +1 -1
  68. package/dist/src/agent/wallet.d.ts +4 -3
  69. package/dist/src/agent/wallet.js +5 -2
  70. package/dist/src/agent/wallet.js.map +1 -1
  71. package/dist/src/agent/work-claims.js +6 -3
  72. package/dist/src/agent/work-claims.js.map +1 -1
  73. package/dist/src/arg-admin.d.ts +4 -0
  74. package/dist/src/arg-admin.js +79 -0
  75. package/dist/src/arg-admin.js.map +1 -0
  76. package/dist/src/arg-options.d.ts +34 -2
  77. package/dist/src/arg-options.js +9 -4
  78. package/dist/src/arg-options.js.map +1 -1
  79. package/dist/src/arg-solve.d.ts +7 -0
  80. package/dist/src/arg-solve.js +51 -0
  81. package/dist/src/arg-solve.js.map +1 -0
  82. package/dist/src/arg-usage.js +3 -3
  83. package/dist/src/arg-usage.js.map +1 -1
  84. package/dist/src/args.d.ts +1 -4
  85. package/dist/src/args.js +13 -120
  86. package/dist/src/args.js.map +1 -1
  87. package/dist/src/check-process.d.ts +3 -24
  88. package/dist/src/check-process.js +5 -272
  89. package/dist/src/check-process.js.map +1 -1
  90. package/dist/src/command-types.d.ts +6 -0
  91. package/dist/src/commands.js +1 -1
  92. package/dist/src/commands.js.map +1 -1
  93. package/dist/src/container-check.d.ts +9 -0
  94. package/dist/src/container-check.js +82 -0
  95. package/dist/src/container-check.js.map +1 -0
  96. package/dist/src/delivery-fetch.d.ts +6 -0
  97. package/dist/src/delivery-fetch.js +29 -4
  98. package/dist/src/delivery-fetch.js.map +1 -1
  99. package/dist/src/draw.d.ts +27 -0
  100. package/dist/src/draw.js +163 -0
  101. package/dist/src/draw.js.map +1 -0
  102. package/dist/src/job-args.d.ts +2 -1
  103. package/dist/src/job-args.js +18 -0
  104. package/dist/src/job-args.js.map +1 -1
  105. package/dist/src/job-commands.js +20 -13
  106. package/dist/src/job-commands.js.map +1 -1
  107. package/dist/src/job-filters.d.ts +13 -0
  108. package/dist/src/job-filters.js +32 -0
  109. package/dist/src/job-filters.js.map +1 -0
  110. package/dist/src/judge-watch.d.ts +1 -0
  111. package/dist/src/judge-watch.js +26 -8
  112. package/dist/src/judge-watch.js.map +1 -1
  113. package/dist/src/judge.d.ts +2 -0
  114. package/dist/src/judge.js +11 -3
  115. package/dist/src/judge.js.map +1 -1
  116. package/dist/src/mcp-smoke.d.ts +55 -0
  117. package/dist/src/mcp-smoke.js +174 -0
  118. package/dist/src/mcp-smoke.js.map +1 -0
  119. package/dist/src/process-reap.d.ts +15 -0
  120. package/dist/src/process-reap.js +121 -0
  121. package/dist/src/process-reap.js.map +1 -0
  122. package/dist/src/process-table.d.ts +16 -0
  123. package/dist/src/process-table.js +78 -0
  124. package/dist/src/process-table.js.map +1 -0
  125. package/dist/src/reputation-commands.js +9 -3
  126. package/dist/src/reputation-commands.js.map +1 -1
  127. package/dist/src/trust-args.js +12 -1
  128. package/dist/src/trust-args.js.map +1 -1
  129. package/dist/src/version.d.ts +1 -1
  130. package/dist/src/version.js +1 -1
  131. package/dist/src/viper.d.ts +10 -0
  132. package/dist/src/viper.js +37 -5
  133. package/dist/src/viper.js.map +1 -1
  134. package/dist/src/wallet.d.ts +1 -0
  135. package/dist/src/wallet.js +2 -1
  136. package/dist/src/wallet.js.map +1 -1
  137. package/package.json +4 -4
@@ -2,7 +2,7 @@ import { createHash } from "node:crypto";
2
2
  import { mkdtemp, writeFile } from "node:fs/promises";
3
3
  import { tmpdir } from "node:os";
4
4
  import { join } from "node:path";
5
- import { PLAIN_HTTP_ON_PUBLIC, plainHttpOnPublic, PUBLIC_GENESIS_HASHES } from "@intent-engine/client";
5
+ import { announces, PLAIN_HTTP_ON_PUBLIC, plainHttpOnPublic, PUBLIC_GENESIS_HASHES, SPEC_TIMEOUT_MS } from "@intent-engine/client";
6
6
  import { MAX_ARTIFACT_BYTES } from "./artifact.js";
7
7
  import { publicHost, systemLookup } from "./public-address.js";
8
8
  export const FETCHED_NAME = "artifact";
@@ -41,6 +41,31 @@ async function body(response, url) {
41
41
  }
42
42
  return Buffer.concat(chunks);
43
43
  }
44
+ export async function fetchSha256(get, transport, url, lookup = systemLookup) {
45
+ let parsed;
46
+ try {
47
+ parsed = new URL(url);
48
+ }
49
+ catch {
50
+ return { problem: "is not a url" };
51
+ }
52
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
53
+ return { problem: "is not an http or https url" };
54
+ }
55
+ if (await plainHttpOnPublic(transport, url)) {
56
+ return { problem: PLAIN_HTTP_ON_PUBLIC };
57
+ }
58
+ if (PUBLIC_GENESIS_HASHES.has(await transport.genesisHash()) && !(await publicHost(parsed.hostname, lookup))) {
59
+ return { problem: NOT_PUBLIC };
60
+ }
61
+ try {
62
+ const bytes = await body(await get(url, { redirect: "error", signal: AbortSignal.timeout(SPEC_TIMEOUT_MS) }), url);
63
+ return { sha256: createHash("sha256").update(bytes).digest("hex") };
64
+ }
65
+ catch (error) {
66
+ return { problem: error instanceof DeliveryUnfit ? "could not be read within the size limit" : `could not be fetched (${error instanceof Error ? error.message : String(error)})` };
67
+ }
68
+ }
44
69
  export async function fetchDelivery(get, transport, delivery, seconds, lookup = systemLookup) {
45
70
  let url;
46
71
  try {
@@ -69,12 +94,12 @@ export async function fetchDelivery(get, transport, delivery, seconds, lookup =
69
94
  throw new DeliveryUnfit(delivery.url, `could not be fetched: ${error instanceof Error ? error.message : String(error)}`);
70
95
  }
71
96
  const sha256 = createHash("sha256").update(bytes).digest("hex");
72
- if (sha256 !== delivery.sha256) {
73
- throw new DeliveryUnfit(delivery.url, `has sha256 ${sha256}, not the announced ${delivery.sha256}`);
97
+ if (!announces(delivery, sha256)) {
98
+ throw new DeliveryUnfit(delivery.url, `has sha256 ${sha256}, which the commitment ${delivery.commitment} of ${delivery.worker} does not bind`);
74
99
  }
75
100
  const root = await mkdtemp(join(tmpdir(), "judge-delivery-"));
76
101
  const path = join(root, fetchedName(url));
77
102
  await writeFile(path, bytes, { mode: 0o600, flag: "wx" });
78
- return { root, path };
103
+ return { root, path, sha256 };
79
104
  }
80
105
  //# sourceMappingURL=delivery-fetch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delivery-fetch.js","sourceRoot":"","sources":["../../src/delivery-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delivery-fetch.js","sourceRoot":"","sources":["../../src/delivery-fetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type Address } from "@solana/kit";
2
+ import type { Delivery, FinalizedBlock, Transport } from "@intent-engine/client";
3
+ import { type Cases, type Draw, type Failure, type Primitive, type Run } from "./viper.js";
4
+ export declare const DRAW_TAG = "judge-draw";
5
+ export declare const DRAW_POLL_SECONDS = 2;
6
+ export declare const DETAIL_BYTES = 256;
7
+ export type Beacon = FinalizedBlock & {
8
+ seed: string;
9
+ draw: Draw;
10
+ };
11
+ export type DrawJudged = {
12
+ slot: number;
13
+ blockhash: string;
14
+ seed: string;
15
+ total: number;
16
+ passed: number;
17
+ failures: Failure[];
18
+ };
19
+ export declare const notAnnounced: (sha256: string, intent: Address) => string;
20
+ export declare const answerTooLong = "a drawn case's answer is longer than the 256 bytes the viper judge reports, so the checker cannot see it; nothing was paid";
21
+ export declare const noBlocks = "the spec draws its cases from a finalized block, and the RPC node cannot list or read finalized blocks; nothing was run or paid";
22
+ export declare const stoppedWaiting: (slot: bigint) => string;
23
+ export declare function drawSeed(blockhash: string, intent: Address, artifactSha256: string): string;
24
+ export declare function engineRun(seed: string): Run;
25
+ export declare function drawBeacon(transport: Transport, sleep: (seconds: number) => Promise<boolean>, first: Delivery | null, draw: Draw, intent: Address, sha256: string): Promise<Beacon>;
26
+ export declare function drawnArguments(wasm: Buffer, budget: Cases, draw: Draw, seed: string, timeoutSeconds: number): Promise<Primitive[][]>;
27
+ export declare function judgeDraw(wasm: Buffer, source: Uint8Array, cases: Cases, beacon: Beacon, left: () => number, run: Run): Promise<DrawJudged>;
@@ -0,0 +1,163 @@
1
+ import { createHash } from "node:crypto";
2
+ import { getAddressEncoder, getBase58Encoder } from "@solana/kit";
3
+ import { JudgeRefused } from "./judge-errors.js";
4
+ import { CASES_FENCE, CLOCK_FROM, CLOCK_TO, deadlineMissed, decodeOutput, encodeInput, isPrimitive, MAX_ARGUMENTS, moduleText, OUTPUT_BYTES, REPORTED_FAILURES, runViper, SEED_LIMIT, stoppedAll, } from "./viper.js";
5
+ export const DRAW_TAG = "judge-draw";
6
+ export const DRAW_POLL_SECONDS = 2;
7
+ export const DETAIL_BYTES = 256;
8
+ const ENTRY = "judgeDrawEntry";
9
+ const DEFAULT_EXPORT = /\bexport\s+default\b/g;
10
+ const FITS = `const fits = (value) => value === null || typeof value === "boolean" || typeof value === "string" || (typeof value === "number" && Number.isFinite(value));`;
11
+ const ASCII = String.raw `.replace(/[\u0080-\uffff]/g, (c) => "\\u" + c.charCodeAt(0).toString(16).padStart(4, "0"))`;
12
+ const GENERATOR_TAIL = `export default (seed, count, at) => { ${FITS} const lists = ${ENTRY}(seed, count); if (!(Array.isArray(lists) && lists.every((args) => Array.isArray(args) && args.every(fits)))) return false; const text = JSON.stringify(lists)${ASCII}; return at < 0 ? text.length : text.slice(at, at + ${DETAIL_BYTES}); };`;
13
+ const CHECKER_TAIL = `export default (answer, ...args) => { const held = ${ENTRY}(args, answer); return held === true || held === false ? held : null; };`;
14
+ const refuseDraw = (part, why) => {
15
+ throw new JudgeRefused(`the spec's ${CASES_FENCE} draw ${part} ${why}; the spec is at fault, not the worker, and nothing was paid`);
16
+ };
17
+ export const notAnnounced = (sha256, intent) => `the spec draws its cases from the first finalized block after the earliest announcement of the artifact with sha256 ${sha256} for intent ${intent}, and nobody announced it; nothing was run or paid`;
18
+ export const answerTooLong = `a drawn case's answer is longer than the ${DETAIL_BYTES} bytes the viper judge reports, so the checker cannot see it; nothing was paid`;
19
+ export const noBlocks = "the spec draws its cases from a finalized block, and the RPC node cannot list or read finalized blocks; nothing was run or paid";
20
+ export const stoppedWaiting = (slot) => `the judge stopped waiting for the first block at or after slot ${slot} to be finalized; nothing was run or paid`;
21
+ export function drawSeed(blockhash, intent, artifactSha256) {
22
+ return createHash("sha256")
23
+ .update(DRAW_TAG)
24
+ .update(Uint8Array.from(getBase58Encoder().encode(blockhash)))
25
+ .update(Uint8Array.from(getAddressEncoder().encode(intent)))
26
+ .update(Buffer.from(artifactSha256, "hex"))
27
+ .digest("hex");
28
+ }
29
+ export function engineRun(seed) {
30
+ return {
31
+ seed: 1 + (parseInt(seed.slice(0, 12), 16) % (SEED_LIMIT - 1)),
32
+ clock: CLOCK_FROM + (parseInt(seed.slice(12, 24), 16) % (CLOCK_TO - CLOCK_FROM)),
33
+ };
34
+ }
35
+ export async function drawBeacon(transport, sleep, first, draw, intent, sha256) {
36
+ if (first === null) {
37
+ throw new JudgeRefused(notAnnounced(sha256, intent));
38
+ }
39
+ const { finalizedBlock } = transport;
40
+ if (finalizedBlock === undefined) {
41
+ throw new JudgeRefused(noBlocks);
42
+ }
43
+ const from = first.slot + BigInt(draw.k);
44
+ for (;;) {
45
+ const block = await finalizedBlock.call(transport, from);
46
+ if (block !== null) {
47
+ return { ...block, seed: drawSeed(block.blockhash, intent, sha256), draw };
48
+ }
49
+ if (!(await sleep(DRAW_POLL_SECONDS))) {
50
+ throw new JudgeRefused(stoppedWaiting(from));
51
+ }
52
+ }
53
+ }
54
+ function wrapped(source, part, tail) {
55
+ const found = source.match(DEFAULT_EXPORT)?.length ?? 0;
56
+ if (found !== 1) {
57
+ return refuseDraw(part, `has ${found} default exports, not one`);
58
+ }
59
+ return `${source.replace(DEFAULT_EXPORT, `const ${ENTRY} =`)}\n;${tail}\n`;
60
+ }
61
+ async function ranCases(wasm, source, budget, cases, run, timeoutSeconds) {
62
+ if (timeoutSeconds <= 0) {
63
+ return { verdict: "stopped", detail: deadlineMissed("the viper judge", timeoutSeconds) };
64
+ }
65
+ const ran = await runViper(wasm, encodeInput(source, { steps: budget.steps, heap: budget.heap, seed: undefined, clock: undefined, cases }, run), timeoutSeconds);
66
+ if (ran.timedOut) {
67
+ return { verdict: "stopped", detail: deadlineMissed("the viper judge", timeoutSeconds) };
68
+ }
69
+ if (ran.exitCode !== 0) {
70
+ return { verdict: "crashed", detail: `the judge process ended with exit code ${ran.exitCode}: ${ran.diagnostic.trim().slice(0, 256)}` };
71
+ }
72
+ return decodeOutput(ran.output, cases.length);
73
+ }
74
+ const unfinished = (ran) => !Array.isArray(ran);
75
+ function parsed(text) {
76
+ try {
77
+ return JSON.parse(text);
78
+ }
79
+ catch {
80
+ return undefined;
81
+ }
82
+ }
83
+ const told = (result) => result === undefined ? "gave no verdict" : `gave the verdict ${result.verdict}${result.detail === undefined ? "" : ` with ${JSON.stringify(result.detail)}`}`;
84
+ export async function drawnArguments(wasm, budget, draw, seed, timeoutSeconds) {
85
+ const deadline = Date.now() + timeoutSeconds * 1000;
86
+ const left = () => Math.max(0, deadline - Date.now()) / 1000;
87
+ const source = wrapped(draw.generator, "generator", GENERATOR_TAIL);
88
+ const run = engineRun(seed);
89
+ const invalid = `did not return ${draw.count} lists of at most ${MAX_ARGUMENTS} JSON strings, numbers, booleans or nulls, in at most ${OUTPUT_BYTES} bytes of JSON`;
90
+ const read = async (at) => {
91
+ const results = await ranCases(wasm, source, budget, at.map((from) => ({ args: [seed, draw.count, from], expected: null })), run, left());
92
+ if (unfinished(results)) {
93
+ return refuseDraw("generator", `did not finish: ${results.detail}`);
94
+ }
95
+ return results.map((result) => (result.verdict === "wrong" ? (result.detail ?? null) : refuseDraw("generator", told(result))));
96
+ };
97
+ const [length] = await read([-1]);
98
+ if (typeof length !== "number" || !Number.isSafeInteger(length) || length < 0 || length > OUTPUT_BYTES) {
99
+ return refuseDraw("generator", invalid);
100
+ }
101
+ const chunks = await read(Array.from({ length: Math.ceil(length / DETAIL_BYTES) }, (_, index) => index * DETAIL_BYTES));
102
+ const text = chunks.every((chunk) => typeof chunk === "string") ? chunks.join("") : "";
103
+ const lists = text.length === length ? parsed(text) : undefined;
104
+ if (!Array.isArray(lists) || lists.length !== draw.count || !lists.every((args) => Array.isArray(args) && args.length <= MAX_ARGUMENTS && args.every(isPrimitive))) {
105
+ return refuseDraw("generator", invalid);
106
+ }
107
+ return lists;
108
+ }
109
+ export async function judgeDraw(wasm, source, cases, beacon, left, run) {
110
+ const text = moduleText(source);
111
+ const { draw } = beacon;
112
+ const drawn = await drawnArguments(wasm, cases, draw, beacon.seed, left());
113
+ const recorded = { slot: Number(beacon.slot), blockhash: beacon.blockhash, seed: beacon.seed };
114
+ const answered = await ranCases(wasm, text, cases, drawn.map((args) => ({ args, expected: null })), run, left());
115
+ const unanswered = (ran) => ({
116
+ ...recorded,
117
+ ...(ran.verdict === "stopped" ? stoppedAll(drawn.length, ran.detail) : { total: drawn.length, passed: 0, failures: [{ case: 0, ...ran }] }),
118
+ });
119
+ if (unfinished(answered)) {
120
+ return unanswered(answered);
121
+ }
122
+ const failures = [];
123
+ const answers = [];
124
+ answered.forEach((result, index) => {
125
+ if (result.verdict === "pass") {
126
+ answers.push({ case: index, answer: null });
127
+ }
128
+ else if (result.verdict === "wrong") {
129
+ answers.push({ case: index, answer: result.detail ?? null });
130
+ }
131
+ else {
132
+ failures.push({ case: index, ...result });
133
+ }
134
+ });
135
+ const long = answers.filter(({ answer }) => typeof answer === "string" && Buffer.byteLength(answer) > DETAIL_BYTES - 4);
136
+ if (long.length > 0) {
137
+ const confirmed = await ranCases(wasm, text, cases, long.map(({ case: index, answer }) => ({ args: drawn[index] ?? [], expected: answer })), run, left());
138
+ if (unfinished(confirmed)) {
139
+ return unanswered(confirmed);
140
+ }
141
+ if (confirmed.some((result) => result.verdict !== "pass")) {
142
+ throw new JudgeRefused(answerTooLong);
143
+ }
144
+ }
145
+ if (answers.length > 0) {
146
+ const checked = await ranCases(wasm, wrapped(draw.checker, "checker", CHECKER_TAIL), cases, answers.map(({ case: index, answer }) => ({ args: [answer, ...(drawn[index] ?? [])], expected: true })), engineRun(beacon.seed), left());
147
+ if (unfinished(checked)) {
148
+ return refuseDraw("checker", `did not finish: ${checked.detail}`);
149
+ }
150
+ checked.forEach((result, at) => {
151
+ const { case: index, answer } = answers[at];
152
+ if (result.verdict === "wrong" && result.detail === false) {
153
+ failures.push({ case: index, verdict: "wrong", detail: answer });
154
+ }
155
+ else if (result.verdict !== "pass") {
156
+ refuseDraw("checker", result.verdict === "wrong" ? "returned something other than true or false" : told(result));
157
+ }
158
+ });
159
+ }
160
+ failures.sort((a, b) => a.case - b.case);
161
+ return { ...recorded, total: drawn.length, passed: drawn.length - failures.length, failures: failures.slice(0, REPORTED_FAILURES) };
162
+ }
163
+ //# sourceMappingURL=draw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draw.js","sourceRoot":"","sources":["../../src/draw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAgB,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAIL,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EAEZ,WAAW,EAEX,WAAW,EACX,aAAa,EACb,UAAU,EACV,YAAY,EAEZ,iBAAiB,EAEjB,QAAQ,EACR,UAAU,EACV,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAKhC,MAAM,KAAK,GAAG,gBAAgB,CAAC;AAC/B,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,IAAI,GAAG,6JAA6J,CAAC;AAC3K,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAA,4FAA4F,CAAC;AACrH,MAAM,cAAc,GAAG,yCAAyC,IAAI,kBAAkB,KAAK,iKAAiK,KAAK,uDAAuD,YAAY,OAAO,CAAC;AAC5U,MAAM,YAAY,GAAG,sDAAsD,KAAK,0EAA0E,CAAC;AAE3J,MAAM,UAAU,GAAG,CAAC,IAA6B,EAAE,GAAW,EAAS,EAAE;IACvE,MAAM,IAAI,YAAY,CAAC,cAAc,WAAW,SAAS,IAAI,IAAI,GAAG,8DAA8D,CAAC,CAAC;AACtI,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,MAAe,EAAU,EAAE,CACtE,uHAAuH,MAAM,eAAe,MAAM,oDAAoD,CAAC;AAEzM,MAAM,CAAC,MAAM,aAAa,GAAG,4CAA4C,YAAY,gFAAgF,CAAC;AAEtK,MAAM,CAAC,MAAM,QAAQ,GAAG,iIAAiI,CAAC;AAE1J,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CACrD,kEAAkE,IAAI,2CAA2C,CAAC;AAEpH,MAAM,UAAU,QAAQ,CAAC,SAAiB,EAAE,MAAe,EAAE,cAAsB;IACjF,OAAO,UAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,QAAQ,CAAC;SAChB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;SAC7D,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;SAC3D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;SAC1C,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;QAC9D,KAAK,EAAE,UAAU,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAoB,EACpB,KAA4C,EAC5C,KAAsB,EACtB,IAAU,EACV,MAAe,EACf,MAAc;IAEd,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IACrC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,SAAS,CAAC;QACR,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;QAC7E,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,IAA6B,EAAE,IAAY;IAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,UAAU,CAAC,IAAI,EAAE,OAAO,KAAK,2BAA2B,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,SAAS,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;AAC7E,CAAC;AAID,KAAK,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAc,EAAE,MAAa,EAAE,KAAa,EAAE,GAAQ,EAAE,cAAsB;IAClH,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,CAAC;IAC3F,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC;IACjK,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,0CAA0C,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;IAC1I,CAAC;IACD,OAAO,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,GAA8B,EAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAE9F,SAAS,MAAM,CAAC,IAAY;IAC1B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,MAA8B,EAAU,EAAE,CACtD,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,oBAAoB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;AAEhK,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,MAAa,EAAE,IAAU,EAAE,IAAY,EAAE,cAAsB;IAChH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,IAAI,CAAC;IACpD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAC7D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,kBAAkB,IAAI,CAAC,KAAK,qBAAqB,aAAa,yDAAyD,YAAY,gBAAgB,CAAC;IACpK,MAAM,IAAI,GAAG,KAAK,EAAE,EAAY,EAAwB,EAAE;QACxD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1I,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,UAAU,CAAC,WAAW,EAAE,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACjI,CAAC,CAAC;IACF,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,YAAY,EAAE,CAAC;QACvG,OAAO,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC;IACxH,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;QAC5K,OAAO,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,MAAkB,EAClB,KAAY,EACZ,MAAc,EACd,IAAkB,EAClB,GAAQ;IAER,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACxB,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/F,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACjH,MAAM,UAAU,GAAG,CAAC,GAAe,EAAc,EAAE,CAAC,CAAC;QACnD,GAAG,QAAQ;QACX,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;KAC5I,CAAC,CAAC;IACH,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,GAA0C,EAAE,CAAC;IAC1D,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACjC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC;IACxH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1J,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,IAAI,EACJ,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,YAAY,CAAC,EAC9C,KAAK,EACL,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EACvG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,EACtB,IAAI,EAAE,CACP,CAAC;QACF,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,OAAO,UAAU,CAAC,SAAS,EAAE,mBAAmB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YAC7B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAwC,CAAC;YACnF,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC1D,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;gBACrC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,6CAA6C,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACnH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC;AACtI,CAAC"}
@@ -4,4 +4,5 @@ export declare const JUDGE_WATCH_INTERVAL = 30;
4
4
  export declare const MAX_JUDGE_INTERVAL = 3600;
5
5
  export declare const WATCH_TAKES_NO_ARTIFACT = "judge --watch fetches each delivery from its url and takes no --artifact";
6
6
  export declare const DELIVER_ONE_OF = "deliver takes exactly one of --artifact <file or directory> and --sha256 <64 hex>";
7
- export declare function jobArgsOf(verb: "deliver" | "receipt" | "record-delivery" | "judge", sub: string | undefined, remote: Remote, values: Values): Command;
7
+ export declare const MIN_PAY_FORMAT = "--min-pay must be a token amount like 12 or 0.5";
8
+ export declare function jobArgsOf(verb: "jobs" | "deliver" | "receipt" | "record-delivery" | "judge", sub: string | undefined, remote: Remote, values: Values): Command;
@@ -1,3 +1,4 @@
1
+ import { TOKEN_AMOUNT_PATTERN } from "@intent-engine/core";
1
2
  import { confirmUrlOf, key, memoUrlOf, noSub, parseBounded, required, sha256Of, u64, UsageError } from "./arg-values.js";
2
3
  import { JUDGE_TIMEOUT, MAX_JUDGE_TIMEOUT, maxPagesOf, releaseOption, runOf } from "./command-builders.js";
3
4
  import { sandboxOf } from "./sandbox.js";
@@ -23,9 +24,26 @@ function workOf(values) {
23
24
  }
24
25
  return values.artifact === undefined ? { sha256: sha256Of(required(values, "sha256")) } : { artifact: values.artifact };
25
26
  }
27
+ export const MIN_PAY_FORMAT = "--min-pay must be a token amount like 12 or 0.5";
28
+ function minPayOf(values) {
29
+ const text = values["min-pay"];
30
+ if (text !== undefined && !TOKEN_AMOUNT_PATTERN.test(text)) {
31
+ throw new UsageError(MIN_PAY_FORMAT);
32
+ }
33
+ return text;
34
+ }
26
35
  export function jobArgsOf(verb, sub, remote, values) {
27
36
  noSub(sub);
28
37
  switch (verb) {
38
+ case "jobs":
39
+ return {
40
+ name: "jobs",
41
+ ...remote,
42
+ attestor: values.attestor === undefined ? undefined : key(values, "attestor"),
43
+ mint: values.mint === undefined ? undefined : key(values, "mint"),
44
+ minPay: minPayOf(values),
45
+ unclaimed: values.unclaimed === true,
46
+ };
29
47
  case "deliver":
30
48
  return {
31
49
  name: "deliver",
@@ -1 +1 @@
1
- {"version":3,"file":"job-args.js","sourceRoot":"","sources":["../../src/job-args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-args.js","sourceRoot":"","sources":["../../src/job-args.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,11 @@
1
1
  import { getAddressDecoder } from "@solana/kit";
2
2
  import { findIntentPda, formatAmount } from "@intent-engine/core";
3
- import { announcements, createClient, deliveryInstructions, deliveryRecord, jobsOf, mintOf, } from "@intent-engine/client";
3
+ import { createClient, deliveryInstructions, deliveryRecord, loadConfig, mintOf, } from "@intent-engine/client";
4
4
  import { escrowReceipt, recordingOf } from "./agent/wallet.js";
5
+ import { ANNOUNCE_FIRST } from "./agent/wallet/delivery.js";
5
6
  import { previewed } from "./admin-commands.js";
6
7
  import { artifactSha256 } from "./artifact.js";
8
+ import { pricedJobs } from "./job-filters.js";
7
9
  import { transactionSigner } from "./ledger-keys.js";
8
10
  export const NOT_RELEASED = "no release of this escrow is among its recent transactions; show intent says whether it is still open, and --release with the release's signature reads a release directly";
9
11
  const TOKEN_ACCOUNT_HEAD = 64;
@@ -43,19 +45,30 @@ async function receiptOf(transport, url, intent, wanted) {
43
45
  export async function jobCommand(command, runtime, transport) {
44
46
  switch (command.name) {
45
47
  case "jobs":
46
- return { jobs: await jobsOf(transport, command.attestor) };
48
+ return {
49
+ jobs: (await pricedJobs(transport, command, (await loadConfig(transport)).config)).map(({ netPay, payable, claimedBy, claimEnds, ...job }) => ({
50
+ ...job,
51
+ net_pay: netPay,
52
+ payable,
53
+ claimed_by: claimedBy,
54
+ claim_ends: claimEnds,
55
+ })),
56
+ };
47
57
  case "deliver": {
48
58
  const worker = await transactionSigner(runtime, command.keypair);
49
59
  const { intent, workUrl } = command;
50
60
  const sha256 = "sha256" in command ? command.sha256 : await artifactSha256(command.artifact);
51
- const { attestor, instructions } = await deliveryInstructions(transport, { worker, intent, sha256, url: workUrl });
61
+ const { attestor, instructions, commitment, sealedTo } = await deliveryInstructions(transport, { worker, intent, sha256, url: workUrl });
52
62
  const shown = {
53
63
  intent,
54
64
  attestor,
65
+ commitment,
55
66
  summary: [
56
- `Announces: the work with sha256 ${sha256} at ${workUrl}, for the proof escrow ${intent}`,
67
+ `Announces: the work with sha256 ${sha256}, for the proof escrow ${intent}, as the commitment ${commitment}, which binds it to ${worker.address}`,
68
+ `Seals: the url ${workUrl}, so only ${sealedTo.length === 1 ? `the judge ${attestor}` : `the ${sealedTo.length} committee members`} can read it`,
57
69
  `Notifies: its judge ${attestor}, with a transfer of 0 lamports from ${worker.address}, which signs and pays the fee`,
58
70
  ],
71
+ warnings: [ANNOUNCE_FIRST],
59
72
  };
60
73
  return previewed(transport, instructions, worker, shown, command.yes);
61
74
  }
@@ -73,18 +86,12 @@ export async function jobCommand(command, runtime, transport) {
73
86
  return previewed(transport, instructions, judge, { intent, release, sha256, memo, summary }, command.yes);
74
87
  }
75
88
  case "deliveries": {
76
- const record = await deliveryRecord(transport, command.attestor, command.intent, command.maxPages);
89
+ const keypair = command.judgeKeypair === undefined ? undefined : await runtime.loadKeypair(command.judgeKeypair);
90
+ const record = await deliveryRecord(transport, command.attestor, command.intent, command.maxPages, keypair);
77
91
  return {
78
92
  intent: command.intent,
79
93
  complete: record.complete,
80
- deliveries: announcements(record.deliveries).map(({ sha256, first, copies }) => ({
81
- sha256,
82
- worker: first.worker,
83
- url: first.url,
84
- signature: first.signature,
85
- slot: first.slot,
86
- copies,
87
- })),
94
+ deliveries: record.deliveries.map(({ worker, commitment, signature, slot, url }) => ({ worker, commitment, signature, slot, ...(url === "" ? {} : { url }) })),
88
95
  };
89
96
  }
90
97
  }
@@ -1 +1 @@
1
- {"version":3,"file":"job-commands.js","sourceRoot":"","sources":["../../src/job-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"job-commands.js","sourceRoot":"","sources":["../../src/job-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Address } from "@solana/kit";
2
+ import { type Job, type JobClaim, type JobPay, type PayTerms, type Transport } from "@intent-engine/client";
3
+ export type JobsWanted = {
4
+ attestor?: Address | undefined;
5
+ mint?: Address | undefined;
6
+ minPay?: string | undefined;
7
+ unclaimed?: boolean | undefined;
8
+ };
9
+ export declare function leastUnits(tokens: string, decimals: number): bigint;
10
+ export type DecimalsOf = (mint: Address) => Promise<number>;
11
+ export declare function decimalsOnce(transport: Transport): DecimalsOf;
12
+ export declare function jobsWanted(transport: Transport, { attestor, mint, minPay, unclaimed }: JobsWanted, decimalsOf?: DecimalsOf): Promise<Job[]>;
13
+ export declare function pricedJobs(transport: Transport, wanted: JobsWanted, terms: PayTerms): Promise<(Job & JobPay & JobClaim)[]>;
@@ -0,0 +1,32 @@
1
+ import { jobClaimOf, jobPays, JOBS_LIMIT, jobsOf, loadClaimsOf, mintOf, openProofEscrows, } from "@intent-engine/client";
2
+ export function leastUnits(tokens, decimals) {
3
+ const [whole = "0", fraction = ""] = tokens.split(".");
4
+ const kept = fraction.slice(0, decimals).padEnd(decimals, "0");
5
+ const finer = /[1-9]/.test(fraction.slice(decimals)) ? 1n : 0n;
6
+ return BigInt(whole === "" ? "0" : whole) * 10n ** BigInt(decimals) + BigInt(kept === "" ? "0" : kept) + finer;
7
+ }
8
+ const latestFirst = (a, b) => (a.expiresAt === b.expiresAt ? 0 : a.expiresAt > b.expiresAt ? -1 : 1);
9
+ export function decimalsOnce(transport) {
10
+ const seen = new Map();
11
+ return (mint) => {
12
+ const known = seen.get(mint) ?? mintOf(transport, mint).then(({ decimals }) => decimals);
13
+ seen.set(mint, known);
14
+ return known;
15
+ };
16
+ }
17
+ export async function jobsWanted(transport, { attestor, mint, minPay, unclaimed }, decimalsOf = decimalsOnce(transport)) {
18
+ if (minPay === undefined) {
19
+ return jobsOf(transport, { attestor, mint, unclaimed });
20
+ }
21
+ const open = await openProofEscrows(transport, { attestor, mint }, Number.POSITIVE_INFINITY);
22
+ const mints = [...new Set(open.map(({ intent }) => intent.inputMint))];
23
+ const lists = await Promise.all(mints.map(async (each) => jobsOf(transport, { attestor, mint: each, minSells: leastUnits(minPay, await decimalsOf(each)), unclaimed })));
24
+ return lists.flat().sort(latestFirst).slice(0, JOBS_LIMIT);
25
+ }
26
+ export async function pricedJobs(transport, wanted, terms) {
27
+ const decimalsOf = decimalsOnce(transport);
28
+ const jobs = await jobsWanted(transport, wanted, decimalsOf);
29
+ const [pays, claims] = await Promise.all([jobPays(transport, jobs, terms, decimalsOf), loadClaimsOf(transport, jobs.map(({ intent }) => intent))]);
30
+ return jobs.map((job, i) => ({ ...job, ...(pays[i] ?? { netPay: "0", payable: false }), ...jobClaimOf(claims[i] ?? null) }));
31
+ }
32
+ //# sourceMappingURL=job-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job-filters.js","sourceRoot":"","sources":["../../src/job-filters.ts"],"names":[],"mappings":"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"}
@@ -14,5 +14,6 @@ export type Watched = Announced & (Verdict | {
14
14
  verdict: "fail";
15
15
  reason: string;
16
16
  });
17
+ export declare const SEALED_ELSEWHERE = "is sealed to other wallets than this judge, so its url cannot be read";
17
18
  export declare function watchJudge(command: JudgeCommand, interval: number, runtime: Runtime, transport: Transport, out: (text: string) => void): Promise<number>;
18
19
  export {};
@@ -2,12 +2,17 @@ import { createHash } from "node:crypto";
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { resolve } from "node:path";
4
4
  import { getIntentDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, IntentStatus } from "@intent-engine/core";
5
- import { announcements, chainTime, deliveryRecord } from "@intent-engine/client";
5
+ import { chainTime, deliveryRecord } from "@intent-engine/client";
6
6
  import { removeCopy } from "./artifact.js";
7
7
  import { holdSignals } from "./check-process.js";
8
8
  import { DeliveryUnfit, fetchDelivery } from "./delivery-fetch.js";
9
9
  import { JudgeInterrupted, JudgeRefused } from "./judge-errors.js";
10
10
  import { escrowFor, judge, pagesRead } from "./judge.js";
11
+ export const SEALED_ELSEWHERE = "is sealed to other wallets than this judge, so its url cannot be read";
12
+ const earlier = (a, b) => (a.slot < b.slot ? -1 : a.slot > b.slot ? 1 : a.signature < b.signature ? -1 : a.signature > b.signature ? 1 : 0);
13
+ function unjudged(deliveries, seen) {
14
+ return deliveries.filter(({ signature }) => !seen.has(signature)).sort(earlier);
15
+ }
11
16
  const line = (value) => JSON.stringify(value, (_, v) => (typeof v === "bigint" ? v.toString() : v));
12
17
  async function stillOpen(transport, intent) {
13
18
  const account = await transport.getAccount(intent);
@@ -17,9 +22,12 @@ async function stillOpen(transport, intent) {
17
22
  const { status, expiresAt } = getIntentDecoder().decode(account.data);
18
23
  return status === IntentStatus.Open && expiresAt > (await chainTime(transport));
19
24
  }
20
- async function judgeDelivery(command, runtime, transport, delivery, interrupted) {
25
+ async function judgeDelivery(command, runtime, transport, delivery, interrupted, seen) {
21
26
  const announced = { url: delivery.url, worker: delivery.worker, announced: delivery.signature };
22
27
  const failed = (error) => ({ ...announced, artifactSha256: delivery.sha256, verdict: "fail", reason: error.message });
28
+ if (delivery.url === "") {
29
+ return failed(new DeliveryUnfit(`announcement ${delivery.signature}`, SEALED_ELSEWHERE));
30
+ }
23
31
  let fetched;
24
32
  try {
25
33
  fetched = await fetchDelivery(runtime.specFetch, transport, delivery, command.timeout);
@@ -34,6 +42,10 @@ async function judgeDelivery(command, runtime, transport, delivery, interrupted)
34
42
  if (interrupted() !== undefined) {
35
43
  return null;
36
44
  }
45
+ if (seen.has(fetched.sha256)) {
46
+ return "skipped";
47
+ }
48
+ seen.add(fetched.sha256);
37
49
  return { ...announced, ...(await judge({ ...command, artifact: fetched.path }, runtime, transport)) };
38
50
  }
39
51
  catch (error) {
@@ -48,17 +60,19 @@ async function judgeDelivery(command, runtime, transport, delivery, interrupted)
48
60
  }
49
61
  export async function watchJudge(command, interval, runtime, transport, out) {
50
62
  const signer = await runtime.loadSigner(command.keypair);
63
+ const keypair = await runtime.loadKeypair(command.keypair).catch(() => undefined);
51
64
  const { address, attestor, specHash } = await escrowFor(transport, signer.address, command.owner, command.nonce);
52
65
  const specSha256 = createHash("sha256").update(await readFile(resolve(command.spec))).digest("hex");
53
66
  if (specSha256 !== specHash) {
54
67
  throw new JudgeRefused(`--spec ${command.spec} has sha256 ${specSha256}, but intent ${address} commits ${specHash}`);
55
68
  }
56
69
  const seen = new Set();
70
+ let judged = 0;
57
71
  const signals = holdSignals();
58
72
  const stop = new AbortController();
59
73
  signals.listen(() => stop.abort());
60
74
  const stopped = (why) => {
61
- out(line({ stopped: why, intent: address, judged: seen.size }));
75
+ out(line({ stopped: why, intent: address, judged }));
62
76
  return 0;
63
77
  };
64
78
  try {
@@ -70,23 +84,27 @@ export async function watchJudge(command, interval, runtime, transport, out) {
70
84
  if (!(await stillOpen(transport, address))) {
71
85
  return stopped("closed");
72
86
  }
73
- const record = await deliveryRecord(transport, attestor, address, command.maxPages);
87
+ const record = await deliveryRecord(transport, attestor, address, command.maxPages, keypair);
74
88
  if (!record.complete) {
75
89
  throw new JudgeRefused(`the delivery record of intent ${address} is incomplete because the judge's history is too long to read in full or the RPC node cannot serve all of it; nothing was run or paid. ${pagesRead(record.pages)}`);
76
90
  }
77
- const fresh = announcements(record.deliveries).filter(({ sha256 }) => !seen.has(sha256));
78
- for (const { first } of fresh) {
91
+ const fresh = unjudged(record.deliveries, seen);
92
+ for (const first of fresh) {
79
93
  if (signals.caught() !== undefined) {
80
94
  break;
81
95
  }
82
96
  if (!(await stillOpen(transport, address))) {
83
97
  return stopped("closed");
84
98
  }
85
- const watched = await judgeDelivery(command, runtime, transport, first, signals.caught);
99
+ const watched = await judgeDelivery(command, runtime, transport, first, signals.caught, seen);
86
100
  if (watched === null) {
87
101
  break;
88
102
  }
89
- seen.add(first.sha256);
103
+ seen.add(first.signature);
104
+ if (watched === "skipped") {
105
+ continue;
106
+ }
107
+ judged += 1;
90
108
  out(line(watched));
91
109
  if (watched.verdict === "pass") {
92
110
  return stopped("signature" in watched && watched.signature !== null ? "paid" : "passed");