@virtuals-protocol/acp-node-v2 0.0.1 → 0.0.2

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 (58) hide show
  1. package/README.md +9 -9
  2. package/package.json +4 -2
  3. package/dist/examples/buyer-fund.d.ts +0 -2
  4. package/dist/examples/buyer-fund.d.ts.map +0 -1
  5. package/dist/examples/buyer-fund.js +0 -51
  6. package/dist/examples/buyer-fund.js.map +0 -1
  7. package/dist/examples/buyer-llm.d.ts +0 -2
  8. package/dist/examples/buyer-llm.d.ts.map +0 -1
  9. package/dist/examples/buyer-llm.js +0 -92
  10. package/dist/examples/buyer-llm.js.map +0 -1
  11. package/dist/examples/buyer.d.ts +0 -2
  12. package/dist/examples/buyer.d.ts.map +0 -1
  13. package/dist/examples/buyer.js +0 -66
  14. package/dist/examples/buyer.js.map +0 -1
  15. package/dist/examples/seller-fund.d.ts +0 -2
  16. package/dist/examples/seller-fund.d.ts.map +0 -1
  17. package/dist/examples/seller-fund.js +0 -48
  18. package/dist/examples/seller-fund.js.map +0 -1
  19. package/dist/examples/seller-llm.d.ts +0 -2
  20. package/dist/examples/seller-llm.d.ts.map +0 -1
  21. package/dist/examples/seller-llm.js +0 -85
  22. package/dist/examples/seller-llm.js.map +0 -1
  23. package/dist/examples/seller.d.ts +0 -2
  24. package/dist/examples/seller.d.ts.map +0 -1
  25. package/dist/examples/seller.js +0 -50
  26. package/dist/examples/seller.js.map +0 -1
  27. package/dist/examples-local/buyer-fund.d.ts +0 -2
  28. package/dist/examples-local/buyer-fund.d.ts.map +0 -1
  29. package/dist/examples-local/buyer-fund.js +0 -69
  30. package/dist/examples-local/buyer-fund.js.map +0 -1
  31. package/dist/examples-local/buyer-llm.d.ts +0 -2
  32. package/dist/examples-local/buyer-llm.d.ts.map +0 -1
  33. package/dist/examples-local/buyer-llm.js +0 -112
  34. package/dist/examples-local/buyer-llm.js.map +0 -1
  35. package/dist/examples-local/buyer-search.d.ts +0 -2
  36. package/dist/examples-local/buyer-search.d.ts.map +0 -1
  37. package/dist/examples-local/buyer-search.js +0 -72
  38. package/dist/examples-local/buyer-search.js.map +0 -1
  39. package/dist/examples-local/buyer.d.ts +0 -2
  40. package/dist/examples-local/buyer.d.ts.map +0 -1
  41. package/dist/examples-local/buyer.js +0 -65
  42. package/dist/examples-local/buyer.js.map +0 -1
  43. package/dist/examples-local/seller-dumb.d.ts +0 -2
  44. package/dist/examples-local/seller-dumb.d.ts.map +0 -1
  45. package/dist/examples-local/seller-dumb.js +0 -42
  46. package/dist/examples-local/seller-dumb.js.map +0 -1
  47. package/dist/examples-local/seller-fund.d.ts +0 -2
  48. package/dist/examples-local/seller-fund.d.ts.map +0 -1
  49. package/dist/examples-local/seller-fund.js +0 -46
  50. package/dist/examples-local/seller-fund.js.map +0 -1
  51. package/dist/examples-local/seller-llm.d.ts +0 -2
  52. package/dist/examples-local/seller-llm.d.ts.map +0 -1
  53. package/dist/examples-local/seller-llm.js +0 -84
  54. package/dist/examples-local/seller-llm.js.map +0 -1
  55. package/dist/examples-local/seller.d.ts +0 -2
  56. package/dist/examples-local/seller.d.ts.map +0 -1
  57. package/dist/examples-local/seller.js +0 -50
  58. package/dist/examples-local/seller.js.map +0 -1
package/README.md CHANGED
@@ -42,7 +42,7 @@ The Agent Commerce Protocol (ACP) Node SDK v2 is a ground-up rewrite of the ACP
42
42
 
43
43
  ## Prerequisites
44
44
 
