@tool-bridge/server 0.20.0 → 0.21.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/dist/{airtable-ZNWHIJMO.js → airtable-DMJEEGJP.js} +19 -16
- package/dist/{alt_text_generator_ai-X7RMDDM5.js → alt_text_generator_ai-RELFQ5FV.js} +4 -4
- package/dist/{amap-3VER75VH.js → amap-YSYEACKQ.js} +4 -4
- package/dist/{anthropic-N7NTB3UC.js → anthropic-D5X5GSYE.js} +23 -25
- package/dist/{apify-JB5P5AJI.js → apify-5NVFU3IZ.js} +20 -19
- package/dist/{brave_search-USL5OOBS.js → brave_search-X557FMGO.js} +16 -14
- package/dist/chunk-JEWFX6Z6.js +71 -0
- package/dist/{chunk-RVUERWUZ.js → chunk-MDY7K5CX.js} +748 -788
- package/dist/{chunk-WIGQCP6O.js → chunk-MZCIPUNQ.js} +141 -176
- package/dist/{chunk-6X55ALDX.js → chunk-Q74GLIDK.js} +3 -3
- package/dist/{chunk-6ANLYNFB.js → chunk-QR4LK3HF.js} +1 -1
- package/dist/{chunk-3WL6EXYX.js → chunk-ZTTN6AJG.js} +1 -1
- package/dist/{circleci-LBGB25LP.js → circleci-3P3QTUX2.js} +20 -24
- package/dist/{clerk-6RX37CNZ.js → clerk-GNMZQ2MY.js} +22 -21
- package/dist/{cloudflare_dns-NQGW7FHV.js → cloudflare_dns-VWZH3ZTR.js} +21 -17
- package/dist/{cohere-XPC2NAEW.js → cohere-C7QVIIMG.js} +19 -17
- package/dist/{confluence-ZUG2LT5A.js → confluence-52I37IUT.js} +16 -11
- package/dist/{convertapi-ZLXKWV3L.js → convertapi-3TRJ3WEO.js} +3 -3
- package/dist/{currencyapi-T3A3HSOD.js → currencyapi-LWEANWVI.js} +23 -26
- package/dist/{deepseek-NJMOD23E.js → deepseek-5U24YG4P.js} +27 -17
- package/dist/{docker_hub-D2MQCSJ7.js → docker_hub-CMISLRSE.js} +4 -4
- package/dist/{dropbox-MI6U3SOT.js → dropbox-TW4QN6FT.js} +9 -8
- package/dist/{dub-P2BYBYV4.js → dub-EFXGI5UH.js} +22 -19
- package/dist/{e2b-BGKIAE54.js → e2b-PHM63OVF.js} +20 -20
- package/dist/{exa-EUY7VV4C.js → exa-DYOQWURR.js} +22 -25
- package/dist/{fal_ai-AAOG5FYJ.js → fal_ai-VJPMCNRH.js} +18 -17
- package/dist/{feishu-AN5IJYOW.js → feishu-TFIZXPIN.js} +2 -2
- package/dist/{feishu_custom_bot-BWGMNVXF.js → feishu_custom_bot-ADSE23KU.js} +3 -3
- package/dist/{figma-SJSWYCGD.js → figma-4AK47AYY.js} +21 -23
- package/dist/{firehydrant-MOXK2PST.js → firehydrant-RGPTW4EA.js} +15 -15
- package/dist/{fixer-ISIDUDZU.js → fixer-OAMF4DKP.js} +4 -4
- package/dist/{fly-U4KPSGBF.js → fly-YB4AQD4O.js} +20 -16
- package/dist/{front-ZHM2YX2E.js → front-6GTVYKUM.js} +20 -23
- package/dist/{geocodio-SVCCAXAV.js → geocodio-YRT4K25M.js} +4 -4
- package/dist/{ghost-INTR7FIY.js → ghost-JCW6UIP2.js} +4 -4
- package/dist/{github-T275VVWR.js → github-CEGVRMNX.js} +28 -27
- package/dist/{gmail-KSSPOE67.js → gmail-JCMJD55P.js} +17 -17
- package/dist/{googlecalendar-JB5RW27L.js → googlecalendar-2EAW4MNM.js} +16 -14
- package/dist/{googledocs-G522PUGW.js → googledocs-YNKKBM6Q.js} +3 -3
- package/dist/{grafana-44ZPIV5P.js → grafana-353VSGXN.js} +24 -25
- package/dist/{graphhopper-2MORXLOW.js → graphhopper-H3IVJNDS.js} +4 -4
- package/dist/index.d.ts +31 -30
- package/dist/index.js +3 -3
- package/dist/{ip2proxy-R4K4KEMI.js → ip2proxy-DBGRWH7S.js} +4 -4
- package/dist/{ipgeolocation_io-H4J55OGI.js → ipgeolocation_io-5I2BDVMG.js} +4 -4
- package/dist/{ipqualityscore-XGID4OHA.js → ipqualityscore-ILV7TQCV.js} +4 -4
- package/dist/{jina_ai-7ZVDOR3Z.js → jina_ai-L5BH455V.js} +20 -21
- package/dist/{jira-CTIYZTT3.js → jira-IGTILUZA.js} +20 -16
- package/dist/{langsmith-ISP567FS.js → langsmith-BYRX4AOF.js} +25 -25
- package/dist/{lemlist-OGKK272F.js → lemlist-ZGNYTIQO.js} +23 -24
- package/dist/{linear-6JX4E3JI.js → linear-HLGOWISN.js} +3 -3
- package/dist/{logsnag-BVB36ZCL.js → logsnag-5RGTMTU2.js} +20 -22
- package/dist/main.js +102 -102
- package/dist/{mattermost-UECVPZGY.js → mattermost-BONGXVC7.js} +21 -17
- package/dist/{mem0-EUA7S2OO.js → mem0-RUVNUPTE.js} +15 -15
- package/dist/{memos-BYSBJRWZ.js → memos-TED4HI54.js} +36 -32
- package/dist/{metabase-4JXZH3YG.js → metabase-ZHXHRHZK.js} +22 -18
- package/dist/{mistral_ai-2C5BTBKW.js → mistral_ai-NGP5SHU7.js} +24 -21
- package/dist/{mother_duck-ZGNNNR3X.js → mother_duck-TKVQM35M.js} +23 -19
- package/dist/{ngrok-NTPGMRXI.js → ngrok-BYCUJ7QV.js} +17 -22
- package/dist/{notes-KGYXX6N6.js → notes-KXRNNYDW.js} +1 -1
- package/dist/{notion-EX3X2G7G.js → notion-2ILYKJOO.js} +20 -17
- package/dist/{open_exchange_rates-2V2LIGPS.js → open_exchange_rates-JU4DC6HZ.js} +4 -4
- package/dist/{openai-KQFQPK7Z.js → openai-6SOT26ZK.js} +22 -16
- package/dist/{opengraph_io-B63SEYJY.js → opengraph_io-ZEFHV2OL.js} +4 -4
- package/dist/{openrouter-62A4H62Q.js → openrouter-R4P7JL5L.js} +19 -14
- package/dist/{outline-QC33XLCK.js → outline-VCTQ5V2X.js} +18 -20
- package/dist/{paddle-HDZG35Y7.js → paddle-AZOAKBJS.js} +17 -15
- package/dist/{perplexity-M7LOMJWA.js → perplexity-OMRLGVAT.js} +19 -23
- package/dist/{pinecone-Y7YCJRZM.js → pinecone-DI62W3ZX.js} +19 -24
- package/dist/{pipedrive-FLJA62UX.js → pipedrive-CW7HONYW.js} +22 -23
- package/dist/{polar-AE55Q425.js → polar-5DRGTXNR.js} +19 -17
- package/dist/{posthog-IAY5D3YW.js → posthog-3DTHFCKE.js} +29 -24
- package/dist/{postmark-NMKAXDXZ.js → postmark-ME2V2XXI.js} +19 -17
- package/dist/{prerender-CDJM7I7N.js → prerender-5EAY7GDM.js} +4 -4
- package/dist/{pubmed-N437ZJOR.js → pubmed-GRQUBGVA.js} +3 -3
- package/dist/{railway-NBWYXCUM.js → railway-FTM75TMX.js} +3 -3
- package/dist/{readwise-QRO3UC3R.js → readwise-IJQGV6IQ.js} +16 -15
- package/dist/{render-NEW7SROG.js → render-TMSPHRTY.js} +21 -20
- package/dist/{replicate-73YQLRTY.js → replicate-RJCMDB7H.js} +20 -21
- package/dist/{resend-R5BAZFHZ.js → resend-YYN22NIL.js} +15 -11
- package/dist/{rootly-5BLALPCS.js → rootly-7RXE4K7L.js} +19 -18
- package/dist/{scrapfly-EHFLNNUZ.js → scrapfly-ZJJ6XM4Q.js} +4 -4
- package/dist/{scrapingbee-UXLYS72S.js → scrapingbee-QNGEOD6D.js} +4 -4
- package/dist/{screenshot_fyi-KC3NLTJ6.js → screenshot_fyi-SPZAABVD.js} +4 -4
- package/dist/{semantic_scholar-SA5OIUWA.js → semantic_scholar-SDPVGDDI.js} +21 -20
- package/dist/{sentry-BAE3XLJN.js → sentry-SJ5NN4C4.js} +22 -19
- package/dist/{shodan-FJR6MKKW.js → shodan-YMGOY7KW.js} +4 -4
- package/dist/{shopify-7OA6SLN5.js → shopify-SU5ABP54.js} +23 -19
- package/dist/{stripe-MUWDZGGF.js → stripe-JAC425KE.js} +3 -3
- package/dist/{supabase-SWWGNWYR.js → supabase-GQ2OFVIL.js} +18 -17
- package/dist/{tavily-XQNJ5EDI.js → tavily-Y7MDA5CI.js} +20 -20
- package/dist/{telegram-RR6JPZOG.js → telegram-OIDT3ZLH.js} +4 -4
- package/dist/{telnyx-7PKXOWSO.js → telnyx-4JGMC3K7.js} +19 -19
- package/dist/{todoist-63X5IUJE.js → todoist-O7S2OUGX.js} +18 -17
- package/dist/{trello-MOG63DAI.js → trello-3LDE4TAQ.js} +4 -4
- package/dist/{turso-ENWTSHDL.js → turso-MUQ44KCA.js} +23 -30
- package/dist/{twilio-FDXUN7VX.js → twilio-VYF3HUU6.js} +3 -3
- package/dist/{umami-TM7PROWF.js → umami-SVQIK26J.js} +23 -28
- package/dist/{unsplash-NWXLKSOW.js → unsplash-333XYDCJ.js} +19 -18
- package/dist/{upstash_redis-CUTQ5L2N.js → upstash_redis-IUM2HDLU.js} +17 -13
- package/dist/{uptimerobot-NNO32M3I.js → uptimerobot-7ZRU2NJV.js} +3 -3
- package/dist/{v2ex-24KMSWS7.js → v2ex-AVSJCQPS.js} +35 -18
- package/dist/{vercel-B45LPF6I.js → vercel-J7RGXNSA.js} +21 -18
- package/dist/{wolfram_alpha_api-DKJWVR6G.js → wolfram_alpha_api-6CRVUZOJ.js} +4 -4
- package/dist/{wordpress-XYFSDZXY.js → wordpress-THOJLPKA.js} +21 -17
- package/dist/{workos-BEM7EPHM.js → workos-ENTGRWF2.js} +26 -27
- package/dist/{zhihu-CFHZ4NC7.js → zhihu-W2BXICTX.js} +21 -21
- package/package.json +5 -5
|
@@ -14609,6 +14609,20 @@ function canonicalizePath(path) {
|
|
|
14609
14609
|
if (norm === "") return "";
|
|
14610
14610
|
return norm.split("/").map((seg) => canonicalizeSegment(seg)).join("/");
|
|
14611
14611
|
}
|
|
14612
|
+
function assertNoCollision(names, context) {
|
|
14613
|
+
const seen = /* @__PURE__ */ new Map();
|
|
14614
|
+
for (const name of names) {
|
|
14615
|
+
const lower = name.toLowerCase();
|
|
14616
|
+
const prev = seen.get(lower);
|
|
14617
|
+
if (prev !== void 0 && prev !== name) {
|
|
14618
|
+
throw new TBError(
|
|
14619
|
+
"invalid_argument",
|
|
14620
|
+
`${context}:\u6807\u8BC6\u7B26 '${prev}' \u4E0E '${name}' \u5C0F\u5199\u89C4\u8303\u5316\u540E\u51B2\u7A81`
|
|
14621
|
+
);
|
|
14622
|
+
}
|
|
14623
|
+
seen.set(lower, name);
|
|
14624
|
+
}
|
|
14625
|
+
}
|
|
14612
14626
|
function segments(path) {
|
|
14613
14627
|
const p = normalizePath(path);
|
|
14614
14628
|
return p === "" ? [] : p.split("/");
|
|
@@ -14682,10 +14696,10 @@ function normalizeAnnotationPath(path) {
|
|
|
14682
14696
|
return norm;
|
|
14683
14697
|
}
|
|
14684
14698
|
var AnnotationStore = class {
|
|
14699
|
+
store;
|
|
14685
14700
|
constructor(store) {
|
|
14686
14701
|
this.store = store;
|
|
14687
14702
|
}
|
|
14688
|
-
store;
|
|
14689
14703
|
keyOf(path) {
|
|
14690
14704
|
return KEY_ANNOTATION + path;
|
|
14691
14705
|
}
|
|
@@ -14823,7 +14837,7 @@ var SYSTEM_AUTO = "system:auto";
|
|
|
14823
14837
|
var RESERVED_ROOTS = ["system", "ui"];
|
|
14824
14838
|
|
|
14825
14839
|
// ../core/src/auth/registerPath.ts
|
|
14826
|
-
var
|
|
14840
|
+
var foldedSegments = (path) => segments(path).map((seg) => seg.toLowerCase());
|
|
14827
14841
|
function isUnderPrefix(target, prefix) {
|
|
14828
14842
|
if (prefix.length > target.length) return false;
|
|
14829
14843
|
return prefix.every((seg, i) => seg === target[i]);
|
|
@@ -14834,7 +14848,7 @@ var deny = (message) => ({
|
|
|
14834
14848
|
});
|
|
14835
14849
|
function checkRegisterPath(input) {
|
|
14836
14850
|
const { sk, targetPath, existing, reservedRoots = [] } = input;
|
|
14837
|
-
const target =
|
|
14851
|
+
const target = foldedSegments(targetPath);
|
|
14838
14852
|
if (target.some((seg) => seg.startsWith("~"))) {
|
|
14839
14853
|
return {
|
|
14840
14854
|
allow: false,
|
|
@@ -14842,12 +14856,12 @@ function checkRegisterPath(input) {
|
|
|
14842
14856
|
};
|
|
14843
14857
|
}
|
|
14844
14858
|
if (sk.registerPaths !== void 0) {
|
|
14845
|
-
const ok = sk.registerPaths.some((p) => isUnderPrefix(target,
|
|
14859
|
+
const ok = sk.registerPaths.some((p) => isUnderPrefix(target, foldedSegments(p)));
|
|
14846
14860
|
if (!ok) {
|
|
14847
14861
|
return deny(`path '${targetPath}' is outside declared registerPaths`);
|
|
14848
14862
|
}
|
|
14849
14863
|
} else {
|
|
14850
|
-
const roots = /* @__PURE__ */ new Set([...RESERVED_ROOTS, ...reservedRoots]);
|
|
14864
|
+
const roots = /* @__PURE__ */ new Set([...RESERVED_ROOTS, ...reservedRoots.map((r) => r.toLowerCase())]);
|
|
14851
14865
|
const head = target[0];
|
|
14852
14866
|
if (head !== void 0 && roots.has(head)) {
|
|
14853
14867
|
return deny(`cannot register under reserved root '${head}'`);
|
|
@@ -14907,6 +14921,10 @@ function base64urlEncode(bytes2) {
|
|
|
14907
14921
|
}
|
|
14908
14922
|
return out;
|
|
14909
14923
|
}
|
|
14924
|
+
function base64Encode(bytes2) {
|
|
14925
|
+
const url2 = base64urlEncode(bytes2).replaceAll("-", "+").replaceAll("_", "/");
|
|
14926
|
+
return url2 + "=".repeat((4 - url2.length % 4) % 4);
|
|
14927
|
+
}
|
|
14910
14928
|
function base64urlDecode(input) {
|
|
14911
14929
|
if (input.length % 4 === 1 || !/^[A-Za-z0-9_-]*$/.test(input)) {
|
|
14912
14930
|
throw new Error("base64urlDecode: malformed base64url input");
|
|
@@ -14926,6 +14944,12 @@ function base64urlDecode(input) {
|
|
|
14926
14944
|
return new Uint8Array(bytes2);
|
|
14927
14945
|
}
|
|
14928
14946
|
|
|
14947
|
+
// ../core/src/webGlobals.ts
|
|
14948
|
+
var g = globalThis;
|
|
14949
|
+
var crypto = g.crypto;
|
|
14950
|
+
var TextDecoder2 = g.TextDecoder;
|
|
14951
|
+
var TextEncoder = g.TextEncoder;
|
|
14952
|
+
|
|
14929
14953
|
// ../core/src/omit.ts
|
|
14930
14954
|
function omit2(obj, ...keys) {
|
|
14931
14955
|
const rest = { ...obj };
|
|
@@ -15014,10 +15038,17 @@ var SKRegistryStore = class {
|
|
|
15014
15038
|
const listOpts = { limit: clampLimit(opts?.limit) };
|
|
15015
15039
|
if (opts?.cursor !== void 0) listOpts.cursor = opts.cursor;
|
|
15016
15040
|
const page = await this.store.list(KEY_SK_ID, listOpts);
|
|
15041
|
+
const hashes = page.items.map(({ value }) => value).filter((value) => typeof value === "string");
|
|
15042
|
+
const records = /* @__PURE__ */ new Map();
|
|
15043
|
+
for (let i = 0; i < hashes.length; i += 100) {
|
|
15044
|
+
const chunk = await this.store.getMany(
|
|
15045
|
+
hashes.slice(i, i + 100).map((hash2) => KEY_SK_HASH + hash2)
|
|
15046
|
+
);
|
|
15047
|
+
for (const [key, value] of chunk) records.set(key, value);
|
|
15048
|
+
}
|
|
15017
15049
|
const items = [];
|
|
15018
|
-
for (const
|
|
15019
|
-
|
|
15020
|
-
const rec = await this.store.get(KEY_SK_HASH + value);
|
|
15050
|
+
for (const hash2 of hashes) {
|
|
15051
|
+
const rec = records.get(KEY_SK_HASH + hash2);
|
|
15021
15052
|
if (rec) items.push(projectKey(rec));
|
|
15022
15053
|
}
|
|
15023
15054
|
return page.cursor !== void 0 ? { items, cursor: page.cursor } : { items };
|
|
@@ -15188,7 +15219,7 @@ var HtbpCommandRegistry = class {
|
|
|
15188
15219
|
metadata = /* @__PURE__ */ new Map();
|
|
15189
15220
|
operations = new OperationRegistry();
|
|
15190
15221
|
register(name, spec, handler) {
|
|
15191
|
-
const { h, returns, scope, ...operationSpec } = spec;
|
|
15222
|
+
const { h, hostOnly, returns, scope, ...operationSpec } = spec;
|
|
15192
15223
|
this.operations.register(
|
|
15193
15224
|
name,
|
|
15194
15225
|
{ ...operationSpec, description: h },
|
|
@@ -15196,6 +15227,7 @@ var HtbpCommandRegistry = class {
|
|
|
15196
15227
|
);
|
|
15197
15228
|
this.metadata.set(name, {
|
|
15198
15229
|
scope,
|
|
15230
|
+
...hostOnly !== void 0 ? { hostOnly } : {},
|
|
15199
15231
|
...returns !== void 0 ? { returns } : {}
|
|
15200
15232
|
});
|
|
15201
15233
|
return this;
|
|
@@ -15209,6 +15241,10 @@ var HtbpCommandRegistry = class {
|
|
|
15209
15241
|
scopeFor(name) {
|
|
15210
15242
|
return this.metadata.get(name)?.scope;
|
|
15211
15243
|
}
|
|
15244
|
+
/** 该命令是否宿主专属扩展(见 {@link HtbpCommandSpec.hostOnly});未注册按 false。 */
|
|
15245
|
+
isHostOnly(name) {
|
|
15246
|
+
return this.metadata.get(name)?.hostOnly === true;
|
|
15247
|
+
}
|
|
15212
15248
|
commandSpecs(nodePath) {
|
|
15213
15249
|
return this.operations.list().map((operation) => {
|
|
15214
15250
|
const metadata = this.metadata.get(operation.name);
|
|
@@ -15249,13 +15285,13 @@ var HtbpCommandRegistry = class {
|
|
|
15249
15285
|
|
|
15250
15286
|
// ../core/src/builtin/commandRegistry.ts
|
|
15251
15287
|
var BuiltinCommandRegistry = class extends HtbpCommandRegistry {
|
|
15288
|
+
moduleName;
|
|
15289
|
+
moduleDescription;
|
|
15252
15290
|
constructor(moduleName, moduleDescription) {
|
|
15253
15291
|
super();
|
|
15254
15292
|
this.moduleName = moduleName;
|
|
15255
15293
|
this.moduleDescription = moduleDescription;
|
|
15256
15294
|
}
|
|
15257
|
-
moduleName;
|
|
15258
|
-
moduleDescription;
|
|
15259
15295
|
help(nodePath) {
|
|
15260
15296
|
return this.helpModel({
|
|
15261
15297
|
path: nodePath,
|
|
@@ -15462,18 +15498,7 @@ function encodeForm(entries) {
|
|
|
15462
15498
|
return [...entries].map(([key, value]) => `${encode3(key)}=${encode3(value)}`).join("&");
|
|
15463
15499
|
}
|
|
15464
15500
|
function base643(ascii) {
|
|
15465
|
-
|
|
15466
|
-
let out = "";
|
|
15467
|
-
for (let i = 0; i < ascii.length; i += 3) {
|
|
15468
|
-
const a = ascii.charCodeAt(i);
|
|
15469
|
-
const b = i + 1 < ascii.length ? ascii.charCodeAt(i + 1) : Number.NaN;
|
|
15470
|
-
const c = i + 2 < ascii.length ? ascii.charCodeAt(i + 2) : Number.NaN;
|
|
15471
|
-
out += table[a >> 2];
|
|
15472
|
-
out += table[(a & 3) << 4 | (Number.isNaN(b) ? 0 : b >> 4)];
|
|
15473
|
-
out += Number.isNaN(b) ? "=" : table[(b & 15) << 2 | (Number.isNaN(c) ? 0 : c >> 6)];
|
|
15474
|
-
out += Number.isNaN(c) ? "=" : table[c & 63];
|
|
15475
|
-
}
|
|
15476
|
-
return out;
|
|
15501
|
+
return base64Encode(Uint8Array.from(ascii, (char) => char.charCodeAt(0)));
|
|
15477
15502
|
}
|
|
15478
15503
|
function asRecord(value) {
|
|
15479
15504
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
@@ -15664,6 +15689,8 @@ var contextCommands = new HtbpCommandRegistry().register(
|
|
|
15664
15689
|
"create_upload",
|
|
15665
15690
|
{
|
|
15666
15691
|
h: "create a short-lived, path-scoped direct-upload grant; persist the returned uri, not url",
|
|
15692
|
+
// 宿主专属扩展:仅在底层具备直传签名能力时由宿主装配,不进基础动词表。
|
|
15693
|
+
hostOnly: true,
|
|
15667
15694
|
inputSchema: external_exports.strictObject({
|
|
15668
15695
|
path: external_exports.string().describe("target entry path inside the namespace"),
|
|
15669
15696
|
contentType: external_exports.string().describe("media type signed into the PUT request"),
|
|
@@ -15687,14 +15714,14 @@ function contextScopeForCmd(command) {
|
|
|
15687
15714
|
}
|
|
15688
15715
|
function parseContextCmdArgs(command, args) {
|
|
15689
15716
|
const normalized = command.toLowerCase();
|
|
15690
|
-
if (!contextCommands.has(normalized) || normalized
|
|
15717
|
+
if (!contextCommands.has(normalized) || contextCommands.isHostOnly(normalized)) {
|
|
15691
15718
|
throw new TBError("invalid_argument", `unknown cmd '${command}'`);
|
|
15692
15719
|
}
|
|
15693
15720
|
return contextCommands.parse(normalized, args);
|
|
15694
15721
|
}
|
|
15695
15722
|
async function dispatchContextCmd(provider, command, args) {
|
|
15696
15723
|
const normalized = command.toLowerCase();
|
|
15697
|
-
if (!contextCommands.has(normalized) || normalized
|
|
15724
|
+
if (!contextCommands.has(normalized) || contextCommands.isHostOnly(normalized)) {
|
|
15698
15725
|
throw new TBError("invalid_argument", `unknown cmd '${command}'`);
|
|
15699
15726
|
}
|
|
15700
15727
|
const method = normalized;
|
|
@@ -15716,7 +15743,7 @@ async function dispatchContextUploadCmd(args, upload) {
|
|
|
15716
15743
|
}
|
|
15717
15744
|
|
|
15718
15745
|
// ../core/src/context/capabilities.ts
|
|
15719
|
-
var CONTEXT_METHODS = contextCommands.names().filter((name) => name
|
|
15746
|
+
var CONTEXT_METHODS = contextCommands.names().filter((name) => !contextCommands.isHostOnly(name));
|
|
15720
15747
|
var CONTEXT_WRITE_METHODS = CONTEXT_METHODS.filter((method) => contextCommands.scopeFor(method) === "write");
|
|
15721
15748
|
function contextMethodsOf(provider) {
|
|
15722
15749
|
const methods = /* @__PURE__ */ new Set();
|
|
@@ -16503,10 +16530,10 @@ function normalizeAllowHost(raw) {
|
|
|
16503
16530
|
return host;
|
|
16504
16531
|
}
|
|
16505
16532
|
var RemoteAllowlistStore = class {
|
|
16533
|
+
store;
|
|
16506
16534
|
constructor(store) {
|
|
16507
16535
|
this.store = store;
|
|
16508
16536
|
}
|
|
16509
|
-
store;
|
|
16510
16537
|
/** 读全部运行时条目(缺省/脏值 → 空数组);按 host 升序稳定输出。 */
|
|
16511
16538
|
async list() {
|
|
16512
16539
|
const raw = await this.store.get(KEY_REMOTE_ALLOWLIST);
|
|
@@ -16682,7 +16709,7 @@ function parseRecord(value) {
|
|
|
16682
16709
|
try {
|
|
16683
16710
|
if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error();
|
|
16684
16711
|
const raw = value;
|
|
16685
|
-
if (raw.v !== 1 || !Number.isSafeInteger(raw.revision) || raw.revision < 1 || !nonEmpty(raw.operationId) ||
|
|
16712
|
+
if (raw.v !== 1 || !Number.isSafeInteger(raw.revision) || raw.revision < 1 || !nonEmpty(raw.operationId) || !nonEmpty(raw.deviceId) || !nonEmpty(raw.deviceKeyId) || !nonEmpty(raw.mountPath) || !nonEmpty(raw.targetPath) || !nonEmpty(raw.path) || !nonEmpty(raw.callerKeyId) || !nonEmpty(raw.callerOwner) || !nonEmpty(raw.traceId) || !finiteTimestamp(raw.createdAt) || !finiteTimestamp(raw.updatedAt) || !finiteTimestamp(raw.expiresAt) || !isState(raw.state) || !Number.isSafeInteger(raw.attempt) || raw.attempt < 0 || typeof raw.executionMayHaveOccurred !== "boolean") throw new Error();
|
|
16686
16713
|
if (raw.leaseId === void 0 !== (raw.leaseUntil === void 0)) throw new Error();
|
|
16687
16714
|
if (raw.leaseId !== void 0 && (!nonEmpty(raw.leaseId) || !finiteTimestamp(raw.leaseUntil))) {
|
|
16688
16715
|
throw new Error();
|
|
@@ -16694,7 +16721,6 @@ function parseRecord(value) {
|
|
|
16694
16721
|
v: 1,
|
|
16695
16722
|
revision: raw.revision,
|
|
16696
16723
|
operationId: raw.operationId,
|
|
16697
|
-
commandId: raw.commandId,
|
|
16698
16724
|
deviceId: raw.deviceId,
|
|
16699
16725
|
deviceKeyId: raw.deviceKeyId,
|
|
16700
16726
|
mountPath: raw.mountPath,
|
|
@@ -16832,7 +16858,7 @@ var DeviceMailboxCipher = class {
|
|
|
16832
16858
|
await this.key(),
|
|
16833
16859
|
ciphertext
|
|
16834
16860
|
);
|
|
16835
|
-
return JSON.parse(new
|
|
16861
|
+
return JSON.parse(new TextDecoder2().decode(plaintext));
|
|
16836
16862
|
} catch {
|
|
16837
16863
|
throw new TBError("internal", "device mailbox data cannot be decrypted", { retryable: false });
|
|
16838
16864
|
}
|
|
@@ -16904,7 +16930,6 @@ var DeviceMailboxService = class {
|
|
|
16904
16930
|
summary(record2) {
|
|
16905
16931
|
return {
|
|
16906
16932
|
operationId: record2.operationId,
|
|
16907
|
-
commandId: record2.commandId,
|
|
16908
16933
|
deviceId: record2.deviceId,
|
|
16909
16934
|
mountPath: record2.mountPath,
|
|
16910
16935
|
targetPath: record2.targetPath,
|
|
@@ -17015,7 +17040,6 @@ var DeviceMailboxService = class {
|
|
|
17015
17040
|
v: 1,
|
|
17016
17041
|
revision: 1,
|
|
17017
17042
|
operationId,
|
|
17018
|
-
commandId: operationId,
|
|
17019
17043
|
deviceId: input.deviceId,
|
|
17020
17044
|
deviceKeyId: input.deviceKeyId,
|
|
17021
17045
|
mountPath: input.mountPath,
|
|
@@ -17113,7 +17137,6 @@ var DeviceMailboxService = class {
|
|
|
17113
17137
|
...page.cursor === void 0 ? {} : { cursor: page.cursor },
|
|
17114
17138
|
operation: {
|
|
17115
17139
|
operationId: next.operationId,
|
|
17116
|
-
commandId: next.commandId,
|
|
17117
17140
|
targetPath: next.targetPath,
|
|
17118
17141
|
path: next.path,
|
|
17119
17142
|
arguments: payload.arguments,
|
|
@@ -17413,7 +17436,7 @@ var toolSearchRequestSchema = external_exports.strictObject({
|
|
|
17413
17436
|
limit: external_exports.number().int().optional(),
|
|
17414
17437
|
matching: external_exports.enum(["best", "all"]).optional(),
|
|
17415
17438
|
minCoverage: external_exports.number().gt(0).max(1).optional(),
|
|
17416
|
-
mode: external_exports.enum(["keyword"
|
|
17439
|
+
mode: external_exports.enum(["keyword"]).optional(),
|
|
17417
17440
|
pathPrefix: external_exports.string().optional()
|
|
17418
17441
|
}).optional(),
|
|
17419
17442
|
query: external_exports.string().trim().min(1)
|
|
@@ -17429,7 +17452,6 @@ var deviceOperationSummaryShape = {
|
|
|
17429
17452
|
attempt: external_exports.number().int().nonnegative(),
|
|
17430
17453
|
caller: deviceOperationCallerSchema,
|
|
17431
17454
|
cancelRequestedAt: external_exports.iso.datetime({ offset: true }).optional(),
|
|
17432
|
-
commandId: external_exports.string().min(1),
|
|
17433
17455
|
createdAt: external_exports.iso.datetime({ offset: true }),
|
|
17434
17456
|
deviceId: external_exports.string().min(1),
|
|
17435
17457
|
executionMayHaveOccurred: external_exports.boolean(),
|
|
@@ -17474,7 +17496,6 @@ var deviceOperationClaimSchema = external_exports.object({
|
|
|
17474
17496
|
attempt: external_exports.number().int().positive(),
|
|
17475
17497
|
caller: deviceOperationCallerSchema,
|
|
17476
17498
|
cancelRequestedAt: external_exports.iso.datetime({ offset: true }).optional(),
|
|
17477
|
-
commandId: external_exports.string().min(1),
|
|
17478
17499
|
createdAt: external_exports.iso.datetime({ offset: true }),
|
|
17479
17500
|
expiresAt: external_exports.iso.datetime({ offset: true }),
|
|
17480
17501
|
leaseId: external_exports.string().min(1),
|
|
@@ -17875,17 +17896,7 @@ function createSkModule(store, now) {
|
|
|
17875
17896
|
|
|
17876
17897
|
// ../core/src/builtin/index.ts
|
|
17877
17898
|
async function countNodes(registry2) {
|
|
17878
|
-
|
|
17879
|
-
let cursor;
|
|
17880
|
-
do {
|
|
17881
|
-
const page = await registry2.list(void 0, {
|
|
17882
|
-
limit: LIST_LIMIT_MAX,
|
|
17883
|
-
...cursor !== void 0 ? { cursor } : {}
|
|
17884
|
-
});
|
|
17885
|
-
count += page.items.length;
|
|
17886
|
-
cursor = page.cursor;
|
|
17887
|
-
} while (cursor);
|
|
17888
|
-
return count;
|
|
17899
|
+
return (await registry2.subtree("")).length;
|
|
17889
17900
|
}
|
|
17890
17901
|
function createBuiltins(deps) {
|
|
17891
17902
|
const now = deps.now ?? (() => (/* @__PURE__ */ new Date()).toISOString());
|
|
@@ -17934,7 +17945,7 @@ function contextHelpModel(node, opts = {}) {
|
|
|
17934
17945
|
return contextCommands.helpModel(
|
|
17935
17946
|
{ path: node.path, kind: "context", description: node.description },
|
|
17936
17947
|
(command) => {
|
|
17937
|
-
if (command.name
|
|
17948
|
+
if (contextCommands.isHostOnly(command.name)) return false;
|
|
17938
17949
|
if (opts.methods !== void 0 && !opts.methods.has(command.name)) return false;
|
|
17939
17950
|
return opts.readOnly !== true || command.scope === "read";
|
|
17940
17951
|
}
|
|
@@ -17964,7 +17975,7 @@ async function readStreamBytes(stream) {
|
|
|
17964
17975
|
return out;
|
|
17965
17976
|
}
|
|
17966
17977
|
async function readStreamText(stream) {
|
|
17967
|
-
return new
|
|
17978
|
+
return new TextDecoder2().decode(await readStreamBytes(stream));
|
|
17968
17979
|
}
|
|
17969
17980
|
function ownedBytes(view) {
|
|
17970
17981
|
return view.buffer instanceof ArrayBuffer ? new Uint8Array(view.buffer, view.byteOffset, view.byteLength) : new Uint8Array(view);
|
|
@@ -18001,6 +18012,14 @@ function bytesToObjectStream(bytes2) {
|
|
|
18001
18012
|
var DEFAULT_STORE_NAME = "default";
|
|
18002
18013
|
var DEFAULT_STORE_DRIVER_KEY_ROOT = "__tool_bridge_internal__/store/v1";
|
|
18003
18014
|
|
|
18015
|
+
// ../core/src/context/contentType.ts
|
|
18016
|
+
function normalizeContentType(value, message) {
|
|
18017
|
+
if (typeof value !== "string" || value.trim() === "" || value.length > 255 || !value.includes("/") || /[\r\n\0]/.test(value)) {
|
|
18018
|
+
throw new TBError("invalid_argument", message);
|
|
18019
|
+
}
|
|
18020
|
+
return value.trim().toLowerCase();
|
|
18021
|
+
}
|
|
18022
|
+
|
|
18004
18023
|
// ../core/src/context/path.ts
|
|
18005
18024
|
function hasControlChar(s) {
|
|
18006
18025
|
for (let i = 0; i < s.length; i++) {
|
|
@@ -18083,9 +18102,10 @@ async function createObjectContextUploadGrant(store, opts, input) {
|
|
|
18083
18102
|
if (unknownKeys.length > 0) {
|
|
18084
18103
|
throw new TBError("invalid_argument", `create_upload \u542B\u672A\u77E5\u5B57\u6BB5:${unknownKeys.join(",")}`);
|
|
18085
18104
|
}
|
|
18086
|
-
|
|
18087
|
-
|
|
18088
|
-
|
|
18105
|
+
const contentType = normalizeContentType(
|
|
18106
|
+
input?.contentType,
|
|
18107
|
+
"create_upload \u9700\u8981\u5408\u6CD5\u7684 'contentType'"
|
|
18108
|
+
);
|
|
18089
18109
|
const nsPath = normalizePath(opts.nsPath);
|
|
18090
18110
|
const entryPath = normalizeEntryPath(input.path);
|
|
18091
18111
|
const key = `${keyPrefixBare === "" ? "" : `${keyPrefixBare}/`}${entryPath}`;
|
|
@@ -18094,7 +18114,6 @@ async function createObjectContextUploadGrant(store, opts, input) {
|
|
|
18094
18114
|
throw new TBError("unavailable", "\u5BF9\u8C61\u5B58\u50A8\u672A\u914D\u7F6E\u76F4\u4F20\u7B7E\u540D\u80FD\u529B", { retryable: false });
|
|
18095
18115
|
}
|
|
18096
18116
|
const ttlSec = assertPresignTtlSec(opts.uploadGrantTtlSec ?? PRESIGN_TTL_SEC_DEFAULT);
|
|
18097
|
-
const contentType = input.contentType.trim();
|
|
18098
18117
|
const expiresAt = new Date(Date.now() + ttlSec * 1e3).toISOString();
|
|
18099
18118
|
const signed = await store.presignPut(key, ttlSec, {
|
|
18100
18119
|
contentType,
|
|
@@ -18532,18 +18551,18 @@ function derivePresence(input) {
|
|
|
18532
18551
|
var DEVICE_CALL_TIMEOUT_MS = 6e4;
|
|
18533
18552
|
var DEVICE_REJECT_CLOSE_CODE = 1008;
|
|
18534
18553
|
var DeviceGatewaySession = class {
|
|
18535
|
-
constructor(io, opts) {
|
|
18536
|
-
this.io = io;
|
|
18537
|
-
this.opts = opts;
|
|
18538
|
-
this.timeoutMs = opts.timeoutMs ?? DEVICE_CALL_TIMEOUT_MS;
|
|
18539
|
-
}
|
|
18540
|
-
io;
|
|
18541
|
-
opts;
|
|
18542
18554
|
phase_ = "awaiting-hello";
|
|
18543
18555
|
helloSeen = false;
|
|
18544
18556
|
results = /* @__PURE__ */ new Map();
|
|
18545
18557
|
pending = /* @__PURE__ */ new Map();
|
|
18546
18558
|
timeoutMs;
|
|
18559
|
+
io;
|
|
18560
|
+
opts;
|
|
18561
|
+
constructor(io, opts) {
|
|
18562
|
+
this.io = io;
|
|
18563
|
+
this.opts = opts;
|
|
18564
|
+
this.timeoutMs = opts.timeoutMs ?? DEVICE_CALL_TIMEOUT_MS;
|
|
18565
|
+
}
|
|
18547
18566
|
get phase() {
|
|
18548
18567
|
return this.phase_;
|
|
18549
18568
|
}
|
|
@@ -19356,12 +19375,6 @@ function normalizeTimestamp(value, field) {
|
|
|
19356
19375
|
throw error51;
|
|
19357
19376
|
}
|
|
19358
19377
|
}
|
|
19359
|
-
function normalizeContentType(value) {
|
|
19360
|
-
if (typeof value !== "string" || value.trim() === "" || value.length > 255 || !value.includes("/") || /[\r\n\0]/.test(value)) {
|
|
19361
|
-
throw new TBError("invalid_argument", "contentType \u4E0D\u5408\u6CD5");
|
|
19362
|
-
}
|
|
19363
|
-
return value.trim().toLowerCase();
|
|
19364
|
-
}
|
|
19365
19378
|
function normalizeChecksum(value) {
|
|
19366
19379
|
if (value === void 0) return void 0;
|
|
19367
19380
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
@@ -19378,7 +19391,7 @@ function normalizeChecksum(value) {
|
|
|
19378
19391
|
return { algorithm: "sha256", value: digest };
|
|
19379
19392
|
}
|
|
19380
19393
|
function normalizeUploadInput(input) {
|
|
19381
|
-
const contentType = normalizeContentType(input?.contentType);
|
|
19394
|
+
const contentType = normalizeContentType(input?.contentType, "contentType \u4E0D\u5408\u6CD5");
|
|
19382
19395
|
let filename;
|
|
19383
19396
|
if (input.filename !== void 0) {
|
|
19384
19397
|
if (typeof input.filename !== "string" || input.filename.trim() === "" || input.filename.length > 1024 || /[\r\n\0]/.test(input.filename)) throw new TBError("invalid_argument", "filename \u4E0D\u5408\u6CD5");
|
|
@@ -19427,7 +19440,7 @@ function normalizeContentTypePattern(value) {
|
|
|
19427
19440
|
const prefix = value.slice(0, -1);
|
|
19428
19441
|
if (prefix.length > 1 && !/[\r\n\0]/.test(value)) return value.toLowerCase();
|
|
19429
19442
|
}
|
|
19430
|
-
return normalizeContentType(value);
|
|
19443
|
+
return normalizeContentType(value, "contentType \u4E0D\u5408\u6CD5");
|
|
19431
19444
|
}
|
|
19432
19445
|
function descriptorOf(object2) {
|
|
19433
19446
|
if (object2.status !== "ready" || object2.readyAt === void 0 || object2.size === void 0) throw stateCorrupt("ready object");
|
|
@@ -19449,6 +19462,15 @@ function descriptorOf(object2) {
|
|
|
19449
19462
|
};
|
|
19450
19463
|
}
|
|
19451
19464
|
var StoreService = class {
|
|
19465
|
+
maxObjectBytes;
|
|
19466
|
+
now;
|
|
19467
|
+
relayMaxBytes;
|
|
19468
|
+
shareTtlSec;
|
|
19469
|
+
tokenSecret;
|
|
19470
|
+
uploadTtlSec;
|
|
19471
|
+
cas;
|
|
19472
|
+
state;
|
|
19473
|
+
objects;
|
|
19452
19474
|
constructor(state, objects, opts) {
|
|
19453
19475
|
this.state = state;
|
|
19454
19476
|
this.objects = objects;
|
|
@@ -19480,15 +19502,6 @@ var StoreService = class {
|
|
|
19480
19502
|
"shareTtlSec"
|
|
19481
19503
|
);
|
|
19482
19504
|
}
|
|
19483
|
-
state;
|
|
19484
|
-
objects;
|
|
19485
|
-
maxObjectBytes;
|
|
19486
|
-
now;
|
|
19487
|
-
relayMaxBytes;
|
|
19488
|
-
shareTtlSec;
|
|
19489
|
-
tokenSecret;
|
|
19490
|
-
uploadTtlSec;
|
|
19491
|
-
cas;
|
|
19492
19505
|
/** 所有已存在记录的 CAS 共用 revision 期望,并拒绝错误的版本跃迁。 */
|
|
19493
19506
|
async compareRecord(key, current, next) {
|
|
19494
19507
|
if (next !== null && next.revision !== current.revision + 1)
|
|
@@ -20756,7 +20769,7 @@ function encodeCallContext(ctx) {
|
|
|
20756
20769
|
function decodeCallContext(header) {
|
|
20757
20770
|
let text;
|
|
20758
20771
|
try {
|
|
20759
|
-
text = new
|
|
20772
|
+
text = new TextDecoder2().decode(base64urlDecode(header));
|
|
20760
20773
|
} catch {
|
|
20761
20774
|
throw new TBError("invalid_argument", `${HEADER_TB_CONTEXT} \u975E\u6CD5 base64url`);
|
|
20762
20775
|
}
|
|
@@ -21340,7 +21353,7 @@ async function decodeToolSearchCursor(cursor, query, mode, revision, secret, opt
|
|
|
21340
21353
|
await cursorCryptoKey(secret),
|
|
21341
21354
|
sealed.slice(12)
|
|
21342
21355
|
);
|
|
21343
|
-
value = JSON.parse(new
|
|
21356
|
+
value = JSON.parse(new TextDecoder2("utf-8", { fatal: true }).decode(new Uint8Array(plaintext)));
|
|
21344
21357
|
} catch (error51) {
|
|
21345
21358
|
if (error51 instanceof TBError) throw error51;
|
|
21346
21359
|
throw new TBError("invalid_argument", "\u641C\u7D22 cursor \u683C\u5F0F\u975E\u6CD5");
|
|
@@ -21408,36 +21421,45 @@ var TOOL_SEARCH_INSERT_SQL = `
|
|
|
21408
21421
|
INSERT INTO tb_search_tools_v5 (path, name, description, effect, feedback)
|
|
21409
21422
|
VALUES (?, ?, ?, ?, ?)
|
|
21410
21423
|
`;
|
|
21411
|
-
|
|
21412
|
-
|
|
21413
|
-
|
|
21414
|
-
|
|
21424
|
+
function toolSearchFixedStatements(syntax) {
|
|
21425
|
+
const p = (index) => syntax.placeholder(index);
|
|
21426
|
+
const int2 = syntax.castInt ?? ((expr) => expr);
|
|
21427
|
+
return {
|
|
21428
|
+
bumpRevision: "UPDATE tb_search_meta_v5 SET revision = revision + 1 WHERE singleton = 1",
|
|
21429
|
+
completeRebuild: "UPDATE tb_search_meta_v5 SET seeded = 1, revision = revision + 1 WHERE singleton = 1",
|
|
21430
|
+
deleteAllSnapshots: "DELETE FROM tb_search_snapshots_v5",
|
|
21431
|
+
deleteAllTools: "DELETE FROM tb_search_tools_v5",
|
|
21432
|
+
deleteSnapshot: `DELETE FROM tb_search_snapshots_v5 WHERE path = ${p(1)}`,
|
|
21433
|
+
deleteSnapshotPrefix: `
|
|
21434
|
+
DELETE FROM tb_search_snapshots_v5
|
|
21435
|
+
WHERE path = ${p(1)} OR substr(path, 1, length(${p(2)}) + 1) = ${p(3)} || '/'
|
|
21436
|
+
`,
|
|
21437
|
+
deleteTools: `DELETE FROM tb_search_tools_v5 WHERE path = ${p(1)}`,
|
|
21438
|
+
deleteToolsPrefix: `
|
|
21439
|
+
DELETE FROM tb_search_tools_v5
|
|
21440
|
+
WHERE path = ${p(1)} OR substr(path, 1, length(${p(2)}) + 1) = ${p(3)} || '/'
|
|
21441
|
+
`,
|
|
21442
|
+
insertSnapshot: `INSERT INTO tb_search_snapshots_v5(path, digest) VALUES (${p(1)}, ${p(2)})`,
|
|
21443
|
+
meta: `SELECT ${int2("revision")} AS revision, ${int2("seeded")} AS seeded, cursor_secret FROM tb_search_meta_v5 WHERE singleton = 1`,
|
|
21444
|
+
// replace 的前置探测:一次拿到本 path 的 digest、是否残留 source 行、已用节点数。
|
|
21445
|
+
pathState: `
|
|
21415
21446
|
SELECT snapshots.digest,
|
|
21416
|
-
EXISTS(SELECT 1 FROM tb_search_tools_v5 WHERE path =
|
|
21417
|
-
(SELECT COUNT(*) FROM tb_search_snapshots_v5) AS path_count
|
|
21447
|
+
${int2(`EXISTS(SELECT 1 FROM tb_search_tools_v5 WHERE path = ${p(1)})`)} AS has_tools,
|
|
21448
|
+
${int2("(SELECT COUNT(*) FROM tb_search_snapshots_v5)")} AS path_count
|
|
21418
21449
|
FROM (SELECT 1) AS singleton
|
|
21419
|
-
LEFT JOIN tb_search_snapshots_v5 AS snapshots ON snapshots.path =
|
|
21420
|
-
|
|
21421
|
-
|
|
21422
|
-
|
|
21450
|
+
LEFT JOIN tb_search_snapshots_v5 AS snapshots ON snapshots.path = ${p(2)}
|
|
21451
|
+
`,
|
|
21452
|
+
present: `SELECT 1 AS present FROM tb_search_tools_v5 WHERE path = ${p(1)} LIMIT 1`,
|
|
21453
|
+
presentPrefix: `
|
|
21423
21454
|
SELECT 1 AS present FROM tb_search_tools_v5
|
|
21424
|
-
WHERE path =
|
|
21455
|
+
WHERE path = ${p(1)} OR substr(path, 1, length(${p(2)}) + 1) = ${p(3)} || '/'
|
|
21425
21456
|
LIMIT 1
|
|
21426
|
-
|
|
21427
|
-
|
|
21428
|
-
|
|
21429
|
-
|
|
21430
|
-
|
|
21431
|
-
|
|
21432
|
-
`;
|
|
21433
|
-
var DELETE_SNAPSHOT_PREFIX_SQL = `
|
|
21434
|
-
DELETE FROM tb_search_snapshots_v5
|
|
21435
|
-
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
21436
|
-
`;
|
|
21437
|
-
var DELETE_ALL_TOOLS_SQL = "DELETE FROM tb_search_tools_v5";
|
|
21438
|
-
var DELETE_ALL_SNAPSHOTS_SQL = "DELETE FROM tb_search_snapshots_v5";
|
|
21439
|
-
var BUMP_REVISION_SQL = "UPDATE tb_search_meta_v5 SET revision = revision + 1 WHERE singleton = 1";
|
|
21440
|
-
var COMPLETE_REBUILD_SQL = "UPDATE tb_search_meta_v5 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
21457
|
+
`,
|
|
21458
|
+
snapshotDigests: "SELECT path, digest FROM tb_search_snapshots_v5 ORDER BY path"
|
|
21459
|
+
};
|
|
21460
|
+
}
|
|
21461
|
+
var SQLITE_FIXED_STATEMENTS = toolSearchFixedStatements({ placeholder: () => "?" });
|
|
21462
|
+
var TOOL_SEARCH_INSERT_SNAPSHOT_SQL = SQLITE_FIXED_STATEMENTS.insertSnapshot;
|
|
21441
21463
|
function toolSearchEffectSql(effect) {
|
|
21442
21464
|
switch (effect) {
|
|
21443
21465
|
case "read":
|
|
@@ -21544,31 +21566,16 @@ var sqliteSearchDialect = {
|
|
|
21544
21566
|
);
|
|
21545
21567
|
},
|
|
21546
21568
|
schemaStatements: TOOL_SEARCH_SCHEMA_STATEMENTS,
|
|
21547
|
-
statements:
|
|
21548
|
-
bumpRevision: BUMP_REVISION_SQL,
|
|
21549
|
-
completeRebuild: COMPLETE_REBUILD_SQL,
|
|
21550
|
-
deleteAllSnapshots: DELETE_ALL_SNAPSHOTS_SQL,
|
|
21551
|
-
deleteAllTools: DELETE_ALL_TOOLS_SQL,
|
|
21552
|
-
deleteSnapshot: DELETE_SNAPSHOT_SQL,
|
|
21553
|
-
deleteSnapshotPrefix: DELETE_SNAPSHOT_PREFIX_SQL,
|
|
21554
|
-
deleteTools: DELETE_TOOLS_SQL,
|
|
21555
|
-
deleteToolsPrefix: DELETE_TOOLS_PREFIX_SQL,
|
|
21556
|
-
insertSnapshot: TOOL_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
21557
|
-
meta: META_SQL,
|
|
21558
|
-
pathState: PATH_STATE_SQL,
|
|
21559
|
-
present: PRESENT_SQL,
|
|
21560
|
-
presentPrefix: PRESENT_PREFIX_SQL,
|
|
21561
|
-
snapshotDigests: SNAPSHOT_DIGESTS_SQL
|
|
21562
|
-
}
|
|
21569
|
+
statements: SQLITE_FIXED_STATEMENTS
|
|
21563
21570
|
};
|
|
21564
21571
|
var SqlSearchIndex = class {
|
|
21572
|
+
capabilities = ["search"];
|
|
21573
|
+
dialect;
|
|
21574
|
+
driver;
|
|
21565
21575
|
constructor(driver, dialect = sqliteSearchDialect) {
|
|
21566
21576
|
this.driver = driver;
|
|
21567
21577
|
this.dialect = dialect;
|
|
21568
21578
|
}
|
|
21569
|
-
driver;
|
|
21570
|
-
capabilities = ["search"];
|
|
21571
|
-
dialect;
|
|
21572
21579
|
/** 容量 trigger 的 ABORT 在各驱动里错误形状不同,统一按标记串归一。 */
|
|
21573
21580
|
async writeOrCapacity(statements) {
|
|
21574
21581
|
try {
|
|
@@ -21788,7 +21795,11 @@ var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
21788
21795
|
FOR EACH ROW EXECUTE FUNCTION tb_search_snapshots_v5_capacity()`
|
|
21789
21796
|
];
|
|
21790
21797
|
var PG_SEARCH_WRITE_LOCK_KEY = 2069799624;
|
|
21791
|
-
var
|
|
21798
|
+
var PG_FIXED_STATEMENTS = toolSearchFixedStatements({
|
|
21799
|
+
castInt: (expr) => `${expr}::int`,
|
|
21800
|
+
placeholder: (index) => `$${index}`
|
|
21801
|
+
});
|
|
21802
|
+
var PG_SEARCH_INSERT_SNAPSHOT_SQL = PG_FIXED_STATEMENTS.insertSnapshot;
|
|
21792
21803
|
function pgBulkInsertSql(table, columns, rows) {
|
|
21793
21804
|
const tuples = [];
|
|
21794
21805
|
for (let r = 0; r < rows; r++) {
|
|
@@ -21808,38 +21819,6 @@ var PG_SEARCH_TOOLS_COLUMNS = [
|
|
|
21808
21819
|
var PG_SEARCH_SNAPSHOTS_TABLE = "tb_search_snapshots_v5";
|
|
21809
21820
|
var PG_SEARCH_SNAPSHOTS_COLUMNS = ["path", "digest"];
|
|
21810
21821
|
var PG_SEARCH_INSERT_ROWS_MAX = 1e3;
|
|
21811
|
-
var META_SQL2 = `
|
|
21812
|
-
SELECT revision::int AS revision, seeded::int AS seeded, cursor_secret
|
|
21813
|
-
FROM tb_search_meta_v5 WHERE singleton = 1
|
|
21814
|
-
`;
|
|
21815
|
-
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM tb_search_snapshots_v5 ORDER BY path";
|
|
21816
|
-
var PATH_STATE_SQL2 = `
|
|
21817
|
-
SELECT snapshots.digest,
|
|
21818
|
-
EXISTS(SELECT 1 FROM tb_search_tools_v5 WHERE path = $1)::int AS has_tools,
|
|
21819
|
-
(SELECT COUNT(*) FROM tb_search_snapshots_v5)::int AS path_count
|
|
21820
|
-
FROM (SELECT 1) AS singleton
|
|
21821
|
-
LEFT JOIN tb_search_snapshots_v5 AS snapshots ON snapshots.path = $2
|
|
21822
|
-
`;
|
|
21823
|
-
var PRESENT_SQL2 = "SELECT 1 AS present FROM tb_search_tools_v5 WHERE path = $1 LIMIT 1";
|
|
21824
|
-
var PRESENT_PREFIX_SQL2 = `
|
|
21825
|
-
SELECT 1 AS present FROM tb_search_tools_v5
|
|
21826
|
-
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
21827
|
-
LIMIT 1
|
|
21828
|
-
`;
|
|
21829
|
-
var DELETE_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v5 WHERE path = $1";
|
|
21830
|
-
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM tb_search_snapshots_v5 WHERE path = $1";
|
|
21831
|
-
var DELETE_TOOLS_PREFIX_SQL2 = `
|
|
21832
|
-
DELETE FROM tb_search_tools_v5
|
|
21833
|
-
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
21834
|
-
`;
|
|
21835
|
-
var DELETE_SNAPSHOT_PREFIX_SQL2 = `
|
|
21836
|
-
DELETE FROM tb_search_snapshots_v5
|
|
21837
|
-
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
21838
|
-
`;
|
|
21839
|
-
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v5";
|
|
21840
|
-
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM tb_search_snapshots_v5";
|
|
21841
|
-
var BUMP_REVISION_SQL2 = "UPDATE tb_search_meta_v5 SET revision = revision + 1 WHERE singleton = 1";
|
|
21842
|
-
var COMPLETE_REBUILD_SQL2 = "UPDATE tb_search_meta_v5 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
21843
21822
|
var pgSearchDialect = {
|
|
21844
21823
|
candidateStatement: (query, limit, offset, rawConstraints) => {
|
|
21845
21824
|
const constraints = normalizeToolSearchOptions(rawConstraints);
|
|
@@ -21857,22 +21836,7 @@ var pgSearchDialect = {
|
|
|
21857
21836
|
);
|
|
21858
21837
|
},
|
|
21859
21838
|
schemaStatements: PG_SEARCH_SCHEMA_STATEMENTS,
|
|
21860
|
-
statements:
|
|
21861
|
-
bumpRevision: BUMP_REVISION_SQL2,
|
|
21862
|
-
completeRebuild: COMPLETE_REBUILD_SQL2,
|
|
21863
|
-
deleteAllSnapshots: DELETE_ALL_SNAPSHOTS_SQL2,
|
|
21864
|
-
deleteAllTools: DELETE_ALL_TOOLS_SQL2,
|
|
21865
|
-
deleteSnapshot: DELETE_SNAPSHOT_SQL2,
|
|
21866
|
-
deleteSnapshotPrefix: DELETE_SNAPSHOT_PREFIX_SQL2,
|
|
21867
|
-
deleteTools: DELETE_TOOLS_SQL2,
|
|
21868
|
-
deleteToolsPrefix: DELETE_TOOLS_PREFIX_SQL2,
|
|
21869
|
-
insertSnapshot: PG_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
21870
|
-
meta: META_SQL2,
|
|
21871
|
-
pathState: PATH_STATE_SQL2,
|
|
21872
|
-
present: PRESENT_SQL2,
|
|
21873
|
-
presentPrefix: PRESENT_PREFIX_SQL2,
|
|
21874
|
-
snapshotDigests: SNAPSHOT_DIGESTS_SQL2
|
|
21875
|
-
}
|
|
21839
|
+
statements: PG_FIXED_STATEMENTS
|
|
21876
21840
|
};
|
|
21877
21841
|
|
|
21878
21842
|
// ../core/src/secret/secretStore.ts
|
|
@@ -22004,7 +21968,7 @@ var SecretStoreImpl = class _SecretStoreImpl {
|
|
|
22004
21968
|
await this.key(),
|
|
22005
21969
|
ciphertext
|
|
22006
21970
|
);
|
|
22007
|
-
return new
|
|
21971
|
+
return new TextDecoder2().decode(plaintext);
|
|
22008
21972
|
}
|
|
22009
21973
|
};
|
|
22010
21974
|
|
|
@@ -22509,7 +22473,7 @@ function rewriteRemotePath(nodePath, requestPath, baseUrl) {
|
|
|
22509
22473
|
return rel === "" ? base : `${base}/${rel}`;
|
|
22510
22474
|
}
|
|
22511
22475
|
function hostOf(url2) {
|
|
22512
|
-
const m = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/([
|
|
22476
|
+
const m = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/([^/?#\\]*)/.exec(url2);
|
|
22513
22477
|
if (m === null) return void 0;
|
|
22514
22478
|
let authority = m[1] ?? "";
|
|
22515
22479
|
const at = authority.lastIndexOf("@");
|
|
@@ -22608,10 +22572,10 @@ function byPath(a, b) {
|
|
|
22608
22572
|
return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
|
|
22609
22573
|
}
|
|
22610
22574
|
var NodeRegistryStore = class {
|
|
22575
|
+
store;
|
|
22611
22576
|
constructor(store) {
|
|
22612
22577
|
this.store = store;
|
|
22613
22578
|
}
|
|
22614
|
-
store;
|
|
22615
22579
|
keyOf(path) {
|
|
22616
22580
|
return KEY_NODE + path;
|
|
22617
22581
|
}
|
|
@@ -23265,6 +23229,7 @@ export {
|
|
|
23265
23229
|
TBError,
|
|
23266
23230
|
isTBError,
|
|
23267
23231
|
normalizePath,
|
|
23232
|
+
assertNoCollision,
|
|
23268
23233
|
validatePath,
|
|
23269
23234
|
KEY_SK_HASH,
|
|
23270
23235
|
KEY_SK_ID,
|