@sip-protocol/sdk 0.7.3 → 0.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.
Files changed (263) hide show
  1. package/README.md +267 -0
  2. package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
  3. package/dist/browser.d.mts +10 -4
  4. package/dist/browser.d.ts +10 -4
  5. package/dist/browser.js +47556 -19603
  6. package/dist/browser.mjs +628 -48
  7. package/dist/chunk-4GRJ5MAW.mjs +152 -0
  8. package/dist/chunk-5D7A3L3W.mjs +717 -0
  9. package/dist/chunk-64AYA5F5.mjs +7834 -0
  10. package/dist/chunk-GMDGB22A.mjs +379 -0
  11. package/dist/chunk-I534WKN7.mjs +328 -0
  12. package/dist/chunk-IBZVA5Y7.mjs +1003 -0
  13. package/dist/chunk-PRRZAWJE.mjs +223 -0
  14. package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
  15. package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
  16. package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
  17. package/dist/constants-LHAAUC2T.mjs +51 -0
  18. package/dist/dist-2OGQ7FED.mjs +3957 -0
  19. package/dist/dist-IFHPYLDX.mjs +254 -0
  20. package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
  21. package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
  22. package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
  23. package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
  24. package/dist/index.d.mts +9 -3
  25. package/dist/index.d.ts +9 -3
  26. package/dist/index.js +48396 -19623
  27. package/dist/index.mjs +537 -19
  28. package/dist/interface-Bf7w1PLW.d.mts +679 -0
  29. package/dist/interface-Bf7w1PLW.d.ts +679 -0
  30. package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
  31. package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
  32. package/dist/proofs/halo2.d.mts +151 -0
  33. package/dist/proofs/halo2.d.ts +151 -0
  34. package/dist/proofs/halo2.js +350 -0
  35. package/dist/proofs/halo2.mjs +11 -0
  36. package/dist/proofs/kimchi.d.mts +160 -0
  37. package/dist/proofs/kimchi.d.ts +160 -0
  38. package/dist/proofs/kimchi.js +431 -0
  39. package/dist/proofs/kimchi.mjs +13 -0
  40. package/dist/proofs/noir.d.mts +1 -1
  41. package/dist/proofs/noir.d.ts +1 -1
  42. package/dist/proofs/noir.js +74 -18
  43. package/dist/proofs/noir.mjs +84 -24
  44. package/dist/solana-U3MEGU7W.mjs +280 -0
  45. package/dist/validity_proof-3POXLPNY.mjs +21 -0
  46. package/package.json +44 -11
  47. package/src/adapters/index.ts +41 -0
  48. package/src/adapters/jupiter.ts +571 -0
  49. package/src/adapters/near-intents.ts +135 -0
  50. package/src/advisor/advisor.ts +653 -0
  51. package/src/advisor/index.ts +54 -0
  52. package/src/advisor/tools.ts +303 -0
  53. package/src/advisor/types.ts +164 -0
  54. package/src/chains/ethereum/announcement.ts +536 -0
  55. package/src/chains/ethereum/bnb-optimizations.ts +474 -0
  56. package/src/chains/ethereum/commitment.ts +522 -0
  57. package/src/chains/ethereum/constants.ts +462 -0
  58. package/src/chains/ethereum/deployment.ts +596 -0
  59. package/src/chains/ethereum/gas-estimation.ts +538 -0
  60. package/src/chains/ethereum/index.ts +268 -0
  61. package/src/chains/ethereum/optimizations.ts +614 -0
  62. package/src/chains/ethereum/privacy-adapter.ts +855 -0
  63. package/src/chains/ethereum/registry.ts +584 -0
  64. package/src/chains/ethereum/rpc.ts +905 -0
  65. package/src/chains/ethereum/stealth.ts +491 -0
  66. package/src/chains/ethereum/token.ts +790 -0
  67. package/src/chains/ethereum/transfer.ts +637 -0
  68. package/src/chains/ethereum/types.ts +456 -0
  69. package/src/chains/ethereum/viewing-key.ts +455 -0
  70. package/src/chains/near/commitment.ts +608 -0
  71. package/src/chains/near/constants.ts +284 -0
  72. package/src/chains/near/function-call.ts +871 -0
  73. package/src/chains/near/history.ts +654 -0
  74. package/src/chains/near/implicit-account.ts +840 -0
  75. package/src/chains/near/index.ts +393 -0
  76. package/src/chains/near/native-transfer.ts +658 -0
  77. package/src/chains/near/nep141.ts +775 -0
  78. package/src/chains/near/privacy-adapter.ts +889 -0
  79. package/src/chains/near/resolver.ts +971 -0
  80. package/src/chains/near/rpc.ts +1016 -0
  81. package/src/chains/near/stealth.ts +419 -0
  82. package/src/chains/near/types.ts +317 -0
  83. package/src/chains/near/viewing-key.ts +876 -0
  84. package/src/chains/solana/anchor-transfer.ts +386 -0
  85. package/src/chains/solana/commitment.ts +577 -0
  86. package/src/chains/solana/constants.ts +126 -12
  87. package/src/chains/solana/ephemeral-keys.ts +543 -0
  88. package/src/chains/solana/index.ts +252 -1
  89. package/src/chains/solana/key-derivation.ts +418 -0
  90. package/src/chains/solana/kit-compat.ts +334 -0
  91. package/src/chains/solana/optimizations.ts +560 -0
  92. package/src/chains/solana/privacy-adapter.ts +605 -0
  93. package/src/chains/solana/providers/generic.ts +47 -6
  94. package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
  95. package/src/chains/solana/providers/helius-enhanced.ts +623 -0
  96. package/src/chains/solana/providers/helius.ts +186 -33
  97. package/src/chains/solana/providers/index.ts +31 -0
  98. package/src/chains/solana/providers/interface.ts +61 -18
  99. package/src/chains/solana/providers/quicknode.ts +409 -0
  100. package/src/chains/solana/providers/triton.ts +426 -0
  101. package/src/chains/solana/providers/webhook.ts +338 -67
  102. package/src/chains/solana/rpc-client.ts +1150 -0
  103. package/src/chains/solana/scan.ts +83 -66
  104. package/src/chains/solana/sol-transfer.ts +732 -0
  105. package/src/chains/solana/spl-transfer.ts +886 -0
  106. package/src/chains/solana/stealth-scanner.ts +703 -0
  107. package/src/chains/solana/sunspot-verifier.ts +453 -0
  108. package/src/chains/solana/transaction-builder.ts +755 -0
  109. package/src/chains/solana/transfer.ts +74 -5
  110. package/src/chains/solana/types.ts +57 -6
  111. package/src/chains/solana/utils.ts +110 -0
  112. package/src/chains/solana/viewing-key.ts +807 -0
  113. package/src/compliance/fireblocks.ts +921 -0
  114. package/src/compliance/index.ts +23 -0
  115. package/src/compliance/range-sas.ts +398 -33
  116. package/src/config/endpoints.ts +100 -0
  117. package/src/crypto.ts +11 -8
  118. package/src/errors.ts +82 -0
  119. package/src/evm/erc4337-relayer.ts +830 -0
  120. package/src/evm/index.ts +47 -0
  121. package/src/fees/calculator.ts +396 -0
  122. package/src/fees/index.ts +87 -0
  123. package/src/fees/near-contract.ts +429 -0
  124. package/src/fees/types.ts +268 -0
  125. package/src/index.ts +686 -1
  126. package/src/intent.ts +6 -3
  127. package/src/logger.ts +324 -0
  128. package/src/network/index.ts +80 -0
  129. package/src/network/proxy.ts +691 -0
  130. package/src/optimizations/index.ts +541 -0
  131. package/src/oracle/types.ts +1 -0
  132. package/src/privacy-backends/arcium-types.ts +727 -0
  133. package/src/privacy-backends/arcium.ts +719 -0
  134. package/src/privacy-backends/combined-privacy.ts +866 -0
  135. package/src/privacy-backends/cspl-token.ts +595 -0
  136. package/src/privacy-backends/cspl-types.ts +512 -0
  137. package/src/privacy-backends/cspl.ts +907 -0
  138. package/src/privacy-backends/health.ts +488 -0
  139. package/src/privacy-backends/inco-types.ts +323 -0
  140. package/src/privacy-backends/inco.ts +616 -0
  141. package/src/privacy-backends/index.ts +254 -4
  142. package/src/privacy-backends/interface.ts +649 -6
  143. package/src/privacy-backends/lru-cache.ts +343 -0
  144. package/src/privacy-backends/magicblock.ts +458 -0
  145. package/src/privacy-backends/mock.ts +258 -0
  146. package/src/privacy-backends/privacycash.ts +13 -17
  147. package/src/privacy-backends/private-swap.ts +570 -0
  148. package/src/privacy-backends/rate-limiter.ts +683 -0
  149. package/src/privacy-backends/registry.ts +414 -2
  150. package/src/privacy-backends/router.ts +283 -3
  151. package/src/privacy-backends/shadowwire.ts +449 -0
  152. package/src/privacy-backends/sip-native.ts +3 -0
  153. package/src/privacy-logger.ts +191 -0
  154. package/src/production-safety.ts +373 -0
  155. package/src/proofs/aggregator.ts +1029 -0
  156. package/src/proofs/browser-composer.ts +1150 -0
  157. package/src/proofs/browser.ts +113 -25
  158. package/src/proofs/cache/index.ts +127 -0
  159. package/src/proofs/cache/interface.ts +545 -0
  160. package/src/proofs/cache/key-generator.ts +188 -0
  161. package/src/proofs/cache/lru-cache.ts +481 -0
  162. package/src/proofs/cache/multi-tier-cache.ts +575 -0
  163. package/src/proofs/cache/persistent-cache.ts +788 -0
  164. package/src/proofs/compliance-proof.ts +872 -0
  165. package/src/proofs/composer/base.ts +923 -0
  166. package/src/proofs/composer/index.ts +25 -0
  167. package/src/proofs/composer/interface.ts +518 -0
  168. package/src/proofs/composer/types.ts +383 -0
  169. package/src/proofs/converters/halo2.ts +452 -0
  170. package/src/proofs/converters/index.ts +208 -0
  171. package/src/proofs/converters/interface.ts +363 -0
  172. package/src/proofs/converters/kimchi.ts +462 -0
  173. package/src/proofs/converters/noir.ts +451 -0
  174. package/src/proofs/fallback.ts +888 -0
  175. package/src/proofs/halo2.ts +42 -0
  176. package/src/proofs/index.ts +471 -0
  177. package/src/proofs/interface.ts +13 -0
  178. package/src/proofs/kimchi.ts +42 -0
  179. package/src/proofs/lazy.ts +1004 -0
  180. package/src/proofs/mock.ts +25 -1
  181. package/src/proofs/noir.ts +110 -29
  182. package/src/proofs/orchestrator.ts +960 -0
  183. package/src/proofs/parallel/concurrency.ts +297 -0
  184. package/src/proofs/parallel/dependency-graph.ts +602 -0
  185. package/src/proofs/parallel/executor.ts +420 -0
  186. package/src/proofs/parallel/index.ts +131 -0
  187. package/src/proofs/parallel/interface.ts +685 -0
  188. package/src/proofs/parallel/worker-pool.ts +644 -0
  189. package/src/proofs/providers/halo2.ts +560 -0
  190. package/src/proofs/providers/index.ts +34 -0
  191. package/src/proofs/providers/kimchi.ts +641 -0
  192. package/src/proofs/validator.ts +881 -0
  193. package/src/proofs/verifier.ts +867 -0
  194. package/src/quantum/index.ts +112 -0
  195. package/src/quantum/winternitz-vault.ts +639 -0
  196. package/src/quantum/wots.ts +611 -0
  197. package/src/settlement/backends/direct-chain.ts +1 -0
  198. package/src/settlement/index.ts +9 -0
  199. package/src/settlement/router.ts +732 -46
  200. package/src/solana/index.ts +72 -0
  201. package/src/solana/jito-relayer.ts +687 -0
  202. package/src/solana/noir-verifier-types.ts +430 -0
  203. package/src/solana/noir-verifier.ts +816 -0
  204. package/src/stealth/address-derivation.ts +193 -0
  205. package/src/stealth/ed25519.ts +431 -0
  206. package/src/stealth/index.ts +233 -0
  207. package/src/stealth/meta-address.ts +221 -0
  208. package/src/stealth/secp256k1.ts +368 -0
  209. package/src/stealth/utils.ts +194 -0
  210. package/src/stealth.ts +50 -1504
  211. package/src/sync/index.ts +106 -0
  212. package/src/sync/manager.ts +504 -0
  213. package/src/sync/mock-provider.ts +318 -0
  214. package/src/sync/oblivious.ts +625 -0
  215. package/src/tokens/index.ts +15 -0
  216. package/src/tokens/registry.ts +301 -0
  217. package/src/utils/deprecation.ts +94 -0
  218. package/src/utils/index.ts +9 -0
  219. package/src/wallet/ethereum/index.ts +68 -0
  220. package/src/wallet/ethereum/metamask-privacy.ts +420 -0
  221. package/src/wallet/ethereum/multi-wallet.ts +646 -0
  222. package/src/wallet/ethereum/privacy-adapter.ts +700 -0
  223. package/src/wallet/ethereum/types.ts +3 -1
  224. package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
  225. package/src/wallet/hardware/index.ts +10 -0
  226. package/src/wallet/hardware/ledger-privacy.ts +414 -0
  227. package/src/wallet/index.ts +71 -0
  228. package/src/wallet/near/adapter.ts +626 -0
  229. package/src/wallet/near/index.ts +86 -0
  230. package/src/wallet/near/meteor-wallet.ts +1153 -0
  231. package/src/wallet/near/my-near-wallet.ts +790 -0
  232. package/src/wallet/near/wallet-selector.ts +702 -0
  233. package/src/wallet/solana/adapter.ts +6 -4
  234. package/src/wallet/solana/index.ts +13 -0
  235. package/src/wallet/solana/privacy-adapter.ts +567 -0
  236. package/src/wallet/sui/types.ts +6 -4
  237. package/src/zcash/rpc-client.ts +13 -6
  238. package/dist/chunk-2XIVXWHA.mjs +0 -1930
  239. package/dist/chunk-3INS3PR5.mjs +0 -884
  240. package/dist/chunk-3OVABDRH.mjs +0 -17096
  241. package/dist/chunk-7RFRWDCW.mjs +0 -1504
  242. package/dist/chunk-DLDWZFYC.mjs +0 -1495
  243. package/dist/chunk-E6SZWREQ.mjs +0 -57
  244. package/dist/chunk-F6F73W35.mjs +0 -16166
  245. package/dist/chunk-G33LB27A.mjs +0 -16166
  246. package/dist/chunk-HGU6HZRC.mjs +0 -231
  247. package/dist/chunk-L2K34JCU.mjs +0 -1496
  248. package/dist/chunk-OFDBEIEK.mjs +0 -16166
  249. package/dist/chunk-SF7YSLF5.mjs +0 -1515
  250. package/dist/chunk-SN4ZDTVW.mjs +0 -16166
  251. package/dist/chunk-WWUSGOXE.mjs +0 -17129
  252. package/dist/constants-VOI7BSLK.mjs +0 -27
  253. package/dist/index-B71aXVzk.d.ts +0 -13264
  254. package/dist/index-BYZbDjal.d.ts +0 -11390
  255. package/dist/index-CHB3KuOB.d.mts +0 -11859
  256. package/dist/index-CzWPI6Le.d.ts +0 -11859
  257. package/dist/index-pOIIuwfV.d.mts +0 -13264
  258. package/dist/index-xbWjohNq.d.mts +0 -11390
  259. package/dist/solana-4O4K45VU.mjs +0 -46
  260. package/dist/solana-5EMCTPTS.mjs +0 -46
  261. package/dist/solana-NDABAZ6P.mjs +0 -56
  262. package/dist/solana-Q4NAVBTS.mjs +0 -46
  263. package/dist/solana-ZYO63LY5.mjs +0 -46
