bunnyquery 1.10.11 → 1.11.0
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.css +1 -4
- package/bunnyquery.js +125 -62
- package/dist/engine.cjs +64 -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 +64 -23
- package/dist/engine.mjs.map +1 -1
- package/package.json +1 -1
- 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/styles/chat.css +1 -4
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;
|
|
@@ -2177,7 +2219,7 @@ function mcpEndpointFor(anonymous, publicProjectId, service) {
|
|
|
2177
2219
|
const project = publicProjectId || service;
|
|
2178
2220
|
return { url: String(mcpUrl()).replace(/\/+$/, "") + "/p/" + project };
|
|
2179
2221
|
}
|
|
2180
|
-
var
|
|
2222
|
+
var forwardRequest = (opts) => resolveForwardRequest()(opts);
|
|
2181
2223
|
var CHAT_STREAM_ON = Object.freeze({
|
|
2182
2224
|
transport: Object.freeze({ stream: true }),
|
|
2183
2225
|
body: Object.freeze({ stream: true })
|
|
@@ -2368,8 +2410,8 @@ async function callClaudeWithMcp({
|
|
|
2368
2410
|
mcpServerDefinition.authorization_token = mcpServer.authorizationToken;
|
|
2369
2411
|
}
|
|
2370
2412
|
const stream = chatStreamWiring(userId || service);
|
|
2371
|
-
return
|
|
2372
|
-
|
|
2413
|
+
return forwardRequest({
|
|
2414
|
+
secretName: "claude",
|
|
2373
2415
|
queue: userId || service,
|
|
2374
2416
|
service,
|
|
2375
2417
|
owner,
|
|
@@ -2474,8 +2516,8 @@ async function callOpenAIWithPublicMcp(prompt, service, owner, messages, system,
|
|
|
2474
2516
|
}))
|
|
2475
2517
|
];
|
|
2476
2518
|
const stream = chatStreamWiring(userId || service);
|
|
2477
|
-
return
|
|
2478
|
-
|
|
2519
|
+
return forwardRequest({
|
|
2520
|
+
secretName: "openai",
|
|
2479
2521
|
queue: userId || service,
|
|
2480
2522
|
service,
|
|
2481
2523
|
owner,
|
|
@@ -2624,8 +2666,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2624
2666
|
if (platform === "openai") {
|
|
2625
2667
|
const resolvedModel2 = info.model || DEFAULT_OPENAI_MODEL;
|
|
2626
2668
|
const imageDetail = getOpenAIImageDetail(resolvedModel2);
|
|
2627
|
-
return tapDispatchFailure(
|
|
2628
|
-
|
|
2669
|
+
return tapDispatchFailure(forwardRequest({
|
|
2670
|
+
secretName: "openai",
|
|
2629
2671
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2630
2672
|
service,
|
|
2631
2673
|
owner,
|
|
@@ -2671,8 +2713,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2671
2713
|
}));
|
|
2672
2714
|
}
|
|
2673
2715
|
const resolvedModel = info.model || DEFAULT_CLAUDE_MODEL;
|
|
2674
|
-
return tapDispatchFailure(
|
|
2675
|
-
|
|
2716
|
+
return tapDispatchFailure(forwardRequest({
|
|
2717
|
+
secretName: "claude",
|
|
2676
2718
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2677
2719
|
service,
|
|
2678
2720
|
owner,
|
|
@@ -2763,8 +2805,8 @@ function extractOpenAIText(response) {
|
|
|
2763
2805
|
return "";
|
|
2764
2806
|
}
|
|
2765
2807
|
async function listClaudeModels(service, owner) {
|
|
2766
|
-
return
|
|
2767
|
-
|
|
2808
|
+
return forwardRequest({
|
|
2809
|
+
secretName: "claude",
|
|
2768
2810
|
service,
|
|
2769
2811
|
owner,
|
|
2770
2812
|
url: ANTHROPIC_MODELS_API_URL,
|
|
@@ -2776,8 +2818,8 @@ async function listClaudeModels(service, owner) {
|
|
|
2776
2818
|
});
|
|
2777
2819
|
}
|
|
2778
2820
|
async function listOpenAIModels(service, owner) {
|
|
2779
|
-
return
|
|
2780
|
-
|
|
2821
|
+
return forwardRequest({
|
|
2822
|
+
secretName: "openai",
|
|
2781
2823
|
service,
|
|
2782
2824
|
owner,
|
|
2783
2825
|
url: OPENAI_MODELS_API_URL,
|
|
@@ -2831,7 +2873,7 @@ async function getChatHistory(params, fetchOptions) {
|
|
|
2831
2873
|
params.compact ? { compact: true } : {},
|
|
2832
2874
|
params.queue_exclude ? { queue_exclude: params.queue_exclude } : {}
|
|
2833
2875
|
);
|
|
2834
|
-
return
|
|
2876
|
+
return resolveForwardRequestHistory()(
|
|
2835
2877
|
p,
|
|
2836
2878
|
Object.assign({ ascending: false, limit: CHAT_HISTORY_PAGE_LIMIT }, fetchOptions)
|
|
2837
2879
|
);
|
|
@@ -4604,7 +4646,7 @@ var ChatSession = class {
|
|
|
4604
4646
|
_finalizeStreamedTurn(st) {
|
|
4605
4647
|
if (st.finalized) return;
|
|
4606
4648
|
if (!this._mayFinalize(st)) return;
|
|
4607
|
-
var fin =
|
|
4649
|
+
var fin = resolveForwardRequestFinalize();
|
|
4608
4650
|
if (!fin || st.finalBody == null) return;
|
|
4609
4651
|
st.finalized = true;
|
|
4610
4652
|
var url = st.platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
@@ -4615,10 +4657,10 @@ var ChatSession = class {
|
|
|
4615
4657
|
service: st.projectId,
|
|
4616
4658
|
owner: st.owner
|
|
4617
4659
|
})).catch(function(err) {
|
|
4618
|
-
console.warn("[chat-engine]
|
|
4660
|
+
console.warn("[chat-engine] forwardRequestFinalize failed", err);
|
|
4619
4661
|
});
|
|
4620
4662
|
} catch (e) {
|
|
4621
|
-
console.warn("[chat-engine]
|
|
4663
|
+
console.warn("[chat-engine] forwardRequestFinalize threw", e);
|
|
4622
4664
|
}
|
|
4623
4665
|
}
|
|
4624
4666
|
/** Painted-but-unsettled live text on a bubble, for the typewriter to resume from.
|
|
@@ -4833,8 +4875,7 @@ var ChatSession = class {
|
|
|
4833
4875
|
return this._readBackStreamedTurn(itemId, this.getHistoryCacheKey(), platform, id ? id.projectId : "", id ? id.owner : "", true);
|
|
4834
4876
|
}
|
|
4835
4877
|
_readBackStreamedTurn(itemId, ownerKey, platform, projectId, owner, manual) {
|
|
4836
|
-
var
|
|
4837
|
-
var read = cfg.clientSecretRequestStream;
|
|
4878
|
+
var read = resolveForwardRequestStream();
|
|
4838
4879
|
if (!read || !itemId) return Promise.resolve();
|
|
4839
4880
|
if (this._rec().inflight[itemId]) return Promise.resolve();
|
|
4840
4881
|
if (!manual && this._rec().attempted[itemId]) {
|
|
@@ -4947,7 +4988,7 @@ var ChatSession = class {
|
|
|
4947
4988
|
}
|
|
4948
4989
|
if (!degraded) delete this._rec().incomplete[itemId];
|
|
4949
4990
|
if (!store || body == null || isErr) return;
|
|
4950
|
-
var fin =
|
|
4991
|
+
var fin = resolveForwardRequestFinalize();
|
|
4951
4992
|
if (!fin) return;
|
|
4952
4993
|
var url = platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
4953
4994
|
try {
|