safehands-pharos 1.4.0 → 1.5.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 (124) hide show
  1. package/README.md +174 -63
  2. package/dist/cli.d.ts +5 -5
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +126 -124
  5. package/dist/cli.js.map +1 -1
  6. package/dist/demo.d.ts +1 -1
  7. package/dist/demo.js +171 -171
  8. package/dist/index.d.ts +2 -2
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +73 -65
  11. package/dist/index.js.map +1 -1
  12. package/dist/init.d.ts +1 -1
  13. package/dist/init.js +65 -65
  14. package/dist/lib/constants.d.ts +303 -291
  15. package/dist/lib/constants.d.ts.map +1 -1
  16. package/dist/lib/constants.js +302 -292
  17. package/dist/lib/constants.js.map +1 -1
  18. package/dist/lib/dodoApi.d.ts +78 -78
  19. package/dist/lib/dodoApi.js +196 -196
  20. package/dist/lib/envLoader.d.ts +2 -0
  21. package/dist/lib/envLoader.d.ts.map +1 -0
  22. package/dist/lib/envLoader.js +44 -0
  23. package/dist/lib/envLoader.js.map +1 -0
  24. package/dist/lib/http.d.ts +14 -14
  25. package/dist/lib/http.js +118 -118
  26. package/dist/lib/pharosClient.d.ts +58 -58
  27. package/dist/lib/pharosClient.js +63 -63
  28. package/dist/lib/policy/actionPolicyEngine.d.ts +53 -53
  29. package/dist/lib/policy/actionPolicyEngine.js +212 -212
  30. package/dist/lib/riskEngine.d.ts +26 -26
  31. package/dist/lib/riskEngine.d.ts.map +1 -1
  32. package/dist/lib/riskEngine.js +288 -283
  33. package/dist/lib/riskEngine.js.map +1 -1
  34. package/dist/lib/signer/index.d.ts +24 -24
  35. package/dist/lib/signer/index.js +88 -88
  36. package/dist/lib/testDodoLive.d.ts +1 -1
  37. package/dist/lib/testDodoLive.js +104 -104
  38. package/dist/lib/testLiveSafehands.d.ts +1 -1
  39. package/dist/lib/testLiveSafehands.js +92 -92
  40. package/dist/lib/testRpcLive.d.ts +1 -1
  41. package/dist/lib/testRpcLive.js +88 -88
  42. package/dist/lib/testTools.js +397 -398
  43. package/dist/lib/testX402Live.d.ts +1 -1
  44. package/dist/lib/testX402Live.js +159 -159
  45. package/dist/lib/toolResponse.d.ts +25 -25
  46. package/dist/lib/toolResponse.js +53 -53
  47. package/dist/lib/wallet/index.d.ts +37 -37
  48. package/dist/lib/wallet/index.js +128 -128
  49. package/dist/scripts/checkDeploy.d.ts +1 -1
  50. package/dist/scripts/checkDeploy.js +24 -24
  51. package/dist/scripts/deployRegistry.d.ts +1 -1
  52. package/dist/scripts/deployRegistry.js +100 -100
  53. package/dist/scripts/testRegistry.d.ts +1 -1
  54. package/dist/scripts/testRegistry.js +43 -43
  55. package/dist/tools/approveToken.d.ts +45 -45
  56. package/dist/tools/approveToken.js +85 -85
  57. package/dist/tools/assessRisk.d.ts +79 -79
  58. package/dist/tools/assessRisk.js +104 -104
  59. package/dist/tools/checkAllowance.d.ts +43 -43
  60. package/dist/tools/checkAllowance.js +56 -56
  61. package/dist/tools/checkTokenSecurity.d.ts +46 -46
  62. package/dist/tools/checkTokenSecurity.js +95 -95
  63. package/dist/tools/createAgentWallet.d.ts +28 -26
  64. package/dist/tools/createAgentWallet.d.ts.map +1 -1
  65. package/dist/tools/createAgentWallet.js +82 -58
  66. package/dist/tools/createAgentWallet.js.map +1 -1
  67. package/dist/tools/estimateGas.d.ts +79 -79
  68. package/dist/tools/estimateGas.js +124 -124
  69. package/dist/tools/executeSwap.d.ts +61 -61
  70. package/dist/tools/executeSwap.js +141 -141
  71. package/dist/tools/explainRisk.d.ts +29 -29
  72. package/dist/tools/explainRisk.js +32 -32
  73. package/dist/tools/getAgentWallet.d.ts +21 -21
  74. package/dist/tools/getAgentWallet.js +27 -27
  75. package/dist/tools/getAgentWalletBalance.d.ts +11 -11
  76. package/dist/tools/getAgentWalletBalance.js +70 -70
  77. package/dist/tools/getExecutionHistory.d.ts +49 -49
  78. package/dist/tools/getExecutionHistory.js +154 -154
  79. package/dist/tools/getGasPrice.d.ts +43 -43
  80. package/dist/tools/getGasPrice.js +59 -59
  81. package/dist/tools/getPoolInfo.d.ts +75 -75
  82. package/dist/tools/getPoolInfo.js +137 -137
  83. package/dist/tools/getTokenPrice.d.ts +113 -113
  84. package/dist/tools/getTokenPrice.js +117 -117
  85. package/dist/tools/getTransactionStatus.d.ts +43 -43
  86. package/dist/tools/getTransactionStatus.js +59 -59
  87. package/dist/tools/getWalletBalance.d.ts +68 -68
  88. package/dist/tools/getWalletBalance.js +87 -87
  89. package/dist/tools/publishRiskScore.d.ts +63 -63
  90. package/dist/tools/publishRiskScore.js +88 -88
  91. package/dist/tools/queryRiskRegistry.d.ts +38 -38
  92. package/dist/tools/queryRiskRegistry.js +55 -55
  93. package/dist/tools/safehandsPreflightCheck.d.ts +77 -77
  94. package/dist/tools/safehandsPreflightCheck.js +47 -47
  95. package/dist/tools/safehandsRiskReport.d.ts +81 -81
  96. package/dist/tools/safehandsRiskReport.js +28 -28
  97. package/dist/tools/safehandsSafeExecute.d.ts +20 -20
  98. package/dist/tools/safehandsSafeExecute.js +81 -81
  99. package/dist/tools/safehandsWalletHealth.d.ts +14 -14
  100. package/dist/tools/safehandsWalletHealth.js +103 -103
  101. package/dist/tools/safehandsX402Preflight.d.ts +26 -26
  102. package/dist/tools/safehandsX402Preflight.js +65 -65
  103. package/dist/tools/sendPayment.d.ts +57 -57
  104. package/dist/tools/sendPayment.js +117 -117
  105. package/dist/tools/simulateTransaction.d.ts +60 -60
  106. package/dist/tools/simulateTransaction.js +83 -83
  107. package/dist/tools/tokenRegistryStatus.d.ts +26 -26
  108. package/dist/tools/tokenRegistryStatus.js +96 -96
  109. package/dist/tools/x402PayAndFetch.d.ts +81 -81
  110. package/dist/tools/x402PayAndFetch.js +152 -152
  111. package/dist/x402Server.d.ts +1 -1
  112. package/dist/x402Server.js +300 -252
  113. package/dist/x402Server.js.map +1 -1
  114. package/package.json +6 -16
  115. package/examples/dashboard/index.html +0 -337
  116. package/examples/pharos-skill-engine/SKILL.safehands.md +0 -85
  117. package/examples/pharos-skill-engine/assets/safehands/example-actions.json +0 -49
  118. package/examples/pharos-skill-engine/assets/safehands/policy-defaults.json +0 -11
  119. package/examples/pharos-skill-engine/references/safehands.md +0 -345
  120. package/examples/scenario-hack.ts +0 -38
  121. package/skill/SKILL.md +0 -133
  122. package/skill/assets/safehands/example-actions.json +0 -49
  123. package/skill/assets/safehands/policy-defaults.json +0 -11
  124. package/skill/references/safehands.md +0 -345
