@run402/sdk 4.97.0 → 4.99.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 (138) hide show
  1. package/README.md +2 -2
  2. package/core-dist/binding-file.d.ts +14 -0
  3. package/core-dist/binding-file.js +28 -1
  4. package/core-dist/wallet.js +3 -3
  5. package/dist/errors.d.ts +24 -2
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +44 -2
  8. package/dist/errors.js.map +1 -1
  9. package/dist/index.d.ts +18 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +12 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/kernel.d.ts +34 -0
  14. package/dist/kernel.d.ts.map +1 -1
  15. package/dist/kernel.js +15 -1
  16. package/dist/kernel.js.map +1 -1
  17. package/dist/namespaces/admin.d.ts.map +1 -1
  18. package/dist/namespaces/admin.js +8 -0
  19. package/dist/namespaces/admin.js.map +1 -1
  20. package/dist/namespaces/agent.d.ts +2 -2
  21. package/dist/namespaces/agent.d.ts.map +1 -1
  22. package/dist/namespaces/agent.js +4 -0
  23. package/dist/namespaces/agent.js.map +1 -1
  24. package/dist/namespaces/agent.types.d.ts +5 -0
  25. package/dist/namespaces/agent.types.d.ts.map +1 -1
  26. package/dist/namespaces/apps.d.ts.map +1 -1
  27. package/dist/namespaces/apps.js +2 -0
  28. package/dist/namespaces/apps.js.map +1 -1
  29. package/dist/namespaces/auth.d.ts.map +1 -1
  30. package/dist/namespaces/auth.js +9 -0
  31. package/dist/namespaces/auth.js.map +1 -1
  32. package/dist/namespaces/branches.d.ts.map +1 -1
  33. package/dist/namespaces/branches.js +2 -0
  34. package/dist/namespaces/branches.js.map +1 -1
  35. package/dist/namespaces/ci.d.ts.map +1 -1
  36. package/dist/namespaces/ci.js +2 -0
  37. package/dist/namespaces/ci.js.map +1 -1
  38. package/dist/namespaces/credentials.d.ts +0 -23
  39. package/dist/namespaces/credentials.d.ts.map +1 -1
  40. package/dist/namespaces/credentials.js +29 -0
  41. package/dist/namespaces/credentials.js.map +1 -1
  42. package/dist/namespaces/escalations.d.ts.map +1 -1
  43. package/dist/namespaces/escalations.js +2 -0
  44. package/dist/namespaces/escalations.js.map +1 -1
  45. package/dist/namespaces/grants.d.ts.map +1 -1
  46. package/dist/namespaces/grants.js +4 -0
  47. package/dist/namespaces/grants.js.map +1 -1
  48. package/dist/namespaces/live.d.ts +0 -16
  49. package/dist/namespaces/live.d.ts.map +1 -1
  50. package/dist/namespaces/live.js +19 -0
  51. package/dist/namespaces/live.js.map +1 -1
  52. package/dist/namespaces/me.d.ts.map +1 -1
  53. package/dist/namespaces/me.js +3 -0
  54. package/dist/namespaces/me.js.map +1 -1
  55. package/dist/namespaces/org.d.ts.map +1 -1
  56. package/dist/namespaces/org.js +3 -0
  57. package/dist/namespaces/org.js.map +1 -1
  58. package/dist/namespaces/projects.d.ts.map +1 -1
  59. package/dist/namespaces/projects.js +5 -0
  60. package/dist/namespaces/projects.js.map +1 -1
  61. package/dist/namespaces/repos.d.ts.map +1 -1
  62. package/dist/namespaces/repos.js +5 -0
  63. package/dist/namespaces/repos.js.map +1 -1
  64. package/dist/namespaces/rooms.d.ts.map +1 -1
  65. package/dist/namespaces/rooms.js +3 -0
  66. package/dist/namespaces/rooms.js.map +1 -1
  67. package/dist/namespaces/session.d.ts.map +1 -1
  68. package/dist/namespaces/session.js +18 -0
  69. package/dist/namespaces/session.js.map +1 -1
  70. package/dist/namespaces/transfers.d.ts.map +1 -1
  71. package/dist/namespaces/transfers.js +3 -0
  72. package/dist/namespaces/transfers.js.map +1 -1
  73. package/dist/namespaces/wallets.d.ts.map +1 -1
  74. package/dist/namespaces/wallets.js +2 -0
  75. package/dist/namespaces/wallets.js.map +1 -1
  76. package/dist/namespaces/write-approval.d.ts.map +1 -1
  77. package/dist/namespaces/write-approval.js +3 -0
  78. package/dist/namespaces/write-approval.js.map +1 -1
  79. package/dist/node/actions-node.d.ts.map +1 -1
  80. package/dist/node/actions-node.js +3 -0
  81. package/dist/node/actions-node.js.map +1 -1
  82. package/dist/node/buzz-doctor-contract.d.ts +155 -0
  83. package/dist/node/buzz-doctor-contract.d.ts.map +1 -0
  84. package/dist/node/buzz-doctor-contract.js +385 -0
  85. package/dist/node/buzz-doctor-contract.js.map +1 -0
  86. package/dist/node/buzz-doctor.d.ts +155 -0
  87. package/dist/node/buzz-doctor.d.ts.map +1 -0
  88. package/dist/node/buzz-doctor.js +810 -0
  89. package/dist/node/buzz-doctor.js.map +1 -0
  90. package/dist/node/credentials.d.ts +9 -4
  91. package/dist/node/credentials.d.ts.map +1 -1
  92. package/dist/node/credentials.js +1 -1
  93. package/dist/node/credentials.js.map +1 -1
  94. package/dist/node/diagnostics.d.ts +45 -0
  95. package/dist/node/diagnostics.d.ts.map +1 -0
  96. package/dist/node/diagnostics.js +67 -0
  97. package/dist/node/diagnostics.js.map +1 -0
  98. package/dist/node/doctor.d.ts +101 -0
  99. package/dist/node/doctor.d.ts.map +1 -0
  100. package/dist/node/doctor.js +618 -0
  101. package/dist/node/doctor.js.map +1 -0
  102. package/dist/node/index.d.ts +57 -5
  103. package/dist/node/index.d.ts.map +1 -1
  104. package/dist/node/index.js +36 -1
  105. package/dist/node/index.js.map +1 -1
  106. package/dist/node/init.d.ts +137 -0
  107. package/dist/node/init.d.ts.map +1 -0
  108. package/dist/node/init.js +507 -0
  109. package/dist/node/init.js.map +1 -0
  110. package/dist/node/lightning-wallet.d.ts +61 -0
  111. package/dist/node/lightning-wallet.d.ts.map +1 -0
  112. package/dist/node/lightning-wallet.js +126 -0
  113. package/dist/node/lightning-wallet.js.map +1 -0
  114. package/dist/node/local-actions.d.ts +23 -0
  115. package/dist/node/local-actions.d.ts.map +1 -0
  116. package/dist/node/local-actions.js +38 -0
  117. package/dist/node/local-actions.js.map +1 -0
  118. package/dist/node/org-context.d.ts +169 -0
  119. package/dist/node/org-context.d.ts.map +1 -0
  120. package/dist/node/org-context.js +403 -0
  121. package/dist/node/org-context.js.map +1 -0
  122. package/dist/node/status.d.ts +62 -0
  123. package/dist/node/status.d.ts.map +1 -0
  124. package/dist/node/status.js +132 -0
  125. package/dist/node/status.js.map +1 -0
  126. package/dist/node/vault-target.d.ts +49 -0
  127. package/dist/node/vault-target.d.ts.map +1 -0
  128. package/dist/node/vault-target.js +109 -0
  129. package/dist/node/vault-target.js.map +1 -0
  130. package/dist/node/wallets.d.ts +242 -0
  131. package/dist/node/wallets.d.ts.map +1 -0
  132. package/dist/node/wallets.js +484 -0
  133. package/dist/node/wallets.js.map +1 -0
  134. package/dist/secret-gate.d.ts +377 -0
  135. package/dist/secret-gate.d.ts.map +1 -0
  136. package/dist/secret-gate.js +273 -0
  137. package/dist/secret-gate.js.map +1 -0
  138. package/package.json +2 -1
