@uncensoredcode/openbridge 0.1.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 +117 -0
- package/bin/openbridge.js +10 -0
- package/package.json +85 -0
- package/packages/cli/dist/args.d.ts +30 -0
- package/packages/cli/dist/args.js +160 -0
- package/packages/cli/dist/cli.d.ts +2 -0
- package/packages/cli/dist/cli.js +9 -0
- package/packages/cli/dist/index.d.ts +26 -0
- package/packages/cli/dist/index.js +76 -0
- package/packages/runtime/dist/assistant-protocol.d.ts +34 -0
- package/packages/runtime/dist/assistant-protocol.js +121 -0
- package/packages/runtime/dist/execution/in-process.d.ts +14 -0
- package/packages/runtime/dist/execution/in-process.js +45 -0
- package/packages/runtime/dist/execution/types.d.ts +49 -0
- package/packages/runtime/dist/execution/types.js +20 -0
- package/packages/runtime/dist/index.d.ts +86 -0
- package/packages/runtime/dist/index.js +60 -0
- package/packages/runtime/dist/normalizers/index.d.ts +6 -0
- package/packages/runtime/dist/normalizers/index.js +12 -0
- package/packages/runtime/dist/normalizers/legacy-packet.d.ts +6 -0
- package/packages/runtime/dist/normalizers/legacy-packet.js +131 -0
- package/packages/runtime/dist/output-sanitizer.d.ts +23 -0
- package/packages/runtime/dist/output-sanitizer.js +78 -0
- package/packages/runtime/dist/packet-extractor.d.ts +17 -0
- package/packages/runtime/dist/packet-extractor.js +43 -0
- package/packages/runtime/dist/packet-normalizer.d.ts +21 -0
- package/packages/runtime/dist/packet-normalizer.js +47 -0
- package/packages/runtime/dist/prompt-compiler.d.ts +28 -0
- package/packages/runtime/dist/prompt-compiler.js +301 -0
- package/packages/runtime/dist/protocol.d.ts +44 -0
- package/packages/runtime/dist/protocol.js +165 -0
- package/packages/runtime/dist/provider-failure.d.ts +52 -0
- package/packages/runtime/dist/provider-failure.js +236 -0
- package/packages/runtime/dist/provider.d.ts +40 -0
- package/packages/runtime/dist/provider.js +1 -0
- package/packages/runtime/dist/runtime.d.ts +86 -0
- package/packages/runtime/dist/runtime.js +462 -0
- package/packages/runtime/dist/session-bound-provider.d.ts +52 -0
- package/packages/runtime/dist/session-bound-provider.js +366 -0
- package/packages/runtime/dist/tool-name-aliases.d.ts +5 -0
- package/packages/runtime/dist/tool-name-aliases.js +13 -0
- package/packages/runtime/dist/tools/bash.d.ts +9 -0
- package/packages/runtime/dist/tools/bash.js +157 -0
- package/packages/runtime/dist/tools/edit.d.ts +9 -0
- package/packages/runtime/dist/tools/edit.js +94 -0
- package/packages/runtime/dist/tools/index.d.ts +39 -0
- package/packages/runtime/dist/tools/index.js +27 -0
- package/packages/runtime/dist/tools/list-dir.d.ts +9 -0
- package/packages/runtime/dist/tools/list-dir.js +127 -0
- package/packages/runtime/dist/tools/read.d.ts +9 -0
- package/packages/runtime/dist/tools/read.js +56 -0
- package/packages/runtime/dist/tools/registry.d.ts +15 -0
- package/packages/runtime/dist/tools/registry.js +38 -0
- package/packages/runtime/dist/tools/runtime-path.d.ts +7 -0
- package/packages/runtime/dist/tools/runtime-path.js +22 -0
- package/packages/runtime/dist/tools/search-files.d.ts +9 -0
- package/packages/runtime/dist/tools/search-files.js +149 -0
- package/packages/runtime/dist/tools/text-file.d.ts +32 -0
- package/packages/runtime/dist/tools/text-file.js +101 -0
- package/packages/runtime/dist/tools/workspace-path.d.ts +17 -0
- package/packages/runtime/dist/tools/workspace-path.js +70 -0
- package/packages/runtime/dist/tools/write.d.ts +9 -0
- package/packages/runtime/dist/tools/write.js +59 -0
- package/packages/server/dist/bridge/bridge-model-catalog.d.ts +56 -0
- package/packages/server/dist/bridge/bridge-model-catalog.js +100 -0
- package/packages/server/dist/bridge/bridge-runtime-service.d.ts +61 -0
- package/packages/server/dist/bridge/bridge-runtime-service.js +1386 -0
- package/packages/server/dist/bridge/chat-completions/chat-completion-service.d.ts +127 -0
- package/packages/server/dist/bridge/chat-completions/chat-completion-service.js +1026 -0
- package/packages/server/dist/bridge/index.d.ts +335 -0
- package/packages/server/dist/bridge/index.js +45 -0
- package/packages/server/dist/bridge/live-provider-extraction-canary.d.ts +69 -0
- package/packages/server/dist/bridge/live-provider-extraction-canary.js +186 -0
- package/packages/server/dist/bridge/providers/generic-provider-transport.d.ts +53 -0
- package/packages/server/dist/bridge/providers/generic-provider-transport.js +973 -0
- package/packages/server/dist/bridge/providers/provider-session-resolver.d.ts +17 -0
- package/packages/server/dist/bridge/providers/provider-session-resolver.js +95 -0
- package/packages/server/dist/bridge/providers/provider-streams.d.ts +80 -0
- package/packages/server/dist/bridge/providers/provider-streams.js +844 -0
- package/packages/server/dist/bridge/providers/provider-transport-profile.d.ts +194 -0
- package/packages/server/dist/bridge/providers/provider-transport-profile.js +198 -0
- package/packages/server/dist/bridge/providers/web-provider-transport.d.ts +30 -0
- package/packages/server/dist/bridge/providers/web-provider-transport.js +151 -0
- package/packages/server/dist/bridge/state/file-bridge-state-store.d.ts +36 -0
- package/packages/server/dist/bridge/state/file-bridge-state-store.js +164 -0
- package/packages/server/dist/bridge/stores/local-session-package-store.d.ts +23 -0
- package/packages/server/dist/bridge/stores/local-session-package-store.js +548 -0
- package/packages/server/dist/bridge/stores/provider-store.d.ts +94 -0
- package/packages/server/dist/bridge/stores/provider-store.js +143 -0
- package/packages/server/dist/bridge/stores/session-backed-provider-store.d.ts +7 -0
- package/packages/server/dist/bridge/stores/session-backed-provider-store.js +26 -0
- package/packages/server/dist/bridge/stores/session-package-store.d.ts +286 -0
- package/packages/server/dist/bridge/stores/session-package-store.js +1527 -0
- package/packages/server/dist/bridge/stores/session-store.d.ts +120 -0
- package/packages/server/dist/bridge/stores/session-store.js +139 -0
- package/packages/server/dist/cli/index.d.ts +9 -0
- package/packages/server/dist/cli/index.js +6 -0
- package/packages/server/dist/cli/main.d.ts +2 -0
- package/packages/server/dist/cli/main.js +9 -0
- package/packages/server/dist/cli/run-bridge-server-cli.d.ts +54 -0
- package/packages/server/dist/cli/run-bridge-server-cli.js +371 -0
- package/packages/server/dist/client/bridge-api-client.d.ts +61 -0
- package/packages/server/dist/client/bridge-api-client.js +267 -0
- package/packages/server/dist/client/index.d.ts +11 -0
- package/packages/server/dist/client/index.js +11 -0
- package/packages/server/dist/config/bridge-server-config.d.ts +52 -0
- package/packages/server/dist/config/bridge-server-config.js +118 -0
- package/packages/server/dist/config/index.d.ts +20 -0
- package/packages/server/dist/config/index.js +8 -0
- package/packages/server/dist/http/bridge-api-route-context.d.ts +14 -0
- package/packages/server/dist/http/bridge-api-route-context.js +1 -0
- package/packages/server/dist/http/create-bridge-api-server.d.ts +72 -0
- package/packages/server/dist/http/create-bridge-api-server.js +225 -0
- package/packages/server/dist/http/index.d.ts +5 -0
- package/packages/server/dist/http/index.js +5 -0
- package/packages/server/dist/http/parse-request.d.ts +6 -0
- package/packages/server/dist/http/parse-request.js +27 -0
- package/packages/server/dist/http/register-bridge-api-routes.d.ts +7 -0
- package/packages/server/dist/http/register-bridge-api-routes.js +17 -0
- package/packages/server/dist/http/routes/admin-routes.d.ts +7 -0
- package/packages/server/dist/http/routes/admin-routes.js +135 -0
- package/packages/server/dist/http/routes/chat-completions-route.d.ts +7 -0
- package/packages/server/dist/http/routes/chat-completions-route.js +49 -0
- package/packages/server/dist/http/routes/health-routes.d.ts +6 -0
- package/packages/server/dist/http/routes/health-routes.js +7 -0
- package/packages/server/dist/http/routes/message-routes.d.ts +7 -0
- package/packages/server/dist/http/routes/message-routes.js +7 -0
- package/packages/server/dist/index.d.ts +85 -0
- package/packages/server/dist/index.js +28 -0
- package/packages/server/dist/security/bridge-auth.d.ts +9 -0
- package/packages/server/dist/security/bridge-auth.js +41 -0
- package/packages/server/dist/security/cors-policy.d.ts +5 -0
- package/packages/server/dist/security/cors-policy.js +34 -0
- package/packages/server/dist/security/index.d.ts +16 -0
- package/packages/server/dist/security/index.js +12 -0
- package/packages/server/dist/security/redact-sensitive-values.d.ts +19 -0
- package/packages/server/dist/security/redact-sensitive-values.js +67 -0
- package/packages/server/dist/shared/api-schema.d.ts +133 -0
- package/packages/server/dist/shared/api-schema.js +1 -0
- package/packages/server/dist/shared/bridge-api-error.d.ts +17 -0
- package/packages/server/dist/shared/bridge-api-error.js +19 -0
- package/packages/server/dist/shared/index.d.ts +7 -0
- package/packages/server/dist/shared/index.js +7 -0
- package/packages/server/dist/shared/output.d.ts +5 -0
- package/packages/server/dist/shared/output.js +14 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { chmod, mkdir, readFile, unlink, writeFile } from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
class FileBridgeStateStore {
|
|
5
|
+
rootDir;
|
|
6
|
+
constructor(rootDir) {
|
|
7
|
+
this.rootDir = path.resolve(rootDir);
|
|
8
|
+
}
|
|
9
|
+
async loadProviderSession(providerId) {
|
|
10
|
+
try {
|
|
11
|
+
const raw = await readFile(this.getProviderSessionPath(providerId), "utf8");
|
|
12
|
+
return JSON.parse(raw);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
if (error.code === "ENOENT") {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
throw error;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async loadBinding(providerId, sessionId) {
|
|
22
|
+
try {
|
|
23
|
+
const raw = await readFile(this.getConversationPath(providerId, sessionId), "utf8");
|
|
24
|
+
const parsed = JSON.parse(raw);
|
|
25
|
+
return {
|
|
26
|
+
conversationId: parsed.conversationId,
|
|
27
|
+
parentId: parsed.parentId,
|
|
28
|
+
runtimePlannerPrimed: parsed.runtimePlannerPrimed
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
if (error.code === "ENOENT") {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async saveBinding(providerId, sessionId, binding) {
|
|
39
|
+
const stored = {
|
|
40
|
+
providerId,
|
|
41
|
+
sessionId,
|
|
42
|
+
conversationId: binding.conversationId,
|
|
43
|
+
parentId: binding.parentId,
|
|
44
|
+
runtimePlannerPrimed: binding.runtimePlannerPrimed,
|
|
45
|
+
updatedAt: new Date().toISOString()
|
|
46
|
+
};
|
|
47
|
+
await writeSecureJson(this.getConversationPath(providerId, sessionId), stored);
|
|
48
|
+
}
|
|
49
|
+
async clearBinding(providerId, sessionId) {
|
|
50
|
+
try {
|
|
51
|
+
await unlink(this.getConversationPath(providerId, sessionId));
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (error.code === "ENOENT") {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async loadSessionHistory(sessionId) {
|
|
61
|
+
const stored = await this.readStoredSessionHistory(sessionId);
|
|
62
|
+
return (stored?.turns.map((turn) => ({
|
|
63
|
+
userMessage: turn.userMessage,
|
|
64
|
+
assistantMessage: turn.assistantMessage,
|
|
65
|
+
assistantMode: turn.assistantMode
|
|
66
|
+
})) ?? []);
|
|
67
|
+
}
|
|
68
|
+
async appendSessionTurn(sessionId, turn) {
|
|
69
|
+
const stored = (await this.readStoredSessionHistory(sessionId)) ?? {
|
|
70
|
+
sessionId,
|
|
71
|
+
turns: []
|
|
72
|
+
};
|
|
73
|
+
stored.turns.push({
|
|
74
|
+
...turn,
|
|
75
|
+
recordedAt: new Date().toISOString()
|
|
76
|
+
});
|
|
77
|
+
await writeSecureJson(this.getSessionHistoryPath(sessionId), stored);
|
|
78
|
+
}
|
|
79
|
+
async loadChatCompletionSession(providerId, modelKey, lookupKey) {
|
|
80
|
+
try {
|
|
81
|
+
const raw = await readFile(this.getChatCompletionContinuationPath(providerId, modelKey, lookupKey), "utf8");
|
|
82
|
+
const parsed = JSON.parse(raw);
|
|
83
|
+
return typeof parsed.sessionId === "string" && parsed.sessionId ? parsed.sessionId : null;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error.code === "ENOENT") {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async loadSharedChatCompletionSession(lookupKey) {
|
|
93
|
+
try {
|
|
94
|
+
const raw = await readFile(this.getSharedChatCompletionContinuationPath(lookupKey), "utf8");
|
|
95
|
+
const parsed = JSON.parse(raw);
|
|
96
|
+
return typeof parsed.sessionId === "string" && parsed.sessionId ? parsed.sessionId : null;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (error.code === "ENOENT") {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async saveChatCompletionSession(providerId, modelKey, lookupKey, sessionId) {
|
|
106
|
+
const stored = {
|
|
107
|
+
providerId,
|
|
108
|
+
modelKey,
|
|
109
|
+
lookupKey,
|
|
110
|
+
sessionId,
|
|
111
|
+
updatedAt: new Date().toISOString()
|
|
112
|
+
};
|
|
113
|
+
await writeSecureJson(this.getChatCompletionContinuationPath(providerId, modelKey, lookupKey), stored);
|
|
114
|
+
}
|
|
115
|
+
async saveSharedChatCompletionSession(lookupKey, sessionId, metadata) {
|
|
116
|
+
const stored = {
|
|
117
|
+
lookupKey,
|
|
118
|
+
sessionId,
|
|
119
|
+
providerId: metadata?.providerId,
|
|
120
|
+
modelKey: metadata?.modelKey,
|
|
121
|
+
updatedAt: new Date().toISOString()
|
|
122
|
+
};
|
|
123
|
+
await writeSecureJson(this.getSharedChatCompletionContinuationPath(lookupKey), stored);
|
|
124
|
+
}
|
|
125
|
+
async readStoredSessionHistory(sessionId) {
|
|
126
|
+
try {
|
|
127
|
+
const raw = await readFile(this.getSessionHistoryPath(sessionId), "utf8");
|
|
128
|
+
return JSON.parse(raw);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (error.code === "ENOENT") {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
throw error;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
getProviderSessionPath(providerId) {
|
|
138
|
+
return path.join(this.rootDir, "sessions", `${providerId}.json`);
|
|
139
|
+
}
|
|
140
|
+
getConversationPath(providerId, sessionId) {
|
|
141
|
+
const digest = crypto.createHash("sha256").update(sessionId).digest("hex");
|
|
142
|
+
return path.join(this.rootDir, "conversations", `${providerId}-${digest}.json`);
|
|
143
|
+
}
|
|
144
|
+
getSessionHistoryPath(sessionId) {
|
|
145
|
+
const digest = crypto.createHash("sha256").update(sessionId).digest("hex");
|
|
146
|
+
return path.join(this.rootDir, "bridge-sessions", `${digest}.json`);
|
|
147
|
+
}
|
|
148
|
+
getChatCompletionContinuationPath(providerId, modelKey, lookupKey) {
|
|
149
|
+
const digest = crypto.createHash("sha256").update(`${modelKey}:${lookupKey}`).digest("hex");
|
|
150
|
+
return path.join(this.rootDir, "chat-completion-continuations", `${providerId}-${digest}.json`);
|
|
151
|
+
}
|
|
152
|
+
getSharedChatCompletionContinuationPath(lookupKey) {
|
|
153
|
+
const digest = crypto.createHash("sha256").update(lookupKey).digest("hex");
|
|
154
|
+
return path.join(this.rootDir, "chat-completion-continuations", `shared-${digest}.json`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
async function writeSecureJson(targetPath, value) {
|
|
158
|
+
await mkdir(path.dirname(targetPath), { recursive: true });
|
|
159
|
+
await writeFile(targetPath, `${JSON.stringify(value, null, 2)}\n`, "utf8");
|
|
160
|
+
await chmod(targetPath, 0o600);
|
|
161
|
+
}
|
|
162
|
+
export const fileBridgeStateStoreModule = {
|
|
163
|
+
FileBridgeStateStore
|
|
164
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SessionPackageStore } from "./session-package-store.ts";
|
|
2
|
+
type LocalSessionPackageStoreOptions = {
|
|
3
|
+
vaultPath: string;
|
|
4
|
+
keyPath: string;
|
|
5
|
+
keyMaterial?: string | null;
|
|
6
|
+
now?: () => string;
|
|
7
|
+
testHooks?: {
|
|
8
|
+
afterTempWrite?: (targetPath: string, tempPath: string) => void;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
declare class SessionPackageVaultError extends Error {
|
|
12
|
+
constructor(message: string);
|
|
13
|
+
}
|
|
14
|
+
declare function clearLocalSessionVault(input: {
|
|
15
|
+
vaultPath: string;
|
|
16
|
+
}): void;
|
|
17
|
+
declare function createLocalSessionPackageStore(options: LocalSessionPackageStoreOptions): SessionPackageStore;
|
|
18
|
+
export declare const localSessionPackageStoreModule: {
|
|
19
|
+
SessionPackageVaultError: typeof SessionPackageVaultError;
|
|
20
|
+
clearLocalSessionVault: typeof clearLocalSessionVault;
|
|
21
|
+
createLocalSessionPackageStore: typeof createLocalSessionPackageStore;
|
|
22
|
+
};
|
|
23
|
+
export type { LocalSessionPackageStoreOptions, SessionPackageVaultError };
|