@cortexkit/aft-opencode 0.9.1 → 0.10.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/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.js +18 -4
- package/dist/bridge.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +182 -1
- package/dist/index.js.map +1 -1
- package/dist/notifications.d.ts +48 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +307 -0
- package/dist/notifications.js.map +1 -0
- package/dist/onnx-runtime.d.ts +35 -0
- package/dist/onnx-runtime.d.ts.map +1 -0
- package/dist/onnx-runtime.js +203 -0
- package/dist/onnx-runtime.js.map +1 -0
- package/dist/pool.d.ts +2 -0
- package/dist/pool.d.ts.map +1 -1
- package/dist/pool.js +25 -6
- package/dist/pool.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +15 -4
- package/dist/resolver.js.map +1 -1
- package/dist/shared/opencode-config-dir.d.ts +16 -0
- package/dist/shared/opencode-config-dir.d.ts.map +1 -0
- package/dist/shared/opencode-config-dir.js +26 -0
- package/dist/shared/opencode-config-dir.js.map +1 -0
- package/dist/shared/rpc-client.d.ts +16 -0
- package/dist/shared/rpc-client.d.ts.map +1 -0
- package/dist/shared/rpc-client.js +108 -0
- package/dist/shared/rpc-client.js.map +1 -0
- package/dist/shared/rpc-server.d.ts +17 -0
- package/dist/shared/rpc-server.d.ts.map +1 -0
- package/dist/shared/rpc-server.js +120 -0
- package/dist/shared/rpc-server.js.map +1 -0
- package/dist/shared/rpc-utils.d.ts +11 -0
- package/dist/shared/rpc-utils.d.ts.map +1 -0
- package/dist/shared/rpc-utils.js +20 -0
- package/dist/shared/rpc-utils.js.map +1 -0
- package/dist/shared/runtime.d.ts +10 -0
- package/dist/shared/runtime.d.ts.map +1 -0
- package/dist/shared/runtime.js +14 -0
- package/dist/shared/runtime.js.map +1 -0
- package/dist/shared/status.d.ts +37 -0
- package/dist/shared/status.d.ts.map +1 -0
- package/dist/shared/status.js +135 -0
- package/dist/shared/status.js.map +1 -0
- package/dist/shared/tui-config.d.ts +2 -0
- package/dist/shared/tui-config.d.ts.map +1 -0
- package/dist/shared/tui-config.js +134 -0
- package/dist/shared/tui-config.js.map +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +23 -3
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/semantic.d.ts +4 -0
- package/dist/tools/semantic.d.ts.map +1 -0
- package/dist/tools/semantic.js +35 -0
- package/dist/tools/semantic.js.map +1 -0
- package/package.json +26 -6
- package/src/shared/opencode-config-dir.ts +46 -0
- package/src/shared/rpc-client.ts +123 -0
- package/src/shared/rpc-server.ts +135 -0
- package/src/shared/rpc-utils.ts +21 -0
- package/src/shared/runtime.ts +26 -0
- package/src/shared/status.ts +206 -0
- package/src/shared/tui-config.ts +155 -0
- package/src/tui/index.tsx +209 -0
- package/src/tui/types/opencode-plugin-tui.d.ts +232 -0
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* User-visible notifications for AFT plugin.
|
|
3
|
+
*
|
|
4
|
+
* Two delivery paths based on the OpenCode client:
|
|
5
|
+
* - Desktop: Sends ignored messages to the active session (appears in chat, hidden from LLM)
|
|
6
|
+
* - TUI: Uses client.tui.showToast() for transient toast notifications
|
|
7
|
+
*
|
|
8
|
+
* Use cases:
|
|
9
|
+
* - Feature announcements (new version, new experimental features)
|
|
10
|
+
* - Warnings (ONNX Runtime not found, stale binary)
|
|
11
|
+
* - Status updates (semantic search ready, index built)
|
|
12
|
+
*
|
|
13
|
+
* Messages are identified by markers and cleaned up on subsequent startups
|
|
14
|
+
* when no longer relevant (Desktop only — TUI toasts are inherently transient).
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { homedir, platform } from "node:os";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { log } from "./logger.js";
|
|
20
|
+
function isTuiMode() {
|
|
21
|
+
return process.env.OPENCODE_CLIENT === "cli";
|
|
22
|
+
}
|
|
23
|
+
async function showTuiToast(client, title, message, variant = "info", duration = 8000) {
|
|
24
|
+
const c = client;
|
|
25
|
+
if (typeof c.tui?.showToast !== "function")
|
|
26
|
+
return false;
|
|
27
|
+
try {
|
|
28
|
+
await c.tui.showToast({ body: { title, message, variant, duration } });
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// --- Markers for message identification ---
|
|
36
|
+
/** Prefix for all AFT notification messages */
|
|
37
|
+
const AFT_MARKER = "🔧 AFT:";
|
|
38
|
+
/** Marker for feature announcements */
|
|
39
|
+
const FEATURE_MARKER = `${AFT_MARKER} New in`;
|
|
40
|
+
/** Marker for warnings (ONNX missing, etc.) */
|
|
41
|
+
const WARNING_MARKER = `${AFT_MARKER} ⚠️`;
|
|
42
|
+
/** Marker for transient status updates */
|
|
43
|
+
const STATUS_MARKER = `${AFT_MARKER} ✅`;
|
|
44
|
+
// --- Desktop state file resolution ---
|
|
45
|
+
function getDesktopStatePath() {
|
|
46
|
+
const os = platform();
|
|
47
|
+
const home = homedir();
|
|
48
|
+
if (os === "darwin") {
|
|
49
|
+
return join(home, "Library", "Application Support", "ai.opencode.desktop", "opencode.global.dat");
|
|
50
|
+
}
|
|
51
|
+
if (os === "linux") {
|
|
52
|
+
const xdgConfig = process.env.XDG_CONFIG_HOME || join(home, ".config");
|
|
53
|
+
return join(xdgConfig, "ai.opencode.desktop", "opencode.global.dat");
|
|
54
|
+
}
|
|
55
|
+
if (os === "win32") {
|
|
56
|
+
const appData = process.env.APPDATA || join(home, "AppData", "Roaming");
|
|
57
|
+
return join(appData, "ai.opencode.desktop", "opencode.global.dat");
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
function readDesktopState(directory) {
|
|
62
|
+
const statePath = getDesktopStatePath();
|
|
63
|
+
if (!statePath || !existsSync(statePath)) {
|
|
64
|
+
return { sessionId: null, serverUrl: null };
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const raw = readFileSync(statePath, "utf-8");
|
|
68
|
+
const state = JSON.parse(raw);
|
|
69
|
+
// Extract sidecar URL from server state
|
|
70
|
+
let serverUrl = null;
|
|
71
|
+
const serverStr = state.server;
|
|
72
|
+
if (typeof serverStr === "string") {
|
|
73
|
+
try {
|
|
74
|
+
const serverState = JSON.parse(serverStr);
|
|
75
|
+
if (typeof serverState.currentSidecarUrl === "string") {
|
|
76
|
+
serverUrl = serverState.currentSidecarUrl;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// ignore
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Extract last session for directory
|
|
84
|
+
let sessionId = null;
|
|
85
|
+
const layoutPage = state["layout.page"];
|
|
86
|
+
if (typeof layoutPage === "string") {
|
|
87
|
+
const parsed = JSON.parse(layoutPage);
|
|
88
|
+
const lastProjectSession = parsed.lastProjectSession;
|
|
89
|
+
if (lastProjectSession) {
|
|
90
|
+
const entry = lastProjectSession[directory];
|
|
91
|
+
sessionId = entry?.id ?? null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { sessionId, serverUrl };
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return { sessionId: null, serverUrl: null };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function getServerAuth() {
|
|
101
|
+
const password = process.env.OPENCODE_SERVER_PASSWORD;
|
|
102
|
+
if (!password)
|
|
103
|
+
return undefined;
|
|
104
|
+
const username = process.env.OPENCODE_SERVER_USERNAME ?? "opencode";
|
|
105
|
+
return `Basic ${Buffer.from(`${username}:${password}`, "utf8").toString("base64")}`;
|
|
106
|
+
}
|
|
107
|
+
async function getSessionMessages(client, sessionId) {
|
|
108
|
+
try {
|
|
109
|
+
const c = client;
|
|
110
|
+
if (typeof c.session?.messages === "function") {
|
|
111
|
+
const result = await c.session.messages({ path: { id: sessionId } });
|
|
112
|
+
return result?.data ?? [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// silent
|
|
117
|
+
}
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
async function sendIgnoredMessage(client, sessionId, text) {
|
|
121
|
+
try {
|
|
122
|
+
const c = client;
|
|
123
|
+
const promptInput = {
|
|
124
|
+
path: { id: sessionId },
|
|
125
|
+
body: {
|
|
126
|
+
noReply: true,
|
|
127
|
+
parts: [{ type: "text", text, ignored: true }],
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
if (typeof c.session?.prompt === "function") {
|
|
131
|
+
await Promise.resolve(c.session.prompt(promptInput));
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
if (typeof c.session?.promptAsync === "function") {
|
|
135
|
+
await c.session.promptAsync(promptInput);
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
log(`[aft-plugin] notification send failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
141
|
+
}
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
async function deleteMessage(serverUrl, sessionId, messageId) {
|
|
145
|
+
const auth = getServerAuth();
|
|
146
|
+
const url = `${serverUrl}/session/${encodeURIComponent(sessionId)}/message/${encodeURIComponent(messageId)}`;
|
|
147
|
+
try {
|
|
148
|
+
const response = await fetch(url, {
|
|
149
|
+
method: "DELETE",
|
|
150
|
+
headers: auth ? { Authorization: auth } : {},
|
|
151
|
+
signal: AbortSignal.timeout(10_000),
|
|
152
|
+
});
|
|
153
|
+
return response.ok;
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Send a persistent warning notification.
|
|
161
|
+
* Desktop: ignored message, cleaned up on next startup when resolved.
|
|
162
|
+
* TUI: toast with warning variant (inherently transient).
|
|
163
|
+
*/
|
|
164
|
+
export async function sendWarning(opts, message) {
|
|
165
|
+
// Try TUI toast first, fall back to Desktop ignored message
|
|
166
|
+
const toastSent = await showTuiToast(opts.client, "AFT Warning", message, "warning", 10000);
|
|
167
|
+
if (toastSent)
|
|
168
|
+
return;
|
|
169
|
+
const { sessionId } = readDesktopState(opts.directory);
|
|
170
|
+
if (!sessionId)
|
|
171
|
+
return;
|
|
172
|
+
const text = `${WARNING_MARKER} ${message}`;
|
|
173
|
+
log(`[aft-plugin] sending warning to session ${sessionId}`);
|
|
174
|
+
await sendIgnoredMessage(opts.client, sessionId, text);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Send a transient status notification.
|
|
178
|
+
* Desktop: ignored message, auto-deletes after 3 seconds.
|
|
179
|
+
* TUI: toast with success variant, auto-dismissed by the TUI.
|
|
180
|
+
*/
|
|
181
|
+
export async function sendStatus(opts, message) {
|
|
182
|
+
if (isTuiMode()) {
|
|
183
|
+
await showTuiToast(opts.client, "AFT", message, "success", 3000);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const { sessionId, serverUrl: desktopServerUrl } = readDesktopState(opts.directory);
|
|
187
|
+
if (!sessionId)
|
|
188
|
+
return;
|
|
189
|
+
const text = `${STATUS_MARKER} ${message}`;
|
|
190
|
+
await sendIgnoredMessage(opts.client, sessionId, text);
|
|
191
|
+
// Auto-delete after 3 seconds
|
|
192
|
+
const effectiveServerUrl = opts.serverUrl || desktopServerUrl;
|
|
193
|
+
if (!effectiveServerUrl)
|
|
194
|
+
return;
|
|
195
|
+
setTimeout(async () => {
|
|
196
|
+
try {
|
|
197
|
+
const msgs = await getSessionMessages(opts.client, sessionId);
|
|
198
|
+
for (let i = msgs.length - 1; i >= 0; i--) {
|
|
199
|
+
const msg = msgs[i];
|
|
200
|
+
const msgId = msg.info?.id;
|
|
201
|
+
if (!msgId || msg.info?.role !== "user")
|
|
202
|
+
break;
|
|
203
|
+
const isOurs = msg.parts?.length &&
|
|
204
|
+
msg.parts.every((p) => p.ignored === true &&
|
|
205
|
+
p.type === "text" &&
|
|
206
|
+
typeof p.text === "string" &&
|
|
207
|
+
p.text.startsWith(STATUS_MARKER));
|
|
208
|
+
if (isOurs) {
|
|
209
|
+
await deleteMessage(effectiveServerUrl, sessionId, msgId);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// best-effort
|
|
218
|
+
}
|
|
219
|
+
}, 3000);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Send a feature announcement for a new version.
|
|
223
|
+
* Tracked via a version file in storageDir — only fires once per version across all sessions.
|
|
224
|
+
* Desktop: ignored message in the active session.
|
|
225
|
+
* TUI: toast with info variant.
|
|
226
|
+
*/
|
|
227
|
+
export async function sendFeatureAnnouncement(opts, version, features, storageDir) {
|
|
228
|
+
// Check if we already announced this version (persisted across sessions)
|
|
229
|
+
if (storageDir) {
|
|
230
|
+
const versionFile = join(storageDir, "last_announced_version");
|
|
231
|
+
try {
|
|
232
|
+
if (existsSync(versionFile)) {
|
|
233
|
+
const lastVersion = readFileSync(versionFile, "utf-8").trim();
|
|
234
|
+
if (lastVersion === version)
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
// ignore read errors — proceed with announcement
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
const featureText = features.map((f) => `• ${f}`).join("\n");
|
|
243
|
+
// Try TUI toast first (works when client exposes tui.showToast),
|
|
244
|
+
// fall back to Desktop ignored message
|
|
245
|
+
const toastSent = await showTuiToast(opts.client, `AFT v${version}`, featureText, "info", 12000);
|
|
246
|
+
if (!toastSent) {
|
|
247
|
+
const { sessionId } = readDesktopState(opts.directory);
|
|
248
|
+
if (!sessionId)
|
|
249
|
+
return;
|
|
250
|
+
const text = [`${FEATURE_MARKER} v${version}:`, ...features.map((f) => ` • ${f}`)].join("\n");
|
|
251
|
+
log(`[aft-plugin] sending feature announcement for v${version}`);
|
|
252
|
+
await sendIgnoredMessage(opts.client, sessionId, text);
|
|
253
|
+
}
|
|
254
|
+
// Persist the announced version
|
|
255
|
+
if (storageDir) {
|
|
256
|
+
try {
|
|
257
|
+
mkdirSync(storageDir, { recursive: true });
|
|
258
|
+
writeFileSync(join(storageDir, "last_announced_version"), version);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// best-effort
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Clean up stale AFT warning messages from previous runs.
|
|
267
|
+
* Desktop only — TUI toasts are inherently transient and don't need cleanup.
|
|
268
|
+
*/
|
|
269
|
+
export async function cleanupWarnings(opts) {
|
|
270
|
+
if (isTuiMode())
|
|
271
|
+
return; // TUI toasts don't persist
|
|
272
|
+
const { sessionId, serverUrl: desktopServerUrl } = readDesktopState(opts.directory);
|
|
273
|
+
if (!sessionId)
|
|
274
|
+
return;
|
|
275
|
+
const effectiveServerUrl = opts.serverUrl || desktopServerUrl;
|
|
276
|
+
if (!effectiveServerUrl)
|
|
277
|
+
return;
|
|
278
|
+
const messages = await getSessionMessages(opts.client, sessionId);
|
|
279
|
+
if (messages.length === 0)
|
|
280
|
+
return;
|
|
281
|
+
// Scan from end for consecutive AFT warning messages
|
|
282
|
+
const warningIds = [];
|
|
283
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
284
|
+
const msg = messages[i];
|
|
285
|
+
const msgId = msg.info?.id;
|
|
286
|
+
if (!msgId || msg.info?.role !== "user")
|
|
287
|
+
break;
|
|
288
|
+
const isAftWarning = msg.parts?.length &&
|
|
289
|
+
msg.parts.every((p) => p.ignored === true &&
|
|
290
|
+
p.type === "text" &&
|
|
291
|
+
typeof p.text === "string" &&
|
|
292
|
+
p.text.startsWith(WARNING_MARKER));
|
|
293
|
+
if (isAftWarning) {
|
|
294
|
+
warningIds.push(msgId);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (warningIds.length === 0)
|
|
301
|
+
return;
|
|
302
|
+
log(`[aft-plugin] cleaning up ${warningIds.length} stale warning(s)`);
|
|
303
|
+
for (const id of warningIds) {
|
|
304
|
+
await deleteMessage(effectiveServerUrl, sessionId, id);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../src/notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAiBlC,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,KAAK,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAAe,EACf,KAAa,EACb,OAAe,EACf,UAAoD,MAAM,EAC1D,QAAQ,GAAG,IAAI;IAEf,MAAM,CAAC,GAAG,MAAmB,CAAC;IAC9B,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,SAAS,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,6CAA6C;AAE7C,+CAA+C;AAC/C,MAAM,UAAU,GAAG,SAAS,CAAC;AAE7B,uCAAuC;AACvC,MAAM,cAAc,GAAG,GAAG,UAAU,SAAS,CAAC;AAE9C,+CAA+C;AAC/C,MAAM,cAAc,GAAG,GAAG,UAAU,KAAK,CAAC;AAE1C,0CAA0C;AAC1C,MAAM,aAAa,GAAG,GAAG,UAAU,IAAI,CAAC;AAExC,wCAAwC;AAExC,SAAS,mBAAmB;IAC1B,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACpB,OAAO,IAAI,CACT,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,CACtB,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,SAAS,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAOD,SAAS,gBAAgB,CAAC,SAAiB;IACzC,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAEzD,wCAAwC;QACxC,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;QAC/B,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAA4B,CAAC;gBACrE,IAAI,OAAO,WAAW,CAAC,iBAAiB,KAAK,QAAQ,EAAE,CAAC;oBACtD,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;QACxC,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAA4B,CAAC;YACjE,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAErB,CAAC;YACd,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBAC5C,SAAS,GAAG,KAAK,EAAE,EAAE,IAAI,IAAI,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC9C,CAAC;AACH,CAAC;AASD,SAAS,aAAa;IACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IACtD,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,UAAU,CAAC;IACpE,OAAO,SAAS,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACtF,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAe,EAAE,SAAiB;IAClE,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAIT,CAAC;QACF,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAK,UAAU,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACrE,OAAO,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAAe,EACf,SAAiB,EACjB,IAAY;IAEZ,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAKT,CAAC;QAEF,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;YACvB,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aAC/C;SACF,CAAC;QAEF,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;YACrD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,WAAW,KAAK,UAAU,EAAE,CAAC;YACjD,MAAM,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CACD,0CAA0C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7F,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,SAAiB,EACjB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,GAAG,SAAS,YAAY,kBAAkB,CAAC,SAAS,CAAC,YAAY,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;IAE7G,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YAC5C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAyB,EAAE,OAAe;IAC1E,4DAA4D;IAC5D,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAC5F,IAAI,SAAS;QAAE,OAAO;IAEtB,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,IAAI,GAAG,GAAG,cAAc,IAAI,OAAO,EAAE,CAAC;IAC5C,GAAG,CAAC,2CAA2C,SAAS,EAAE,CAAC,CAAC;IAC5D,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAyB,EAAE,OAAe;IACzE,IAAI,SAAS,EAAE,EAAE,CAAC;QAChB,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpF,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,IAAI,GAAG,GAAG,aAAa,IAAI,OAAO,EAAE,CAAC;IAC3C,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAEvD,8BAA8B;IAC9B,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,IAAI,gBAAgB,CAAC;IAC9D,IAAI,CAAC,kBAAkB;QAAE,OAAO;IAEhC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAC9D,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM;oBAAE,MAAM;gBAC/C,MAAM,MAAM,GACV,GAAG,CAAC,KAAK,EAAE,MAAM;oBACjB,GAAG,CAAC,KAAK,CAAC,KAAK,CACb,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,KAAK,IAAI;wBAClB,CAAC,CAAC,IAAI,KAAK,MAAM;wBACjB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;wBAC1B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CACnC,CAAC;gBACJ,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,aAAa,CAAC,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;gBAC5D,CAAC;qBAAM,CAAC;oBACN,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC,EAAE,IAAI,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAyB,EACzB,OAAe,EACf,QAAkB,EAClB,UAAmB;IAEnB,yEAAyE;IACzE,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5B,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9D,IAAI,WAAW,KAAK,OAAO;oBAAE,OAAO;YACtC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iDAAiD;QACnD,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,iEAAiE;IACjE,uCAAuC;IACvC,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACjG,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,MAAM,IAAI,GAAG,CAAC,GAAG,cAAc,KAAK,OAAO,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/F,GAAG,CAAC,kDAAkD,OAAO,EAAE,CAAC,CAAC;QACjE,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,gCAAgC;IAChC,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,wBAAwB,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAyB;IAC7D,IAAI,SAAS,EAAE;QAAE,OAAO,CAAC,2BAA2B;IAEpD,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpF,IAAI,CAAC,SAAS;QAAE,OAAO;IAEvB,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,IAAI,gBAAgB,CAAC;IAC9D,IAAI,CAAC,kBAAkB;QAAE,OAAO;IAEhC,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,qDAAqD;IACrD,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM;YAAE,MAAM;QAE/C,MAAM,YAAY,GAChB,GAAG,CAAC,KAAK,EAAE,MAAM;YACjB,GAAG,CAAC,KAAK,CAAC,KAAK,CACb,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,KAAK,IAAI;gBAClB,CAAC,CAAC,IAAI,KAAK,MAAM;gBACjB,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAC1B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CACpC,CAAC;QAEJ,IAAI,YAAY,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEpC,GAAG,CAAC,4BAA4B,UAAU,CAAC,MAAM,mBAAmB,CAAC,CAAC;IACtE,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,aAAa,CAAC,kBAAkB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-download and manage ONNX Runtime shared library for semantic search.
|
|
3
|
+
*
|
|
4
|
+
* Downloads the CPU-only ONNX Runtime from Microsoft's GitHub releases.
|
|
5
|
+
* The library is cached in the storage directory alongside semantic index data.
|
|
6
|
+
*
|
|
7
|
+
* Supported platforms:
|
|
8
|
+
* - macOS ARM64 (osx-arm64)
|
|
9
|
+
* - Linux x64 (linux-x64)
|
|
10
|
+
* - Linux ARM64 (linux-aarch64)
|
|
11
|
+
* - Windows x64 (win-x64)
|
|
12
|
+
* - Windows ARM64 (win-arm64)
|
|
13
|
+
*
|
|
14
|
+
* macOS x64 (Intel) is not provided by Microsoft — users must install via:
|
|
15
|
+
* brew install onnxruntime
|
|
16
|
+
*/
|
|
17
|
+
/** Check if this platform can auto-download ONNX Runtime */
|
|
18
|
+
export declare function isOrtAutoDownloadSupported(): boolean;
|
|
19
|
+
/** Get the install hint for platforms where auto-download isn't available */
|
|
20
|
+
export declare function getManualInstallHint(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure ONNX Runtime is available. Returns the directory containing the library,
|
|
23
|
+
* or null if unavailable.
|
|
24
|
+
*
|
|
25
|
+
* Resolution order:
|
|
26
|
+
* 1. Cached in storageDir/onnxruntime/<version>/
|
|
27
|
+
* 2. Auto-download from GitHub releases (if platform supported)
|
|
28
|
+
* 3. null (user needs manual install)
|
|
29
|
+
*/
|
|
30
|
+
export declare function ensureOnnxRuntime(storageDir: string): Promise<string | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Remove ONNX Runtime from temp files. Cleanup helper for test isolation.
|
|
33
|
+
*/
|
|
34
|
+
export declare function cleanupOnnxRuntime(storageDir: string): void;
|
|
35
|
+
//# sourceMappingURL=onnx-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onnx-runtime.d.ts","sourceRoot":"","sources":["../src/onnx-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA0DH,4DAA4D;AAC5D,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,IAAI,MAAM,CAQ7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4BlF;AAuGD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAU3D"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-download and manage ONNX Runtime shared library for semantic search.
|
|
3
|
+
*
|
|
4
|
+
* Downloads the CPU-only ONNX Runtime from Microsoft's GitHub releases.
|
|
5
|
+
* The library is cached in the storage directory alongside semantic index data.
|
|
6
|
+
*
|
|
7
|
+
* Supported platforms:
|
|
8
|
+
* - macOS ARM64 (osx-arm64)
|
|
9
|
+
* - Linux x64 (linux-x64)
|
|
10
|
+
* - Linux ARM64 (linux-aarch64)
|
|
11
|
+
* - Windows x64 (win-x64)
|
|
12
|
+
* - Windows ARM64 (win-arm64)
|
|
13
|
+
*
|
|
14
|
+
* macOS x64 (Intel) is not provided by Microsoft — users must install via:
|
|
15
|
+
* brew install onnxruntime
|
|
16
|
+
*/
|
|
17
|
+
import { chmodSync, existsSync, mkdirSync, readdirSync, renameSync } from "node:fs";
|
|
18
|
+
import { join } from "node:path";
|
|
19
|
+
import { error, log, warn } from "./logger.js";
|
|
20
|
+
const ORT_VERSION = "1.24.4";
|
|
21
|
+
const ORT_REPO = "microsoft/onnxruntime";
|
|
22
|
+
const ORT_PLATFORM_MAP = {
|
|
23
|
+
darwin: {
|
|
24
|
+
arm64: {
|
|
25
|
+
assetName: `onnxruntime-osx-arm64-${ORT_VERSION}`,
|
|
26
|
+
libName: "libonnxruntime.dylib",
|
|
27
|
+
archiveType: "tgz",
|
|
28
|
+
},
|
|
29
|
+
// x64 not available from Microsoft — users need brew install onnxruntime
|
|
30
|
+
},
|
|
31
|
+
linux: {
|
|
32
|
+
x64: {
|
|
33
|
+
assetName: `onnxruntime-linux-x64-${ORT_VERSION}`,
|
|
34
|
+
libName: "libonnxruntime.so",
|
|
35
|
+
archiveType: "tgz",
|
|
36
|
+
},
|
|
37
|
+
arm64: {
|
|
38
|
+
assetName: `onnxruntime-linux-aarch64-${ORT_VERSION}`,
|
|
39
|
+
libName: "libonnxruntime.so",
|
|
40
|
+
archiveType: "tgz",
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
win32: {
|
|
44
|
+
x64: {
|
|
45
|
+
assetName: `onnxruntime-win-x64-${ORT_VERSION}`,
|
|
46
|
+
libName: "onnxruntime.dll",
|
|
47
|
+
archiveType: "zip",
|
|
48
|
+
},
|
|
49
|
+
arm64: {
|
|
50
|
+
assetName: `onnxruntime-win-arm64-${ORT_VERSION}`,
|
|
51
|
+
libName: "onnxruntime.dll",
|
|
52
|
+
archiveType: "zip",
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
/** Get platform info for the current system, or null if unsupported */
|
|
57
|
+
function getPlatformInfo() {
|
|
58
|
+
const platformMap = ORT_PLATFORM_MAP[process.platform];
|
|
59
|
+
if (!platformMap)
|
|
60
|
+
return null;
|
|
61
|
+
return platformMap[process.arch] || null;
|
|
62
|
+
}
|
|
63
|
+
/** Check if this platform can auto-download ONNX Runtime */
|
|
64
|
+
export function isOrtAutoDownloadSupported() {
|
|
65
|
+
return getPlatformInfo() !== null;
|
|
66
|
+
}
|
|
67
|
+
/** Get the install hint for platforms where auto-download isn't available */
|
|
68
|
+
export function getManualInstallHint() {
|
|
69
|
+
if (process.platform === "darwin" && process.arch === "x64") {
|
|
70
|
+
return "brew install onnxruntime";
|
|
71
|
+
}
|
|
72
|
+
if (process.platform === "linux") {
|
|
73
|
+
return "apt install libonnxruntime or download from https://github.com/microsoft/onnxruntime/releases";
|
|
74
|
+
}
|
|
75
|
+
return "Download from https://github.com/microsoft/onnxruntime/releases";
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Ensure ONNX Runtime is available. Returns the directory containing the library,
|
|
79
|
+
* or null if unavailable.
|
|
80
|
+
*
|
|
81
|
+
* Resolution order:
|
|
82
|
+
* 1. Cached in storageDir/onnxruntime/<version>/
|
|
83
|
+
* 2. Auto-download from GitHub releases (if platform supported)
|
|
84
|
+
* 3. null (user needs manual install)
|
|
85
|
+
*/
|
|
86
|
+
export async function ensureOnnxRuntime(storageDir) {
|
|
87
|
+
const info = getPlatformInfo();
|
|
88
|
+
// Check cached location first
|
|
89
|
+
const ortDir = join(storageDir, "onnxruntime", ORT_VERSION);
|
|
90
|
+
const libPath = join(ortDir, info?.libName ?? "libonnxruntime.dylib");
|
|
91
|
+
if (existsSync(libPath)) {
|
|
92
|
+
log(`ONNX Runtime found at ${ortDir}`);
|
|
93
|
+
return ortDir;
|
|
94
|
+
}
|
|
95
|
+
// Check system locations
|
|
96
|
+
const systemPath = findSystemOnnxRuntime(info?.libName);
|
|
97
|
+
if (systemPath) {
|
|
98
|
+
log(`ONNX Runtime found at system path: ${systemPath}`);
|
|
99
|
+
return systemPath;
|
|
100
|
+
}
|
|
101
|
+
// Auto-download if platform is supported
|
|
102
|
+
if (!info) {
|
|
103
|
+
warn(`ONNX Runtime auto-download not available for ${process.platform}/${process.arch}. Install manually: ${getManualInstallHint()}`);
|
|
104
|
+
return null;
|
|
105
|
+
}
|
|
106
|
+
return downloadOnnxRuntime(info, ortDir);
|
|
107
|
+
}
|
|
108
|
+
/** Check common system locations for ONNX Runtime */
|
|
109
|
+
function findSystemOnnxRuntime(libName) {
|
|
110
|
+
if (!libName)
|
|
111
|
+
return null;
|
|
112
|
+
const searchPaths = [];
|
|
113
|
+
if (process.platform === "darwin") {
|
|
114
|
+
// Homebrew locations
|
|
115
|
+
searchPaths.push("/opt/homebrew/lib", "/usr/local/lib");
|
|
116
|
+
}
|
|
117
|
+
else if (process.platform === "linux") {
|
|
118
|
+
searchPaths.push("/usr/lib", "/usr/lib/x86_64-linux-gnu", "/usr/lib/aarch64-linux-gnu", "/usr/local/lib");
|
|
119
|
+
}
|
|
120
|
+
for (const dir of searchPaths) {
|
|
121
|
+
if (existsSync(join(dir, libName))) {
|
|
122
|
+
return dir;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
/** Download and extract ONNX Runtime from GitHub releases */
|
|
128
|
+
async function downloadOnnxRuntime(info, targetDir) {
|
|
129
|
+
const url = `https://github.com/${ORT_REPO}/releases/download/v${ORT_VERSION}/${info.assetName}.${info.archiveType === "tgz" ? "tgz" : "zip"}`;
|
|
130
|
+
log(`Downloading ONNX Runtime v${ORT_VERSION} for ${process.platform}/${process.arch}...`);
|
|
131
|
+
try {
|
|
132
|
+
const tmpDir = `${targetDir}.tmp.${process.pid}`;
|
|
133
|
+
mkdirSync(tmpDir, { recursive: true });
|
|
134
|
+
const archivePath = join(tmpDir, `onnxruntime.${info.archiveType}`);
|
|
135
|
+
// Download
|
|
136
|
+
const response = await fetch(url, { redirect: "follow" });
|
|
137
|
+
if (!response.ok) {
|
|
138
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
139
|
+
}
|
|
140
|
+
const buffer = Buffer.from(await response.arrayBuffer());
|
|
141
|
+
const { writeFileSync } = await import("node:fs");
|
|
142
|
+
writeFileSync(archivePath, buffer);
|
|
143
|
+
// Extract
|
|
144
|
+
if (info.archiveType === "tgz") {
|
|
145
|
+
const { execSync } = await import("node:child_process");
|
|
146
|
+
execSync(`tar xzf "${archivePath}" -C "${tmpDir}"`, { stdio: "pipe" });
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
const { execSync } = await import("node:child_process");
|
|
150
|
+
execSync(`unzip -q "${archivePath}" -d "${tmpDir}"`, { stdio: "pipe" });
|
|
151
|
+
}
|
|
152
|
+
// Find and copy the library file
|
|
153
|
+
const extractedDir = join(tmpDir, info.assetName, "lib");
|
|
154
|
+
if (!existsSync(extractedDir)) {
|
|
155
|
+
throw new Error(`Expected directory not found: ${extractedDir}`);
|
|
156
|
+
}
|
|
157
|
+
// Create target directory and copy library files
|
|
158
|
+
mkdirSync(targetDir, { recursive: true });
|
|
159
|
+
// Copy all library files (main + versioned symlinks)
|
|
160
|
+
const libFiles = readdirSync(extractedDir).filter((f) => f.startsWith("libonnxruntime") || f.startsWith("onnxruntime"));
|
|
161
|
+
for (const libFile of libFiles) {
|
|
162
|
+
const src = join(extractedDir, libFile);
|
|
163
|
+
const dst = join(targetDir, libFile);
|
|
164
|
+
renameSync(src, dst);
|
|
165
|
+
if (process.platform !== "win32") {
|
|
166
|
+
chmodSync(dst, 0o755);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Cleanup temp directory
|
|
170
|
+
const { rmSync } = await import("node:fs");
|
|
171
|
+
rmSync(tmpDir, { recursive: true, force: true });
|
|
172
|
+
log(`ONNX Runtime v${ORT_VERSION} installed to ${targetDir}`);
|
|
173
|
+
return targetDir;
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
error(`Failed to download ONNX Runtime: ${err}`);
|
|
177
|
+
// Cleanup on failure
|
|
178
|
+
try {
|
|
179
|
+
const { rmSync } = await import("node:fs");
|
|
180
|
+
rmSync(`${targetDir}.tmp.${process.pid}`, { recursive: true, force: true });
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// ignore cleanup errors
|
|
184
|
+
}
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Remove ONNX Runtime from temp files. Cleanup helper for test isolation.
|
|
190
|
+
*/
|
|
191
|
+
export function cleanupOnnxRuntime(storageDir) {
|
|
192
|
+
try {
|
|
193
|
+
const ortBase = join(storageDir, "onnxruntime");
|
|
194
|
+
if (existsSync(ortBase)) {
|
|
195
|
+
const { rmSync } = require("node:fs");
|
|
196
|
+
rmSync(ortBase, { recursive: true, force: true });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
// ignore
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=onnx-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onnx-runtime.js","sourceRoot":"","sources":["../src/onnx-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/pool.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export declare class BridgePool {
|
|
|
22
22
|
* Each session gets its own binary process with isolated backup/undo history.
|
|
23
23
|
* The bridge's working directory is set to `directory`.
|
|
24
24
|
*/
|
|
25
|
+
/** Get any existing bridge that is configured and alive, preferring the given directory. */
|
|
26
|
+
getAnyActiveBridge(directory: string): BinaryBridge | null;
|
|
25
27
|
getBridge(directory: string, sessionID: string): BinaryBridge;
|
|
26
28
|
/** Shut down idle bridges that haven't been used within the timeout. */
|
|
27
29
|
private cleanup;
|
package/dist/pool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAY5D,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,YAAY,CAA+C;gBAGjE,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,EACzB,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAmB/C;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY;IAwB7D,wEAAwE;IACxE,OAAO,CAAC,OAAO;IAUf,yDAAyD;IACzD,OAAO,CAAC,QAAQ;IAgBhB,wDAAwD;IAClD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"pool.d.ts","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAY5D,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0B;IAC1D,OAAO,CAAC,YAAY,CAA+C;gBAGjE,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,WAAgB,EACzB,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAmB/C;;;;OAIG;IACH,4FAA4F;IAC5F,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAW1D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY;IAwB7D,wEAAwE;IACxE,OAAO,CAAC,OAAO;IAUf,yDAAyD;IACzD,OAAO,CAAC,QAAQ;IAgBhB,wDAAwD;IAClD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBnD,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
package/dist/pool.js
CHANGED
|
@@ -38,6 +38,17 @@ export class BridgePool {
|
|
|
38
38
|
* Each session gets its own binary process with isolated backup/undo history.
|
|
39
39
|
* The bridge's working directory is set to `directory`.
|
|
40
40
|
*/
|
|
41
|
+
/** Get any existing bridge that is configured and alive, preferring the given directory. */
|
|
42
|
+
getAnyActiveBridge(directory) {
|
|
43
|
+
// First try to find one matching this directory
|
|
44
|
+
for (const [, entry] of this.bridges) {
|
|
45
|
+
if (entry.bridge.isAlive()) {
|
|
46
|
+
entry.lastUsed = Date.now();
|
|
47
|
+
return entry.bridge;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
41
52
|
getBridge(directory, sessionID) {
|
|
42
53
|
const key = sessionID || directory.replace(/\/+$/, "");
|
|
43
54
|
const existing = this.bridges.get(key);
|
|
@@ -96,12 +107,20 @@ export class BridgePool {
|
|
|
96
107
|
*/
|
|
97
108
|
async replaceBinary(newPath) {
|
|
98
109
|
this.binaryPath = newPath;
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
// binary is
|
|
102
|
-
//
|
|
103
|
-
|
|
104
|
-
|
|
110
|
+
// Clear the pool so next getBridge() creates fresh bridges with the new binary.
|
|
111
|
+
// Old bridge processes are NOT killed — they continue running from the old
|
|
112
|
+
// binary (safe on all platforms since the binary is loaded in memory) and will
|
|
113
|
+
// exit naturally when their stdin/stdout are garbage collected.
|
|
114
|
+
for (const [key, entry] of this.bridges) {
|
|
115
|
+
try {
|
|
116
|
+
entry.bridge.shutdown();
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// best-effort
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
this.bridges.clear();
|
|
123
|
+
log(`Binary path updated to ${newPath}. All bridges cleared — next calls will use the new binary.`);
|
|
105
124
|
}
|
|
106
125
|
/** Number of active bridges in the pool. */
|
|
107
126
|
get size() {
|
package/dist/pool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pool.js","sourceRoot":"","sources":["../src/pool.ts"],"names":[],"mappings":"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"}
|