zilmate 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/.env.example +14 -0
  2. package/README.md +146 -4
  3. package/dist/agents/automation-planner.agent.d.ts +103 -0
  4. package/dist/agents/automation-planner.agent.d.ts.map +1 -0
  5. package/dist/agents/automation-planner.agent.js +28 -0
  6. package/dist/agents/automation-planner.agent.js.map +1 -0
  7. package/dist/agents/chat.agent.d.ts +8 -0
  8. package/dist/agents/chat.agent.d.ts.map +1 -1
  9. package/dist/agents/chat.agent.js +5 -2
  10. package/dist/agents/chat.agent.js.map +1 -1
  11. package/dist/agents/developer-helper.agent.d.ts +94 -0
  12. package/dist/agents/developer-helper.agent.d.ts.map +1 -0
  13. package/dist/agents/developer-helper.agent.js +34 -0
  14. package/dist/agents/developer-helper.agent.js.map +1 -0
  15. package/dist/agents/docs-research.agent.d.ts +8 -0
  16. package/dist/agents/docs-research.agent.d.ts.map +1 -1
  17. package/dist/agents/docs-research.agent.js +5 -2
  18. package/dist/agents/docs-research.agent.js.map +1 -1
  19. package/dist/agents/image.agent.d.ts.map +1 -1
  20. package/dist/agents/image.agent.js +2 -1
  21. package/dist/agents/image.agent.js.map +1 -1
  22. package/dist/agents/manager.d.ts +36 -0
  23. package/dist/agents/manager.d.ts.map +1 -1
  24. package/dist/agents/manager.js +39 -1
  25. package/dist/agents/manager.js.map +1 -1
  26. package/dist/agents/personal-assistant.agent.d.ts +30 -0
  27. package/dist/agents/personal-assistant.agent.d.ts.map +1 -0
  28. package/dist/agents/personal-assistant.agent.js +25 -0
  29. package/dist/agents/personal-assistant.agent.js.map +1 -0
  30. package/dist/agents/post.agent.d.ts.map +1 -1
  31. package/dist/agents/post.agent.js +2 -1
  32. package/dist/agents/post.agent.js.map +1 -1
  33. package/dist/agents/quick-help.agent.d.ts +8 -0
  34. package/dist/agents/quick-help.agent.d.ts.map +1 -1
  35. package/dist/agents/quick-help.agent.js +5 -2
  36. package/dist/agents/quick-help.agent.js.map +1 -1
  37. package/dist/cli/apps.d.ts +16 -0
  38. package/dist/cli/apps.d.ts.map +1 -0
  39. package/dist/cli/apps.js +19 -0
  40. package/dist/cli/apps.js.map +1 -0
  41. package/dist/cli/confirm.d.ts.map +1 -1
  42. package/dist/cli/confirm.js +20 -2
  43. package/dist/cli/confirm.js.map +1 -1
  44. package/dist/cli/doctor.d.ts +12 -0
  45. package/dist/cli/doctor.d.ts.map +1 -1
  46. package/dist/cli/doctor.js +35 -1
  47. package/dist/cli/doctor.js.map +1 -1
  48. package/dist/cli/format.d.ts +5 -0
  49. package/dist/cli/format.d.ts.map +1 -1
  50. package/dist/cli/format.js +96 -0
  51. package/dist/cli/format.js.map +1 -1
  52. package/dist/cli/health.d.ts +3 -0
  53. package/dist/cli/health.d.ts.map +1 -0
  54. package/dist/cli/health.js +25 -0
  55. package/dist/cli/health.js.map +1 -0
  56. package/dist/cli/interactive.d.ts.map +1 -1
  57. package/dist/cli/interactive.js +33 -6
  58. package/dist/cli/interactive.js.map +1 -1
  59. package/dist/cli/jobs.d.ts +19 -0
  60. package/dist/cli/jobs.d.ts.map +1 -0
  61. package/dist/cli/jobs.js +68 -0
  62. package/dist/cli/jobs.js.map +1 -0
  63. package/dist/cli/memory.d.ts +3 -0
  64. package/dist/cli/memory.d.ts.map +1 -0
  65. package/dist/cli/memory.js +14 -0
  66. package/dist/cli/memory.js.map +1 -0
  67. package/dist/cli/menu.d.ts +3 -0
  68. package/dist/cli/menu.d.ts.map +1 -0
  69. package/dist/cli/menu.js +129 -0
  70. package/dist/cli/menu.js.map +1 -0
  71. package/dist/cli/setup.d.ts +12 -0
  72. package/dist/cli/setup.d.ts.map +1 -1
  73. package/dist/cli/setup.js +263 -11
  74. package/dist/cli/setup.js.map +1 -1
  75. package/dist/cli/triggers.d.ts.map +1 -1
  76. package/dist/cli/triggers.js +11 -0
  77. package/dist/cli/triggers.js.map +1 -1
  78. package/dist/cli/update.d.ts +8 -0
  79. package/dist/cli/update.d.ts.map +1 -0
  80. package/dist/cli/update.js +94 -0
  81. package/dist/cli/update.js.map +1 -0
  82. package/dist/cli/voice.d.ts +5 -0
  83. package/dist/cli/voice.d.ts.map +1 -0
  84. package/dist/cli/voice.js +58 -0
  85. package/dist/cli/voice.js.map +1 -0
  86. package/dist/cli/welcome.d.ts +2 -0
  87. package/dist/cli/welcome.d.ts.map +1 -0
  88. package/dist/cli/welcome.js +42 -0
  89. package/dist/cli/welcome.js.map +1 -0
  90. package/dist/config/env.d.ts +17 -0
  91. package/dist/config/env.d.ts.map +1 -1
  92. package/dist/config/env.js +26 -0
  93. package/dist/config/env.js.map +1 -1
  94. package/dist/index.js +335 -19
  95. package/dist/index.js.map +1 -1
  96. package/dist/jobs/qstash.d.ts +3 -0
  97. package/dist/jobs/qstash.d.ts.map +1 -0
  98. package/dist/jobs/qstash.js +37 -0
  99. package/dist/jobs/qstash.js.map +1 -0
  100. package/dist/jobs/runner.d.ts +14 -0
  101. package/dist/jobs/runner.d.ts.map +1 -0
  102. package/dist/jobs/runner.js +101 -0
  103. package/dist/jobs/runner.js.map +1 -0
  104. package/dist/jobs/schedule.d.ts +5 -0
  105. package/dist/jobs/schedule.d.ts.map +1 -0
  106. package/dist/jobs/schedule.js +72 -0
  107. package/dist/jobs/schedule.js.map +1 -0
  108. package/dist/jobs/store.d.ts +9 -0
  109. package/dist/jobs/store.d.ts.map +1 -0
  110. package/dist/jobs/store.js +133 -0
  111. package/dist/jobs/store.js.map +1 -0
  112. package/dist/jobs/types.d.ts +54 -0
  113. package/dist/jobs/types.d.ts.map +1 -0
  114. package/dist/jobs/types.js +2 -0
  115. package/dist/jobs/types.js.map +1 -0
  116. package/dist/jobs/workflows.d.ts +4 -0
  117. package/dist/jobs/workflows.d.ts.map +1 -0
  118. package/dist/jobs/workflows.js +50 -0
  119. package/dist/jobs/workflows.js.map +1 -0
  120. package/dist/safety/limits.js +2 -2
  121. package/dist/safety/limits.js.map +1 -1
  122. package/dist/server.d.ts +17 -0
  123. package/dist/server.d.ts.map +1 -1
  124. package/dist/server.js +23 -0
  125. package/dist/server.js.map +1 -1
  126. package/dist/tools/composio.tool.d.ts.map +1 -1
  127. package/dist/tools/composio.tool.js +21 -5
  128. package/dist/tools/composio.tool.js.map +1 -1
  129. package/dist/tools/jobs.tool.d.ts +22 -0
  130. package/dist/tools/jobs.tool.d.ts.map +1 -0
  131. package/dist/tools/jobs.tool.js +105 -0
  132. package/dist/tools/jobs.tool.js.map +1 -0
  133. package/dist/tools/time.tool.d.ts +11 -0
  134. package/dist/tools/time.tool.d.ts.map +1 -0
  135. package/dist/tools/time.tool.js +35 -0
  136. package/dist/tools/time.tool.js.map +1 -0
  137. package/dist/voice/deepgram.d.ts +29 -0
  138. package/dist/voice/deepgram.d.ts.map +1 -0
  139. package/dist/voice/deepgram.js +207 -0
  140. package/dist/voice/deepgram.js.map +1 -0
  141. package/dist/voice/types.d.ts +43 -0
  142. package/dist/voice/types.d.ts.map +1 -0
  143. package/dist/voice/types.js +2 -0
  144. package/dist/voice/types.js.map +1 -0
  145. package/package.json +6 -2
