@intent-engine/cli 0.0.0-stage → 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.
Files changed (102) hide show
  1. package/LICENSE +202 -0
  2. package/dist/src/accounts.d.ts +112 -0
  3. package/dist/src/accounts.js +162 -0
  4. package/dist/src/accounts.js.map +1 -0
  5. package/dist/src/agent/actions.d.ts +45 -0
  6. package/dist/src/agent/actions.js +43 -0
  7. package/dist/src/agent/actions.js.map +1 -0
  8. package/dist/src/agent/budget.d.ts +22 -0
  9. package/dist/src/agent/budget.js +31 -0
  10. package/dist/src/agent/budget.js.map +1 -0
  11. package/dist/src/agent/claims.d.ts +15 -0
  12. package/dist/src/agent/claims.js +47 -0
  13. package/dist/src/agent/claims.js.map +1 -0
  14. package/dist/src/agent/create.d.ts +56 -0
  15. package/dist/src/agent/create.js +118 -0
  16. package/dist/src/agent/create.js.map +1 -0
  17. package/dist/src/agent/mandate.d.ts +30 -0
  18. package/dist/src/agent/mandate.js +478 -0
  19. package/dist/src/agent/mandate.js.map +1 -0
  20. package/dist/src/agent/mcp.d.ts +17 -0
  21. package/dist/src/agent/mcp.js +53 -0
  22. package/dist/src/agent/mcp.js.map +1 -0
  23. package/dist/src/agent/names.d.ts +1 -0
  24. package/dist/src/agent/names.js +3 -0
  25. package/dist/src/agent/names.js.map +1 -0
  26. package/dist/src/agent/owner.d.ts +40 -0
  27. package/dist/src/agent/owner.js +123 -0
  28. package/dist/src/agent/owner.js.map +1 -0
  29. package/dist/src/agent/prepare.d.ts +14 -0
  30. package/dist/src/agent/prepare.js +32 -0
  31. package/dist/src/agent/prepare.js.map +1 -0
  32. package/dist/src/agent/problems.d.ts +120 -0
  33. package/dist/src/agent/problems.js +189 -0
  34. package/dist/src/agent/problems.js.map +1 -0
  35. package/dist/src/agent/read.d.ts +13 -0
  36. package/dist/src/agent/read.js +210 -0
  37. package/dist/src/agent/read.js.map +1 -0
  38. package/dist/src/agent/registry.d.ts +2 -0
  39. package/dist/src/agent/registry.js +24 -0
  40. package/dist/src/agent/registry.js.map +1 -0
  41. package/dist/src/agent/relay.d.ts +20 -0
  42. package/dist/src/agent/relay.js +43 -0
  43. package/dist/src/agent/relay.js.map +1 -0
  44. package/dist/src/agent/schema.d.ts +68 -0
  45. package/dist/src/agent/schema.js +210 -0
  46. package/dist/src/agent/schema.js.map +1 -0
  47. package/dist/src/agent/settle.d.ts +5 -0
  48. package/dist/src/agent/settle.js +144 -0
  49. package/dist/src/agent/settle.js.map +1 -0
  50. package/dist/src/agent/shapes.d.ts +165 -0
  51. package/dist/src/agent/shapes.js +162 -0
  52. package/dist/src/agent/shapes.js.map +1 -0
  53. package/dist/src/agent/signed.d.ts +21 -0
  54. package/dist/src/agent/signed.js +360 -0
  55. package/dist/src/agent/signed.js.map +1 -0
  56. package/dist/src/agent/wallet.d.ts +18 -0
  57. package/dist/src/agent/wallet.js +186 -0
  58. package/dist/src/agent/wallet.js.map +1 -0
  59. package/dist/src/args.d.ts +491 -0
  60. package/dist/src/args.js +1124 -0
  61. package/dist/src/args.js.map +1 -0
  62. package/dist/src/bin.d.ts +2 -0
  63. package/dist/src/bin.js +4 -0
  64. package/dist/src/bin.js.map +1 -0
  65. package/dist/src/commands.d.ts +51 -0
  66. package/dist/src/commands.js +451 -0
  67. package/dist/src/commands.js.map +1 -0
  68. package/dist/src/compute.d.ts +19 -0
  69. package/dist/src/compute.js +81 -0
  70. package/dist/src/compute.js.map +1 -0
  71. package/dist/src/crank.d.ts +39 -0
  72. package/dist/src/crank.js +171 -0
  73. package/dist/src/crank.js.map +1 -0
  74. package/dist/src/events.d.ts +8 -0
  75. package/dist/src/events.js +43 -0
  76. package/dist/src/events.js.map +1 -0
  77. package/dist/src/flows.d.ts +23 -0
  78. package/dist/src/flows.js +128 -0
  79. package/dist/src/flows.js.map +1 -0
  80. package/dist/src/main.d.ts +32 -0
  81. package/dist/src/main.js +99 -0
  82. package/dist/src/main.js.map +1 -0
  83. package/dist/src/render.d.ts +5 -0
  84. package/dist/src/render.js +46 -0
  85. package/dist/src/render.js.map +1 -0
  86. package/dist/src/tokens.d.ts +6 -0
  87. package/dist/src/tokens.js +15 -0
  88. package/dist/src/tokens.js.map +1 -0
  89. package/dist/src/transport.d.ts +155 -0
  90. package/dist/src/transport.js +173 -0
  91. package/dist/src/transport.js.map +1 -0
  92. package/dist/src/treasury.d.ts +27 -0
  93. package/dist/src/treasury.js +85 -0
  94. package/dist/src/treasury.js.map +1 -0
  95. package/dist/src/version.d.ts +1 -0
  96. package/dist/src/version.js +2 -0
  97. package/dist/src/version.js.map +1 -0
  98. package/dist/src/wallet.d.ts +29 -0
  99. package/dist/src/wallet.js +108 -0
  100. package/dist/src/wallet.js.map +1 -0
  101. package/package.json +37 -3
  102. package/README.md +0 -3
