@prktsol/prkt 1.0.0 → 1.0.1

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 (177) hide show
  1. package/.env.devnet.all-protocols.example +5 -0
  2. package/.env.example +7 -0
  3. package/CLI.md +24 -0
  4. package/CLI_QUICKSTART.md +16 -0
  5. package/README.md +59 -12
  6. package/dist/agent/AgentManager.d.ts +61 -0
  7. package/dist/agent/AgentRuntime.d.ts +28 -0
  8. package/dist/agent/DecisionEngine.d.ts +51 -0
  9. package/dist/agent/MockPriceFeed.d.ts +10 -0
  10. package/dist/agent/intents/types.d.ts +35 -0
  11. package/dist/agent/new-index.d.ts +9 -0
  12. package/dist/agent/policyFactory.d.ts +2 -0
  13. package/dist/agent/registry/AgentRegistry.d.ts +11 -0
  14. package/dist/agent/runner/AgentRunner.d.ts +51 -0
  15. package/dist/agent/runner/AgentRunner.js +59 -2
  16. package/dist/agent/strategies/MemoHeartbeatStrategy.d.ts +6 -0
  17. package/dist/agent/strategies/SimpleScriptedTransferStrategy.d.ts +12 -0
  18. package/dist/agent/strategies/TokenRebalancerStrategy.d.ts +13 -0
  19. package/dist/agent/strategies/TreasuryDistributorStrategy.d.ts +12 -0
  20. package/dist/agent/strategies/UniversalDeFiStrategy.d.ts +22 -0
  21. package/dist/agent/types/AgentContext.d.ts +28 -0
  22. package/dist/anchoring/SessionAnchor.d.ts +42 -0
  23. package/dist/anchoring/SessionAnchor.js +161 -0
  24. package/dist/cli/index.d.ts +2 -0
  25. package/dist/cli/index.js +157 -16
  26. package/dist/cli/services/activityStore.d.ts +8 -0
  27. package/dist/cli/services/agentRegistry.d.ts +20 -0
  28. package/dist/cli/services/agentRuntime.d.ts +6 -0
  29. package/dist/cli/services/storagePaths.d.ts +8 -0
  30. package/dist/cli/services/strategyFactory.d.ts +5 -0
  31. package/dist/cli/services/walletCrypto.d.ts +12 -0
  32. package/dist/cli/services/walletRegistry.d.ts +26 -0
  33. package/dist/cli/types.d.ts +68 -0
  34. package/dist/cli/utils/completion.d.ts +4 -0
  35. package/dist/cli/utils/output.d.ts +5 -0
  36. package/dist/cli/utils/output.js +4 -1
  37. package/dist/compression/AuditLogManager.d.ts +9 -0
  38. package/dist/compression/AuditLogManager.js +86 -0
  39. package/dist/compression/PolicyAccountManager.d.ts +11 -0
  40. package/dist/compression/PolicyAccountManager.js +113 -0
  41. package/dist/compression/types.d.ts +20 -0
  42. package/dist/compression/types.js +2 -0
  43. package/dist/config/PRKTConfig.d.ts +17 -0
  44. package/dist/config/PRKTConfig.js +19 -0
  45. package/dist/config/agentPolicies.d.ts +14 -0
  46. package/dist/config/env.d.ts +39 -0
  47. package/dist/config/env.js +37 -0
  48. package/dist/config/policyPresets.d.ts +22 -0
  49. package/dist/core/balances/BalanceService.d.ts +14 -0
  50. package/dist/core/funding/DevnetFundingService.d.ts +38 -0
  51. package/dist/core/funding/DevnetFundingService.js +73 -6
  52. package/dist/core/idempotency/ExecutionIdempotencyGuard.d.ts +39 -0
  53. package/dist/core/index.d.ts +8 -0
  54. package/dist/core/rpc/RpcClient.d.ts +21 -0
  55. package/dist/core/rpc/RpcClient.js +35 -0
  56. package/dist/core/rpc/RpcFailoverClient.d.ts +42 -0
  57. package/dist/core/tokens/TokenService.d.ts +40 -0
  58. package/dist/core/transactions/PostTransactionVerifier.d.ts +47 -0
  59. package/dist/core/transactions/TransactionService.d.ts +46 -0
  60. package/dist/core/types/services.d.ts +27 -0
  61. package/dist/core/wallet/WalletManager.d.ts +21 -0
  62. package/dist/defi/DeFiCoordinator.d.ts +24 -0
  63. package/dist/defi/DeFiExecutor.d.ts +15 -0
  64. package/dist/defi/DeFiPolicyGuard.d.ts +7 -0
  65. package/dist/defi/adapters/JupiterAdapter.d.ts +5 -0
  66. package/dist/defi/adapters/KaminoAdapter.d.ts +6 -0
  67. package/dist/defi/adapters/MarinadeAdapter.d.ts +5 -0
  68. package/dist/defi/adapters/RaydiumAdapter.d.ts +20 -0
  69. package/dist/defi/kamino/kaminoInstructionCompat.d.ts +3 -0
  70. package/dist/defi/kamino/kaminoLiveConfig.d.ts +14 -0
  71. package/dist/defi/kamino/loadKaminoMarketWithFallback.d.ts +11 -0
  72. package/dist/defi/lp/LpInstructionBuilder.d.ts +15 -0
  73. package/dist/defi/lp/RaydiumLpInstructionBuilder.d.ts +28 -0
  74. package/dist/defi/lp/raydiumDevnetConfig.d.ts +11 -0
  75. package/dist/defi/protocols.d.ts +8 -0
  76. package/dist/defi/types.d.ts +65 -0
  77. package/dist/defi/universal/UniversalDeFiOrchestrator.d.ts +24 -0
  78. package/dist/defi/universal/UniversalDeFiOrchestrator.js +157 -0
  79. package/dist/defi/universal/adapters.d.ts +25 -0
  80. package/dist/defi/universal/index.d.ts +2 -0
  81. package/dist/defi/universal/liveExecutors.d.ts +23 -0
  82. package/dist/defi/universal/types.d.ts +45 -0
  83. package/dist/demo/scenarios/multiAgentDevnetScenario.d.ts +5 -0
  84. package/dist/demo/scripts/runMultiAgentDevnetDemo.d.ts +1 -0
  85. package/dist/dex/JupiterSwapClient.d.ts +28 -0
  86. package/dist/dex/SwapExecutor.d.ts +36 -0
  87. package/dist/errors/PRKTError.d.ts +15 -0
  88. package/dist/errors/PRKTError.js +38 -0
  89. package/dist/evm/EvmAdapter.d.ts +45 -0
  90. package/dist/evm/EvmAdapter.js +2 -0
  91. package/dist/evm/NeonWalletBridge.d.ts +9 -0
  92. package/dist/evm/NeonWalletBridge.js +40 -0
  93. package/dist/evm/adapters/AaveAdapter.d.ts +17 -0
  94. package/dist/evm/adapters/AaveAdapter.js +100 -0
  95. package/dist/evm/adapters/UniswapV3Adapter.d.ts +18 -0
  96. package/dist/evm/adapters/UniswapV3Adapter.js +146 -0
  97. package/dist/index.d.ts +15 -0
  98. package/dist/index.js +35 -20
  99. package/dist/kora/KoraRpcClient.d.ts +14 -0
  100. package/dist/kora/KoraSigner.d.ts +22 -0
  101. package/dist/kora/KoraSigner.js +33 -10
  102. package/dist/kora/gaslessDemo.d.ts +9 -0
  103. package/dist/onchain/index.d.ts +2 -0
  104. package/dist/onchain/index.js +17 -0
  105. package/dist/onchain/policyGuardProgram.d.ts +86 -0
  106. package/dist/onchain/policyGuardProgram.js +248 -0
  107. package/dist/policy/PolicyGuard.d.ts +13 -0
  108. package/dist/policy/emergencyLock.d.ts +4 -0
  109. package/dist/policy/engine/PolicyEngine.d.ts +28 -0
  110. package/dist/policy/engine/PolicyEngine.js +109 -1
  111. package/dist/policy/errors.d.ts +3 -0
  112. package/dist/policy/index.d.ts +3 -0
  113. package/dist/policy/sandbox/SandboxExecutor.d.ts +44 -0
  114. package/dist/policy/sandbox/SandboxExecutor.js +245 -3
  115. package/dist/policy/types/policy.d.ts +55 -0
  116. package/dist/scripts/devnetFunding.d.ts +9 -0
  117. package/dist/scripts/devnetFunding.js +0 -1
  118. package/dist/scripts/devnetWalletPreflight.d.ts +8 -0
  119. package/dist/scripts/localnetCheck.d.ts +1 -0
  120. package/dist/scripts/managedAgentWallet.d.ts +34 -0
  121. package/dist/scripts/mode.d.ts +2 -0
  122. package/dist/scripts/releaseReadiness.d.ts +9 -0
  123. package/dist/scripts/runAgentUniversalDeFi.d.ts +1 -0
  124. package/dist/scripts/runAutonomousAgentWalletDevnet.d.ts +1 -0
  125. package/dist/scripts/runAutonomousAgentWalletDevnet.js +1 -1
  126. package/dist/scripts/runAutonomousPortfolioDevnet.d.ts +1 -0
  127. package/dist/scripts/runAutonomousPortfolioDevnet.js +1 -1
  128. package/dist/scripts/runBorrowStrategy.d.ts +1 -0
  129. package/dist/scripts/runDeFiSuite.d.ts +1 -0
  130. package/dist/scripts/runDemoRehearsal.d.ts +1 -0
  131. package/dist/scripts/runDemoRehearsal.js +39 -10
  132. package/dist/scripts/runDevnetFeatureMatrix.d.ts +43 -0
  133. package/dist/scripts/runDevnetFeatureMatrix.js +787 -0
  134. package/dist/scripts/runDevnetWalletDemo.d.ts +1 -0
  135. package/dist/scripts/runGaslessMemo.d.ts +1 -0
  136. package/dist/scripts/runGaslessMemo.js +9 -1
  137. package/dist/scripts/runGaslessWalletDemo.d.ts +1 -0
  138. package/dist/scripts/runGaslessWalletDemo.js +9 -1
  139. package/dist/scripts/runKaminoDevnet.d.ts +1 -0
  140. package/dist/scripts/runKaminoDevnet.js +82 -42
  141. package/dist/scripts/runLpStrategy.d.ts +1 -0
  142. package/dist/scripts/runMarinadeDevnet.d.ts +1 -0
  143. package/dist/scripts/runOnchainPolicyGuardDevnet.d.ts +1 -0
  144. package/dist/scripts/runOnchainPolicyGuardDevnet.js +113 -0
  145. package/dist/scripts/runOrcaLpDevnet.d.ts +1 -0
  146. package/dist/scripts/runRaydiumLpDevnet.d.ts +1 -0
  147. package/dist/scripts/runReleaseReadiness.d.ts +1 -0
  148. package/dist/scripts/runStakeStrategy.d.ts +1 -0
  149. package/dist/scripts/runStatus.d.ts +1 -0
  150. package/dist/scripts/runStatus.js +22 -0
  151. package/dist/scripts/runStressTest.d.ts +1 -0
  152. package/dist/scripts/runTradeLoop.d.ts +1 -0
  153. package/dist/scripts/runUniversalDeFiDemo.d.ts +1 -0
  154. package/dist/scripts/runYieldStrategy.d.ts +1 -0
  155. package/dist/scripts/runtimeFactory.d.ts +8 -0
  156. package/dist/scripts/shared.d.ts +3 -0
  157. package/dist/scripts/shared.js +1 -0
  158. package/dist/scripts/simulateAttack.d.ts +1 -0
  159. package/dist/scripts/simulateSwarm.d.ts +1 -0
  160. package/dist/simulation/attack.d.ts +8 -0
  161. package/dist/solana/memoLedger.d.ts +33 -0
  162. package/dist/solana/memoLedger.js +205 -0
  163. package/dist/solana/programs.d.ts +6 -0
  164. package/dist/spl/TokenWallet.d.ts +18 -0
  165. package/dist/types/policy.d.ts +23 -0
  166. package/dist/wallet/WalletManager.d.ts +1 -0
  167. package/dist/zk/PolicyCircuit.d.ts +48 -0
  168. package/dist/zk/PolicyCircuit.js +171 -0
  169. package/dist/zk/ProofAnchor.d.ts +33 -0
  170. package/dist/zk/ProofAnchor.js +109 -0
  171. package/dist/zkCompression/CompressedCommitmentAnchor.d.ts +31 -0
  172. package/dist/zkCompression/CompressedCommitmentAnchor.js +90 -0
  173. package/dist/zkCompression/CompressedDataAccount.d.ts +45 -0
  174. package/dist/zkCompression/CompressedDataAccount.js +349 -0
  175. package/dist/zkCompression/LocalPayloadRegistry.d.ts +23 -0
  176. package/dist/zkCompression/LocalPayloadRegistry.js +53 -0
  177. package/package.json +20 -4