package/.env.example CHANGED
@@ -4,6 +4,20 @@ ZILMATE_USER_ID=
4
4
  TAVILY_API_KEY=
5
5
  UPSTASH_REDIS_REST_URL=
6
6
  UPSTASH_REDIS_REST_TOKEN=
7
+ ZILMATE_JOBS_ENABLED=false
8
+ UPSTASH_QSTASH_TOKEN=
9
+ ZILMATE_PUBLIC_JOB_WEBHOOK_URL=
10
+ ZILMATE_JOB_WEBHOOK_SECRET=
11
+ ZILMATE_TRIGGER_WORKFLOWS_ENABLED=false
12
+ DEEPGRAM_API_KEY=
13
+ ZILMATE_VOICE_ENABLED=false
14
+ ZILMATE_VOICE_MODE=agent
15
+ ZILMATE_VOICE_LISTEN_MODEL=flux-general-en
16
+ ZILMATE_VOICE_LISTEN_VERSION=v2
17
+ ZILMATE_VOICE_TTS_MODEL=aura-2-thalia-en
18
+ ZILMATE_VOICE_LANGUAGE=en
19
+ ZILMATE_VOICE_LANGUAGE_HINTS=
20
+ ZILMATE_VOICE_BARGE_IN=true
7
21
  ZILO_MANAGER_MODEL=minimax/minimax-m3
8
22
  ZILO_HELP_MODEL=alibaba/qwen3.7-plus
9
23
  ZILO_POST_MODEL=alibaba/qwen3.7-plus
package/README.md CHANGED
@@ -16,6 +16,15 @@ zilmate setup
16
16
  zilmate --help
17
17
  ```
18
18
 
19
+ Running `zilmate` with no arguments opens the status dashboard and then the guided launcher menu. If the AI Gateway key is missing, the launcher offers setup before starting chat.
20
+
21
+ When a new CLI/SDK release is published, users can update without remembering npm commands:
22
+
23
+ ```powershell
24
+ zilmate update
25
+ zilmate version
26
+ ```
27
+
19
28
  ### GitHub/private install
20
29
 
21
30
  Before npm publishing, install directly from the GitHub repo:
@@ -37,8 +46,8 @@ iwr https://raw.githubusercontent.com/zester4/zilo-manager/main/install.ps1 | ie
37
46
  The installer runs the full first-use flow:
38
47
 
39
48
  1. Installs ZilMate globally.
40
- 2. Runs `zilmate setup` to collect `AI_GATEWAY_API_KEY`, optional `COMPOSIO_API_KEY`, optional `TAVILY_API_KEY`, and optional Redis keys.
41
- 3. Lets users skip Composio, Tavily, and Redis keys.
49
+ 2. Runs `zilmate setup` to collect `AI_GATEWAY_API_KEY`.
50
+ 3. Lets users skip optional Composio, Tavily, Redis, background jobs, QStash, and trigger workflows.
42
51
  4. Runs `zilmate ping` to verify the key.
43
52
  5. Starts `zilmate talk`.
44
53
 
@@ -78,7 +87,42 @@ The easiest path is:
78
87
  zilmate setup
79
88
  ```
