zilmate 1.3.4 → 1.4.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 (122) hide show
  1. package/dist/agents/automation-planner.agent.d.ts +108 -0
  2. package/dist/agents/automation-planner.agent.d.ts.map +1 -1
  3. package/dist/agents/automation-planner.agent.js +13 -4
  4. package/dist/agents/automation-planner.agent.js.map +1 -1
  5. package/dist/agents/manager.d.ts +304 -0
  6. package/dist/agents/manager.d.ts.map +1 -1
  7. package/dist/agents/manager.js +45 -3
  8. package/dist/agents/manager.js.map +1 -1
  9. package/dist/agents/security.agent.d.ts +340 -0
  10. package/dist/agents/security.agent.d.ts.map +1 -0
  11. package/dist/agents/security.agent.js +76 -0
  12. package/dist/agents/security.agent.js.map +1 -0
  13. package/dist/cli/confirm.d.ts.map +1 -1
  14. package/dist/cli/confirm.js +8 -14
  15. package/dist/cli/confirm.js.map +1 -1
  16. package/dist/cli/format.js +1 -1
  17. package/dist/cli/interactive.d.ts.map +1 -1
  18. package/dist/cli/interactive.js +2 -0
  19. package/dist/cli/interactive.js.map +1 -1
  20. package/dist/cli/triggers.d.ts.map +1 -1
  21. package/dist/cli/triggers.js +12 -4
  22. package/dist/cli/triggers.js.map +1 -1
  23. package/dist/cli/voice.d.ts.map +1 -1
  24. package/dist/cli/voice.js +2 -0
  25. package/dist/cli/voice.js.map +1 -1
  26. package/dist/config/env.d.ts +4 -0
  27. package/dist/config/env.d.ts.map +1 -1
  28. package/dist/config/env.js +4 -0
  29. package/dist/config/env.js.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/jobs/trigger-orchestrator.d.ts +26 -0
  32. package/dist/jobs/trigger-orchestrator.d.ts.map +1 -0
  33. package/dist/jobs/trigger-orchestrator.js +252 -0
  34. package/dist/jobs/trigger-orchestrator.js.map +1 -0
  35. package/dist/jobs/trigger-policies.d.ts +36 -0
  36. package/dist/jobs/trigger-policies.d.ts.map +1 -0
  37. package/dist/jobs/trigger-policies.js +68 -0
  38. package/dist/jobs/trigger-policies.js.map +1 -0
  39. package/dist/jobs/trigger-router.d.ts +14 -0
  40. package/dist/jobs/trigger-router.d.ts.map +1 -0
  41. package/dist/jobs/trigger-router.js +114 -0
  42. package/dist/jobs/trigger-router.js.map +1 -0
  43. package/dist/jobs/workflows.d.ts +4 -1
  44. package/dist/jobs/workflows.d.ts.map +1 -1
  45. package/dist/jobs/workflows.js +18 -42
  46. package/dist/jobs/workflows.js.map +1 -1
  47. package/dist/memory/personal-context.d.ts +45 -0
  48. package/dist/memory/personal-context.d.ts.map +1 -0
  49. package/dist/memory/personal-context.js +103 -0
  50. package/dist/memory/personal-context.js.map +1 -0
  51. package/dist/runtime/confirm.d.ts +3 -0
  52. package/dist/runtime/confirm.d.ts.map +1 -1
  53. package/dist/runtime/confirm.js +38 -12
  54. package/dist/runtime/confirm.js.map +1 -1
  55. package/dist/runtime/progress.d.ts.map +1 -1
  56. package/dist/runtime/progress.js +3 -0
  57. package/dist/runtime/progress.js.map +1 -1
  58. package/dist/server.d.ts +2 -0
  59. package/dist/server.d.ts.map +1 -1
  60. package/dist/server.js +2 -0
  61. package/dist/server.js.map +1 -1
  62. package/dist/skills/loader.d.ts +14 -0
  63. package/dist/skills/loader.d.ts.map +1 -0
  64. package/dist/skills/loader.js +105 -0
  65. package/dist/skills/loader.js.map +1 -0
  66. package/dist/tools/cli-runner.d.ts +13 -0
  67. package/dist/tools/cli-runner.d.ts.map +1 -0
  68. package/dist/tools/cli-runner.js +75 -0
  69. package/dist/tools/cli-runner.js.map +1 -0
  70. package/dist/tools/computer-use.tool.d.ts +159 -0
  71. package/dist/tools/computer-use.tool.d.ts.map +1 -0
  72. package/dist/tools/computer-use.tool.js +356 -0
  73. package/dist/tools/computer-use.tool.js.map +1 -0
  74. package/dist/tools/desktop.tool.d.ts +70 -0
  75. package/dist/tools/desktop.tool.d.ts.map +1 -1
  76. package/dist/tools/desktop.tool.js +188 -0
  77. package/dist/tools/desktop.tool.js.map +1 -1
  78. package/dist/tools/filesystem.tool.d.ts +49 -0
  79. package/dist/tools/filesystem.tool.d.ts.map +1 -1
  80. package/dist/tools/filesystem.tool.js +97 -0
  81. package/dist/tools/filesystem.tool.js.map +1 -1
  82. package/dist/tools/orchestration.tool.d.ts +83 -0
  83. package/dist/tools/orchestration.tool.d.ts.map +1 -0
  84. package/dist/tools/orchestration.tool.js +154 -0
  85. package/dist/tools/orchestration.tool.js.map +1 -0
  86. package/dist/tools/osint-install.tool.d.ts +35 -0
  87. package/dist/tools/osint-install.tool.d.ts.map +1 -0
  88. package/dist/tools/osint-install.tool.js +334 -0
  89. package/dist/tools/osint-install.tool.js.map +1 -0
  90. package/dist/tools/osint.tool.d.ts +445 -0
  91. package/dist/tools/osint.tool.d.ts.map +1 -0
  92. package/dist/tools/osint.tool.js +630 -0
  93. package/dist/tools/osint.tool.js.map +1 -0
  94. package/dist/tools/pentest-install.tool.d.ts +32 -0
  95. package/dist/tools/pentest-install.tool.d.ts.map +1 -0
  96. package/dist/tools/pentest-install.tool.js +201 -0
  97. package/dist/tools/pentest-install.tool.js.map +1 -0
  98. package/dist/tools/pentest.tool.d.ts +595 -0
  99. package/dist/tools/pentest.tool.d.ts.map +1 -0
  100. package/dist/tools/pentest.tool.js +841 -0
  101. package/dist/tools/pentest.tool.js.map +1 -0
  102. package/dist/tools/personal-context.tool.d.ts +32 -0
  103. package/dist/tools/personal-context.tool.d.ts.map +1 -0
  104. package/dist/tools/personal-context.tool.js +76 -0
  105. package/dist/tools/personal-context.tool.js.map +1 -0
  106. package/dist/tools/shell.tool.d.ts +91 -0
  107. package/dist/tools/shell.tool.d.ts.map +1 -0
  108. package/dist/tools/shell.tool.js +332 -0
  109. package/dist/tools/shell.tool.js.map +1 -0
  110. package/dist/tools/skills.tool.d.ts +17 -0
  111. package/dist/tools/skills.tool.d.ts.map +1 -0
  112. package/dist/tools/skills.tool.js +44 -0
  113. package/dist/tools/skills.tool.js.map +1 -0
  114. package/dist/voice/cascade.d.ts.map +1 -1
  115. package/dist/voice/cascade.js +71 -24
  116. package/dist/voice/cascade.js.map +1 -1
  117. package/dist/voice/deepgram.d.ts.map +1 -1
  118. package/dist/voice/deepgram.js +8 -1
  119. package/dist/voice/deepgram.js.map +1 -1
  120. package/dist/voice/types.d.ts +4 -0
  121. package/dist/voice/types.d.ts.map +1 -1
  122. package/package.json +1 -1
