sensorium-mcp 3.1.2 → 3.1.3-board.2
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 +61 -0
- package/dist/board/api/api.js +61 -0
- package/dist/board/api/client.js +96 -0
- package/dist/board/components/BottomNav.js +32 -0
- package/dist/board/components/Card.js +44 -0
- package/dist/board/components/CommentComposer.js +26 -0
- package/dist/board/components/CommentList.js +39 -0
- package/dist/board/components/Dropdown.js +66 -0
- package/dist/board/components/Lane.js +40 -0
- package/dist/board/components/PriorityChip.js +17 -0
- package/dist/board/components/ProfileSummary.js +39 -0
- package/dist/board/components/StateBanner.js +22 -0
- package/dist/board/components/StatusChip.js +21 -0
- package/dist/board/components/TokenEntry.js +42 -0
- package/dist/board/config.js +56 -0
- package/dist/board/index.html +18 -0
- package/dist/board/main.js +37 -0
- package/dist/board/mock/api.mock.js +193 -0
- package/dist/board/mock/fixtures.js +164 -0
- package/dist/board/schema/policy.js +192 -0
- package/dist/board/state/auth.js +55 -0
- package/dist/board/state/useBoard.js +149 -0
- package/dist/board/state/useBuilder.js +98 -0
- package/dist/board/state/useCard.js +67 -0
- package/dist/board/styles/board.css +1760 -0
- package/dist/board/styles/tokens.css +71 -0
- package/dist/board/vendor/vue.esm-browser.js +9 -0
- package/dist/board/views/App.js +65 -0
- package/dist/board/views/BoardView.js +84 -0
- package/dist/board/views/BuilderView.js +303 -0
- package/dist/board/views/CardView.js +245 -0
- package/dist/board/views/SettingsView.js +145 -0
- package/dist/config/agent-settings.d.ts +2 -0
- package/dist/config/agent-settings.d.ts.map +1 -1
- package/dist/config/agent-settings.js +23 -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 +14 -0
- package/dist/config/misc-settings.d.ts.map +1 -1
- package/dist/config/misc-settings.js +53 -0
- package/dist/config/misc-settings.js.map +1 -1
- package/dist/dashboard/board-static.d.ts +23 -0
- package/dist/dashboard/board-static.d.ts.map +1 -0
- package/dist/dashboard/board-static.js +131 -0
- package/dist/dashboard/board-static.js.map +1 -0
- package/dist/dashboard/routes/board.d.ts +73 -0
- package/dist/dashboard/routes/board.d.ts.map +1 -0
- package/dist/dashboard/routes/board.js +623 -0
- package/dist/dashboard/routes/board.js.map +1 -0
- package/dist/dashboard/routes/claude.d.ts.map +1 -1
- package/dist/dashboard/routes/claude.js +10 -1
- package/dist/dashboard/routes/claude.js.map +1 -1
- package/dist/dashboard/routes/settings.d.ts +2 -0
- package/dist/dashboard/routes/settings.d.ts.map +1 -1
- package/dist/dashboard/routes/settings.js +24 -1
- package/dist/dashboard/routes/settings.js.map +1 -1
- package/dist/dashboard/routes/threads-read.d.ts +7 -3
- package/dist/dashboard/routes/threads-read.d.ts.map +1 -1
- package/dist/dashboard/routes/threads-read.js +19 -4
- package/dist/dashboard/routes/threads-read.js.map +1 -1
- package/dist/dashboard/routes/types.d.ts +6 -0
- package/dist/dashboard/routes/types.d.ts.map +1 -1
- package/dist/dashboard/routes/types.js.map +1 -1
- package/dist/dashboard/routes.d.ts.map +1 -1
- package/dist/dashboard/routes.js +42 -1
- package/dist/dashboard/routes.js.map +1 -1
- package/dist/dashboard/spa.html +12 -12
- package/dist/data/board/board-schema.d.ts +22 -0
- package/dist/data/board/board-schema.d.ts.map +1 -0
- package/dist/data/board/board-schema.js +103 -0
- package/dist/data/board/board-schema.js.map +1 -0
- package/dist/data/board/board-types.d.ts +117 -0
- package/dist/data/board/board-types.d.ts.map +1 -0
- package/dist/data/board/board-types.js +9 -0
- package/dist/data/board/board-types.js.map +1 -0
- package/dist/data/board/card.repository.d.ts +64 -0
- package/dist/data/board/card.repository.d.ts.map +1 -0
- package/dist/data/board/card.repository.js +272 -0
- package/dist/data/board/card.repository.js.map +1 -0
- package/dist/data/board/comment.repository.d.ts +12 -0
- package/dist/data/board/comment.repository.d.ts.map +1 -0
- package/dist/data/board/comment.repository.js +31 -0
- package/dist/data/board/comment.repository.js.map +1 -0
- package/dist/data/board/lane.repository.d.ts +18 -0
- package/dist/data/board/lane.repository.d.ts.map +1 -0
- package/dist/data/board/lane.repository.js +44 -0
- package/dist/data/board/lane.repository.js.map +1 -0
- package/dist/data/board/profile-defaults.d.ts +19 -0
- package/dist/data/board/profile-defaults.d.ts.map +1 -0
- package/dist/data/board/profile-defaults.js +118 -0
- package/dist/data/board/profile-defaults.js.map +1 -0
- package/dist/data/memory/migration-runner.d.ts.map +1 -1
- package/dist/data/memory/migration-runner.js +4 -0
- package/dist/data/memory/migration-runner.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 +13 -1
- package/dist/data/memory/narrative.js.map +1 -1
- package/dist/data/memory/schema.d.ts.map +1 -1
- package/dist/data/memory/schema.js +4 -0
- package/dist/data/memory/schema.js.map +1 -1
- package/dist/index.js +84 -2
- package/dist/index.js.map +1 -1
- package/dist/integrations/openai/speech.d.ts.map +1 -1
- package/dist/integrations/openai/speech.js +52 -19
- 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/lib/utils.d.ts +10 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +22 -0
- package/dist/lib/utils.js.map +1 -1
- package/dist/server/http-server.d.ts +3 -1
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +6 -2
- package/dist/server/http-server.js.map +1 -1
- package/dist/services/board/board-signals.d.ts +25 -0
- package/dist/services/board/board-signals.d.ts.map +1 -0
- package/dist/services/board/board-signals.js +83 -0
- package/dist/services/board/board-signals.js.map +1 -0
- package/dist/services/board/card-briefing.d.ts +17 -0
- package/dist/services/board/card-briefing.d.ts.map +1 -0
- package/dist/services/board/card-briefing.js +86 -0
- package/dist/services/board/card-briefing.js.map +1 -0
- package/dist/services/board/orchestrator.service.d.ts +55 -0
- package/dist/services/board/orchestrator.service.d.ts.map +1 -0
- package/dist/services/board/orchestrator.service.js +198 -0
- package/dist/services/board/orchestrator.service.js.map +1 -0
- package/dist/services/board/release-worker.d.ts +32 -0
- package/dist/services/board/release-worker.d.ts.map +1 -0
- package/dist/services/board/release-worker.js +49 -0
- package/dist/services/board/release-worker.js.map +1 -0
- package/dist/services/board/report-capture.d.ts +48 -0
- package/dist/services/board/report-capture.d.ts.map +1 -0
- package/dist/services/board/report-capture.js +172 -0
- package/dist/services/board/report-capture.js.map +1 -0
- package/dist/services/board/worker-spawn.d.ts +30 -0
- package/dist/services/board/worker-spawn.d.ts.map +1 -0
- package/dist/services/board/worker-spawn.js +90 -0
- package/dist/services/board/worker-spawn.js.map +1 -0
- package/dist/services/broker-client.d.ts +30 -0
- package/dist/services/broker-client.d.ts.map +1 -1
- package/dist/services/broker-client.js +23 -0
- package/dist/services/broker-client.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 +54 -54
- package/dist/services/codex-spawn.service.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 +5 -1
- package/dist/services/mcp-config.service.js.map +1 -1
- package/dist/services/passive-notice.service.d.ts +39 -0
- package/dist/services/passive-notice.service.d.ts.map +1 -0
- package/dist/services/passive-notice.service.js +274 -0
- package/dist/services/passive-notice.service.js.map +1 -0
- package/dist/services/spawn-common.d.ts.map +1 -1
- package/dist/services/spawn-common.js +14 -1
- 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/services/usage/usage-inbox-notifier.d.ts +50 -0
- package/dist/services/usage/usage-inbox-notifier.d.ts.map +1 -0
- package/dist/services/usage/usage-inbox-notifier.js +118 -0
- package/dist/services/usage/usage-inbox-notifier.js.map +1 -0
- package/dist/services/usage/usage-poller.service.d.ts +41 -0
- package/dist/services/usage/usage-poller.service.d.ts.map +1 -0
- package/dist/services/usage/usage-poller.service.js +66 -0
- package/dist/services/usage/usage-poller.service.js.map +1 -0
- package/dist/services/usage/usage-snapshot-provider.d.ts +29 -0
- package/dist/services/usage/usage-snapshot-provider.d.ts.map +1 -0
- package/dist/services/usage/usage-snapshot-provider.js +59 -0
- package/dist/services/usage/usage-snapshot-provider.js.map +1 -0
- package/dist/services/usage/usage-types.d.ts +23 -0
- package/dist/services/usage/usage-types.d.ts.map +1 -0
- package/dist/services/usage/usage-types.js +14 -0
- package/dist/services/usage/usage-types.js.map +1 -0
- package/dist/services/worker-cleanup.service.d.ts +6 -1
- package/dist/services/worker-cleanup.service.d.ts.map +1 -1
- package/dist/services/worker-cleanup.service.js +123 -10
- package/dist/services/worker-cleanup.service.js.map +1 -1
- package/dist/tools/delegate-tool.d.ts.map +1 -1
- package/dist/tools/delegate-tool.js +34 -2
- package/dist/tools/delegate-tool.js.map +1 -1
- package/dist/tools/utility-tools.d.ts.map +1 -1
- package/dist/tools/utility-tools.js +7 -3
- package/dist/tools/utility-tools.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 +30 -48
- 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 +13 -0
- package/dist/tools/wait/message-delivery.js.map +1 -1
- package/package.json +2 -2
- package/templates/atomic-build-spec.default.md +57 -0
- package/templates/buildless-vue-preview.default.md +47 -0
- package/templates/phased-build.default.md +59 -0
package/dist/index.js
CHANGED
|
@@ -58,6 +58,15 @@ else {
|
|
|
58
58
|
const { log } = await import("./lib/logger.js");
|
|
59
59
|
const { resolveTelegramTopicId, threadRepository } = await import("./data/memory/thread-registry.js");
|
|
60
60
|
const { BackgroundJobRunner } = await import("./services/background-runner.js");
|
|
61
|
+
const { BoardOrchestrator } = await import("./services/board/orchestrator.service.js");
|
|
62
|
+
const { UsagePollerService } = await import("./services/usage/usage-poller.service.js");
|
|
63
|
+
const { getUsageSnapshotProvider } = await import("./services/usage/usage-snapshot-provider.js");
|
|
64
|
+
const { UsageInboxNotifier } = await import("./services/usage/usage-inbox-notifier.js");
|
|
65
|
+
const { getUsageNotifyEnabled, hasUsageNotifiedWindow, markUsageNotifiedWindow } = await import("./config/index.js");
|
|
66
|
+
const { getKeepAliveThreads } = await import("./data/memory/thread-registry.js");
|
|
67
|
+
const { ensureDirs, PENDING_TASKS_DIR } = await import("./services/process.service.js");
|
|
68
|
+
const { appendFileSync } = await import("node:fs");
|
|
69
|
+
const { join } = await import("node:path");
|
|
61
70
|
const { ThreadLifecycleService } = await import("./services/thread-lifecycle.service.js");
|
|
62
71
|
const { startSelfUpdatePoller } = await import("./services/self-update.service.js");
|
|
63
72
|
const { startFlightRecorder } = await import("./services/flight-recorder.service.js");
|
|
@@ -171,9 +180,59 @@ else {
|
|
|
171
180
|
memoryDb = null;
|
|
172
181
|
}
|
|
173
182
|
}
|
|
183
|
+
// Agent Task Board — server-side orchestrator (dispatches cards to workers).
|
|
184
|
+
// Created BEFORE the server branch so the self-update hook below can stop it:
|
|
185
|
+
// during a self-update the old process keeps living until the replacement is
|
|
186
|
+
// health-checked, and two ticking orchestrators would double-dispatch cards
|
|
187
|
+
// (the atomic backlog→in_progress claim is the second, in-DB guard).
|
|
188
|
+
const boardOrchestrator = new BoardOrchestrator({
|
|
189
|
+
getMemoryDb,
|
|
190
|
+
telegram,
|
|
191
|
+
chatId: TELEGRAM_CHAT_ID,
|
|
192
|
+
threadLifecycle,
|
|
193
|
+
});
|
|
194
|
+
// Usage monitor — MCP-side pull loop (one-way IPC: MCP → supervisor). Shares
|
|
195
|
+
// the board orchestrator's single-process gate (HTTP transport only) and
|
|
196
|
+
// shutdown hooks: every stdio agent session also boots this file, so an
|
|
197
|
+
// ungated poller would spawn one loop per session.
|
|
198
|
+
//
|
|
199
|
+
// The inbox notifier is the one agent-touching consumer: on the poller's
|
|
200
|
+
// onSnapshots seam it fans a one-time graceful-park message out to keep-alive
|
|
201
|
+
// threads when 5h utilization crosses ~90% (rising edge, toggle-gated OFF by
|
|
202
|
+
// default, deduped per 5h-reset window).
|
|
203
|
+
const usageNotifier = new UsageInboxNotifier({
|
|
204
|
+
isEnabled: () => getUsageNotifyEnabled(),
|
|
205
|
+
getTargetThreadIds: () => getKeepAliveThreads(getMemoryDb()).map((t) => t.threadId),
|
|
206
|
+
hasNotified: (key) => hasUsageNotifiedWindow(key),
|
|
207
|
+
markNotified: (key, expiresAtMs) => markUsageNotifiedWindow(key, expiresAtMs),
|
|
208
|
+
deliver: (threadId, message) => {
|
|
209
|
+
ensureDirs();
|
|
210
|
+
appendFileSync(join(PENDING_TASKS_DIR, `${threadId}.txt`), message + "\n", "utf-8");
|
|
211
|
+
},
|
|
212
|
+
log: (msg) => log.info(msg),
|
|
213
|
+
});
|
|
214
|
+
const usagePoller = new UsagePollerService({
|
|
215
|
+
provider: getUsageSnapshotProvider(),
|
|
216
|
+
onSnapshots: (snapshots) => usageNotifier.handleSnapshots(snapshots),
|
|
217
|
+
log: (msg) => log.info(msg),
|
|
218
|
+
});
|
|
219
|
+
for (const sig of ["SIGINT", "SIGTERM", "SIGBREAK"]) {
|
|
220
|
+
try {
|
|
221
|
+
process.on(sig, () => boardOrchestrator.stop());
|
|
222
|
+
}
|
|
223
|
+
catch {
|
|
224
|
+
/* signal not supported on this platform */
|
|
225
|
+
}
|
|
226
|
+
try {
|
|
227
|
+
process.on(sig, () => usagePoller.stop());
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
/* signal not supported on this platform */
|
|
231
|
+
}
|
|
232
|
+
}
|
|
174
233
|
if (process.env.MCP_HTTP_PORT) {
|
|
175
234
|
const httpPort = parseInt(process.env.MCP_HTTP_PORT, 10);
|
|
176
|
-
const { closeServer, ready } = startHttpServer(createMcpServer, getMemoryDb, closeMemoryDb, threadLifecycle);
|
|
235
|
+
const { closeServer, ready } = startHttpServer(createMcpServer, getMemoryDb, closeMemoryDb, threadLifecycle, telegram, TELEGRAM_CHAT_ID);
|
|
177
236
|
// Spawn keepAlive threads ONLY once the HTTP MCP endpoint is truly listening.
|
|
178
237
|
// Agents connect straight back to /mcp on spawn; firing before the listener
|
|
179
238
|
// binds gives them no tools and they exit immediately.
|
|
@@ -227,7 +286,18 @@ else {
|
|
|
227
286
|
};
|
|
228
287
|
assertServerPid("startup");
|
|
229
288
|
setInterval(() => assertServerPid("periodic"), 15_000).unref();
|
|
230
|
-
startSelfUpdatePoller({
|
|
289
|
+
startSelfUpdatePoller({
|
|
290
|
+
pkgVersion: config.PKG_VERSION,
|
|
291
|
+
httpPort,
|
|
292
|
+
onBeforeSpawn: () => {
|
|
293
|
+
// Stop ticking BEFORE the replacement process spawns — the old process
|
|
294
|
+
// outlives the spawn until health-check, and a second concurrent
|
|
295
|
+
// orchestrator would race dispatch (H1 of the board kernel review).
|
|
296
|
+
boardOrchestrator.stop();
|
|
297
|
+
usagePoller.stop();
|
|
298
|
+
return closeServer();
|
|
299
|
+
},
|
|
300
|
+
});
|
|
231
301
|
}
|
|
232
302
|
else {
|
|
233
303
|
await spawnKeepAlive();
|
|
@@ -242,6 +312,18 @@ else {
|
|
|
242
312
|
});
|
|
243
313
|
// Start background jobs after the server is listening.
|
|
244
314
|
backgroundRunner.start();
|
|
315
|
+
// The board orchestrator's dispatch loop must run in exactly ONE process.
|
|
316
|
+
// Only the HTTP server is a singleton; every stdio agent session also boots
|
|
317
|
+
// this file, so starting it unconditionally spawns a dispatch loop per stdio
|
|
318
|
+
// instance → cross-process races (H2). Gate it to the HTTP transport only,
|
|
319
|
+
// mirroring the self-update stop hook that already lives in that branch.
|
|
320
|
+
if (process.env.MCP_HTTP_PORT)
|
|
321
|
+
boardOrchestrator.start();
|
|
322
|
+
// Usage poller shares the same single-process HTTP gate as the orchestrator
|
|
323
|
+
// (see above): inert without MCP_HTTP_PORT, so stdio agent sessions never
|
|
324
|
+
// spawn a competing pull loop.
|
|
325
|
+
if (process.env.MCP_HTTP_PORT)
|
|
326
|
+
usagePoller.start();
|
|
245
327
|
// Clear any stale reconnect snapshot after 10 minutes — threads that haven't
|
|
246
328
|
// reconnected by then should get a full briefing.
|
|
247
329
|
setTimeout(clearReconnectSnapshot, 15 * 60 * 1000);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../../src/integrations/openai/speech.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../../src/integrations/openai/speech.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,6BAA6B;AAC7B,eAAO,MAAM,UAAU,gEAAiE,CAAC;AACzF,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,QAAiB,GACvB,OAAO,CAAC,MAAM,CAAC,CAuDjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAoB,EAC9B,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAkCjB"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* Extracted from openai.ts for modular decomposition (Phase 3B).
|
|
5
5
|
*/
|
|
6
6
|
import { recordUsage } from "../../lib/usage-metering/index.js";
|
|
7
|
+
import { errorMessage } from "../../lib/utils.js";
|
|
8
|
+
import { abortableDelay, computeBackoffMs, DEFAULT_RETRY_POLICY } from "../../lib/http-retry.js";
|
|
7
9
|
// ─── TTS ──────────────────────────────────────────────────────────────────
|
|
8
10
|
/** Valid TTS voice names. */
|
|
9
11
|
export const TTS_VOICES = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"];
|
|
@@ -12,26 +14,57 @@ export const TTS_VOICES = ["alloy", "echo", "fable", "onyx", "nova", "shimmer"];
|
|
|
12
14
|
* Returns OGG Opus audio suitable for Telegram's sendVoice.
|
|
13
15
|
*/
|
|
14
16
|
export async function textToSpeech(text, apiKey, voice = "nova") {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
17
|
+
const policy = DEFAULT_RETRY_POLICY;
|
|
18
|
+
for (let attempt = 0; attempt < policy.maxAttempts; attempt++) {
|
|
19
|
+
const attemptsRemaining = attempt < policy.maxAttempts - 1;
|
|
20
|
+
// Fresh 60s budget PER attempt (matches the original single-shot timeout);
|
|
21
|
+
// a whole-operation signal would shrink each retry's window.
|
|
22
|
+
const signal = AbortSignal.timeout(60_000);
|
|
23
|
+
let response;
|
|
24
|
+
try {
|
|
25
|
+
response = await fetch("https://api.openai.com/v1/audio/speech", {
|
|
26
|
+
method: "POST",
|
|
27
|
+
headers: {
|
|
28
|
+
"Content-Type": "application/json",
|
|
29
|
+
Authorization: `Bearer ${apiKey}`,
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({
|
|
32
|
+
model: "tts-1",
|
|
33
|
+
input: text,
|
|
34
|
+
voice,
|
|
35
|
+
response_format: "opus",
|
|
36
|
+
}),
|
|
37
|
+
signal,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
// Retry ONLY a genuine transport fault — native `fetch` throws a TypeError
|
|
42
|
+
// for network-level failures (DNS, ECONNRESET, socket reset), which the
|
|
43
|
+
// Telegram leg already retries via fetchWithRetry. A TimeoutError/AbortError
|
|
44
|
+
// from the per-attempt signal is intentional and propagates at once.
|
|
45
|
+
if (!(err instanceof TypeError))
|
|
46
|
+
throw err;
|
|
47
|
+
if (!attemptsRemaining) {
|
|
48
|
+
// Tag the leg and preserve the original transport error so the caller's
|
|
49
|
+
// error log can surface the real reason (ENOTFOUND/ECONNRESET/…).
|
|
50
|
+
throw new Error(`OpenAI TTS request failed: ${errorMessage(err)}`, {
|
|
51
|
+
cause: err,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
await abortableDelay(computeBackoffMs(attempt, policy));
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
// HTTP errors are NOT retried here (4xx are permanent; a 5xx is rare for the
|
|
58
|
+
// TTS endpoint), preserving the original single-shot behavior.
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
const errText = await response.text().catch(() => response.statusText);
|
|
61
|
+
throw new Error(`OpenAI TTS failed: ${response.status} ${errText}`);
|
|
62
|
+
}
|
|
63
|
+
return Buffer.from(await response.arrayBuffer());
|
|
33
64
|
}
|
|
34
|
-
|
|
65
|
+
// Unreachable when maxAttempts >= 1 (the loop returns or throws), but keeps the
|
|
66
|
+
// control flow total for a misconfigured policy.
|
|
67
|
+
throw new Error("OpenAI TTS request failed: exhausted retry attempts");
|
|
35
68
|
}
|
|
36
69
|
/**
|
|
37
70
|
* Transcribe an audio buffer using an OpenAI-compatible Whisper endpoint.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../../src/integrations/openai/speech.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../../src/integrations/openai/speech.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
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>;
|
|
91
|
+
//# sourceMappingURL=http-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-retry.d.ts","sourceRoot":"","sources":["../../src/lib/http-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA2C,CAAC;AAE7F,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEzD;AASD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAmBxE;AAED,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,EAAE,WAIlC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAwB,GACnE,MAAM,CAIR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,EAClB,MAAM,GAAE,WAAkC,GACzC,OAAO,CAAC,QAAQ,CAAC,CAyCnB"}
|
|
@@ -0,0 +1,177 @@
|
|
|
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
|
+
}
|
|
177
|
+
//# sourceMappingURL=http-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-retry.js","sourceRoot":"","sources":["../../src/lib/http-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,7 +23,7 @@ export const MODEL_PRICES = {
|
|
|
23
23
|
// OpenAI transcription — $0.006/min
|
|
24
24
|
"whisper-1": { audioPerMinute: 0.006 },
|
|
25
25
|
// Groq transcription — $0.111/hr → per minute
|
|
26
|
-
"whisper-large-v3": { audioPerMinute: 0.
|
|
26
|
+
"whisper-large-v3": { audioPerMinute: 0.0018498 },
|
|
27
27
|
};
|
|
28
28
|
/**
|
|
29
29
|
* Pure cost in USD for one usage event. Unknown models (absent from the table)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../../src/lib/usage-metering/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,cAAc;IACd,QAAQ,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE;IAClD,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE;IACzD,iCAAiC;IACjC,wBAAwB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IAChD,oCAAoC;IACpC,WAAW,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;IACtC,8CAA8C;IAC9C,kBAAkB,EAAE,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../../src/lib/usage-metering/pricing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAA+B;IACtD,cAAc;IACd,QAAQ,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE;IAClD,aAAa,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE;IACzD,iCAAiC;IACjC,wBAAwB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;IAChD,oCAAoC;IACpC,WAAW,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE;IACtC,8CAA8C;IAC9C,kBAAkB,EAAE,EAAE,cAAc,EAAE,SAAS,EAAE;CAClD,CAAC;AAUF;;;;GAIG;AACH,MAAM,UAAU,MAAM,CAAC,KAAgB;IACrC,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,CAAC;IACrB,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC7C,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;IAC/D,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAClD,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,SAAS,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC;IACpE,CAAC;IACD,IAAI,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QAC/C,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -5,6 +5,16 @@
|
|
|
5
5
|
* Extract a human-readable message from an unknown error value.
|
|
6
6
|
*/
|
|
7
7
|
export declare function errorMessage(err: unknown): string;
|
|
8
|
+
/**
|
|
9
|
+
* Like {@link errorMessage}, but also unwraps an underlying `cause`.
|
|
10
|
+
*
|
|
11
|
+
* A `fetch`/undici transport failure surfaces only a bare "fetch failed" via
|
|
12
|
+
* `err.message`; the actionable reason (ENOTFOUND / ECONNRESET / ETIMEDOUT and,
|
|
13
|
+
* where present, the failing host) lives on `err.cause`. Use this ONLY at
|
|
14
|
+
* fetch-error log sites so a network blip records WHAT actually went wrong —
|
|
15
|
+
* {@link errorMessage} keeps its narrow, ripple-free behavior everywhere else.
|
|
16
|
+
*/
|
|
17
|
+
export declare function errorMessageWithCause(err: unknown): string;
|
|
8
18
|
/**
|
|
9
19
|
* Build a standard MCP error response object.
|
|
10
20
|
*/
|
package/dist/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IACzC,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf,CAEA;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0CvF;AAED,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,aAAiD,CAAC;AAE/E,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAU/D"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAU1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG;IACzC,OAAO,EAAE,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,OAAO,EAAE,IAAI,CAAC;CACf,CAEA;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0CvF;AAED,0DAA0D;AAC1D,eAAO,MAAM,gBAAgB,aAAiD,CAAC;AAE/E,+CAA+C;AAC/C,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAU/D"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -16,6 +16,28 @@ export function errorMessage(err) {
|
|
|
16
16
|
return String(err);
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Like {@link errorMessage}, but also unwraps an underlying `cause`.
|
|
21
|
+
*
|
|
22
|
+
* A `fetch`/undici transport failure surfaces only a bare "fetch failed" via
|
|
23
|
+
* `err.message`; the actionable reason (ENOTFOUND / ECONNRESET / ETIMEDOUT and,
|
|
24
|
+
* where present, the failing host) lives on `err.cause`. Use this ONLY at
|
|
25
|
+
* fetch-error log sites so a network blip records WHAT actually went wrong —
|
|
26
|
+
* {@link errorMessage} keeps its narrow, ripple-free behavior everywhere else.
|
|
27
|
+
*/
|
|
28
|
+
export function errorMessageWithCause(err) {
|
|
29
|
+
const base = errorMessage(err);
|
|
30
|
+
const cause = err instanceof Error ? err.cause : undefined;
|
|
31
|
+
if (cause === undefined || cause === null)
|
|
32
|
+
return base;
|
|
33
|
+
const code = cause.code;
|
|
34
|
+
const causeMsg = errorMessage(cause);
|
|
35
|
+
const detail = code !== undefined && code !== null ? `${String(code)}: ${causeMsg}` : causeMsg;
|
|
36
|
+
// Skip a useless "fetch failed (cause: fetch failed)" duplicate.
|
|
37
|
+
if (detail === base)
|
|
38
|
+
return base;
|
|
39
|
+
return `${base} (cause: ${detail})`;
|
|
40
|
+
}
|
|
19
41
|
/**
|
|
20
42
|
* Build a standard MCP error response object.
|
|
21
43
|
*/
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IAItC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,OAAe;IAC7E,2EAA2E;IAC3E,gFAAgF;IAChF,uEAAuE;IACvE,wEAAwE;IACxE,8DAA8D;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAExB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,KAAwB,EAAU,EAAE;QAChE,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE;QAC3B,WAAW;QACX,MAAM;QACN,iBAAiB;QACjB,WAAW;QACX,cAAc;KACN,CAAC,CAAC;IACZ,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE;QAC3B,cAAc;QACd,YAAY;QACZ,SAAS;QACT,MAAM;QACN,iBAAiB;KACT,CAAC,CAAC;IACZ,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,EAAE;QAC7B,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,WAAW;QACX,YAAY;KACJ,CAAC,CAAC;IAEZ,OAAO,GAAG,WAAW,KAAK,WAAW,KAAK,aAAa,EAAE,CAAC;AAC5D,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/E,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAa,IAAI,IAAI,EAAE;IACrD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAClC,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAE,GAAmC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5F,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,IAAI,GAAI,KAA4B,CAAC,IAAI,CAAC;IAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/F,iEAAiE;IACjE,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,OAAO,GAAG,IAAI,YAAY,MAAM,GAAG,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IAItC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe,EAAE,SAAiB,EAAE,OAAe;IAC7E,2EAA2E;IAC3E,gFAAgF;IAChF,uEAAuE;IACvE,wEAAwE;IACxE,8DAA8D;IAC9D,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAExB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,KAAwB,EAAU,EAAE;QAChE,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE;QAC3B,WAAW;QACX,MAAM;QACN,iBAAiB;QACjB,WAAW;QACX,cAAc;KACN,CAAC,CAAC;IACZ,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE;QAC3B,cAAc;QACd,YAAY;QACZ,SAAS;QACT,MAAM;QACN,iBAAiB;KACT,CAAC,CAAC;IACZ,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,EAAE;QAC7B,kBAAkB;QAClB,UAAU;QACV,UAAU;QACV,WAAW;QACX,YAAY;KACJ,CAAC,CAAC;IAEZ,OAAO,GAAG,WAAW,KAAK,WAAW,KAAK,aAAa,EAAE,CAAC;AAC5D,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/E,+CAA+C;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,OAAa,IAAI,IAAI,EAAE;IACrD,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAClC,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;QACb,YAAY,EAAE,OAAO;KACtB,CAAC,CAAC;AACL,CAAC"}
|