80
89
 
81
- It asks for `AI_GATEWAY_API_KEY`, optionally asks for `COMPOSIO_API_KEY`, `TAVILY_API_KEY`, and Upstash Redis keys, then writes a local `.env`. Composio, Tavily, and Redis can be skipped.
90
+ Before asking for secrets, setup shows what to have ready:
91
+
92
+ - Required: AI Gateway key.
93
+ - Optional app tools: Composio key.
94
+ - Optional web research: Tavily key.
95
+ - Optional cloud memory/jobs: Upstash Redis URL and token.
96
+ - Optional hosted schedules: QStash token and public webhook URL.
97
+ - Optional realtime voice: Deepgram key.
98
+
99
+ Then it asks for `AI_GATEWAY_API_KEY` and guides users through optional features:
100
+
101
+ - Composio external app tools.
102
+ - Tavily web research.
103
+ - Upstash Redis memory/job storage.
104
+ - Local background jobs and schedules.
105
+ - Upstash QStash hosted schedules.
106
+ - Composio trigger-to-job workflows.
107
+ - Deepgram realtime voice mode.
108
+
109
+ Every optional feature can be skipped. If users only want chat, they only need the AI Gateway key.
110
+
111
+ Voice can be managed without opening `.env`:
112
+
113
+ ```powershell
114
+ zilmate voice setup
115
+ zilmate voice enable
116
+ zilmate voice disable
117
+ zilmate voice doctor
118
+ ```
119
+
120
+ Inside `zilmate talk`, use `/voice` to switch the current chat session into voice-style mode and `/voice -q` to stop it:
121
+
122
+ ```text
123
+ /voice
124
+ /voice -q
125
+ ```
82
126
 
83
127
  You can also create `.env` manually:
84
128
 
@@ -89,6 +133,20 @@ ZILMATE_USER_ID=zilmate-generated-local-user-id
89
133
  TAVILY_API_KEY=your_tavily_key
90
134
  UPSTASH_REDIS_REST_URL=
91
135
  UPSTASH_REDIS_REST_TOKEN=
136
+ ZILMATE_JOBS_ENABLED=false
137
+ UPSTASH_QSTASH_TOKEN=
138
+ ZILMATE_PUBLIC_JOB_WEBHOOK_URL=
139
+ ZILMATE_JOB_WEBHOOK_SECRET=
140
+ ZILMATE_TRIGGER_WORKFLOWS_ENABLED=false
141
+ DEEPGRAM_API_KEY=
142
+ ZILMATE_VOICE_ENABLED=false
143
+ ZILMATE_VOICE_MODE=agent
144
+ ZILMATE_VOICE_LISTEN_MODEL=flux-general-en
145
+ ZILMATE_VOICE_LISTEN_VERSION=v2
146
+ ZILMATE_VOICE_TTS_MODEL=aura-2-thalia-en
147
+ ZILMATE_VOICE_LANGUAGE=en
148
+ ZILMATE_VOICE_LANGUAGE_HINTS=
149
+ ZILMATE_VOICE_BARGE_IN=true
92
150
  ZILO_MANAGER_MODEL=minimax/minimax-m3
93
151
  ZILO_HELP_MODEL=alibaba/qwen3.7-plus
94
152
  ZILO_POST_MODEL=alibaba/qwen3.7-plus
@@ -102,6 +160,21 @@ Composio is optional. If `COMPOSIO_API_KEY` is set, ZilMate creates a stable loc
102
160
 
103
161
  Redis is optional. If `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` are set, chat turns, scratchpads, and Composio session ids use Redis. If they are missing, ZilMate falls back to local files under `.zilo-manager/`.
104
162
 
163
+ Background jobs are optional. Setup explains the difference between local jobs and hosted schedules. Local jobs and local schedules run while `zilmate jobs worker` is running. They do not keep running after a laptop sleeps, shuts down, or loses internet. For hosted schedules that can fire while the local machine is closed, configure QStash plus a public job webhook URL.
164
+
165
+ Realtime voice is optional. If `DEEPGRAM_API_KEY` and `ZILMATE_VOICE_ENABLED=true` are set, ZilMate can open Deepgram Voice Agent sessions. The default listen model is `flux-general-en` with `v2` because Flux is designed for low-latency voice agents and model-integrated end-of-turn detection. The default spoken voice is `aura-2-thalia-en`. Browser voice should use platform echo cancellation through `getUserMedia`; terminal microphone capture needs a local audio adapter.
166
+
167
+ Use `zilmate voice setup` for a focused voice-only wizard. Use `zilmate voice enable` and `zilmate voice disable` to toggle voice later without editing config files.
168
+
169
+ For unattended setup or installers, pass the options directly:
170
+
171
+ ```powershell
172
+ zilmate setup --yes --ai-gateway-key <key> --jobs-enabled true
173
+ zilmate setup --yes --ai-gateway-key <key> --composio-key <key> --trigger-workflows-enabled true
174
+ zilmate setup --yes --ai-gateway-key <key> --qstash-token <token> --job-webhook-url https://example.com/api/zilmate/jobs
175
+ zilmate setup --yes --ai-gateway-key <key> --voice-enabled true --deepgram-key <key>
176
+ ```
177
+
105
178
  ## Development Commands
106
179
 
107
180
  Use these while working inside the project folder:
@@ -117,6 +190,14 @@ npm run zilmate -- apps status
117
190
  npm run zilmate -- triggers listen
118
191
  npm run zilmate -- triggers types github
119
192
  npm run zilmate -- triggers list
