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
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
}
|
package/dist/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":";;;
|
|
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.
|
|
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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"}
|