@@ -0,0 +1,787 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.extractJsonPayload = extractJsonPayload;
7
+ exports.createIntentFile = createIntentFile;
8
+ exports.summarizeSteps = summarizeSteps;
9
+ exports.renderMarkdownReport = renderMarkdownReport;
10
+ exports.writeArtifacts = writeArtifacts;
11
+ exports.runDevnetFeatureMatrix = runDevnetFeatureMatrix;
12
+ const fs_1 = require("fs");
13
+ const os_1 = __importDefault(require("os"));
14
+ const path_1 = __importDefault(require("path"));
15
+ const child_process_1 = require("child_process");
16
+ const anchor_1 = require("@coral-xyz/anchor");
17
+ const web3_js_1 = require("@solana/web3.js");
18
+ const SessionAnchor_1 = require("../anchoring/SessionAnchor");
19
+ const AuditLogManager_1 = require("../compression/AuditLogManager");
20
+ const PolicyAccountManager_1 = require("../compression/PolicyAccountManager");
21
+ const PRKTConfig_1 = require("../config/PRKTConfig");
22
+ const env_1 = require("../config/env");
23
+ const BalanceService_1 = require("../core/balances/BalanceService");
24
+ const DevnetFundingService_1 = require("../core/funding/DevnetFundingService");
25
+ const RpcClient_1 = require("../core/rpc/RpcClient");
26
+ const TokenService_1 = require("../core/tokens/TokenService");
27
+ const TransactionService_1 = require("../core/transactions/TransactionService");
28
+ const WalletManager_1 = require("../core/wallet/WalletManager");
29
+ const policy_1 = require("../policy");
30
+ const SandboxExecutor_1 = require("../policy/sandbox/SandboxExecutor");
31
+ const programs_1 = require("../solana/programs");
32
+ const ProofAnchor_1 = require("../zk/ProofAnchor");
33
+ const tsNodeBin = require.resolve("ts-node/dist/bin.js");
34
+ const includeProtocolLive = process.env.PRKT_DEVNET_MATRIX_INCLUDE_PROTOCOL_LIVE === "1";
35
+ const includeSensitiveExports = process.env.PRKT_DEVNET_MATRIX_INCLUDE_EXPORTS === "1";
36
+ const includeStress = process.env.PRKT_DEVNET_MATRIX_INCLUDE_STRESS === "1";
37
+ const matrixCliHome = path_1.default.join(process.cwd(), ".prkt-devnet-matrix");
38
+ const MATRIX_WALLET_FUNDING_SOL = 0.4;
39
+ const MATRIX_AGENT_FUNDING_SOL = 0.2;
40
+ function createChildEnv(extra) {
41
+ return {
42
+ ...process.env,
43
+ PRKT_CLI_HOME: matrixCliHome,
44
+ ...(extra ?? {})
45
+ };
46
+ }
47
+ function recordStep(steps, step) {
48
+ steps.push(step);
49
+ const marker = step.status.toUpperCase().padEnd(4, " ");
50
+ console.log(`[${marker}] ${step.category} :: ${step.name} -> ${step.detail}`);
51
+ }
52
+ function failStep(steps, category, name, detail) {
53
+ recordStep(steps, {
54
+ category,
55
+ detail,
56
+ name,
57
+ status: "fail"
58
+ });
59
+ throw new Error(`${category}/${name}: ${detail}`);
60
+ }
61
+ function extractJsonPayload(stdout) {
62
+ const trimmed = stdout.trim();
63
+ if (trimmed.length === 0) {
64
+ throw new Error("command produced no stdout");
65
+ }
66
+ const candidateIndexes = [];
67
+ for (let index = 0; index < trimmed.length; index += 1) {
68
+ const current = trimmed[index];
69
+ if ((current === "{" || current === "[") && (index === 0 || trimmed[index - 1] === "\n")) {
70
+ candidateIndexes.push(index);
71
+ }
72
+ }
73
+ for (let index = candidateIndexes.length - 1; index >= 0; index -= 1) {
74
+ const candidate = trimmed.slice(candidateIndexes[index]).trimStart();
75
+ const extracted = extractLeadingJson(candidate);
76
+ if (!extracted) {
77
+ continue;
78
+ }
79
+ try {
80
+ return JSON.parse(extracted);
81
+ }
82
+ catch {
83
+ // Continue searching.
84
+ }
85
+ }
86
+ throw new Error("unable to parse JSON payload from stdout");
87
+ }
88
+ function extractLeadingJson(candidate) {
89
+ const opening = candidate[0];
90
+ const closing = opening === "{" ? "}" : opening === "[" ? "]" : null;
91
+ if (!closing) {
92
+ return null;
93
+ }
94
+ let depth = 0;
95
+ let inString = false;
96
+ let isEscaped = false;
97
+ for (let index = 0; index < candidate.length; index += 1) {
98
+ const current = candidate[index];
99
+ if (inString) {
100
+ if (isEscaped) {
101
+ isEscaped = false;
102
+ continue;
103
+ }
104
+ if (current === "\\") {
105
+ isEscaped = true;
106
+ continue;
107
+ }
108
+ if (current === "\"") {
109
+ inString = false;
110
+ }
111
+ continue;
112
+ }
113
+ if (current === "\"") {
114
+ inString = true;
115
+ continue;
116
+ }
117
+ if (current === opening) {
118
+ depth += 1;
119
+ continue;
120
+ }
121
+ if (current === closing) {
122
+ depth -= 1;
123
+ if (depth === 0) {
124
+ return candidate.slice(0, index + 1);
125
+ }
126
+ }
127
+ }
128
+ return null;
129
+ }
130
+ function runTsNodeCommand(input) {
131
+ const result = (0, child_process_1.spawnSync)(process.execPath, [tsNodeBin, input.file, ...(input.args ?? [])], {
132
+ cwd: process.cwd(),
133
+ encoding: "utf8",
134
+ env: createChildEnv(input.env)
135
+ });
136
+ if (result.status !== 0) {
137
+ throw new Error((result.stderr || result.stdout || "command failed").trim());
138
+ }
139
+ return {
140
+ payload: extractJsonPayload(result.stdout),
141
+ stderr: result.stderr,
142
+ stdout: result.stdout
143
+ };
144
+ }
145
+ function runScriptStep(input) {
146
+ const result = (0, child_process_1.spawnSync)(process.execPath, [tsNodeBin, input.file, ...(input.args ?? [])], {
147
+ cwd: process.cwd(),
148
+ encoding: "utf8",
149
+ env: createChildEnv(input.env)
150
+ });
151
+ if (result.status === 0) {
152
+ recordStep(input.steps, {
153
+ category: input.category,
154
+ detail: "command completed",
155
+ name: input.name,
156
+ status: "ok"
157
+ });
158
+ return {
159
+ ok: true,
160
+ stdout: result.stdout
161
+ };
162
+ }
163
+ recordStep(input.steps, {
164
+ category: input.category,
165
+ detail: (result.stderr || result.stdout || "command failed").trim(),
166
+ name: input.name,
167
+ status: input.optional ? "warn" : "fail"
168
+ });
169
+ if (!input.optional) {
170
+ throw new Error(`${input.name} failed`);
171
+ }
172
+ return {
173
+ ok: false,
174
+ stdout: result.stdout
175
+ };
176
+ }
177
+ function runCliJson(args) {
178
+ const result = runTsNodeCommand({
179
+ args: ["--json", ...args],
180
+ file: "src/cli/index.ts"
181
+ });
182
+ return result.payload;
183
+ }
184
+ async function runAdvancedDevnetFlow(agentId) {
185
+ const originalCompression = { ...PRKTConfig_1.defaultPRKTConfig.zkCompression };
186
+ const originalProofs = { ...PRKTConfig_1.defaultPRKTConfig.zkPolicyProofs };
187
+ PRKTConfig_1.defaultPRKTConfig.zkCompression = {
188
+ enabled: true,
189
+ rpcEndpoint: (0, env_1.getRpcUrl)()
190
+ };
191
+ PRKTConfig_1.defaultPRKTConfig.zkPolicyProofs = {
192
+ enabled: true
193
+ };
194
+ try {
195
+ const keypair = web3_js_1.Keypair.generate();
196
+ const walletManager = WalletManager_1.WalletManager.fromSecretKey(keypair.secretKey, "generated");
197
+ const rpcClient = new RpcClient_1.RpcClient((0, env_1.getRpcUrl)(), "confirmed");
198
+ const tokenService = new TokenService_1.TokenService(rpcClient);
199
+ const transactionService = new TransactionService_1.TransactionService(rpcClient);
200
+ const balanceService = new BalanceService_1.BalanceService(rpcClient, tokenService);
201
+ const fundingService = new DevnetFundingService_1.DevnetFundingService(rpcClient, transactionService);
202
+ await fundingService.ensureMinimumSol({
203
+ balanceService,
204
+ minimumSol: 0.05,
205
+ recipient: walletManager.publicKey
206
+ });
207
+ await fundingService.waitForMinimumBalance({
208
+ balanceService,
209
+ minimumSol: 0.05,
210
+ recipient: walletManager.publicKey
211
+ });
212
+ const policyManager = new PolicyAccountManager_1.PolicyAccountManager((0, env_1.getRpcUrl)());
213
+ const policyAccountSignature = await policyManager.createCompressedPolicyAccount(agentId, {
214
+ dailySpendLimit: new anchor_1.BN(250_000_000),
215
+ sessionTTL: 30,
216
+ programAllowlist: [programs_1.MEMO_PROGRAM_ID],
217
+ killSwitchActive: false,
218
+ spentToday: new anchor_1.BN(0),
219
+ lastResetTimestamp: Date.now()
220
+ }, keypair);
221
+ await policyManager.fetchCompressedPolicyAccount(agentId);
222
+ const policyEngine = new policy_1.PolicyEngine({
223
+ agentId,
224
+ approvalMode: "sandbox",
225
+ limits: {
226
+ maxSolPerTxLamports: 250_000_000,
227
+ maxSplPerTxRawAmount: 1000000000n,
228
+ maxTransactionsPerDay: 10,
229
+ maxTransactionsPerSession: 10
230
+ },
231
+ rules: {
232
+ allowedMintAddresses: [],
233
+ allowedProgramIds: [programs_1.MEMO_PROGRAM_ID.toBase58()],
234
+ denyUnknownInstructionsByDefault: true,
235
+ rejectSuspiciousBalanceDeltas: true,
236
+ requireSimulationSuccess: true
237
+ },
238
+ sessionExpiresAtIso8601: new Date(Date.now() + 30 * 60_000).toISOString()
239
+ });
240
+ const sandbox = new SandboxExecutor_1.SandboxExecutor(policyEngine, transactionService, "sandbox");
241
+ const built = await transactionService.buildTransaction({
242
+ feePayer: walletManager.publicKey,
243
+ instructions: [transactionService.buildMemoInstruction(`matrix:${agentId}`)],
244
+ signer: walletManager
245
+ });
246
+ const sessionAnchor = new SessionAnchor_1.SessionAnchor((0, env_1.getRpcUrl)(), walletManager);
247
+ const auditLogManager = new AuditLogManager_1.AuditLogManager((0, env_1.getRpcUrl)());
248
+ const proofAnchor = new ProofAnchor_1.ProofAnchor((0, env_1.getRpcUrl)(), walletManager);
249
+ const sessionStart = await sessionAnchor.startSession(agentId);
250
+ const executed = await sandbox.executePreparedTransaction({
251
+ confirmationStrategy: built.confirmationStrategy,
252
+ solanaKeypair: keypair,
253
+ transaction: built.transaction
254
+ });
255
+ if (!executed.signature) {
256
+ throw new Error("advanced devnet memo execution did not return a signature");
257
+ }
258
+ const auditLog = await auditLogManager.fetchAuditLog(agentId);
259
+ const closed = await sessionAnchor.closeSession(sessionStart.sessionId, auditLog);
260
+ const sessionVerification = await sessionAnchor.verifySession(sessionStart.sessionId, closed.commitment);
261
+ if (!sessionVerification.valid) {
262
+ throw new Error(`session verification failed: ${sessionVerification.reason ?? "unknown reason"}`);
263
+ }
264
+ const proofVerification = await proofAnchor.verifyProof(executed.signature);
265
+ if (!proofVerification.valid) {
266
+ throw new Error(`proof verification failed: ${proofVerification.reason ?? "unknown reason"}`);
267
+ }
268
+ return {
269
+ agentId,
270
+ commitment: closed.commitment,
271
+ policyAccountSignature,
272
+ proofSignature: executed.signature,
273
+ sessionId: sessionStart.sessionId,
274
+ sessionSignature: closed.closeSignature
275
+ };
276
+ }
277
+ finally {
278
+ PRKTConfig_1.defaultPRKTConfig.zkCompression = originalCompression;
279
+ PRKTConfig_1.defaultPRKTConfig.zkPolicyProofs = originalProofs;
280
+ }
281
+ }
282
+ function createIntentFile(agentPublicKey) {
283
+ const tempDir = path_1.default.join(os_1.default.tmpdir(), "prkt-devnet-matrix");
284
+ (0, fs_1.mkdirSync)(tempDir, { recursive: true });
285
+ const intentPath = path_1.default.join(tempDir, `intent-${Date.now()}.json`);
286
+ (0, fs_1.writeFileSync)(intentPath, JSON.stringify({
287
+ type: "transfer-sol",
288
+ to: agentPublicKey,
289
+ lamports: 1_000_000
290
+ }, null, 2), "utf8");
291
+ return intentPath;
292
+ }
293
+ function summarizeSteps(steps) {
294
+ return steps.reduce((counts, step) => {
295
+ counts.total += 1;
296
+ counts[step.status] += 1;
297
+ return counts;
298
+ }, {
299
+ fail: 0,
300
+ ok: 0,
301
+ skip: 0,
302
+ total: 0,
303
+ warn: 0
304
+ });
305
+ }
306
+ function renderMarkdownReport(summary) {
307
+ const counts = summarizeSteps(summary.steps);
308
+ const lines = [
309
+ "# PRKT Devnet Feature Matrix",
310
+ "",
311
+ `Generated: ${summary.generatedAtIso8601}`,
312
+ `Cluster: ${summary.cluster}`,
313
+ `Overall: ${counts.fail === 0 ? "PASS" : "FAIL"} (${counts.ok} ok, ${counts.warn} warn, ${counts.skip} skip, ${counts.fail} fail)`,
314
+ "",
315
+ "## Entities",
316
+ "",
317
+ `- Wallet: ${summary.names.wallet}`,
318
+ `- Agent: ${summary.names.agent}`,
319
+ `- Owner: ${summary.names.owner}`,
320
+ `- Gasless agent: ${summary.names.gaslessAgent}`
321
+ ];
322
+ if (summary.advanced) {
323
+ lines.push("", "## Advanced Devnet Proof Path", "", `- Session ID: ${summary.advanced.sessionId}`, `- Session close signature: ${summary.advanced.sessionSignature}`, `- Policy account signature: ${summary.advanced.policyAccountSignature}`, `- Proof signature: ${summary.advanced.proofSignature}`, `- Commitment: ${summary.advanced.commitment}`);
324
+ }
325
+ lines.push("", "## Step Results", "", "| Category | Step | Status | Detail |", "| --- | --- | --- | --- |");
326
+ for (const step of summary.steps) {
327
+ const escapedDetail = step.detail.replace(/\|/gu, "\\|");
328
+ lines.push(`| ${step.category} | ${step.name} | ${step.status.toUpperCase()} | ${escapedDetail} |`);
329
+ }
330
+ return `${lines.join("\n")}\n`;
331
+ }
332
+ function writeArtifacts(summary) {
333
+ const artifactDir = path_1.default.join(process.cwd(), "artifacts");
334
+ (0, fs_1.mkdirSync)(artifactDir, { recursive: true });
335
+ const jsonPath = path_1.default.join(artifactDir, "devnet-feature-matrix.json");
336
+ const markdownPath = path_1.default.join(artifactDir, "devnet-feature-matrix.md");
337
+ (0, fs_1.writeFileSync)(jsonPath, JSON.stringify(summary, null, 2), "utf8");
338
+ (0, fs_1.writeFileSync)(markdownPath, renderMarkdownReport(summary), "utf8");
339
+ return {
340
+ jsonPath,
341
+ markdownPath
342
+ };
343
+ }
344
+ async function runDevnetFeatureMatrix() {
345
+ const steps = [];
346
+ const rpcUrl = (0, env_1.getRpcUrl)();
347
+ const cluster = (0, env_1.detectClusterFromRpcUrl)(rpcUrl);
348
+ (0, fs_1.mkdirSync)(matrixCliHome, { recursive: true });
349
+ if (cluster !== "devnet") {
350
+ failStep(steps, "preflight", "cluster", `expected devnet RPC, got ${cluster} (${rpcUrl})`);
351
+ }
352
+ recordStep(steps, {
353
+ category: "preflight",
354
+ detail: rpcUrl,
355
+ name: "cluster",
356
+ status: "ok"
357
+ });
358
+ recordStep(steps, {
359
+ category: "preflight",
360
+ detail: matrixCliHome,
361
+ name: "cli-home",
362
+ status: "ok"
363
+ });
364
+ const suffix = Date.now().toString().slice(-8);
365
+ const ownerName = `matrix-owner-${suffix}`;
366
+ const walletName = `matrix-wallet-${suffix}`;
367
+ const agentName = `matrix-agent-${suffix}`;
368
+ const gaslessAgent = `matrix-gasless-${suffix}`;
369
+ const init = runCliJson(["init"]);
370
+ recordStep(steps, {
371
+ category: "cli",
372
+ detail: init.cliDataDir,
373
+ name: "init",
374
+ status: "ok"
375
+ });
376
+ const config = runCliJson(["config", "show"]);
377
+ recordStep(steps, {
378
+ category: "cli",
379
+ detail: `cluster=${config.cluster}`,
380
+ name: "config-show",
381
+ status: config.cluster === "devnet" ? "ok" : "warn"
382
+ });
383
+ const doctor = runCliJson(["doctor"]);
384
+ const doctorFailures = doctor.filter((entry) => entry.status === "fail");
385
+ if (doctorFailures.length > 0) {
386
+ failStep(steps, "cli", "doctor", doctorFailures.map((entry) => entry.check).join(", "));
387
+ }
388
+ recordStep(steps, {
389
+ category: "cli",
390
+ detail: `${doctor.length} checks`,
391
+ name: "doctor",
392
+ status: "ok"
393
+ });
394
+ const walletCreate = runCliJson([
395
+ "wallet",
396
+ "create",
397
+ "--name",
398
+ walletName
399
+ ]);
400
+ recordStep(steps, {
401
+ category: "wallet",
402
+ detail: walletCreate.publicKey,
403
+ name: "create",
404
+ status: "ok"
405
+ });
406
+ runCliJson(["wallet", "list"]);
407
+ recordStep(steps, {
408
+ category: "wallet",
409
+ detail: "listed wallets",
410
+ name: "list",
411
+ status: "ok"
412
+ });
413
+ runCliJson(["wallet", "show", "--name", walletName]);
414
+ recordStep(steps, {
415
+ category: "wallet",
416
+ detail: walletName,
417
+ name: "show",
418
+ status: "ok"
419
+ });
420
+ runCliJson(["wallet", "fund", "--name", walletName, "--sol", MATRIX_WALLET_FUNDING_SOL.toString()]);
421
+ recordStep(steps, {
422
+ category: "wallet",
423
+ detail: `${MATRIX_WALLET_FUNDING_SOL.toFixed(1)} SOL requested`,
424
+ name: "fund",
425
+ status: "ok"
426
+ });
427
+ runCliJson(["wallet", "balance", "--name", walletName]);
428
+ recordStep(steps, {
429
+ category: "wallet",
430
+ detail: walletName,
431
+ name: "balance",
432
+ status: "ok"
433
+ });
434
+ const tokenMint = runCliJson([
435
+ "token",
436
+ "mint-demo",
437
+ "--authority",
438
+ walletName,
439
+ "--decimals",
440
+ "6",
441
+ "--amount",
442
+ "5"
443
+ ]);
444
+ recordStep(steps, {
445
+ category: "token",
446
+ detail: tokenMint.mint,
447
+ name: "mint-demo",
448
+ status: "ok"
449
+ });
450
+ runCliJson(["token", "create-ata", "--owner", walletName, "--mint", tokenMint.mint]);
451
+ recordStep(steps, {
452
+ category: "token",
453
+ detail: "wallet ATA ensured",
454
+ name: "create-ata-wallet",
455
+ status: "ok"
456
+ });
457
+ runCliJson(["wallet", "balance-spl", "--name", walletName, "--mint", tokenMint.mint]);
458
+ recordStep(steps, {
459
+ category: "token",
460
+ detail: tokenMint.mint,
461
+ name: "balance-spl-wallet",
462
+ status: "ok"
463
+ });
464
+ const agentCreate = runCliJson([
465
+ "agent",
466
+ "create",
467
+ "--agent",
468
+ agentName,
469
+ "--owner",
470
+ ownerName
471
+ ]);
472
+ recordStep(steps, {
473
+ category: "agent",
474
+ detail: agentCreate.publicKey,
475
+ name: "create",
476
+ status: "ok"
477
+ });
478
+ runCliJson(["agent", "list"]);
479
+ recordStep(steps, {
480
+ category: "agent",
481
+ detail: "listed agents",
482
+ name: "list",
483
+ status: "ok"
484
+ });
485
+ runCliJson(["agent", "show", "--agent", agentName]);
486
+ recordStep(steps, {
487
+ category: "agent",
488
+ detail: agentName,
489
+ name: "show",
490
+ status: "ok"
491
+ });
492
+ runCliJson(["agent", "fund", "--agent", agentName, "--sol", MATRIX_AGENT_FUNDING_SOL.toString()]);
493
+ recordStep(steps, {
494
+ category: "agent",
495
+ detail: `${MATRIX_AGENT_FUNDING_SOL.toFixed(1)} SOL requested`,
496
+ name: "fund",
497
+ status: "ok"
498
+ });
499
+ runCliJson(["agent", "balance", "--agent", agentName]);
500
+ recordStep(steps, {
501
+ category: "agent",
502
+ detail: agentName,
503
+ name: "balance",
504
+ status: "ok"
505
+ });
506
+ runCliJson(["token", "create-ata", "--owner", agentName, "--mint", tokenMint.mint]);
507
+ recordStep(steps, {
508
+ category: "token",
509
+ detail: "agent ATA ensured",
510
+ name: "create-ata-agent",
511
+ status: "ok"
512
+ });
513
+ runCliJson([
514
+ "wallet",
515
+ "transfer-sol",
516
+ "--from",
517
+ walletName,
518
+ "--to",
519
+ agentCreate.publicKey,
520
+ "--amount",
521
+ "0.05"
522
+ ]);
523
+ recordStep(steps, {
524
+ category: "wallet",
525
+ detail: `to ${agentCreate.publicKey}`,
526
+ name: "transfer-sol",
527
+ status: "ok"
528
+ });
529
+ runCliJson([
530
+ "wallet",
531
+ "transfer-spl",
532
+ "--from",
533
+ walletName,
534
+ "--to",
535
+ agentCreate.publicKey,
536
+ "--mint",
537
+ tokenMint.mint,
538
+ "--amount",
539
+ "1"
540
+ ]);
541
+ recordStep(steps, {
542
+ category: "token",
543
+ detail: `mint ${tokenMint.mint}`,
544
+ name: "transfer-spl",
545
+ status: "ok"
546
+ });
547
+ runCliJson(["policy", "presets"]);
548
+ recordStep(steps, {
549
+ category: "policy",
550
+ detail: "listed presets",
551
+ name: "presets",
552
+ status: "ok"
553
+ });
554
+ runCliJson(["policy", "show", "--agent", agentName]);
555
+ recordStep(steps, {
556
+ category: "policy",
557
+ detail: agentName,
558
+ name: "show",
559
+ status: "ok"
560
+ });
561
+ runCliJson(["policy", "set-preset", "--agent", agentName, "--preset", "guarded-live"]);
562
+ recordStep(steps, {
563
+ category: "policy",
564
+ detail: "guarded-live",
565
+ name: "set-preset-live",
566
+ status: "ok"
567
+ });
568
+ runCliJson(["policy", "set-preset", "--agent", agentName, "--preset", "auto-devnet-safe"]);
569
+ recordStep(steps, {
570
+ category: "policy",
571
+ detail: "auto-devnet-safe",
572
+ name: "set-preset-default",
573
+ status: "ok"
574
+ });
575
+ runCliJson([
576
+ "policy",
577
+ "set-limits",
578
+ "--agent",
579
+ agentName,
580
+ "--max-sol-per-tx-lamports",
581
+ "200000000",
582
+ "--max-transactions-per-session",
583
+ "3",
584
+ "--allowed-destinations",
585
+ agentCreate.publicKey
586
+ ]);
587
+ recordStep(steps, {
588
+ category: "policy",
589
+ detail: "temporary overrides applied",
590
+ name: "set-limits",
591
+ status: "ok"
592
+ });
593
+ const intentPath = createIntentFile(agentCreate.publicKey);
594
+ runCliJson(["policy", "validate-intent", "--agent", agentName, "--intent-file", intentPath]);
595
+ recordStep(steps, {
596
+ category: "policy",
597
+ detail: path_1.default.basename(intentPath),
598
+ name: "validate-intent",
599
+ status: "ok"
600
+ });
601
+ runCliJson(["policy", "clear-overrides", "--agent", agentName]);
602
+ recordStep(steps, {
603
+ category: "policy",
604
+ detail: "overrides cleared",
605
+ name: "clear-overrides",
606
+ status: "ok"
607
+ });
608
+ runCliJson(["agent", "run", "--agent", agentName, "--strategy", "memo-heartbeat"]);
609
+ recordStep(steps, {
610
+ category: "agent",
611
+ detail: "memo-heartbeat",
612
+ name: "run",
613
+ status: "ok"
614
+ });
615
+ runCliJson(["agent", "logs", "--agent", agentName]);
616
+ recordStep(steps, {
617
+ category: "agent",
618
+ detail: agentName,
619
+ name: "logs",
620
+ status: "ok"
621
+ });
622
+ runCliJson(["monitor", "overview"]);
623
+ runCliJson(["monitor", "balances"]);
624
+ runCliJson(["monitor", "txs"]);
625
+ runCliJson(["monitor", "agents"]);
626
+ recordStep(steps, {
627
+ category: "monitor",
628
+ detail: "overview/balances/txs/agents",
629
+ name: "views",
630
+ status: "ok"
631
+ });
632
+ runCliJson(["audit", "--limit", "50"]);
633
+ recordStep(steps, {
634
+ category: "audit",
635
+ detail: "limit 50",
636
+ name: "audit",
637
+ status: "ok"
638
+ });
639
+ const advanced = await runAdvancedDevnetFlow(`matrix-advanced-${suffix}`);
640
+ recordStep(steps, {
641
+ category: "advanced",
642
+ detail: advanced.proofSignature,
643
+ name: "memo-proof-compression-session",
644
+ status: "ok"
645
+ });
646
+ runCliJson(["verify-session", advanced.sessionId, "--commitment", advanced.commitment]);
647
+ runCliJson(["verify-tx", advanced.proofSignature]);
648
+ recordStep(steps, {
649
+ category: "advanced",
650
+ detail: "verify-session + verify-tx",
651
+ name: "cli-verification",
652
+ status: "ok"
653
+ });
654
+ const gaslessResult = runScriptStep({
655
+ category: "gasless",
656
+ env: {
657
+ PRKT_AGENT_NAME: gaslessAgent,
658
+ PRKT_OWNER_ID: ownerName
659
+ },
660
+ file: "src/scripts/runGaslessMemo.ts",
661
+ name: "kora-memo",
662
+ steps
663
+ });
664
+ recordStep(steps, {
665
+ category: "gasless",
666
+ detail: gaslessResult.stdout.includes("Mode: live") ? "live" : "mock",
667
+ name: "kora-mode",
668
+ status: "ok"
669
+ });
670
+ runScriptStep({
671
+ category: "security",
672
+ file: "src/scripts/simulateAttack.ts",
673
+ name: "simulate-attack",
674
+ steps
675
+ });
676
+ runScriptStep({
677
+ category: "defi",
678
+ file: "src/scripts/runDeFiSuite.ts",
679
+ name: "defi-suite-simulated",
680
+ steps
681
+ });
682
+ if (includeStress) {
683
+ runScriptStep({
684
+ category: "demo",
685
+ file: "src/scripts/runStressTest.ts",
686
+ name: "stress-agents",
687
+ optional: true,
688
+ steps
689
+ });
690
+ runScriptStep({
691
+ category: "demo",
692
+ file: "src/demo/scripts/runMultiAgentDevnetDemo.ts",
693
+ name: "multi-agent-devnet",
694
+ optional: true,
695
+ steps
696
+ });
697
+ }
698
+ else {
699
+ recordStep(steps, {
700
+ category: "demo",
701
+ detail: "set PRKT_DEVNET_MATRIX_INCLUDE_STRESS=1 to run stress and multi-agent demos",
702
+ name: "stress-agents",
703
+ status: "skip"
704
+ });
705
+ }
706
+ if (includeSensitiveExports) {
707
+ runCliJson(["wallet", "export-secret", "--name", walletName, "--recovery-key", walletCreate.recoveryKey]);
708
+ runCliJson(["agent", "export-wallet", "--agent", agentName, "--recovery-key", agentCreate.recoveryKey]);
709
+ recordStep(steps, {
710
+ category: "custody",
711
+ detail: "wallet and agent export paths exercised",
712
+ name: "sensitive-exports",
713
+ status: "ok"
714
+ });
715
+ }
716
+ else {
717
+ recordStep(steps, {
718
+ category: "custody",
719
+ detail: "set PRKT_DEVNET_MATRIX_INCLUDE_EXPORTS=1 to exercise secret export commands",
720
+ name: "sensitive-exports",
721
+ status: "skip"
722
+ });
723
+ }
724
+ if (includeProtocolLive) {
725
+ const liveScripts = [
726
+ { file: "src/scripts/runDevnetWalletDemo.ts", name: "wallet-devnet" },
727
+ { file: "src/scripts/runAutonomousAgentWalletDevnet.ts", name: "autonomous-agent-wallet-devnet" },
728
+ { file: "src/scripts/runAutonomousPortfolioDevnet.ts", name: "autonomous-portfolio-devnet" },
729
+ { file: "src/scripts/runMarinadeDevnet.ts", name: "marinade-devnet", args: ["0.15"] },
730
+ { file: "src/scripts/runOrcaLpDevnet.ts", name: "orca-devnet", args: ["0.05"] },
731
+ { file: "src/scripts/runKaminoDevnet.ts", name: "kamino-devnet-deposit", args: ["deposit"] },
732
+ { file: "src/scripts/runKaminoDevnet.ts", name: "kamino-devnet-borrow", args: ["borrow"] },
733
+ { file: "src/scripts/runRaydiumLpDevnet.ts", name: "raydium-lp-devnet" }
734
+ ];
735
+ for (const script of liveScripts) {
736
+ runScriptStep({
737
+ args: script.args,
738
+ category: "live",
739
+ file: script.file,
740
+ name: script.name,
741
+ optional: true,
742
+ steps
743
+ });
744
+ }
745
+ }
746
+ else {
747
+ recordStep(steps, {
748
+ category: "live",
749
+ detail: "set PRKT_DEVNET_MATRIX_INCLUDE_PROTOCOL_LIVE=1 to attempt live protocol demos",
750
+ name: "protocol-demos",
751
+ status: "skip"
752
+ });
753
+ }
754
+ runCliJson(["agent", "stop", "--agent", agentName]);
755
+ recordStep(steps, {
756
+ category: "agent",
757
+ detail: agentName,
758
+ name: "stop",
759
+ status: "ok"
760
+ });
761
+ const summary = {
762
+ advanced,
763
+ cluster,
764
+ generatedAtIso8601: new Date().toISOString(),
765
+ names: {
766
+ agent: agentName,
767
+ gaslessAgent,
768
+ owner: ownerName,
769
+ wallet: walletName
770
+ },
771
+ steps
772
+ };
773
+ const artifacts = writeArtifacts(summary);
774
+ console.log(`Artifact JSON: ${artifacts.jsonPath}`);
775
+ console.log(`Artifact Markdown: ${artifacts.markdownPath}`);
776
+ return artifacts;
777
+ }
778
+ async function main() {
779
+ await runDevnetFeatureMatrix();
780
+ }
781
+ if (require.main === module) {
782
+ main().catch((error) => {
783
+ const message = error instanceof Error ? error.message : "Unknown error";
784
+ console.error(`Devnet feature matrix failed: ${message}`);
785
+ process.exitCode = 1;
786
+ });
787
+ }