aura-code 0.3.2 → 0.3.3

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/index.js CHANGED
File without changes
@@ -27,7 +27,6 @@ const cron_js_1 = require("./cron.js");
27
27
  const audio_transcribe_js_1 = require("./audio-transcribe.js");
28
28
  const youtube_transcript_js_1 = require("./youtube-transcript.js");
29
29
  const mcp_js_1 = require("./mcp.js");
30
- const shadow_shield_js_1 = require("./shadow-shield.js");
31
30
  // ─────────────────────────────────────────────────────────────────────────────
32
31
  // Tool schemas (what the model sees)
33
32
  // ─────────────────────────────────────────────────────────────────────────────
@@ -159,7 +158,6 @@ exports.TOOL_DEFINITIONS = [
159
158
  audio_transcribe_js_1.AUDIO_TRANSCRIBE_DEFINITION,
160
159
  youtube_transcript_js_1.YOUTUBE_TRANSCRIPT_DEFINITION,
161
160
  mcp_js_1.MCP_DEFINITION,
162
- shadow_shield_js_1.SHADOW_SHIELD_DEFINITION,
163
161
  ];
164
162
  // ─────────────────────────────────────────────────────────────────────────────
165
163
  // Tool executor — dispatches to the right implementation
@@ -193,7 +191,6 @@ async function executeTool(name, input, cwd) {
193
191
  case 'audio_transcribe': return (0, audio_transcribe_js_1.audioTranscribe)(input);
194
192
  case 'youtube_transcript': return (0, youtube_transcript_js_1.youtubeTranscript)(input);
195
193
  case 'mcp': return (0, mcp_js_1.mcpTool)(input);
196
- case 'shadow_shield': return (0, shadow_shield_js_1.shadowShield)(input);
197
194
  default: return `Error: Unknown tool '${name}'`;
198
195
  }
