botanary-mcp 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -20,6 +20,7 @@ The tools this server exposes:
20
20
  | `get_gas_methods` | Calls `GET /gas/methods` - only the gas methods available for this account on a chain (the backend filters out unavailable ones). |
21
21
  | `get_account` | Calls `GET /account` - the ONE account this agent is bound to and its address and deployment status. |
22
22
  | `propose_payment` | Reads the grant's bounds first; refuses honestly (citing the backend's own numbers) when there is none or the amount is out of bounds; otherwise builds against THIS agent's own grant id (`POST /delegations/{delegationId}/actions` - the session-key-validatable lane, never the owner-lane `/money/send/build`) and relays (`POST /userops`) signed with the grant's own session key. |
23
+ | `propose_swap` | The same shape as `propose_payment`, over a grant's SECOND on-chain action (`executeUnderGrantWithAllowance`). Reads the venue the grant pinned (`policySet.swapVenue`) first and refuses honestly - naming the backend's own numbers - when the grant names no venue at all, is on another chain, sells a different token, or the amount is over the venue's per-swap ceiling; otherwise builds `action: 'swap'` on the same delegated-action lane and relays it with the grant's own session key. The route is the backend's to pick: the grant pins one router, and a best route through any other is declined there by name. |
23
24
  | `request_approval` | Raises a request for an action outside the grant (`POST /agents/requests`) - the "ask" half of Flow 7d. |
24
25
  | `what_may_i_do` | Renders the grant in plain terms, or an honest "nothing yet" - a convenience read, never the check. |
25
26
  | `forget` | STEP 1 of 2: preview what would be destroyed and get a single-use confirmation token. Deletes nothing on its own. |
@@ -4,9 +4,19 @@
4
4
  * from every other failure, which it should surface as-is. */
5
5
  export class BotanaryApiError extends Error {
6
6
  status;
7
- constructor(message, status) {
7
+ details;
8
+ constructor(message, status,
9
+ /**
10
+ * The backend's own `error.details` blob, carried through rather than flattened into the message.
11
+ * Some refusals are ACTIONABLE and say so in structured fields - `missingModule` names a setup module
12
+ * the account lacks - and a tool that can only read prose has to pattern-match on wording to notice.
13
+ * Keeping the object means a handler keys off a field the backend guarantees instead of a sentence it
14
+ * is free to reword. Null whenever the response carried none.
15
+ */
16
+ details = null) {
8
17
  super(message);
9
18
  this.status = status;
19
+ this.details = details;
10
20
  this.name = 'BotanaryApiError';
11
21
  }
12
22
  }
@@ -35,7 +45,7 @@ export class BotanaryApiClient {
35
45
  });
36
46
  const json = (await res.json());
37
47
  if (!res.ok)
38
- throw new BotanaryApiError(json?.error?.message ?? `${path} failed with ${res.status}`, res.status);
48
+ throw new BotanaryApiError(json?.error?.message ?? `${path} failed with ${res.status}`, res.status, json?.error?.details ?? null);
39
49
  return json;
40
50
  }
41
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/api-client.ts"],"names":[],"mappings":"AAAA;;;+DAG+D;AAC/D,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAG9B;IAFX,YACE,OAAe,EACN,MAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;yFACyF;AACzF,MAAM,OAAO,iBAAiB;IAET;IACA;IAFnB,YACmB,OAAe,EACf,YAA0B,KAAK;QAD/B,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAsB;IAC/C,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa,EAAE,KAAc;QACvD,OAAO,IAAI,CAAC,QAAQ,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED;2EACuE;IACvE,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,KAAc;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,MAAsB,EAAE,IAAY,EAAE,IAAa,EAAE,KAAc;QACnF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACzD,MAAM;YACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACvG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqC,CAAC;QACpE,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,GAAG,IAAI,gBAAgB,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QACjH,OAAO,IAAS,CAAC;IACnB,CAAC;CACF"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/api-client.ts"],"names":[],"mappings":"AAAA;;;+DAG+D;AAC/D,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAG9B;IAQA;IAVX,YACE,OAAe,EACN,MAAc;IACvB;;;;;;OAMG;IACM,UAA0C,IAAI;QAEvD,KAAK,CAAC,OAAO,CAAC,CAAC;QAVN,WAAM,GAAN,MAAM,CAAQ;QAQd,YAAO,GAAP,OAAO,CAAuC;QAGvD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;yFACyF;AACzF,MAAM,OAAO,iBAAiB;IAET;IACA;IAFnB,YACmB,OAAe,EACf,YAA0B,KAAK;QAD/B,YAAO,GAAP,OAAO,CAAQ;QACf,cAAS,GAAT,SAAS,CAAsB;IAC/C,CAAC;IAEJ,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAa,EAAE,KAAc;QACvD,OAAO,IAAI,CAAC,QAAQ,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED;2EACuE;IACvE,KAAK,CAAC,GAAG,CAAI,IAAY,EAAE,KAAc;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAI,MAAsB,EAAE,IAAY,EAAE,IAAa,EAAE,KAAc;QACnF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACzD,MAAM;YACN,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACvG,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAE7B,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YACT,MAAM,IAAI,gBAAgB,CACxB,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,GAAG,IAAI,gBAAgB,GAAG,CAAC,MAAM,EAAE,EAC3D,GAAG,CAAC,MAAM,EACV,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,CAC7B,CAAC;QACJ,OAAO,IAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Where to send an owner in their browser, derived from the API this server is configured against.
3
+ *
4
+ * ITS OWN MODULE, not a corner of `tools.ts`, because both the tool surface and `diagnose` hand out these
5
+ * links and `tools.ts` already imports `diagnose`. Leaving them in `tools.ts` made that a cycle.
6
+ */
7
+ /** Botanary's production app origin - the fallback whenever the configured API base URL isn't one of
8
+ * the two shapes `deriveAppOrigin` recognizes below. */
9
+ const PROD_APP_ORIGIN = 'https://app.botanary.xyz';
10
+ /** Derive the Botanary APP origin (what an owner's browser visits) from the API base URL this runtime
11
+ * is actually configured against, so a deep link lands on a LOCAL FE when this server is pointed at a
12
+ * local stack, rather than always hardcoding production. Recognizes two shapes:
13
+ * - Production/staging: the API host is `api.` + the app host (`api.app.botanary.xyz` ->
14
+ * `app.botanary.xyz`) - strip that one label.
15
+ * - The local docker-compose stack (`../../docker-compose.yml`), which pairs BE :3000 with FE :3001.
16
+ * Anything else - an unparseable URL, or a host this function does not recognize - falls back to the
17
+ * production app origin: a deep link that opens the wrong (but real) app is safer than one built from
18
+ * a guess that resolves nowhere. */
19
+ export function deriveAppOrigin(apiBaseUrl) {
20
+ let url;
21
+ try {
22
+ url = new URL(apiBaseUrl);
23
+ }
24
+ catch {
25
+ return PROD_APP_ORIGIN;
26
+ }
27
+ if (url.hostname.startsWith('api.')) {
28
+ return `${url.protocol}//${url.hostname.slice('api.'.length)}`;
29
+ }
30
+ if ((url.hostname === 'localhost' || url.hostname === '127.0.0.1') && url.port === '3000') {
31
+ return `${url.protocol}//${url.hostname}:3001`;
32
+ }
33
+ return PROD_APP_ORIGIN;
34
+ }
35
+ /**
36
+ * The deep link an owner opens to finish setting up their own account.
37
+ *
38
+ * WHY A LINK AT ALL. A missing setup module is the one refusal an agent can neither retry its way out of
39
+ * nor fix itself: installing a module is an authority change, the op must be signed by the owner's key in
40
+ * their browser, and a session key must never be able to grant itself new execution modules. So the honest
41
+ * response is a handoff - and a handoff without an address is a dead end. The owner reading this is usually
42
+ * the same person reading the terminal, so "ask your owner" is not an instruction, it is a shrug.
43
+ *
44
+ * WHAT IT CARRIES. Navigation only: an origin from configuration and a chain id. No signing payload, no
45
+ * op, no instruction - the page independently asks the backend what is missing and derives the ops from
46
+ * chain state. Nothing here is interpolated from model-controlled text or from a tool result, which is the
47
+ * same discipline the deterministic gate follows: a link an agent emits and a human then signs on must not
48
+ * be steerable by anything the model saw.
49
+ */
50
+ export function setupUrl(apiBaseUrl, chainId) {
51
+ const base = `${deriveAppOrigin(apiBaseUrl)}/account/setup`;
52
+ return Number.isFinite(chainId) ? `${base}?chainId=${Number(chainId)}` : base;
53
+ }
54
+ //# sourceMappingURL=app-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-link.js","sourceRoot":"","sources":["../../src/app-link.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;yDACyD;AACzD,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAEnD;;;;;;;;qCAQqC;AACrC,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACjE,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,QAAQ,KAAK,WAAW,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1F,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,OAAO,CAAC;IACjD,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,QAAQ,CAAC,UAAkB,EAAE,OAAgB;IAC3D,MAAM,IAAI,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,gBAAgB,CAAC;IAC5D,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,YAAY,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChF,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { BotanaryApiError } from './api-client.js';
2
+ import { setupUrl } from './app-link.js';
2
3
  const BALANCE_FRESHNESS = 'backend store-backed (GET /balance makes zero external calls) - may lag the chain by a refresh cycle';
