@sly_ai/sdk 0.1.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 (60) hide show
  1. package/README.md +346 -0
  2. package/dist/a2a.d.mts +108 -0
  3. package/dist/a2a.d.ts +108 -0
  4. package/dist/a2a.js +173 -0
  5. package/dist/a2a.js.map +1 -0
  6. package/dist/a2a.mjs +171 -0
  7. package/dist/a2a.mjs.map +1 -0
  8. package/dist/acp.d.mts +201 -0
  9. package/dist/acp.d.ts +201 -0
  10. package/dist/acp.js +143 -0
  11. package/dist/acp.js.map +1 -0
  12. package/dist/acp.mjs +141 -0
  13. package/dist/acp.mjs.map +1 -0
  14. package/dist/ap2.d.mts +188 -0
  15. package/dist/ap2.d.ts +188 -0
  16. package/dist/ap2.js +135 -0
  17. package/dist/ap2.js.map +1 -0
  18. package/dist/ap2.mjs +133 -0
  19. package/dist/ap2.mjs.map +1 -0
  20. package/dist/cards.d.mts +750 -0
  21. package/dist/cards.d.ts +750 -0
  22. package/dist/cards.js +373 -0
  23. package/dist/cards.js.map +1 -0
  24. package/dist/cards.mjs +369 -0
  25. package/dist/cards.mjs.map +1 -0
  26. package/dist/client-Cwe2CLU7.d.mts +41 -0
  27. package/dist/client-CyJe3uWO.d.ts +41 -0
  28. package/dist/index.d.mts +662 -0
  29. package/dist/index.d.ts +662 -0
  30. package/dist/index.js +2709 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/index.mjs +2700 -0
  33. package/dist/index.mjs.map +1 -0
  34. package/dist/langchain.d.mts +11 -0
  35. package/dist/langchain.d.ts +11 -0
  36. package/dist/langchain.js +25 -0
  37. package/dist/langchain.js.map +1 -0
  38. package/dist/langchain.mjs +23 -0
  39. package/dist/langchain.mjs.map +1 -0
  40. package/dist/types-df1EICn_.d.mts +165 -0
  41. package/dist/types-df1EICn_.d.ts +165 -0
  42. package/dist/ucp.d.mts +844 -0
  43. package/dist/ucp.d.ts +844 -0
  44. package/dist/ucp.js +616 -0
  45. package/dist/ucp.js.map +1 -0
  46. package/dist/ucp.mjs +614 -0
  47. package/dist/ucp.mjs.map +1 -0
  48. package/dist/vercel.d.mts +178 -0
  49. package/dist/vercel.d.ts +178 -0
  50. package/dist/vercel.js +143 -0
  51. package/dist/vercel.js.map +1 -0
  52. package/dist/vercel.mjs +138 -0
  53. package/dist/vercel.mjs.map +1 -0
  54. package/dist/x402.d.mts +209 -0
  55. package/dist/x402.d.ts +209 -0
  56. package/dist/x402.js +476 -0
  57. package/dist/x402.js.map +1 -0
  58. package/dist/x402.mjs +471 -0
  59. package/dist/x402.mjs.map +1 -0
  60. package/package.json +118 -0
