zilmate 1.7.5 → 1.7.8
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.
- package/dist/cli/chat.d.ts +2 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +63 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/doctor.d.ts +8 -0
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +14 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/format.d.ts.map +1 -1
- package/dist/cli/format.js +30 -59
- package/dist/cli/format.js.map +1 -1
- package/dist/cli/interactive.js +4 -3
- package/dist/cli/interactive.js.map +1 -1
- package/dist/cli/menu.d.ts.map +1 -1
- package/dist/cli/menu.js +28 -5
- package/dist/cli/menu.js.map +1 -1
- package/dist/cli/models.d.ts +1 -1
- package/dist/cli/models.d.ts.map +1 -1
- package/dist/cli/models.js +21 -21
- package/dist/cli/models.js.map +1 -1
- package/dist/cli/prompt.d.ts +2 -2
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +58 -14
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/render.js +12 -13
- package/dist/cli/render.js.map +1 -1
- package/dist/cli/setup.d.ts +7 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +257 -410
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/theme.d.ts +63 -6
- package/dist/cli/theme.d.ts.map +1 -1
- package/dist/cli/theme.js +36 -10
- package/dist/cli/theme.js.map +1 -1
- package/dist/config/env.d.ts +7 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +9 -0
- package/dist/config/env.js.map +1 -1
- package/dist/config/model-store.d.ts +1 -1
- package/dist/config/model-store.d.ts.map +1 -1
- package/dist/config/model-store.js +14 -1
- package/dist/config/model-store.js.map +1 -1
- package/dist/config/models.d.ts +7 -0
- package/dist/config/models.d.ts.map +1 -1
- package/dist/config/models.js +30 -6
- package/dist/config/models.js.map +1 -1
- package/dist/documents/pdf.d.ts.map +1 -1
- package/dist/documents/pdf.js +143 -41
- package/dist/documents/pdf.js.map +1 -1
- package/dist/index.js +46 -3
- package/dist/index.js.map +1 -1
- package/dist/runtime/chat-bridge.d.ts +32 -0
- package/dist/runtime/chat-bridge.d.ts.map +1 -0
- package/dist/runtime/chat-bridge.js +89 -0
- package/dist/runtime/chat-bridge.js.map +1 -0
- package/dist/runtime/progress.d.ts.map +1 -1
- package/dist/runtime/progress.js +3 -1
- package/dist/runtime/progress.js.map +1 -1
- package/dist/runtime/swarm.d.ts +2 -1
- package/dist/runtime/swarm.d.ts.map +1 -1
- package/dist/runtime/swarm.js +22 -2
- package/dist/runtime/swarm.js.map +1 -1
- package/dist/tools/daytona-browser.tool.d.ts +113 -0
- package/dist/tools/daytona-browser.tool.d.ts.map +1 -0
- package/dist/tools/daytona-browser.tool.js +348 -0
- package/dist/tools/daytona-browser.tool.js.map +1 -0
- package/dist/tools/swarm-collaboration.tool.d.ts +29 -0
- package/dist/tools/swarm-collaboration.tool.d.ts.map +1 -0
- package/dist/tools/swarm-collaboration.tool.js +88 -0
- package/dist/tools/swarm-collaboration.tool.js.map +1 -0
- package/dist/tools/swarm-memory.tool.d.ts +16 -0
- package/dist/tools/swarm-memory.tool.d.ts.map +1 -0
- package/dist/tools/swarm-memory.tool.js +31 -0
- package/dist/tools/swarm-memory.tool.js.map +1 -0
- package/dist/tools/swarm-ops.tool.d.ts +20 -0
- package/dist/tools/swarm-ops.tool.d.ts.map +1 -0
- package/dist/tools/swarm-ops.tool.js +55 -0
- package/dist/tools/swarm-ops.tool.js.map +1 -0
- package/dist/tools/visual-audit.tool.d.ts +24 -0
- package/dist/tools/visual-audit.tool.d.ts.map +1 -0
- package/dist/tools/visual-audit.tool.js +48 -0
- package/dist/tools/visual-audit.tool.js.map +1 -0
- package/package.json +8 -1
- package/scripts/release-github.mjs +9 -12
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getWorkspaceRoot } from '../workspace/output-paths.js';
|
|
4
|
+
import { readFile, writeFile, mkdir } from 'node:fs/promises';
|
|
5
|
+
import path from 'node:path';
|
|
6
|
+
const CORPORATE_MEMORY_FILE = 'corporate-notebook.md';
|
|
7
|
+
const DEPARTMENTS_DIR = 'departments';
|
|
8
|
+
async function ensureMemoryDir() {
|
|
9
|
+
const root = getWorkspaceRoot();
|
|
10
|
+
const dir = path.join(root, 'swarm-memory');
|
|
11
|
+
await mkdir(dir, { recursive: true });
|
|
12
|
+
await mkdir(path.join(dir, DEPARTMENTS_DIR), { recursive: true });
|
|
13
|
+
return dir;
|
|
14
|
+
}
|
|
15
|
+
export const swarmCollaborationTools = {
|
|
16
|
+
delegateTask: tool({
|
|
17
|
+
description: 'Delegate a specific sub-task to another specialist agent. Use this for tasks outside your expertise or for cross-departmental collaboration.',
|
|
18
|
+
inputSchema: z.object({
|
|
19
|
+
targetAgent: z.string().describe('The name of the agent to delegate to (e.g., "fullStackCoder", "seoExpert").'),
|
|
20
|
+
task: z.string().describe('The specific instructions or request for the target agent.'),
|
|
21
|
+
priority: z.enum(['low', 'medium', 'high']).optional().default('medium'),
|
|
22
|
+
}),
|
|
23
|
+
execute: async ({ targetAgent, task, priority }) => {
|
|
24
|
+
return {
|
|
25
|
+
status: 'delegated',
|
|
26
|
+
targetAgent,
|
|
27
|
+
message: `Task delegated to ${targetAgent} with ${priority} priority.`,
|
|
28
|
+
instruction: `Please switch context to ${targetAgent} to complete: ${task}`
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
readCorporateContext: tool({
|
|
33
|
+
description: 'Read the global corporate notebook, including mission statements, strategic goals, and cross-departmental updates.',
|
|
34
|
+
inputSchema: z.object({}),
|
|
35
|
+
execute: async () => {
|
|
36
|
+
const dir = await ensureMemoryDir();
|
|
37
|
+
const filePath = path.join(dir, CORPORATE_MEMORY_FILE);
|
|
38
|
+
try {
|
|
39
|
+
const content = await readFile(filePath, 'utf-8');
|
|
40
|
+
return { content };
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
return { content: '# Corporate Notebook\n\nNo high-level strategy has been set yet. The CEO should initialize this.' };
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
updateCorporateContext: tool({
|
|
48
|
+
description: 'Update the global corporate notebook with new strategic goals or executive updates. Only for use by CEO and Department Heads.',
|
|
49
|
+
inputSchema: z.object({
|
|
50
|
+
content: z.string().describe('The new content to append or set in the corporate notebook.'),
|
|
51
|
+
mode: z.enum(['append', 'overwrite']).optional().default('append'),
|
|
52
|
+
}),
|
|
53
|
+
execute: async ({ content, mode }) => {
|
|
54
|
+
const dir = await ensureMemoryDir();
|
|
55
|
+
const filePath = path.join(dir, CORPORATE_MEMORY_FILE);
|
|
56
|
+
let newContent = content;
|
|
57
|
+
if (mode === 'append') {
|
|
58
|
+
try {
|
|
59
|
+
const existing = await readFile(filePath, 'utf-8');
|
|
60
|
+
newContent = `${existing}\n\n---\n## Update (${new Date().toISOString()})\n\n${content}`;
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
newContent = `# Corporate Notebook\n\n${content}`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
await writeFile(filePath, newContent);
|
|
67
|
+
return { status: 'success', message: 'Corporate context updated.' };
|
|
68
|
+
},
|
|
69
|
+
}),
|
|
70
|
+
accessDepartmentalMemory: tool({
|
|
71
|
+
description: 'Access the private memory and work logs for a specific department.',
|
|
72
|
+
inputSchema: z.object({
|
|
73
|
+
department: z.enum(['Strategy', 'Engineering', 'Growth', 'Operations', 'Data', 'Revenue', 'Security']),
|
|
74
|
+
}),
|
|
75
|
+
execute: async ({ department }) => {
|
|
76
|
+
const dir = await ensureMemoryDir();
|
|
77
|
+
const filePath = path.join(dir, DEPARTMENTS_DIR, `${department.toLowerCase()}.md`);
|
|
78
|
+
try {
|
|
79
|
+
const content = await readFile(filePath, 'utf-8');
|
|
80
|
+
return { department, content };
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
return { department, content: `No records found for ${department} department.` };
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=swarm-collaboration.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-collaboration.tool.js","sourceRoot":"","sources":["../../src/tools/swarm-collaboration.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const swarmMemoryTools: {
|
|
2
|
+
getSharedScratchpad: import("ai").Tool<{
|
|
3
|
+
sessionId?: string | undefined;
|
|
4
|
+
}, {
|
|
5
|
+
scope: string;
|
|
6
|
+
content: string;
|
|
7
|
+
}>;
|
|
8
|
+
appendSharedScratchpad: import("ai").Tool<{
|
|
9
|
+
content: string;
|
|
10
|
+
sessionId?: string | undefined;
|
|
11
|
+
}, {
|
|
12
|
+
status: string;
|
|
13
|
+
scope: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=swarm-memory.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-memory.tool.d.ts","sourceRoot":"","sources":["../../src/tools/swarm-memory.tool.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAyB5B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { readScratchpad, appendScratchpad } from '../memory/scratchpad.js';
|
|
4
|
+
import { emitProgress } from '../runtime/progress.js';
|
|
5
|
+
export const swarmMemoryTools = {
|
|
6
|
+
getSharedScratchpad: tool({
|
|
7
|
+
description: 'Read the shared swarm scratchpad for transient context. If you are a specialist, this is your departmental scratchpad. If you are the COO, you can access any departmental scratchpad by specifying sessionId (e.g. "default:engineering").',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
sessionId: z.string().optional().describe('The session or department scope (e.g., "default", "default:engineering"). Defaults to your current scope.'),
|
|
10
|
+
}),
|
|
11
|
+
execute: async ({ sessionId }) => {
|
|
12
|
+
const id = sessionId || 'default';
|
|
13
|
+
const content = await readScratchpad(id);
|
|
14
|
+
return { scope: id, content };
|
|
15
|
+
},
|
|
16
|
+
}),
|
|
17
|
+
appendSharedScratchpad: tool({
|
|
18
|
+
description: 'Append to the shared swarm scratchpad. Use to communicate transient state to other agents in your immediate department or swarm loop.',
|
|
19
|
+
inputSchema: z.object({
|
|
20
|
+
content: z.string().describe('The content to append to the scratchpad.'),
|
|
21
|
+
sessionId: z.string().optional().describe('The session or department scope. Defaults to your current scope.'),
|
|
22
|
+
}),
|
|
23
|
+
execute: async ({ content, sessionId }) => {
|
|
24
|
+
const id = sessionId || 'default';
|
|
25
|
+
emitProgress({ type: 'step', label: `Updating scratchpad [${id}]` });
|
|
26
|
+
await appendScratchpad(id, content);
|
|
27
|
+
return { status: 'Scratchpad updated', scope: id };
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=swarm-memory.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-memory.tool.js","sourceRoot":"","sources":["../../src/tools/swarm-memory.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB,EAAE,IAAI,CAAC;QACxB,WAAW,EAAE,6OAA6O;QAC1P,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2GAA2G,CAAC;SACvJ,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAC/B,MAAM,EAAE,GAAG,SAAS,IAAI,SAAS,CAAC;YAClC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC;KACF,CAAC;IACF,sBAAsB,EAAE,IAAI,CAAC;QAC3B,WAAW,EAAE,uIAAuI;QACpJ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;YACxE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;SAC9G,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;YACxC,MAAM,EAAE,GAAG,SAAS,IAAI,SAAS,CAAC;YAClC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC;YACrE,MAAM,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YACpC,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QACrD,CAAC;KACF,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare function getControlState(id: string): Promise<'RUNNING' | 'PAUSED'>;
|
|
2
|
+
export declare const swarmOpsTools: {
|
|
3
|
+
pauseDepartment: import("ai").Tool<{
|
|
4
|
+
department: "Strategy" | "Engineering" | "Growth" | "Operations" | "Data" | "Security" | "Revenue";
|
|
5
|
+
sessionId: string;
|
|
6
|
+
}, {
|
|
7
|
+
status: string;
|
|
8
|
+
department: "Strategy" | "Engineering" | "Growth" | "Operations" | "Data" | "Security" | "Revenue";
|
|
9
|
+
scope: string;
|
|
10
|
+
}>;
|
|
11
|
+
resumeDepartment: import("ai").Tool<{
|
|
12
|
+
department: "Strategy" | "Engineering" | "Growth" | "Operations" | "Data" | "Security" | "Revenue";
|
|
13
|
+
sessionId: string;
|
|
14
|
+
}, {
|
|
15
|
+
status: string;
|
|
16
|
+
department: "Strategy" | "Engineering" | "Growth" | "Operations" | "Data" | "Security" | "Revenue";
|
|
17
|
+
scope: string;
|
|
18
|
+
}>;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=swarm-ops.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-ops.tool.d.ts","sourceRoot":"","sources":["../../src/tools/swarm-ops.tool.ts"],"names":[],"mappings":"AAkBA,wBAAsB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAC,CAS/E;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CA2BzB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { emitProgress } from '../runtime/progress.js';
|
|
4
|
+
import { getRedis } from '../memory/redis.js';
|
|
5
|
+
import { readJson, writeJson } from '../memory/local-store.js';
|
|
6
|
+
async function setControlState(id, state) {
|
|
7
|
+
const redis = getRedis();
|
|
8
|
+
const key = `zilo-swarm:control:${id}`;
|
|
9
|
+
if (redis) {
|
|
10
|
+
await redis.set(key, state);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const data = await readJson('swarm-control.json', {});
|
|
14
|
+
data[id] = state;
|
|
15
|
+
await writeJson('swarm-control.json', data);
|
|
16
|
+
}
|
|
17
|
+
export async function getControlState(id) {
|
|
18
|
+
const redis = getRedis();
|
|
19
|
+
const key = `zilo-swarm:control:${id}`;
|
|
20
|
+
if (redis) {
|
|
21
|
+
const val = await redis.get(key);
|
|
22
|
+
return val === 'PAUSED' ? 'PAUSED' : 'RUNNING';
|
|
23
|
+
}
|
|
24
|
+
const data = await readJson('swarm-control.json', {});
|
|
25
|
+
return data[id] === 'PAUSED' ? 'PAUSED' : 'RUNNING';
|
|
26
|
+
}
|
|
27
|
+
export const swarmOpsTools = {
|
|
28
|
+
pauseDepartment: tool({
|
|
29
|
+
description: 'Pause all execution for a specific department. Use when a project is on hold or requires human intervention.',
|
|
30
|
+
inputSchema: z.object({
|
|
31
|
+
department: z.enum(['Strategy', 'Engineering', 'Growth', 'Revenue', 'Operations', 'Security', 'Data']),
|
|
32
|
+
sessionId: z.string().optional().default('default'),
|
|
33
|
+
}),
|
|
34
|
+
execute: async ({ department, sessionId }) => {
|
|
35
|
+
const id = `${sessionId}:${department.toLowerCase()}`;
|
|
36
|
+
emitProgress({ type: 'step', label: `Pausing department: ${department}` });
|
|
37
|
+
await setControlState(id, 'PAUSED');
|
|
38
|
+
return { status: 'PAUSED', department, scope: id };
|
|
39
|
+
},
|
|
40
|
+
}),
|
|
41
|
+
resumeDepartment: tool({
|
|
42
|
+
description: 'Resume execution for a previously paused department.',
|
|
43
|
+
inputSchema: z.object({
|
|
44
|
+
department: z.enum(['Strategy', 'Engineering', 'Growth', 'Revenue', 'Operations', 'Security', 'Data']),
|
|
45
|
+
sessionId: z.string().optional().default('default'),
|
|
46
|
+
}),
|
|
47
|
+
execute: async ({ department, sessionId }) => {
|
|
48
|
+
const id = `${sessionId}:${department.toLowerCase()}`;
|
|
49
|
+
emitProgress({ type: 'step', label: `Resuming department: ${department}` });
|
|
50
|
+
await setControlState(id, 'RUNNING');
|
|
51
|
+
return { status: 'RUNNING', department, scope: id };
|
|
52
|
+
},
|
|
53
|
+
}),
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=swarm-ops.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-ops.tool.js","sourceRoot":"","sources":["../../src/tools/swarm-ops.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const visualAuditTools: {
|
|
2
|
+
visualBrowserAudit: import("ai").Tool<{
|
|
3
|
+
url: string;
|
|
4
|
+
viewport: "mobile" | "tablet" | "desktop";
|
|
5
|
+
focus?: string | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
url: string;
|
|
8
|
+
viewport: "mobile" | "tablet" | "desktop";
|
|
9
|
+
focus: string;
|
|
10
|
+
screenshotPath: any;
|
|
11
|
+
nextSteps: string[];
|
|
12
|
+
visionHint: string;
|
|
13
|
+
error?: never;
|
|
14
|
+
} | {
|
|
15
|
+
error: string;
|
|
16
|
+
url?: never;
|
|
17
|
+
viewport?: never;
|
|
18
|
+
focus?: never;
|
|
19
|
+
screenshotPath?: never;
|
|
20
|
+
nextSteps?: never;
|
|
21
|
+
visionHint?: never;
|
|
22
|
+
}>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=visual-audit.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-audit.tool.d.ts","sourceRoot":"","sources":["../../src/tools/visual-audit.tool.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;CA8C5B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { tool } from 'ai';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { emitProgress } from '../runtime/progress.js';
|
|
4
|
+
import { browserTools } from './browser.tool.js';
|
|
5
|
+
export const visualAuditTools = {
|
|
6
|
+
visualBrowserAudit: tool({
|
|
7
|
+
description: 'Perform a high-fidelity visual UI/UX audit of a web page using Playwright and Vision. Use this to verify design consistency, check for UI glitches, or audit mobile responsiveness.',
|
|
8
|
+
inputSchema: z.object({
|
|
9
|
+
url: z.string().url().describe('The URL to audit.'),
|
|
10
|
+
focus: z.string().optional().describe('Specific focus (e.g., "header alignment", "mobile layout", "color contrast").'),
|
|
11
|
+
viewport: z.enum(['mobile', 'tablet', 'desktop']).optional().default('desktop'),
|
|
12
|
+
}),
|
|
13
|
+
execute: async ({ url, focus, viewport }) => {
|
|
14
|
+
emitProgress({ type: 'tool:start', label: 'Initiating visual audit', detail: url });
|
|
15
|
+
const widths = { mobile: 390, tablet: 768, desktop: 1280 };
|
|
16
|
+
const heights = { mobile: 844, tablet: 1024, desktop: 800 };
|
|
17
|
+
try {
|
|
18
|
+
// 1. Take screenshots using existing browser tools
|
|
19
|
+
emitProgress({ type: 'step', label: `Capturing ${viewport} screenshot` });
|
|
20
|
+
const screenshotResult = await browserTools.browserTakeScreenshot.execute({
|
|
21
|
+
url,
|
|
22
|
+
fullPage: true,
|
|
23
|
+
});
|
|
24
|
+
if (!screenshotResult.success) {
|
|
25
|
+
throw new Error(screenshotResult.error || 'Failed to capture screenshot');
|
|
26
|
+
}
|
|
27
|
+
emitProgress({ type: 'tool:end', label: 'Visual audit capture complete' });
|
|
28
|
+
return {
|
|
29
|
+
url,
|
|
30
|
+
viewport,
|
|
31
|
+
focus: focus || 'General UX/UI consistency',
|
|
32
|
+
screenshotPath: screenshotResult.path,
|
|
33
|
+
nextSteps: [
|
|
34
|
+
'1. Analyze the attached screenshot using your internal Vision capabilities.',
|
|
35
|
+
'2. Check for alignment, spacing, and brand consistency (colors/fonts).',
|
|
36
|
+
'3. Report any "Visual Debt" or UI regressions back to the Product Manager.',
|
|
37
|
+
],
|
|
38
|
+
visionHint: 'The image has been saved to the local workspace. Please reference the screenshot and provide a detailed UX critique.'
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
emitProgress({ type: 'tool:error', label: 'Visual audit failed', detail: String(error) });
|
|
43
|
+
return { error: String(error) };
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=visual-audit.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visual-audit.tool.js","sourceRoot":"","sources":["../../src/tools/visual-audit.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,kBAAkB,EAAE,IAAI,CAAC;QACvB,WAAW,EAAE,qLAAqL;QAClM,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;YACpB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;YACtH,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;SAChF,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;YAC1C,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YAEpF,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAE5D,IAAI,CAAC;gBACH,mDAAmD;gBACnD,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,QAAQ,aAAa,EAAE,CAAC,CAAC;gBAC1E,MAAM,gBAAgB,GAAG,MAAO,YAAY,CAAC,qBAAqB,CAAC,OAAe,CAAC;oBACjF,GAAG;oBACH,QAAQ,EAAE,IAAI;iBACf,CAAC,CAAC;gBAEH,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,KAAK,IAAI,8BAA8B,CAAC,CAAC;gBAC5E,CAAC;gBAED,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;gBAE3E,OAAO;oBACL,GAAG;oBACH,QAAQ;oBACR,KAAK,EAAE,KAAK,IAAI,2BAA2B;oBAC3C,cAAc,EAAE,gBAAgB,CAAC,IAAI;oBACrC,SAAS,EAAE;wBACT,6EAA6E;wBAC7E,wEAAwE;wBACxE,4EAA4E;qBAC7E;oBACD,UAAU,EAAE,sHAAsH;iBACnI,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,YAAY,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1F,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;KACF,CAAC;CACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zilmate",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.8",
|
|
4
4
|
"description": "ZilMate CLI multi-agent assistant for ZiloShift workflows.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"cli": "tsx src/index.ts",
|
|
25
25
|
"zilmate": "tsx src/index.ts",
|
|
26
26
|
"talk": "tsx src/index.ts talk",
|
|
27
|
+
"chat": "tsx src/index.ts chat",
|
|
27
28
|
"start": "node dist/index.js",
|
|
28
29
|
"models": "tsx src/index.ts models",
|
|
29
30
|
"doctor": "tsx src/index.ts doctor",
|
|
@@ -49,14 +50,20 @@
|
|
|
49
50
|
"author": "",
|
|
50
51
|
"license": "ISC",
|
|
51
52
|
"dependencies": {
|
|
53
|
+
"@chat-adapter/slack": "^4.31.0",
|
|
54
|
+
"@chat-adapter/state-memory": "^4.31.0",
|
|
55
|
+
"@chat-adapter/telegram": "^4.31.0",
|
|
52
56
|
"@composio/core": "^0.11.0",
|
|
53
57
|
"@composio/vercel": "^0.9.3",
|
|
58
|
+
"@daytonaio/sdk": "^0.190.1",
|
|
54
59
|
"@deepgram/sdk": "^4.11.2",
|
|
55
60
|
"@mendable/firecrawl-js": "^4.28.2",
|
|
56
61
|
"@tavily/core": "^0.7.5",
|
|
57
62
|
"@upstash/redis": "^1.38.0",
|
|
58
63
|
"ai": "^6.0.198",
|
|
59
64
|
"chalk": "^5.6.2",
|
|
65
|
+
"chat": "^4.31.0",
|
|
66
|
+
"chat-adapter-imessage": "^0.1.1",
|
|
60
67
|
"commander": "^15.0.0",
|
|
61
68
|
"cross-fetch": "^4.1.0",
|
|
62
69
|
"dotenv": "^17.4.2",
|
|
@@ -12,7 +12,7 @@ const title = `ZilMate ${tag}`;
|
|
|
12
12
|
|
|
13
13
|
const notes = `# ${title}
|
|
14
14
|
|
|
15
|
-
ZilMate ${tag} —
|
|
15
|
+
ZilMate ${tag} — Chat SDK listener, multi-platform messaging, and TypeScript hardening.
|
|
16
16
|
|
|
17
17
|
## Install
|
|
18
18
|
|
|
@@ -25,21 +25,18 @@ zilmate talk
|
|
|
25
25
|
|
|
26
26
|
## Highlights
|
|
27
27
|
|
|
28
|
-
- **
|
|
29
|
-
-
|
|
30
|
-
- **
|
|
31
|
-
- **
|
|
32
|
-
- **
|
|
33
|
-
- **Image director** — \`enhanceImagePrompt\` + generation with art-direction presets.
|
|
34
|
-
- **Cloudflare setup** — dedicated tunnel section in \`zilmate setup\`; \`zilmate jobs listen --tunnel\`.
|
|
35
|
-
- **SDK.md** — Next.js App Router streaming route, subagents, jobs, voice, model selection.
|
|
28
|
+
- **Chat SDK Listener** — \`zilmate chat listen\` starts a persistent listener for Slack, Telegram, and iMessage using the Chat SDK. Incoming @-mentions are routed through the ZilMate manager agent and replies are posted back to the thread.
|
|
29
|
+
- **Multi-platform setup** — \`zilmate chat setup\` interactive wizard for Slack bot tokens, Telegram bot tokens, and iMessage (local macOS DB or remote Sendblue). Also supports noninteractive \`--flags\`.
|
|
30
|
+
- **Chat subcommand group** — \`zilmate chat setup\`, \`zilmate chat listen\`, and \`zilmate chat msg "hello"\` (one-shot) under a single \`chat\` namespace. Also aliased as \`npm run chat\`.
|
|
31
|
+
- **TS error fixes** — resolved 6 TypeScript errors across adapter configs, Message/Thread API surface, and strict optional property types.
|
|
32
|
+
- **Memory state adapter** — uses \`@chat-adapter/state-memory\` for in-process subscription/lock/dedupe storage during \`chat listen\`.
|
|
36
33
|
|
|
37
34
|
## Quick Checks
|
|
38
35
|
|
|
39
36
|
\`\`\`powershell
|
|
40
|
-
zilmate
|
|
41
|
-
|
|
42
|
-
zilmate
|
|
37
|
+
zilmate chat setup
|
|
38
|
+
zilmate chat listen
|
|
39
|
+
zilmate chat msg "hello"
|
|
43
40
|
\`\`\`
|
|
44
41
|
|
|
45
42
|
## npm
|