bunnyquery 1.10.12 → 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.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/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;
|
|
@@ -2175,7 +2217,7 @@ function mcpEndpointFor(anonymous, publicProjectId, service) {
|
|
|
2175
2217
|
const project = publicProjectId || service;
|
|
2176
2218
|
return { url: String(mcpUrl()).replace(/\/+$/, "") + "/p/" + project };
|
|
2177
2219
|
}
|
|
2178
|
-
var
|
|
2220
|
+
var forwardRequest = (opts) => resolveForwardRequest()(opts);
|
|
2179
2221
|
var CHAT_STREAM_ON = Object.freeze({
|
|
2180
2222
|
transport: Object.freeze({ stream: true }),
|
|
2181
2223
|
body: Object.freeze({ stream: true })
|
|
@@ -2366,8 +2408,8 @@ async function callClaudeWithMcp({
|
|
|
2366
2408
|
mcpServerDefinition.authorization_token = mcpServer.authorizationToken;
|
|
2367
2409
|
}
|
|
2368
2410
|
const stream = chatStreamWiring(userId || service);
|
|
2369
|
-
return
|
|
2370
|
-
|
|
2411
|
+
return forwardRequest({
|
|
2412
|
+
secretName: "claude",
|
|
2371
2413
|
queue: userId || service,
|
|
2372
2414
|
service,
|
|
2373
2415
|
owner,
|
|
@@ -2472,8 +2514,8 @@ async function callOpenAIWithPublicMcp(prompt, service, owner, messages, system,
|
|
|
2472
2514
|
}))
|
|
2473
2515
|
];
|
|
2474
2516
|
const stream = chatStreamWiring(userId || service);
|
|
2475
|
-
return
|
|
2476
|
-
|
|
2517
|
+
return forwardRequest({
|
|
2518
|
+
secretName: "openai",
|
|
2477
2519
|
queue: userId || service,
|
|
2478
2520
|
service,
|
|
2479
2521
|
owner,
|
|
@@ -2622,8 +2664,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2622
2664
|
if (platform === "openai") {
|
|
2623
2665
|
const resolvedModel2 = info.model || DEFAULT_OPENAI_MODEL;
|
|
2624
2666
|
const imageDetail = getOpenAIImageDetail(resolvedModel2);
|
|
2625
|
-
return tapDispatchFailure(
|
|
2626
|
-
|
|
2667
|
+
return tapDispatchFailure(forwardRequest({
|
|
2668
|
+
secretName: "openai",
|
|
2627
2669
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2628
2670
|
service,
|
|
2629
2671
|
owner,
|
|
@@ -2669,8 +2711,8 @@ async function notifyAgentSaveAttachment(info) {
|
|
|
2669
2711
|
}));
|
|
2670
2712
|
}
|
|
2671
2713
|
const resolvedModel = info.model || DEFAULT_CLAUDE_MODEL;
|
|
2672
|
-
return tapDispatchFailure(
|
|
2673
|
-
|
|
2714
|
+
return tapDispatchFailure(forwardRequest({
|
|
2715
|
+
secretName: "claude",
|
|
2674
2716
|
queue: bgIndexingQueueName(info.userId, service),
|
|
2675
2717
|
service,
|
|
2676
2718
|
owner,
|
|
@@ -2761,8 +2803,8 @@ function extractOpenAIText(response) {
|
|
|
2761
2803
|
return "";
|
|
2762
2804
|
}
|
|
2763
2805
|
async function listClaudeModels(service, owner) {
|
|
2764
|
-
return
|
|
2765
|
-
|
|
2806
|
+
return forwardRequest({
|
|
2807
|
+
secretName: "claude",
|
|
2766
2808
|
service,
|
|
2767
2809
|
owner,
|
|
2768
2810
|
url: ANTHROPIC_MODELS_API_URL,
|
|
@@ -2774,8 +2816,8 @@ async function listClaudeModels(service, owner) {
|
|
|
2774
2816
|
});
|
|
2775
2817
|
}
|
|
2776
2818
|
async function listOpenAIModels(service, owner) {
|
|
2777
|
-
return
|
|
2778
|
-
|
|
2819
|
+
return forwardRequest({
|
|
2820
|
+
secretName: "openai",
|
|
2779
2821
|
service,
|
|
2780
2822
|
owner,
|
|
2781
2823
|
url: OPENAI_MODELS_API_URL,
|
|
@@ -2829,7 +2871,7 @@ async function getChatHistory(params, fetchOptions) {
|
|
|
2829
2871
|
params.compact ? { compact: true } : {},
|
|
2830
2872
|
params.queue_exclude ? { queue_exclude: params.queue_exclude } : {}
|
|
2831
2873
|
);
|
|
2832
|
-
return
|
|
2874
|
+
return resolveForwardRequestHistory()(
|
|
2833
2875
|
p,
|
|
2834
2876
|
Object.assign({ ascending: false, limit: CHAT_HISTORY_PAGE_LIMIT }, fetchOptions)
|
|
2835
2877
|
);
|
|
@@ -4602,7 +4644,7 @@ var ChatSession = class {
|
|
|
4602
4644
|
_finalizeStreamedTurn(st) {
|
|
4603
4645
|
if (st.finalized) return;
|
|
4604
4646
|
if (!this._mayFinalize(st)) return;
|
|
4605
|
-
var fin =
|
|
4647
|
+
var fin = resolveForwardRequestFinalize();
|
|
4606
4648
|
if (!fin || st.finalBody == null) return;
|
|
4607
4649
|
st.finalized = true;
|
|
4608
4650
|
var url = st.platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
@@ -4613,10 +4655,10 @@ var ChatSession = class {
|
|
|
4613
4655
|
service: st.projectId,
|
|
4614
4656
|
owner: st.owner
|
|
4615
4657
|
})).catch(function(err) {
|
|
4616
|
-
console.warn("[chat-engine]
|
|
4658
|
+
console.warn("[chat-engine] forwardRequestFinalize failed", err);
|
|
4617
4659
|
});
|
|
4618
4660
|
} catch (e) {
|
|
4619
|
-
console.warn("[chat-engine]
|
|
4661
|
+
console.warn("[chat-engine] forwardRequestFinalize threw", e);
|
|
4620
4662
|
}
|
|
4621
4663
|
}
|
|
4622
4664
|
/** Painted-but-unsettled live text on a bubble, for the typewriter to resume from.
|
|
@@ -4831,8 +4873,7 @@ var ChatSession = class {
|
|
|
4831
4873
|
return this._readBackStreamedTurn(itemId, this.getHistoryCacheKey(), platform, id ? id.projectId : "", id ? id.owner : "", true);
|
|
4832
4874
|
}
|
|
4833
4875
|
_readBackStreamedTurn(itemId, ownerKey, platform, projectId, owner, manual) {
|
|
4834
|
-
var
|
|
4835
|
-
var read = cfg.clientSecretRequestStream;
|
|
4876
|
+
var read = resolveForwardRequestStream();
|
|
4836
4877
|
if (!read || !itemId) return Promise.resolve();
|
|
4837
4878
|
if (this._rec().inflight[itemId]) return Promise.resolve();
|
|
4838
4879
|
if (!manual && this._rec().attempted[itemId]) {
|
|
@@ -4945,7 +4986,7 @@ var ChatSession = class {
|
|
|
4945
4986
|
}
|
|
4946
4987
|
if (!degraded) delete this._rec().incomplete[itemId];
|
|
4947
4988
|
if (!store || body == null || isErr) return;
|
|
4948
|
-
var fin =
|
|
4989
|
+
var fin = resolveForwardRequestFinalize();
|
|
4949
4990
|
if (!fin) return;
|
|
4950
4991
|
var url = platform === "openai" ? OPENAI_RESPONSES_API_URL : ANTHROPIC_MESSAGES_API_URL;
|
|
4951
4992
|
try {
|