package/README.md CHANGED
@@ -1,3 +1,56 @@
1
+ # SafeHands-Pharos — Transaction Safety Firewall for AI Agents
2
+
3
+ > **Most Pharos skills let an agent *do* things — check balances, swap, pay, deploy.**
4
+ > **SafeHands is the one that decides whether the agent *should*.**
5
+
6
+ ```bash
7
+ npx safehands-pharos skill safehands_preflight_check --input-json \
8
+ '{"actionType":"approve_token","chainId":688689,"tokenAddress":"0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8","spenderAddress":"0x000000000000000000000000000000000000dEaD","approvalAmount":"max"}'
9
+ ```
10
+
11
+ Sample output:
12
+
13
+ ```json
14
+ {
15
+ "success": true,
16
+ "data": {
17
+ "decision": "BLOCK",
18
+ "riskLevel": "HIGH",
19
+ "safeToExecute": false,
20
+ "reasons": [
21
+ "Unlimited approval requested."
22
+ ],
23
+ "requiredActions": [
24
+ "Use a limited approval amount."
25
+ ],
26
+ "checks": [
27
+ { "name": "mainnet_guard", "status": "pass", "message": "Action is not targeting mainnet." },
28
+ { "name": "chain_id", "status": "pass", "message": "Chain ID is Pharos Atlantic Testnet (688689)." },
29
+ { "name": "environment", "status": "pass", "message": "Environment is atlantic-testnet." },
30
+ { "name": "approval_amount", "status": "fail", "message": "Unlimited approval is blocked by default." }
31
+ ],
32
+ "environment": "atlantic-testnet",
33
+ "chainId": 688689,
34
+ "isMainnet": false,
35
+ "tokenRegistry": {
36
+ "symbol": "USDC",
37
+ "status": "SKILL_ENGINE_CANONICAL_TOKEN",
38
+ "verificationStatus": "DOCS_VERIFIED_FROM_PHAROS_SKILL_ENGINE"
39
+ },
40
+ "source": "safehands_preflight_check"
41
+ },
42
+ "error": null,
43
+ "timestamp": "2026-06-14T00:00:00.000Z"
44
+ }
45
+ ```
46
+
47
+ That's the whole idea: **before** an agent approves a token, swaps, sends a payment,
48
+ or pays an x402 resource, SafeHands runs a policy check and returns `ALLOW`, `WARN`,
49
+ or `BLOCK` — with a plain-English reason. If `BLOCK`, the agent stops. No transaction,
50
+ no loss.
51
+
52
+ **Live preflight examples:** see [DEMO.md](DEMO.md) — real ALLOW and BLOCK outputs.
53
+
1
54
  <p align="center">
