zilmate 1.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.
Files changed (166) hide show
  1. package/.env.example +14 -0
  2. package/README.md +326 -0
  3. package/agent-docs.md +264 -0
  4. package/dist/agents/chat.agent.d.ts +30 -0
  5. package/dist/agents/chat.agent.d.ts.map +1 -0
  6. package/dist/agents/chat.agent.js +16 -0
  7. package/dist/agents/chat.agent.js.map +1 -0
  8. package/dist/agents/docs-research.agent.d.ts +127 -0
  9. package/dist/agents/docs-research.agent.d.ts.map +1 -0
  10. package/dist/agents/docs-research.agent.js +29 -0
  11. package/dist/agents/docs-research.agent.js.map +1 -0
  12. package/dist/agents/image.agent.d.ts +9 -0
  13. package/dist/agents/image.agent.d.ts.map +1 -0
  14. package/dist/agents/image.agent.js +12 -0
  15. package/dist/agents/image.agent.js.map +1 -0
  16. package/dist/agents/manager.d.ts +140 -0
  17. package/dist/agents/manager.d.ts.map +1 -0
  18. package/dist/agents/manager.js +150 -0
  19. package/dist/agents/manager.js.map +1 -0
  20. package/dist/agents/post.agent.d.ts +7 -0
  21. package/dist/agents/post.agent.d.ts.map +1 -0
  22. package/dist/agents/post.agent.js +12 -0
  23. package/dist/agents/post.agent.js.map +1 -0
  24. package/dist/agents/quick-help.agent.d.ts +30 -0
  25. package/dist/agents/quick-help.agent.d.ts.map +1 -0
  26. package/dist/agents/quick-help.agent.js +16 -0
  27. package/dist/agents/quick-help.agent.js.map +1 -0
  28. package/dist/cli/confirm.d.ts +5 -0
  29. package/dist/cli/confirm.d.ts.map +1 -0
  30. package/dist/cli/confirm.js +35 -0
  31. package/dist/cli/confirm.js.map +1 -0
  32. package/dist/cli/doctor.d.ts +53 -0
  33. package/dist/cli/doctor.d.ts.map +1 -0
  34. package/dist/cli/doctor.js +141 -0
  35. package/dist/cli/doctor.js.map +1 -0
  36. package/dist/cli/format.d.ts +12 -0
  37. package/dist/cli/format.d.ts.map +1 -0
  38. package/dist/cli/format.js +167 -0
  39. package/dist/cli/format.js.map +1 -0
  40. package/dist/cli/interactive.d.ts +2 -0
  41. package/dist/cli/interactive.d.ts.map +1 -0
  42. package/dist/cli/interactive.js +80 -0
  43. package/dist/cli/interactive.js.map +1 -0
  44. package/dist/cli/setup.d.ts +14 -0
  45. package/dist/cli/setup.d.ts.map +1 -0
  46. package/dist/cli/setup.js +145 -0
  47. package/dist/cli/setup.js.map +1 -0
  48. package/dist/cli/triggers.d.ts +43 -0
  49. package/dist/cli/triggers.d.ts.map +1 -0
  50. package/dist/cli/triggers.js +221 -0
  51. package/dist/cli/triggers.js.map +1 -0
  52. package/dist/config/env.d.ts +26 -0
  53. package/dist/config/env.d.ts.map +1 -0
  54. package/dist/config/env.js +59 -0
  55. package/dist/config/env.js.map +1 -0
  56. package/dist/config/models.d.ts +22 -0
  57. package/dist/config/models.d.ts.map +1 -0
  58. package/dist/config/models.js +38 -0
  59. package/dist/config/models.js.map +1 -0
  60. package/dist/index.d.ts +3 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +452 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/memory/composio-session.d.ts +9 -0
  65. package/dist/memory/composio-session.d.ts.map +1 -0
  66. package/dist/memory/composio-session.js +33 -0
  67. package/dist/memory/composio-session.js.map +1 -0
  68. package/dist/memory/history.d.ts +11 -0
  69. package/dist/memory/history.d.ts.map +1 -0
  70. package/dist/memory/history.js +33 -0
  71. package/dist/memory/history.js.map +1 -0
  72. package/dist/memory/local-store.d.ts +4 -0
  73. package/dist/memory/local-store.d.ts.map +1 -0
  74. package/dist/memory/local-store.js +24 -0
  75. package/dist/memory/local-store.js.map +1 -0
  76. package/dist/memory/long-term.d.ts +13 -0
  77. package/dist/memory/long-term.d.ts.map +1 -0
  78. package/dist/memory/long-term.js +67 -0
  79. package/dist/memory/long-term.js.map +1 -0
  80. package/dist/memory/redis.d.ts +4 -0
  81. package/dist/memory/redis.d.ts.map +1 -0
  82. package/dist/memory/redis.js +18 -0
  83. package/dist/memory/redis.js.map +1 -0
  84. package/dist/memory/scratchpad.d.ts +3 -0
  85. package/dist/memory/scratchpad.d.ts.map +1 -0
  86. package/dist/memory/scratchpad.js +22 -0
  87. package/dist/memory/scratchpad.js.map +1 -0
  88. package/dist/runtime/confirm.d.ts +13 -0
  89. package/dist/runtime/confirm.d.ts.map +1 -0
  90. package/dist/runtime/confirm.js +17 -0
  91. package/dist/runtime/confirm.js.map +1 -0
  92. package/dist/runtime/progress.d.ts +8 -0
  93. package/dist/runtime/progress.d.ts.map +1 -0
  94. package/dist/runtime/progress.js +15 -0
  95. package/dist/runtime/progress.js.map +1 -0
  96. package/dist/safety/approvals.d.ts +6 -0
  97. package/dist/safety/approvals.d.ts.map +1 -0
  98. package/dist/safety/approvals.js +8 -0
  99. package/dist/safety/approvals.js.map +1 -0
  100. package/dist/safety/limits.d.ts +8 -0
  101. package/dist/safety/limits.d.ts.map +1 -0
  102. package/dist/safety/limits.js +10 -0
  103. package/dist/safety/limits.js.map +1 -0
  104. package/dist/safety/redaction.d.ts +2 -0
  105. package/dist/safety/redaction.d.ts.map +1 -0
  106. package/dist/safety/redaction.js +9 -0
  107. package/dist/safety/redaction.js.map +1 -0
  108. package/dist/server.d.ts +54 -0
  109. package/dist/server.d.ts.map +1 -0
  110. package/dist/server.js +69 -0
  111. package/dist/server.js.map +1 -0
  112. package/dist/tools/app-knowledge.tool.d.ts +4 -0
  113. package/dist/tools/app-knowledge.tool.d.ts.map +1 -0
  114. package/dist/tools/app-knowledge.tool.js +30 -0
  115. package/dist/tools/app-knowledge.tool.js.map +1 -0
  116. package/dist/tools/composio.tool.d.ts +15 -0
  117. package/dist/tools/composio.tool.d.ts.map +1 -0
  118. package/dist/tools/composio.tool.js +272 -0
  119. package/dist/tools/composio.tool.js.map +1 -0
  120. package/dist/tools/docs-fetch.tool.d.ts +6 -0
  121. package/dist/tools/docs-fetch.tool.d.ts.map +1 -0
  122. package/dist/tools/docs-fetch.tool.js +62 -0
  123. package/dist/tools/docs-fetch.tool.js.map +1 -0
  124. package/dist/tools/docs-search.tool.d.ts +4 -0
  125. package/dist/tools/docs-search.tool.d.ts.map +1 -0
  126. package/dist/tools/docs-search.tool.js +14 -0
  127. package/dist/tools/docs-search.tool.js.map +1 -0
  128. package/dist/tools/image-generate.tool.d.ts +22 -0
  129. package/dist/tools/image-generate.tool.d.ts.map +1 -0
  130. package/dist/tools/image-generate.tool.js +113 -0
  131. package/dist/tools/image-generate.tool.js.map +1 -0
  132. package/dist/tools/memory.tool.d.ts +18 -0
  133. package/dist/tools/memory.tool.d.ts.map +1 -0
  134. package/dist/tools/memory.tool.js +53 -0
  135. package/dist/tools/memory.tool.js.map +1 -0
  136. package/dist/tools/post-generate.tool.d.ts +5 -0
  137. package/dist/tools/post-generate.tool.d.ts.map +1 -0
  138. package/dist/tools/post-generate.tool.js +19 -0
  139. package/dist/tools/post-generate.tool.js.map +1 -0
  140. package/dist/tools/scratchpad.tool.d.ts +7 -0
  141. package/dist/tools/scratchpad.tool.d.ts.map +1 -0
  142. package/dist/tools/scratchpad.tool.js +29 -0
  143. package/dist/tools/scratchpad.tool.js.map +1 -0
  144. package/dist/tools/triggers.tool.d.ts +72 -0
  145. package/dist/tools/triggers.tool.d.ts.map +1 -0
  146. package/dist/tools/triggers.tool.js +108 -0
  147. package/dist/tools/triggers.tool.js.map +1 -0
  148. package/dist/tools/web-search.tool.d.ts +94 -0
  149. package/dist/tools/web-search.tool.d.ts.map +1 -0
  150. package/dist/tools/web-search.tool.js +214 -0
  151. package/dist/tools/web-search.tool.js.map +1 -0
  152. package/dist/tools/zilo-docs.tool.d.ts +26 -0
  153. package/dist/tools/zilo-docs.tool.d.ts.map +1 -0
  154. package/dist/tools/zilo-docs.tool.js +150 -0
  155. package/dist/tools/zilo-docs.tool.js.map +1 -0
  156. package/install.ps1 +62 -0
  157. package/package.json +88 -0
  158. package/src/doc/README.md +49 -0
  159. package/src/doc/admin-tools-and-sms-campaigns.md +99 -0
  160. package/src/doc/escalation-checklist.md +97 -0
  161. package/src/doc/payments-and-payouts.md +82 -0
  162. package/src/doc/shift-lifecycle-and-disputes.md +95 -0
  163. package/src/doc/support-macros.md +40 -0
  164. package/src/doc/venue-support-playbook.md +145 -0
  165. package/src/doc/verification-and-trust.md +88 -0
  166. package/src/doc/worker-support-playbook.md +160 -0