@@ -0,0 +1,507 @@
1
+ /**
2
+ * `r.init()` — set up this machine for Run402, owned by the Node SDK: the
3
+ * config directory, the active profile's wallet on its payment rail, testnet
4
+ * funding, an optional promo voucher, the Lightning wallet, the tier read,
5
+ * the local project count, the vault git remote, the organization, and the
6
+ * one next action. Idempotent when re-run on the same rail; switching rails
7
+ * needs `switchRail`.
8
+ *
9
+ * `r.init({ apiBase })` instead configures the active profile to talk to a
10
+ * Run402 Core (or another) API base and returns without touching a wallet.
11
+ *
12
+ * Progress lines (Config / Wallet / Balance / Tier / Next …) go to `onLine`,
13
+ * never to stdout; the returned summary is the structured answer.
14
+ * `run402 init` is a shim over this.
15
+ */
16
+ import { mkdirSync } from "node:fs";
17
+ import { configureApiBase, getActiveProfile, getConfigDir } from "../../core-dist/config.js";
18
+ import { saveWallet } from "../../core-dist/wallet.js";
19
+ import { readLocalWallet } from "./wallets.js";
20
+ import { getActiveProjectId, loadKeyStore } from "../../core-dist/keystore.js";
21
+ import { readMeta } from "../../core-dist/profiles.js";
22
+ import { LocalError } from "../errors.js";
23
+ import { gateSecret } from "../secret-gate.js";
24
+ import { fundingBlocksBootstrap, fundingRecovery } from "./funding-recovery.js";
25
+ import { deployAction, upDeployAction } from "./local-actions.js";
26
+ import { describeLightning, ensureLightningWallet, readLightningBalance } from "./lightning-wallet.js";
27
+ import { hardenedGit } from "./vault-snapshot.js";
28
+ const USDC_ABI = [{ name: "balanceOf", type: "function", stateMutability: "view", inputs: [{ name: "account", type: "address" }], outputs: [{ name: "", type: "uint256" }] }];
29
+ const USDC_SEPOLIA = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
30
+ const PATH_USD = "0x20c0000000000000000000000000000000000000";
31
+ const TEMPO_RPC = "https://rpc.moderato.tempo.xyz/";
32
+ function short(addr) {
33
+ return addr.slice(0, 6) + "..." + addr.slice(-4);
34
+ }
35
+ function sameOrigin(a, b) {
36
+ try {
37
+ return new URL(a).origin === new URL(b).origin;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ function errorMessage(err) {
44
+ const body = err?.body;
45
+ if (body && typeof body === "object") {
46
+ const b = body;
47
+ return b.message || b.error || err.message;
48
+ }
49
+ return err?.message || String(err);
50
+ }
51
+ function errorCode(err, fallback) {
52
+ return err?.body?.code ?? err?.code ?? fallback;
53
+ }
54
+ /**
55
+ * Which project the vault scaffold acts on: `RUN402_PROJECT_ID`, then the
56
+ * active project — and, when neither, why nothing was done, stated.
57
+ */
58
+ export function resolveScaffoldProject(env = process.env, activeProjectId = getActiveProjectId()) {
59
+ const fromEnv = typeof env.RUN402_PROJECT_ID === "string" ? env.RUN402_PROJECT_ID.trim() : "";
60
+ const projectId = fromEnv || activeProjectId || null;
61
+ if (projectId)
62
+ return { projectId, skipped: null };
63
+ return {
64
+ projectId: null,
65
+ skipped: "no project is selected, so there is nothing to point a run402 remote at — run `run402 projects use <project_id>` (or set RUN402_PROJECT_ID), then re-run `run402 init`",
66
+ };
67
+ }
68
+ async function detectTarget(clientFor, apiBase) {
69
+ try {
70
+ const health = (await clientFor({ apiBase, disablePaidFetch: true, authMode: "none" }).service.health());
71
+ const kind = health && typeof health === "object" && health.mode === "core"
72
+ ? "core"
73
+ : sameOrigin(apiBase, "https://api.run402.com") ? "cloud" : "core";
74
+ return { kind, health_status: typeof health?.status === "string" ? health.status : "ok" };
75
+ }
76
+ catch (err) {
77
+ return { kind: sameOrigin(apiBase, "https://api.run402.com") ? "cloud" : "core", health_error: errorMessage(err) };
78
+ }
79
+ }
80
+ async function readTokenBalance(client, token, address) {
81
+ const raw = await client.readContract({ address: token, abi: USDC_ABI, functionName: "balanceOf", args: [address] });
82
+ return Number(raw);
83
+ }
84
+ /** Configure an API target for the active profile. */
85
+ export async function initApiTarget(clientFor, apiBase, onLine = () => { }) {
86
+ const CONFIG_DIR = getConfigDir();
87
+ const detected = await detectTarget(clientFor, apiBase);
88
+ const config = configureApiBase(apiBase, {
89
+ target_kind: detected.kind,
90
+ ...(detected.health_status ? { health_status: detected.health_status } : {}),
91
+ ...(detected.health_error ? { health_error: detected.health_error } : {}),
92
+ });
93
+ mkdirSync(CONFIG_DIR, { recursive: true });
94
+ onLine("");
95
+ onLine(` ${"Config".padEnd(10)} ${CONFIG_DIR}`);
96
+ onLine(` ${"API base".padEnd(10)} ${config.api_base}`);
97
+ onLine(` ${"Target".padEnd(10)} ${config.target_kind}`);
98
+ if (detected.health_status)
99
+ onLine(` ${"Health".padEnd(10)} ${detected.health_status}`);
100
+ if (detected.health_error)
101
+ onLine(` ${"Health".padEnd(10)} ${detected.health_error}`);
102
+ onLine("");
103
+ return {
104
+ config_dir: CONFIG_DIR,
105
+ api_base: config.api_base,
106
+ api_base_source: "profile",
107
+ target: {
108
+ kind: config.target_kind,
109
+ ...(config.health_status ? { health_status: config.health_status } : {}),
110
+ ...(config.health_error ? { health_error: config.health_error } : {}),
111
+ },
112
+ payment_required: config.target_kind === "cloud",
113
+ next_actions: [{ type: "create_project", command: 'run402 projects provision --name "my-app"' }],
114
+ next_step: 'run402 projects provision --name "my-app"',
115
+ };
116
+ }
117
+ /** Set up the active profile: wallet, rail, funding, voucher, Lightning, tier, projects, vault remote, orgs, next step. */
118
+ export async function runInit(r, client, opts = {}) {
119
+ gateSecret(client, "init", opts);
120
+ const onLine = opts.onLine ?? (() => { });
121
+ const cwd = opts.cwd ?? process.cwd();
122
+ const voucherCode = opts.voucher ?? null;
123
+ const displayName = opts.name;
124
+ if (displayName !== undefined && displayName.trim() === "") {
125
+ throw new LocalError("--name requires a non-empty value.", "running init", { code: "BAD_USAGE", details: { flag: "--name" } });
126
+ }
127
+ const CONFIG_DIR = getConfigDir();
128
+ const requestedRail = opts.rail ?? "x402";
129
+ const isMpp = requestedRail === "mpp";
130
+ const isLightning = requestedRail === "lightning";
131
+ const existingWallet = readLocalWallet();
132
+ // Creating the wallet writes a private key: the same refusal as wallets.create.
133
+ if (!existingWallet)
134
+ gateSecret(client, "wallets.create");
135
+ if (existingWallet?.rail && existingWallet.rail !== requestedRail && !opts.switchRail) {
136
+ throw new LocalError(`Already on rail '${existingWallet.rail}'. Pass --switch-rail to switch to '${requestedRail}'.`, "running init", {
137
+ code: "RAIL_SWITCH_REQUIRES_CONFIRM",
138
+ details: { current_rail: existingWallet.rail, requested_rail: requestedRail },
139
+ });
140
+ }
141
+ const line = (label, value) => onLine(` ${label.padEnd(10)} ${value}`);
142
+ const summary = {
143
+ config_dir: CONFIG_DIR,
144
+ wallet: null,
145
+ rail: null,
146
+ network: null,
147
+ balances: null,
148
+ // Present only when a code was offered, so absence means "none offered".
149
+ ...(voucherCode ? { voucher: null } : {}),
150
+ tier: null,
151
+ projects_saved: 0,
152
+ active_project_id: null,
153
+ next_actions: [],
154
+ next_step: null,
155
+ };
156
+ onLine("");
157
+ // 1. Config directory.
158
+ mkdirSync(CONFIG_DIR, { recursive: true });
159
+ line("Config", CONFIG_DIR);
160
+ // 2. Wallet.
161
+ let localWallet = existingWallet;
162
+ const previousRail = localWallet?.rail;
163
+ if (!localWallet) {
164
+ const { generatePrivateKey, privateKeyToAccount } = await import("viem/accounts");
165
+ const privateKey = generatePrivateKey();
166
+ const account = privateKeyToAccount(privateKey);
167
+ localWallet = { address: account.address, privateKey, created: new Date().toISOString(), funded: false, rail: requestedRail };
168
+ saveWallet(localWallet);
169
+ line("Wallet", `${short(localWallet.address)} (created)`);
170
+ }
171
+ else {
172
+ // A wallet leaving Lightning keeps its pairing on disk until revoked.
173
+ if (localWallet.rail !== requestedRail) {
174
+ localWallet = { ...localWallet, rail: requestedRail };
175
+ saveWallet(localWallet);
176
+ }
177
+ line("Wallet", short(localWallet.address));
178
+ }
179
+ const walletName = getActiveProfile();
180
+ const walletMeta = readMeta(walletName);
181
+ summary.wallet = { local_label: walletName, server_label: walletMeta?.label ?? null, address: localWallet.address };
182
+ summary.network = isLightning ? "bitcoin-mainnet" : isMpp ? "tempo-moderato" : "base-sepolia";
183
+ summary.rail = requestedRail;
184
+ line("Network", isLightning ? "Bitcoin mainnet (Lightning) + Base Sepolia fallback" : isMpp ? "Tempo Moderato (testnet)" : "Base Sepolia (testnet)");
185
+ line("Rail", requestedRail);
186
+ // 3. Balance — read on-chain, faucet if zero.
187
+ let balance = 0;
188
+ let fundingError;
189
+ let fundingPending = false;
190
+ if (isMpp) {
191
+ const { createPublicClient, http, defineChain } = await import("viem");
192
+ const tempoModerato = defineChain({
193
+ id: 42431,
194
+ name: "Tempo Moderato",
195
+ nativeCurrency: { name: "pathUSD", symbol: "pathUSD", decimals: 6 },
196
+ rpcUrls: { default: { http: [TEMPO_RPC] } },
197
+ });
198
+ const chain = createPublicClient({ chain: tempoModerato, transport: http() });
199
+ try {
200
+ balance = await readTokenBalance(chain, PATH_USD, localWallet.address);
201
+ }
202
+ catch { /* unreadable → 0 */ }
203
+ if (balance === 0) {
204
+ line("Balance", "0 pathUSD — requesting Tempo faucet...");
205
+ try {
206
+ const res = await fetch(TEMPO_RPC, {
207
+ method: "POST",
208
+ headers: { "Content-Type": "application/json" },
209
+ body: JSON.stringify({ jsonrpc: "2.0", method: "tempo_fundAddress", params: [localWallet.address], id: 1 }),
210
+ });
211
+ const data = (await res.json());
212
+ if (data.result) {
213
+ // The faucet settles on-chain before the RPC read sees it: poll up to 30 s.
214
+ for (let i = 0; i < 30; i++) {
215
+ await new Promise((resolve) => setTimeout(resolve, 1000));
216
+ try {
217
+ balance = await readTokenBalance(chain, PATH_USD, localWallet.address);
218
+ if (balance > 0)
219
+ break;
220
+ }
221
+ catch { /* keep polling */ }
222
+ }
223
+ saveWallet({ ...localWallet, funded: true, lastFaucet: new Date().toISOString() });
224
+ if (balance > 0) {
225
+ line("Balance", `${(balance / 1e6).toFixed(2)} pathUSD (funded)`);
226
+ }
227
+ else {
228
+ fundingPending = true;
229
+ line("Balance", "faucet sent — not yet confirmed on-chain");
230
+ }
231
+ }
232
+ else {
233
+ fundingError = data.error ?? { message: "Faucet failed" };
234
+ line("Balance", `faucet failed: ${data.error?.message || "unknown error"}`);
235
+ }
236
+ }
237
+ catch (err) {
238
+ fundingError = err;
239
+ line("Balance", `faucet error: ${err.message}`);
240
+ }
241
+ }
242
+ else {
243
+ line("Balance", `${(balance / 1e6).toFixed(2)} pathUSD`);
244
+ }
245
+ }
246
+ else {
247
+ const { createPublicClient, http } = await import("viem");
248
+ const { baseSepolia } = await import("viem/chains");
249
+ const chain = createPublicClient({ chain: baseSepolia, transport: http() });
250
+ try {
251
+ balance = await readTokenBalance(chain, USDC_SEPOLIA, localWallet.address);
252
+ }
253
+ catch { /* unreadable → 0 */ }
254
+ if (balance === 0) {
255
+ line("Balance", "0 USDC — requesting faucet...");
256
+ try {
257
+ await r.wallets.faucet(localWallet.address);
258
+ for (let i = 0; i < 30; i++) {
259
+ await new Promise((resolve) => setTimeout(resolve, 1000));
260
+ try {
261
+ balance = await readTokenBalance(chain, USDC_SEPOLIA, localWallet.address);
262
+ if (balance > 0)
263
+ break;
264
+ }
265
+ catch { /* keep polling */ }
266
+ }
267
+ saveWallet({ ...localWallet, funded: true, lastFaucet: new Date().toISOString() });
268
+ if (balance > 0) {
269
+ line("Balance", `${(balance / 1e6).toFixed(2)} USDC (funded)`);
270
+ }
271
+ else {
272
+ fundingPending = true;
273
+ line("Balance", "faucet sent — not yet confirmed on-chain");
274
+ }
275
+ }
276
+ catch (err) {
277
+ fundingError = err;
278
+ line("Balance", `faucet failed: ${errorMessage(err)}`);
279
+ }
280
+ }
281
+ else {
282
+ line("Balance", `${(balance / 1e6).toFixed(2)} USDC`);
283
+ }
284
+ }
285
+ // 3b. Promo code. Runs after the wallet exists (it authenticates as this
286
+ // agent) and before the allowance read (so the redeemed amount shows).
287
+ // NOTHING here may fail init: every failure is `voucher_error`.
288
+ if (voucherCode) {
289
+ try {
290
+ const redemption = (await r.vouchers.redeem(voucherCode));
291
+ const redeemed = (redemption.amount_usd_micros / 1_000_000).toFixed(2);
292
+ line("Voucher", redemption.already_redeemed
293
+ ? `$${redeemed} already added to the allowance (not added twice)`
294
+ : `$${redeemed} added to the allowance`);
295
+ summary.voucher = {
296
+ voucher_id: redemption.voucher_id,
297
+ amount_usd_micros: redemption.amount_usd_micros,
298
+ already_redeemed: redemption.already_redeemed,
299
+ next_actions: Array.isArray(redemption.next_actions) ? redemption.next_actions : [],
300
+ };
301
+ // The gateway's own `set_tier` action names the largest tier the allowance covers.
302
+ const covers = summary.voucher.next_actions.find((a) => a?.type === "set_tier" && typeof a.cli === "string");
303
+ if (covers) {
304
+ const tierName = covers.highest_affordable_tier ?? covers.cli.replace(/^run402 tier set\s+/, "");
305
+ line("Allowance", `$${redeemed} covers ${tierName} — ${covers.cli} (settles from the allowance; no wallet funds needed)`);
306
+ }
307
+ }
308
+ catch (err) {
309
+ const reason = errorMessage(err);
310
+ line("Voucher", `not applied: ${reason}`);
311
+ summary.voucher = null;
312
+ summary.voucher_error = { code: errorCode(err, "VOUCHER_REDEEM_FAILED"), message: reason };
313
+ }
314
+ }
315
+ // Balances mirror `status`: the on-chain figure plus the organization's
316
+ // allowance, read best-effort.
317
+ const billing = (await r.billing.checkBalance(localWallet.address).catch(() => null));
318
+ const hasBilling = billing && billing.exists !== false;
319
+ summary.balances = {
320
+ on_chain_usd_micros: balance,
321
+ on_chain_token: isMpp ? "pathUSD" : "USDC",
322
+ allowance_usd_micros: hasBilling ? billing.allowance_usd_micros ?? null : null,
323
+ held_usd_micros: hasBilling ? (billing.held_usd_micros ?? 0) : null,
324
+ };
325
+ if (previousRail && previousRail !== (isMpp ? "mpp" : "x402")) {
326
+ const prev = previousRail === "mpp" ? "Tempo pathUSD" : "Base Sepolia USDC";
327
+ line("Note", `Switched from ${previousRail} — ${prev} balance still available if you switch back`);
328
+ }
329
+ // 3c. The Lightning wallet: minted on Run402's Hub, its pairing kept beside
330
+ // the Base key and never returned. No Hub leaves x402 as the live fallback.
331
+ summary.lightning = null;
332
+ if (isLightning) {
333
+ try {
334
+ const result = await ensureLightningWallet(r.agent);
335
+ localWallet = result.localWallet;
336
+ const settled = result.outcome === "stored" || result.outcome === "present";
337
+ const lnBalance = settled ? await readLightningBalance(localWallet) : null;
338
+ summary.lightning = { ...(describeLightning(localWallet, result.wallet, lnBalance) ?? {}), outcome: result.outcome };
339
+ if (result.outcome === "stored") {
340
+ line("Lightning", `wallet minted on Run402's Hub (${result.wallet.budget_sats} sats budget, ${result.wallet.starter_sats} starter)`);
341
+ }
342
+ else if (result.outcome === "present") {
343
+ line("Lightning", `wallet ${localWallet.lightning.wallet_id}${lnBalance ? ` — ${lnBalance.balance_sats} sats` : ""}`);
344
+ }
345
+ else if (result.outcome === "minting") {
346
+ line("Lightning", "the platform is still minting the wallet — rerun `run402 init lightning` in a few seconds");
347
+ }
348
+ else if (result.outcome === "unavailable") {
349
+ line("Lightning", "no Hub on this gateway — paying over x402 until it is back");
350
+ }
351
+ else if (result.outcome === "pairing_lost") {
352
+ line("Lightning", "wallet is active but its pairing was handed to another machine — `run402 wallets lightning revoke`, then init again");
353
+ }
354
+ else {
355
+ line("Lightning", `wallet is ${result.outcome}`);
356
+ }
357
+ }
358
+ catch (err) {
359
+ summary.lightning = { outcome: "error", code: errorCode(err, "LIGHTNING_WALLET_FAILED"), message: err?.message ?? String(err) };
360
+ line("Lightning", `wallet setup failed: ${err?.message ?? String(err)} — paying over x402 until it is fixed`);
361
+ }
362
+ }
363
+ // 4. Tier.
364
+ const store = loadKeyStore();
365
+ let tierInfo = null;
366
+ try {
367
+ tierInfo = (await r.tier.status());
368
+ }
369
+ catch { /* read best-effort */ }
370
+ if (tierInfo && tierInfo.tier && tierInfo.active) {
371
+ const expiry = tierInfo.lease_expires_at ? tierInfo.lease_expires_at.split("T")[0] : "unknown";
372
+ line("Tier", `${tierInfo.tier} (expires ${expiry})`);
373
+ summary.tier = { name: tierInfo.tier, expires: tierInfo.lease_expires_at || null };
374
+ }
375
+ else {
376
+ line("Tier", "(none)");
377
+ summary.tier = null;
378
+ }
379
+ // 5. Projects with LOCAL keys ("saved", not "active").
380
+ summary.projects_saved = Object.keys(store.projects).length;
381
+ line("Projects", `${summary.projects_saved} saved`);
382
+ // 5b. The vault git remote: purely local git, never an allocation. Adding
383
+ // the remote inside an existing repository is the default (pure addition);
384
+ // creating a repository needs `gitRemote`. Non-fatal in every branch.
385
+ const { projectId: activeProjectId, skipped: noProjectSkip } = resolveScaffoldProject(opts.env ?? process.env);
386
+ summary.active_project_id = activeProjectId;
387
+ if (noProjectSkip) {
388
+ summary.vault = null;
389
+ summary.vault_skipped = noProjectSkip;
390
+ line("Vault", "skipped — no project selected (run402 projects use <project_id>)");
391
+ }
392
+ else {
393
+ summary.vault = null;
394
+ try {
395
+ let insideRepo = true;
396
+ try {
397
+ await hardenedGit(cwd, ["rev-parse", "--git-dir"]);
398
+ }
399
+ catch {
400
+ insideRepo = false;
401
+ }
402
+ if (!insideRepo && !opts.gitRemote) {
403
+ summary.vault_skipped = "not a git repository — re-run with --git-remote to create one and add the remote";
404
+ line("Vault", "skipped — not a git repository (--git-remote creates one)");
405
+ }
406
+ else {
407
+ const orgId = await r.orgs.owningOrgOf(activeProjectId);
408
+ if (!orgId) {
409
+ summary.vault_skipped = `could not resolve the owning org for ${activeProjectId} — the run402 remote was not added`;
410
+ line("Vault", "skipped — owning org unresolved");
411
+ }
412
+ else {
413
+ const remote = (await r.repos.scaffoldRemote({ repo_dir: cwd, org_id: orgId, project_id: activeProjectId }));
414
+ // Local git only: no vault exists for the project yet.
415
+ summary.vault = { ...remote, allocated: false };
416
+ if (remote.already_present && remote.existing_url !== remote.url) {
417
+ line("Vault", `remote '${remote.name}' already points at ${remote.existing_url} — left unchanged (${remote.reason})`);
418
+ }
419
+ else if (remote.already_present) {
420
+ line("Vault", `remote '${remote.name}' already set (${remote.url})`);
421
+ }
422
+ else {
423
+ line("Vault", `${remote.created_repository ? "initialized a repository and added" : "added"} remote '${remote.name}' -> ${remote.url} (${remote.reason})`);
424
+ }
425
+ }
426
+ }
427
+ }
428
+ catch (err) {
429
+ const reason = errorMessage(err);
430
+ summary.vault = null;
431
+ summary.vault_error = { code: errorCode(err, "VAULT_SCAFFOLD_FAILED"), message: reason };
432
+ line("Vault", `remote not added: ${reason}`);
433
+ }
434
+ }
435
+ // 5c. The org: materialized by the tier read above; an identifier, not a credential.
436
+ try {
437
+ const orgs = (await r.orgs.list());
438
+ const rows = (Array.isArray(orgs) ? orgs : (orgs?.orgs ?? []));
439
+ summary.orgs = rows.map((o) => ({ org_id: o.org_id, display_name: o.display_name ?? null, role: o.role ?? null }));
440
+ if (rows.length === 1) {
441
+ line("Org", `${rows[0].org_id}${rows[0].display_name ? ` (${rows[0].display_name})` : ""}`);
442
+ }
443
+ else if (rows.length > 1) {
444
+ line("Org", `${rows.length} organizations — run402 orgs list`);
445
+ }
446
+ }
447
+ catch {
448
+ summary.orgs = null;
449
+ }
450
+ // 6. The next step: canonical typed action(s); `next_step` mirrors the first command.
451
+ onLine("");
452
+ const tierMissing = !tierInfo || !tierInfo.tier || !tierInfo.active;
453
+ summary.funding = fundingRecovery(fundingError, fundingPending);
454
+ const fundingBlocked = fundingBlocksBootstrap(summary.funding, {
455
+ activeTier: !tierMissing,
456
+ onChainBalance: balance,
457
+ allowanceBalance: summary.balances.allowance_usd_micros,
458
+ lightningBalance: summary.lightning?.balance_sats,
459
+ });
460
+ summary.next_actions = [tierMissing ? upDeployAction() : deployAction()];
461
+ if (fundingBlocked) {
462
+ const quotedWallet = `'${walletName.replaceAll("'", "'\\''")}'`;
463
+ summary.next_actions = summary.funding.next_actions.map((action) => ({
464
+ ...action,
465
+ ...(["retry", "check_balance"].includes(action.type) ? {
466
+ command: `run402 --wallet ${quotedWallet} wallets ${action.type === "retry" ? "fund" : "balance"}`,
467
+ } : {}),
468
+ }));
469
+ }
470
+ summary.next_step = summary.next_actions[0]?.command ?? null;
471
+ if (fundingBlocked) {
472
+ line("Funding", summary.funding.status);
473
+ onLine(` ${summary.next_actions[0].why}`);
474
+ if (summary.next_step)
475
+ onLine(` Next: ${summary.next_step}`);
476
+ }
477
+ else if (tierMissing) {
478
+ // `up -y` sets the prototype tier itself as part of the first deploy.
479
+ const allowanceCovers = summary.voucher?.next_actions?.find((a) => a?.type === "set_tier" && typeof a.cli === "string");
480
+ onLine(" Next: run402 up -y");
481
+ onLine(" Deploy with run402 up -y — it sets the prototype tier (free on testnet) as part of the first deploy.");
482
+ if (allowanceCovers) {
483
+ onLine(` Your allowance covers ${allowanceCovers.highest_affordable_tier ?? "a larger tier"}: ${allowanceCovers.cli} — then run402 up -y.`);
484
+ }
485
+ else {
486
+ onLine(" Or set it separately: run402 tier set prototype.");
487
+ }
488
+ }
489
+ else {
490
+ onLine(" Ready to deploy. Run: run402 deploy --manifest app.json");
491
+ }
492
+ onLine("");
493
+ // 5d. Display name, best-effort.
494
+ if (displayName !== undefined) {
495
+ try {
496
+ const me = (await r.orgs.setDisplayName(displayName.trim()));
497
+ summary.display_name = me?.principal?.display_name ?? displayName.trim();
498
+ line("Name", summary.display_name);
499
+ }
500
+ catch (err) {
501
+ summary.display_name = null;
502
+ summary.display_name_error = { code: errorCode(err, "DISPLAY_NAME_FAILED"), message: err?.message ?? String(err) };
503
+ }
504
+ }
505
+ return summary;
506
+ }
507
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/node/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The agent's Lightning wallet on the local machine: mint the budgeted wallet
3
+ * on Run402's Hub, keep its pairing in the active profile's `wallet.json`
4
+ * beside the Base key, report its balance, revoke it. Shared by `r.init`
5
+ * (`run402 init lightning`) and `run402 wallets lightning …`. The pairing
6
+ * secret is never returned by anything here.
7
+ */
8
+ import { type WalletData } from "../../core-dist/wallet.js";
9
+ import type { AgentLightningWallet } from "../namespaces/agent.types.js";
10
+ export declare const LIGHTNING_MINT_TIMEOUT_MS = 45000;
11
+ type LightningAgent = {
12
+ lightningWallet: {
13
+ mint(opts?: {
14
+ timeoutMs?: number;
15
+ }): Promise<AgentLightningWallet>;
16
+ get(): Promise<AgentLightningWallet>;
17
+ revoke(): Promise<unknown>;
18
+ };
19
+ };
20
+ export interface LightningBalance {
21
+ balance_sats: number;
22
+ budget_remaining_sats: number | null;
23
+ }
24
+ export interface LightningDescription {
25
+ wallet_id: string | null;
26
+ status: string | null;
27
+ custody: "run402_hub";
28
+ custody_note: string;
29
+ lightning_address: string | null;
30
+ budget_sats: number | null;
31
+ starter_sats: number | null;
32
+ has_pairing: boolean;
33
+ minted_at: string | null;
34
+ balance_sats?: number;
35
+ budget_remaining_sats?: number | null;
36
+ }
37
+ export type LightningOutcome = "stored" | "present" | "minting" | "unavailable" | "pairing_lost" | string;
38
+ export interface EnsureLightningResult {
39
+ localWallet: WalletData;
40
+ wallet: AgentLightningWallet | null;
41
+ outcome: LightningOutcome;
42
+ error?: unknown;
43
+ }
44
+ /** Public facts only: never the pairing. */
45
+ export declare function describeLightning(localWallet: WalletData | null | undefined, wallet?: Partial<AgentLightningWallet> | null, balance?: LightningBalance | null): LightningDescription | null;
46
+ /** Balance and remaining budget over NWC, best-effort (null on any failure). */
47
+ export declare function readLightningBalance(localWallet: WalletData | null | undefined): Promise<LightningBalance | null>;
48
+ /**
49
+ * Ensure the active profile holds an active Lightning wallet. `outcome` is
50
+ * `stored` (pairing just saved), `present` (already held locally), `minting`
51
+ * (the platform is still minting; rerun later), `unavailable` (no Hub on this
52
+ * gateway), `pairing_lost` (active, but its one-time pairing went to another
53
+ * machine: revoke and mint again), or the wallet's own non-active status.
54
+ */
55
+ export declare function ensureLightningWallet(agent: LightningAgent, options?: {
56
+ timeoutMs?: number;
57
+ }): Promise<EnsureLightningResult>;
58
+ /** Revoke on the platform and forget the pairing locally; the rail returns to x402. */
59
+ export declare function revokeLightningWallet(agent: LightningAgent): Promise<unknown>;
60
+ export {};
61
+ //# sourceMappingURL=lightning-wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lightning-wallet.d.ts","sourceRoot":"","sources":["../../src/node/lightning-wallet.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAEhD,KAAK,cAAc,GAAG;IACpB,eAAe,EAAE;QACf,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACnE,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACrC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;KAC5B,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvC;AAED,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,MAAM,CAAC;AAE1G,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,UAAU,CAAC;IACxB,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,4CAA4C;AAC5C,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EAC1C,MAAM,GAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAW,EACnD,OAAO,GAAE,gBAAgB,GAAG,IAAW,GACtC,oBAAoB,GAAG,IAAI,CAe7B;AAED,gFAAgF;AAChF,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAevH;AAoBD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAyBvI;AAED,uFAAuF;AACvF,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAcnF"}