@@ -0,0 +1,105 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { existsSync } from 'node:fs';
4
+ import { homedir } from 'node:os';
5
+ function parseFrontmatter(raw) {
6
+ const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/m.exec(raw);
7
+ if (!match)
8
+ return { meta: {}, body: raw };
9
+ const meta = {};
10
+ for (const line of match[1].split('\n')) {
11
+ const idx = line.indexOf(':');
12
+ if (idx <= 0)
13
+ continue;
14
+ meta[line.slice(0, idx).trim()] = line.slice(idx + 1).trim();
15
+ }
16
+ return { meta, body: match[2].trim() };
17
+ }
18
+ async function findSkillFiles(root, found = []) {
19
+ if (!existsSync(root))
20
+ return found;
21
+ let entries;
22
+ try {
23
+ entries = await readdir(root, { withFileTypes: true });
24
+ }
25
+ catch {
26
+ return found;
27
+ }
28
+ for (const entry of entries) {
29
+ const full = path.join(root, entry.name);
30
+ if (entry.isDirectory()) {
31
+ await findSkillFiles(full, found);
32
+ continue;
33
+ }
34
+ if (entry.name === 'SKILL.md')
35
+ found.push(full);
36
+ }
37
+ return found;
38
+ }
39
+ function skillRoots() {
40
+ const roots = [
41
+ path.resolve('.agents', 'skills'),
42
+ path.resolve('plugins'),
43
+ path.resolve('skills'),
44
+ ];
45
+ const extra = (process.env.ZILMATE_SKILL_PATHS || '').split(path.delimiter).map((p) => p.trim()).filter(Boolean);
46
+ roots.push(...extra);
47
+ const homeSkills = path.join(homedir(), '.agents', 'skills');
48
+ if (existsSync(homeSkills))
49
+ roots.push(homeSkills);
50
+ return [...new Set(roots)];
51
+ }
52
+ export async function discoverSkills() {
53
+ const files = new Set();
54
+ for (const root of skillRoots()) {
55
+ for (const file of await findSkillFiles(root))
56
+ files.add(file);
57
+ }
58
+ const skills = [];
59
+ for (const file of files) {
60
+ const raw = await readFile(file, 'utf8');
61
+ const { meta } = parseFrontmatter(raw);
62
+ const folder = path.basename(path.dirname(file));
63
+ skills.push({
64
+ id: meta.name || folder,
65
+ name: meta.name || folder,
66
+ description: meta.description || 'Agent skill',
67
+ path: file,
68
+ });
69
+ }
70
+ return skills.sort((a, b) => a.name.localeCompare(b.name));
71
+ }
72
+ export async function readSkill(skillId) {
73
+ const skills = await discoverSkills();
74
+ const match = skills.find((s) => s.id === skillId || s.name === skillId || s.path.includes(skillId));
75
+ if (!match)
76
+ return null;
77
+ const raw = await readFile(match.path, 'utf8');
78
+ const { meta, body } = parseFrontmatter(raw);
79
+ return {
80
+ ...match,
81
+ name: meta.name || match.name,
82
+ description: meta.description || match.description,
83
+ body,
84
+ };
85
+ }
86
+ export async function searchSkills(query, limit = 5) {
87
+ const terms = query.toLowerCase().split(/\s+/).filter(Boolean);
88
+ const skills = await discoverSkills();
89
+ if (terms.length === 0)
90
+ return skills.slice(0, limit);
91
+ return skills
92
+ .map((skill) => {
93
+ const hay = `${skill.name} ${skill.description}`.toLowerCase();
94
+ const score = terms.reduce((s, t) => s + (hay.includes(t) ? 1 : 0), 0);
95
+ return { skill, score };
96
+ })
97
+ .filter((item) => item.score > 0)
98
+ .sort((a, b) => b.score - a.score)
99
+ .slice(0, limit)
100
+ .map((item) => item.skill);
101
+ }
102
+ export function skillPathsHint() {
103
+ return skillRoots().filter((root) => existsSync(root));
104
+ }
105
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/skills/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAalC,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,6CAA6C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,EAA4B,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACrE,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,GAAG,IAAI,CAAC;YAAE,SAAS;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAY,EAAE,QAAkB,EAAE;IAC9D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClC,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,KAAK,GAAG;QACZ,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;KACvB,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjH,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;IACrB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC7D,IAAI,UAAU,CAAC,UAAU,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,MAAM,cAAc,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC;YACV,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,aAAa;YAC9C,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAe;IAC7C,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrG,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO;QACL,GAAG,KAAK;QACR,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI;QAC7B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW;QAClD,IAAI;KACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;IACzD,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtD,OAAO,MAAM;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SACjC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type CliRunOptions = {
2
+ timeoutMs?: number;
3
+ /** Force Windows NUL-stdin wrapper even for unknown commands. */
4
+ interactive?: boolean;
5
+ env?: NodeJS.ProcessEnv;
6
+ };
7
+ /**
8
+ * Cross-platform CLI runner used by OSINT and pentest tools.
9
+ * On Windows, wraps known interactive CLIs with cmd.exe + NUL stdin.
10
+ */
11
+ export declare function runCliTool(command: string, args: string[], options?: CliRunOptions): Promise<string>;
12
+ export declare function commandExists(command: string): Promise<boolean>;
13
+ //# sourceMappingURL=cli-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runner.d.ts","sourceRoot":"","sources":["../../src/tools/cli-runner.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CxG;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAWrE"}
@@ -0,0 +1,75 @@
1
+ import { spawn } from 'node:child_process';
2
+ const IS_WIN = process.platform === 'win32';
3
+ /** Python CLIs on Windows often abort when stdin is a closed pipe instead of a TTY or NUL device. */
4
+ const WIN_INTERACTIVE_CLI = new Set([
5
+ 'sherlock', 'blackbird', 'naminter', 'maigret', 'holehe', 'linkook',
6
+ 'nmap', 'nuclei', 'subfinder', 'httpx', 'ffuf', 'sqlmap',
7
+ ]);
8
+ function quoteWinArg(arg) {
9
+ if (/[\s"&|<>^]/.test(arg))
10
+ return `"${arg.replace(/"/g, '\\"')}"`;
11
+ return arg;
12
+ }
13
+ function buildWinCommand(command, args) {
14
+ const line = [command, ...args.map(quoteWinArg)].join(' ');
15
+ return `${line} < NUL`;
16
+ }
17
+ /**
18
+ * Cross-platform CLI runner used by OSINT and pentest tools.
19
+ * On Windows, wraps known interactive CLIs with cmd.exe + NUL stdin.
20
+ */
21
+ export function runCliTool(command, args, options = {}) {
22
+ const timeoutMs = options.timeoutMs ?? 120_000;
23
+ const useWinWrapper = IS_WIN && (options.interactive === true || WIN_INTERACTIVE_CLI.has(command.toLowerCase()));
24
+ return new Promise((resolve, reject) => {
25
+ const env = {
26
+ ...process.env,
27
+ CI: '1',
28
+ PYTHONUNBUFFERED: '1',
29
+ NO_COLOR: '1',
30
+ ...options.env,
31
+ };
32
+ const spawnArgs = useWinWrapper
33
+ ? { cmd: 'cmd.exe', args: ['/d', '/s', '/c', buildWinCommand(command, args)] }
34
+ : { cmd: command, args };
35
+ const child = spawn(spawnArgs.cmd, spawnArgs.args, {
36
+ stdio: ['ignore', 'pipe', 'pipe'],
37
+ shell: !useWinWrapper && IS_WIN,
38
+ windowsHide: true,
39
+ env,
40
+ });
41
+ let out = '';
42
+ child.stdout.setEncoding('utf8');
43
+ child.stderr.setEncoding('utf8');
44
+ child.stdout.on('data', (c) => { out += c; });
45
+ child.stderr.on('data', (c) => { out += c; });
46
+ child.on('error', reject);
47
+ const timer = setTimeout(() => {
48
+ child.kill('SIGTERM');
49
+ reject(new Error(`Tool timed out after ${timeoutMs / 1000}s`));
50
+ }, timeoutMs);
51
+ child.on('close', (code) => {
52
+ clearTimeout(timer);
53
+ if (out.trim())
54
+ resolve(out);
55
+ else
56
+ reject(new Error(code === 0
57
+ ? `${command} produced no output.`
58
+ : `${command} failed (exit ${code ?? 'unknown'}). On Windows, ensure the tool is on PATH or run installOsintTools / installPentestTools first.`));
59
+ });
60
+ });
61
+ }
62
+ export async function commandExists(command) {
63
+ const { execFile } = await import('node:child_process');
64
+ const { promisify } = await import('node:util');
65
+ const execFileAsync = promisify(execFile);
66
+ const probe = IS_WIN ? 'where' : 'which';
67
+ try {
68
+ await execFileAsync(probe, [command], { windowsHide: true, timeout: 6_000 });
69
+ return true;
70
+ }
71
+ catch {
72
+ return false;
73
+ }
74
+ }
75
+ //# sourceMappingURL=cli-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-runner.js","sourceRoot":"","sources":["../../src/tools/cli-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAE5C,qGAAqG;AACrG,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IAClC,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;IACnE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ;CACzD,CAAC,CAAC;AAEH,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC;IACnE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,IAAc;IACtD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO,GAAG,IAAI,QAAQ,CAAC;AACzB,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,IAAc,EAAE,UAAyB,EAAE;IACrF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC;IAC/C,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEjH,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG;YACV,GAAG,OAAO,CAAC,GAAG;YACd,EAAE,EAAE,GAAG;YACP,gBAAgB,EAAE,GAAG;YACrB,QAAQ,EAAE,GAAG;YACb,GAAG,OAAO,CAAC,GAAG;SACf,CAAC;QAEF,MAAM,SAAS,GAAG,aAAa;YAC7B,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE;YAC9E,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAE3B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,EAAE;YACjD,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,KAAK,EAAE,CAAC,aAAa,IAAI,MAAM;YAC/B,WAAW,EAAE,IAAI;YACjB,GAAG;SACJ,CAAC,CAAC;QAEH,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE1B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,GAAG,CAAC,IAAI,EAAE;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;gBACxB,MAAM,CAAC,IAAI,KAAK,CACnB,IAAI,KAAK,CAAC;oBACR,CAAC,CAAC,GAAG,OAAO,sBAAsB;oBAClC,CAAC,CAAC,GAAG,OAAO,iBAAiB,IAAI,IAAI,SAAS,iGAAiG,CAClJ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACxD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACzC,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,159 @@
1
+ export declare const mouseTool: {
2
+ mouseAction: import("ai").Tool<{
3
+ action: "move" | "click" | "doubleClick" | "rightClick" | "scroll";
4
+ x: number;
5
+ y: number;
6
+ scrollAmount: number;
7
+ duration: number;
8
+ scrollDirection?: "up" | "down" | "left" | "right" | undefined;
9
+ }, {
10
+ action: "move" | "click" | "doubleClick" | "rightClick" | "scroll";
11
+ x: number;
12
+ y: number;
13
+ result: string;
14
+ }>;
15
+ };
16
+ export declare const keyboardTool: {
17
+ keyboardAction: import("ai").Tool<{
18
+ action: "type" | "press" | "hotkey";
19
+ interval: number;
20
+ text?: string | undefined;
21
+ key?: string | undefined;
22
+ hotkey?: string[] | undefined;
23
+ }, {
24
+ action: "type" | "press" | "hotkey";
25
+ result: string;
26
+ }>;
27
+ };
28
+ export declare const screenReadTool: {
29
+ readScreen: import("ai").Tool<{
30
+ region?: {
31
+ x: number;
32
+ y: number;
33
+ width: number;
34
+ height: number;
35
+ } | undefined;
36
+ }, {
37
+ filePath: string;
38
+ width: number | undefined;
39
+ height: number | undefined;
40
+ }>;
41
+ };
42
+ export declare const windowTool: {
43
+ manageWindow: import("ai").Tool<{
44
+ action: "close" | "list" | "focus" | "resize" | "minimize" | "maximize";
45
+ title?: string | undefined;
46
+ x?: number | undefined;
47
+ y?: number | undefined;
48
+ width?: number | undefined;
49
+ height?: number | undefined;
50
+ }, any>;
51
+ };
52
+ export declare const findElementTool: {
53
+ findOnScreen: import("ai").Tool<{
54
+ referenceImagePath: string;
55
+ confidence: number;
56
+ region?: {
57
+ x: number;
58
+ y: number;
59
+ width: number;
60
+ height: number;
61
+ } | undefined;
62
+ }, any>;
63
+ };
64
+ export declare const dragTool: {
65
+ dragAndDrop: import("ai").Tool<{
66
+ fromX: number;
67
+ fromY: number;
68
+ toX: number;
69
+ toY: number;
70
+ duration: number;
71
+ button: "left" | "right" | "middle";
72
+ }, {
73
+ fromX: number;
74
+ fromY: number;
75
+ toX: number;
76
+ toY: number;
77
+ result: string;
78
+ }>;
79
+ };
80
+ export declare const computerUseInstallTool: {
81
+ installComputerUseDeps: import("ai").Tool<Record<string, never>, {
82
+ platform: NodeJS.Platform;
83
+ results: Record<string, string>;
84
+ }>;
85
+ };
86
+ export declare const computerUseTools: {
87
+ dragAndDrop: import("ai").Tool<{
88
+ fromX: number;
89
+ fromY: number;
90
+ toX: number;
91
+ toY: number;
92
+ duration: number;
93
+ button: "left" | "right" | "middle";
94
+ }, {
95
+ fromX: number;
96
+ fromY: number;
97
+ toX: number;
98
+ toY: number;
99
+ result: string;
100
+ }>;
101
+ findOnScreen: import("ai").Tool<{
102
+ referenceImagePath: string;
103
+ confidence: number;
104
+ region?: {
105
+ x: number;
106
+ y: number;
107
+ width: number;
108
+ height: number;
109
+ } | undefined;
110
+ }, any>;
111
+ manageWindow: import("ai").Tool<{
112
+ action: "close" | "list" | "focus" | "resize" | "minimize" | "maximize";
113
+ title?: string | undefined;
114
+ x?: number | undefined;
115
+ y?: number | undefined;
116
+ width?: number | undefined;
117
+ height?: number | undefined;
118
+ }, any>;
119
+ readScreen: import("ai").Tool<{
120
+ region?: {
121
+ x: number;
122
+ y: number;
123
+ width: number;
124
+ height: number;
125
+ } | undefined;
126
+ }, {
127
+ filePath: string;
128
+ width: number | undefined;
129
+ height: number | undefined;
130
+ }>;
131
+ keyboardAction: import("ai").Tool<{
132
+ action: "type" | "press" | "hotkey";
133
+ interval: number;
134
+ text?: string | undefined;
135
+ key?: string | undefined;
136
+ hotkey?: string[] | undefined;
137
+ }, {
138
+ action: "type" | "press" | "hotkey";
139
+ result: string;
140
+ }>;
141
+ mouseAction: import("ai").Tool<{
142
+ action: "move" | "click" | "doubleClick" | "rightClick" | "scroll";
143
+ x: number;
144
+ y: number;
145
+ scrollAmount: number;
146
+ duration: number;
147
+ scrollDirection?: "up" | "down" | "left" | "right" | undefined;
148
+ }, {
149
+ action: "move" | "click" | "doubleClick" | "rightClick" | "scroll";
150
+ x: number;
151
+ y: number;
152
+ result: string;
153
+ }>;
154
+ installComputerUseDeps: import("ai").Tool<Record<string, never>, {
155
+ platform: NodeJS.Platform;
156
+ results: Record<string, string>;
157
+ }>;
158
+ };
159
+ //# sourceMappingURL=computer-use.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computer-use.tool.d.ts","sourceRoot":"","sources":["../../src/tools/computer-use.tool.ts"],"names":[],"mappings":"AAwEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CAwCrB,CAAC;AAIF,eAAO,MAAM,YAAY;;;;;;;;;;;CA4CxB,CAAC;AAIF,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAqC1B,CAAC;AAIF,eAAO,MAAM,UAAU;;;;;;;;;CAyDtB,CAAC;AAIF,eAAO,MAAM,eAAe;;;;;;;;;;;CA8C3B,CAAC;AAIF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;CA6BpB,CAAC;AAIF,eAAO,MAAM,sBAAsB;;;;;CAgClC,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ5B,CAAC"}