3
4
  function report(state, summary, blockers, facts = {}, freshness = {}) {
4
5
  return { state, summary, blockers, facts, freshness };
@@ -78,6 +79,29 @@ export async function runDiagnose(runtime) {
78
79
  }
79
80
  const freshness = {};
80
81
  const blockers = [];
82
+ // SETUP FIRST, and BLOCKING - ranked above funding and budget deliberately. Those two are conditions an
83
+ // agent can wait out or work around (money arrives, budgets reset); a missing executor is not. It makes
84
+ // every action under this grant fail identically, forever, until an owner signs an install this agent
85
+ // cannot sign for itself. Reporting "ready" while it is absent is the failure this tool exists to
86
+ // prevent: on 2026-08-12 diagnose said `ready` for an account whose next payment reverted on chain.
87
+ // Absent/unreported (an older backend) is treated as no evidence, never as a problem.
88
+ if (self.accountSetup && !self.accountSetup.ready) {
89
+ const missing = self.accountSetup.missing.length
90
+ ? self.accountSetup.missing.join(', ')
91
+ : 'a required component';
92
+ return report('setup_required', `Connected with an active grant on ${grant.chain ?? `chain ${grant.chainId}`}, but the account is ` +
93
+ `missing ${missing} - nothing can be spent under this grant until the owner installs it.`, [
94
+ {
95
+ code: 'setup_required',
96
+ severity: 'blocking',
97
+ detail: `Account is missing ${missing} on chainId ${self.accountSetup.chainId}. Every action under ` +
98
+ 'this grant will be refused, and retrying cannot change that - installing a module is an ' +
99
+ 'authority change only the owner can sign.',
100
+ nextAction: `Ask the owner to open ${setupUrl(runtime.apiBaseUrl, self.accountSetup.chainId)} and ` +
101
+ 'complete account setup (one signature), then retry.',
102
+ },
103
+ ], facts, freshness);
104
+ }
81
105
  // Chain tier.
82
106
  let chainTier;
83
107
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/diagnose.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAiCnD,MAAM,iBAAiB,GACrB,sGAAsG,CAAC;AAEzG,SAAS,MAAM,CACb,KAAoB,EACpB,OAAe,EACf,QAAmB,EACnB,QAAiC,EAAE,EACnC,YAAoC,EAAE;IAEtC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACxD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACrD,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACzC,OAAO,MAAM,CAAC,QAAQ,EAAE,0CAA0C,EAAE;YAClE;gBACE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,qDAAqD;gBAC7D,UAAU,EAAE,oFAAoF;aACjG;SACF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAe,CAAC;IACpB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,gBAAgB,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC;YAC5E,OAAO,MAAM,CAAC,eAAe,EAAE,iEAAiE,EAAE;gBAChG;oBACE,IAAI,EAAE,eAAe;oBACrB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,mDAAmD,CAAC,CAAC,MAAM,IAAI;oBACvE,UAAU,EAAE,4EAA4E;iBACzF;aACF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC,qBAAqB,EAAE,gEAAgE,EAAE;YACrG;gBACE,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBAClD,UAAU,EAAE,8DAA8D;aAC3E;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAA4B;QACrC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;QAC7F,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;QAC5E,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC;IAEF;;;2GAGuG;IACvG,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;IAE1G,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,MAAM,CACX,oBAAoB,EACpB,gBAAgB,YAAY,0DAA0D,EACtF;YACE;gBACE,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,qCAAqC;gBAC7C,UAAU,EAAE,2GAA2G;aACxH;SACF,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAOlB,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CACX,gBAAgB,EAChB,yBAAyB,KAAK,CAAC,MAAM,qCAAqC,EAC1E;YACE;gBACE,IAAI,EAAE,gBAAgB;gBACtB,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,SAAS,KAAK,CAAC,EAAE,gBAAgB,KAAK,CAAC,MAAM,IAAI;gBACzD,UAAU,EAAE,8DAA8D;aAC3E;SACF,EACD,KAAK,CACN,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAc,EAAE,CAAC;IAE/B,cAAc;IACd,IAAI,SAA6B,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAmE,CAAC;QAC9G,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,MAAM,CACX,gBAAgB,EAChB,0BAA0B,KAAK,CAAC,OAAO,sCAAsC,EAC7E;gBACE;oBACE,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,WAAW,KAAK,CAAC,OAAO,8BAA8B;oBAC9D,UAAU,EAAE,yDAAyD;iBACtE;aACF,EACD,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;QACD,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC5B,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,MAAM,CACX,gBAAgB,EAChB,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,8DAA8D,EAC5F;gBACE;oBACE,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,oCAAoC,KAAK,CAAC,OAAO,GAAG;oBAC5D,UAAU,EAAE,+DAA+D;iBAC5E;aACF,EACD,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,MAAM,GAAG,gBAAgB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,6EAA6E;YACrF,UAAU,EAAE,kEAAkE;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,qGAAqG;IACrG,qGAAqG;IACrG,sGAAsG;IACtG,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,UAAU,EAAE,CAA+E,CAAC;QAC3H,SAAS,CAAC,OAAO,GAAG,iBAAiB,CAAC;QACtC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YACvC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC;YAChF,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,MAAM,GAAG,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC;QAChC,KAAK,CAAC,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC3D,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAChB,OAAO,MAAM,CACX,UAAU,EACV,gBAAgB,YAAY,oBAAoB,MAAM,IAAI,uBAAuB,OAC/E,KAAK,CAAC,KAAK,IAAI,SAAS,KAAK,CAAC,OAAO,EACvC,sCAAsC,EACtC;gBACE,GAAG,QAAQ;gBACX;oBACE,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,UAAU;oBACpB,MAAM,EAAE,iBAAiB,MAAM,eAAe,KAAK,CAAC,OAAO,yBAAyB,MAAM,GAAG;oBAC7F,UAAU,EAAE,wBAAwB,KAAK,CAAC,KAAK,IAAI,SAAS,KAAK,CAAC,OAAO,EAAE,mDAAmD;iBAC/H;aACF,EACD,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,SAAS;YACnB,MAAM,EAAE,0EAA0E;YAClF,UAAU,EAAE,iCAAiC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;IACpD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CACX,kBAAkB,EAClB,6CAA6C,EAC7C;YACE,GAAG,QAAQ;YACX;gBACE,IAAI,EAAE,kBAAkB;gBACxB,QAAQ,EAAE,UAAU;gBACpB,MAAM,EAAE,iCAAiC,SAAS,GAAG;gBACrD,UAAU,EAAE,yDAAyD;aACtE;SACF,EACD,KAAK,EACL,SAAS,CACV,CAAC;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CACX,UAAU,EACV,yEAAyE,EACzE,QAAQ,EACR,KAAK,EACL,SAAS,CACV,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CACX,OAAO,EACP,gBAAgB,YAAY,4BAA4B,KAAK,CAAC,KAAK,IAAI,SAAS,KAAK,CAAC,OAAO,EAAE,8BAA8B,EAC7H,EAAE,EACF,KAAK,EACL,SAAS,CACV,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"diagnose.js","sourceRoot":"","sources":["../../src/diagnose.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,22 @@ import { defaultCandidates } from './identity/backends/select.js';
3
3
  import { PairingCodeManager } from './identity/pairing-code.js';
4
4
  import { IdentityStore } from './identity/store.js';
5
5
  import { BotanaryApiClient, BotanaryApiError } from './api-client.js';
6
+ /**
7
+ * Poll `get` until the op reports a terminal status or `budgetMs` is spent, then return whatever the
8
+ * backend last said - VERBATIM. A budget lapse returns the real `pending` answer; this helper never
9
+ * invents a status, and never blocks forever.
10
+ *
11
+ * Pure and injectable (clock + sleep) so its behaviour is testable without timers or a network.
12
+ */
13
+ export async function awaitTerminalWith(get, opId, budgetMs, now, sleep) {
14
+ const started = now();
15
+ let last = await get(opId);
16
+ while (last.status === 'pending' && now() - started < budgetMs) {
17
+ await sleep(1_500);
18
+ last = await get(opId);
19
+ }
20
+ return last;
21
+ }
6
22
  /** Re-mint this many ms before the backend's own `expiresAt` - session TTL is an hour
7
23
  * (`agent-session.store.ts`), so this is a small, deliberately conservative margin, not a tuned value. */
8
24
  const SESSION_REFRESH_SKEW_MS = 30_000;
@@ -163,6 +179,31 @@ export class AgentRuntime {
163
179
  };
164
180
  return this.#withSession((token) => this.#api.post(`/v1/delegations/${params.delegationId}/actions`, body, token));
165
181
  }
182
+ /**
183
+ * `POST /delegations/{delegationId}/actions` with `action: 'swap'` - the SAME endpoint, the same session
184
+ * nonce lane and the same fixed gas as `buildDelegatedAction` above; only the body's shape differs. The
185
+ * backend discriminates on `action` explicitly and NEVER infers it from the presence of `tokenIn`, so a
186
+ * transfer body with a typo stays a 422 on the wrong field rather than silently becoming a swap.
187
+ *
188
+ * Symbols, not addresses: the backend re-resolves both legs from ITS OWN per-chain manifest, which is the
189
+ * same resolution `buildGrant` used when it compiled the venue's `EQ` rule - so the two cannot disagree.
190
+ * `amountIn` is DISPLAY units (e.g. `25` for 25 USDC), matching `amount` on the transfer shape.
191
+ *
192
+ * The op this produces is ONE call into `GrantExecutor.executeUnderGrantWithAllowance` - approve, route,
193
+ * zero, assert no residual - which the grant's session authorises only when the grant named a
194
+ * `swapVenue`. A grant without one has no such action at all and the backend declines
195
+ * `grant_swap_not_authorised` rather than handing back an op Smart Sessions would refuse in validation.
196
+ */
197
+ async buildDelegatedSwap(params) {
198
+ const body = {
199
+ action: 'swap',
200
+ tokenIn: params.tokenIn,
201
+ tokenOut: params.tokenOut,
202
+ amountIn: params.amountIn,
203
+ ...(params.maxSlippageBps != null ? { maxSlippageBps: params.maxSlippageBps } : {}),
204
+ };
205
+ return this.#withSession((token) => this.#api.post(`/v1/delegations/${params.delegationId}/actions`, body, token));
206
+ }
166
207
  /** `POST /agents/requests` - the "ask" half of the design (Flow 7d step 5): raise a request naming the
167
208
  * calls that were declined and why, returning which bound was crossed and the deadline exactly as the
168
209
  * backend computed them. */
@@ -189,6 +230,15 @@ export class AgentRuntime {
189
230
  const signature = encodePacked(['bytes1', 'bytes32', 'bytes'], ['0x00', permissionId, raw]);
190
231
  return this.#api.post('/v1/userops', { userOp: { ...userOp, signature }, userOpHash, intentType }, token);
191
232
  }
233
+ /** `GET /userops/{opId}` - the receipt for an op THIS agent relayed. Reachable only because that route
234
+ * now carries `@AgentAllowed()`; before that it 403'd an `ags_` token before the handler ran. */
235
+ async getUserOp(opId) {
236
+ return this.#withSession((token) => this.#api.get(`/v1/userops/${opId}`, token));
237
+ }
238
+ /** Follow an op to a terminal status, bounded. See `awaitTerminalWith`. */
239
+ async awaitTerminal(opId, budgetMs) {
240
+ return awaitTerminalWith((id) => this.getUserOp(id), opId, budgetMs, () => Date.now(), (ms) => new Promise((r) => setTimeout(r, ms)));
241
+ }
192
242
  /** Drops cached identity/pairing/session state. Call after `store.forget()` so the next call re-derives
193
243
  * from storage (and, in the ordinary case, creates a brand new identity) instead of continuing to serve
194
244
  * an in-memory identity - or a session minted for it - whose key is now gone. */
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/src/tools.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { randomBytes } from 'node:crypto';
2
2
  import { runDiagnose } from './diagnose.js';
3
+ import { deriveAppOrigin, setupUrl } from './app-link.js';
4
+ export { deriveAppOrigin, setupUrl };
3
5
  function text(value) {
4
6
  return { content: [{ type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) }] };
5
7
  }
