@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.
Files changed (103) hide show
  1. package/NOTICE +4 -2
  2. package/README.md +100 -44
  3. package/THIRD_PARTY_NOTICES.connect-page.md +7836 -0
  4. package/THIRD_PARTY_NOTICES.md +543 -162
  5. package/dist/cli.d.ts +6 -0
  6. package/dist/cli.js +243 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/client.d.ts +366 -239
  9. package/dist/client.js +202 -25
  10. package/dist/client.js.map +1 -1
  11. package/dist/config/earn.d.ts +48 -12
  12. package/dist/config/earn.js +48 -12
  13. package/dist/config/earn.js.map +1 -1
  14. package/dist/connect/ack.d.ts +76 -0
  15. package/dist/connect/ack.js +147 -0
  16. package/dist/connect/ack.js.map +1 -0
  17. package/dist/connect/commands.d.ts +81 -0
  18. package/dist/connect/commands.js +555 -0
  19. package/dist/connect/commands.js.map +1 -0
  20. package/dist/connect/config.d.ts +24 -0
  21. package/dist/connect/config.js +35 -0
  22. package/dist/connect/config.js.map +1 -0
  23. package/dist/connect/gate-solana.d.ts +8 -0
  24. package/dist/connect/gate-solana.js +147 -0
  25. package/dist/connect/gate-solana.js.map +1 -0
  26. package/dist/connect/gate.d.ts +37 -0
  27. package/dist/connect/gate.js +115 -0
  28. package/dist/connect/gate.js.map +1 -0
  29. package/dist/connect/http.d.ts +60 -0
  30. package/dist/connect/http.js +235 -0
  31. package/dist/connect/http.js.map +1 -0
  32. package/dist/connect/open.d.ts +2 -0
  33. package/dist/connect/open.js +35 -0
  34. package/dist/connect/open.js.map +1 -0
  35. package/dist/connect/page.d.ts +5 -0
  36. package/dist/connect/page.js +69 -0
  37. package/dist/connect/page.js.map +1 -0
  38. package/dist/connect/session.d.ts +39 -0
  39. package/dist/connect/session.js +198 -0
  40. package/dist/connect/session.js.map +1 -0
  41. package/dist/connect/solana.d.ts +73 -0
  42. package/dist/connect/solana.js +267 -0
  43. package/dist/connect/solana.js.map +1 -0
  44. package/dist/connect/verify.d.ts +37 -0
  45. package/dist/connect/verify.js +89 -0
  46. package/dist/connect/verify.js.map +1 -0
  47. package/dist/connect-page.js +5143 -0
  48. package/dist/disclosures.d.ts +22 -6
  49. package/dist/disclosures.js +34 -8
  50. package/dist/disclosures.js.map +1 -1
  51. package/dist/earn/commands.d.ts +46 -0
  52. package/dist/earn/commands.js +556 -0
  53. package/dist/earn/commands.js.map +1 -0
  54. package/dist/earn/solana.d.ts +278 -0
  55. package/dist/earn/solana.js +302 -0
  56. package/dist/earn/solana.js.map +1 -0
  57. package/dist/guide.d.ts +15 -0
  58. package/dist/guide.js +50 -0
  59. package/dist/guide.js.map +1 -0
  60. package/dist/links.d.ts +2 -0
  61. package/dist/links.js +40 -14
  62. package/dist/links.js.map +1 -1
  63. package/dist/position.d.ts +9 -6
  64. package/dist/position.js +39 -19
  65. package/dist/position.js.map +1 -1
  66. package/dist/preflight.d.ts +9 -0
  67. package/dist/preflight.js +14 -3
  68. package/dist/preflight.js.map +1 -1
  69. package/dist/quote.js +24 -7
  70. package/dist/quote.js.map +1 -1
  71. package/dist/redact.d.ts +3 -3
  72. package/dist/redact.js +3 -3
  73. package/dist/redact.js.map +1 -1
  74. package/dist/registry-schema.d.ts +82 -5
  75. package/dist/registry-schema.js +105 -15
  76. package/dist/registry-schema.js.map +1 -1
  77. package/dist/registry.d.ts +50 -7
  78. package/dist/registry.js +122 -21
  79. package/dist/registry.js.map +1 -1
  80. package/dist/solana/constants.d.ts +49 -0
  81. package/dist/solana/constants.js +50 -0
  82. package/dist/solana/constants.js.map +1 -0
  83. package/dist/solana/kvault.d.ts +99 -0
  84. package/dist/solana/kvault.js +192 -0
  85. package/dist/solana/kvault.js.map +1 -0
  86. package/dist/solana/layout.d.ts +143 -0
  87. package/dist/solana/layout.js +209 -0
  88. package/dist/solana/layout.js.map +1 -0
  89. package/dist/solana/rpc.d.ts +24 -0
  90. package/dist/solana/rpc.js +66 -0
  91. package/dist/solana/rpc.js.map +1 -0
  92. package/dist/solana/vault.d.ts +153 -0
  93. package/dist/solana/vault.js +324 -0
  94. package/dist/solana/vault.js.map +1 -0
  95. package/dist/{mcp-server.mjs → treasury.mjs} +41101 -49486
  96. package/dist/version.js +5 -10
  97. package/dist/version.js.map +1 -1
  98. package/llms.txt +621 -0
  99. package/package.json +12 -9
  100. package/registry/vaults.json +218 -4
  101. package/dist/mcp/server.d.ts +0 -8
  102. package/dist/mcp/server.js +0 -368
  103. package/dist/mcp/server.js.map +0 -1
package/dist/cli.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ /** Runs one invocation. Returns what to print and the exit status; never calls `process.exit` itself, so tests can drive it. */
2
+ export declare function run(argv: string[]): Promise<{
3
+ stdout?: string;
4
+ stderr?: string;
5
+ code: 0 | 1;
6
+ }>;
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}