2
55
  <img src="https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white" />
3
56
  <img src="https://img.shields.io/badge/MCP_Skill-000000?style=for-the-badge" />
@@ -6,37 +59,47 @@
6
59
  <img src="https://img.shields.io/badge/Testnet_Only-SAFE-blue?style=for-the-badge" />
7
60
  </p>
8
61
 
9
- # SafeHands-Pharos Transaction Safety Firewall for AI Agents
62
+ > **Testnet only.** SafeHands targets Pharos Atlantic Testnet (Chain ID 688689). Not audited for mainnet use.
10
63
 
11
- SafeHands is a **Pharos Skill Engine-compatible MCP package** that acts as a safety layer before your AI agent executes any on-chain action — payments, swaps, token approvals, or x402 paid requests.
64
+ ---
12
65
 
13
- Every action goes through a preflight check first:
66
+ ## Why AI Agents Need This
14
67
 
15
- ```
16
- Agent wants to act
17
-
18
- safehands_preflight_check
19
-
20
- ALLOW → safe, proceed
21
- WARN → proceed with caution
22
- BLOCK → stop, reason explained
23
- ```
68
+ Generic Web3 tools answer: *"Can this transaction be sent?"*
69
+ SafeHands answers: **"Should this action be allowed at all?"**
24
70
 
25
- > **Testnet only.** SafeHands targets Pharos Atlantic Testnet (Chain ID 688689). Not audited for mainnet use.
71
+ | Risk | What goes wrong without SafeHands | SafeHands guardrail |
72
+ |------|----------------------------------|---------------------|
73
+ | Unlimited approval | Agent approves malicious spender forever | Blocked by default |
74
+ | Wrong chain | Agent signs on mainnet by mistake | Blocked |
75
+ | Risky x402 URL | Agent pays a localhost / private IP | Blocked (SSRF guard) |
76
+ | Overspending | Agent drains wallet in one session | Daily cap enforced |
77
+ | Unknown token | Agent swaps unverified contract | Warns, requires review |
78
+ | Missing signer | Agent attempts write without wallet | Structured error returned |
79
+
80
+ SafeHands is a **Pharos Skill Engine-compatible MCP package** — a composable guardrail layer that any agent can add in front of any action, without modifying existing skill logic.
26
81
 
27
82
  ---
28
83
 
29
84
  ## Getting Started
30
85
 
31
- ### Install via Pharos Skill Engine
86
+ ### Step 1 Try it now (no setup, no wallet)
32
87
 
33
88
  ```bash
34
- npx skills add SZtch/safehands-pharos
89
+ npx safehands-pharos --demo
35
90
  ```
36
91
 
37
- ### Connect to Claude Desktop
92
+ Runs 10 live safety checks in your terminal: ALLOW/BLOCK decisions, wallet health, token registry, x402 preflight, risk report. No config, no private key, no transactions.
38
93
 
39
- Add to `claude_desktop_config.json`:
94
+ ---
95
+
96
+ ### Step 2 — Connect to your AI agent
97
+
98
+ Pick **one** depending on how you use AI agents:
99
+
100
+ #### Claude Desktop
101
+
102
+ Add to your `claude_desktop_config.json`, then restart Claude Desktop:
40
103
 
41
104
  ```json
42
105
  {
@@ -49,44 +112,46 @@ Add to `claude_desktop_config.json`:
49
112
  }
50
113
  ```
51
114
 
52
- Restart Claude Desktop — SafeHands tools appear automatically in every conversation.
115
+ All 27 SafeHands tools appear automatically in every Claude conversation.
53
116
 
54
- ### Connect to Anvita Flow
117
+ #### Anvita Flow
55
118
 
56
- Add as MCP server in Anvita Flow settings:
119
+ Add as an MCP server in Anvita Flow settings:
57
120
 
58
121
  ```json
59
- {
60
- "command": "npx",
61
- "args": ["safehands-pharos"]
62
- }
122
+ { "command": "npx", "args": ["safehands-pharos"] }
63
123
  ```
64
124
 
65
- ### First-time setup
125
+ #### Terminal / scripts (CLI)
126
+
127
+ Call any tool directly without connecting to an AI client:
66
128
 
67
129
  ```bash
68
- npx safehands-pharos init
130
+ npx safehands-pharos skill safehands_preflight_check \
131
+ '{"actionType":"send_payment","chainId":688689,"amount":"0.001","recipient":"0x1234567890123456789012345678901234567890"}'
69
132
  ```
70
133
 
71
- Interactive wizard that configures your `.env` — wallet mode, spend limits, write gates.
134
+ ---
72
135
 
73
- ### Run the demo
136
+ ### Step 3 — (Optional) Enable write operations
74
137
 
75
- ```bash
76
- npx safehands-pharos --demo
77
- ```
138
+ By default, SafeHands is **read-only**: preflight checks, risk scoring, token registry, wallet health. No private key needed.
78
139
 