@@ -15,34 +17,12 @@ function identityView(identity) {
15
17
  keyStorage: identity.backend,
16
18
  };
17
19
  }
18
- /** Botanary's production app origin - the fallback whenever the configured API base URL isn't one of
19
- * the two shapes `deriveAppOrigin` recognizes below. */
20
- const PROD_APP_ORIGIN = 'https://app.botanary.xyz';
21
- /** Derive the Botanary APP origin (what an owner's browser visits) from the API base URL this runtime
22
- * is actually configured against, so the pairing deep link (`pairingUrl` below) lands on a LOCAL FE
23
- * when this server is pointed at a local stack, rather than always hardcoding production. Recognizes
24
- * two shapes:
25
- * - Production/staging: the API host is `api.` + the app host (`api.app.botanary.xyz` ->
26
- * `app.botanary.xyz`) - strip that one label.
27
- * - The local docker-compose stack (`../../docker-compose.yml`), which pairs BE :3000 with FE :3001.
28
- * Anything else - an unparseable URL, or a host this function does not recognize - falls back to the
29
- * production app origin: a deep link that opens the wrong (but real) app is safer than one built from
30
- * a guess that resolves nowhere. */
31
- export function deriveAppOrigin(apiBaseUrl) {
32
- let url;
33
- try {
34
- url = new URL(apiBaseUrl);
35
- }
36
- catch {
37
- return PROD_APP_ORIGIN;
38
- }
39
- if (url.hostname.startsWith('api.')) {
40
- return `${url.protocol}//${url.hostname.slice('api.'.length)}`;
41
- }
42
- if ((url.hostname === 'localhost' || url.hostname === '127.0.0.1') && url.port === '3000') {
43
- return `${url.protocol}//${url.hostname}:3001`;
44
- }
45
- return PROD_APP_ORIGIN;
20
+ /** The backend names a missing setup module in structured `details.missingModule` - see
21
+ * `BotanaryApiError.details`. Null for every other failure, so callers fall through to normal handling. */
22
+ function missingModuleOf(e) {
23
+ const details = e?.details;
24
+ const name = details?.missingModule;
25
+ return typeof name === 'string' && name.length > 0 ? name : null;
46
26
  }
47
27
  /**
48
28
  * Get the pairing code AND register it, because a code the backend has never heard of is not a pairing
@@ -87,8 +67,8 @@ function pairingView(pairing, identity, apiBaseUrl, registered = true) {
87
67
  };
88
68
  }
89
69
  /** Plain-English rendering of `GET /agents/me`'s `grant` field - built entirely from backend-reported
90
- * data (never a fabricated number), shared by `what_may_i_do` and `propose_payment`'s refusal path so
91
- * the two tools never describe the same grant two different ways. */
70
+ * data (never a fabricated number), shared by `what_may_i_do` and the `propose_payment`/`propose_swap`
71
+ * refusal paths so no two tools describe the same grant two different ways. */
92
72
  function describeGrant(self) {
93
73
  // Name the BOUND ACCOUNT, not just the agent. "This agent has no grant" and "you are looking at a
94
74
  // different account than the one this agent is paired to" produce the identical symptom in the app -
@@ -111,6 +91,26 @@ function describeGrant(self) {
111
91
  .join('; ');
112
92
  return `Grant status: ${g.status}. ${g.humanSummary}${meters ? ` Remaining: ${meters}.` : ''}`;
113
93
  }
94
+ /**
95
+ * The sentence that turns "this grant cannot actually be spent" into something the owner can act on,
96
+ * appended wherever a grant is DESCRIBED rather than attempted.
97
+ *
98
+ * Said up front, because the alternative is learning it by failing. A missing executor makes every action
99
+ * under the grant fail identically, and no retry changes it - so a `whoami` that reports an active grant
100
+ * with a healthy budget, and says nothing about the module that makes all of it inert, is telling the
101
+ * truth in a way that misleads. Empty string when setup is fine or the backend did not report it: absence
102
+ * of evidence is not a warning to invent.
103
+ */
104
+ function setupWarning(self, apiBaseUrl) {
105
+ const setup = self.accountSetup;
106
+ if (!setup || setup.ready)
107
+ return '';
108
+ const names = setup.missing.length ? setup.missing.join(', ') : 'a required component';
109
+ return (` HOWEVER, this account is missing ${names} on chain ${setup.chainId}, so nothing can actually be ` +
110
+ `spent under this grant yet - every attempt will be refused, and retrying cannot change that. ` +
111
+ `Installing it is an authority change only the owner can sign. Have them open ` +
112
+ `${setupUrl(apiBaseUrl, setup.chainId)} and complete setup, then this grant works as described.`);
113
+ }
114
114
  /** The spend meter for `tokenSymbol` on this grant, or undefined when the grant budgets no such token -
115
115
  * `spentToDate` is "one meter per budget, in the SAME order as policySet.budgets" (backend's own
116
116
  * invariant, `Delegation.spentToDate`'s doc comment), which is what makes this a plain index lookup. */
@@ -118,10 +118,87 @@ function findBudgetMeter(grant, tokenSymbol) {
118
118
  const idx = grant.policySet.budgets.findIndex((b) => b.token.symbol.toUpperCase() === tokenSymbol.toUpperCase());
119
119
  return idx === -1 ? undefined : grant.spentToDate[idx];
120
120
  }
121
+ /**
122
+ * THE THREE-OUTCOME DISCIPLINE, in one place, for every tool that relays under a grant.
123
+ *
124
+ * Called only AFTER the relay has already succeeded - the backend holds the signed op and gave us its id.
125
+ * Everything it does is FOLLOW-UP, which is the whole reason it exists as a shared function rather than as
126
+ * prose copied per tool: the three outcomes it keeps apart are the difference between a model reporting
127
+ * money that moved, money that provably did not, and an op whose fate is simply not known yet, and a
128
+ * second hand-written copy is a second chance to blur them.
129
+ *
130
+ * settled: true WITH `spent` - terminal AND successful ('included'). It landed.
131
+ * settled: true with `spent: null` - TERMINAL FAILURE. Nothing moved. Never report it as an action
132
+ * that happened; a mined revert has a txHash and moves nothing.
133
+ * settled: false - always carries `opId`. Still pending, or the follow-up read failed after a relay that
134
+ * SUCCEEDED. Call `get_action_status(opId)`; never resend, or the op runs twice.
135
+ *
136
+ * A throw anywhere in here is a failed STATUS READ, not a failed action, and must never be reported as
137
+ * one - hence the try/catch that falls through to the same "here is your handle" answer a timeout gives.
138
+ */
139
+ async function settleRelayedOp(runtime, opId, userOpHash,
140
+ /** What this op WAS, in the caller's own words - 'payment', 'swap'. Used verbatim in every warning. */
141
+ noun,
142
+ /** The payload attached as `spent` on success: what actually left the account. */
143
+ spent,
144
+ /** The sentence naming precisely what did NOT move, for the terminal-failure branch. */
145
+ nothingMoved) {
146
+ let final = null;
147
+ let followError = null;
148
+ try {
149
+ final = await runtime.awaitTerminal(opId, 30_000);
150
+ }
151
+ catch (e) {
152
+ followError = e instanceof Error ? e.message : String(e);
153
+ }
154
+ const status = final ? String(final.status ?? 'pending') : 'unknown';
155
+ if (!final || status === 'pending') {
156
+ return text({
157
+ proposed: true,
158
+ settled: false,
159
+ status,
160
+ opId,
161
+ userOpHash,
162
+ ...(followError ? { followError } : {}),
163
+ note: followError
164
+ ? 'The RELAY SUCCEEDED - the backend accepted the signed op and returned the opId above - ' +
165
+ `and only the follow-up status read failed (${followError}). The ${noun} may well have ` +
166
+ 'landed; this tool simply cannot see it right now. Call get_action_status(opId) to learn ' +
167
+ 'the outcome. Do NOT resend: the original op is live, and a resend would be a second ' +
168
+ `${noun}.`
169
+ : 'Relayed, but not yet terminal after 30s. This is NOT a failure and NOT a success - call ' +
170
+ 'get_action_status(opId) to learn the outcome. Do NOT resend: the original op is still ' +
171
+ `live, and a resend would be a second ${noun}.`,
172
+ });
173
+ }
174
+ // A terminal status is not the same as a SUCCESSFUL one: 'failed' is terminal too, and reporting
175
+ // `spent` for it would tell the model an action moved money that never left the account (a mined
176
+ // revert moves nothing). Only 'included' - the backend's own word for "this landed" - earns a
177
+ // `spent`; anything else says plainly that nothing moved.
178
+ const succeeded = status === 'included';
179
+ return text({
180
+ proposed: true,
181
+ settled: true,
182
+ status,
183
+ opId,
184
+ userOpHash,
185
+ txHash: final.txHash ?? null,
186
+ ...(succeeded
187
+ ? { spent }
188
+ : {
189
+ spent: null,
190
+ message: `The action reached a terminal status of "${status}" - it did NOT go through. ` +
191
+ `${nothingMoved} Report it as a ${noun} that did not happen; do ` +
192
+ 'not describe it as sent. Any txHash above is the on-chain record of the failure ' +
193
+ 'itself, not of a transfer.',
194
+ }),
195
+ receipt: final,
196
+ });
197
+ }
121
198
  /**
122
199
  * The MCP tool surface: report identity, report/regenerate the pairing code, pair with the backend,
123
- * report who I am, read balance, propose a payment under a grant, ask for approval when one is out of
124
- * grant, and read this agent's own bounds in plain terms.
200
+ * report who I am, read balance, propose a payment or a swap under a grant, ask for approval when one is
201
+ * out of grant, and read this agent's own bounds in plain terms.
125
202
  *
126
203
  * `forget`/`confirm_forget` ARE here, as a deliberate reversal of this package's earlier design - see
127
204
  * the README ("Why `forget` IS a tool, and what that costs"). The two-step token exists because a
@@ -130,9 +207,9 @@ function findBudgetMeter(grant, tokenSymbol) {
130
207
  * any grant are NOT touched by either tool - only the local key.
131
208
  *
132
209
  * No tool in this file returns a hardcoded success string. Every one either surfaces the backend's own
133
- * response verbatim, or - for `propose_payment`'s refusal path - a message built from backend-reported
134
- * numbers (never invented). A tool that cannot do what its description says fails loudly (an MCP error
135
- * result carrying the real reason), never quietly.
210
+ * response verbatim, or - for the `propose_payment`/`propose_swap` refusal paths - a message built from
211
+ * backend-reported numbers (never invented). A tool that cannot do what its description says fails loudly
212
+ * (an MCP error result carrying the real reason), never quietly.
136
213
  */
137
214
  export function createTools(runtime) {
138
215
  /** The pending `forget` confirmation. In MEMORY ONLY and per-server-process: a restart invalidates
@@ -226,7 +303,16 @@ export function createTools(runtime) {
226
303
  "this agent was never claimed, or was disconnected, the call fails honestly - it does not " +
227
304
  'report a fabricated "connected". Does NOT assess whether an action would actually succeed - use diagnose for that.',
228
305
  inputSchema: emptySchema(),
229
- run: async () => text(await runtime.me()),
306
+ run: async () => {
307
+ const self = await runtime.me();
308
+ const blocked = self.accountSetup && !self.accountSetup.ready;
309
+ // `whoami` is otherwise a passthrough of the backend's own row, and stays one - this ADDS the
310
+ // remedy alongside it rather than reshaping anything. An agent that reads "grant: active" here
311
+ // and nothing else would go on to fail every spend without knowing why.
312
+ return text(blocked
313
+ ? { ...self, setupUrl: setupUrl(runtime.apiBaseUrl, self.accountSetup?.chainId), setupRequired: setupWarning(self, runtime.apiBaseUrl).trim() }
314
+ : self);
315
+ },
230
316
  },
231
317
  {
232
318
  name: 'get_balance',
@@ -298,7 +384,12 @@ export function createTools(runtime) {
298
384
  "a session-key signature can validate; never the owner-lane /money/send/build) against THIS " +
299
385
  "agent's own grant id, then relays it signed with the grant's own session key (POST /userops), " +
300
386
  "returning the backend's real relay result. This client-side bounds check is a convenience, " +
301
- 'never the check - the chain is what actually enforces the grant. If this refuses, or the relay fails, call diagnose before retrying - a repeat with the same bounds fails identically.',
387
+ 'never the check - the chain is what actually enforces the grant. The result keeps three ' +
388
+ 'outcomes strictly apart: settled:true WITH `spent` means it landed; settled:true with ' +
389
+ '`spent: null` means it reached a terminal FAILURE and nothing moved (never report that as a ' +
390
+ 'payment); settled:false always carries an opId, meaning still pending or the follow-up read ' +
391
+ 'failed after a successful relay - call get_action_status(opId) and never resend. ' +
392
+ 'If this refuses, or the relay fails, call diagnose before retrying - a repeat with the same bounds fails identically.',
302
393
  inputSchema: {
303
394
  type: 'object',
304
395
  properties: {
@@ -375,20 +466,243 @@ export function createTools(runtime) {
375
466
  // with the grant's own session key. This check is a convenience, never the check: Smart Sessions'
376
467
  // own on-chain policies are what actually enforce the grant when the relay lands, and the backend
377
468
  // itself refuses (403, named reason) a delegation id that does not name this agent.
378
- const build = await runtime.buildDelegatedAction({
379
- delegationId: grant.id,
380
- recipient,
381
- amount,
382
- token: tokenSymbol,
383
- });
469
+ let build;
470
+ try {
471
+ build = await runtime.buildDelegatedAction({
472
+ delegationId: grant.id,
473
+ recipient,
474
+ amount,
475
+ token: tokenSymbol,
476
+ });
477
+ }
478
+ catch (e) {
479
+ // The one refusal with a remedy the OWNER can act on in a browser and this agent cannot act on
480
+ // at all. Hand back the address of that remedy rather than a bare "cannot succeed" - and say
481
+ // plainly that retrying is pointless, because nothing about a retry installs a module.
482
+ const missing = missingModuleOf(e);
483
+ if (!missing)
484
+ throw e;
485
+ return text({
486
+ proposed: false,
487
+ reason: 'account_setup_required',
488
+ missingModule: missing,
489
+ setupUrl: setupUrl(runtime.apiBaseUrl, grant.chainId),
490
+ message: `This account is missing ${missing} on chain ${grant.chainId} (${grant.chain}), so a ` +
491
+ 'payment under this grant cannot succeed. Nothing was built or sent, and retrying will ' +
492
+ 'fail identically - installing a module is an authority change only the owner can sign, ' +
493
+ 'and a session key cannot do it. Open the setupUrl above in a browser, sign the one-time ' +
494
+ 'setup, then ask me to try this payment again.',
495
+ });
496
+ }
384
497
  const token = await runtime.ensureSession();
385
498
  const relay = await runtime.spendUnderGrant(build.userOp, build.userOpHash, grant.permissionId, token, build.intentType);
386
- return text({
387
- proposed: true,
388
- userOpHash: build.userOpHash,
389
- relay,
390
- });
499
+ // Follow the op rather than reporting a bare `pending` and going quiet. The op id comes from the
500
+ // backend's own relay response - never invented here.
501
+ const opId = typeof relay?.id === 'string' ? relay.id : null;
502
+ if (!opId) {
503
+ return text({ proposed: true, settled: false, userOpHash: build.userOpHash, relay });
504
+ }
505
+ // THE RELAY HAS ALREADY SUCCEEDED by this line - the backend holds the signed op and gave us its
506
+ // id. Everything below is FOLLOW-UP, so a throw there (a 500 on the status read, a session re-mint
507
+ // that fails, a dropped connection) is not a failed payment and must never be reported as one.
508
+ // Unwrapped, it propagated as a bare error carrying neither the opId nor the do-not-resend
509
+ // instruction - and the agent's natural next move, resending, would move real money twice. That
510
+ // whole discipline lives in `settleRelayedOp`, shared with `propose_swap` so the two can never
511
+ // drift into describing the same three outcomes differently.
512
+ return settleRelayedOp(runtime, opId, build.userOpHash, 'payment', { amount, token: tokenSymbol }, `NOTHING moved: no ${tokenSymbol} left the account, the recipient received nothing, ` +
513
+ 'and the grant budget was not spent.');
514
+ },
515
+ },
516
+ {
517
+ name: 'propose_swap',
518
+ description: "COMPOSITE tool: Build and relay a SWAP under this agent's OWN grant - sell one token for " +
519
+ "another, in the account's own name, without the owner signing. Reads the grant's bounds and " +
520
+ 'permissionId from the backend (GET /agents/me) FIRST: when there is no grant, the grant is not ' +
521
+ 'active, it is on a different chain, the grant names NO swap venue at all (a transfer-only grant ' +
522
+ 'has no allowance action for a swap to validate against), the token being sold is not the one ' +
523
+ "token its venue pins, or the amount exceeds that venue's per-swap allowance ceiling, this " +
524
+ "refuses with the backend's own numbers and points at request_approval instead of attempting " +
525
+ 'anything - it never pretends to have swapped what it did not. Otherwise it builds the delegated ' +
526
+ "action (POST /delegations/{delegationId}/actions with action: 'swap' - the ONLY build lane a " +
527
+ 'session-key signature can validate; never the owner-lane /money/swap/build) against THIS ' +
528
+ "agent's own grant id, then relays it signed with the grant's own session key (POST /userops), " +
529
+ "returning the backend's real relay result. The ROUTE is the backend's to choose and the grant " +
530
+ 'pins exactly one router, so a best route through any other router is declined there, by name - ' +
531
+ 'this tool never picks a venue. This client-side bounds check is a convenience, never the check ' +
532
+ '- the chain is what actually enforces the grant. The result keeps three outcomes strictly ' +
533
+ 'apart: settled:true WITH `spent` means it landed; settled:true with `spent: null` means it ' +
534
+ 'reached a terminal FAILURE and nothing moved (never report that as a swap); settled:false ' +
535
+ 'always carries an opId, meaning still pending or the follow-up read failed after a successful ' +
536
+ 'relay - call get_action_status(opId) and never resend. ' +
537
+ 'If this refuses, or the relay fails, call diagnose before retrying - a repeat with the same bounds fails identically.',
538
+ inputSchema: {
539
+ type: 'object',
540
+ properties: {
541
+ tokenIn: {
542
+ type: 'string',
543
+ description: 'Symbol of the token being SOLD, e.g. "USDC". Must be the one token the grant\'s swap venue pins.',
544
+ },
545
+ tokenOut: {
546
+ type: 'string',
547
+ description: 'Symbol of the token being BOUGHT, e.g. "USDT". Unbounded by the grant - what the account receives only increases its holdings.',
548
+ },
549
+ amountIn: {
550
+ type: 'number',
551
+ description: 'Amount of tokenIn to sell, in DISPLAY units (e.g. 25 for 25 USDC) - never wei, never a hex string.',
552
+ },
553
+ chainId: { type: 'number', description: "Chain ID to swap on - must match the grant's own chain." },
554
+ maxSlippageBps: {
555
+ type: 'number',
556
+ description: 'Optional slippage ceiling in basis points (e.g. 50 for 0.5%). Omitted, the backend uses its own default.',
557
+ },
558
+ },
559
+ required: ['tokenIn', 'tokenOut', 'amountIn', 'chainId'],
560
+ },
561
+ run: async (args) => {
562
+ const tokenIn = String(args.tokenIn);
563
+ const tokenOut = String(args.tokenOut);
564
+ const amountIn = Number(args.amountIn);
565
+ const chainId = Number(args.chainId);
566
+ const maxSlippageBps = typeof args.maxSlippageBps === 'number' ? args.maxSlippageBps : undefined;
567
+ // BOUNDS FIRST, exactly as propose_payment does, and for the same reason: the refusals below are
568
+ // the ones this side can make honestly from backend-reported facts, and making them here means an
569
+ // out-of-grant swap costs no build, no signature and no relay.
570
+ const self = await runtime.me();
571
+ if (!self.grant) {
572
+ return text({
573
+ proposed: false,
574
+ reason: 'no_grant',
575
+ message: `${describeGrant(self)} Nothing was built or sent.`,
576
+ });
577
+ }
578
+ const grant = self.grant;
579
+ if (grant.status !== 'active') {
580
+ return text({
581
+ proposed: false,
582
+ reason: 'grant_not_active',
583
+ message: `This grant is "${grant.status}", not active, so it cannot be spent under. Nothing was ` +
584
+ 'built or sent. Use request_approval to ask the owner directly.',
585
+ });
586
+ }
587
+ if (grant.chainId !== chainId) {
588
+ return text({
589
+ proposed: false,
590
+ reason: 'wrong_chain',
591
+ message: `This grant is on chain ${grant.chainId} (${grant.chain}), not chain ${chainId}. Nothing ` +
592
+ 'was built or sent. A grant\'s allowance, meter and session are per-chain storage on one ' +
593
+ 'account, so there is nothing on another chain for it to bound. Use request_approval if ' +
594
+ 'this swap genuinely needs that chain.',
595
+ });
596
+ }
597
+ // THE REFUSAL THAT IS NOT A BUDGET CHECK. A grant compiled with no `swapVenue` carries only the
598
+ // transfer action - its session has no allowance entrypoint at all, so a swap op under it is not
599
+ // "over budget", it is unvalidatable. The backend records the venue on the grant precisely so
600
+ // this is answerable without a chain read: a compiled session cannot be read back from a
601
+ // permissionId, and inventing an answer here would mean relaying an op that always reverts.
602
+ const venue = grant.policySet.swapVenue;
603
+ if (!venue) {
604
+ return text({
605
+ proposed: false,
606
+ reason: 'no_swap_venue',
607
+ message: `This grant was given for transfers only - it names no swap venue, so its session carries ` +
608
+ 'no allowance action for a swap to validate against, and no amount is small enough to ' +
609
+ 'change that. Nothing was built or sent. Ask the owner for a new grant naming the router ' +
610
+ 'and token it may swap, or use request_approval for this one swap.',
611
+ });
612
+ }
613
+ if (venue.token.symbol.toUpperCase() !== tokenIn.toUpperCase()) {
614
+ return text({
615
+ proposed: false,
616
+ reason: 'token_not_venue_token',
617
+ message: `This grant may only swap ${venue.token.symbol}, not ${tokenIn} - its session pins the ` +
618
+ 'sold token exactly, and any other would be refused in validation. Nothing was built or ' +
619
+ 'sent. Use request_approval instead.',
620
+ });
621
+ }
622
+ if (amountIn > venue.maxAllowance) {
623
+ return text({
624
+ proposed: false,
625
+ reason: 'over_venue_allowance',
626
+ message: `This grant allows at most ${venue.maxAllowance} ${venue.token.symbol} per swap; ` +
627
+ `${amountIn} ${tokenIn} exceeds it. Nothing was built or sent. Use request_approval to ask ` +
628
+ 'the owner for this specific swap.',
629
+ });
630
+ }
631
+ // The grant's ordinary spend meter applies TOO - the venue ceiling caps one swap, the budget caps
632
+ // the lifetime - so a swap within the ceiling but over what is left is still refused here, with
633
+ // the backend's own remaining figure rather than a guess.
634
+ const meter = findBudgetMeter(grant, tokenIn);
635
+ if (meter && amountIn > meter.remaining) {
636
+ return text({
637
+ proposed: false,
638
+ reason: 'over_budget',
639
+ message: `This grant has ${meter.remaining} ${tokenIn} remaining (of ${meter.limit} total); ` +
640
+ `${amountIn} ${tokenIn} would exceed it. Nothing was built or sent. Use request_approval ` +
641
+ 'to ask the owner for this specific swap.',
642
+ });
643
+ }
644
+ // Within the client-read bounds - build AGAINST THIS AGENT'S OWN GRANT ID (grant.id, from
645
+ // GET /agents/me), then relay it signed with the grant's own session key. The router is the
646
+ // BACKEND's to resolve: it quotes the route, checks it against the one router the venue pins, and
647
+ // declines by name when they disagree. This side never picks a venue.
648
+ let build;
649
+ try {
650
+ build = await runtime.buildDelegatedSwap({
651
+ delegationId: grant.id,
652
+ tokenIn,
653
+ tokenOut,
654
+ amountIn,
655
+ ...(maxSlippageBps != null ? { maxSlippageBps } : {}),
656
+ });
657
+ }
658
+ catch (e) {
659
+ // Same one refusal with an owner-only remedy the payment lane has - see its comment. A session
660
+ // key cannot install a module, so retrying is pointless and saying so is the honest answer.
661
+ const missing = missingModuleOf(e);
662
+ if (!missing)
663
+ throw e;
664
+ return text({
665
+ proposed: false,
666
+ reason: 'account_setup_required',
667
+ missingModule: missing,
668
+ setupUrl: setupUrl(runtime.apiBaseUrl, grant.chainId),
669
+ message: `This account is missing ${missing} on chain ${grant.chainId} (${grant.chain}), so a ` +
670
+ 'swap under this grant cannot succeed. Nothing was built or sent, and retrying will ' +
671
+ 'fail identically - installing a module is an authority change only the owner can sign, ' +
672
+ 'and a session key cannot do it. Open the setupUrl above in a browser, sign the one-time ' +
673
+ 'setup, then ask me to try this swap again.',
674
+ });
675
+ }
676
+ const token = await runtime.ensureSession();
677
+ const relay = await runtime.spendUnderGrant(build.userOp, build.userOpHash, grant.permissionId, token, build.intentType);
678
+ const opId = typeof relay?.id === 'string' ? relay.id : null;
679
+ if (!opId) {
680
+ return text({ proposed: true, settled: false, userOpHash: build.userOpHash, relay });
681
+ }
682
+ // THE RELAY HAS ALREADY SUCCEEDED by this line - see `settleRelayedOp`, which owns the three
683
+ // outcomes from here and is the SAME code propose_payment settles through.
684
+ return settleRelayedOp(runtime, opId, build.userOpHash, 'swap', { amount: amountIn, token: tokenIn }, `NOTHING moved: no ${tokenIn} left the account, no ${tokenOut} was received, ` +
685
+ 'and the grant budget was not spent.');
686
+ },
687
+ },
688
+ {
689
+ name: 'get_action_status',
690
+ description: 'THIN tool (one GET, returned unmodified): ' +
691
+ "Read the current status of an action THIS agent relayed, by the op id propose_payment returned. " +
692
+ "Returns the backend's own receipt verbatim: status is pending | included | failed, with txHash " +
693
+ 'once one exists. Call this when propose_payment came back with settled:false - it is the ONLY ' +
694
+ 'correct follow-up. Never resend the payment to find out what happened: the original op is still ' +
695
+ 'live and a resend would move funds a second time. A status that stays pending for a long time ' +
696
+ 'means the backend has stopped watching, not that the payment failed - the transaction may still ' +
697
+ 'have landed, so report it as unknown rather than guessing either way.',
698
+ inputSchema: {
699
+ type: 'object',
700
+ properties: {
701
+ opId: { type: 'string', description: 'The op id returned by propose_payment (op_...).' },
702
+ },
703
+ required: ['opId'],
391
704
  },
705
+ run: async (args) => text(await runtime.getUserOp(String(args.opId))),
392
706
  },
393
707
  {
394
708
  name: 'request_approval',
@@ -433,10 +747,19 @@ export function createTools(runtime) {
433
747
  inputSchema: emptySchema(),
434
748
  run: async () => {
435
749
  const self = await runtime.me();
750
+ const blocked = self.accountSetup && !self.accountSetup.ready;
436
751
  return text({
437
752
  agent: { address: self.address, name: self.name, accountId: self.accountId },
438
753
  grant: self.grant,
439
- summary: describeGrant(self),
754
+ // Surfaced as its own field as well as in the sentence: a caller that branches on structure
755
+ // should not have to parse prose to find out the grant is inert.
756
+ ...(blocked
757
+ ? {
758
+ accountSetup: self.accountSetup,
759
+ setupUrl: setupUrl(runtime.apiBaseUrl, self.accountSetup?.chainId),
760
+ }
761
+ : {}),
762
+ summary: describeGrant(self) + setupWarning(self, runtime.apiBaseUrl),
440
763
  });
441
764
  },
442
765
  },
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "botanary-mcp",
3
3
  "type": "module",
4
- "version": "0.2.0",
4
+ "version": "0.3.0",
5
5
  "description": "Botanary's agent connector: a local MCP server that lets an outside coding agent (Claude Code, Codex, Cursor, or a custom build) generate its own signing key, keep it in the OS keychain, pair with a Botanary account, read its balance, and spend under whatever grant its owner gave it - refusing honestly, never fabricating success, the moment it has none.",
6
6
  "license": "UNLICENSED",
7
7
  "homepage": "https://docs.botanary.xyz",