@@ -0,0 +1,272 @@
1
+ import { Composio } from '@composio/core';
2
+ import { VercelProvider } from '@composio/vercel';
3
+ import { env, hasComposio } from '../config/env.js';
4
+ import { loadComposioSession, saveComposioSession } from '../memory/composio-session.js';
5
+ import { requestConfirmation } from '../runtime/confirm.js';
6
+ import { emitProgress } from '../runtime/progress.js';
7
+ const safeMetaTools = new Set([
8
+ 'COMPOSIO_SEARCH_TOOLS',
9
+ 'COMPOSIO_GET_TOOL_SCHEMAS',
10
+ 'COMPOSIO_MANAGE_CONNECTIONS',
11
+ ]);
12
+ const readPrefixes = ['GET', 'LIST', 'SEARCH', 'READ', 'FETCH', 'RETRIEVE', 'INSPECT'];
13
+ const writeFragments = [
14
+ 'CREATE',
15
+ 'UPDATE',
16
+ 'DELETE',
17
+ 'SEND',
18
+ 'POST',
19
+ 'PUBLISH',
20
+ 'INVITE',
21
+ 'TRANSFER',
22
+ 'CHARGE',
23
+ 'REFUND',
24
+ 'CANCEL',
25
+ 'APPROVE',
26
+ 'REVOKE',
27
+ 'EXECUTE',
28
+ 'WORKBENCH',
29
+ 'BASH',
30
+ ];
31
+ let client;
32
+ function getClient() {
33
+ if (client)
34
+ return client;
35
+ client = new Composio({
36
+ provider: new VercelProvider(),
37
+ apiKey: env.composioApiKey ?? null,
38
+ });
39
+ return client;
40
+ }
41
+ function actionPart(toolSlug) {
42
+ return toolSlug.toUpperCase().split('_').slice(1).join('_') || toolSlug.toUpperCase();
43
+ }
44
+ function isReadOnlyTool(toolSlug) {
45
+ if (safeMetaTools.has(toolSlug.toUpperCase()))
46
+ return true;
47
+ const action = actionPart(toolSlug);
48
+ return readPrefixes.some((prefix) => action === prefix || action.startsWith(`${prefix}_`));
49
+ }
50
+ function isWriteLikeTool(toolSlug) {
51
+ const upper = toolSlug.toUpperCase();
52
+ if (upper.includes('REMOTE_WORKBENCH') || upper.includes('REMOTE_BASH'))
53
+ return true;
54
+ return writeFragments.some((fragment) => upper.includes(fragment));
55
+ }
56
+ function parseJsonish(value) {
57
+ const trimmed = value.trim();
58
+ if (!trimmed || !/^[{[]/.test(trimmed))
59
+ return value;
60
+ try {
61
+ return JSON.parse(trimmed);
62
+ }
63
+ catch {
64
+ return value;
65
+ }
66
+ }
67
+ function findToolSlugs(value) {
68
+ if (typeof value === 'string') {
69
+ const parsed = parseJsonish(value);
70
+ if (parsed !== value)
71
+ return findToolSlugs(parsed);
72
+ return value.match(/[A-Z0-9]+_[A-Z0-9_]+/g) ?? [];
73
+ }
74
+ if (!value || typeof value !== 'object')
75
+ return [];
76
+ if (Array.isArray(value))
77
+ return value.flatMap(findToolSlugs);
78
+ const record = value;
79
+ const direct = ['toolSlug', 'tool_slug', 'slug', 'tool'];
80
+ const matches = direct.flatMap((field) => findToolSlugs(record[field]));
81
+ return [...matches, ...Object.values(record).flatMap(findToolSlugs)];
82
+ }
83
+ function getStringField(record, fields) {
84
+ for (const field of fields) {
85
+ const value = record[field];
86
+ if (typeof value === 'string' && value.trim())
87
+ return value.trim();
88
+ }
89
+ return undefined;
90
+ }
91
+ function asRecord(value) {
92
+ const parsed = typeof value === 'string' ? parseJsonish(value) : value;
93
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
94
+ return undefined;
95
+ return parsed;
96
+ }
97
+ function extractInnerTools(params) {
98
+ const record = asRecord(params);
99
+ if (!record)
100
+ return [];
101
+ const rawTools = record.tools ?? record.tool_calls ?? record.toolCalls;
102
+ const parsedTools = typeof rawTools === 'string' ? parseJsonish(rawTools) : rawTools;
103
+ if (!Array.isArray(parsedTools))
104
+ return [];
105
+ return parsedTools
106
+ .map((item) => {
107
+ const tool = asRecord(item);
108
+ if (!tool)
109
+ return null;
110
+ const slug = getStringField(tool, ['tool_slug', 'toolSlug', 'slug', 'tool']);
111
+ if (!slug)
112
+ return null;
113
+ const rawArguments = tool.arguments ?? tool.args ?? tool.input;
114
+ const args = asRecord(rawArguments);
115
+ return {
116
+ slug,
117
+ ...(args ? { arguments: args } : {}),
118
+ };
119
+ })
120
+ .filter((tool) => Boolean(tool));
121
+ }
122
+ function classifyTool(toolSlug, params) {
123
+ const upper = toolSlug.toUpperCase();
124
+ if (safeMetaTools.has(upper))
125
+ return 'read';
126
+ if (upper === 'COMPOSIO_MULTI_EXECUTE_TOOL') {
127
+ const inner = extractInnerTools(params).map((toolCall) => toolCall.slug);
128
+ const slugs = [...new Set(inner.length > 0 ? inner : findToolSlugs(params))].filter((slug) => slug.toUpperCase() !== upper);
129
+ if (slugs.length === 0)
130
+ return 'write';
131
+ return slugs.every(isReadOnlyTool) ? 'read' : 'write';
132
+ }
133
+ if (isWriteLikeTool(upper))
134
+ return 'write';
135
+ if (isReadOnlyTool(upper))
136
+ return 'read';
137
+ return 'write';
138
+ }
139
+ function labelFromToolSlug(toolSlug) {
140
+ const [, ...parts] = toolSlug.toLowerCase().split('_');
141
+ return parts.length > 0
142
+ ? parts.map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join(' ')
143
+ : toolSlug;
144
+ }
145
+ function summarizeValue(value) {
146
+ if (value === undefined || value === null || value === '')
147
+ return undefined;
148
+ if (typeof value === 'boolean')
149
+ return value ? 'yes' : 'no';
150
+ if (typeof value === 'string')
151
+ return value.length > 80 ? `${value.slice(0, 77)}...` : value;
152
+ if (typeof value === 'number')
153
+ return String(value);
154
+ try {
155
+ const json = JSON.stringify(value);
156
+ return json.length > 80 ? `${json.slice(0, 77)}...` : json;
157
+ }
158
+ catch {
159
+ return String(value);
160
+ }
161
+ }
162
+ function friendlyDetails(toolCall) {
163
+ const args = toolCall.arguments ?? {};
164
+ const preferred = ['to', 'recipient', 'subject', 'query', 'max_results', 'limit', 'user_id', 'include_payload', 'verbose'];
165
+ const entries = [
166
+ ...preferred.filter((key) => key in args).map((key) => [key, args[key]]),
167
+ ...Object.entries(args).filter(([key]) => !preferred.includes(key)).slice(0, 6),
168
+ ];
169
+ return entries
170
+ .map(([key, value]) => {
171
+ const summarized = summarizeValue(value);
172
+ if (!summarized)
173
+ return null;
174
+ const label = key.replace(/_/g, ' ').replace(/\b\w/g, (char) => char.toUpperCase());
175
+ return `${label}: ${summarized}`;
176
+ })
177
+ .filter((item) => Boolean(item))
178
+ .slice(0, 8);
179
+ }
180
+ function createConfirmationDisplay(toolkitSlug, toolSlug, params) {
181
+ const innerTools = toolSlug.toUpperCase() === 'COMPOSIO_MULTI_EXECUTE_TOOL' ? extractInnerTools(params) : [];
182
+ const targetTools = innerTools.length > 0 ? innerTools.map((toolCall) => toolCall.slug) : [toolSlug];
183
+ const fallbackArgs = asRecord(params);
184
+ const primary = innerTools[0] ?? {
185
+ slug: toolSlug,
186
+ ...(fallbackArgs ? { arguments: fallbackArgs } : {}),
187
+ };
188
+ const writeTools = targetTools.filter((slug) => !isReadOnlyTool(slug));
189
+ const details = innerTools.length === 1 ? friendlyDetails(primary) : innerTools.map((toolCall) => `${toolCall.slug}: ${labelFromToolSlug(toolCall.slug)}`);
190
+ return {
191
+ toolkitSlug: innerTools.length === 1 ? innerTools[0].slug.split('_')[0] || toolkitSlug : toolkitSlug,
192
+ toolSlug,
193
+ targetTools,
194
+ action: innerTools.length === 1
195
+ ? labelFromToolSlug(primary.slug)
196
+ : `Run ${targetTools.length} external app action${targetTools.length === 1 ? '' : 's'}`,
197
+ access: writeTools.length === 0 ? 'Read-only' : 'Write',
198
+ details,
199
+ summary: details.length > 0 ? details.join('; ') : 'External app action',
200
+ };
201
+ }
202
+ async function getOrCreateSession(chatSessionId) {
203
+ const composio = getClient();
204
+ const saved = await loadComposioSession(chatSessionId);
205
+ if (saved?.sessionId) {
206
+ try {
207
+ const session = await composio.use(saved.sessionId);
208
+ return { session, reused: true };
209
+ }
210
+ catch {
211
+ emitProgress({ type: 'tool:error', label: 'Composio session reuse failed', detail: 'Creating a fresh session' });
212
+ }
213
+ }
214
+ const session = await composio.create(env.zilmateUserId);
215
+ await saveComposioSession(chatSessionId, session.sessionId);
216
+ return { session, reused: false };
217
+ }
218
+ function executionGuard() {
219
+ return {
220
+ beforeExecute: async ({ toolSlug, toolkitSlug, params }) => {
221
+ const classification = classifyTool(toolSlug, params);
222
+ if (classification === 'read')
223
+ return params;
224
+ const approved = await requestConfirmation({
225
+ ...createConfirmationDisplay(toolkitSlug, toolSlug, params),
226
+ });
227
+ if (!approved) {
228
+ throw new Error(`Blocked Composio write-like action ${toolkitSlug}/${toolSlug}. Run interactively and answer y to approve it.`);
229
+ }
230
+ return params;
231
+ },
232
+ };
233
+ }
234
+ export async function createComposioTools(chatSessionId = 'default') {
235
+ if (!hasComposio())
236
+ return {};
237
+ emitProgress({ type: 'tool:start', label: 'Loading Composio tools', detail: chatSessionId });
238
+ const { session, reused } = await getOrCreateSession(chatSessionId);
239
+ const tools = await session.tools(executionGuard());
240
+ emitProgress({ type: 'tool:end', label: reused ? 'Composio session reused' : 'Composio session created', detail: session.sessionId });
241
+ return tools;
242
+ }
243
+ export async function getComposioStatus(chatSessionId = 'default') {
244
+ const configured = hasComposio();
245
+ const status = {
246
+ configured,
247
+ userId: env.zilmateUserId || null,
248
+ sessionId: null,
249
+ reusedSession: false,
250
+ toolkits: [],
251
+ };
252
+ if (!configured)
253
+ return status;
254
+ const { session, reused } = await getOrCreateSession(chatSessionId);
255
+ status.sessionId = session.sessionId;
256
+ status.reusedSession = reused;
257
+ try {
258
+ const toolkits = await session.toolkits({ limit: 25 });
259
+ status.toolkits = toolkits.items.map((item) => ({
260
+ slug: item.slug,
261
+ name: item.name,
262
+ isNoAuth: item.isNoAuth,
263
+ connected: Boolean(item.connection?.isActive || item.isNoAuth),
264
+ ...(item.connection?.connectedAccount?.status ? { status: item.connection.connectedAccount.status } : {}),
265
+ }));
266
+ }
267
+ catch (error) {
268
+ emitProgress({ type: 'tool:error', label: 'Composio toolkit status unavailable', detail: error instanceof Error ? error.message : String(error) });
269
+ }
270
+ return status;
271
+ }
272
+ //# sourceMappingURL=composio.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composio.tool.js","sourceRoot":"","sources":["../../src/tools/composio.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function assertAllowedDocsUrl(rawUrl: string): string;
2
+ export declare function fetchDocsText(rawUrl: string): Promise<string>;
3
+ export declare const docsFetchTool: import("ai").Tool<{
4
+ url: string;
5
+ }, string>;
6
+ //# sourceMappingURL=docs-fetch.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-fetch.tool.d.ts","sourceRoot":"","sources":["../../src/tools/docs-fetch.tool.ts"],"names":[],"mappings":"AAuBA,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,UAMlD;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,mBA4BjD;AAED,eAAO,MAAM,aAAa;;UAIxB,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { tool } from 'ai';
4
+ import { z } from 'zod';
5
+ import { clampText, limits } from '../safety/limits.js';
6
+ import { emitProgress } from '../runtime/progress.js';
7
+ const allowedHosts = new Set([
8
+ 'ai-sdk.dev',
9
+ 'sdk.vercel.ai',
10
+ 'vercel.com',
11
+ 'developers.openai.com',
12
+ 'platform.openai.com',
13
+ 'openai.com',
14
+ 'upstash.com',
15
+ ]);
16
+ const cacheDir = path.resolve('.zilo-manager', 'docs-cache');
17
+ function cacheName(url) {
18
+ return Buffer.from(url).toString('base64url').slice(0, 160) + '.txt';
19
+ }
20
+ export function assertAllowedDocsUrl(rawUrl) {
21
+ const url = new URL(rawUrl);
22
+ if (!allowedHosts.has(url.hostname)) {
23
+ throw new Error(`Docs fetch blocked for non-allowlisted host: ${url.hostname}`);
24
+ }
25
+ return url.toString();
26
+ }
27
+ export async function fetchDocsText(rawUrl) {
28
+ const url = assertAllowedDocsUrl(rawUrl);
29
+ await mkdir(cacheDir, { recursive: true });
30
+ const file = path.join(cacheDir, cacheName(url));
31
+ try {
32
+ const cached = JSON.parse(await readFile(file, 'utf8'));
33
+ if (Date.now() - cached.fetchedAt < limits.docsCacheTtlMs) {
34
+ emitProgress({ type: 'fetch:end', label: 'Loaded docs from cache', detail: url });
35
+ return cached.text;
36
+ }
37
+ }
38
+ catch {
39
+ // cache miss
40
+ }
41
+ emitProgress({ type: 'fetch:start', label: 'Fetching docs', detail: url });
42
+ const response = await fetch(url, { headers: { accept: 'text/plain,text/markdown,text/html' } });
43
+ if (!response.ok)
44
+ throw new Error(`Docs fetch failed ${response.status}: ${url}`);
45
+ const html = await response.text();
46
+ const text = html
47
+ .replace(/<script[\s\S]*?<\/script>/gi, ' ')
48
+ .replace(/<style[\s\S]*?<\/style>/gi, ' ')
49
+ .replace(/<[^>]+>/g, ' ')
50
+ .replace(/\s+/g, ' ')
51
+ .trim();
52
+ const clipped = clampText(text, 12000);
53
+ await writeFile(file, JSON.stringify({ fetchedAt: Date.now(), text: clipped }, null, 2), 'utf8');
54
+ emitProgress({ type: 'fetch:end', label: 'Docs fetched', detail: url });
55
+ return clipped;
56
+ }
57
+ export const docsFetchTool = tool({
58
+ description: 'Fetch and cache allowlisted documentation pages. Use only for docs/reference sources.',
59
+ inputSchema: z.object({ url: z.string().url() }),
60
+ execute: async ({ url }) => fetchDocsText(url),
61
+ });
62
+ //# sourceMappingURL=docs-fetch.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-fetch.tool.js","sourceRoot":"","sources":["../../src/tools/docs-fetch.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,uBAAuB;IACvB,qBAAqB;IACrB,YAAY;IACZ,aAAa;CACd,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;AAE7D,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,gDAAgD,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,MAAM,GAAG,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAwC,CAAC;QAC/F,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1D,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;IAED,YAAY,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,oCAAoC,EAAE,EAAE,CAAC,CAAC;IACjG,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;IAClF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI;SACd,OAAO,CAAC,6BAA6B,EAAE,GAAG,CAAC;SAC3C,OAAO,CAAC,2BAA2B,EAAE,GAAG,CAAC;SACzC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;IACV,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACjG,YAAY,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACxE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC;IAChC,WAAW,EAAE,uFAAuF;IACpG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;IAChD,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC;CAC/C,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const docsSearchTool: import("ai").Tool<{
2
+ query: string;
3
+ }, import("./web-search.tool.js").WebSearchResult[]>;
4
+ //# sourceMappingURL=docs-search.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-search.tool.d.ts","sourceRoot":"","sources":["../../src/tools/docs-search.tool.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc;;oDAQzB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ import { searchWeb } from './web-search.tool.js';
4
+ import { emitProgress } from '../runtime/progress.js';
5
+ export const docsSearchTool = tool({
6
+ description: 'Search primary AI SDK, Vercel Gateway, OpenAI, and Upstash docs for implementation guidance.',
7
+ inputSchema: z.object({ query: z.string().min(3) }),
8
+ execute: async ({ query }) => {
9
+ emitProgress({ type: 'search:start', label: 'Searching primary docs', detail: query });
10
+ const scopedQuery = `${query} site:ai-sdk.dev OR site:vercel.com/docs OR site:developers.openai.com OR site:upstash.com`;
11
+ return searchWeb(scopedQuery, 5);
12
+ },
13
+ });
14
+ //# sourceMappingURL=docs-search.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-search.tool.js","sourceRoot":"","sources":["../../src/tools/docs-search.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC;IACjC,WAAW,EAAE,8FAA8F;IAC3G,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,YAAY,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,MAAM,WAAW,GAAG,GAAG,KAAK,4FAA4F,CAAC;QACzH,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type ImageProvider } from '../config/env.js';
2
+ export type ImageProviderInput = ImageProvider | 'chatgpt' | 'google' | 'default';
3
+ export type ImageSize = `${number}x${number}`;
4
+ export type ImageGenerationOptions = {
5
+ provider?: ImageProviderInput | undefined;
6
+ size?: ImageSize | undefined;
7
+ outputDir?: string | undefined;
8
+ };
9
+ export type ImageGenerationResult = {
10
+ text?: string;
11
+ files: string[];
12
+ model: string;
13
+ provider: ImageProvider;
14
+ };
15
+ export declare function isImageSize(value: string | undefined): value is ImageSize;
16
+ export declare function generateImageAsset(prompt: string, options?: ImageGenerationOptions): Promise<ImageGenerationResult>;
17
+ export declare const imageGenerateTool: import("ai").Tool<{
18
+ prompt: string;
19
+ provider?: "openai" | "gemini" | "chatgpt" | "google" | "default" | undefined;
20
+ size?: string | undefined;
21
+ }, ImageGenerationResult>;
22
+ //# sourceMappingURL=image-generate.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generate.tool.d.ts","sourceRoot":"","sources":["../../src/tools/image-generate.tool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAI1E,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAClF,MAAM,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAE9C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC1C,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,IAAI,SAAS,CAEzE;AAmFD,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,sBAA2B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAO7H;AAED,eAAO,MAAM,iBAAiB;;;;yBAW5B,CAAC"}
@@ -0,0 +1,113 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { generateImage, generateText, tool } from 'ai';
4
+ import { z } from 'zod';
5
+ import { models } from '../config/models.js';
6
+ import { requireGatewayAuth } from '../config/env.js';
7
+ import { redactSensitiveText } from '../safety/redaction.js';
8
+ import { emitProgress } from '../runtime/progress.js';
9
+ export function isImageSize(value) {
10
+ return /^\d+x\d+$/.test(value || '');
11
+ }
12
+ function normalizeProvider(provider) {
13
+ const value = (provider || models.imageDefaultProvider || 'openai').toLowerCase().trim();
14
+ if (value === 'default')
15
+ return models.imageDefaultProvider;
16
+ if (value === 'chatgpt' || value === 'openai')
17
+ return 'openai';
18
+ if (value === 'google' || value === 'gemini')
19
+ return 'gemini';
20
+ throw new Error(`Unsupported image provider: ${provider}. Use openai, chatgpt, or gemini.`);
21
+ }
22
+ function extensionFromMediaType(mediaType) {
23
+ const value = mediaType?.split('/')[1]?.split(';')[0];
24
+ if (!value)
25
+ return 'png';
26
+ if (value === 'jpeg')
27
+ return 'jpg';
28
+ return value;
29
+ }
30
+ function toBuffer(data) {
31
+ if (typeof data === 'string')
32
+ return Buffer.from(data, 'base64');
33
+ if (data instanceof ArrayBuffer)
34
+ return Buffer.from(new Uint8Array(data));
35
+ return Buffer.from(data);
36
+ }
37
+ async function saveImageBytes(data, mediaType, outputDir, index) {
38
+ const extension = extensionFromMediaType(mediaType);
39
+ const filename = `zilo-image-${Date.now()}-${index}.${extension}`;
40
+ const target = path.join(outputDir, filename);
41
+ await writeFile(target, toBuffer(data));
42
+ return target;
43
+ }
44
+ async function generateOpenAiImage(prompt, outputDir, size) {
45
+ const model = models.imageOpenai;
46
+ emitProgress({ type: 'tool:start', label: 'Generating OpenAI image', detail: model });
47
+ const result = await generateImage({
48
+ model,
49
+ prompt: redactSensitiveText(prompt),
50
+ ...(size ? { size } : {}),
51
+ providerOptions: {
52
+ gateway: {
53
+ tags: ['zilo-manager', 'feature:image', 'model:openai'],
54
+ },
55
+ },
56
+ });
57
+ const saved = [];
58
+ for (const [index, image] of result.images.entries()) {
59
+ const value = image;
60
+ const data = value.uint8Array || value.data || value.base64;
61
+ if (!data)
62
+ continue;
63
+ saved.push(await saveImageBytes(data, value.mediaType || image.mediaType, outputDir, index));
64
+ }
65
+ emitProgress({ type: 'tool:end', label: 'OpenAI image generation complete', detail: `${saved.length} file${saved.length === 1 ? '' : 's'}` });
66
+ return { files: saved, model, provider: 'openai' };
67
+ }
68
+ async function generateGeminiImage(prompt, outputDir) {
69
+ const model = models.imageGemini;
70
+ emitProgress({ type: 'tool:start', label: 'Generating Gemini image', detail: model });
71
+ const result = await generateText({
72
+ model,
73
+ prompt: redactSensitiveText(prompt),
74
+ providerOptions: {
75
+ gateway: {
76
+ tags: ['zilo-manager', 'feature:image', 'model:gemini'],
77
+ },
78
+ },
79
+ });
80
+ const files = (result.files || []).filter((file) => file.mediaType?.startsWith('image/'));
81
+ const saved = [];
82
+ for (const [index, file] of files.entries()) {
83
+ const value = file;
84
+ const data = value.uint8Array || value.data || value.base64;
85
+ if (!data)
86
+ continue;
87
+ saved.push(await saveImageBytes(data, value.mediaType || file.mediaType, outputDir, index));
88
+ }
89
+ emitProgress({ type: 'tool:end', label: 'Gemini image generation complete', detail: `${saved.length} file${saved.length === 1 ? '' : 's'}` });
90
+ return { text: result.text, files: saved, model, provider: 'gemini' };
91
+ }
92
+ export async function generateImageAsset(prompt, options = {}) {
93
+ requireGatewayAuth();
94
+ const outputDir = options.outputDir || path.resolve('outputs', 'images');
95
+ await mkdir(outputDir, { recursive: true });
96
+ const provider = normalizeProvider(options.provider);
97
+ if (provider === 'gemini')
98
+ return generateGeminiImage(prompt, outputDir);
99
+ return generateOpenAiImage(prompt, outputDir, options.size);
100
+ }
101
+ export const imageGenerateTool = tool({
102
+ description: 'Generate a high-quality image with OpenAI GPT Image 2 or Gemini 3 Pro Image and save it locally.',
103
+ inputSchema: z.object({
104
+ prompt: z.string().min(5),
105
+ provider: z.enum(['openai', 'chatgpt', 'gemini', 'google', 'default']).optional(),
106
+ size: z.string().regex(/^\d+x\d+$/).optional(),
107
+ }),
108
+ execute: async ({ prompt, provider, size }) => generateImageAsset(prompt, {
109
+ ...(provider ? { provider } : {}),
110
+ ...(isImageSize(size) ? { size } : {}),
111
+ }),
112
+ });
113
+ //# sourceMappingURL=image-generate.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-generate.tool.js","sourceRoot":"","sources":["../../src/tools/image-generate.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare const memoryTools: {
2
+ rememberMemory: import("ai").Tool<{
3
+ text: string;
4
+ tags?: string[] | undefined;
5
+ }, import("../memory/long-term.js").LongTermMemory>;
6
+ recallMemory: import("ai").Tool<{
7
+ query?: string | undefined;
8
+ limit?: number | undefined;
9
+ }, import("../memory/long-term.js").LongTermMemory[]>;
10
+ listMemory: import("ai").Tool<Record<string, never>, import("../memory/long-term.js").LongTermMemory[]>;
11
+ forgetMemory: import("ai").Tool<{
12
+ id: string;
13
+ }, {
14
+ id: string;
15
+ deleted: boolean;
16
+ }>;
17
+ };
18
+ //# sourceMappingURL=memory.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.tool.d.ts","sourceRoot":"","sources":["../../src/tools/memory.tool.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;CA+CvB,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ import { forget, listMemories, recall, remember } from '../memory/long-term.js';
4
+ import { emitProgress } from '../runtime/progress.js';
5
+ export const memoryTools = {
6
+ rememberMemory: tool({
7
+ description: 'Save a durable long-term memory for ZilMate. Use for stable user preferences, durable project facts, and recurring context.',
8
+ inputSchema: z.object({
9
+ text: z.string().min(3).max(2000),
10
+ tags: z.array(z.string().min(1).max(40)).max(8).optional(),
11
+ }),
12
+ execute: async ({ text, tags }) => {
13
+ emitProgress({ type: 'fetch:start', label: 'Saving memory' });
14
+ const memory = await remember(text, tags ?? []);
15
+ emitProgress({ type: 'fetch:end', label: 'Memory saved', detail: memory.id });
16
+ return memory;
17
+ },
18
+ }),
19
+ recallMemory: tool({
20
+ description: 'Recall durable long-term ZilMate memories by query. Use before answering when user preferences or recurring project facts may matter.',
21
+ inputSchema: z.object({
22
+ query: z.string().max(500).optional(),
23
+ limit: z.number().int().min(1).max(12).optional(),
24
+ }),
25
+ execute: async ({ query, limit }) => {
26
+ emitProgress(query ? { type: 'fetch:start', label: 'Recalling memory', detail: query } : { type: 'fetch:start', label: 'Recalling memory' });
27
+ const memories = await recall(query ?? '', limit ?? 8);
28
+ emitProgress({ type: 'fetch:end', label: 'Memory recalled', detail: `${memories.length} item${memories.length === 1 ? '' : 's'}` });
29
+ return memories;
30
+ },
31
+ }),
32
+ listMemory: tool({
33
+ description: 'List all durable long-term memories saved for ZilMate.',
34
+ inputSchema: z.object({}),
35
+ execute: async () => {
36
+ emitProgress({ type: 'fetch:start', label: 'Listing memory' });
37
+ const memories = await listMemories();
38
+ emitProgress({ type: 'fetch:end', label: 'Memory listed', detail: `${memories.length} item${memories.length === 1 ? '' : 's'}` });
39
+ return memories;
40
+ },
41
+ }),
42
+ forgetMemory: tool({
43
+ description: 'Forget one durable long-term memory by id.',
44
+ inputSchema: z.object({ id: z.string().min(1) }),
45
+ execute: async ({ id }) => {
46
+ emitProgress({ type: 'fetch:start', label: 'Forgetting memory', detail: id });
47
+ const deleted = await forget(id);
48
+ emitProgress({ type: 'fetch:end', label: deleted ? 'Memory forgotten' : 'Memory not found', detail: id });
49
+ return { id, deleted };
50
+ },
51
+ }),
52
+ };
53
+ //# sourceMappingURL=memory.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.tool.js","sourceRoot":"","sources":["../../src/tools/memory.tool.ts"],"names":[],"mappings":"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"}