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.cjs
CHANGED
|
@@ -61,6 +61,46 @@ function chatEngineConfig() {
|
|
|
61
61
|
}
|
|
62
62
|
return _config;
|
|
63
63
|
}
|
|
64
|
+
function resolveForwardRequest() {
|
|
65
|
+
const cfg = chatEngineConfig();
|
|
66
|
+
const fwd = cfg.forwardRequest;
|
|
67
|
+
if (typeof fwd === "function") {
|
|
68
|
+
return (opts) => fwd.call(cfg, null, opts);
|
|
69
|
+
}
|
|
70
|
+
const legacy = cfg.clientSecretRequest;
|
|
71
|
+
if (typeof legacy === "function") {
|
|
72
|
+
return (opts) => {
|
|
73
|
+
if (!opts || typeof opts !== "object" || !("secretName" in opts)) return legacy.call(cfg, opts);
|
|
74
|
+
const { secretName, ...rest } = opts;
|
|
75
|
+
return legacy.call(cfg, Object.assign({ clientSecretName: secretName }, rest));
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
throw new Error(
|
|
79
|
+
"[chat-engine] No request transport: configureChatEngine() needs forwardRequest (or the deprecated clientSecretRequest), bound to a skapi instance."
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
function resolveForwardRequestHistory() {
|
|
83
|
+
const cfg = chatEngineConfig();
|
|
84
|
+
const hist = typeof cfg.forwardRequestHistory === "function" ? cfg.forwardRequestHistory : cfg.clientSecretRequestHistory;
|
|
85
|
+
if (typeof hist === "function") {
|
|
86
|
+
return (params, fetchOptions) => hist.call(cfg, params, fetchOptions);
|
|
87
|
+
}
|
|
88
|
+
throw new Error(
|
|
89
|
+
"[chat-engine] No history transport: configureChatEngine() needs forwardRequestHistory (or the deprecated clientSecretRequestHistory), bound to a skapi instance."
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
function resolveForwardRequestFinalize() {
|
|
93
|
+
const cfg = chatEngineConfig();
|
|
94
|
+
if (typeof cfg.forwardRequestFinalize === "function") return cfg.forwardRequestFinalize;
|
|
95
|
+
if (typeof cfg.clientSecretRequestFinalize === "function") return cfg.clientSecretRequestFinalize;
|
|
96
|
+
return void 0;
|
|
97
|
+
}
|
|
98
|
+
function resolveForwardRequestStream() {
|
|
99
|
+
const cfg = chatEngineConfig();
|
|
100
|
+
if (typeof cfg.forwardRequestStream === "function") return cfg.forwardRequestStream;
|
|
101
|
+
if (typeof cfg.clientSecretRequestStream === "function") return cfg.clientSecretRequestStream;
|
|
102
|
+
return void 0;
|
|
103
|
+
}
|
|
64
104
|
function windowedIndexingEnabled() {
|
|
65
105
|
return _config?.windowedIndexing === true;
|
|
66
106
|
}
|
|
@@ -71,11 +111,13 @@ function liveStreamingEnabled() {
|
|
|
71
111
|
return _config?.liveStreaming === true;
|
|
72
112
|
}
|
|
73
113
|
function streamRecoveryEnabled() {
|
|
74
|
-
if (_config
|
|
75
|
-
|
|
114
|
+
if (!_config) return false;
|
|
115
|
+
if (_config.streamRecovery === false) return false;
|
|
116
|
+
return typeof resolveForwardRequestStream() === "function";
|
|
76
117
|
}
|
|
77
118
|
function skapiSupportsStreaming(sk) {
|
|
78
|
-
|
|
119
|
+
if (!sk) return false;
|
|
120
|
+
return typeof sk.forwardRequestStream === "function" && typeof sk.forwardRequestFinalize === "function" || typeof sk.clientSecretRequestStream === "function" && typeof sk.clientSecretRequestFinalize === "function";
|
|
79
121
|
}
|
|
80
122
|
function pollOpt() {
|
|
81
123
|
const p = _config?.poll;
|
|
@@ -1028,6 +1070,9 @@ function truncateLabelForDisplay(label) {
|
|
|
1028
1070
|
var CONTEXT_WINDOW_DEFAULT = { claude: 2e5, openai: 128e3 };
|
|
1029
1071
|
var CONTEXT_WINDOW_BY_MODEL = {
|
|
1030
1072
|
// claude, exact ids
|
|
1073
|
+
"claude-fable-5-1": 1e6,
|
|
1074
|
+
"claude-opus-5-5": 1e6,
|
|
1075
|
+
"claude-sonnet-5-5": 1e6,
|
|
1031
1076
|
"claude-fable-5": 1e6,
|
|
1032
1077
|
"claude-opus-5": 1e6,
|
|
1033
1078
|
"claude-opus-4-8": 1e6,
|
|
@@ -1041,6 +1086,9 @@ var CONTEXT_WINDOW_BY_MODEL = {
|
|
|
1041
1086
|
"claude-haiku-4-5": 2e5,
|
|
1042
1087
|
"claude-3-5-sonnet": 2e5,
|
|
1043
1088
|
// openai, exact ids
|
|
1089
|
+
"gpt-6-astra": 105e4,
|
|
1090
|
+
"gpt-6-sol": 105e4,
|
|
1091
|
+
"gpt-6-luna": 105e4,
|
|
1044
1092
|
"gpt-5.6-sol": 105e4,
|
|
1045
1093
|
"gpt-5.6-terra": 105e4,
|
|
1046
1094
|
"gpt-5.6-luna": 105e4,
|
|
@@ -1057,11 +1105,15 @@ var CONTEXT_WINDOW_BY_MODEL = {
|
|
|
1057
1105
|
"claude-opus": 1e6,
|
|
1058
1106
|
"claude-sonnet": 1e6,
|
|
1059
1107
|
"claude-haiku": 2e5,
|
|
1108
|
+
"gpt-6": 105e4,
|
|
1060
1109
|
"gpt-5.6": 105e4,
|
|
1061
1110
|
"gpt-5": 128e3
|
|
1062
1111
|
};
|
|
1063
1112
|
var MAX_OUTPUT_BY_MODEL = {
|
|
1064
1113
|
// claude
|
|
1114
|
+
"claude-fable-5-1": 128e3,
|
|
1115
|
+
"claude-opus-5-5": 128e3,
|
|
1116
|
+
"claude-sonnet-5-5": 128e3,
|
|
1065
1117
|
"claude-fable-5": 128e3,
|
|
1066
1118
|
"claude-opus-5": 128e3,
|
|
1067
1119
|
"claude-opus-4-8": 128e3,
|
|
@@ -1070,6 +1122,9 @@ var MAX_OUTPUT_BY_MODEL = {
|
|
|
1070
1122
|
"claude-haiku-4-5": 64e3,
|
|
1071
1123
|
"claude-3-5-sonnet": 8e3,
|
|
1072
1124
|
// openai
|
|
1125
|
+
"gpt-6-astra": 128e3,
|
|
1126
|
+
"gpt-6-sol": 128e3,
|
|
1127
|
+
"gpt-6-luna": 128e3,
|
|
1073
1128
|
"gpt-5.6-sol": 128e3,
|
|
1074
1129
|
"gpt-5.6-terra": 128e3,
|
|
1075
1130
|
"gpt-5.6-luna": 128e3,
|
|
@@ -1086,6 +1141,7 @@ var MAX_OUTPUT_BY_MODEL = {
|
|
|
1086
1141
|
"claude-opus": 128e3,
|
|
1087
1142
|
"claude-sonnet": 64e3,
|
|
1088
1143
|
"claude-haiku": 64e3,
|
|
1144
|
+
"gpt-6": 128e3,
|
|
1089
1145
|
"gpt-5.6": 128e3,
|
|
1090
1146
|
"gpt-5": 128e3
|
|
1091
1147
|
};
|
|
@@ -2177,7 +2233,7 @@ function mcpEndpointFor(anonymous, publicProjectId, service) {
|
|
|
2177
2233
|
const project = publicProjectId || service;
|
|
2178
2234
|
return { url: String(mcpUrl()).replace(/\/+$/, "") + "/p/" + project };
|
|
2179
2235
|
}
|
|
2180
|
-
var
|
|
2236
|
+
var forwardRequest = (opts) => resolveForwardRequest()(opts);
|
|
2181
2237
|
var CHAT_STREAM_ON = Object.freeze({
|
|
2182
2238
|
transport: Object.freeze({ stream: true }),
|
|
2183
2239
|
body: Object.freeze({ stream: true })
|
|
@@ -2368,8 +2424,8 @@ async function callClaudeWithMcp({
|
|
|
2368
2424
|
mcpServerDefinition.authorization_token = mcpServer.authorizationToken;
|
|
2369
2425
|
}
|
|
2370
2426
|
const stream = chatStreamWiring(userId || service);
|
|
2371
|
-
return
|
|
2372
|
-
|
|
2427
|
+
return forwardRequest({
|
|
2428
|
+
secretName: "claude",
|
|
2373
2429
|
queue: userId || service,
|
|
2374
2430
|
service,
|
|
2375
2431
|
owner,
|
|
@@ -2474,8 +2530,8 @@ async function callOpenAIWithPublicMcp(prompt, service, owner, messages, system,
|
|
|
2474
2530
|
}))
|
|
2475
2531
|
];
|
|
2476
2532
|
const stream = chatStreamWiring(userId || service);
|
|
2477
|
-
return
|
|
2478
|
-
|
|
2533
|
+
return forwardRequest({
|
|
2534
|
+
secretName: "openai",
|
|
2479
2535
|
queue: userId || service,
|
|
2480
2536
|
service,
|
|
2481
2537
|
owner,
|
|
@@ -2624,8 +2680,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2624
2680
|
if (platform === "openai") {
|
|
2625
2681
|
const resolvedModel2 = info.model || DEFAULT_OPENAI_MODEL;
|
|
2626
2682
|
const imageDetail = getOpenAIImageDetail(resolvedModel2);
|
|
2627
|
-
return tapDispatchFailure(
|
|
2628
|
-
|
|
2683
|
+
return tapDispatchFailure(forwardRequest({
|
|
2684
|
+
secretName: "openai",
|
|
2629
2685
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2630
2686
|
service,
|
|
2631
2687
|
owner,
|
|
@@ -2671,8 +2727,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2671
2727
|
}));
|
|
2672
2728
|
}
|
|
2673
2729
|
const resolvedModel = info.model || DEFAULT_CLAUDE_MODEL;
|
|
2674
|
-
return tapDispatchFailure(
|
|
2675
|
-
|
|
2730
|
+
return tapDispatchFailure(forwardRequest({
|
|
2731
|
+
secretName: "claude",
|
|
2676
2732
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2677
2733
|
service,
|
|
2678
2734
|
owner,
|
|
@@ -2763,8 +2819,8 @@ function extractOpenAIText(response) {
|
|
|
2763
2819
|
return "";
|
|
2764
2820
|
}
|
|
2765
2821
|
async function listClaudeModels(service, owner) {
|
|
2766
|
-
return
|
|
2767
|
-
|
|
2822
|
+
return forwardRequest({
|
|
2823
|
+
secretName: "claude",
|
|
2768
2824
|
service,
|
|
2769
2825
|
owner,
|
|
2770
2826
|
url: ANTHROPIC_MODELS_API_URL,
|
|
@@ -2776,8 +2832,8 @@ async function listClaudeModels(service, owner) {
|
|
|
2776
2832
|
});
|
|
2777
2833
|
}
|
|
2778
2834
|
async function listOpenAIModels(service, owner) {
|
|
2779
|
-
return
|
|
2780
|
-
|
|
2835
|
+
return forwardRequest({
|
|
2836
|
+
secretName: "openai",
|
|
2781
2837
|
service,
|
|
2782
2838
|
owner,
|
|
2783
2839
|
url: OPENAI_MODELS_API_URL,
|
|
@@ -2831,7 +2887,7 @@ async function getChatHistory(params, fetchOptions) {
|
|
|
2831
2887
|
params.compact ? { compact: true } : {},
|
|
2832
2888
|
params.queue_exclude ? { queue_exclude: params.queue_exclude } : {}
|
|
2833
2889
|
);
|
|
2834
|
-
return
|
|
2890
|
+
return resolveForwardRequestHistory()(
|
|
2835
2891
|
p,
|
|
2836
2892
|
Object.assign({ ascending: false, limit: CHAT_HISTORY_PAGE_LIMIT }, fetchOptions)
|
|
2837
2893
|
);
|
|
@@ -4604,7 +4660,7 @@ var ChatSession = class {
|
|
|
4604
4660
|
_finalizeStreamedTurn(st) {
|
|
4605
4661
|
if (st.finalized) return;
|
|
4606
4662
|
if (!this._mayFinalize(st)) return;
|
|
4607
|
-
var fin =
|
|
4663
|
+
var fin = resolveForwardRequestFinalize();
|
|
4608
4664
|
if (!fin || st.finalBody == null) return;
|
|
4609
4665
|
st.finalized = true;
|
|
4610
4666
|
var url = st.platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
@@ -4615,10 +4671,10 @@ var ChatSession = class {
|
|
|
4615
4671
|
service: st.projectId,
|
|
4616
4672
|
owner: st.owner
|
|
4617
4673
|
})).catch(function(err) {
|
|
4618
|
-
console.warn("[chat-engine]
|
|
4674
|
+
console.warn("[chat-engine] forwardRequestFinalize failed", err);
|
|
4619
4675
|
});
|
|
4620
4676
|
} catch (e) {
|
|
4621
|
-
console.warn("[chat-engine]
|
|
4677
|
+
console.warn("[chat-engine] forwardRequestFinalize threw", e);
|
|
4622
4678
|
}
|
|
4623
4679
|
}
|
|
4624
4680
|
/** Painted-but-unsettled live text on a bubble, for the typewriter to resume from.
|
|
@@ -4833,8 +4889,7 @@ var ChatSession = class {
|
|
|
4833
4889
|
return this._readBackStreamedTurn(itemId, this.getHistoryCacheKey(), platform, id ? id.projectId : "", id ? id.owner : "", true);
|
|
4834
4890
|
}
|
|
4835
4891
|
_readBackStreamedTurn(itemId, ownerKey, platform, projectId, owner, manual) {
|
|
4836
|
-
var
|
|
4837
|
-
var read = cfg.clientSecretRequestStream;
|
|
4892
|
+
var read = resolveForwardRequestStream();
|
|
4838
4893
|
if (!read || !itemId) return Promise.resolve();
|
|
4839
4894
|
if (this._rec().inflight[itemId]) return Promise.resolve();
|
|
4840
4895
|
if (!manual && this._rec().attempted[itemId]) {
|
|
@@ -4947,7 +5002,7 @@ var ChatSession = class {
|
|
|
4947
5002
|
}
|
|
4948
5003
|
if (!degraded) delete this._rec().incomplete[itemId];
|
|
4949
5004
|
if (!store || body == null || isErr) return;
|
|
4950
|
-
var fin =
|
|
5005
|
+
var fin = resolveForwardRequestFinalize();
|
|
4951
5006
|
if (!fin) return;
|
|
4952
5007
|
var url = platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
4953
5008
|
try {
|