45
- Register your agent with the [Service Registry](https://app.virtuals.io/acp/join) before interacting with other agents.
45
+ Register your agent with the [Service Registry](https://app.virtuals.io/acp/join) before interacting with other agents. You can find your `walletId` and add a signer under the **Signers** tab on your agent's page on [app.virtuals.io](https://app.virtuals.io). Click **+ Add Signer** to generate a signer private key, then use **Copy Key** to retrieve it.
46
46
 
47
47
  ## Installation
48
48
 
@@ -57,16 +57,16 @@ Peer dependencies: `viem`, `@account-kit/infra`, `@account-kit/smart-contracts`,
57
57
  ### Buyer
58
58
 
59
59
  ```typescript
60
- import { AcpAgent, AlchemyEvmProviderAdapter, AssetToken, AgentSort } from "@virtuals-protocol/acp-node-v2";
60
+ import { AcpAgent, PrivyAlchemyEvmProviderAdapter, AssetToken, AgentSort } from "@virtuals-protocol/acp-node-v2";
61
61
  import type { JobSession, JobRoomEntry } from "@virtuals-protocol/acp-node-v2";
62
62
  import { baseSepolia } from "@account-kit/infra";
63
63
 
64
64
  async function main() {
65
65
  const buyer = await AcpAgent.create({
66
- provider: await AlchemyEvmProviderAdapter.create({
66
+ provider: await PrivyAlchemyEvmProviderAdapter.create({
67
67
  walletAddress: "0xBuyerWalletAddress",
68
- privateKey: "0xBuyerPrivateKey",
69
- entityId: 1,
68
+ walletId: "wallet-id",
69
+ signerPrivateKey: "signer-private-key",
70
70
  chains: [baseSepolia],
71
71
  }),
72
72
  });
@@ -112,16 +112,16 @@ main().catch(console.error);
112
112
  ### Seller
113
113
 
114
114
  ```typescript
115
- import { AcpAgent, AlchemyEvmProviderAdapter, AssetToken } from "@virtuals-protocol/acp-node-v2";
115
+ import { AcpAgent, PrivyAlchemyEvmProviderAdapter, AssetToken } from "@virtuals-protocol/acp-node-v2";
116
116
  import type { JobSession, JobRoomEntry } from "@virtuals-protocol/acp-node-v2";
117
117
  import { baseSepolia } from "@account-kit/infra";
118
118
 
119
119
  async function main() {
120
120
  const seller = await AcpAgent.create({
121
- provider: await AlchemyEvmProviderAdapter.create({
121
+ provider: await PrivyAlchemyEvmProviderAdapter.create({
122
122
  walletAddress: "0xSellerWalletAddress",
123
- privateKey: "0xSellerPrivateKey",
124
- entityId: 1,
123
+ walletId: "wallet-id",
124
+ signerPrivateKey: "signer-private-key",
125
125
  chains: [baseSepolia],
126
126
  }),
127
127
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@virtuals-protocol/acp-node-v2",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -10,7 +10,9 @@
10
10
  "dev": "tsx watch src/index.ts",
11
11
  "start": "node dist/index.js"
12
12
  },
13
- "files": ["dist"],
13
+ "files": [
14
+ "dist"
15
+ ],
14
16
  "author": "Zuhwa",
15
17
  "license": "ISC",
16
18
  "description": "",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=buyer-fund.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer-fund.d.ts","sourceRoot":"","sources":["../../src/examples/buyer-fund.ts"],"names":[],"mappings":""}
@@ -1,51 +0,0 @@
1
- import { AcpAgent } from "../acpAgent";
2
- import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
3
- import { baseSepolia, bscTestnet } from "@account-kit/infra";
4
- import { SocketTransport, PrivyAlchemyEvmProviderAdapter, } from "../index";
5
- const SELLER_ADDRESS = "0xSellerAddress";
6
- async function main() {
7
- const buyer = await AcpAgent.create({
8
- contractAddresses: ACP_CONTRACT_ADDRESSES,
9
- provider: await PrivyAlchemyEvmProviderAdapter.create({
10
- walletAddress: "0xBuyerWalletAddress",
11
- walletId: "your-privy-wallet-id",
12
- chains: [baseSepolia, bscTestnet],
13
- signerPrivateKey: "your-privy-signer-private-key",
14
- }),
15
- transport: new SocketTransport(),
16
- });
17
- const buyerAddress = await buyer.getAddress();
18
- console.log(`[buyer] address: ${buyerAddress}`);
19
- buyer.on("entry", async (session, entry) => {
20
- console.log("entry", entry.kind);
21
- if (entry.kind === "system") {
22
- switch (entry.event.type) {
23
- case "budget.set":
24
- console.log(`[buyer] budget set on job ${session.jobId}, funding…`);
25
- await session.sendMessage("Looks good, funding now.");
26
- await session.fund();
27
- console.log(`[buyer] funded job ${session.jobId}`);
28
- break;
29
- case "job.submitted":
30
- console.log(`[buyer] deliverable received on job ${session.jobId}, completing…`);
31
- await session.complete("Evaluated");
32
- console.log(`[buyer] completed job ${session.jobId}`);
33
- await buyer.stop();
34
- break;
35
- }
36
- }
37
- if (entry.kind === "message") {
38
- console.log(`[buyer] [job ${session.jobId}] ${entry.from}: ${entry.content}`);
39
- }
40
- });
41
- await buyer.start();
42
- const jobId = await buyer.createFundTransferJob(baseSepolia.id, {
43
- providerAddress: SELLER_ADDRESS,
44
- evaluatorAddress: buyerAddress,
45
- expiredAt: Math.floor(Date.now() / 1000) + 3600,
46
- description: "Example job from SDK",
47
- });
48
- console.log(`[buyer] created job ${jobId} — waiting for seller…`);
49
- }
50
- main().catch(console.error);
51
- //# sourceMappingURL=buyer-fund.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer-fund.js","sourceRoot":"","sources":["../../src/examples/buyer-fund.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAGL,eAAe,EACf,8BAA8B,GAC/B,MAAM,UAAU,CAAC;AAGlB,MAAM,cAAc,GAAY,iBAAiB,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QAClC,iBAAiB,EAAE,sBAAsB;QACzC,QAAQ,EAAE,MAAM,8BAA8B,CAAC,MAAM,CAAC;YACpD,aAAa,EAAE,sBAAsB;YACrC,QAAQ,EAAE,sBAAsB;YAChC,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;YACjC,gBAAgB,EAAE,+BAA+B;SAClD,CAAC;QACF,SAAS,EAAE,IAAI,eAAe,EAAE;KACjC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAC;IAEhD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAE,EAAE;QACnE,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,KAAK,YAAY,CAAC,CAAC;oBACpE,MAAM,OAAO,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;oBACtD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;oBACrB,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACnD,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CACT,uCAAuC,OAAO,CAAC,KAAK,eAAe,CACpE,CAAC;oBACF,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,yBAAyB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtD,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM;YACV,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CACT,gBAAgB,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CACjE,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IAEpB,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,EAAE;QAC9D,eAAe,EAAE,cAAc;QAC/B,gBAAgB,EAAE,YAAY;QAC9B,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI;QAC/C,WAAW,EAAE,sBAAsB;KACpC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,wBAAwB,CAAC,CAAC;AACpE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=buyer-llm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer-llm.d.ts","sourceRoot":"","sources":["../../src/examples/buyer-llm.ts"],"names":[],"mappings":""}
@@ -1,92 +0,0 @@
1
- import Anthropic from "@anthropic-ai/sdk";
2
- import { AcpAgent } from "../acpAgent";
3
- import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
4
- import { baseSepolia } from "@account-kit/infra";
5
- import { SocketTransport } from "../events/socketTransport";
6
- import dotenv from "dotenv";
7
- import { PrivyAlchemyEvmProviderAdapter } from "../providers/evm/privyAlchemyEvmProviderAdapter";
8
- dotenv.config();
9
- const SELLER_ADDRESS = "0xSellerAddress";
10
- const SYSTEM_PROMPT = `You are a buyer agent. You want to buy a funny cat meme.
11
- Rules: When the seller asks what you want, sendMessage describing your requirement (e.g. "I want a funny cat meme") and ask for a price. Fund any budget under 0.1 USDC. Try to negotation for price below 0.07 USDC. Complete any deliverable. Keep all text under 10 words.`;
12
- const anthropic = new Anthropic();
13
- function toAnthropicTools(tools) {
14
- return tools.map((t) => ({
15
- name: t.name,
16
- description: t.description,
17
- input_schema: {
18
- type: "object",
19
- properties: Object.fromEntries(t.parameters.map((p) => [
20
- p.name,
21
- { type: p.type, description: p.description },
22
- ])),
23
- required: t.parameters
24
- .filter((p) => p.required !== false)
25
- .map((p) => p.name),
26
- },
27
- }));
28
- }
29
- function toAnthropicMessages(raw) {
30
- const msgs = [];
31
- for (const m of raw) {
32
- const role = m.role === "system" ? "user" : m.role;
33
- const last = msgs[msgs.length - 1];
34
- if (last && last.role === role) {
35
- last.content += "\n" + m.content;
36
- }
37
- else {
38
- msgs.push({ role, content: m.content });
39
- }
40
- }
41
- return msgs;
42
- }
43
- async function main() {
44
- const buyer = await AcpAgent.create({
45
- contractAddresses: ACP_CONTRACT_ADDRESSES,
46
- provider: await PrivyAlchemyEvmProviderAdapter.create({
47
- walletAddress: "0xBuyerWalletAddress",
48
- walletId: "your-privy-wallet-id",
49
- chains: [baseSepolia],
50
- signerPrivateKey: "your-privy-signer-private-key",
51
- }),
52
- transport: new SocketTransport(),
53
- });
54
- const buyerAddress = await buyer.getAddress();
55
- console.log(`[buyer-llm] address: ${buyerAddress}`);
56
- buyer.on("entry", async (session, entry) => {
57
- if (entry.kind === "system") {
58
- console.log(`[JobID: ${session.jobId}][system] ${entry.event.type}`);
59
- }
60
- else {
61
- console.log(`[JobID: ${session.jobId}][seller-llm] ${entry.content}`);
62
- }
63
- const tools = toAnthropicTools(session.availableTools());
64
- const messages = toAnthropicMessages(await session.toMessages());
65
- console.log("messages", messages);
66
- if (messages.length === 0)
67
- return;
68
- const response = await anthropic.messages.create({
69
- model: "claude-sonnet-4-20250514",
70
- max_tokens: 1024,
71
- system: SYSTEM_PROMPT,
72
- messages,
73
- tools,
74
- tool_choice: { type: "any" },
75
- });
76
- const toolBlock = response.content.find((b) => b.type === "tool_use");
77
- if (toolBlock && toolBlock.type === "tool_use") {
78
- console.log(`[JobID: ${session.jobId}][buyer-llm] calling ${toolBlock.name}(${JSON.stringify(toolBlock.input)})`);
79
- await session.executeTool(toolBlock.name, toolBlock.input);
80
- }
81
- });
82
- await buyer.start();
83
- const jobId = await buyer.createJob(baseSepolia.id, {
84
- providerAddress: SELLER_ADDRESS,
85
- evaluatorAddress: buyerAddress,
86
- expiredAt: Math.floor(Date.now() / 1000) + 3600,
87
- description: "I want to buy a funny meme",
88
- });
89
- console.log(`[buyer-llm] created job ${jobId} — waiting for seller…`);
90
- }
91
- main().catch(console.error);
92
- //# sourceMappingURL=buyer-llm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer-llm.js","sourceRoot":"","sources":["../../src/examples/buyer-llm.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=buyer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer.d.ts","sourceRoot":"","sources":["../../src/examples/buyer.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- import { AcpAgent } from "../acpAgent";
2
- import { AssetToken } from "../core/assetToken";
3
- import { baseSepolia } from "@account-kit/infra";
4
- import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
5
- import { SocketTransport } from "../events/socketTransport";
6
- import { AgentSort } from "../index";
7
- const chain = baseSepolia;
8
- async function main() {
9
- const buyer = await AcpAgent.create({
10
- provider: await AlchemyEvmProviderAdapter.create({
11
- walletAddress: "0xBuyerWalletAddress",
12
- privateKey: "0xBuyerPrivateKey",
13
- entityId: 1,
14
- chains: [chain],
15
- }),
16
- transport: new SocketTransport(),
17
- });
18
- const buyerAddress = await buyer.getAddress();
19
- console.log(`[buyer] address: ${buyerAddress}`);
20
- buyer.on("entry", async (session, entry) => {
21
- if (entry.kind === "system") {
22
- switch (entry.event.type) {
23
- case "budget.set":
24
- console.log(`[buyer] budget set on job ${session.jobId}, funding…`);
25
- await session.sendMessage("Looks good, funding now.");
26
- await session.fund(AssetToken.usdc(0.1, session.chainId));
27
- console.log(`[buyer] funded job ${session.jobId}`);
28
- break;
29
- case "job.submitted":
30
- console.log(`[buyer] deliverable received on job ${session.jobId}, completing…`);
31
- await session.complete("Evaluated");
32
- console.log(`[buyer] completed job ${session.jobId}`);
33
- await buyer.stop();
34
- break;
35
- }
36
- }
37
- if (entry.kind === "message") {
38
- console.log(`[buyer] [job ${session.jobId}] ${entry.from}: ${entry.content}`);
39
- }
40
- });
41
- await buyer.start();
42
- // 1. Browse for agents
43
- const agents = await buyer.browseAgents("<search query>", {
44
- sortBy: [AgentSort.SUCCESSFUL_JOB_COUNT, AgentSort.SUCCESS_RATE],
45
- topK: 5,
46
- showHidden: true,
47
- });
48
- const agent = agents[0];
49
- if (!agent) {
50
- console.error("No agents found matching the search query");
51
- return;
52
- }
53
- // 2. Select an offering
54
- const offering = agent.offerings[0];
55
- if (!offering) {
56
- console.error("Agent has no offerings");
57
- return;
58
- }
59
- // 3. Create job from offering (validates requirement, creates job, sends first message)
60
- // expiredAt is auto-calculated from offering.slaMinutes
61
- const jobId = await buyer.createJobFromOffering(chain.id, offering, agent.walletAddress, { "<your-schema-key>": "<your-schema-value>" }, // requirement data matching offering schema
62
- { evaluatorAddress: buyerAddress });
63
- console.log(`[buyer] created job ${jobId} — waiting for seller…`);
64
- }
65
- main().catch(console.error);
66
- //# sourceMappingURL=buyer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer.js","sourceRoot":"","sources":["../../src/examples/buyer.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=seller-fund.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seller-fund.d.ts","sourceRoot":"","sources":["../../src/examples/seller-fund.ts"],"names":[],"mappings":""}
@@ -1,48 +0,0 @@
1
- import { AcpAgent } from "../acpAgent";
2
- import { AssetToken } from "../core/assetToken";
3
- import { baseSepolia } from "@account-kit/infra";
4
- import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
5
- async function main() {
6
- const seller = await AcpAgent.create({
7
- provider: await AlchemyEvmProviderAdapter.create({
8
- walletAddress: "0xSellerWalletAddress",
9
- privateKey: "0xSellerPrivateKey",
10
- entityId: 1,
11
- chains: [baseSepolia],
12
- }),
13
- });
14
- const sellerAddress = (await seller.getAddress());
15
- console.log(`[seller] address: ${sellerAddress}`);
16
- seller.on("entry", async (session, entry) => {
17
- if (entry.kind === "system") {
18
- switch (entry.event.type) {
19
- case "job.created":
20
- console.log(`[seller] new job ${session.jobId}`);
21
- break;
22
- case "job.funded":
23
- console.log(`[seller] job ${session.jobId} funded, delivering…`);
24
- await session.sendMessage("Got the funds. Working on it now.");
25
- await session.submit("Test deliverable");
26
- console.log(`[seller] submitted deliverable on job ${session.jobId}`);
27
- break;
28
- case "job.completed":
29
- console.log(`[seller] job ${session.jobId} completed!`);
30
- break;
31
- }
32
- }
33
- // Handle the buyer's first message containing the requirement
34
- if (entry.kind === "message" &&
35
- entry.contentType === "requirement" &&
36
- session.status === "open") {
37
- const requirement = JSON.parse(entry.content);
38
- console.log(`[seller] received requirement for "${requirement.name}":`, requirement.requirement);
39
- await session.setBudgetWithFundRequest(AssetToken.usdc(0.1, session.chainId), AssetToken.usdc(0.022, session.chainId), sellerAddress);
40
- console.log(`[seller] set budget on job ${session.jobId}`);
41
- }
42
- });
43
- await seller.start(() => {
44
- console.log("[seller callback] listening for jobs…");
45
- });
46
- }
47
- main().catch(console.error);
48
- //# sourceMappingURL=seller-fund.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seller-fund.js","sourceRoot":"","sources":["../../src/examples/seller-fund.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAGvF,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,MAAM,yBAAyB,CAAC,MAAM,CAAC;YAC/C,aAAa,EAAE,uBAAuB;YACtC,UAAU,EAAE,oBAAoB;YAChC,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,CAAC;KACH,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,CAAC,MAAM,MAAM,CAAC,UAAU,EAAE,CAAkB,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;IAElD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAE,EAAE;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,aAAa;oBAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjD,MAAM;gBAER,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,sBAAsB,CAAC,CAAC;oBACjE,MAAM,OAAO,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;oBAC/D,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtE,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC;oBACxD,MAAM;YACV,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,OAAO,CAAC,MAAM,KAAK,MAAM,EACzB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CACT,sCAAsC,WAAW,CAAC,IAAI,IAAI,EAC1D,WAAW,CAAC,WAAW,CACxB,CAAC;YACF,MAAM,OAAO,CAAC,wBAAwB,CACpC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EACrC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,EACvC,aAAa,CACd,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=seller-llm.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seller-llm.d.ts","sourceRoot":"","sources":["../../src/examples/seller-llm.ts"],"names":[],"mappings":""}
@@ -1,85 +0,0 @@
1
- import Anthropic from "@anthropic-ai/sdk";
2
- import { AcpAgent } from "../acpAgent";
3
- import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
4
- import { baseSepolia } from "@account-kit/infra";
5
- import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
6
- import { SocketTransport } from "../events/socketTransport";
7
- import dotenv from "dotenv";
8
- dotenv.config();
9
- const chain = baseSepolia;
10
- const SYSTEM_PROMPT = `You are a meme seller agent. You sell memes in between 0.1 USDC to 0.01 USDC.
11
- Rules: On new job, sendMessage to ask what kind of meme they want, lets the the budget to 0.1 USDC and let the buyer negotiate. When funded, submit deliverable "http://meme.example". Keep all text under 10 words.`;
12
- const anthropic = new Anthropic();
13
- function toAnthropicTools(tools) {
14
- return tools.map((t) => ({
15
- name: t.name,
16
- description: t.description,
17
- input_schema: {
18
- type: "object",
19
- properties: Object.fromEntries(t.parameters.map((p) => [
20
- p.name,
21
- { type: p.type, description: p.description },
22
- ])),
23
- required: t.parameters
24
- .filter((p) => p.required !== false)
25
- .map((p) => p.name),
26
- },
27
- }));
28
- }
29
- function toAnthropicMessages(raw) {
30
- const msgs = [];
31
- for (const m of raw) {
32
- const role = m.role === "system" ? "user" : m.role;
33
- const last = msgs[msgs.length - 1];
34
- if (last && last.role === role) {
35
- last.content += "\n" + m.content;
36
- }
37
- else {
38
- msgs.push({ role, content: m.content });
39
- }
40
- }
41
- return msgs;
42
- }
43
- async function main() {
44
- const seller = await AcpAgent.create({
45
- contractAddresses: ACP_CONTRACT_ADDRESSES,
46
- provider: await AlchemyEvmProviderAdapter.create({
47
- walletAddress: "0xSellerWalletAddress",
48
- privateKey: "0xSellerPrivateKey",
49
- entityId: 1,
50
- chains: [chain],
51
- }),
52
- transport: new SocketTransport(),
53
- });
54
- console.log(`[seller-llm] address: ${await seller.getAddress()}`);
55
- console.log("[seller-llm] listening for jobs…");
56
- seller.on("entry", async (session, entry) => {
57
- if (entry.kind === "system") {
58
- console.log(`[JobID: ${session.jobId}][system] ${entry.event.type}`);
59
- }
60
- else {
61
- console.log(`[JobID: ${session.jobId}][buyer-llm] ${entry.content}`);
62
- }
63
- const tools = toAnthropicTools(session.availableTools());
64
- const messages = toAnthropicMessages(await session.toMessages());
65
- console.log("messages", messages);
66
- if (messages.length === 0)
67
- return;
68
- const response = await anthropic.messages.create({
69
- model: "claude-sonnet-4-20250514",
70
- max_tokens: 1024,
71
- system: SYSTEM_PROMPT,
72
- messages,
73
- tools,
74
- tool_choice: { type: "any" },
75
- });
76
- const toolBlock = response.content.find((b) => b.type === "tool_use");
77
- if (toolBlock && toolBlock.type === "tool_use") {
78
- console.log(`[JobID: ${session.jobId}][seller-llm] calling ${toolBlock.name}(${JSON.stringify(toolBlock.input)})`);
79
- await session.executeTool(toolBlock.name, toolBlock.input);
80
- }
81
- });
82
- await seller.start();
83
- }
84
- main().catch(console.error);
85
- //# sourceMappingURL=seller-llm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seller-llm.js","sourceRoot":"","sources":["../../src/examples/seller-llm.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=seller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seller.d.ts","sourceRoot":"","sources":["../../src/examples/seller.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- import { AcpAgent } from "../acpAgent";
2
- import { AssetToken } from "../core/assetToken";
3
- import { baseSepolia } from "@account-kit/infra";
4
- import { AlchemyEvmProviderAdapter } from "../providers/evm/alchemyEvmProviderAdapter";
5
- import { SocketTransport } from "../events/socketTransport";
6
- async function main() {
7
- const seller = await AcpAgent.create({
8
- provider: await AlchemyEvmProviderAdapter.create({
9
- walletAddress: "0xSellerWalletAddress",
10
- privateKey: "0xSellerPrivateKey",
11
- entityId: 1,
12
- chains: [baseSepolia],
13
- }),
14
- transport: new SocketTransport(),
15
- });
16
- console.log(`[seller] address: ${await seller.getAddress()}`);
17
- seller.on("entry", async (session, entry) => {
18
- if (entry.kind === "system") {
19
- switch (entry.event.type) {
20
- case "job.created":
21
- console.log(`[seller] new job ${session.jobId}`);
22
- break;
23
- case "job.funded":
24
- console.log(`[seller] job ${session.jobId} funded, delivering…`);
25
- await session.sendMessage("Got the funds. Working on it now.");
26
- await session.submit("Test deliverable");
27
- console.log(`[seller] submitted deliverable on job ${session.jobId}`);
28
- break;
29
- case "job.completed":
30
- console.log(`[seller] job ${session.jobId} completed!`);
31
- console.log(session.toContext());
32
- break;
33
- }
34
- }
35
- // Handle the buyer's first message containing the requirement
36
- if (entry.kind === "message" &&
37
- entry.contentType === "requirement" &&
38
- session.status === "open") {
39
- const requirement = JSON.parse(entry.content);
40
- console.log(`[seller] received requirement for "${requirement.name}":`, requirement.requirement);
41
- await session.setBudget(AssetToken.usdc(0.1, session.chainId));
42
- console.log(`[seller] set budget on job ${session.jobId}`);
43
- }
44
- });
45
- await seller.start(() => {
46
- console.log("[seller callback] listening for jobs…");
47
- });
48
- }
49
- main().catch(console.error);
50
- //# sourceMappingURL=seller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"seller.js","sourceRoot":"","sources":["../../src/examples/seller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAG5D,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACnC,QAAQ,EAAE,MAAM,yBAAyB,CAAC,MAAM,CAAC;YAC/C,aAAa,EAAE,uBAAuB;YACtC,UAAU,EAAE,oBAAoB;YAChC,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,CAAC;QACF,SAAS,EAAE,IAAI,eAAe,EAAE;KACjC,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAE9D,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAmB,EAAE,KAAmB,EAAE,EAAE;QACpE,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACzB,KAAK,aAAa;oBAChB,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACjD,MAAM;gBAER,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,sBAAsB,CAAC,CAAC;oBACjE,MAAM,OAAO,CAAC,WAAW,CAAC,mCAAmC,CAAC,CAAC;oBAC/D,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,yCAAyC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;oBACtE,MAAM;gBAER,KAAK,eAAe;oBAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,KAAK,aAAa,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;oBACjC,MAAM;YACV,CAAC;QACH,CAAC;QAED,8DAA8D;QAC9D,IACE,KAAK,CAAC,IAAI,KAAK,SAAS;YACxB,KAAK,CAAC,WAAW,KAAK,aAAa;YACnC,OAAO,CAAC,MAAM,KAAK,MAAM,EACzB,CAAC;YACD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CACT,sCAAsC,WAAW,CAAC,IAAI,IAAI,EAC1D,WAAW,CAAC,WAAW,CACxB,CAAC;YACF,MAAM,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,8BAA8B,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QACtB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=buyer-fund.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buyer-fund.d.ts","sourceRoot":"","sources":["../../src/examples-local/buyer-fund.ts"],"names":[],"mappings":""}
@@ -1,69 +0,0 @@
1
- import { AcpAgent } from "../acpAgent";
2
- import { ACP_CONTRACT_ADDRESSES } from "../core/constants";
3
- import { baseSepolia, bscTestnet } from "@account-kit/infra";
4
- import { SocketTransport, PrivyAlchemyEvmProviderAdapter, } from "../index";
5
- const SELLER_ADDRESS = "0x740390E678D63bC3D8A0750e531CA239eC3f05C8";
6
- async function main() {
7
- // const buyer = await AcpAgent.create({
8
- // contractAddresses: ACP_CONTRACT_ADDRESSES,
9
- // provider: await AlchemyEvmProviderAdapter.create({
10
- // walletAddress: "0xA5fa43eb6f2BfBFCE26EEBbb04946bA9434D002c",
11
- // privateKey:
12
- // "0x527f9a9ce88a8d60970f5de1115576bf3c4e660fac3fd6c3543959196f7adc3c",
13
- // entityId: 1,
14
- // chains: [baseSepolia, bscTestnet],
15
- // }),
16
- // transport: new SocketTransport(),
17
- // });
18
- const buyer = await AcpAgent.create({
19
- contractAddresses: ACP_CONTRACT_ADDRESSES,
20
- provider: await PrivyAlchemyEvmProviderAdapter.create({
21
- walletAddress: "0x02cc08FFcBdff3232e5BDDcE87ab179E80B0a629",
22
- walletId: "n5h6n76zadntqr6570n4f9ch",
23
- chains: [baseSepolia, bscTestnet],
24
- signerPrivateKey: "MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgc1p9e3nsi9mggGqBcvmLK2QJa8zMubZDhXg/uY0Lc/2hRANCAATzY/p6kWVtUDFO0qZp5MwIGq3zrrA3OriCoBY6yos+BotODqfRO7kx4PnPvwjT6jkVTclpi/cW8/CXO6NziIaA",
25
- }),
26
- transport: new SocketTransport(),
27
- });
28
- const buyerAddress = await buyer.getAddress();
29
- console.log(`[buyer] address: ${buyerAddress}`);
30
- buyer.on("entry", async (session, entry) => {
31
- console.log("entry", entry.kind);
32
- if (entry.kind === "system") {
33
- switch (entry.event.type) {
34
- case "budget.set":
35
- console.log(`[buyer] budget set ${entry.event.amount} USDC on job ${session.jobId}, funding…`);
36
- console.log("Job event", entry.event);
37
- console.log("Job intent", entry.event.fundRequest);
38
- await session.sendMessage("Looks good, funding now.");
39
- await session.fund();
40
- console.log(`[buyer] funded job ${session.jobId}`);
41
- break;
42
- case "job.submitted":
43
- console.log(`[buyer] deliverable received on job ${session.jobId}, completing…`);
44
- console.log("Job intent", entry.event.fundTransfer);
45
- await session.complete("Evaluated");
46
- break;
47
- case "job.completed":
48
- console.log(`[buyer] job ${session.jobId} completed!`);
49
- await buyer.stop();
50
- break;
51
- }
52
- }
53
- if (entry.kind === "message") {
54
- console.log(`[buyer] [job ${session.jobId}] ${entry.from}: ${entry.content}`);
55
- }
56
- });
57
- await buyer.start(() => {
58
- console.log("[buyer] connected to server");
59
- });
60
- const jobId = await buyer.createFundTransferJob(baseSepolia.id, {
61
- providerAddress: SELLER_ADDRESS,
62
- evaluatorAddress: buyerAddress,
63
- expiredAt: Math.floor(Date.now() / 1000) + 3600,
64
- description: "Example job from SDK",
65
- });
66
- console.log(`[buyer] created job ${jobId} — waiting for seller…`);
67
- }
68
- main().catch(console.error);
69
- //# sourceMappingURL=buyer-fund.js.map