zilmate 1.7.2 → 1.7.5

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 (178) hide show
  1. package/.env.example +36 -36
  2. package/README.md +503 -503
  3. package/SDK.md +320 -320
  4. package/agent-docs.md +276 -276
  5. package/dist/agents/automation-planner.agent.d.ts.map +1 -1
  6. package/dist/agents/coding.agent.d.ts +18 -0
  7. package/dist/agents/coding.agent.d.ts.map +1 -1
  8. package/dist/agents/finance.agent.d.ts +60 -0
  9. package/dist/agents/finance.agent.d.ts.map +1 -0
  10. package/dist/agents/finance.agent.js +30 -0
  11. package/dist/agents/finance.agent.js.map +1 -0
  12. package/dist/agents/manager.d.ts +94 -1
  13. package/dist/agents/manager.d.ts.map +1 -1
  14. package/dist/agents/manager.js +102 -36
  15. package/dist/agents/manager.js.map +1 -1
  16. package/dist/agents/swarm/engineering/qa.d.ts +3 -0
  17. package/dist/agents/swarm/engineering/qa.d.ts.map +1 -0
  18. package/dist/agents/swarm/engineering/qa.js +19 -0
  19. package/dist/agents/swarm/engineering/qa.js.map +1 -0
  20. package/dist/agents/swarm/growth/seo.d.ts +3 -0
  21. package/dist/agents/swarm/growth/seo.d.ts.map +1 -0
  22. package/dist/agents/swarm/growth/seo.js +19 -0
  23. package/dist/agents/swarm/growth/seo.js.map +1 -0
  24. package/dist/agents/swarm/main.d.ts +22 -0
  25. package/dist/agents/swarm/main.d.ts.map +1 -0
  26. package/dist/agents/swarm/main.js +65 -0
  27. package/dist/agents/swarm/main.js.map +1 -0
  28. package/dist/agents/swarm/operations/finance.d.ts +3 -0
  29. package/dist/agents/swarm/operations/finance.d.ts.map +1 -0
  30. package/dist/agents/swarm/operations/finance.js +19 -0
  31. package/dist/agents/swarm/operations/finance.js.map +1 -0
  32. package/dist/agents/swarm/registry.d.ts +4 -0
  33. package/dist/agents/swarm/registry.d.ts.map +1 -0
  34. package/dist/agents/swarm/registry.js +361 -0
  35. package/dist/agents/swarm/registry.js.map +1 -0
  36. package/dist/cli/composer.d.ts.map +1 -1
  37. package/dist/cli/composer.js +54 -4
  38. package/dist/cli/composer.js.map +1 -1
  39. package/dist/cli/doctor.d.ts.map +1 -1
  40. package/dist/cli/doctor.js +13 -0
  41. package/dist/cli/doctor.js.map +1 -1
  42. package/dist/cli/format.d.ts.map +1 -1
  43. package/dist/cli/format.js +46 -24
  44. package/dist/cli/format.js.map +1 -1
  45. package/dist/cli/interactive.d.ts.map +1 -1
  46. package/dist/cli/interactive.js +47 -3
  47. package/dist/cli/interactive.js.map +1 -1
  48. package/dist/cli/render.d.ts.map +1 -1
  49. package/dist/cli/render.js +18 -9
  50. package/dist/cli/render.js.map +1 -1
  51. package/dist/cli/setup.d.ts +1 -0
  52. package/dist/cli/setup.d.ts.map +1 -1
  53. package/dist/cli/setup.js +74 -2
  54. package/dist/cli/setup.js.map +1 -1
  55. package/dist/cli/swarm.d.ts +4 -0
  56. package/dist/cli/swarm.d.ts.map +1 -0
  57. package/dist/cli/swarm.js +21 -0
  58. package/dist/cli/swarm.js.map +1 -0
  59. package/dist/cli/theme.d.ts +9 -0
  60. package/dist/cli/theme.d.ts.map +1 -1
  61. package/dist/cli/theme.js +36 -0
  62. package/dist/cli/theme.js.map +1 -1
  63. package/dist/cli/tunnel.d.ts.map +1 -1
  64. package/dist/cli/tunnel.js +2 -1
  65. package/dist/cli/tunnel.js.map +1 -1
  66. package/dist/cli/voice.js +11 -11
  67. package/dist/cli/welcome.d.ts.map +1 -1
  68. package/dist/cli/welcome.js +2 -0
  69. package/dist/cli/welcome.js.map +1 -1
  70. package/dist/index.js +19 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/jobs/anomaly.js +5 -5
  73. package/dist/memory/heal.js +43 -43
  74. package/dist/observability/doctor.d.ts +3 -0
  75. package/dist/observability/doctor.d.ts.map +1 -0
  76. package/dist/observability/doctor.js +33 -0
  77. package/dist/observability/doctor.js.map +1 -0
  78. package/dist/observability/usage.d.ts +13 -0
  79. package/dist/observability/usage.d.ts.map +1 -0
  80. package/dist/observability/usage.js +34 -0
  81. package/dist/observability/usage.js.map +1 -0
  82. package/dist/runtime/confirm.d.ts.map +1 -1
  83. package/dist/runtime/confirm.js +12 -2
  84. package/dist/runtime/confirm.js.map +1 -1
  85. package/dist/runtime/prompts/builder.d.ts +11 -0
  86. package/dist/runtime/prompts/builder.d.ts.map +1 -0
  87. package/dist/runtime/prompts/builder.js +29 -0
  88. package/dist/runtime/prompts/builder.js.map +1 -0
  89. package/dist/runtime/registry.d.ts +14 -0
  90. package/dist/runtime/registry.d.ts.map +1 -0
  91. package/dist/runtime/registry.js +39 -0
  92. package/dist/runtime/registry.js.map +1 -0
  93. package/dist/runtime/storage/interface.d.ts +16 -0
  94. package/dist/runtime/storage/interface.d.ts.map +1 -0
  95. package/dist/runtime/storage/interface.js +19 -0
  96. package/dist/runtime/storage/interface.js.map +1 -0
  97. package/dist/runtime/storage/local.d.ts +12 -0
  98. package/dist/runtime/storage/local.d.ts.map +1 -0
  99. package/dist/runtime/storage/local.js +48 -0
  100. package/dist/runtime/storage/local.js.map +1 -0
  101. package/dist/runtime/storage/redis.d.ts +11 -0
  102. package/dist/runtime/storage/redis.d.ts.map +1 -0
  103. package/dist/runtime/storage/redis.js +21 -0
  104. package/dist/runtime/storage/redis.js.map +1 -0
  105. package/dist/runtime/swarm/reports.d.ts +9 -0
  106. package/dist/runtime/swarm/reports.d.ts.map +1 -0
  107. package/dist/runtime/swarm/reports.js +43 -0
  108. package/dist/runtime/swarm/reports.js.map +1 -0
  109. package/dist/runtime/swarm.d.ts +37 -0
  110. package/dist/runtime/swarm.d.ts.map +1 -0
  111. package/dist/runtime/swarm.js +90 -0
  112. package/dist/runtime/swarm.js.map +1 -0
  113. package/dist/runtime/telemetry.d.ts +15 -0
  114. package/dist/runtime/telemetry.d.ts.map +1 -0
  115. package/dist/runtime/telemetry.js +25 -0
  116. package/dist/runtime/telemetry.js.map +1 -0
  117. package/dist/runtime/tool-utils.d.ts +12 -0
  118. package/dist/runtime/tool-utils.d.ts.map +1 -0
  119. package/dist/runtime/tool-utils.js +31 -0
  120. package/dist/runtime/tool-utils.js.map +1 -0
  121. package/dist/tools/browser.tool.d.ts +54 -0
  122. package/dist/tools/browser.tool.d.ts.map +1 -0
  123. package/dist/tools/browser.tool.js +193 -0
  124. package/dist/tools/browser.tool.js.map +1 -0
  125. package/dist/tools/business-apps.tool.d.ts +18 -0
  126. package/dist/tools/business-apps.tool.d.ts.map +1 -0
  127. package/dist/tools/business-apps.tool.js +43 -0
  128. package/dist/tools/business-apps.tool.js.map +1 -0
  129. package/dist/tools/computer-use.tool.js +66 -66
  130. package/dist/tools/cross-app-ledger.tool.d.ts +7 -0
  131. package/dist/tools/cross-app-ledger.tool.d.ts.map +1 -0
  132. package/dist/tools/cross-app-ledger.tool.js +70 -0
  133. package/dist/tools/cross-app-ledger.tool.js.map +1 -0
  134. package/dist/tools/desktop.tool.js +10 -10
  135. package/dist/tools/documents.tool.js +5 -5
  136. package/dist/tools/finance.tool.d.ts +18 -0
  137. package/dist/tools/finance.tool.d.ts.map +1 -0
  138. package/dist/tools/finance.tool.js +88 -0
  139. package/dist/tools/finance.tool.js.map +1 -0
  140. package/dist/tools/image-intelligence.tool.d.ts +12 -0
  141. package/dist/tools/image-intelligence.tool.d.ts.map +1 -0
  142. package/dist/tools/image-intelligence.tool.js +62 -0
  143. package/dist/tools/image-intelligence.tool.js.map +1 -0
  144. package/dist/tools/notify.tool.js +8 -8
  145. package/dist/tools/osint-install.tool.js +8 -8
  146. package/dist/tools/pentest-install.tool.js +6 -6
  147. package/dist/tools/setup-assistant.tool.d.ts +1 -1
  148. package/dist/tools/shell.tool.d.ts +18 -0
  149. package/dist/tools/shell.tool.d.ts.map +1 -1
  150. package/dist/tools/shell.tool.js +34 -0
  151. package/dist/tools/shell.tool.js.map +1 -1
  152. package/dist/tools/triggers.tool.d.ts.map +1 -1
  153. package/dist/tools/web-intelligence.tool.d.ts +12 -0
  154. package/dist/tools/web-intelligence.tool.d.ts.map +1 -0
  155. package/dist/tools/web-intelligence.tool.js +27 -0
  156. package/dist/tools/web-intelligence.tool.js.map +1 -0
  157. package/dist/workspace/init.js +18 -18
  158. package/dist/workspace/output-paths.d.ts +1 -1
  159. package/dist/workspace/output-paths.d.ts.map +1 -1
  160. package/dist/workspace/output-paths.js +1 -0
  161. package/dist/workspace/output-paths.js.map +1 -1
  162. package/dist/workspace/paths.d.ts +1 -0
  163. package/dist/workspace/paths.d.ts.map +1 -1
  164. package/dist/workspace/paths.js +1 -0
  165. package/dist/workspace/paths.js.map +1 -1
  166. package/install.ps1 +62 -62
  167. package/package.json +106 -103
  168. package/scripts/postinstall.mjs +42 -42
  169. package/scripts/release-github.mjs +91 -91
  170. package/src/doc/README.md +49 -49
  171. package/src/doc/admin-tools-and-sms-campaigns.md +99 -99
  172. package/src/doc/escalation-checklist.md +97 -97
  173. package/src/doc/payments-and-payouts.md +82 -82
  174. package/src/doc/shift-lifecycle-and-disputes.md +95 -95
  175. package/src/doc/support-macros.md +40 -40
  176. package/src/doc/venue-support-playbook.md +145 -145
  177. package/src/doc/verification-and-trust.md +88 -88
  178. package/src/doc/worker-support-playbook.md +159 -159