193
+ npm run zilmate -- jobs create "Research today's priority updates and summarize them"
194
+ npm run zilmate -- jobs list
195
+ npm run zilmate -- jobs worker --once
196
+ npm run zilmate -- voice doctor
197
+ npm run zilmate -- voice setup
198
+ npm run zilmate -- voice disable
199
+ npm run zilmate -- voice enable
200
+ npm run zilmate -- voice turn "What should I focus on today?"
120
201
  npm run zilmate -- remember "Prefers concise support replies"
121
202
  npm run zilmate -- recall support
122
203
  npm run zilmate -- memory list
@@ -152,6 +233,8 @@ Then use ZilMate directly:
152
233
  zilmate --help
153
234
  zilmate setup
154
235
  zilmate doctor
236
+ zilmate update
237
+ zilmate version
155
238
  zilmate env check
156
239
  zilmate config
157
240
  zilmate talk
@@ -163,6 +246,21 @@ zilmate triggers types github
163
246
  zilmate triggers create GITHUB_BRANCH_CREATED_TRIGGER --dry-run --owner zester4 --repo zilo-manager
164
247
  zilmate triggers create GITHUB_COMMIT_EVENT --owner zester4 --repo zilo-manager
165
248
  zilmate triggers list
249
+ zilmate jobs create "Research today's priority updates and summarize them"
250
+ zilmate jobs create "Prepare my weekday morning briefing" --schedule "daily"
251
+ zilmate jobs list
252
+ zilmate jobs status job_xxx
253
+ zilmate jobs logs job_xxx
254
+ zilmate jobs run job_xxx
255
+ zilmate jobs worker
256
+ zilmate jobs cancel job_xxx
257
+ zilmate voice doctor
258
+ zilmate voice config
259
+ zilmate voice setup
260
+ zilmate voice disable
261
+ zilmate voice enable
262
+ zilmate voice turn "Plan my next two hours"
263
+ zilmate voice agent-probe
166
264
  zilmate remember "Use a warm but concise support tone"
167
265
  zilmate recall support
168
266
  zilmate memory list
@@ -213,6 +311,8 @@ Available SDK methods:
213
311
  - `research({ query | message })`: local docs and web research.
214
312
  - `image({ prompt, provider, size, outputDir })`: image generation.
215
313
  - `remember({ text, tags })`, `recall({ query, limit })`, `listMemories()`, `forget(id)`, `clearMemories()`: durable memory helpers.
314
+ - `createJob({ task, schedule, source, metadata })`, `listJobs({ status, limit })`, `getJob(id)`, `getJobLogs(id)`, `runJob(id)`, `runDueJobs()`, `handleJobWebhook({ jobId, secret }, expectedSecret)`, `cancelJob(id)`: background job and hosted webhook helpers.
315
+ - `getVoiceConfig()`, `startVoiceSession({ audio, onEvent, sessionId })`: Deepgram realtime voice configuration and Agent API session helpers.
216
316
 
217
317
  For UI integrations, pass `onProgress` to render agent/tool progress and `confirm` to approve or block external write-like Composio actions.
218
318
 
@@ -233,6 +333,13 @@ For UI integrations, pass `onProgress` to render agent/tool progress and `confir
233
333
  - `triggers info <trigger>`: show trigger config and payload schemas.
234
334
  - `triggers create <trigger> --flag value`: create a trigger instance; unknown flags become trigger config.
235
335
  - `triggers list`: list trigger instances.
336
+ - `jobs create "<task>"`: queue a background job, optionally with `--schedule "daily"` or `--schedule "every 15 minutes"`.
337
+ - `jobs list`: list queued/running/completed jobs.
338
+ - `jobs status <id>`: inspect one job.
339
+ - `jobs logs <id>`: inspect job progress, output, and errors.
340
+ - `jobs run <id>`: run a queued job immediately.
341
+ - `jobs worker`: run the local job processor and local scheduler.
342
+ - `jobs cancel <id>`: cancel one job.
236
343
  - `help`: fast troubleshooting and app guidance.
237
344
  - `chat`: one-shot natural dialogue about ZiloShift workflows.
238
345
  - `post`: WhatsApp/status/social copy generation.
@@ -251,8 +358,12 @@ ZilMate uses a manager agent that delegates to focused subagents and external to
251
358
  - Post: launch messages, WhatsApp statuses, captions, and outreach copy.
252
359
  - Research: local Zilo docs first, then external docs/web research when needed.
253
360
  - Image: image generation through Gateway image models.
361
+ - Automation Planner: background jobs, schedules, trigger workflows, QStash/webhook planning, monitoring, and follow-up automations.
362
+ - Personal Assistant: daily planning, reminders, briefings, prioritization, follow-ups, summaries, and memory-aware organization.
363
+ - Developer Helper: CLI/SDK usage, Next.js integration, publishing, QStash, Cloudflare tunnels, webhooks, Composio setup, and debugging.
254
364
  - Composio: external app discovery, auth links, schemas, and execution, attached only to the manager.
255
365
  - Memory: durable ZilMate facts and preferences saved locally or in Redis, available through CLI commands and manager tools.
366
+ - Jobs: background task creation, schedule setup, status checks, logs, and cancellation available through CLI, SDK, and manager tools.
256
367
 
257
368
  Local ZiloShift docs live under `src/doc/`. ZilMate reads them on demand through dedicated tools instead of dumping all docs into every prompt. The manager prefers these local docs for ZiloShift support, worker, venue, payment, verification, SMS, and dispute questions.
258
369
 
@@ -287,7 +398,7 @@ zilmate triggers listen --trigger ti_abc123
287
398
  zilmate triggers listen --trigger-slug GMAIL_NEW_EMAIL_EVENT --once
288
399
  ```
289
400
 
290
- This is terminal-local. For persistent public callbacks, use webhook/tunnel support later.
401
+ This is terminal-local. When `ZILMATE_TRIGGER_WORKFLOWS_ENABLED=true`, trigger events handled by `zilmate triggers listen` also create background jobs. ZilMate includes generic workflow prompts for Gmail, GitHub, Slack, and calendar-style events, and falls back to a general external-app summary task for other toolkits.
291
402
 
