@artblocks/abx-cli 0.1.0-alpha.9 → 0.2.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 (201) hide show
  1. package/CHANGELOG.md +429 -0
  2. package/assets/renderer-scaffold/README.md +44 -13
  3. package/assets/renderer-scaffold/foundry.toml +5 -0
  4. package/assets/renderer-scaffold/remappings.txt +1 -1
  5. package/assets/renderer-scaffold/script/DeployHooks.s.sol +24 -0
  6. package/assets/renderer-scaffold/script/Preview.s.sol +99 -0
  7. package/assets/renderer-scaffold/src/MyHooks.sol +20 -0
  8. package/assets/renderer-scaffold/src/MyRenderer.sol +4 -4
  9. package/assets/renderer-scaffold/src/MyTraits.sol +2 -2
  10. package/assets/renderer-scaffold/test/MyRenderer.t.sol +60 -3
  11. package/dist/bin.d.ts +26 -0
  12. package/dist/bin.d.ts.map +1 -0
  13. package/dist/bin.js +63 -0
  14. package/dist/bin.js.map +1 -0
  15. package/dist/capabilities.d.ts +132 -0
  16. package/dist/capabilities.d.ts.map +1 -0
  17. package/dist/capabilities.js +175 -0
  18. package/dist/capabilities.js.map +1 -0
  19. package/dist/commands/auth.d.ts +54 -0
  20. package/dist/commands/auth.d.ts.map +1 -0
  21. package/dist/commands/auth.js +483 -0
  22. package/dist/commands/auth.js.map +1 -0
  23. package/dist/commands/contract.d.ts +19 -0
  24. package/dist/commands/contract.d.ts.map +1 -0
  25. package/dist/commands/contract.js +171 -0
  26. package/dist/commands/contract.js.map +1 -0
  27. package/dist/commands/deploy.d.ts +296 -0
  28. package/dist/commands/deploy.d.ts.map +1 -0
  29. package/dist/commands/deploy.js +5756 -0
  30. package/dist/commands/deploy.js.map +1 -0
  31. package/dist/commands/feedback.d.ts +7 -0
  32. package/dist/commands/feedback.d.ts.map +1 -0
  33. package/dist/commands/feedback.js +154 -0
  34. package/dist/commands/feedback.js.map +1 -0
  35. package/dist/commands/maintenance.d.ts +4 -0
  36. package/dist/commands/maintenance.d.ts.map +1 -0
  37. package/dist/commands/maintenance.js +114 -0
  38. package/dist/commands/maintenance.js.map +1 -0
  39. package/dist/commands/project.d.ts +458 -0
  40. package/dist/commands/project.d.ts.map +1 -0
  41. package/dist/commands/project.js +1837 -0
  42. package/dist/commands/project.js.map +1 -0
  43. package/dist/commands/reads.d.ts +85 -0
  44. package/dist/commands/reads.d.ts.map +1 -0
  45. package/dist/commands/reads.js +881 -0
  46. package/dist/commands/reads.js.map +1 -0
  47. package/dist/commands/scaffold.d.ts +89 -0
  48. package/dist/commands/scaffold.d.ts.map +1 -0
  49. package/dist/commands/scaffold.js +741 -0
  50. package/dist/commands/scaffold.js.map +1 -0
  51. package/dist/commands/service.d.ts +67 -0
  52. package/dist/commands/service.d.ts.map +1 -0
  53. package/dist/commands/service.js +761 -0
  54. package/dist/commands/service.js.map +1 -0
  55. package/dist/commands/storage.d.ts +51 -0
  56. package/dist/commands/storage.d.ts.map +1 -0
  57. package/dist/commands/storage.js +399 -0
  58. package/dist/commands/storage.js.map +1 -0
  59. package/dist/commands/submit-app.d.ts +102 -0
  60. package/dist/commands/submit-app.d.ts.map +1 -0
  61. package/dist/commands/submit-app.js +638 -0
  62. package/dist/commands/submit-app.js.map +1 -0
  63. package/dist/config.d.ts +94 -2
  64. package/dist/config.d.ts.map +1 -1
  65. package/dist/config.js +332 -12
  66. package/dist/config.js.map +1 -1
  67. package/dist/conformance.d.ts +31 -0
  68. package/dist/conformance.d.ts.map +1 -0
  69. package/dist/conformance.js +400 -0
  70. package/dist/conformance.js.map +1 -0
  71. package/dist/contract-read-error.d.ts +5 -0
  72. package/dist/contract-read-error.d.ts.map +1 -0
  73. package/dist/contract-read-error.js +37 -0
  74. package/dist/contract-read-error.js.map +1 -0
  75. package/dist/creator-agent.d.ts +49 -0
  76. package/dist/creator-agent.d.ts.map +1 -0
  77. package/dist/creator-agent.js +363 -0
  78. package/dist/creator-agent.js.map +1 -0
  79. package/dist/creator-keyring.d.ts +26 -0
  80. package/dist/creator-keyring.d.ts.map +1 -0
  81. package/dist/creator-keyring.js +57 -0
  82. package/dist/creator-keyring.js.map +1 -0
  83. package/dist/creator-signer.d.ts +52 -0
  84. package/dist/creator-signer.d.ts.map +1 -0
  85. package/dist/creator-signer.js +267 -0
  86. package/dist/creator-signer.js.map +1 -0
  87. package/dist/deploy-plan.d.ts +218 -0
  88. package/dist/deploy-plan.d.ts.map +1 -0
  89. package/dist/deploy-plan.js +20 -0
  90. package/dist/deploy-plan.js.map +1 -0
  91. package/dist/deps.d.ts +6 -39
  92. package/dist/deps.d.ts.map +1 -1
  93. package/dist/deps.js +4 -68
  94. package/dist/deps.js.map +1 -1
  95. package/dist/errors.d.ts +22 -0
  96. package/dist/errors.d.ts.map +1 -0
  97. package/dist/errors.js +32 -0
  98. package/dist/errors.js.map +1 -0
  99. package/dist/flag-allowlists.d.ts +53 -0
  100. package/dist/flag-allowlists.d.ts.map +1 -0
  101. package/dist/flag-allowlists.js +188 -0
  102. package/dist/flag-allowlists.js.map +1 -0
  103. package/dist/flags.d.ts +53 -0
  104. package/dist/flags.d.ts.map +1 -1
  105. package/dist/flags.js +151 -1
  106. package/dist/flags.js.map +1 -1
  107. package/dist/jsonout.d.ts +37 -0
  108. package/dist/jsonout.d.ts.map +1 -0
  109. package/dist/jsonout.js +79 -0
  110. package/dist/jsonout.js.map +1 -0
  111. package/dist/kind.d.ts +57 -0
  112. package/dist/kind.d.ts.map +1 -0
  113. package/dist/kind.js +122 -0
  114. package/dist/kind.js.map +1 -0
  115. package/dist/main.js +859 -5374
  116. package/dist/main.js.map +1 -1
  117. package/dist/mintpage.d.ts +17 -2
  118. package/dist/mintpage.d.ts.map +1 -1
  119. package/dist/mintpage.js +241 -54
  120. package/dist/mintpage.js.map +1 -1
  121. package/dist/output.d.ts +184 -0
  122. package/dist/output.d.ts.map +1 -0
  123. package/dist/output.js +774 -0
  124. package/dist/output.js.map +1 -0
  125. package/dist/ownerops.d.ts +463 -59
  126. package/dist/ownerops.d.ts.map +1 -1
  127. package/dist/ownerops.js +2329 -366
  128. package/dist/ownerops.js.map +1 -1
  129. package/dist/preview.d.ts +23 -5
  130. package/dist/preview.d.ts.map +1 -1
  131. package/dist/preview.js +95 -43
  132. package/dist/preview.js.map +1 -1
  133. package/dist/provision.d.ts +3 -13
  134. package/dist/provision.d.ts.map +1 -1
  135. package/dist/provision.js +19 -21
  136. package/dist/provision.js.map +1 -1
  137. package/dist/remote.d.ts +116 -9
  138. package/dist/remote.d.ts.map +1 -1
  139. package/dist/remote.js +371 -14
  140. package/dist/remote.js.map +1 -1
  141. package/dist/riskgate.d.ts +101 -0
  142. package/dist/riskgate.d.ts.map +1 -0
  143. package/dist/riskgate.js +343 -0
  144. package/dist/riskgate.js.map +1 -0
  145. package/dist/scaffold.d.ts +12 -0
  146. package/dist/scaffold.d.ts.map +1 -0
  147. package/dist/scaffold.js +56 -0
  148. package/dist/scaffold.js.map +1 -0
  149. package/dist/schema.d.ts +36 -1
  150. package/dist/schema.d.ts.map +1 -1
  151. package/dist/schema.js +121 -26
  152. package/dist/schema.js.map +1 -1
  153. package/dist/script-chunks.d.ts +8 -0
  154. package/dist/script-chunks.d.ts.map +1 -0
  155. package/dist/script-chunks.js +35 -0
  156. package/dist/script-chunks.js.map +1 -0
  157. package/dist/served.d.ts +30 -0
  158. package/dist/served.d.ts.map +1 -0
  159. package/dist/served.js +112 -0
  160. package/dist/served.js.map +1 -0
  161. package/dist/signer.d.ts +20 -1
  162. package/dist/signer.d.ts.map +1 -1
  163. package/dist/signer.js +110 -18
  164. package/dist/signer.js.map +1 -1
  165. package/dist/update-check.d.ts +60 -9
  166. package/dist/update-check.d.ts.map +1 -1
  167. package/dist/update-check.js +105 -18
  168. package/dist/update-check.js.map +1 -1
  169. package/package.json +17 -12
  170. package/skill/SKILL.md +213 -354
  171. package/skill/agents/openai.yaml +4 -0
  172. package/skill/reference/capabilities.md +195 -0
  173. package/skill/reference/code.md +236 -0
  174. package/skill/reference/creator-token.md +94 -0
  175. package/skill/reference/deploy.md +191 -0
  176. package/skill/reference/diagnose.md +178 -0
  177. package/skill/reference/hosting.md +191 -102
  178. package/skill/reference/operate.md +237 -0
  179. package/skill/reference/services.md +173 -0
  180. package/skill/reference/setup.md +221 -42
  181. package/assets/renderer-scaffold/src/interfaces/IAbxFieldRenderer.sol +0 -32
  182. package/assets/renderer-scaffold/src/interfaces/IAbxParams.sol +0 -26
  183. package/dist/inspect.d.ts +0 -48
  184. package/dist/inspect.d.ts.map +0 -1
  185. package/dist/inspect.js +0 -184
  186. package/dist/inspect.js.map +0 -1
  187. package/dist/migrate.d.ts +0 -65
  188. package/dist/migrate.d.ts.map +0 -1
  189. package/dist/migrate.js +0 -180
  190. package/dist/migrate.js.map +0 -1
  191. package/dist/onchain-uri.d.ts +0 -97
  192. package/dist/onchain-uri.d.ts.map +0 -1
  193. package/dist/onchain-uri.js +0 -243
  194. package/dist/onchain-uri.js.map +0 -1
  195. package/dist/upload.d.ts +0 -28
  196. package/dist/upload.d.ts.map +0 -1
  197. package/dist/upload.js +0 -41
  198. package/dist/upload.js.map +0 -1
  199. package/skill/reference/code-projects.md +0 -246
  200. package/skill/reference/operating.md +0 -118
  201. package/skill/reference/troubleshooting.md +0 -28
