zilmate 1.7.0 → 1.7.2

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.
@@ -116,12 +116,12 @@ export declare function createAutomationPlannerAgent(): ToolLoopAgent<never, {
116
116
  limit?: number | undefined;
117
117
  }, {
118
118
  items: {
119
- slug: string;
120
119
  name: string;
121
120
  description: string;
121
+ slug: string;
122
122
  toolkit: {
123
- slug: string;
124
123
  name: string;
124
+ slug: string;
125
125
  logo: string;
126
126
  };
127
127
  payload: Record<string, unknown>;
@@ -135,12 +135,12 @@ export declare function createAutomationPlannerAgent(): ToolLoopAgent<never, {
135
135
  showTriggerType: import("ai").Tool<{
136
136
  triggerSlug: string;
137
137
  }, {
138
- slug: string;
139
138
  name: string;
140
139
  description: string;
140
+ slug: string;
141
141
  toolkit: {
142
- slug: string;
143
142
  name: string;
143
+ slug: string;
144
144
  logo: string;
145
145
  };
146
146
  payload: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"automation-planner.agent.d.ts","sourceRoot":"","sources":["../../src/agents/automation-planner.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAUhD,wBAAgB,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA2BksyG,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UADn9/F"}
1
+ {"version":3,"file":"automation-planner.agent.d.ts","sourceRoot":"","sources":["../../src/agents/automation-planner.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAUhD,wBAAgB,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA2B8+uG,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAD/v8F"}
@@ -536,12 +536,12 @@ export declare function createManagerAgent(runId?: string, options?: {
536
536
  limit?: number | undefined;
537
537
  }, {
538
538
  items: {
539
- slug: string;
540
539
  name: string;
541
540
  description: string;
541
+ slug: string;
542
542
  toolkit: {
543
- slug: string;
544
543
  name: string;
544
+ slug: string;
545
545
  logo: string;
546
546
  };
547
547
  payload: Record<string, unknown>;
@@ -555,12 +555,12 @@ export declare function createManagerAgent(runId?: string, options?: {
555
555
  showTriggerType: import("ai").Tool<{
556
556
  triggerSlug: string;
557
557
  }, {
558
- slug: string;
559
558
  name: string;
560
559
  description: string;
560
+ slug: string;
561
561
  toolkit: {
562
- slug: string;
563
562
  name: string;
563
+ slug: string;
564
564
  logo: string;
565
565
  };
566
566
  payload: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/agents/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,aAAa,EAAE,MAAM,IAAI,CAAC;AAetD,OAAO,EAAgB,KAAK,aAAa,EAAwB,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,KAAK,mBAAmB,EAA2B,MAAM,uBAAuB,CAAC;AAyB1F,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkIpE,wBAAsB,kBAAkB,CAAC,KAAK,GAAE,MAAqB,EAAE,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA2K+5pF,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA9B/u3E;AAOD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAAC,GAAG,CAAC,EAAE,UAAU,CAAA;CAAO,mBAqBhM"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/agents/manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAqB,aAAa,EAAE,MAAM,IAAI,CAAC;AAetD,OAAO,EAAgB,KAAK,aAAa,EAAwB,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,KAAK,mBAAmB,EAA2B,MAAM,uBAAuB,CAAC;AAyB1F,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAkIpE,wBAAsB,kBAAkB,CAAC,KAAK,GAAE,MAAqB,EAAE,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA2K2smF,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA9B3h0E;AAOD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAAC,GAAG,CAAC,EAAE,UAAU,CAAA;CAAO,mBAqBhM"}
package/dist/index.js CHANGED
@@ -53,7 +53,7 @@ const program = new Command();
53
53
  program
54
54
  .name('zilmate')
55
55
  .description('ZilMate Agent')
56
- .version('1.7.0');
56
+ .version('1.7.2');
57
57
  program
58
58
  .command('welcome')
59
59
  .description('Show the ZilMate welcome dashboard')
@@ -82,18 +82,18 @@ export const mouseTool = {
82
82
  if (!approved)
83
83
  throw new Error('Blocked mouse action.');
84
84
  emitProgress({ type: 'tool:start', label: `Mouse ${action}`, detail: `(${x}, ${y})` });
85
- const script = `
86
- import pyautogui
87
- import time
88
- pyautogui.FAILSAFE = True
89
- pyautogui.PAUSE = 0.05
90
-
91
- ${action === 'move' ? `pyautogui.moveTo(${x}, ${y}, duration=${duration})` : ''}
92
- ${action === 'click' ? `pyautogui.click(${x}, ${y}, duration=${duration})` : ''}
93
- ${action === 'doubleClick' ? `pyautogui.doubleClick(${x}, ${y}, duration=${duration})` : ''}
94
- ${action === 'rightClick' ? `pyautogui.rightClick(${x}, ${y}, duration=${duration})` : ''}
95
- ${action === 'scroll' ? `pyautogui.moveTo(${x}, ${y})\npyautogui.scroll(${scrollDirection === 'down' ? -(scrollAmount ?? 3) : (scrollAmount ?? 3)})` : ''}
96
- print("done")
85
+ const script = `
86
+ import pyautogui
87
+ import time
88
+ pyautogui.FAILSAFE = True
89
+ pyautogui.PAUSE = 0.05
90
+
91
+ ${action === 'move' ? `pyautogui.moveTo(${x}, ${y}, duration=${duration})` : ''}
92
+ ${action === 'click' ? `pyautogui.click(${x}, ${y}, duration=${duration})` : ''}
93
+ ${action === 'doubleClick' ? `pyautogui.doubleClick(${x}, ${y}, duration=${duration})` : ''}
94
+ ${action === 'rightClick' ? `pyautogui.rightClick(${x}, ${y}, duration=${duration})` : ''}
95
+ ${action === 'scroll' ? `pyautogui.moveTo(${x}, ${y})\npyautogui.scroll(${scrollDirection === 'down' ? -(scrollAmount ?? 3) : (scrollAmount ?? 3)})` : ''}
96
+ print("done")
97
97
  `.trim();
98
98
  const out = await runPython(script);
99
99
  emitProgress({ type: 'tool:end', label: `Mouse ${action} complete` });
@@ -129,15 +129,15 @@ export const keyboardTool = {
129
129
  emitProgress({ type: 'tool:start', label: `Keyboard ${action}` });
130
130
  // Escape backslashes and quotes for safe embedding in Python string
131
131
  const escapedText = (text ?? '').replace(/\\/g, '\\\\').replace(/'/g, "\\'");
132
- const script = `
133
- import pyautogui
134
- pyautogui.FAILSAFE = True
135
- pyautogui.PAUSE = 0.05
136
-
137
- ${action === 'type' ? `pyautogui.typewrite('${escapedText}', interval=${interval})` : ''}
138
- ${action === 'press' ? `pyautogui.press('${key}')` : ''}
139
- ${action === 'hotkey' ? `pyautogui.hotkey(${hotkey.map((k) => `'${k}'`).join(', ')})` : ''}
140
- print("done")
132
+ const script = `
133
+ import pyautogui
134
+ pyautogui.FAILSAFE = True
135
+ pyautogui.PAUSE = 0.05
136
+
137
+ ${action === 'type' ? `pyautogui.typewrite('${escapedText}', interval=${interval})` : ''}
138
+ ${action === 'press' ? `pyautogui.press('${key}')` : ''}
139
+ ${action === 'hotkey' ? `pyautogui.hotkey(${hotkey.map((k) => `'${k}'`).join(', ')})` : ''}
140
+ print("done")
141
141
  `.trim();
142
142
  const out = await runPython(script);
143
143
  emitProgress({ type: 'tool:end', label: `Keyboard ${action} complete` });
@@ -165,11 +165,11 @@ export const screenReadTool = {
165
165
  const regionArg = region
166
166
  ? `region=(${region.x}, ${region.y}, ${region.width}, ${region.height})`
167
167
  : '';
168
- const script = `
169
- import pyautogui
170
- img = pyautogui.screenshot(${regionArg})
171
- img.save('${outFile.replace(/\\/g, '\\\\')}')
172
- print(f"{img.width}x{img.height}")
168
+ const script = `
169
+ import pyautogui
170
+ img = pyautogui.screenshot(${regionArg})
171
+ img.save('${outFile.replace(/\\/g, '\\\\')}')
172
+ print(f"{img.width}x{img.height}")
173
173
  `.trim();
174
174
  const out = await runPython(script);
175
175
  const [w, h] = out.trim().split('x').map(Number);
@@ -200,28 +200,28 @@ export const windowTool = {
200
200
  if (!approved)
201
201
  throw new Error('Blocked window action.');
202
202
  emitProgress({ type: 'tool:start', label: `Window ${action}`, detail: title ?? '' });
203
- const script = `
204
- import pygetwindow as gw
205
- import json
206
-
207
- ${action === 'list' ? `
208
- wins = gw.getAllWindows()
209
- print(json.dumps([{"title": w.title, "width": w.width, "height": w.height, "x": w.left, "y": w.top, "visible": w.visible} for w in wins if w.title.strip()]))
210
- ` : ''}
211
- ${action !== 'list' ? `
212
- wins = gw.getWindowsWithTitle('${title}')
213
- if not wins:
214
- print(json.dumps({"error": "Window not found: ${title}"}))
215
- else:
216
- w = wins[0]
217
- ${action === 'focus' ? 'w.activate()' : ''}
218
- ${action === 'minimize' ? 'w.minimize()' : ''}
219
- ${action === 'maximize' ? 'w.maximize()' : ''}
220
- ${action === 'close' ? 'w.close()' : ''}
221
- ${action === 'resize' && width && height ? `w.resizeTo(${width}, ${height})` : ''}
222
- ${action === 'resize' && x !== undefined && y !== undefined ? `w.moveTo(${x}, ${y})` : ''}
223
- print(json.dumps({"title": w.title, "action": "${action}", "done": True}))
224
- ` : ''}
203
+ const script = `
204
+ import pygetwindow as gw
205
+ import json
206
+
207
+ ${action === 'list' ? `
208
+ wins = gw.getAllWindows()
209
+ print(json.dumps([{"title": w.title, "width": w.width, "height": w.height, "x": w.left, "y": w.top, "visible": w.visible} for w in wins if w.title.strip()]))
210
+ ` : ''}
211
+ ${action !== 'list' ? `
212
+ wins = gw.getWindowsWithTitle('${title}')
213
+ if not wins:
214
+ print(json.dumps({"error": "Window not found: ${title}"}))
215
+ else:
216
+ w = wins[0]
217
+ ${action === 'focus' ? 'w.activate()' : ''}
218
+ ${action === 'minimize' ? 'w.minimize()' : ''}
219
+ ${action === 'maximize' ? 'w.maximize()' : ''}
220
+ ${action === 'close' ? 'w.close()' : ''}
221
+ ${action === 'resize' && width && height ? `w.resizeTo(${width}, ${height})` : ''}
222
+ ${action === 'resize' && x !== undefined && y !== undefined ? `w.moveTo(${x}, ${y})` : ''}
223
+ print(json.dumps({"title": w.title, "action": "${action}", "done": True}))
224
+ ` : ''}
225
225
  `.trim();
226
226
  const out = await runPython(script);
227
227
  try {
@@ -258,19 +258,19 @@ export const findElementTool = {
258
258
  throw new Error('Blocked findOnScreen.');
259
259
  emitProgress({ type: 'tool:start', label: 'Locating element on screen' });
260
260
  const regionArg = region ? `region=(${region.x}, ${region.y}, ${region.width}, ${region.height})` : '';
261
- const script = `
262
- import pyautogui
263
- import json
264
-
265
- try:
266
- loc = pyautogui.locateOnScreen('${referenceImagePath.replace(/\\/g, '\\\\')}', confidence=${confidence}${regionArg ? ', ' + regionArg : ''})
267
- if loc:
268
- center = pyautogui.center(loc)
269
- print(json.dumps({"found": True, "x": center.x, "y": center.y, "box": {"left": loc.left, "top": loc.top, "width": loc.width, "height": loc.height}}))
270
- else:
271
- print(json.dumps({"found": False}))
272
- except Exception as e:
273
- print(json.dumps({"found": False, "error": str(e)}))
261
+ const script = `
262
+ import pyautogui
263
+ import json
264
+
265
+ try:
266
+ loc = pyautogui.locateOnScreen('${referenceImagePath.replace(/\\/g, '\\\\')}', confidence=${confidence}${regionArg ? ', ' + regionArg : ''})
267
+ if loc:
268
+ center = pyautogui.center(loc)
269
+ print(json.dumps({"found": True, "x": center.x, "y": center.y, "box": {"left": loc.left, "top": loc.top, "width": loc.width, "height": loc.height}}))
270
+ else:
271
+ print(json.dumps({"found": False}))
272
+ except Exception as e:
273
+ print(json.dumps({"found": False, "error": str(e)}))
274
274
  `.trim();
275
275
  const out = await runPython(script);
276
276
  const result = JSON.parse(out.trim());
@@ -296,11 +296,11 @@ export const dragTool = {
296
296
  if (!approved)
297
297
  throw new Error('Blocked drag action.');
298
298
  emitProgress({ type: 'tool:start', label: 'Dragging', detail: `(${fromX},${fromY}) → (${toX},${toY})` });
299
- const script = `
300
- import pyautogui
301
- pyautogui.FAILSAFE = True
302
- pyautogui.dragTo(${toX}, ${toY}, duration=${duration}, startX=${fromX}, startY=${fromY}, button='${button}')
303
- print("done")
299
+ const script = `
300
+ import pyautogui
301
+ pyautogui.FAILSAFE = True
302
+ pyautogui.dragTo(${toX}, ${toY}, duration=${duration}, startX=${fromX}, startY=${fromY}, button='${button}')
303
+ print("done")
304
304
  `.trim();
305
305
  const out = await runPython(script);
306
306
  emitProgress({ type: 'tool:end', label: 'Drag complete' });
@@ -146,14 +146,14 @@ const OSINT_TOOLS = [
146
146
  return runInstallCommand('powershell.exe', [
147
147
  '-NoProfile',
148
148
  '-Command',
149
- `
150
- $dir = "$env:USERPROFILE\\bin"
151
- New-Item -ItemType Directory -Force -Path $dir | Out-Null
152
- $url = "https://github.com/sundowndev/phoneinfoga/releases/latest/download/phoneinfoga_Windows_x86_64.zip"
153
- $zip = "$env:TEMP\\phoneinfoga.zip"
154
- Invoke-WebRequest -Uri $url -OutFile $zip
155
- Expand-Archive -Path $zip -DestinationPath $dir -Force
156
- Write-Output "PhoneInfoga extracted to $dir — ensure $dir is on your PATH"
149
+ `
150
+ $dir = "$env:USERPROFILE\\bin"
151
+ New-Item -ItemType Directory -Force -Path $dir | Out-Null
152
+ $url = "https://github.com/sundowndev/phoneinfoga/releases/latest/download/phoneinfoga_Windows_x86_64.zip"
153
+ $zip = "$env:TEMP\\phoneinfoga.zip"
154
+ Invoke-WebRequest -Uri $url -OutFile $zip
155
+ Expand-Archive -Path $zip -DestinationPath $dir -Force
156
+ Write-Output "PhoneInfoga extracted to $dir — ensure $dir is on your PATH"
157
157
  `.trim(),
158
158
  ]);
159
159
  }
@@ -4,12 +4,12 @@ export declare const triggerTools: {
4
4
  limit?: number | undefined;
5
5
  }, {
6
6
  items: {
7
- slug: string;
8
7
  name: string;
9
8
  description: string;
9
+ slug: string;
10
10
  toolkit: {
11
- slug: string;
12
11
  name: string;
12
+ slug: string;
13
13
  logo: string;
14
14
  };
15
15
  payload: Record<string, unknown>;
@@ -23,12 +23,12 @@ export declare const triggerTools: {
23
23
  showTriggerType: import("ai").Tool<{
24
24
  triggerSlug: string;
25
25
  }, {
26
- slug: string;
27
26
  name: string;
28
27
  description: string;
28
+ slug: string;
29
29
  toolkit: {
30
- slug: string;
31
30
  name: string;
31
+ slug: string;
32
32
  logo: string;
33
33
  };
34
34
  payload: Record<string, unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"triggers.tool.d.ts","sourceRoot":"","sources":["../../src/tools/triggers.tool.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;mBAqG+htG,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;CAD7x6F,CAAC"}
1
+ {"version":3,"file":"triggers.tool.d.ts","sourceRoot":"","sources":["../../src/tools/triggers.tool.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;mBAqG20pG,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;CADzk3F,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zilmate",
3
- "version": "1.7.0",
3
+ "version": "1.7.2",
4
4
  "description": "ZilMate CLI multi-agent assistant for ZiloShift workflows.",
5
5
  "type": "module",
6
6
  "main": "dist/server.js",
@@ -49,8 +49,8 @@
49
49
  "author": "",
50
50
  "license": "ISC",
51
51
  "dependencies": {
52
- "@composio/core": "^0.10.0",
53
- "@composio/vercel": "^0.9.2",
52
+ "@composio/core": "^0.11.0",
53
+ "@composio/vercel": "^0.9.3",
54
54
  "@deepgram/sdk": "^4.11.2",
55
55
  "@tavily/core": "^0.7.5",
56
56
  "@upstash/redis": "^1.38.0",
@@ -96,5 +96,8 @@
96
96
  "homepage": "https://github.com/zester4/zilo-manager#readme",
97
97
  "engines": {
98
98
  "node": ">=20.0.0"
99
+ },
100
+ "allowScripts": {
101
+ "esbuild@0.28.1": true
99
102
  }
100
103
  }
@@ -1,160 +1,160 @@
1
- # Worker Support Playbook
2
-
3
- Use this guide when helping workers sign up, verify identity, find shifts, apply, clock in/out, message venues, update profile details, or get paid.
4
-
5
- ## Worker Journey
6
-
7
- 1. Sign up as a worker.
8
- 2. Complete worker setup: country, city, town, roles, experience, certifications, availability, phone.
9
- 3. Verify identity.
10
- 4. Add payout details.
11
- 5. Browse eligible shifts in their city.
12
- 6. Apply for shifts matching their roles and location.
13
- 7. If accepted, coordinate with the venue in Messages.
14
- 8. Clock in when the shift starts.
15
- 9. Clock out when the shift ends.
16
- 10. Wait for completion processing and payout.
17
-
18
- ## Common Worker Issues
19
-
20
- ### Worker Cannot See Shifts
21
-
22
- Check:
23
-
24
- - Worker country, city, and town are saved.
25
- - Shift is in the same city as the worker.
26
- - Worker has selected roles matching available shifts.
27
- - Shift status is open.
28
- - Shift is not standby-only unless needed.
29
- - Worker profile setup is completed.
30
-
31
- Explain:
32
-
33
- > ZiloShift shows workers shifts in their own city so they do not travel too far or apply for work they cannot realistically attend. Anyone in the same city should see shifts across towns in that city.
34
-
35
- Escalate if:
36
-
37
- - Same-city open shifts exist but do not show.
38
- - Role filters are wrong after profile updates.
39
- - The worker sees corrupted text or missing company names.
40
-
41
- ### Worker Wants To Verify Identity
42
-
43
- Ghanaian workers use the Ghana Card verification flow. Other countries use Didit verification.
44
-
45
- Check:
46
-
47
- - Worker country is correct.
48
- - Ghanaian workers should see Verify Now and be routed to Ghana verification.
49
- - Non-Ghanaian workers should be routed through Didit.
50
-
51
- Do not:
52
-
53
- - Ask for full ID numbers over chat.
54
- - Upload documents for the user.
55
- - Mark identity verified manually without admin review.
56
-
57
- ### Worker Is Ghanaian And Verification Fails
58
-
59
- Ask:
60
-
61
- - Did they scan the front and back of the Ghana Card?
62
- - Did the liveness camera show their face?
63
- - Does the name on the account match the name on the card?
64
- - Did they use a clear, well-lit card image?
65
-
66
- Explain:
67
-
68
- > Ghana verification checks the card data and compares it against the worker profile details. If the profile name does not match the card, verification may stop before sending details for Hubtel verification.
69
-
70
- Escalate if:
71
-
72
- - Camera is blank.
73
- - Front/back scan captures but verification never proceeds.
74
- - Hubtel returns a provider error.
75
- - User was verified but still sees pending.
76
-
77
- ### Worker Cannot Clock In
78
-
79
- Check:
80
-
81
- - Worker has been accepted for the shift.
82
- - Shift date/time has started or is close enough to start.
83
- - QR code clock-in is available from venue, or worker manual clock-in is enabled.
84
- - There is no existing active time entry.
85
-
86
- Explain:
87
-
88
- > Once clocked in, the shift should move to Active and remain active even if the worker leaves and returns to the page.
89
-
90
- Escalate if:
91
-
92
- - Worker clocked in successfully but the page later asks them to clock in again.
93
- - Duplicate time entries exist.
94
- - Clock-in works for QR but not manual, or vice versa.
95
-
96
- ### Worker Was Accepted But Did Not Receive SMS
97
-
98
- For Ghana workers, acceptance SMS should be sent through Hubtel.
99
-
100
- Check:
101
-
102
- - Worker country is GH.
103
- - Profile phone number is present and valid.
104
- - Phone can normalize to Ghana MSISDN format, for example `23324xxxxxxx`.
105
- - Shift acceptance event happened.
106
-
107
- Escalate if:
108
-
109
- - Phone is valid but no SMS log/campaign result exists.
110
- - Hubtel gateway returns 400, 401, 402, or 500.
111
-
112
- ### Worker Payout Issues
113
-
114
- Check:
115
-
116
- - Country and payout provider:
117
- - Ghana: Hubtel mobile money or bank.
118
- - Nigeria/Kenya/South Africa: Paystack.
119
- - India: Razorpay.
120
- - Other markets: Stripe.
121
- - Worker completed the shift.
122
- - Shift was processed by completion function.
123
- - Worker payout details are saved.
124
-
125
- Do not promise exact payout timing unless the payment status is confirmed.
126
-
127
- Escalate if:
128
-
129
- - Payment captured but payout not created.
130
- - Payout provider rejected account details.
131
- - Worker was paid the wrong amount.
132
- - Any fraud or duplicate-account concern exists.
133
-
134
- ## Worker Profile Support
135
-
136
- Workers can update:
137
-
138
- - Phone.
139
- - City/town.
140
- - Roles.
141
- - Experience.
142
- - Certifications and certificate uploads.
143
- - Availability.
144
- - Payout details.
145
-
146
- Workers should not be able to update legal first/last name after signup without controlled support review, because name changes can weaken identity checks.
147
-
148
- ## Worker Tone Guide
149
-
150
- Use clear, supportive language:
151
-
152
- > I can help with that. First I’ll check your account country, city, and role settings, because those decide which shifts appear for you.
153
-
154
- Avoid:
155
-
156
- > It should work.
157
-
158
- Better:
159
-
1
+ # Worker Support Playbook
2
+
3
+ Use this guide when helping workers sign up, verify identity, find shifts, apply, clock in/out, message venues, update profile details, or get paid.
4
+
5
+ ## Worker Journey
6
+
7
+ 1. Sign up as a worker.
8
+ 2. Complete worker setup: country, city, town, roles, experience, certifications, availability, phone.
9
+ 3. Verify identity.
10
+ 4. Add payout details.
11
+ 5. Browse eligible shifts in their city.
12
+ 6. Apply for shifts matching their roles and location.
13
+ 7. If accepted, coordinate with the venue in Messages.
14
+ 8. Clock in when the shift starts.
15
+ 9. Clock out when the shift ends.
16
+ 10. Wait for completion processing and payout.
17
+
18
+ ## Common Worker Issues
19
+
20
+ ### Worker Cannot See Shifts
21
+
22
+ Check:
23
+
24
+ - Worker country, city, and town are saved.
25
+ - Shift is in the same city as the worker.
26
+ - Worker has selected roles matching available shifts.
27
+ - Shift status is open.
28
+ - Shift is not standby-only unless needed.
29
+ - Worker profile setup is completed.
30
+
31
+ Explain:
32
+
33
+ > ZiloShift shows workers shifts in their own city so they do not travel too far or apply for work they cannot realistically attend. Anyone in the same city should see shifts across towns in that city.
34
+
35
+ Escalate if:
36
+
37
+ - Same-city open shifts exist but do not show.
38
+ - Role filters are wrong after profile updates.
39
+ - The worker sees corrupted text or missing company names.
40
+
41
+ ### Worker Wants To Verify Identity
42
+
43
+ Ghanaian workers use the Ghana Card verification flow. Other countries use Didit verification.
44
+
45
+ Check:
46
+
47
+ - Worker country is correct.
48
+ - Ghanaian workers should see Verify Now and be routed to Ghana verification.
49
+ - Non-Ghanaian workers should be routed through Didit.
50
+
51
+ Do not:
52
+
53
+ - Ask for full ID numbers over chat.
54
+ - Upload documents for the user.
55
+ - Mark identity verified manually without admin review.
56
+
57
+ ### Worker Is Ghanaian And Verification Fails
58
+
59
+ Ask:
60
+
61
+ - Did they scan the front and back of the Ghana Card?
62
+ - Did the liveness camera show their face?
63
+ - Does the name on the account match the name on the card?
64
+ - Did they use a clear, well-lit card image?
65
+
66
+ Explain:
67
+
68
+ > Ghana verification checks the card data and compares it against the worker profile details. If the profile name does not match the card, verification may stop before sending details for Hubtel verification.
69
+
70
+ Escalate if:
71
+
72
+ - Camera is blank.
73
+ - Front/back scan captures but verification never proceeds.
74
+ - Hubtel returns a provider error.
75
+ - User was verified but still sees pending.
76
+
77
+ ### Worker Cannot Clock In
78
+
79
+ Check:
80
+
81
+ - Worker has been accepted for the shift.
82
+ - Shift date/time has started or is close enough to start.
83
+ - QR code clock-in is available from venue, or worker manual clock-in is enabled.
84
+ - There is no existing active time entry.
85
+
86
+ Explain:
87
+
88
+ > Once clocked in, the shift should move to Active and remain active even if the worker leaves and returns to the page.
89
+
90
+ Escalate if:
91
+
92
+ - Worker clocked in successfully but the page later asks them to clock in again.
93
+ - Duplicate time entries exist.
94
+ - Clock-in works for QR but not manual, or vice versa.
95
+
96
+ ### Worker Was Accepted But Did Not Receive SMS
97
+
98
+ For Ghana workers, acceptance SMS should be sent through Hubtel.
99
+
100
+ Check:
101
+
102
+ - Worker country is GH.
103
+ - Profile phone number is present and valid.
104
+ - Phone can normalize to Ghana MSISDN format, for example `23324xxxxxxx`.
105
+ - Shift acceptance event happened.
106
+
107
+ Escalate if:
108
+
109
+ - Phone is valid but no SMS log/campaign result exists.
110
+ - Hubtel gateway returns 400, 401, 402, or 500.
111
+
112
+ ### Worker Payout Issues
113
+
114
+ Check:
115
+
116
+ - Country and payout provider:
117
+ - Ghana: Hubtel mobile money or bank.
118
+ - Nigeria/Kenya/South Africa: Paystack.
119
+ - India: Razorpay.
120
+ - Other markets: Stripe.
121
+ - Worker completed the shift.
122
+ - Shift was processed by completion function.
123
+ - Worker payout details are saved.
124
+
125
+ Do not promise exact payout timing unless the payment status is confirmed.
126
+
127
+ Escalate if:
128
+
129
+ - Payment captured but payout not created.
130
+ - Payout provider rejected account details.
131
+ - Worker was paid the wrong amount.
132
+ - Any fraud or duplicate-account concern exists.
133
+
134
+ ## Worker Profile Support
135
+
136
+ Workers can update:
137
+
138
+ - Phone.
139
+ - City/town.
140
+ - Roles.
141
+ - Experience.
142
+ - Certifications and certificate uploads.
143
+ - Availability.
144
+ - Payout details.
145
+
146
+ Workers should not be able to update legal first/last name after signup without controlled support review, because name changes can weaken identity checks.
147
+
148
+ ## Worker Tone Guide
149
+
150
+ Use clear, supportive language:
151
+
152
+ > I can help with that. First I’ll check your account country, city, and role settings, because those decide which shifts appear for you.
153
+
154
+ Avoid:
155
+
156
+ > It should work.
157
+
158
+ Better:
159
+
160
160
  > If your city and roles are saved correctly, same-city shifts should appear. If they do not, I’ll escalate it as a visibility bug.