@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.
- package/README.md +346 -0
- package/dist/a2a.d.mts +108 -0
- package/dist/a2a.d.ts +108 -0
- package/dist/a2a.js +173 -0
- package/dist/a2a.js.map +1 -0
- package/dist/a2a.mjs +171 -0
- package/dist/a2a.mjs.map +1 -0
- package/dist/acp.d.mts +201 -0
- package/dist/acp.d.ts +201 -0
- package/dist/acp.js +143 -0
- package/dist/acp.js.map +1 -0
- package/dist/acp.mjs +141 -0
- package/dist/acp.mjs.map +1 -0
- package/dist/ap2.d.mts +188 -0
- package/dist/ap2.d.ts +188 -0
- package/dist/ap2.js +135 -0
- package/dist/ap2.js.map +1 -0
- package/dist/ap2.mjs +133 -0
- package/dist/ap2.mjs.map +1 -0
- package/dist/cards.d.mts +750 -0
- package/dist/cards.d.ts +750 -0
- package/dist/cards.js +373 -0
- package/dist/cards.js.map +1 -0
- package/dist/cards.mjs +369 -0
- package/dist/cards.mjs.map +1 -0
- package/dist/client-Cwe2CLU7.d.mts +41 -0
- package/dist/client-CyJe3uWO.d.ts +41 -0
- package/dist/index.d.mts +662 -0
- package/dist/index.d.ts +662 -0
- package/dist/index.js +2709 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2700 -0
- package/dist/index.mjs.map +1 -0
- package/dist/langchain.d.mts +11 -0
- package/dist/langchain.d.ts +11 -0
- package/dist/langchain.js +25 -0
- package/dist/langchain.js.map +1 -0
- package/dist/langchain.mjs +23 -0
- package/dist/langchain.mjs.map +1 -0
- package/dist/types-df1EICn_.d.mts +165 -0
- package/dist/types-df1EICn_.d.ts +165 -0
- package/dist/ucp.d.mts +844 -0
- package/dist/ucp.d.ts +844 -0
- package/dist/ucp.js +616 -0
- package/dist/ucp.js.map +1 -0
- package/dist/ucp.mjs +614 -0
- package/dist/ucp.mjs.map +1 -0
- package/dist/vercel.d.mts +178 -0
- package/dist/vercel.d.ts +178 -0
- package/dist/vercel.js +143 -0
- package/dist/vercel.js.map +1 -0
- package/dist/vercel.mjs +138 -0
- package/dist/vercel.mjs.map +1 -0
- package/dist/x402.d.mts +209 -0
- package/dist/x402.d.ts +209 -0
- package/dist/x402.js +476 -0
- package/dist/x402.js.map +1 -0
- package/dist/x402.mjs +471 -0
- package/dist/x402.mjs.map +1 -0
- 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
|
package/dist/a2a.js.map
ADDED
|
@@ -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
|
package/dist/a2a.mjs.map
ADDED
|
@@ -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 };
|