package/dist/signer.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { createServer } from 'node:http';
2
2
  import { writeFileSync } from 'node:fs';
3
- import { makePublicClient, makeWalletClient, resolveChain, } from '@artblocks/abx-sdk';
3
+ import { chainSupportByKey, makeHotSender, makePublicClient, makeWalletClient, pinGas, resolveChain, runPrepared, sleep, waitForCodeAt, } from '@artblocks/abx-sdk';
4
4
  import { faucetHint } from './config.js';
5
+ import { openSponsoredSession } from './creator-signer.js';
5
6
  /** Announce the wallet sign-page URL: a stable, greppable line for humans/agents, plus an
6
7
  * optional file write so a backgrounding agent can read the URL without parsing stdout. */
7
8
  function announceSignUrl(signUrl, file) {
@@ -18,7 +19,11 @@ function announceSignUrl(signUrl, file) {
18
19
  }
19
20
  }
20
21
  const DEFAULT_SIGN_PORT = 8799;
21
- const TESTNETS = new Set(['sepolia', 'base-sepolia']);
22
+ /** Unknown chains stay on the conservative side. Known testnets come from the shared registry so
23
+ * adding a network cannot silently leave autonomous test workflows behind. */
24
+ export function envKeyRequiresYes(chainKey) {
25
+ return chainSupportByKey(chainKey)?.environment !== 'testnet';
26
+ }
22
27
  // ── tiny ANSI (kept local so this module stands alone) ───────────────────────
