sparkecoder 0.1.137 → 0.1.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index.d.ts +1 -1
- package/dist/agent/index.js +111 -8
- package/dist/agent/index.js.map +1 -1
- package/dist/cli.js +112 -9
- package/dist/cli.js.map +1 -1
- package/dist/{index-BM99kjgq.d.ts → index-BAsQWqZj.d.ts} +7 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +112 -9
- package/dist/index.js.map +1 -1
- package/dist/server/index.js +112 -9
- package/dist/server/index.js.map +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/BUILD_ID +1 -1
- package/web/.next/standalone/web/.next/build-manifest.json +2 -2
- package/web/.next/standalone/web/.next/prerender-manifest.json +3 -3
- package/web/.next/standalone/web/.next/server/app/(main)/session/[id]/page_client-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.html +2 -2
- package/web/.next/standalone/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.html +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.html +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p/agents.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/agents.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/installation.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs/installation.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/installation.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/skills.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs/skills.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/skills.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs/tools.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs/tools.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs/tools.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.html +2 -2
- package/web/.next/standalone/web/.next/server/app/docs.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/docs.segments/docs.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.html +1 -1
- package/web/.next/standalone/web/.next/server/app/index.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.html +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings/__PAGE__.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p/settings.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/!KG1haW4p.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_full.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_head.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_index.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__5b38d1a5._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__78517719._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__9d50fe63._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/[root-of-the-server]__ce44139a._.js +1 -1
- package/web/.next/standalone/web/.next/server/chunks/ssr/[root-of-the-server]__e5911ea8._.js +1 -1
- package/web/.next/standalone/web/.next/server/pages/404.html +1 -1
- package/web/.next/standalone/web/.next/server/pages/500.html +2 -2
- package/web/.next/standalone/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/standalone/web/.next/server/server-reference-manifest.json +1 -1
- package/web/.next/{static/chunks/3f50fe2a802aa800.js → standalone/web/.next/static/chunks/b0cae7e255cae74d.js} +1 -1
- package/web/.next/standalone/web/.next/static/{chunks/3f50fe2a802aa800.js → static/chunks/b0cae7e255cae74d.js} +1 -1
- package/web/.next/standalone/web/runtime-config.json +5 -5
- package/web/.next/standalone/web/src/app/api/config/route.ts +3 -3
- package/web/.next/standalone/web/src/app/api/diag/route.ts +5 -2
- package/web/.next/standalone/web/src/app/api/health/route.ts +2 -2
- package/web/.next/standalone/web/src/app/sfapi/[...path]/route.ts +2 -2
- package/web/.next/standalone/web/src/components/chat-interface.tsx +19 -2
- package/web/.next/standalone/web/src/lib/local-api.ts +49 -0
- package/web/.next/{standalone/web/.next/static/static/chunks/3f50fe2a802aa800.js → static/chunks/b0cae7e255cae74d.js} +1 -1
- /package/web/.next/standalone/web/.next/static/{static/wvsSqSLuE0FvQYeAvnmPm → rY6TfiRfMLnxUYYyNit1Q}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{static/wvsSqSLuE0FvQYeAvnmPm → rY6TfiRfMLnxUYYyNit1Q}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{static/wvsSqSLuE0FvQYeAvnmPm → rY6TfiRfMLnxUYYyNit1Q}/_ssgManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{wvsSqSLuE0FvQYeAvnmPm → static/rY6TfiRfMLnxUYYyNit1Q}/_buildManifest.js +0 -0
- /package/web/.next/standalone/web/.next/static/{wvsSqSLuE0FvQYeAvnmPm → static/rY6TfiRfMLnxUYYyNit1Q}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/standalone/web/.next/static/{wvsSqSLuE0FvQYeAvnmPm → static/rY6TfiRfMLnxUYYyNit1Q}/_ssgManifest.js +0 -0
- /package/web/.next/static/{wvsSqSLuE0FvQYeAvnmPm → rY6TfiRfMLnxUYYyNit1Q}/_buildManifest.js +0 -0
- /package/web/.next/static/{wvsSqSLuE0FvQYeAvnmPm → rY6TfiRfMLnxUYYyNit1Q}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{wvsSqSLuE0FvQYeAvnmPm → rY6TfiRfMLnxUYYyNit1Q}/_ssgManifest.js +0 -0
package/dist/cli.js
CHANGED
|
@@ -8412,7 +8412,11 @@ var init_model_limits = __esm({
|
|
|
8412
8412
|
MODEL_LIMITS = {
|
|
8413
8413
|
"claude-opus-4-8": { contextWindow: 2e5, rollingTarget: 15e4 },
|
|
8414
8414
|
"gpt-5.5": { contextWindow: 35e4, rollingTarget: 15e4 },
|
|
8415
|
-
"claude-fable-5": { contextWindow: 2e5, rollingTarget: 15e4 }
|
|
8415
|
+
"claude-fable-5": { contextWindow: 2e5, rollingTarget: 15e4 },
|
|
8416
|
+
// Claude Opus 4.7 advertises a 1M-token context. Keyed WITH the provider
|
|
8417
|
+
// prefix because getModelLimits() matches the full id (e.g.
|
|
8418
|
+
// "anthropic/claude-opus-4.7") before falling back to the prefix table.
|
|
8419
|
+
"anthropic/claude-opus-4.7": { contextWindow: 1e6, rollingTarget: 15e4 }
|
|
8416
8420
|
};
|
|
8417
8421
|
DEFAULT_LIMITS = { contextWindow: 2e5, rollingTarget: 15e4 };
|
|
8418
8422
|
PREFIX_DEFAULTS = {
|
|
@@ -8486,6 +8490,39 @@ var init_conversation_archive = __esm({
|
|
|
8486
8490
|
|
|
8487
8491
|
// src/agent/context.ts
|
|
8488
8492
|
import { generateText as generateText2 } from "ai";
|
|
8493
|
+
function truncateMiddle(s, cap) {
|
|
8494
|
+
if (s.length <= cap) return s;
|
|
8495
|
+
const half = Math.floor(cap / 2);
|
|
8496
|
+
return s.slice(0, half) + `
|
|
8497
|
+
...[truncated ${s.length - cap} chars to fit context]...
|
|
8498
|
+
` + s.slice(-half);
|
|
8499
|
+
}
|
|
8500
|
+
function truncateToolResultText(part) {
|
|
8501
|
+
const trunc = (r) => {
|
|
8502
|
+
if (typeof r === "string") return truncateMiddle(r, HARD_TRUNCATE_CHARS);
|
|
8503
|
+
if (r && typeof r === "object" && typeof r.text === "string") {
|
|
8504
|
+
return { ...r, text: truncateMiddle(r.text, HARD_TRUNCATE_CHARS) };
|
|
8505
|
+
}
|
|
8506
|
+
return r;
|
|
8507
|
+
};
|
|
8508
|
+
if (Array.isArray(part.result)) return { ...part, result: part.result.map(trunc) };
|
|
8509
|
+
if ("result" in part) return { ...part, result: trunc(part.result) };
|
|
8510
|
+
return part;
|
|
8511
|
+
}
|
|
8512
|
+
function hardTruncateMessageText(msg) {
|
|
8513
|
+
if (typeof msg.content === "string") {
|
|
8514
|
+
return { ...msg, content: truncateMiddle(msg.content, HARD_TRUNCATE_CHARS) };
|
|
8515
|
+
}
|
|
8516
|
+
if (!Array.isArray(msg.content)) return msg;
|
|
8517
|
+
const parts = msg.content.map((part) => {
|
|
8518
|
+
if (part?.type === "text" && typeof part.text === "string") {
|
|
8519
|
+
return { ...part, text: truncateMiddle(part.text, HARD_TRUNCATE_CHARS) };
|
|
8520
|
+
}
|
|
8521
|
+
if (part?.type === "tool-result") return truncateToolResultText(part);
|
|
8522
|
+
return part;
|
|
8523
|
+
});
|
|
8524
|
+
return { ...msg, content: parts };
|
|
8525
|
+
}
|
|
8489
8526
|
function stripBinaryContentForSummary(value) {
|
|
8490
8527
|
if (Array.isArray(value)) return value.map(stripBinaryContentForSummary);
|
|
8491
8528
|
if (!value || typeof value !== "object") return value;
|
|
@@ -8662,7 +8699,7 @@ function ensureEndsWithUserOrTool(messages) {
|
|
|
8662
8699
|
{ role: "user", content: [{ type: "text", text: "Please continue." }] }
|
|
8663
8700
|
];
|
|
8664
8701
|
}
|
|
8665
|
-
var TOOL_OUTPUT_TRIM_CHARS, COMPACTABLE_TOOLS, ContextManager;
|
|
8702
|
+
var TOOL_OUTPUT_TRIM_CHARS, COMPACTABLE_TOOLS, ContextManager, HARD_TRUNCATE_CHARS;
|
|
8666
8703
|
var init_context = __esm({
|
|
8667
8704
|
"src/agent/context.ts"() {
|
|
8668
8705
|
"use strict";
|
|
@@ -8723,8 +8760,41 @@ ${summaryContent}`
|
|
|
8723
8760
|
messages = ensureToolResultsFollowCalls(messages);
|
|
8724
8761
|
messages = ensureEndsWithUserOrTool(messages);
|
|
8725
8762
|
messages = capImageCount(messages);
|
|
8763
|
+
messages = this.enforceHardCap(messages);
|
|
8726
8764
|
return messages;
|
|
8727
8765
|
}
|
|
8766
|
+
/**
|
|
8767
|
+
* Drop oldest messages (and, as a last resort, hard-truncate text) until
|
|
8768
|
+
* the prompt fits the model's context window. Preserves any leading
|
|
8769
|
+
* summary system message and always keeps the most recent message, then
|
|
8770
|
+
* repairs tool pairing so dropping can't orphan a tool result.
|
|
8771
|
+
*/
|
|
8772
|
+
enforceHardCap(messages) {
|
|
8773
|
+
const { contextWindow } = getModelLimits(this.modelId);
|
|
8774
|
+
const ceiling = Math.max(2e4, Math.floor(contextWindow * 0.9));
|
|
8775
|
+
const tokens = messages.map((m) => this.messageTokens(m));
|
|
8776
|
+
let total = tokens.reduce((a, b) => a + b, 0);
|
|
8777
|
+
if (total <= ceiling) return messages;
|
|
8778
|
+
const hasLeadingSummary = messages.length > 0 && messages[0].role === "system";
|
|
8779
|
+
const firstBody = hasLeadingSummary ? 1 : 0;
|
|
8780
|
+
const lastIndex = messages.length - 1;
|
|
8781
|
+
let start = firstBody;
|
|
8782
|
+
while (start < lastIndex && total > ceiling) {
|
|
8783
|
+
total -= tokens[start];
|
|
8784
|
+
start += 1;
|
|
8785
|
+
}
|
|
8786
|
+
let out = hasLeadingSummary ? [messages[0], ...messages.slice(start)] : messages.slice(start);
|
|
8787
|
+
if (total > ceiling) {
|
|
8788
|
+
out = out.map((m) => hardTruncateMessageText(m));
|
|
8789
|
+
}
|
|
8790
|
+
out = repairToolPairing(out);
|
|
8791
|
+
out = ensureToolResultsFollowCalls(out);
|
|
8792
|
+
out = ensureEndsWithUserOrTool(out);
|
|
8793
|
+
console.warn(
|
|
8794
|
+
`[Context] hard cap engaged for ${this.modelId}: trimmed ${messages.length}\u2192${out.length} msgs (ceiling ${ceiling} tokens).`
|
|
8795
|
+
);
|
|
8796
|
+
return out;
|
|
8797
|
+
}
|
|
8728
8798
|
// ---------------------------------------------------------------------------
|
|
8729
8799
|
// Phase 1 – Compact
|
|
8730
8800
|
// ---------------------------------------------------------------------------
|
|
@@ -8951,6 +9021,7 @@ ${summaryContent}`
|
|
|
8951
9021
|
this.summaries = [];
|
|
8952
9022
|
}
|
|
8953
9023
|
};
|
|
9024
|
+
HARD_TRUNCATE_CHARS = 6e3;
|
|
8954
9025
|
}
|
|
8955
9026
|
});
|
|
8956
9027
|
|
|
@@ -9812,7 +9883,29 @@ function markRespondedForThread(slackChannel2, threadTs) {
|
|
|
9812
9883
|
}
|
|
9813
9884
|
}
|
|
9814
9885
|
function resolveBatchOnTurnEnd(events, ok) {
|
|
9815
|
-
if (!ok)
|
|
9886
|
+
if (!ok) {
|
|
9887
|
+
for (const ev of events) {
|
|
9888
|
+
const key2 = eventKey(ev);
|
|
9889
|
+
const entry2 = ledger.get(key2);
|
|
9890
|
+
if (!entry2 || TERMINAL.has(entry2.state)) continue;
|
|
9891
|
+
entry2.state = "failed";
|
|
9892
|
+
entry2.updatedAt = Date.now();
|
|
9893
|
+
if (entry2.channel === "slack" && entry2.slackChannel) {
|
|
9894
|
+
if (entry2.messageTs) fireResultReaction(entry2.slackChannel, entry2.messageTs, "failed");
|
|
9895
|
+
if (entry2.threadTs) maybePostFallback(entry2.slackChannel, entry2.threadTs);
|
|
9896
|
+
}
|
|
9897
|
+
recordEvent({
|
|
9898
|
+
source: "daemon",
|
|
9899
|
+
status: "failed",
|
|
9900
|
+
channel: entry2.channel,
|
|
9901
|
+
sessionId: entry2.sessionId,
|
|
9902
|
+
error: "turn failed; not replayed (avoids context-overflow spiral)",
|
|
9903
|
+
textSnippet: entry2.event.content.slice(0, 200),
|
|
9904
|
+
meta: { ackKey: entry2.key, ackState: "failed" }
|
|
9905
|
+
});
|
|
9906
|
+
}
|
|
9907
|
+
return;
|
|
9908
|
+
}
|
|
9816
9909
|
for (const ev of events) {
|
|
9817
9910
|
const key2 = eventKey(ev);
|
|
9818
9911
|
const entry2 = ledger.get(key2);
|
|
@@ -9864,11 +9957,7 @@ function failEntry(entry2) {
|
|
|
9864
9957
|
if (entry2.channel === "slack" && entry2.slackChannel && entry2.messageTs) {
|
|
9865
9958
|
fireResultReaction(entry2.slackChannel, entry2.messageTs, "failed");
|
|
9866
9959
|
if (entry2.threadTs) {
|
|
9867
|
-
|
|
9868
|
-
entry2.slackChannel,
|
|
9869
|
-
entry2.threadTs,
|
|
9870
|
-
`:warning: I wasn't able to handle this after ${entry2.attempts} attempt(s). It may need a human \u2014 flagging it here so it isn't lost.`
|
|
9871
|
-
);
|
|
9960
|
+
maybePostFallback(entry2.slackChannel, entry2.threadTs);
|
|
9872
9961
|
}
|
|
9873
9962
|
}
|
|
9874
9963
|
recordEvent({
|
|
@@ -9911,6 +10000,17 @@ function fireFallback(channel, threadTs, text) {
|
|
|
9911
10000
|
} catch {
|
|
9912
10001
|
}
|
|
9913
10002
|
}
|
|
10003
|
+
function maybePostFallback(channel, threadTs) {
|
|
10004
|
+
const now = Date.now();
|
|
10005
|
+
const last = lastFallbackAt.get(channel) ?? 0;
|
|
10006
|
+
if (now - last < FALLBACK_COOLDOWN_MS) return;
|
|
10007
|
+
lastFallbackAt.set(channel, now);
|
|
10008
|
+
fireFallback(
|
|
10009
|
+
channel,
|
|
10010
|
+
threadTs,
|
|
10011
|
+
"\u26A0\uFE0F I'm having trouble processing messages right now (likely an overloaded context or a backend error). A human may need to check on me \u2014 I'll pick back up once it's resolved."
|
|
10012
|
+
);
|
|
10013
|
+
}
|
|
9914
10014
|
function startReconciler() {
|
|
9915
10015
|
if (reconcileTimer) return;
|
|
9916
10016
|
reconcileTimer = setInterval(() => {
|
|
@@ -9932,8 +10032,9 @@ function __listAcks() {
|
|
|
9932
10032
|
}
|
|
9933
10033
|
function __resetAcks() {
|
|
9934
10034
|
ledger.clear();
|
|
10035
|
+
lastFallbackAt.clear();
|
|
9935
10036
|
}
|
|
9936
|
-
var REPLAY_AFTER_MS, RECONCILE_EVERY_MS, MAX_ATTEMPTS, PRUNE_AFTER_MS, MAX_ENTRIES, TERMINAL, SEP, ledger, reconcileTimer;
|
|
10037
|
+
var REPLAY_AFTER_MS, RECONCILE_EVERY_MS, MAX_ATTEMPTS, PRUNE_AFTER_MS, FALLBACK_COOLDOWN_MS, lastFallbackAt, MAX_ENTRIES, TERMINAL, SEP, ledger, reconcileTimer;
|
|
9937
10038
|
var init_inbox_acks = __esm({
|
|
9938
10039
|
"src/orchestrator/inbox-acks.ts"() {
|
|
9939
10040
|
"use strict";
|
|
@@ -9944,6 +10045,8 @@ var init_inbox_acks = __esm({
|
|
|
9944
10045
|
RECONCILE_EVERY_MS = 6e4;
|
|
9945
10046
|
MAX_ATTEMPTS = 2;
|
|
9946
10047
|
PRUNE_AFTER_MS = 60 * 6e4;
|
|
10048
|
+
FALLBACK_COOLDOWN_MS = 15 * 6e4;
|
|
10049
|
+
lastFallbackAt = /* @__PURE__ */ new Map();
|
|
9947
10050
|
MAX_ENTRIES = 5e3;
|
|
9948
10051
|
TERMINAL = /* @__PURE__ */ new Set(["responded", "skipped", "handed_off", "failed"]);
|
|
9949
10052
|
SEP = "\u241F";
|