bunnyquery 1.10.12 → 1.11.1
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/README.md +23 -11
- package/bunnyquery.js +139 -62
- package/dist/engine.cjs +78 -23
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.mts +137 -35
- package/dist/engine.d.ts +137 -35
- package/dist/engine.mjs +78 -23
- package/dist/engine.mjs.map +1 -1
- package/package.json +1 -1
- package/src/engine/budget.ts +13 -3
- package/src/engine/config.ts +249 -39
- package/src/engine/history.ts +1 -1
- package/src/engine/requests.ts +25 -17
- package/src/engine/session.ts +8 -9
- package/src/engine/sse.ts +1 -1
package/dist/engine.mjs
CHANGED
|
@@ -59,6 +59,46 @@ function chatEngineConfig() {
|
|
|
59
59
|
}
|
|
60
60
|
return _config;
|
|
61
61
|
}
|
|
62
|
+
function resolveForwardRequest() {
|
|
63
|
+
const cfg = chatEngineConfig();
|
|
64
|
+
const fwd = cfg.forwardRequest;
|
|
65
|
+
if (typeof fwd === "function") {
|
|
66
|
+
return (opts) => fwd.call(cfg, null, opts);
|
|
67
|
+
}
|
|
68
|
+
const legacy = cfg.clientSecretRequest;
|
|
69
|
+
if (typeof legacy === "function") {
|
|
70
|
+
return (opts) => {
|
|
71
|
+
if (!opts || typeof opts !== "object" || !("secretName" in opts)) return legacy.call(cfg, opts);
|
|
72
|
+
const { secretName, ...rest } = opts;
|
|
73
|
+
return legacy.call(cfg, Object.assign({ clientSecretName: secretName }, rest));
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
throw new Error(
|
|
77
|
+
"[chat-engine] No request transport: configureChatEngine() needs forwardRequest (or the deprecated clientSecretRequest), bound to a skapi instance."
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
function resolveForwardRequestHistory() {
|
|
81
|
+
const cfg = chatEngineConfig();
|
|
82
|
+
const hist = typeof cfg.forwardRequestHistory === "function" ? cfg.forwardRequestHistory : cfg.clientSecretRequestHistory;
|
|
83
|
+
if (typeof hist === "function") {
|
|
84
|
+
return (params, fetchOptions) => hist.call(cfg, params, fetchOptions);
|
|
85
|
+
}
|
|
86
|
+
throw new Error(
|
|
87
|
+
"[chat-engine] No history transport: configureChatEngine() needs forwardRequestHistory (or the deprecated clientSecretRequestHistory), bound to a skapi instance."
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
function resolveForwardRequestFinalize() {
|
|
91
|
+
const cfg = chatEngineConfig();
|
|
92
|
+
if (typeof cfg.forwardRequestFinalize === "function") return cfg.forwardRequestFinalize;
|
|
93
|
+
if (typeof cfg.clientSecretRequestFinalize === "function") return cfg.clientSecretRequestFinalize;
|
|
94
|
+
return void 0;
|
|
95
|
+
}
|
|
96
|
+
function resolveForwardRequestStream() {
|
|
97
|
+
const cfg = chatEngineConfig();
|
|
98
|
+
if (typeof cfg.forwardRequestStream === "function") return cfg.forwardRequestStream;
|
|
99
|
+
if (typeof cfg.clientSecretRequestStream === "function") return cfg.clientSecretRequestStream;
|
|
100
|
+
return void 0;
|
|
101
|
+
}
|
|
62
102
|
function windowedIndexingEnabled() {
|
|
63
103
|
return _config?.windowedIndexing === true;
|
|
64
104
|
}
|
|
@@ -69,11 +109,13 @@ function liveStreamingEnabled() {
|
|
|
69
109
|
return _config?.liveStreaming === true;
|
|
70
110
|
}
|
|
71
111
|
function streamRecoveryEnabled() {
|
|
72
|
-
if (_config
|
|
73
|
-
|
|
112
|
+
if (!_config) return false;
|
|
113
|
+
if (_config.streamRecovery === false) return false;
|
|
114
|
+
return typeof resolveForwardRequestStream() === "function";
|
|
74
115
|
}
|
|
75
116
|
function skapiSupportsStreaming(sk) {
|
|
76
|
-
|
|
117
|
+
if (!sk) return false;
|
|
118
|
+
return typeof sk.forwardRequestStream === "function" && typeof sk.forwardRequestFinalize === "function" || typeof sk.clientSecretRequestStream === "function" && typeof sk.clientSecretRequestFinalize === "function";
|
|
77
119
|
}
|
|
78
120
|
function pollOpt() {
|
|
79
121
|
const p = _config?.poll;
|
|
@@ -1026,6 +1068,9 @@ function truncateLabelForDisplay(label) {
|
|
|
1026
1068
|
var CONTEXT_WINDOW_DEFAULT = { claude: 2e5, openai: 128e3 };
|
|
1027
1069
|
var CONTEXT_WINDOW_BY_MODEL = {
|
|
1028
1070
|
// claude, exact ids
|
|
1071
|
+
"claude-fable-5-1": 1e6,
|
|
1072
|
+
"claude-opus-5-5": 1e6,
|
|
1073
|
+
"claude-sonnet-5-5": 1e6,
|
|
1029
1074
|
"claude-fable-5": 1e6,
|
|
1030
1075
|
"claude-opus-5": 1e6,
|
|
1031
1076
|
"claude-opus-4-8": 1e6,
|
|
@@ -1039,6 +1084,9 @@ var CONTEXT_WINDOW_BY_MODEL = {
|
|
|
1039
1084
|
"claude-haiku-4-5": 2e5,
|
|
1040
1085
|
"claude-3-5-sonnet": 2e5,
|
|
1041
1086
|
// openai, exact ids
|
|
1087
|
+
"gpt-6-astra": 105e4,
|
|
1088
|
+
"gpt-6-sol": 105e4,
|
|
1089
|
+
"gpt-6-luna": 105e4,
|
|
1042
1090
|
"gpt-5.6-sol": 105e4,
|
|
1043
1091
|
"gpt-5.6-terra": 105e4,
|
|
1044
1092
|
"gpt-5.6-luna": 105e4,
|
|
@@ -1055,11 +1103,15 @@ var CONTEXT_WINDOW_BY_MODEL = {
|
|
|
1055
1103
|
"claude-opus": 1e6,
|
|
1056
1104
|
"claude-sonnet": 1e6,
|
|
1057
1105
|
"claude-haiku": 2e5,
|
|
1106
|
+
"gpt-6": 105e4,
|
|
1058
1107
|
"gpt-5.6": 105e4,
|
|
1059
1108
|
"gpt-5": 128e3
|
|
1060
1109
|
};
|
|
1061
1110
|
var MAX_OUTPUT_BY_MODEL = {
|
|
1062
1111
|
// claude
|
|
1112
|
+
"claude-fable-5-1": 128e3,
|
|
1113
|
+
"claude-opus-5-5": 128e3,
|
|
1114
|
+
"claude-sonnet-5-5": 128e3,
|
|
1063
1115
|
"claude-fable-5": 128e3,
|
|
1064
1116
|
"claude-opus-5": 128e3,
|
|
1065
1117
|
"claude-opus-4-8": 128e3,
|
|
@@ -1068,6 +1120,9 @@ var MAX_OUTPUT_BY_MODEL = {
|
|
|
1068
1120
|
"claude-haiku-4-5": 64e3,
|
|
1069
1121
|
"claude-3-5-sonnet": 8e3,
|
|
1070
1122
|
// openai
|
|
1123
|
+
"gpt-6-astra": 128e3,
|
|
1124
|
+
"gpt-6-sol": 128e3,
|
|
1125
|
+
"gpt-6-luna": 128e3,
|
|
1071
1126
|
"gpt-5.6-sol": 128e3,
|
|
1072
1127
|
"gpt-5.6-terra": 128e3,
|
|
1073
1128
|
"gpt-5.6-luna": 128e3,
|
|
@@ -1084,6 +1139,7 @@ var MAX_OUTPUT_BY_MODEL = {
|
|
|
1084
1139
|
"claude-opus": 128e3,
|
|
1085
1140
|
"claude-sonnet": 64e3,
|
|
1086
1141
|
"claude-haiku": 64e3,
|
|
1142
|
+
"gpt-6": 128e3,
|
|
1087
1143
|
"gpt-5.6": 128e3,
|
|
1088
1144
|
"gpt-5": 128e3
|
|
1089
1145
|
};
|
|
@@ -2175,7 +2231,7 @@ function mcpEndpointFor(anonymous, publicProjectId, service) {
|
|
|
2175
2231
|
const project = publicProjectId || service;
|
|
2176
2232
|
return { url: String(mcpUrl()).replace(/\/+$/, "") + "/p/" + project };
|
|
2177
2233
|
}
|
|
2178
|
-
var
|
|
2234
|
+
var forwardRequest = (opts) => resolveForwardRequest()(opts);
|
|
2179
2235
|
var CHAT_STREAM_ON = Object.freeze({
|
|
2180
2236
|
transport: Object.freeze({ stream: true }),
|
|
2181
2237
|
body: Object.freeze({ stream: true })
|
|
@@ -2366,8 +2422,8 @@ async function callClaudeWithMcp({
|
|
|
2366
2422
|
mcpServerDefinition.authorization_token = mcpServer.authorizationToken;
|
|
2367
2423
|
}
|
|
2368
2424
|
const stream = chatStreamWiring(userId || service);
|
|
2369
|
-
return
|
|
2370
|
-
|
|
2425
|
+
return forwardRequest({
|
|
2426
|
+
secretName: "claude",
|
|
2371
2427
|
queue: userId || service,
|
|
2372
2428
|
service,
|
|
2373
2429
|
owner,
|
|
@@ -2472,8 +2528,8 @@ async function callOpenAIWithPublicMcp(prompt, service, owner, messages, system,
|
|
|
2472
2528
|
}))
|
|
2473
2529
|
];
|
|
2474
2530
|
const stream = chatStreamWiring(userId || service);
|
|
2475
|
-
return
|
|
2476
|
-
|
|
2531
|
+
return forwardRequest({
|
|
2532
|
+
secretName: "openai",
|
|
2477
2533
|
queue: userId || service,
|
|
2478
2534
|
service,
|
|
2479
2535
|
owner,
|
|
@@ -2622,8 +2678,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2622
2678
|
if (platform === "openai") {
|
|
2623
2679
|
const resolvedModel2 = info.model || DEFAULT_OPENAI_MODEL;
|
|
2624
2680
|
const imageDetail = getOpenAIImageDetail(resolvedModel2);
|
|
2625
|
-
return tapDispatchFailure(
|
|
2626
|
-
|
|
2681
|
+
return tapDispatchFailure(forwardRequest({
|
|
2682
|
+
secretName: "openai",
|
|
2627
2683
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2628
2684
|
service,
|
|
2629
2685
|
owner,
|
|
@@ -2669,8 +2725,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2669
2725
|
}));
|
|
2670
2726
|
}
|
|
2671
2727
|
const resolvedModel = info.model || DEFAULT_CLAUDE_MODEL;
|
|
2672
|
-
return tapDispatchFailure(
|
|
2673
|
-
|
|
2728
|
+
return tapDispatchFailure(forwardRequest({
|
|
2729
|
+
secretName: "claude",
|
|
2674
2730
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2675
2731
|
service,
|
|
2676
2732
|
owner,
|
|
@@ -2761,8 +2817,8 @@ function extractOpenAIText(response) {
|
|
|
2761
2817
|
return "";
|
|
2762
2818
|
}
|
|
2763
2819
|
async function listClaudeModels(service, owner) {
|
|
2764
|
-
return
|
|
2765
|
-
|
|
2820
|
+
return forwardRequest({
|
|
2821
|
+
secretName: "claude",
|
|
2766
2822
|
service,
|
|
2767
2823
|
owner,
|
|
2768
2824
|
url: ANTHROPIC_MODELS_API_URL,
|
|
@@ -2774,8 +2830,8 @@ async function listClaudeModels(service, owner) {
|
|
|
2774
2830
|
});
|
|
2775
2831
|
}
|
|
2776
2832
|
async function listOpenAIModels(service, owner) {
|
|
2777
|
-
return
|
|
2778
|
-
|
|
2833
|
+
return forwardRequest({
|
|
2834
|
+
secretName: "openai",
|
|
2779
2835
|
service,
|
|
2780
2836
|
owner,
|
|
2781
2837
|
url: OPENAI_MODELS_API_URL,
|
|
@@ -2829,7 +2885,7 @@ async function getChatHistory(params, fetchOptions) {
|
|
|
2829
2885
|
params.compact ? { compact: true } : {},
|
|
2830
2886
|
params.queue_exclude ? { queue_exclude: params.queue_exclude } : {}
|
|
2831
2887
|
);
|
|
2832
|
-
return
|
|
2888
|
+
return resolveForwardRequestHistory()(
|
|
2833
2889
|
p,
|
|
2834
2890
|
Object.assign({ ascending: false, limit: CHAT_HISTORY_PAGE_LIMIT }, fetchOptions)
|
|
2835
2891
|
);
|
|
@@ -4602,7 +4658,7 @@ var ChatSession = class {
|
|
|
4602
4658
|
_finalizeStreamedTurn(st) {
|
|
4603
4659
|
if (st.finalized) return;
|
|
4604
4660
|
if (!this._mayFinalize(st)) return;
|
|
4605
|
-
var fin =
|
|
4661
|
+
var fin = resolveForwardRequestFinalize();
|
|
4606
4662
|
if (!fin || st.finalBody == null) return;
|
|
4607
4663
|
st.finalized = true;
|
|
4608
4664
|
var url = st.platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
@@ -4613,10 +4669,10 @@ var ChatSession = class {
|
|
|
4613
4669
|
service: st.projectId,
|
|
4614
4670
|
owner: st.owner
|
|
4615
4671
|
})).catch(function(err) {
|
|
4616
|
-
console.warn("[chat-engine]
|
|
4672
|
+
console.warn("[chat-engine] forwardRequestFinalize failed", err);
|
|
4617
4673
|
});
|
|
4618
4674
|
} catch (e) {
|
|
4619
|
-
console.warn("[chat-engine]
|
|
4675
|
+
console.warn("[chat-engine] forwardRequestFinalize threw", e);
|
|
4620
4676
|
}
|
|
4621
4677
|
}
|
|
4622
4678
|
/** Painted-but-unsettled live text on a bubble, for the typewriter to resume from.
|
|
@@ -4831,8 +4887,7 @@ var ChatSession = class {
|
|
|
4831
4887
|
return this._readBackStreamedTurn(itemId, this.getHistoryCacheKey(), platform, id ? id.projectId : "", id ? id.owner : "", true);
|
|
4832
4888
|
}
|
|
4833
4889
|
_readBackStreamedTurn(itemId, ownerKey, platform, projectId, owner, manual) {
|
|
4834
|
-
var
|
|
4835
|
-
var read = cfg.clientSecretRequestStream;
|
|
4890
|
+
var read = resolveForwardRequestStream();
|
|
4836
4891
|
if (!read || !itemId) return Promise.resolve();
|
|
4837
4892
|
if (this._rec().inflight[itemId]) return Promise.resolve();
|
|
4838
4893
|
if (!manual && this._rec().attempted[itemId]) {
|
|
@@ -4945,7 +5000,7 @@ var ChatSession = class {
|
|
|
4945
5000
|
}
|
|
4946
5001
|
if (!degraded) delete this._rec().incomplete[itemId];
|
|
4947
5002
|
if (!store || body == null || isErr) return;
|
|
4948
|
-
var fin =
|
|
5003
|
+
var fin = resolveForwardRequestFinalize();
|
|
4949
5004
|
if (!fin) return;
|
|
4950
5005
|
var url = platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
4951
5006
|
try {
|