23
28
  const C = { reset: '\x1b[0m', dim: '\x1b[2m', bold: '\x1b[1m', green: '\x1b[38;5;115m', purple: '\x1b[38;5;141m', orange: '\x1b[38;5;215m' };
24
29
  const dim = (s) => `${C.dim}${s}${C.reset}`;
@@ -32,7 +37,6 @@ function explorerFor(chainKey) {
32
37
  async function resolveTx(provider, signer) {
33
38
  return typeof provider === 'function' ? await provider(signer) : provider;
34
39
  }
35
- const delay = (ms) => new Promise((r) => setTimeout(r, ms));
36
40
  /**
37
41
  * Bind the sign page to a *fresh* port, robustly.
38
42
  *
@@ -65,7 +69,7 @@ async function listenAvailable(server, preferred) {
65
69
  for (let i = 0; i < 6; i++) {
66
70
  if (await tryListen(preferred))
67
71
  return preferred;
68
- await delay(300);
72
+ await sleep(300);
69
73
  }
70
74
  // Still held (a stuck/abandoned session) → don't block or crash; take a fresh ephemeral port.
71
75
  if (await tryListen(0))
@@ -90,13 +94,33 @@ export async function signTx(provider, opts) {
90
94
  return signHot(provider, opts);
91
95
  case 'sign':
92
96
  return signWallet(provider, opts);
97
+ case 'sponsor':
98
+ return signSponsored(provider, opts);
93
99
  case 'unsigned':
94
100
  return signCold(provider, opts);
95
101
  }
96
102
  }
103
+ async function signSponsored(provider, opts) {
104
+ const session = await openSponsoredSession(opts.chainKey);
105
+ try {
106
+ if (opts.expectedSigner && opts.expectedSigner.toLowerCase() !== session.address.toLowerCase()) {
107
+ throw new Error(`The ABX creator wallet ${session.address} is not the required signer ${opts.expectedSigner}.`);
108
+ }
109
+ const prepared = await resolveTx(provider, session.address);
110
+ printIntent(prepared, { ...opts, expectedSigner: session.address });
111
+ console.log(`\n ${dim(`requesting sponsored send from ${session.address} …`)}`);
112
+ const { txHash, receipt } = await session.send(prepared);
113
+ console.log(` ${dim('tx')} ${explorerFor(opts.chainKey)}/tx/${txHash}`);
114
+ console.log(` ${green('✓')} sponsored and confirmed`);
115
+ return { txHash, prepared, blockNumber: receipt.blockNumber, contractAddress: receipt.contractAddress ?? null };
116
+ }
117
+ finally {
118
+ session.close();
119
+ }
120
+ }
97
121
  // ── hot lane: env key signs + broadcasts ─────────────────────────────────────
98
122
  async function signHot(provider, opts) {
99
- if (!TESTNETS.has(opts.chainKey) && !opts.yes) {
123
+ if (envKeyRequiresYes(opts.chainKey) && !opts.yes) {
100
124
  throw new Error(`Refusing to sign on '${opts.chainKey}' with the env key without --yes. ` +
101
125
  `For real value, prefer the wallet lane (--sign) so the key never touches this process.`);
102
126
  }
@@ -108,17 +132,51 @@ async function signHot(provider, opts) {
108
132
  console.log(`\n ${C.orange}⚠${C.reset} env key ${account.address} is not the expected signer ${opts.expectedSigner} — this will likely revert.`);
109
133
  }
110
134
  console.log(`\n ${dim(`signing with env key ${account.address} …`)}`);
111
- const txHash = await wallet.sendTransaction({
135
+ // makeHotSender pins the gas (rather than letting viem re-estimate at send time — see
136
+ // execute.ts's pinGas for why an estimate can come back as the calldata cost alone and silently
137
+ // underfund a CREATE) and throws a typed error on a `reverted` receipt instead of reporting a
138
+ // burned transaction as "confirmed".
139
+ const send = makeHotSender({ wallet, account, publicClient });
140
+ const receipt = await send(prepared);
141
+ console.log(` ${dim('tx')} ${explorerFor(opts.chainKey)}/tx/${receipt.transactionHash}`);
142
+ console.log(` ${green('✓')} confirmed`);
143
+ return { txHash: receipt.transactionHash, prepared, blockNumber: receipt.blockNumber, contractAddress: receipt.contractAddress ?? null };
144
+ }
145
+ /**
146
+ * Sign + broadcast a SEQUENCE of prepared txs on the hot lane, in order — the hot-lane sibling of
147
+ * the wallet lane's `openWalletSession({total: N})` (one session, N approvals) and the cold lane's
148
+ * per-tx `signTx` loop (see e.g. `deploy-code`'s cold-lane branch in main.ts). One
149
+ * {@link makeHotSender} for the whole sequence, so the nonce is pinned once and gas is re-checked
150
+ * per tx against the target a PRIOR tx in this same sequence may just have created (a multi-tx code
151
+ * deploy: the setup multicall targets the clone the deploy tx just made). Replaces what used to be
152
+ * a hand-rolled nonce/gas loop at the one call site that needed it.
153
+ */
154
+ export async function signHotSequence(txs, opts) {
155
+ if (envKeyRequiresYes(opts.chainKey) && !opts.yes) {
156
+ throw new Error(`Refusing to sign on '${opts.chainKey}' with the env key without --yes. ` +
157
+ `For real value, prefer the wallet lane (--sign) so the key never touches this process.`);
158
+ }
159
+ const { wallet, account } = makeWalletClient({ chainKey: opts.chainKey });
160
+ const publicClient = makePublicClient({ chainKey: opts.chainKey });
161
+ console.log(`\n ${dim(`signing ${txs.length} transaction(s) with env key ${account.address} …`)}`);
162
+ const send = makeHotSender({
163
+ wallet,
112
164
  account,
113
- chain: wallet.chain,
114
- to: prepared.to ?? undefined,
115
- data: prepared.data,
116
- value: BigInt(prepared.value),
165
+ publicClient,
166
+ onEvent: (e) => {
167
+ if (e.kind === 'sending')
168
+ console.log(` ${purple('◆')} ${bold(e.tx.summary)}`);
169
+ else
170
+ console.log(` ${dim('tx')} ${explorerFor(opts.chainKey)}/tx/${e.receipt.transactionHash} ${green('✓')} confirmed`);
171
+ },
117
172
  });
118
- console.log(` ${dim('tx')} ${explorerFor(opts.chainKey)}/tx/${txHash}`);
119
- const receipt = await publicClient.waitForTransactionReceipt({ hash: txHash });
120
- console.log(` ${green('✓')} confirmed`);
121
- return { txHash, prepared, blockNumber: receipt.blockNumber };
173
+ const receipts = await runPrepared(txs, send);
174
+ return receipts.map((receipt, i) => ({
175
+ txHash: receipt.transactionHash,
176
+ prepared: txs[i],
177
+ blockNumber: receipt.blockNumber,
178
+ contractAddress: receipt.contractAddress ?? null,
179
+ }));
122
180
  }
123
181
  // ── cold lane: print the tx for an external signer ───────────────────────────
124
182
  async function signCold(provider, opts) {
@@ -128,11 +186,30 @@ async function signCold(provider, opts) {
128
186
  const prepared = await resolveTx(provider, opts.expectedSigner ?? '0x0000000000000000000000000000000000000000');
129
187
  printIntent(prepared, opts);
130
188
  console.log(`\n ${bold('unsigned transaction')} ${dim('— sign + broadcast this with your own signer (multisig / offline):')}\n`);
131
- console.log(JSON.stringify({ to: prepared.to, data: prepared.data, value: prepared.value, chainId: prepared.chainId }, null, 2)
189
+ console.log(JSON.stringify({
190
+ to: prepared.to,
191
+ data: prepared.data,
192
+ value: prepared.value,
193
+ chainId: prepared.chainId,
194
+ // NOT a gas limit — a floor the external signer's own estimate must clear. Emitting it as
195
+ // `gas` would be wrong: it covers only the provable code-deposit cost, not the schema /
196
+ // dependency / mint legs riding the same multicall, so a signer that used it verbatim would
197
+ // under-fund the transaction. See execute.ts.
198
+ ...(prepared.gasFloor ? { gasMustExceed: prepared.gasFloor } : {}),
199
+ }, null, 2)
132
200
  .split('\n')
133
201
  .map((l) => ' ' + l)
134
202
  .join('\n'));
135
- console.log(`\n ${dim('Then run')} ${bold('abx index <address>')} ${dim('to reflect it once mined.')}\n`);
203
+ if (prepared.gasFloor) {
204
+ console.log(`\n ${C.orange}⚠${C.reset} ${bold('gasMustExceed')} ${dim('is a floor, not a limit.')} This tx stores bytes on-chain, which costs\n` +
205
+ ` 200 gas/byte in code deposit alone. If your signer's gas estimate comes back BELOW ${BigInt(prepared.gasFloor)},\n` +
206
+ ` it is estimating against stale state (the target contract not visible yet) — re-estimate rather than\n` +
207
+ ` sending, or it reverts ${bold('DeploymentFailed()')} and the gas is lost.`);
208
+ }
209
+ // `index` alone fails on a node that never registered the project ("isn't indexed by this node"),
210
+ // which is the common case for an unsigned tx handed to someone else's signer. `add` is idempotent
211
+ // and registers + indexes, so naming it first works from either state.
212
+ console.log(`\n ${dim('Then run')} ${bold('abx add <address>')} ${dim('(or')} ${bold('abx index <address>')} ${dim('if this node already tracks it) to reflect it once mined.')}\n`);
136
213
  return null;
137
214
  }
138
215
  // ── wallet lane: a single tx, on the SAME hardened session as staged deploys ──
@@ -153,7 +230,7 @@ async function signWallet(provider, opts) {
153
230
  const signer = await session.connect();
154
231
  const prepared = await resolveTx(provider, signer);
155
232
  const { txHash, receipt } = await session.send(prepared);
156
- return { txHash, prepared, blockNumber: receipt.blockNumber };
233
+ return { txHash, prepared, blockNumber: receipt.blockNumber, contractAddress: receipt.contractAddress ?? null };
157
234
  }
158
235
  finally {
159
236
  session.close();
@@ -190,6 +267,8 @@ export async function openWalletSession(opts) {
190
267
  // txHash) or a message to sign (personal_sign → signature) — the latter is how the wallet signs
191
268
  // Turbo (Arweave) upload data-items so its own credits pay. Both resolve `pendingResolve` with a
192
269
  // Hex value (a txHash or a signature); only one item is ever in flight.
270
+ // `tx` carries an optional resolved `gas` (hex) the CLI pinned for this item — the page forwards it
271
+ // to `eth_sendTransaction` rather than letting the wallet estimate. See send() below.
193
272
  let current = null;
194
273
  let pendingResolve = null;
195
274
  let pendingReject = null;
@@ -285,7 +364,16 @@ export async function openWalletSession(opts) {
285
364
  connect: () => connected,
286
365
  async send(tx) {
287
366
  index += 1;
288
- current = { index, kind: 'tx', tx, consumed: false };
367
+ // A wallet session spans blocks: the deploy is approved, then setup targets the contract it
368
+ // just created. The browser wallet estimates against ITS OWN RPC, which we don't control and
369
+ // which can lag — so wait for the code to be visible and hand the page an explicit gas limit
370
+ // instead of letting the wallet guess. Same reasoning as the hot lane (see execute.ts).
371
+ if (tx.to && tx.gasFloor)
372
+ await waitForCodeAt(publicClient, tx.to);
373
+ const gas = opts.expectedSigner
374
+ ? await pinGas(publicClient, { from: opts.expectedSigner, to: tx.to, data: tx.data, value: tx.value, gasFloor: tx.gasFloor }).catch(() => undefined)
375
+ : undefined;
376
+ current = { index, kind: 'tx', tx: gas === undefined ? tx : { ...tx, gas: `0x${gas.toString(16)}` }, consumed: false };
289
377
  console.log(` ${dim(`tx ${opts.total ? `${index}/${opts.total}` : index}:`)} ${tx.summary} ${dim('— approve in your wallet …')}`);
290
378
  const txHash = await new Promise((resolve, reject) => {
291
379
  pendingResolve = resolve;
@@ -499,6 +587,10 @@ $('sign').onclick = async () => {
499
587
  } else {
500
588
  const params = {from: account, data: curTx.data, value: curTx.value};
501
589
  if (curTx.to) params.to = curTx.to;
590
+ // An explicit limit the CLI resolved for this tx. Wallets that would otherwise estimate against
591
+ // a node lagging behind the deploy block send ~200k for a call needing ~941k, and the on-chain
592
+ // content write reverts DeploymentFailed(). The user can still edit it in the wallet UI.
593
+ if (curTx.gas) params.gas = curTx.gas;
502
594
  const txHash = await window.ethereum.request({method:'eth_sendTransaction', params:[params]});
503
595
  await fetch('/signed', {method:'POST', headers:{'content-type':'application/json'}, body: JSON.stringify({index: curIndex, txHash})});
504
596
  const link = CFG.explorer ? '<a href="'+CFG.explorer+'/tx/'+txHash+'" target="_blank">'+txHash+'</a>' : txHash;
@@ -1 +1 @@
1
- {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signer.js","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
@@ -3,26 +3,50 @@
3
3
  * <pkg>/package.json) — npm always ships package.json regardless of the `files` allowlist.
4
4
  * Returns '0.0.0' if unreadable, so callers never throw on a self-version read. */
5
5
  export declare function readCliVersion(): string;
6
+ /** The version of the `@artblocks/abx-sdk` this CLI actually runs against, read from the
7
+ * resolved dependency's own package.json (exported via its `./package.json` entry). NOT the
8
+ * CLI's version: under changesets' prerelease mode each package's alpha counter increments
9
+ * independently, so pinning a scaffold's sdk dependency to the CLI's number can produce a
10
+ * range no published sdk satisfies. Falls back to the CLI's version only if resolution fails
11
+ * (dev-tree oddities) — better a near-right pin than '0.0.0'. */
12
+ export declare function readSdkVersion(): string;
6
13
  /**
7
14
  * Compare two semver strings. Returns -1 if a < b, 0 if equal, 1 if a > b. Handles the
8
- * prerelease rule (1.0.0-alpha < 1.0.0) since our own versions are prereleases today
9
- * (0.1.0-alpha.0). Build metadata (+…) is ignored per semver. Tolerant of a leading `v`.
15
+ * prerelease rule (1.0.0-alpha < 1.0.0) so stable and prerelease channels compare correctly.
16
+ * Build metadata (+…) is ignored per semver. Tolerant of a leading `v`.
10
17
  */
11
18
  export declare function compareVersions(a: string, b: string): number;
12
19
  /** True when `latest` is a strictly newer release than `current`. */
13
20
  export declare function isNewer(latest: string, current: string): boolean;
21
+ /**
22
+ * How the currently-running `abx` got onto this machine — the 3-class drift ladder the skill has
23
+ * long taught in prose (`SKILL.md` → "Resolve the CLI before you install anything"), now something
24
+ * `doctor` can just check:
25
+ * - `source` a repo checkout (`pnpm abx`, dev) — detected the SAME way {@link findRepoRoot} does
26
+ * (a `pnpm-workspace.yaml` above the running CLI), since the published package never
27
+ * ships one.
28
+ * - `npx` an npx fetch/run — a temp/cache copy npm never puts on PATH, so it can silently keep
29
+ * serving a stale build after an upgrade (npm's isolated cache dir contains a telltale
30
+ * `_npx` path segment; `npm exec` — what `npx` is today — also sets `npm_command=exec`).
31
+ * - `npm` a plain `npm install`, global (`-g`) or a project's local `node_modules` — same fix
32
+ * either way, so this doesn't split them further.
33
+ * Params are injectable so a test can drive every branch without touching the real filesystem/env.
34
+ */
35
+ export type BinaryProvenance = 'source' | 'npx' | 'npm';
36
+ export declare function binaryProvenance(opts?: {
37
+ isSourceCheckout?: boolean;
38
+ here?: string;
39
+ env?: NodeJS.ProcessEnv;
40
+ }): BinaryProvenance;
14
41
  /**
15
42
  * The npm dist-tag channel a version belongs to, or null for a stable release.
16
43
  * `0.1.0-alpha.5` → `alpha`; `0.1.0` → null; `1.0.0-5` → null (a bare numeric prerelease
17
44
  * identifier is a version counter, not a channel name).
18
45
  *
19
46
  * Why this exists: the update check must not depend on prereleases living under `latest`.
20
- * Today they do — `ci:publish` runs `pnpm -r publish` with no `--tag`, so npm points `latest`
21
- * at each new alpha and asking for `/latest` happens to find it. That breaks the moment a
22
- * stable release ships and the pipeline starts publishing prereleases under `--tag alpha`:
23
- * `/latest` would only ever report the stable, and the nudge would go SILENT for every alpha
24
- * user with nothing erroring. Resolving the running version's own channel alongside `latest`
25
- * makes the check correct in both eras, whichever tag the pipeline uses.
47
+ * Once a stable line exists, Changesets publishes prereleases under their named dist-tag, so
48
+ * `/latest` reports only the stable line. Resolving the running version's own channel alongside
49
+ * `latest` keeps the nudge correct for both stable and prerelease users.
26
50
  */
27
51
  export declare function prereleaseChannel(version: string): string | null;
28
52
  /** GET the version a dist-tag currently points at. Aborts after {@link TIMEOUT_MS}; returns null
@@ -52,7 +76,8 @@ export declare function fetchNewestPublished(current: string, pkg?: string): Pro
52
76
  export declare function checkForCliUpdate(current: string, now?: number): Promise<string | null>;
53
77
  /** The skill's folder name — matches SKILL.md `name`, per the Agent Skills rule that a skill
54
78
  * directory must be named for its `name` field. */
55
- export declare const SKILL_DIR_NAME = "abx-self-host";
79
+ export declare const SKILL_DIR_NAME = "abx";
80
+ export declare const LEGACY_SKILL_DIR_NAMES: readonly ["abx-self-host"];
56
81
  /**
57
82
  * Every skills PARENT directory an ABX-capable agent scans for a `SKILL.md`, keyed by agent.
58
83
  * These are the discovery locations the agents actually read (verified against each agent's docs):
@@ -73,6 +98,8 @@ export declare const ALL_SKILL_PARENTS: string[];
73
98
  * declares no version.
74
99
  */
75
100
  export declare function readSkillVersion(skillMdPath: string): string | null;
101
+ /** Parse the required top-level skill name from YAML frontmatter. */
102
+ export declare function readSkillName(skillMdPath: string): string | null;
76
103
  /**
77
104
  * Versions of any locally-installed skill copy (project-local under CWD, and global under HOME),
78
105
  * read from each copy's own `SKILL.md` frontmatter. The skill and CLI are co-versioned, but a
@@ -82,4 +109,28 @@ export declare function readSkillVersion(skillMdPath: string): string | null;
82
109
  * the CLI's own installer.
83
110
  */
84
111
  export declare function installedSkillVersions(): string[];
112
+ /** One installed skill copy: its version, where it lives, and whether it's project-local or global. */
113
+ export interface InstalledSkillCopy {
114
+ version: string;
115
+ path: string;
116
+ /** `project` = under the CWD (fixed by `abx skill install`); `global` = under HOME (needs `--global`). */
117
+ scope: 'project' | 'global';
118
+ }
119
+ /**
120
+ * Every installed skill copy found, WITH its path and scope — not just the version set.
121
+ *
122
+ * The scope is the whole point. A stale copy anywhere used to raise a ✗ that said only "installed abx
123
+ * skill is vX — refresh it: `abx skill install`", and that command writes the PROJECT-local copy only.
124
+ * So whenever the stale copy was the GLOBAL one, following the instruction changed nothing and the ✗
125
+ * came back forever. The reported path and scope make the remedy actionable.
126
+ */
127
+ export declare function installedSkillCopies(): InstalledSkillCopy[];
128
+ /** Legacy copies still trigger independently and can compete with the renamed `abx` skill. */
129
+ export declare function installedLegacySkillCopies(): InstalledSkillCopy[];
130
+ /**
131
+ * The exact `abx skill install` invocation that would refresh the given stale copies — `--global`
132
+ * when a stale copy lives under HOME, plain when it's project-local, both when both are stale.
133
+ * Returned as the literal command string so a readout can print something that actually works.
134
+ */
135
+ export declare function skillRefreshCommands(stale: InstalledSkillCopy[]): string[];
85
136
  //# sourceMappingURL=update-check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AA6BA;;;oFAGoF;AACpF,wBAAgB,cAAc,IAAI,MAAM,CAQvC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA+B5D;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhE;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhE;AAED;0GAC0G;AAC1G,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxF;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI7F;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BzG;AAED;oDACoD;AACpD,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMtD,CAAC;AAEF;;oFAEoF;AACpF,eAAO,MAAM,iBAAiB,UAO7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUnE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CASjD"}
1
+ {"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../src/update-check.ts"],"names":[],"mappings":"AA+BA;;;oFAGoF;AACpF,wBAAgB,cAAc,IAAI,MAAM,CAavC;AAED;;;;;kEAKkE;AAClE,wBAAgB,cAAc,IAAI,MAAM,CASvC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA+B5D;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;AACxD,wBAAgB,gBAAgB,CAAC,IAAI,GAAE;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAM,GAAG,gBAAgB,CAOlI;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhE;AAED;0GAC0G;AAC1G,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxF;AAED,wFAAwF;AACxF,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,CAIlF;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI7F;AAMD;;;;;;;;;;;GAWG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8BzG;AAED;oDACoD;AACpD,eAAO,MAAM,cAAc,QAAQ,CAAC;AACpC,eAAO,MAAM,sBAAsB,4BAA6B,CAAC;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMtD,CAAC;AAEF;;oFAEoF;AACpF,eAAO,MAAM,iBAAiB,UAO7B,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUnE;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUhE;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,EAAE,CAEjD;AAED,uGAAuG;AACvG,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,0GAA0G;IAC1G,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;CAC7B;AAsBD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,IAAI,kBAAkB,EAAE,CAE3D;AAED,8FAA8F;AAC9F,wBAAgB,0BAA0B,IAAI,kBAAkB,EAAE,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAK1E"}
@@ -15,12 +15,14 @@
15
15
  * stable release ships.
16
16
  */
17
17
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
18
- import { dirname, join, resolve } from 'node:path';
18
+ import { createRequire } from 'node:module';
19
+ import { dirname, join } from 'node:path';
19
20
  import { fileURLToPath } from 'node:url';
20
21
  import { homedir } from 'node:os';
22
+ import { findCliPackageRoot, findRepoRoot } from './output.js';
21
23
  const REGISTRY = 'https://registry.npmjs.org';
22
24
  const PKG = '@artblocks/abx-cli';
23
- // How long a check is cached. 6h rather than a day because releases land fast in the alpha line: a
25
+ // How long a check is cached. 6h rather than a day because releases can land quickly: a
24
26
  // 24h cache let someone work a whole session — deploys included — against a CLI that had been
25
27
  // superseded that morning and never hear about it. 6h caps that at roughly one sitting.
26
28
  const TTL_MS = 6 * 60 * 60 * 1000;
@@ -31,7 +33,13 @@ const TIMEOUT_MS = 1500; // never hang a command on a slow/offline network
31
33
  * Returns '0.0.0' if unreadable, so callers never throw on a self-version read. */
32
34
  export function readCliVersion() {
33
35
  try {
34
- const pkgDir = resolve(fileURLToPath(import.meta.url), '..', '..');
36
+ // `findCliPackageRoot()` rather than a counted `..`. This module compiles to `dist/update-check.js`,
37
+ // one level deep, so `'..','..'` happened to be RIGHT here — and that accident is the point: the
38
+ // identical expression in `src/commands/` was wrong, and this one becomes wrong the day the file
39
+ // moves. The `catch` below would then silently report '0.0.0' and disable the update check.
40
+ const pkgDir = findCliPackageRoot();
41
+ if (!pkgDir)
42
+ return '0.0.0';
35
43
  const raw = JSON.parse(readFileSync(join(pkgDir, 'package.json'), 'utf8'));
36
44
  return typeof raw.version === 'string' ? raw.version : '0.0.0';
37
45
  }
@@ -39,10 +47,28 @@ export function readCliVersion() {
39
47
  return '0.0.0';
40
48
  }
41
49
  }
50
+ /** The version of the `@artblocks/abx-sdk` this CLI actually runs against, read from the
51
+ * resolved dependency's own package.json (exported via its `./package.json` entry). NOT the
52
+ * CLI's version: under changesets' prerelease mode each package's alpha counter increments
53
+ * independently, so pinning a scaffold's sdk dependency to the CLI's number can produce a
54
+ * range no published sdk satisfies. Falls back to the CLI's version only if resolution fails
55
+ * (dev-tree oddities) — better a near-right pin than '0.0.0'. */
56
+ export function readSdkVersion() {
57
+ try {
58
+ const req = createRequire(import.meta.url);
59
+ const raw = JSON.parse(readFileSync(req.resolve('@artblocks/abx-sdk/package.json'), 'utf8'));
60
+ if (typeof raw.version === 'string')
61
+ return raw.version;
62
+ }
63
+ catch {
64
+ // fall through to the CLI's own version
65
+ }
66
+ return readCliVersion();
67
+ }
42
68
  /**
43
69
  * Compare two semver strings. Returns -1 if a < b, 0 if equal, 1 if a > b. Handles the
44
- * prerelease rule (1.0.0-alpha < 1.0.0) since our own versions are prereleases today
45
- * (0.1.0-alpha.0). Build metadata (+…) is ignored per semver. Tolerant of a leading `v`.
70
+ * prerelease rule (1.0.0-alpha < 1.0.0) so stable and prerelease channels compare correctly.
71
+ * Build metadata (+…) is ignored per semver. Tolerant of a leading `v`.
46
72
  */
47
73
  export function compareVersions(a, b) {
48
74
  const pa = parseSemver(a);
@@ -90,6 +116,16 @@ export function compareVersions(a, b) {
90
116
  export function isNewer(latest, current) {
91
117
  return compareVersions(latest, current) > 0;
92
118
  }
119
+ export function binaryProvenance(opts = {}) {
120
+ const isSourceCheckout = opts.isSourceCheckout ?? !!findRepoRoot();
121
+ if (isSourceCheckout)
122
+ return 'source';
123
+ const here = opts.here ?? fileURLToPath(import.meta.url);
124
+ const env = opts.env ?? process.env;
125
+ if (/[/\\]_npx[/\\]/.test(here) || env.npm_command === 'exec')
126
+ return 'npx';
127
+ return 'npm';
128
+ }
93
129
  function parseSemver(v) {
94
130
  const clean = String(v).trim().replace(/^v/, '').split('+')[0];
95
131
  const dash = clean.indexOf('-');
@@ -110,12 +146,9 @@ function parseSemver(v) {
110
146
  * identifier is a version counter, not a channel name).
111
147
  *
112
148
  * Why this exists: the update check must not depend on prereleases living under `latest`.
113
- * Today they do — `ci:publish` runs `pnpm -r publish` with no `--tag`, so npm points `latest`
114
- * at each new alpha and asking for `/latest` happens to find it. That breaks the moment a
115
- * stable release ships and the pipeline starts publishing prereleases under `--tag alpha`:
116
- * `/latest` would only ever report the stable, and the nudge would go SILENT for every alpha
117
- * user with nothing erroring. Resolving the running version's own channel alongside `latest`
118
- * makes the check correct in both eras, whichever tag the pipeline uses.
149
+ * Once a stable line exists, Changesets publishes prereleases under their named dist-tag, so
150
+ * `/latest` reports only the stable line. Resolving the running version's own channel alongside
151
+ * `latest` keeps the nudge correct for both stable and prerelease users.
119
152
  */
120
153
  export function prereleaseChannel(version) {
121
154
  const first = parseSemver(version).pre[0];
@@ -215,7 +248,8 @@ export async function checkForCliUpdate(current, now = Date.now()) {
215
248
  }
216
249
  /** The skill's folder name — matches SKILL.md `name`, per the Agent Skills rule that a skill
217
250
  * directory must be named for its `name` field. */
218
- export const SKILL_DIR_NAME = 'abx-self-host';
251
+ export const SKILL_DIR_NAME = 'abx';
252
+ export const LEGACY_SKILL_DIR_NAMES = ['abx-self-host'];
219
253
  /**
220
254
  * Every skills PARENT directory an ABX-capable agent scans for a `SKILL.md`, keyed by agent.
221
255
  * These are the discovery locations the agents actually read (verified against each agent's docs):
@@ -260,6 +294,19 @@ export function readSkillVersion(skillMdPath) {
260
294
  return null;
261
295
  }
262
296
  }
297
+ /** Parse the required top-level skill name from YAML frontmatter. */
298
+ export function readSkillName(skillMdPath) {
299
+ try {
300
+ const raw = readFileSync(skillMdPath, 'utf8');
301
+ const fm = /^---\r?\n([\s\S]*?)\r?\n---/.exec(raw);
302
+ const front = fm ? fm[1] : '';
303
+ const nm = /(?:^|\n)name:\s*["']?([a-z0-9-]+)["']?\s*(?:\n|$)/.exec(front);
304
+ return nm ? nm[1] : null;
305
+ }
306
+ catch {
307
+ return null;
308
+ }
309
+ }
263
310
  /**
264
311
  * Versions of any locally-installed skill copy (project-local under CWD, and global under HOME),
265
312
  * read from each copy's own `SKILL.md` frontmatter. The skill and CLI are co-versioned, but a
@@ -269,14 +316,54 @@ export function readSkillVersion(skillMdPath) {
269
316
  * the CLI's own installer.
270
317
  */
271
318
  export function installedSkillVersions() {
272
- const out = new Set();
273
- for (const root of [process.cwd(), homedir()]) {
319
+ return [...new Set(installedSkillCopies().map((c) => c.version))];
320
+ }
321
+ function installedSkillCopiesNamed(names) {
322
+ const out = [];
323
+ const home = homedir();
324
+ const cwd = process.cwd();
325
+ for (const [root, scope] of [
326
+ [cwd, 'project'],
327
+ [home, 'global'],
328
+ ]) {
274
329
  for (const parent of ALL_SKILL_PARENTS) {
275
- const v = readSkillVersion(join(root, parent, SKILL_DIR_NAME, 'SKILL.md'));
276
- if (v)
277
- out.add(v);
330
+ for (const name of names) {
331
+ const path = join(root, parent, name, 'SKILL.md');
332
+ const version = readSkillVersion(path);
333
+ // A project dir that IS the home dir would otherwise report the same copy twice.
334
+ if (version && !out.some((c) => c.path === path))
335
+ out.push({ version, path, scope });
336
+ }
278
337
  }
279
338
  }
280
- return [...out];
339
+ return out;
340
+ }
341
+ /**
342
+ * Every installed skill copy found, WITH its path and scope — not just the version set.
343
+ *
344
+ * The scope is the whole point. A stale copy anywhere used to raise a ✗ that said only "installed abx
345
+ * skill is vX — refresh it: `abx skill install`", and that command writes the PROJECT-local copy only.
346
+ * So whenever the stale copy was the GLOBAL one, following the instruction changed nothing and the ✗
347
+ * came back forever. The reported path and scope make the remedy actionable.
348
+ */
349
+ export function installedSkillCopies() {
350
+ return installedSkillCopiesNamed([SKILL_DIR_NAME]);
351
+ }
352
+ /** Legacy copies still trigger independently and can compete with the renamed `abx` skill. */
353
+ export function installedLegacySkillCopies() {
354
+ return installedSkillCopiesNamed(LEGACY_SKILL_DIR_NAMES);
355
+ }
356
+ /**
357
+ * The exact `abx skill install` invocation that would refresh the given stale copies — `--global`
358
+ * when a stale copy lives under HOME, plain when it's project-local, both when both are stale.
359
+ * Returned as the literal command string so a readout can print something that actually works.
360
+ */
361
+ export function skillRefreshCommands(stale) {
362
+ const cmds = [];
363
+ if (stale.some((c) => c.scope === 'project'))
364
+ cmds.push('abx skill install');
365
+ if (stale.some((c) => c.scope === 'global'))
366
+ cmds.push('abx skill install --global');
367
+ return cmds.length ? cmds : ['abx skill install'];
281
368
  }
282
369
  //# sourceMappingURL=update-check.js.map