@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.
- package/dist/src/admin-commands.d.ts +12 -0
- package/dist/src/admin-commands.js +140 -0
- package/dist/src/admin-commands.js.map +1 -0
- package/dist/src/agent/actions.d.ts +2 -0
- package/dist/src/agent/actions.js +1 -1
- package/dist/src/agent/actions.js.map +1 -1
- package/dist/src/agent/claims.js +13 -12
- package/dist/src/agent/claims.js.map +1 -1
- package/dist/src/agent/create.d.ts +1 -0
- package/dist/src/agent/create.js +18 -4
- package/dist/src/agent/create.js.map +1 -1
- package/dist/src/agent/mandate-agent.d.ts +2 -0
- package/dist/src/agent/mandate-agent.js +136 -0
- package/dist/src/agent/mandate-agent.js.map +1 -0
- package/dist/src/agent/mandate-grant.d.ts +2 -0
- package/dist/src/agent/mandate-grant.js +192 -0
- package/dist/src/agent/mandate-grant.js.map +1 -0
- package/dist/src/agent/mandate-revoke.d.ts +1 -0
- package/dist/src/agent/mandate-revoke.js +142 -0
- package/dist/src/agent/mandate-revoke.js.map +1 -0
- package/dist/src/agent/mandate-state.d.ts +33 -0
- package/dist/src/agent/mandate-state.js +85 -0
- package/dist/src/agent/mandate-state.js.map +1 -0
- package/dist/src/agent/mandate.d.ts +4 -26
- package/dist/src/agent/mandate.js +4 -479
- package/dist/src/agent/mandate.js.map +1 -1
- package/dist/src/agent/mcp.js +10 -5
- package/dist/src/agent/mcp.js.map +1 -1
- package/dist/src/agent/prepare.js +1 -1
- package/dist/src/agent/prepare.js.map +1 -1
- package/dist/src/agent/problems.d.ts +15 -1
- package/dist/src/agent/problems.js +38 -2
- package/dist/src/agent/problems.js.map +1 -1
- package/dist/src/agent/read.d.ts +13 -0
- package/dist/src/agent/read.js +56 -7
- package/dist/src/agent/read.js.map +1 -1
- package/dist/src/agent/registry.js +8 -2
- package/dist/src/agent/registry.js.map +1 -1
- package/dist/src/agent/relay.d.ts +2 -0
- package/dist/src/agent/relay.js +11 -3
- package/dist/src/agent/relay.js.map +1 -1
- package/dist/src/agent/sales.d.ts +29 -0
- package/dist/src/agent/sales.js +248 -0
- package/dist/src/agent/sales.js.map +1 -0
- package/dist/src/agent/signed-prepare.d.ts +1 -0
- package/dist/src/agent/signed-prepare.js +141 -0
- package/dist/src/agent/signed-prepare.js.map +1 -0
- package/dist/src/agent/signed-relay.d.ts +25 -0
- package/dist/src/agent/signed-relay.js +68 -0
- package/dist/src/agent/signed-relay.js.map +1 -0
- package/dist/src/agent/signed-submit.d.ts +2 -0
- package/dist/src/agent/signed-submit.js +137 -0
- package/dist/src/agent/signed-submit.js.map +1 -0
- package/dist/src/agent/signed-terms.d.ts +85 -0
- package/dist/src/agent/signed-terms.js +84 -0
- package/dist/src/agent/signed-terms.js.map +1 -0
- package/dist/src/agent/signed.d.ts +4 -13
- package/dist/src/agent/signed.js +4 -361
- package/dist/src/agent/signed.js.map +1 -1
- package/dist/src/agent/wallet/account.d.ts +4 -0
- package/dist/src/agent/wallet/account.js +84 -0
- package/dist/src/agent/wallet/account.js.map +1 -0
- package/dist/src/agent/wallet/attest.d.ts +4 -0
- package/dist/src/agent/wallet/attest.js +178 -0
- package/dist/src/agent/wallet/attest.js.map +1 -0
- package/dist/src/agent/wallet/delivery.d.ts +13 -0
- package/dist/src/agent/wallet/delivery.js +171 -0
- package/dist/src/agent/wallet/delivery.js.map +1 -0
- package/dist/src/agent/wallet/escrow.d.ts +7 -0
- package/dist/src/agent/wallet/escrow.js +164 -0
- package/dist/src/agent/wallet/escrow.js.map +1 -0
- package/dist/src/agent/wallet/fills.d.ts +27 -0
- package/dist/src/agent/wallet/fills.js +80 -0
- package/dist/src/agent/wallet/fills.js.map +1 -0
- package/dist/src/agent/wallet/guard.d.ts +57 -0
- package/dist/src/agent/wallet/guard.js +205 -0
- package/dist/src/agent/wallet/guard.js.map +1 -0
- package/dist/src/agent/wallet/offer.d.ts +50 -0
- package/dist/src/agent/wallet/offer.js +80 -0
- package/dist/src/agent/wallet/offer.js.map +1 -0
- package/dist/src/agent/wallet/receipt.d.ts +42 -0
- package/dist/src/agent/wallet/receipt.js +102 -0
- package/dist/src/agent/wallet/receipt.js.map +1 -0
- package/dist/src/agent/wallet/record.d.ts +31 -0
- package/dist/src/agent/wallet/record.js +178 -0
- package/dist/src/agent/wallet/record.js.map +1 -0
- package/dist/src/agent/wallet/releases.d.ts +40 -0
- package/dist/src/agent/wallet/releases.js +236 -0
- package/dist/src/agent/wallet/releases.js.map +1 -0
- package/dist/src/agent/wallet/split.d.ts +10 -0
- package/dist/src/agent/wallet/split.js +271 -0
- package/dist/src/agent/wallet/split.js.map +1 -0
- package/dist/src/agent/wallet/trade.d.ts +14 -0
- package/dist/src/agent/wallet/trade.js +243 -0
- package/dist/src/agent/wallet/trade.js.map +1 -0
- package/dist/src/agent/wallet/wait.d.ts +5 -0
- package/dist/src/agent/wallet/wait.js +99 -0
- package/dist/src/agent/wallet/wait.js.map +1 -0
- package/dist/src/agent/wallet.d.ts +18 -72
- package/dist/src/agent/wallet.js +26 -1216
- package/dist/src/agent/wallet.js.map +1 -1
- package/dist/src/arg-options.d.ts +333 -0
- package/dist/src/arg-options.js +310 -0
- package/dist/src/arg-options.js.map +1 -0
- package/dist/src/arg-usage.d.ts +7 -0
- package/dist/src/arg-usage.js +53 -0
- package/dist/src/arg-usage.js.map +1 -0
- package/dist/src/arg-values.d.ts +47 -0
- package/dist/src/arg-values.js +280 -0
- package/dist/src/arg-values.js.map +1 -0
- package/dist/src/args.d.ts +7 -487
- package/dist/src/args.js +89 -880
- package/dist/src/args.js.map +1 -1
- package/dist/src/artifact.d.ts +22 -0
- package/dist/src/artifact.js +89 -0
- package/dist/src/artifact.js.map +1 -0
- package/dist/src/check-process.d.ts +39 -0
- package/dist/src/check-process.js +338 -0
- package/dist/src/check-process.js.map +1 -0
- package/dist/src/command-builders.d.ts +37 -0
- package/dist/src/command-builders.js +216 -0
- package/dist/src/command-builders.js.map +1 -0
- package/dist/src/command-types.d.ts +227 -0
- package/dist/src/command-types.js +2 -0
- package/dist/src/command-types.js.map +1 -0
- package/dist/src/commands.d.ts +7 -43
- package/dist/src/commands.js +67 -426
- package/dist/src/commands.js.map +1 -1
- package/dist/src/event-feed.d.ts +13 -0
- package/dist/src/event-feed.js +46 -0
- package/dist/src/event-feed.js.map +1 -0
- package/dist/src/flow-commands.d.ts +8 -0
- package/dist/src/flow-commands.js +116 -0
- package/dist/src/flow-commands.js.map +1 -0
- package/dist/src/flows.d.ts +6 -0
- package/dist/src/flows.js +84 -10
- package/dist/src/flows.js.map +1 -1
- package/dist/src/job-commands.d.ts +9 -0
- package/dist/src/job-commands.js +89 -0
- package/dist/src/job-commands.js.map +1 -0
- package/dist/src/judge-errors.d.ts +12 -0
- package/dist/src/judge-errors.js +16 -0
- package/dist/src/judge-errors.js.map +1 -0
- package/dist/src/judge.d.ts +28 -0
- package/dist/src/judge.js +169 -0
- package/dist/src/judge.js.map +1 -0
- package/dist/src/main.d.ts +4 -1
- package/dist/src/main.js +26 -10
- package/dist/src/main.js.map +1 -1
- package/dist/src/order-builders.d.ts +10 -0
- package/dist/src/order-builders.js +172 -0
- package/dist/src/order-builders.js.map +1 -0
- package/dist/src/render.d.ts +1 -0
- package/dist/src/render.js +9 -0
- package/dist/src/render.js.map +1 -1
- package/dist/src/runtime.d.ts +22 -0
- package/dist/src/runtime.js +2 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/solve-commands.d.ts +25 -0
- package/dist/src/solve-commands.js +171 -0
- package/dist/src/solve-commands.js.map +1 -0
- package/dist/src/tokens.js +2 -1
- package/dist/src/tokens.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/wallet.d.ts +4 -1
- package/dist/src/wallet.js +25 -5
- package/dist/src/wallet.js.map +1 -1
- package/package.json +16 -7
- package/dist/src/events.d.ts +0 -8
- package/dist/src/events.js +0 -43
- package/dist/src/events.js.map +0 -1
- package/dist/src/transport.d.ts +0 -208
- package/dist/src/transport.js +0 -441
- package/dist/src/transport.js.map +0 -1
|
@@ -1,480 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { vaultBalance } from "../crank.js";
|
|
6
|
-
import { define } from "./actions.js";
|
|
7
|
-
import { createCost, release, rentFor, reserve, TOKEN_ACCOUNT_RENT_BYTES } from "./budget.js";
|
|
8
|
-
import { expiryOf, MAX_EXPIRES_IN, MIN_EXPIRES_IN, WARN_SCALED } from "./create.js";
|
|
9
|
-
import { tool } from "./names.js";
|
|
10
|
-
import { lowerAllowance, raiseAllowance, setupLines, unusedIntent } from "./owner.js";
|
|
11
|
-
import { prepare } from "./prepare.js";
|
|
12
|
-
import { paying } from "./signed.js";
|
|
13
|
-
import { claim, claimedBy, PREPARED_TTL } from "./claims.js";
|
|
14
|
-
import { decimalsFor } from "./read.js";
|
|
15
|
-
import { AgentRefusal, SimulationFailed } from "./problems.js";
|
|
16
|
-
import { orderSchema, paramsOf, partnerSchema, preparedSchema, preparedView } from "./shapes.js";
|
|
17
|
-
import { TOKEN_NAMES, tokenNames } from "../tokens.js";
|
|
18
|
-
import { account, amount, choice, integer, list, nullable, object, optional, text, time, InvalidInput, } from "./schema.js";
|
|
19
|
-
export const MANDATE_KIND_NAMES = ["swap", "limit", "dutch"];
|
|
20
|
-
const MAX_MANDATE_SECONDS = 365 * 24 * 60 * 60;
|
|
21
|
-
const MAX_MANDATE_INTENTS = 1_000_000;
|
|
22
|
-
export const MANDATE_ID_PROBES = 64;
|
|
23
|
-
export const REVOKE_CANCELS = 6;
|
|
24
|
-
const KIND_OF = { swap: Kind.SwapExactIn, limit: Kind.LimitOrder, dutch: Kind.DutchAuction };
|
|
25
|
-
const kindBits = (names) => names.reduce((bits, name) => bits | Number(kindBit(KIND_OF[name])), 0);
|
|
26
|
-
export const NO_MANDATE_HINT = "it was never granted, or the owner revoked it, which closes it";
|
|
27
|
-
const WARN_STILL_OPEN = "some of the agent's intents stay open after this; they can no longer be filled, but their escrow stays locked until you cancel them";
|
|
28
|
-
export async function loadMandate(transport, owner, agent, id) {
|
|
29
|
-
const [address] = await findMandatePda({ owner, agent, id });
|
|
30
|
-
const data = await engineAccount(transport, address, getMandateDiscriminatorBytes(), "mandate").catch((error) => {
|
|
31
|
-
if (error instanceof MissingAccount) {
|
|
32
|
-
error.message = `${error.message}; ${NO_MANDATE_HINT}`;
|
|
33
|
-
}
|
|
34
|
-
throw error;
|
|
35
|
-
});
|
|
36
|
-
return { address, mandate: getMandateDecoder().decode(data) };
|
|
37
|
-
}
|
|
38
|
-
function specOf(m) {
|
|
39
|
-
return {
|
|
40
|
-
id: m.id,
|
|
41
|
-
agent: m.agent,
|
|
42
|
-
kinds: m.kinds,
|
|
43
|
-
perIntent: m.perIntent,
|
|
44
|
-
total: m.total,
|
|
45
|
-
maxIntents: m.maxIntents,
|
|
46
|
-
maxTtl: m.maxTtl,
|
|
47
|
-
validUntil: m.validUntil,
|
|
48
|
-
floorOut: m.floorOut,
|
|
49
|
-
floorIn: m.floorIn,
|
|
50
|
-
...(m.partnerBps === 0 ? {} : { partner: { key: m.partner, bps: m.partnerBps } }),
|
|
51
|
-
agentFee: m.agentFee,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
function limitsOf(m) {
|
|
55
|
-
return `this mandate allows at most ${m.perIntent} raw input units per intent including the agent fee of ${m.agentFee}, ${m.total - m.spent} more raw input units in total, ${m.maxIntents - m.intents} more intents, each expiring within ${m.maxTtl} seconds, and at least ${m.floorOut} raw output units for every ${m.floorIn} raw input units it draws`;
|
|
56
|
-
}
|
|
57
|
-
function explained(m) {
|
|
58
|
-
return (error) => {
|
|
59
|
-
if (error instanceof SimulationFailed && error.problem.code.startsWith("Mandate")) {
|
|
60
|
-
throw new SimulationFailed({ ...error.problem, hint: `${error.problem.hint}; ${limitsOf(m)}` });
|
|
61
|
-
}
|
|
62
|
-
throw error;
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
export const AGENT_NONCE_PROBES = 64n;
|
|
66
|
-
export async function agentNonce(transport, owner, serial, used, hold) {
|
|
67
|
-
const lane = mandateLane(serial);
|
|
68
|
-
if (lane === null) {
|
|
69
|
-
throw new AgentRefusal("NoFreeNonce", "this mandate's grant serial has no nonce lane; the owner must grant a new mandate");
|
|
70
|
-
}
|
|
71
|
-
for (let k = 0n; k < AGENT_NONCE_PROBES; k++) {
|
|
72
|
-
const nonce = lane | ((BigInt(used) + k) & 0xffffffffn);
|
|
73
|
-
if (claimedBy(hold.claims, owner, hold.now).has(nonce)) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const [intent] = await findIntentPda({ owner, nonce });
|
|
77
|
-
const taken = (await createdAccount(transport, intent)) !== null;
|
|
78
|
-
if (!taken && !claimedBy(hold.claims, owner, hold.now).has(nonce)) {
|
|
79
|
-
claim(hold.claims, hold.call, owner, nonce, hold.now + PREPARED_TTL, hold.now);
|
|
80
|
-
return nonce;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
throw new AgentRefusal("NoFreeNonce", "this mandate's nonce lane is crowded; close some of its finished intents first");
|
|
84
|
-
}
|
|
85
|
-
export async function freeMandateId(transport, owner, agent) {
|
|
86
|
-
for (let id = 0n; id < BigInt(MANDATE_ID_PROBES); id++) {
|
|
87
|
-
const [address] = await findMandatePda({ owner, agent, id });
|
|
88
|
-
if ((await createdAccount(transport, address)) === null) {
|
|
89
|
-
return id;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
throw new AgentRefusal("NoFreeMandateId", `this owner already granted ${MANDATE_ID_PROBES} mandates to this agent; revoke one first`);
|
|
93
|
-
}
|
|
94
|
-
const mandateRef = {
|
|
95
|
-
owner: account("the wallet that granted the mandate"),
|
|
96
|
-
agent: account("the agent key the mandate authorises"),
|
|
97
|
-
id: optional(amount("which of the owner's mandates for this agent; default 0")),
|
|
98
|
-
};
|
|
99
|
-
export const prepareMandate = define({
|
|
100
|
-
name: tool("prepare_mandate"),
|
|
101
|
-
title: "Prepare a mandate for an agent",
|
|
102
|
-
description: `Build the one transaction an owner signs to let an agent key create intents on their behalf, within limits the program enforces: one token pair, the allowed kinds, a cap per intent, a total budget, a maximum number of intents, a maximum lifetime per intent, a price floor and an end date. Proceeds always go to the owner. The owner pays this transaction's fee and rent; the agent pays the network fee and rent of every intent it creates. The owner may grant the agent a fee per intent in the input token, which counts against every limit. The transaction also registers the owner and creates their output token account if needed, and raises the engine's spending allowance on the input token by the total budget. Revoke with ${tool("prepare_revoke_mandate")}.`,
|
|
103
|
-
effect: "prepare",
|
|
104
|
-
input: object({
|
|
105
|
-
owner: account("the wallet that grants the mandate and signs"),
|
|
106
|
-
agent: account("the agent key that may create intents"),
|
|
107
|
-
input_mint: account("the only token the agent may sell"),
|
|
108
|
-
output_mint: account("the only token the agent may buy"),
|
|
109
|
-
kinds: list(choice(MANDATE_KIND_NAMES), 3, "the intent kinds the agent may create", 1),
|
|
110
|
-
per_intent: amount("most raw input units one intent may draw, agent fee included"),
|
|
111
|
-
total: amount("most raw input units all the agent's intents may sell together"),
|
|
112
|
-
max_intents: integer(1, MAX_MANDATE_INTENTS, "most intents the agent may create"),
|
|
113
|
-
max_ttl: integer(MIN_EXPIRES_IN, MAX_EXPIRES_IN, "longest an intent may stay open, in seconds"),
|
|
114
|
-
valid_for: integer(MIN_EXPIRES_IN, MAX_MANDATE_SECONDS, "seconds from now until the mandate ends"),
|
|
115
|
-
floor: object({
|
|
116
|
-
out: amount("raw output units"),
|
|
117
|
-
in: amount("raw input units"),
|
|
118
|
-
}, "the worst price in raw units: every intent must ask at least out raw output units for every in raw input units it draws, fee included; one whole token is 10^decimals raw units, and get_balances gives the decimals"),
|
|
119
|
-
id: optional(amount("leave out to use the next free id")),
|
|
120
|
-
partner: optional(partnerSchema),
|
|
121
|
-
agent_fee: optional(amount("raw input units the agent takes from the owner per intent; counted in per_intent, total and the price floor; default 0")),
|
|
122
|
-
}),
|
|
123
|
-
output: object({
|
|
124
|
-
mandate: account(),
|
|
125
|
-
id: amount(),
|
|
126
|
-
valid_until: time(),
|
|
127
|
-
summary: list(text(), 24, "the grant in plain words; show these to the owner before signing"),
|
|
128
|
-
warnings: list(text(), 4),
|
|
129
|
-
prepared: preparedSchema,
|
|
130
|
-
}),
|
|
131
|
-
run: async ({ transport }, input) => {
|
|
132
|
-
const now = await chainTime(transport);
|
|
133
|
-
if (input.agent_fee === undefined && input.per_intent === 0n) {
|
|
134
|
-
throw new InvalidInput([{ path: "per_intent", message: "must be more than 0" }]);
|
|
135
|
-
}
|
|
136
|
-
if (input.agent_fee !== undefined && input.agent_fee >= input.per_intent) {
|
|
137
|
-
throw new InvalidInput([{ path: "agent_fee", message: "must be less than per_intent, which includes it" }]);
|
|
138
|
-
}
|
|
139
|
-
const id = input.id ?? (await freeMandateId(transport, input.owner, input.agent));
|
|
140
|
-
const spec = {
|
|
141
|
-
id,
|
|
142
|
-
agent: input.agent,
|
|
143
|
-
kinds: kindBits(input.kinds),
|
|
144
|
-
perIntent: input.per_intent,
|
|
145
|
-
total: input.total,
|
|
146
|
-
maxIntents: input.max_intents,
|
|
147
|
-
maxTtl: BigInt(input.max_ttl),
|
|
148
|
-
validUntil: now + BigInt(input.valid_for),
|
|
149
|
-
floorOut: input.floor.out,
|
|
150
|
-
floorIn: input.floor.in,
|
|
151
|
-
...(input.partner === undefined ? {} : { partner: { key: input.partner.account, bps: input.partner.bps } }),
|
|
152
|
-
...(input.agent_fee === undefined ? {} : { agentFee: input.agent_fee }),
|
|
153
|
-
};
|
|
154
|
-
const inputToken = await mintOf(transport, input.input_mint);
|
|
155
|
-
const outputToken = await mintOf(transport, input.output_mint);
|
|
156
|
-
const described = describeMandate(spec, {
|
|
157
|
-
inputMint: input.input_mint,
|
|
158
|
-
outputMint: input.output_mint,
|
|
159
|
-
...tokenNames(input.input_mint, input.output_mint),
|
|
160
|
-
now,
|
|
161
|
-
inputDecimals: inputToken.decimals,
|
|
162
|
-
outputDecimals: outputToken.decimals,
|
|
163
|
-
});
|
|
164
|
-
const owner = createNoopSigner(input.owner);
|
|
165
|
-
const source = await findAssociatedTokenAddress({
|
|
166
|
-
owner: input.owner,
|
|
167
|
-
mint: input.input_mint,
|
|
168
|
-
tokenProgram: inputToken.tokenProgram,
|
|
169
|
-
});
|
|
170
|
-
const allowance = await raiseAllowance(transport, input.owner, source, spec.total);
|
|
171
|
-
const register = await initUserIfMissing(await loadUser(transport, input.owner), input.owner);
|
|
172
|
-
const receiver = await tokenAccountIfMissing(transport, owner, input.owner, input.output_mint, outputToken.tokenProgram);
|
|
173
|
-
const wrap = await wrapIfShort(transport, input.owner, input.input_mint, inputToken.tokenProgram, spec.total);
|
|
174
|
-
const instructions = [
|
|
175
|
-
...register,
|
|
176
|
-
...receiver.create,
|
|
177
|
-
...wrap.instructions,
|
|
178
|
-
await buildApproveDelegate({
|
|
179
|
-
owner,
|
|
180
|
-
mint: input.input_mint,
|
|
181
|
-
tokenProgram: inputToken.tokenProgram,
|
|
182
|
-
amount: allowance.after,
|
|
183
|
-
decimals: inputToken.decimals,
|
|
184
|
-
}),
|
|
185
|
-
await buildCreateMandate({
|
|
186
|
-
owner,
|
|
187
|
-
inputMint: input.input_mint,
|
|
188
|
-
outputMint: input.output_mint,
|
|
189
|
-
inputTokenProgram: inputToken.tokenProgram,
|
|
190
|
-
outputTokenProgram: outputToken.tokenProgram,
|
|
191
|
-
mandate: spec,
|
|
192
|
-
ownerInput: source,
|
|
193
|
-
receiver: receiver.address,
|
|
194
|
-
}),
|
|
195
|
-
];
|
|
196
|
-
const disclosed = setupLines({
|
|
197
|
-
registers: register.length > 0,
|
|
198
|
-
creates: receiver.create.length > 0 ? [input.output_mint] : [],
|
|
199
|
-
allowance,
|
|
200
|
-
decimals: inputToken.decimals,
|
|
201
|
-
wraps: wrap.lamports,
|
|
202
|
-
});
|
|
203
|
-
const prepared = preparedView(await prepare(transport, instructions, input.owner));
|
|
204
|
-
const [mandate] = await findMandatePda({ owner: input.owner, agent: input.agent, id });
|
|
205
|
-
return {
|
|
206
|
-
mandate,
|
|
207
|
-
id,
|
|
208
|
-
valid_until: spec.validUntil,
|
|
209
|
-
summary: [...described.lines, `Proceeds go to ${receiver.address}; the agent spends only from ${source}`, ...disclosed.lines],
|
|
210
|
-
warnings: [
|
|
211
|
-
...described.warnings,
|
|
212
|
-
...disclosed.warnings,
|
|
213
|
-
...(inputToken.scaled || outputToken.scaled ? [WARN_SCALED] : []),
|
|
214
|
-
],
|
|
215
|
-
prepared,
|
|
216
|
-
};
|
|
217
|
-
},
|
|
218
|
-
});
|
|
219
|
-
export const getMandate = define({
|
|
220
|
-
name: tool("get_mandate"),
|
|
221
|
-
title: "Read a mandate",
|
|
222
|
-
description: "Read a mandate: its limits, how much of its budget and intent count the agent has used, and whether it is active, expired, or revoked because the owner advanced their signing epoch. A mandate the owner revoked outright is closed, so reading it fails with NotFound.",
|
|
223
|
-
effect: "read",
|
|
224
|
-
input: object(mandateRef),
|
|
225
|
-
output: object({
|
|
226
|
-
mandate: account(),
|
|
227
|
-
owner: account(),
|
|
228
|
-
agent: account(),
|
|
229
|
-
id: amount(),
|
|
230
|
-
status: choice(["active", "expired", "revoked"]),
|
|
231
|
-
input_mint: account(),
|
|
232
|
-
output_mint: account(),
|
|
233
|
-
kinds: list(choice(MANDATE_KIND_NAMES), 3),
|
|
234
|
-
per_intent: amount(),
|
|
235
|
-
total: amount(),
|
|
236
|
-
spent: amount(),
|
|
237
|
-
remaining: amount("raw input units the agent may still sell"),
|
|
238
|
-
max_intents: integer(0, 0xffff_ffff),
|
|
239
|
-
intents: integer(0, 0xffff_ffff),
|
|
240
|
-
max_ttl: time(),
|
|
241
|
-
valid_until: time(),
|
|
242
|
-
floor: object({ out: amount(), in: amount() }),
|
|
243
|
-
partner: nullable(partnerSchema),
|
|
244
|
-
agent_fee: amount("raw input units each intent pays the agent"),
|
|
245
|
-
summary: list(text(), 16),
|
|
246
|
-
}),
|
|
247
|
-
run: async ({ transport }, input) => {
|
|
248
|
-
const { address, mandate } = await loadMandate(transport, input.owner, input.agent, input.id ?? 0n);
|
|
249
|
-
const now = await chainTime(transport);
|
|
250
|
-
const decimals = await decimalsFor(transport, new Map(), mandate.inputMint, mandate.outputMint);
|
|
251
|
-
const user = await loadUser(transport, input.owner);
|
|
252
|
-
const status = user?.epoch !== mandate.epoch ? "revoked" : now >= mandate.validUntil ? "expired" : "active";
|
|
253
|
-
return {
|
|
254
|
-
mandate: address,
|
|
255
|
-
owner: mandate.owner,
|
|
256
|
-
agent: mandate.agent,
|
|
257
|
-
id: mandate.id,
|
|
258
|
-
status,
|
|
259
|
-
input_mint: mandate.inputMint,
|
|
260
|
-
output_mint: mandate.outputMint,
|
|
261
|
-
kinds: mandateKinds(mandate.kinds),
|
|
262
|
-
per_intent: mandate.perIntent,
|
|
263
|
-
total: mandate.total,
|
|
264
|
-
spent: mandate.spent,
|
|
265
|
-
remaining: mandate.total - mandate.spent,
|
|
266
|
-
max_intents: mandate.maxIntents,
|
|
267
|
-
intents: mandate.intents,
|
|
268
|
-
max_ttl: mandate.maxTtl,
|
|
269
|
-
valid_until: mandate.validUntil,
|
|
270
|
-
floor: { out: mandate.floorOut, in: mandate.floorIn },
|
|
271
|
-
partner: mandate.partnerBps === 0 ? null : { account: mandate.partner, bps: mandate.partnerBps },
|
|
272
|
-
agent_fee: mandate.agentFee,
|
|
273
|
-
summary: describeMandate(specOf(mandate), { inputMint: mandate.inputMint, outputMint: mandate.outputMint, now, ...decimals, ...tokenNames(mandate.inputMint, mandate.outputMint) }).lines,
|
|
274
|
-
};
|
|
275
|
-
},
|
|
276
|
-
});
|
|
277
|
-
export const prepareRevokeMandate = define({
|
|
278
|
-
name: tool("prepare_revoke_mandate"),
|
|
279
|
-
title: "Prepare a mandate revocation",
|
|
280
|
-
description: `Build the transaction that revokes one mandate and returns its rent to the owner. From then on no solver can fill any intent opened under it. The same transaction cancels up to ${REVOKE_CANCELS} of those intents that are still open, refunding their escrow, and lowers the engine's spending allowance by the unused budget; still_open counts the ones left, which list_intents finds and prepare_cancel cancels. Intents the owner made outside this mandate stay open and are counted in other_open. To revoke every mandate and pending signature together, the owner advances their signing epoch instead.`,
|
|
281
|
-
effect: "prepare",
|
|
282
|
-
input: object(mandateRef),
|
|
283
|
-
output: object({
|
|
284
|
-
mandate: account(),
|
|
285
|
-
cancelled: list(account(), REVOKE_CANCELS, "intents this transaction cancels"),
|
|
286
|
-
still_open: integer(0, MAX_MANDATE_INTENTS, "intents opened under the mandate that stay open, unfillable, until cancelled"),
|
|
287
|
-
other_open: integer(0, Number.MAX_SAFE_INTEGER, "the owner's open intents not made under this mandate, such as their own or signed ones, which revoking leaves untouched"),
|
|
288
|
-
allowance: amount("the engine's spending allowance on the mandate's input account once this transaction lands"),
|
|
289
|
-
summary: list(text(), 32, "what signing does, in plain words"),
|
|
290
|
-
warnings: list(text(), 8, "anything to check before signing"),
|
|
291
|
-
prepared: preparedSchema,
|
|
292
|
-
}),
|
|
293
|
-
run: async ({ transport }, input) => {
|
|
294
|
-
const id = input.id ?? 0n;
|
|
295
|
-
const { address, mandate } = await loadMandate(transport, input.owner, input.agent, id);
|
|
296
|
-
const owner = createNoopSigner(input.owner);
|
|
297
|
-
const inputToken = await mintOf(transport, mandate.inputMint);
|
|
298
|
-
const unused = mandate.total - mandate.spent;
|
|
299
|
-
const allowance = await lowerAllowance(transport, input.owner, mandate.inputAccount, unused);
|
|
300
|
-
const lower = allowance.after === allowance.before
|
|
301
|
-
? []
|
|
302
|
-
: allowance.after === 0n
|
|
303
|
-
? [getRevokeInstruction({ source: mandate.inputAccount, owner }, { programAddress: inputToken.tokenProgram })]
|
|
304
|
-
: [
|
|
305
|
-
await buildApproveDelegate({
|
|
306
|
-
owner,
|
|
307
|
-
mint: mandate.inputMint,
|
|
308
|
-
tokenProgram: inputToken.tokenProgram,
|
|
309
|
-
amount: allowance.after,
|
|
310
|
-
decimals: inputToken.decimals,
|
|
311
|
-
source: mandate.inputAccount,
|
|
312
|
-
}),
|
|
313
|
-
];
|
|
314
|
-
const live = (await transport.intents(input.owner))
|
|
315
|
-
.map(({ address: intent, data }) => ({ intent, state: getIntentDecoder().decode(data) }))
|
|
316
|
-
.filter(({ state }) => state.owner === input.owner && state.status === IntentStatus.Open);
|
|
317
|
-
const open = live.filter(({ state }) => state.mandate === address);
|
|
318
|
-
const chosen = open.slice(0, REVOKE_CANCELS);
|
|
319
|
-
const cancels = [];
|
|
320
|
-
for (const { state } of chosen) {
|
|
321
|
-
cancels.push(await buildCancelIntent({
|
|
322
|
-
owner,
|
|
323
|
-
nonce: state.nonce,
|
|
324
|
-
inputMint: state.inputMint,
|
|
325
|
-
tokenProgram: await tokenProgramOf(transport, state.inputMint),
|
|
326
|
-
}));
|
|
327
|
-
}
|
|
328
|
-
const ix = await buildRevokeMandate({ owner, agent: input.agent, id });
|
|
329
|
-
const show = (raw) => formatAmount(raw, inputToken.decimals);
|
|
330
|
-
let refunded = 0n;
|
|
331
|
-
for (const { intent } of chosen) {
|
|
332
|
-
refunded += await vaultBalance(transport, intent);
|
|
333
|
-
}
|
|
334
|
-
const left = open.length - chosen.length;
|
|
335
|
-
const others = live.filter(({ state }) => state.mandate !== address);
|
|
336
|
-
return {
|
|
337
|
-
mandate: address,
|
|
338
|
-
cancelled: chosen.map(({ intent }) => intent),
|
|
339
|
-
still_open: left,
|
|
340
|
-
other_open: others.length,
|
|
341
|
-
allowance: allowance.after,
|
|
342
|
-
summary: [
|
|
343
|
-
`Revokes mandate ${address}: ${input.agent} can no longer create intents for you, and nobody can fill the ones it made`,
|
|
344
|
-
...(chosen.length === 0
|
|
345
|
-
? ["None of the agent's intents under it are open"]
|
|
346
|
-
: [`Cancels the agent's ${chosen.length} open intent(s) and returns ${show(refunded)} of ${tokenOf(mandate.inputMint, TOKEN_NAMES[mandate.inputMint])} to you`]),
|
|
347
|
-
...(left === 0 ? [] : [`Leaves ${left} more of its intents open but unfillable; cancel them with ${tool("prepare_cancel")}`]),
|
|
348
|
-
allowance.after === allowance.before
|
|
349
|
-
? `Leaves the engine's spending allowance on ${mandate.inputAccount} at ${show(allowance.before)}`
|
|
350
|
-
: `Lowers the engine's spending allowance on ${mandate.inputAccount} from ${show(allowance.before)} to ${show(allowance.after)}, taking back the mandate's unused ${show(unused)}`,
|
|
351
|
-
...(others.length === 0
|
|
352
|
-
? []
|
|
353
|
-
: [`Leaves your ${others.length} other open intent(s) untouched: ${others.map(({ intent }) => intent).join(", ")}`]),
|
|
354
|
-
"Returns the mandate's rent to you",
|
|
355
|
-
],
|
|
356
|
-
warnings: left === 0 ? [] : [WARN_STILL_OPEN],
|
|
357
|
-
prepared: preparedView(await prepare(transport, [ix, ...cancels, ...lower], input.owner)),
|
|
358
|
-
};
|
|
359
|
-
},
|
|
360
|
-
});
|
|
361
|
-
const agentTerms = {
|
|
362
|
-
owner: account("the wallet whose mandate the agent uses"),
|
|
363
|
-
id: optional(amount("which of the owner's mandates for this agent; default 0")),
|
|
364
|
-
order: orderSchema,
|
|
365
|
-
expires_at: optional(time("unix seconds after which nobody can fill the intent")),
|
|
366
|
-
expires_in: optional(integer(MIN_EXPIRES_IN, MAX_EXPIRES_IN, "seconds from now until the intent expires")),
|
|
367
|
-
nonce: optional(amount("leave out to use the mandate's next free nonce; one you pass must have the top bit set")),
|
|
368
|
-
};
|
|
369
|
-
const agentOutput = {
|
|
370
|
-
intent: account(),
|
|
371
|
-
nonce: amount(),
|
|
372
|
-
expires_at: time(),
|
|
373
|
-
escrow: amount(),
|
|
374
|
-
agent_fee: amount("raw input units held with the escrow and paid to the agent only if this intent fills"),
|
|
375
|
-
budget_remaining: amount("raw input units the mandate still allows after this intent and its fee"),
|
|
376
|
-
summary: list(text(), 16),
|
|
377
|
-
};
|
|
378
|
-
async function agentIntent(transport, agent, input, claims, call) {
|
|
379
|
-
const id = input.id ?? 0n;
|
|
380
|
-
const { mandate } = await loadMandate(transport, input.owner, agent.address, id);
|
|
381
|
-
const now = await chainTime(transport);
|
|
382
|
-
const expiresAt = expiryOf(input, now);
|
|
383
|
-
const params = validate(paramsOf(input.order));
|
|
384
|
-
const { config } = await loadConfig(transport);
|
|
385
|
-
const inputToken = await mintOf(transport, mandate.inputMint);
|
|
386
|
-
const outputToken = await mintOf(transport, mandate.outputMint);
|
|
387
|
-
if (input.nonce !== undefined) {
|
|
388
|
-
await unusedIntent(transport, input.owner, input.nonce);
|
|
389
|
-
claim(claims, call, input.owner, input.nonce, now + PREPARED_TTL, now);
|
|
390
|
-
}
|
|
391
|
-
const nonce = input.nonce ?? (await agentNonce(transport, input.owner, mandate.serial, mandate.intents, { claims, call, now }));
|
|
392
|
-
const intent = await unusedIntent(transport, input.owner, nonce);
|
|
393
|
-
const feeAccount = mandate.agentFee === 0n
|
|
394
|
-
? { create: [] }
|
|
395
|
-
: await tokenAccountIfMissing(transport, agent, agent.address, mandate.inputMint, inputToken.tokenProgram);
|
|
396
|
-
const create = await buildCreateIntentByAgent({
|
|
397
|
-
agent,
|
|
398
|
-
owner: input.owner,
|
|
399
|
-
mandateId: id,
|
|
400
|
-
treasury: config.feeRecipient,
|
|
401
|
-
maxCreateFee: config.createFee,
|
|
402
|
-
maxBounty: config.crankBounty,
|
|
403
|
-
nonce,
|
|
404
|
-
params,
|
|
405
|
-
expiresAt,
|
|
406
|
-
...(mandate.partnerBps === 0 ? {} : { partner: { key: mandate.partner, bps: mandate.partnerBps } }),
|
|
407
|
-
inputMint: mandate.inputMint,
|
|
408
|
-
outputMint: mandate.outputMint,
|
|
409
|
-
inputTokenProgram: inputToken.tokenProgram,
|
|
410
|
-
outputTokenProgram: outputToken.tokenProgram,
|
|
411
|
-
ownerInput: mandate.inputAccount,
|
|
412
|
-
receiver: mandate.outputAccount,
|
|
413
|
-
});
|
|
414
|
-
const escrow = escrowAmount(params);
|
|
415
|
-
return {
|
|
416
|
-
mandate,
|
|
417
|
-
instructions: [...feeAccount.create, create],
|
|
418
|
-
cost: createCost(config) + (feeAccount.create.length > 0 ? rentFor(TOKEN_ACCOUNT_RENT_BYTES) : 0n),
|
|
419
|
-
now,
|
|
420
|
-
view: {
|
|
421
|
-
intent,
|
|
422
|
-
nonce,
|
|
423
|
-
expires_at: expiresAt,
|
|
424
|
-
escrow,
|
|
425
|
-
agent_fee: mandate.agentFee,
|
|
426
|
-
budget_remaining: mandate.total - mandate.spent - escrow - mandate.agentFee,
|
|
427
|
-
summary: [
|
|
428
|
-
...describeTerms({ kind: params.kind, params: encodeParams(params), inputMint: mandate.inputMint, outputMint: mandate.outputMint }, { inputDecimals: inputToken.decimals, outputDecimals: outputToken.decimals, ...tokenNames(mandate.inputMint, mandate.outputMint) }),
|
|
429
|
-
`Expires: ${formatTime(expiresAt)}`,
|
|
430
|
-
...(mandate.agentFee === 0n
|
|
431
|
-
? []
|
|
432
|
-
: [
|
|
433
|
-
`Agent fee: ${formatAmount(mandate.agentFee, inputToken.decimals)} of ${tokenOf(mandate.inputMint, TOKEN_NAMES[mandate.inputMint])}, held with the escrow and paid to the agent only if this intent fills; refunded to the owner if it is cancelled or expires`,
|
|
434
|
-
]),
|
|
435
|
-
],
|
|
436
|
-
},
|
|
437
|
-
};
|
|
438
|
-
}
|
|
439
|
-
export const prepareAgentCreate = define({
|
|
440
|
-
name: tool("prepare_agent_create"),
|
|
441
|
-
title: "Prepare an intent under a mandate",
|
|
442
|
-
description: `Build the transaction an agent key signs to create an intent for an owner under the mandate the owner granted it. The agent pays the fee, rent and any create fee; the owner's tokens move from the allowance they gave the engine. The program refuses anything outside the mandate. Use ${tool("agent_create")} instead when this server holds the agent key.`,
|
|
443
|
-
effect: "prepare",
|
|
444
|
-
input: object({ agent: account("the agent key that signs and pays"), ...agentTerms }),
|
|
445
|
-
output: object({ ...agentOutput, prepared: preparedSchema }),
|
|
446
|
-
run: async ({ transport, claims }, input, call) => {
|
|
447
|
-
const built = await agentIntent(transport, createNoopSigner(input.agent), input, claims, call);
|
|
448
|
-
const prepared = await prepare(transport, built.instructions, input.agent).catch(explained(built.mandate));
|
|
449
|
-
return { ...built.view, prepared: preparedView(prepared) };
|
|
450
|
-
},
|
|
451
|
-
});
|
|
452
|
-
export const agentCreate = define({
|
|
453
|
-
name: tool("agent_create"),
|
|
454
|
-
title: "Create an intent under a mandate",
|
|
455
|
-
description: "Create an intent for an owner under the mandate the owner granted to this server's agent key, signing and paying with that key. Needs a server started with --agent. This server refuses owners outside its --agent-owners list and spending beyond its hourly lamport budget; the program refuses anything outside the mandate's limits. Each call creates a new intent.",
|
|
456
|
-
effect: "submit",
|
|
457
|
-
repeats: true,
|
|
458
|
-
input: object(agentTerms),
|
|
459
|
-
output: object({ ...agentOutput, signature: text() }),
|
|
460
|
-
run: async (ctx, input, call) => {
|
|
461
|
-
const key = ctx.agent;
|
|
462
|
-
if (key === undefined) {
|
|
463
|
-
throw new AgentRefusal("AgentNotConfigured", "this server holds no agent key; start it with --agent to act under mandates");
|
|
464
|
-
}
|
|
465
|
-
if (!key.owners.has(input.owner)) {
|
|
466
|
-
throw new AgentRefusal("OwnerNotServed", `this agent only acts for the owners it was started with; ${input.owner} is not one of them`);
|
|
467
|
-
}
|
|
468
|
-
const built = await agentIntent(ctx.transport, key.signer, input, ctx.claims, call);
|
|
469
|
-
const prepared = await prepare(ctx.transport, built.instructions, key.signer.address).catch(explained(built.mandate));
|
|
470
|
-
const spend = reserve(key.budget, built.cost + prepared.priorityLamports, built.now);
|
|
471
|
-
const paid = { any: false };
|
|
472
|
-
call.undo.push(() => {
|
|
473
|
-
if (!paid.any) {
|
|
474
|
-
release(key.budget, spend);
|
|
475
|
-
}
|
|
476
|
-
});
|
|
477
|
-
return { ...built.view, signature: await paying(paid, ctx.transport.send(prepared.instructions, key.signer)) };
|
|
478
|
-
},
|
|
479
|
-
});
|
|
1
|
+
export { AGENT_NONCE_PROBES, agentNonce, freeMandateId, loadMandate, MANDATE_ID_PROBES, MANDATE_KIND_NAMES, NO_MANDATE_HINT, REVOKE_CANCELS, } from "./mandate-state.js";
|
|
2
|
+
export { getMandate, prepareMandate } from "./mandate-grant.js";
|
|
3
|
+
export { prepareRevokeMandate } from "./mandate-revoke.js";
|
|
4
|
+
export { agentCreate, prepareAgentCreate } from "./mandate-agent.js";
|
|
480
5
|
//# sourceMappingURL=mandate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mandate.js","sourceRoot":"","sources":["../../../src/agent/mandate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mandate.js","sourceRoot":"","sources":["../../../src/agent/mandate.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/src/agent/mcp.js
CHANGED
|
@@ -9,23 +9,28 @@ import { passThrough } from "./schema.js";
|
|
|
9
9
|
import { VERSION } from "../version.js";
|
|
10
10
|
export const ANNOTATIONS = {
|
|
11
11
|
read: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
12
|
-
prepare: { readOnlyHint:
|
|
13
|
-
submit: { readOnlyHint: false, destructiveHint:
|
|
12
|
+
prepare: { readOnlyHint: false, destructiveHint: false, idempotentHint: false, openWorldHint: true },
|
|
13
|
+
submit: { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true },
|
|
14
14
|
};
|
|
15
|
-
export const annotationsOf = (action) =>
|
|
15
|
+
export const annotationsOf = (action) => ({
|
|
16
|
+
...ANNOTATIONS[action.effect],
|
|
17
|
+
...(action.repeats === true ? { idempotentHint: false } : {}),
|
|
18
|
+
...(action.destructive === false ? { destructiveHint: false } : {}),
|
|
19
|
+
});
|
|
16
20
|
export const WALLET_INSTRUCTIONS = [
|
|
17
21
|
`This server holds a devnet wallet and trades intents with it. Devnet tokens have no value.`,
|
|
18
22
|
`Before anything else, show the user this notice once, every line:`,
|
|
19
23
|
...WALLET_NOTICE.map((line) => `- ${line}`),
|
|
20
24
|
`Start with ${tool("wallet_setup")}; it creates and funds the wallet and is safe to call again.`,
|
|
21
|
-
`${tool("wallet_swap")}, ${tool("wallet_auction")}, ${tool("wallet_recurring")}, ${tool("wallet_escrow")}, ${tool("wallet_escrow_plan")}, ${tool("wallet_attest")} and ${tool("wallet_cancel")} only preview until called with send: true. Show the user the summary first and send only after they say yes.`,
|
|
25
|
+
`${tool("wallet_swap")}, ${tool("wallet_auction")}, ${tool("wallet_recurring")}, ${tool("wallet_escrow")}, ${tool("wallet_escrow_plan")}, ${tool("wallet_attest")}, ${tool("wallet_deliver")} and ${tool("wallet_cancel")} only preview until called with send: true. Show the user the summary first and send only after they say yes.`,
|
|
22
26
|
`Name tokens SOL and TEST, or by mint address. Amounts are whole tokens such as 0.05.`,
|
|
23
27
|
`Solvers pay the least an intent asks. ${tool("wallet_swap")} therefore starts its ask above the market, from the median recent fill and at least a quarter above min_receive, and lets it fall to min_receive, so a solver takes it near the most it can pay: set min_receive to the least the user accepts. ${tool("wallet_estimate")} shows what recent fills paid.`,
|
|
24
28
|
`To pay someone in a token the wallet does not hold, give ${tool("wallet_swap")}, ${tool("wallet_auction")} or ${tool("wallet_recurring")} their wallet as pay_to: they receive what is bought.`,
|
|
25
29
|
`${tool("wallet_recurring")} repeats a swap on a schedule, such as every hour, by sending every order now with its ask held at start_receive until its turn; an order fills early if a solver can already pay that.`,
|
|
26
30
|
`${tool("wallet_escrow")} holds a payment that only a named attestor can release, to the wallet it chooses, such as paying another agent once a reviewer approves its work; the payer can still cancel it until then. A server whose wallet is that attestor releases it with ${tool("wallet_attest")}, sending with the approval its preview returned.`,
|
|
31
|
+
`Give ${tool("wallet_escrow")} a spec_url to publish where its spec lives. ${tool("find_jobs")} lists open proof escrows with their spec urls; a worker announces finished work to the attestor with ${tool("wallet_deliver")}.`,
|
|
27
32
|
`To pay for a larger task in parts, ${tool("wallet_escrow_plan")} escrows one payment per piece in a single approval; each piece is released on its own as it passes.`,
|
|
28
|
-
`Since the payer can cancel until the release, the worker delivers its work to the attestor, not the payer. The attestor checks it, releases with delivered_sha256 set to
|
|
33
|
+
`Since the payer can cancel until the release, the worker delivers its work to the attestor, not the payer. The attestor lists announced work with ${tool("wallet_check_delivery")}, checks it, releases to the earliest announcer of its hash with delivered_sha256 set to that hash, then passes the work on; ${tool("wallet_receipt")} shows the payer the release and whether what it received is what was paid for.`,
|
|
29
34
|
`After sending, ${tool("wallet_wait")} waits for the fill and says what it delivered; ${tool("wallet_intents")} and ${tool("wallet_balance")} show the rest.`,
|
|
30
35
|
].join("\n");
|
|
31
36
|
export const walletInstructions = (limits) => [WALLET_INSTRUCTIONS, ...limitLines(limits)].join("\n");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/agent/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAkD,MAAM,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,CAAC,MAAM,WAAW,GAAyH;IAC/I,IAAI,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC/F,OAAO,EAAE,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/agent/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export async function transactionSize(transport, instructions, feePayer, tables)
|
|
|
10
10
|
return getTransactionEncoder().encode(compileTransaction(message)).length;
|
|
11
11
|
}
|
|
12
12
|
export async function prepare(transport, instructions, feePayer, tables) {
|
|
13
|
-
const budgeted = await transport.budget(instructions, feePayer);
|
|
13
|
+
const budgeted = await transport.budget(instructions, feePayer, tables);
|
|
14
14
|
const latest = await transport.latestBlockhash();
|
|
15
15
|
const message = withTables(pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayer(feePayer, m), (m) => setTransactionMessageLifetimeUsingBlockhash(latest, m), (m) => appendTransactionMessageInstructions(budgeted, m)), tables);
|
|
16
16
|
const compiled = await partiallySignTransactionMessageWithSigners(message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../src/agent/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oCAAoC,EACpC,kBAAkB,EAClB,kDAAkD,EAClD,qBAAqB,EACrB,0CAA0C,EAC1C,wBAAwB,EACxB,+BAA+B,EAE/B,IAAI,EACJ,6BAA6B,EAC7B,2CAA2C,GAC5C,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAezG,MAAM,UAAU,GAAG,CAGjB,OAAU,EACV,MAAqB,EACrB,EAAE,CACF,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;IACtD,CAAC,CAAC,OAAO;IACT,CAAC,CAAC,kDAAkD,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAE1E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAoB,EACpB,YAAoC,EACpC,QAAiB,EACjB,MAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;IACjD,MAAM,OAAO,GAAG,UAAU,CACxB,IAAI,CACF,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACxC,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,CAAC,QAAQ,EAAE,CAAC,CAAC,EACjD,CAAC,CAAC,EAAE,EAAE,CAAC,2CAA2C,CAAC,MAAM,EAAE,CAAC,CAAC,EAC7D,CAAC,CAAC,EAAE,EAAE,CAAC,oCAAoC,CAAC,YAAY,EAAE,CAAC,CAAC,CAC7D,EACD,MAAM,CACP,CAAC;IACF,OAAO,qBAAqB,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,SAAoB,EACpB,YAAoC,EACpC,QAAiB,EACjB,MAAqB;IAErB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../src/agent/prepare.ts"],"names":[],"mappings":"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"}
|