unbrowse 10.1.8 → 10.3.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/package.json +1 -1
- package/runtime/cli.js +17 -63
- package/runtime/mcp.js +17 -63
package/package.json
CHANGED
package/runtime/cli.js
CHANGED
|
@@ -63713,49 +63713,6 @@ function openAiEmbedder(env = process.env) {
|
|
|
63713
63713
|
}
|
|
63714
63714
|
};
|
|
63715
63715
|
}
|
|
63716
|
-
function mrlReduce(v, dim) {
|
|
63717
|
-
if (v.length < dim)
|
|
63718
|
-
throw new Error(`embedding too short for MRL reduce: got ${v.length}, need >=${dim}`);
|
|
63719
|
-
if (v.length === dim)
|
|
63720
|
-
return v;
|
|
63721
|
-
const head = v.slice(0, dim);
|
|
63722
|
-
let n = 0;
|
|
63723
|
-
for (const x of head)
|
|
63724
|
-
n += x * x;
|
|
63725
|
-
n = Math.sqrt(n);
|
|
63726
|
-
if (n === 0)
|
|
63727
|
-
return head;
|
|
63728
|
-
return head.map((x) => x / n);
|
|
63729
|
-
}
|
|
63730
|
-
function llamaCppEmbedder(env = process.env) {
|
|
63731
|
-
const base2 = (env.UNBROWSE_EMBED_URL || env.AIKO_EMBED_URL || "http://127.0.0.1:8090").replace(/\/$/, "");
|
|
63732
|
-
const model = env.UNBROWSE_EMBED_MODEL || "Qwen3-Embedding-4B";
|
|
63733
|
-
const DIM = 1536;
|
|
63734
|
-
return {
|
|
63735
|
-
async embed(text) {
|
|
63736
|
-
try {
|
|
63737
|
-
const nativeSpecifier = "./contract-native.js";
|
|
63738
|
-
const { embed1536Native } = await import(nativeSpecifier);
|
|
63739
|
-
const native = embed1536Native(text);
|
|
63740
|
-
if (native)
|
|
63741
|
-
return native;
|
|
63742
|
-
} catch {}
|
|
63743
|
-
const res = await fetch(`${base2}/v1/embeddings`, {
|
|
63744
|
-
method: "POST",
|
|
63745
|
-
headers: { "Content-Type": "application/json" },
|
|
63746
|
-
body: JSON.stringify({ model, input: text }),
|
|
63747
|
-
signal: AbortSignal.timeout(30000)
|
|
63748
|
-
});
|
|
63749
|
-
const body = await res.text();
|
|
63750
|
-
if (!res.ok)
|
|
63751
|
-
throw new Error(`llama.cpp embeddings ${res.status}: ${body.slice(0, 200)}`);
|
|
63752
|
-
const v = JSON.parse(body).data?.[0]?.embedding;
|
|
63753
|
-
if (!v || v.length === 0)
|
|
63754
|
-
throw new Error("llama.cpp embeddings: no embedding in response");
|
|
63755
|
-
return mrlReduce(v, DIM);
|
|
63756
|
-
}
|
|
63757
|
-
};
|
|
63758
|
-
}
|
|
63759
63716
|
function nebiusEmbedder(env = process.env) {
|
|
63760
63717
|
const nk = env.NEBIUS_API_KEY?.trim();
|
|
63761
63718
|
const ork = env.OPENROUTER_API_KEY?.trim();
|
|
@@ -63797,11 +63754,6 @@ function nebiusEmbedder(env = process.env) {
|
|
|
63797
63754
|
};
|
|
63798
63755
|
}
|
|
63799
63756
|
async function resolveLiveEmbedder(env = process.env) {
|
|
63800
|
-
const llama = llamaCppEmbedder(env);
|
|
63801
|
-
try {
|
|
63802
|
-
await llama.embed("probe");
|
|
63803
|
-
return { embed: llama, provider: "llama.cpp/qwen3-embedding-4b" };
|
|
63804
|
-
} catch {}
|
|
63805
63757
|
const oai = openAiEmbedder(env);
|
|
63806
63758
|
if (oai) {
|
|
63807
63759
|
try {
|
|
@@ -63843,38 +63795,40 @@ function contractCacheKey(id, namespace = DEFAULT_NAMESPACE) {
|
|
|
63843
63795
|
function vecMapKey(assignedId, namespace = DEFAULT_NAMESPACE) {
|
|
63844
63796
|
return `${namespace}:vecmap:${assignedId}`;
|
|
63845
63797
|
}
|
|
63798
|
+
function stableVectorId(id) {
|
|
63799
|
+
const h = createHash4("sha256").update(id).digest();
|
|
63800
|
+
let n = 0;
|
|
63801
|
+
for (let i = 0;i < 6; i++)
|
|
63802
|
+
n = n * 256 + h[i];
|
|
63803
|
+
return n + 1;
|
|
63804
|
+
}
|
|
63846
63805
|
function emergentVectorStore(namespace = DEFAULT_NAMESPACE) {
|
|
63847
|
-
const headers = () => ({
|
|
63806
|
+
const headers = () => ({
|
|
63807
|
+
Authorization: `Bearer ${emergentKey()}`,
|
|
63808
|
+
"Content-Type": "application/json",
|
|
63809
|
+
"User-Agent": "emergentdb-js/0.0.11"
|
|
63810
|
+
});
|
|
63848
63811
|
return {
|
|
63849
63812
|
async upsert(id, vector) {
|
|
63850
63813
|
if (vector.length !== EMERGENTDB_VECTOR_DIM) {
|
|
63851
63814
|
throw new Error(`emergent vector must be ${EMERGENTDB_VECTOR_DIM}-dim, got ${vector.length}`);
|
|
63852
63815
|
}
|
|
63816
|
+
const numId = stableVectorId(id);
|
|
63853
63817
|
const ins = await fetch(`${EMERGENTDB_BASE}/vectors/insert`, {
|
|
63854
63818
|
method: "POST",
|
|
63855
63819
|
headers: headers(),
|
|
63856
|
-
body: JSON.stringify({ id:
|
|
63820
|
+
body: JSON.stringify({ id: numId, vector, namespace }),
|
|
63857
63821
|
signal: AbortSignal.timeout(emergentTimeoutMs())
|
|
63858
63822
|
});
|
|
63859
63823
|
if (!ins.ok)
|
|
63860
63824
|
throw new Error(`vectors/insert ${ins.status}: ${(await ins.text()).slice(0, 200)}`);
|
|
63861
|
-
|
|
63862
|
-
method: "POST",
|
|
63863
|
-
headers: headers(),
|
|
63864
|
-
body: JSON.stringify({ vector, k: 1, namespace }),
|
|
63865
|
-
signal: AbortSignal.timeout(emergentTimeoutMs())
|
|
63866
|
-
});
|
|
63867
|
-
if (!sr.ok)
|
|
63868
|
-
throw new Error(`vectors/search(self) ${sr.status}: ${(await sr.text()).slice(0, 200)}`);
|
|
63869
|
-
const assigned = (await sr.json()).results?.[0]?.id;
|
|
63870
|
-
if (assigned !== undefined)
|
|
63871
|
-
await kvSet(vecMapKey(assigned, namespace), id);
|
|
63825
|
+
await kvSet(vecMapKey(numId, namespace), id);
|
|
63872
63826
|
},
|
|
63873
63827
|
async search(vector, k) {
|
|
63874
63828
|
const sr = await fetch(`${EMERGENTDB_BASE}/vectors/search`, {
|
|
63875
63829
|
method: "POST",
|
|
63876
63830
|
headers: headers(),
|
|
63877
|
-
body: JSON.stringify({ vector, k, namespace }),
|
|
63831
|
+
body: JSON.stringify({ vector, k, include_metadata: false, namespace }),
|
|
63878
63832
|
signal: AbortSignal.timeout(emergentTimeoutMs())
|
|
63879
63833
|
});
|
|
63880
63834
|
if (!sr.ok)
|
|
@@ -64932,7 +64886,7 @@ var init_telemetry = __esm(() => {
|
|
|
64932
64886
|
});
|
|
64933
64887
|
|
|
64934
64888
|
// .tmp-runtime-src/build-info.generated.ts
|
|
64935
|
-
var BUILD_RELEASE_VERSION = "10.
|
|
64889
|
+
var BUILD_RELEASE_VERSION = "10.3.0", BUILD_GIT_SHA = "f83d7800067c", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMTAuMy4wIiwiZ2l0X3NoYSI6ImY4M2Q3ODAwMDY3YyIsImNvZGVfaGFzaCI6IjVkOWViZjYxOWM2MSIsInRyYWNlX3ZlcnNpb24iOiI1ZDllYmY2MTljNjFAZjgzZDc4MDAwNjdjIiwiaXNzdWVkX2F0IjoiMjAyNi0wNi0yNFQxMzoxODoyMS44MDJaIn0", BUILD_RELEASE_MANIFEST_SIGNATURE = "ecKMJ9MsPEVLVo7Q4WKNqdJ_nF2UP4yu4ktN-ezC6Og", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
|
|
64936
64890
|
|
|
64937
64891
|
// .tmp-runtime-src/version.ts
|
|
64938
64892
|
import { createHash as createHash8 } from "crypto";
|
package/runtime/mcp.js
CHANGED
|
@@ -94805,49 +94805,6 @@ function openAiEmbedder(env = process.env) {
|
|
|
94805
94805
|
}
|
|
94806
94806
|
};
|
|
94807
94807
|
}
|
|
94808
|
-
function mrlReduce(v, dim) {
|
|
94809
|
-
if (v.length < dim)
|
|
94810
|
-
throw new Error(`embedding too short for MRL reduce: got ${v.length}, need >=${dim}`);
|
|
94811
|
-
if (v.length === dim)
|
|
94812
|
-
return v;
|
|
94813
|
-
const head = v.slice(0, dim);
|
|
94814
|
-
let n = 0;
|
|
94815
|
-
for (const x of head)
|
|
94816
|
-
n += x * x;
|
|
94817
|
-
n = Math.sqrt(n);
|
|
94818
|
-
if (n === 0)
|
|
94819
|
-
return head;
|
|
94820
|
-
return head.map((x) => x / n);
|
|
94821
|
-
}
|
|
94822
|
-
function llamaCppEmbedder(env = process.env) {
|
|
94823
|
-
const base2 = (env.UNBROWSE_EMBED_URL || env.AIKO_EMBED_URL || "http://127.0.0.1:8090").replace(/\/$/, "");
|
|
94824
|
-
const model = env.UNBROWSE_EMBED_MODEL || "Qwen3-Embedding-4B";
|
|
94825
|
-
const DIM = 1536;
|
|
94826
|
-
return {
|
|
94827
|
-
async embed(text) {
|
|
94828
|
-
try {
|
|
94829
|
-
const nativeSpecifier = "./contract-native.js";
|
|
94830
|
-
const { embed1536Native } = await import(nativeSpecifier);
|
|
94831
|
-
const native = embed1536Native(text);
|
|
94832
|
-
if (native)
|
|
94833
|
-
return native;
|
|
94834
|
-
} catch {}
|
|
94835
|
-
const res = await fetch(`${base2}/v1/embeddings`, {
|
|
94836
|
-
method: "POST",
|
|
94837
|
-
headers: { "Content-Type": "application/json" },
|
|
94838
|
-
body: JSON.stringify({ model, input: text }),
|
|
94839
|
-
signal: AbortSignal.timeout(30000)
|
|
94840
|
-
});
|
|
94841
|
-
const body = await res.text();
|
|
94842
|
-
if (!res.ok)
|
|
94843
|
-
throw new Error(`llama.cpp embeddings ${res.status}: ${body.slice(0, 200)}`);
|
|
94844
|
-
const v = JSON.parse(body).data?.[0]?.embedding;
|
|
94845
|
-
if (!v || v.length === 0)
|
|
94846
|
-
throw new Error("llama.cpp embeddings: no embedding in response");
|
|
94847
|
-
return mrlReduce(v, DIM);
|
|
94848
|
-
}
|
|
94849
|
-
};
|
|
94850
|
-
}
|
|
94851
94808
|
function nebiusEmbedder(env = process.env) {
|
|
94852
94809
|
const nk = env.NEBIUS_API_KEY?.trim();
|
|
94853
94810
|
const ork = env.OPENROUTER_API_KEY?.trim();
|
|
@@ -94889,11 +94846,6 @@ function nebiusEmbedder(env = process.env) {
|
|
|
94889
94846
|
};
|
|
94890
94847
|
}
|
|
94891
94848
|
async function resolveLiveEmbedder(env = process.env) {
|
|
94892
|
-
const llama = llamaCppEmbedder(env);
|
|
94893
|
-
try {
|
|
94894
|
-
await llama.embed("probe");
|
|
94895
|
-
return { embed: llama, provider: "llama.cpp/qwen3-embedding-4b" };
|
|
94896
|
-
} catch {}
|
|
94897
94849
|
const oai = openAiEmbedder(env);
|
|
94898
94850
|
if (oai) {
|
|
94899
94851
|
try {
|
|
@@ -94935,38 +94887,40 @@ function contractCacheKey(id, namespace = DEFAULT_NAMESPACE) {
|
|
|
94935
94887
|
function vecMapKey(assignedId, namespace = DEFAULT_NAMESPACE) {
|
|
94936
94888
|
return `${namespace}:vecmap:${assignedId}`;
|
|
94937
94889
|
}
|
|
94890
|
+
function stableVectorId(id) {
|
|
94891
|
+
const h = createHash4("sha256").update(id).digest();
|
|
94892
|
+
let n = 0;
|
|
94893
|
+
for (let i = 0;i < 6; i++)
|
|
94894
|
+
n = n * 256 + h[i];
|
|
94895
|
+
return n + 1;
|
|
94896
|
+
}
|
|
94938
94897
|
function emergentVectorStore(namespace = DEFAULT_NAMESPACE) {
|
|
94939
|
-
const headers = () => ({
|
|
94898
|
+
const headers = () => ({
|
|
94899
|
+
Authorization: `Bearer ${emergentKey()}`,
|
|
94900
|
+
"Content-Type": "application/json",
|
|
94901
|
+
"User-Agent": "emergentdb-js/0.0.11"
|
|
94902
|
+
});
|
|
94940
94903
|
return {
|
|
94941
94904
|
async upsert(id, vector) {
|
|
94942
94905
|
if (vector.length !== EMERGENTDB_VECTOR_DIM) {
|
|
94943
94906
|
throw new Error(`emergent vector must be ${EMERGENTDB_VECTOR_DIM}-dim, got ${vector.length}`);
|
|
94944
94907
|
}
|
|
94908
|
+
const numId = stableVectorId(id);
|
|
94945
94909
|
const ins = await fetch(`${EMERGENTDB_BASE}/vectors/insert`, {
|
|
94946
94910
|
method: "POST",
|
|
94947
94911
|
headers: headers(),
|
|
94948
|
-
body: JSON.stringify({ id:
|
|
94912
|
+
body: JSON.stringify({ id: numId, vector, namespace }),
|
|
94949
94913
|
signal: AbortSignal.timeout(emergentTimeoutMs())
|
|
94950
94914
|
});
|
|
94951
94915
|
if (!ins.ok)
|
|
94952
94916
|
throw new Error(`vectors/insert ${ins.status}: ${(await ins.text()).slice(0, 200)}`);
|
|
94953
|
-
|
|
94954
|
-
method: "POST",
|
|
94955
|
-
headers: headers(),
|
|
94956
|
-
body: JSON.stringify({ vector, k: 1, namespace }),
|
|
94957
|
-
signal: AbortSignal.timeout(emergentTimeoutMs())
|
|
94958
|
-
});
|
|
94959
|
-
if (!sr.ok)
|
|
94960
|
-
throw new Error(`vectors/search(self) ${sr.status}: ${(await sr.text()).slice(0, 200)}`);
|
|
94961
|
-
const assigned = (await sr.json()).results?.[0]?.id;
|
|
94962
|
-
if (assigned !== undefined)
|
|
94963
|
-
await kvSet(vecMapKey(assigned, namespace), id);
|
|
94917
|
+
await kvSet(vecMapKey(numId, namespace), id);
|
|
94964
94918
|
},
|
|
94965
94919
|
async search(vector, k) {
|
|
94966
94920
|
const sr = await fetch(`${EMERGENTDB_BASE}/vectors/search`, {
|
|
94967
94921
|
method: "POST",
|
|
94968
94922
|
headers: headers(),
|
|
94969
|
-
body: JSON.stringify({ vector, k, namespace }),
|
|
94923
|
+
body: JSON.stringify({ vector, k, include_metadata: false, namespace }),
|
|
94970
94924
|
signal: AbortSignal.timeout(emergentTimeoutMs())
|
|
94971
94925
|
});
|
|
94972
94926
|
if (!sr.ok)
|
|
@@ -101452,7 +101406,7 @@ async function mergedAuthHeaders(key, signer) {
|
|
|
101452
101406
|
var AUTH_DOMAIN = "unbrowse-auth:v1";
|
|
101453
101407
|
|
|
101454
101408
|
// .tmp-runtime-src/build-info.generated.ts
|
|
101455
|
-
var BUILD_RELEASE_VERSION = "10.
|
|
101409
|
+
var BUILD_RELEASE_VERSION = "10.3.0", BUILD_GIT_SHA = "f83d7800067c", BUILD_CODE_HASH = "5d9ebf619c61", BUILD_RELEASE_MANIFEST_BASE64 = "eyJzY2hlbWFfdmVyc2lvbiI6MSwicmVsZWFzZV92ZXJzaW9uIjoiMTAuMy4wIiwiZ2l0X3NoYSI6ImY4M2Q3ODAwMDY3YyIsImNvZGVfaGFzaCI6IjVkOWViZjYxOWM2MSIsInRyYWNlX3ZlcnNpb24iOiI1ZDllYmY2MTljNjFAZjgzZDc4MDAwNjdjIiwiaXNzdWVkX2F0IjoiMjAyNi0wNi0yNFQxMzoxODoyMS44MDJaIn0", BUILD_RELEASE_MANIFEST_SIGNATURE = "ecKMJ9MsPEVLVo7Q4WKNqdJ_nF2UP4yu4ktN-ezC6Og", BUILD_DEFAULT_BACKEND_URL = "https://beta-api.unbrowse.ai", BUILD_DEFAULT_PROFILE = "";
|
|
101456
101410
|
|
|
101457
101411
|
// .tmp-runtime-src/version.ts
|
|
101458
101412
|
import { createHash as createHash6 } from "crypto";
|