292
403
  The manager agent also has trigger tools. In `zilmate talk`, you can ask:
293
404
 
@@ -299,6 +410,37 @@ create that trigger
299
410
 
300
411
  ZilMate should discover current trigger slugs first, inspect the trigger schema, prefer a dry-run payload, and ask for confirmation before creating a real trigger.
301
412
 
413
+ ## Background Jobs And Schedules
414
+
415
+ Use jobs when ZilMate should keep working after a chat turn ends:
416
+
417
+ ```powershell
418
+ zilmate jobs create "Research AI assistant scheduling patterns and save a summary"
419
+ zilmate jobs create "Prepare my morning briefing" --schedule daily
420
+ zilmate jobs worker
421
+ ```
422
+
423
+ Local job storage uses `.zilo-manager/jobs.json` and `.zilo-manager/job-logs.json` unless Redis is configured. With Redis, jobs and logs use the same Upstash REST connection as memory.
424
+
425
+ Schedules supported locally include `hourly`, `daily`, `every 15 minutes`, `every 2 hours`, `every 1 day`, and ISO date/time strings. QStash schedules can use `cron:<expression>` when `UPSTASH_QSTASH_TOKEN` and `ZILMATE_PUBLIC_JOB_WEBHOOK_URL` are configured.
426
+
427
+ Hosted apps can expose a webhook route and call:
428
+
429
+ ```ts
430
+ import { createZilMate } from 'zilmate/server';
431
+
432
+ export async function POST(req: Request) {
433
+ const body = await req.json();
434
+ const zilmate = createZilMate();
435
+ const result = await zilmate.handleJobWebhook(
436
+ { jobId: body.jobId, secret: req.headers.get('ZilMate-Webhook-Secret') ?? undefined },
437
+ process.env.ZILMATE_JOB_WEBHOOK_SECRET,
438
+ );
439
+
440
+ return Response.json(result);
441
+ }
442
+ ```
443
+
302
444
  ## Model Notes
303
445
 
304
446
  - Manager/orchestration default: `minimax/minimax-m3`.
