@intent-engine/cli 0.1.22 → 0.1.26

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 (175) hide show
  1. package/dist/src/admin-commands.d.ts +12 -0
  2. package/dist/src/admin-commands.js +140 -0
  3. package/dist/src/admin-commands.js.map +1 -0
  4. package/dist/src/agent/actions.d.ts +2 -0
  5. package/dist/src/agent/actions.js +1 -1
  6. package/dist/src/agent/actions.js.map +1 -1
  7. package/dist/src/agent/claims.js +13 -12
  8. package/dist/src/agent/claims.js.map +1 -1
  9. package/dist/src/agent/create.d.ts +1 -0
  10. package/dist/src/agent/create.js +18 -4
  11. package/dist/src/agent/create.js.map +1 -1
  12. package/dist/src/agent/mandate-agent.d.ts +2 -0
  13. package/dist/src/agent/mandate-agent.js +136 -0
  14. package/dist/src/agent/mandate-agent.js.map +1 -0
  15. package/dist/src/agent/mandate-grant.d.ts +2 -0
  16. package/dist/src/agent/mandate-grant.js +192 -0
  17. package/dist/src/agent/mandate-grant.js.map +1 -0
  18. package/dist/src/agent/mandate-revoke.d.ts +1 -0
  19. package/dist/src/agent/mandate-revoke.js +142 -0
  20. package/dist/src/agent/mandate-revoke.js.map +1 -0
  21. package/dist/src/agent/mandate-state.d.ts +33 -0
  22. package/dist/src/agent/mandate-state.js +85 -0
  23. package/dist/src/agent/mandate-state.js.map +1 -0
  24. package/dist/src/agent/mandate.d.ts +4 -26
  25. package/dist/src/agent/mandate.js +4 -479
  26. package/dist/src/agent/mandate.js.map +1 -1
  27. package/dist/src/agent/mcp.js +10 -5
  28. package/dist/src/agent/mcp.js.map +1 -1
  29. package/dist/src/agent/prepare.js +1 -1
  30. package/dist/src/agent/prepare.js.map +1 -1
  31. package/dist/src/agent/problems.d.ts +15 -1
  32. package/dist/src/agent/problems.js +38 -2
  33. package/dist/src/agent/problems.js.map +1 -1
  34. package/dist/src/agent/read.d.ts +13 -0
  35. package/dist/src/agent/read.js +56 -7
  36. package/dist/src/agent/read.js.map +1 -1
  37. package/dist/src/agent/registry.js +8 -2
  38. package/dist/src/agent/registry.js.map +1 -1
  39. package/dist/src/agent/relay.d.ts +2 -0
  40. package/dist/src/agent/relay.js +11 -3
  41. package/dist/src/agent/relay.js.map +1 -1
  42. package/dist/src/agent/sales.d.ts +29 -0
  43. package/dist/src/agent/sales.js +248 -0
  44. package/dist/src/agent/sales.js.map +1 -0
  45. package/dist/src/agent/signed-prepare.d.ts +1 -0
  46. package/dist/src/agent/signed-prepare.js +141 -0
  47. package/dist/src/agent/signed-prepare.js.map +1 -0
  48. package/dist/src/agent/signed-relay.d.ts +25 -0
  49. package/dist/src/agent/signed-relay.js +68 -0
  50. package/dist/src/agent/signed-relay.js.map +1 -0
  51. package/dist/src/agent/signed-submit.d.ts +2 -0
  52. package/dist/src/agent/signed-submit.js +137 -0
  53. package/dist/src/agent/signed-submit.js.map +1 -0
  54. package/dist/src/agent/signed-terms.d.ts +85 -0
  55. package/dist/src/agent/signed-terms.js +84 -0
  56. package/dist/src/agent/signed-terms.js.map +1 -0
  57. package/dist/src/agent/signed.d.ts +4 -13
  58. package/dist/src/agent/signed.js +4 -361
  59. package/dist/src/agent/signed.js.map +1 -1
  60. package/dist/src/agent/wallet/account.d.ts +4 -0
  61. package/dist/src/agent/wallet/account.js +84 -0
  62. package/dist/src/agent/wallet/account.js.map +1 -0
  63. package/dist/src/agent/wallet/attest.d.ts +4 -0
  64. package/dist/src/agent/wallet/attest.js +178 -0
  65. package/dist/src/agent/wallet/attest.js.map +1 -0
  66. package/dist/src/agent/wallet/delivery.d.ts +13 -0
  67. package/dist/src/agent/wallet/delivery.js +171 -0
  68. package/dist/src/agent/wallet/delivery.js.map +1 -0
  69. package/dist/src/agent/wallet/escrow.d.ts +7 -0
  70. package/dist/src/agent/wallet/escrow.js +164 -0
  71. package/dist/src/agent/wallet/escrow.js.map +1 -0
  72. package/dist/src/agent/wallet/fills.d.ts +27 -0
  73. package/dist/src/agent/wallet/fills.js +80 -0
  74. package/dist/src/agent/wallet/fills.js.map +1 -0
  75. package/dist/src/agent/wallet/guard.d.ts +57 -0
  76. package/dist/src/agent/wallet/guard.js +205 -0
  77. package/dist/src/agent/wallet/guard.js.map +1 -0
  78. package/dist/src/agent/wallet/offer.d.ts +50 -0
  79. package/dist/src/agent/wallet/offer.js +80 -0
  80. package/dist/src/agent/wallet/offer.js.map +1 -0
  81. package/dist/src/agent/wallet/receipt.d.ts +42 -0
  82. package/dist/src/agent/wallet/receipt.js +102 -0
  83. package/dist/src/agent/wallet/receipt.js.map +1 -0
  84. package/dist/src/agent/wallet/record.d.ts +31 -0
  85. package/dist/src/agent/wallet/record.js +178 -0
  86. package/dist/src/agent/wallet/record.js.map +1 -0
  87. package/dist/src/agent/wallet/releases.d.ts +40 -0
  88. package/dist/src/agent/wallet/releases.js +236 -0
  89. package/dist/src/agent/wallet/releases.js.map +1 -0
  90. package/dist/src/agent/wallet/split.d.ts +10 -0
  91. package/dist/src/agent/wallet/split.js +271 -0
  92. package/dist/src/agent/wallet/split.js.map +1 -0
  93. package/dist/src/agent/wallet/trade.d.ts +14 -0
  94. package/dist/src/agent/wallet/trade.js +243 -0
  95. package/dist/src/agent/wallet/trade.js.map +1 -0
  96. package/dist/src/agent/wallet/wait.d.ts +5 -0
  97. package/dist/src/agent/wallet/wait.js +99 -0
  98. package/dist/src/agent/wallet/wait.js.map +1 -0
  99. package/dist/src/agent/wallet.d.ts +18 -72
  100. package/dist/src/agent/wallet.js +26 -1216
  101. package/dist/src/agent/wallet.js.map +1 -1
  102. package/dist/src/arg-options.d.ts +333 -0
  103. package/dist/src/arg-options.js +310 -0
  104. package/dist/src/arg-options.js.map +1 -0
  105. package/dist/src/arg-usage.d.ts +7 -0
  106. package/dist/src/arg-usage.js +53 -0
  107. package/dist/src/arg-usage.js.map +1 -0
  108. package/dist/src/arg-values.d.ts +47 -0
  109. package/dist/src/arg-values.js +280 -0
  110. package/dist/src/arg-values.js.map +1 -0
  111. package/dist/src/args.d.ts +7 -487
  112. package/dist/src/args.js +89 -880
  113. package/dist/src/args.js.map +1 -1
  114. package/dist/src/artifact.d.ts +22 -0
  115. package/dist/src/artifact.js +89 -0
  116. package/dist/src/artifact.js.map +1 -0
  117. package/dist/src/check-process.d.ts +39 -0
  118. package/dist/src/check-process.js +338 -0
  119. package/dist/src/check-process.js.map +1 -0
  120. package/dist/src/command-builders.d.ts +37 -0
  121. package/dist/src/command-builders.js +216 -0
  122. package/dist/src/command-builders.js.map +1 -0
  123. package/dist/src/command-types.d.ts +227 -0
  124. package/dist/src/command-types.js +2 -0
  125. package/dist/src/command-types.js.map +1 -0
  126. package/dist/src/commands.d.ts +7 -43
  127. package/dist/src/commands.js +67 -426
  128. package/dist/src/commands.js.map +1 -1
  129. package/dist/src/event-feed.d.ts +13 -0
  130. package/dist/src/event-feed.js +46 -0
  131. package/dist/src/event-feed.js.map +1 -0
  132. package/dist/src/flow-commands.d.ts +8 -0
  133. package/dist/src/flow-commands.js +116 -0
  134. package/dist/src/flow-commands.js.map +1 -0
  135. package/dist/src/flows.d.ts +6 -0
  136. package/dist/src/flows.js +84 -10
  137. package/dist/src/flows.js.map +1 -1
  138. package/dist/src/job-commands.d.ts +9 -0
  139. package/dist/src/job-commands.js +89 -0
  140. package/dist/src/job-commands.js.map +1 -0
  141. package/dist/src/judge-errors.d.ts +12 -0
  142. package/dist/src/judge-errors.js +16 -0
  143. package/dist/src/judge-errors.js.map +1 -0
  144. package/dist/src/judge.d.ts +28 -0
  145. package/dist/src/judge.js +169 -0
  146. package/dist/src/judge.js.map +1 -0
  147. package/dist/src/main.d.ts +4 -1
  148. package/dist/src/main.js +26 -10
  149. package/dist/src/main.js.map +1 -1
  150. package/dist/src/order-builders.d.ts +10 -0
  151. package/dist/src/order-builders.js +172 -0
  152. package/dist/src/order-builders.js.map +1 -0
  153. package/dist/src/render.d.ts +1 -0
  154. package/dist/src/render.js +9 -0
  155. package/dist/src/render.js.map +1 -1
  156. package/dist/src/runtime.d.ts +22 -0
  157. package/dist/src/runtime.js +2 -0
  158. package/dist/src/runtime.js.map +1 -0
  159. package/dist/src/solve-commands.d.ts +25 -0
  160. package/dist/src/solve-commands.js +171 -0
  161. package/dist/src/solve-commands.js.map +1 -0
  162. package/dist/src/tokens.js +2 -1
  163. package/dist/src/tokens.js.map +1 -1
  164. package/dist/src/version.d.ts +1 -1
  165. package/dist/src/version.js +1 -1
  166. package/dist/src/wallet.d.ts +4 -1
  167. package/dist/src/wallet.js +25 -5
  168. package/dist/src/wallet.js.map +1 -1
  169. package/package.json +16 -7
  170. package/dist/src/events.d.ts +0 -8
  171. package/dist/src/events.js +0 -43
  172. package/dist/src/events.js.map +0 -1
  173. package/dist/src/transport.d.ts +0 -208
  174. package/dist/src/transport.js +0 -441
  175. package/dist/src/transport.js.map +0 -1
