@aura-protocol/cli 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 (78) hide show
  1. package/README.md +307 -0
  2. package/bin/aura.js +8 -0
  3. package/dist/commands/confidential.d.ts +2 -0
  4. package/dist/commands/confidential.js +564 -0
  5. package/dist/commands/confidential.js.map +1 -0
  6. package/dist/commands/config.d.ts +2 -0
  7. package/dist/commands/config.js +123 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/dashboard.d.ts +2 -0
  10. package/dist/commands/dashboard.js +29 -0
  11. package/dist/commands/dashboard.js.map +1 -0
  12. package/dist/commands/dwallet.d.ts +2 -0
  13. package/dist/commands/dwallet.js +131 -0
  14. package/dist/commands/dwallet.js.map +1 -0
  15. package/dist/commands/execution.d.ts +2 -0
  16. package/dist/commands/execution.js +261 -0
  17. package/dist/commands/execution.js.map +1 -0
  18. package/dist/commands/governance.d.ts +2 -0
  19. package/dist/commands/governance.js +169 -0
  20. package/dist/commands/governance.js.map +1 -0
  21. package/dist/commands/helpers.d.ts +79 -0
  22. package/dist/commands/helpers.js +219 -0
  23. package/dist/commands/helpers.js.map +1 -0
  24. package/dist/commands/treasury.d.ts +2 -0
  25. package/dist/commands/treasury.js +319 -0
  26. package/dist/commands/treasury.js.map +1 -0
  27. package/dist/config.d.ts +35 -0
  28. package/dist/config.js +96 -0
  29. package/dist/config.js.map +1 -0
  30. package/dist/context.d.ts +37 -0
  31. package/dist/context.js +57 -0
  32. package/dist/context.js.map +1 -0
  33. package/dist/dashboard.d.ts +7 -0
  34. package/dist/dashboard.js +95 -0
  35. package/dist/dashboard.js.map +1 -0
  36. package/dist/domain.d.ts +16 -0
  37. package/dist/domain.js +86 -0
  38. package/dist/domain.js.map +1 -0
  39. package/dist/format.d.ts +9 -0
  40. package/dist/format.js +92 -0
  41. package/dist/format.js.map +1 -0
  42. package/dist/ika.d.ts +76 -0
  43. package/dist/ika.js +178 -0
  44. package/dist/ika.js.map +1 -0
  45. package/dist/index.d.ts +3 -0
  46. package/dist/index.js +43 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/output.d.ts +32 -0
  49. package/dist/output.js +134 -0
  50. package/dist/output.js.map +1 -0
  51. package/dist/protocol.d.ts +99 -0
  52. package/dist/protocol.js +353 -0
  53. package/dist/protocol.js.map +1 -0
  54. package/dist/sdk.d.ts +6 -0
  55. package/dist/sdk.js +6 -0
  56. package/dist/sdk.js.map +1 -0
  57. package/dist/treasury-view.d.ts +11 -0
  58. package/dist/treasury-view.js +103 -0
  59. package/dist/treasury-view.js.map +1 -0
  60. package/dist/vendor/encrypt/generated/grpc/encrypt_service.d.ts +195 -0
  61. package/dist/vendor/encrypt/generated/grpc/encrypt_service.js +514 -0
  62. package/dist/vendor/encrypt/generated/grpc/encrypt_service.js.map +1 -0
  63. package/dist/vendor/encrypt/grpc.d.ts +70 -0
  64. package/dist/vendor/encrypt/grpc.js +108 -0
  65. package/dist/vendor/encrypt/grpc.js.map +1 -0
  66. package/dist/vendor/ika/bcs-types.d.ts +1045 -0
  67. package/dist/vendor/ika/bcs-types.js +185 -0
  68. package/dist/vendor/ika/bcs-types.js.map +1 -0
  69. package/dist/vendor/ika/generated/grpc/ika_dwallet.d.ts +141 -0
  70. package/dist/vendor/ika/generated/grpc/ika_dwallet.js +531 -0
  71. package/dist/vendor/ika/generated/grpc/ika_dwallet.js.map +1 -0
  72. package/dist/vendor/ika/grpc.d.ts +16 -0
  73. package/dist/vendor/ika/grpc.js +129 -0
  74. package/dist/vendor/ika/grpc.js.map +1 -0
  75. package/dist/wallet.d.ts +2 -0
  76. package/dist/wallet.js +21 -0
  77. package/dist/wallet.js.map +1 -0
  78. package/package.json +54 -0
