shinjuku-shield 0.3.114 → 0.3.115

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.
package/README.md CHANGED
@@ -6,19 +6,19 @@ answers privately, in a terminal chat or for your agent app. Its `mcp`
6
6
  command runs a local MCP server (stdio) for your agent. Your keys never
7
7
  leave your machine.
8
8
 
9
- This is version 0.3.114. The npm packages `shinjuku-shield` and
9
+ This is version 0.3.115. The npm packages `shinjuku-shield` and
10
10
  `shinjuku-shielded` hold the same files. The command is `shinjuku`.
11
11
 
12
12
  ## Set up
13
13
 
14
14
  ```sh
15
- npm install -g shinjuku@0.3.114
15
+ npm install -g shinjuku@0.3.115
16
16
  shinjuku setup
17
17
  ```
18
18
 
19
19
  Type the two lines as they are. `npx install shinjuku` does not work: npx
20
20
  reads `install` as the name of another npm package. To set up without
21
- installing, type `npx shinjuku@0.3.114 setup`.
21
+ installing, type `npx shinjuku@0.3.115 setup`.
22
22
 
23
23
  Setup makes the wallet on this machine, a private passphrase file, and the
24
24
  checked proof tools (about 191 MB), and writes `config.json`. It also writes
@@ -36,13 +36,13 @@ Every wallet command works after `shinjuku`, for example `shinjuku balance`,
36
36
  Claude Code:
37
37
 
38
38
  ```sh
39
- claude mcp add --scope user shinjuku -- npx -y --no-audit --no-fund shinjuku-shield@0.3.114 mcp
39
+ claude mcp add --scope user shinjuku -- npx -y --no-audit --no-fund shinjuku-shield@0.3.115 mcp
40
40
  ```
41
41
 
42
42
  Claude Desktop (`claude_desktop_config.json`) or Cursor (`~/.cursor/mcp.json`):
43
43
 
44
44
  ```json
45
- { "mcpServers": { "shinjuku": { "command": "npx", "args": ["-y", "--no-audit", "--no-fund", "shinjuku-shield@0.3.114", "mcp"] } } }
45
+ { "mcpServers": { "shinjuku": { "command": "npx", "args": ["-y", "--no-audit", "--no-fund", "shinjuku-shield@0.3.115", "mcp"] } } }
46
46
  ```
47
47
 
48
48
  On native Windows, if the host cannot find `npx`, use `"command": "cmd"` and
package/manifest.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "schema": "carbon-shielded-wallet/bundle-manifest/v1",
3
3
  "file": "shinjuku-wallet.mjs",
4
- "sha256": "dc0b6b99ced49b6c454c44c8b92ee46d77d38d5fdabcf44154b4200894425006",
5
- "bytes": 8345095,
6
- "sourceCommit": "dbf24f945933862ece16e3e283fea5273db59865",
4
+ "sha256": "148b3f5279bf4b0914aa076c617b9fd51956480a57058dfee4492c208fd72e7a",
5
+ "bytes": 8348544,
6
+ "sourceCommit": "8b4f9050d3ae61ecdd0082ee931761cc2b812f62",
7
7
  "sourceDirty": false,
8
8
  "installRecordMatchesLockfile": true,
9
9
  "releaseRule": "valid only when two fresh npm ci --ignore-scripts builds on different OSes give the same sha256; installRecordMatchesLockfile true means every entry npm installed equals its package-lock.json entry and every entry not marked optional, devOptional included, is installed: an optional entry (a package for another platform) may be absent",
@@ -1037,5 +1037,5 @@
1037
1037
  "version": "1.8.0"
1038
1038
  }
1039
1039
  ],
1040
- "publishedAt": "2026-10-27T17:51:29.501Z"
1040
+ "publishedAt": "2026-10-27T18:51:07.036Z"
1041
1041
  }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "shinjuku-shield",
3
- "version": "0.3.114",
3
+ "version": "0.3.115",
4
4
  "mcpName": "io.github.ShinjukuStaition/shinjuku-mcp",
5
5
  "description": "Shinjuku Shielded, the private x402 facilitator on Solana: the self-custody wallet CLI and its MCP server. Shield, pay, and unshield USDC from any MCP agent, under caps you set.",