@@ -0,0 +1,32 @@
1
+ import type { Readable, Writable } from "node:stream";
2
+ import { type KeyPairSigner } from "@solana/kit";
3
+ import { type Runtime } from "./commands.js";
4
+ export declare const EXIT_OK = 0;
5
+ export declare const EXIT_FAILED = 1;
6
+ export declare const EXIT_USAGE = 2;
7
+ export declare const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
8
+ export declare const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
9
+ export type Io = {
10
+ out(text: string): void;
11
+ err(text: string): void;
12
+ };
13
+ export { render } from "./render.js";
14
+ export declare const unreachable: (url: string) => string;
15
+ export declare function main(argv: readonly string[], runtime: Runtime, io: Io): Promise<number>;
16
+ export declare function loadKeypairFile(path: string, platform?: string): Promise<KeyPairSigner>;
17
+ export type Pipes = {
18
+ stdin: Readable;
19
+ stdout: Writable;
20
+ };
21
+ export declare const FETCH_TIMEOUT_MS = 10000;
22
+ export declare function nodeRuntime(clock?: () => number, pipes?: Pipes, timeoutMs?: number): Runtime;
23
+ export type ProcessLike = {
24
+ argv: readonly string[];
25
+ stdout: {
26
+ write(text: string): unknown;
27
+ };
28
+ stderr: {
29
+ write(text: string): unknown;
30
+ };
31
+ };
32
+ export declare function runProcess(proc: ProcessLike, runtime?: Runtime): Promise<number>;
@@ -0,0 +1,99 @@
1
+ import { mkdir, readFile, stat, writeFile } from "node:fs/promises";
2
+ import { homedir } from "node:os";
3
+ import { dirname } from "node:path";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/server/stdio";
5
+ import { createKeyPairSignerFromBytes, createSolanaRpc } from "@solana/kit";
6
+ import { ENV_URL, outputOf, parse, UsageError } from "./args.js";
7
+ import { follow, run } from "./commands.js";
8
+ import { withPriority } from "./compute.js";
9
+ import { printableLines, render, renderText } from "./render.js";
10
+ import { rpcTransport } from "./transport.js";
11
+ import { withSettings } from "./wallet.js";
12
+ export const EXIT_OK = 0;
13
+ export const EXIT_FAILED = 1;
14
+ export const EXIT_USAGE = 2;
15
+ export const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
16
+ export const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
17
+ export { render } from "./render.js";
18
+ export const unreachable = (url) => `cannot reach the RPC node at ${url}; pass --url devnet, --url mainnet-beta or an https URL, or set ${ENV_URL}`;
19
+ const offline = (error) => error instanceof TypeError && error.message === "fetch failed";
20
+ function message(error, url) {
21
+ if (url !== undefined && offline(error)) {
22
+ return unreachable(url);
23
+ }
24
+ return printableLines(error instanceof Error ? error.message : String(error));
25
+ }
26
+ export async function main(argv, runtime, io) {
27
+ let url;
28
+ try {
29
+ const command = parse(argv, await withSettings(runtime, runtime.env));
30
+ url = "url" in command ? command.url : undefined;
31
+ const show = (value) => io.out(command.name === "help" || outputOf(argv) === "text" ? renderText(value) : render(value));
32
+ if (command.name === "follow") {
33
+ const transport = withPriority(runtime.transport(command.url), command.priority);
34
+ await follow(transport, runtime, command.limit, command.interval, show);
35
+ return EXIT_OK;
36
+ }
37
+ const result = await run(command, runtime);
38
+ if (result !== null) {
39
+ show(result);
40
+ }
41
+ return EXIT_OK;
42
+ }
43
+ catch (error) {
44
+ io.err(message(error, url));
45
+ return error instanceof UsageError ? EXIT_USAGE : EXIT_FAILED;
46
+ }
47
+ }
48
+ export async function loadKeypairFile(path, platform = process.platform) {
49
+ let bytes;
50
+ let mode;
51
+ try {
52
+ mode = (await stat(path)).mode;
53
+ bytes = JSON.parse(await readFile(path, "utf8"));
54
+ }
55
+ catch {
56
+ throw new UsageError(KEYPAIR_UNREADABLE);
57
+ }
58
+ if (platform !== "win32" && (mode & 0o077) !== 0) {
59
+ throw new UsageError(KEYPAIR_EXPOSED);
60
+ }
61
+ if (!Array.isArray(bytes) ||
62
+ bytes.length !== 64 ||
63
+ !bytes.every((b) => Number.isInteger(b) && b >= 0 && b <= 255)) {
64
+ throw new UsageError(KEYPAIR_UNREADABLE);
65
+ }
66
+ return createKeyPairSignerFromBytes(new Uint8Array(bytes));
67
+ }
68
+ export const FETCH_TIMEOUT_MS = 10_000;
69
+ export function nodeRuntime(clock = Date.now, pipes = process, timeoutMs = FETCH_TIMEOUT_MS) {
70
+ return {
71
+ transport: (url) => rpcTransport(createSolanaRpc(url)),
72
+ loadSigner: loadKeypairFile,
73
+ readText: (path) => readFile(path, "utf8"),
74
+ sleep: (seconds) => new Promise((resolve) => setTimeout(() => resolve(true), seconds * 1000)),
75
+ env: process.env,
76
+ writeText: (path, text) => writeFile(path, text, { flag: "wx" }),
77
+ saveText: async (path, text, secret) => {
78
+ await mkdir(dirname(path), { recursive: true, mode: 0o700 });
79
+ await writeFile(path, text, secret ? { flag: "wx", mode: 0o600 } : { mode: 0o600 });
80
+ },
81
+ home: homedir().replaceAll("\\", "/"),
82
+ now: () => BigInt(Math.floor(clock() / 1000)),
83
+ fetch: (url, init) => fetch(url, { ...init, signal: AbortSignal.timeout(timeoutMs) }),
84
+ entropy: () => crypto.getRandomValues(new Uint32Array(1))[0] ?? 0,
85
+ serve: async (server) => {
86
+ const ended = new Promise((resolve) => pipes.stdin.once("end", () => resolve()));
87
+ await server.connect(new StdioServerTransport(pipes.stdin, pipes.stdout));
88
+ await ended;
89
+ await server.close();
90
+ },
91
+ };
92
+ }
93
+ export async function runProcess(proc, runtime = nodeRuntime()) {
94
+ return main(proc.argv.slice(2), runtime, {
95
+ out: (text) => proc.stdout.write(`${text}\n`),
96
+ err: (text) => proc.stderr.write(`${text}\n`),
97
+ });
98
+ }
99
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function render(value: unknown): string;
2
+ export declare const HIDDEN_RANGES: readonly (readonly [number, number])[];
3
+ export declare const printable: (text: string) => string;
4
+ export declare const printableLines: (text: string) => string;
5
+ export declare function renderText(value: object): string;
@@ -0,0 +1,46 @@
1
+ export function render(value) {
2
+ return JSON.stringify(value, (_, v) => typeof v === "bigint" ? v.toString() : v instanceof Uint8Array ? Buffer.from(v).toString("hex") : v, 2);
3
+ }
4
+ export const HIDDEN_RANGES = [
5
+ [0x00, 0x1f],
6
+ [0x7f, 0x9f],
7
+ [0x61c, 0x61c],
8
+ [0x200e, 0x200f],
9
+ [0x2028, 0x202e],
10
+ [0x2066, 0x2069],
11
+ ];
12
+ const hidden = (code) => HIDDEN_RANGES.some(([low, high]) => code >= low && code <= high);
13
+ export const printable = (text) => Array.from(text, (c) => {
14
+ const code = c.codePointAt(0) ?? 0;
15
+ return hidden(code) ? `\\u${code.toString(16).padStart(4, "0")}` : c;
16
+ }).join("");
17
+ export const printableLines = (text) => text.split("\n").map(printable).join("\n");
18
+ const plain = (v) => printable(typeof v === "bigint" ? v.toString() : v instanceof Uint8Array ? Buffer.from(v).toString("hex") : String(v));
19
+ const scalar = (v) => v === null || ["string", "number", "bigint", "boolean"].includes(typeof v);
20
+ export function renderText(value) {
21
+ const entries = Object.entries(value);
22
+ const summary = entries.find(([k]) => k === "summary")?.[1];
23
+ const lines = Array.isArray(summary) ? summary.map(plain) : [];
24
+ const warnings = entries.find(([k]) => k === "warnings")?.[1];
25
+ for (const warning of Array.isArray(warnings) ? warnings.map((w) => `WARNING: ${plain(w)}`) : []) {
26
+ if (!lines.includes(warning)) {
27
+ lines.push(warning);
28
+ }
29
+ }
30
+ for (const [key, v] of entries) {
31
+ if (key === "summary" || (key === "warnings" && Array.isArray(warnings))) {
32
+ continue;
33
+ }
34
+ if (scalar(v)) {
35
+ lines.push(`${printable(key)}: ${plain(v)}`);
36
+ }
37
+ else if (Array.isArray(v) && v.every(scalar)) {
38
+ lines.push(`${printable(key)}: ${v.length === 0 ? "none" : v.map(plain).join(", ")}`);
39
+ }
40
+ else {
41
+ lines.push(`${printable(key)}: ${printable(JSON.stringify(v, (_, x) => (typeof x === "bigint" ? x.toString() : x)))}`);
42
+ }
43
+ }
44
+ return lines.join("\n");
45
+ }
46
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/render.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,IAAI,CAAC,SAAS,CACnB,KAAK,EACL,CAAC,CAAC,EAAE,CAAU,EAAE,EAAE,CAChB,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EACrG,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAA2C;IACnE,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,IAAI,EAAE,IAAI,CAAC;IACZ,CAAC,KAAK,EAAE,KAAK,CAAC;IACd,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,MAAM,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC;AAElG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAChD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEd,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnG,MAAM,KAAK,GAAG,CAAC,CAAU,EAAU,EAAE,CACnC,SAAS,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzH,MAAM,MAAM,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1G,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;QAC/B,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzE,SAAS;QACX,CAAC;QACD,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClI,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Address } from "@solana/kit";
2
+ export declare const NATIVE_MINT: Address;
3
+ export declare const TEST_TOKEN: Address;
4
+ export declare const DEVNET_URL = "https://api.devnet.solana.com";
5
+ export declare const testTokenElsewhere: (url: string) => string;
6
+ export declare function tokenNamed(text: string, url: string): string | Error;
@@ -0,0 +1,15 @@
1
+ export const NATIVE_MINT = "So11111111111111111111111111111111111111112";
2
+ export const TEST_TOKEN = "ETU8trkkfE8gNVPDGbCaJUoH88wy6yYV6ttJdc9NKB88";
3
+ export const DEVNET_URL = "https://api.devnet.solana.com";
4
+ export const testTokenElsewhere = (url) => `TEST names the devnet test token; on ${url} pass the token's mint address`;
5
+ export function tokenNamed(text, url) {
6
+ const name = text.toUpperCase();
7
+ if (name === "SOL") {
8
+ return NATIVE_MINT;
9
+ }
10
+ if (name === "TEST") {
11
+ return url === DEVNET_URL ? TEST_TOKEN : new Error(testTokenElsewhere(url));
12
+ }
13
+ return text;
14
+ }
15
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/tokens.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,6CAAwD,CAAC;AACpF,MAAM,CAAC,MAAM,UAAU,GAAG,8CAAyD,CAAC;AACpF,MAAM,CAAC,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,wCAAwC,GAAG,gCAAgC,CAAC;AAE/H,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,GAAW;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,155 @@
1
+ import { type Address, type Base64EncodedWireTransaction, type Blockhash, type Instruction, type Signature, type TransactionSigner } from "@solana/kit";
2
+ export type AccountView = {
3
+ owner: Address;
4
+ data: Uint8Array;
5
+ lamports: bigint;
6
+ executable?: boolean;
7
+ };
8
+ export type ProgramAccount = {
9
+ address: Address;
10
+ data: Uint8Array;
11
+ };
12
+ export type EngineTransaction = {
13
+ signature: string;
14
+ slot: bigint;
15
+ blockTime: bigint | null;
16
+ failed: boolean;
17
+ emitted: Uint8Array[];
18
+ };
19
+ export type Latest = {
20
+ blockhash: Blockhash;
21
+ lastValidBlockHeight: bigint;
22
+ };
23
+ export type Simulation = {
24
+ err: string | null;
25
+ logs: string[];
26
+ unitsConsumed: bigint | null;
27
+ accounts: (Uint8Array | null)[];
28
+ };
29
+ export interface Transport {
30
+ getAccount(address: Address): Promise<AccountView | null>;
31
+ send(instructions: readonly Instruction[], payer: TransactionSigner): Promise<string>;
32
+ latestBlockhash(): Promise<Latest>;
33
+ sendWire(wire: Base64EncodedWireTransaction, latest: Latest): Promise<string>;
34
+ simulate(wire: Base64EncodedWireTransaction, watch?: readonly Address[]): Promise<Simulation>;
35
+ genesisHash(): Promise<string>;
36
+ intents(owner?: Address): Promise<ProgramAccount[]>;
37
+ engineTransactions(limit: number): Promise<EngineTransaction[]>;
38
+ recentFees(accounts: readonly Address[]): Promise<bigint[]>;
39
+ budget(instructions: readonly Instruction[], feePayer: Address): Promise<Instruction[]>;
40
+ airdrop(address: Address, lamports: bigint): Promise<string>;
41
+ }
42
+ type Pending<T> = {
43
+ send(): Promise<T>;
44
+ };
45
+ export type RpcLike = {
46
+ getAccountInfo(address: Address, config: {
47
+ encoding: "base64";
48
+ }): Pending<{
49
+ value: {
50
+ owner: Address;
51
+ data: readonly [string, string];
52
+ lamports: bigint;
53
+ executable: boolean;
54
+ } | null;
55
+ }>;
56
+ getLatestBlockhash(): Pending<{
57
+ value: {
58
+ blockhash: Blockhash;
59
+ lastValidBlockHeight: bigint;
60
+ };
61
+ }>;
62
+ sendTransaction(wire: Base64EncodedWireTransaction, config: {
63
+ encoding: "base64";
64
+ }): Pending<Signature>;
65
+ simulateTransaction(wire: Base64EncodedWireTransaction, config: {
66
+ encoding: "base64";
67
+ sigVerify: false;
68
+ replaceRecentBlockhash: true;
69
+ accounts?: {
70
+ addresses: Address[];
71
+ encoding: "base64";
72
+ };
73
+ }): Pending<{
74
+ value: {
75
+ err: unknown;
76
+ logs: readonly string[] | null;
77
+ unitsConsumed?: bigint | undefined;
78
+ accounts?: readonly ({
79
+ data: readonly [string, string];
80
+ } | null)[] | null;
81
+ };
82
+ }>;
83
+ getSignatureStatuses(signatures: Signature[]): Pending<{
84
+ value: readonly ({
85
+ err: unknown;
86
+ confirmationStatus: string | null;
87
+ } | null)[];
88
+ }>;
89
+ getBlockHeight(): Pending<bigint>;
90
+ requestAirdrop(address: Address, lamports: bigint): Pending<Signature>;
91
+ getRecentPrioritizationFees(addresses: readonly Address[]): Pending<readonly {
92
+ prioritizationFee: bigint;
93
+ }[]>;
94
+ getGenesisHash(): Pending<string>;
95
+ getProgramAccounts(program: Address, config: {
96
+ encoding: "base64";
97
+ filters: readonly ({
98
+ dataSize: bigint;
99
+ } | {
100
+ memcmp: {
101
+ offset: bigint;
102
+ bytes: string;
103
+ encoding: "base58";
104
+ };
105
+ })[];
106
+ }): Pending<readonly {
107
+ pubkey: Address;
108
+ account: {
109
+ data: readonly [string, string];
110
+ };
111
+ }[]>;
112
+ getSignaturesForAddress(address: Address, config: {
113
+ limit: number;
114
+ }): Pending<readonly {
115
+ signature: Signature;
116
+ slot: bigint;
117
+ blockTime: bigint | null;
118
+ err: unknown;
119
+ }[]>;
120
+ getTransaction(signature: Signature, config: {
121
+ encoding: "json";
122
+ maxSupportedTransactionVersion: 0;
123
+ commitment: "confirmed";
124
+ }): Pending<{
125
+ transaction: {
126
+ message: {
127
+ accountKeys: readonly Address[];
128
+ };
129
+ };
130
+ meta: {
131
+ loadedAddresses?: {
132
+ writable: readonly Address[];
133
+ readonly: readonly Address[];
134
+ };
135
+ innerInstructions?: readonly {
136
+ instructions: readonly {
137
+ programIdIndex: number;
138
+ data: string;
139
+ }[];
140
+ }[] | null;
141
+ } | null;
142
+ } | null>;
143
+ };
144
+ export declare const POLL_MS = 500;
145
+ export declare const CONFIRM_POLLS = 360;
146
+ export declare const INTENT_OWNER_OFFSET = 8n;
147
+ export declare const RATE_LIMIT_ATTEMPTS = 6;
148
+ export declare function rateLimited(error: unknown): boolean;
149
+ export declare function patiently<T>(call: () => Promise<T>, wait?: (ms: number) => Promise<void>): Promise<T>;
150
+ export declare class Charged extends Error {
151
+ constructor(message: string);
152
+ }
153
+ export declare function confirm(rpc: RpcLike, signature: Signature, lastValidBlockHeight: bigint, wait?: (ms: number) => Promise<void>): Promise<void>;
154
+ export declare function rpcTransport(rpc: RpcLike, wait?: (ms: number) => Promise<void>): Transport;
155
+ export {};
@@ -0,0 +1,173 @@
1
+ import { inspect } from "node:util";
2
+ import { appendTransactionMessageInstructions, createTransactionMessage, getBase64EncodedWireTransaction, pipe, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, signTransactionMessageWithSigners, getBase58Decoder, getBase58Encoder, } from "@solana/kit";
3
+ import { getIntentDiscriminatorBytes, getIntentSize, INTENT_ENGINE_PROGRAM_ADDRESS } from "@intent-engine/core";
4
+ export const POLL_MS = 500;
5
+ export const CONFIRM_POLLS = 360;
6
+ export const INTENT_OWNER_OFFSET = 8n;
7
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
8
+ export const RATE_LIMIT_ATTEMPTS = 6;
9
+ export function rateLimited(error) {
10
+ return error instanceof Error && /\b429\b/.test(error.message);
11
+ }
12
+ export async function patiently(call, wait = sleep) {
13
+ for (let attempt = 1;; attempt++) {
14
+ try {
15
+ return await call();
16
+ }
17
+ catch (error) {
18
+ if (!rateLimited(error) || attempt >= RATE_LIMIT_ATTEMPTS) {
19
+ throw error;
20
+ }
21
+ await wait(POLL_MS * 2 ** attempt);
22
+ }
23
+ }
24
+ }
25
+ export class Charged extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = "Charged";
29
+ }
30
+ }
31
+ export async function confirm(rpc, signature, lastValidBlockHeight, wait = sleep) {
32
+ for (let poll = 1;; poll++) {
33
+ const [status] = (await patiently(() => rpc.getSignatureStatuses([signature]).send(), wait)).value;
34
+ if (status) {
35
+ if (status.err !== null) {
36
+ throw new Charged(`transaction ${signature} failed: ${inspect(status.err)}`);
37
+ }
38
+ if (status.confirmationStatus === "confirmed" || status.confirmationStatus === "finalized") {
39
+ return;
40
+ }
41
+ }
42
+ if ((await patiently(() => rpc.getBlockHeight().send(), wait)) > lastValidBlockHeight) {
43
+ throw new Error(`transaction ${signature} expired before confirmation`);
44
+ }
45
+ if (poll >= CONFIRM_POLLS) {
46
+ throw new Charged(`transaction ${signature} was neither confirmed nor expired after ${CONFIRM_POLLS} checks; the node may be stuck, so look the signature up before sending again`);
47
+ }
48
+ await wait(POLL_MS);
49
+ }
50
+ }
51
+ export function rpcTransport(rpc, wait) {
52
+ return {
53
+ async getAccount(address) {
54
+ const { value } = await patiently(() => rpc.getAccountInfo(address, { encoding: "base64" }).send(), wait);
55
+ return value === null
56
+ ? null
57
+ : {
58
+ owner: value.owner,
59
+ data: new Uint8Array(Buffer.from(value.data[0], "base64")),
60
+ lamports: value.lamports,
61
+ executable: value.executable,
62
+ };
63
+ },
64
+ async send(instructions, payer) {
65
+ const { value: latest } = await patiently(() => rpc.getLatestBlockhash().send(), wait);
66
+ const message = pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayerSigner(payer, m), (m) => setTransactionMessageLifetimeUsingBlockhash(latest, m), (m) => appendTransactionMessageInstructions(instructions, m));
67
+ const signed = await signTransactionMessageWithSigners(message);
68
+ const wire = getBase64EncodedWireTransaction(signed);
69
+ const signature = await patiently(() => rpc.sendTransaction(wire, { encoding: "base64" }).send(), wait);
70
+ await confirm(rpc, signature, latest.lastValidBlockHeight, wait);
71
+ return signature;
72
+ },
73
+ async airdrop(address, lamports) {
74
+ const { value: latest } = await patiently(() => rpc.getLatestBlockhash().send(), wait);
75
+ const signature = await rpc.requestAirdrop(address, lamports).send();
76
+ await confirm(rpc, signature, latest.lastValidBlockHeight, wait);
77
+ return signature;
78
+ },
79
+ async latestBlockhash() {
80
+ const { value } = await patiently(() => rpc.getLatestBlockhash().send(), wait);
81
+ return value;
82
+ },
83
+ async sendWire(wire, latest) {
84
+ const signature = await patiently(() => rpc.sendTransaction(wire, { encoding: "base64" }).send(), wait);
85
+ await confirm(rpc, signature, latest.lastValidBlockHeight, wait);
86
+ return signature;
87
+ },
88
+ async simulate(wire, watch = []) {
89
+ const { value } = await patiently(() => rpc
90
+ .simulateTransaction(wire, {
91
+ encoding: "base64",
92
+ sigVerify: false,
93
+ replaceRecentBlockhash: true,
94
+ ...(watch.length === 0 ? {} : { accounts: { addresses: [...watch], encoding: "base64" } }),
95
+ })
96
+ .send(), wait);
97
+ return {
98
+ err: value.err === null ? null : inspect(value.err, { depth: null, breakLength: Infinity }),
99
+ logs: [...(value.logs ?? [])],
100
+ unitsConsumed: value.unitsConsumed ?? null,
101
+ accounts: watch.map((_, i) => {
102
+ const found = value.accounts?.[i];
103
+ return found === null || found === undefined ? null : new Uint8Array(Buffer.from(found.data[0], "base64"));
104
+ }),
105
+ };
106
+ },
107
+ async genesisHash() {
108
+ return patiently(() => rpc.getGenesisHash().send(), wait);
109
+ },
110
+ async recentFees(accounts) {
111
+ const fees = await patiently(() => rpc.getRecentPrioritizationFees(accounts).send(), wait);
112
+ return fees.map((f) => f.prioritizationFee);
113
+ },
114
+ async budget(instructions) {
115
+ return [...instructions];
116
+ },
117
+ async engineTransactions(limit) {
118
+ const signatures = await patiently(() => rpc.getSignaturesForAddress(INTENT_ENGINE_PROGRAM_ADDRESS, { limit }).send(), wait);
119
+ const found = [];
120
+ for (const entry of signatures) {
121
+ const tx = await patiently(() => rpc
122
+ .getTransaction(entry.signature, {
123
+ encoding: "json",
124
+ maxSupportedTransactionVersion: 0,
125
+ commitment: "confirmed",
126
+ })
127
+ .send(), wait);
128
+ const keys = [
129
+ ...(tx?.transaction.message.accountKeys ?? []),
130
+ ...(tx?.meta?.loadedAddresses?.writable ?? []),
131
+ ...(tx?.meta?.loadedAddresses?.readonly ?? []),
132
+ ];
133
+ const emitted = (tx?.meta?.innerInstructions ?? [])
134
+ .flatMap((group) => group.instructions)
135
+ .filter((ix) => keys[ix.programIdIndex] === INTENT_ENGINE_PROGRAM_ADDRESS)
136
+ .map((ix) => Uint8Array.from(getBase58Encoder().encode(ix.data)));
137
+ found.push({
138
+ signature: entry.signature,
139
+ slot: entry.slot,
140
+ blockTime: entry.blockTime,
141
+ failed: entry.err !== null,
142
+ emitted,
143
+ });
144
+ }
145
+ return found;
146
+ },
147
+ async intents(owner) {
148
+ const found = await patiently(() => rpc
149
+ .getProgramAccounts(INTENT_ENGINE_PROGRAM_ADDRESS, {
150
+ encoding: "base64",
151
+ filters: [
152
+ { dataSize: BigInt(getIntentSize()) },
153
+ {
154
+ memcmp: {
155
+ offset: 0n,
156
+ bytes: getBase58Decoder().decode(getIntentDiscriminatorBytes()),
157
+ encoding: "base58",
158
+ },
159
+ },
160
+ ...(owner === undefined
161
+ ? []
162
+ : [{ memcmp: { offset: INTENT_OWNER_OFFSET, bytes: owner, encoding: "base58" } }]),
163
+ ],
164
+ })
165
+ .send(), wait);
166
+ return found.map(({ pubkey, account }) => ({
167
+ address: pubkey,
168
+ data: new Uint8Array(Buffer.from(account.data[0], "base64")),
169
+ }));
170
+ },
171
+ };
172
+ }
173
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { type Address, type KeyPairSigner } from "@solana/kit";
2
+ import { SOL_DECIMALS } from "./agent/read.js";
3
+ import type { Transport } from "./transport.js";
4
+ export { SOL_DECIMALS };
5
+ export type TreasuryToken = {
6
+ mint: Address;
7
+ token_program: Address;
8
+ decimals: number;
9
+ account: Address;
10
+ exists: boolean;
11
+ balance: bigint;
12
+ balance_tokens: string;
13
+ };
14
+ export type TreasuryView = {
15
+ fee_recipient: Address;
16
+ lamports: bigint;
17
+ sol: string;
18
+ tokens: TreasuryToken[];
19
+ missing: Address[];
20
+ warnings: string[];
21
+ };
22
+ export declare const TREASURY_IS_PROGRAM = "the treasury is a program account, which cannot receive SOL, so the engine withholds every create fee; point fee_recipient at a wallet or multisig vault";
23
+ export declare const treasuryTooEmpty: (fee: number, short: bigint) => string;
24
+ export declare function intentInputMints(transport: Transport): Promise<Address[]>;
25
+ export declare function treasuryView(transport: Transport, mints: readonly Address[]): Promise<TreasuryView>;
26
+ export declare const NOTHING_TO_CREATE = "nothing to create: the treasury already holds an account for every token listed";
27
+ export declare function createTreasuryAccounts(transport: Transport, view: TreasuryView, payer: KeyPairSigner, yes: boolean): Promise<object>;