@meetploy/agent-sdk 0.0.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.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,314 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { createStateManager } from "./state-manager.js";
3
+ import { buildOpenAITools, executeTool, listAllToolNames } from "./tools.js";
4
+ import { buildMemoryBlock, createDefaultWorkspace, deleteWorkspace, loadWorkspace, saveWorkspace, } from "./workspace.js";
5
+ function createMockStateBinding() {
6
+ const store = new Map();
7
+ return {
8
+ store,
9
+ binding: {
10
+ get: (key) => Promise.resolve(store.get(key) ?? null),
11
+ set: (key, value) => {
12
+ store.set(key, value);
13
+ return Promise.resolve();
14
+ },
15
+ delete: (key) => {
16
+ store.delete(key);
17
+ return Promise.resolve();
18
+ },
19
+ },
20
+ };
21
+ }
22
+ function createMockMessenger() {
23
+ const messages = [];
24
+ return {
25
+ messages,
26
+ sendMessage(chatId, text) {
27
+ messages.push({ chatId, text });
28
+ return Promise.resolve();
29
+ },
30
+ sendDocument() {
31
+ return Promise.resolve();
32
+ },
33
+ sendTypingIndicator() {
34
+ return Promise.resolve();
35
+ },
36
+ };
37
+ }
38
+ describe("StateManager", () => {
39
+ test("get/set/delete string values", async () => {
40
+ const { binding } = createMockStateBinding();
41
+ const state = createStateManager(binding);
42
+ await state.set("key1", "value1");
43
+ expect(await state.get("key1")).toBe("value1");
44
+ await state.delete("key1");
45
+ expect(await state.get("key1")).toBeNull();
46
+ });
47
+ test("getJSON/setJSON round-trips objects", async () => {
48
+ const { binding } = createMockStateBinding();
49
+ const state = createStateManager(binding);
50
+ const obj = { name: "test", count: 42, nested: { a: true } };
51
+ await state.setJSON("data", obj);
52
+ const retrieved = await state.getJSON("data");
53
+ expect(retrieved).toEqual(obj);
54
+ });
55
+ test("getJSON returns null for missing key", async () => {
56
+ const { binding } = createMockStateBinding();
57
+ const state = createStateManager(binding);
58
+ expect(await state.getJSON("nonexistent")).toBeNull();
59
+ });
60
+ });
61
+ describe("Workspace", () => {
62
+ test("createDefaultWorkspace has correct defaults", () => {
63
+ const ws = createDefaultWorkspace("u1", "c1", "telegram");
64
+ expect(ws.userId).toBe("u1");
65
+ expect(ws.chatId).toBe("c1");
66
+ expect(ws.platform).toBe("telegram");
67
+ expect(ws.messages).toEqual([]);
68
+ expect(ws.memory).toEqual({});
69
+ expect(ws.mcpServers).toEqual([]);
70
+ expect(ws.debugMode).toBe(false);
71
+ expect(ws.activeRunId).toBeNull();
72
+ expect(ws.queue).toEqual([]);
73
+ });
74
+ test("save and load workspace round-trips", async () => {
75
+ const { binding } = createMockStateBinding();
76
+ const state = createStateManager(binding);
77
+ const ws = createDefaultWorkspace("u1", "c1", "http");
78
+ ws.messages.push({ role: "user", content: "hello" });
79
+ ws.memory["name"] = { value: "Alice", secret: false, createdAt: 1000 };
80
+ await saveWorkspace(state, ws);
81
+ const loaded = await loadWorkspace(state, "u1");
82
+ expect(loaded).toEqual(ws);
83
+ });
84
+ test("loadWorkspace returns null for unknown user", async () => {
85
+ const { binding } = createMockStateBinding();
86
+ const state = createStateManager(binding);
87
+ expect(await loadWorkspace(state, "unknown")).toBeNull();
88
+ });
89
+ test("deleteWorkspace removes the workspace", async () => {
90
+ const { binding } = createMockStateBinding();
91
+ const state = createStateManager(binding);
92
+ const ws = createDefaultWorkspace("u1", "c1", "http");
93
+ await saveWorkspace(state, ws);
94
+ expect(await loadWorkspace(state, "u1")).not.toBeNull();
95
+ await deleteWorkspace(state, "u1");
96
+ expect(await loadWorkspace(state, "u1")).toBeNull();
97
+ });
98
+ test("buildMemoryBlock returns empty string with no memories", () => {
99
+ const ws = createDefaultWorkspace("u1", "c1", "http");
100
+ expect(buildMemoryBlock(ws)).toBe("");
101
+ });
102
+ test("buildMemoryBlock formats memories correctly", () => {
103
+ const ws = createDefaultWorkspace("u1", "c1", "http");
104
+ ws.memory["name"] = { value: "Alice", secret: false, createdAt: 1000 };
105
+ ws.memory["apiKey"] = { value: "sk-123", secret: true, createdAt: 2000 };
106
+ const block = buildMemoryBlock(ws);
107
+ expect(block).toContain("name: Alice");
108
+ expect(block).toContain("apiKey: [SECRET]");
109
+ expect(block).not.toContain("sk-123");
110
+ });
111
+ });
112
+ describe("buildOpenAITools", () => {
113
+ const baseConfig = {
114
+ systemPrompt: "test",
115
+ handle: () => new Response("ok"),
116
+ };
117
+ test("includes all built-in tools with defaults", () => {
118
+ const tools = buildOpenAITools(baseConfig, {}, []);
119
+ const names = tools.map((t) => t.function.name);
120
+ expect(names).toContain("memory_set");
121
+ expect(names).toContain("memory_get");
122
+ expect(names).toContain("memory_delete");
123
+ expect(names).toContain("memory_list");
124
+ expect(names).toContain("artifact_create");
125
+ expect(names).toContain("schedule_task");
126
+ });
127
+ test("excludes memory tools when memory is disabled", () => {
128
+ const features = { memory: false };
129
+ const tools = buildOpenAITools(baseConfig, features, []);
130
+ const names = tools.map((t) => t.function.name);
131
+ expect(names).not.toContain("memory_set");
132
+ expect(names).not.toContain("memory_get");
133
+ });
134
+ test("excludes artifact tools when artifacts is disabled", () => {
135
+ const features = { artifacts: false };
136
+ const tools = buildOpenAITools(baseConfig, features, []);
137
+ const names = tools.map((t) => t.function.name);
138
+ expect(names).not.toContain("artifact_create");
139
+ });
140
+ test("excludes scheduling tools when scheduling is disabled", () => {
141
+ const features = { scheduling: false };
142
+ const tools = buildOpenAITools(baseConfig, features, []);
143
+ const names = tools.map((t) => t.function.name);
144
+ expect(names).not.toContain("schedule_task");
145
+ });
146
+ test("includes custom tools", () => {
147
+ const config = {
148
+ ...baseConfig,
149
+ tools: [
150
+ {
151
+ name: "my_tool",
152
+ description: "A custom tool",
153
+ parameters: { type: "object", properties: {} },
154
+ execute: () => Promise.resolve("result"),
155
+ },
156
+ ],
157
+ };
158
+ const tools = buildOpenAITools(config, {}, []);
159
+ const names = tools.map((t) => t.function.name);
160
+ expect(names).toContain("my_tool");
161
+ });
162
+ test("includes mcp_call_tool only when MCP servers exist", () => {
163
+ const toolsWithout = buildOpenAITools(baseConfig, {}, []);
164
+ expect(toolsWithout.map((t) => t.function.name)).not.toContain("mcp_call_tool");
165
+ const toolsWith = buildOpenAITools(baseConfig, {}, [
166
+ { name: "test-server", url: "http://localhost", tools: [] },
167
+ ]);
168
+ expect(toolsWith.map((t) => t.function.name)).toContain("mcp_call_tool");
169
+ });
170
+ });
171
+ describe("executeTool", () => {
172
+ function createMockEnv() {
173
+ const { binding } = createMockStateBinding();
174
+ return {
175
+ AI_URL: "http://localhost",
176
+ AI_TOKEN: "test-token",
177
+ STATE: binding,
178
+ FILES: {
179
+ put: () => Promise.resolve(),
180
+ get: () => Promise.resolve(null),
181
+ delete: () => Promise.resolve(),
182
+ },
183
+ AGENT_WORKFLOW: {
184
+ trigger: () => Promise.resolve(),
185
+ },
186
+ SCHEDULER: {
187
+ set: () => Promise.resolve(),
188
+ },
189
+ vars: {},
190
+ };
191
+ }
192
+ function createToolContext(workspace) {
193
+ const mockEnv = createMockEnv();
194
+ const state = createStateManager(mockEnv.STATE);
195
+ const ws = workspace ?? createDefaultWorkspace("u1", "c1", "http");
196
+ return {
197
+ workspace: ws,
198
+ state,
199
+ messenger: createMockMessenger(),
200
+ env: mockEnv,
201
+ customTools: [],
202
+ };
203
+ }
204
+ test("memory_set stores a memory", async () => {
205
+ const ctx = createToolContext();
206
+ const result = await executeTool("memory_set", { key: "name", value: "Alice" }, ctx);
207
+ expect(result.output).toContain("Stored memory: name");
208
+ expect(result.workspace.memory["name"].value).toBe("Alice");
209
+ expect(result.workspace.memory["name"].secret).toBe(false);
210
+ });
211
+ test("memory_set with secret flag", async () => {
212
+ const ctx = createToolContext();
213
+ const result = await executeTool("memory_set", { key: "apiKey", value: "sk-123", secret: true }, ctx);
214
+ expect(result.workspace.memory["apiKey"].secret).toBe(true);
215
+ });
216
+ test("memory_get retrieves a memory", async () => {
217
+ const ws = createDefaultWorkspace("u1", "c1", "http");
218
+ ws.memory["name"] = { value: "Alice", secret: false, createdAt: 1000 };
219
+ const ctx = createToolContext(ws);
220
+ const result = await executeTool("memory_get", { key: "name" }, ctx);
221
+ expect(result.output).toBe("Alice");
222
+ });
223
+ test("memory_get returns not found for missing key", async () => {
224
+ const ctx = createToolContext();
225
+ const result = await executeTool("memory_get", { key: "missing" }, ctx);
226
+ expect(result.output).toContain("No memory found");
227
+ });
228
+ test("memory_delete removes a memory", async () => {
229
+ const ws = createDefaultWorkspace("u1", "c1", "http");
230
+ ws.memory["name"] = { value: "Alice", secret: false, createdAt: 1000 };
231
+ const ctx = createToolContext(ws);
232
+ const result = await executeTool("memory_delete", { key: "name" }, ctx);
233
+ expect(result.output).toContain("Deleted memory: name");
234
+ expect(result.workspace.memory["name"]).toBeUndefined();
235
+ });
236
+ test("memory_list shows all keys", async () => {
237
+ const ws = createDefaultWorkspace("u1", "c1", "http");
238
+ ws.memory["name"] = { value: "Alice", secret: false, createdAt: 1000 };
239
+ ws.memory["lang"] = { value: "en", secret: false, createdAt: 2000 };
240
+ const ctx = createToolContext(ws);
241
+ const result = await executeTool("memory_list", {}, ctx);
242
+ expect(result.output).toContain("name");
243
+ expect(result.output).toContain("lang");
244
+ });
245
+ test("memory_list shows empty message when no memories", async () => {
246
+ const ctx = createToolContext();
247
+ const result = await executeTool("memory_list", {}, ctx);
248
+ expect(result.output).toContain("No memories stored");
249
+ });
250
+ test("schedule_task creates a task", async () => {
251
+ const ctx = createToolContext();
252
+ const result = await executeTool("schedule_task", { description: "Send reminder", delayMs: 60000 }, ctx);
253
+ expect(result.output).toContain("Scheduled task");
254
+ expect(result.output).toContain("Send reminder");
255
+ });
256
+ test("custom tool execution", async () => {
257
+ const customTool = {
258
+ name: "echo",
259
+ description: "Echo",
260
+ parameters: { type: "object", properties: {} },
261
+ execute: (args) => Promise.resolve(`Echo: ${args.text}`),
262
+ };
263
+ const ctx = createToolContext();
264
+ ctx.customTools = [customTool];
265
+ const result = await executeTool("echo", { text: "hello" }, ctx);
266
+ expect(result.output).toBe("Echo: hello");
267
+ });
268
+ test("unknown tool returns error", async () => {
269
+ const ctx = createToolContext();
270
+ const result = await executeTool("nonexistent", {}, ctx);
271
+ expect(result.output).toContain("Unknown tool: nonexistent");
272
+ });
273
+ });
274
+ describe("listAllToolNames", () => {
275
+ const baseConfig = {
276
+ systemPrompt: "test",
277
+ handle: () => new Response("ok"),
278
+ };
279
+ test("lists all built-in and custom tool names", () => {
280
+ const config = {
281
+ ...baseConfig,
282
+ tools: [
283
+ {
284
+ name: "custom1",
285
+ description: "test",
286
+ parameters: {},
287
+ execute: () => Promise.resolve("ok"),
288
+ },
289
+ ],
290
+ };
291
+ const names = listAllToolNames(config, {}, []);
292
+ expect(names).toContain("memory_set");
293
+ expect(names).toContain("artifact_create");
294
+ expect(names).toContain("schedule_task");
295
+ expect(names).toContain("custom1");
296
+ });
297
+ test("includes MCP server tool names", () => {
298
+ const names = listAllToolNames(baseConfig, {}, [
299
+ {
300
+ name: "weather",
301
+ url: "http://localhost",
302
+ tools: [
303
+ {
304
+ name: "get_forecast",
305
+ description: "Get weather",
306
+ parameters: {},
307
+ },
308
+ ],
309
+ },
310
+ ]);
311
+ expect(names).toContain("weather/get_forecast");
312
+ });
313
+ });
314
+ //# sourceMappingURL=agent-sdk.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-sdk.spec.js","sourceRoot":"","sources":["../src/agent-sdk.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { AgentCommands, AgentConfig, StateManager } from "./types.js";
2
+ export declare function createCommands(config: AgentConfig, state: StateManager): AgentCommands;
@@ -0,0 +1,83 @@
1
+ import { listAllToolNames } from "./tools.js";
2
+ import { deleteWorkspace, loadWorkspace, saveWorkspace } from "./workspace.js";
3
+ export function createCommands(config, state) {
4
+ return {
5
+ async reset(userId, _chatId) {
6
+ await deleteWorkspace(state, userId);
7
+ return "Context cleared. Starting fresh.";
8
+ },
9
+ async debug(userId, _chatId) {
10
+ const workspace = await loadWorkspace(state, userId);
11
+ if (!workspace) {
12
+ return "No workspace found. Send a message first.";
13
+ }
14
+ workspace.debugMode = !workspace.debugMode;
15
+ await saveWorkspace(state, workspace);
16
+ return workspace.debugMode
17
+ ? "Debug mode enabled. You'll see internal processing details."
18
+ : "Debug mode disabled.";
19
+ },
20
+ async installMcp(userId, chatId, url) {
21
+ if (!url) {
22
+ return "Usage: /install <mcp-server-url>";
23
+ }
24
+ const workspace = await loadWorkspace(state, userId);
25
+ if (!workspace) {
26
+ return "No workspace found. Send a message first.";
27
+ }
28
+ let manifest;
29
+ try {
30
+ const response = await fetch(`${url}/manifest`);
31
+ if (!response.ok) {
32
+ return `Failed to fetch MCP manifest: ${String(response.status)}`;
33
+ }
34
+ manifest = (await response.json());
35
+ }
36
+ catch (err) {
37
+ return `Failed to connect to MCP server: ${err instanceof Error ? err.message : String(err)}`;
38
+ }
39
+ const existing = workspace.mcpServers.find((s) => s.name === manifest.name);
40
+ if (existing) {
41
+ existing.url = url;
42
+ existing.tools = manifest.tools;
43
+ }
44
+ else {
45
+ workspace.mcpServers.push({
46
+ name: manifest.name,
47
+ url,
48
+ tools: manifest.tools,
49
+ });
50
+ }
51
+ await saveWorkspace(state, workspace);
52
+ const toolNames = manifest.tools.map((t) => t.name).join(", ");
53
+ return `Installed MCP server "${manifest.name}" with tools: ${toolNames}`;
54
+ },
55
+ async uninstallMcp(userId, name) {
56
+ if (!name) {
57
+ return "Usage: /uninstall <server-name>";
58
+ }
59
+ const workspace = await loadWorkspace(state, userId);
60
+ if (!workspace) {
61
+ return "No workspace found. Send a message first.";
62
+ }
63
+ const idx = workspace.mcpServers.findIndex((s) => s.name === name);
64
+ if (idx === -1) {
65
+ return `MCP server "${name}" not found.`;
66
+ }
67
+ workspace.mcpServers.splice(idx, 1);
68
+ await saveWorkspace(state, workspace);
69
+ return `Uninstalled MCP server "${name}".`;
70
+ },
71
+ async listTools(userId) {
72
+ const workspace = await loadWorkspace(state, userId);
73
+ const mcpServers = workspace?.mcpServers ?? [];
74
+ const features = config.features ?? {};
75
+ const names = listAllToolNames(config, features, mcpServers);
76
+ if (names.length === 0) {
77
+ return "No tools available.";
78
+ }
79
+ return `Available tools:\n${names.map((n) => `- ${n}`).join("\n")}`;
80
+ },
81
+ };
82
+ }
83
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAS/E,MAAM,UAAU,cAAc,CAC7B,MAAmB,EACnB,KAAmB;IAEnB,OAAO;QACN,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,OAAe;YAC1C,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrC,OAAO,kCAAkC,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,OAAe;YAC1C,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,OAAO,2CAA2C,CAAC;YACpD,CAAC;YAED,SAAS,CAAC,SAAS,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;YAC3C,MAAM,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEtC,OAAO,SAAS,CAAC,SAAS;gBACzB,CAAC,CAAC,6DAA6D;gBAC/D,CAAC,CAAC,sBAAsB,CAAC;QAC3B,CAAC;QAED,KAAK,CAAC,UAAU,CACf,MAAc,EACd,MAAc,EACd,GAAW;YAEX,IAAI,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO,kCAAkC,CAAC;YAC3C,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,OAAO,2CAA2C,CAAC;YACpD,CAAC;YAGD,IAAI,QAAkD,CAAC;YACvD,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAClB,OAAO,iCAAiC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnE,CAAC;gBACD,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGhC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACd,OAAO,oCAAoC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/F,CAAC;YAGD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAC/B,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC;gBACnB,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACP,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;oBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;oBACnB,GAAG;oBACH,KAAK,EAAE,QAAQ,CAAC,KAAK;iBACrB,CAAC,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEtC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,yBAAyB,QAAQ,CAAC,IAAI,iBAAiB,SAAS,EAAE,CAAC;QAC3E,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,IAAY;YAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,OAAO,iCAAiC,CAAC;YAC1C,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,OAAO,2CAA2C,CAAC;YACpD,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACnE,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBAChB,OAAO,eAAe,IAAI,cAAc,CAAC;YAC1C,CAAC;YAED,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpC,MAAM,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEtC,OAAO,2BAA2B,IAAI,IAAI,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,MAAc;YAC7B,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,SAAS,EAAE,UAAU,IAAI,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAE7D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO,qBAAqB,CAAC;YAC9B,CAAC;YAED,OAAO,qBAAqB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrE,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { AgentConfig, AgentExport } from "./types.js";
2
+ export declare function createAgent(config: AgentConfig): AgentExport;
@@ -0,0 +1,70 @@
1
+ import { createCommands } from "./commands.js";
2
+ import { createStateManager } from "./state-manager.js";
3
+ import { createAgentWorkflow } from "./workflow.js";
4
+ import { createDefaultWorkspace, loadWorkspace, saveWorkspace, } from "./workspace.js";
5
+ function buildAgentContext(config, env) {
6
+ const state = createStateManager(env.STATE);
7
+ const commands = createCommands(config, state);
8
+ const handleMessage = async (params) => {
9
+ const { userId, chatId, platform, text, messenger } = params;
10
+ let workspace = await loadWorkspace(state, userId);
11
+ if (!workspace) {
12
+ workspace = createDefaultWorkspace(userId, chatId, platform);
13
+ await saveWorkspace(state, workspace);
14
+ }
15
+ if (workspace.activeRunId) {
16
+ workspace.queue.push({ text, timestamp: Date.now() });
17
+ await saveWorkspace(state, workspace);
18
+ return;
19
+ }
20
+ workspace.activeRunId = `run_${String(Date.now())}`;
21
+ workspace.chatId = chatId;
22
+ workspace.platform = platform;
23
+ await saveWorkspace(state, workspace);
24
+ await messenger.sendTypingIndicator(chatId);
25
+ await env.AGENT_WORKFLOW.trigger({
26
+ userId,
27
+ chatId,
28
+ platform,
29
+ text,
30
+ });
31
+ };
32
+ return {
33
+ handleMessage,
34
+ commands,
35
+ state,
36
+ env,
37
+ };
38
+ }
39
+ export function createAgent(config) {
40
+ const workflowHandler = createAgentWorkflow(config);
41
+ return {
42
+ async fetch(req, env, _ctx) {
43
+ const agent = buildAgentContext(config, env);
44
+ return await config.handle(req, env, agent);
45
+ },
46
+ async timer(event, env, _ctx) {
47
+ const payload = event.payload;
48
+ if (!payload) {
49
+ return;
50
+ }
51
+ const state = createStateManager(env.STATE);
52
+ const workspace = (await loadWorkspace(state, payload.userId)) ??
53
+ createDefaultWorkspace(payload.userId, payload.chatId, payload.platform);
54
+ const text = `[Scheduled task]: ${payload.description}`;
55
+ workspace.messages.push({ role: "user", content: text });
56
+ workspace.activeRunId = `run_${String(Date.now())}`;
57
+ await saveWorkspace(state, workspace);
58
+ await env.AGENT_WORKFLOW.trigger({
59
+ userId: payload.userId,
60
+ chatId: payload.chatId,
61
+ platform: payload.platform,
62
+ text,
63
+ });
64
+ },
65
+ workflows: {
66
+ agent_run: workflowHandler,
67
+ },
68
+ };
69
+ }
70
+ //# sourceMappingURL=create-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-agent.js","sourceRoot":"","sources":["../src/create-agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { InferSchemaArgs, ToolContext, ToolDefinition, ToolParams } from "./types.js";
2
+ export declare function defineTool<const TParams extends ToolParams>(def: {
3
+ name: string;
4
+ description: string;
5
+ parameters: TParams;
6
+ execute: (args: InferSchemaArgs<TParams>, ctx: ToolContext) => Promise<string>;
7
+ }): ToolDefinition<InferSchemaArgs<TParams>>;
@@ -0,0 +1,4 @@
1
+ export function defineTool(def) {
2
+ return def;
3
+ }
4
+ //# sourceMappingURL=define-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-tool.js","sourceRoot":"","sources":["../src/define-tool.ts"],"names":[],"mappings":"AAiCA,MAAM,UAAU,UAAU,CAAmC,GAQ5D;IACA,OAAO,GAA+C,CAAC;AACxD,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { createAgent } from "./create-agent.js";
2
+ export { defineTool } from "./define-tool.js";
3
+ export { createStateManager } from "./state-manager.js";
4
+ export type { AgentConfig, AgentContext, AgentCommands, AgentExport, AgentHooks, AgentRunInput, ChatMessage, FeatureFlags, HandleMessageParams, HookContext, InferSchemaArgs, McpServer, McpServerTool, MemoryEntry, Messenger, OpenAITool, PloyEnv, QueuedMessage, ScheduledTask, StateManager, ToolCall, ToolContext, ToolDefinition, ToolParams, Workspace, } from "./types.js";
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { createAgent } from "./create-agent.js";
2
+ export { defineTool } from "./define-tool.js";
3
+ export { createStateManager } from "./state-manager.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { StateManager } from "./types.js";
2
+ import type { StateBinding } from "@meetploy/types";
3
+ export declare function createStateManager(binding: StateBinding): StateManager;
@@ -0,0 +1,24 @@
1
+ export function createStateManager(binding) {
2
+ return {
3
+ get(key) {
4
+ return binding.get(key);
5
+ },
6
+ set(key, value) {
7
+ return binding.set(key, value);
8
+ },
9
+ delete(key) {
10
+ return binding.delete(key);
11
+ },
12
+ async getJSON(key) {
13
+ const raw = await binding.get(key);
14
+ if (raw === null) {
15
+ return null;
16
+ }
17
+ return JSON.parse(raw);
18
+ },
19
+ async setJSON(key, value) {
20
+ await binding.set(key, JSON.stringify(value));
21
+ },
22
+ };
23
+ }
24
+ //# sourceMappingURL=state-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-manager.js","sourceRoot":"","sources":["../src/state-manager.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,kBAAkB,CAAC,OAAqB;IACvD,OAAO;QACN,GAAG,CAAC,GAAW;YACd,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,GAAG,CAAC,GAAW,EAAE,KAAa;YAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,GAAW;YACjB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,KAAK,CAAC,OAAO,CAAI,GAAW;YAC3B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBAClB,OAAO,IAAI,CAAC;YACb,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;QAC7B,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,KAAc;YACxC,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { AgentConfig, AgentHooks, FeatureFlags, McpServer, Messenger, OpenAITool, PloyEnv, StateManager, ToolDefinition, Workspace } from "./types.js";
2
+ export interface InternalToolContext {
3
+ workspace: Workspace;
4
+ state: StateManager;
5
+ messenger: Messenger;
6
+ hooks?: AgentHooks;
7
+ env: PloyEnv;
8
+ customTools: ToolDefinition<any>[];
9
+ }
10
+ export interface ToolExecutionResult {
11
+ output: string;
12
+ workspace: Workspace;
13
+ }
14
+ export declare function buildOpenAITools(config: AgentConfig, features: FeatureFlags, mcpServers: McpServer[]): OpenAITool[];
15
+ export declare function executeTool(toolName: string, args: Record<string, unknown>, ctx: InternalToolContext): Promise<ToolExecutionResult>;
16
+ export declare function listAllToolNames(config: AgentConfig, features: FeatureFlags, mcpServers: McpServer[]): string[];