79
- Non-destructive demo: shows ALLOW, BLOCK, wallet health, token registry, x402 preflight, and risk report — no real transactions.
140
+ To unlock swaps, payments, and approvals, run the setup wizard:
80
141
 
81
- ---
142
+ ```bash
143
+ npx safehands-pharos init
144
+ ```
82
145
 
83
- ## Start with These 3 Tools
146
+ Or set manually in a `.env` file in your working directory:
84
147
 
85
- | Goal | Tool |
86
- |------|------|
87
- | Check if an action is safe | `safehands_preflight_check` |
88
- | Check wallet / signer readiness | `safehands_wallet_health` |
89
- | Execute with built-in safety gate | `safehands_safe_execute` |
148
+ ```env
149
+ WALLET_MODE=env # env | managed-testnet
150
+ PRIVATE_KEY=0x... # testnet key only never mainnet
151
+ WRITE_TOOLS_ENABLED=true
152
+ MAX_TX_AMOUNT_PHRS=0.1 # per-transaction cap
153
+ MAX_DAILY_SPEND_USD=10 # daily spend cap
154
+ ```
90
155
 
91
156
  ---
92
157
 
@@ -204,13 +269,13 @@ On failure: `success: false`, `data: null`, `error: { code, message, retryable }
204
269
 
205
270
  ## Configuration
206
271
 
207
- Copy the example file:
272
+ If you cloned the repo, copy the example file:
208
273
 
209
274
  ```bash
210
- cp .env.example .env
275
+ cp .env.example .env # then edit .env with your settings
211
276
  ```
212
277
 
213
- Key settings:
278
+ If you installed via `npx` or `npm install`, create a `.env` in your working directory with these settings:
214
279
 
215
280
  ```env
216
281
  # Wallet mode
@@ -266,29 +331,17 @@ SafeHands ships safe by default — nothing is enabled without explicit opt-in:
266
331
 
267
332
  ---
268
333
 
269
- ## Why AI Agents Need This
270
-
271
- Generic Web3 tools answer: *"Can this transaction be sent?"*
272
- SafeHands answers: **"Should this action be allowed at all?"**
273
-
274
- | Risk | What goes wrong | SafeHands guardrail |
275
- |------|----------------|---------------------|
276
- | Unlimited approval | Agent approves malicious spender forever | Blocked by default |
277
- | Wrong chain | Agent signs on mainnet | Blocked |
278
- | Risky x402 URL | Agent pays a localhost/private IP | Blocked |
279
- | Overspending | Agent drains wallet | Daily cap enforced |
280
- | Unknown token | Agent swaps unverified token | Warns or requires review |
281
- | Missing signer | Agent tries write without wallet | Structured error returned |
282
-
283
- ---
284
-
285
334
  ## x402 Support
286
335
 
287
336
  SafeHands acts as both an x402 client and server.
288
337
 
289
338
  **Client** (`x402_pay_and_fetch`): Fetches a resource normally first. If the server returns HTTP 402, SafeHands runs a preflight check, requests the signer, pays, and retries — all in one tool call. Payment proofs are never logged.
290
339
 
291
- **Server** (`npm run x402-server`): Exposes paid endpoints:
340
+ **Server** (`npm run x402-server`): Exposes paid endpoints. A live instance runs at:
341
+
342
+ ```
343
+ https://safehands-pharos-production.up.railway.app
344
+ ```
292
345
 
293
346
  | Endpoint | Type | Price |
294
347
  |----------|------|-------|
@@ -300,6 +353,27 @@ SafeHands acts as both an x402 client and server.
300
353
 
301
354
  ---
302
355
 
356
+ ## Examples
357
+
358
+ **Prompt-injection attack scenario** — SafeHands blocking an unlimited token approval triggered by a simulated prompt-injection attack:
359
+
360
+ ```bash
361
+ npx safehands-pharos skill safehands_preflight_check \
362
+ '{"actionType":"approve_token","chainId":688689,"approvalAmount":"max","spender":"0xBadActor12300000000000000000000000000000"}'
363
+ ```
364
+
365
+ Expected output: `BLOCK` — `"Unlimited approval is blocked by default."`
366
+
367
+ **Live server** — the SafeHands x402 server runs at:
368
+
369
+ ```
370
+ https://safehands-pharos-production.up.railway.app
371
+ ```
372
+
373
+ Hit `/preflight?actionType=send_payment&amount=0.001&chainId=688689&recipient=0x1234...` for a live ALLOW/WARN/BLOCK response with no setup required.
374
+
375
+ ---
376
+
303
377
  ## Network Info
304
378
 
305
379
  | Item | Value |
@@ -310,16 +384,34 @@ SafeHands acts as both an x402 client and server.
310
384
  | USDC | `0xE0BE08c77f415F577A1B3A9aD7a1Df1479564ec8` |
311
385
  | RiskRegistry | `0x61962a6c812ee9f57b207e1ea47c19ae70bb7141` |
312
386
 