package/dist/a2a.js ADDED
@@ -0,0 +1,173 @@
1
+ 'use strict';
2
+
3
+ // src/protocols/a2a/client.ts
4
+ var A2AClient = class {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ /**
9
+ * Discover an agent's capabilities via its Agent Card.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const card = await sly.a2a.discover('agent-uuid');
14
+ * console.log(card.skills);
15
+ * ```
16
+ */
17
+ async discover(agentId) {
18
+ return this.client.request(
19
+ `/v1/a2a/${agentId}/.well-known/agent.json`
20
+ );
21
+ }
22
+ /**
23
+ * Send a message to an agent, creating or continuing a task.
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const task = await sly.a2a.sendMessage('agent-uuid', {
28
+ * message: 'Check my wallet balance',
29
+ * });
30
+ * console.log(task.status.state); // 'submitted' or 'completed'
31
+ * ```
32
+ */
33
+ async sendMessage(agentId, params) {
34
+ const parts = typeof params.message === "string" ? [{ text: params.message }] : params.message;
35
+ const body = {
36
+ jsonrpc: "2.0",
37
+ method: "message/send",
38
+ params: {
39
+ message: { role: "user", parts, metadata: params.metadata },
40
+ ...params.contextId && { contextId: params.contextId },
41
+ ...params.configuration && { configuration: params.configuration },
42
+ ...params.skillId && { skill_id: params.skillId }
43
+ },
44
+ id: crypto.randomUUID()
45
+ };
46
+ const response = await this.client.request(
47
+ `/v1/a2a/${agentId}`,
48
+ { method: "POST", body: JSON.stringify(body) }
49
+ );
50
+ return response.result;
51
+ }
52
+ /**
53
+ * Get a task by ID.
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const task = await sly.a2a.getTask('agent-uuid', 'task-uuid');
58
+ * console.log(task.status.state);
59
+ * ```
60
+ */
61
+ async getTask(agentId, taskId, historyLength) {
62
+ const body = {
63
+ jsonrpc: "2.0",
64
+ method: "tasks/get",
65
+ params: { id: taskId, ...historyLength && { historyLength } },
66
+ id: crypto.randomUUID()
67
+ };
68
+ const response = await this.client.request(
69
+ `/v1/a2a/${agentId}`,
70
+ { method: "POST", body: JSON.stringify(body) }
71
+ );
72
+ return response.result;
73
+ }
74
+ /**
75
+ * Cancel a task.
76
+ */
77
+ async cancelTask(agentId, taskId) {
78
+ const body = {
79
+ jsonrpc: "2.0",
80
+ method: "tasks/cancel",
81
+ params: { id: taskId },
82
+ id: crypto.randomUUID()
83
+ };
84
+ const response = await this.client.request(
85
+ `/v1/a2a/${agentId}`,
86
+ { method: "POST", body: JSON.stringify(body) }
87
+ );
88
+ return response.result;
89
+ }
90
+ /**
91
+ * List tasks for an agent (REST endpoint).
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * const { data, pagination } = await sly.a2a.listTasks({
96
+ * agentId: 'agent-uuid',
97
+ * state: 'completed',
98
+ * limit: 20,
99
+ * });
100
+ * ```
101
+ */
102
+ async listTasks(options = {}) {
103
+ const params = new URLSearchParams();
104
+ if (options.agentId) params.append("agent_id", options.agentId);
105
+ if (options.state) params.append("state", options.state);
106
+ if (options.direction) params.append("direction", options.direction);
107
+ if (options.contextId) params.append("context_id", options.contextId);
108
+ if (options.page) params.append("page", options.page.toString());
109
+ if (options.limit) params.append("limit", options.limit.toString());
110
+ const qs = params.toString();
111
+ return this.client.request(
112
+ qs ? `/v1/a2a/tasks?${qs}` : "/v1/a2a/tasks"
113
+ );
114
+ }
115
+ /**
116
+ * Respond to a task in input-required state (human-in-the-loop).
117
+ */
118
+ async respond(taskId, message) {
119
+ return this.client.request(
120
+ `/v1/a2a/tasks/${taskId}/respond`,
121
+ { method: "POST", body: JSON.stringify({ message }) }
122
+ );
123
+ }
124
+ // =========================================================================
125
+ // Custom Tools (Story 58.15)
126
+ // =========================================================================
127
+ /**
128
+ * Register a custom tool for an agent.
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const tool = await sly.a2a.createCustomTool('agent-uuid', {
133
+ * toolName: 'lookup_inventory',
134
+ * description: 'Check product inventory levels',
135
+ * inputSchema: {
136
+ * type: 'object',
137
+ * properties: { sku: { type: 'string' } },
138
+ * required: ['sku'],
139
+ * },
140
+ * handlerUrl: 'https://api.example.com/inventory',
141
+ * });
142
+ * ```
143
+ */
144
+ async createCustomTool(agentId, request) {
145
+ const response = await this.client.request(
146
+ `/v1/a2a/agents/${agentId}/tools`,
147
+ { method: "POST", body: JSON.stringify(request) }
148
+ );
149
+ return response.data;
150
+ }
151
+ /**
152
+ * List custom tools for an agent.
153
+ */
154
+ async listCustomTools(agentId) {
155
+ const response = await this.client.request(
156
+ `/v1/a2a/agents/${agentId}/tools`
157
+ );
158
+ return response.data;
159
+ }
160
+ /**
161
+ * Delete a custom tool.
162
+ */
163
+ async deleteCustomTool(agentId, toolId) {
164
+ await this.client.request(
165
+ `/v1/a2a/agents/${agentId}/tools/${toolId}`,
166
+ { method: "DELETE" }
167
+ );
168
+ }
169
+ };
170
+
171
+ exports.A2AClient = A2AClient;
172
+ //# sourceMappingURL=a2a.js.map
173
+ //# sourceMappingURL=a2a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/protocols/a2a/client.ts"],"names":[],"mappings":"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","file":"a2a.js","sourcesContent":["/**\n * A2A Client - Google Agent-to-Agent Protocol\n *\n * SDK client for sending tasks to Sly-hosted agents, discovering agent\n * capabilities, and managing task lifecycle.\n *\n * @see Epic 57: Google A2A Protocol Integration\n * @see Epic 58: A2A Task Processor Worker (Story 58.11)\n */\n\nimport type { PayOSClient } from '../../client';\nimport type {\n A2AAgentCard,\n A2ATask,\n A2AListTasksOptions,\n A2AListTasksResponse,\n A2AConfiguration,\n A2APart,\n A2ACustomTool,\n A2ACreateCustomToolRequest,\n} from '@sly/types';\n\nexport class A2AClient {\n private client: PayOSClient;\n\n constructor(client: PayOSClient) {\n this.client = client;\n }\n\n /**\n * Discover an agent's capabilities via its Agent Card.\n *\n * @example\n * ```typescript\n * const card = await sly.a2a.discover('agent-uuid');\n * console.log(card.skills);\n * ```\n */\n async discover(agentId: string): Promise<A2AAgentCard> {\n return this.client.request<A2AAgentCard>(\n `/v1/a2a/${agentId}/.well-known/agent.json`,\n );\n }\n\n /**\n * Send a message to an agent, creating or continuing a task.\n *\n * @example\n * ```typescript\n * const task = await sly.a2a.sendMessage('agent-uuid', {\n * message: 'Check my wallet balance',\n * });\n * console.log(task.status.state); // 'submitted' or 'completed'\n * ```\n */\n async sendMessage(\n agentId: string,\n params: {\n message: string | A2APart[];\n contextId?: string;\n configuration?: A2AConfiguration;\n metadata?: Record<string, unknown>;\n skillId?: string;\n },\n ): Promise<A2ATask> {\n const parts: A2APart[] =\n typeof params.message === 'string'\n ? [{ text: params.message }]\n : params.message;\n\n const body = {\n jsonrpc: '2.0' as const,\n method: 'message/send',\n params: {\n message: { role: 'user', parts, metadata: params.metadata },\n ...(params.contextId && { contextId: params.contextId }),\n ...(params.configuration && { configuration: params.configuration }),\n ...(params.skillId && { skill_id: params.skillId }),\n },\n id: crypto.randomUUID(),\n };\n\n const response = await this.client.request<{ result: A2ATask }>(\n `/v1/a2a/${agentId}`,\n { method: 'POST', body: JSON.stringify(body) },\n );\n return response.result;\n }\n\n /**\n * Get a task by ID.\n *\n * @example\n * ```typescript\n * const task = await sly.a2a.getTask('agent-uuid', 'task-uuid');\n * console.log(task.status.state);\n * ```\n */\n async getTask(\n agentId: string,\n taskId: string,\n historyLength?: number,\n ): Promise<A2ATask> {\n const body = {\n jsonrpc: '2.0' as const,\n method: 'tasks/get',\n params: { id: taskId, ...(historyLength && { historyLength }) },\n id: crypto.randomUUID(),\n };\n\n const response = await this.client.request<{ result: A2ATask }>(\n `/v1/a2a/${agentId}`,\n { method: 'POST', body: JSON.stringify(body) },\n );\n return response.result;\n }\n\n /**\n * Cancel a task.\n */\n async cancelTask(agentId: string, taskId: string): Promise<A2ATask> {\n const body = {\n jsonrpc: '2.0' as const,\n method: 'tasks/cancel',\n params: { id: taskId },\n id: crypto.randomUUID(),\n };\n\n const response = await this.client.request<{ result: A2ATask }>(\n `/v1/a2a/${agentId}`,\n { method: 'POST', body: JSON.stringify(body) },\n );\n return response.result;\n }\n\n /**\n * List tasks for an agent (REST endpoint).\n *\n * @example\n * ```typescript\n * const { data, pagination } = await sly.a2a.listTasks({\n * agentId: 'agent-uuid',\n * state: 'completed',\n * limit: 20,\n * });\n * ```\n */\n async listTasks(options: A2AListTasksOptions = {}): Promise<A2AListTasksResponse> {\n const params = new URLSearchParams();\n if (options.agentId) params.append('agent_id', options.agentId);\n if (options.state) params.append('state', options.state);\n if (options.direction) params.append('direction', options.direction);\n if (options.contextId) params.append('context_id', options.contextId);\n if (options.page) params.append('page', options.page.toString());\n if (options.limit) params.append('limit', options.limit.toString());\n\n const qs = params.toString();\n return this.client.request<A2AListTasksResponse>(\n qs ? `/v1/a2a/tasks?${qs}` : '/v1/a2a/tasks',\n );\n }\n\n /**\n * Respond to a task in input-required state (human-in-the-loop).\n */\n async respond(taskId: string, message: string): Promise<{ status: string }> {\n return this.client.request<{ status: string }>(\n `/v1/a2a/tasks/${taskId}/respond`,\n { method: 'POST', body: JSON.stringify({ message }) },\n );\n }\n\n // =========================================================================\n // Custom Tools (Story 58.15)\n // =========================================================================\n\n /**\n * Register a custom tool for an agent.\n *\n * @example\n * ```typescript\n * const tool = await sly.a2a.createCustomTool('agent-uuid', {\n * toolName: 'lookup_inventory',\n * description: 'Check product inventory levels',\n * inputSchema: {\n * type: 'object',\n * properties: { sku: { type: 'string' } },\n * required: ['sku'],\n * },\n * handlerUrl: 'https://api.example.com/inventory',\n * });\n * ```\n */\n async createCustomTool(\n agentId: string,\n request: A2ACreateCustomToolRequest,\n ): Promise<A2ACustomTool> {\n const response = await this.client.request<{ data: A2ACustomTool }>(\n `/v1/a2a/agents/${agentId}/tools`,\n { method: 'POST', body: JSON.stringify(request) },\n );\n return response.data;\n }\n\n /**\n * List custom tools for an agent.\n */\n async listCustomTools(agentId: string): Promise<A2ACustomTool[]> {\n const response = await this.client.request<{ data: A2ACustomTool[] }>(\n `/v1/a2a/agents/${agentId}/tools`,\n );\n return response.data;\n }\n\n /**\n * Delete a custom tool.\n */\n async deleteCustomTool(agentId: string, toolId: string): Promise<void> {\n await this.client.request<void>(\n `/v1/a2a/agents/${agentId}/tools/${toolId}`,\n { method: 'DELETE' },\n );\n }\n}\n"]}
package/dist/a2a.mjs ADDED
@@ -0,0 +1,171 @@
1
+ // src/protocols/a2a/client.ts
2
+ var A2AClient = class {
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ /**
7
+ * Discover an agent's capabilities via its Agent Card.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * const card = await sly.a2a.discover('agent-uuid');
12
+ * console.log(card.skills);
13
+ * ```
14
+ */
15
+ async discover(agentId) {
16
+ return this.client.request(
17
+ `/v1/a2a/${agentId}/.well-known/agent.json`
18
+ );
19
+ }
20
+ /**
21
+ * Send a message to an agent, creating or continuing a task.
22
+ *
23
+ * @example
24
+ * ```typescript
25
+ * const task = await sly.a2a.sendMessage('agent-uuid', {
26
+ * message: 'Check my wallet balance',
27
+ * });
28
+ * console.log(task.status.state); // 'submitted' or 'completed'
29
+ * ```
30
+ */
31
+ async sendMessage(agentId, params) {
32
+ const parts = typeof params.message === "string" ? [{ text: params.message }] : params.message;
33
+ const body = {
34
+ jsonrpc: "2.0",
35
+ method: "message/send",
36
+ params: {
37
+ message: { role: "user", parts, metadata: params.metadata },
38
+ ...params.contextId && { contextId: params.contextId },
39
+ ...params.configuration && { configuration: params.configuration },
40
+ ...params.skillId && { skill_id: params.skillId }
41
+ },
42
+ id: crypto.randomUUID()
43
+ };
44
+ const response = await this.client.request(
45
+ `/v1/a2a/${agentId}`,
46
+ { method: "POST", body: JSON.stringify(body) }
47
+ );
48
+ return response.result;
49
+ }
50
+ /**
51
+ * Get a task by ID.
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const task = await sly.a2a.getTask('agent-uuid', 'task-uuid');
56
+ * console.log(task.status.state);
57
+ * ```
58
+ */
59
+ async getTask(agentId, taskId, historyLength) {
60
+ const body = {
61
+ jsonrpc: "2.0",
62
+ method: "tasks/get",
63
+ params: { id: taskId, ...historyLength && { historyLength } },
64
+ id: crypto.randomUUID()
65
+ };
66
+ const response = await this.client.request(
67
+ `/v1/a2a/${agentId}`,
68
+ { method: "POST", body: JSON.stringify(body) }
69
+ );
70
+ return response.result;
71
+ }
72
+ /**
73
+ * Cancel a task.
74
+ */
75
+ async cancelTask(agentId, taskId) {
76
+ const body = {
77
+ jsonrpc: "2.0",
78
+ method: "tasks/cancel",
79
+ params: { id: taskId },
80
+ id: crypto.randomUUID()
81
+ };
82
+ const response = await this.client.request(
83
+ `/v1/a2a/${agentId}`,
84
+ { method: "POST", body: JSON.stringify(body) }
85
+ );
86
+ return response.result;
87
+ }
88
+ /**
89
+ * List tasks for an agent (REST endpoint).
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const { data, pagination } = await sly.a2a.listTasks({
94
+ * agentId: 'agent-uuid',
95
+ * state: 'completed',
96
+ * limit: 20,
97
+ * });
98
+ * ```
99
+ */
100
+ async listTasks(options = {}) {
101
+ const params = new URLSearchParams();
102
+ if (options.agentId) params.append("agent_id", options.agentId);
103
+ if (options.state) params.append("state", options.state);
104
+ if (options.direction) params.append("direction", options.direction);
105
+ if (options.contextId) params.append("context_id", options.contextId);
106
+ if (options.page) params.append("page", options.page.toString());
107
+ if (options.limit) params.append("limit", options.limit.toString());
108
+ const qs = params.toString();
109
+ return this.client.request(
110
+ qs ? `/v1/a2a/tasks?${qs}` : "/v1/a2a/tasks"
111
+ );
112
+ }
113
+ /**
114
+ * Respond to a task in input-required state (human-in-the-loop).
115
+ */
116
+ async respond(taskId, message) {
117
+ return this.client.request(
118
+ `/v1/a2a/tasks/${taskId}/respond`,
119
+ { method: "POST", body: JSON.stringify({ message }) }
120
+ );
121
+ }
122
+ // =========================================================================
123
+ // Custom Tools (Story 58.15)
124
+ // =========================================================================
125
+ /**
126
+ * Register a custom tool for an agent.
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * const tool = await sly.a2a.createCustomTool('agent-uuid', {
131
+ * toolName: 'lookup_inventory',
132
+ * description: 'Check product inventory levels',
133
+ * inputSchema: {
134
+ * type: 'object',
135
+ * properties: { sku: { type: 'string' } },
136
+ * required: ['sku'],
137
+ * },
138
+ * handlerUrl: 'https://api.example.com/inventory',
139
+ * });
140
+ * ```
141
+ */
142
+ async createCustomTool(agentId, request) {
143
+ const response = await this.client.request(
144
+ `/v1/a2a/agents/${agentId}/tools`,
145
+ { method: "POST", body: JSON.stringify(request) }
146
+ );
147
+ return response.data;
148
+ }
149
+ /**
150
+ * List custom tools for an agent.
151
+ */
152
+ async listCustomTools(agentId) {
153
+ const response = await this.client.request(
154
+ `/v1/a2a/agents/${agentId}/tools`
155
+ );
156
+ return response.data;
157
+ }
158
+ /**
159
+ * Delete a custom tool.
160
+ */
161
+ async deleteCustomTool(agentId, toolId) {
162
+ await this.client.request(
163
+ `/v1/a2a/agents/${agentId}/tools/${toolId}`,
164
+ { method: "DELETE" }
165
+ );
166
+ }
167
+ };
168
+
169
+ export { A2AClient };
170
+ //# sourceMappingURL=a2a.mjs.map
171
+ //# sourceMappingURL=a2a.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/protocols/a2a/client.ts"],"names":[],"mappings":"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","file":"a2a.mjs","sourcesContent":["/**\n * A2A Client - Google Agent-to-Agent Protocol\n *\n * SDK client for sending tasks to Sly-hosted agents, discovering agent\n * capabilities, and managing task lifecycle.\n *\n * @see Epic 57: Google A2A Protocol Integration\n * @see Epic 58: A2A Task Processor Worker (Story 58.11)\n */\n\nimport type { PayOSClient } from '../../client';\nimport type {\n A2AAgentCard,\n A2ATask,\n A2AListTasksOptions,\n A2AListTasksResponse,\n A2AConfiguration,\n A2APart,\n A2ACustomTool,\n A2ACreateCustomToolRequest,\n} from '@sly/types';\n\nexport class A2AClient {\n private client: PayOSClient;\n\n constructor(client: PayOSClient) {\n this.client = client;\n }\n\n /**\n * Discover an agent's capabilities via its Agent Card.\n *\n * @example\n * ```typescript\n * const card = await sly.a2a.discover('agent-uuid');\n * console.log(card.skills);\n * ```\n */\n async discover(agentId: string): Promise<A2AAgentCard> {\n return this.client.request<A2AAgentCard>(\n `/v1/a2a/${agentId}/.well-known/agent.json`,\n );\n }\n\n /**\n * Send a message to an agent, creating or continuing a task.\n *\n * @example\n * ```typescript\n * const task = await sly.a2a.sendMessage('agent-uuid', {\n * message: 'Check my wallet balance',\n * });\n * console.log(task.status.state); // 'submitted' or 'completed'\n * ```\n */\n async sendMessage(\n agentId: string,\n params: {\n message: string | A2APart[];\n contextId?: string;\n configuration?: A2AConfiguration;\n metadata?: Record<string, unknown>;\n skillId?: string;\n },\n ): Promise<A2ATask> {\n const parts: A2APart[] =\n typeof params.message === 'string'\n ? [{ text: params.message }]\n : params.message;\n\n const body = {\n jsonrpc: '2.0' as const,\n method: 'message/send',\n params: {\n message: { role: 'user', parts, metadata: params.metadata },\n ...(params.contextId && { contextId: params.contextId }),\n ...(params.configuration && { configuration: params.configuration }),\n ...(params.skillId && { skill_id: params.skillId }),\n },\n id: crypto.randomUUID(),\n };\n\n const response = await this.client.request<{ result: A2ATask }>(\n `/v1/a2a/${agentId}`,\n { method: 'POST', body: JSON.stringify(body) },\n );\n return response.result;\n }\n\n /**\n * Get a task by ID.\n *\n * @example\n * ```typescript\n * const task = await sly.a2a.getTask('agent-uuid', 'task-uuid');\n * console.log(task.status.state);\n * ```\n */\n async getTask(\n agentId: string,\n taskId: string,\n historyLength?: number,\n ): Promise<A2ATask> {\n const body = {\n jsonrpc: '2.0' as const,\n method: 'tasks/get',\n params: { id: taskId, ...(historyLength && { historyLength }) },\n id: crypto.randomUUID(),\n };\n\n const response = await this.client.request<{ result: A2ATask }>(\n `/v1/a2a/${agentId}`,\n { method: 'POST', body: JSON.stringify(body) },\n );\n return response.result;\n }\n\n /**\n * Cancel a task.\n */\n async cancelTask(agentId: string, taskId: string): Promise<A2ATask> {\n const body = {\n jsonrpc: '2.0' as const,\n method: 'tasks/cancel',\n params: { id: taskId },\n id: crypto.randomUUID(),\n };\n\n const response = await this.client.request<{ result: A2ATask }>(\n `/v1/a2a/${agentId}`,\n { method: 'POST', body: JSON.stringify(body) },\n );\n return response.result;\n }\n\n /**\n * List tasks for an agent (REST endpoint).\n *\n * @example\n * ```typescript\n * const { data, pagination } = await sly.a2a.listTasks({\n * agentId: 'agent-uuid',\n * state: 'completed',\n * limit: 20,\n * });\n * ```\n */\n async listTasks(options: A2AListTasksOptions = {}): Promise<A2AListTasksResponse> {\n const params = new URLSearchParams();\n if (options.agentId) params.append('agent_id', options.agentId);\n if (options.state) params.append('state', options.state);\n if (options.direction) params.append('direction', options.direction);\n if (options.contextId) params.append('context_id', options.contextId);\n if (options.page) params.append('page', options.page.toString());\n if (options.limit) params.append('limit', options.limit.toString());\n\n const qs = params.toString();\n return this.client.request<A2AListTasksResponse>(\n qs ? `/v1/a2a/tasks?${qs}` : '/v1/a2a/tasks',\n );\n }\n\n /**\n * Respond to a task in input-required state (human-in-the-loop).\n */\n async respond(taskId: string, message: string): Promise<{ status: string }> {\n return this.client.request<{ status: string }>(\n `/v1/a2a/tasks/${taskId}/respond`,\n { method: 'POST', body: JSON.stringify({ message }) },\n );\n }\n\n // =========================================================================\n // Custom Tools (Story 58.15)\n // =========================================================================\n\n /**\n * Register a custom tool for an agent.\n *\n * @example\n * ```typescript\n * const tool = await sly.a2a.createCustomTool('agent-uuid', {\n * toolName: 'lookup_inventory',\n * description: 'Check product inventory levels',\n * inputSchema: {\n * type: 'object',\n * properties: { sku: { type: 'string' } },\n * required: ['sku'],\n * },\n * handlerUrl: 'https://api.example.com/inventory',\n * });\n * ```\n */\n async createCustomTool(\n agentId: string,\n request: A2ACreateCustomToolRequest,\n ): Promise<A2ACustomTool> {\n const response = await this.client.request<{ data: A2ACustomTool }>(\n `/v1/a2a/agents/${agentId}/tools`,\n { method: 'POST', body: JSON.stringify(request) },\n );\n return response.data;\n }\n\n /**\n * List custom tools for an agent.\n */\n async listCustomTools(agentId: string): Promise<A2ACustomTool[]> {\n const response = await this.client.request<{ data: A2ACustomTool[] }>(\n `/v1/a2a/agents/${agentId}/tools`,\n );\n return response.data;\n }\n\n /**\n * Delete a custom tool.\n */\n async deleteCustomTool(agentId: string, toolId: string): Promise<void> {\n await this.client.request<void>(\n `/v1/a2a/agents/${agentId}/tools/${toolId}`,\n { method: 'DELETE' },\n );\n }\n}\n"]}
package/dist/acp.d.mts ADDED
@@ -0,0 +1,201 @@
1
+ import { S as SlyClient } from './client-Cwe2CLU7.mjs';
2
+ import './types-df1EICn_.mjs';
3
+
4
+ /**
5
+ * Types for ACP (Agentic Commerce Protocol) - Stripe/OpenAI
6
+ */
7
+ type CheckoutStatus = 'pending' | 'completed' | 'cancelled' | 'expired' | 'failed';
8
+ interface CheckoutItem {
9
+ item_id?: string;
10
+ name: string;
11
+ description?: string;
12
+ image_url?: string;
13
+ quantity: number;
14
+ unit_price: number;
15
+ total_price: number;
16
+ currency?: string;
17
+ item_data?: Record<string, any>;
18
+ }
19
+ interface Checkout {
20
+ id: string;
21
+ checkout_id: string;
22
+ agent_id: string;
23
+ agent_name?: string;
24
+ merchant_id: string;
25
+ merchant_name?: string;
26
+ customer_id?: string;
27
+ customer_email?: string;
28
+ total_amount: number;
29
+ currency: string;
30
+ status: CheckoutStatus;
31
+ created_at: string;
32
+ completed_at?: string;
33
+ }
34
+ interface CheckoutWithItems extends Checkout {
35
+ session_id?: string;
36
+ account_id: string;
37
+ merchant_url?: string;
38
+ subtotal: number;
39
+ tax_amount: number;
40
+ shipping_amount: number;
41
+ discount_amount: number;
42
+ shared_payment_token?: string;
43
+ payment_method?: string;
44
+ transfer_id?: string;
45
+ checkout_data?: Record<string, any>;
46
+ shipping_address?: Record<string, any>;
47
+ metadata?: Record<string, any>;
48
+ updated_at?: string;
49
+ cancelled_at?: string;
50
+ expires_at?: string;
51
+ items: CheckoutItem[];
52
+ }
53
+ interface CreateCheckoutRequest {
54
+ checkout_id: string;
55
+ session_id?: string;
56
+ agent_id: string;
57
+ agent_name?: string;
58
+ customer_id?: string;
59
+ customer_email?: string;
60
+ account_id: string;
61
+ merchant_id: string;
62
+ merchant_name?: string;
63
+ merchant_url?: string;
64
+ items: CheckoutItem[];
65
+ tax_amount?: number;
66
+ shipping_amount?: number;
67
+ discount_amount?: number;
68
+ currency?: string;
69
+ shared_payment_token?: string;
70
+ payment_method?: string;
71
+ checkout_data?: Record<string, any>;
72
+ shipping_address?: Record<string, any>;
73
+ metadata?: Record<string, any>;
74
+ expires_at?: string;
75
+ }
76
+ interface CompleteCheckoutRequest {
77
+ shared_payment_token: string;
78
+ payment_method?: string;
79
+ idempotency_key?: string;
80
+ }
81
+ interface CompleteCheckoutResponse {
82
+ checkout_id: string;
83
+ transfer_id: string;
84
+ status: CheckoutStatus;
85
+ completed_at: string;
86
+ total_amount: number;
87
+ currency: string;
88
+ }
89
+ interface ListCheckoutsOptions {
90
+ status?: CheckoutStatus;
91
+ agent_id?: string;
92
+ merchant_id?: string;
93
+ customer_id?: string;
94
+ limit?: number;
95
+ offset?: number;
96
+ }
97
+ interface ListCheckoutsResponse {
98
+ data: Checkout[];
99
+ pagination: {
100
+ total: number;
101
+ limit: number;
102
+ offset: number;
103
+ };
104
+ }
105
+
106
+ /**
107
+ * ACP Client - Agentic Commerce Protocol (Stripe/OpenAI)
108
+ *
109
+ * Wraps PayOS ACP API endpoints for checkout-based payments.
110
+ */
111
+
112
+ declare class ACPClient {
113
+ private client;
114
+ constructor(client: SlyClient);
115
+ /**
116
+ * Create a new ACP checkout session
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * const checkout = await payos.acp.createCheckout({
121
+ * checkout_id: 'checkout_unique_123',
122
+ * agent_id: 'agent_shopping_assistant',
123
+ * account_id: 'acct_uuid',
124
+ * merchant_id: 'merchant_store',
125
+ * items: [
126
+ * {
127
+ * name: 'Product 1',
128
+ * quantity: 2,
129
+ * unit_price: 50.00,
130
+ * total_price: 100.00,
131
+ * },
132
+ * ],
133
+ * tax_amount: 10.00,
134
+ * shipping_amount: 5.00,
135
+ * });
136
+ * ```
137
+ */
138
+ createCheckout(request: CreateCheckoutRequest): Promise<CheckoutWithItems>;
139
+ /**
140
+ * List checkouts with optional filtering
141
+ *
142
+ * @example
143
+ * ```typescript
144
+ * const { data, pagination } = await payos.acp.listCheckouts({
145
+ * status: 'pending',
146
+ * agent_id: 'agent_shopping_assistant',
147
+ * limit: 20,
148
+ * });
149
+ * ```
150
+ */
151
+ listCheckouts(options?: ListCheckoutsOptions): Promise<ListCheckoutsResponse>;
152
+ /**
153
+ * Get checkout details with items
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * const checkout = await payos.acp.getCheckout('checkout_id');
158
+ * console.log(checkout.items);
159
+ * console.log(checkout.total_amount);
160
+ * ```
161
+ */
162
+ getCheckout(checkoutId: string): Promise<CheckoutWithItems>;
163
+ /**
164
+ * Complete a checkout with SharedPaymentToken
165
+ *
166
+ * @example
167
+ * ```typescript
168
+ * const result = await payos.acp.completeCheckout('checkout_id', {
169
+ * shared_payment_token: 'spt_...',
170
+ * payment_method: 'card',
171
+ * });
172
+ *
173
+ * console.log(result.transfer_id);
174
+ * console.log(result.status); // 'completed'
175
+ * ```
176
+ */
177
+ completeCheckout(checkoutId: string, request: CompleteCheckoutRequest): Promise<CompleteCheckoutResponse>;
178
+ /**
179
+ * Cancel a checkout
180
+ *
181
+ * @example
182
+ * ```typescript
183
+ * const result = await payos.acp.cancelCheckout('checkout_id');
184
+ * console.log(result.status); // 'cancelled'
185
+ * ```
186
+ */
187
+ cancelCheckout(checkoutId: string): Promise<Checkout>;
188
+ /**
189
+ * Get ACP analytics
190
+ *
191
+ * @example
192
+ * ```typescript
193
+ * const analytics = await payos.acp.getAnalytics('30d');
194
+ * console.log(analytics.summary.totalRevenue);
195
+ * console.log(analytics.summary.averageOrderValue);
196
+ * ```
197
+ */
198
+ getAnalytics(period?: '24h' | '7d' | '30d' | '90d' | '1y'): Promise<any>;
199
+ }
200
+
201
+ export { ACPClient, type Checkout, type CheckoutItem, type CheckoutStatus, type CheckoutWithItems, type CompleteCheckoutRequest, type CompleteCheckoutResponse, type CreateCheckoutRequest, type ListCheckoutsOptions, type ListCheckoutsResponse };