@uncensoredcode/openbridge 0.1.2 → 0.1.4
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/package.json +1 -1
- package/packages/runtime/dist/tool-name-aliases.js +1 -0
- package/packages/server/dist/bridge/live-provider-extraction-canary.js +21 -2
- package/packages/server/dist/bridge/providers/generic-provider-transport.js +22 -1
- package/packages/server/dist/bridge/providers/web-provider-transport.d.ts +2 -0
- package/packages/server/dist/bridge/providers/web-provider-transport.js +2 -1
- package/packages/server/dist/bridge/stores/session-package-store.js +1 -1
package/package.json
CHANGED
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
import { bridgeRuntime } from "@uncensoredcode/openbridge/runtime";
|
|
4
|
+
import { providerSessionResolverModule } from "./providers/provider-session-resolver.js";
|
|
3
5
|
import { webProviderTransportModule } from "./providers/web-provider-transport.js";
|
|
4
6
|
import { fileBridgeStateStoreModule } from "./state/file-bridge-state-store.js";
|
|
7
|
+
import { localSessionPackageStoreModule } from "./stores/local-session-package-store.js";
|
|
8
|
+
import { sessionBackedProviderStoreModule } from "./stores/session-backed-provider-store.js";
|
|
5
9
|
const { classifyProviderTransportError, formatProviderFailureMessage } = bridgeRuntime;
|
|
6
|
-
const {
|
|
10
|
+
const { createBridgeProviderSessionResolver } = providerSessionResolverModule;
|
|
11
|
+
const { collectProviderTransportCompletionWithResolver } = webProviderTransportModule;
|
|
7
12
|
const { FileBridgeStateStore } = fileBridgeStateStoreModule;
|
|
13
|
+
const { createLocalSessionPackageStore } = localSessionPackageStoreModule;
|
|
14
|
+
const { createSessionBackedProviderStore } = sessionBackedProviderStoreModule;
|
|
8
15
|
const DEFAULT_LIVE_CANARY_PROMPT = "Reply with exactly OK.";
|
|
9
16
|
const DEFAULT_LIVE_CANARY_EXPECTED_SUBSTRING = "OK";
|
|
10
17
|
async function runLiveProviderExtractionCanary(input) {
|
|
@@ -15,7 +22,7 @@ async function runLiveProviderExtractionCanary(input) {
|
|
|
15
22
|
const requestId = input.requestId ?? `live-canary:${crypto.randomUUID()}`;
|
|
16
23
|
const startedAt = (input.now ?? Date.now)();
|
|
17
24
|
const stateStore = new FileBridgeStateStore(input.stateRoot ?? input.config.stateRoot);
|
|
18
|
-
const collectCompletion = input.collectCompletion ??
|
|
25
|
+
const collectCompletion = input.collectCompletion ?? createLiveProviderCompletionCollector(input.config, stateStore);
|
|
19
26
|
try {
|
|
20
27
|
const result = await collectCompletion(stateStore, {
|
|
21
28
|
lane: "main",
|
|
@@ -178,6 +185,18 @@ function readExpectedSubstring(value) {
|
|
|
178
185
|
}
|
|
179
186
|
return expectedSubstring;
|
|
180
187
|
}
|
|
188
|
+
function createLiveProviderCompletionCollector(config, stateStore) {
|
|
189
|
+
const sessionPackageStore = createLocalSessionPackageStore({
|
|
190
|
+
vaultPath: config.sessionVaultPath ?? path.join(stateStore.rootDir, "session-vault"),
|
|
191
|
+
keyPath: config.sessionVaultKeyPath ?? path.join(stateStore.rootDir, "keys", "session-vault.key")
|
|
192
|
+
});
|
|
193
|
+
const providerStore = createSessionBackedProviderStore(sessionPackageStore);
|
|
194
|
+
const providerSessionResolver = createBridgeProviderSessionResolver({
|
|
195
|
+
sessionPackageStore,
|
|
196
|
+
stateStore
|
|
197
|
+
});
|
|
198
|
+
return async (_stateStore, request) => collectProviderTransportCompletionWithResolver(providerSessionResolver, request, (providerId) => providerStore.get(providerId));
|
|
199
|
+
}
|
|
181
200
|
export const liveProviderExtractionCanaryModule = {
|
|
182
201
|
DEFAULT_LIVE_CANARY_PROMPT,
|
|
183
202
|
DEFAULT_LIVE_CANARY_EXPECTED_SUBSTRING,
|
|
@@ -166,7 +166,7 @@ async function ensureConversationBinding(request, profile, session, prompt) {
|
|
|
166
166
|
parentId: ""
|
|
167
167
|
});
|
|
168
168
|
const payload = await readJsonResponse(bootstrapResponse, request.providerId, "bootstrap");
|
|
169
|
-
const conversationId =
|
|
169
|
+
const conversationId = extractBootstrapConversationId(payload, profile.bootstrap.conversationIdPath);
|
|
170
170
|
if (!conversationId) {
|
|
171
171
|
throw new ProviderFailure({
|
|
172
172
|
kind: "permanent",
|
|
@@ -652,6 +652,27 @@ function extractFirstString(payload, path) {
|
|
|
652
652
|
}
|
|
653
653
|
return "";
|
|
654
654
|
}
|
|
655
|
+
function extractBootstrapConversationId(payload, configuredPath) {
|
|
656
|
+
const candidates = [configuredPath];
|
|
657
|
+
if (configuredPath.endsWith(".chat_session.id")) {
|
|
658
|
+
candidates.push(configuredPath.replace(/\.chat_session\.id$/, ".id"));
|
|
659
|
+
}
|
|
660
|
+
if (configuredPath.endsWith(".chat_session_id")) {
|
|
661
|
+
candidates.push(configuredPath.replace(/\.chat_session_id$/, ".id"));
|
|
662
|
+
}
|
|
663
|
+
for (const path of ["data.biz_data.id", "data.id", "id"]) {
|
|
664
|
+
if (!candidates.includes(path)) {
|
|
665
|
+
candidates.push(path);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
for (const path of candidates) {
|
|
669
|
+
const value = extractFirstString(payload, path);
|
|
670
|
+
if (value) {
|
|
671
|
+
return value;
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
return "";
|
|
675
|
+
}
|
|
655
676
|
function extractFirstNumber(payload, path) {
|
|
656
677
|
for (const value of extractPathValues(payload, path.split(".").filter(Boolean))) {
|
|
657
678
|
if (typeof value === "number" && Number.isFinite(value)) {
|
|
@@ -23,8 +23,10 @@ declare class WebProviderTransport implements ProviderTransport {
|
|
|
23
23
|
}>;
|
|
24
24
|
}
|
|
25
25
|
declare function collectProviderTransportCompletion(stateStore: FileBridgeStateStore, request: ProviderTransportRequest): Promise<CollectedProviderTransportCompletion>;
|
|
26
|
+
declare function collectProviderTransportCompletionWithResolver(providerSessionResolver: BridgeProviderSessionResolver, request: ProviderTransportRequest, loadProvider: (providerId: string) => ProviderRecord | null): Promise<CollectedProviderTransportCompletion>;
|
|
26
27
|
export declare const webProviderTransportModule: {
|
|
27
28
|
WebProviderTransport: typeof WebProviderTransport;
|
|
28
29
|
collectProviderTransportCompletion: typeof collectProviderTransportCompletion;
|
|
30
|
+
collectProviderTransportCompletionWithResolver: typeof collectProviderTransportCompletionWithResolver;
|
|
29
31
|
};
|
|
30
32
|
export type { StreamingProviderTransport, WebProviderTransport };
|
|
@@ -147,5 +147,6 @@ function summarizeProviderContent(value, maxLength = 320) {
|
|
|
147
147
|
}
|
|
148
148
|
export const webProviderTransportModule = {
|
|
149
149
|
WebProviderTransport,
|
|
150
|
-
collectProviderTransportCompletion
|
|
150
|
+
collectProviderTransportCompletion,
|
|
151
|
+
collectProviderTransportCompletionWithResolver
|
|
151
152
|
};
|
|
@@ -515,7 +515,7 @@ function inferDeepSeekConversationTransport(selectedRequest, value) {
|
|
|
515
515
|
headers: bootstrapHeaders,
|
|
516
516
|
body: {}
|
|
517
517
|
},
|
|
518
|
-
conversationIdPath: "data.biz_data.
|
|
518
|
+
conversationIdPath: "data.biz_data.id"
|
|
519
519
|
},
|
|
520
520
|
preflight: {
|
|
521
521
|
request: {
|