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,154 @@
1
+ import { tool } from 'ai';
2
+ import { z } from 'zod';
3
+ import { buildOrchestrationPlanWithRouting, formatOrchestrationProposal } from '../jobs/trigger-router.js';
4
+ import { getActiveTriggerPolicy, listTriggerPolicies, saveTriggerPolicy } from '../jobs/trigger-policies.js';
5
+ import { orchestrateComposioTrigger } from '../jobs/trigger-orchestrator.js';
6
+ import { requestConfirmation } from '../runtime/confirm.js';
7
+ import { emitProgress } from '../runtime/progress.js';
8
+ export const orchestrationTools = {
9
+ listTriggerPolicies: tool({
10
+ description: 'List saved trigger routing policies (VIP senders, urgency keywords, auto-approve rules).',
11
+ inputSchema: z.object({}),
12
+ execute: async () => listTriggerPolicies(),
13
+ }),
14
+ getTriggerPolicy: tool({
15
+ description: 'Get the active trigger routing policy.',
16
+ inputSchema: z.object({}),
17
+ execute: async () => getActiveTriggerPolicy(),
18
+ }),
19
+ saveTriggerPolicy: tool({
20
+ description: 'Save or update a trigger routing policy. Requires user confirmation.',
21
+ inputSchema: z.object({
22
+ policy: z.object({
23
+ id: z.string().optional(),
24
+ name: z.string().min(1),
25
+ enabled: z.boolean().optional().default(true),
26
+ vipSenders: z.array(z.string()).optional().default([]),
27
+ urgentKeywords: z.array(z.string()).optional().default([]),
28
+ lowPriorityKeywords: z.array(z.string()).optional().default([]),
29
+ customInstructions: z.string().optional().default(''),
30
+ }),
31
+ }),
32
+ execute: async ({ policy }) => {
33
+ const approved = await requestConfirmation({
34
+ toolkitSlug: 'ZILMATE',
35
+ toolSlug: 'TRIGGER_POLICY',
36
+ action: `Save trigger policy "${policy.name}"`,
37
+ access: 'Write',
38
+ targetTools: ['TRIGGER_POLICY'],
39
+ details: [
40
+ `VIP senders: ${policy.vipSenders?.join(', ') || 'none'}`,
41
+ `Urgent keywords: ${policy.urgentKeywords?.join(', ') || 'none'}`,
42
+ policy.customInstructions ? `Instructions: ${policy.customInstructions.slice(0, 120)}` : '',
43
+ ].filter(Boolean),
44
+ summary: policy.name,
45
+ });
46
+ if (!approved)
47
+ throw new Error('Policy save blocked by user.');
48
+ const existing = await getActiveTriggerPolicy();
49
+ const saved = await saveTriggerPolicy({
50
+ ...existing,
51
+ ...policy,
52
+ id: policy.id || existing.id,
53
+ routes: existing.routes,
54
+ createdAt: existing.createdAt,
55
+ updatedAt: new Date().toISOString(),
56
+ });
57
+ return saved;
58
+ },
59
+ }),
60
+ proposeTriggerOrchestration: tool({
61
+ description: 'Preview how a trigger would be classified and which jobs/chains would be created. Does not create jobs.',
62
+ inputSchema: z.object({
63
+ triggerSlug: z.string().min(1),
64
+ toolkitSlug: z.string().min(1),
65
+ payload: z.record(z.string(), z.unknown()).optional(),
66
+ }),
67
+ execute: async ({ triggerSlug, toolkitSlug, payload }) => {
68
+ const event = {
69
+ id: 'preview',
70
+ triggerSlug,
71
+ toolkitSlug,
72
+ payload: payload ?? {},
73
+ };
74
+ const plan = await buildOrchestrationPlanWithRouting(event);
75
+ return {
76
+ proposal: formatOrchestrationProposal(plan),
77
+ plan: {
78
+ chainId: plan.chainId,
79
+ priority: plan.priority,
80
+ route: plan.route,
81
+ category: plan.category,
82
+ followUpCount: plan.followUps.length,
83
+ followUps: plan.followUps,
84
+ },
85
+ };
86
+ },
87
+ }),
88
+ applyTriggerOrchestration: tool({
89
+ description: 'Create jobs from a real or simulated trigger event after showing the user what will happen. Ask for approval when follow-ups are included.',
90
+ inputSchema: z.object({
91
+ triggerSlug: z.string().min(1),
92
+ toolkitSlug: z.string().min(1),
93
+ payload: z.record(z.string(), z.unknown()).optional(),
94
+ triggerId: z.string().optional(),
95
+ userId: z.string().optional(),
96
+ dryRun: z.boolean().optional(),
97
+ }),
98
+ execute: async ({ triggerSlug, toolkitSlug, payload, triggerId, userId, dryRun }) => {
99
+ const event = {
100
+ id: triggerId || `manual-${Date.now()}`,
101
+ triggerSlug,
102
+ toolkitSlug,
103
+ userId,
104
+ payload: payload ?? {},
105
+ };
106
+ emitProgress({ type: 'thinking', label: 'Planning trigger orchestration' });
107
+ const plan = await buildOrchestrationPlanWithRouting(event);
108
+ const proposal = formatOrchestrationProposal(plan);
109
+ const policy = await getActiveTriggerPolicy();
110
+ const routePolicy = policy.routes[plan.route];
111
+ if (dryRun) {
112
+ return { dryRun: true, proposal, plan };
113
+ }
114
+ const needsPrimaryConfirm = routePolicy && !routePolicy.autoApprovePrimary;
115
+ const needsFollowUpConfirm = plan.followUps.length > 0 && routePolicy && !routePolicy.autoApproveFollowUps;
116
+ if (needsPrimaryConfirm || needsFollowUpConfirm) {
117
+ const approved = await requestConfirmation({
118
+ toolkitSlug: 'ZILMATE',
119
+ toolSlug: 'TRIGGER_ORCHESTRATION',
120
+ action: needsFollowUpConfirm ? 'Create trigger job chain' : 'Create trigger primary job',
121
+ access: 'Write',
122
+ targetTools: ['TRIGGER_ORCHESTRATION'],
123
+ details: proposal.split('\n').slice(0, 12),
124
+ summary: `${plan.priority} ${plan.route} chain with ${plan.followUps.length} follow-up(s)`,
125
+ });
126
+ if (!approved) {
127
+ return {
128
+ applied: false,
129
+ blocked: true,
130
+ proposal,
131
+ message: 'User declined orchestration. Nothing was queued.',
132
+ };
133
+ }
134
+ }
135
+ const jobs = await orchestrateComposioTrigger(event, { plan, includeFollowUps: true });
136
+ return {
137
+ applied: true,
138
+ proposal,
139
+ jobs: jobs.map((job) => ({
140
+ id: job.id,
141
+ status: job.status,
142
+ schedule: job.schedule,
143
+ role: job.metadata.orchestrationRole,
144
+ })),
145
+ report: [
146
+ `Queued ${jobs.length} job(s) for ${triggerSlug}.`,
147
+ `Route: ${plan.route}, priority: ${plan.priority}.`,
148
+ jobs.length > 1 ? `Follow-ups: ${jobs.length - 1} scheduled.` : 'No follow-ups.',
149
+ ].join(' '),
150
+ };
151
+ },
152
+ }),
153
+ };
154
+ //# sourceMappingURL=orchestration.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestration.tool.js","sourceRoot":"","sources":["../../src/tools/orchestration.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type InstallResult = {
2
+ tool: string;
3
+ status: 'installed' | 'already_present' | 'failed';
4
+ detail: string;
5
+ };
6
+ export declare const osintInstallTools: {
7
+ checkOsintTools: import("ai").Tool<Record<string, never>, {
8
+ platform: NodeJS.Platform;
9
+ available: ("sherlock" | "blackbird" | "naminter" | "maigret" | "holehe" | "linkook" | "shodan" | "phoneinfoga" | "theHarvester" | "spiderfoot" | "exiftool")[];
10
+ missing: ("sherlock" | "blackbird" | "naminter" | "maigret" | "holehe" | "linkook" | "shodan" | "phoneinfoga" | "theHarvester" | "spiderfoot" | "exiftool")[];
11
+ readyForInvestigation: boolean;
12
+ details: {
13
+ tool: "sherlock" | "blackbird" | "naminter" | "maigret" | "holehe" | "linkook" | "shodan" | "phoneinfoga" | "theHarvester" | "spiderfoot" | "exiftool";
14
+ description: "Username scanner across 300+ social networks" | "Deep username dossier across 3,000+ sites" | "Username + email scanner (WhatsMyName, 600+ sites) with PDF export" | "TLS-impersonation username scanner (bypasses Cloudflare)" | "Recursive profile link mapper" | "Silent email registration check across 120+ platforms" | "International phone number intelligence scanner" | "Domain email/subdomain/employee harvester" | "Automated reconnaissance framework (200+ modules)" | "File metadata extractor (GPS, camera serial, author, etc.)" | "Shodan CLI for querying open ports, services, CVEs";
15
+ available: boolean;
16
+ }[];
17
+ }>;
18
+ installOsintTools: import("ai").Tool<{
19
+ force: boolean;
20
+ tools?: ("sherlock" | "blackbird" | "naminter" | "maigret" | "holehe" | "linkook" | "shodan" | "phoneinfoga" | "theHarvester" | "spiderfoot" | "exiftool")[] | undefined;
21
+ }, {
22
+ platform: NodeJS.Platform;
23
+ summary: {
24
+ installed: number;
25
+ skipped: number;
26
+ failed: number;
27
+ };
28
+ failed: {
29
+ tool: string;
30
+ detail: string;
31
+ }[];
32
+ results: InstallResult[];
33
+ }>;
34
+ };
35
+ //# sourceMappingURL=osint-install.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osint-install.tool.d.ts","sourceRoot":"","sources":["../../src/tools/osint-install.tool.ts"],"names":[],"mappings":"AAoFA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAoMF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkG7B,CAAC"}
@@ -0,0 +1,334 @@
1
+ import { execFile, spawn } from 'node:child_process';
2
+ import { promisify } from 'node:util';
3
+ import { tool } from 'ai';
4
+ import { z } from 'zod';
5
+ import { requestConfirmation } from '../runtime/confirm.js';
6
+ import { emitProgress } from '../runtime/progress.js';
7
+ import { commandExists } from './cli-runner.js';
8
+ const execFileAsync = promisify(execFile);
9
+ // ─── Platform helpers ────────────────────────────────────────────────────────
10
+ const IS_WIN = process.platform === 'win32';
11
+ const IS_MAC = process.platform === 'darwin';
12
+ const IS_LINUX = process.platform === 'linux';
13
+ async function confirmInstallAction(toolName, details) {
14
+ return requestConfirmation({
15
+ toolkitSlug: 'ZILMATE',
16
+ toolSlug: 'OSINT_INSTALL',
17
+ action: `Install ${toolName}`,
18
+ access: 'Write',
19
+ targetTools: ['ZILMATE_OSINT'],
20
+ details,
21
+ summary: details.join('; '),
22
+ });
23
+ }
24
+ /**
25
+ * Check whether a Python module is importable.
26
+ * Tries `python` on Windows first (Anaconda compat), then `python3`.
27
+ */
28
+ async function pythonModuleExists(module) {
29
+ const pythons = IS_WIN ? ['python', 'python3'] : ['python3', 'python'];
30
+ for (const py of pythons) {
31
+ try {
32
+ await execFileAsync(py, ['-c', `import ${module}`], { windowsHide: true, timeout: 8_000 });
33
+ return true;
34
+ }
35
+ catch { /* try next */ }
36
+ }
37
+ return false;
38
+ }
39
+ /**
40
+ * Run a process and stream stderr/stdout back as a combined string.
41
+ * Resolves even on non-zero exit (many installers use non-zero for warnings).
42
+ */
43
+ function runInstallCommand(command, args, env) {
44
+ return new Promise((resolve, reject) => {
45
+ const child = spawn(command, args, {
46
+ env: { ...process.env, ...env },
47
+ stdio: ['ignore', 'pipe', 'pipe'],
48
+ windowsHide: true,
49
+ shell: IS_WIN, // Required on Windows so PATH is resolved correctly
50
+ });
51
+ let output = '';
52
+ child.stdout.setEncoding('utf8');
53
+ child.stderr.setEncoding('utf8');
54
+ child.stdout.on('data', (c) => { output += c; });
55
+ child.stderr.on('data', (c) => { output += c; });
56
+ child.on('error', reject);
57
+ child.on('close', () => resolve(output));
58
+ });
59
+ }
60
+ /** pip install — works on all platforms; uses `pip` on Windows, `pip3` on Unix */
61
+ async function pipInstall(pkg) {
62
+ const pip = IS_WIN ? 'pip' : 'pip3';
63
+ return runInstallCommand(pip, ['install', '--upgrade', pkg]);
64
+ }
65
+ /** pipx install — preferred for CLI tools; falls back gracefully */
66
+ async function pipxInstall(pkg) {
67
+ // Ensure pipx is available
68
+ if (!(await commandExists('pipx'))) {
69
+ await pipInstall('pipx');
70
+ }
71
+ return runInstallCommand('pipx', ['install', '--force', pkg]);
72
+ }
73
+ const OSINT_TOOLS = [
74
+ // ── Username scanners ──────────────────────────────────────────────────────
75
+ {
76
+ name: 'sherlock',
77
+ description: 'Username scanner across 300+ social networks',
78
+ check: () => commandExists('sherlock'),
79
+ install: async () => {
80
+ // pipx is the recommended method since 2025
81
+ return pipxInstall('sherlock-project');
82
+ },
83
+ },
84
+ {
85
+ name: 'maigret',
86
+ description: 'Deep username dossier across 3,000+ sites',
87
+ check: () => commandExists('maigret'),
88
+ install: async () => {
89
+ // pip3 install maigret is the official PyPI method
90
+ return pipInstall('maigret');
91
+ },
92
+ },
93
+ {
94
+ name: 'blackbird',
95
+ description: 'Username + email scanner (WhatsMyName, 600+ sites) with PDF export',
96
+ check: () => commandExists('blackbird'),
97
+ install: async () => {
98
+ // Blackbird ships as a Python CLI via pip
99
+ const out = await pipInstall('blackbird-osint');
100
+ return out;
101
+ },
102
+ },
103
+ {
104
+ name: 'naminter',
105
+ description: 'TLS-impersonation username scanner (bypasses Cloudflare)',
106
+ check: () => commandExists('naminter'),
107
+ install: async () => pipInstall('naminter'),
108
+ },
109
+ {
110
+ name: 'linkook',
111
+ description: 'Recursive profile link mapper',
112
+ check: () => commandExists('linkook'),
113
+ install: async () => pipInstall('linkook'),
114
+ },
115
+ // ── Email / identity tools ─────────────────────────────────────────────────
116
+ {
117
+ name: 'holehe',
118
+ description: 'Silent email registration check across 120+ platforms',
119
+ check: () => commandExists('holehe'),
120
+ install: async () => {
121
+ // Official: pip3 install holehe
122
+ return pipInstall('holehe');
123
+ },
124
+ },
125
+ // ── Phone ──────────────────────────────────────────────────────────────────
126
+ {
127
+ name: 'phoneinfoga',
128
+ description: 'International phone number intelligence scanner',
129
+ check: () => commandExists('phoneinfoga'),
130
+ install: async () => {
131
+ if (IS_MAC) {
132
+ // Homebrew is the cleanest Mac install
133
+ if (await commandExists('brew')) {
134
+ return runInstallCommand('brew', ['install', 'sundowndev/tap/phoneinfoga']);
135
+ }
136
+ }
137
+ if (IS_LINUX) {
138
+ // Official bash installer (fetches the right binary for arch)
139
+ return runInstallCommand('bash', [
140
+ '-c',
141
+ 'bash <( curl -sSL https://raw.githubusercontent.com/sundowndev/phoneinfoga/master/support/scripts/install )',
142
+ ]);
143
+ }
144
+ if (IS_WIN) {
145
+ // Windows: download the .exe via PowerShell into %USERPROFILE%\bin
146
+ return runInstallCommand('powershell.exe', [
147
+ '-NoProfile',
148
+ '-Command',
149
+ `
150
+ $dir = "$env:USERPROFILE\\bin"
151
+ New-Item -ItemType Directory -Force -Path $dir | Out-Null
152
+ $url = "https://github.com/sundowndev/phoneinfoga/releases/latest/download/phoneinfoga_Windows_x86_64.zip"
153
+ $zip = "$env:TEMP\\phoneinfoga.zip"
154
+ Invoke-WebRequest -Uri $url -OutFile $zip
155
+ Expand-Archive -Path $zip -DestinationPath $dir -Force
156
+ Write-Output "PhoneInfoga extracted to $dir — ensure $dir is on your PATH"
157
+ `.trim(),
158
+ ]);
159
+ }
160
+ return 'Unsupported platform for PhoneInfoga auto-install. See: https://sundowndev.github.io/phoneinfoga/getting-started/install/';
161
+ },
162
+ },
163
+ // ── Domain recon ──────────────────────────────────────────────────────────
164
+ {
165
+ name: 'theHarvester',
166
+ description: 'Domain email/subdomain/employee harvester',
167
+ check: () => commandExists('theHarvester'),
168
+ install: async () => {
169
+ if (IS_LINUX || IS_MAC) {
170
+ // Clone & pip-install is the most reliable method (apt version often lags)
171
+ const out = await runInstallCommand('bash', [
172
+ '-c',
173
+ [
174
+ 'git clone https://github.com/laramies/theHarvester /tmp/theHarvester 2>&1 || true',
175
+ 'cd /tmp/theHarvester',
176
+ 'pip3 install -r requirements/base.txt',
177
+ 'pip3 install -e .',
178
+ ].join(' && '),
179
+ ]);
180
+ return out;
181
+ }
182
+ if (IS_WIN) {
183
+ return runInstallCommand('powershell.exe', [
184
+ '-NoProfile', '-Command',
185
+ 'git clone https://github.com/laramies/theHarvester $env:TEMP\\theHarvester; cd $env:TEMP\\theHarvester; pip install -r requirements/base.txt; pip install -e .',
186
+ ]);
187
+ }
188
+ return pipInstall('theHarvester');
189
+ },
190
+ },
191
+ // ── Frameworks ────────────────────────────────────────────────────────────
192
+ {
193
+ name: 'spiderfoot',
194
+ description: 'Automated reconnaissance framework (200+ modules)',
195
+ check: () => pythonModuleExists('spiderfoot'),
196
+ install: async () => {
197
+ if (IS_WIN || IS_MAC || IS_LINUX) {
198
+ // Clone SpiderFoot — pip package may be stale
199
+ const out = await runInstallCommand('bash', [
200
+ '-c',
201
+ [
202
+ 'git clone https://github.com/smicallef/spiderfoot /tmp/spiderfoot 2>&1 || true',
203
+ 'cd /tmp/spiderfoot',
204
+ 'pip3 install -r requirements.txt',
205
+ ].join(' && '),
206
+ ]);
207
+ return out;
208
+ }
209
+ return pipInstall('spiderfoot');
210
+ },
211
+ },
212
+ // ── File forensics ────────────────────────────────────────────────────────
213
+ {
214
+ name: 'exiftool',
215
+ description: 'File metadata extractor (GPS, camera serial, author, etc.)',
216
+ check: () => commandExists('exiftool'),
217
+ install: async () => {
218
+ if (IS_WIN) {
219
+ // Chocolatey is the easiest Windows path
220
+ if (await commandExists('choco')) {
221
+ return runInstallCommand('choco', ['install', 'exiftool', '-y']);
222
+ }
223
+ // Winget fallback
224
+ if (await commandExists('winget')) {
225
+ return runInstallCommand('winget', ['install', '--id', 'OliverBetz.ExifTool', '--accept-package-agreements', '--accept-source-agreements']);
226
+ }
227
+ return 'Install ExifTool manually: https://exiftool.org/#download (add exiftool.exe to PATH)';
228
+ }
229
+ if (IS_MAC) {
230
+ if (await commandExists('brew')) {
231
+ return runInstallCommand('brew', ['install', 'exiftool']);
232
+ }
233
+ return 'Install Homebrew first: https://brew.sh, then run: brew install exiftool';
234
+ }
235
+ // Linux: apt
236
+ return runInstallCommand('sudo', ['apt-get', 'install', '-y', 'libimage-exiftool-perl']);
237
+ },
238
+ },
239
+ // ── Shodan CLI ────────────────────────────────────────────────────────────
240
+ {
241
+ name: 'shodan',
242
+ description: 'Shodan CLI for querying open ports, services, CVEs',
243
+ check: () => commandExists('shodan'),
244
+ install: async () => pipInstall('shodan'),
245
+ },
246
+ ];
247
+ // ─── Exported tools ──────────────────────────────────────────────────────────
248
+ export const osintInstallTools = {
249
+ checkOsintTools: tool({
250
+ description: 'Check which OSINT tools are already installed on this machine. Always run this before installing to see what is missing.',
251
+ inputSchema: z.object({}),
252
+ execute: async () => {
253
+ const checks = await Promise.all(OSINT_TOOLS.map(async (entry) => ({
254
+ tool: entry.name,
255
+ description: entry.description,
256
+ available: await entry.check(),
257
+ })));
258
+ const available = checks.filter((c) => c.available).map((c) => c.tool);
259
+ const missing = checks.filter((c) => !c.available).map((c) => c.tool);
260
+ return {
261
+ platform: process.platform,
262
+ available,
263
+ missing,
264
+ readyForInvestigation: missing.length === 0,
265
+ details: checks,
266
+ };
267
+ },
268
+ }),
269
+ installOsintTools: tool({
270
+ description: 'Install OSINT tools on this machine. Works cross-platform (Windows/macOS/Linux). Skips tools already present. Optionally target a subset. Run checkOsintTools first.',
271
+ inputSchema: z.object({
272
+ tools: z
273
+ .array(z.enum([
274
+ 'sherlock', 'maigret', 'blackbird', 'naminter', 'linkook',
275
+ 'holehe', 'phoneinfoga', 'theHarvester', 'spiderfoot', 'exiftool', 'shodan',
276
+ ]))
277
+ .optional()
278
+ .describe('Subset to install. Omit to install everything missing.'),
279
+ force: z
280
+ .boolean()
281
+ .optional()
282
+ .default(false)
283
+ .describe('If true, reinstalls even tools already present.'),
284
+ }),
285
+ execute: async ({ tools: subset, force }) => {
286
+ const targets = subset
287
+ ? OSINT_TOOLS.filter((t) => subset.includes(t.name))
288
+ : OSINT_TOOLS;
289
+ const results = [];
290
+ for (const entry of targets) {
291
+ emitProgress({ type: 'tool:start', label: `Checking ${entry.name}` });
292
+ const exists = await entry.check();
293
+ if (exists && !force) {
294
+ results.push({ tool: entry.name, status: 'already_present', detail: 'Found on PATH — skipped.' });
295
+ emitProgress({ type: 'tool:end', label: `${entry.name} already installed` });
296
+ continue;
297
+ }
298
+ const approved = await confirmInstallAction(entry.name, [
299
+ `Platform: ${process.platform}`,
300
+ `Tool: ${entry.name}`,
301
+ entry.description,
302
+ 'Uses pip3/pipx (Python tools), brew (macOS), apt (Linux), choco/winget (Windows)',
303
+ 'Network access required — downloads packages from PyPI and GitHub',
304
+ ]);
305
+ if (!approved) {
306
+ results.push({ tool: entry.name, status: 'failed', detail: 'User declined installation.' });
307
+ emitProgress({ type: 'tool:end', label: `${entry.name} skipped` });
308
+ continue;
309
+ }
310
+ try {
311
+ emitProgress({ type: 'tool:start', label: `Installing ${entry.name}`, detail: entry.description });
312
+ const output = await entry.install();
313
+ results.push({ tool: entry.name, status: 'installed', detail: output.slice(0, 400) });
314
+ emitProgress({ type: 'tool:end', label: `${entry.name} installed` });
315
+ }
316
+ catch (error) {
317
+ const detail = error instanceof Error ? error.message : String(error);
318
+ results.push({ tool: entry.name, status: 'failed', detail });
319
+ emitProgress({ type: 'tool:end', label: `${entry.name} failed` });
320
+ }
321
+ }
322
+ const installed = results.filter((r) => r.status === 'installed').length;
323
+ const skipped = results.filter((r) => r.status === 'already_present').length;
324
+ const failed = results.filter((r) => r.status === 'failed');
325
+ return {
326
+ platform: process.platform,
327
+ summary: { installed, skipped, failed: failed.length },
328
+ failed: failed.map((f) => ({ tool: f.tool, detail: f.detail })),
329
+ results,
330
+ };
331
+ },
332
+ }),
333
+ };
334
+ //# sourceMappingURL=osint-install.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"osint-install.tool.js","sourceRoot":"","sources":["../../src/tools/osint-install.tool.ts"],"names":[],"mappings":"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"}