@@ -0,0 +1,12 @@
1
+ export declare class JudgeRefused extends Error {
2
+ constructor(reason: string);
3
+ }
4
+ export declare class JudgeInterrupted extends Error {
5
+ readonly exitCode: number;
6
+ constructor(signal: InterruptSignal, reason?: string);
7
+ }
8
+ export declare const SIGNAL_EXIT: {
9
+ readonly SIGINT: 130;
10
+ readonly SIGTERM: 143;
11
+ };
12
+ export type InterruptSignal = keyof typeof SIGNAL_EXIT;
@@ -0,0 +1,16 @@
1
+ export class JudgeRefused extends Error {
2
+ constructor(reason) {
3
+ super(reason);
4
+ this.name = "JudgeRefused";
5
+ }
6
+ }
7
+ export class JudgeInterrupted extends Error {
8
+ exitCode;
9
+ constructor(signal, reason) {
10
+ super(reason ?? `the check was interrupted by ${signal}; nothing was paid and no verdict was written`);
11
+ this.name = "JudgeInterrupted";
12
+ this.exitCode = SIGNAL_EXIT[signal];
13
+ }
14
+ }
15
+ export const SIGNAL_EXIT = { SIGINT: 130, SIGTERM: 143 };
16
+ //# sourceMappingURL=judge-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge-errors.js","sourceRoot":"","sources":["../../src/judge-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,QAAQ,CAAS;IAE1B,YAAY,MAAuB,EAAE,MAAe;QAClD,KAAK,CAAC,MAAM,IAAI,gCAAgC,MAAM,+CAA+C,CAAC,CAAC;QACvG,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAW,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type Address, type Signature } from "@solana/kit";
2
+ import { type Transport } from "@intent-engine/client";
3
+ import type { Command } from "./args.js";
4
+ import type { Runtime } from "./commands.js";
5
+ import { type InterruptSignal } from "./judge-errors.js";
6
+ export { type InterruptSignal, JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
7
+ export { artifactSha256, CLEANUP_RETRIES, removeCopy, SKIPPED, SPEC_COPY } from "./artifact.js";
8
+ export { type Check, CHECK_ENV, checkEnv, type CheckOptions, claim, ENV_ARTIFACT_PATH, ENV_ARTIFACT_SHA256, ENV_SPEC_PATH, leftRunning, type Recorded, runCheck, type Running, stillRunning, } from "./check-process.js";
9
+ export type JudgeCommand = Extract<Command, {
10
+ name: "judge";
11
+ }>;
12
+ export type Verdict = {
13
+ intent: Address;
14
+ specHash: string;
15
+ artifactSha256: string;
16
+ command: string;
17
+ exitCode: number | null;
18
+ verdict: "pass" | "fail";
19
+ payTo: Address;
20
+ signature: Signature | null;
21
+ next?: string;
22
+ cleanup?: string;
23
+ };
24
+ export declare const pagesRead: (pages: number) => string;
25
+ export declare const resultOutside: (result: bigint, intent: Address, min: bigint, max: bigint) => string;
26
+ export declare function judge(command: JudgeCommand, runtime: Runtime, transport: Transport): Promise<Verdict>;
27
+ export declare const notSent: (signal: InterruptSignal) => string;
28
+ export declare const mayHaveLanded: (signal: InterruptSignal, address: Address, signature: Signature | undefined) => string;
@@ -0,0 +1,169 @@
1
+ import { createHash } from "node:crypto";
2
+ import { readFile, rm, writeFile } from "node:fs/promises";
3
+ import { resolve } from "node:path";
4
+ import { getBase58Decoder } from "@solana/kit";
5
+ import { decodeParams, IntentStatus, Kind } from "@intent-engine/core";
6
+ import { chainTime, createClient, deliveryRecord, firstDelivery, loadIntent, SIGNATURE_PAGE } from "@intent-engine/client";
7
+ import { NOT_SENT } from "./flows.js";
8
+ import { JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
9
+ import { copyOf, readArtifact, removeCopy } from "./artifact.js";
10
+ import { checkEnv, holdSignals, runCheck } from "./check-process.js";
11
+ export { JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
12
+ export { artifactSha256, CLEANUP_RETRIES, removeCopy, SKIPPED, SPEC_COPY } from "./artifact.js";
13
+ export { CHECK_ENV, checkEnv, claim, ENV_ARTIFACT_PATH, ENV_ARTIFACT_SHA256, ENV_SPEC_PATH, leftRunning, runCheck, stillRunning, } from "./check-process.js";
14
+ const FORCED_EXIT_MS = 200;
15
+ const hex = (bytes) => Buffer.from(bytes).toString("hex");
16
+ const reasonOf = (error) => (error instanceof Error ? error.message : String(error));
17
+ export const pagesRead = (pages) => `It read ${pages} ${pages === 1 ? "page" : "pages"} of ${SIGNATURE_PAGE} signatures; a higher --max-pages reads further, but does not help when the RPC node's ledger does not reach back to the escrow's creation or the node cannot page signatures or report its first available slot`;
18
+ export const resultOutside = (result, intent, min, max) => `--result ${result} lies outside the results intent ${intent} accepts, ${min} to ${max}; nothing was run or paid`;
19
+ async function escrowFor(transport, judge, owner, nonce) {
20
+ const { address, intent } = await loadIntent(transport, owner, nonce);
21
+ const params = decodeParams(intent.kind, Uint8Array.from(intent.params));
22
+ if (params.kind !== Kind.AttestedResult || params.specHash.every((b) => b === 0)) {
23
+ throw new JudgeRefused(`intent ${address} is not a proof escrow: an AttestedResult intent that commits a spec hash`);
24
+ }
25
+ if (intent.status !== IntentStatus.Open || intent.expiresAt <= (await chainTime(transport))) {
26
+ throw new JudgeRefused(`intent ${address} is no longer open`);
27
+ }
28
+ if (params.attestor !== judge) {
29
+ throw new JudgeRefused(`intent ${address} names ${params.attestor} as its judge, not ${judge}`);
30
+ }
31
+ return { address, specHash: hex(params.specHash), minResult: params.minResult, maxResult: params.maxResult };
32
+ }
33
+ export async function judge(command, runtime, transport) {
34
+ if (command.verdict !== undefined) {
35
+ await rm(command.verdict, { force: true });
36
+ }
37
+ const signer = await runtime.loadSigner(command.keypair);
38
+ const { address, specHash, minResult, maxResult } = await escrowFor(transport, signer.address, command.owner, command.nonce);
39
+ const result = command.result ?? minResult;
40
+ if (result < minResult || result > maxResult) {
41
+ throw new JudgeRefused(resultOutside(result, address, minResult, maxResult));
42
+ }
43
+ const specBytes = await readFile(resolve(command.spec));
44
+ const specSha256 = createHash("sha256").update(specBytes).digest("hex");
45
+ if (specSha256 !== specHash) {
46
+ throw new JudgeRefused(`--spec ${command.spec} has sha256 ${specSha256}, but intent ${address} commits ${specHash}`);
47
+ }
48
+ const artifact = resolve(command.artifact);
49
+ const read = await readArtifact(artifact);
50
+ const sha256 = read.sha256;
51
+ const record = await deliveryRecord(transport, signer.address, address, command.maxPages);
52
+ if (!record.complete) {
53
+ throw new JudgeRefused(`the delivery record is incomplete because the judge's history is too long to read in full or the RPC node cannot serve all of it, so the earliest announcer of the artifact with sha256 ${sha256} for intent ${address} cannot be known; nothing was run or paid. ${pagesRead(record.pages)}`);
54
+ }
55
+ const first = firstDelivery(record.deliveries, sha256);
56
+ const payTo = command.payTo ?? first?.worker;
57
+ if (payTo === undefined) {
58
+ throw new JudgeRefused(`nobody announced the artifact with sha256 ${sha256} for intent ${address}; pass --pay-to to pay a worker who did not announce it`);
59
+ }
60
+ if (first !== null && first.worker !== payTo) {
61
+ throw new JudgeRefused(`${first.worker} announced the artifact with sha256 ${sha256} first, in ${first.signature}; it is paid, not --pay-to ${payTo}`);
62
+ }
63
+ const signals = holdSignals();
64
+ try {
65
+ return await checkAndSettle(command, transport, signer, signals, { address, specHash, sha256, payTo, result, read, specBytes });
66
+ }
67
+ finally {
68
+ signals.release();
69
+ }
70
+ }
71
+ export const notSent = (signal) => `the check passed, but ${signal} arrived before the release was sent; nothing was paid and no verdict was written`;
72
+ export const mayHaveLanded = (signal, address, signature) => `the check passed and the release was sent${signature === undefined ? "" : ` in ${signature}`}; a second ${signal} stopped the judge before the send was confirmed, so the release may have landed. Read intent ${address} before judging it again; no verdict was written`;
73
+ function sendRelease(command, transport, signer, signals, release) {
74
+ return new Promise((done, failed) => {
75
+ let sent = false;
76
+ let signature;
77
+ let after = 0;
78
+ const signTransactions = async (transactions, config) => {
79
+ const caught = signals.caught();
80
+ if (caught !== undefined) {
81
+ throw new JudgeInterrupted(caught, notSent(caught));
82
+ }
83
+ sent = true;
84
+ const signed = await signer.signTransactions(transactions, config);
85
+ const own = signed[0]?.[signer.address];
86
+ signature = own === undefined ? signature : getBase58Decoder().decode(own);
87
+ return signed;
88
+ };
89
+ signals.listen((signal) => {
90
+ if (!sent) {
91
+ failed(new JudgeInterrupted(signal, notSent(signal)));
92
+ return;
93
+ }
94
+ after += 1;
95
+ if (after > 1) {
96
+ failed(new JudgeInterrupted(signal, mayHaveLanded(signal, release.address, signature)));
97
+ setTimeout(() => process.exit(SIGNAL_EXIT[signal]), FORCED_EXIT_MS).unref();
98
+ }
99
+ });
100
+ createClient({ url: command.url, transport })
101
+ .settleProof({
102
+ judge: Object.freeze({ ...signer, signTransactions }),
103
+ owner: command.owner,
104
+ nonce: command.nonce,
105
+ payTo: release.payTo,
106
+ result: release.result,
107
+ deliveredSha256: release.sha256,
108
+ })
109
+ .then((confirmed) => {
110
+ signals.listen(() => undefined);
111
+ done(confirmed);
112
+ }, failed);
113
+ });
114
+ }
115
+ async function checkAndSettle(command, transport, signer, signals, { address, specHash, sha256, payTo, result, read, specBytes }) {
116
+ const copy = await copyOf(read, specBytes);
117
+ let check = { exitCode: null, timedOut: false };
118
+ let cleanup;
119
+ try {
120
+ if (signals.caught() === undefined) {
121
+ check = await runCheck(command.run, checkEnv(process.env, copy.spec, copy.path, sha256), command.timeout, { cwd: copy.root });
122
+ }
123
+ }
124
+ finally {
125
+ cleanup = await removeCopy(copy.root);
126
+ }
127
+ const interrupted = check.interrupted ?? signals.caught();
128
+ if (interrupted !== undefined) {
129
+ throw new JudgeInterrupted(interrupted);
130
+ }
131
+ const passed = check.exitCode === 0;
132
+ let signature = null;
133
+ if (passed && command.yes) {
134
+ try {
135
+ signature = await sendRelease(command, transport, signer, signals, { address, payTo, result, sha256 });
136
+ }
137
+ catch (error) {
138
+ if (error instanceof JudgeInterrupted) {
139
+ throw error;
140
+ }
141
+ const during = signals.caught();
142
+ if (during !== undefined) {
143
+ throw new JudgeInterrupted(during, `the check passed and ${during} arrived while the release was being sent; the send failed, but the release may have landed: ${reasonOf(error)}. Read intent ${address} before judging it again; no verdict was written`);
144
+ }
145
+ throw error;
146
+ }
147
+ }
148
+ const verdict = {
149
+ intent: address,
150
+ specHash,
151
+ artifactSha256: sha256,
152
+ command: command.run,
153
+ exitCode: check.exitCode,
154
+ verdict: passed ? "pass" : "fail",
155
+ payTo,
156
+ signature,
157
+ ...(passed && !command.yes ? { next: NOT_SENT } : {}),
158
+ ...(cleanup !== undefined ? { cleanup } : {}),
159
+ };
160
+ if (command.verdict !== undefined) {
161
+ await writeFile(command.verdict, `${JSON.stringify(verdict, null, 2)}\n`);
162
+ }
163
+ const during = signals.caught();
164
+ if (signature !== null && during !== undefined) {
165
+ throw new JudgeInterrupted(during, `the check passed and ${during} arrived while the release was being sent; it was sent in ${signature}${command.verdict !== undefined ? ` and the verdict was written to ${command.verdict}` : ""}`);
166
+ }
167
+ return verdict;
168
+ }
169
+ //# sourceMappingURL=judge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/judge.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import { type Runtime } from "./commands.js";
4
4
  export declare const EXIT_OK = 0;
5
5
  export declare const EXIT_FAILED = 1;
6
6
  export declare const EXIT_USAGE = 2;
7
+ export declare const EXIT_PARTIAL = 3;
7
8
  export declare const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
8
9
  export declare const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
9
10
  type Io = {
@@ -12,8 +13,10 @@ type Io = {
12
13
  };
13
14
  export { render } from "./render.js";
14
15
  export declare const unreachable: (url: string) => string;
16
+ export declare const PREVIEW_ONLY = "nothing was sent; pass --yes to sign and send it";
15
17
  export declare function main(argv: readonly string[], runtime: Runtime, io: Io): Promise<number>;
16
- export declare function loadKeypairFile(path: string, platform?: string): Promise<KeyPairSigner>;
18
+ export declare const keypairUnreadable: (path: string) => string;
19
+ export declare function loadKeypairFile(path: string, platform?: string, home?: string): Promise<KeyPairSigner>;
17
20
  type Pipes = {
18
21
  stdin: Readable;
19
22
  stdout: Writable;
package/dist/src/main.js CHANGED
@@ -7,20 +7,24 @@ import { changesFrom, intentNotifications, rpcTransport, signatureWatch } from "
7
7
  import { ENV_URL, outputOf, parse, UsageError } from "./args.js";
8
8
  import { follow, run, watchSolve } from "./commands.js";
9
9
  import { withPriority } from "./compute.js";
10
- import { printableLines, render, renderText } from "./render.js";
11
- import { withSettings } from "./wallet.js";
10
+ import { JudgeInterrupted } from "./judge.js";
11
+ import { printableLines, redactUrl, render, renderText } from "./render.js";
12
+ import { expandHome, withSettings } from "./wallet.js";
12
13
  import { WALLET_NOTICE } from "./agent/wallet.js";
13
14
  export const EXIT_OK = 0;
14
15
  export const EXIT_FAILED = 1;
15
16
  export const EXIT_USAGE = 2;
17
+ export const EXIT_PARTIAL = 3;
16
18
  export const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
17
19
  export const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
18
20
  export { render } from "./render.js";
19
- export const unreachable = (url) => `cannot reach the RPC node at ${url}; pass --url devnet, --url mainnet-beta or an https URL, or set ${ENV_URL}`;
21
+ export const unreachable = (url) => `cannot reach the RPC node at ${url}; check your network connection and that this endpoint is up, or pass another --url or set ${ENV_URL}`;
22
+ export const PREVIEW_ONLY = "nothing was sent; pass --yes to sign and send it";
23
+ const PREVIEWED = new Set(["cancel", "expire", "close"]);
20
24
  const offline = (error) => error instanceof TypeError && error.message === "fetch failed";
21
25
  function message(error, url) {
22
26
  if (url !== undefined && offline(error)) {
23
- return unreachable(url);
27
+ return unreachable(redactUrl(url));
24
28
  }
25
29
  return printableLines(error instanceof Error ? error.message : String(error));
26
30
  }
@@ -46,22 +50,34 @@ export async function main(argv, runtime, io) {
46
50
  if (result !== null) {
47
51
  show(result);
48
52
  }
49
- return EXIT_OK;
53
+ if (PREVIEWED.has(command.name) && result !== null && "sent" in result && result.sent === false) {
54
+ io.err(PREVIEW_ONLY);
55
+ }
56
+ if (command.name === "flow" && command.flow === "mandate-revoke" && result !== null && ("failed" in result || "unknown" in result)) {
57
+ return EXIT_PARTIAL;
58
+ }
59
+ return command.name === "judge" && result !== null && "verdict" in result && result.verdict !== "pass" ? EXIT_FAILED : EXIT_OK;
50
60
  }
51
61
  catch (error) {
52
62
  io.err(message(error, url));
63
+ if (error instanceof JudgeInterrupted) {
64
+ return error.exitCode;
65
+ }
53
66
  return error instanceof UsageError ? EXIT_USAGE : EXIT_FAILED;
54
67
  }
55
68
  }
56
- export async function loadKeypairFile(path, platform = process.platform) {
69
+ const keyLike = (path) => /^[1-9A-HJ-NP-Za-km-z]{32,}$/.test(path) || path.trimStart().startsWith("[");
70
+ export const keypairUnreadable = (path) => keyLike(path) ? `${KEYPAIR_UNREADABLE}; the value given looks like a key, not a file path, so it is not repeated here` : `${KEYPAIR_UNREADABLE}; tried ${path}`;
71
+ export async function loadKeypairFile(path, platform = process.platform, home = homedir()) {
72
+ const file = expandHome(path, home);
57
73
  let bytes;
58
74
  let mode;
59
75
  try {
60
- mode = (await stat(path)).mode;
61
- bytes = JSON.parse(await readFile(path, "utf8"));
76
+ mode = (await stat(file)).mode;
77
+ bytes = JSON.parse(await readFile(file, "utf8"));
62
78
  }
63
79
  catch {
64
- throw new UsageError(KEYPAIR_UNREADABLE);
80
+ throw new UsageError(keypairUnreadable(file));
65
81
  }
66
82
  if (platform !== "win32" && (mode & 0o077) !== 0) {
67
83
  throw new UsageError(KEYPAIR_EXPOSED);
@@ -69,7 +85,7 @@ export async function loadKeypairFile(path, platform = process.platform) {
69
85
  if (!Array.isArray(bytes) ||
70
86
  bytes.length !== 64 ||
71
87
  !bytes.every((b) => Number.isInteger(b) && b >= 0 && b <= 255)) {
72
- throw new UsageError(KEYPAIR_UNREADABLE);
88
+ throw new UsageError(keypairUnreadable(file));
73
89
  }
74
90
  return createKeyPairSignerFromBytes(new Uint8Array(bytes));
75
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type Values } from "./arg-options.js";
2
+ import type { Command, Remote, ToolInput } from "./command-types.js";
3
+ export declare const MANDATE_USE_KINDS = "a mandate covers swap, limit and dutch orders; name one of those";
4
+ export declare function order(kind: string | undefined, values: Values): ToolInput;
5
+ export declare function expiry(values: Values): ToolInput;
6
+ export declare function terms(kind: string | undefined, values: Values): ToolInput;
7
+ export declare function mandate(sub: string | undefined, kind: string | undefined, remote: Remote, values: Values): Command;
8
+ export declare const SPEC_HASH_FORMAT = "--spec-hash must be the spec's sha256 as 64 hex digits";
9
+ export declare const needsSpecHash: (option: string) => string;
10
+ export declare function createTerms(kind: string | undefined, values: Values): ToolInput;
@@ -0,0 +1,172 @@
1
+ import { MAX_EXPIRES_IN, MIN_EXPIRES_IN } from "./agent/create.js";
2
+ import { MANDATE_KIND_NAMES } from "./agent/mandate.js";
3
+ import { ORDER } from "./arg-options.js";
4
+ import { amountOf, key, memoUrlOf, noSub, optionalField, parseBounded, required, sha256Of, timeOf, UsageError, } from "./arg-values.js";
5
+ import { MAX_PARTNER_BPS } from "@intent-engine/core";
6
+ export const MANDATE_USE_KINDS = "a mandate covers swap, limit and dutch orders; name one of those";
7
+ const ORDER_FIELDS = {
8
+ swap: ["amount-in", "min-out"],
9
+ limit: ["make", "take"],
10
+ dutch: ["amount-in", "start-out", "end-out", "start-at", "end-at"],
11
+ attested: ["amount-in", "min-result", "max-result", "attestor"],
12
+ };
13
+ export function order(kind, values) {
14
+ const fields = kind === undefined ? undefined : ORDER_FIELDS[kind];
15
+ if (fields === undefined) {
16
+ throw new UsageError("name the order kind: swap, limit, dutch or attested");
17
+ }
18
+ for (const name of ORDER) {
19
+ if (values[name] !== undefined && !fields.includes(name)) {
20
+ throw new UsageError(`a ${kind} order does not take --${name}`);
21
+ }
22
+ }
23
+ switch (kind) {
24
+ case "swap":
25
+ return { kind, amount_in: amountOf(values, "amount-in"), min_out: amountOf(values, "min-out") };
26
+ case "limit":
27
+ return { kind, make_amount: amountOf(values, "make"), take_amount: amountOf(values, "take") };
28
+ case "dutch":
29
+ return {
30
+ kind,
31
+ amount_in: amountOf(values, "amount-in"),
32
+ start_out: amountOf(values, "start-out"),
33
+ end_out: amountOf(values, "end-out"),
34
+ start_time: timeOf(values, "start-at"),
35
+ end_time: timeOf(values, "end-at"),
36
+ };
37
+ default:
38
+ return {
39
+ kind,
40
+ amount_in: amountOf(values, "amount-in"),
41
+ min_result: amountOf(values, "min-result"),
42
+ max_result: amountOf(values, "max-result"),
43
+ attestor: key(values, "attestor"),
44
+ };
45
+ }
46
+ }
47
+ export function expiry(values) {
48
+ if ((values["expires-at"] === undefined) === (values["expires-in"] === undefined)) {
49
+ throw new UsageError("give exactly one of --expires-at or --expires-in");
50
+ }
51
+ return values["expires-at"] === undefined
52
+ ? { expires_in: parseBounded(required(values, "expires-in"), "expires-in", MAX_EXPIRES_IN, MIN_EXPIRES_IN) }
53
+ : { expires_at: timeOf(values, "expires-at") };
54
+ }
55
+ function partner(values) {
56
+ if (values.partner === undefined && values["partner-bps"] === undefined) {
57
+ return {};
58
+ }
59
+ return {
60
+ partner: {
61
+ account: key(values, "partner"),
62
+ bps: parseBounded(required(values, "partner-bps"), "partner-bps", MAX_PARTNER_BPS),
63
+ },
64
+ };
65
+ }
66
+ export function terms(kind, values) {
67
+ return {
68
+ input_mint: key(values, "input-mint"),
69
+ output_mint: key(values, "output-mint"),
70
+ order: order(kind, values),
71
+ ...expiry(values),
72
+ ...optionalField(values, "nonce", "nonce", amountOf),
73
+ ...partner(values),
74
+ };
75
+ }
76
+ function grant(values) {
77
+ const kinds = required(values, "kinds").split(",");
78
+ for (const name of kinds) {
79
+ if (!MANDATE_KIND_NAMES.includes(name)) {
80
+ throw new UsageError(`--kinds takes a comma list of swap, limit, dutch; got ${name}`);
81
+ }
82
+ }
83
+ return {
84
+ agent: key(values, "agent"),
85
+ input_mint: key(values, "input-mint"),
86
+ output_mint: key(values, "output-mint"),
87
+ kinds,
88
+ per_intent: amountOf(values, "per-intent"),
89
+ total: amountOf(values, "total"),
90
+ max_intents: parseBounded(required(values, "max-intents"), "max-intents", 0xffff_ffff),
91
+ max_ttl: parseBounded(required(values, "max-ttl"), "max-ttl", MAX_EXPIRES_IN, MIN_EXPIRES_IN),
92
+ valid_for: parseBounded(required(values, "valid-for"), "valid-for", MAX_EXPIRES_IN, MIN_EXPIRES_IN),
93
+ floor: { out: amountOf(values, "floor-out"), in: amountOf(values, "floor-in") },
94
+ ...optionalField(values, "id", "id", amountOf),
95
+ ...partner(values),
96
+ ...optionalField(values, "agent-fee", "agent_fee", amountOf),
97
+ };
98
+ }
99
+ export function mandate(sub, kind, remote, values) {
100
+ const flow = (name, input) => ({
101
+ name: "flow",
102
+ ...remote,
103
+ flow: name,
104
+ keypair: required(values, "keypair"),
105
+ yes: values.yes === true,
106
+ input,
107
+ });
108
+ const ref = () => ({ agent: key(values, "agent"), ...optionalField(values, "id", "id", amountOf) });
109
+ if (sub !== "use") {
110
+ noSub(kind);
111
+ }
112
+ switch (sub) {
113
+ case "grant":
114
+ return flow("mandate-grant", grant(values));
115
+ case "revoke":
116
+ return flow("mandate-revoke", ref());
117
+ case "show":
118
+ return {
119
+ name: "lookup",
120
+ ...remote,
121
+ lookup: "mandate-show",
122
+ keypair: values.keypair,
123
+ input: { ...ref(), ...optionalField(values, "owner", "owner", key) },
124
+ };
125
+ case "use":
126
+ if (kind === "attested") {
127
+ throw new UsageError(MANDATE_USE_KINDS);
128
+ }
129
+ return flow("mandate-use", {
130
+ owner: key(values, "owner"),
131
+ order: order(kind, values),
132
+ ...expiry(values),
133
+ ...optionalField(values, "id", "id", amountOf),
134
+ ...optionalField(values, "nonce", "nonce", amountOf),
135
+ });
136
+ default:
137
+ throw new UsageError("mandate needs grant, show, revoke or use");
138
+ }
139
+ }
140
+ export const SPEC_HASH_FORMAT = "--spec-hash must be the spec's sha256 as 64 hex digits";
141
+ export const needsSpecHash = (option) => `--${option} needs --spec-hash, which makes the attested escrow a proof escrow`;
142
+ const PROOF_OPTIONS = ["spec-hash", "judge-fee", "spec-url"];
143
+ export function createTerms(kind, values) {
144
+ const base = terms(kind, values);
145
+ const payTo = optionalField(values, "pay-to", "pay_to", key);
146
+ if (kind !== "attested") {
147
+ const given = PROOF_OPTIONS.find((name) => values[name] !== undefined);
148
+ if (given !== undefined) {
149
+ throw new UsageError(`a ${kind} order does not take --${given}`);
150
+ }
151
+ return { ...base, ...payTo };
152
+ }
153
+ const specHash = values["spec-hash"];
154
+ if (specHash === undefined) {
155
+ const given = PROOF_OPTIONS.find((name) => values[name] !== undefined);
156
+ if (given !== undefined) {
157
+ throw new UsageError(needsSpecHash(given));
158
+ }
159
+ return { ...base, ...payTo };
160
+ }
161
+ return {
162
+ ...base,
163
+ order: {
164
+ ...base["order"],
165
+ spec_hash: sha256Of(specHash, SPEC_HASH_FORMAT),
166
+ ...optionalField(values, "judge-fee", "judge_fee", amountOf),
167
+ },
168
+ ...optionalField(values, "spec-url", "spec_url", (v, n) => memoUrlOf(required(v, n), "spec-url")),
169
+ ...payTo,
170
+ };
171
+ }
172
+ //# sourceMappingURL=order-builders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-builders.js","sourceRoot":"","sources":["../../src/order-builders.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export declare function redactUrl(url: string): string;
1
2
  export declare function render(value: unknown): string;
2
3
  export declare const HIDDEN_RANGES: readonly (readonly [number, number])[];
3
4
  export declare const printable: (text: string) => string;
@@ -1,3 +1,12 @@
1
+ export function redactUrl(url) {
2
+ try {
3
+ const parsed = new URL(url);
4
+ return [parsed.protocol, "", parsed.host].join("/");
5
+ }
6
+ catch {
7
+ return "an unparseable url";
8
+ }
9
+ }
1
10
  export function render(value) {
2
11
  return JSON.stringify(value, (_, v) => typeof v === "bigint" ? v.toString() : v instanceof Uint8Array ? Buffer.from(v).toString("hex") : v, 2);
3
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"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"}