@@ -0,0 +1,37 @@
1
+ import { type Tool } from 'ai';
2
+ export type SwarmDepartment = 'Strategy' | 'Engineering' | 'Growth' | 'Operations' | 'Data';
3
+ export interface SwarmAgentConfig {
4
+ name: string;
5
+ department: SwarmDepartment;
6
+ instructions: string;
7
+ tools: Record<string, Tool<any, any>>;
8
+ composioToolkits?: string[];
9
+ }
10
+ export declare class SwarmAgent {
11
+ private config;
12
+ private agent;
13
+ private reportGenerator;
14
+ constructor(config: SwarmAgentConfig);
15
+ init(sessionId?: string): Promise<void>;
16
+ run(prompt: string, abortSignal?: AbortSignal): Promise<string>;
17
+ }
18
+ export type SwarmMessage = {
19
+ from: string;
20
+ to: string;
21
+ content: string;
22
+ priority: 'low' | 'medium' | 'high';
23
+ metadata?: any;
24
+ };
25
+ export declare class SwarmOrchestrator {
26
+ private static instance;
27
+ private departments;
28
+ private constructor();
29
+ static getInstance(): SwarmOrchestrator;
30
+ classifyTask(task: string): Promise<{
31
+ department: string;
32
+ subagent: string;
33
+ reasoning: string;
34
+ }>;
35
+ formatAgentRequest(message: SwarmMessage): string;
36
+ }
37
+ //# sourceMappingURL=swarm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../src/runtime/swarm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,EAAoC,MAAM,IAAI,CAAC;AAOjE,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,eAAe,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,UAAU;IAIT,OAAO,CAAC,MAAM;IAH1B,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,eAAe,CAAiC;gBAEpC,MAAM,EAAE,gBAAgB;IAEtC,IAAI,CAAC,SAAS,GAAE,MAAkB;IA8BlC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW;CAUpD;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAC3C,OAAO,CAAC,WAAW,CAMhB;IAEH,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOjC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAmBtG,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;CAGlD"}
@@ -0,0 +1,90 @@
1
+ import { ToolLoopAgent, stepCountIs, tool } from 'ai';
2
+ import { z } from 'zod';
3
+ import { models } from '../config/models.js';
4
+ import { limits } from '../safety/limits.js';
5
+ import { ReportGenerator } from './swarm/reports.js';
6
+ import { createComposioTools } from '../tools/composio.tool.js';
7
+ export class SwarmAgent {
8
+ config;
9
+ agent = null;
10
+ reportGenerator = ReportGenerator.getInstance();
11
+ constructor(config) {
12
+ this.config = config;
13
+ }
14
+ async init(sessionId = 'default') {
15
+ const composioTools = await createComposioTools(sessionId);
16
+ this.agent = new ToolLoopAgent({
17
+ model: models.chat,
18
+ instructions: [
19
+ `You are ${this.config.name}, a specialist in the ${this.config.department} department.`,
20
+ this.config.instructions,
21
+ `You have access to a vast array of external tools via Composio. Use them for real-world tasks like Stripe payments, HubSpot CRM management, GitHub repository work, and more.`,
22
+ `When you complete a significant task or plan, use the updateStatusReport tool to document your work as an .md file.`,
23
+ ].join('\n'),
24
+ tools: {
25
+ ...this.config.tools,
26
+ ...composioTools,
27
+ updateStatusReport: tool({
28
+ description: 'Update your departmental status report (.md file). Use this to track what you are doing or what you have finished.',
29
+ inputSchema: z.object({
30
+ status: z.enum(['doing', 'done', 'planning']),
31
+ content: z.string().min(10).describe('Detailed Markdown content of your progress or findings.'),
32
+ }),
33
+ execute: async ({ status, content }) => {
34
+ const filePath = await this.reportGenerator.saveReport(this.config.name, content, status);
35
+ return { status: 'Report updated', filePath };
36
+ },
37
+ }),
38
+ },
39
+ stopWhen: stepCountIs(limits.subagentSteps),
40
+ });
41
+ }
42
+ async run(prompt, abortSignal) {
43
+ if (!this.agent) {
44
+ await this.init();
45
+ }
46
+ const result = await this.agent.generate({
47
+ prompt,
48
+ ...(abortSignal ? { abortSignal } : {})
49
+ });
50
+ return result.text;
51
+ }
52
+ }
53
+ export class SwarmOrchestrator {
54
+ static instance;
55
+ departments = new Map([
56
+ ['strategy', ['productManager', 'marketAnalyst']],
57
+ ['engineering', ['fullStackCoder', 'qaEngineer', 'devopsSre']],
58
+ ['growth', ['growthHacker', 'seoExpert', 'contentWriter', 'socialMediaManager', 'salesOps', 'adsManager']],
59
+ ['operations', ['financeAnalyst', 'customerSuccess', 'legalCounsel', 'hrRecruiter', 'logisticsLead']],
60
+ ['data', ['dataScientist', 'biReporter']],
61
+ ]);
62
+ constructor() { }
63
+ static getInstance() {
64
+ if (!SwarmOrchestrator.instance) {
65
+ SwarmOrchestrator.instance = new SwarmOrchestrator();
66
+ }
67
+ return SwarmOrchestrator.instance;
68
+ }
69
+ async classifyTask(task) {
70
+ const { generateObject } = await import('ai');
71
+ const { object } = await generateObject({
72
+ model: models.manager,
73
+ schema: z.object({
74
+ department: z.enum(['strategy', 'engineering', 'growth', 'operations', 'data', 'general']),
75
+ subagent: z.string(),
76
+ reasoning: z.string(),
77
+ }),
78
+ prompt: `Analyze this business task and assign it to the most relevant department and subagent:
79
+ Task: ${task}
80
+
81
+ Available Departments: ${Array.from(this.departments.keys()).join(', ')}
82
+ Available Subagents: ${Array.from(this.departments.values()).flat().join(', ')}`,
83
+ });
84
+ return object;
85
+ }
86
+ formatAgentRequest(message) {
87
+ return `[Swarm Message] From: ${message.from} | Priority: ${message.priority}\n\nTask: ${message.content}`;
88
+ }
89
+ }
90
+ //# sourceMappingURL=swarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../src/runtime/swarm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export type TraceEvent = {
2
+ id: string;
3
+ type: 'agent' | 'tool' | 'job';
4
+ name: string;
5
+ status: 'start' | 'end' | 'error';
6
+ timestamp: string;
7
+ data?: any;
8
+ };
9
+ export declare class Telemetry {
10
+ private static events;
11
+ static record(event: Omit<TraceEvent, 'id' | 'timestamp'>): void;
12
+ static getHistory(): TraceEvent[];
13
+ static clear(): void;
14
+ }
15
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/runtime/telemetry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAoB;IAEzC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC;IAiBzD,MAAM,CAAC,UAAU;IAIjB,MAAM,CAAC,KAAK;CAGb"}
@@ -0,0 +1,25 @@
1
+ import { emitProgress } from './progress.js';
2
+ export class Telemetry {
3
+ static events = [];
4
+ static record(event) {
5
+ const fullEvent = {
6
+ ...event,
7
+ id: Math.random().toString(36).substring(7),
8
+ timestamp: new Date().toISOString(),
9
+ };
10
+ this.events.push(fullEvent);
11
+ // Also emit as progress for real-time visibility
12
+ emitProgress({
13
+ type: event.status === 'error' ? 'tool:error' : 'step',
14
+ label: `${event.type}:${event.name} ${event.status}`,
15
+ ...(event.data ? { detail: JSON.stringify(event.data) } : {}),
16
+ });
17
+ }
18
+ static getHistory() {
19
+ return this.events;
20
+ }
21
+ static clear() {
22
+ this.events = [];
23
+ }
24
+ }
25
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/runtime/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAW7C,MAAM,OAAO,SAAS;IACZ,MAAM,CAAC,MAAM,GAAiB,EAAE,CAAC;IAEzC,MAAM,CAAC,MAAM,CAAC,KAA2C;QACvD,MAAM,SAAS,GAAe;YAC5B,GAAG,KAAK;YACR,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE5B,iDAAiD;QACjD,YAAY,CAAC;YACX,IAAI,EAAE,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM;YACtD,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE;YACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type Tool } from 'ai';
2
+ import { z, type ZodType } from 'zod';
3
+ export type ToolDefinition<INPUT extends ZodType<any>, OUTPUT> = {
4
+ description: string;
5
+ inputSchema: INPUT;
6
+ execute: (input: z.infer<INPUT>, context: {
7
+ abortSignal?: AbortSignal;
8
+ }) => Promise<OUTPUT>;
9
+ group?: string;
10
+ };
11
+ export declare function defineTool<INPUT extends ZodType<any>, OUTPUT>(name: string, def: ToolDefinition<INPUT, OUTPUT>): Tool<z.infer<INPUT>, OUTPUT>;
12
+ //# sourceMappingURL=tool-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-utils.d.ts","sourceRoot":"","sources":["../../src/runtime/tool-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAGtC,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,KAAK,CAAC;IACnB,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE;QAAE,WAAW,CAAC,EAAE,WAAW,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5F,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,SAAS,OAAO,CAAC,GAAG,CAAC,EAAE,MAAM,EAC3D,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,GACjC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CA2B9B"}
@@ -0,0 +1,31 @@
1
+ import { tool } from 'ai';
2
+ import { emitProgress } from './progress.js';
3
+ export function defineTool(name, def) {
4
+ return tool({
5
+ description: def.description,
6
+ // @ts-ignore - Vercel AI SDK v6 type compatibility with generic Zod types
7
+ inputSchema: def.inputSchema,
8
+ // @ts-ignore
9
+ execute: async (input, context) => {
10
+ emitProgress({
11
+ type: 'tool:start',
12
+ label: `Executing ${name}`,
13
+ ...(def.group ? { detail: `Group: ${def.group}` } : {})
14
+ });
15
+ try {
16
+ const result = await def.execute(input, context);
17
+ emitProgress({ type: 'tool:end', label: `${name} completed` });
18
+ return result;
19
+ }
20
+ catch (error) {
21
+ emitProgress({
22
+ type: 'tool:error',
23
+ label: `${name} failed`,
24
+ detail: error instanceof Error ? error.message : String(error)
25
+ });
26
+ throw error;
27
+ }
28
+ },
29
+ });
30
+ }
31
+ //# sourceMappingURL=tool-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-utils.js","sourceRoot":"","sources":["../../src/runtime/tool-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,MAAM,IAAI,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,GAAkC;IAElC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,0EAA0E;QAC1E,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,aAAa;QACb,OAAO,EAAE,KAAK,EAAE,KAAqB,EAAE,OAAsC,EAAE,EAAE;YAC/E,YAAY,CAAC;gBACX,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,aAAa,IAAI,EAAE;gBAC1B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxD,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACjD,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC,CAAC;gBAC/D,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC;oBACX,IAAI,EAAE,YAAY;oBAClB,KAAK,EAAE,GAAG,IAAI,SAAS;oBACvB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC/D,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,54 @@
1
+ export declare const browserTools: {
2
+ browserNavigate: import("ai").Tool<{
3
+ url: string;
4
+ waitUntil: "commit" | "load" | "domcontentloaded" | "networkidle";
5
+ }, {
6
+ url: string;
7
+ title: string;
8
+ status: string;
9
+ }>;
10
+ browserClick: import("ai").Tool<{
11
+ selector: string;
12
+ timeout: number;
13
+ }, {
14
+ selector: string;
15
+ result: string;
16
+ }>;
17
+ browserType: import("ai").Tool<{
18
+ selector: string;
19
+ text: string;
20
+ delay: number;
21
+ pressEnter: boolean;
22
+ }, {
23
+ selector: string;
24
+ result: string;
25
+ }>;
26
+ browserExtractContent: import("ai").Tool<{
27
+ mode: "text" | "markdown" | "html" | "links";
28
+ selector?: string | undefined;
29
+ }, {
30
+ mode: "text" | "markdown" | "html" | "links";
31
+ result: any;
32
+ }>;
33
+ browserTakeScreenshot: import("ai").Tool<{
34
+ fullPage: boolean;
35
+ }, {
36
+ filePath: string;
37
+ }>;
38
+ browserExecuteScript: import("ai").Tool<{
39
+ script: string;
40
+ }, {
41
+ result: unknown;
42
+ }>;
43
+ browserClose: import("ai").Tool<Record<string, never>, {
44
+ status: string;
45
+ }>;
46
+ visualBrowserAudit: import("ai").Tool<{
47
+ focus?: string | undefined;
48
+ }, {
49
+ screenshotPath: string;
50
+ auditPrompt: string;
51
+ message: string;
52
+ }>;
53
+ };
54
+ //# sourceMappingURL=browser.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.tool.d.ts","sourceRoot":"","sources":["../../src/tools/browser.tool.ts"],"names":[],"mappings":"AA+CA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8JxB,CAAC"}
@@ -0,0 +1,193 @@
1
+ import { chromium } from 'playwright';
2
+ import { tool } from 'ai';
3
+ import { z } from 'zod';
4
+ import { requestConfirmation } from '../runtime/confirm.js';
5
+ import { emitProgress } from '../runtime/progress.js';
6
+ import { getOutputDir } from '../workspace/output-paths.js';
7
+ import path from 'node:path';
8
+ import { mkdir } from 'node:fs/promises';
9
+ let browser = null;
10
+ let context = null;
11
+ let page = null;
12
+ const outputDir = getOutputDir('browser');
13
+ async function ensurePage() {
14
+ if (!browser) {
15
+ browser = await chromium.launch({ headless: true });
16
+ context = await browser.newContext({
17
+ viewport: { width: 1280, height: 720 },
18
+ userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 ZilMate/1.0',
19
+ });
20
+ page = await context.newPage();
21
+ }
22
+ if (!page) {
23
+ if (!context) {
24
+ context = await browser.newContext();
25
+ }
26
+ page = await context.newPage();
27
+ }
28
+ return page;
29
+ }
30
+ async function confirmBrowserAction(action, detail) {
31
+ return requestConfirmation({
32
+ toolkitSlug: 'BROWSER',
33
+ toolSlug: 'AUTOMATION',
34
+ action,
35
+ access: 'Write',
36
+ targetTools: ['BROWSER_AUTOMATION'],
37
+ details: [detail],
38
+ summary: `${action}: ${detail}`,
39
+ });
40
+ }
41
+ function ts() { return new Date().toISOString().replace(/[:.]/g, '-'); }
42
+ export const browserTools = {
43
+ browserNavigate: tool({
44
+ description: 'Navigate to a URL in the browser.',
45
+ inputSchema: z.object({
46
+ url: z.string().url().describe('The URL to navigate to.'),
47
+ waitUntil: z.enum(['load', 'domcontentloaded', 'networkidle', 'commit']).optional().default('load'),
48
+ }),
49
+ execute: async ({ url, waitUntil }) => {
50
+ emitProgress({ type: 'tool:start', label: 'Browser navigating', detail: url });
51
+ const p = await ensurePage();
52
+ await p.goto(url, { waitUntil });
53
+ const title = await p.title();
54
+ emitProgress({ type: 'tool:end', label: 'Browser navigation complete', detail: title });
55
+ return { url, title, status: 'ok' };
56
+ },
57
+ }),
58
+ browserClick: tool({
59
+ description: 'Click an element on the current page using a CSS selector.',
60
+ inputSchema: z.object({
61
+ selector: z.string().describe('CSS selector of the element to click.'),
62
+ timeout: z.number().optional().default(10000),
63
+ }),
64
+ execute: async ({ selector, timeout }) => {
65
+ const approved = await confirmBrowserAction('Click', selector);
66
+ if (!approved)
67
+ throw new Error('Blocked browser click.');
68
+ emitProgress({ type: 'tool:start', label: 'Browser clicking', detail: selector });
69
+ const p = await ensurePage();
70
+ await p.click(selector, { timeout });
71
+ emitProgress({ type: 'tool:end', label: 'Browser click complete' });
72
+ return { selector, result: 'clicked' };
73
+ },
74
+ }),
75
+ browserType: tool({
76
+ description: 'Type text into an input field using a CSS selector.',
77
+ inputSchema: z.object({
78
+ selector: z.string().describe('CSS selector of the input field.'),
79
+ text: z.string().describe('Text to type.'),
80
+ delay: z.number().optional().default(50).describe('Delay between key presses in ms.'),
81
+ pressEnter: z.boolean().optional().default(false).describe('Whether to press Enter after typing.'),
82
+ }),
83
+ execute: async ({ selector, text, delay, pressEnter }) => {
84
+ const approved = await confirmBrowserAction('Type', `${text} into ${selector}`);
85
+ if (!approved)
86
+ throw new Error('Blocked browser type.');
87
+ emitProgress({ type: 'tool:start', label: 'Browser typing', detail: selector });
88
+ const p = await ensurePage();
89
+ await p.fill(selector, ''); // Clear first
90
+ await p.type(selector, text, { delay });
91
+ if (pressEnter) {
92
+ await p.keyboard.press('Enter');
93
+ }
94
+ emitProgress({ type: 'tool:end', label: 'Browser typing complete' });
95
+ return { selector, result: 'typed' };
96
+ },
97
+ }),
98
+ browserExtractContent: tool({
99
+ description: 'Extract text or HTML content from the current page.',
100
+ inputSchema: z.object({
101
+ mode: z.enum(['text', 'html', 'markdown', 'links']).optional().default('text'),
102
+ selector: z.string().optional().describe('Optional CSS selector to extract from.'),
103
+ }),
104
+ execute: async ({ mode, selector }) => {
105
+ emitProgress({ type: 'tool:start', label: 'Browser extracting content', detail: mode });
106
+ const p = await ensurePage();
107
+ let result;
108
+ if (mode === 'text') {
109
+ result = selector ? await p.innerText(selector) : await p.innerText('body');
110
+ }
111
+ else if (mode === 'html') {
112
+ result = selector ? await p.innerHTML(selector) : await p.content();
113
+ }
114
+ else if (mode === 'links') {
115
+ result = await p.$$eval('a', (links) => links.map(a => ({ text: a.innerText, href: a.href })));
116
+ }
117
+ else {
118
+ // Fallback to text for now
119
+ result = await p.innerText('body');
120
+ }
121
+ emitProgress({ type: 'tool:end', label: 'Browser extraction complete' });
122
+ return { mode, result };
123
+ },
124
+ }),
125
+ browserTakeScreenshot: tool({
126
+ description: 'Take a screenshot of the current page.',
127
+ inputSchema: z.object({
128
+ fullPage: z.boolean().optional().default(false),
129
+ }),
130
+ execute: async ({ fullPage }) => {
131
+ emitProgress({ type: 'tool:start', label: 'Browser taking screenshot' });
132
+ const p = await ensurePage();
133
+ await mkdir(outputDir, { recursive: true });
134
+ const filePath = path.join(outputDir, `browser-${ts()}.png`);
135
+ await p.screenshot({ path: filePath, fullPage });
136
+ emitProgress({ type: 'tool:end', label: 'Browser screenshot saved', detail: filePath });
137
+ return { filePath };
138
+ },
139
+ }),
140
+ browserExecuteScript: tool({
141
+ description: 'Execute custom JavaScript in the browser context.',
142
+ inputSchema: z.object({
143
+ script: z.string().describe('The JavaScript code to execute.'),
144
+ }),
145
+ execute: async ({ script }) => {
146
+ const approved = await confirmBrowserAction('Execute Script', script.slice(0, 100));
147
+ if (!approved)
148
+ throw new Error('Blocked browser script execution.');
149
+ emitProgress({ type: 'tool:start', label: 'Browser executing script' });
150
+ const p = await ensurePage();
151
+ const result = await p.evaluate(script);
152
+ emitProgress({ type: 'tool:end', label: 'Browser script execution complete' });
153
+ return { result };
154
+ },
155
+ }),
156
+ browserClose: tool({
157
+ description: 'Close the browser instance.',
158
+ inputSchema: z.object({}),
159
+ execute: async () => {
160
+ if (browser) {
161
+ await browser.close();
162
+ browser = null;
163
+ context = null;
164
+ page = null;
165
+ }
166
+ return { status: 'closed' };
167
+ },
168
+ }),
169
+ visualBrowserAudit: tool({
170
+ description: 'Capture a screenshot of the current page and perform a visual UI/UX audit using Vision models. Use this to verify design consistency.',
171
+ inputSchema: z.object({
172
+ focus: z.string().optional().describe('Specific UI element or area to audit (e.g., "navigation menu", "mobile responsiveness").'),
173
+ }),
174
+ execute: async ({ focus }) => {
175
+ emitProgress({ type: 'tool:start', label: 'Performing visual audit', ...(focus ? { detail: focus } : {}) });
176
+ const p = await ensurePage();
177
+ const filePath = path.join(outputDir, `audit-${ts()}.png`);
178
+ await p.screenshot({ path: filePath });
179
+ // We delegate the actual vision analysis to the screenshot analyzer
180
+ // but wrap it in a business-centric context.
181
+ const prompt = focus
182
+ ? `Perform a professional UI/UX audit of this page, focusing on ${focus}. Compare against standard brand guidelines.`
183
+ : 'Perform a professional UI/UX audit of this entire page. Identify layout issues, accessibility gaps, and brand consistency.';
184
+ // In a real implementation, we would call the internal analyzeImage here.
185
+ return {
186
+ screenshotPath: filePath,
187
+ auditPrompt: prompt,
188
+ message: 'Screenshot captured. Use analyzeScreenshot with this path for full visual reasoning.'
189
+ };
190
+ },
191
+ }),
192
+ };
193
+ //# sourceMappingURL=browser.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.tool.js","sourceRoot":"","sources":["../../src/tools/browser.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare function createBusinessAppTools(sessionId?: string): Promise<{
2
+ checkRevenue: import("ai").Tool<{
3
+ limit: number;
4
+ }, {
5
+ message: string;
6
+ }>;
7
+ manageLeads: import("ai").Tool<{
8
+ query: string;
9
+ }, {
10
+ message: string;
11
+ }>;
12
+ manageInventory: import("ai").Tool<{
13
+ productId?: string | undefined;
14
+ }, {
15
+ message: string;
16
+ }>;
17
+ }>;
18
+ //# sourceMappingURL=business-apps.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-apps.tool.d.ts","sourceRoot":"","sources":["../../src/tools/business-apps.tool.ts"],"names":[],"mappings":"AAIA,wBAAsB,sBAAsB,CAAC,SAAS,GAAE,MAAkB;;;;;;;;;;;;;;;;GA0CzE"}
@@ -0,0 +1,43 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ import { createComposioTools } from './composio.tool.js';
4
+ export async function createBusinessAppTools(sessionId = 'default') {
5
+ // We leverage the existing Composio infrastructure but provide a specialized
6
+ // business-focused interface for the swarm agents.
7
+ const composio = await createComposioTools(sessionId);
8
+ return {
9
+ ...composio,
10
+ // Explicit high-level tools for Stripe (Operations)
11
+ checkRevenue: tool({
12
+ description: 'Check business revenue and payouts via Stripe.',
13
+ inputSchema: z.object({
14
+ limit: z.number().optional().default(10),
15
+ }),
16
+ execute: async ({ limit }) => {
17
+ // This is a proxy to the Composio Stripe implementation
18
+ return { message: "Delegating to Composio Stripe toolkit..." };
19
+ }
20
+ }),
21
+ // Explicit high-level tools for HubSpot (Growth/Sales)
22
+ manageLeads: tool({
23
+ description: 'Fetch and update lead information in HubSpot CRM.',
24
+ inputSchema: z.object({
25
+ query: z.string().describe('Search query for contacts or deals.'),
26
+ }),
27
+ execute: async ({ query }) => {
28
+ return { message: "Delegating to Composio HubSpot toolkit..." };
29
+ }
30
+ }),
31
+ // Explicit high-level tools for Shopify (Operations/Logistics)
32
+ manageInventory: tool({
33
+ description: 'Check stock levels and update product catalog in Shopify.',
34
+ inputSchema: z.object({
35
+ productId: z.string().optional(),
36
+ }),
37
+ execute: async ({ productId }) => {
38
+ return { message: "Delegating to Composio Shopify toolkit..." };
39
+ }
40
+ })
41
+ };
42
+ }
43
+ //# sourceMappingURL=business-apps.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-apps.tool.js","sourceRoot":"","sources":["../../src/tools/business-apps.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,YAAoB,SAAS;IACxE,6EAA6E;IAC7E,mDAAmD;IACnD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IAEtD,OAAO;QACL,GAAG,QAAQ;QAEX,oDAAoD;QACpD,YAAY,EAAE,IAAI,CAAC;YACjB,WAAW,EAAE,gDAAgD;YAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;aACzC,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,wDAAwD;gBACxD,OAAO,EAAE,OAAO,EAAE,0CAA0C,EAAE,CAAC;YACjE,CAAC;SACF,CAAC;QAEF,uDAAuD;QACvD,WAAW,EAAE,IAAI,CAAC;YAChB,WAAW,EAAE,mDAAmD;YAChE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;aAClE,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,OAAO,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;YAClE,CAAC;SACF,CAAC;QAEF,+DAA+D;QAC/D,eAAe,EAAE,IAAI,CAAC;YACpB,WAAW,EAAE,2DAA2D;YACxE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;gBACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;aACjC,CAAC;YACF,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;gBAC/B,OAAO,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC;YAClE,CAAC;SACF,CAAC;KACH,CAAC;AACJ,CAAC"}