@@ -0,0 +1,103 @@
1
+ import { ToolLoopAgent } from 'ai';
2
+ export declare function createAutomationPlannerAgent(): ToolLoopAgent<never, {
3
+ appKnowledge: import("ai").Tool<{
4
+ key: "agent-docs" | "readme";
5
+ }, string>;
6
+ listTriggerTypes: import("ai").Tool<{
7
+ toolkit?: string | undefined;
8
+ limit?: number | undefined;
9
+ }, {
10
+ items: {
11
+ slug: string;
12
+ name: string;
13
+ description: string;
14
+ toolkit: {
15
+ slug: string;
16
+ name: string;
17
+ logo: string;
18
+ };
19
+ payload: Record<string, unknown>;
20
+ config: Record<string, unknown>;
21
+ version?: string | undefined;
22
+ instructions?: string | undefined;
23
+ }[];
24
+ totalPages: number;
25
+ nextCursor?: string | null | undefined;
26
+ }>;
27
+ showTriggerType: import("ai").Tool<{
28
+ triggerSlug: string;
29
+ }, {
30
+ slug: string;
31
+ name: string;
32
+ description: string;
33
+ toolkit: {
34
+ slug: string;
35
+ name: string;
36
+ logo: string;
37
+ };
38
+ payload: Record<string, unknown>;
39
+ config: Record<string, unknown>;
40
+ version?: string | undefined;
41
+ instructions?: string | undefined;
42
+ }>;
43
+ listTriggers: import("ai").Tool<{
44
+ limit?: number | undefined;
45
+ showDisabled?: boolean | undefined;
46
+ }, {
47
+ items: {
48
+ connectedAccountId: string;
49
+ id: string;
50
+ updatedAt: string;
51
+ disabledAt: string | null;
52
+ state: Record<string, unknown>;
53
+ triggerConfig: Record<string, unknown>;
54
+ triggerName: string;
55
+ uuid?: string | undefined;
56
+ triggerData?: string | undefined;
57
+ }[];
58
+ nextCursor: string | null;
59
+ totalPages: number;
60
+ }>;
61
+ createTrigger: import("ai").Tool<{
62
+ triggerSlug: string;
63
+ triggerConfig?: Record<string, unknown> | undefined;
64
+ connectedAccountId?: string | undefined;
65
+ dryRun?: boolean | undefined;
66
+ }, {
67
+ triggerId: string;
68
+ } | {
69
+ triggerConfig?: Record<string, unknown>;
70
+ connectedAccountId?: string;
71
+ userId: string;
72
+ triggerSlug: string;
73
+ dryRun: boolean;
74
+ }>;
75
+ createJob: import("ai").Tool<{
76
+ task: string;
77
+ schedule?: string | undefined;
78
+ runAt?: string | undefined;
79
+ metadata?: Record<string, unknown> | undefined;
80
+ }, import("../server.js").ZilMateJob>;
81
+ listJobs: import("ai").Tool<{
82
+ status?: "running" | "failed" | "queued" | "succeeded" | "cancelled" | undefined;
83
+ limit?: number | undefined;
84
+ }, import("../server.js").ZilMateJob[]>;
85
+ showJob: import("ai").Tool<{
86
+ id: string;
87
+ }, import("../server.js").ZilMateJob | null>;
88
+ listJobLogs: import("ai").Tool<{
89
+ id: string;
90
+ }, import("../server.js").JobLog[]>;
91
+ cancelJob: import("ai").Tool<{
92
+ id: string;
93
+ }, import("../server.js").ZilMateJob | null>;
94
+ getCurrentTime: import("ai").Tool<{
95
+ timeZone?: string | undefined;
96
+ }, {
97
+ iso: string;
98
+ unixMs: number;
99
+ timeZone: string;
100
+ formatted: string;
101
+ }>;
102
+ }, never>;
103
+ //# sourceMappingURL=automation-planner.agent.d.ts.map
@@ -0,0 +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;AAQhD,wBAAgB,4BAA4B;;;;;;;;;;;;;;;;;;;mBAoBw7zG,CAAC;wBAAsC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAAz2S,CAAC;uBAAqC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UADzshG"}
@@ -0,0 +1,28 @@
1
+ import { stepCountIs, ToolLoopAgent } from 'ai';
2
+ import { models } from '../config/models.js';
3
+ import { appKnowledgeTool } from '../tools/app-knowledge.tool.js';
4
+ import { jobTools } from '../tools/jobs.tool.js';
5
+ import { timeTools } from '../tools/time.tool.js';
6
+ import { triggerTools } from '../tools/triggers.tool.js';
7
+ import { limits } from '../safety/limits.js';
8
+ export function createAutomationPlannerAgent() {
9
+ return new ToolLoopAgent({
10
+ model: models.manager,
11
+ instructions: [
12
+ 'You are ZilMate Automation Planner. Design practical automations, schedules, background jobs, trigger workflows, and follow-up flows.',
13
+ 'Use time tools for current date/time and schedule-relative wording.',
14
+ 'Use job tools to inspect existing jobs and logs. Create or cancel jobs only when the user clearly asks and approval is available through the manager.',
15
+ 'Use trigger tools to discover Composio trigger types, inspect schemas, and reason about trigger setup. Prefer dry-run thinking before real creation.',
16
+ 'Explain local worker limits clearly: local jobs need `zilmate jobs worker`; laptop-closed automation needs QStash plus a public job webhook.',
17
+ 'Return concise plans with exact commands or setup steps when useful.',
18
+ ].join(' '),
19
+ tools: {
20
+ ...timeTools,
21
+ ...jobTools,
22
+ ...triggerTools,
23
+ appKnowledge: appKnowledgeTool,
24
+ },
25
+ stopWhen: stepCountIs(limits.subagentSteps),
26
+ });
27
+ }
28
+ //# sourceMappingURL=automation-planner.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"automation-planner.agent.js","sourceRoot":"","sources":["../../src/agents/automation-planner.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,UAAU,4BAA4B;IAC1C,OAAO,IAAI,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,OAAO;QACrB,YAAY,EAAE;YACZ,uIAAuI;YACvI,qEAAqE;YACrE,uJAAuJ;YACvJ,sJAAsJ;YACtJ,8IAA8I;YAC9I,sEAAsE;SACvE,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,KAAK,EAAE;YACL,GAAG,SAAS;YACZ,GAAG,QAAQ;YACX,GAAG,YAAY;YACf,YAAY,EAAE,gBAAgB;SAC/B;QACD,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC"}
@@ -3,6 +3,14 @@ export declare function createChatAgent(): ToolLoopAgent<never, {
3
3
  appKnowledge: import("ai").Tool<{
4
4
  key: "agent-docs" | "readme";
5
5
  }, string>;
6
+ getCurrentTime: import("ai").Tool<{
7
+ timeZone?: string | undefined;
8
+ }, {
9
+ iso: string;
10
+ unixMs: number;
11
+ timeZone: string;
12
+ formatted: string;
13
+ }>;
6
14
  listZiloDocs: import("ai").Tool<Record<string, never>, {
7
15
  key: string;
8
16
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"chat.agent.d.ts","sourceRoot":"","sources":["../../src/agents/chat.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAKhD,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;UAU9B"}
1
+ {"version":3,"file":"chat.agent.d.ts","sourceRoot":"","sources":["../../src/agents/chat.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAOhD,wBAAgB,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAW9B"}
@@ -2,15 +2,18 @@ import { stepCountIs, ToolLoopAgent } from 'ai';
2
2
  import { models } from '../config/models.js';
3
3
  import { appKnowledgeTool } from '../tools/app-knowledge.tool.js';
4
4
  import { ziloDocsTools } from '../tools/zilo-docs.tool.js';
5
+ import { timeTools } from '../tools/time.tool.js';
6
+ import { limits } from '../safety/limits.js';
5
7
  export function createChatAgent() {
6
8
  return new ToolLoopAgent({
7
9
  model: models.chat,
8
- instructions: 'You are the ZiloShift conversational app guide. Explain workflows for workers, venues, admin operations, payments, disputes, shifts, onboarding, and launch tasks in a calm practical tone. Use local ZiloShift docs on demand for accurate product behavior instead of guessing. Keep answers practical and do not dump long docs into the response.',
10
+ instructions: 'You are the ZiloShift conversational app guide. Explain workflows for workers, venues, admin operations, payments, disputes, shifts, onboarding, and launch tasks in a calm practical tone. Use local ZiloShift docs on demand for accurate product behavior instead of guessing. Use getCurrentTime when the user asks for current date/time or relative schedule wording. Keep answers practical and do not dump long docs into the response.',
9
11
  tools: {
10
12
  ...ziloDocsTools,
13
+ ...timeTools,
11
14
  appKnowledge: appKnowledgeTool,
12
15
  },
13
- stopWhen: stepCountIs(6),
16
+ stopWhen: stepCountIs(limits.subagentSteps),
14
17
  });
15
18
  }
16
19
  //# sourceMappingURL=chat.agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.agent.js","sourceRoot":"","sources":["../../src/agents/chat.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,IAAI;QAClB,YAAY,EAAE,uVAAuV;QACrW,KAAK,EAAE;YACL,GAAG,aAAa;YAChB,YAAY,EAAE,gBAAgB;SAC/B;QACD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"chat.agent.js","sourceRoot":"","sources":["../../src/agents/chat.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,IAAI;QAClB,YAAY,EAAE,ibAAib;QAC/b,KAAK,EAAE;YACL,GAAG,aAAa;YAChB,GAAG,SAAS;YACZ,YAAY,EAAE,gBAAgB;SAC/B;QACD,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,94 @@
1
+ import { ToolLoopAgent } from 'ai';
2
+ export declare function createDeveloperHelperAgent(runId?: string): ToolLoopAgent<never, {
3
+ readScratchpad: import("ai").Tool<Record<string, never>, string>;
4
+ appendScratchpad: import("ai").Tool<{
5
+ note: string;
6
+ }, string>;
7
+ docsSearch: import("ai").Tool<{
8
+ query: string;
9
+ }, import("../tools/web-search.tool.js").WebSearchResult[]>;
10
+ docsFetch: import("ai").Tool<{
11
+ url: string;
12
+ }, string>;
13
+ webSearch: import("ai").Tool<{
14
+ query: string;
15
+ maxResults?: number | undefined;
16
+ searchDepth?: "basic" | "advanced" | undefined;
17
+ includeAnswer?: boolean | undefined;
18
+ includeRawContent?: "text" | "markdown" | undefined;
19
+ includeDomains?: string[] | undefined;
20
+ excludeDomains?: string[] | undefined;
21
+ topic?: "general" | "news" | "finance" | undefined;
22
+ timeRange?: "day" | "week" | "month" | "year" | undefined;
23
+ }, {
24
+ answer: string | undefined;
25
+ results: {
26
+ title: string;
27
+ url: string;
28
+ content: string;
29
+ rawContent: string | undefined;
30
+ score: number | undefined;
31
+ publishedDate: string | undefined;
32
+ }[];
33
+ }>;
34
+ webExtract: import("ai").Tool<{
35
+ urls: string[];
36
+ query?: string | undefined;
37
+ extractDepth?: "basic" | "advanced" | undefined;
38
+ format?: "text" | "markdown" | undefined;
39
+ chunksPerSource?: number | undefined;
40
+ }, {
41
+ results: {
42
+ url: string;
43
+ title: string;
44
+ rawContent: string;
45
+ }[];
46
+ failedResults: {
47
+ url: string;
48
+ error: string;
49
+ }[];
50
+ }>;
51
+ webMap: import("ai").Tool<{
52
+ url: string;
53
+ instructions?: string | undefined;
54
+ maxDepth?: number | undefined;
55
+ limit?: number | undefined;
56
+ allowExternal?: boolean | undefined;
57
+ }, {
58
+ baseUrl: string;
59
+ results: string[];
60
+ }>;
61
+ deepResearch: import("ai").Tool<{
62
+ input: string;
63
+ model?: "mini" | "pro" | undefined;
64
+ timeoutSeconds?: number | undefined;
65
+ pollIntervalSeconds?: number | undefined;
66
+ }, {
67
+ requestId: string;
68
+ status: string;
69
+ content: string;
70
+ sources: {
71
+ title: string;
72
+ url: string;
73
+ }[];
74
+ message?: never;
75
+ } | {
76
+ requestId: string;
77
+ status: string;
78
+ message: string;
79
+ content?: never;
80
+ sources?: never;
81
+ }>;
82
+ appKnowledge: import("ai").Tool<{
83
+ key: "agent-docs" | "readme";
84
+ }, string>;
85
+ getCurrentTime: import("ai").Tool<{
86
+ timeZone?: string | undefined;
87
+ }, {
88
+ iso: string;
89
+ unixMs: number;
90
+ timeZone: string;
91
+ formatted: string;
92
+ }>;
93
+ }, never>;
94
+ //# sourceMappingURL=developer-helper.agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developer-helper.agent.d.ts","sourceRoot":"","sources":["../../src/agents/developer-helper.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAUhD,wBAAgB,0BAA0B,CAAC,KAAK,SAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAuB3D"}
@@ -0,0 +1,34 @@
1
+ import { stepCountIs, ToolLoopAgent } from 'ai';
2
+ import { models } from '../config/models.js';
3
+ import { appKnowledgeTool } from '../tools/app-knowledge.tool.js';
4
+ import { docsFetchTool } from '../tools/docs-fetch.tool.js';
5
+ import { docsSearchTool } from '../tools/docs-search.tool.js';
6
+ import { createScratchpadTools } from '../tools/scratchpad.tool.js';
7
+ import { timeTools } from '../tools/time.tool.js';
8
+ import { deepResearchTool, webExtractTool, webMapTool, webSearchTool } from '../tools/web-search.tool.js';
9
+ import { limits } from '../safety/limits.js';
10
+ export function createDeveloperHelperAgent(runId = 'default') {
11
+ const scratchpadTools = createScratchpadTools(runId);
12
+ return new ToolLoopAgent({
13
+ model: models.research,
14
+ instructions: [
15
+ 'You are ZilMate Developer Helper. Help developers integrate ZilMate through the CLI, SDK, Next.js server routes, background jobs, QStash webhooks, Cloudflare tunnels, Composio, package publishing, and troubleshooting.',
16
+ 'Prefer local app/package knowledge first. For external technical facts, prefer official docs and primary sources.',
17
+ 'Use time tools for current versions, release timing, date-sensitive debugging, or schedule-relative wording.',
18
+ 'Return exact commands, minimal code snippets, and clear verification steps. Do not invent credentials or claim external setup succeeded without tool evidence.',
19
+ ].join(' '),
20
+ tools: {
21
+ ...timeTools,
22
+ docsSearch: docsSearchTool,
23
+ docsFetch: docsFetchTool,
24
+ webSearch: webSearchTool,
25
+ webExtract: webExtractTool,
26
+ webMap: webMapTool,
27
+ deepResearch: deepResearchTool,
28
+ appKnowledge: appKnowledgeTool,
29
+ ...scratchpadTools,
30
+ },
31
+ stopWhen: stepCountIs(limits.subagentSteps),
32
+ });
33
+ }
34
+ //# sourceMappingURL=developer-helper.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developer-helper.agent.js","sourceRoot":"","sources":["../../src/agents/developer-helper.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,UAAU,0BAA0B,CAAC,KAAK,GAAG,SAAS;IAC1D,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,IAAI,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,QAAQ;QACtB,YAAY,EAAE;YACZ,2NAA2N;YAC3N,mHAAmH;YACnH,8GAA8G;YAC9G,gKAAgK;SACjK,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,KAAK,EAAE;YACL,GAAG,SAAS;YACZ,UAAU,EAAE,cAAc;YAC1B,SAAS,EAAE,aAAa;YACxB,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,cAAc;YAC1B,MAAM,EAAE,UAAU;YAClB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,gBAAgB;YAC9B,GAAG,eAAe;SACnB;QACD,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC"}
@@ -100,6 +100,14 @@ export declare function createDocsResearchAgent(runId?: string): ToolLoopAgent<n
100
100
  appKnowledge: import("ai").Tool<{
101
101
  key: "agent-docs" | "readme";
102
102
  }, string>;
103
+ getCurrentTime: import("ai").Tool<{
104
+ timeZone?: string | undefined;
105
+ }, {
106
+ iso: string;
107
+ unixMs: number;
108
+ timeZone: string;
109
+ formatted: string;
110
+ }>;
103
111
  listZiloDocs: import("ai").Tool<Record<string, never>, {
104
112
  key: string;
105
113
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"docs-research.agent.d.ts","sourceRoot":"","sources":["../../src/agents/docs-research.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAShD,wBAAgB,uBAAuB,CAAC,KAAK,SAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAmBxD"}
1
+ {"version":3,"file":"docs-research.agent.d.ts","sourceRoot":"","sources":["../../src/agents/docs-research.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAWhD,wBAAgB,uBAAuB,CAAC,KAAK,SAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAoBxD"}
@@ -6,13 +6,16 @@ import { appKnowledgeTool } from '../tools/app-knowledge.tool.js';
6
6
  import { createScratchpadTools } from '../tools/scratchpad.tool.js';
7
7
  import { ziloDocsTools } from '../tools/zilo-docs.tool.js';
8
8
  import { deepResearchTool, webCrawlTool, webExtractTool, webMapTool, webSearchTool } from '../tools/web-search.tool.js';
9
+ import { timeTools } from '../tools/time.tool.js';
10
+ import { limits } from '../safety/limits.js';
9
11
  export function createDocsResearchAgent(runId = 'default') {
10
12
  const scratchpadTools = createScratchpadTools(runId);
11
13
  return new ToolLoopAgent({
12
14
  model: models.research,
13
- instructions: 'You are a focused docs research subagent. For ZiloShift product behavior, search/read local Zilo docs first. For external facts, prefer official or primary docs: search lightly, extract known URLs deeply, map before crawling, crawl only small docs sections, and use deepResearch only for broad synthesis where the user clearly benefits from a heavier task. Return compact answers with source URLs. Use the scratchpad for compact intermediate notes only when research spans multiple sources.',
15
+ instructions: 'You are a focused docs research subagent. For ZiloShift product behavior, search/read local Zilo docs first. For external facts, prefer official or primary docs: search lightly, extract known URLs deeply, map before crawling, crawl only small docs sections, and use deepResearch only for broad synthesis where the user clearly benefits from a heavier task. Use getCurrentTime for current date/time or relative-date research framing. Return compact answers with source URLs. Use the scratchpad for compact intermediate notes only when research spans multiple sources.',
14
16
  tools: {
15
17
  ...ziloDocsTools,
18
+ ...timeTools,
16
19
  docsSearch: docsSearchTool,
17
20
  docsFetch: docsFetchTool,
18
21
  webSearch: webSearchTool,
@@ -23,7 +26,7 @@ export function createDocsResearchAgent(runId = 'default') {
23
26
  appKnowledge: appKnowledgeTool,
24
27
  ...scratchpadTools,
25
28
  },
26
- stopWhen: stepCountIs(8),
29
+ stopWhen: stepCountIs(limits.subagentSteps),
27
30
  });
28
31
  }
29
32
  //# sourceMappingURL=docs-research.agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docs-research.agent.js","sourceRoot":"","sources":["../../src/agents/docs-research.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAExH,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,SAAS;IACvD,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,IAAI,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,QAAQ;QACtB,YAAY,EAAE,4eAA4e;QAC1f,KAAK,EAAE;YACL,GAAG,aAAa;YAChB,UAAU,EAAE,cAAc;YAC1B,SAAS,EAAE,aAAa;YACxB,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,cAAc;YAC1B,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY;YACtB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,gBAAgB;YAC9B,GAAG,eAAe;SACnB;QACD,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"docs-research.agent.js","sourceRoot":"","sources":["../../src/agents/docs-research.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACxH,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,SAAS;IACvD,MAAM,eAAe,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACrD,OAAO,IAAI,aAAa,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,QAAQ;QACtB,YAAY,EAAE,wjBAAwjB;QACtkB,KAAK,EAAE;YACL,GAAG,aAAa;YAChB,GAAG,SAAS;YACZ,UAAU,EAAE,cAAc;YAC1B,SAAS,EAAE,aAAa;YACxB,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,cAAc;YAC1B,MAAM,EAAE,UAAU;YAClB,QAAQ,EAAE,YAAY;YACtB,YAAY,EAAE,gBAAgB;YAC9B,YAAY,EAAE,gBAAgB;YAC9B,GAAG,eAAe;SACnB;QACD,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC;KAC5C,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"image.agent.d.ts","sourceRoot":"","sources":["../../src/agents/image.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAIhD,wBAAgB,gBAAgB;;;;;;UAO/B"}
1
+ {"version":3,"file":"image.agent.d.ts","sourceRoot":"","sources":["../../src/agents/image.agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,IAAI,CAAC;AAKhD,wBAAgB,gBAAgB;;;;;;UAO/B"}