@temporalabs/treasury 0.1.1 → 0.1.3
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/NOTICE +4 -2
- package/README.md +100 -44
- package/THIRD_PARTY_NOTICES.connect-page.md +7836 -0
- package/THIRD_PARTY_NOTICES.md +543 -162
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +243 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +366 -239
- package/dist/client.js +202 -25
- package/dist/client.js.map +1 -1
- package/dist/config/earn.d.ts +48 -12
- package/dist/config/earn.js +48 -12
- package/dist/config/earn.js.map +1 -1
- package/dist/connect/ack.d.ts +76 -0
- package/dist/connect/ack.js +147 -0
- package/dist/connect/ack.js.map +1 -0
- package/dist/connect/commands.d.ts +81 -0
- package/dist/connect/commands.js +555 -0
- package/dist/connect/commands.js.map +1 -0
- package/dist/connect/config.d.ts +24 -0
- package/dist/connect/config.js +35 -0
- package/dist/connect/config.js.map +1 -0
- package/dist/connect/gate-solana.d.ts +8 -0
- package/dist/connect/gate-solana.js +147 -0
- package/dist/connect/gate-solana.js.map +1 -0
- package/dist/connect/gate.d.ts +37 -0
- package/dist/connect/gate.js +115 -0
- package/dist/connect/gate.js.map +1 -0
- package/dist/connect/http.d.ts +60 -0
- package/dist/connect/http.js +235 -0
- package/dist/connect/http.js.map +1 -0
- package/dist/connect/open.d.ts +2 -0
- package/dist/connect/open.js +35 -0
- package/dist/connect/open.js.map +1 -0
- package/dist/connect/page.d.ts +5 -0
- package/dist/connect/page.js +69 -0
- package/dist/connect/page.js.map +1 -0
- package/dist/connect/session.d.ts +39 -0
- package/dist/connect/session.js +198 -0
- package/dist/connect/session.js.map +1 -0
- package/dist/connect/solana.d.ts +73 -0
- package/dist/connect/solana.js +267 -0
- package/dist/connect/solana.js.map +1 -0
- package/dist/connect/verify.d.ts +37 -0
- package/dist/connect/verify.js +89 -0
- package/dist/connect/verify.js.map +1 -0
- package/dist/connect-page.js +5143 -0
- package/dist/disclosures.d.ts +22 -6
- package/dist/disclosures.js +34 -8
- package/dist/disclosures.js.map +1 -1
- package/dist/earn/commands.d.ts +46 -0
- package/dist/earn/commands.js +556 -0
- package/dist/earn/commands.js.map +1 -0
- package/dist/earn/solana.d.ts +278 -0
- package/dist/earn/solana.js +302 -0
- package/dist/earn/solana.js.map +1 -0
- package/dist/guide.d.ts +15 -0
- package/dist/guide.js +50 -0
- package/dist/guide.js.map +1 -0
- package/dist/links.d.ts +2 -0
- package/dist/links.js +40 -14
- package/dist/links.js.map +1 -1
- package/dist/position.d.ts +9 -6
- package/dist/position.js +39 -19
- package/dist/position.js.map +1 -1
- package/dist/preflight.d.ts +9 -0
- package/dist/preflight.js +14 -3
- package/dist/preflight.js.map +1 -1
- package/dist/quote.js +24 -7
- package/dist/quote.js.map +1 -1
- package/dist/redact.d.ts +3 -3
- package/dist/redact.js +3 -3
- package/dist/redact.js.map +1 -1
- package/dist/registry-schema.d.ts +82 -5
- package/dist/registry-schema.js +105 -15
- package/dist/registry-schema.js.map +1 -1
- package/dist/registry.d.ts +50 -7
- package/dist/registry.js +122 -21
- package/dist/registry.js.map +1 -1
- package/dist/solana/constants.d.ts +49 -0
- package/dist/solana/constants.js +50 -0
- package/dist/solana/constants.js.map +1 -0
- package/dist/solana/kvault.d.ts +99 -0
- package/dist/solana/kvault.js +192 -0
- package/dist/solana/kvault.js.map +1 -0
- package/dist/solana/layout.d.ts +143 -0
- package/dist/solana/layout.js +209 -0
- package/dist/solana/layout.js.map +1 -0
- package/dist/solana/rpc.d.ts +24 -0
- package/dist/solana/rpc.js +66 -0
- package/dist/solana/rpc.js.map +1 -0
- package/dist/solana/vault.d.ts +153 -0
- package/dist/solana/vault.js +324 -0
- package/dist/solana/vault.js.map +1 -0
- package/dist/{mcp-server.mjs → treasury.mjs} +41101 -49486
- package/dist/version.js +5 -10
- package/dist/version.js.map +1 -1
- package/llms.txt +621 -0
- package/package.json +12 -9
- package/registry/vaults.json +218 -4
- package/dist/mcp/server.d.ts +0 -8
- package/dist/mcp/server.js +0 -368
- package/dist/mcp/server.js.map +0 -1
package/dist/cli.d.ts
ADDED
package/dist/cli.js
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Treasury — the command line. `treasury <earn|connect> <command> [--flag value …]`; every command prints
|
|
3
|
+
* one JSON document on stdout (`--version` prints the bare version).
|
|
4
|
+
*
|
|
5
|
+
* Headless on purpose: an agent with a shell runs this with `node` and reads the JSON, and nothing
|
|
6
|
+
* stays running between calls. The commands themselves live in `earn/commands.ts` and `connect/commands.ts`; this file only
|
|
7
|
+
* turns argv into their arguments, validates them against each command's own schema, and prints.
|
|
8
|
+
*
|
|
9
|
+
* treasury earn --help every command, its flags and its description, as JSON
|
|
10
|
+
* treasury earn quote --direction deposit --account 0x… --amount_usdc <amount> --chain base
|
|
11
|
+
* treasury --version
|
|
12
|
+
*
|
|
13
|
+
* Flags are the command's argument names. `--amount-usdc` is accepted for `--amount_usdc`, and
|
|
14
|
+
* `prepare-deposit` for `prepare_deposit`, because both spellings get typed.
|
|
15
|
+
*
|
|
16
|
+
* Exit status: 0 with the result on stdout; 1 with `{ "error": … }` on stderr when the command could not
|
|
17
|
+
* run as asked (a vault on another chain, an unknown or repeated flag, a malformed address, an
|
|
18
|
+
* unreachable RPC on a read that needs it) — never a result, so a caller cannot read it as an answer. A
|
|
19
|
+
* VERDICT is a result: `earn status` reporting `WHITELIST_GATED` or `rpc: "wrong_chain"` exits 0, and
|
|
20
|
+
* its fields say what it found. A switch (`--all`) takes no value.
|
|
21
|
+
*/
|
|
22
|
+
import { realpathSync } from "node:fs";
|
|
23
|
+
import { fileURLToPath } from "node:url";
|
|
24
|
+
import { parseArgs } from "node:util";
|
|
25
|
+
import { z } from "zod";
|
|
26
|
+
import { buildCommands } from "./earn/commands.js";
|
|
27
|
+
import { buildConnectCommands } from "./connect/commands.js";
|
|
28
|
+
import { resolvedRpcSecrets } from "./client.js";
|
|
29
|
+
import { redactEndpoints, registerSecretSource } from "./redact.js";
|
|
30
|
+
import { PACKAGE_VERSION } from "./version.js";
|
|
31
|
+
import { guidePointer } from "./guide.js";
|
|
32
|
+
/**
|
|
33
|
+
* The skills this CLI carries: a word on the command line, and the commands it opens. A command's name
|
|
34
|
+
* starts with its skill's word (`earn_quote`), and only that skill's builder is ever consulted for it.
|
|
35
|
+
*/
|
|
36
|
+
const SKILLS = { earn: buildCommands, connect: () => buildConnectCommands() };
|
|
37
|
+
/** The JSON type a flag's schema finally checks, looking through `optional`, `default` and refine/transform pipes. */
|
|
38
|
+
function kindOf(schema) {
|
|
39
|
+
let s = schema;
|
|
40
|
+
for (;;) {
|
|
41
|
+
const def = s.def;
|
|
42
|
+
if ((def.type === "optional" || def.type === "default" || def.type === "nullable") && def.innerType)
|
|
43
|
+
s = def.innerType;
|
|
44
|
+
else if (def.type === "pipe" && def.in)
|
|
45
|
+
s = def.in;
|
|
46
|
+
else
|
|
47
|
+
return def.type === "number" ? "number" : def.type === "boolean" ? "boolean" : "string";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const isOptional = (schema) => schema.safeParse(undefined).success;
|
|
51
|
+
/** The constraints `--help` repeats from each flag's JSON Schema, so a caller sees what the schema will refuse. */
|
|
52
|
+
const SCHEMA_KEYS = ["description", "enum", "pattern", "minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum"];
|
|
53
|
+
/** What `--help` prints for one command. */
|
|
54
|
+
function describe(skill, name, c) {
|
|
55
|
+
// The JSON Schema carries what the zod objects hide behind wrappers: a description set before
|
|
56
|
+
// `.optional()`, an enum, a pattern, a range. Read in INPUT mode, so a transform describes what it accepts.
|
|
57
|
+
// `unrepresentable: "any"`: a type JSON Schema cannot express must not take `--help` down with it.
|
|
58
|
+
const props = (z.toJSONSchema(c.inputSchema, { io: "input", unrepresentable: "any" }).properties ?? {});
|
|
59
|
+
return {
|
|
60
|
+
command: `${skill} ${name.slice(skill.length + 1)}`,
|
|
61
|
+
tool: name,
|
|
62
|
+
title: c.title,
|
|
63
|
+
description: c.description,
|
|
64
|
+
flags: Object.entries(c.inputSchema.shape).map(([flag, schema]) => {
|
|
65
|
+
const kind = kindOf(schema);
|
|
66
|
+
const js = props[flag] ?? {};
|
|
67
|
+
return {
|
|
68
|
+
flag: `--${flag}`,
|
|
69
|
+
type: kind,
|
|
70
|
+
required: !isOptional(schema),
|
|
71
|
+
...(kind === "boolean" ? { takesValue: false } : {}),
|
|
72
|
+
...Object.fromEntries(SCHEMA_KEYS.filter((k) => js[k] !== undefined).map((k) => [k, js[k]])),
|
|
73
|
+
};
|
|
74
|
+
}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
class UsageError extends Error {
|
|
78
|
+
}
|
|
79
|
+
/** argv after the command word → the command's arguments, checked against its own schema. */
|
|
80
|
+
function parseFlags(c, argv) {
|
|
81
|
+
const shape = c.inputSchema.shape;
|
|
82
|
+
const options = {};
|
|
83
|
+
const canonical = {};
|
|
84
|
+
for (const [name, schema] of Object.entries(shape)) {
|
|
85
|
+
const type = kindOf(schema) === "boolean" ? "boolean" : "string";
|
|
86
|
+
for (const spelling of new Set([name, name.replaceAll("_", "-")])) {
|
|
87
|
+
options[spelling] = { type };
|
|
88
|
+
canonical[spelling] = name;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const switches = Object.keys(shape).filter((n) => kindOf(shape[n]) === "boolean");
|
|
92
|
+
let parsed;
|
|
93
|
+
try {
|
|
94
|
+
parsed = parseArgs({ args: argv, options, strict: true, allowPositionals: false, tokens: true });
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
const why = (e instanceof Error ? e.message : String(e)).replace(/\.+$/, "");
|
|
98
|
+
const hint = switches.length ? ` ${switches.map((n) => `--${n}`).join(", ")} ${switches.length === 1 ? "is a switch" : "are switches"}: give it for true, leave it out for false.` : "";
|
|
99
|
+
const help = argv.includes("--help") || argv.includes("-h") ? " For help, put --help right after the command." : "";
|
|
100
|
+
throw new UsageError(`${why}. Flags for this command: ${Object.keys(shape).map((f) => `--${f}`).join(", ") || "none"}.${hint}${help}`);
|
|
101
|
+
}
|
|
102
|
+
// 🔴 Repeats are read from the TOKENS, not from `values`. `parseArgs` keeps only the LAST value of a
|
|
103
|
+
// repeated option and keys `values` by spelling, so `--receiver A --receiver B` would otherwise
|
|
104
|
+
// arrive as `receiver: B` with nothing to say A was ever typed — a different call than the one read.
|
|
105
|
+
const seen = new Set();
|
|
106
|
+
for (const t of parsed.tokens ?? []) {
|
|
107
|
+
if (t.kind !== "option")
|
|
108
|
+
continue;
|
|
109
|
+
const name = canonical[t.name];
|
|
110
|
+
if (seen.has(name))
|
|
111
|
+
throw new UsageError(`--${name} was given twice`);
|
|
112
|
+
seen.add(name);
|
|
113
|
+
}
|
|
114
|
+
const args = {};
|
|
115
|
+
for (const [spelling, raw] of Object.entries(parsed.values)) {
|
|
116
|
+
if (raw === undefined)
|
|
117
|
+
continue;
|
|
118
|
+
const name = canonical[spelling];
|
|
119
|
+
const kind = kindOf(shape[name]);
|
|
120
|
+
if (kind === "number") {
|
|
121
|
+
if (typeof raw !== "string" || !/^\d+$/.test(raw))
|
|
122
|
+
throw new UsageError(`--${name} takes a whole number, got ${JSON.stringify(raw)}`);
|
|
123
|
+
args[name] = Number(raw);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
args[name] = raw;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const checked = c.inputSchema.strict().safeParse(args);
|
|
130
|
+
if (!checked.success) {
|
|
131
|
+
throw new UsageError(checked.error.issues.map((i) => `--${i.path.join(".") || "?"}: ${i.message}`).join("; "));
|
|
132
|
+
}
|
|
133
|
+
return checked.data;
|
|
134
|
+
}
|
|
135
|
+
/** `{ guide }` for the help documents, or nothing when the pointer does not apply (the plugin's copy). */
|
|
136
|
+
const guideField = () => {
|
|
137
|
+
const guide = guidePointer();
|
|
138
|
+
return guide ? { guide } : {};
|
|
139
|
+
};
|
|
140
|
+
/** Runs one invocation. Returns what to print and the exit status; never calls `process.exit` itself, so tests can drive it. */
|
|
141
|
+
export async function run(argv) {
|
|
142
|
+
// Registered before anything can be printed: a usage error echoes what was typed, and what was typed
|
|
143
|
+
// can be a keyed RPC URL. Every error below goes through `redactEndpoints`, so none can print it.
|
|
144
|
+
registerSecretSource(resolvedRpcSecrets);
|
|
145
|
+
const fail = (message) => ({ stderr: JSON.stringify({ error: redactEndpoints(message) }, null, 2), code: 1 });
|
|
146
|
+
const [first, second, ...rest] = argv;
|
|
147
|
+
if (first === "--version" || first === "-v")
|
|
148
|
+
return { stdout: PACKAGE_VERSION, code: 0 };
|
|
149
|
+
if (first === undefined || first === "--help" || first === "-h") {
|
|
150
|
+
return { stdout: JSON.stringify({ usage: "treasury <skill> <command> [--flag value …]", version: PACKAGE_VERSION, skills: Object.keys(SKILLS), ...guideField() }, null, 2), code: 0 };
|
|
151
|
+
}
|
|
152
|
+
const build = Object.hasOwn(SKILLS, first) ? SKILLS[first] : undefined;
|
|
153
|
+
if (!build)
|
|
154
|
+
return fail(`unknown skill ${JSON.stringify(first)}; this CLI carries: ${Object.keys(SKILLS).join(", ")}`);
|
|
155
|
+
const skill = first;
|
|
156
|
+
let commands;
|
|
157
|
+
try {
|
|
158
|
+
commands = build();
|
|
159
|
+
}
|
|
160
|
+
catch (e) {
|
|
161
|
+
return fail(e instanceof Error ? e.message : String(e));
|
|
162
|
+
}
|
|
163
|
+
const mine = Object.entries(commands).filter(([name]) => name.startsWith(`${skill}_`));
|
|
164
|
+
if (second === undefined || second === "--help" || second === "-h") {
|
|
165
|
+
return { stdout: JSON.stringify({ usage: `treasury ${skill} <command> [--flag value …]`, version: PACKAGE_VERSION, ...guideField(), commands: mine.map(([n, c]) => describe(skill, n, c)) }, null, 2), code: 0 };
|
|
166
|
+
}
|
|
167
|
+
const name = `${skill}_${second.replaceAll("-", "_")}`;
|
|
168
|
+
// Own keys only: `commands` is a plain object, so `earn constructor` must not reach anything inherited.
|
|
169
|
+
const command = Object.hasOwn(commands, name) ? commands[name] : undefined;
|
|
170
|
+
if (!command) {
|
|
171
|
+
return fail(`unknown command ${JSON.stringify(`${skill} ${second}`)}; commands: ${mine.map(([n]) => n.slice(skill.length + 1)).join(", ")}`);
|
|
172
|
+
}
|
|
173
|
+
// Help only when asked for in place of the flags — `--receiver --help` is a missing value, not a request for help.
|
|
174
|
+
if (rest[0] === "--help" || rest[0] === "-h")
|
|
175
|
+
return { stdout: JSON.stringify(describe(skill, name, command), null, 2), code: 0 };
|
|
176
|
+
let args;
|
|
177
|
+
try {
|
|
178
|
+
args = parseFlags(command, rest);
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
return fail(e instanceof Error ? e.message : String(e));
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
return { stdout: await command.handler(args), code: 0 };
|
|
185
|
+
}
|
|
186
|
+
catch (e) {
|
|
187
|
+
// The handlers already mask endpoints (`guarded`); `fail` masks again so nothing printed by this
|
|
188
|
+
// file can carry a keyed RPC URL, whatever a future handler forgets.
|
|
189
|
+
return fail(e instanceof Error ? e.message : String(e));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* True only when THIS module is the file Node was asked to run. The comparison is by resolved path,
|
|
194
|
+
* not by name: an earlier guard tested `process.argv[1]` against a filename pattern, which is the
|
|
195
|
+
* basename of whatever was invoked — so the published bin (a symlink npm makes) never matched and
|
|
196
|
+
* exited silently (#22), while any unrelated script with a matching name that merely imported this
|
|
197
|
+
* module matched and ran. Node resolves the main module's symlink before evaluating it, so
|
|
198
|
+
* `import.meta.url` is already the real path and the two sides agree for a bin. Anything
|
|
199
|
+
* unresolvable is treated as "not the entry point": the module loads and does nothing.
|
|
200
|
+
*/
|
|
201
|
+
function isEntryPoint() {
|
|
202
|
+
const invoked = process.argv[1];
|
|
203
|
+
if (!invoked)
|
|
204
|
+
return false;
|
|
205
|
+
try {
|
|
206
|
+
return realpathSync(invoked) === realpathSync(fileURLToPath(import.meta.url));
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/** How long Windows waits for open handles to finish before it ends the process anyway. */
|
|
213
|
+
const WINDOWS_EXIT_BACKSTOP_MS = 2_000;
|
|
214
|
+
/**
|
|
215
|
+
* Ends the process with `code` once the answer is written. Elsewhere this is an immediate
|
|
216
|
+
* `process.exit`. On Windows it is not (#122): Node 24 (24.0.0 and 24.19.0 measured) aborts with
|
|
217
|
+
* 0xC0000409, on the libuv assertion `!(handle->flags & UV_HANDLE_CLOSING)`, when `process.exit` runs
|
|
218
|
+
* right after the health check's request — it printed a correct answer and then crashed. There the
|
|
219
|
+
* exit code is set and Node ends on its own once nothing is left open; a backstop that holds
|
|
220
|
+
* nothing open ends it after WINDOWS_EXIT_BACKSTOP_MS if a request is still pending, as the
|
|
221
|
+
* slow-endpoint case leaves one.
|
|
222
|
+
*/
|
|
223
|
+
function exitWith(code) {
|
|
224
|
+
if (process.platform !== "win32")
|
|
225
|
+
process.exit(code);
|
|
226
|
+
process.exitCode = code;
|
|
227
|
+
setTimeout(() => process.exit(code), WINDOWS_EXIT_BACKSTOP_MS).unref();
|
|
228
|
+
}
|
|
229
|
+
if (isEntryPoint()) {
|
|
230
|
+
run(process.argv.slice(2)).then(({ stdout, stderr, code }) => {
|
|
231
|
+
// Exit as soon as the answer is written. A read that lost a race (the chain-id probe beside a
|
|
232
|
+
// slow endpoint) can leave a request timer running for seconds after the answer exists, and
|
|
233
|
+
// the agent's shell call would wait it out. The callbacks wait for each stream to flush first.
|
|
234
|
+
const out = stdout === undefined ? Promise.resolve() : new Promise((done) => process.stdout.write(`${stdout}\n`, () => done()));
|
|
235
|
+
const err = stderr === undefined ? Promise.resolve() : new Promise((done) => process.stderr.write(`${stderr}\n`, () => done()));
|
|
236
|
+
void Promise.all([out, err]).then(() => exitWith(code));
|
|
237
|
+
}, (e) => {
|
|
238
|
+
// Defence-in-depth: `run` catches everything it calls, so this is reached only by a defect in
|
|
239
|
+
// `run` itself. Masked anyway, so that stays true if `run` ever grows.
|
|
240
|
+
process.stderr.write(`${JSON.stringify({ error: redactEndpoints(String(e)) })}\n`, () => exitWith(1));
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|