@arcnow/mcp 0.1.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/LICENSE +674 -0
- package/README.md +624 -0
- package/dist/client-options.d.ts +16 -0
- package/dist/client-options.d.ts.map +1 -0
- package/dist/client-options.js +22 -0
- package/dist/client-options.js.map +1 -0
- package/dist/config.d.ts +223 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +516 -0
- package/dist/config.js.map +1 -0
- package/dist/format.d.ts +79 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +164 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/sdk-port.d.ts +227 -0
- package/dist/sdk-port.d.ts.map +1 -0
- package/dist/sdk-port.js +144 -0
- package/dist/sdk-port.js.map +1 -0
- package/dist/server.d.ts +25 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +103 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/errors.d.ts +44 -0
- package/dist/tools/errors.d.ts.map +1 -0
- package/dist/tools/errors.js +231 -0
- package/dist/tools/errors.js.map +1 -0
- package/dist/tools/index.d.ts +35 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +59 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/launch-params.d.ts +27 -0
- package/dist/tools/launch-params.d.ts.map +1 -0
- package/dist/tools/launch-params.js +29 -0
- package/dist/tools/launch-params.js.map +1 -0
- package/dist/tools/pool.d.ts +84 -0
- package/dist/tools/pool.d.ts.map +1 -0
- package/dist/tools/pool.js +249 -0
- package/dist/tools/pool.js.map +1 -0
- package/dist/tools/quote.d.ts +53 -0
- package/dist/tools/quote.d.ts.map +1 -0
- package/dist/tools/quote.js +85 -0
- package/dist/tools/quote.js.map +1 -0
- package/dist/tools/read.d.ts +26 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +920 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/resolve.d.ts +45 -0
- package/dist/tools/resolve.d.ts.map +1 -0
- package/dist/tools/resolve.js +75 -0
- package/dist/tools/resolve.js.map +1 -0
- package/dist/tools/schema.d.ts +98 -0
- package/dist/tools/schema.d.ts.map +1 -0
- package/dist/tools/schema.js +143 -0
- package/dist/tools/schema.js.map +1 -0
- package/dist/tools/spend.d.ts +45 -0
- package/dist/tools/spend.d.ts.map +1 -0
- package/dist/tools/spend.js +99 -0
- package/dist/tools/spend.js.map +1 -0
- package/dist/tools/venue.d.ts +67 -0
- package/dist/tools/venue.d.ts.map +1 -0
- package/dist/tools/venue.js +110 -0
- package/dist/tools/venue.js.map +1 -0
- package/dist/tools/write.d.ts +56 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +950 -0
- package/dist/tools/write.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning "an address" into "the curve, and what it currently says".
|
|
3
|
+
*
|
|
4
|
+
* A launch produces two addresses, a token and a curve, and a person holding
|
|
5
|
+
* one of them rarely knows which it is. Every trading tool here therefore
|
|
6
|
+
* accepts either, and resolves it by asking the chain rather than by guessing
|
|
7
|
+
* from the shape of the string — there is nothing in an address to guess from.
|
|
8
|
+
*
|
|
9
|
+
* The SDK answers the first question — is this a bonding curve? — with a code:
|
|
10
|
+
* `AddressIsNotACurve` for an address that is not one (a token, an ERC-20, an
|
|
11
|
+
* account, nothing), `UnknownCurveVersion` for a curve of a version it cannot
|
|
12
|
+
* price, `RpcFailure` when the question never reached the chain. Only the first
|
|
13
|
+
* is followed as a token.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import type { Address } from "viem";
|
|
18
|
+
import type { ArcNowError, CurveState } from "@arcnow/sdk";
|
|
19
|
+
import type { ArcNowPort, CurveHandle } from "../sdk-port.js";
|
|
20
|
+
export interface ResolvedCurve {
|
|
21
|
+
readonly curve: CurveHandle;
|
|
22
|
+
readonly state: CurveState;
|
|
23
|
+
/** True when the caller handed us a token address and we followed it. */
|
|
24
|
+
readonly viaToken: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** Raised when an address is neither a curve nor a launched token. */
|
|
27
|
+
export declare class NotArcNowError extends Error {
|
|
28
|
+
readonly name = "NotArcNowError";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The SDK's `AddressIsNotACurve` for an address that, read as a token, names no
|
|
32
|
+
* curve either — kept whole, so the refusal a model reads is the SDK's own,
|
|
33
|
+
* saying what the address claimed to be.
|
|
34
|
+
*/
|
|
35
|
+
export declare class NotACurveOrTokenError extends Error {
|
|
36
|
+
readonly refusal: ArcNowError;
|
|
37
|
+
readonly name = "NotACurveOrTokenError";
|
|
38
|
+
constructor(refusal: ArcNowError);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Try the address as a curve; failing that, as a token whose `curve()` points
|
|
42
|
+
* at one. Two round trips in the worst case, one in the common one.
|
|
43
|
+
*/
|
|
44
|
+
export declare function resolveCurve(port: ArcNowPort, address: Address): Promise<ResolvedCurve>;
|
|
45
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/tools/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG3D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG9D,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,sEAAsE;AACtE,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAkB,IAAI,oBAAoB;CAC3C;AAED;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;IAGlC,QAAQ,CAAC,OAAO,EAAE,WAAW;IAFzC,SAAkB,IAAI,2BAA2B;gBAE5B,OAAO,EAAE,WAAW;CAG1C;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAoC7F"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning "an address" into "the curve, and what it currently says".
|
|
3
|
+
*
|
|
4
|
+
* A launch produces two addresses, a token and a curve, and a person holding
|
|
5
|
+
* one of them rarely knows which it is. Every trading tool here therefore
|
|
6
|
+
* accepts either, and resolves it by asking the chain rather than by guessing
|
|
7
|
+
* from the shape of the string — there is nothing in an address to guess from.
|
|
8
|
+
*
|
|
9
|
+
* The SDK answers the first question — is this a bonding curve? — with a code:
|
|
10
|
+
* `AddressIsNotACurve` for an address that is not one (a token, an ERC-20, an
|
|
11
|
+
* account, nothing), `UnknownCurveVersion` for a curve of a version it cannot
|
|
12
|
+
* price, `RpcFailure` when the question never reached the chain. Only the first
|
|
13
|
+
* is followed as a token.
|
|
14
|
+
*
|
|
15
|
+
* @module
|
|
16
|
+
*/
|
|
17
|
+
import { isArcNowError } from "@arcnow/sdk";
|
|
18
|
+
import { ZERO_ADDRESS } from "../format.js";
|
|
19
|
+
/** Raised when an address is neither a curve nor a launched token. */
|
|
20
|
+
export class NotArcNowError extends Error {
|
|
21
|
+
name = "NotArcNowError";
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The SDK's `AddressIsNotACurve` for an address that, read as a token, names no
|
|
25
|
+
* curve either — kept whole, so the refusal a model reads is the SDK's own,
|
|
26
|
+
* saying what the address claimed to be.
|
|
27
|
+
*/
|
|
28
|
+
export class NotACurveOrTokenError extends Error {
|
|
29
|
+
refusal;
|
|
30
|
+
name = "NotACurveOrTokenError";
|
|
31
|
+
constructor(refusal) {
|
|
32
|
+
super(refusal.message);
|
|
33
|
+
this.refusal = refusal;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Try the address as a curve; failing that, as a token whose `curve()` points
|
|
38
|
+
* at one. Two round trips in the worst case, one in the common one.
|
|
39
|
+
*/
|
|
40
|
+
export async function resolveCurve(port, address) {
|
|
41
|
+
try {
|
|
42
|
+
const curve = port.curve(address);
|
|
43
|
+
return { curve, state: await curve.state(), viaToken: false };
|
|
44
|
+
}
|
|
45
|
+
catch (curveError) {
|
|
46
|
+
// Two answers end here rather than being followed as a token: a bonding
|
|
47
|
+
// curve of a version the SDK cannot price IS a curve, and a question that
|
|
48
|
+
// never reached the chain says nothing about what the address is.
|
|
49
|
+
if (isArcNowError(curveError)
|
|
50
|
+
&& (curveError.code === "UnknownCurveVersion" || curveError.code === "RpcFailure")) {
|
|
51
|
+
throw curveError;
|
|
52
|
+
}
|
|
53
|
+
let curveAddress;
|
|
54
|
+
try {
|
|
55
|
+
curveAddress = await port.token(address).curve();
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
if (isArcNowError(curveError) && curveError.code === "AddressIsNotACurve") {
|
|
59
|
+
throw new NotACurveOrTokenError(curveError);
|
|
60
|
+
}
|
|
61
|
+
throw new NotArcNowError(`${address} does not answer as an arcnow.io bonding curve, and does not answer as `
|
|
62
|
+
+ "an arcnow.io token either. It may belong to a different chain than this server "
|
|
63
|
+
+ "is pointed at, or to nothing at all. A launch gives you two addresses — the "
|
|
64
|
+
+ "token and its curve — and either one works here; anything else does not."
|
|
65
|
+
+ (isArcNowError(curveError) ? `\n\nReading it as a curve said: ${curveError.message}` : ""));
|
|
66
|
+
}
|
|
67
|
+
if (curveAddress.toLowerCase() === ZERO_ADDRESS) {
|
|
68
|
+
throw new NotArcNowError(`${address} answers as a token but names no curve, which should not happen for a `
|
|
69
|
+
+ "token this launchpad created. Treat it as not an arcnow.io token.");
|
|
70
|
+
}
|
|
71
|
+
const curve = port.curve(curveAddress);
|
|
72
|
+
return { curve, state: await curve.state(), viaToken: true };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/tools/resolve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAS5C,sEAAsE;AACtE,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAC;CAC3C;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAGzB;IAFH,IAAI,GAAG,uBAAuB,CAAC;IAEjD,YAAqB,OAAoB;QACvC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QADJ,YAAO,GAAP,OAAO,CAAa;IAEzC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAgB,EAAE,OAAgB;IACnE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,wEAAwE;QACxE,0EAA0E;QAC1E,kEAAkE;QAClE,IAAI,aAAa,CAAC,UAAU,CAAC;eACxB,CAAC,UAAU,CAAC,IAAI,KAAK,qBAAqB,IAAI,UAAU,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;YACrF,MAAM,UAAU,CAAC;QACnB,CAAC;QACD,IAAI,YAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBAC1E,MAAM,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,IAAI,cAAc,CACtB,GAAG,OAAO,yEAAyE;kBACjF,iFAAiF;kBACjF,8EAA8E;kBAC9E,0EAA0E;kBAC1E,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,mCAAmC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC7F,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,YAAY,EAAE,CAAC;YAChD,MAAM,IAAI,cAAc,CACtB,GAAG,OAAO,wEAAwE;kBAChF,mEAAmE,CACtE,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC/D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool definitions, and the two rules every one of them obeys.
|
|
3
|
+
*
|
|
4
|
+
* # 1. Arguments are strict
|
|
5
|
+
*
|
|
6
|
+
* Every input schema is a `strictObject`, so an argument this server did not
|
|
7
|
+
* ask for is a **refusal**, not a silently ignored key. That matters for
|
|
8
|
+
* exactly one reason: if a model — prompted by a page, a token name, or a
|
|
9
|
+
* user who was told to — tries to pass `privateKey`, `mnemonic` or
|
|
10
|
+
* `signerSecret`, the call fails and says so, instead of dropping the field on
|
|
11
|
+
* the floor and leaving the secret in the transcript anyway. The failure is the
|
|
12
|
+
* point; the secret is already spent either way, but the operator finds out.
|
|
13
|
+
*
|
|
14
|
+
* # 2. Money is a decimal string, never a JSON number
|
|
15
|
+
*
|
|
16
|
+
* `25.5` as a JSON number is an IEEE double, and a double cannot hold
|
|
17
|
+
* `0.000193050193050194` — the shipped curve's last price — or any 18-decimal
|
|
18
|
+
* quantity worth more than about nine million. Amounts therefore cross this
|
|
19
|
+
* boundary as strings and are parsed by the SDK's `QuoteAmount.parse` — in the
|
|
20
|
+
* decimals of the quote the amount is in, 18 for native USDC, 6 for EURC — or
|
|
21
|
+
* `Tokens.parse`, both of which reject a decimal place too many rather than
|
|
22
|
+
* truncating it.
|
|
23
|
+
*
|
|
24
|
+
* @module
|
|
25
|
+
*/
|
|
26
|
+
import { z } from "zod";
|
|
27
|
+
export { z };
|
|
28
|
+
import type { ArcNowPort } from "../sdk-port.js";
|
|
29
|
+
import type { ServerConfig } from "../config.js";
|
|
30
|
+
/** What a handler is given besides its arguments. */
|
|
31
|
+
export interface ToolContext {
|
|
32
|
+
readonly port: ArcNowPort;
|
|
33
|
+
readonly config: ServerConfig;
|
|
34
|
+
}
|
|
35
|
+
/** What a handler returns: one readable report, and whether it is a failure. */
|
|
36
|
+
export interface ToolOutput {
|
|
37
|
+
readonly text: string;
|
|
38
|
+
readonly isError?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `read` tools cannot sign, cannot spend and are always published. `write`
|
|
42
|
+
* tools are published only when the operator opted in at startup, and are
|
|
43
|
+
* refused by name — not hidden behind "unknown tool" — when they did not.
|
|
44
|
+
*/
|
|
45
|
+
export type ToolAccess = "read" | "write";
|
|
46
|
+
export interface AnyTool {
|
|
47
|
+
readonly name: string;
|
|
48
|
+
readonly title: string;
|
|
49
|
+
readonly access: ToolAccess;
|
|
50
|
+
readonly description: string;
|
|
51
|
+
readonly inputSchema: Record<string, unknown>;
|
|
52
|
+
readonly annotations: {
|
|
53
|
+
readonly title: string;
|
|
54
|
+
readonly readOnlyHint: boolean;
|
|
55
|
+
readonly destructiveHint: boolean;
|
|
56
|
+
readonly idempotentHint: boolean;
|
|
57
|
+
readonly openWorldHint: boolean;
|
|
58
|
+
};
|
|
59
|
+
run(rawArgs: unknown, ctx: ToolContext): Promise<ToolOutput>;
|
|
60
|
+
}
|
|
61
|
+
export interface ToolSpec<Shape extends z.ZodRawShape> {
|
|
62
|
+
readonly name: string;
|
|
63
|
+
readonly title: string;
|
|
64
|
+
readonly access: ToolAccess;
|
|
65
|
+
/**
|
|
66
|
+
* `destructive` means "this cannot be undone by calling something else".
|
|
67
|
+
* A launch is destructive. A buy is not — it can be sold back, at a price.
|
|
68
|
+
*/
|
|
69
|
+
readonly destructive?: boolean;
|
|
70
|
+
readonly idempotent?: boolean;
|
|
71
|
+
readonly description: string;
|
|
72
|
+
readonly input: Shape;
|
|
73
|
+
run(args: z.infer<z.ZodObject<Shape>>, ctx: ToolContext): Promise<ToolOutput>;
|
|
74
|
+
}
|
|
75
|
+
export declare function defineTool<Shape extends z.ZodRawShape>(spec: ToolSpec<Shape>): AnyTool;
|
|
76
|
+
export declare function addressArg(description: string): z.ZodString;
|
|
77
|
+
export declare function decimalArg(description: string): z.ZodString;
|
|
78
|
+
export declare function slippageArg(): z.ZodNumber;
|
|
79
|
+
export declare function intArg(min: number, max: number, fallback: number, description: string): z.ZodDefault<z.ZodNumber>;
|
|
80
|
+
export declare function boolArg(fallback: boolean, description: string): z.ZodDefault<z.ZodBoolean>;
|
|
81
|
+
export declare function textArg(max: number, description: string): z.ZodString;
|
|
82
|
+
export declare function metadataUriArg(): z.ZodString;
|
|
83
|
+
/**
|
|
84
|
+
* The one argument that makes a write tool's cost a stated intention rather
|
|
85
|
+
* than an open tab.
|
|
86
|
+
*
|
|
87
|
+
* The caller names the most it believes this call will spend. The server takes
|
|
88
|
+
* a fresh quote, and if the real cost is above that number it refuses and shows
|
|
89
|
+
* both figures. It catches a quote that went stale between being shown to a
|
|
90
|
+
* person and being acted on, a curve that moved, and a model that was talked
|
|
91
|
+
* into spending more than the conversation agreed to — none of which the
|
|
92
|
+
* operator's ceiling catches on its own, because that ceiling is a single
|
|
93
|
+
* number for the whole session.
|
|
94
|
+
*/
|
|
95
|
+
export declare function maxCostArg(what: string): z.ZodString;
|
|
96
|
+
/** A decimal amount in the quote token the trade is priced in. */
|
|
97
|
+
export declare function quoteAmountArg(description: string): z.ZodString;
|
|
98
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool definitions, and the two rules every one of them obeys.
|
|
3
|
+
*
|
|
4
|
+
* # 1. Arguments are strict
|
|
5
|
+
*
|
|
6
|
+
* Every input schema is a `strictObject`, so an argument this server did not
|
|
7
|
+
* ask for is a **refusal**, not a silently ignored key. That matters for
|
|
8
|
+
* exactly one reason: if a model — prompted by a page, a token name, or a
|
|
9
|
+
* user who was told to — tries to pass `privateKey`, `mnemonic` or
|
|
10
|
+
* `signerSecret`, the call fails and says so, instead of dropping the field on
|
|
11
|
+
* the floor and leaving the secret in the transcript anyway. The failure is the
|
|
12
|
+
* point; the secret is already spent either way, but the operator finds out.
|
|
13
|
+
*
|
|
14
|
+
* # 2. Money is a decimal string, never a JSON number
|
|
15
|
+
*
|
|
16
|
+
* `25.5` as a JSON number is an IEEE double, and a double cannot hold
|
|
17
|
+
* `0.000193050193050194` — the shipped curve's last price — or any 18-decimal
|
|
18
|
+
* quantity worth more than about nine million. Amounts therefore cross this
|
|
19
|
+
* boundary as strings and are parsed by the SDK's `QuoteAmount.parse` — in the
|
|
20
|
+
* decimals of the quote the amount is in, 18 for native USDC, 6 for EURC — or
|
|
21
|
+
* `Tokens.parse`, both of which reject a decimal place too many rather than
|
|
22
|
+
* truncating it.
|
|
23
|
+
*
|
|
24
|
+
* @module
|
|
25
|
+
*/
|
|
26
|
+
import { z } from "zod";
|
|
27
|
+
export { z };
|
|
28
|
+
export function defineTool(spec) {
|
|
29
|
+
const schema = z.strictObject(spec.input);
|
|
30
|
+
return {
|
|
31
|
+
name: spec.name,
|
|
32
|
+
title: spec.title,
|
|
33
|
+
access: spec.access,
|
|
34
|
+
description: spec.description,
|
|
35
|
+
inputSchema: z.toJSONSchema(schema, { io: "input" }),
|
|
36
|
+
annotations: {
|
|
37
|
+
title: spec.title,
|
|
38
|
+
readOnlyHint: spec.access === "read",
|
|
39
|
+
destructiveHint: spec.destructive ?? false,
|
|
40
|
+
idempotentHint: spec.idempotent ?? spec.access === "read",
|
|
41
|
+
// Every one of these reads a public blockchain.
|
|
42
|
+
openWorldHint: true,
|
|
43
|
+
},
|
|
44
|
+
async run(rawArgs, ctx) {
|
|
45
|
+
const parsed = schema.safeParse(rawArgs ?? {});
|
|
46
|
+
if (!parsed.success) {
|
|
47
|
+
return { isError: true, text: explainParseFailure(spec.name, parsed.error) };
|
|
48
|
+
}
|
|
49
|
+
return spec.run(parsed.data, ctx);
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const SECRET_LOOKING = /(private|secret|mnemonic|seed|passphrase|password|key)/i;
|
|
54
|
+
function explainParseFailure(tool, error) {
|
|
55
|
+
const lines = error.issues.map((issue) => {
|
|
56
|
+
const path = issue.path.length > 0 ? issue.path.join(".") : "(root)";
|
|
57
|
+
return ` ${path}: ${issue.message}`;
|
|
58
|
+
});
|
|
59
|
+
const unrecognised = error.issues.flatMap((issue) => issue.code === "unrecognized_keys" ? issue.keys : []);
|
|
60
|
+
const secretish = unrecognised.filter((k) => SECRET_LOOKING.test(k));
|
|
61
|
+
const extra = secretish.length > 0
|
|
62
|
+
? "\n\nOne of those is named like a credential. No tool on this server takes a key, a "
|
|
63
|
+
+ "mnemonic or any other secret as an argument, and this one did not silently ignore "
|
|
64
|
+
+ "it — it refused. A tool argument is written into a transcript, and a key that has "
|
|
65
|
+
+ "been through a transcript has been published. If that value is real, ROTATE IT. "
|
|
66
|
+
+ "Signing is configured by whoever starts the server, from the environment."
|
|
67
|
+
: "";
|
|
68
|
+
return `${tool}: those arguments were not accepted.\n${lines.join("\n")}${extra}`;
|
|
69
|
+
}
|
|
70
|
+
// ── shared argument shapes ───────────────────────────────────────────────────
|
|
71
|
+
// Built by functions rather than shared constants so that no two tools share a
|
|
72
|
+
// schema object; a shared instance is what makes zod emit `$ref`/`$defs`, and a
|
|
73
|
+
// tool schema full of references is harder for a model to read than one that
|
|
74
|
+
// repeats itself.
|
|
75
|
+
const ADDRESS = /^0x[0-9a-fA-F]{40}$/;
|
|
76
|
+
const DECIMAL = /^\d{1,30}(\.\d{1,18})?$/;
|
|
77
|
+
export function addressArg(description) {
|
|
78
|
+
return z.string().regex(ADDRESS, "expected a 0x-prefixed 20-byte address").describe(description);
|
|
79
|
+
}
|
|
80
|
+
export function decimalArg(description) {
|
|
81
|
+
return z.string().regex(DECIMAL, "expected a decimal amount as a string, e.g. \"25\" or \"1.5\" — not a JSON number, "
|
|
82
|
+
+ "which cannot hold 18 decimals exactly").describe(description);
|
|
83
|
+
}
|
|
84
|
+
export function slippageArg() {
|
|
85
|
+
return z.number().int().min(0).max(10_000).describe("Slippage tolerance in basis points, applied to a quote taken in this same call to "
|
|
86
|
+
+ "produce the on-chain minimum-out floor. 50 = 0.5%. There is no default and there "
|
|
87
|
+
+ "will not be one: 0 means \"fill me at any price\", which on a public mempool is a "
|
|
88
|
+
+ "donation, so it has to be typed. On a bonding curve the price rises across your own "
|
|
89
|
+
+ "order, so a floor is protection against other people's orders landing first, not "
|
|
90
|
+
+ "against your own impact — that is already in the quote.");
|
|
91
|
+
}
|
|
92
|
+
export function intArg(min, max, fallback, description) {
|
|
93
|
+
return z.number().int().min(min).max(max).default(fallback).describe(description);
|
|
94
|
+
}
|
|
95
|
+
export function boolArg(fallback, description) {
|
|
96
|
+
return z.boolean().default(fallback).describe(description);
|
|
97
|
+
}
|
|
98
|
+
export function textArg(max, description) {
|
|
99
|
+
return z.string().min(1).max(max).describe(description);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Why a launch cannot go without a metadata URI, said where the argument is refused.
|
|
103
|
+
*
|
|
104
|
+
* `Launchpad.launch` reverts with `InvalidLaunchParameters` when the URI is empty,
|
|
105
|
+
* (`src/Launchpad.sol:186-192`). `quoteLaunch` does not
|
|
106
|
+
* check it, so the refusal lives here, in the schema both launch tools share:
|
|
107
|
+
* before any quote, any RPC call or any transaction.
|
|
108
|
+
*/
|
|
109
|
+
const METADATA_URI_REQUIRED = "a metadata URI is required — the launchpad reverts a launch whose URI is empty "
|
|
110
|
+
+ "(InvalidLaunchParameters), so a token cannot be launched without one";
|
|
111
|
+
export function metadataUriArg() {
|
|
112
|
+
return z.string({
|
|
113
|
+
error: (issue) => (issue.input === undefined ? METADATA_URI_REQUIRED : undefined),
|
|
114
|
+
}).min(1, METADATA_URI_REQUIRED).max(512).describe("REQUIRED. An ipfs:// or https:// URI for the token's metadata — image, description, "
|
|
115
|
+
+ "links. The launchpad reverts a launch whose URI is empty (InvalidLaunchParameters), so "
|
|
116
|
+
+ "there is no launching without one. Permanent: it is stamped into the token at launch "
|
|
117
|
+
+ "and there is no setter.");
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The one argument that makes a write tool's cost a stated intention rather
|
|
121
|
+
* than an open tab.
|
|
122
|
+
*
|
|
123
|
+
* The caller names the most it believes this call will spend. The server takes
|
|
124
|
+
* a fresh quote, and if the real cost is above that number it refuses and shows
|
|
125
|
+
* both figures. It catches a quote that went stale between being shown to a
|
|
126
|
+
* person and being acted on, a curve that moved, and a model that was talked
|
|
127
|
+
* into spending more than the conversation agreed to — none of which the
|
|
128
|
+
* operator's ceiling catches on its own, because that ceiling is a single
|
|
129
|
+
* number for the whole session.
|
|
130
|
+
*/
|
|
131
|
+
export function maxCostArg(what) {
|
|
132
|
+
return z.string().regex(/^\d{1,30}(\.\d{1,18})?$/, "expected a decimal amount as a string").describe(`The most you intend ${what} to cost, in whole units of the token's quote — native USDC, `
|
|
133
|
+
+ "or the ERC-20 such as EURC it is priced in — as a string, with no more decimals than "
|
|
134
|
+
+ "that quote has. REQUIRED, and it is checked against a quote taken inside this call: if "
|
|
135
|
+
+ "the real cost is higher, nothing is sent and both numbers are reported. Set it from a "
|
|
136
|
+
+ "quote you have actually shown to the person whose money it is — not from the number you "
|
|
137
|
+
+ "hope it will be. Gas is on top of this and is always paid in native USDC.");
|
|
138
|
+
}
|
|
139
|
+
/** A decimal amount in the quote token the trade is priced in. */
|
|
140
|
+
export function quoteAmountArg(description) {
|
|
141
|
+
return decimalArg(description);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The operator's spend caps, enforced per quote token and fail-closed.
|
|
3
|
+
*
|
|
4
|
+
* Every write that spends — a launch (its whole `totalCost`, the launch fee
|
|
5
|
+
* plus the initial buy), a buy (its `quoteIn`) — is checked here before
|
|
6
|
+
* anything is built or signed. For an ERC-20 quote the SDK's approve is exactly
|
|
7
|
+
* that spend, so the same check covers it.
|
|
8
|
+
*
|
|
9
|
+
* Three refusals, in order:
|
|
10
|
+
*
|
|
11
|
+
* 1. **A quote the network does not list.** No variable can cap it — caps are
|
|
12
|
+
* keyed by the network's own quote tokens, by address — so it is refused.
|
|
13
|
+
* 2. **A listed quote with no cap set.** Refused, naming the variable that would
|
|
14
|
+
* set one. Non-native quotes have no default, so a cap can never be got round
|
|
15
|
+
* by moving a trade to another quote.
|
|
16
|
+
* 3. **Over a ceiling.** The caller's own stated `maxTotalCost`, then the
|
|
17
|
+
* operator's cap for that quote.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import type { Address } from "viem";
|
|
22
|
+
import type { QuoteAmount, QuoteTokenInfo } from "@arcnow/sdk";
|
|
23
|
+
import type { ToolContext } from "./schema.js";
|
|
24
|
+
/**
|
|
25
|
+
* Refuse a spend in a quote this server has no cap for. `undefined` when a cap exists.
|
|
26
|
+
* No RPC: the network's quote tokens are configuration.
|
|
27
|
+
*/
|
|
28
|
+
export declare function refuseWithoutCap(ctx: ToolContext, quote: QuoteTokenInfo | {
|
|
29
|
+
readonly address: Address;
|
|
30
|
+
readonly symbol?: undefined;
|
|
31
|
+
}, what: string): string | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* The two ceilings, checked together, before anything is built: the caller's
|
|
34
|
+
* stated maximum and the operator's cap, both in the spend's own quote.
|
|
35
|
+
*
|
|
36
|
+
* Returns the refusal text, or `undefined` when the spend is allowed.
|
|
37
|
+
*/
|
|
38
|
+
export declare function refuseIfOverBudget(actual: QuoteAmount, statedMax: QuoteAmount, ctx: ToolContext, what: string): string | undefined;
|
|
39
|
+
/** One quote's cap, said for a report: the amount and its variable, or why there is none. */
|
|
40
|
+
export declare function capText(ctx: {
|
|
41
|
+
readonly config: ToolContext["config"];
|
|
42
|
+
}, token: QuoteTokenInfo): string;
|
|
43
|
+
/** Every cap on one line: `100 USDC; EURC none (refused)`. */
|
|
44
|
+
export declare function capsSummary(config: ToolContext["config"]): string;
|
|
45
|
+
//# sourceMappingURL=spend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend.d.ts","sourceRoot":"","sources":["../../src/tools/spend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO/C;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,cAAc,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;CAAE,EAClF,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CA2BpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,WAAW,EACtB,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CA+BpB;AAED,6FAA6F;AAC7F,wBAAgB,OAAO,CAAC,GAAG,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAA;CAAE,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAWtG;AAED,8DAA8D;AAC9D,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,MAAM,CAIjE"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The operator's spend caps, enforced per quote token and fail-closed.
|
|
3
|
+
*
|
|
4
|
+
* Every write that spends — a launch (its whole `totalCost`, the launch fee
|
|
5
|
+
* plus the initial buy), a buy (its `quoteIn`) — is checked here before
|
|
6
|
+
* anything is built or signed. For an ERC-20 quote the SDK's approve is exactly
|
|
7
|
+
* that spend, so the same check covers it.
|
|
8
|
+
*
|
|
9
|
+
* Three refusals, in order:
|
|
10
|
+
*
|
|
11
|
+
* 1. **A quote the network does not list.** No variable can cap it — caps are
|
|
12
|
+
* keyed by the network's own quote tokens, by address — so it is refused.
|
|
13
|
+
* 2. **A listed quote with no cap set.** Refused, naming the variable that would
|
|
14
|
+
* set one. Non-native quotes have no default, so a cap can never be got round
|
|
15
|
+
* by moving a trade to another quote.
|
|
16
|
+
* 3. **Over a ceiling.** The caller's own stated `maxTotalCost`, then the
|
|
17
|
+
* operator's cap for that quote.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { addr, money, note, report } from "../format.js";
|
|
22
|
+
const CAPS_ARE_PER_QUOTE = "Every spending write on this server is capped per quote token, by the operator, and a "
|
|
23
|
+
+ "quote with no cap is refused rather than left uncapped — so moving a trade to another "
|
|
24
|
+
+ "quote can never get round a cap.";
|
|
25
|
+
/**
|
|
26
|
+
* Refuse a spend in a quote this server has no cap for. `undefined` when a cap exists.
|
|
27
|
+
* No RPC: the network's quote tokens are configuration.
|
|
28
|
+
*/
|
|
29
|
+
export function refuseWithoutCap(ctx, quote, what) {
|
|
30
|
+
const cap = ctx.config.spendCapFor(quote.address);
|
|
31
|
+
if (cap === undefined) {
|
|
32
|
+
const label = quote.symbol === undefined ? "a quote token" : quote.symbol;
|
|
33
|
+
return report(`Refused: ${what} would spend ${label} (${addr(quote.address)}), which is not one of this `
|
|
34
|
+
+ "network's quote tokens, so no spend cap can be configured for it. Nothing was sent and "
|
|
35
|
+
+ "nothing was signed.", note(`${CAPS_ARE_PER_QUOTE} A cap is named by a symbol of the network's own quote tokens `
|
|
36
|
+
+ "(the SDK's networks.json, or the operator's ARCNOW_MCP_NETWORK_FILE) and matched by "
|
|
37
|
+
+ "address — never by what a token says its own symbol is, so no token can borrow another "
|
|
38
|
+
+ "quote's cap. A quote outside that list is never spent from here. Tell the user; "
|
|
39
|
+
+ "arcnow_quote_tokens lists the quotes this network knows."));
|
|
40
|
+
}
|
|
41
|
+
if (cap.cap === undefined) {
|
|
42
|
+
const { symbol } = cap.token;
|
|
43
|
+
return report(`Refused: ${what} would spend ${symbol}, and this server's operator set no spend cap for `
|
|
44
|
+
+ `${symbol}. Nothing was sent and nothing was signed.`, note(`${CAPS_ARE_PER_QUOTE} The cap for ${symbol} is ${cap.variable}, in whole ${symbol}, in `
|
|
45
|
+
+ "the environment the server is started with: the operator restarts the server with, for "
|
|
46
|
+
+ `example, ${cap.variable}=50. It is not an argument and cannot be set from here — tell the `
|
|
47
|
+
+ "user that, rather than looking for another quote to trade in."));
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The two ceilings, checked together, before anything is built: the caller's
|
|
53
|
+
* stated maximum and the operator's cap, both in the spend's own quote.
|
|
54
|
+
*
|
|
55
|
+
* Returns the refusal text, or `undefined` when the spend is allowed.
|
|
56
|
+
*/
|
|
57
|
+
export function refuseIfOverBudget(actual, statedMax, ctx, what) {
|
|
58
|
+
const uncapped = refuseWithoutCap(ctx, actual.token, what);
|
|
59
|
+
if (uncapped !== undefined)
|
|
60
|
+
return uncapped;
|
|
61
|
+
if (actual.gt(statedMax)) {
|
|
62
|
+
return report(`Refused: ${what} would cost ${money(actual)}, and this call said it should cost at `
|
|
63
|
+
+ `most ${money(statedMax)}.`, note("Nothing was sent and nothing was signed. The quote is taken inside this call, so "
|
|
64
|
+
+ "this is the current cost and not the one you were shown earlier — a price moves as "
|
|
65
|
+
+ "people trade, and somebody else's trade between your quote and your order is "
|
|
66
|
+
+ "enough to move it. Re-quote, show the new number to the person whose money it is, "
|
|
67
|
+
+ "and call again with a ceiling they agreed to. Do not simply raise the ceiling to "
|
|
68
|
+
+ "whatever makes the call go through."));
|
|
69
|
+
}
|
|
70
|
+
const cap = ctx.config.spendCapFor(actual.token.address);
|
|
71
|
+
if (cap?.cap !== undefined && actual.gt(cap.cap)) {
|
|
72
|
+
return report(`Refused: ${what} would cost ${money(actual)}, and this server's operator capped any `
|
|
73
|
+
+ `single write in ${cap.token.symbol} at ${money(cap.cap)}.`, note("Nothing was sent and nothing was signed. This ceiling is not an argument and cannot "
|
|
74
|
+
+ `be raised from here — it is ${cap.variable} in the environment the server was started `
|
|
75
|
+
+ "with, and changing it means the operator restarting the server on purpose. Tell the "
|
|
76
|
+
+ "user that, rather than looking for another way through."));
|
|
77
|
+
}
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
/** One quote's cap, said for a report: the amount and its variable, or why there is none. */
|
|
81
|
+
export function capText(ctx, token) {
|
|
82
|
+
const cap = ctx.config.spendCapFor(token.address);
|
|
83
|
+
if (cap === undefined) {
|
|
84
|
+
return "cannot be set — not one of this network's quote tokens, so every launch or buy in it is "
|
|
85
|
+
+ "refused";
|
|
86
|
+
}
|
|
87
|
+
if (cap.cap === undefined) {
|
|
88
|
+
return `NONE — every launch or buy in ${token.symbol} is refused until the operator sets `
|
|
89
|
+
+ `${cap.variable}`;
|
|
90
|
+
}
|
|
91
|
+
return `${money(cap.cap)} per write call (${cap.variable})`;
|
|
92
|
+
}
|
|
93
|
+
/** Every cap on one line: `100 USDC; EURC none (refused)`. */
|
|
94
|
+
export function capsSummary(config) {
|
|
95
|
+
return config.spendCaps
|
|
96
|
+
.map(({ token, cap }) => (cap === undefined ? `${token.symbol} none (refused)` : money(cap)))
|
|
97
|
+
.join("; ");
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=spend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend.js","sourceRoot":"","sources":["../../src/tools/spend.ts"],"names":[],"mappings":"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"}
|