safehands-pharos 1.5.0 → 2.8.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.
- package/.agents/policies/default.json +15 -0
- package/.env.example +81 -64
- package/README.md +301 -444
- package/SECURITY.md +112 -0
- package/SKILL.md +59 -0
- package/contracts/SafeHandsAttestation.sol +182 -0
- package/contracts/SafeHandsRegistry.sol +149 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts +39 -0
- package/dist/agent/SafeHandsGuardianAgent.d.ts.map +1 -0
- package/dist/agent/SafeHandsGuardianAgent.js +98 -0
- package/dist/agent/SafeHandsGuardianAgent.js.map +1 -0
- package/dist/agent/agentDecisionFormatter.d.ts +43 -0
- package/dist/agent/agentDecisionFormatter.d.ts.map +1 -0
- package/dist/agent/agentDecisionFormatter.js +96 -0
- package/dist/agent/agentDecisionFormatter.js.map +1 -0
- package/dist/agent/agentEnrich.d.ts +28 -0
- package/dist/agent/agentEnrich.d.ts.map +1 -0
- package/dist/agent/agentEnrich.js +99 -0
- package/dist/agent/agentEnrich.js.map +1 -0
- package/dist/agent/agentIntentClassifier.d.ts +44 -0
- package/dist/agent/agentIntentClassifier.d.ts.map +1 -0
- package/dist/agent/agentIntentClassifier.js +77 -0
- package/dist/agent/agentIntentClassifier.js.map +1 -0
- package/dist/agent/agentPolicyResolver.d.ts +44 -0
- package/dist/agent/agentPolicyResolver.d.ts.map +1 -0
- package/dist/agent/agentPolicyResolver.js +94 -0
- package/dist/agent/agentPolicyResolver.js.map +1 -0
- package/dist/agent/agentRuntime.d.ts +12 -0
- package/dist/agent/agentRuntime.d.ts.map +1 -0
- package/dist/agent/agentRuntime.js +31 -0
- package/dist/agent/agentRuntime.js.map +1 -0
- package/dist/agent/agentToolRouter.d.ts +24 -0
- package/dist/agent/agentToolRouter.d.ts.map +1 -0
- package/dist/agent/agentToolRouter.js +89 -0
- package/dist/agent/agentToolRouter.js.map +1 -0
- package/dist/agent/guardianOperator.d.ts +35 -0
- package/dist/agent/guardianOperator.d.ts.map +1 -0
- package/dist/agent/guardianOperator.js +65 -0
- package/dist/agent/guardianOperator.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +14 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/api/activityRoutes.d.ts +70 -0
- package/dist/api/activityRoutes.d.ts.map +1 -0
- package/dist/api/activityRoutes.js +100 -0
- package/dist/api/activityRoutes.js.map +1 -0
- package/dist/api/agentRoutes.d.ts +16 -0
- package/dist/api/agentRoutes.d.ts.map +1 -0
- package/dist/api/agentRoutes.js +37 -0
- package/dist/api/agentRoutes.js.map +1 -0
- package/dist/api/broadcastRoutes.d.ts +34 -0
- package/dist/api/broadcastRoutes.d.ts.map +1 -0
- package/dist/api/broadcastRoutes.js +147 -0
- package/dist/api/broadcastRoutes.js.map +1 -0
- package/dist/api/consolePage.d.ts +2 -0
- package/dist/api/consolePage.d.ts.map +1 -0
- package/dist/api/consolePage.js +206 -0
- package/dist/api/consolePage.js.map +1 -0
- package/dist/api/httpHardening.d.ts +75 -0
- package/dist/api/httpHardening.d.ts.map +1 -0
- package/dist/api/httpHardening.js +122 -0
- package/dist/api/httpHardening.js.map +1 -0
- package/dist/api/indexerRoutes.d.ts +46 -0
- package/dist/api/indexerRoutes.d.ts.map +1 -0
- package/dist/api/indexerRoutes.js +75 -0
- package/dist/api/indexerRoutes.js.map +1 -0
- package/dist/api/paidRoutes.d.ts +8 -0
- package/dist/api/paidRoutes.d.ts.map +1 -0
- package/dist/api/paidRoutes.js +175 -0
- package/dist/api/paidRoutes.js.map +1 -0
- package/dist/api/prepareRoutes.d.ts +58 -0
- package/dist/api/prepareRoutes.d.ts.map +1 -0
- package/dist/api/prepareRoutes.js +90 -0
- package/dist/api/prepareRoutes.js.map +1 -0
- package/dist/api/response.d.ts +39 -0
- package/dist/api/response.d.ts.map +1 -0
- package/dist/api/response.js +53 -0
- package/dist/api/response.js.map +1 -0
- package/dist/api/routes.d.ts +175 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +276 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/api/schemas.d.ts +147 -0
- package/dist/api/schemas.d.ts.map +1 -0
- package/dist/api/schemas.js +81 -0
- package/dist/api/schemas.js.map +1 -0
- package/dist/api/server.d.ts +11 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +505 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/toolRoutes.d.ts +14 -0
- package/dist/api/toolRoutes.d.ts.map +1 -0
- package/dist/api/toolRoutes.js +138 -0
- package/dist/api/toolRoutes.js.map +1 -0
- package/dist/api/walletPrepareRoutes.d.ts +74 -0
- package/dist/api/walletPrepareRoutes.d.ts.map +1 -0
- package/dist/api/walletPrepareRoutes.js +127 -0
- package/dist/api/walletPrepareRoutes.js.map +1 -0
- package/dist/api/x402Gate.d.ts +51 -0
- package/dist/api/x402Gate.d.ts.map +1 -0
- package/dist/api/x402Gate.js +184 -0
- package/dist/api/x402Gate.js.map +1 -0
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +29 -1
- package/dist/cli.js.map +1 -1
- package/dist/data/ecosystemRegistry.data.d.ts +3 -0
- package/dist/data/ecosystemRegistry.data.d.ts.map +1 -0
- package/dist/data/ecosystemRegistry.data.js +582 -0
- package/dist/data/ecosystemRegistry.data.js.map +1 -0
- package/dist/demo.d.ts +0 -0
- package/dist/demo.d.ts.map +1 -1
- package/dist/demo.js +43 -8
- package/dist/demo.js.map +1 -1
- package/dist/handsafe.zip +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +0 -0
- package/dist/index.js +212 -135
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +0 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +72 -10
- package/dist/init.js.map +1 -1
- package/dist/lib/analysis/abiWords.d.ts +17 -0
- package/dist/lib/analysis/abiWords.d.ts.map +1 -0
- package/dist/lib/analysis/abiWords.js +48 -0
- package/dist/lib/analysis/abiWords.js.map +1 -0
- package/dist/lib/analysis/approval.d.ts +29 -0
- package/dist/lib/analysis/approval.d.ts.map +1 -0
- package/dist/lib/analysis/approval.js +189 -0
- package/dist/lib/analysis/approval.js.map +1 -0
- package/dist/lib/analysis/calldata.d.ts +60 -0
- package/dist/lib/analysis/calldata.d.ts.map +1 -0
- package/dist/lib/analysis/calldata.js +464 -0
- package/dist/lib/analysis/calldata.js.map +1 -0
- package/dist/lib/analysis/contractIntel.d.ts +65 -0
- package/dist/lib/analysis/contractIntel.d.ts.map +1 -0
- package/dist/lib/analysis/contractIntel.js +320 -0
- package/dist/lib/analysis/contractIntel.js.map +1 -0
- package/dist/lib/analysis/evm.d.ts +42 -0
- package/dist/lib/analysis/evm.d.ts.map +1 -0
- package/dist/lib/analysis/evm.js +185 -0
- package/dist/lib/analysis/evm.js.map +1 -0
- package/dist/lib/analysis/gas.d.ts +4 -0
- package/dist/lib/analysis/gas.d.ts.map +1 -0
- package/dist/lib/analysis/gas.js +13 -0
- package/dist/lib/analysis/gas.js.map +1 -0
- package/dist/lib/analysis/index.d.ts +11 -0
- package/dist/lib/analysis/index.d.ts.map +1 -0
- package/dist/lib/analysis/index.js +16 -0
- package/dist/lib/analysis/index.js.map +1 -0
- package/dist/lib/analysis/pharosTokens.d.ts +31 -0
- package/dist/lib/analysis/pharosTokens.d.ts.map +1 -0
- package/dist/lib/analysis/pharosTokens.js +78 -0
- package/dist/lib/analysis/pharosTokens.js.map +1 -0
- package/dist/lib/analysis/safeTx.d.ts +27 -0
- package/dist/lib/analysis/safeTx.d.ts.map +1 -0
- package/dist/lib/analysis/safeTx.js +118 -0
- package/dist/lib/analysis/safeTx.js.map +1 -0
- package/dist/lib/analysis/token.d.ts +21 -0
- package/dist/lib/analysis/token.d.ts.map +1 -0
- package/dist/lib/analysis/token.js +151 -0
- package/dist/lib/analysis/token.js.map +1 -0
- package/dist/lib/analysis/types.d.ts +49 -0
- package/dist/lib/analysis/types.d.ts.map +1 -0
- package/dist/lib/analysis/types.js +10 -0
- package/dist/lib/analysis/types.js.map +1 -0
- package/dist/lib/analysis/x402.d.ts +24 -0
- package/dist/lib/analysis/x402.d.ts.map +1 -0
- package/dist/lib/analysis/x402.js +60 -0
- package/dist/lib/analysis/x402.js.map +1 -0
- package/dist/lib/auditLog.d.ts +1 -0
- package/dist/lib/auditLog.d.ts.map +1 -1
- package/dist/lib/auditLog.js +0 -0
- package/dist/lib/auditLog.js.map +1 -1
- package/dist/lib/config.d.ts +77 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +120 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +246 -97
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +334 -127
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/dodoApi.d.ts +26 -3
- package/dist/lib/dodoApi.d.ts.map +1 -1
- package/dist/lib/dodoApi.js +80 -17
- package/dist/lib/dodoApi.js.map +1 -1
- package/dist/lib/ecosystemRegistry.d.ts +126 -0
- package/dist/lib/ecosystemRegistry.d.ts.map +1 -0
- package/dist/lib/ecosystemRegistry.js +178 -0
- package/dist/lib/ecosystemRegistry.js.map +1 -0
- package/dist/lib/envLoader.d.ts +0 -0
- package/dist/lib/envLoader.d.ts.map +0 -0
- package/dist/lib/envLoader.js +39 -18
- package/dist/lib/envLoader.js.map +1 -1
- package/dist/lib/goldsky.d.ts +58 -0
- package/dist/lib/goldsky.d.ts.map +1 -0
- package/dist/lib/goldsky.js +275 -0
- package/dist/lib/goldsky.js.map +1 -0
- package/dist/lib/guardian/decision.d.ts +23 -0
- package/dist/lib/guardian/decision.d.ts.map +1 -0
- package/dist/lib/guardian/decision.js +40 -0
- package/dist/lib/guardian/decision.js.map +1 -0
- package/dist/lib/http.d.ts +0 -1
- package/dist/lib/http.d.ts.map +1 -1
- package/dist/lib/http.js +297 -32
- package/dist/lib/http.js.map +1 -1
- package/dist/lib/managedExecution.d.ts +19 -0
- package/dist/lib/managedExecution.d.ts.map +1 -0
- package/dist/lib/managedExecution.js +64 -0
- package/dist/lib/managedExecution.js.map +1 -0
- package/dist/lib/merkleBatcher.d.ts +23 -0
- package/dist/lib/merkleBatcher.d.ts.map +1 -0
- package/dist/lib/merkleBatcher.js +62 -0
- package/dist/lib/merkleBatcher.js.map +1 -0
- package/dist/lib/networks.d.ts +48 -0
- package/dist/lib/networks.d.ts.map +1 -0
- package/dist/lib/networks.js +103 -0
- package/dist/lib/networks.js.map +1 -0
- package/dist/lib/observability/accessContext.d.ts +29 -0
- package/dist/lib/observability/accessContext.d.ts.map +1 -0
- package/dist/lib/observability/accessContext.js +50 -0
- package/dist/lib/observability/accessContext.js.map +1 -0
- package/dist/lib/observability/activityStore.d.ts +70 -0
- package/dist/lib/observability/activityStore.d.ts.map +1 -0
- package/dist/lib/observability/activityStore.js +149 -0
- package/dist/lib/observability/activityStore.js.map +1 -0
- package/dist/lib/observability/apiKey.d.ts +55 -0
- package/dist/lib/observability/apiKey.d.ts.map +1 -0
- package/dist/lib/observability/apiKey.js +141 -0
- package/dist/lib/observability/apiKey.js.map +1 -0
- package/dist/lib/observability/logger.d.ts +30 -0
- package/dist/lib/observability/logger.d.ts.map +1 -0
- package/dist/lib/observability/logger.js +30 -0
- package/dist/lib/observability/logger.js.map +1 -0
- package/dist/lib/observability/quota.d.ts +33 -0
- package/dist/lib/observability/quota.d.ts.map +1 -0
- package/dist/lib/observability/quota.js +49 -0
- package/dist/lib/observability/quota.js.map +1 -0
- package/dist/lib/observability/requestId.d.ts +8 -0
- package/dist/lib/observability/requestId.d.ts.map +1 -0
- package/dist/lib/observability/requestId.js +24 -0
- package/dist/lib/observability/requestId.js.map +1 -0
- package/dist/lib/observability/sanitize.d.ts +77 -0
- package/dist/lib/observability/sanitize.d.ts.map +1 -0
- package/dist/lib/observability/sanitize.js +228 -0
- package/dist/lib/observability/sanitize.js.map +1 -0
- package/dist/lib/observability/scopes.d.ts +20 -0
- package/dist/lib/observability/scopes.d.ts.map +1 -0
- package/dist/lib/observability/scopes.js +77 -0
- package/dist/lib/observability/scopes.js.map +1 -0
- package/dist/lib/okxDexApi.d.ts +106 -0
- package/dist/lib/okxDexApi.d.ts.map +1 -0
- package/dist/lib/okxDexApi.js +221 -0
- package/dist/lib/okxDexApi.js.map +1 -0
- package/dist/lib/persistentJsonStore.d.ts +5 -0
- package/dist/lib/persistentJsonStore.d.ts.map +1 -0
- package/dist/lib/persistentJsonStore.js +39 -0
- package/dist/lib/persistentJsonStore.js.map +1 -0
- package/dist/lib/pharos/attestationPublisher.d.ts +50 -0
- package/dist/lib/pharos/attestationPublisher.d.ts.map +1 -0
- package/dist/lib/pharos/attestationPublisher.js +262 -0
- package/dist/lib/pharos/attestationPublisher.js.map +1 -0
- package/dist/lib/pharos/ecosystem.d.ts +52 -0
- package/dist/lib/pharos/ecosystem.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystem.js +431 -0
- package/dist/lib/pharos/ecosystem.js.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts +53 -0
- package/dist/lib/pharos/ecosystemEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/ecosystemEvidence.js +133 -0
- package/dist/lib/pharos/ecosystemEvidence.js.map +1 -0
- package/dist/lib/pharos/rpc.d.ts +44 -0
- package/dist/lib/pharos/rpc.d.ts.map +1 -0
- package/dist/lib/pharos/rpc.js +90 -0
- package/dist/lib/pharos/rpc.js.map +1 -0
- package/dist/lib/pharos/rpcEvidence.d.ts +49 -0
- package/dist/lib/pharos/rpcEvidence.d.ts.map +1 -0
- package/dist/lib/pharos/rpcEvidence.js +46 -0
- package/dist/lib/pharos/rpcEvidence.js.map +1 -0
- package/dist/lib/pharos/rpcMethods.d.ts +46 -0
- package/dist/lib/pharos/rpcMethods.d.ts.map +1 -0
- package/dist/lib/pharos/rpcMethods.js +176 -0
- package/dist/lib/pharos/rpcMethods.js.map +1 -0
- package/dist/lib/pharos/spvVerifier.d.ts +47 -0
- package/dist/lib/pharos/spvVerifier.d.ts.map +1 -0
- package/dist/lib/pharos/spvVerifier.js +105 -0
- package/dist/lib/pharos/spvVerifier.js.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts +10 -0
- package/dist/lib/pharos/userSignedBroadcaster.d.ts.map +1 -0
- package/dist/lib/pharos/userSignedBroadcaster.js +50 -0
- package/dist/lib/pharos/userSignedBroadcaster.js.map +1 -0
- package/dist/lib/pharosClient.d.ts +5 -10
- package/dist/lib/pharosClient.d.ts.map +1 -1
- package/dist/lib/pharosClient.js +9 -16
- package/dist/lib/pharosClient.js.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts +37 -1
- package/dist/lib/policy/actionPolicyEngine.d.ts.map +1 -1
- package/dist/lib/policy/actionPolicyEngine.js +213 -52
- package/dist/lib/policy/actionPolicyEngine.js.map +1 -1
- package/dist/lib/policy/agentPolicy.d.ts +29 -0
- package/dist/lib/policy/agentPolicy.d.ts.map +1 -0
- package/dist/lib/policy/agentPolicy.js +154 -0
- package/dist/lib/policy/agentPolicy.js.map +1 -0
- package/dist/lib/policy/policyPresets.d.ts +30 -0
- package/dist/lib/policy/policyPresets.d.ts.map +1 -0
- package/dist/lib/policy/policyPresets.js +124 -0
- package/dist/lib/policy/policyPresets.js.map +1 -0
- package/dist/lib/policy/writeExecutionGate.d.ts +23 -0
- package/dist/lib/policy/writeExecutionGate.d.ts.map +1 -0
- package/dist/lib/policy/writeExecutionGate.js +65 -0
- package/dist/lib/policy/writeExecutionGate.js.map +1 -0
- package/dist/lib/preparedTxStore.d.ts +21 -0
- package/dist/lib/preparedTxStore.d.ts.map +1 -0
- package/dist/lib/preparedTxStore.js +90 -0
- package/dist/lib/preparedTxStore.js.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts +34 -0
- package/dist/lib/price/chainlinkPushProvider.d.ts.map +1 -0
- package/dist/lib/price/chainlinkPushProvider.js +36 -0
- package/dist/lib/price/chainlinkPushProvider.js.map +1 -0
- package/dist/lib/price/feedRegistry.d.ts +26 -0
- package/dist/lib/price/feedRegistry.d.ts.map +1 -0
- package/dist/lib/price/feedRegistry.js +67 -0
- package/dist/lib/price/feedRegistry.js.map +1 -0
- package/dist/lib/price/priceResolver.d.ts +35 -0
- package/dist/lib/price/priceResolver.d.ts.map +1 -0
- package/dist/lib/price/priceResolver.js +246 -0
- package/dist/lib/price/priceResolver.js.map +1 -0
- package/dist/lib/price/supraProvider.d.ts +9 -0
- package/dist/lib/price/supraProvider.d.ts.map +1 -0
- package/dist/lib/price/supraProvider.js +17 -0
- package/dist/lib/price/supraProvider.js.map +1 -0
- package/dist/lib/price/types.d.ts +67 -0
- package/dist/lib/price/types.d.ts.map +1 -0
- package/dist/lib/price/types.js +7 -0
- package/dist/lib/price/types.js.map +1 -0
- package/dist/lib/productionGuards.d.ts +16 -0
- package/dist/lib/productionGuards.d.ts.map +1 -0
- package/dist/lib/productionGuards.js +93 -0
- package/dist/lib/productionGuards.js.map +1 -0
- package/dist/lib/recipientSafety.d.ts +5 -0
- package/dist/lib/recipientSafety.d.ts.map +1 -0
- package/dist/lib/recipientSafety.js +28 -0
- package/dist/lib/recipientSafety.js.map +1 -0
- package/dist/lib/riskEngine.d.ts +19 -0
- package/dist/lib/riskEngine.d.ts.map +1 -1
- package/dist/lib/riskEngine.js +107 -38
- package/dist/lib/riskEngine.js.map +1 -1
- package/dist/lib/riskInclusion.d.ts +72 -0
- package/dist/lib/riskInclusion.d.ts.map +1 -0
- package/dist/lib/riskInclusion.js +252 -0
- package/dist/lib/riskInclusion.js.map +1 -0
- package/dist/lib/safeHandsRegistry.d.ts +32 -0
- package/dist/lib/safeHandsRegistry.d.ts.map +1 -0
- package/dist/lib/safeHandsRegistry.js +151 -0
- package/dist/lib/safeHandsRegistry.js.map +1 -0
- package/dist/lib/signer/index.d.ts +3 -3
- package/dist/lib/signer/index.d.ts.map +1 -1
- package/dist/lib/signer/index.js +33 -11
- package/dist/lib/signer/index.js.map +1 -1
- package/dist/lib/spendAccumulator.d.ts +24 -1
- package/dist/lib/spendAccumulator.d.ts.map +1 -1
- package/dist/lib/spendAccumulator.js +76 -6
- package/dist/lib/spendAccumulator.js.map +1 -1
- package/dist/lib/toolResponse.d.ts +6 -1
- package/dist/lib/toolResponse.d.ts.map +1 -1
- package/dist/lib/toolResponse.js +13 -9
- package/dist/lib/toolResponse.js.map +1 -1
- package/dist/lib/validation.d.ts +7 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +62 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/lib/wallet/index.d.ts +8 -12
- package/dist/lib/wallet/index.d.ts.map +1 -1
- package/dist/lib/wallet/index.js +48 -35
- package/dist/lib/wallet/index.js.map +1 -1
- package/dist/lib/x402ReplayStore.d.ts +6 -0
- package/dist/lib/x402ReplayStore.d.ts.map +1 -0
- package/dist/lib/x402ReplayStore.js +79 -0
- package/dist/lib/x402ReplayStore.js.map +1 -0
- package/dist/safehands.zip +0 -0
- package/dist/sdk.d.ts +14 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +25 -0
- package/dist/sdk.js.map +1 -0
- package/dist/tools/approveToken.d.ts +31 -10
- package/dist/tools/approveToken.d.ts.map +1 -1
- package/dist/tools/approveToken.js +91 -24
- package/dist/tools/approveToken.js.map +1 -1
- package/dist/tools/assessRisk.d.ts +13 -26
- package/dist/tools/assessRisk.d.ts.map +1 -1
- package/dist/tools/assessRisk.js +34 -75
- package/dist/tools/assessRisk.js.map +1 -1
- package/dist/tools/checkAllowance.d.ts +9 -3
- package/dist/tools/checkAllowance.d.ts.map +1 -1
- package/dist/tools/checkAllowance.js +27 -5
- package/dist/tools/checkAllowance.js.map +1 -1
- package/dist/tools/checkTokenSecurity.d.ts +62 -5
- package/dist/tools/checkTokenSecurity.d.ts.map +1 -1
- package/dist/tools/checkTokenSecurity.js +166 -21
- package/dist/tools/checkTokenSecurity.js.map +1 -1
- package/dist/tools/createAgentWallet.d.ts +4 -2
- package/dist/tools/createAgentWallet.d.ts.map +1 -1
- package/dist/tools/createAgentWallet.js +36 -31
- package/dist/tools/createAgentWallet.js.map +1 -1
- package/dist/tools/estimateGas.d.ts +7 -2
- package/dist/tools/estimateGas.d.ts.map +1 -1
- package/dist/tools/estimateGas.js +16 -10
- package/dist/tools/estimateGas.js.map +1 -1
- package/dist/tools/executeSwap.d.ts +56 -8
- package/dist/tools/executeSwap.d.ts.map +1 -1
- package/dist/tools/executeSwap.js +194 -46
- package/dist/tools/executeSwap.js.map +1 -1
- package/dist/tools/explainRisk.d.ts +9 -9
- package/dist/tools/explainRisk.d.ts.map +1 -1
- package/dist/tools/explainRisk.js +5 -4
- package/dist/tools/explainRisk.js.map +1 -1
- package/dist/tools/getAgentPolicy.d.ts +15 -0
- package/dist/tools/getAgentPolicy.d.ts.map +1 -0
- package/dist/tools/getAgentPolicy.js +16 -0
- package/dist/tools/getAgentPolicy.js.map +1 -0
- package/dist/tools/getAgentReputation.d.ts +31 -0
- package/dist/tools/getAgentReputation.d.ts.map +1 -0
- package/dist/tools/getAgentReputation.js +44 -0
- package/dist/tools/getAgentReputation.js.map +1 -0
- package/dist/tools/getAgentWallet.d.ts +1 -1
- package/dist/tools/getAgentWallet.d.ts.map +1 -1
- package/dist/tools/getAgentWallet.js +11 -1
- package/dist/tools/getAgentWallet.js.map +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts +1 -1
- package/dist/tools/getAgentWalletBalance.d.ts.map +1 -1
- package/dist/tools/getAgentWalletBalance.js +58 -26
- package/dist/tools/getAgentWalletBalance.js.map +1 -1
- package/dist/tools/getExecutionHistory.d.ts +1 -1
- package/dist/tools/getExecutionHistory.d.ts.map +1 -1
- package/dist/tools/getExecutionHistory.js +13 -19
- package/dist/tools/getExecutionHistory.js.map +1 -1
- package/dist/tools/getGasPrice.d.ts +3 -3
- package/dist/tools/getGasPrice.d.ts.map +0 -0
- package/dist/tools/getGasPrice.js +7 -7
- package/dist/tools/getGasPrice.js.map +1 -1
- package/dist/tools/getPoolInfo.d.ts +17 -17
- package/dist/tools/getPoolInfo.d.ts.map +1 -1
- package/dist/tools/getPoolInfo.js +14 -9
- package/dist/tools/getPoolInfo.js.map +1 -1
- package/dist/tools/getSpvProof.d.ts +24 -0
- package/dist/tools/getSpvProof.d.ts.map +1 -0
- package/dist/tools/getSpvProof.js +64 -0
- package/dist/tools/getSpvProof.js.map +1 -0
- package/dist/tools/getTokenPrice.d.ts +28 -85
- package/dist/tools/getTokenPrice.d.ts.map +1 -1
- package/dist/tools/getTokenPrice.js +87 -94
- package/dist/tools/getTokenPrice.js.map +1 -1
- package/dist/tools/getTransactionStatus.d.ts +2 -2
- package/dist/tools/getTransactionStatus.d.ts.map +0 -0
- package/dist/tools/getTransactionStatus.js +0 -0
- package/dist/tools/getTransactionStatus.js.map +0 -0
- package/dist/tools/getWalletBalance.d.ts +38 -3
- package/dist/tools/getWalletBalance.d.ts.map +1 -1
- package/dist/tools/getWalletBalance.js +92 -52
- package/dist/tools/getWalletBalance.js.map +1 -1
- package/dist/tools/publishRiskScore.d.ts +36 -14
- package/dist/tools/publishRiskScore.d.ts.map +1 -1
- package/dist/tools/publishRiskScore.js +80 -32
- package/dist/tools/publishRiskScore.js.map +1 -1
- package/dist/tools/queryGoldsky.d.ts +20 -0
- package/dist/tools/queryGoldsky.d.ts.map +1 -0
- package/dist/tools/queryGoldsky.js +29 -0
- package/dist/tools/queryGoldsky.js.map +1 -0
- package/dist/tools/queryRiskRegistry.d.ts +14 -14
- package/dist/tools/queryRiskRegistry.d.ts.map +1 -1
- package/dist/tools/queryRiskRegistry.js +34 -30
- package/dist/tools/queryRiskRegistry.js.map +1 -1
- package/dist/tools/safehandsPreflightCheck.d.ts +29 -14
- package/dist/tools/safehandsPreflightCheck.d.ts.map +1 -1
- package/dist/tools/safehandsPreflightCheck.js +133 -6
- package/dist/tools/safehandsPreflightCheck.js.map +1 -1
- package/dist/tools/safehandsRiskReport.d.ts +29 -14
- package/dist/tools/safehandsRiskReport.d.ts.map +1 -1
- package/dist/tools/safehandsRiskReport.js +23 -3
- package/dist/tools/safehandsRiskReport.js.map +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts +1 -1
- package/dist/tools/safehandsSafeExecute.d.ts.map +1 -1
- package/dist/tools/safehandsSafeExecute.js +100 -17
- package/dist/tools/safehandsSafeExecute.js.map +1 -1
- package/dist/tools/safehandsWalletHealth.d.ts +15 -1
- package/dist/tools/safehandsWalletHealth.d.ts.map +1 -1
- package/dist/tools/safehandsWalletHealth.js +67 -25
- package/dist/tools/safehandsWalletHealth.js.map +1 -1
- package/dist/tools/safehandsX402Preflight.d.ts +3 -3
- package/dist/tools/safehandsX402Preflight.d.ts.map +1 -1
- package/dist/tools/safehandsX402Preflight.js +24 -3
- package/dist/tools/safehandsX402Preflight.js.map +1 -1
- package/dist/tools/sendPayment.d.ts +10 -4
- package/dist/tools/sendPayment.d.ts.map +1 -1
- package/dist/tools/sendPayment.js +63 -36
- package/dist/tools/sendPayment.js.map +1 -1
- package/dist/tools/setAgentPolicy.d.ts +75 -0
- package/dist/tools/setAgentPolicy.d.ts.map +1 -0
- package/dist/tools/setAgentPolicy.js +80 -0
- package/dist/tools/setAgentPolicy.js.map +1 -0
- package/dist/tools/simulateTransaction.d.ts +7 -3
- package/dist/tools/simulateTransaction.d.ts.map +1 -1
- package/dist/tools/simulateTransaction.js +42 -9
- package/dist/tools/simulateTransaction.js.map +1 -1
- package/dist/tools/tokenRegistryStatus.d.ts +25 -5
- package/dist/tools/tokenRegistryStatus.d.ts.map +1 -1
- package/dist/tools/tokenRegistryStatus.js +61 -31
- package/dist/tools/tokenRegistryStatus.js.map +1 -1
- package/dist/tools/verifyRiskInclusion.d.ts +59 -0
- package/dist/tools/verifyRiskInclusion.d.ts.map +1 -0
- package/dist/tools/verifyRiskInclusion.js +40 -0
- package/dist/tools/verifyRiskInclusion.js.map +1 -0
- package/dist/tools/x402PayAndFetch.d.ts +15 -9
- package/dist/tools/x402PayAndFetch.d.ts.map +1 -1
- package/dist/tools/x402PayAndFetch.js +163 -20
- package/dist/tools/x402PayAndFetch.js.map +1 -1
- package/dist/worker.d.ts +3 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +39 -0
- package/dist/worker.js.map +1 -0
- package/dist/x402Server.d.ts +1 -1
- package/dist/x402Server.d.ts.map +1 -1
- package/dist/x402Server.js +144 -35
- package/dist/x402Server.js.map +1 -1
- package/docs/REVIEWER_QUICKSTART.md +113 -0
- package/docs/SAFEHANDS_REVIEWER_DEMO_SCRIPT.md +228 -0
- package/package.json +131 -73
- package/contracts/RiskRegistry.json +0 -223
- package/contracts/RiskRegistry.sol +0 -58
- package/dist/lib/testDodoLive.d.ts +0 -2
- package/dist/lib/testDodoLive.d.ts.map +0 -1
- package/dist/lib/testDodoLive.js +0 -105
- package/dist/lib/testDodoLive.js.map +0 -1
- package/dist/lib/testLiveSafehands.d.ts +0 -2
- package/dist/lib/testLiveSafehands.d.ts.map +0 -1
- package/dist/lib/testLiveSafehands.js +0 -93
- package/dist/lib/testLiveSafehands.js.map +0 -1
- package/dist/lib/testRpc.d.ts +0 -2
- package/dist/lib/testRpc.d.ts.map +0 -1
- package/dist/lib/testRpc.js +0 -30
- package/dist/lib/testRpc.js.map +0 -1
- package/dist/lib/testRpcLive.d.ts +0 -2
- package/dist/lib/testRpcLive.d.ts.map +0 -1
- package/dist/lib/testRpcLive.js +0 -89
- package/dist/lib/testRpcLive.js.map +0 -1
- package/dist/lib/testTools.d.ts +0 -2
- package/dist/lib/testTools.d.ts.map +0 -1
- package/dist/lib/testTools.js +0 -397
- package/dist/lib/testTools.js.map +0 -1
- package/dist/lib/testX402Live.d.ts +0 -2
- package/dist/lib/testX402Live.d.ts.map +0 -1
- package/dist/lib/testX402Live.js +0 -160
- package/dist/lib/testX402Live.js.map +0 -1
- package/dist/scripts/checkDeploy.d.ts +0 -2
- package/dist/scripts/checkDeploy.d.ts.map +0 -1
- package/dist/scripts/checkDeploy.js +0 -25
- package/dist/scripts/checkDeploy.js.map +0 -1
- package/dist/scripts/deployRegistry.d.ts +0 -2
- package/dist/scripts/deployRegistry.d.ts.map +0 -1
- package/dist/scripts/deployRegistry.js +0 -101
- package/dist/scripts/deployRegistry.js.map +0 -1
- package/dist/scripts/testRegistry.d.ts +0 -2
- package/dist/scripts/testRegistry.d.ts.map +0 -1
- package/dist/scripts/testRegistry.js +0 -44
- package/dist/scripts/testRegistry.js.map +0 -1
package/dist/demo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AA4EA,wBAAsB,OAAO,
|
|
1
|
+
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AA4EA,wBAAsB,OAAO,kBAsJ5B"}
|
package/dist/demo.js
CHANGED
|
@@ -11,7 +11,7 @@ import { handleSafeHandsX402Preflight } from "./tools/safehandsX402Preflight.js"
|
|
|
11
11
|
import { handleX402PayAndFetch } from "./tools/x402PayAndFetch.js";
|
|
12
12
|
import { handleSendPayment } from "./tools/sendPayment.js";
|
|
13
13
|
import { handleExplainRisk } from "./tools/explainRisk.js";
|
|
14
|
-
import { CHAIN_ID, PHAROS_ENVIRONMENT,
|
|
14
|
+
import { CHAIN_ID, PHAROS_ENVIRONMENT, activeUsdcAddress, IS_MAINNET } from "./lib/constants.js";
|
|
15
15
|
const RECIPIENT = "0x0000000000000000000000000000000000000001";
|
|
16
16
|
function section(title) {
|
|
17
17
|
console.log(`\n${"═".repeat(78)}`);
|
|
@@ -51,7 +51,7 @@ async function withLocalX402DemoServer(handler) {
|
|
|
51
51
|
error: "Payment Required",
|
|
52
52
|
demo: true,
|
|
53
53
|
price: "0.001",
|
|
54
|
-
asset:
|
|
54
|
+
asset: activeUsdcAddress(),
|
|
55
55
|
network: `eip155:${CHAIN_ID}`,
|
|
56
56
|
});
|
|
57
57
|
});
|
|
@@ -82,26 +82,27 @@ export async function runDemo() {
|
|
|
82
82
|
console.log(" Mode: non-destructive demo, no real transactions broadcast");
|
|
83
83
|
section("1. Wallet Health");
|
|
84
84
|
print("safehands_wallet_health", await handleSafeHandsWalletHealth({}));
|
|
85
|
-
section("2. Safe Payment Preflight:
|
|
85
|
+
section("2. Safe Payment Preflight: PREPARE_ONLY");
|
|
86
86
|
print("safehands_preflight_check", await handleSafeHandsPreflightCheck({
|
|
87
87
|
actionType: "send_payment",
|
|
88
88
|
chainId: CHAIN_ID,
|
|
89
|
-
isMainnet:
|
|
89
|
+
isMainnet: IS_MAINNET,
|
|
90
90
|
amount: "0.001",
|
|
91
|
-
amountUnit: "
|
|
91
|
+
amountUnit: "PROS",
|
|
92
92
|
recipient: RECIPIENT,
|
|
93
93
|
}));
|
|
94
94
|
section("3. Unlimited Approval Preflight: BLOCK");
|
|
95
95
|
const blockedApproval = await handleSafeHandsPreflightCheck({
|
|
96
96
|
actionType: "approve_token",
|
|
97
97
|
chainId: CHAIN_ID,
|
|
98
|
-
isMainnet:
|
|
98
|
+
isMainnet: IS_MAINNET,
|
|
99
99
|
approvalAmount: "max",
|
|
100
|
+
approvalToken: "USDC",
|
|
100
101
|
spender: RECIPIENT,
|
|
101
102
|
});
|
|
102
103
|
print("safehands_preflight_check", blockedApproval);
|
|
103
104
|
section("4. Token Registry Status");
|
|
104
|
-
print("token_registry_status", await handleTokenRegistryStatus({ tokenAddress:
|
|
105
|
+
print("token_registry_status", await handleTokenRegistryStatus({ tokenAddress: activeUsdcAddress() }));
|
|
105
106
|
section("5. x402 Preflight Without Private Key");
|
|
106
107
|
await withLocalX402DemoServer(async (baseUrl) => {
|
|
107
108
|
const restoreLocal = setEnv("ALLOW_LOCAL_X402_FETCH", "true");
|
|
@@ -152,9 +153,43 @@ export async function runDemo() {
|
|
|
152
153
|
riskLevel: "HIGH",
|
|
153
154
|
reasons: ["Unlimited approval requested"],
|
|
154
155
|
requiredActions: ["Use a limited approval amount before approving a spender"],
|
|
156
|
+
environment: PHAROS_ENVIRONMENT,
|
|
157
|
+
chainId: CHAIN_ID,
|
|
158
|
+
isMainnet: IS_MAINNET,
|
|
155
159
|
}));
|
|
160
|
+
section("11. Tokenized-Asset (RWA) Transfer Compliance: REQUIRE_CONFIRMATION");
|
|
161
|
+
// A Real-Fi scenario: an agent asks to approve spending of a tokenized-asset
|
|
162
|
+
// contract that is NOT in the active token registry. SafeHands does not block
|
|
163
|
+
// outright — it demands human review, the transfer-restriction behavior
|
|
164
|
+
// regulated real-world assets require.
|
|
165
|
+
print("safehands_preflight_check", await handleSafeHandsPreflightCheck({
|
|
166
|
+
actionType: "approve_token",
|
|
167
|
+
chainId: CHAIN_ID,
|
|
168
|
+
isMainnet: IS_MAINNET,
|
|
169
|
+
approvalAmount: "25",
|
|
170
|
+
tokenAddress: "0x00000000000000000000000000000000000000aa", // synthetic fixture: an unregistered asset token
|
|
171
|
+
spender: RECIPIENT,
|
|
172
|
+
spenderVerified: false,
|
|
173
|
+
}));
|
|
174
|
+
section("12. Real-Fi Settlement Cap (x402/USDC): over-cap enforcement");
|
|
175
|
+
// A Real-Fi scenario: an agent tries to settle a real-world invoice over x402
|
|
176
|
+
// for 5 USDC while the active policy caps x402 settlement per call. The
|
|
177
|
+
// deterministic policy engine refuses — no model can talk it into paying.
|
|
178
|
+
await withLocalX402DemoServer(async (baseUrl) => {
|
|
179
|
+
const restoreLocal = setEnv("ALLOW_LOCAL_X402_FETCH", "true");
|
|
180
|
+
try {
|
|
181
|
+
print("safehands_x402_preflight over policy cap", await handleSafeHandsX402Preflight({
|
|
182
|
+
url: `${baseUrl}/paid`,
|
|
183
|
+
paymentAmountUsdc: "5",
|
|
184
|
+
probeEndpoint: false,
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
restoreLocal();
|
|
189
|
+
}
|
|
190
|
+
});
|
|
156
191
|
section("Demo Complete");
|
|
157
|
-
console.log("SafeHands demonstrated wallet health, ALLOW/BLOCK policy, token registry, x402 safety, SSRF blocking, write-tool guardrails,
|
|
192
|
+
console.log("SafeHands demonstrated wallet health, ALLOW/BLOCK policy, token registry, x402 safety, SSRF blocking, write-tool guardrails, explainable risk output, and Real-Fi/RWA compliance gating (unregistered-asset review + settlement caps).");
|
|
158
193
|
}
|
|
159
194
|
finally {
|
|
160
195
|
restoreWalletMode();
|
package/dist/demo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,yEAAyE;AACzE,oCAAoC;AACpC,2EAA2E;AAE3E,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AACnF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/dist/index.d.ts
CHANGED
|
File without changes
|
package/dist/index.d.ts.map
CHANGED
|
File without changes
|
package/dist/index.js
CHANGED
|
@@ -1,31 +1,32 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
// ─── SafeHands MCP Server ──────────────────────────────────────────────
|
|
3
|
-
// Entry point — registers
|
|
3
|
+
// Entry point — registers 33 tools and starts the MCP server.
|
|
4
4
|
// ────────────────────────────────────────────────────────────────────────
|
|
5
5
|
// Must be first import — loads .env before any module reads process.env at init time
|
|
6
6
|
import "./lib/envLoader.js";
|
|
7
7
|
import { createRequire } from "module";
|
|
8
|
+
import { pathToFileURL } from "url";
|
|
8
9
|
const require = createRequire(import.meta.url);
|
|
9
10
|
const PKG_VERSION = require("../package.json").version;
|
|
10
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
11
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
13
|
+
import { assessRiskTool, handleAssessRisk } from "./tools/assessRisk.js";
|
|
14
|
+
import { simulateTransactionTool, handleSimulateTransaction } from "./tools/simulateTransaction.js";
|
|
15
|
+
import { getExecutionHistoryTool, handleGetExecutionHistory } from "./tools/getExecutionHistory.js";
|
|
16
|
+
import { getTokenPriceTool, handleGetTokenPrice } from "./tools/getTokenPrice.js";
|
|
17
|
+
import { getWalletBalanceTool, handleGetWalletBalance } from "./tools/getWalletBalance.js";
|
|
18
|
+
import { checkAllowanceTool, handleCheckAllowance } from "./tools/checkAllowance.js";
|
|
19
|
+
import { getTransactionStatusTool, handleGetTransactionStatus } from "./tools/getTransactionStatus.js";
|
|
20
|
+
import { estimateGasTool, handleEstimateGas } from "./tools/estimateGas.js";
|
|
21
|
+
import { publishRiskScoreTool, handlePublishRiskScore } from "./tools/publishRiskScore.js";
|
|
22
|
+
import { queryRiskRegistryTool, handleQueryRiskRegistry } from "./tools/queryRiskRegistry.js";
|
|
23
|
+
import { verifyRiskInclusionTool, handleVerifyRiskInclusion } from "./tools/verifyRiskInclusion.js";
|
|
24
|
+
import { getAgentReputationTool, handleGetAgentReputation } from "./tools/getAgentReputation.js";
|
|
25
|
+
import { getGasPriceTool, handleGetGasPrice } from "./tools/getGasPrice.js";
|
|
26
|
+
import { getPoolInfoTool, handleGetPoolInfo } from "./tools/getPoolInfo.js";
|
|
27
|
+
import { queryGoldskySchema, handleQueryGoldsky } from "./tools/queryGoldsky.js";
|
|
28
|
+
import { getSpvProofSchema, handleGetSpvProof } from "./tools/getSpvProof.js";
|
|
29
|
+
import { checkTokenSecurityTool, handleCheckTokenSecurity } from "./tools/checkTokenSecurity.js";
|
|
29
30
|
import { createAgentWalletSchema, handleCreateAgentWallet } from "./tools/createAgentWallet.js";
|
|
30
31
|
import { safehandsPreflightCheckSchema, handleSafeHandsPreflightCheck } from "./tools/safehandsPreflightCheck.js";
|
|
31
32
|
import { safehandsSafeExecuteSchema, handleSafeHandsSafeExecute } from "./tools/safehandsSafeExecute.js";
|
|
@@ -36,19 +37,33 @@ import { explainRiskSchema, handleExplainRisk } from "./tools/explainRisk.js";
|
|
|
36
37
|
import { tokenRegistryStatusSchema, handleTokenRegistryStatus } from "./tools/tokenRegistryStatus.js";
|
|
37
38
|
import { getAgentWalletSchema, handleGetAgentWallet } from "./tools/getAgentWallet.js";
|
|
38
39
|
import { getAgentWalletBalanceSchema, handleGetAgentWalletBalance } from "./tools/getAgentWalletBalance.js";
|
|
40
|
+
import { getAgentPolicySchema, handleGetAgentPolicy } from "./tools/getAgentPolicy.js";
|
|
41
|
+
import { setAgentPolicySchema, handleSetAgentPolicy } from "./tools/setAgentPolicy.js";
|
|
42
|
+
import { executeSwapTool, handleExecuteSwap } from "./tools/executeSwap.js";
|
|
43
|
+
import { sendPaymentTool, handleSendPayment } from "./tools/sendPayment.js";
|
|
44
|
+
import { approveTokenTool, handleApproveToken } from "./tools/approveToken.js";
|
|
45
|
+
import { x402PayAndFetchTool, handleX402PayAndFetch } from "./tools/x402PayAndFetch.js";
|
|
39
46
|
import { fail, ok } from "./lib/toolResponse.js";
|
|
40
47
|
import { auditLog } from "./lib/auditLog.js";
|
|
48
|
+
import { walletStore, encryptKey, getEffectiveEncryptionKey } from "./lib/wallet/index.js";
|
|
49
|
+
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
|
|
41
50
|
import { runSkillCli } from "./cli.js";
|
|
42
51
|
import { runDemo } from "./demo.js";
|
|
43
52
|
import { runInit } from "./init.js";
|
|
53
|
+
process.on("unhandledRejection", (reason) => {
|
|
54
|
+
console.error("SafeHands MCP unhandled rejection:", reason);
|
|
55
|
+
});
|
|
56
|
+
process.on("uncaughtException", (error) => {
|
|
57
|
+
console.error("SafeHands MCP uncaught exception:", error);
|
|
58
|
+
process.exit(1);
|
|
59
|
+
});
|
|
44
60
|
// ─── Per-tool rate limiting ────────────────────────────────────────────
|
|
45
61
|
// Heavy tools (block-scan history) get a tighter limit.
|
|
46
62
|
// Write tools get a moderate limit to prevent agent loops.
|
|
47
63
|
// All other tools share a generous global limit.
|
|
48
64
|
const HEAVY_TOOLS = new Set(["get_execution_history"]);
|
|
49
65
|
const WRITE_TOOLS = new Set([
|
|
50
|
-
"
|
|
51
|
-
"publish_risk_score", "x402_pay_and_fetch", "safehands_safe_execute",
|
|
66
|
+
"publish_risk_score", "safehands_safe_execute",
|
|
52
67
|
]);
|
|
53
68
|
const RATE_LIMITS = {
|
|
54
69
|
heavy: parseInt(process.env.MCP_RATE_LIMIT_HEAVY || "5", 10),
|
|
@@ -144,103 +159,148 @@ if (isDemoMode) {
|
|
|
144
159
|
}
|
|
145
160
|
// ─── CLI Help ──────────────────────────────────────────────────────────
|
|
146
161
|
if (process.argv.includes("--help") || process.argv.includes("-h")) {
|
|
147
|
-
process.stdout.write(`
|
|
148
|
-
🛡️ SafeHands-Pharos
|
|
149
|
-
v${PKG_VERSION} | Pharos
|
|
150
|
-
|
|
151
|
-
USAGE
|
|
152
|
-
npx safehands-pharos
|
|
153
|
-
Start SafeHands as an MCP server over stdio.
|
|
154
|
-
|
|
155
|
-
npx safehands-pharos --help
|
|
156
|
-
Show this help.
|
|
157
|
-
|
|
158
|
-
npx safehands-pharos init
|
|
159
|
-
Launch the interactive setup wizard to configure your .env file safely.
|
|
160
|
-
|
|
161
|
-
npx safehands-pharos --demo
|
|
162
|
-
Run the deterministic non-destructive hackathon demo.
|
|
163
|
-
|
|
164
|
-
npx safehands-pharos skill <tool_name> --input-json '<json>'
|
|
165
|
-
Run a Pharos Skill Engine-compatible SafeHands CLI tool.
|
|
166
|
-
|
|
167
|
-
POSITIONING
|
|
168
|
-
SafeHands is
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
→
|
|
175
|
-
→
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
162
|
+
process.stdout.write(`
|
|
163
|
+
🛡️ SafeHands-Pharos: Transaction Safety Firewall for AI Agents
|
|
164
|
+
v${PKG_VERSION} | Pharos Pacific Mainnet | Chain ID 1672
|
|
165
|
+
|
|
166
|
+
USAGE
|
|
167
|
+
npx github:SZtch/safehands-pharos
|
|
168
|
+
Start SafeHands as an MCP server over stdio.
|
|
169
|
+
|
|
170
|
+
npx github:SZtch/safehands-pharos --help
|
|
171
|
+
Show this help.
|
|
172
|
+
|
|
173
|
+
npx github:SZtch/safehands-pharos init
|
|
174
|
+
Launch the interactive setup wizard to configure your .env file safely.
|
|
175
|
+
|
|
176
|
+
npx github:SZtch/safehands-pharos --demo
|
|
177
|
+
Run the deterministic non-destructive hackathon demo.
|
|
178
|
+
|
|
179
|
+
npx github:SZtch/safehands-pharos skill <tool_name> --input-json '<json>'
|
|
180
|
+
Run a Pharos Skill Engine-compatible SafeHands CLI tool.
|
|
181
|
+
|
|
182
|
+
POSITIONING
|
|
183
|
+
SafeHands is an open-source reusable Pharos Skill that gives AI agents
|
|
184
|
+
a safety gateway before on-chain actions. Mainnet-first for Pharos Pacific
|
|
185
|
+
read/check/analyze; execution/signing/managed-wallet/on-chain publishing
|
|
186
|
+
remain gated and disabled by default.
|
|
187
|
+
|
|
188
|
+
User intent
|
|
189
|
+
→ SafeHands preflight
|
|
190
|
+
→ ALLOW / BLOCK / REQUIRE_CONFIRMATION / PREPARE_ONLY
|
|
191
|
+
→ Execute only if safe
|
|
192
|
+
→ SafeHands risk report
|
|
193
|
+
|
|
194
|
+
EXECUTION MODES
|
|
195
|
+
Preflight / read-only No wallet, no key, no authorization required
|
|
196
|
+
User-signed SafeHands validates; user signs externally
|
|
197
|
+
Managed execution SafeHandsRegistry authorization + funding required
|
|
198
|
+
Env wallet (advanced) Local mainnet key, not default UX
|
|
199
|
+
Operator / demo Auto-authorize via owner key, mainnet only
|
|
200
|
+
|
|
201
|
+
SAFEHANDS TOOLS (33)
|
|
202
|
+
Safety preflight: safehands_preflight_check, safehands_x402_preflight,
|
|
203
|
+
safehands_risk_report, safehands_wallet_health,
|
|
204
|
+
explain_risk, token_registry_status, query_risk_registry,
|
|
205
|
+
verify_risk_inclusion, get_agent_reputation
|
|
206
|
+
Execution (gated): safehands_safe_execute, execute_swap, send_payment,
|
|
207
|
+
approve_token, publish_risk_score, x402_pay_and_fetch
|
|
208
|
+
Risk + analysis: assess_risk, check_token_security, simulate_transaction,
|
|
209
|
+
estimate_gas
|
|
210
|
+
Market + chain: get_token_price, get_pool_info, get_gas_price,
|
|
211
|
+
get_wallet_balance, check_allowance,
|
|
212
|
+
get_transaction_status, get_execution_history,
|
|
213
|
+
query_goldsky_subgraph, get_spv_proof
|
|
214
|
+
Agent policy: get_agent_policy, set_agent_policy
|
|
215
|
+
Managed wallet: create_agent_wallet, get_agent_wallet,
|
|
216
|
+
get_agent_wallet_balance
|
|
217
|
+
|
|
218
|
+
PHAROS PACIFIC MAINNET (default: read/check/analyze)
|
|
219
|
+
Network: Pharos Pacific Mainnet
|
|
220
|
+
Chain ID: 1672
|
|
221
|
+
Native token: PROS
|
|
222
|
+
RPC: https://rpc.pharos.xyz
|
|
223
|
+
Explorer: https://www.pharosscan.xyz
|
|
224
|
+
|
|
225
|
+
PHAROS ATLANTIC TESTNET (deprecated for execution)
|
|
226
|
+
Environment: atlantic-testnet
|
|
227
|
+
Chain ID: 688689
|
|
228
|
+
RPC: https://atlantic.dplabs-internal.com
|
|
229
|
+
Explorer: https://atlantic.pharosscan.xyz/
|
|
230
|
+
|
|
231
|
+
x402 BEHAVIOR
|
|
232
|
+
Free endpoints, such as /supported and /health, do not require a private key.
|
|
233
|
+
Paid endpoints are fetched normally first. Only after HTTP 402 does SafeHands run x402 preflight and request a signer.
|
|
234
|
+
Signed payment payloads and payment headers are not logged or returned.
|
|
235
|
+
|
|
236
|
+
DEFAULT SAFETY
|
|
237
|
+
WALLET_MODE=none
|
|
238
|
+
WRITE_TOOLS_ENABLED=false
|
|
239
|
+
ALLOW_UNLIMITED_APPROVAL=false
|
|
240
|
+
ALLOW_LOCAL_X402_FETCH=false
|
|
241
|
+
|
|
242
|
+
No wallet is created on install, import, or startup.
|
|
243
|
+
Write tools are disabled by default.
|
|
244
|
+
Unlimited approvals are blocked by default.
|
|
245
|
+
Mainnet write/payment actions are gated and disabled by default.
|
|
246
|
+
SSRF-sensitive x402 URLs are blocked by default.
|
|
247
|
+
|
|
248
|
+
EXAMPLES
|
|
249
|
+
npx github:SZtch/safehands-pharos skill safehands_preflight_check --input-json '{"actionType":"send_payment","chainId":1672,"isMainnet":true,"amount":"0.001","recipient":"0x0000000000000000000000000000000000000001"}'
|
|
250
|
+
|
|
251
|
+
npx github:SZtch/safehands-pharos skill token_registry_status --input-json '{"tokenAddress":"0xc879c018db60520f4355c26ed1a6d572cdac1815"}'
|
|
252
|
+
|
|
253
|
+
DOCS
|
|
254
|
+
README.md
|
|
227
255
|
`);
|
|
228
256
|
process.exit(0);
|
|
229
257
|
}
|
|
230
258
|
if (!isDemoMode) {
|
|
231
|
-
// ───
|
|
259
|
+
// ─── Auto-Wallet Creation ─────────────────────────────────────────────
|
|
260
|
+
// If WALLET_MODE=managed-mainnet and no default wallet exists yet,
|
|
261
|
+
// auto-create one so the user just needs to fund it.
|
|
262
|
+
const DEFAULT_AGENT_ID = "default";
|
|
232
263
|
const walletMode = process.env.WALLET_MODE || "none";
|
|
233
|
-
|
|
234
|
-
|
|
264
|
+
if (walletMode === "managed-mainnet" && process.env.MANAGED_WALLET_ENABLED === "true") {
|
|
265
|
+
const existing = await walletStore.get(DEFAULT_AGENT_ID);
|
|
266
|
+
if (!existing) {
|
|
267
|
+
try {
|
|
268
|
+
const privateKey = generatePrivateKey();
|
|
269
|
+
const account = privateKeyToAccount(privateKey);
|
|
270
|
+
const encrypted = encryptKey(privateKey, getEffectiveEncryptionKey());
|
|
271
|
+
await walletStore.set(DEFAULT_AGENT_ID, {
|
|
272
|
+
agentId: DEFAULT_AGENT_ID,
|
|
273
|
+
address: account.address,
|
|
274
|
+
encryptedKey: encrypted,
|
|
275
|
+
environment: "pacific-mainnet",
|
|
276
|
+
chainId: 1672,
|
|
277
|
+
isMainnet: true,
|
|
278
|
+
createdAt: new Date().toISOString(),
|
|
279
|
+
});
|
|
280
|
+
console.error(`🛡️ SafeHands - auto-created managed agent wallet: ${account.address}`);
|
|
281
|
+
console.error(` Fund it with PROS for gas. Use a DEDICATED low-value wallet; managed execution stays OFF until you opt in.`);
|
|
282
|
+
console.error("");
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
console.error("⚠️ SafeHands: failed to auto-create wallet. Use create_agent_wallet manually.");
|
|
286
|
+
console.error("");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
console.error(`🛡️ SafeHands - agent wallet ready: ${existing.address}`);
|
|
291
|
+
console.error("");
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// ─── Startup Validation ────────────────────────────────────────────────
|
|
295
|
+
const hasExplicitSignerMode = walletMode === "managed-mainnet" || walletMode === "env";
|
|
235
296
|
if (process.env.WRITE_TOOLS_ENABLED !== "true") {
|
|
236
|
-
console.error("⚠️ SafeHands
|
|
237
|
-
console.error("
|
|
238
|
-
console.error(" To execute trusted testnet actions, set WRITE_TOOLS_ENABLED=true and configure a signer via WALLET_MODE=managed-testnet or WALLET_MODE=env.");
|
|
297
|
+
console.error("⚠️ SafeHands: write tools are disabled. Read-only tools remain available.");
|
|
298
|
+
console.error(" To enable writes, set WRITE_TOOLS_ENABLED=true in your .env or MCP config.");
|
|
239
299
|
console.error("");
|
|
240
300
|
}
|
|
241
301
|
else if (!hasExplicitSignerMode) {
|
|
242
|
-
console.error("⚠️ SafeHands
|
|
243
|
-
console.error("
|
|
302
|
+
console.error("⚠️ SafeHands: write tools enabled but no signer mode detected.");
|
|
303
|
+
console.error(" Set WALLET_MODE=managed-mainnet or WALLET_MODE=env.");
|
|
244
304
|
console.error("");
|
|
245
305
|
}
|
|
246
306
|
// ─── Server Setup ──────────────────────────────────────────────────────
|
|
@@ -250,42 +310,59 @@ if (!isDemoMode) {
|
|
|
250
310
|
});
|
|
251
311
|
// ─── Tool Registration ─────────────────────────────────────────────────
|
|
252
312
|
server.tool("safehands_preflight_check", "Run a SafeHands policy preflight before an AI agent sends payment, approves tokens, swaps, publishes risk data, or pays x402.", safehandsPreflightCheckSchema.shape, async (params) => mcpText(await invokeTool(handleSafeHandsPreflightCheck, params, "safehands_preflight_check")));
|
|
253
|
-
server.tool("safehands_safe_execute", "Guarded execution wrapper: preflight first, then execute only allowed and explicitly confirmed
|
|
254
|
-
|
|
255
|
-
server.tool(
|
|
313
|
+
server.tool("safehands_safe_execute", "Guarded execution wrapper: preflight first, then execute only allowed and explicitly confirmed mainnet actions.", safehandsSafeExecuteSchema.shape, async (params) => mcpText(await invokeTool(handleSafeHandsSafeExecute, params, "safehands_safe_execute")));
|
|
314
|
+
// ─── Execution Tools (Gated) ───────────────────────────────────────────
|
|
315
|
+
server.tool(executeSwapTool.name, executeSwapTool.description, executeSwapTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleExecuteSwap, params, "execute_swap")));
|
|
316
|
+
server.tool(sendPaymentTool.name, sendPaymentTool.description, sendPaymentTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleSendPayment, params, "send_payment")));
|
|
317
|
+
server.tool(approveTokenTool.name, approveTokenTool.description, approveTokenTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleApproveToken, params, "approve_token")));
|
|
318
|
+
server.tool(x402PayAndFetchTool.name, x402PayAndFetchTool.description, x402PayAndFetchTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleX402PayAndFetch, params, "x402_pay_and_fetch")));
|
|
319
|
+
server.tool("safehands_wallet_health", "Check whether an AI agent wallet is funded, signer-ready, and safe to use on Pharos Mainnet.", safehandsWalletHealthSchema.shape, async (params) => mcpText(await invokeTool(handleSafeHandsWalletHealth, params, "safehands_wallet_health")));
|
|
320
|
+
server.tool("safehands_x402_preflight", "Check an x402 paid resource for URL safety, payment amount, token, signer, and mainnet policy before signing.", safehandsX402PreflightSchema.shape, async (params) => mcpText(await invokeTool(handleSafeHandsX402Preflight, params, "safehands_x402_preflight")));
|
|
256
321
|
server.tool("safehands_risk_report", "Generate an audit-friendly human-readable SafeHands risk report for an AI agent action.", safehandsRiskReportSchema.shape, async (params) => mcpText(await invokeTool(handleSafeHandsRiskReport, params, "safehands_risk_report")));
|
|
257
322
|
server.tool("explain_risk", "Explain a SafeHands risk/policy decision in human-readable language.", explainRiskSchema.shape, async (params) => mcpText(await invokeTool(handleExplainRisk, params, "explain_risk")));
|
|
258
|
-
server.tool("token_registry_status", "Classify exact token input as canonical
|
|
259
|
-
server.tool(
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
server.tool(
|
|
264
|
-
server.tool(
|
|
265
|
-
server.tool(
|
|
266
|
-
server.tool(
|
|
267
|
-
server.tool(
|
|
268
|
-
server.tool(
|
|
269
|
-
server.tool(
|
|
270
|
-
server.tool(
|
|
271
|
-
server.tool(
|
|
272
|
-
server.tool(
|
|
273
|
-
server.tool(
|
|
274
|
-
server.tool(
|
|
275
|
-
server.tool(
|
|
323
|
+
server.tool("token_registry_status", "Classify exact token input as canonical mainnet token, custom, unknown, or invalid.", tokenRegistryStatusSchema.shape, async (params) => mcpText(await invokeTool(handleTokenRegistryStatus, params, "token_registry_status")));
|
|
324
|
+
server.tool(assessRiskTool.name, assessRiskTool.description, assessRiskTool.inputSchema.shape, async (params) => {
|
|
325
|
+
const result = await handleAssessRisk(params);
|
|
326
|
+
return mcpText(result);
|
|
327
|
+
});
|
|
328
|
+
server.tool(simulateTransactionTool.name, simulateTransactionTool.description, simulateTransactionTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleSimulateTransaction, params, "simulate_transaction")));
|
|
329
|
+
server.tool(getExecutionHistoryTool.name, getExecutionHistoryTool.description, getExecutionHistoryTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetExecutionHistory, params, "get_execution_history")));
|
|
330
|
+
server.tool(getTokenPriceTool.name, getTokenPriceTool.description, getTokenPriceTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetTokenPrice, params, "get_token_price")));
|
|
331
|
+
server.tool(getWalletBalanceTool.name, getWalletBalanceTool.description, getWalletBalanceTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetWalletBalance, params, "get_wallet_balance")));
|
|
332
|
+
server.tool(checkAllowanceTool.name, checkAllowanceTool.description, checkAllowanceTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleCheckAllowance, params, "check_allowance")));
|
|
333
|
+
server.tool(getTransactionStatusTool.name, getTransactionStatusTool.description, getTransactionStatusTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetTransactionStatus, params, "get_transaction_status")));
|
|
334
|
+
server.tool(estimateGasTool.name, estimateGasTool.description, estimateGasTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleEstimateGas, params, "estimate_gas")));
|
|
335
|
+
server.tool(publishRiskScoreTool.name, publishRiskScoreTool.description, publishRiskScoreTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handlePublishRiskScore, params, "publish_risk_score")));
|
|
336
|
+
server.tool(queryRiskRegistryTool.name, queryRiskRegistryTool.description, queryRiskRegistryTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleQueryRiskRegistry, params, "query_risk_registry")));
|
|
337
|
+
server.tool(verifyRiskInclusionTool.name, verifyRiskInclusionTool.description, verifyRiskInclusionTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleVerifyRiskInclusion, params, "verify_risk_inclusion")));
|
|
338
|
+
server.tool(getAgentReputationTool.name, getAgentReputationTool.description, getAgentReputationTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetAgentReputation, params, "get_agent_reputation")));
|
|
339
|
+
server.tool(getGasPriceTool.name, getGasPriceTool.description, getGasPriceTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetGasPrice, params, "get_gas_price")));
|
|
340
|
+
server.tool(getPoolInfoTool.name, getPoolInfoTool.description, getPoolInfoTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleGetPoolInfo, params, "get_pool_info")));
|
|
341
|
+
server.tool("query_goldsky_subgraph", "Execute a GraphQL query against the configured Pharos Goldsky Subgraph endpoint to fetch historical indexing data.", queryGoldskySchema.shape, async (params) => mcpText(await invokeTool(handleQueryGoldsky, params, "query_goldsky_subgraph")));
|
|
342
|
+
server.tool("get_spv_proof", "Cryptographically verify account and storage data at a specific block height using Pharos SPV (Simplified Payment Verification).", getSpvProofSchema.shape, async (params) => mcpText(await invokeTool(handleGetSpvProof, params, "get_spv_proof")));
|
|
343
|
+
server.tool(checkTokenSecurityTool.name, checkTokenSecurityTool.description, checkTokenSecurityTool.inputSchema.shape, async (params) => mcpText(await invokeTool(handleCheckTokenSecurity, params, "check_token_security")));
|
|
344
|
+
// ─── Agent Policy Tools ───────────────────────────────────────────────
|
|
345
|
+
server.tool("get_agent_policy", "Get the active safety policy for an agent. Returns limits, flags, and profile name. Read-only.", getAgentPolicySchema.shape, async (params) => mcpText(await invokeTool(handleGetAgentPolicy, params, "get_agent_policy")));
|
|
346
|
+
server.tool("set_agent_policy", "Set or update safety policy for an agent. Choose a profile (conservative/balanced/advanced) or set custom limits. Saved to local policy file.", setAgentPolicySchema.shape, async (params) => mcpText(await invokeTool(handleSetAgentPolicy, params, "set_agent_policy")));
|
|
276
347
|
// ─── Managed Wallet Tools ──────────────────────────────────────────────
|
|
277
|
-
server.tool("create_agent_wallet", "Create a new managed
|
|
348
|
+
server.tool("create_agent_wallet", "Create a new managed mainnet agent wallet. Private key is encrypted and never returned. Fund the wallet with PROS before using write tools.", createAgentWalletSchema.shape, async (params) => mcpText(await invokeTool(handleCreateAgentWallet, params, "create_agent_wallet")));
|
|
278
349
|
server.tool("get_agent_wallet", "Get public info (address, environment, chainId) for a managed agent wallet. Never returns private key.", getAgentWalletSchema.shape, async (params) => mcpText(await invokeTool(handleGetAgentWallet, params, "get_agent_wallet")));
|
|
279
|
-
server.tool("get_agent_wallet_balance", "Get
|
|
350
|
+
server.tool("get_agent_wallet_balance", "Get PROS, USDC, and USDT balances for a managed agent wallet on Pharos Mainnet.", getAgentWalletBalanceSchema.shape, async (params) => mcpText(await invokeTool(handleGetAgentWalletBalance, params, "get_agent_wallet_balance")));
|
|
280
351
|
// ─── Start Server ──────────────────────────────────────────────────────
|
|
281
352
|
async function main() {
|
|
282
353
|
const transport = new StdioServerTransport();
|
|
283
354
|
await server.connect(transport);
|
|
355
|
+
transport.onclose = () => process.exit(0);
|
|
356
|
+
process.on("SIGINT", () => process.exit(0));
|
|
357
|
+
process.on("SIGTERM", () => process.exit(0));
|
|
284
358
|
console.error(`SafeHands-Pharos MCP Server v${PKG_VERSION} running on stdio`);
|
|
285
359
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
360
|
+
const invokedDirectly = !!process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href;
|
|
361
|
+
if (invokedDirectly) {
|
|
362
|
+
main().catch((error) => {
|
|
363
|
+
console.error("Fatal error:", error);
|
|
364
|
+
process.exit(1);
|
|
365
|
+
});
|
|
366
|
+
}
|
|
290
367
|
} // end: !isDemoMode
|
|
291
368
|
//# sourceMappingURL=index.js.map
|