@intent-engine/cli 0.1.26 → 0.1.28

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 (116) hide show
  1. package/assets/viperjs-judge.sha256 +1 -0
  2. package/assets/viperjs-judge.wasm +0 -0
  3. package/dist/src/admin-commands.d.ts +2 -1
  4. package/dist/src/admin-commands.js +47 -2
  5. package/dist/src/admin-commands.js.map +1 -1
  6. package/dist/src/agent/create.js +3 -1
  7. package/dist/src/agent/create.js.map +1 -1
  8. package/dist/src/agent/mandate-agent.js +3 -1
  9. package/dist/src/agent/mandate-agent.js.map +1 -1
  10. package/dist/src/agent/mcp.js +3 -0
  11. package/dist/src/agent/mcp.js.map +1 -1
  12. package/dist/src/agent/problems.d.ts +15 -0
  13. package/dist/src/agent/problems.js +15 -0
  14. package/dist/src/agent/problems.js.map +1 -1
  15. package/dist/src/agent/profile.d.ts +4 -0
  16. package/dist/src/agent/profile.js +129 -0
  17. package/dist/src/agent/profile.js.map +1 -0
  18. package/dist/src/agent/registry.js +6 -0
  19. package/dist/src/agent/registry.js.map +1 -1
  20. package/dist/src/agent/reputation.d.ts +4 -0
  21. package/dist/src/agent/reputation.js +127 -0
  22. package/dist/src/agent/reputation.js.map +1 -0
  23. package/dist/src/agent/sales.d.ts +1 -1
  24. package/dist/src/agent/sales.js +4 -4
  25. package/dist/src/agent/sales.js.map +1 -1
  26. package/dist/src/agent/signed-prepare.js +2 -5
  27. package/dist/src/agent/signed-prepare.js.map +1 -1
  28. package/dist/src/agent/signed-relay.d.ts +1 -1
  29. package/dist/src/agent/signed-relay.js +2 -1
  30. package/dist/src/agent/signed-relay.js.map +1 -1
  31. package/dist/src/agent/signed-submit.js +2 -2
  32. package/dist/src/agent/signed-submit.js.map +1 -1
  33. package/dist/src/agent/wallet/committee.d.ts +4 -0
  34. package/dist/src/agent/wallet/committee.js +155 -0
  35. package/dist/src/agent/wallet/committee.js.map +1 -0
  36. package/dist/src/agent/wallet/releases.js +12 -3
  37. package/dist/src/agent/wallet/releases.js.map +1 -1
  38. package/dist/src/agent/wallet.d.ts +1 -0
  39. package/dist/src/agent/wallet.js +10 -0
  40. package/dist/src/agent/wallet.js.map +1 -1
  41. package/dist/src/agent/work-claims.d.ts +3 -0
  42. package/dist/src/agent/work-claims.js +138 -0
  43. package/dist/src/agent/work-claims.js.map +1 -0
  44. package/dist/src/arg-options.d.ts +501 -3
  45. package/dist/src/arg-options.js +76 -3
  46. package/dist/src/arg-options.js.map +1 -1
  47. package/dist/src/arg-usage.d.ts +2 -2
  48. package/dist/src/arg-usage.js +13 -4
  49. package/dist/src/arg-usage.js.map +1 -1
  50. package/dist/src/arg-values.d.ts +1 -1
  51. package/dist/src/arg-values.js +10 -6
  52. package/dist/src/arg-values.js.map +1 -1
  53. package/dist/src/args.d.ts +1 -6
  54. package/dist/src/args.js +51 -68
  55. package/dist/src/args.js.map +1 -1
  56. package/dist/src/artifact.d.ts +14 -1
  57. package/dist/src/artifact.js +57 -16
  58. package/dist/src/artifact.js.map +1 -1
  59. package/dist/src/check-process.d.ts +7 -0
  60. package/dist/src/check-process.js +78 -0
  61. package/dist/src/check-process.js.map +1 -1
  62. package/dist/src/claim-commands.d.ts +12 -0
  63. package/dist/src/claim-commands.js +170 -0
  64. package/dist/src/claim-commands.js.map +1 -0
  65. package/dist/src/clusters.d.ts +6 -0
  66. package/dist/src/clusters.js +15 -0
  67. package/dist/src/clusters.js.map +1 -0
  68. package/dist/src/command-types.d.ts +101 -4
  69. package/dist/src/commands.js +27 -1
  70. package/dist/src/commands.js.map +1 -1
  71. package/dist/src/committee-commands.d.ts +31 -0
  72. package/dist/src/committee-commands.js +167 -0
  73. package/dist/src/committee-commands.js.map +1 -0
  74. package/dist/src/host-judge.d.ts +11 -0
  75. package/dist/src/host-judge.js +120 -0
  76. package/dist/src/host-judge.js.map +1 -0
  77. package/dist/src/job-args.d.ts +4 -0
  78. package/dist/src/job-args.js +67 -0
  79. package/dist/src/job-args.js.map +1 -0
  80. package/dist/src/job-commands.js +3 -1
  81. package/dist/src/job-commands.js.map +1 -1
  82. package/dist/src/judge.d.ts +17 -1
  83. package/dist/src/judge.js +81 -19
  84. package/dist/src/judge.js.map +1 -1
  85. package/dist/src/main.d.ts +1 -0
  86. package/dist/src/main.js +11 -0
  87. package/dist/src/main.js.map +1 -1
  88. package/dist/src/monitor-args.d.ts +11 -0
  89. package/dist/src/monitor-args.js +58 -0
  90. package/dist/src/monitor-args.js.map +1 -0
  91. package/dist/src/monitor-fills.d.ts +13 -0
  92. package/dist/src/monitor-fills.js +56 -0
  93. package/dist/src/monitor-fills.js.map +1 -0
  94. package/dist/src/monitor.d.ts +60 -0
  95. package/dist/src/monitor.js +295 -0
  96. package/dist/src/monitor.js.map +1 -0
  97. package/dist/src/release-simulation.d.ts +18 -0
  98. package/dist/src/release-simulation.js +45 -0
  99. package/dist/src/release-simulation.js.map +1 -0
  100. package/dist/src/reputation-commands.d.ts +8 -0
  101. package/dist/src/reputation-commands.js +20 -0
  102. package/dist/src/reputation-commands.js.map +1 -0
  103. package/dist/src/sandbox.d.ts +46 -0
  104. package/dist/src/sandbox.js +142 -0
  105. package/dist/src/sandbox.js.map +1 -0
  106. package/dist/src/solve-commands.js +12 -8
  107. package/dist/src/solve-commands.js.map +1 -1
  108. package/dist/src/trust-args.d.ts +12 -0
  109. package/dist/src/trust-args.js +177 -0
  110. package/dist/src/trust-args.js.map +1 -0
  111. package/dist/src/version.d.ts +1 -1
  112. package/dist/src/version.js +1 -1
  113. package/dist/src/viper.d.ts +66 -0
  114. package/dist/src/viper.js +282 -0
  115. package/dist/src/viper.js.map +1 -0
  116. package/package.json +9 -7