6
- "shinjukuRelease": "dc0b6b99",
7
- "shinjukuSha256": "dc0b6b99ced49b6c454c44c8b92ee46d77d38d5fdabcf44154b4200894425006",
6
+ "shinjukuRelease": "148b3f52",
7
+ "shinjukuSha256": "148b3f5279bf4b0914aa076c617b9fd51956480a57058dfee4492c208fd72e7a",
8
8
  "license": "SEE LICENSE IN LICENSE.txt",
9
9
  "author": "Shinjuku Shielded",
10
10
  "homepage": "https://github.com/ShinjukuStaition/shinjuku-shield#readme",
@@ -119388,7 +119388,7 @@ function withEarlyAnswer(tool, {
119388
119388
  if (open4) {
119389
119389
  log(`MCP_PAY_SECOND_REFUSED requestId=${requestId} open=${open4[0]}`);
119390
119390
  return { text: JSON.stringify({
119391
- say: `Not paid: a payment for this ${words2 === PAY_WORDS ? "URL" : "call"} is still open (request_id ${open4[0]}). Call ${tool.name} with that request_id for the result.`,
119391
+ say: `Nothing was paid for this request: a payment for this ${words2 === PAY_WORDS ? "URL" : "call"} is still open with ${words2.who}. Do not pay again; asking for its result pays nothing more.`,
119392
119392
  ok: false,
119393
119393
  error: "mcp_payment_still_open",
119394
119394
  requestId,
@@ -119451,7 +119451,7 @@ function withEarlyAnswer(tool, {
119451
119451
  log(`MCP_PAY_EARLY_ANSWER requestId=${requestId} waited=${secondsWaited}s`);
119452
119452
  entry.toldWaiting = true;
119453
119453
  const next = `The payment was sent to ${words2.who} (price + fee left the balance), and ${words2.who} ${words2.busyNext}. Do not pay again: call ${tool.name} again with request_id "${requestId}" and ${words2.same} for the result (that call waits up to ${Math.round(earlyAnswerMs / 1e3)} s for it); it never pays twice. A new request_id for the same request is refused while this one is open. The later call's answer says how it ended: ${words2.who}'s answer, or what happened to the payment.`;
119454
- const say3 = sellerWorkingSeconds < JUST_REACHED_SECONDS ? `Sent to ${words2.who}; the request just reached it. Do not pay again: call ${tool.name} with request_id ${requestId} for the result.` : `Sent to ${words2.who}; it has not answered yet. Do not pay again: call ${tool.name} with request_id ${requestId} for the result.`;
119454
+ const say3 = sellerWorkingSeconds < JUST_REACHED_SECONDS ? `Sent to ${words2.who}; the request just reached it. Do not pay again; asking for the result pays nothing more.` : `Sent to ${words2.who}; it has not answered yet. Do not pay again; asking for the result pays nothing more.`;
119455
119455
  return { text: JSON.stringify({ say: say3, ok: true, paid: false, pending: true, stage: "seller_working", requestId, secondsWaited, sellerWorkingSeconds, next }, null, 2) };
119456
119456
  } };
119457
119457
  }
@@ -119650,7 +119650,7 @@ function refusalSay(a, tool, again, npmVersion) {
119650
119650
  return `Nothing changed: this address was made for ${amount ? `${amount} USDC` : "a fixed amount"}, and its amount never changes. Read next for what to do.`;
119651
119651
  }
119652
119652
  if (code2 === "mcp_balance_unknown") return "Nothing was moved yet: the wallet is still reading its private balance. Try again in a minute.";
119653
- if (code2 === "mcp_payment_still_open") return "Not paid: a payment for this request is still open. Ask with its request_id for the result.";
119653
+ if (code2 === "mcp_payment_still_open") return "Nothing was paid for this request: a payment for it is still open. Do not pay again; asking for its result pays nothing more.";
119654
119654
  if (code2 === "mcp_setup_restart_needed") return "The wallet is set up, but it must reconnect once. Follow the steps below, then try again. Nothing was paid.";
119655
119655
  if (code2 === "mcp_restart_needed") return "Nothing was paid. Restart this app, then try again.";
119656
119656
  if (code2 === "p03_merchant_respend_value_held_by_private_send") {
@@ -125864,6 +125864,30 @@ async function checkUnshieldRecipient({ connection, mint, owner }) {
125864
125864
  throw new Error("mcp_unshield_to_invalid: the USDC holder at this address is for another token or another owner, so it cannot take this payment; nothing was paid");
125865
125865
  }
125866
125866
  }
125867
+ async function walkBeforeLease(session, exitProofTools) {
125868
+ try {
125869
+ const store = session.openStore();
125870
+ let marks = walletHistoryHomeMarks(store);
125871
+ if (marks === void 0) {
125872
+ await new Promise((resolve35) => {
125873
+ setTimeout(resolve35, HOME_MARKS_SETTLED_MS2 + 10);
125874
+ });
125875
+ marks = walletHistoryHomeMarks(store);
125876
+ }
125877
+ if (marks === void 0) return void 0;
125878
+ const history = await loadWalletP03History({
125879
+ store,
125880
+ connection: connectSplit(session.connection, session.historyUrl),
125881
+ programId: session.programId,
125882
+ pool: store.state.pool,
125883
+ deploymentIdentity: exitProofTools.deploymentIdentity,
125884
+ share: { notBeforeMs: Date.now(), marks }
125885
+ });
125886
+ return { marks, pool: String(store.state.pool), history };
125887
+ } catch {
125888
+ return void 0;
125889
+ }
125890
+ }
125867
125891
  async function runUnshield({
125868
125892
  session,
125869
125893
  lease,
@@ -125880,7 +125904,9 @@ async function runUnshield({
125880
125904
  onAnswered,
125881
125905
  onCheckPending,
125882
125906
  onExited = () => {
125883
- }
125907
+ },
125908
+ walked,
125909
+ finalityWaits = 0
125884
125910
  }) {
125885
125911
  const owner = new import_web3132.PublicKey(recipientOwner);
125886
125912
  let timing;
@@ -125900,13 +125926,25 @@ async function runUnshield({
125900
125926
  const use = (store) => {
125901
125927
  current = store;
125902
125928
  };
125903
- const walk = (deploymentIdentity) => () => scoped("unshield-walk", () => loadWalletP03History({
125904
- store: current,
125905
- connection: connectSplit(session.connection, session.historyUrl),
125906
- programId: session.programId,
125907
- pool: current.state.pool,
125908
- deploymentIdentity
125909
- }));
125929
+ let nextWalk = walked;
125930
+ const walkNext = (report) => {
125931
+ nextWalk = report;
125932
+ };
125933
+ const walk = (deploymentIdentity) => () => {
125934
+ if (nextWalk !== void 0) {
125935
+ const report = nextWalk;
125936
+ nextWalk = void 0;
125937
+ mark("unshield-walk-before-lease");
125938
+ return Promise.resolve(report);
125939
+ }
125940
+ return scoped("unshield-walk", () => loadWalletP03History({
125941
+ store: current,
125942
+ connection: connectSplit(session.connection, session.historyUrl),
125943
+ programId: session.programId,
125944
+ pool: current.state.pool,
125945
+ deploymentIdentity
125946
+ }));
125947
+ };
125910
125948
  const name = `self-pay-${unshieldId}`;
125911
125949
  const start = await lease(async (opened) => {
125912
125950
  mark("unshield-lease-self-pay");
@@ -126005,7 +126043,20 @@ async function runUnshield({
126005
126043
  mark("unshield-exit");
126006
126044
  tried = await exitTries({ session, lease, name, pool: start.pool, use, mark, scoped, exitOf, answer: { selfPayTransaction: paid.transaction ?? null }, onAnswered });
126007
126045
  }
126008
- return exitFinish({ lease, name, use, mark, scoped, exitOf, tried, onCheckPending, onExited });
126046
+ return exitFinish({
126047
+ lease,
126048
+ name,
126049
+ use,
126050
+ mark,
126051
+ scoped,
126052
+ exitOf,
126053
+ tried,
126054
+ onCheckPending,
126055
+ onExited,
126056
+ finalityWaits,
126057
+ walkNext,
126058
+ ...finalityWaits > 0 ? { preWalk: () => walkBeforeLease(session, exitProofTools) } : {}
126059
+ });
126009
126060
  }
126010
126061
  function sentAtMs(record) {
126011
126062
  return Number.isSafeInteger(record?.exitAnsweredAtMs) ? record.exitAnsweredAtMs : record?.exitedAtMs;
@@ -126040,7 +126091,7 @@ async function exitTries({ session, lease, name, pool: pool2, use, mark, scoped,
126040
126091
  return { answer, signature: exit.signature, settled: exit.settled !== false, early };
126041
126092
  }), { ring: { connection: session.connection, pool: pool2 } }));
126042
126093
  }
126043
- async function exitFinish({ lease, name, use, mark, scoped, exitOf, tried, onCheckPending, onExited }) {
126094
+ async function exitFinish({ lease, name, use, mark, scoped, exitOf, tried, onCheckPending, onExited, finalityWaits = 0, preWalk, walkNext }) {
126044
126095
  const checkPending = (store, error) => {
126045
126096
  mark("unshield-exit-check-pending");
126046
126097
  if (store) store.writeWal(name, { ...store.readWal(name), exitCheckPendingAtMs: Date.now() });
@@ -126050,23 +126101,36 @@ async function exitFinish({ lease, name, use, mark, scoped, exitOf, tried, onChe
126050
126101
  }
126051
126102
  };
126052
126103
  try {
126053
- await lease(async (store) => {
126054
- mark("unshield-lease-finish");
126055
- use(store);
126056
- if (!tried.settled) {
126057
- try {
126058
- await scoped("unshield-exit", () => exitOf(store));
126059
- } catch (error) {
126060
- if (!tried.early) throw error;
126061
- checkPending(store, error);
126062
- return;
126104
+ for (let waits = 0; ; waits += 1) {
126105
+ const early = !tried.settled && typeof preWalk === "function" ? await preWalk() : void 0;
126106
+ const notFinal = await lease(async (store) => {
126107
+ mark("unshield-lease-finish");
126108
+ use(store);
126109
+ if (!tried.settled) {
126110
+ walkNext?.(walkStillCurrent(store, early));
126111
+ try {
126112
+ await scoped("unshield-exit", () => exitOf(store));
126113
+ } catch (error) {
126114
+ if (waits < finalityWaits && NOT_FINAL_YET.test(String(error?.message ?? ""))) return true;
126115
+ if (!tried.early) throw error;
126116
+ checkPending(store, error);
126117
+ return false;
126118
+ } finally {
126119
+ walkNext?.(void 0);
126120
+ }
126063
126121
  }
126064
- }
126065
- mark("unshield-exited");
126066
- const exited = store.readWal(name);
126067
- store.writeWal(name, { ...exited, state: "exited", exitTransaction: tried.signature, exitedAtMs: exited?.exitedAtMs ?? exited?.exitAnsweredAtMs ?? Date.now() });
126068
- onExited();
126069
- });
126122
+ mark("unshield-exited");
126123
+ const exited = store.readWal(name);
126124
+ store.writeWal(name, { ...exited, state: "exited", exitTransaction: tried.signature, exitedAtMs: exited?.exitedAtMs ?? exited?.exitAnsweredAtMs ?? Date.now() });
126125
+ onExited();
126126
+ return false;
126127
+ });
126128
+ if (!notFinal) break;
126129
+ mark("unshield-finish-finality-wait");
126130
+ await new Promise((resolve35) => {
126131
+ setTimeout(resolve35, FINISH_FINALITY_WAIT_MS);
126132
+ });
126133
+ }
126070
126134
  } catch (error) {
126071
126135
  if (!tried.early) throw error;
126072
126136
  checkPending(void 0, error);
@@ -131255,6 +131319,7 @@ ${canonical5}`;
131255
131319
  profile: money.profile,
131256
131320
  facilitatorOrigin: money.facilitatorOrigin,
131257
131321
  onStage,
131322
+ finalityWaits: FINISH_FINALITY_WAITS,
131258
131323
  lease: (task) => windows++ === 0 ? firstLease(task) : new Promise((resolve35) => {
131259
131324
  setTimeout(resolve35, yieldMs);
131260
131325
  }).then(() => withLockRetry(() => underLease(task))),
@@ -131816,9 +131881,11 @@ ${canonical5}`;
131816
131881
  answeredExitTries.set(name, attempt);
131817
131882
  const unshieldId = name.slice("self-pay-".length);
131818
131883
  log(`MCP_UNSHIELD_CHECK_RESUME unshieldId=${unshieldId}`);
131819
- onOwnTorTag(() => underLease((opened) => {
131884
+ const tryFinish = (waits) => walkBeforeLease(session, money.exitProofTools).then((early) => underLease((opened) => {
131820
131885
  const current = opened.readWal(name);
131821
131886
  if (current?.state === "exited" || current?.exitUnconfirmed === true || typeof current?.exitTransaction !== "string") return void 0;
131887
+ const walked = walkStillCurrent(opened, early);
131888
+ if (early !== void 0 && walked === void 0) log(`MCP_UNSHIELD_CHECK_WALK_UNDER_LEASE unshieldId=${unshieldId}`);
131822
131889
  return (ops.unshield ?? runUnshield)({
131823
131890
  session,
131824
131891
  lease: (task) => task(opened),
@@ -131830,16 +131897,31 @@ ${canonical5}`;
131830
131897
  facilitatorOrigin: money.facilitatorOrigin,
131831
131898
  onStage: () => {
131832
131899
  },
131833
- ...ops.selfPay ? { selfPayStep: ops.selfPay } : {}
131900
+ ...ops.selfPay ? { selfPayStep: ops.selfPay } : {},
131901
+ ...walked !== void 0 ? { walked } : {}
131834
131902
  });
131835
- }, { orClosed: ANSWERED_EXIT_CLOSED })).then((result) => {
131903
+ }, { orClosed: ANSWERED_EXIT_CLOSED })).catch(async (error) => {
131904
+ let answeredAt;
131905
+ try {
131906
+ answeredAt = session.openStore().readWal(name)?.exitAnsweredAtMs;
131907
+ } catch {
131908
+ answeredAt = void 0;
131909
+ }
131910
+ if (waits >= FINISH_FINALITY_WAITS || finalityClosed || session.closed === true || !NOT_FINAL_YET.test(String(error?.message ?? "")) || !Number.isSafeInteger(answeredAt) || Date.now() - answeredAt > FINISH_FINALITY_RECENT_MS) throw error;
131911
+ log(`MCP_UNSHIELD_CHECK_FINALITY_WAIT unshieldId=${unshieldId} wait=${waits + 1}`);
131912
+ await new Promise((resolve35) => {
131913
+ setTimeout(resolve35, FINISH_FINALITY_WAIT_MS);
131914
+ });
131915
+ return tryFinish(waits + 1);
131916
+ });
131917
+ onOwnTorTag(() => tryFinish(0)).then((result) => {
131836
131918
  if (result === ANSWERED_EXIT_CLOSED) return;
131837
131919
  const now = session.openStore().readWal(name);
131838
131920
  log(now?.state === "exited" ? `MCP_UNSHIELD_CHECK_DONE unshieldId=${unshieldId}` : `MCP_UNSHIELD_CHECK_PENDING unshieldId=${unshieldId}`);
131839
131921
  if (now?.state === "exited") refreshAtFinality();
131840
131922
  }, (error) => {
131841
131923
  const cause = String(error?.message ?? error ?? "").split("\n", 1)[0];
131842
- attempt.provenUnspent = /confirmed note-exit is not finalized spent/.test(cause);
131924
+ attempt.provenUnspent = NOT_FINAL_YET.test(cause);
131843
131925
  log(`MCP_UNSHIELD_CHECK_PENDING unshieldId=${unshieldId} cause=${JSON.stringify(cause.slice(0, 240))}`);
131844
131926
  }).then(() => underLease((opened) => {
131845
131927
  const now = opened.readWal(name);
@@ -134634,7 +134716,7 @@ function createSetupTools({
134634
134716
  doneTool: sayOnRefusal(doneTool)
134635
134717
  };
134636
134718
  }
134637
- var import_web3132, shownCaps, RELEASE_RETRY_MS, STAGE_WORDS, stageWords, INTERNAL_BALANCE_DETAIL, shownBreakdown, sessionLeftShown, TOKEN_UNIT_TOOLS, RESOURCE_PAYMENT_WAL_PREFIX2, POOL_LAYOUT_CODE, POOL_LAYOUT_UPDATE, USEPOD_VIA_INFERENCE_CHAT, SEND_RUNS_ON, DEPOSIT_RUNS_ON, CLI_FUNDS_PLAN_PREFIX, CLI_FUNDS_SCHEMA, SELF_PAY_ORIGIN3, REQUEST_ID4, POSITIVE_ATOMIC6, PRIVATE_HOST3, FORBIDDEN_HEADERS3, MAX_BODY_BYTES2, PREVIEW_TIMEOUT_MS, PREVIEW_SELLER_READ_MS, CALL_BUDGET_MS, budgetLeft, PAY_ANSWER_MARGIN_MS, MONEY_FIRST_ANSWER_MS, BALANCE_AFTER_LANDING_MS, JOIN_CALL_MAX_MS, JOIN_NUDGE_QUIET_MS, JOIN_STEP_MS, sleep2, PROGRESS_EVERY_MS2, READ_BUDGET_MS, UNPAID_TOR_TRY_MS, UNPAID_CLEAR_MS, READ_BUDGET_TOOLS, FLOAT_BUSY_CODES, RETRY_MARGIN_MS, ASK_PAY_CODES, runningNpmVersion, terminalCommand2, capPlaceWords, CAP_NAMES, capName, capRaiseText, runningLimits, payCapFlag, cheaperSellerText, limitNext, SAFE_TEXT, MCP_TOOL_ALIASES, POOL_SWITCH_WHY, POOL_SWITCH_NEXT, SWITCH_STATES, quietSwitch, switchKey, ATOMIC_TEXT, movedTo, FLOAT_ID, ANSWERED_EXIT_RETRY_MS, ANSWERED_EXIT_UNCONFIRMED_MS, ANSWERED_EXIT_RETRY_WINDOW_MS, ANSWERED_EXIT_CLOSED, switchAmount, switchEta, switchRows, OWNER_CAP_CODES, JOIN_END_MCP, JOIN_END_TERMINAL_LIBRARY, JOIN_RETRY_BACKOFF_MS, WALLET_CAP_FIX, MCP_CAP_FIX, capFix, ownerOnlyNext, mcpNext, CONFIDENTIAL_RETIRED, json3, answerResult, discoverTool, LAUNCH_CAP_CODES, dayCapKind, refuse12, newRequestIdFor, payCapName, publicOffer, FLOAT_PAID_CODES, FLOAT_PRIVATE_LEG, MONEY_ID2, toRecordId, linkKindOf, moneyId, REFUSED_CODES, refusedCodeOf, PLAIN_REASONS, INSUFFICIENT_CODE, insufficientCause, INSUFFICIENT_REASONS, reasonOf, plainReason, KEPT_SEND_TRIES, shownId, isSplitSend, sendPartId, PROMISED_NEXT, partFailReason, sendAnswerOf, PUBLIC_READ_TIMEOUT_MS, RECIPIENT_CHECK_TIMEOUT_MS, withTimeout, ownKey, readFailure, OWN_KEY_TOKENS_MAX, tokenAmountText, elsewhereId, AGENT_ID_SCHEMA, agentIdName, minutesText2, ageWords2, DEPOSIT_SENT_STATES, depositLanded, usdcText3, walkWalletHistory, REFRESH_LEASE_WALK_MS, HOME_MARKS_SETTLED_MS2, AUTO_BACKUPS_KEPT, AUTO_BACKUP_NAME, AUTO_BACKUP_VERIFIED, FRONTED_SETTLE_MARGIN_SLOTS, UNSHIELD_WINDOW_YIELD_MS, BALANCE_REFRESH_WAIT_MS, BALANCE_REFRESH_GRACE_MS, BALANCE_REFRESH_LONG_MS, INBOUND_REFRESH_AGE_MS, changeFields, balanceAnswer, CAP_BALANCE_WAIT_MS, CAP_BALANCE_RETRY_MS, REFRESH_RETRY_MS, FINALITY_POLL_MS, FINALITY_WAIT_MS, FINALITY_REFRESH_LIMIT_MS, POOL_WATCH_MS, POOL_WATCH_POLL_MS, EARLY_BALANCE_DELAY_MS, FINALITY_SETTLE_WINDOW_SLOTS, PUBLIC_READ_ANSWER_MS, LINK_READ_ANSWER_MS, OWN_READS_AHEAD_MS, FLOAT_CORRECT_WAIT_MS, SWITCH_WAIT_MS, UNSHIELD_TO_NO_USDC_DETAIL, UNSHIELD_TO_INVALID_NEXT, INFERENCE_MIN_MAX_TOKENS, ELICIT_TIMEOUT_MS, ELICIT_UNSHOWN_MS, elicitUnshown, POLL_SECONDS2, TRANSFER_CHANGE_READ_MS, TEMP_CLEAN_DELAY_MS, KEPT_ON_DISK, MAX_SHIELDED_BALANCE_ATOMIC, receiveGenerator, MCP_TOOL_NAMES, MCP_HIDDEN_TOOL_NAMES, setupTerminalNext, SETUP_RUNNING_SAY, ACCEPTED_NEXT, SETUP_RUNNING_NEXT, SETUP_ANSWER_WAIT_MS, SETUP_CONFIRMING_SAY, SETUP_CONFIRMING_NEXT, PRIVATE_INFERENCE_WHY, RESTART_STEPS, TOR_BROWSER_PORT, SETUP_TOR_TITLE, SETUP_TOR_WHY;
134719
+ var import_web3132, shownCaps, RELEASE_RETRY_MS, STAGE_WORDS, stageWords, INTERNAL_BALANCE_DETAIL, shownBreakdown, sessionLeftShown, TOKEN_UNIT_TOOLS, RESOURCE_PAYMENT_WAL_PREFIX2, POOL_LAYOUT_CODE, POOL_LAYOUT_UPDATE, USEPOD_VIA_INFERENCE_CHAT, SEND_RUNS_ON, DEPOSIT_RUNS_ON, CLI_FUNDS_PLAN_PREFIX, CLI_FUNDS_SCHEMA, SELF_PAY_ORIGIN3, REQUEST_ID4, POSITIVE_ATOMIC6, PRIVATE_HOST3, FORBIDDEN_HEADERS3, MAX_BODY_BYTES2, PREVIEW_TIMEOUT_MS, PREVIEW_SELLER_READ_MS, CALL_BUDGET_MS, budgetLeft, PAY_ANSWER_MARGIN_MS, MONEY_FIRST_ANSWER_MS, BALANCE_AFTER_LANDING_MS, JOIN_CALL_MAX_MS, JOIN_NUDGE_QUIET_MS, JOIN_STEP_MS, sleep2, PROGRESS_EVERY_MS2, READ_BUDGET_MS, UNPAID_TOR_TRY_MS, UNPAID_CLEAR_MS, READ_BUDGET_TOOLS, FLOAT_BUSY_CODES, RETRY_MARGIN_MS, ASK_PAY_CODES, runningNpmVersion, terminalCommand2, capPlaceWords, CAP_NAMES, capName, capRaiseText, runningLimits, payCapFlag, cheaperSellerText, limitNext, SAFE_TEXT, MCP_TOOL_ALIASES, POOL_SWITCH_WHY, POOL_SWITCH_NEXT, SWITCH_STATES, quietSwitch, switchKey, ATOMIC_TEXT, movedTo, FLOAT_ID, ANSWERED_EXIT_RETRY_MS, ANSWERED_EXIT_UNCONFIRMED_MS, ANSWERED_EXIT_RETRY_WINDOW_MS, ANSWERED_EXIT_CLOSED, switchAmount, switchEta, switchRows, OWNER_CAP_CODES, JOIN_END_MCP, JOIN_END_TERMINAL_LIBRARY, JOIN_RETRY_BACKOFF_MS, WALLET_CAP_FIX, MCP_CAP_FIX, capFix, ownerOnlyNext, mcpNext, CONFIDENTIAL_RETIRED, json3, answerResult, discoverTool, LAUNCH_CAP_CODES, dayCapKind, refuse12, newRequestIdFor, payCapName, publicOffer, FLOAT_PAID_CODES, FLOAT_PRIVATE_LEG, MONEY_ID2, toRecordId, linkKindOf, moneyId, REFUSED_CODES, refusedCodeOf, PLAIN_REASONS, INSUFFICIENT_CODE, insufficientCause, INSUFFICIENT_REASONS, reasonOf, plainReason, KEPT_SEND_TRIES, shownId, isSplitSend, sendPartId, PROMISED_NEXT, partFailReason, sendAnswerOf, PUBLIC_READ_TIMEOUT_MS, RECIPIENT_CHECK_TIMEOUT_MS, withTimeout, ownKey, readFailure, OWN_KEY_TOKENS_MAX, tokenAmountText, elsewhereId, AGENT_ID_SCHEMA, agentIdName, minutesText2, ageWords2, DEPOSIT_SENT_STATES, depositLanded, usdcText3, walkWalletHistory, REFRESH_LEASE_WALK_MS, HOME_MARKS_SETTLED_MS2, AUTO_BACKUPS_KEPT, AUTO_BACKUP_NAME, AUTO_BACKUP_VERIFIED, FRONTED_SETTLE_MARGIN_SLOTS, UNSHIELD_WINDOW_YIELD_MS, NOT_FINAL_YET, FINISH_FINALITY_WAIT_MS, FINISH_FINALITY_WAITS, FINISH_FINALITY_RECENT_MS, walkStillCurrent, BALANCE_REFRESH_WAIT_MS, BALANCE_REFRESH_GRACE_MS, BALANCE_REFRESH_LONG_MS, INBOUND_REFRESH_AGE_MS, changeFields, balanceAnswer, CAP_BALANCE_WAIT_MS, CAP_BALANCE_RETRY_MS, REFRESH_RETRY_MS, FINALITY_POLL_MS, FINALITY_WAIT_MS, FINALITY_REFRESH_LIMIT_MS, POOL_WATCH_MS, POOL_WATCH_POLL_MS, EARLY_BALANCE_DELAY_MS, FINALITY_SETTLE_WINDOW_SLOTS, PUBLIC_READ_ANSWER_MS, LINK_READ_ANSWER_MS, OWN_READS_AHEAD_MS, FLOAT_CORRECT_WAIT_MS, SWITCH_WAIT_MS, UNSHIELD_TO_NO_USDC_DETAIL, UNSHIELD_TO_INVALID_NEXT, INFERENCE_MIN_MAX_TOKENS, ELICIT_TIMEOUT_MS, ELICIT_UNSHOWN_MS, elicitUnshown, POLL_SECONDS2, TRANSFER_CHANGE_READ_MS, TEMP_CLEAN_DELAY_MS, KEPT_ON_DISK, MAX_SHIELDED_BALANCE_ATOMIC, receiveGenerator, MCP_TOOL_NAMES, MCP_HIDDEN_TOOL_NAMES, setupTerminalNext, SETUP_RUNNING_SAY, ACCEPTED_NEXT, SETUP_RUNNING_NEXT, SETUP_ANSWER_WAIT_MS, SETUP_CONFIRMING_SAY, SETUP_CONFIRMING_NEXT, PRIVATE_INFERENCE_WHY, RESTART_STEPS, TOR_BROWSER_PORT, SETUP_TOR_TITLE, SETUP_TOR_WHY;
134638
134720
  var init_tools = __esm({
134639
134721
  "wallet/src/mcp/tools.mjs"() {
134640
134722
  "use strict";
@@ -135062,6 +135144,11 @@ var init_tools = __esm({
135062
135144
  AUTO_BACKUP_VERIFIED = ".verified";
135063
135145
  FRONTED_SETTLE_MARGIN_SLOTS = 20;
135064
135146
  UNSHIELD_WINDOW_YIELD_MS = 1500;
135147
+ NOT_FINAL_YET = /confirmed note-exit is not finalized spent/;
135148
+ FINISH_FINALITY_WAIT_MS = 4e3;
135149
+ FINISH_FINALITY_WAITS = 8;
135150
+ FINISH_FINALITY_RECENT_MS = 6e4;
135151
+ walkStillCurrent = (store, early) => early !== void 0 && early.pool === String(store.state.pool) && walletHistoryHomeMarks(store) === early.marks ? early.history : void 0;
135065
135152
  BALANCE_REFRESH_WAIT_MS = 2e4;
135066
135153
  BALANCE_REFRESH_GRACE_MS = 2e3;
135067
135154
  BALANCE_REFRESH_LONG_MS = 6e4;