387
+ **Proof of life — live on-chain tx:**
388
+
389
+ | What | Value |
390
+ |------|-------|
391
+ | Action | `publish_risk_score` → RiskRegistry |
392
+ | Tx Hash | [`0x6a58f636...fdefc`](https://atlantic.pharosscan.xyz/tx/0x6a58f636814458c09304db3d7c4f5f48e764f6439649fbb786cddb32c77fdefc) |
393
+ | Block | `24168297` |
394
+ | Gas Used | `140,187` |
395
+
313
396
  ---
314
397
 
315
398
  ## Testing
316
399
 
317
400
  ```bash
401
+ npm run build # compile TypeScript
402
+ npm run demo # run 10 live safety checks in terminal (no wallet needed)
403
+ npm run dev # run MCP server in dev mode (tsx, no build step)
404
+ ```
405
+
406
+ For manual testing, use the CLI directly after building:
407
+
408
+ ```bash
409
+ # Build first
318
410
  npm run build
319
- npm run test:all # 43-point smoke test (no network needed)
320
- npm run test:rpc:live # live RPC connectivity check
321
- npm run test:live:safehands # 7 CLI safety checks against built dist
322
- npm run test:dodo:live # DODO API check (skips if DODO_API_KEY not set)
411
+
412
+ # Then call any tool
413
+ node dist/index.js skill safehands_preflight_check \
414
+ '{"actionType":"approve_token","chainId":688689,"approvalAmount":"max"}'
323
415
  ```
324
416
 
325
417
  ---
@@ -331,3 +423,22 @@ npm run test:dodo:live # DODO API check (skips if DODO_API_KEY not set)
331
423
  - `get_token_price` and swap routing require a DODO API key
332
424
  - GoPlus token security does not support Pharos testnet (Chain 688689) — `check_token_security` returns a clear error
333
425
  - DODO reverse routes (e.g. USDT → PHRS) have no liquidity on testnet
426
+ - x402 client and server are implemented with the official `@x402/fetch` and `@x402/evm` SDKs and verified against a local x402-compatible server. They have not yet been verified against live third-party x402 endpoints on Pharos.
427
+
428
+ ---
429
+
430
+ ## Roadmap
431
+
432
+ SafeHands is designed to grow from a single-project guardrail into **shared safety infrastructure** for the Pharos agent economy.
433
+
434
+ **Near-term**
435
+ - **Per-agent spend limits** — a `set_spend_limits` / `get_spend_limits` tool pair so each agent carries its own policy instead of a shared global cap. Stored in the existing AES-256-GCM encrypted wallet store.
436
+ - **x402 live endpoint verification** — validate SafeHands's x402 preflight against production third-party x402 endpoints on Pharos as they become available.
437
+
438
+ **Medium-term**
439
+ - **Community risk registry** — as more agents publish scores to the on-chain RiskRegistry (`0x61962a6c812ee9f57b207e1ea47c19ae70bb7141`), `query_risk_registry` becomes shared reputation infrastructure. A malicious contract blocked by one agent is flagged for all agents across the ecosystem.
440
+ - **Cross-chain x402 guardrails** — SafeHands's x402 preflight logic is protocol-level, not Pharos-specific. The same guardrail pattern can protect agents making x402 payments on AgentCash (Base / Solana) or any other compatible network.
441
+
442
+ **Long-term**
443
+ - **Mainnet support** — currently testnet-only by design. Mainnet requires a full re-audit of every safety check, formal verification of the RiskRegistry contract, and KMS/Vault-grade key management before it can be trusted with real funds.
444
+ - **Standardized guardrail interface** — a community spec so any Pharos skill can expose a `preflight(action) → ALLOW | WARN | BLOCK` interface and compose with SafeHands, rather than each skill reinventing safety logic independently.
package/dist/cli.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { type ToolResponse } from "./lib/toolResponse.js";
2
- export type SkillCliToolName = "safehands_preflight_check" | "safehands_x402_preflight" | "safehands_wallet_health" | "token_registry_status" | "explain_risk" | "safehands_risk_report" | "safehands_safe_execute" | "create_agent_wallet" | "get_agent_wallet" | "get_agent_wallet_balance" | "check_token_security" | "assess_risk" | "get_wallet_balance" | "simulate_transaction" | "estimate_gas" | "get_token_price" | "get_transaction_status" | "query_risk_registry";
3
- export declare function getSkillCliToolNames(): string[];
4
- export declare function invokeSkillCliTool(toolName: string, input: unknown): Promise<ToolResponse<unknown>>;
5
- export declare function runSkillCli(argv: string[]): Promise<number>;
1
+ import { type ToolResponse } from "./lib/toolResponse.js";
2
+ export type SkillCliToolName = "safehands_preflight_check" | "safehands_x402_preflight" | "safehands_wallet_health" | "token_registry_status" | "explain_risk" | "safehands_risk_report" | "safehands_safe_execute" | "create_agent_wallet" | "get_agent_wallet" | "get_agent_wallet_balance" | "check_token_security" | "assess_risk" | "get_wallet_balance" | "simulate_transaction" | "estimate_gas" | "get_token_price" | "get_transaction_status" | "query_risk_registry" | "publish_risk_score";
3
+ export declare function getSkillCliToolNames(): string[];
4
+ export declare function invokeSkillCliTool(toolName: string, input: unknown): Promise<ToolResponse<unknown>>;
5
+ export declare function runSkillCli(argv: string[]): Promise<number>;
6
6
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAoBpE,MAAM,MAAM,gBAAgB,GACxB,2BAA2B,GAC3B,0BAA0B,GAC1B,yBAAyB,GACzB,uBAAuB,GACvB,cAAc,GACd,uBAAuB,GACvB,wBAAwB,GACxB,qBAAqB,GACrB,kBAAkB,GAClB,0BAA0B,GAC1B,sBAAsB,GACtB,aAAa,GACb,oBAAoB,GACpB,sBAAsB,GACtB,cAAc,GACd,iBAAiB,GACjB,wBAAwB,GACxB,qBAAqB,CAAC;AA8D1B,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAuBzG;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BjE"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAqBpE,MAAM,MAAM,gBAAgB,GACxB,2BAA2B,GAC3B,0BAA0B,GAC1B,yBAAyB,GACzB,uBAAuB,GACvB,cAAc,GACd,uBAAuB,GACvB,wBAAwB,GACxB,qBAAqB,GACrB,kBAAkB,GAClB,0BAA0B,GAC1B,sBAAsB,GACtB,aAAa,GACb,oBAAoB,GACpB,sBAAsB,GACtB,cAAc,GACd,iBAAiB,GACjB,wBAAwB,GACxB,qBAAqB,GACrB,oBAAoB,CAAC;AA+DzB,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAuBzG;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BjE"}
package/dist/cli.js CHANGED
@@ -1,125 +1,127 @@
1
- // ─── SafeHands Skill Engine CLI Adapter ────────────────────────────────
2
- // Terminal entrypoint used by Pharos Skill Engine reference files.
3
- // It calls the same tool handlers as MCP registration and prints the
4
- // standard SafeHands response envelope as JSON.
5
- // ────────────────────────────────────────────────────────────────────────
6
- import { fail, ok } from "./lib/toolResponse.js";
7
- import { handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
8
- import { handleSafeHandsX402Preflight } from "./tools/safehandsX402Preflight.js";
9
- import { handleSafeHandsWalletHealth } from "./tools/safehandsWalletHealth.js";
10
- import { handleTokenRegistryStatus } from "./tools/tokenRegistryStatus.js";
11
- import { handleExplainRisk } from "./tools/explainRisk.js";
12
- import { handleSafeHandsRiskReport } from "./tools/safehandsRiskReport.js";
13
- import { handleSafeHandsSafeExecute } from "./tools/safehandsSafeExecute.js";
14
- import { handleCreateAgentWallet } from "./tools/createAgentWallet.js";
15
- import { handleGetAgentWallet } from "./tools/getAgentWallet.js";
16
- import { handleGetAgentWalletBalance } from "./tools/getAgentWalletBalance.js";
17
- import { handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
18
- import { handleAssessRisk } from "./tools/assessRisk.js";
19
- import { handleGetWalletBalance } from "./tools/getWalletBalance.js";
20
- import { handleSimulateTransaction } from "./tools/simulateTransaction.js";
21
- import { handleEstimateGas } from "./tools/estimateGas.js";
22
- import { handleGetTokenPrice } from "./tools/getTokenPrice.js";
23
- import { handleGetTransactionStatus } from "./tools/getTransactionStatus.js";
24
- import { handleQueryRiskRegistry } from "./tools/queryRiskRegistry.js";
25
- const SKILL_CLI_TOOLS = {
26
- safehands_preflight_check: handleSafeHandsPreflightCheck,
27
- safehands_x402_preflight: handleSafeHandsX402Preflight,
28
- safehands_wallet_health: handleSafeHandsWalletHealth,
29
- token_registry_status: handleTokenRegistryStatus,
30
- explain_risk: handleExplainRisk,
31
- safehands_risk_report: handleSafeHandsRiskReport,
32
- safehands_safe_execute: handleSafeHandsSafeExecute,
33
- create_agent_wallet: handleCreateAgentWallet,
34
- get_agent_wallet: handleGetAgentWallet,
35
- get_agent_wallet_balance: handleGetAgentWalletBalance,
36
- check_token_security: handleCheckTokenSecurity,
37
- assess_risk: handleAssessRisk,
38
- get_wallet_balance: handleGetWalletBalance,
39
- simulate_transaction: handleSimulateTransaction,
40
- estimate_gas: handleEstimateGas,
41
- get_token_price: handleGetTokenPrice,
42
- get_transaction_status: handleGetTransactionStatus,
43
- query_risk_registry: handleQueryRiskRegistry,
44
- };
45
- function isStructuredResponse(value) {
46
- return !!value && typeof value === "object" && "success" in value && "data" in value && "error" in value && "timestamp" in value;
47
- }
48
- function printJson(response) {
49
- process.stdout.write(`${JSON.stringify(response, null, 2)}\n`);
50
- }
51
- function usage() {
52
- const tools = Object.keys(SKILL_CLI_TOOLS).sort().join(", ");
53
- return [
54
- "Usage: npx safehands-pharos skill <tool_name> [<json> | --input-json '<json>' | -i '<json>']",
55
- "",
56
- `Supported Skill Engine tools: ${tools}`,
57
- "",
58
- "Examples:",
59
- " npx safehands-pharos skill assess_risk '{\"action\":\"swap\",\"amount\":\"0.01\"}'",
60
- " npx safehands-pharos skill get_wallet_balance '{\"walletAddress\":\"0xABC...\"}'",
61
- " npx safehands-pharos skill safehands_preflight_check -i '{\"actionType\":\"approve_token\",\"chainId\":688689,\"amount\":\"1\"}'",
62
- ].join("\n");
63
- }
64
- function readInputJsonArg(argv) {
65
- // --input-json <json>
66
- const flag = argv.indexOf("--input-json");
67
- if (flag >= 0)
68
- return argv[flag + 1] ?? null;
69
- // --input-json=<json>
70
- const inline = argv.find((a) => a.startsWith("--input-json="));
71
- if (inline)
72
- return inline.slice("--input-json=".length);
73
- // -i <json>
74
- const short = argv.indexOf("-i");
75
- if (short >= 0)
76
- return argv[short + 1] ?? null;
77
- // positional: first arg that looks like JSON or is not a flag
78
- const positional = argv.find((a) => !a.startsWith("-"));
79
- return positional ?? null;
80
- }
81
- export function getSkillCliToolNames() {
82
- return Object.keys(SKILL_CLI_TOOLS).sort();
83
- }
84
- export async function invokeSkillCliTool(toolName, input) {
85
- const handler = SKILL_CLI_TOOLS[toolName];
86
- if (!handler) {
87
- return fail("UNKNOWN_SKILL_TOOL", `Unknown SafeHands Skill Engine tool: ${toolName}. Supported tools: ${getSkillCliToolNames().join(", ")}`, false, "safehands_cli");
88
- }
89
- try {
90
- const result = await handler(input);
91
- if (isStructuredResponse(result))
92
- return result;
93
- return ok(result);
94
- }
95
- catch (err) {
96
- return fail("TOOL_EXECUTION_FAILED", err instanceof Error ? err.message : String(err), false, toolName);
97
- }
98
- }
99
- export async function runSkillCli(argv) {
100
- const [toolName] = argv;
101
- if (!toolName || toolName === "--help" || toolName === "-h") {
102
- printJson(fail("CLI_USAGE_ERROR", usage(), false, "safehands_cli"));
103
- return 2;
104
- }
105
- if (!SKILL_CLI_TOOLS[toolName]) {
106
- printJson(await invokeSkillCliTool(toolName, {}));
107
- return 2;
108
- }
109
- const rawJson = readInputJsonArg(argv.slice(1));
110
- if (rawJson === null) {
111
- printJson(fail("MISSING_INPUT_JSON", "Missing required --input-json '<json>' argument.", false, "safehands_cli"));
112
- return 2;
113
- }
114
- let input;
115
- try {
116
- input = JSON.parse(rawJson);
117
- }
118
- catch (err) {
119
- printJson(fail("INVALID_INPUT_JSON", err instanceof Error ? err.message : String(err), false, "safehands_cli"));
120
- return 2;
121
- }
122
- printJson(await invokeSkillCliTool(toolName, input));
123
- return 0;
124
- }
1
+ // ─── SafeHands Skill Engine CLI Adapter ────────────────────────────────
2
+ // Terminal entrypoint used by Pharos Skill Engine reference files.
3
+ // It calls the same tool handlers as MCP registration and prints the
4
+ // standard SafeHands response envelope as JSON.
5
+ // ────────────────────────────────────────────────────────────────────────
6
+ import { fail, ok } from "./lib/toolResponse.js";
7
+ import { handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
8
+ import { handleSafeHandsX402Preflight } from "./tools/safehandsX402Preflight.js";
9
+ import { handleSafeHandsWalletHealth } from "./tools/safehandsWalletHealth.js";
10
+ import { handleTokenRegistryStatus } from "./tools/tokenRegistryStatus.js";
11
+ import { handleExplainRisk } from "./tools/explainRisk.js";
12
+ import { handleSafeHandsRiskReport } from "./tools/safehandsRiskReport.js";
13
+ import { handleSafeHandsSafeExecute } from "./tools/safehandsSafeExecute.js";
14
+ import { handleCreateAgentWallet } from "./tools/createAgentWallet.js";
15
+ import { handleGetAgentWallet } from "./tools/getAgentWallet.js";
16
+ import { handleGetAgentWalletBalance } from "./tools/getAgentWalletBalance.js";
17
+ import { handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
18
+ import { handleAssessRisk } from "./tools/assessRisk.js";
19
+ import { handleGetWalletBalance } from "./tools/getWalletBalance.js";
20
+ import { handleSimulateTransaction } from "./tools/simulateTransaction.js";
21
+ import { handleEstimateGas } from "./tools/estimateGas.js";
22
+ import { handleGetTokenPrice } from "./tools/getTokenPrice.js";
23
+ import { handleGetTransactionStatus } from "./tools/getTransactionStatus.js";
24
+ import { handleQueryRiskRegistry } from "./tools/queryRiskRegistry.js";
25
+ import { handlePublishRiskScore } from "./tools/publishRiskScore.js";
26
+ const SKILL_CLI_TOOLS = {
27
+ safehands_preflight_check: handleSafeHandsPreflightCheck,
28
+ safehands_x402_preflight: handleSafeHandsX402Preflight,
29
+ safehands_wallet_health: handleSafeHandsWalletHealth,
30
+ token_registry_status: handleTokenRegistryStatus,
31
+ explain_risk: handleExplainRisk,
32
+ safehands_risk_report: handleSafeHandsRiskReport,
33
+ safehands_safe_execute: handleSafeHandsSafeExecute,
34
+ create_agent_wallet: handleCreateAgentWallet,
35
+ get_agent_wallet: handleGetAgentWallet,
36
+ get_agent_wallet_balance: handleGetAgentWalletBalance,
37
+ check_token_security: handleCheckTokenSecurity,
38
+ assess_risk: handleAssessRisk,
39
+ get_wallet_balance: handleGetWalletBalance,
40
+ simulate_transaction: handleSimulateTransaction,
41
+ estimate_gas: handleEstimateGas,
42
+ get_token_price: handleGetTokenPrice,
43
+ get_transaction_status: handleGetTransactionStatus,
44
+ query_risk_registry: handleQueryRiskRegistry,
45
+ publish_risk_score: handlePublishRiskScore,
46
+ };
47
+ function isStructuredResponse(value) {
48
+ return !!value && typeof value === "object" && "success" in value && "data" in value && "error" in value && "timestamp" in value;
49
+ }
50
+ function printJson(response) {
51
+ process.stdout.write(`${JSON.stringify(response, null, 2)}\n`);
52
+ }
53
+ function usage() {
54
+ const tools = Object.keys(SKILL_CLI_TOOLS).sort().join(", ");
55
+ return [
56
+ "Usage: npx safehands-pharos skill <tool_name> [<json> | --input-json '<json>' | -i '<json>']",
57
+ "",
58
+ `Supported Skill Engine tools: ${tools}`,
59
+ "",
60
+ "Examples:",
61
+ " npx safehands-pharos skill assess_risk '{\"action\":\"swap\",\"amount\":\"0.01\"}'",
62
+ " npx safehands-pharos skill get_wallet_balance '{\"walletAddress\":\"0xABC...\"}'",
63
+ " npx safehands-pharos skill safehands_preflight_check -i '{\"actionType\":\"approve_token\",\"chainId\":688689,\"amount\":\"1\"}'",
64
+ ].join("\n");
65
+ }
66
+ function readInputJsonArg(argv) {
67
+ // --input-json <json>
68
+ const flag = argv.indexOf("--input-json");
69
+ if (flag >= 0)
70
+ return argv[flag + 1] ?? null;
71
+ // --input-json=<json>
72
+ const inline = argv.find((a) => a.startsWith("--input-json="));
73
+ if (inline)
74
+ return inline.slice("--input-json=".length);
75
+ // -i <json>
76
+ const short = argv.indexOf("-i");
77
+ if (short >= 0)
78
+ return argv[short + 1] ?? null;
79
+ // positional: first arg that looks like JSON or is not a flag
80
+ const positional = argv.find((a) => !a.startsWith("-"));
81
+ return positional ?? null;
82
+ }
83
+ export function getSkillCliToolNames() {
84
+ return Object.keys(SKILL_CLI_TOOLS).sort();
85
+ }
86
+ export async function invokeSkillCliTool(toolName, input) {
87
+ const handler = SKILL_CLI_TOOLS[toolName];
88
+ if (!handler) {
89
+ return fail("UNKNOWN_SKILL_TOOL", `Unknown SafeHands Skill Engine tool: ${toolName}. Supported tools: ${getSkillCliToolNames().join(", ")}`, false, "safehands_cli");
90
+ }
91
+ try {
92
+ const result = await handler(input);
93
+ if (isStructuredResponse(result))
94
+ return result;
95
+ return ok(result);
96
+ }
97
+ catch (err) {
98
+ return fail("TOOL_EXECUTION_FAILED", err instanceof Error ? err.message : String(err), false, toolName);
99
+ }
100
+ }
101
+ export async function runSkillCli(argv) {
102
+ const [toolName] = argv;
103
+ if (!toolName || toolName === "--help" || toolName === "-h") {
104
+ printJson(fail("CLI_USAGE_ERROR", usage(), false, "safehands_cli"));
105
+ return 2;
106
+ }
107
+ if (!SKILL_CLI_TOOLS[toolName]) {
108
+ printJson(await invokeSkillCliTool(toolName, {}));
109
+ return 2;
110
+ }
111
+ const rawJson = readInputJsonArg(argv.slice(1));
112
+ if (rawJson === null) {
113
+ printJson(fail("MISSING_INPUT_JSON", "Missing required --input-json '<json>' argument.", false, "safehands_cli"));
114
+ return 2;
115
+ }
116
+ let input;
117
+ try {
118
+ input = JSON.parse(rawJson);
119
+ }
120
+ catch (err) {
121
+ printJson(fail("INVALID_INPUT_JSON", err instanceof Error ? err.message : String(err), false, "safehands_cli"));
122
+ return 2;
123
+ }
124
+ printJson(await invokeSkillCliTool(toolName, input));
125
+ return 0;
126
+ }
125
127
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/demo.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare function runDemo(): Promise<void>;
1
+ export declare function runDemo(): Promise<void>;
2
2
  //# sourceMappingURL=demo.d.ts.map