199
196
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aura-code",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "description": "Aura Code — model-agnostic AI coding agent. Works with Claude, GPT, Gemini, MiMo, Ollama, and any OpenAI-compatible endpoint. MIT licensed.",
5
5
  "bin": {
6
6
  "aura": "dist/cli/index.js"
@@ -1,11 +0,0 @@
1
- import type { ToolDefinition } from '../providers/types.js';
2
- export interface ShadowShieldInput {
3
- action: 'start' | 'stop' | 'status' | 'snapshot' | 'scan';
4
- interval_minutes?: number;
5
- video_device?: string;
6
- audio_device?: string;
7
- sensitivity?: number;
8
- telegram_chat_id?: string;
9
- }
10
- export declare const SHADOW_SHIELD_DEFINITION: ToolDefinition;
11
- export declare function shadowShield(input: ShadowShieldInput): Promise<string>;
@@ -1,538 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.SHADOW_SHIELD_DEFINITION = void 0;
37
- exports.shadowShield = shadowShield;
38
- const fs = __importStar(require("fs"));
39
- const path = __importStar(require("path"));
40
- const os = __importStar(require("os"));
41
- const child_process_1 = require("child_process");
42
- exports.SHADOW_SHIELD_DEFINITION = {
43
- name: 'shadow_shield',
44
- description: 'Apartment security surveillance module. Tracks webcam and microphone for environment changes. ' +
45
- 'Captures webcam snapshots and audio levels every N minutes (default 10). ' +
46
- 'Sends alerts with photos to Telegram when changes are detected. ' +
47
- 'Actions: start (begin surveillance loop), stop (halt surveillance), status (show current state), ' +
48
- 'snapshot (take single snapshot and send), scan (one-time check without starting loop).',
49
- parameters: {
50
- type: 'object',
51
- properties: {
52
- action: {
53
- type: 'string',
54
- description: 'Action: start, stop, status, snapshot, scan',
55
- },
56
- interval_minutes: {
57
- type: 'number',
58
- description: 'Minutes between surveillance sweeps (default: 10)',
59
- },
60
- video_device: {
61
- type: 'string',
62
- description: 'Video device path (default: /dev/video0)',
63
- },
64
- audio_device: {
65
- type: 'string',
66
- description: 'Audio device name (default: default)',
67
- },
68
- sensitivity: {
69
- type: 'number',
70
- description: 'Change sensitivity 1-10 (default: 5, lower = more sensitive)',
71
- },
72
- telegram_chat_id: {
73
- type: 'string',
74
- description: 'Override Telegram chat ID for alerts',
75
- },
76
- },
77
- required: ['action'],
78
- },
79
- };
80
- // ─────────────────────────────────────────────────────────────────────────────
81
- // State
82
- // ─────────────────────────────────────────────────────────────────────────────
83
- let state = {
84
- running: false,
85
- startedAt: null,
86
- intervalMinutes: 10,
87
- videoDevice: '/dev/video0',
88
- audioDevice: 'default',
89
- sensitivity: 5,
90
- telegramChatId: null,
91
- lastSnapshot: null,
92
- lastAudio: null,
93
- alertsSent: 0,
94
- scansCompleted: 0,
95
- timer: null,
96
- };
97
- const TEMP_DIR = path.join(os.tmpdir(), 'shadow-shield');
98
- const SNAPSHOT_PATH = path.join(TEMP_DIR, 'snapshot.jpg');
99
- const PREV_SNAPSHOT_PATH = path.join(TEMP_DIR, 'snapshot-prev.jpg');
100
- const AUDIO_PATH = path.join(TEMP_DIR, 'audio-sample.wav');
101
- function loadTelegramConfig() {
102
- const p = path.join(os.homedir(), '.aura', 'telegram.json');
103
- if (!fs.existsSync(p))
104
- return null;
105
- try {
106
- return JSON.parse(fs.readFileSync(p, 'utf8'));
107
- }
108
- catch {
109
- return null;
110
- }
111
- }
112
- // ─────────────────────────────────────────────────────────────────────────────
113
- // Webcam capture
114
- // ─────────────────────────────────────────────────────────────────────────────
115
- function captureSnapshot(device) {
116
- try {
117
- // Ensure temp dir exists
118
- if (!fs.existsSync(TEMP_DIR))
119
- fs.mkdirSync(TEMP_DIR, { recursive: true });
120
- // Rotate previous snapshot
121
- if (fs.existsSync(SNAPSHOT_PATH)) {
122
- fs.copyFileSync(SNAPSHOT_PATH, PREV_SNAPSHOT_PATH);
123
- }
124
- // Capture single frame from webcam via ffmpeg
125
- (0, child_process_1.execSync)(`ffmpeg -f v4l2 -video_size 1280x720 -i ${device} -frames:v 1 -y "${SNAPSHOT_PATH}" 2>/dev/null`, { timeout: 15_000, stdio: 'pipe' });
126
- if (!fs.existsSync(SNAPSHOT_PATH))
127
- return null;
128
- const stat = fs.statSync(SNAPSHOT_PATH);
129
- const buffer = fs.readFileSync(SNAPSHOT_PATH);
130
- const hash = simpleHash(buffer);
131
- return {
132
- timestamp: new Date().toISOString(),
133
- filePath: SNAPSHOT_PATH,
134
- fileSize: stat.size,
135
- hash,
136
- };
137
- }
138
- catch {
139
- return null;
140
- }
141
- }
142
- // ─────────────────────────────────────────────────────────────────────────────
143
- // Audio capture + level analysis
144
- // ─────────────────────────────────────────────────────────────────────────────
145
- function captureAudioLevels(device, durationSec = 5) {
146
- try {
147
- if (!fs.existsSync(TEMP_DIR))
148
- fs.mkdirSync(TEMP_DIR, { recursive: true });
149
- // Record short audio sample
150
- (0, child_process_1.execSync)(`ffmpeg -f pulse -i ${device} -t ${durationSec} -y "${AUDIO_PATH}" 2>/dev/null`, { timeout: (durationSec + 5) * 1000, stdio: 'pipe' });
151
- if (!fs.existsSync(AUDIO_PATH))
152
- return null;
153
- // Analyze audio levels using ffmpeg volumedetect filter
154
- let peakLevel = 0;
155
- let rmsLevel = 0;
156
- try {
157
- const output = (0, child_process_1.execSync)(`ffmpeg -i "${AUDIO_PATH}" -af volumedetect -f null - 2>&1`, { encoding: 'utf8', timeout: 10_000 });
158
- const peakMatch = output.match(/max_volume:\s*(-?\d+\.?\d*)\s*dB/);
159
- const rmsMatch = output.match(/mean_volume:\s*(-?\d+\.?\d*)\s*dB/);
160
- if (peakMatch) {
161
- // Convert dB to 0-100 scale (0dB = 100, -60dB = ~0)
162
- const db = parseFloat(peakMatch[1]);
163
- peakLevel = Math.max(0, Math.min(100, Math.round(((db + 60) / 60) * 100)));
164
- }
165
- if (rmsMatch) {
166
- const db = parseFloat(rmsMatch[1]);
167
- rmsLevel = Math.max(0, Math.min(100, Math.round(((db + 60) / 60) * 100)));
168
- }
169
- }
170
- catch {
171
- // Fallback: estimate from file size (larger = louder)
172
- const stat = fs.statSync(AUDIO_PATH);
173
- peakLevel = Math.min(100, Math.round((stat.size / (durationSec * 44100 * 2)) * 100));
174
- rmsLevel = Math.round(peakLevel * 0.7);
175
- }
176
- return {
177
- timestamp: new Date().toISOString(),
178
- peakLevel,
179
- rmsLevel,
180
- duration: durationSec,
181
- };
182
- }
183
- catch {
184
- return null;
185
- }
186
- }
187
- // ─────────────────────────────────────────────────────────────────────────────
188
- // Change detection
189
- // ─────────────────────────────────────────────────────────────────────────────
190
- function simpleHash(buffer) {
191
- // FNV-1a inspired fast hash — not crypto, just change detection
192
- let hash = 0x811c9dc5;
193
- for (let i = 0; i < buffer.length; i += 64) {
194
- hash ^= buffer[i];
195
- hash = (hash * 0x01000193) >>> 0;
196
- }
197
- return hash.toString(16).padStart(8, '0');
198
- }
199
- function detectChanges(current, previous, currentAudio, previousAudio, sensitivity) {
200
- const details = [];
201
- let visualChange = false;
202
- let audioChange = false;
203
- // Visual change: compare hash (exact pixel change)
204
- if (previous) {
205
- if (current.hash !== previous.hash) {
206
- visualChange = true;
207
- const sizeDiff = Math.abs(current.fileSize - previous.fileSize);
208
- const pctDiff = ((sizeDiff / previous.fileSize) * 100).toFixed(1);
209
- details.push(`Visual change detected (${pctDiff}% file size diff)`);
210
- }
211
- // Also compare actual pixel data if hashes differ
212
- if (visualChange) {
213
- const pixelDiff = comparePixelData(current.filePath, previous.filePath);
214
- // Sensitivity threshold: sensitivity 1 = detect 0.5% change, 10 = detect 15% change
215
- const threshold = 0.5 + (sensitivity - 1) * 1.6;
216
- if (pixelDiff < threshold) {
217
- // Below threshold — noise, not a real change
218
- visualChange = false;
219
- details.pop();
220
- }
221
- else {
222
- details.push(`Pixel difference: ${pixelDiff.toFixed(1)}%`);
223
- }
224
- }
225
- }
226
- else {
227
- // First snapshot — always count as change
228
- visualChange = true;
229
- details.push('First snapshot captured');
230
- }
231
- // Audio change: compare peak/rms levels
232
- if (currentAudio && previousAudio) {
233
- const peakDiff = Math.abs(currentAudio.peakLevel - previousAudio.peakLevel);
234
- const rmsDiff = Math.abs(currentAudio.rmsLevel - previousAudio.rmsLevel);
235
- // Sensitivity: lower sensitivity number = more sensitive
236
- const audioThreshold = 5 + (sensitivity - 1) * 3; // 5 to 32
237
- if (peakDiff > audioThreshold || rmsDiff > audioThreshold) {
238
- audioChange = true;
239
- details.push(`Audio change: peak ${previousAudio.peakLevel}→${currentAudio.peakLevel}, ` +
240
- `rms ${previousAudio.rmsLevel}→${currentAudio.rmsLevel}`);
241
- }
242
- }
243
- else if (currentAudio) {
244
- details.push(`Audio baseline: peak=${currentAudio.peakLevel}, rms=${currentAudio.rmsLevel}`);
245
- }
246
- return { visualChange, audioChange, details };
247
- }
248
- function comparePixelData(currentPath, previousPath) {
249
- try {
250
- // Use ImageMagick compare if available
251
- const output = (0, child_process_1.execSync)(`compare -metric AE "${previousPath}" "${currentPath}" /dev/null 2>&1 || true`, { encoding: 'utf8', timeout: 10_000 });
252
- const diffPixels = parseInt(output.trim(), 10);
253
- if (isNaN(diffPixels))
254
- return 0;
255
- // 1280*720 = 921600 total pixels
256
- return (diffPixels / 921600) * 100;
257
- }
258
- catch {
259
- // Fallback: compare file sizes as rough proxy
260
- try {
261
- const a = fs.statSync(currentPath).size;
262
- const b = fs.statSync(previousPath).size;
263
- return (Math.abs(a - b) / Math.max(a, b)) * 100;
264
- }
265
- catch {
266
- return 0;
267
- }
268
- }
269
- }
270
- // ─────────────────────────────────────────────────────────────────────────────
271
- // Telegram alerting
272
- // ─────────────────────────────────────────────────────────────────────────────
273
- async function sendTelegramAlert(changes, snapshot, audio) {
274
- const config = loadTelegramConfig();
275
- if (!config) {
276
- return 'Telegram not configured — alert skipped (create ~/.aura/telegram.json)';
277
- }
278
- const chatId = state.telegramChatId ?? config.default_chat_id;
279
- if (!chatId) {
280
- return 'No Telegram chat_id — alert skipped';
281
- }
282
- const timestamp = new Date().toLocaleString();
283
- const alertType = changes.visualChange && changes.audioChange
284
- ? '🔊📹 VISUAL + AUDIO CHANGE'
285
- : changes.visualChange
286
- ? '📹 VISUAL CHANGE'
287
- : '🔊 AUDIO CHANGE';
288
- const caption = [
289
- `🛡️ <b>Shadow Shield Alert</b>`,
290
- `${alertType}`,
291
- `⏰ ${timestamp}`,
292
- '',
293
- ...changes.details.map(d => `• ${d}`),
294
- '',
295
- audio ? `🎤 Audio: peak=${audio.peakLevel} rms=${audio.rmsLevel}` : '',
296
- `📷 Snapshot: ${snapshot.fileSize} bytes`,
297
- ].filter(Boolean).join('\n');
298
- try {
299
- // Send photo with caption
300
- const form = new FormData();
301
- form.append('chat_id', chatId);
302
- form.append('caption', caption);
303
- form.append('parse_mode', 'HTML');
304
- const photoBuffer = fs.readFileSync(snapshot.filePath);
305
- form.append('photo', new Blob([photoBuffer], { type: 'image/jpeg' }), 'snapshot.jpg');
306
- const response = await fetch(`https://api.telegram.org/bot${config.bot_token}/sendPhoto`, { method: 'POST', body: form, signal: AbortSignal.timeout(15_000) });
307
- const data = await response.json();
308
- if (data.ok) {
309
- state.alertsSent++;
310
- return `Alert sent to ${chatId} (msg_id: ${data.result.message_id})`;
311
- }
312
- return `Telegram error: ${data.description ?? 'unknown'}`;
313
- }
314
- catch (e) {
315
- return `Telegram send error: ${e?.message ?? String(e)}`;
316
- }
317
- }
318
- // ─────────────────────────────────────────────────────────────────────────────
319
- // Surveillance sweep
320
- // ─────────────────────────────────────────────────────────────────────────────
321
- async function performSweep() {
322
- const lines = [];
323
- const now = new Date().toISOString();
324
- lines.push(`[${now}] Shadow Shield sweep #${state.scansCompleted + 1}`);
325
- // Capture webcam
326
- const snapshot = captureSnapshot(state.videoDevice);
327
- if (!snapshot) {
328
- lines.push('⚠️ Webcam capture failed — device unavailable?');
329
- return lines.join('\n');
330
- }
331
- lines.push(`📷 Snapshot: ${snapshot.fileSize} bytes, hash=${snapshot.hash}`);
332
- // Capture audio
333
- const audio = captureAudioLevels(state.audioDevice);
334
- if (audio) {
335
- lines.push(`🎤 Audio: peak=${audio.peakLevel}, rms=${audio.rmsLevel}`);
336
- }
337
- else {
338
- lines.push('⚠️ Audio capture failed — continuing without audio');
339
- }
340
- // Detect changes
341
- const changes = detectChanges(snapshot, state.lastSnapshot, audio, state.lastAudio, state.sensitivity);
342
- if (changes.details.length > 0) {
343
- lines.push(...changes.details.map(d => ` → ${d}`));
344
- }
345
- // Alert if changes detected
346
- if (changes.visualChange || changes.audioChange) {
347
- lines.push('🚨 Change detected — sending Telegram alert...');
348
- const alertResult = await sendTelegramAlert(changes, snapshot, audio);
349
- lines.push(` ${alertResult}`);
350
- }
351
- else {
352
- lines.push('✅ No significant changes detected');
353
- }
354
- // Update state
355
- state.lastSnapshot = snapshot;
356
- state.lastAudio = audio;
357
- state.scansCompleted++;
358
- return lines.join('\n');
359
- }
360
- // ─────────────────────────────────────────────────────────────────────────────
361
- // Actions
362
- // ─────────────────────────────────────────────────────────────────────────────
363
- async function doStart(input) {
364
- if (state.running) {
365
- return `Shadow Shield already running (since ${state.startedAt}, ${state.scansCompleted} scans, ${state.alertsSent} alerts sent)`;
366
- }
367
- // Apply config
368
- state.intervalMinutes = input.interval_minutes ?? 10;
369
- state.videoDevice = input.video_device ?? '/dev/video0';
370
- state.audioDevice = input.audio_device ?? 'default';
371
- state.sensitivity = input.sensitivity ?? 5;
372
- state.telegramChatId = input.telegram_chat_id ?? null;
373
- // Validate ffmpeg availability
374
- try {
375
- (0, child_process_1.execSync)('which ffmpeg', { stdio: 'pipe' });
376
- }
377
- catch {
378
- return 'Error: ffmpeg not installed. Install with: sudo apt install ffmpeg';
379
- }
380
- state.running = true;
381
- state.startedAt = new Date().toISOString();
382
- state.alertsSent = 0;
383
- state.scansCompleted = 0;
384
- // Run first sweep immediately
385
- const firstSweep = await performSweep();
386
- // Schedule recurring sweeps
387
- const intervalMs = state.intervalMinutes * 60 * 1000;
388
- state.timer = setInterval(async () => {
389
- if (!state.running)
390
- return;
391
- try {
392
- await performSweep();
393
- }
394
- catch (e) {
395
- // Don't crash the loop on errors
396
- }
397
- }, intervalMs);
398
- return [
399
- '🛡️ Shadow Shield ACTIVATED',
400
- '',
401
- `📹 Video device: ${state.videoDevice}`,
402
- `🎤 Audio device: ${state.audioDevice}`,
403
- `⏱️ Interval: every ${state.intervalMinutes} minutes`,
404
- `🎯 Sensitivity: ${state.sensitivity}/10`,
405
- '',
406
- '--- First sweep ---',
407
- firstSweep,
408
- ].join('\n');
409
- }
410
- function doStop() {
411
- if (!state.running) {
412
- return 'Shadow Shield is not running.';
413
- }
414
- if (state.timer) {
415
- clearInterval(state.timer);
416
- state.timer = null;
417
- }
418
- const summary = {
419
- startedAt: state.startedAt,
420
- stoppedAt: new Date().toISOString(),
421
- scansCompleted: state.scansCompleted,
422
- alertsSent: state.alertsSent,
423
- };
424
- state.running = false;
425
- state.startedAt = null;
426
- return [
427
- '🛡️ Shadow Shield DEACTIVATED',
428
- '',
429
- `Started: ${summary.startedAt}`,
430
- `Stopped: ${summary.stoppedAt}`,
431
- `Scans completed: ${summary.scansCompleted}`,
432
- `Alerts sent: ${summary.alertsSent}`,
433
- ].join('\n');
434
- }
435
- function doStatus() {
436
- const lines = [
437
- '🛡️ Shadow Shield Status',
438
- '─'.repeat(30),
439
- `State: ${state.running ? '🟢 ACTIVE' : '🔴 INACTIVE'}`,
440
- ];
441
- if (state.running) {
442
- lines.push(`Started: ${state.startedAt}`);
443
- lines.push(`Interval: every ${state.intervalMinutes} minutes`);
444
- lines.push(`Video: ${state.videoDevice}`);
445
- lines.push(`Audio: ${state.audioDevice}`);
446
- lines.push(`Sensitivity: ${state.sensitivity}/10`);
447
- }
448
- lines.push(`Scans completed: ${state.scansCompleted}`);
449
- lines.push(`Alerts sent: ${state.alertsSent}`);
450
- if (state.lastSnapshot) {
451
- lines.push('');
452
- lines.push('Last snapshot:');
453
- lines.push(` Time: ${state.lastSnapshot.timestamp}`);
454
- lines.push(` Size: ${state.lastSnapshot.fileSize} bytes`);
455
- lines.push(` Hash: ${state.lastSnapshot.hash}`);
456
- }
457
- if (state.lastAudio) {
458
- lines.push('');
459
- lines.push('Last audio:');
460
- lines.push(` Time: ${state.lastAudio.timestamp}`);
461
- lines.push(` Peak: ${state.lastAudio.peakLevel}`);
462
- lines.push(` RMS: ${state.lastAudio.rmsLevel}`);
463
- }
464
- // Check Telegram config
465
- const tgConfig = loadTelegramConfig();
466
- lines.push('');
467
- lines.push(`Telegram: ${tgConfig ? '✅ configured' : '❌ not configured'}`);
468
- return lines.join('\n');
469
- }
470
- async function doSnapshot() {
471
- const videoDevice = state.videoDevice || '/dev/video0';
472
- const snapshot = captureSnapshot(videoDevice);
473
- if (!snapshot) {
474
- return `Error: Failed to capture snapshot from ${videoDevice}`;
475
- }
476
- // Send to Telegram
477
- const config = loadTelegramConfig();
478
- if (!config) {
479
- return `Snapshot captured (${snapshot.fileSize} bytes) but Telegram not configured. Photo saved at: ${snapshot.filePath}`;
480
- }
481
- const chatId = state.telegramChatId ?? config.default_chat_id;
482
- if (!chatId) {
483
- return `Snapshot captured (${snapshot.fileSize} bytes) but no Telegram chat_id. Photo at: ${snapshot.filePath}`;
484
- }
485
- const caption = `📷 Shadow Shield Snapshot\n⏰ ${new Date().toLocaleString()}\n📦 ${snapshot.fileSize} bytes`;
486
- try {
487
- const form = new FormData();
488
- form.append('chat_id', chatId);
489
- form.append('caption', caption);
490
- const photoBuffer = fs.readFileSync(snapshot.filePath);
491
- form.append('photo', new Blob([photoBuffer], { type: 'image/jpeg' }), 'snapshot.jpg');
492
- const response = await fetch(`https://api.telegram.org/bot${config.bot_token}/sendPhoto`, { method: 'POST', body: form, signal: AbortSignal.timeout(15_000) });
493
- const data = await response.json();
494
- if (data.ok) {
495
- return `Snapshot sent to ${chatId} (msg_id: ${data.result.message_id}) — ${snapshot.fileSize} bytes`;
496
- }
497
- return `Snapshot captured but Telegram send failed: ${data.description}`;
498
- }
499
- catch (e) {
500
- return `Snapshot captured but Telegram error: ${e?.message ?? String(e)}`;
501
- }
502
- }
503
- async function doScan() {
504
- if (state.running) {
505
- return 'Shadow Shield is already running. Use status to check, or stop + scan for a one-time check.';
506
- }
507
- // Save and restore sensitivity
508
- const savedSensitivity = state.sensitivity;
509
- state.sensitivity = 5;
510
- state.lastSnapshot = null; // Force full comparison
511
- state.lastAudio = null;
512
- const result = await performSweep();
513
- // Restore
514
- state.lastSnapshot = null;
515
- state.lastAudio = null;
516
- state.scansCompleted = 0;
517
- state.sensitivity = savedSensitivity;
518
- return result;
519
- }
520
- // ─────────────────────────────────────────────────────────────────────────────
521
- // Main executor
522
- // ─────────────────────────────────────────────────────────────────────────────
523
- async function shadowShield(input) {
524
- try {
525
- switch (input.action) {
526
- case 'start': return await doStart(input);
527
- case 'stop': return doStop();
528
- case 'status': return doStatus();
529
- case 'snapshot': return await doSnapshot();
530
- case 'scan': return await doScan();
531
- default: return `Error: Unknown shadow_shield action: ${input.action}`;
532
- }
533
- }
534
- catch (e) {
535
- return `Shadow Shield error: ${e?.message ?? String(e)}`;
536
- }
537
- }
538
- //# sourceMappingURL=shadow-shield.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shadow-shield.js","sourceRoot":"","sources":["../../src/tools/shadow-shield.ts"],"names":[],"mappings":"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"}