sensorium-mcp 2.7.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * OpenAI API client for voice services (TTS + Whisper transcription)
3
+ * and vision services (video frame analysis).
4
+ *
5
+ * Separated from telegram.ts to maintain single responsibility:
6
+ * TelegramClient handles Telegram API, this module handles OpenAI API.
7
+ */
8
+ /** Valid TTS voice names. */
9
+ export declare const TTS_VOICES: readonly ["alloy", "echo", "fable", "onyx", "nova", "shimmer"];
10
+ export type TTSVoice = typeof TTS_VOICES[number];
11
+ /**
12
+ * Convert text to speech using OpenAI TTS API.
13
+ * Returns OGG Opus audio suitable for Telegram's sendVoice.
14
+ */
15
+ export declare function textToSpeech(text: string, apiKey: string, voice?: TTSVoice): Promise<Buffer>;
16
+ /**
17
+ * Transcribe an audio buffer using OpenAI Whisper API.
18
+ * @param audioBuffer Raw audio content (OGG Opus from Telegram voice messages).
19
+ * @param apiKey OpenAI API key.
20
+ * @returns The transcribed text (empty string if no speech detected).
21
+ */
22
+ export declare function transcribeAudio(audioBuffer: Buffer, apiKey: string, filename?: string): Promise<string>;
23
+ export interface AudioEvent {
24
+ label: string;
25
+ score: number;
26
+ }
27
+ export interface Paralinguistics {
28
+ speech_rate?: number;
29
+ mean_pitch_hz?: number;
30
+ pitch_std_hz?: number;
31
+ jitter?: number;
32
+ shimmer?: number;
33
+ hnr_db?: number;
34
+ }
35
+ export interface VoiceAnalysisResult {
36
+ emotion: string | null;
37
+ emotion_scores?: Record<string, number>;
38
+ arousal: number | null;
39
+ dominance: number | null;
40
+ valence: number | null;
41
+ gender: string | null;
42
+ age_estimate: number | null;
43
+ duration_seconds: number;
44
+ audio_events?: AudioEvent[];
45
+ paralinguistics?: Paralinguistics;
46
+ }
47
+ /**
48
+ * Analyze a voice message for emotion using an external microservice.
49
+ * @param audioBuffer Raw audio content (OGG).
50
+ * @param serviceUrl Base URL of the voice analysis service (e.g. https://voice-analysis.example.com).
51
+ * @param timeoutMs Request timeout in milliseconds (default: 15000).
52
+ * @returns Analysis result, or null if the service is unavailable or errors.
53
+ */
54
+ export declare function analyzeVoiceEmotion(audioBuffer: Buffer, serviceUrl: string, timeoutMs?: number): Promise<VoiceAnalysisResult | null>;
55
+ /**
56
+ * Extract key frames from a video buffer using ffmpeg.
57
+ * Pipes video via stdin and reads JPEG frames from stdout (no temp files).
58
+ * @param videoBuffer Raw video file content (MP4).
59
+ * @param durationSec Video duration in seconds (used to calculate interval).
60
+ * @returns Array of JPEG-encoded frame buffers.
61
+ */
62
+ export declare function extractVideoFrames(videoBuffer: Buffer, durationSec: number): Promise<Buffer[]>;
63
+ /**
64
+ * Analyze video frames using OpenAI GPT-5-mini vision.
65
+ * @param frames Array of JPEG frame buffers.
66
+ * @param durationSec Video duration for timestamp context.
67
+ * @param apiKey OpenAI API key.
68
+ * @returns Human-readable description of the video content.
69
+ */
70
+ export declare function analyzeVideoFrames(frames: Buffer[], durationSec: number, apiKey: string): Promise<string>;
71
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,6BAA6B;AAC7B,eAAO,MAAM,UAAU,gEAEb,CAAC;AACX,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;AAEjD;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,QAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAqBjB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACjC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAoB,GAC/B,OAAO,CAAC,MAAM,CAAC,CA6BjB;AAMD,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;CACrC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,SAAU,GACpB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAsCrC;AAyBD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAC9B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GACpB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACpC,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAmDjB"}
package/dist/openai.js ADDED
@@ -0,0 +1,221 @@
1
+ /**
2
+ * OpenAI API client for voice services (TTS + Whisper transcription)
3
+ * and vision services (video frame analysis).
4
+ *
5
+ * Separated from telegram.ts to maintain single responsibility:
6
+ * TelegramClient handles Telegram API, this module handles OpenAI API.
7
+ */
8
+ import { spawn } from "node:child_process";
9
+ /** Valid TTS voice names. */
10
+ export const TTS_VOICES = [
11
+ "alloy", "echo", "fable", "onyx", "nova", "shimmer",
12
+ ];
13
+ /**
14
+ * Convert text to speech using OpenAI TTS API.
15
+ * Returns OGG Opus audio suitable for Telegram's sendVoice.
16
+ */
17
+ export async function textToSpeech(text, apiKey, voice = "nova") {
18
+ const response = await fetch("https://api.openai.com/v1/audio/speech", {
19
+ method: "POST",
20
+ headers: {
21
+ "Content-Type": "application/json",
22
+ Authorization: `Bearer ${apiKey}`,
23
+ },
24
+ body: JSON.stringify({
25
+ model: "tts-1",
26
+ input: text,
27
+ voice,
28
+ response_format: "opus",
29
+ }),
30
+ });
31
+ if (!response.ok) {
32
+ const errText = await response.text().catch(() => response.statusText);
33
+ throw new Error(`OpenAI TTS failed: ${response.status} ${errText}`);
34
+ }
35
+ return Buffer.from(await response.arrayBuffer());
36
+ }
37
+ /**
38
+ * Transcribe an audio buffer using OpenAI Whisper API.
39
+ * @param audioBuffer Raw audio content (OGG Opus from Telegram voice messages).
40
+ * @param apiKey OpenAI API key.
41
+ * @returns The transcribed text (empty string if no speech detected).
42
+ */
43
+ export async function transcribeAudio(audioBuffer, apiKey, filename = "voice.ogg") {
44
+ // Telegram stores voice as .oga (OGG Opus). Whisper accepts .ogg but
45
+ // not .oga, so we hardcode the extension.
46
+ const formData = new FormData();
47
+ formData.append("file", new Blob([new Uint8Array(audioBuffer)]), filename);
48
+ formData.append("model", "whisper-1");
49
+ const response = await fetch("https://api.openai.com/v1/audio/transcriptions", {
50
+ method: "POST",
51
+ headers: { Authorization: `Bearer ${apiKey}` },
52
+ body: formData,
53
+ });
54
+ if (!response.ok) {
55
+ const errText = await response.text().catch(() => response.statusText);
56
+ throw new Error(`OpenAI Whisper transcription failed: ${response.status} ${errText}`);
57
+ }
58
+ const result = (await response.json());
59
+ return result.text ?? "";
60
+ }
61
+ /**
62
+ * Analyze a voice message for emotion using an external microservice.
63
+ * @param audioBuffer Raw audio content (OGG).
64
+ * @param serviceUrl Base URL of the voice analysis service (e.g. https://voice-analysis.example.com).
65
+ * @param timeoutMs Request timeout in milliseconds (default: 15000).
66
+ * @returns Analysis result, or null if the service is unavailable or errors.
67
+ */
68
+ export async function analyzeVoiceEmotion(audioBuffer, serviceUrl, timeoutMs = 120_000) {
69
+ const start = Date.now();
70
+ const baseUrl = serviceUrl.replace(/\/+$/, "");
71
+ process.stderr.write(`[voice-analysis] Starting analysis (timeout: ${timeoutMs}ms)...\n`);
72
+ const controller = new AbortController();
73
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
74
+ try {
75
+ const formData = new FormData();
76
+ formData.append("file", new Blob([new Uint8Array(audioBuffer)], { type: "audio/ogg" }), "voice.ogg");
77
+ const response = await fetch(`${baseUrl}/analyze`, {
78
+ method: "POST",
79
+ body: formData,
80
+ signal: controller.signal,
81
+ });
82
+ const elapsed = Date.now() - start;
83
+ if (!response.ok) {
84
+ process.stderr.write(`[voice-analysis] HTTP ${response.status} after ${elapsed}ms\n`);
85
+ return null;
86
+ }
87
+ const result = (await response.json());
88
+ process.stderr.write(`[voice-analysis] Success in ${elapsed}ms\n`);
89
+ return result;
90
+ }
91
+ catch (err) {
92
+ const elapsed = Date.now() - start;
93
+ const msg = err instanceof Error ? err.message : String(err);
94
+ process.stderr.write(`[voice-analysis] Failed after ${elapsed}ms: ${msg}\n`);
95
+ return null;
96
+ }
97
+ finally {
98
+ clearTimeout(timer);
99
+ }
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // Video Frame Analysis (GPT-5-mini vision)
103
+ // ---------------------------------------------------------------------------
104
+ /** Maximum number of frames to extract from a video. */
105
+ const MAX_FRAMES = 6;
106
+ /**
107
+ * Split a buffer of concatenated JPEG images by SOI marker (0xFFD8).
108
+ */
109
+ function splitJpegs(buf) {
110
+ const frames = [];
111
+ let start = 0;
112
+ for (let i = 2; i < buf.length - 1; i++) {
113
+ if (buf[i] === 0xFF && buf[i + 1] === 0xD8) {
114
+ frames.push(buf.subarray(start, i));
115
+ start = i;
116
+ }
117
+ }
118
+ if (start < buf.length)
119
+ frames.push(buf.subarray(start));
120
+ return frames.filter(f => f.length > 100); // drop tiny garbage
121
+ }
122
+ /**
123
+ * Extract key frames from a video buffer using ffmpeg.
124
+ * Pipes video via stdin and reads JPEG frames from stdout (no temp files).
125
+ * @param videoBuffer Raw video file content (MP4).
126
+ * @param durationSec Video duration in seconds (used to calculate interval).
127
+ * @returns Array of JPEG-encoded frame buffers.
128
+ */
129
+ export function extractVideoFrames(videoBuffer, durationSec) {
130
+ return new Promise((resolve, reject) => {
131
+ // Calculate frame interval: aim for ~1 frame every 5s, capped at MAX_FRAMES.
132
+ const interval = Math.max(1, Math.ceil(durationSec / MAX_FRAMES));
133
+ const args = [
134
+ "-i", "pipe:0",
135
+ "-vf", `fps=1/${interval}`,
136
+ "-c:v", "mjpeg",
137
+ "-f", "image2pipe",
138
+ "-q:v", "3",
139
+ "pipe:1",
140
+ ];
141
+ const proc = spawn("ffmpeg", args, {
142
+ stdio: ["pipe", "pipe", "pipe"],
143
+ });
144
+ const chunks = [];
145
+ const errChunks = [];
146
+ proc.stdout.on("data", (chunk) => chunks.push(chunk));
147
+ proc.stderr.on("data", (chunk) => errChunks.push(chunk));
148
+ // Kill ffmpeg if it hangs for more than 30 seconds.
149
+ const killTimer = setTimeout(() => proc.kill("SIGKILL"), 30_000);
150
+ proc.on("error", (err) => {
151
+ clearTimeout(killTimer);
152
+ reject(new Error(`ffmpeg not found or failed to start: ${err.message}`));
153
+ });
154
+ proc.on("close", (code) => {
155
+ clearTimeout(killTimer);
156
+ if (code !== 0) {
157
+ const stderr = Buffer.concat(errChunks).toString("utf8").slice(-500);
158
+ reject(new Error(`ffmpeg exited with code ${code}: ${stderr}`));
159
+ return;
160
+ }
161
+ const combined = Buffer.concat(chunks);
162
+ if (combined.length === 0) {
163
+ resolve([]);
164
+ return;
165
+ }
166
+ const frames = splitJpegs(combined).slice(0, MAX_FRAMES);
167
+ resolve(frames);
168
+ });
169
+ proc.stdin.on("error", () => { });
170
+ proc.stdin.write(videoBuffer);
171
+ proc.stdin.end();
172
+ });
173
+ }
174
+ /**
175
+ * Analyze video frames using OpenAI GPT-5-mini vision.
176
+ * @param frames Array of JPEG frame buffers.
177
+ * @param durationSec Video duration for timestamp context.
178
+ * @param apiKey OpenAI API key.
179
+ * @returns Human-readable description of the video content.
180
+ */
181
+ export async function analyzeVideoFrames(frames, durationSec, apiKey) {
182
+ if (frames.length === 0) {
183
+ return "(no frames could be extracted from the video)";
184
+ }
185
+ const interval = Math.max(1, Math.ceil(durationSec / MAX_FRAMES));
186
+ const timestamps = frames.map((_, i) => `${i * interval}s`).join(", ");
187
+ const content = [
188
+ {
189
+ type: "text",
190
+ text: `These are ${frames.length} sequential frames extracted from a ${durationSec}s video message at timestamps: [${timestamps}]. ` +
191
+ `Describe what is happening in the video concisely (2-3 sentences). ` +
192
+ `Note any people, actions, objects, movement, text, or scene changes.`,
193
+ },
194
+ ...frames.map((frame) => ({
195
+ type: "image_url",
196
+ image_url: {
197
+ url: `data:image/jpeg;base64,${frame.toString("base64")}`,
198
+ detail: "low", // circle videos are small (240-384px)
199
+ },
200
+ })),
201
+ ];
202
+ const response = await fetch("https://api.openai.com/v1/chat/completions", {
203
+ method: "POST",
204
+ headers: {
205
+ "Content-Type": "application/json",
206
+ Authorization: `Bearer ${apiKey}`,
207
+ },
208
+ body: JSON.stringify({
209
+ model: "gpt-5-mini",
210
+ messages: [{ role: "user", content }],
211
+ max_tokens: 300,
212
+ }),
213
+ });
214
+ if (!response.ok) {
215
+ const errText = await response.text().catch(() => response.statusText);
216
+ throw new Error(`OpenAI vision analysis failed: ${response.status} ${errText}`);
217
+ }
218
+ const result = (await response.json());
219
+ return result.choices?.[0]?.message?.content?.trim() ?? "(no description generated)";
220
+ }
221
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../src/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Scheduler for wake-up tasks.
3
+ *
4
+ * Supports two types of scheduled tasks:
5
+ * - Cron-based: fires at specific times (e.g. "0 9 * * *" = 9am daily)
6
+ * - Delay-based: fires after N minutes of operator silence
7
+ *
8
+ * Schedule state is persisted to disk per-thread so tasks survive restarts.
9
+ * The wait_for_instructions polling loop checks for due tasks on each timeout.
10
+ */
11
+ export interface ScheduledTask {
12
+ /** Unique task ID (auto-generated). */
13
+ id: string;
14
+ /** Thread ID this task is scoped to. */
15
+ threadId: number;
16
+ /** The prompt to inject when the task fires. */
17
+ prompt: string;
18
+ /** Human-readable label for the task. */
19
+ label: string;
20
+ /** When set, task fires after this many minutes of operator silence. */
21
+ afterIdleMinutes?: number;
22
+ /** When set, ISO 8601 timestamp for one-shot scheduled execution. */
23
+ runAt?: string;
24
+ /** When set, cron expression for recurring execution (minute hour day month weekday). */
25
+ cron?: string;
26
+ /** Timestamp of last execution (ISO string), for cron dedup. */
27
+ lastFiredAt?: string;
28
+ /** If true, the task is a one-shot and should be removed after firing. */
29
+ oneShot: boolean;
30
+ /** Creation timestamp (ISO string). */
31
+ createdAt: string;
32
+ }
33
+ export declare function loadSchedules(threadId: number): ScheduledTask[];
34
+ export declare function addSchedule(task: ScheduledTask): void;
35
+ export declare function removeSchedule(threadId: number, taskId: string): boolean;
36
+ /**
37
+ * Remove all scheduled tasks for a thread.
38
+ * Called when a Telegram topic is deleted.
39
+ */
40
+ export declare function purgeSchedules(threadId: number): void;
41
+ export declare function listSchedules(threadId: number): ScheduledTask[];
42
+ /**
43
+ * Generate a unique task ID.
44
+ */
45
+ export declare function generateTaskId(): string;
46
+ /**
47
+ * Check for due tasks and return the first one that should fire.
48
+ *
49
+ * @param threadId - Thread to check schedules for
50
+ * @param lastOperatorMessageAt - Timestamp of last operator message (for idle detection)
51
+ * @param hasNewMessages - Whether operator has sent messages since last check
52
+ * @returns The due task's prompt, or null if nothing is due
53
+ */
54
+ export declare function checkDueTasks(threadId: number, lastOperatorMessageAt: number, hasNewMessages: boolean): {
55
+ prompt: string;
56
+ task: ScheduledTask;
57
+ } | null;
58
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../src/scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,aAAa;IAC1B,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACrB;AAUD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAU/D;AAUD,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAIrD;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOxE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQrD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AA2BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CACzB,QAAQ,EAAE,MAAM,EAChB,qBAAqB,EAAE,MAAM,EAC7B,cAAc,EAAE,OAAO,GACxB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GAAG,IAAI,CAuFhD"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Scheduler for wake-up tasks.
3
+ *
4
+ * Supports two types of scheduled tasks:
5
+ * - Cron-based: fires at specific times (e.g. "0 9 * * *" = 9am daily)
6
+ * - Delay-based: fires after N minutes of operator silence
7
+ *
8
+ * Schedule state is persisted to disk per-thread so tasks survive restarts.
9
+ * The wait_for_instructions polling loop checks for due tasks on each timeout.
10
+ */
11
+ import { existsSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "fs";
12
+ import { homedir } from "os";
13
+ import { join } from "path";
14
+ const SCHEDULES_DIR = join(homedir(), ".remote-copilot-mcp", "schedules");
15
+ function schedulesFilePath(threadId) {
16
+ return join(SCHEDULES_DIR, `${threadId}.json`);
17
+ }
18
+ function ensureDir() {
19
+ mkdirSync(SCHEDULES_DIR, { recursive: true });
20
+ }
21
+ export function loadSchedules(threadId) {
22
+ ensureDir();
23
+ const file = schedulesFilePath(threadId);
24
+ try {
25
+ if (!existsSync(file))
26
+ return [];
27
+ const raw = readFileSync(file, "utf8");
28
+ return JSON.parse(raw);
29
+ }
30
+ catch {
31
+ return [];
32
+ }
33
+ }
34
+ function saveSchedules(threadId, tasks) {
35
+ ensureDir();
36
+ const file = schedulesFilePath(threadId);
37
+ const tmp = file + `.tmp.${process.pid}`;
38
+ writeFileSync(tmp, JSON.stringify(tasks, null, 2), "utf8");
39
+ renameSync(tmp, file);
40
+ }
41
+ export function addSchedule(task) {
42
+ const tasks = loadSchedules(task.threadId);
43
+ tasks.push(task);
44
+ saveSchedules(task.threadId, tasks);
45
+ }
46
+ export function removeSchedule(threadId, taskId) {
47
+ const tasks = loadSchedules(threadId);
48
+ const idx = tasks.findIndex(t => t.id === taskId);
49
+ if (idx === -1)
50
+ return false;
51
+ tasks.splice(idx, 1);
52
+ saveSchedules(threadId, tasks);
53
+ return true;
54
+ }
55
+ /**
56
+ * Remove all scheduled tasks for a thread.
57
+ * Called when a Telegram topic is deleted.
58
+ */
59
+ export function purgeSchedules(threadId) {
60
+ ensureDir();
61
+ const file = schedulesFilePath(threadId);
62
+ try {
63
+ unlinkSync(file);
64
+ }
65
+ catch {
66
+ // Already gone or never existed.
67
+ }
68
+ }
69
+ export function listSchedules(threadId) {
70
+ return loadSchedules(threadId);
71
+ }
72
+ /**
73
+ * Generate a unique task ID.
74
+ */
75
+ export function generateTaskId() {
76
+ return `task_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
77
+ }
78
+ /**
79
+ * Parse a simple cron expression (5 fields: minute hour day-of-month month day-of-week).
80
+ * Returns true if the given date matches the cron expression.
81
+ * Supports: *, specific numbers, and comma-separated lists.
82
+ * Does NOT support ranges (1-5) or steps (star/5) for simplicity.
83
+ */
84
+ function matchesCronField(field, value) {
85
+ if (field === "*")
86
+ return true;
87
+ const parts = field.split(",").map(s => s.trim());
88
+ return parts.some(p => Number(p) === value);
89
+ }
90
+ function matchesCron(cronExpr, date) {
91
+ const fields = cronExpr.trim().split(/\s+/);
92
+ if (fields.length !== 5)
93
+ return false;
94
+ const [minute, hour, dayOfMonth, month, dayOfWeek] = fields;
95
+ return (matchesCronField(minute, date.getMinutes()) &&
96
+ matchesCronField(hour, date.getHours()) &&
97
+ matchesCronField(dayOfMonth, date.getDate()) &&
98
+ matchesCronField(month, date.getMonth() + 1) &&
99
+ matchesCronField(dayOfWeek, date.getDay()));
100
+ }
101
+ /**
102
+ * Check for due tasks and return the first one that should fire.
103
+ *
104
+ * @param threadId - Thread to check schedules for
105
+ * @param lastOperatorMessageAt - Timestamp of last operator message (for idle detection)
106
+ * @param hasNewMessages - Whether operator has sent messages since last check
107
+ * @returns The due task's prompt, or null if nothing is due
108
+ */
109
+ export function checkDueTasks(threadId, lastOperatorMessageAt, hasNewMessages) {
110
+ const tasks = loadSchedules(threadId);
111
+ if (tasks.length === 0)
112
+ return null;
113
+ const now = new Date();
114
+ let modified = false;
115
+ for (const task of tasks) {
116
+ // --- One-shot at specific time ---
117
+ if (task.runAt) {
118
+ const runAtDate = new Date(task.runAt);
119
+ if (now >= runAtDate) {
120
+ // If operator has new messages, reschedule by 5 minutes
121
+ if (hasNewMessages) {
122
+ task.runAt = new Date(now.getTime() + 5 * 60000).toISOString();
123
+ modified = true;
124
+ continue;
125
+ }
126
+ task.lastFiredAt = now.toISOString();
127
+ if (task.oneShot) {
128
+ const idx = tasks.indexOf(task);
129
+ tasks.splice(idx, 1);
130
+ }
131
+ modified = true;
132
+ saveSchedules(threadId, tasks);
133
+ return { prompt: task.prompt, task };
134
+ }
135
+ }
136
+ // --- Cron-based recurring ---
137
+ if (task.cron) {
138
+ if (matchesCron(task.cron, now)) {
139
+ // Dedup: don't fire again within the same minute
140
+ if (task.lastFiredAt) {
141
+ const lastFired = new Date(task.lastFiredAt);
142
+ if (lastFired.getMinutes() === now.getMinutes() &&
143
+ lastFired.getHours() === now.getHours() &&
144
+ lastFired.getDate() === now.getDate() &&
145
+ lastFired.getMonth() === now.getMonth() &&
146
+ lastFired.getFullYear() === now.getFullYear()) {
147
+ continue; // Already fired this minute
148
+ }
149
+ }
150
+ if (hasNewMessages) {
151
+ // Operator is active — skip this fire, it'll try next matching minute
152
+ continue;
153
+ }
154
+ task.lastFiredAt = now.toISOString();
155
+ modified = true;
156
+ saveSchedules(threadId, tasks);
157
+ return { prompt: task.prompt, task };
158
+ }
159
+ }
160
+ // --- Idle-based (fire after N minutes of silence) ---
161
+ if (task.afterIdleMinutes != null) {
162
+ const idleMs = now.getTime() - lastOperatorMessageAt;
163
+ const thresholdMs = task.afterIdleMinutes * 60000;
164
+ if (idleMs >= thresholdMs) {
165
+ // Dedup: don't fire again while operator remains idle.
166
+ // Only re-fire if operator spoke AFTER the last fire (i.e.
167
+ // lastFiredAt is before lastOperatorMessageAt, meaning a new
168
+ // idle period has started).
169
+ if (task.lastFiredAt) {
170
+ const lastFired = new Date(task.lastFiredAt).getTime();
171
+ if (lastFired > lastOperatorMessageAt) {
172
+ continue; // Already fired in this idle period
173
+ }
174
+ }
175
+ if (hasNewMessages) {
176
+ // Reset — operator just spoke, so idle counter restarts
177
+ continue;
178
+ }
179
+ task.lastFiredAt = now.toISOString();
180
+ modified = true;
181
+ saveSchedules(threadId, tasks);
182
+ return { prompt: task.prompt, task };
183
+ }
184
+ }
185
+ }
186
+ if (modified) {
187
+ saveSchedules(threadId, tasks);
188
+ }
189
+ return null;
190
+ }
191
+ //# sourceMappingURL=scheduler.js.map