shinjuku-shield 0.3.93 → 0.3.94
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 +5 -5
- package/manifest.json +4 -4
- package/package.json +3 -3
- package/shinjuku-wallet.mjs +47 -15
package/README.md
CHANGED
|
@@ -6,13 +6,13 @@ 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.
|
|
9
|
+
This is version 0.3.94. The npm packages `shinjuku-shield` and
|
|
10
10
|
`shinjuku-shielded` hold the same files; `shinjuku` is the short command.
|
|
11
11
|
|
|
12
12
|
## Set up
|
|
13
13
|
|
|
14
14
|
```sh
|
|
15
|
-
npx -y --no-audit --no-fund shinjuku-shield@0.3.
|
|
15
|
+
npx -y --no-audit --no-fund shinjuku-shield@0.3.94 setup
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Setup makes the wallet on this machine, a private passphrase file, and the
|
|
@@ -24,7 +24,7 @@ server to that host's config.
|
|
|
24
24
|
## The `shinjuku` command
|
|
25
25
|
|
|
26
26
|
```sh
|
|
27
|
-
npm install -g shinjuku@0.3.
|
|
27
|
+
npm install -g shinjuku@0.3.94
|
|
28
28
|
shinjuku help
|
|
29
29
|
```
|
|
30
30
|
|
|
@@ -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-shielded -- npx -y --no-audit --no-fund shinjuku-shield@0.3.
|
|
39
|
+
claude mcp add --scope user shinjuku-shielded -- npx -y --no-audit --no-fund shinjuku-shield@0.3.94 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-shielded": { "command": "npx", "args": ["-y", "--no-audit", "--no-fund", "shinjuku-shield@0.3.
|
|
45
|
+
{ "mcpServers": { "shinjuku-shielded": { "command": "npx", "args": ["-y", "--no-audit", "--no-fund", "shinjuku-shield@0.3.94", "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": "
|
|
5
|
-
"bytes":
|
|
6
|
-
"sourceCommit": "
|
|
4
|
+
"sha256": "af5b54d5bce11c64a002dca7d59c8593767ddefe4b7177b8ef44cdefb27f0030",
|
|
5
|
+
"bytes": 12706861,
|
|
6
|
+
"sourceCommit": "1de2cfe58fcb9a08b6665b2f37aad6bb916c943a",
|
|
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",
|
|
@@ -1297,5 +1297,5 @@
|
|
|
1297
1297
|
"version": "1.8.0"
|
|
1298
1298
|
}
|
|
1299
1299
|
],
|
|
1300
|
-
"publishedAt": "2026-10-
|
|
1300
|
+
"publishedAt": "2026-10-24T04:23:52.556Z"
|
|
1301
1301
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shinjuku-shield",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.94",
|
|
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": "
|
|
7
|
-
"shinjukuSha256": "
|
|
6
|
+
"shinjukuRelease": "af5b54d5",
|
|
7
|
+
"shinjukuSha256": "af5b54d5bce11c64a002dca7d59c8593767ddefe4b7177b8ef44cdefb27f0030",
|
|
8
8
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
9
9
|
"author": "Shinjuku Shielded",
|
|
10
10
|
"homepage": "https://github.com/ShinjukuStaition/shinjuku-mcp#readme",
|
package/shinjuku-wallet.mjs
CHANGED
|
@@ -110080,7 +110080,11 @@ function refusalSay(a, tool, again, npmVersion) {
|
|
|
110080
110080
|
return `Not set up. This app cannot show the setup question. Run ${oneTimeCommandLine("setup", npmVersion)} in a terminal, then reconnect the wallet.`;
|
|
110081
110081
|
}
|
|
110082
110082
|
if (code2 === "mcp_setup_declined") return "Not set up. The setup was not confirmed; nothing was created.";
|
|
110083
|
-
|
|
110083
|
+
const setupTool = tool === "shinjuku_setup" || tool === "wallet_status";
|
|
110084
|
+
if (code2 === "tor_not_running" && setupTool && /Tor Browser is open/.test(detail)) {
|
|
110085
|
+
return "Not set up: Tor Browser is open, but the wallet needs its own Tor. Start it with the command below, or set up without Tor.";
|
|
110086
|
+
}
|
|
110087
|
+
if (code2 === "tor_not_running" && setupTool) return "Not set up: Tor is not running on this computer. Start it with the command below and ask again, or set up without Tor.";
|
|
110084
110088
|
if (code2 === "wallet_not_set_up" && tool === "x402_discover") return "Not searched yet. Set up the wallet first: setup asks one question, whether to use Tor, which hides your IP address.";
|
|
110085
110089
|
if (code2 === "wallet_not_set_up") return "The wallet is not set up yet, so nothing was paid. Ask to set up the wallet first.";
|
|
110086
110090
|
if (code2 === "mcp_tool_disabled") return "Nothing was paid or moved. This tool is off; only your owner can turn it on when starting the wallet.";
|
|
@@ -133449,7 +133453,7 @@ function createSetupTools({
|
|
|
133449
133453
|
log = () => {
|
|
133450
133454
|
},
|
|
133451
133455
|
activate,
|
|
133452
|
-
startWaitMs =
|
|
133456
|
+
startWaitMs = SETUP_ANSWER_WAIT_MS,
|
|
133453
133457
|
elicitTimeoutMs = ELICIT_TIMEOUT_MS,
|
|
133454
133458
|
discoverCacheDir = join32(setupHome(), "discover-cache"),
|
|
133455
133459
|
npmVersion
|
|
@@ -133531,8 +133535,21 @@ function createSetupTools({
|
|
|
133531
133535
|
next: `The wallet tools are live in this server: call wallet_balance.${recoveryNext(summary)}` + (summary.tor === true ? " Setup ran over Tor, and the wallet runs over Tor: the servers it talks to do not see this computer's IP address." : "") + (summary.wallet.solanaFeePayer ? " To add funds, call wallet_shield after the user sends USDC to solanaFeePayer (no SOL needed), or call" : " To add funds, call") + " wallet_add_funds: it gives a one-time address for any amount from 0.01 USDC. After the user sends USDC there, ask for the balance once: the wallet then sees the USDC and makes it private by itself after a random privacy wait of a few minutes." + (privateInference ? " Private inference is on: after funding, call inference_chat (with no prompt it lists the models and prices); if this server was started with --no-tor, restart it without --no-tor so it runs behind Tor (inference_chat refuses until then)." : "")
|
|
133532
133536
|
});
|
|
133533
133537
|
}
|
|
133538
|
+
if (job.state === "confirming") return json3({ say: SETUP_CONFIRMING_SAY, ok: true, stage: "confirming", next: SETUP_CONFIRMING_NEXT });
|
|
133534
133539
|
return json3({ ok: true, stage: job.stage, ...job.progress ? { progress: job.progress } : {}, next: SETUP_POLL_NEXT });
|
|
133535
133540
|
}
|
|
133541
|
+
async function waitForAnswer({ progress: progress3, signal } = {}) {
|
|
133542
|
+
if (job?.state !== "confirming") return;
|
|
133543
|
+
const cancelled = signal ? new Promise((resolve41) => {
|
|
133544
|
+
if (signal.aborted) resolve41();
|
|
133545
|
+
else signal.addEventListener("abort", resolve41, { once: true });
|
|
133546
|
+
}) : void 0;
|
|
133547
|
+
await waitOrProgress(
|
|
133548
|
+
[job.answered, ...cancelled ? [cancelled] : []],
|
|
133549
|
+
startWaitMs,
|
|
133550
|
+
{ progress: progress3, message: "waiting for the user's answer in the setup question" }
|
|
133551
|
+
);
|
|
133552
|
+
}
|
|
133536
133553
|
async function confirm2(plan) {
|
|
133537
133554
|
const limit = (atomic4) => String(atomic4) === NO_LIMIT_ATOMIC2 ? "no limit" : `${usdc9(atomic4)} USDC`;
|
|
133538
133555
|
const message = `Create a Shinjuku Shield wallet on this machine (spending limits: ${limit(plan.maxPaymentAtomic)} per payment, ${limit(plan.maxSessionAtomic)} in any 24 hours)? The keys and a random passphrase stay in private files on this machine.`;
|
|
@@ -133557,8 +133574,11 @@ function createSetupTools({
|
|
|
133557
133574
|
return { ok: false, privateInference: false, tor: false, unshown: error?.timedOut !== true && elicitUnshown(askedAt) };
|
|
133558
133575
|
}
|
|
133559
133576
|
}
|
|
133560
|
-
async function begin() {
|
|
133561
|
-
if (job)
|
|
133577
|
+
async function begin(ctx) {
|
|
133578
|
+
if (job) {
|
|
133579
|
+
await waitForAnswer(ctx);
|
|
133580
|
+
return status();
|
|
133581
|
+
}
|
|
133562
133582
|
const plan = setup.plan();
|
|
133563
133583
|
if (!plan.ok) return refuse12(plan.code, plan.detail, `Nothing was created. ${setupTerminalNext()}, on a machine that can run the proof tools (Linux, or Windows with WSL)`);
|
|
133564
133584
|
if (!client?.canElicit?.()) {
|
|
@@ -133568,23 +133588,31 @@ function createSetupTools({
|
|
|
133568
133588
|
setupTerminalNext()
|
|
133569
133589
|
);
|
|
133570
133590
|
}
|
|
133571
|
-
|
|
133591
|
+
let answered2;
|
|
133592
|
+
job = { state: "confirming", stage: "confirming", answered: new Promise((resolve41) => {
|
|
133593
|
+
answered2 = resolve41;
|
|
133594
|
+
}) };
|
|
133572
133595
|
const started = (async () => {
|
|
133573
133596
|
const answer = await confirm2(plan);
|
|
133574
133597
|
if (!answer.ok) {
|
|
133575
133598
|
job.state = "declined";
|
|
133599
|
+
job.stage = "declined";
|
|
133576
133600
|
job.unshown = answer.unshown;
|
|
133577
133601
|
log(`MCP_SETUP_DECLINED${answer.unshown ? " unshown=true" : ""}`);
|
|
133602
|
+
answered2();
|
|
133578
133603
|
return;
|
|
133579
133604
|
}
|
|
133580
133605
|
if (answer.tor && !inTorRun() && await localTorProof(TOR_HTTP_TUNNEL) === "refused") {
|
|
133581
133606
|
job.torBrowser = await localTorProof(TOR_BROWSER_PORT) !== "refused";
|
|
133582
133607
|
job.state = "no_tor";
|
|
133608
|
+
job.stage = "no_tor";
|
|
133583
133609
|
log(`MCP_SETUP_NO_TOR${job.torBrowser ? " tor-browser=open" : ""}`);
|
|
133610
|
+
answered2();
|
|
133584
133611
|
return;
|
|
133585
133612
|
}
|
|
133586
133613
|
job.state = "running";
|
|
133587
133614
|
job.stage = "starting";
|
|
133615
|
+
answered2();
|
|
133588
133616
|
job.privateInference = answer.privateInference;
|
|
133589
133617
|
log(`MCP_SETUP_STARTED tor=${answer.tor}`);
|
|
133590
133618
|
try {
|
|
@@ -133599,6 +133627,7 @@ function createSetupTools({
|
|
|
133599
133627
|
} catch (error) {
|
|
133600
133628
|
job.failure = failure2(error, "mcp_setup_failed");
|
|
133601
133629
|
job.state = "failed";
|
|
133630
|
+
job.stage = "failed";
|
|
133602
133631
|
log(`MCP_SETUP_FAILED ${job.failure.error}`);
|
|
133603
133632
|
return;
|
|
133604
133633
|
}
|
|
@@ -133609,22 +133638,21 @@ function createSetupTools({
|
|
|
133609
133638
|
} catch (error) {
|
|
133610
133639
|
job.failure = failure2(error, "mcp_setup_switch_failed");
|
|
133611
133640
|
job.state = "restart";
|
|
133641
|
+
job.stage = "done";
|
|
133612
133642
|
log(`MCP_SETUP_SWITCH_FAILED ${job.failure.error}`);
|
|
133613
133643
|
}
|
|
133614
133644
|
})();
|
|
133615
|
-
|
|
133616
|
-
|
|
133617
|
-
timer.unref?.();
|
|
133618
|
-
})]);
|
|
133645
|
+
started.then(answered2, answered2);
|
|
133646
|
+
await waitForAnswer(ctx);
|
|
133619
133647
|
return status();
|
|
133620
133648
|
}
|
|
133621
133649
|
const setupTool = {
|
|
133622
133650
|
name: "shinjuku_setup",
|
|
133623
133651
|
title: "Set up the Shinjuku Shield wallet",
|
|
133624
|
-
description: "The wallet is not set up on this machine yet. Call this when the user wants to pay an x402 URL, check a balance, or shield USDC. It asks the user to confirm in this client (with the spending caps), then creates a self-custody wallet on this machine (keys and a random passphrase in private local files; no tool takes or returns them), downloads and checks the proof tools (about 191 MB, minutes), and switches this server to the wallet tools. Takes no arguments. Call it again with no arguments as `next` says for the stage (confirming, tor, platform, release, passphrase, wallet, proof-tools, config, done). A decline creates nothing (mcp_setup_declined). A client that cannot confirm is refused (mcp_setup_needs_terminal) with the terminal command; a client that declines at once without showing the dialog gets mcp_setup_declined with the same terminal command.",
|
|
133652
|
+
description: "The wallet is not set up on this machine yet. Call this when the user wants to pay an x402 URL, check a balance, or shield USDC. It asks the user to confirm in this client (with the spending caps), then creates a self-custody wallet on this machine (keys and a random passphrase in private local files; no tool takes or returns them), downloads and checks the proof tools (about 191 MB, minutes), and switches this server to the wallet tools. Takes no arguments. Call it again with no arguments as `next` says for the stage (confirming, tor, platform, release, passphrase, wallet, proof-tools, config, done; declined, no_tor or failed: the setup ended, and this call answers why). A decline creates nothing (mcp_setup_declined). A client that cannot confirm is refused (mcp_setup_needs_terminal) with the terminal command; a client that declines at once without showing the dialog gets mcp_setup_declined with the same terminal command.",
|
|
133625
133653
|
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
133626
133654
|
annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },
|
|
133627
|
-
run: () => begin()
|
|
133655
|
+
run: (args, ctx) => begin(ctx)
|
|
133628
133656
|
};
|
|
133629
133657
|
const statusTool = {
|
|
133630
133658
|
name: "wallet_status",
|
|
@@ -133633,6 +133661,7 @@ function createSetupTools({
|
|
|
133633
133661
|
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
133634
133662
|
annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false },
|
|
133635
133663
|
run: async () => {
|
|
133664
|
+
if (job && ["failed", "no_tor", "declined", "restart"].includes(job.state)) return status();
|
|
133636
133665
|
let missing;
|
|
133637
133666
|
try {
|
|
133638
133667
|
missing = setup.missing();
|
|
@@ -133644,7 +133673,7 @@ function createSetupTools({
|
|
|
133644
133673
|
setUp: missing.length === 0 && (!job || job.state === "done"),
|
|
133645
133674
|
missing,
|
|
133646
133675
|
...job ? { stage: job.stage } : {},
|
|
133647
|
-
next: job ? SETUP_POLL_NEXT : "call shinjuku_setup when the user wants to use the wallet"
|
|
133676
|
+
next: job ? job.state === "confirming" ? SETUP_CONFIRMING_NEXT : SETUP_POLL_NEXT : "call shinjuku_setup when the user wants to use the wallet"
|
|
133648
133677
|
});
|
|
133649
133678
|
}
|
|
133650
133679
|
};
|
|
@@ -133695,11 +133724,11 @@ function createSetupTools({
|
|
|
133695
133724
|
} });
|
|
133696
133725
|
const discover = discoverNow ? withSay(discoverTool(discoverCacheDir), { npmVersion }) : sayOnRefusal(discoverAfterSetup());
|
|
133697
133726
|
return {
|
|
133698
|
-
tools: [sayOnRefusal(setupTool), statusTool, ...MCP_TOOL_NAMES.map((name) => name !== "x402_discover" ? sayOnRefusal(notSetUp(name)) : discover)],
|
|
133727
|
+
tools: [sayOnRefusal(setupTool), sayOnRefusal(statusTool), ...MCP_TOOL_NAMES.map((name) => name !== "x402_discover" ? sayOnRefusal(notSetUp(name)) : discover)],
|
|
133699
133728
|
doneTool: sayOnRefusal(doneTool)
|
|
133700
133729
|
};
|
|
133701
133730
|
}
|
|
133702
|
-
var import_web3133, 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, 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, terminalCommand, capPlaceWords, capRaiseText, cheaperSellerText, limitNext, SAFE_TEXT, MCP_TOOL_ALIASES, POOL_SWITCH_WHY, POOL_SWITCH_NEXT, SWITCH_STATES, quietSwitch, switchKey, ATOMIC_TEXT, 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, refuse12, publicOffer, FLOAT_PAID_CODES, FLOAT_PRIVATE_LEG, floatStillSettling, MONEY_ID2, toRecordId, linkKindOf, moneyId, REFUSED_CODES, refusedCodeOf, PLAIN_REASONS, plainReason, KEPT_SEND_TRIES, shownId, isSplitSend, sendPartId, PROMISED_NEXT, PUBLIC_READ_TIMEOUT_MS, RECIPIENT_CHECK_TIMEOUT_MS, withTimeout, ownKey, readFailure, OWN_KEY_TOKENS_MAX, OWN_TOKENS_GRACE_MS, tokenAmountText, elsewhereId, AGENT_ID_SCHEMA, agentIdName, minutesText2, ageWords2, DEPOSIT_SENT_STATES, depositLanded, usdcText2, walkWalletHistory, REFRESH_LEASE_WALK_MS, HOME_MARKS_SETTLED_MS2, AUTO_BACKUPS_KEPT, AUTO_BACKUP_NAME, AUTO_BACKUP_VERIFIED, FRONTED_SETTLE_MARGIN_SLOTS, BALANCE_REFRESH_WAIT_MS, BALANCE_REFRESH_GRACE_MS, BALANCE_REFRESH_LONG_MS, INBOUND_REFRESH_AGE_MS, 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, SWITCH_WAIT_MS, UNSHIELD_TO_NO_USDC_DETAIL, UNSHIELD_TO_INVALID_NEXT, INFERENCE_MIN_MAX_TOKENS, ELICIT_TIMEOUT_MS, ELICIT_UNSHOWN_MS, elicitUnshown, POLL_SECONDS3, 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_POLL_NEXT, PRIVATE_INFERENCE_WHY, RESTART_STEPS, TOR_BROWSER_PORT, SETUP_TOR_TITLE, SETUP_TOR_WHY;
|
|
133731
|
+
var import_web3133, 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, 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, terminalCommand, capPlaceWords, capRaiseText, cheaperSellerText, limitNext, SAFE_TEXT, MCP_TOOL_ALIASES, POOL_SWITCH_WHY, POOL_SWITCH_NEXT, SWITCH_STATES, quietSwitch, switchKey, ATOMIC_TEXT, 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, refuse12, publicOffer, FLOAT_PAID_CODES, FLOAT_PRIVATE_LEG, floatStillSettling, MONEY_ID2, toRecordId, linkKindOf, moneyId, REFUSED_CODES, refusedCodeOf, PLAIN_REASONS, plainReason, KEPT_SEND_TRIES, shownId, isSplitSend, sendPartId, PROMISED_NEXT, PUBLIC_READ_TIMEOUT_MS, RECIPIENT_CHECK_TIMEOUT_MS, withTimeout, ownKey, readFailure, OWN_KEY_TOKENS_MAX, OWN_TOKENS_GRACE_MS, tokenAmountText, elsewhereId, AGENT_ID_SCHEMA, agentIdName, minutesText2, ageWords2, DEPOSIT_SENT_STATES, depositLanded, usdcText2, walkWalletHistory, REFRESH_LEASE_WALK_MS, HOME_MARKS_SETTLED_MS2, AUTO_BACKUPS_KEPT, AUTO_BACKUP_NAME, AUTO_BACKUP_VERIFIED, FRONTED_SETTLE_MARGIN_SLOTS, BALANCE_REFRESH_WAIT_MS, BALANCE_REFRESH_GRACE_MS, BALANCE_REFRESH_LONG_MS, INBOUND_REFRESH_AGE_MS, 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, SWITCH_WAIT_MS, UNSHIELD_TO_NO_USDC_DETAIL, UNSHIELD_TO_INVALID_NEXT, INFERENCE_MIN_MAX_TOKENS, ELICIT_TIMEOUT_MS, ELICIT_UNSHOWN_MS, elicitUnshown, POLL_SECONDS3, 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_POLL_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;
|
|
133703
133732
|
var init_tools = __esm({
|
|
133704
133733
|
"wallet/src/mcp/tools.mjs"() {
|
|
133705
133734
|
"use strict";
|
|
@@ -134094,7 +134123,7 @@ var init_tools = __esm({
|
|
|
134094
134123
|
UNSHIELD_TO_INVALID_NEXT = "Nothing was sent. Tell the user: a Shinjuku wallet can send only to an address that already holds USDC, and a Shinjuku wallet's one-time add-funds address cannot be paid from a Shinjuku wallet yet. Ask the person for a Solana address that already holds USDC (for example their Phantom address) and call wallet_unshield with it, or pay the link from a normal Solana wallet instead";
|
|
134095
134124
|
INFERENCE_MIN_MAX_TOKENS = 256;
|
|
134096
134125
|
ELICIT_TIMEOUT_MS = 5 * 6e4;
|
|
134097
|
-
ELICIT_UNSHOWN_MS =
|
|
134126
|
+
ELICIT_UNSHOWN_MS = 500;
|
|
134098
134127
|
elicitUnshown = (askedAt, answer) => Date.now() - askedAt < ELICIT_UNSHOWN_MS && answer?.action !== "accept";
|
|
134099
134128
|
POLL_SECONDS3 = 30;
|
|
134100
134129
|
TRANSFER_CHANGE_READ_MS = 2e3;
|
|
@@ -134134,6 +134163,9 @@ var init_tools = __esm({
|
|
|
134134
134163
|
]);
|
|
134135
134164
|
setupTerminalNext = () => `Tell the user to run \`${terminalCommand("setup")}\` in a terminal on this machine, then reconnect the wallet (${RESTART_STEPS})`;
|
|
134136
134165
|
SETUP_POLL_NEXT = `call shinjuku_setup again in ${POLL_SECONDS3} s for the status (it never creates a second wallet)`;
|
|
134166
|
+
SETUP_ANSWER_WAIT_MS = CALL_BUDGET_MS;
|
|
134167
|
+
SETUP_CONFIRMING_SAY = "Answer the setup box on your screen. The wallet waits for your answer.";
|
|
134168
|
+
SETUP_CONFIRMING_NEXT = "The setup question is open in this app: tell the user to answer it. Call shinjuku_setup again at once (it waits for the answer and then gives the result); do not end the turn. It never creates a second wallet";
|
|
134137
134169
|
PRIVATE_INFERENCE_WHY = "Your agent then buys AI answers from an AI provider, paid from your private balance over Tor; the AI provider and the company that runs the model see the prompt, not who paid.";
|
|
134138
134170
|
RESTART_STEPS = "In Claude Code: type /mcp, pick shinjuku-shielded, and choose Reconnect. In Claude Desktop: quit it and open it again. In another app: restart it";
|
|
134139
134171
|
TOR_BROWSER_PORT = "http://127.0.0.1:9150";
|