@@ -0,0 +1,303 @@
1
+ /**
2
+ * Privacy Advisor LangChain Tools
3
+ *
4
+ * Tools for the Privacy Advisor Agent to analyze wallets and provide recommendations.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+
9
+ import { z } from 'zod'
10
+ import { DynamicStructuredTool } from '@langchain/core/tools'
11
+ import { SurveillanceAnalyzer } from '../surveillance/analyzer'
12
+ import type { FullAnalysisResult, PrivacyRecommendation as SurveillanceRecommendation } from '../surveillance/types'
13
+
14
+ /**
15
+ * Configuration for creating tools
16
+ */
17
+ export interface ToolsConfig {
18
+ /** Helius API key */
19
+ heliusApiKey: string
20
+ /** Solana cluster */
21
+ cluster?: 'mainnet-beta' | 'devnet'
22
+ /** Maximum transactions to analyze */
23
+ maxTransactions?: number
24
+ }
25
+
26
+ /**
27
+ * Create the analyze wallet tool
28
+ *
29
+ * @param config - Tool configuration
30
+ * @returns LangChain tool for wallet analysis
31
+ */
32
+ export function createAnalyzeWalletTool(config: ToolsConfig): DynamicStructuredTool {
33
+ const analyzer = new SurveillanceAnalyzer({
34
+ heliusApiKey: config.heliusApiKey,
35
+ cluster: config.cluster ?? 'mainnet-beta',
36
+ maxTransactions: config.maxTransactions ?? 500,
37
+ includeSocialLinks: true,
38
+ })
39
+
40
+ return new DynamicStructuredTool({
41
+ name: 'analyze_wallet',
42
+ description: 'Analyze a Solana wallet for privacy risks and surveillance exposure. Returns detailed privacy score and risk breakdown.',
43
+ schema: z.object({
44
+ address: z.string().describe('The Solana wallet address to analyze (base58 encoded)'),
45
+ }),
46
+ func: async ({ address }): Promise<string> => {
47
+ try {
48
+ const result = await analyzer.analyze(address)
49
+ return formatAnalysisResult(result)
50
+ } catch (error) {
51
+ const message = error instanceof Error ? error.message : 'Unknown error'
52
+ return JSON.stringify({
53
+ error: true,
54
+ message: `Failed to analyze wallet: ${message}`,
55
+ })
56
+ }
57
+ },
58
+ })
59
+ }
60
+
61
+ /**
62
+ * Create the quick score tool for faster analysis
63
+ *
64
+ * @param config - Tool configuration
65
+ * @returns LangChain tool for quick scoring
66
+ */
67
+ export function createQuickScoreTool(config: ToolsConfig): DynamicStructuredTool {
68
+ const analyzer = new SurveillanceAnalyzer({
69
+ heliusApiKey: config.heliusApiKey,
70
+ cluster: config.cluster ?? 'mainnet-beta',
71
+ maxTransactions: 100,
72
+ includeSocialLinks: false,
73
+ })
74
+
75
+ return new DynamicStructuredTool({
76
+ name: 'quick_privacy_score',
77
+ description: 'Get a quick privacy score for a wallet without full analysis. Faster but less detailed.',
78
+ schema: z.object({
79
+ address: z.string().describe('The Solana wallet address to score'),
80
+ }),
81
+ func: async ({ address }): Promise<string> => {
82
+ try {
83
+ const result = await analyzer.quickScore(address)
84
+ return JSON.stringify({
85
+ score: result.score,
86
+ risk: result.risk,
87
+ topIssue: result.topIssue,
88
+ summary: getQuickSummary(result.score),
89
+ })
90
+ } catch (error) {
91
+ const message = error instanceof Error ? error.message : 'Unknown error'
92
+ return JSON.stringify({
93
+ error: true,
94
+ message: `Failed to get quick score: ${message}`,
95
+ })
96
+ }
97
+ },
98
+ })
99
+ }
100
+
101
+ /**
102
+ * Create the SIP comparison tool
103
+ *
104
+ * @returns LangChain tool for SIP protection comparison
105
+ */
106
+ export function createSIPComparisonTool(): DynamicStructuredTool {
107
+ return new DynamicStructuredTool({
108
+ name: 'sip_protection_comparison',
109
+ description: 'Calculate how much a privacy score would improve with SIP Protocol protection.',
110
+ schema: z.object({
111
+ currentScore: z.number().min(0).max(100).describe('Current privacy score'),
112
+ addressReuseScore: z.number().min(0).max(25).describe('Address reuse score component'),
113
+ clusterScore: z.number().min(0).max(25).describe('Cluster exposure score component'),
114
+ }),
115
+ func: async ({ currentScore, addressReuseScore, clusterScore }): Promise<string> => {
116
+ // SIP stealth addresses eliminate address reuse and cluster linking
117
+ const maxAddressImprovement = 25 - addressReuseScore
118
+ const maxClusterImprovement = 25 - clusterScore
119
+
120
+ // SIP typically provides 80-90% of theoretical maximum improvement
121
+ const addressImprovement = Math.round(maxAddressImprovement * 0.85)
122
+ const clusterImprovement = Math.round(maxClusterImprovement * 0.80)
123
+ const totalImprovement = addressImprovement + clusterImprovement
124
+
125
+ const projectedScore = Math.min(100, currentScore + totalImprovement)
126
+
127
+ return JSON.stringify({
128
+ currentScore,
129
+ projectedScore,
130
+ improvement: totalImprovement,
131
+ breakdown: {
132
+ addressReuse: {
133
+ current: addressReuseScore,
134
+ projected: addressReuseScore + addressImprovement,
135
+ reason: 'Stealth addresses prevent address reuse',
136
+ },
137
+ cluster: {
138
+ current: clusterScore,
139
+ projected: clusterScore + clusterImprovement,
140
+ reason: 'Each stealth address is unlinkable',
141
+ },
142
+ },
143
+ recommendation: totalImprovement > 20
144
+ ? 'SIP Protocol would significantly improve your privacy'
145
+ : totalImprovement > 10
146
+ ? 'SIP Protocol would moderately improve your privacy'
147
+ : 'Your privacy is already good, but SIP can help maintain it',
148
+ })
149
+ },
150
+ })
151
+ }
152
+
153
+ /**
154
+ * Create the explain concept tool
155
+ *
156
+ * @returns LangChain tool for explaining privacy concepts
157
+ */
158
+ export function createExplainTool(): DynamicStructuredTool {
159
+ const explanations: Record<string, string> = {
160
+ 'stealth-address': 'A stealth address is like a P.O. Box that automatically changes after each delivery. When someone sends you crypto, it goes to a unique address that only you can access. Even if someone knows your main address, they cannot link all your received payments together.',
161
+ 'pedersen-commitment': 'A Pedersen commitment is like a sealed envelope with a number inside. You can prove the envelope contains a valid number without opening it. This lets blockchain verify transactions are correct without revealing the actual amounts.',
162
+ 'viewing-key': 'A viewing key is like giving someone read-only access to your bank statements. They can see your transactions but cannot spend your money. This is useful for tax preparers, auditors, or proving funds to a lender.',
163
+ 'address-reuse': 'Address reuse is when you receive multiple payments to the same address. This is bad for privacy because anyone watching that address can see all your incoming payments and potentially link them to your identity.',
164
+ 'cluster-analysis': 'Cluster analysis is a technique used to link multiple wallet addresses to the same owner. By analyzing transaction patterns (like which addresses send to each other or appear together), analysts can de-anonymize users.',
165
+ 'privacy-score': 'Your privacy score (0-100) measures how resistant your wallet is to surveillance. Higher is better. It considers: address reuse (are you using the same address?), cluster exposure (can your wallets be linked?), exchange interactions (do KYC exchanges know you?), and timing patterns.',
166
+ }
167
+
168
+ return new DynamicStructuredTool({
169
+ name: 'explain_privacy_concept',
170
+ description: 'Explain a privacy concept in simple terms',
171
+ schema: z.object({
172
+ concept: z.enum([
173
+ 'stealth-address',
174
+ 'pedersen-commitment',
175
+ 'viewing-key',
176
+ 'address-reuse',
177
+ 'cluster-analysis',
178
+ 'privacy-score',
179
+ ]).describe('The concept to explain'),
180
+ }),
181
+ func: async ({ concept }): Promise<string> => {
182
+ return explanations[concept] ?? 'I don\'t have an explanation for that concept yet.'
183
+ },
184
+ })
185
+ }
186
+
187
+ /**
188
+ * Format analysis result for the agent
189
+ */
190
+ function formatAnalysisResult(result: FullAnalysisResult): string {
191
+ const { privacyScore, addressReuse, cluster, exchangeExposure, temporalPatterns, sipComparison } = result
192
+
193
+ // Format recommendations for readability
194
+ const topRecommendations = privacyScore.recommendations
195
+ .slice(0, 5)
196
+ .map((rec: SurveillanceRecommendation, i: number) => ({
197
+ rank: i + 1,
198
+ title: rec.title,
199
+ action: rec.action,
200
+ severity: rec.severity,
201
+ potentialGain: rec.potentialGain,
202
+ }))
203
+
204
+ return JSON.stringify({
205
+ // Summary
206
+ overall: {
207
+ score: privacyScore.overall,
208
+ risk: privacyScore.risk,
209
+ analyzedAt: new Date(privacyScore.analyzedAt).toISOString(),
210
+ },
211
+
212
+ // Score breakdown
213
+ breakdown: privacyScore.breakdown,
214
+
215
+ // Key findings
216
+ findings: {
217
+ addressReuse: {
218
+ count: addressReuse.totalReuseCount,
219
+ severity: addressReuse.scoreDeduction > 15 ? 'critical' : addressReuse.scoreDeduction > 8 ? 'high' : 'medium',
220
+ mostReused: addressReuse.reusedAddresses.slice(0, 3),
221
+ },
222
+ clusterExposure: {
223
+ linkedAddresses: cluster.linkedAddressCount,
224
+ confidence: cluster.confidence,
225
+ clusters: cluster.clusters.length,
226
+ },
227
+ exchangeExposure: {
228
+ exchanges: exchangeExposure.exchangeCount,
229
+ deposits: exchangeExposure.depositCount,
230
+ withdrawals: exchangeExposure.withdrawalCount,
231
+ kycExchanges: exchangeExposure.exchanges.filter((e: { kycRequired: boolean }) => e.kycRequired).length,
232
+ },
233
+ temporalPatterns: {
234
+ patternsFound: temporalPatterns.patterns.length,
235
+ inferredTimezone: temporalPatterns.inferredTimezone,
236
+ patterns: temporalPatterns.patterns.map((p: { type: string; confidence: number }) => ({
237
+ type: p.type,
238
+ confidence: p.confidence,
239
+ })),
240
+ },
241
+ },
242
+
243
+ // SIP improvement projection
244
+ sipComparison: {
245
+ currentScore: sipComparison.currentScore,
246
+ projectedScore: sipComparison.projectedScore,
247
+ improvement: sipComparison.improvement,
248
+ },
249
+
250
+ // Top recommendations
251
+ recommendations: topRecommendations,
252
+
253
+ // Transaction count analyzed
254
+ transactionCount: result.transactionCount,
255
+ }, null, 2)
256
+ }
257
+
258
+ /**
259
+ * Get a quick summary based on score
260
+ */
261
+ function getQuickSummary(score: number): string {
262
+ if (score >= 80) {
263
+ return 'Excellent privacy. Your wallet shows minimal surveillance exposure.'
264
+ } else if (score >= 60) {
265
+ return 'Good privacy with some room for improvement. Consider using stealth addresses.'
266
+ } else if (score >= 40) {
267
+ return 'Moderate privacy risks detected. Your wallet activity may be trackable.'
268
+ } else if (score >= 20) {
269
+ return 'High privacy risks. Your wallet is significantly exposed to surveillance.'
270
+ } else {
271
+ return 'Critical privacy risks. Your wallet activity is highly visible to analysts.'
272
+ }
273
+ }
274
+
275
+ /**
276
+ * Create all tools for the Privacy Advisor agent
277
+ *
278
+ * @param config - Tool configuration
279
+ * @returns Array of LangChain tools
280
+ *
281
+ * @example
282
+ * ```typescript
283
+ * const tools = createPrivacyAdvisorTools({
284
+ * heliusApiKey: process.env.HELIUS_API_KEY!,
285
+ * cluster: 'mainnet-beta',
286
+ * })
287
+ *
288
+ * // Use with LangChain agent
289
+ * const agent = await createOpenAIToolsAgent({
290
+ * llm: model,
291
+ * tools,
292
+ * prompt,
293
+ * })
294
+ * ```
295
+ */
296
+ export function createPrivacyAdvisorTools(config: ToolsConfig): DynamicStructuredTool[] {
297
+ return [
298
+ createAnalyzeWalletTool(config),
299
+ createQuickScoreTool(config),
300
+ createSIPComparisonTool(),
301
+ createExplainTool(),
302
+ ]
303
+ }
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Privacy Advisor Agent Types
3
+ *
4
+ * Type definitions for the LangChain-powered Privacy Advisor Agent
5
+ * that provides intelligent, contextual privacy recommendations.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ import type { FullAnalysisResult, RiskLevel } from '../surveillance/types'
11
+
12
+ /**
13
+ * Advisor message role
14
+ */
15
+ export type AdvisorRole = 'user' | 'assistant' | 'system'
16
+
17
+ /**
18
+ * Chat message for the advisor
19
+ */
20
+ export interface AdvisorMessage {
21
+ /** Message role */
22
+ role: AdvisorRole
23
+ /** Message content */
24
+ content: string
25
+ /** Timestamp */
26
+ timestamp: number
27
+ }
28
+
29
+ /**
30
+ * Advisor recommendation with priority and actionability
31
+ */
32
+ export interface AdvisorRecommendation {
33
+ /** Unique identifier */
34
+ id: string
35
+ /** Priority level (1 = highest) */
36
+ priority: number
37
+ /** Recommendation title */
38
+ title: string
39
+ /** Plain-English explanation */
40
+ explanation: string
41
+ /** Step-by-step action items */
42
+ actions: string[]
43
+ /** Expected privacy score improvement */
44
+ expectedImprovement: number
45
+ /** Difficulty level */
46
+ difficulty: 'easy' | 'medium' | 'hard'
47
+ /** Estimated time to implement */
48
+ estimatedTime: string
49
+ /** Whether SIP Protocol can automate this */
50
+ canAutomate: boolean
51
+ }
52
+
53
+ /**
54
+ * Privacy advisory report generated by the agent
55
+ */
56
+ export interface PrivacyAdvisoryReport {
57
+ /** Wallet address analyzed */
58
+ walletAddress: string
59
+ /** Current privacy score */
60
+ currentScore: number
61
+ /** Risk level assessment */
62
+ riskLevel: RiskLevel
63
+ /** Executive summary (2-3 sentences) */
64
+ summary: string
65
+ /** Prioritized recommendations */
66
+ recommendations: AdvisorRecommendation[]
67
+ /** Key risks explained in plain language */
68
+ keyRisks: Array<{
69
+ category: string
70
+ description: string
71
+ severity: RiskLevel
72
+ }>
73
+ /** SIP Protocol benefits if adopted */
74
+ sipBenefits: {
75
+ projectedScore: number
76
+ improvement: number
77
+ features: string[]
78
+ }
79
+ /** Report generation timestamp */
80
+ generatedAt: number
81
+ }
82
+
83
+ /**
84
+ * Advisor agent configuration
85
+ */
86
+ export interface PrivacyAdvisorConfig {
87
+ /** OpenAI API key */
88
+ openaiApiKey: string
89
+ /** Model to use (default: gpt-4o-mini for cost efficiency) */
90
+ model?: 'gpt-4o-mini' | 'gpt-4o' | 'gpt-4-turbo'
91
+ /** Temperature for responses (0-1, default: 0.3) */
92
+ temperature?: number
93
+ /** Maximum tokens per response (default: 1024) */
94
+ maxTokens?: number
95
+ /** Enable verbose logging */
96
+ verbose?: boolean
97
+ }
98
+
99
+ /**
100
+ * Analysis context passed to the advisor
101
+ */
102
+ export interface AdvisoryContext {
103
+ /** Full surveillance analysis result */
104
+ analysisResult: FullAnalysisResult
105
+ /** User's question or request (optional) */
106
+ userQuery?: string
107
+ /** Previous conversation messages */
108
+ conversationHistory?: AdvisorMessage[]
109
+ /** User preferences */
110
+ preferences?: {
111
+ /** Prioritize automation over manual steps */
112
+ preferAutomation?: boolean
113
+ /** Technical skill level */
114
+ technicalLevel?: 'beginner' | 'intermediate' | 'advanced'
115
+ /** Focus areas */
116
+ focusAreas?: Array<'privacy' | 'compliance' | 'convenience'>
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Advisor response
122
+ */
123
+ export interface AdvisorResponse {
124
+ /** Response message */
125
+ message: string
126
+ /** Generated report (if analysis was requested) */
127
+ report?: PrivacyAdvisoryReport
128
+ /** Suggested follow-up questions */
129
+ suggestedQuestions?: string[]
130
+ /** Token usage */
131
+ usage?: {
132
+ promptTokens: number
133
+ completionTokens: number
134
+ totalTokens: number
135
+ estimatedCost: number
136
+ }
137
+ }
138
+
139
+ /**
140
+ * Tool execution result for LangChain tools
141
+ */
142
+ export interface ToolResult<T = unknown> {
143
+ /** Whether the tool executed successfully */
144
+ success: boolean
145
+ /** Result data */
146
+ data?: T
147
+ /** Error message if failed */
148
+ error?: string
149
+ }
150
+
151
+ /**
152
+ * Advisor status for React integration
153
+ */
154
+ export type AdvisorStatus =
155
+ | 'idle'
156
+ | 'analyzing'
157
+ | 'thinking'
158
+ | 'responding'
159
+ | 'error'
160
+
161
+ /**
162
+ * Streaming callback for real-time responses
163
+ */
164
+ export type StreamCallback = (chunk: string) => void