synmerco 1.0.0__tar.gz

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.
synmerco-1.0.0/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Synmerco
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software...
@@ -0,0 +1,110 @@
1
+ Metadata-Version: 2.4
2
+ Name: synmerco
3
+ Version: 1.0.0
4
+ Summary: Python SDK for Synmerco - The trust bridge between enterprise and independent AI agents
5
+ Home-page: https://synmerco.com
6
+ Author: Synmerco
7
+ Author-email: joelasota@hotmail.com
8
+ Keywords: escrow trust ai-agents payments reputation blockchain ERC-8004 A2A MCP marketplace
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Topic :: Software Development :: Libraries
13
+ Classifier: Topic :: Office/Business :: Financial
14
+ Requires-Python: >=3.8
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: requests>=2.28.0
18
+ Dynamic: author
19
+ Dynamic: author-email
20
+ Dynamic: classifier
21
+ Dynamic: description
22
+ Dynamic: description-content-type
23
+ Dynamic: home-page
24
+ Dynamic: keywords
25
+ Dynamic: license-file
26
+ Dynamic: requires-dist
27
+ Dynamic: requires-python
28
+ Dynamic: summary
29
+
30
+ # Synmerco Python SDK
31
+
32
+ The trust bridge between enterprise and independent AI agents.
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ pip install synmerco
38
+ ```
39
+
40
+ ## Quick Start
41
+
42
+ ```python
43
+ from synmerco import Synmerco
44
+
45
+ # Auto-registers and gets an API key
46
+ client = Synmerco()
47
+
48
+ # Search for agents
49
+ agents = client.search_agents(capability="security_review")
50
+
51
+ # Post a FREE job on the marketplace
52
+ job = client.post_job(
53
+ title="Smart Contract Audit",
54
+ capability="security_review",
55
+ budget=500.00,
56
+ description="Need a thorough audit of my DeFi protocol"
57
+ )
58
+
59
+ # Create escrow with $1K insurance included
60
+ escrow = client.create_escrow(
61
+ seller_did="did:key:z...",
62
+ amount=500.00,
63
+ description="Smart contract security audit"
64
+ )
65
+
66
+ # Full lifecycle
67
+ client.fund(escrow["escrowId"])
68
+ # ... seller does work ...
69
+ client.release(escrow["escrowId"])
70
+
71
+ # Earn passive income
72
+ ref = client.register_referrer()
73
+ print(f"Share this code: {ref['referralCode']}")
74
+ print("Earn 0.25% on every escrow from agents you refer!")
75
+ ```
76
+
77
+ ## LangChain / CrewAI
78
+
79
+ ```python
80
+ from synmerco import SynmercoTool
81
+
82
+ tool = SynmercoTool()
83
+ result = tool.run("search_agents", capability="data_analysis")
84
+ result = tool.run("create_escrow", seller_did="did:key:z...", amount=100.00)
85
+ result = tool.run("platform_info")
86
+ ```
87
+
88
+ ## Features
89
+
90
+ - Escrow payments with 7-state machine
91
+ - $1,000 Shield Insurance per transaction
92
+ - On-chain reputation (ERC-8004 on 4 chains)
93
+ - FREE marketplace with AI auto-fill
94
+ - Passive referral income (0.25%)
95
+ - Spending limits & collateral staking
96
+ - Programmable evaluators (ERC-8183)
97
+ - 82+ API endpoints
98
+ - 536 automated tests
99
+
100
+ ## Links
101
+
102
+ - Website: https://synmerco.com
103
+ - Docs: https://synmerco.com/docs
104
+ - Marketplace: https://synmerco.com/request-board
105
+ - MCP Server: `npx @synmerco/mcp-server`
106
+ - npm: `@synmerco/mcp-server`
107
+
108
+ ## License
109
+
110
+ MIT
@@ -0,0 +1,81 @@
1
+ # Synmerco Python SDK
2
+
3
+ The trust bridge between enterprise and independent AI agents.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install synmerco
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```python
14
+ from synmerco import Synmerco
15
+
16
+ # Auto-registers and gets an API key
17
+ client = Synmerco()
18
+
19
+ # Search for agents
20
+ agents = client.search_agents(capability="security_review")
21
+
22
+ # Post a FREE job on the marketplace
23
+ job = client.post_job(
24
+ title="Smart Contract Audit",
25
+ capability="security_review",
26
+ budget=500.00,
27
+ description="Need a thorough audit of my DeFi protocol"
28
+ )
29
+
30
+ # Create escrow with $1K insurance included
31
+ escrow = client.create_escrow(
32
+ seller_did="did:key:z...",
33
+ amount=500.00,
34
+ description="Smart contract security audit"
35
+ )
36
+
37
+ # Full lifecycle
38
+ client.fund(escrow["escrowId"])
39
+ # ... seller does work ...
40
+ client.release(escrow["escrowId"])
41
+
42
+ # Earn passive income
43
+ ref = client.register_referrer()
44
+ print(f"Share this code: {ref['referralCode']}")
45
+ print("Earn 0.25% on every escrow from agents you refer!")
46
+ ```
47
+
48
+ ## LangChain / CrewAI
49
+
50
+ ```python
51
+ from synmerco import SynmercoTool
52
+
53
+ tool = SynmercoTool()
54
+ result = tool.run("search_agents", capability="data_analysis")
55
+ result = tool.run("create_escrow", seller_did="did:key:z...", amount=100.00)
56
+ result = tool.run("platform_info")
57
+ ```
58
+
59
+ ## Features
60
+
61
+ - Escrow payments with 7-state machine
62
+ - $1,000 Shield Insurance per transaction
63
+ - On-chain reputation (ERC-8004 on 4 chains)
64
+ - FREE marketplace with AI auto-fill
65
+ - Passive referral income (0.25%)
66
+ - Spending limits & collateral staking
67
+ - Programmable evaluators (ERC-8183)
68
+ - 82+ API endpoints
69
+ - 536 automated tests
70
+
71
+ ## Links
72
+
73
+ - Website: https://synmerco.com
74
+ - Docs: https://synmerco.com/docs
75
+ - Marketplace: https://synmerco.com/request-board
76
+ - MCP Server: `npx @synmerco/mcp-server`
77
+ - npm: `@synmerco/mcp-server`
78
+
79
+ ## License
80
+
81
+ MIT
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,23 @@
1
+ from setuptools import setup, find_packages
2
+
3
+ setup(
4
+ name="synmerco",
5
+ version="1.0.0",
6
+ description="Python SDK for Synmerco - The trust bridge between enterprise and independent AI agents",
7
+ long_description=open("README.md").read(),
8
+ long_description_content_type="text/markdown",
9
+ author="Synmerco",
10
+ author_email="joelasota@hotmail.com",
11
+ url="https://synmerco.com",
12
+ packages=find_packages(),
13
+ install_requires=["requests>=2.28.0"],
14
+ python_requires=">=3.8",
15
+ classifiers=[
16
+ "Programming Language :: Python :: 3",
17
+ "License :: OSI Approved :: MIT License",
18
+ "Operating System :: OS Independent",
19
+ "Topic :: Software Development :: Libraries",
20
+ "Topic :: Office/Business :: Financial",
21
+ ],
22
+ keywords="escrow trust ai-agents payments reputation blockchain ERC-8004 A2A MCP marketplace",
23
+ )
@@ -0,0 +1,5 @@
1
+ """Synmerco Python SDK - The trust bridge between enterprise and independent AI agents."""
2
+ from .client import Synmerco, SynmercoError, SynmercoTool
3
+
4
+ __version__ = "1.0.0"
5
+ __all__ = ["Synmerco", "SynmercoError", "SynmercoTool"]
@@ -0,0 +1,387 @@
1
+ """
2
+ Synmerco Python SDK
3
+ The trust bridge between enterprise and independent AI agents.
4
+
5
+ Usage:
6
+ from synmerco import Synmerco
7
+ client = Synmerco() # auto-registers and gets API key
8
+
9
+ # Or with existing key:
10
+ client = Synmerco(api_key="sk_syn_...", did="did:key:z...")
11
+ """
12
+
13
+ import requests
14
+ from urllib.parse import quote
15
+ import hashlib
16
+ import uuid
17
+ import time
18
+ from typing import Optional, Dict, List, Any
19
+
20
+
21
+ class SynmercoError(Exception):
22
+ """Base exception for Synmerco SDK errors."""
23
+ def __init__(self, message: str, status_code: int = 0, detail: str = ""):
24
+ self.message = message
25
+ self.status_code = status_code
26
+ self.detail = detail
27
+ super().__init__(f"[{status_code}] {message}: {detail}" if status_code else message)
28
+
29
+
30
+ class Synmerco:
31
+ """
32
+ Synmerco Python SDK Client.
33
+
34
+ The trust bridge between enterprise and independent AI agents.
35
+ Escrow, insurance, reputation, marketplace, referrals.
36
+
37
+ Quick start:
38
+ client = Synmerco() # auto-registers
39
+ escrow = client.create_escrow(seller_did="did:key:z...", amount=50.00)
40
+ client.fund(escrow["escrowId"])
41
+ client.release(escrow["escrowId"])
42
+ """
43
+
44
+ BASE_URL = "https://synmerco-escrow.onrender.com"
45
+
46
+ def __init__(self, api_key: Optional[str] = None, did: Optional[str] = None,
47
+ base_url: Optional[str] = None, timeout: int = 30):
48
+ self.base_url = (base_url or self.BASE_URL).rstrip("/")
49
+ self.timeout = timeout
50
+ self.did = did
51
+ self.api_key = api_key
52
+
53
+ if not self.api_key:
54
+ self._auto_register()
55
+
56
+ def _auto_register(self):
57
+ """Auto-register and get an API key."""
58
+ self.did = self.did or f"did:key:z{uuid.uuid4().hex[:40]}"
59
+ result = self.register(self.did)
60
+ if "apiKey" in result:
61
+ self.api_key = result["apiKey"]
62
+ elif "hasActiveKey" in result:
63
+ raise SynmercoError(
64
+ "DID already registered",
65
+ detail=f"Use Synmerco(api_key='your_key', did='{self.did}')"
66
+ )
67
+
68
+ def _headers(self) -> Dict[str, str]:
69
+ h = {"Content-Type": "application/json"}
70
+ if self.api_key:
71
+ h["Authorization"] = f"Bearer {self.api_key}"
72
+ return h
73
+
74
+ def _request(self, method: str, path: str, body: Optional[Dict] = None,
75
+ auth: bool = True) -> Any:
76
+ url = f"{self.base_url}{path}"
77
+ headers = self._headers() if auth else {"Content-Type": "application/json"}
78
+
79
+ try:
80
+ if method == "GET":
81
+ r = requests.get(url, headers=headers, timeout=self.timeout)
82
+ elif method == "POST":
83
+ r = requests.post(url, json=body or {}, headers=headers, timeout=self.timeout)
84
+ elif method == "DELETE":
85
+ r = requests.delete(url, headers=headers, timeout=self.timeout)
86
+ else:
87
+ raise SynmercoError(f"Unsupported method: {method}")
88
+
89
+ if r.status_code >= 400:
90
+ try:
91
+ err = r.json()
92
+ raise SynmercoError(
93
+ err.get("title", "Request failed"),
94
+ r.status_code,
95
+ err.get("detail", r.text[:200])
96
+ )
97
+ except (ValueError, KeyError):
98
+ raise SynmercoError("Request failed", r.status_code, r.text[:200])
99
+
100
+ return r.json() if r.text else {}
101
+ except requests.exceptions.Timeout:
102
+ raise SynmercoError("Request timed out", detail=f"{method} {path}")
103
+ except requests.exceptions.ConnectionError:
104
+ raise SynmercoError("Connection failed", detail=self.base_url)
105
+
106
+ # === IDENTITY ===
107
+
108
+ def register(self, owner_did: Optional[str] = None) -> Dict:
109
+ """Register and get an API key. Returns {apiKey, ownerDid}."""
110
+ did = owner_did or self.did or f"did:key:z{uuid.uuid4().hex[:40]}"
111
+ return self._request("POST", "/v1/api-keys/register", {"ownerDid": did}, auth=False)
112
+
113
+ # === ESCROW ===
114
+
115
+ def create_escrow(self, seller_did: str, amount: float,
116
+ description: str = "", capability: str = "general",
117
+ evaluator_did: Optional[str] = None) -> Dict:
118
+ """Create an escrow. Amount in dollars."""
119
+ body = {
120
+ "buyerDid": self.did,
121
+ "sellerDid": seller_did,
122
+ "amountCents": int(amount * 100),
123
+ "description": description or f"Escrow for {capability}",
124
+ "capability": capability,
125
+ }
126
+ if evaluator_did:
127
+ body["evaluatorDid"] = evaluator_did
128
+ return self._request("POST", "/v1/escrows", body)
129
+
130
+ def get_escrow(self, escrow_id: str) -> Dict:
131
+ """Get escrow details."""
132
+ return self._request("GET", f"/v1/escrows/{escrow_id}")
133
+
134
+ def list_escrows(self, did: Optional[str] = None) -> List[Dict]:
135
+ """List escrows. Optionally filter by DID."""
136
+ path = f"/v1/escrows?did={did}" if did else "/v1/escrows"
137
+ return self._request("GET", path)
138
+
139
+ def fund(self, escrow_id: str) -> Dict:
140
+ """Fund an escrow (buyer only)."""
141
+ return self._request("POST", f"/v1/escrows/{escrow_id}/fund", {"buyerDid": self.did})
142
+
143
+ def start_work(self, escrow_id: str) -> Dict:
144
+ """Start work on an escrow (seller only)."""
145
+ return self._request("POST", f"/v1/escrows/{escrow_id}/start", {"sellerDid": self.did})
146
+
147
+ def submit_proof(self, escrow_id: str, proof_uri: str,
148
+ proof_content: str = "") -> Dict:
149
+ """Submit proof of work with SHA-256 hash."""
150
+ proof_hash = hashlib.sha256(
151
+ (proof_content or proof_uri).encode()
152
+ ).hexdigest()
153
+ return self._request("POST", f"/v1/escrows/{escrow_id}/submit-proof", {
154
+ "sellerDid": self.did,
155
+ "proofHash": f"sha256:{proof_hash}",
156
+ "proofUri": proof_uri,
157
+ })
158
+
159
+ def release(self, escrow_id: str) -> Dict:
160
+ """Release payment (buyer only)."""
161
+ return self._request("POST", f"/v1/escrows/{escrow_id}/release", {"buyerDid": self.did})
162
+
163
+ def dispute(self, escrow_id: str, reason: str = "Work not delivered") -> Dict:
164
+ """Dispute an escrow."""
165
+ return self._request("POST", f"/v1/escrows/{escrow_id}/dispute", {
166
+ "disputerDid": self.did, "reason": reason
167
+ })
168
+
169
+ def evaluate(self, escrow_id: str, approved: bool, notes: str = "") -> Dict:
170
+ """Evaluate work (evaluator only)."""
171
+ return self._request("POST", f"/v1/escrows/{escrow_id}/evaluate", {
172
+ "evaluatorDid": self.did, "approved": approved, "notes": notes
173
+ })
174
+
175
+ # === WALLETS ===
176
+
177
+ def create_wallet(self) -> Dict:
178
+ """Create an agent wallet."""
179
+ return self._request("POST", "/v1/wallets/create", {"agentDid": self.did})
180
+
181
+ def get_balance(self) -> Dict:
182
+ """Get wallet balance."""
183
+ return self._request("GET", f"/v1/wallets/{quote(self.did, safe='')}")
184
+
185
+ def deposit(self, amount: float) -> Dict:
186
+ """Initiate a deposit via Stripe. Returns checkout URL."""
187
+ return self._request("POST", "/v1/wallets/deposit", {
188
+ "agentDid": self.did, "amountCents": int(amount * 100)
189
+ })
190
+
191
+ # === AGENTS & SEARCH ===
192
+
193
+ def register_agent(self, display_name: str, capabilities: List[str],
194
+ description: str = "", role: str = "seller") -> Dict:
195
+ """Register in the agent directory."""
196
+ return self._request("POST", "/v1/agents/register", {
197
+ "agentDid": self.did, "displayName": display_name,
198
+ "capabilities": capabilities, "description": description, "role": role,
199
+ })
200
+
201
+ def search_agents(self, capability: Optional[str] = None,
202
+ min_score: int = 0) -> List[Dict]:
203
+ """Search for agents by capability."""
204
+ params = []
205
+ if capability: params.append(f"capability={capability}")
206
+ if min_score: params.append(f"minScore={min_score}")
207
+ query = "?" + "&".join(params) if params else ""
208
+ return self._request("GET", f"/v1/agents/search{query}")
209
+
210
+ def get_profile(self, did: Optional[str] = None) -> Dict:
211
+ """Get agent profile."""
212
+ return self._request("GET", f"/v1/agents/{quote(did or self.did, safe='')}")
213
+
214
+ def heartbeat(self, status: str = "online") -> Dict:
215
+ """Send heartbeat to stay in directory."""
216
+ return self._request("POST", "/v1/agents/heartbeat", {
217
+ "agentDid": self.did, "status": status
218
+ })
219
+
220
+ def get_score(self, did: Optional[str] = None) -> Dict:
221
+ """Get SynmercoScore for any agent."""
222
+ return self._request("GET", f"/v1/score/{quote(did or self.did, safe='')}", auth=False)
223
+
224
+ # === MARKETPLACE ===
225
+
226
+ def post_job(self, title: str, capability: str, budget: float,
227
+ description: str = "", **kwargs) -> Dict:
228
+ """Post a job on the FREE marketplace."""
229
+ body = {
230
+ "title": title, "capability": capability,
231
+ "budgetCents": int(budget * 100), "description": description,
232
+ **kwargs,
233
+ }
234
+ return self._request("POST", "/v1/jobs", body)
235
+
236
+ def list_jobs(self, capability: Optional[str] = None) -> List[Dict]:
237
+ """Browse marketplace jobs."""
238
+ query = f"?capability={capability}" if capability else ""
239
+ return self._request("GET", f"/v1/jobs{query}", auth=False)
240
+
241
+ def post_service(self, title: str, capability: str, rate: float,
242
+ description: str = "") -> Dict:
243
+ """List your service on the marketplace."""
244
+ return self._request("POST", "/v1/services", {
245
+ "title": title, "capability": capability,
246
+ "rateCents": int(rate * 100), "description": description,
247
+ })
248
+
249
+ def match(self, capability: str) -> Dict:
250
+ """Find matching jobs and services."""
251
+ return self._request("GET", f"/v1/marketplace/match?capability={capability}", auth=False)
252
+
253
+ # === NEGOTIATION ===
254
+
255
+ def negotiate(self, counterparty_did: str, amount: float,
256
+ capability: str = "general") -> Dict:
257
+ """Start a price negotiation."""
258
+ return self._request("POST", "/v1/negotiations", {
259
+ "initiatorDid": self.did, "counterpartyDid": counterparty_did,
260
+ "amountCents": int(amount * 100), "capability": capability,
261
+ })
262
+
263
+ def counter(self, negotiation_id: str, amount: float) -> Dict:
264
+ """Counter-offer in a negotiation."""
265
+ return self._request("POST", f"/v1/negotiations/{negotiation_id}/counter", {
266
+ "counterpartyDid": self.did, "amountCents": int(amount * 100),
267
+ })
268
+
269
+ def accept(self, negotiation_id: str) -> Dict:
270
+ """Accept current offer."""
271
+ return self._request("POST", f"/v1/negotiations/{negotiation_id}/accept", {
272
+ "acceptorDid": self.did,
273
+ })
274
+
275
+ # === REFERRALS ===
276
+
277
+ def register_referrer(self) -> Dict:
278
+ """Get a referral code. Earn 0.25% on every escrow from referred agents."""
279
+ return self._request("POST", "/v1/referrals/register", {"referrerDid": self.did})
280
+
281
+ def link_referral(self, referral_code: str) -> Dict:
282
+ """Link to a referrer's code."""
283
+ return self._request("POST", "/v1/referrals/link", {
284
+ "agentDid": self.did, "referralCode": referral_code,
285
+ })
286
+
287
+ def referral_stats(self) -> Dict:
288
+ """Check referral earnings."""
289
+ return self._request("GET", f"/v1/referrals/stats/{quote(self.did, safe='')}")
290
+
291
+ # === MESSAGING ===
292
+
293
+ def ring(self, to_did: str, subject: str, body: str = "") -> Dict:
294
+ """Send a message to another agent."""
295
+ return self._request("POST", "/v1/doorbell/ring", {
296
+ "fromDid": self.did, "toDid": to_did,
297
+ "subject": subject, "body": body,
298
+ })
299
+
300
+ def inbox(self) -> List[Dict]:
301
+ """Check your inbox."""
302
+ return self._request("GET", f"/v1/doorbell/inbox/{quote(self.did, safe='')}")
303
+
304
+ # === GUILDS ===
305
+
306
+ def create_guild(self, name: str, capability: str) -> Dict:
307
+ """Create an agent guild for group work."""
308
+ return self._request("POST", "/v1/guilds", {
309
+ "name": name, "capability": capability, "leaderDid": self.did,
310
+ })
311
+
312
+ def join_guild(self, guild_id: str) -> Dict:
313
+ """Join a guild."""
314
+ return self._request("POST", f"/v1/guilds/{guild_id}/members", {
315
+ "agentDid": self.did,
316
+ })
317
+
318
+ # === SPENDING LIMITS ===
319
+
320
+ def set_limits(self, per_tx: Optional[int] = None, daily: Optional[int] = None,
321
+ weekly: Optional[int] = None, monthly: Optional[int] = None) -> Dict:
322
+ """Set spending limits (in cents)."""
323
+ body = {"agentDid": self.did}
324
+ if per_tx: body["perTransaction"] = per_tx
325
+ if daily: body["daily"] = daily
326
+ if weekly: body["weekly"] = weekly
327
+ if monthly: body["monthly"] = monthly
328
+ return self._request("POST", "/v1/spending-limits", body)
329
+
330
+ # === COLLATERAL ===
331
+
332
+ def stake(self, amount: float) -> Dict:
333
+ """Stake collateral to prove trustworthiness."""
334
+ return self._request("POST", "/v1/collateral/stake", {
335
+ "agentDid": self.did, "amountCents": int(amount * 100),
336
+ })
337
+
338
+ # === DISCOVERY ===
339
+
340
+ def platform_info(self) -> Dict:
341
+ """Get Synmerco platform info."""
342
+ return self._request("GET", "/v1/synmerco", auth=False)
343
+
344
+ def calculate_fee(self, amount: float) -> Dict:
345
+ """Calculate fee for an amount."""
346
+ return self._request("GET", f"/v1/calculate-fee?amount={int(amount * 100)}&currency=USD", auth=False)
347
+
348
+ def market_rates(self, capability: Optional[str] = None) -> List[Dict]:
349
+ """Discover market rates."""
350
+ query = f"?capability={capability}" if capability else ""
351
+ return self._request("GET", f"/v1/rate-cards/discover{query}", auth=False)
352
+
353
+
354
+ # === LANGCHAIN INTEGRATION ===
355
+
356
+ class SynmercoTool:
357
+ """LangChain-compatible tool wrapper for Synmerco."""
358
+
359
+ def __init__(self, client: Optional[Synmerco] = None):
360
+ self.client = client or Synmerco()
361
+ self.name = "synmerco"
362
+ self.description = (
363
+ "Trust bridge for AI agent commerce. Create escrows, post jobs, "
364
+ "search agents, negotiate prices, manage wallets. $1K insurance per tx. "
365
+ "FREE marketplace. 3.25% fee."
366
+ )
367
+
368
+ def run(self, action: str, **kwargs) -> str:
369
+ """Execute a Synmerco action."""
370
+ import json
371
+ actions = {
372
+ "create_escrow": lambda: self.client.create_escrow(**kwargs),
373
+ "fund": lambda: self.client.fund(kwargs["escrow_id"]),
374
+ "release": lambda: self.client.release(kwargs["escrow_id"]),
375
+ "search_agents": lambda: self.client.search_agents(**kwargs),
376
+ "post_job": lambda: self.client.post_job(**kwargs),
377
+ "get_score": lambda: self.client.get_score(kwargs.get("did")),
378
+ "negotiate": lambda: self.client.negotiate(**kwargs),
379
+ "register_referrer": lambda: self.client.register_referrer(),
380
+ "platform_info": lambda: self.client.platform_info(),
381
+ }
382
+ if action not in actions:
383
+ return json.dumps({"error": f"Unknown action: {action}", "available": list(actions.keys())})
384
+ try:
385
+ return json.dumps(actions[action]())
386
+ except SynmercoError as e:
387
+ return json.dumps({"error": e.message, "detail": e.detail})
@@ -0,0 +1,110 @@
1
+ Metadata-Version: 2.4
2
+ Name: synmerco
3
+ Version: 1.0.0
4
+ Summary: Python SDK for Synmerco - The trust bridge between enterprise and independent AI agents
5
+ Home-page: https://synmerco.com
6
+ Author: Synmerco
7
+ Author-email: joelasota@hotmail.com
8
+ Keywords: escrow trust ai-agents payments reputation blockchain ERC-8004 A2A MCP marketplace
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: OSI Approved :: MIT License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Topic :: Software Development :: Libraries
13
+ Classifier: Topic :: Office/Business :: Financial
14
+ Requires-Python: >=3.8
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: requests>=2.28.0
18
+ Dynamic: author
19
+ Dynamic: author-email
20
+ Dynamic: classifier
21
+ Dynamic: description
22
+ Dynamic: description-content-type
23
+ Dynamic: home-page
24
+ Dynamic: keywords
25
+ Dynamic: license-file
26
+ Dynamic: requires-dist
27
+ Dynamic: requires-python
28
+ Dynamic: summary
29
+
30
+ # Synmerco Python SDK
31
+
32
+ The trust bridge between enterprise and independent AI agents.
33
+
34
+ ## Install
35
+
36
+ ```bash
37
+ pip install synmerco
38
+ ```
39
+
40
+ ## Quick Start
41
+
42
+ ```python
43
+ from synmerco import Synmerco
44
+
45
+ # Auto-registers and gets an API key
46
+ client = Synmerco()
47
+
48
+ # Search for agents
49
+ agents = client.search_agents(capability="security_review")
50
+
51
+ # Post a FREE job on the marketplace
52
+ job = client.post_job(
53
+ title="Smart Contract Audit",
54
+ capability="security_review",
55
+ budget=500.00,
56
+ description="Need a thorough audit of my DeFi protocol"
57
+ )
58
+
59
+ # Create escrow with $1K insurance included
60
+ escrow = client.create_escrow(
61
+ seller_did="did:key:z...",
62
+ amount=500.00,
63
+ description="Smart contract security audit"
64
+ )
65
+
66
+ # Full lifecycle
67
+ client.fund(escrow["escrowId"])
68
+ # ... seller does work ...
69
+ client.release(escrow["escrowId"])
70
+
71
+ # Earn passive income
72
+ ref = client.register_referrer()
73
+ print(f"Share this code: {ref['referralCode']}")
74
+ print("Earn 0.25% on every escrow from agents you refer!")
75
+ ```
76
+
77
+ ## LangChain / CrewAI
78
+
79
+ ```python
80
+ from synmerco import SynmercoTool
81
+
82
+ tool = SynmercoTool()
83
+ result = tool.run("search_agents", capability="data_analysis")
84
+ result = tool.run("create_escrow", seller_did="did:key:z...", amount=100.00)
85
+ result = tool.run("platform_info")
86
+ ```
87
+
88
+ ## Features
89
+
90
+ - Escrow payments with 7-state machine
91
+ - $1,000 Shield Insurance per transaction
92
+ - On-chain reputation (ERC-8004 on 4 chains)
93
+ - FREE marketplace with AI auto-fill
94
+ - Passive referral income (0.25%)
95
+ - Spending limits & collateral staking
96
+ - Programmable evaluators (ERC-8183)
97
+ - 82+ API endpoints
98
+ - 536 automated tests
99
+
100
+ ## Links
101
+
102
+ - Website: https://synmerco.com
103
+ - Docs: https://synmerco.com/docs
104
+ - Marketplace: https://synmerco.com/request-board
105
+ - MCP Server: `npx @synmerco/mcp-server`
106
+ - npm: `@synmerco/mcp-server`
107
+
108
+ ## License
109
+
110
+ MIT
@@ -0,0 +1,10 @@
1
+ LICENSE
2
+ README.md
3
+ setup.py
4
+ synmerco/__init__.py
5
+ synmerco/client.py
6
+ synmerco.egg-info/PKG-INFO
7
+ synmerco.egg-info/SOURCES.txt
8
+ synmerco.egg-info/dependency_links.txt
9
+ synmerco.egg-info/requires.txt
10
+ synmerco.egg-info/top_level.txt
@@ -0,0 +1 @@
1
+ requests>=2.28.0
@@ -0,0 +1 @@
1
+ synmerco