@@ -0,0 +1,123 @@
1
+ import { input } from "@inquirer/prompts";
2
+ import {} from "commander";
3
+ import { compactHome, DEFAULT_CONFIG, flattenResolvedConfig, getConfigPath, readConfigFile, resolveConfig, writeConfigFile, } from "../config.js";
4
+ import { resolveGlobalConfig } from "../context.js";
5
+ import { createTable, emitJson, printBanner, printSuccess } from "../output.js";
6
+ const CONFIG_KEYS = new Map([
7
+ ["rpc-url", "rpcUrl"],
8
+ ["wallet-path", "walletPath"],
9
+ ["cluster", "cluster"],
10
+ ["program-id", "programId"],
11
+ ["default-agent-id", "defaultAgentId"],
12
+ ]);
13
+ export function registerConfigCommands(program) {
14
+ const config = program.command("config").description("Manage AURA CLI configuration");
15
+ config
16
+ .command("init")
17
+ .description("Create or update ~/.aura/config.json")
18
+ .action(async function configInit() {
19
+ const { globals, config: current } = resolveGlobalConfig(this);
20
+ const output = {
21
+ json: globals.json === true,
22
+ quiet: globals.quiet === true,
23
+ };
24
+ printBanner(output, "AURA CLI - Initial Setup");
25
+ const rpcUrl = await input({
26
+ message: "RPC URL",
27
+ default: current.rpcUrl,
28
+ });
29
+ const walletPath = await input({
30
+ message: "Wallet path",
31
+ default: current.walletPath,
32
+ });
33
+ const programId = await input({
34
+ message: "Program ID",
35
+ default: current.programId,
36
+ });
37
+ const defaultAgentId = await input({
38
+ message: "Default agent ID (optional)",
39
+ default: current.defaultAgentId ?? "",
40
+ });
41
+ const filePath = writeConfigFile({
42
+ rpcUrl,
43
+ walletPath,
44
+ cluster: current.cluster,
45
+ programId,
46
+ defaultAgentId: defaultAgentId.trim().length > 0 ? defaultAgentId.trim() : null,
47
+ });
48
+ if (output.json) {
49
+ emitJson(output, {
50
+ path: filePath,
51
+ config: {
52
+ rpcUrl,
53
+ walletPath,
54
+ cluster: current.cluster,
55
+ programId,
56
+ defaultAgentId: defaultAgentId.trim().length > 0 ? defaultAgentId.trim() : null,
57
+ },
58
+ });
59
+ return;
60
+ }
61
+ printSuccess(output, `Config written to ${filePath}`);
62
+ });
63
+ config
64
+ .command("show")
65
+ .description("Display the resolved CLI configuration")
66
+ .action(async function configShow() {
67
+ const { globals, resolvedConfig, config: flattened } = resolveGlobalConfig(this);
68
+ const output = {
69
+ json: globals.json === true,
70
+ quiet: globals.quiet === true,
71
+ };
72
+ if (output.json) {
73
+ emitJson(output, {
74
+ values: flattened,
75
+ sources: {
76
+ rpcUrl: resolvedConfig.rpcUrl.source,
77
+ walletPath: resolvedConfig.walletPath.source,
78
+ cluster: resolvedConfig.cluster.source,
79
+ programId: resolvedConfig.programId.source,
80
+ defaultAgentId: resolvedConfig.defaultAgentId.source,
81
+ },
82
+ });
83
+ return;
84
+ }
85
+ printBanner(output, "Config");
86
+ const table = createTable(["Field", "Value", "Source"]);
87
+ table.push(["RPC URL", resolvedConfig.rpcUrl.value, resolvedConfig.rpcUrl.source], ["Wallet", compactHome(resolvedConfig.walletPath.value), resolvedConfig.walletPath.source], ["Cluster", resolvedConfig.cluster.value, resolvedConfig.cluster.source], ["Program ID", resolvedConfig.programId.value, resolvedConfig.programId.source], [
88
+ "Default Agent",
89
+ resolvedConfig.defaultAgentId.value ?? "—",
90
+ resolvedConfig.defaultAgentId.source,
91
+ ]);
92
+ console.log(table.toString());
93
+ });
94
+ config
95
+ .command("set")
96
+ .description("Set a single config value")
97
+ .argument("<key>", "rpc-url | wallet-path | cluster | program-id | default-agent-id")
98
+ .argument("<value>", "value to persist")
99
+ .action(async function configSet(key, value) {
100
+ const { globals } = resolveGlobalConfig(this);
101
+ const output = {
102
+ json: globals.json === true,
103
+ quiet: globals.quiet === true,
104
+ };
105
+ const field = CONFIG_KEYS.get(key);
106
+ if (!field) {
107
+ throw new Error(`Unknown config key '${key}'.`);
108
+ }
109
+ const current = readConfigFile();
110
+ const next = {
111
+ ...current,
112
+ [field]: field === "defaultAgentId" && value === "null" ? null : value,
113
+ };
114
+ const filePath = writeConfigFile(next);
115
+ const resolved = flattenResolvedConfig(resolveConfig());
116
+ if (output.json) {
117
+ emitJson(output, { path: filePath, key: field, value: next[field], config: resolved });
118
+ return;
119
+ }
120
+ printSuccess(output, `Updated ${field} in ${filePath}`);
121
+ });
122
+ }
123
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type Command } from "commander";
2
+ export declare function registerDashboardCommand(program: Command): void;
@@ -0,0 +1,29 @@
1
+ import {} from "commander";
2
+ import { buildCliContext } from "../context.js";
3
+ import { runDashboard } from "../dashboard.js";
4
+ import { resolveTreasuryAccount } from "./helpers.js";
5
+ export function registerDashboardCommand(program) {
6
+ program
7
+ .command("dashboard")
8
+ .description("Launch the full-screen treasury dashboard")
9
+ .option("--agent-id <id>", "treasury agent ID")
10
+ .option("--treasury <pda>", "treasury PDA")
11
+ .option("--interval <secs>", "refresh interval in seconds", Number)
12
+ .action(async function dashboardCommand() {
13
+ const ctx = buildCliContext(this);
14
+ const options = this.opts();
15
+ const intervalMs = typeof options["interval"] === "number" && options["interval"] > 0
16
+ ? Math.floor(options["interval"] * 1000)
17
+ : 5000;
18
+ const treasuryState = await resolveTreasuryAccount(ctx, {
19
+ agentId: typeof options["agentId"] === "string" ? options["agentId"] : undefined,
20
+ treasury: typeof options["treasury"] === "string" ? options["treasury"] : undefined,
21
+ });
22
+ await runDashboard({
23
+ ctx,
24
+ treasury: treasuryState.treasury,
25
+ intervalMs,
26
+ });
27
+ });
28
+ }
29
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,WAAW,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAC1C,MAAM,CAAC,mBAAmB,EAAE,6BAA6B,EAAE,MAAM,CAAC;SAClE,MAAM,CAAC,KAAK,UAAU,gBAAgB;QACrC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAA6B,CAAC;QACvD,MAAM,UAAU,GACd,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAChE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE;YACtD,OAAO,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAChF,QAAQ,EAAE,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACpF,CAAC,CAAC;QAEH,MAAM,YAAY,CAAC;YACjB,GAAG;YACH,QAAQ,EAAE,aAAa,CAAC,QAAQ;YAChC,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Command } from "commander";
2
+ export declare function registerDwalletCommands(program: Command): void;
@@ -0,0 +1,131 @@
1
+ import {} from "commander";
2
+ import { PublicKey } from "@solana/web3.js";
3
+ import { buildCliContext } from "../context.js";
4
+ import { formatChain } from "../domain.js";
5
+ import { formatUsd } from "../format.js";
6
+ import { createTable, emitJson, printBanner, printSuccess, serializeInstruction, startSpinner } from "../output.js";
7
+ import { buildRegisterDwalletArgs, promptChain, promptNumber, promptString, resolveTreasuryAccount, } from "./helpers.js";
8
+ function parseOptionalPubkey(value, label) {
9
+ if (typeof value !== "string" || value.trim().length === 0) {
10
+ return null;
11
+ }
12
+ try {
13
+ return new PublicKey(value.trim());
14
+ }
15
+ catch {
16
+ throw new Error(`${label} must be a valid base58 pubkey`);
17
+ }
18
+ }
19
+ function normalizeDigestHex(value, label) {
20
+ if (typeof value !== "string" || value.trim().length === 0) {
21
+ return null;
22
+ }
23
+ const normalized = value.trim().toLowerCase();
24
+ if (!/^[0-9a-f]{64}$/.test(normalized)) {
25
+ throw new Error(`${label} must be a 32-byte hex digest`);
26
+ }
27
+ return normalized;
28
+ }
29
+ function normalizePublicKeyHex(value) {
30
+ if (typeof value !== "string" || value.trim().length === 0) {
31
+ return null;
32
+ }
33
+ const normalized = value.trim().toLowerCase();
34
+ if (!/^[0-9a-f]+$/.test(normalized) || normalized.length % 2 !== 0) {
35
+ throw new Error("public-key-hex must contain valid hex bytes");
36
+ }
37
+ return normalized;
38
+ }
39
+ export function registerDwalletCommands(program) {
40
+ const dwallet = program.command("dwallet").description("Manage registered Ika dWallets");
41
+ dwallet
42
+ .command("register")
43
+ .description("Register a dWallet reference on a treasury")
44
+ .option("--agent-id <id>", "treasury agent ID")
45
+ .option("--treasury <pda>", "treasury PDA")
46
+ .option("--chain <name|number>", "target chain")
47
+ .option("--dwallet-id <id>", "Ika dWallet ID")
48
+ .option("--address <addr>", "native chain address")
49
+ .option("--balance <usd>", "current balance in USD", Number)
50
+ .option("--dwallet-account <pubkey>", "live dWallet PDA for execute/finalize flows")
51
+ .option("--authorized-user <pubkey>", "authorized user pubkey for live dWallet signing")
52
+ .option("--message-metadata-digest <hex>", "32-byte metadata digest for MetadataV2 signing")
53
+ .option("--public-key-hex <hex>", "raw dWallet public key bytes in hex")
54
+ .action(async function dwalletRegister() {
55
+ const ctx = buildCliContext(this);
56
+ if (!ctx.wallet) {
57
+ throw new Error("A wallet is required to register a dWallet.");
58
+ }
59
+ const options = this.opts();
60
+ const treasuryState = await resolveTreasuryAccount(ctx, {
61
+ agentId: typeof options["agentId"] === "string" ? options["agentId"] : undefined,
62
+ treasury: typeof options["treasury"] === "string" ? options["treasury"] : undefined,
63
+ });
64
+ const chain = await promptChain(typeof options["chain"] === "string" || typeof options["chain"] === "number"
65
+ ? options["chain"]
66
+ : undefined, "Chain");
67
+ const dwalletId = await promptString(typeof options["dwalletId"] === "string" ? options["dwalletId"] : undefined, "dWallet ID");
68
+ const address = await promptString(typeof options["address"] === "string" ? options["address"] : undefined, "Native address");
69
+ const balanceUsd = await promptNumber(typeof options["balance"] === "number" ? options["balance"] : undefined, "Current balance (USD)", { validate: (value) => value > 0 || (() => { throw new Error("Balance must be > 0"); })() });
70
+ const args = buildRegisterDwalletArgs({
71
+ chain,
72
+ dwalletId,
73
+ address,
74
+ balanceUsd,
75
+ dwalletAccount: parseOptionalPubkey(options["dwalletAccount"], "dWallet account"),
76
+ authorizedUserPubkey: parseOptionalPubkey(options["authorizedUser"], "Authorized user"),
77
+ messageMetadataDigest: normalizeDigestHex(options["messageMetadataDigest"], "Message metadata digest"),
78
+ publicKeyHex: normalizePublicKeyHex(options["publicKeyHex"]),
79
+ });
80
+ if (ctx.dryRun) {
81
+ const instruction = await ctx.client.registerDwalletInstruction({ owner: ctx.wallet.publicKey, treasury: treasuryState.treasury }, args);
82
+ emitJson(ctx.output, {
83
+ action: "dwallet.register",
84
+ treasury: treasuryState.treasury,
85
+ args,
86
+ instruction: serializeInstruction(instruction),
87
+ });
88
+ return;
89
+ }
90
+ const spinner = startSpinner(ctx.output, "Registering dWallet...");
91
+ const signature = await ctx.client.registerDwallet(ctx.wallet, { owner: ctx.wallet.publicKey, treasury: treasuryState.treasury }, args);
92
+ spinner.succeed("dWallet registered");
93
+ if (ctx.output.json) {
94
+ emitJson(ctx.output, { treasury: treasuryState.treasury, signature });
95
+ return;
96
+ }
97
+ printSuccess(ctx.output, `dWallet registered: ${signature}`);
98
+ });
99
+ dwallet
100
+ .command("list")
101
+ .description("List dWallets registered on a treasury")
102
+ .option("--agent-id <id>", "treasury agent ID")
103
+ .option("--treasury <pda>", "treasury PDA")
104
+ .action(async function dwalletList() {
105
+ const ctx = buildCliContext(this);
106
+ const options = this.opts();
107
+ const treasuryState = await resolveTreasuryAccount(ctx, {
108
+ agentId: typeof options["agentId"] === "string" ? options["agentId"] : undefined,
109
+ treasury: typeof options["treasury"] === "string" ? options["treasury"] : undefined,
110
+ });
111
+ if (ctx.output.json) {
112
+ emitJson(ctx.output, {
113
+ treasury: treasuryState.treasury,
114
+ dwallets: treasuryState.account.dwallets,
115
+ });
116
+ return;
117
+ }
118
+ printBanner(ctx.output, `dWallets: ${treasuryState.account.agentId}`);
119
+ const table = createTable(["Chain", "dWallet ID", "Address", "Balance"]);
120
+ for (const entry of treasuryState.account.dwallets) {
121
+ table.push([
122
+ formatChain(entry.chain),
123
+ entry.dwalletId,
124
+ entry.address,
125
+ formatUsd(entry.balanceUsd),
126
+ ]);
127
+ }
128
+ console.log(table.toString());
129
+ });
130
+ }
131
+ //# sourceMappingURL=dwallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dwallet.js","sourceRoot":"","sources":["../../src/commands/dwallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACpH,OAAO,EACL,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAEtB,SAAS,mBAAmB,CAAC,KAAc,EAAE,KAAa;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gCAAgC,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAAa;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;IAEzF,OAAO;SACJ,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,4CAA4C,CAAC;SACzD,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAC1C,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC;SAC/C,MAAM,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;SAC7C,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC;SAClD,MAAM,CAAC,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,CAAC;SAC3D,MAAM,CAAC,4BAA4B,EAAE,6CAA6C,CAAC;SACnF,MAAM,CAAC,4BAA4B,EAAE,iDAAiD,CAAC;SACvF,MAAM,CAAC,iCAAiC,EAAE,gDAAgD,CAAC;SAC3F,MAAM,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;SACvE,MAAM,CAAC,KAAK,UAAU,eAAe;QACpC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAA6B,CAAC;QACvD,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE;YACtD,OAAO,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAChF,QAAQ,EAAE,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACpF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,WAAW,CAC7B,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ;YAC1E,CAAC,CAAE,OAAO,CAAC,OAAO,CAAqB;YACvC,CAAC,CAAC,SAAS,EACb,OAAO,CACR,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,YAAY,CAClC,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3E,YAAY,CACb,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,YAAY,CAChC,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EACvE,gBAAgB,CACjB,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,YAAY,CACnC,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,EACvE,uBAAuB,EACvB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAC5F,CAAC;QAEF,MAAM,IAAI,GAAG,wBAAwB,CAAC;YACpC,KAAK;YACL,SAAS;YACT,OAAO;YACP,UAAU;YACV,cAAc,EAAE,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;YACjF,oBAAoB,EAAE,mBAAmB,CACvC,OAAO,CAAC,gBAAgB,CAAC,EACzB,iBAAiB,CAClB;YACD,qBAAqB,EAAE,kBAAkB,CACvC,OAAO,CAAC,uBAAuB,CAAC,EAChC,yBAAyB,CAC1B;YACD,YAAY,EAAE,qBAAqB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SAC7D,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,0BAA0B,CAC7D,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,EACjE,IAAI,CACL,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;gBACnB,MAAM,EAAE,kBAAkB;gBAC1B,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,IAAI;gBACJ,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC;aAC/C,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,eAAe,CAChD,GAAG,CAAC,MAAM,EACV,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,EACjE,IAAI,CACL,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAEtC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,SAAS,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;SAC9C,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAC1C,MAAM,CAAC,KAAK,UAAU,WAAW;QAChC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAA6B,CAAC;QACvD,MAAM,aAAa,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE;YACtD,OAAO,EAAE,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;YAChF,QAAQ,EAAE,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;SACpF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE;gBACnB,QAAQ,EAAE,aAAa,CAAC,QAAQ;gBAChC,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,QAAQ;aACzC,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QACzE,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnD,KAAK,CAAC,IAAI,CAAC;gBACT,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC;gBACxB,KAAK,CAAC,SAAS;gBACf,KAAK,CAAC,OAAO;gBACb,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC;aAC5B,CAAC,CAAC;QACL,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type Command } from "commander";
2
+ export declare function registerExecutionCommands(program: Command): void;
@@ -0,0 +1,261 @@
1
+ import BN from "bn.js";
2
+ import { PublicKey, SystemProgram, TransactionInstruction, } from "@solana/web3.js";
3
+ import {} from "commander";
4
+ import { buildCliContext } from "../context.js";
5
+ import { createTable, emitJson, printBanner, printSuccess, serializeInstruction, startSpinner, } from "../output.js";
6
+ import { buildMessageDigestHex, deriveApprovedExecutionAccounts, getMessageApprovalState, parseCiphertextVerified, parseDecryptionReady, resolvePendingProposal, sendInstructionsWithBudget, waitForMessageApproval, } from "../protocol.js";
7
+ import { requestDwalletSign } from "../ika.js";
8
+ import { renderTreasurySections } from "../treasury-view.js";
9
+ import { resolveTreasuryAccount } from "./helpers.js";
10
+ function buildExecutePendingInstruction(options) {
11
+ const keys = [
12
+ { pubkey: options.ctx.wallet.publicKey, isSigner: true, isWritable: false },
13
+ { pubkey: options.treasury, isSigner: false, isWritable: true },
14
+ ];
15
+ if (options.approvedAccounts) {
16
+ keys.push({
17
+ pubkey: options.approvedAccounts.messageApproval,
18
+ isSigner: false,
19
+ isWritable: true,
20
+ }, {
21
+ pubkey: options.approvedAccounts.dwalletAccount,
22
+ isSigner: false,
23
+ isWritable: false,
24
+ }, { pubkey: options.ctx.programId, isSigner: false, isWritable: false }, {
25
+ pubkey: options.approvedAccounts.cpiAuthority,
26
+ isSigner: false,
27
+ isWritable: false,
28
+ }, {
29
+ pubkey: options.approvedAccounts.dwalletProgram,
30
+ isSigner: false,
31
+ isWritable: false,
32
+ }, {
33
+ pubkey: options.approvedAccounts.dwalletCoordinator,
34
+ isSigner: false,
35
+ isWritable: false,
36
+ });
37
+ }
38
+ else {
39
+ keys.push({ pubkey: options.ctx.programId, isSigner: false, isWritable: false });
40
+ }
41
+ keys.push({ pubkey: SystemProgram.programId, isSigner: false, isWritable: false });
42
+ return new TransactionInstruction({
43
+ programId: options.ctx.programId,
44
+ keys,
45
+ data: options.ctx.client.coder.encode("executePending", {
46
+ now: new BN(options.now),
47
+ }),
48
+ });
49
+ }
50
+ async function renderExecutionWatch(ctx, treasury, account) {
51
+ const sections = renderTreasurySections(treasury, account);
52
+ const live = createTable(["Live check", "Value"]);
53
+ const pending = account.pending;
54
+ if (pending?.policyOutputCiphertextAccount) {
55
+ const policyOutput = new PublicKey(pending.policyOutputCiphertextAccount);
56
+ const info = await ctx.connection.getAccountInfo(policyOutput, "confirmed");
57
+ live.push(["Policy output verified", parseCiphertextVerified(info) ? "Yes" : "No"]);
58
+ }
59
+ if (pending?.decryptionRequest?.requestAccount) {
60
+ const requestAccount = new PublicKey(pending.decryptionRequest.requestAccount);
61
+ const info = await ctx.connection.getAccountInfo(requestAccount, "confirmed");
62
+ live.push(["Decryption ready", parseDecryptionReady(info) ? "Yes" : "No"]);
63
+ }
64
+ if (pending?.signatureRequest?.messageApprovalAccount) {
65
+ const messageApproval = new PublicKey(pending.signatureRequest.messageApprovalAccount);
66
+ const state = await getMessageApprovalState(ctx.connection, messageApproval);
67
+ live.push(["Message approval", state]);
68
+ }
69
+ printBanner(ctx.output, `Execution Watch: ${account.agentId}`);
70
+ if (sections.pending) {
71
+ console.log(sections.pending);
72
+ }
73
+ else {
74
+ console.log("No pending proposal.");
75
+ }
76
+ if (live.length > 0) {
77
+ console.log("");
78
+ console.log(live.toString());
79
+ }
80
+ }
81
+ export function registerExecutionCommands(program) {
82
+ const execution = program
83
+ .command("execution")
84
+ .description("Drive pending proposal execution and finalization");
85
+ execution
86
+ .command("execute")
87
+ .description("Run execute_pending for the current proposal")
88
+ .option("--agent-id <id>", "treasury agent ID")
89
+ .option("--treasury <pda>", "treasury PDA")
90
+ .option("--wait", "wait until message approval exists (approved) or pending clears (denied)")
91
+ .option("--wait-signed", "wait until the message approval reaches signed status")
92
+ .action(async function executionExecute() {
93
+ const ctx = buildCliContext(this);
94
+ if (!ctx.wallet) {
95
+ throw new Error("A wallet is required to execute pending proposals.");
96
+ }
97
+ const options = this.opts();
98
+ const treasuryState = await resolveTreasuryAccount(ctx, {
99
+ agentId: typeof options["agentId"] === "string" ? options["agentId"] : undefined,
100
+ treasury: typeof options["treasury"] === "string" ? options["treasury"] : undefined,
101
+ });
102
+ const pending = resolvePendingProposal(treasuryState.account);
103
+ const approvedAccounts = pending.decision.approved
104
+ ? deriveApprovedExecutionAccounts(treasuryState.account, {
105
+ auraProgramId: ctx.programId,
106
+ })
107
+ : undefined;
108
+ const now = Math.floor(Date.now() / 1000);
109
+ const instruction = buildExecutePendingInstruction({
110
+ ctx,
111
+ treasury: treasuryState.treasury,
112
+ now,
113
+ approvedAccounts,
114
+ });
115
+ if (ctx.dryRun) {
116
+ emitJson(ctx.output, {
117
+ action: "execution.execute",
118
+ treasury: treasuryState.treasury,
119
+ approved: pending.decision.approved,
120
+ messageApproval: approvedAccounts?.messageApproval,
121
+ instruction: serializeInstruction(instruction),
122
+ });
123
+ return;
124
+ }
125
+ const spinner = startSpinner(ctx.output, pending.decision.approved
126
+ ? "Submitting execute_pending for live dWallet signing..."
127
+ : "Submitting denial execution...");
128
+ const signature = await sendInstructionsWithBudget({
129
+ connection: ctx.connection,
130
+ payer: ctx.wallet,
131
+ instructions: [instruction],
132
+ });
133
+ if (pending.decision.approved && approvedAccounts && options["waitSigned"] === true) {
134
+ spinner.setText("Waiting for message approval signature...");
135
+ await waitForMessageApproval(ctx.connection, approvedAccounts.messageApproval, "signed", { timeoutMs: 180_000 });
136
+ }
137
+ else if (pending.decision.approved && approvedAccounts && options["wait"] === true) {
138
+ spinner.setText("Waiting for message approval account...");
139
+ await waitForMessageApproval(ctx.connection, approvedAccounts.messageApproval, "pending", { timeoutMs: 120_000 });
140
+ // Drive the dWallet presign + sign flow via the Ika gRPC network
141
+ spinner.setText("Requesting dWallet presign + sign via Ika network...");
142
+ try {
143
+ const messageDigest = Buffer.from(buildMessageDigestHex(approvedAccounts.pending, approvedAccounts.dwallet), "hex");
144
+ const txSigBytes = Buffer.from(Buffer.from(signature, "base64").length === 64
145
+ ? Buffer.from(signature, "base64")
146
+ : Buffer.alloc(64));
147
+ await requestDwalletSign(ctx.wallet.publicKey, approvedAccounts.dwalletAccount, messageDigest, txSigBytes);
148
+ spinner.setText("Waiting for message approval to be signed...");
149
+ await waitForMessageApproval(ctx.connection, approvedAccounts.messageApproval, "signed", { timeoutMs: 180_000 });
150
+ }
151
+ catch (err) {
152
+ // Non-fatal — the message approval may already be signed or the
153
+ // dWallet network may process it asynchronously
154
+ spinner.setText(`dWallet sign request: ${err instanceof Error ? err.message : String(err)}`);
155
+ }
156
+ }
157
+ spinner.succeed("Execution request submitted");
158
+ const refreshed = await ctx.client.getTreasuryAccount(treasuryState.treasury);
159
+ if (ctx.output.json) {
160
+ emitJson(ctx.output, {
161
+ treasury: treasuryState.treasury,
162
+ signature,
163
+ approved: pending.decision.approved,
164
+ messageApproval: approvedAccounts?.messageApproval,
165
+ pending: refreshed.pending,
166
+ });
167
+ return;
168
+ }
169
+ if (!pending.decision.approved && !refreshed.pending) {
170
+ printSuccess(ctx.output, `Denied proposal cleared: ${signature}`);
171
+ return;
172
+ }
173
+ printSuccess(ctx.output, pending.decision.approved
174
+ ? `Execution request submitted: ${signature}`
175
+ : `Execution request submitted: ${signature}`);
176
+ });
177
+ execution
178
+ .command("finalize")
179
+ .description("Finalize an approved proposal after dWallet signing")
180
+ .option("--agent-id <id>", "treasury agent ID")
181
+ .option("--treasury <pda>", "treasury PDA")
182
+ .option("--message-approval <pubkey>", "override the pending message approval account")
183
+ .action(async function executionFinalize() {
184
+ const ctx = buildCliContext(this);
185
+ if (!ctx.wallet) {
186
+ throw new Error("A wallet is required to finalize execution.");
187
+ }
188
+ const options = this.opts();
189
+ const treasuryState = await resolveTreasuryAccount(ctx, {
190
+ agentId: typeof options["agentId"] === "string" ? options["agentId"] : undefined,
191
+ treasury: typeof options["treasury"] === "string" ? options["treasury"] : undefined,
192
+ });
193
+ const pending = resolvePendingProposal(treasuryState.account);
194
+ const messageApproval = typeof options["messageApproval"] === "string"
195
+ ? new PublicKey(options["messageApproval"])
196
+ : pending.signatureRequest?.messageApprovalAccount
197
+ ? new PublicKey(pending.signatureRequest.messageApprovalAccount)
198
+ : undefined;
199
+ if (!messageApproval) {
200
+ throw new Error("No message approval account is available for finalize_execution.");
201
+ }
202
+ const now = Math.floor(Date.now() / 1000);
203
+ if (ctx.dryRun) {
204
+ const instruction = await ctx.client.finalizeExecutionInstruction({
205
+ operator: ctx.wallet.publicKey,
206
+ treasury: treasuryState.treasury,
207
+ messageApproval,
208
+ }, now);
209
+ emitJson(ctx.output, {
210
+ action: "execution.finalize",
211
+ treasury: treasuryState.treasury,
212
+ messageApproval,
213
+ instruction: serializeInstruction(instruction),
214
+ });
215
+ return;
216
+ }
217
+ const spinner = startSpinner(ctx.output, "Finalizing execution...");
218
+ const signature = await ctx.client.finalizeExecution(ctx.wallet, {
219
+ operator: ctx.wallet.publicKey,
220
+ treasury: treasuryState.treasury,
221
+ messageApproval,
222
+ }, now);
223
+ const refreshed = await ctx.client.getTreasuryAccount(treasuryState.treasury);
224
+ spinner.succeed("Execution finalized");
225
+ if (ctx.output.json) {
226
+ emitJson(ctx.output, {
227
+ treasury: treasuryState.treasury,
228
+ signature,
229
+ totalTransactions: refreshed.totalTransactions,
230
+ pending: refreshed.pending,
231
+ });
232
+ return;
233
+ }
234
+ printSuccess(ctx.output, `Execution finalized: ${signature} (total tx ${refreshed.totalTransactions})`);
235
+ });
236
+ execution
237
+ .command("watch")
238
+ .description("Continuously watch one treasury's execution state")
239
+ .option("--agent-id <id>", "treasury agent ID")
240
+ .option("--treasury <pda>", "treasury PDA")
241
+ .option("--interval <secs>", "refresh interval in seconds", Number)
242
+ .action(async function executionWatch() {
243
+ const ctx = buildCliContext(this);
244
+ const options = this.opts();
245
+ const intervalMs = typeof options["interval"] === "number" && options["interval"] > 0
246
+ ? Math.floor(options["interval"] * 1000)
247
+ : 5000;
248
+ while (true) {
249
+ const treasuryState = await resolveTreasuryAccount(ctx, {
250
+ agentId: typeof options["agentId"] === "string" ? options["agentId"] : undefined,
251
+ treasury: typeof options["treasury"] === "string" ? options["treasury"] : undefined,
252
+ });
253
+ if (!ctx.output.json) {
254
+ console.clear();
255
+ }
256
+ await renderExecutionWatch(ctx, treasuryState.treasury, treasuryState.account);
257
+ await new Promise((resolve) => setTimeout(resolve, intervalMs));
258
+ }
259
+ });
260
+ }
261
+ //# sourceMappingURL=execution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../src/commands/execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type Command } from "commander";
2
+ export declare function registerGovernanceCommands(program: Command): void;