sensorium-mcp 3.1.3 → 3.1.5
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/Install-Sensorium.ps1 +251 -39
- package/dist/config/agent-settings.d.ts +11 -0
- package/dist/config/agent-settings.d.ts.map +1 -1
- package/dist/config/agent-settings.js +79 -0
- package/dist/config/agent-settings.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/misc-settings.d.ts +7 -0
- package/dist/config/misc-settings.d.ts.map +1 -1
- package/dist/config/misc-settings.js +38 -1
- package/dist/config/misc-settings.js.map +1 -1
- package/dist/dashboard/routes/codex.d.ts +14 -0
- package/dist/dashboard/routes/codex.d.ts.map +1 -0
- package/dist/dashboard/routes/codex.js +92 -0
- package/dist/dashboard/routes/codex.js.map +1 -0
- package/dist/dashboard/routes/prompts.d.ts +2 -2
- package/dist/dashboard/routes/prompts.d.ts.map +1 -1
- package/dist/dashboard/routes/prompts.js +2 -2
- package/dist/dashboard/routes/prompts.js.map +1 -1
- package/dist/dashboard/routes/threads-read.d.ts +10 -7
- package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-read.js +21 -16
- package/dist/dashboard/routes/threads-read.js.map +1 -1
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +3 -0
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/spa.html +11 -11
- package/dist/data/memory/bootstrap.d.ts +1 -8
- package/dist/data/memory/bootstrap.d.ts.map +1 -1
- package/dist/data/memory/bootstrap.js +27 -37
- package/dist/data/memory/bootstrap.js.map +1 -1
- package/dist/data/memory/consolidation.d.ts +20 -1
- package/dist/data/memory/consolidation.d.ts.map +1 -1
- package/dist/data/memory/consolidation.js +53 -3
- package/dist/data/memory/consolidation.js.map +1 -1
- package/dist/data/memory/index.d.ts +0 -4
- package/dist/data/memory/index.d.ts.map +1 -1
- package/dist/data/memory/index.js +0 -4
- package/dist/data/memory/index.js.map +1 -1
- package/dist/data/memory/key-knowledge.d.ts +51 -0
- package/dist/data/memory/key-knowledge.d.ts.map +1 -0
- package/dist/data/memory/key-knowledge.js +128 -0
- package/dist/data/memory/key-knowledge.js.map +1 -0
- package/dist/data/memory/migration-runner.d.ts +1 -1
- package/dist/data/memory/migration-runner.d.ts.map +1 -1
- package/dist/data/memory/migration-runner.js +23 -1
- package/dist/data/memory/migration-runner.js.map +1 -1
- package/dist/data/memory/narrative-lint.d.ts +2 -2
- package/dist/data/memory/narrative-lint.d.ts.map +1 -1
- package/dist/data/memory/narrative-lint.js +23 -13
- package/dist/data/memory/narrative-lint.js.map +1 -1
- package/dist/data/memory/narrative-resolutions.d.ts +7 -2
- package/dist/data/memory/narrative-resolutions.d.ts.map +1 -1
- package/dist/data/memory/narrative-resolutions.js +7 -8
- package/dist/data/memory/narrative-resolutions.js.map +1 -1
- package/dist/data/memory/narrative-sources.d.ts +1 -1
- package/dist/data/memory/narrative-sources.d.ts.map +1 -1
- package/dist/data/memory/narrative-sources.js +8 -3
- package/dist/data/memory/narrative-sources.js.map +1 -1
- package/dist/data/memory/narrative-store.d.ts +14 -0
- package/dist/data/memory/narrative-store.d.ts.map +1 -1
- package/dist/data/memory/narrative-store.js +36 -0
- package/dist/data/memory/narrative-store.js.map +1 -1
- package/dist/data/memory/narrative.d.ts.map +1 -1
- package/dist/data/memory/narrative.js +47 -29
- package/dist/data/memory/narrative.js.map +1 -1
- package/dist/data/memory/note-archival.d.ts +1 -1
- package/dist/data/memory/note-archival.d.ts.map +1 -1
- package/dist/data/memory/note-archival.js +7 -3
- package/dist/data/memory/note-archival.js.map +1 -1
- package/dist/data/memory/note-embeddings.d.ts +7 -0
- package/dist/data/memory/note-embeddings.d.ts.map +1 -1
- package/dist/data/memory/note-embeddings.js +6 -2
- package/dist/data/memory/note-embeddings.js.map +1 -1
- package/dist/data/memory/schema-ddl.d.ts +1 -1
- package/dist/data/memory/schema-ddl.d.ts.map +1 -1
- package/dist/data/memory/schema-ddl.js +3 -1
- package/dist/data/memory/schema-ddl.js.map +1 -1
- package/dist/data/memory/semantic-notes.d.ts +13 -8
- package/dist/data/memory/semantic-notes.d.ts.map +1 -1
- package/dist/data/memory/semantic-notes.js +12 -17
- package/dist/data/memory/semantic-notes.js.map +1 -1
- package/dist/data/memory/thread-registry.d.ts +7 -1
- package/dist/data/memory/thread-registry.d.ts.map +1 -1
- package/dist/data/memory/thread-registry.js +14 -5
- package/dist/data/memory/thread-registry.js.map +1 -1
- package/dist/data/memory/utils.d.ts +6 -0
- package/dist/data/memory/utils.d.ts.map +1 -1
- package/dist/data/memory/utils.js +13 -0
- package/dist/data/memory/utils.js.map +1 -1
- package/dist/integrations/openai/speech.js +4 -4
- package/dist/integrations/openai/speech.js.map +1 -1
- package/dist/lib/http-retry.d.ts +91 -0
- package/dist/lib/http-retry.d.ts.map +1 -0
- package/dist/lib/http-retry.js +177 -0
- package/dist/lib/http-retry.js.map +1 -0
- package/dist/lib/usage-metering/pricing.js +1 -1
- package/dist/lib/usage-metering/pricing.js.map +1 -1
- package/dist/llm/prompts/narrative.d.ts.map +1 -1
- package/dist/llm/prompts/narrative.js +27 -86
- package/dist/llm/prompts/narrative.js.map +1 -1
- package/dist/services/claude-spawn.service.d.ts.map +1 -1
- package/dist/services/claude-spawn.service.js +6 -1
- package/dist/services/claude-spawn.service.js.map +1 -1
- package/dist/services/codex-spawn.service.d.ts +2 -2
- package/dist/services/codex-spawn.service.d.ts.map +1 -1
- package/dist/services/codex-spawn.service.js +64 -58
- package/dist/services/codex-spawn.service.js.map +1 -1
- package/dist/services/consolidation.service.d.ts.map +1 -1
- package/dist/services/consolidation.service.js +10 -43
- package/dist/services/consolidation.service.js.map +1 -1
- package/dist/services/copilot-spawn.service.d.ts.map +1 -1
- package/dist/services/copilot-spawn.service.js +6 -1
- package/dist/services/copilot-spawn.service.js.map +1 -1
- package/dist/services/daily-session.d.ts +22 -11
- package/dist/services/daily-session.d.ts.map +1 -1
- package/dist/services/daily-session.js +69 -24
- package/dist/services/daily-session.js.map +1 -1
- package/dist/services/dispatcher/poller.d.ts.map +1 -1
- package/dist/services/dispatcher/poller.js +8 -15
- package/dist/services/dispatcher/poller.js.map +1 -1
- package/dist/services/http-retry.d.ts +1 -90
- package/dist/services/http-retry.d.ts.map +1 -1
- package/dist/services/http-retry.js +1 -176
- package/dist/services/http-retry.js.map +1 -1
- package/dist/services/mcp-config.service.d.ts.map +1 -1
- package/dist/services/mcp-config.service.js +14 -1
- package/dist/services/mcp-config.service.js.map +1 -1
- package/dist/services/memory-briefing.service.d.ts +1 -1
- package/dist/services/memory-briefing.service.d.ts.map +1 -1
- package/dist/services/memory-briefing.service.js +27 -73
- package/dist/services/memory-briefing.service.js.map +1 -1
- package/dist/services/memory-pruning.service.d.ts.map +1 -1
- package/dist/services/memory-pruning.service.js +22 -4
- package/dist/services/memory-pruning.service.js.map +1 -1
- package/dist/services/predefined-prompts.d.ts +11 -0
- package/dist/services/predefined-prompts.d.ts.map +1 -0
- package/dist/services/predefined-prompts.js +25 -0
- package/dist/services/predefined-prompts.js.map +1 -0
- package/dist/services/spawn-common.d.ts +10 -2
- package/dist/services/spawn-common.d.ts.map +1 -1
- package/dist/services/spawn-common.js +25 -4
- package/dist/services/spawn-common.js.map +1 -1
- package/dist/services/telegram.d.ts +7 -5
- package/dist/services/telegram.d.ts.map +1 -1
- package/dist/services/telegram.js +18 -13
- package/dist/services/telegram.js.map +1 -1
- package/dist/sessions/mcp-registry.d.ts +7 -2
- package/dist/sessions/mcp-registry.d.ts.map +1 -1
- package/dist/sessions/mcp-registry.js +52 -30
- package/dist/sessions/mcp-registry.js.map +1 -1
- package/dist/tools/defs/memory-defs.d.ts.map +1 -1
- package/dist/tools/defs/memory-defs.js +4 -0
- package/dist/tools/defs/memory-defs.js.map +1 -1
- package/dist/tools/delegate-tool.js +2 -2
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +9 -1
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/start-session-tool.d.ts.map +1 -1
- package/dist/tools/start-session-tool.js +13 -1
- package/dist/tools/start-session-tool.js.map +1 -1
- package/dist/tools/wait/consolidation-strategy.d.ts +42 -0
- package/dist/tools/wait/consolidation-strategy.d.ts.map +1 -0
- package/dist/tools/wait/consolidation-strategy.js +50 -0
- package/dist/tools/wait/consolidation-strategy.js.map +1 -0
- package/dist/tools/wait/drive-handler.d.ts +5 -7
- package/dist/tools/wait/drive-handler.d.ts.map +1 -1
- package/dist/tools/wait/drive-handler.js +45 -59
- package/dist/tools/wait/drive-handler.js.map +1 -1
- package/dist/tools/wait/message-delivery.d.ts.map +1 -1
- package/dist/tools/wait/message-delivery.js +4 -21
- package/dist/tools/wait/message-delivery.js.map +1 -1
- package/dist/tools/wait/message-processing.d.ts.map +1 -1
- package/dist/tools/wait/message-processing.js +2 -1
- package/dist/tools/wait/message-processing.js.map +1 -1
- package/dist/tools/wait/poll-loop.d.ts.map +1 -1
- package/dist/tools/wait/poll-loop.js +8 -8
- package/dist/tools/wait/poll-loop.js.map +1 -1
- package/package.json +1 -1
- package/templates/increment-pr-pipeline.default.md +79 -0
- package/dist/data/memory/reflection-dedup.d.ts +0 -17
- package/dist/data/memory/reflection-dedup.d.ts.map +0 -1
- package/dist/data/memory/reflection-dedup.js +0 -55
- package/dist/data/memory/reflection-dedup.js.map +0 -1
- package/dist/data/memory/reflection-gates.d.ts +0 -40
- package/dist/data/memory/reflection-gates.d.ts.map +0 -1
- package/dist/data/memory/reflection-gates.js +0 -220
- package/dist/data/memory/reflection-gates.js.map +0 -1
- package/dist/data/memory/reflection-sources.d.ts +0 -13
- package/dist/data/memory/reflection-sources.d.ts.map +0 -1
- package/dist/data/memory/reflection-sources.js +0 -115
- package/dist/data/memory/reflection-sources.js.map +0 -1
- package/dist/data/memory/reflection.d.ts +0 -43
- package/dist/data/memory/reflection.d.ts.map +0 -1
- package/dist/data/memory/reflection.js +0 -329
- package/dist/data/memory/reflection.js.map +0 -1
- package/dist/llm/prompts/reflection.d.ts +0 -6
- package/dist/llm/prompts/reflection.d.ts.map +0 -1
- package/dist/llm/prompts/reflection.js +0 -77
- package/dist/llm/prompts/reflection.js.map +0 -1
|
@@ -1,26 +1,35 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Daily Session Rotation
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Runs the nightly (4 AM) memory-integrity pass for EVERY non-worker thread:
|
|
5
|
+
* consolidate episodes → run narratives → advance `session_reset_at`.
|
|
6
|
+
* This is unconditional — memory hygiene is required by all threads, not just
|
|
7
|
+
* those opted into rotation. Workers are excluded (their memory is no-persist).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Separately, threads that opt in via the `daily_rotation` flag are ALSO
|
|
10
|
+
* force-restarted after their memory pass: the running CLI process is killed so
|
|
11
|
+
* the keeper respawns a fresh session. `session_reset_at` already advanced the
|
|
12
|
+
* episode-window boundary, so the fresh session cold-starts on a clean context
|
|
13
|
+
* rehydrated from its normal briefing — deliberately WITHOUT any "reconstruct
|
|
14
|
+
* the context / re-read episodes" instruction (that removed clean_shutdown
|
|
15
|
+
* anti-pattern caused over-reading on every restart). A scheduled rotation is an
|
|
16
|
+
* EXPECTED event, so the fresh session simply continues from its briefing.
|
|
17
|
+
*
|
|
18
|
+
* Only keepAlive threads are restarted, because only they are respawned by the
|
|
19
|
+
* keeper; a non-keepAlive thread would just die.
|
|
13
20
|
*/
|
|
14
21
|
import { log } from "../lib/logger.js";
|
|
15
|
-
import {
|
|
22
|
+
import { getConsolidationThreads, getThread, purgeOldArchivedThreads, resetDailySession, resolveTelegramTopicId, } from "../data/memory/thread-registry.js";
|
|
16
23
|
import { runNarrativeGeneration } from "../data/memory/narrative.js";
|
|
17
|
-
import { runReflection } from "../data/memory/reflection.js";
|
|
18
24
|
import { initMemoryDb } from "../data/memory/schema.js";
|
|
19
25
|
import { config } from "../config/index.js";
|
|
20
26
|
import { runIntelligentConsolidation } from "./consolidation.service.js";
|
|
21
27
|
import { errorMessage } from "../lib/utils.js";
|
|
22
28
|
import { sendTelegramMessage } from "./telegram.js";
|
|
23
29
|
import { hasRunToday, markRanToday, dailyKey } from "../data/daily-marker.js";
|
|
30
|
+
import { clearThreadHeartbeat } from "../data/file-storage.js";
|
|
31
|
+
import { killThreadTree, readPidFiles, isThreadAlive } from "./process.service.js";
|
|
32
|
+
import { purgeOtherSessions } from "../sessions/mcp-registry.js";
|
|
24
33
|
// ─── Telegram notification ───────────────────────────────────────────────────
|
|
25
34
|
async function notifyTelegram(db, text, threadId) {
|
|
26
35
|
const { TELEGRAM_TOKEN, TELEGRAM_CHAT_ID } = config;
|
|
@@ -49,7 +58,7 @@ async function notifyTelegram(db, text, threadId) {
|
|
|
49
58
|
/**
|
|
50
59
|
* Rotate a single root thread's daily session.
|
|
51
60
|
* 1. Run consolidation (distill episodes into knowledge)
|
|
52
|
-
* 2. Run
|
|
61
|
+
* 2. Run narrative generation (best-effort)
|
|
53
62
|
* 3. Update session_reset_at on the thread_registry row
|
|
54
63
|
*/
|
|
55
64
|
export async function rotateDailySession(rootThreadId, db) {
|
|
@@ -60,6 +69,7 @@ export async function rotateDailySession(rootThreadId, db) {
|
|
|
60
69
|
previousSessionResetAt: null,
|
|
61
70
|
newSessionResetAt: now,
|
|
62
71
|
consolidated: false,
|
|
72
|
+
restarted: false,
|
|
63
73
|
};
|
|
64
74
|
try {
|
|
65
75
|
// Capture current session_reset_at before overwriting
|
|
@@ -79,13 +89,7 @@ export async function rotateDailySession(rootThreadId, db) {
|
|
|
79
89
|
catch (err) {
|
|
80
90
|
log.error(`Consolidation failed during daily rotation: ${errorMessage(err)}`);
|
|
81
91
|
}
|
|
82
|
-
// 2. Run
|
|
83
|
-
try {
|
|
84
|
-
await runReflection(activeDb, rootThreadId);
|
|
85
|
-
}
|
|
86
|
-
catch (err) {
|
|
87
|
-
log.warn(`Reflection failed during daily rotation for root ${rootThreadId}: ${errorMessage(err)}`);
|
|
88
|
-
}
|
|
92
|
+
// 2. Run narrative generation (best-effort, non-blocking)
|
|
89
93
|
try {
|
|
90
94
|
await runNarrativeGeneration(activeDb, rootThreadId);
|
|
91
95
|
}
|
|
@@ -108,8 +112,10 @@ export async function rotateDailySession(rootThreadId, db) {
|
|
|
108
112
|
// ─── Rotate all ──────────────────────────────────────────────────────────────
|
|
109
113
|
let _rotating = false;
|
|
110
114
|
/**
|
|
111
|
-
*
|
|
112
|
-
* Called from the
|
|
115
|
+
* Run the nightly memory pass for every non-worker thread, and force-restart the
|
|
116
|
+
* subset that opted into `daily_rotation`. Called from the background runner on a
|
|
117
|
+
* schedule (4 AM). Idempotent per day via the daily marker and per-thread via
|
|
118
|
+
* session_reset_at, so a late or repeated call is safe.
|
|
113
119
|
*/
|
|
114
120
|
export async function rotateAllDailySessions() {
|
|
115
121
|
const todayDate = dailyKey();
|
|
@@ -124,11 +130,11 @@ export async function rotateAllDailySessions() {
|
|
|
124
130
|
return [];
|
|
125
131
|
}
|
|
126
132
|
_rotating = true;
|
|
127
|
-
// Claim the day UP FRONT so a restart mid-rotation skips on next boot.
|
|
128
|
-
markRanToday("daily-rotation");
|
|
129
133
|
const db = initMemoryDb();
|
|
130
134
|
try {
|
|
131
|
-
|
|
135
|
+
// Nightly memory pass runs for ALL non-worker threads (memory integrity),
|
|
136
|
+
// regardless of the daily_rotation restart opt-in.
|
|
137
|
+
const threads = getConsolidationThreads(db);
|
|
132
138
|
const results = [];
|
|
133
139
|
// Collect threads that need rotation
|
|
134
140
|
const pending = threads.filter((thread) => {
|
|
@@ -147,6 +153,13 @@ export async function rotateAllDailySessions() {
|
|
|
147
153
|
}
|
|
148
154
|
for (const thread of pending) {
|
|
149
155
|
const result = await rotateDailySession(thread.threadId, db);
|
|
156
|
+
// daily_rotation opt-in: after the memory pass, force a fresh session by
|
|
157
|
+
// killing the CLI process so the keeper respawns it. Only keepAlive threads
|
|
158
|
+
// are respawned by the keeper, and only restart once the memory pass
|
|
159
|
+
// actually advanced the session_reset_at boundary.
|
|
160
|
+
if (result.consolidated && thread.dailyRotation && thread.keepAlive) {
|
|
161
|
+
result.restarted = await forceRestartThread(thread);
|
|
162
|
+
}
|
|
150
163
|
results.push(result);
|
|
151
164
|
}
|
|
152
165
|
// Purge archived threads older than 6 months
|
|
@@ -160,12 +173,16 @@ export async function rotateAllDailySessions() {
|
|
|
160
173
|
catch (err) {
|
|
161
174
|
log.error(`[daily-rotation] Archived thread purge failed: ${errorMessage(err)}`);
|
|
162
175
|
}
|
|
176
|
+
// Claim the day only AFTER the batch completed. If the process crashes
|
|
177
|
+
// mid-rotation, the day is NOT marked done, so the next boot retries the
|
|
178
|
+
// unfinished threads (per-thread work is idempotent via session_reset_at).
|
|
179
|
+
markRanToday("daily-rotation");
|
|
163
180
|
// Send summary
|
|
164
181
|
if (results.length > 0 || purged > 0) {
|
|
165
182
|
const lines = results.map((r) => {
|
|
166
183
|
if (r.error)
|
|
167
184
|
return `❌ ${r.rootThreadId}: ${r.error}`;
|
|
168
|
-
return `✅ ${r.rootThreadId}: consolidated=${r.consolidated}`;
|
|
185
|
+
return `✅ ${r.rootThreadId}: consolidated=${r.consolidated}, restarted=${r.restarted}`;
|
|
169
186
|
});
|
|
170
187
|
if (purged > 0)
|
|
171
188
|
lines.push(`🗑 Purged ${purged} archived thread(s) older than 180 days`);
|
|
@@ -179,4 +196,32 @@ export async function rotateAllDailySessions() {
|
|
|
179
196
|
_rotating = false;
|
|
180
197
|
}
|
|
181
198
|
}
|
|
199
|
+
// ─── Force restart ───────────────────────────────────────────────────────────
|
|
200
|
+
/**
|
|
201
|
+
* Kill a thread's running CLI process so the keeper respawns a fresh session.
|
|
202
|
+
* The memory pass already advanced session_reset_at, so the respawn cold-starts
|
|
203
|
+
* on a clean context from the thread's normal briefing. Returns true when a live
|
|
204
|
+
* process was found and a kill was issued.
|
|
205
|
+
*/
|
|
206
|
+
async function forceRestartThread(thread) {
|
|
207
|
+
const pidEntry = readPidFiles().find((e) => e.threadId === thread.threadId);
|
|
208
|
+
if (!pidEntry || !(await isThreadAlive(thread.threadId, pidEntry.pid, pidEntry.startedAt))) {
|
|
209
|
+
log.info(`[daily-rotation] Thread ${thread.threadId} has no live process — skipping restart (keeper respawns keepAlive threads on its own).`);
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
try {
|
|
213
|
+
// This is control-plane teardown, not an operator message: it creates no
|
|
214
|
+
// episode. Superseding an in-flight wait loop prevents it from consuming
|
|
215
|
+
// inbox messages or keeping a dead agent alive via heartbeat writes.
|
|
216
|
+
const closedSessions = purgeOtherSessions(thread.threadId);
|
|
217
|
+
clearThreadHeartbeat(thread.threadId);
|
|
218
|
+
await killThreadTree(thread.threadId, "daily-rotation", pidEntry.pid, pidEntry.startedAt);
|
|
219
|
+
log.info(`[daily-rotation] Retired ${closedSessions} MCP session(s) and killed thread ${thread.threadId} (${thread.name}) for scheduled rotation — keeper will respawn a fresh session.`);
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
log.error(`[daily-rotation] Force restart failed for thread ${thread.threadId}: ${errorMessage(err)}`);
|
|
224
|
+
return false;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
182
227
|
//# sourceMappingURL=daily-session.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daily-session.js","sourceRoot":"","sources":["../../src/services/daily-session.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"daily-session.js","sourceRoot":"","sources":["../../src/services/daily-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../../src/services/dispatcher/poller.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../../src/services/dispatcher/poller.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAyB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAoZ5E;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+HhG"}
|
|
@@ -12,6 +12,7 @@ import { abortableDelay, computeBackoffMs } from "../http-retry.js";
|
|
|
12
12
|
import { appendToThread, ensureDirs, injectOperatorMessage, OFFSET_FILE, readOffset, resolveThreadForTopic, writeOffset, writeReactionFile, } from "./broker.js";
|
|
13
13
|
// ── /mode + /prompts commands: handled specially (side-effect / keyboard) ──
|
|
14
14
|
import { getPredefinedPrompts, setThreadConversationMode, grantDetailWindow, revokeDetailGrant, DETAIL_GRANT_MINUTES, } from "../../config/index.js";
|
|
15
|
+
import { sendPredefinedPromptsKeyboard } from "../predefined-prompts.js";
|
|
15
16
|
import { registerTopic } from "../../sessions/topic-registry.js";
|
|
16
17
|
import { readLock, refreshLock, removeLock, tryAcquireLock, tryAcquireLockWithRetry, } from "./lock.js";
|
|
17
18
|
const MODE_PATTERN = /^\/mode\s+(concise|voice)\s*$/i;
|
|
@@ -23,6 +24,7 @@ const DETAIL_ON_PATTERN = /^\/detail(?:ed)?\s*$/i;
|
|
|
23
24
|
// Intentionally exact-match, never a "contains" test — a stray "/prompts"
|
|
24
25
|
// inside a longer sentence must reach the agent as normal text.
|
|
25
26
|
const PROMPTS_PATTERN = /^\/prompts(@[A-Za-z0-9_]+)?$/i;
|
|
27
|
+
const STARTUP_PATTERN = /^\/startup(@[A-Za-z0-9_]+)?$/i;
|
|
26
28
|
const PROMPT_CALLBACK_PREFIX = "pp:";
|
|
27
29
|
// ---------------------------------------------------------------------------
|
|
28
30
|
// Constants
|
|
@@ -56,17 +58,6 @@ const poller = {
|
|
|
56
58
|
* predefined prompts as one inline button per row. The command itself is never
|
|
57
59
|
* forwarded to the agent — this is a pure UI affordance.
|
|
58
60
|
*/
|
|
59
|
-
async function sendPromptsKeyboard(telegram, chatId, rawTopicId) {
|
|
60
|
-
const prompts = getPredefinedPrompts();
|
|
61
|
-
if (prompts.length === 0) {
|
|
62
|
-
await telegram.sendInlineKeyboard(chatId, "No predefined prompts configured yet. Add them in the dashboard Prompts tab.", [], rawTopicId);
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
const keyboard = prompts.map((p, i) => [
|
|
66
|
-
{ text: p.label, callback_data: `${PROMPT_CALLBACK_PREFIX}${i}` },
|
|
67
|
-
]);
|
|
68
|
-
await telegram.sendInlineKeyboard(chatId, "Choose a prompt:", keyboard, rawTopicId);
|
|
69
|
-
}
|
|
70
61
|
/**
|
|
71
62
|
* A prompt button was pressed. Inject the selected prompt's text into the
|
|
72
63
|
* button's own thread (operator-shaped) and acknowledge the callback. The
|
|
@@ -233,13 +224,15 @@ async function pollOnce(telegram, chatId) {
|
|
|
233
224
|
}
|
|
234
225
|
const rawTopicId = u.message.message_thread_id;
|
|
235
226
|
const threadId = rawTopicId != null ? resolveThreadForTopic(rawTopicId) : "general";
|
|
236
|
-
// ── /prompts: intercept verbatim, reply with buttons
|
|
237
|
-
|
|
227
|
+
// ── /prompts and /startup: intercept verbatim, reply with buttons ────
|
|
228
|
+
const command = m.text?.trim();
|
|
229
|
+
if (command && (PROMPTS_PATTERN.test(command) || STARTUP_PATTERN.test(command))) {
|
|
238
230
|
try {
|
|
239
|
-
|
|
231
|
+
const startupOnly = STARTUP_PATTERN.test(command);
|
|
232
|
+
await sendPredefinedPromptsKeyboard(telegram, chatId, rawTopicId, startupOnly);
|
|
240
233
|
}
|
|
241
234
|
catch (err) {
|
|
242
|
-
log.error(`[dispatcher]
|
|
235
|
+
log.error(`[dispatcher] prompt keyboard send failed: ${errorMessage(err)}`);
|
|
243
236
|
}
|
|
244
237
|
committedOffset = u.update_id + 1;
|
|
245
238
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../../src/services/dispatcher/poller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../../src/services/dispatcher/poller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,91 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Transient HTTP retry policy.
|
|
3
|
-
*
|
|
4
|
-
* Centralizes the "retry on transient failure" behavior so it can be applied at
|
|
5
|
-
* a single choke point per call site rather than scattered across every request
|
|
6
|
-
* method. It is deliberately PURE: it knows nothing about the Telegram bot token
|
|
7
|
-
* or any other caller secret, so it never risks leaking one. Token redaction and
|
|
8
|
-
* response-body interpretation stay the caller's responsibility.
|
|
9
|
-
*
|
|
10
|
-
* WHY this exists: operators may point TELEGRAM_API_BASE_URL at an nginx reverse
|
|
11
|
-
* proxy or Azure gateway. Those proxies answer with 504 Gateway Timeout (or
|
|
12
|
-
* 502/503) instead of a normal Telegram JSON payload. Without retries a single
|
|
13
|
-
* proxy hiccup drops an operator notification or spins the long-poll loop; a
|
|
14
|
-
* bounded, jittered retry smooths over the transient blips.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* HTTP status codes that indicate a TRANSIENT failure — the request may well
|
|
18
|
-
* succeed if retried after a short pause:
|
|
19
|
-
* 408 Request Timeout, 429 Too Many Requests,
|
|
20
|
-
* 500 Internal Server Error, 502 Bad Gateway,
|
|
21
|
-
* 503 Service Unavailable, 504 Gateway Timeout.
|
|
22
|
-
*
|
|
23
|
-
* Every other 4xx is PERMANENT (bad request, unauthorized, not found, …) and is
|
|
24
|
-
* never retried — retrying it only wastes time and risks duplicate side effects.
|
|
25
|
-
*/
|
|
26
|
-
export declare const TRANSIENT_STATUS: ReadonlySet<number>;
|
|
27
|
-
/** True when `status` is in the transient (retryable) set. */
|
|
28
|
-
export declare function isTransientStatus(status: number): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Parse the `Retry-After` response header into milliseconds.
|
|
31
|
-
*
|
|
32
|
-
* Per RFC 9110 the value is either a number of seconds (`Retry-After: 120`) or
|
|
33
|
-
* an HTTP-date (`Retry-After: Wed, 21 Oct 2026 07:28:00 GMT`). Returns
|
|
34
|
-
* `undefined` when the header is absent or unparseable, and clamps any positive
|
|
35
|
-
* result to {@link RETRY_AFTER_MAX_MS}. A date in the past yields `0`.
|
|
36
|
-
*/
|
|
37
|
-
export declare function parseRetryAfterMs(response: Response): number | undefined;
|
|
38
|
-
/** Tunables for {@link computeBackoffMs} / {@link fetchWithRetry}. */
|
|
39
|
-
export interface RetryPolicy {
|
|
40
|
-
/** Total number of attempts (1 = no retry). */
|
|
41
|
-
maxAttempts: number;
|
|
42
|
-
/** Base delay for the first backoff step, in ms. */
|
|
43
|
-
baseMs: number;
|
|
44
|
-
/** Hard ceiling for any single backoff wait, in ms. */
|
|
45
|
-
capMs: number;
|
|
46
|
-
}
|
|
47
|
-
/** Sensible default: 3 attempts, 500ms base, 8s cap. */
|
|
48
|
-
export declare const DEFAULT_RETRY_POLICY: RetryPolicy;
|
|
49
|
-
/**
|
|
50
|
-
* Exponential backoff with FULL jitter.
|
|
51
|
-
*
|
|
52
|
-
* The deterministic component is `baseMs * 2^attempt`, capped at `capMs`. We
|
|
53
|
-
* then draw a uniformly random value in `[0, capped]` (the "full jitter"
|
|
54
|
-
* strategy from the AWS Architecture Blog). Full jitter — rather than
|
|
55
|
-
* equal-jitter or none — is chosen because it maximizes spread across many
|
|
56
|
-
* concurrent clients hammering the same recovering proxy, which minimizes
|
|
57
|
-
* retry-storm synchronization.
|
|
58
|
-
*
|
|
59
|
-
* @param attempt Zero-based retry index (0 for the first backoff).
|
|
60
|
-
*/
|
|
61
|
-
export declare function computeBackoffMs(attempt: number, policy?: Pick<RetryPolicy, "baseMs" | "capMs">): number;
|
|
62
|
-
/**
|
|
63
|
-
* Sleep for `ms`, rejecting immediately if `signal` aborts mid-wait.
|
|
64
|
-
*
|
|
65
|
-
* Retries must not swallow an intentional shutdown: if the caller's signal
|
|
66
|
-
* fires while we are backing off, propagate the abort at once rather than
|
|
67
|
-
* finishing the sleep.
|
|
68
|
-
*/
|
|
69
|
-
export declare function abortableDelay(ms: number, signal?: AbortSignal): Promise<void>;
|
|
70
|
-
/**
|
|
71
|
-
* `fetch` with bounded, jittered retry on transient failures.
|
|
72
|
-
*
|
|
73
|
-
* Behavior:
|
|
74
|
-
* - Performs the fetch. If the response status is transient AND attempts
|
|
75
|
-
* remain, waits (honoring `Retry-After` when present, otherwise
|
|
76
|
-
* {@link computeBackoffMs}) and retries. Otherwise returns the response — the
|
|
77
|
-
* caller still inspects `.ok` to handle permanent (4xx) errors itself.
|
|
78
|
-
* - Only a thrown `TypeError` — how native `fetch` reports a genuine transport
|
|
79
|
-
* failure (DNS, ECONNREFUSED, socket reset) — is retried (if attempts
|
|
80
|
-
* remain, else the last error is rethrown). Every other throw propagates
|
|
81
|
-
* IMMEDIATELY with no wasted backoff: an AbortError / TimeoutError from
|
|
82
|
-
* `init.signal` (or `AbortSignal.timeout`) is intentional and must not be
|
|
83
|
-
* retried, and a programmer error (e.g. a bad argument) is not transient.
|
|
84
|
-
* - The backoff sleep is abort-aware: aborting `init.signal` mid-wait rejects
|
|
85
|
-
* at once.
|
|
86
|
-
*
|
|
87
|
-
* Kept PURE — no knowledge of any caller secret. Token redaction is layered on
|
|
88
|
-
* top by the caller's own try/catch.
|
|
89
|
-
*/
|
|
90
|
-
export declare function fetchWithRetry(input: string | URL | Request, init?: RequestInit, policy?: RetryPolicy): Promise<Response>;
|
|
1
|
+
export * from "../lib/http-retry.js";
|
|
91
2
|
//# sourceMappingURL=http-retry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-retry.d.ts","sourceRoot":"","sources":["../../src/services/http-retry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"http-retry.d.ts","sourceRoot":"","sources":["../../src/services/http-retry.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -1,177 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
* Transient HTTP retry policy.
|
|
3
|
-
*
|
|
4
|
-
* Centralizes the "retry on transient failure" behavior so it can be applied at
|
|
5
|
-
* a single choke point per call site rather than scattered across every request
|
|
6
|
-
* method. It is deliberately PURE: it knows nothing about the Telegram bot token
|
|
7
|
-
* or any other caller secret, so it never risks leaking one. Token redaction and
|
|
8
|
-
* response-body interpretation stay the caller's responsibility.
|
|
9
|
-
*
|
|
10
|
-
* WHY this exists: operators may point TELEGRAM_API_BASE_URL at an nginx reverse
|
|
11
|
-
* proxy or Azure gateway. Those proxies answer with 504 Gateway Timeout (or
|
|
12
|
-
* 502/503) instead of a normal Telegram JSON payload. Without retries a single
|
|
13
|
-
* proxy hiccup drops an operator notification or spins the long-poll loop; a
|
|
14
|
-
* bounded, jittered retry smooths over the transient blips.
|
|
15
|
-
*/
|
|
16
|
-
/**
|
|
17
|
-
* HTTP status codes that indicate a TRANSIENT failure — the request may well
|
|
18
|
-
* succeed if retried after a short pause:
|
|
19
|
-
* 408 Request Timeout, 429 Too Many Requests,
|
|
20
|
-
* 500 Internal Server Error, 502 Bad Gateway,
|
|
21
|
-
* 503 Service Unavailable, 504 Gateway Timeout.
|
|
22
|
-
*
|
|
23
|
-
* Every other 4xx is PERMANENT (bad request, unauthorized, not found, …) and is
|
|
24
|
-
* never retried — retrying it only wastes time and risks duplicate side effects.
|
|
25
|
-
*/
|
|
26
|
-
export const TRANSIENT_STATUS = new Set([408, 429, 500, 502, 503, 504]);
|
|
27
|
-
/** True when `status` is in the transient (retryable) set. */
|
|
28
|
-
export function isTransientStatus(status) {
|
|
29
|
-
return TRANSIENT_STATUS.has(status);
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Upper bound (ms) we are ever willing to wait for a single `Retry-After`
|
|
33
|
-
* hint. A hostile or misconfigured proxy could send an absurd value; clamp it
|
|
34
|
-
* so we never sleep for minutes on end.
|
|
35
|
-
*/
|
|
36
|
-
const RETRY_AFTER_MAX_MS = 60_000;
|
|
37
|
-
/**
|
|
38
|
-
* Parse the `Retry-After` response header into milliseconds.
|
|
39
|
-
*
|
|
40
|
-
* Per RFC 9110 the value is either a number of seconds (`Retry-After: 120`) or
|
|
41
|
-
* an HTTP-date (`Retry-After: Wed, 21 Oct 2026 07:28:00 GMT`). Returns
|
|
42
|
-
* `undefined` when the header is absent or unparseable, and clamps any positive
|
|
43
|
-
* result to {@link RETRY_AFTER_MAX_MS}. A date in the past yields `0`.
|
|
44
|
-
*/
|
|
45
|
-
export function parseRetryAfterMs(response) {
|
|
46
|
-
const raw = response.headers.get("retry-after");
|
|
47
|
-
if (raw === null)
|
|
48
|
-
return undefined;
|
|
49
|
-
const trimmed = raw.trim();
|
|
50
|
-
if (trimmed === "")
|
|
51
|
-
return undefined;
|
|
52
|
-
// Numeric form: delay in seconds.
|
|
53
|
-
if (/^\d+$/.test(trimmed)) {
|
|
54
|
-
const seconds = Number(trimmed);
|
|
55
|
-
return Math.min(seconds * 1000, RETRY_AFTER_MAX_MS);
|
|
56
|
-
}
|
|
57
|
-
// HTTP-date form: absolute time to retry at.
|
|
58
|
-
const dateMs = Date.parse(trimmed);
|
|
59
|
-
if (Number.isNaN(dateMs))
|
|
60
|
-
return undefined;
|
|
61
|
-
const deltaMs = dateMs - Date.now();
|
|
62
|
-
if (deltaMs <= 0)
|
|
63
|
-
return 0;
|
|
64
|
-
return Math.min(deltaMs, RETRY_AFTER_MAX_MS);
|
|
65
|
-
}
|
|
66
|
-
/** Sensible default: 3 attempts, 500ms base, 8s cap. */
|
|
67
|
-
export const DEFAULT_RETRY_POLICY = {
|
|
68
|
-
maxAttempts: 3,
|
|
69
|
-
baseMs: 500,
|
|
70
|
-
capMs: 8_000,
|
|
71
|
-
};
|
|
72
|
-
/**
|
|
73
|
-
* Exponential backoff with FULL jitter.
|
|
74
|
-
*
|
|
75
|
-
* The deterministic component is `baseMs * 2^attempt`, capped at `capMs`. We
|
|
76
|
-
* then draw a uniformly random value in `[0, capped]` (the "full jitter"
|
|
77
|
-
* strategy from the AWS Architecture Blog). Full jitter — rather than
|
|
78
|
-
* equal-jitter or none — is chosen because it maximizes spread across many
|
|
79
|
-
* concurrent clients hammering the same recovering proxy, which minimizes
|
|
80
|
-
* retry-storm synchronization.
|
|
81
|
-
*
|
|
82
|
-
* @param attempt Zero-based retry index (0 for the first backoff).
|
|
83
|
-
*/
|
|
84
|
-
export function computeBackoffMs(attempt, policy = DEFAULT_RETRY_POLICY) {
|
|
85
|
-
const exponential = policy.baseMs * 2 ** attempt;
|
|
86
|
-
const capped = Math.min(exponential, policy.capMs);
|
|
87
|
-
return Math.random() * capped;
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Sleep for `ms`, rejecting immediately if `signal` aborts mid-wait.
|
|
91
|
-
*
|
|
92
|
-
* Retries must not swallow an intentional shutdown: if the caller's signal
|
|
93
|
-
* fires while we are backing off, propagate the abort at once rather than
|
|
94
|
-
* finishing the sleep.
|
|
95
|
-
*/
|
|
96
|
-
export function abortableDelay(ms, signal) {
|
|
97
|
-
return new Promise((resolve, reject) => {
|
|
98
|
-
if (signal?.aborted) {
|
|
99
|
-
reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
let onAbort;
|
|
103
|
-
const timer = setTimeout(() => {
|
|
104
|
-
if (signal && onAbort)
|
|
105
|
-
signal.removeEventListener("abort", onAbort);
|
|
106
|
-
resolve();
|
|
107
|
-
}, ms);
|
|
108
|
-
if (signal) {
|
|
109
|
-
onAbort = () => {
|
|
110
|
-
clearTimeout(timer);
|
|
111
|
-
reject(signal.reason ?? new DOMException("Aborted", "AbortError"));
|
|
112
|
-
};
|
|
113
|
-
signal.addEventListener("abort", onAbort, { once: true });
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* `fetch` with bounded, jittered retry on transient failures.
|
|
119
|
-
*
|
|
120
|
-
* Behavior:
|
|
121
|
-
* - Performs the fetch. If the response status is transient AND attempts
|
|
122
|
-
* remain, waits (honoring `Retry-After` when present, otherwise
|
|
123
|
-
* {@link computeBackoffMs}) and retries. Otherwise returns the response — the
|
|
124
|
-
* caller still inspects `.ok` to handle permanent (4xx) errors itself.
|
|
125
|
-
* - Only a thrown `TypeError` — how native `fetch` reports a genuine transport
|
|
126
|
-
* failure (DNS, ECONNREFUSED, socket reset) — is retried (if attempts
|
|
127
|
-
* remain, else the last error is rethrown). Every other throw propagates
|
|
128
|
-
* IMMEDIATELY with no wasted backoff: an AbortError / TimeoutError from
|
|
129
|
-
* `init.signal` (or `AbortSignal.timeout`) is intentional and must not be
|
|
130
|
-
* retried, and a programmer error (e.g. a bad argument) is not transient.
|
|
131
|
-
* - The backoff sleep is abort-aware: aborting `init.signal` mid-wait rejects
|
|
132
|
-
* at once.
|
|
133
|
-
*
|
|
134
|
-
* Kept PURE — no knowledge of any caller secret. Token redaction is layered on
|
|
135
|
-
* top by the caller's own try/catch.
|
|
136
|
-
*/
|
|
137
|
-
export async function fetchWithRetry(input, init, policy = DEFAULT_RETRY_POLICY) {
|
|
138
|
-
const signal = init?.signal ?? undefined;
|
|
139
|
-
let lastError;
|
|
140
|
-
for (let attempt = 0; attempt < policy.maxAttempts; attempt++) {
|
|
141
|
-
const attemptsRemaining = attempt < policy.maxAttempts - 1;
|
|
142
|
-
let response;
|
|
143
|
-
try {
|
|
144
|
-
response = await fetch(input, init);
|
|
145
|
-
}
|
|
146
|
-
catch (err) {
|
|
147
|
-
// Only a genuine transport failure is retryable. Native `fetch` throws a
|
|
148
|
-
// TypeError for network-level faults (DNS, ECONNREFUSED, socket reset);
|
|
149
|
-
// anything else — AbortError/TimeoutError from a signal, or a programmer
|
|
150
|
-
// error — is intentional or permanent and must propagate at once.
|
|
151
|
-
if (!(err instanceof TypeError))
|
|
152
|
-
throw err;
|
|
153
|
-
lastError = err;
|
|
154
|
-
if (!attemptsRemaining)
|
|
155
|
-
throw err;
|
|
156
|
-
await abortableDelay(computeBackoffMs(attempt, policy), signal);
|
|
157
|
-
continue;
|
|
158
|
-
}
|
|
159
|
-
// Transient HTTP status with attempts left → back off and retry. Otherwise
|
|
160
|
-
// (success, or permanent error, or out of attempts) hand the response back.
|
|
161
|
-
if (isTransientStatus(response.status) && attemptsRemaining) {
|
|
162
|
-
const retryAfter = parseRetryAfterMs(response);
|
|
163
|
-
const waitMs = retryAfter ?? computeBackoffMs(attempt, policy);
|
|
164
|
-
// Release the socket before retrying: an unconsumed undici `Response`
|
|
165
|
-
// body keeps its connection pinned until GC, so a sustained proxy outage
|
|
166
|
-
// would leak one connection per retried 504. Draining first avoids it.
|
|
167
|
-
await response.body?.cancel().catch(() => { });
|
|
168
|
-
await abortableDelay(waitMs, signal);
|
|
169
|
-
continue;
|
|
170
|
-
}
|
|
171
|
-
return response;
|
|
172
|
-
}
|
|
173
|
-
// Unreachable when maxAttempts >= 1, but keeps the type checker happy and
|
|
174
|
-
// guards against a misconfigured policy (maxAttempts <= 0).
|
|
175
|
-
throw lastError ?? new Error("fetchWithRetry: exhausted attempts with no response");
|
|
176
|
-
}
|
|
1
|
+
export * from "../lib/http-retry.js";
|
|
177
2
|
//# sourceMappingURL=http-retry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-retry.js","sourceRoot":"","sources":["../../src/services/http-retry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"http-retry.js","sourceRoot":"","sources":["../../src/services/http-retry.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-config.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"mcp-config.service.d.ts","sourceRoot":"","sources":["../../src/services/mcp-config.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA+BD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,4BAA4B,CAAC;AAoB5D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAoB5F;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,kBAAkB,EAC7B,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,IAAI,CAkBN;AAcD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,kBAAkB,EAC7B,QAAQ,EAAE,MAAM,GACf;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CA6BjD"}
|