@@ -0,0 +1,60 @@
1
+ import { type Address } from "@solana/kit";
2
+ import { type Transport } from "@intent-engine/client";
3
+ import type { MonitorSpec } from "./command-types.js";
4
+ import type { Runtime } from "./runtime.js";
5
+ export declare const LOADER: Address;
6
+ export declare const PROGRAM_DATA_HEADER = 45;
7
+ export declare const STALL_INTERVALS = 3;
8
+ export declare const MONITOR_SCAN = 100;
9
+ export declare const CONFIG_FIELDS: readonly ["admin", "pendingAdmin", "guardian", "feeRecipient", "feeBps", "kindFeeMask", "kindFeeBps", "partnerCutBps", "crankBounty", "createFee", "enabledKinds", "fillDisabledKinds", "paused"];
10
+ type ConfigField = (typeof CONFIG_FIELDS)[number];
11
+ type Value = string | number | number[];
12
+ type ConfigValues = Record<ConfigField, Value>;
13
+ export type Baseline = {
14
+ program: Address;
15
+ config: ConfigValues;
16
+ upgradeAuthority: string;
17
+ programHash: string;
18
+ };
19
+ export type Snapshot = {
20
+ slot: bigint;
21
+ config: ConfigValues | null;
22
+ upgradeAuthority: string | null;
23
+ programHash: string | null;
24
+ };
25
+ export type AlertKind = "config" | "upgrade-authority" | "program-hash" | "fill-amount" | "fill-rate" | "rpc";
26
+ export type Alert = {
27
+ kind: AlertKind;
28
+ field: string;
29
+ expected: unknown;
30
+ observed: unknown;
31
+ slot: number | null;
32
+ } & Record<string, unknown>;
33
+ type Io = {
34
+ out(text: string): void;
35
+ err(text: string): void;
36
+ };
37
+ export declare const NO_AUTHORITY = "none";
38
+ export declare const MISSING = "missing";
39
+ export declare const baselineExists: (file: string) => string;
40
+ export declare const notABaseline: (file: string) => string;
41
+ export declare const otherProgram: (file: string, program: string) => string;
42
+ export declare function executableHash(data: Uint8Array): string;
43
+ export declare function snapshot(transport: Transport): Promise<Snapshot>;
44
+ export declare function baselineOf(now: Snapshot): Baseline;
45
+ export declare function parseBaseline(text: string, file: string): Baseline;
46
+ export declare function writeBaseline(file: string, runtime: Runtime, transport: Transport): Promise<object>;
47
+ export declare function readBaseline(file: string, runtime: Runtime): Promise<Baseline>;
48
+ export type MonitorState = {
49
+ alerted: Map<string, string>;
50
+ lastSlot: bigint | null;
51
+ stalledFor: number;
52
+ failing: boolean;
53
+ seen: Set<string> | null;
54
+ bursting: boolean;
55
+ };
56
+ export declare const freshState: () => MonitorState;
57
+ export declare function checkOnce(transport: Transport, baseline: Baseline, spec: MonitorSpec, state: MonitorState, now: bigint, url: string): Promise<Alert[]>;
58
+ export declare const line: (alert: Alert) => string;
59
+ export declare function monitor(url: string, file: string, spec: MonitorSpec, runtime: Runtime, transport: Transport, io: Io): Promise<number>;
60
+ export {};
@@ -0,0 +1,295 @@
1
+ import { createHash } from "node:crypto";
2
+ import { getAddressDecoder } from "@solana/kit";
3
+ import { findConfigPda, findProgramDataAddress, getConfigDecoder, getConfigDiscriminatorBytes, INTENT_ENGINE_PROGRAM_ADDRESS, } from "@intent-engine/core";
4
+ import { CLOCK_SYSVAR } from "@intent-engine/client";
5
+ import { UsageError } from "./arg-values.js";
6
+ import { fillsIn, inputMintsOf } from "./monitor-fills.js";
7
+ import { printableLines, redactUrl, render } from "./render.js";
8
+ export const LOADER = "BPFLoaderUpgradeab1e11111111111111111111111";
9
+ export const PROGRAM_DATA_HEADER = 45;
10
+ export const STALL_INTERVALS = 3;
11
+ export const MONITOR_SCAN = 100;
12
+ export const CONFIG_FIELDS = [
13
+ "admin",
14
+ "pendingAdmin",
15
+ "guardian",
16
+ "feeRecipient",
17
+ "feeBps",
18
+ "kindFeeMask",
19
+ "kindFeeBps",
20
+ "partnerCutBps",
21
+ "crankBounty",
22
+ "createFee",
23
+ "enabledKinds",
24
+ "fillDisabledKinds",
25
+ "paused",
26
+ ];
27
+ export const NO_AUTHORITY = "none";
28
+ export const MISSING = "missing";
29
+ export const baselineExists = (file) => `${file} already exists; --write-baseline never overwrites a baseline, so move the old one away first`;
30
+ export const notABaseline = (file) => `--expect ${file} is not a monitor baseline; write one with monitor --write-baseline <file>`;
31
+ export const otherProgram = (file, program) => `--expect ${file} is a baseline for program ${program}, not ${INTENT_ENGINE_PROGRAM_ADDRESS}; write a new one with monitor --write-baseline <file>`;
32
+ const sameBytes = (a, b) => a.length === b.length && Array.from(a).every((x, i) => x === b[i]);
33
+ function configValues(view) {
34
+ const discriminator = getConfigDiscriminatorBytes();
35
+ if (view === null || view === undefined || view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS || !sameBytes(view.data.subarray(0, discriminator.length), discriminator)) {
36
+ return null;
37
+ }
38
+ try {
39
+ const c = getConfigDecoder().decode(view.data);
40
+ return {
41
+ admin: c.admin,
42
+ pendingAdmin: c.pendingAdmin,
43
+ guardian: c.guardian,
44
+ feeRecipient: c.feeRecipient,
45
+ feeBps: c.feeBps,
46
+ kindFeeMask: c.kindFeeMask,
47
+ kindFeeBps: [...c.kindFeeBps],
48
+ partnerCutBps: c.partnerCutBps,
49
+ crankBounty: c.crankBounty,
50
+ createFee: c.createFee,
51
+ enabledKinds: c.enabledKinds.toString(),
52
+ fillDisabledKinds: c.fillDisabledKinds.toString(),
53
+ paused: c.paused,
54
+ };
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ export function executableHash(data) {
61
+ let end = data.length;
62
+ while (end > PROGRAM_DATA_HEADER && data[end - 1] === 0) {
63
+ end--;
64
+ }
65
+ return createHash("sha256").update(data.subarray(PROGRAM_DATA_HEADER, end)).digest("hex");
66
+ }
67
+ const u32 = (data) => new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(0, true);
68
+ function programState(program, data, programData) {
69
+ const linked = program !== null &&
70
+ program !== undefined &&
71
+ program.owner === LOADER &&
72
+ program.data.length >= 36 &&
73
+ u32(program.data) === 2 &&
74
+ getAddressDecoder().decode(program.data.subarray(4, 36)) === programData;
75
+ if (!linked || data === null || data === undefined || data.owner !== LOADER || data.data.length < PROGRAM_DATA_HEADER || u32(data.data) !== 3) {
76
+ return { upgradeAuthority: null, programHash: null };
77
+ }
78
+ const upgradeAuthority = data.data[12] === 1 ? getAddressDecoder().decode(data.data.subarray(13, PROGRAM_DATA_HEADER)) : NO_AUTHORITY;
79
+ return { upgradeAuthority, programHash: executableHash(data.data) };
80
+ }
81
+ export async function snapshot(transport) {
82
+ const [configAddress] = await findConfigPda();
83
+ const programData = await findProgramDataAddress();
84
+ const [clock, config, program, data] = await transport.getAccounts([CLOCK_SYSVAR, configAddress, INTENT_ENGINE_PROGRAM_ADDRESS, programData]);
85
+ if (clock === null || clock === undefined || clock.data.length < 8) {
86
+ throw new Error("the node returned no clock, so it cannot say which slot it has reached");
87
+ }
88
+ const slot = new DataView(clock.data.buffer, clock.data.byteOffset, clock.data.byteLength).getBigUint64(0, true);
89
+ return { slot, config: configValues(config), ...programState(program, data, programData) };
90
+ }
91
+ export function baselineOf(now) {
92
+ if (now.config === null || now.upgradeAuthority === null || now.programHash === null) {
93
+ throw new Error(`cannot write a baseline: the config or the upgradeable program ${INTENT_ENGINE_PROGRAM_ADDRESS} is missing on this cluster`);
94
+ }
95
+ return { program: INTENT_ENGINE_PROGRAM_ADDRESS, config: now.config, upgradeAuthority: now.upgradeAuthority, programHash: now.programHash };
96
+ }
97
+ const isValue = (v) => typeof v === "string" || (typeof v === "number" && Number.isInteger(v)) || (Array.isArray(v) && v.every((x) => Number.isInteger(x)));
98
+ export function parseBaseline(text, file) {
99
+ let json;
100
+ try {
101
+ json = JSON.parse(text);
102
+ }
103
+ catch {
104
+ throw new UsageError(notABaseline(file));
105
+ }
106
+ const b = json;
107
+ const config = b?.config;
108
+ if (b === null ||
109
+ typeof b !== "object" ||
110
+ typeof b.program !== "string" ||
111
+ typeof b.upgradeAuthority !== "string" ||
112
+ typeof b.programHash !== "string" ||
113
+ !/^[0-9a-f]{64}$/.test(b.programHash) ||
114
+ config === null ||
115
+ typeof config !== "object" ||
116
+ Object.keys(config).length !== CONFIG_FIELDS.length ||
117
+ !CONFIG_FIELDS.every((field) => isValue(config[field]))) {
118
+ throw new UsageError(notABaseline(file));
119
+ }
120
+ if (b.program !== INTENT_ENGINE_PROGRAM_ADDRESS) {
121
+ throw new UsageError(otherProgram(file, b.program));
122
+ }
123
+ return b;
124
+ }
125
+ export async function writeBaseline(file, runtime, transport) {
126
+ const exists = await runtime.readText(file).then(() => true, () => false);
127
+ if (exists) {
128
+ throw new UsageError(baselineExists(file));
129
+ }
130
+ const baseline = baselineOf(await snapshot(transport));
131
+ await runtime.writeText(file, `${render(baseline)}\n`);
132
+ return { wrote: file, ...baseline };
133
+ }
134
+ export async function readBaseline(file, runtime) {
135
+ let text;
136
+ try {
137
+ text = await runtime.readText(file);
138
+ }
139
+ catch {
140
+ throw new UsageError(`--expect ${file} cannot be read; write it with monitor --write-baseline <file>`);
141
+ }
142
+ return parseBaseline(text, file);
143
+ }
144
+ const same = (a, b) => JSON.stringify(a) === JSON.stringify(b);
145
+ export const freshState = () => ({ alerted: new Map(), lastSlot: null, stalledFor: 0, failing: false, seen: null, bursting: false });
146
+ function differences(baseline, now) {
147
+ const slot = Number(now.slot);
148
+ const found = [];
149
+ const compare = (key, kind, field, expected, observed) => {
150
+ if (!same(expected, observed)) {
151
+ found.push({ key, alert: { kind, field, expected, observed, slot } });
152
+ }
153
+ };
154
+ if (now.config === null) {
155
+ compare("config", "config", "config", "present", MISSING);
156
+ }
157
+ else {
158
+ for (const field of CONFIG_FIELDS) {
159
+ compare(`config.${field}`, "config", field, baseline.config[field], now.config[field]);
160
+ }
161
+ }
162
+ compare("upgradeAuthority", "upgrade-authority", "upgradeAuthority", baseline.upgradeAuthority, now.upgradeAuthority ?? MISSING);
163
+ compare("programHash", "program-hash", "programHash", baseline.programHash, now.programHash ?? MISSING);
164
+ return found;
165
+ }
166
+ function stateAlerts(baseline, now, state) {
167
+ const found = differences(baseline, now);
168
+ const keys = new Set(found.map((f) => f.key));
169
+ for (const key of [...state.alerted.keys()]) {
170
+ if (!keys.has(key)) {
171
+ state.alerted.delete(key);
172
+ }
173
+ }
174
+ const fresh = [];
175
+ for (const { key, alert } of found) {
176
+ const observed = JSON.stringify(alert.observed);
177
+ if (state.alerted.get(key) !== observed) {
178
+ state.alerted.set(key, observed);
179
+ fresh.push(alert);
180
+ }
181
+ }
182
+ return fresh;
183
+ }
184
+ function slotAlerts(now, state) {
185
+ if (state.lastSlot === null || now.slot > state.lastSlot) {
186
+ state.lastSlot = now.slot;
187
+ state.stalledFor = 0;
188
+ return [];
189
+ }
190
+ state.stalledFor++;
191
+ if (state.stalledFor !== STALL_INTERVALS) {
192
+ return [];
193
+ }
194
+ const slot = Number(state.lastSlot);
195
+ return [{ kind: "rpc", field: "slot", expected: `a slot above ${slot}`, observed: Number(now.slot), slot, intervals: STALL_INTERVALS }];
196
+ }
197
+ async function fillAlerts(transport, spec, state, since) {
198
+ if (spec.maxFill.size === 0 && spec.maxFills === null) {
199
+ return [];
200
+ }
201
+ const limit = Math.max(MONITOR_SCAN, (spec.maxFills ?? 0) + 1);
202
+ const fetched = await transport.engineTransactions(limit);
203
+ const seen = state.seen;
204
+ const fresh = fetched.filter((tx) => (seen === null ? tx.blockTime !== null && tx.blockTime >= since : !seen.has(tx.signature)));
205
+ state.seen = new Set([...(seen ?? []), ...fetched.map((tx) => tx.signature)].slice(-limit * 4));
206
+ const { fills, created } = fillsIn(fresh);
207
+ const alerts = [];
208
+ if (spec.maxFill.size > 0 && fills.length > 0) {
209
+ const mints = await inputMintsOf(transport, fills, created);
210
+ for (const fill of fills) {
211
+ const mint = mints.get(fill.intent);
212
+ const cap = mint === undefined ? undefined : spec.maxFill.get(mint);
213
+ const where = { slot: Number(fill.slot), intent: fill.intent, signature: fill.signature };
214
+ if (mint === undefined) {
215
+ alerts.push({ kind: "fill-amount", field: "inputMint", expected: "a readable input mint", observed: MISSING, ...where, amountIn: fill.amountIn.toString() });
216
+ }
217
+ else if (cap !== undefined && fill.amountIn > cap) {
218
+ alerts.push({ kind: "fill-amount", field: mint, expected: cap.toString(), observed: fill.amountIn.toString(), ...where });
219
+ }
220
+ }
221
+ }
222
+ const gap = seen !== null && fetched.length >= limit && fresh.length === fetched.length;
223
+ const burst = gap || (spec.maxFills !== null && fills.length > spec.maxFills);
224
+ if (burst && !state.bursting) {
225
+ const slot = (gap ? fresh : fills).reduce((top, { slot: at }) => (at > top ? at : top), 0n);
226
+ alerts.push({
227
+ kind: "fill-rate",
228
+ field: gap ? "transactions" : "fills",
229
+ expected: gap ? `fewer than ${limit} engine transactions per interval` : spec.maxFills,
230
+ observed: gap ? `${limit} or more` : fills.length,
231
+ slot: Number(slot),
232
+ interval: spec.interval,
233
+ });
234
+ }
235
+ state.bursting = burst;
236
+ return alerts;
237
+ }
238
+ const scrubbed = (text, url) => printableLines(text.split(url).join(redactUrl(url)));
239
+ export async function checkOnce(transport, baseline, spec, state, now, url) {
240
+ let alerts;
241
+ try {
242
+ const current = await snapshot(transport);
243
+ alerts = [
244
+ ...stateAlerts(baseline, current, state),
245
+ ...slotAlerts(current, state),
246
+ ...(await fillAlerts(transport, spec, state, now - BigInt(spec.interval))),
247
+ ];
248
+ }
249
+ catch (error) {
250
+ if (state.failing) {
251
+ return [];
252
+ }
253
+ state.failing = true;
254
+ const message = error instanceof Error ? error.message : String(error);
255
+ const slot = state.lastSlot === null ? null : Number(state.lastSlot);
256
+ return [{ kind: "rpc", field: "read", expected: "a successful read", observed: scrubbed(message, url), slot, rpc: redactUrl(url) }];
257
+ }
258
+ state.failing = false;
259
+ return alerts;
260
+ }
261
+ export const line = (alert) => JSON.stringify(alert, (_, v) => (typeof v === "bigint" ? v.toString() : v));
262
+ async function post(webhook, body, runtime, io) {
263
+ const where = redactUrl(webhook);
264
+ try {
265
+ const reply = await runtime.fetch(webhook, { method: "POST", headers: { "content-type": "application/json" }, body });
266
+ if (!reply.ok) {
267
+ io.err(`the webhook at ${where} answered ${reply.status}; the alert is on stdout`);
268
+ }
269
+ }
270
+ catch (error) {
271
+ const message = error instanceof Error ? error.message : String(error);
272
+ io.err(`the webhook at ${where} failed: ${scrubbed(message, webhook)}; the alert is on stdout`);
273
+ }
274
+ }
275
+ export async function monitor(url, file, spec, runtime, transport, io) {
276
+ const baseline = await readBaseline(file, runtime);
277
+ const state = freshState();
278
+ io.err(`watching program ${INTENT_ENGINE_PROGRAM_ADDRESS} on ${redactUrl(url)} every ${spec.interval}s` +
279
+ (spec.webhook === null ? "" : `; alerts also go to ${redactUrl(spec.webhook)}`));
280
+ let raised = 0;
281
+ for (;;) {
282
+ for (const alert of await checkOnce(transport, baseline, spec, state, runtime.now(), url)) {
283
+ const text = line(alert);
284
+ io.out(text);
285
+ raised++;
286
+ if (spec.webhook !== null) {
287
+ await post(spec.webhook, text, runtime, io);
288
+ }
289
+ }
290
+ if (spec.once || !(await runtime.sleep(spec.interval))) {
291
+ return raised;
292
+ }
293
+ }
294
+ }
295
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Address, KeyPairSigner } from "@solana/kit";
2
+ import { type Transport } from "@intent-engine/client";
3
+ export type SimulatedRelease = {
4
+ ok: true;
5
+ units_consumed: number;
6
+ } | {
7
+ ok: false;
8
+ error: string;
9
+ };
10
+ export type ReleaseInput = {
11
+ url: string;
12
+ owner: Address;
13
+ nonce: bigint;
14
+ payTo: Address;
15
+ result: bigint;
16
+ sha256: string;
17
+ };
18
+ export declare function simulateRelease(transport: Transport, judge: KeyPairSigner, release: ReleaseInput): Promise<SimulatedRelease>;
@@ -0,0 +1,45 @@
1
+ import { IntentCoreError, INTENT_ENGINE_PROGRAM_ADDRESS } from "@intent-engine/core";
2
+ import { boundMembers, createClient, simulated } from "@intent-engine/client";
3
+ import { ENGINE_ERROR_BASE, ENGINE_ERROR_NAMES, failureOf } from "./agent/problems.js";
4
+ class Simulated extends Error {
5
+ simulation;
6
+ constructor(simulation) {
7
+ super("the release was simulated, not sent");
8
+ this.name = "Simulated";
9
+ this.simulation = simulation;
10
+ }
11
+ }
12
+ function engineErrorOf(logs) {
13
+ const failure = failureOf(logs);
14
+ return failure !== null && failure.program === INTENT_ENGINE_PROGRAM_ADDRESS ? ENGINE_ERROR_NAMES[failure.code - ENGINE_ERROR_BASE] : undefined;
15
+ }
16
+ export async function simulateRelease(transport, judge, release) {
17
+ const probe = {
18
+ ...boundMembers(transport),
19
+ send: async (instructions, payer) => {
20
+ throw new Simulated(await simulated(transport, instructions, payer.address));
21
+ },
22
+ };
23
+ try {
24
+ await createClient({ url: release.url, transport: probe }).settleProof({
25
+ judge,
26
+ owner: release.owner,
27
+ nonce: release.nonce,
28
+ payTo: release.payTo,
29
+ result: release.result,
30
+ deliveredSha256: release.sha256,
31
+ });
32
+ }
33
+ catch (error) {
34
+ if (error instanceof Simulated) {
35
+ const { err, logs, unitsConsumed } = error.simulation;
36
+ return err === null ? { ok: true, units_consumed: Number(unitsConsumed ?? 0n) } : { ok: false, error: engineErrorOf(logs) ?? err };
37
+ }
38
+ if (error instanceof IntentCoreError) {
39
+ return { ok: false, error: error.code };
40
+ }
41
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
42
+ }
43
+ return { ok: false, error: "the release was sent instead of simulated" };
44
+ }
45
+ //# sourceMappingURL=release-simulation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-simulation.js","sourceRoot":"","sources":["../../src/release-simulation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAmB,SAAS,EAAkB,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMvF,MAAM,SAAU,SAAQ,KAAK;IAClB,UAAU,CAAa;IAEhC,YAAY,UAAsB;QAChC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,SAAS,aAAa,CAAC,IAAuB;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,6BAA6B,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAoB,EAAE,KAAoB,EAAE,OAAqB;IACrG,MAAM,KAAK,GAAc;QACvB,GAAG,YAAY,CAAC,SAAS,CAAC;QAC1B,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE;YAClC,MAAM,IAAI,SAAS,CAAC,MAAM,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC;IACF,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC;YACrE,KAAK;YACL,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,eAAe,EAAE,OAAO,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;YACtD,OAAO,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACrI,CAAC;QACD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;YACrC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { type Transport } from "@intent-engine/client";
2
+ import type { Command } from "./command-types.js";
3
+ import type { Runtime } from "./runtime.js";
4
+ type ReputationCommand = Extract<Command, {
5
+ name: "reputation" | "feedback";
6
+ }>;
7
+ export declare function reputationCommand(command: ReputationCommand, runtime: Runtime, transport: Transport): Promise<object>;
8
+ export {};
@@ -0,0 +1,20 @@
1
+ import { createClient, feedbackInstructions } from "@intent-engine/client";
2
+ import { previewed } from "./admin-commands.js";
3
+ export async function reputationCommand(command, runtime, transport) {
4
+ switch (command.name) {
5
+ case "reputation":
6
+ return createClient({ url: command.url, transport }).reputation(command.worker, { pages: command.maxPages });
7
+ case "feedback": {
8
+ const owner = await runtime.loadSigner(command.keypair);
9
+ const input = { owner, intent: command.intent, score: command.score, ...(command.note === undefined ? {} : { note: command.note }) };
10
+ const instructions = await feedbackInstructions(transport, input);
11
+ const summary = [
12
+ `Rates: the work released by escrow ${command.intent} ${command.score} out of 100, signed by its owner ${owner.address}`,
13
+ ...(command.note === undefined ? [] : [`Links: the note with sha256 ${command.note}`]),
14
+ "Counts: once; the owner's first feedback on an escrow is the one that counts",
15
+ ];
16
+ return previewed(transport, instructions, owner, { intent: command.intent, score: command.score, summary }, command.yes);
17
+ }
18
+ }
19
+ }
20
+ //# sourceMappingURL=reputation-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reputation-commands.js","sourceRoot":"","sources":["../../src/reputation-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAkB,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAMhD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAA0B,EAAE,OAAgB,EAAE,SAAoB;IACxG,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/G,KAAK,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACrI,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG;gBACd,sCAAsC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,oCAAoC,KAAK,CAAC,OAAO,EAAE;gBACxH,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtF,8EAA8E;aAC/E,CAAC;YACF,OAAO,SAAS,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3H,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { Values } from "./arg-options.js";
2
+ export declare const SANDBOX_IMAGE = "node:22-bookworm-slim@sha256:c3de60bf2f9dd0ac6370e6117950ff62d6e339527e7472301c9c78a017978392";
3
+ export declare const SANDBOX_MEMORY = "1g";
4
+ export declare const SANDBOX_CPUS = "1";
5
+ export declare const SANDBOX_PIDS = 256;
6
+ export declare const SANDBOX_TMP = "256m";
7
+ export declare const SANDBOX_USER = "65534:65534";
8
+ export declare const SANDBOX_ROOT = "/judge";
9
+ export declare const SANDBOX_HOME = "/tmp";
10
+ export declare const SANDBOX_KINDS: readonly ["docker", "viper", "none"];
11
+ export type SandboxKind = (typeof SANDBOX_KINDS)[number];
12
+ export type Sandbox = {
13
+ kind: "none";
14
+ } | {
15
+ kind: "viper";
16
+ } | {
17
+ kind: "docker";
18
+ image: string;
19
+ memory: string;
20
+ cpus: string;
21
+ };
22
+ export declare const SANDBOX_NEEDED = "--sandbox must be docker, viper or none";
23
+ export declare const VIPER_TAKES_NO_RUN = "--sandbox viper judges the cases in the spec's judge-cases block, so it takes no --run and no --check";
24
+ export declare const IMAGE_NEEDS_DIGEST = "--sandbox-image must name an image by its digest, as <name>@sha256:<64 hex>; a reference without a digest is refused";
25
+ export declare const MEMORY_FORMAT = "--sandbox-memory must be a whole number of megabytes or gigabytes, such as 512m or 2g";
26
+ export declare const CPUS_FORMAT = "--sandbox-cpus must be a number of CPUs above 0, such as 1 or 1.5";
27
+ export declare const DOCKER_ENV: readonly ["DOCKER_HOST", "DOCKER_CONTEXT", "DOCKER_CONFIG", "DOCKER_CERT_PATH", "DOCKER_TLS_VERIFY", "XDG_RUNTIME_DIR"];
28
+ export declare const sandboxOnly: (option: string) => string;
29
+ export declare function sandboxOf(values: Values): Sandbox;
30
+ export declare function dockerEnv(base: NodeJS.ProcessEnv): NodeJS.ProcessEnv;
31
+ export declare const dockerMissing: (reason: string) => string;
32
+ export declare const imageMissing: (image: string, reason: string) => string;
33
+ export declare const NO_SANDBOX = "warning: --sandbox none ran the check with your own rights: it could read your files and keys and use your network";
34
+ export declare function sandboxReady(sandbox: Sandbox, env: NodeJS.ProcessEnv): Promise<void>;
35
+ export declare const containerName: () => string;
36
+ export type Mounted = {
37
+ root: string;
38
+ path: string;
39
+ spec: string;
40
+ check: string | undefined;
41
+ };
42
+ export declare const insideOf: (root: string, host: string) => string;
43
+ export declare function containerArgs(sandbox: Extract<Sandbox, {
44
+ kind: "docker";
45
+ }>, copy: Mounted, sha256: string, run: string): string[];
46
+ export declare function shareable(path: string): Promise<void>;