@tool-bridge/server 0.20.0 → 0.21.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/{airtable-ZNWHIJMO.js → airtable-LLZDFN7M.js} +19 -16
- package/dist/{alt_text_generator_ai-X7RMDDM5.js → alt_text_generator_ai-W7O34SNG.js} +4 -4
- package/dist/{amap-3VER75VH.js → amap-VOX4T2AW.js} +4 -4
- package/dist/{anthropic-N7NTB3UC.js → anthropic-G23NN3X5.js} +23 -25
- package/dist/{apify-JB5P5AJI.js → apify-Y3SS734K.js} +20 -19
- package/dist/{brave_search-USL5OOBS.js → brave_search-ZC7OAPSZ.js} +16 -14
- package/dist/{chunk-6ANLYNFB.js → chunk-ATK45BXV.js} +1 -1
- package/dist/{chunk-6X55ALDX.js → chunk-E6JCVKW6.js} +6 -5
- package/dist/{chunk-RVUERWUZ.js → chunk-KMTT3I6D.js} +768 -1048
- package/dist/chunk-R6P4XAE5.js +248 -0
- package/dist/{chunk-3WL6EXYX.js → chunk-U7B6DS2O.js} +1 -1
- package/dist/{chunk-WIGQCP6O.js → chunk-UZM2RXZH.js} +159 -182
- package/dist/chunk-XYBU3WZH.js +71 -0
- package/dist/{circleci-LBGB25LP.js → circleci-3BAX5FCG.js} +20 -24
- package/dist/{clerk-6RX37CNZ.js → clerk-6LEM6TNU.js} +22 -21
- package/dist/{cloudflare_dns-NQGW7FHV.js → cloudflare_dns-KINYTJUD.js} +21 -17
- package/dist/{cohere-XPC2NAEW.js → cohere-XCJ5AJ6B.js} +19 -17
- package/dist/{confluence-ZUG2LT5A.js → confluence-B3EWPZVE.js} +16 -11
- package/dist/{convertapi-ZLXKWV3L.js → convertapi-EUWSQYPF.js} +3 -3
- package/dist/{currencyapi-T3A3HSOD.js → currencyapi-KVTIK3GL.js} +23 -26
- package/dist/{deepseek-NJMOD23E.js → deepseek-PC5YGNC5.js} +27 -17
- package/dist/{docker_hub-D2MQCSJ7.js → docker_hub-C3MA5FU6.js} +4 -4
- package/dist/{dropbox-MI6U3SOT.js → dropbox-XBV7Z2IR.js} +9 -8
- package/dist/{dub-P2BYBYV4.js → dub-LDOFG3HC.js} +22 -19
- package/dist/{e2b-BGKIAE54.js → e2b-JMCPSVBW.js} +20 -20
- package/dist/{exa-EUY7VV4C.js → exa-RAK7O7RD.js} +22 -25
- package/dist/{fal_ai-AAOG5FYJ.js → fal_ai-23E7JPNT.js} +18 -17
- package/dist/feishu-7QRIDUV6.js +12019 -0
- package/dist/{feishu_custom_bot-BWGMNVXF.js → feishu_custom_bot-TJ4K7QNJ.js} +3 -3
- package/dist/{figma-SJSWYCGD.js → figma-E6IX5DTH.js} +21 -23
- package/dist/{firehydrant-MOXK2PST.js → firehydrant-ZBLPQREE.js} +15 -15
- package/dist/{fixer-ISIDUDZU.js → fixer-BWON27UO.js} +4 -4
- package/dist/{fly-U4KPSGBF.js → fly-ZH3HFCZJ.js} +20 -16
- package/dist/{front-ZHM2YX2E.js → front-QCGXYEDJ.js} +20 -23
- package/dist/{geocodio-SVCCAXAV.js → geocodio-YGNI7DA4.js} +4 -4
- package/dist/{ghost-INTR7FIY.js → ghost-EVSGKH2Q.js} +4 -4
- package/dist/{github-T275VVWR.js → github-MA2BGRCJ.js} +28 -27
- package/dist/{gmail-KSSPOE67.js → gmail-E5E6AADE.js} +17 -17
- package/dist/{googlecalendar-JB5RW27L.js → googlecalendar-BTLFPXTD.js} +22 -19
- package/dist/{googledocs-G522PUGW.js → googledocs-BUHL4J2H.js} +6 -5
- package/dist/{grafana-44ZPIV5P.js → grafana-GLU2DWF2.js} +24 -25
- package/dist/{graphhopper-2MORXLOW.js → graphhopper-WSMB3TCD.js} +4 -4
- package/dist/index.d.ts +31 -30
- package/dist/index.js +4 -3
- package/dist/{ip2proxy-R4K4KEMI.js → ip2proxy-EZ64Y4ZH.js} +4 -4
- package/dist/{ipgeolocation_io-H4J55OGI.js → ipgeolocation_io-AA7HAS22.js} +4 -4
- package/dist/{ipqualityscore-XGID4OHA.js → ipqualityscore-BHJXVTJT.js} +4 -4
- package/dist/{jina_ai-7ZVDOR3Z.js → jina_ai-EFBHTBXL.js} +20 -21
- package/dist/{jira-CTIYZTT3.js → jira-HQSHAA5K.js} +20 -16
- package/dist/{langsmith-ISP567FS.js → langsmith-5W6SCT6F.js} +25 -25
- package/dist/{lemlist-OGKK272F.js → lemlist-HJWH6UMK.js} +23 -24
- package/dist/{linear-6JX4E3JI.js → linear-K7RYFYAD.js} +6 -5
- package/dist/{logsnag-BVB36ZCL.js → logsnag-4KFOHL37.js} +20 -22
- package/dist/main.js +103 -102
- package/dist/{mattermost-UECVPZGY.js → mattermost-S2BRCWLQ.js} +21 -17
- package/dist/{mem0-EUA7S2OO.js → mem0-CAW43CIC.js} +15 -15
- package/dist/{memos-BYSBJRWZ.js → memos-TWEGPKFM.js} +39 -34
- package/dist/{metabase-4JXZH3YG.js → metabase-MMSEPCOF.js} +22 -18
- package/dist/{mistral_ai-2C5BTBKW.js → mistral_ai-64BGZQHP.js} +24 -21
- package/dist/{mother_duck-ZGNNNR3X.js → mother_duck-H7PCQNZ2.js} +23 -19
- package/dist/{ngrok-NTPGMRXI.js → ngrok-GQCUGZKJ.js} +17 -22
- package/dist/{notes-KGYXX6N6.js → notes-PFMKRO33.js} +1 -1
- package/dist/{notion-EX3X2G7G.js → notion-DQWZWP4N.js} +20 -17
- package/dist/{open_exchange_rates-2V2LIGPS.js → open_exchange_rates-QMMD735E.js} +4 -4
- package/dist/{openai-KQFQPK7Z.js → openai-W6PX32NZ.js} +22 -16
- package/dist/{opengraph_io-B63SEYJY.js → opengraph_io-HNDBXYNW.js} +4 -4
- package/dist/{openrouter-62A4H62Q.js → openrouter-JJYMEAUL.js} +19 -14
- package/dist/{outline-QC33XLCK.js → outline-MCBNQZYY.js} +18 -20
- package/dist/{paddle-HDZG35Y7.js → paddle-D2SKLUDN.js} +17 -15
- package/dist/{perplexity-M7LOMJWA.js → perplexity-XIFMKUAE.js} +19 -23
- package/dist/{pinecone-Y7YCJRZM.js → pinecone-HUFTALV2.js} +19 -24
- package/dist/{pipedrive-FLJA62UX.js → pipedrive-Y2O7QGFF.js} +22 -23
- package/dist/{polar-AE55Q425.js → polar-TYTOMOSR.js} +19 -17
- package/dist/{posthog-IAY5D3YW.js → posthog-43JAR3VW.js} +29 -24
- package/dist/{postmark-NMKAXDXZ.js → postmark-KL2QJYSG.js} +19 -17
- package/dist/{prerender-CDJM7I7N.js → prerender-MENYM2TY.js} +4 -4
- package/dist/{pubmed-N437ZJOR.js → pubmed-GOXUVVH5.js} +6 -5
- package/dist/{railway-NBWYXCUM.js → railway-V2SID4WV.js} +3 -3
- package/dist/{readwise-QRO3UC3R.js → readwise-CI4GIMMJ.js} +16 -15
- package/dist/{render-NEW7SROG.js → render-SUBJ6YRZ.js} +21 -20
- package/dist/{replicate-73YQLRTY.js → replicate-756MXPYX.js} +20 -21
- package/dist/{resend-R5BAZFHZ.js → resend-ZKH3BTBI.js} +15 -11
- package/dist/{rootly-5BLALPCS.js → rootly-CD2LJHPI.js} +19 -18
- package/dist/{scrapfly-EHFLNNUZ.js → scrapfly-NSRHFDIQ.js} +4 -4
- package/dist/{scrapingbee-UXLYS72S.js → scrapingbee-OQHLAVEY.js} +4 -4
- package/dist/{screenshot_fyi-KC3NLTJ6.js → screenshot_fyi-DVWG3AXC.js} +4 -4
- package/dist/{semantic_scholar-SA5OIUWA.js → semantic_scholar-T4A252KW.js} +21 -20
- package/dist/{sentry-BAE3XLJN.js → sentry-546MNDJG.js} +22 -19
- package/dist/{shodan-FJR6MKKW.js → shodan-C3OON3Z3.js} +4 -4
- package/dist/{shopify-7OA6SLN5.js → shopify-Y2HN2MCQ.js} +23 -19
- package/dist/{stripe-MUWDZGGF.js → stripe-VE3CD3AY.js} +3 -3
- package/dist/{supabase-SWWGNWYR.js → supabase-U2SL4D63.js} +18 -17
- package/dist/{tavily-XQNJ5EDI.js → tavily-KCZHK6HE.js} +20 -20
- package/dist/{telegram-RR6JPZOG.js → telegram-3URFBCMY.js} +4 -4
- package/dist/{telnyx-7PKXOWSO.js → telnyx-CXQ4EZUX.js} +19 -19
- package/dist/{todoist-63X5IUJE.js → todoist-HNPWNYTD.js} +18 -17
- package/dist/{trello-MOG63DAI.js → trello-3W2MIXRP.js} +4 -4
- package/dist/{turso-ENWTSHDL.js → turso-2EQF7C2Z.js} +23 -30
- package/dist/{twilio-FDXUN7VX.js → twilio-4PDBJKWX.js} +6 -5
- package/dist/{umami-TM7PROWF.js → umami-5REN7TGP.js} +23 -28
- package/dist/{unsplash-NWXLKSOW.js → unsplash-EIXL424F.js} +19 -18
- package/dist/{upstash_redis-CUTQ5L2N.js → upstash_redis-G4LQBYHA.js} +17 -13
- package/dist/{uptimerobot-NNO32M3I.js → uptimerobot-KNJ3EYLY.js} +3 -3
- package/dist/{v2ex-24KMSWS7.js → v2ex-RHJ234PZ.js} +35 -18
- package/dist/{vercel-B45LPF6I.js → vercel-AS6NCIC7.js} +21 -18
- package/dist/{wolfram_alpha_api-DKJWVR6G.js → wolfram_alpha_api-3G4PUJWB.js} +4 -4
- package/dist/{wordpress-XYFSDZXY.js → wordpress-KNDAAUV7.js} +21 -17
- package/dist/{workos-BEM7EPHM.js → workos-R6UITSJ7.js} +26 -27
- package/dist/{zhihu-CFHZ4NC7.js → zhihu-AGK4HILK.js} +21 -21
- package/package.json +5 -5
- package/dist/feishu-AN5IJYOW.js +0 -231
|
@@ -30,6 +30,7 @@ var STATUS_OVERRIDES = /* @__PURE__ */ new Set([
|
|
|
30
30
|
"permission_denied:401",
|
|
31
31
|
"unavailable:501"
|
|
32
32
|
]);
|
|
33
|
+
var TB_ERROR_BRAND = /* @__PURE__ */ Symbol.for("tool-bridge.TBError.v1");
|
|
33
34
|
var TBError = class _TBError extends Error {
|
|
34
35
|
code;
|
|
35
36
|
retryable;
|
|
@@ -37,6 +38,12 @@ var TBError = class _TBError extends Error {
|
|
|
37
38
|
constructor(code, message, options = {}) {
|
|
38
39
|
super(message);
|
|
39
40
|
this.name = "TBError";
|
|
41
|
+
Object.defineProperty(this, TB_ERROR_BRAND, {
|
|
42
|
+
configurable: false,
|
|
43
|
+
enumerable: false,
|
|
44
|
+
value: true,
|
|
45
|
+
writable: false
|
|
46
|
+
});
|
|
40
47
|
const retryable = options.retryable ?? false;
|
|
41
48
|
if (retryable && !RETRYABLE_CODES.has(code)) {
|
|
42
49
|
throw new Error(`TBError: retryable=true not allowed for code '${code}'`);
|
|
@@ -70,7 +77,10 @@ var TBError = class _TBError extends Error {
|
|
|
70
77
|
}
|
|
71
78
|
};
|
|
72
79
|
function isTBError(value) {
|
|
73
|
-
|
|
80
|
+
if (typeof value !== "object" || value === null) return false;
|
|
81
|
+
if (value[TB_ERROR_BRAND] !== true) return false;
|
|
82
|
+
const candidate = value;
|
|
83
|
+
return typeof candidate.code === "string" && TB_ERROR_CODES.includes(candidate.code) && typeof candidate.message === "string" && typeof candidate.retryable === "boolean" && typeof candidate.httpStatus === "number" && typeof candidate.toJSON === "function";
|
|
74
84
|
}
|
|
75
85
|
|
|
76
86
|
// ../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.js
|
|
@@ -14609,6 +14619,20 @@ function canonicalizePath(path) {
|
|
|
14609
14619
|
if (norm === "") return "";
|
|
14610
14620
|
return norm.split("/").map((seg) => canonicalizeSegment(seg)).join("/");
|
|
14611
14621
|
}
|
|
14622
|
+
function assertNoCollision(names, context) {
|
|
14623
|
+
const seen = /* @__PURE__ */ new Map();
|
|
14624
|
+
for (const name of names) {
|
|
14625
|
+
const lower = name.toLowerCase();
|
|
14626
|
+
const prev = seen.get(lower);
|
|
14627
|
+
if (prev !== void 0 && prev !== name) {
|
|
14628
|
+
throw new TBError(
|
|
14629
|
+
"invalid_argument",
|
|
14630
|
+
`${context}:\u6807\u8BC6\u7B26 '${prev}' \u4E0E '${name}' \u5C0F\u5199\u89C4\u8303\u5316\u540E\u51B2\u7A81`
|
|
14631
|
+
);
|
|
14632
|
+
}
|
|
14633
|
+
seen.set(lower, name);
|
|
14634
|
+
}
|
|
14635
|
+
}
|
|
14612
14636
|
function segments(path) {
|
|
14613
14637
|
const p = normalizePath(path);
|
|
14614
14638
|
return p === "" ? [] : p.split("/");
|
|
@@ -14682,10 +14706,10 @@ function normalizeAnnotationPath(path) {
|
|
|
14682
14706
|
return norm;
|
|
14683
14707
|
}
|
|
14684
14708
|
var AnnotationStore = class {
|
|
14709
|
+
store;
|
|
14685
14710
|
constructor(store) {
|
|
14686
14711
|
this.store = store;
|
|
14687
14712
|
}
|
|
14688
|
-
store;
|
|
14689
14713
|
keyOf(path) {
|
|
14690
14714
|
return KEY_ANNOTATION + path;
|
|
14691
14715
|
}
|
|
@@ -14823,7 +14847,7 @@ var SYSTEM_AUTO = "system:auto";
|
|
|
14823
14847
|
var RESERVED_ROOTS = ["system", "ui"];
|
|
14824
14848
|
|
|
14825
14849
|
// ../core/src/auth/registerPath.ts
|
|
14826
|
-
var
|
|
14850
|
+
var foldedSegments = (path) => segments(path).map((seg) => seg.toLowerCase());
|
|
14827
14851
|
function isUnderPrefix(target, prefix) {
|
|
14828
14852
|
if (prefix.length > target.length) return false;
|
|
14829
14853
|
return prefix.every((seg, i) => seg === target[i]);
|
|
@@ -14834,7 +14858,7 @@ var deny = (message) => ({
|
|
|
14834
14858
|
});
|
|
14835
14859
|
function checkRegisterPath(input) {
|
|
14836
14860
|
const { sk, targetPath, existing, reservedRoots = [] } = input;
|
|
14837
|
-
const target =
|
|
14861
|
+
const target = foldedSegments(targetPath);
|
|
14838
14862
|
if (target.some((seg) => seg.startsWith("~"))) {
|
|
14839
14863
|
return {
|
|
14840
14864
|
allow: false,
|
|
@@ -14842,12 +14866,12 @@ function checkRegisterPath(input) {
|
|
|
14842
14866
|
};
|
|
14843
14867
|
}
|
|
14844
14868
|
if (sk.registerPaths !== void 0) {
|
|
14845
|
-
const ok = sk.registerPaths.some((p) => isUnderPrefix(target,
|
|
14869
|
+
const ok = sk.registerPaths.some((p) => isUnderPrefix(target, foldedSegments(p)));
|
|
14846
14870
|
if (!ok) {
|
|
14847
14871
|
return deny(`path '${targetPath}' is outside declared registerPaths`);
|
|
14848
14872
|
}
|
|
14849
14873
|
} else {
|
|
14850
|
-
const roots = /* @__PURE__ */ new Set([...RESERVED_ROOTS, ...reservedRoots]);
|
|
14874
|
+
const roots = /* @__PURE__ */ new Set([...RESERVED_ROOTS, ...reservedRoots.map((r) => r.toLowerCase())]);
|
|
14851
14875
|
const head = target[0];
|
|
14852
14876
|
if (head !== void 0 && roots.has(head)) {
|
|
14853
14877
|
return deny(`cannot register under reserved root '${head}'`);
|
|
@@ -14907,6 +14931,10 @@ function base64urlEncode(bytes2) {
|
|
|
14907
14931
|
}
|
|
14908
14932
|
return out;
|
|
14909
14933
|
}
|
|
14934
|
+
function base64Encode(bytes2) {
|
|
14935
|
+
const url2 = base64urlEncode(bytes2).replaceAll("-", "+").replaceAll("_", "/");
|
|
14936
|
+
return url2 + "=".repeat((4 - url2.length % 4) % 4);
|
|
14937
|
+
}
|
|
14910
14938
|
function base64urlDecode(input) {
|
|
14911
14939
|
if (input.length % 4 === 1 || !/^[A-Za-z0-9_-]*$/.test(input)) {
|
|
14912
14940
|
throw new Error("base64urlDecode: malformed base64url input");
|
|
@@ -14926,6 +14954,12 @@ function base64urlDecode(input) {
|
|
|
14926
14954
|
return new Uint8Array(bytes2);
|
|
14927
14955
|
}
|
|
14928
14956
|
|
|
14957
|
+
// ../core/src/webGlobals.ts
|
|
14958
|
+
var g = globalThis;
|
|
14959
|
+
var crypto = g.crypto;
|
|
14960
|
+
var TextDecoder2 = g.TextDecoder;
|
|
14961
|
+
var TextEncoder = g.TextEncoder;
|
|
14962
|
+
|
|
14929
14963
|
// ../core/src/omit.ts
|
|
14930
14964
|
function omit2(obj, ...keys) {
|
|
14931
14965
|
const rest = { ...obj };
|
|
@@ -15014,10 +15048,17 @@ var SKRegistryStore = class {
|
|
|
15014
15048
|
const listOpts = { limit: clampLimit(opts?.limit) };
|
|
15015
15049
|
if (opts?.cursor !== void 0) listOpts.cursor = opts.cursor;
|
|
15016
15050
|
const page = await this.store.list(KEY_SK_ID, listOpts);
|
|
15051
|
+
const hashes = page.items.map(({ value }) => value).filter((value) => typeof value === "string");
|
|
15052
|
+
const records = /* @__PURE__ */ new Map();
|
|
15053
|
+
for (let i = 0; i < hashes.length; i += 100) {
|
|
15054
|
+
const chunk = await this.store.getMany(
|
|
15055
|
+
hashes.slice(i, i + 100).map((hash2) => KEY_SK_HASH + hash2)
|
|
15056
|
+
);
|
|
15057
|
+
for (const [key, value] of chunk) records.set(key, value);
|
|
15058
|
+
}
|
|
15017
15059
|
const items = [];
|
|
15018
|
-
for (const
|
|
15019
|
-
|
|
15020
|
-
const rec = await this.store.get(KEY_SK_HASH + value);
|
|
15060
|
+
for (const hash2 of hashes) {
|
|
15061
|
+
const rec = records.get(KEY_SK_HASH + hash2);
|
|
15021
15062
|
if (rec) items.push(projectKey(rec));
|
|
15022
15063
|
}
|
|
15023
15064
|
return page.cursor !== void 0 ? { items, cursor: page.cursor } : { items };
|
|
@@ -15188,7 +15229,7 @@ var HtbpCommandRegistry = class {
|
|
|
15188
15229
|
metadata = /* @__PURE__ */ new Map();
|
|
15189
15230
|
operations = new OperationRegistry();
|
|
15190
15231
|
register(name, spec, handler) {
|
|
15191
|
-
const { h, returns, scope, ...operationSpec } = spec;
|
|
15232
|
+
const { h, hostOnly, returns, scope, ...operationSpec } = spec;
|
|
15192
15233
|
this.operations.register(
|
|
15193
15234
|
name,
|
|
15194
15235
|
{ ...operationSpec, description: h },
|
|
@@ -15196,6 +15237,7 @@ var HtbpCommandRegistry = class {
|
|
|
15196
15237
|
);
|
|
15197
15238
|
this.metadata.set(name, {
|
|
15198
15239
|
scope,
|
|
15240
|
+
...hostOnly !== void 0 ? { hostOnly } : {},
|
|
15199
15241
|
...returns !== void 0 ? { returns } : {}
|
|
15200
15242
|
});
|
|
15201
15243
|
return this;
|
|
@@ -15209,6 +15251,10 @@ var HtbpCommandRegistry = class {
|
|
|
15209
15251
|
scopeFor(name) {
|
|
15210
15252
|
return this.metadata.get(name)?.scope;
|
|
15211
15253
|
}
|
|
15254
|
+
/** 该命令是否宿主专属扩展(见 {@link HtbpCommandSpec.hostOnly});未注册按 false。 */
|
|
15255
|
+
isHostOnly(name) {
|
|
15256
|
+
return this.metadata.get(name)?.hostOnly === true;
|
|
15257
|
+
}
|
|
15212
15258
|
commandSpecs(nodePath) {
|
|
15213
15259
|
return this.operations.list().map((operation) => {
|
|
15214
15260
|
const metadata = this.metadata.get(operation.name);
|
|
@@ -15249,13 +15295,13 @@ var HtbpCommandRegistry = class {
|
|
|
15249
15295
|
|
|
15250
15296
|
// ../core/src/builtin/commandRegistry.ts
|
|
15251
15297
|
var BuiltinCommandRegistry = class extends HtbpCommandRegistry {
|
|
15298
|
+
moduleName;
|
|
15299
|
+
moduleDescription;
|
|
15252
15300
|
constructor(moduleName, moduleDescription) {
|
|
15253
15301
|
super();
|
|
15254
15302
|
this.moduleName = moduleName;
|
|
15255
15303
|
this.moduleDescription = moduleDescription;
|
|
15256
15304
|
}
|
|
15257
|
-
moduleName;
|
|
15258
|
-
moduleDescription;
|
|
15259
15305
|
help(nodePath) {
|
|
15260
15306
|
return this.helpModel({
|
|
15261
15307
|
path: nodePath,
|
|
@@ -15462,18 +15508,7 @@ function encodeForm(entries) {
|
|
|
15462
15508
|
return [...entries].map(([key, value]) => `${encode3(key)}=${encode3(value)}`).join("&");
|
|
15463
15509
|
}
|
|
15464
15510
|
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;
|
|
15511
|
+
return base64Encode(Uint8Array.from(ascii, (char) => char.charCodeAt(0)));
|
|
15477
15512
|
}
|
|
15478
15513
|
function asRecord(value) {
|
|
15479
15514
|
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
@@ -15664,6 +15699,8 @@ var contextCommands = new HtbpCommandRegistry().register(
|
|
|
15664
15699
|
"create_upload",
|
|
15665
15700
|
{
|
|
15666
15701
|
h: "create a short-lived, path-scoped direct-upload grant; persist the returned uri, not url",
|
|
15702
|
+
// 宿主专属扩展:仅在底层具备直传签名能力时由宿主装配,不进基础动词表。
|
|
15703
|
+
hostOnly: true,
|
|
15667
15704
|
inputSchema: external_exports.strictObject({
|
|
15668
15705
|
path: external_exports.string().describe("target entry path inside the namespace"),
|
|
15669
15706
|
contentType: external_exports.string().describe("media type signed into the PUT request"),
|
|
@@ -15687,14 +15724,14 @@ function contextScopeForCmd(command) {
|
|
|
15687
15724
|
}
|
|
15688
15725
|
function parseContextCmdArgs(command, args) {
|
|
15689
15726
|
const normalized = command.toLowerCase();
|
|
15690
|
-
if (!contextCommands.has(normalized) || normalized
|
|
15727
|
+
if (!contextCommands.has(normalized) || contextCommands.isHostOnly(normalized)) {
|
|
15691
15728
|
throw new TBError("invalid_argument", `unknown cmd '${command}'`);
|
|
15692
15729
|
}
|
|
15693
15730
|
return contextCommands.parse(normalized, args);
|
|
15694
15731
|
}
|
|
15695
15732
|
async function dispatchContextCmd(provider, command, args) {
|
|
15696
15733
|
const normalized = command.toLowerCase();
|
|
15697
|
-
if (!contextCommands.has(normalized) || normalized
|
|
15734
|
+
if (!contextCommands.has(normalized) || contextCommands.isHostOnly(normalized)) {
|
|
15698
15735
|
throw new TBError("invalid_argument", `unknown cmd '${command}'`);
|
|
15699
15736
|
}
|
|
15700
15737
|
const method = normalized;
|
|
@@ -15716,7 +15753,7 @@ async function dispatchContextUploadCmd(args, upload) {
|
|
|
15716
15753
|
}
|
|
15717
15754
|
|
|
15718
15755
|
// ../core/src/context/capabilities.ts
|
|
15719
|
-
var CONTEXT_METHODS = contextCommands.names().filter((name) => name
|
|
15756
|
+
var CONTEXT_METHODS = contextCommands.names().filter((name) => !contextCommands.isHostOnly(name));
|
|
15720
15757
|
var CONTEXT_WRITE_METHODS = CONTEXT_METHODS.filter((method) => contextCommands.scopeFor(method) === "write");
|
|
15721
15758
|
function contextMethodsOf(provider) {
|
|
15722
15759
|
const methods = /* @__PURE__ */ new Set();
|
|
@@ -16503,10 +16540,10 @@ function normalizeAllowHost(raw) {
|
|
|
16503
16540
|
return host;
|
|
16504
16541
|
}
|
|
16505
16542
|
var RemoteAllowlistStore = class {
|
|
16543
|
+
store;
|
|
16506
16544
|
constructor(store) {
|
|
16507
16545
|
this.store = store;
|
|
16508
16546
|
}
|
|
16509
|
-
store;
|
|
16510
16547
|
/** 读全部运行时条目(缺省/脏值 → 空数组);按 host 升序稳定输出。 */
|
|
16511
16548
|
async list() {
|
|
16512
16549
|
const raw = await this.store.get(KEY_REMOTE_ALLOWLIST);
|
|
@@ -16682,7 +16719,7 @@ function parseRecord(value) {
|
|
|
16682
16719
|
try {
|
|
16683
16720
|
if (typeof value !== "object" || value === null || Array.isArray(value)) throw new Error();
|
|
16684
16721
|
const raw = value;
|
|
16685
|
-
if (raw.v !== 1 || !Number.isSafeInteger(raw.revision) || raw.revision < 1 || !nonEmpty(raw.operationId) ||
|
|
16722
|
+
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
16723
|
if (raw.leaseId === void 0 !== (raw.leaseUntil === void 0)) throw new Error();
|
|
16687
16724
|
if (raw.leaseId !== void 0 && (!nonEmpty(raw.leaseId) || !finiteTimestamp(raw.leaseUntil))) {
|
|
16688
16725
|
throw new Error();
|
|
@@ -16694,7 +16731,6 @@ function parseRecord(value) {
|
|
|
16694
16731
|
v: 1,
|
|
16695
16732
|
revision: raw.revision,
|
|
16696
16733
|
operationId: raw.operationId,
|
|
16697
|
-
commandId: raw.commandId,
|
|
16698
16734
|
deviceId: raw.deviceId,
|
|
16699
16735
|
deviceKeyId: raw.deviceKeyId,
|
|
16700
16736
|
mountPath: raw.mountPath,
|
|
@@ -16832,7 +16868,7 @@ var DeviceMailboxCipher = class {
|
|
|
16832
16868
|
await this.key(),
|
|
16833
16869
|
ciphertext
|
|
16834
16870
|
);
|
|
16835
|
-
return JSON.parse(new
|
|
16871
|
+
return JSON.parse(new TextDecoder2().decode(plaintext));
|
|
16836
16872
|
} catch {
|
|
16837
16873
|
throw new TBError("internal", "device mailbox data cannot be decrypted", { retryable: false });
|
|
16838
16874
|
}
|
|
@@ -16904,7 +16940,6 @@ var DeviceMailboxService = class {
|
|
|
16904
16940
|
summary(record2) {
|
|
16905
16941
|
return {
|
|
16906
16942
|
operationId: record2.operationId,
|
|
16907
|
-
commandId: record2.commandId,
|
|
16908
16943
|
deviceId: record2.deviceId,
|
|
16909
16944
|
mountPath: record2.mountPath,
|
|
16910
16945
|
targetPath: record2.targetPath,
|
|
@@ -17015,7 +17050,6 @@ var DeviceMailboxService = class {
|
|
|
17015
17050
|
v: 1,
|
|
17016
17051
|
revision: 1,
|
|
17017
17052
|
operationId,
|
|
17018
|
-
commandId: operationId,
|
|
17019
17053
|
deviceId: input.deviceId,
|
|
17020
17054
|
deviceKeyId: input.deviceKeyId,
|
|
17021
17055
|
mountPath: input.mountPath,
|
|
@@ -17113,7 +17147,6 @@ var DeviceMailboxService = class {
|
|
|
17113
17147
|
...page.cursor === void 0 ? {} : { cursor: page.cursor },
|
|
17114
17148
|
operation: {
|
|
17115
17149
|
operationId: next.operationId,
|
|
17116
|
-
commandId: next.commandId,
|
|
17117
17150
|
targetPath: next.targetPath,
|
|
17118
17151
|
path: next.path,
|
|
17119
17152
|
arguments: payload.arguments,
|
|
@@ -17413,7 +17446,7 @@ var toolSearchRequestSchema = external_exports.strictObject({
|
|
|
17413
17446
|
limit: external_exports.number().int().optional(),
|
|
17414
17447
|
matching: external_exports.enum(["best", "all"]).optional(),
|
|
17415
17448
|
minCoverage: external_exports.number().gt(0).max(1).optional(),
|
|
17416
|
-
mode: external_exports.enum(["keyword"
|
|
17449
|
+
mode: external_exports.enum(["keyword"]).optional(),
|
|
17417
17450
|
pathPrefix: external_exports.string().optional()
|
|
17418
17451
|
}).optional(),
|
|
17419
17452
|
query: external_exports.string().trim().min(1)
|
|
@@ -17429,7 +17462,6 @@ var deviceOperationSummaryShape = {
|
|
|
17429
17462
|
attempt: external_exports.number().int().nonnegative(),
|
|
17430
17463
|
caller: deviceOperationCallerSchema,
|
|
17431
17464
|
cancelRequestedAt: external_exports.iso.datetime({ offset: true }).optional(),
|
|
17432
|
-
commandId: external_exports.string().min(1),
|
|
17433
17465
|
createdAt: external_exports.iso.datetime({ offset: true }),
|
|
17434
17466
|
deviceId: external_exports.string().min(1),
|
|
17435
17467
|
executionMayHaveOccurred: external_exports.boolean(),
|
|
@@ -17474,7 +17506,6 @@ var deviceOperationClaimSchema = external_exports.object({
|
|
|
17474
17506
|
attempt: external_exports.number().int().positive(),
|
|
17475
17507
|
caller: deviceOperationCallerSchema,
|
|
17476
17508
|
cancelRequestedAt: external_exports.iso.datetime({ offset: true }).optional(),
|
|
17477
|
-
commandId: external_exports.string().min(1),
|
|
17478
17509
|
createdAt: external_exports.iso.datetime({ offset: true }),
|
|
17479
17510
|
expiresAt: external_exports.iso.datetime({ offset: true }),
|
|
17480
17511
|
leaseId: external_exports.string().min(1),
|
|
@@ -17875,17 +17906,7 @@ function createSkModule(store, now) {
|
|
|
17875
17906
|
|
|
17876
17907
|
// ../core/src/builtin/index.ts
|
|
17877
17908
|
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;
|
|
17909
|
+
return (await registry2.subtree("")).length;
|
|
17889
17910
|
}
|
|
17890
17911
|
function createBuiltins(deps) {
|
|
17891
17912
|
const now = deps.now ?? (() => (/* @__PURE__ */ new Date()).toISOString());
|
|
@@ -17934,7 +17955,7 @@ function contextHelpModel(node, opts = {}) {
|
|
|
17934
17955
|
return contextCommands.helpModel(
|
|
17935
17956
|
{ path: node.path, kind: "context", description: node.description },
|
|
17936
17957
|
(command) => {
|
|
17937
|
-
if (command.name
|
|
17958
|
+
if (contextCommands.isHostOnly(command.name)) return false;
|
|
17938
17959
|
if (opts.methods !== void 0 && !opts.methods.has(command.name)) return false;
|
|
17939
17960
|
return opts.readOnly !== true || command.scope === "read";
|
|
17940
17961
|
}
|
|
@@ -17964,7 +17985,7 @@ async function readStreamBytes(stream) {
|
|
|
17964
17985
|
return out;
|
|
17965
17986
|
}
|
|
17966
17987
|
async function readStreamText(stream) {
|
|
17967
|
-
return new
|
|
17988
|
+
return new TextDecoder2().decode(await readStreamBytes(stream));
|
|
17968
17989
|
}
|
|
17969
17990
|
function ownedBytes(view) {
|
|
17970
17991
|
return view.buffer instanceof ArrayBuffer ? new Uint8Array(view.buffer, view.byteOffset, view.byteLength) : new Uint8Array(view);
|
|
@@ -18001,6 +18022,14 @@ function bytesToObjectStream(bytes2) {
|
|
|
18001
18022
|
var DEFAULT_STORE_NAME = "default";
|
|
18002
18023
|
var DEFAULT_STORE_DRIVER_KEY_ROOT = "__tool_bridge_internal__/store/v1";
|
|
18003
18024
|
|
|
18025
|
+
// ../core/src/context/contentType.ts
|
|
18026
|
+
function normalizeContentType(value, message) {
|
|
18027
|
+
if (typeof value !== "string" || value.trim() === "" || value.length > 255 || !value.includes("/") || /[\r\n\0]/.test(value)) {
|
|
18028
|
+
throw new TBError("invalid_argument", message);
|
|
18029
|
+
}
|
|
18030
|
+
return value.trim().toLowerCase();
|
|
18031
|
+
}
|
|
18032
|
+
|
|
18004
18033
|
// ../core/src/context/path.ts
|
|
18005
18034
|
function hasControlChar(s) {
|
|
18006
18035
|
for (let i = 0; i < s.length; i++) {
|
|
@@ -18083,9 +18112,10 @@ async function createObjectContextUploadGrant(store, opts, input) {
|
|
|
18083
18112
|
if (unknownKeys.length > 0) {
|
|
18084
18113
|
throw new TBError("invalid_argument", `create_upload \u542B\u672A\u77E5\u5B57\u6BB5:${unknownKeys.join(",")}`);
|
|
18085
18114
|
}
|
|
18086
|
-
|
|
18087
|
-
|
|
18088
|
-
|
|
18115
|
+
const contentType = normalizeContentType(
|
|
18116
|
+
input?.contentType,
|
|
18117
|
+
"create_upload \u9700\u8981\u5408\u6CD5\u7684 'contentType'"
|
|
18118
|
+
);
|
|
18089
18119
|
const nsPath = normalizePath(opts.nsPath);
|
|
18090
18120
|
const entryPath = normalizeEntryPath(input.path);
|
|
18091
18121
|
const key = `${keyPrefixBare === "" ? "" : `${keyPrefixBare}/`}${entryPath}`;
|
|
@@ -18094,7 +18124,6 @@ async function createObjectContextUploadGrant(store, opts, input) {
|
|
|
18094
18124
|
throw new TBError("unavailable", "\u5BF9\u8C61\u5B58\u50A8\u672A\u914D\u7F6E\u76F4\u4F20\u7B7E\u540D\u80FD\u529B", { retryable: false });
|
|
18095
18125
|
}
|
|
18096
18126
|
const ttlSec = assertPresignTtlSec(opts.uploadGrantTtlSec ?? PRESIGN_TTL_SEC_DEFAULT);
|
|
18097
|
-
const contentType = input.contentType.trim();
|
|
18098
18127
|
const expiresAt = new Date(Date.now() + ttlSec * 1e3).toISOString();
|
|
18099
18128
|
const signed = await store.presignPut(key, ttlSec, {
|
|
18100
18129
|
contentType,
|
|
@@ -18532,18 +18561,18 @@ function derivePresence(input) {
|
|
|
18532
18561
|
var DEVICE_CALL_TIMEOUT_MS = 6e4;
|
|
18533
18562
|
var DEVICE_REJECT_CLOSE_CODE = 1008;
|
|
18534
18563
|
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
18564
|
phase_ = "awaiting-hello";
|
|
18543
18565
|
helloSeen = false;
|
|
18544
18566
|
results = /* @__PURE__ */ new Map();
|
|
18545
18567
|
pending = /* @__PURE__ */ new Map();
|
|
18546
18568
|
timeoutMs;
|
|
18569
|
+
io;
|
|
18570
|
+
opts;
|
|
18571
|
+
constructor(io, opts) {
|
|
18572
|
+
this.io = io;
|
|
18573
|
+
this.opts = opts;
|
|
18574
|
+
this.timeoutMs = opts.timeoutMs ?? DEVICE_CALL_TIMEOUT_MS;
|
|
18575
|
+
}
|
|
18547
18576
|
get phase() {
|
|
18548
18577
|
return this.phase_;
|
|
18549
18578
|
}
|
|
@@ -19350,18 +19379,12 @@ function normalizeTimestamp(value, field) {
|
|
|
19350
19379
|
try {
|
|
19351
19380
|
return normalizeExpiresAt(value);
|
|
19352
19381
|
} catch (error51) {
|
|
19353
|
-
if (error51
|
|
19382
|
+
if (isTBError(error51) && error51.code === "invalid_argument") {
|
|
19354
19383
|
throw new TBError("invalid_argument", `${field} \u5FC5\u987B\u662F\u5E26\u65F6\u533A\u7684 ISO 8601 timestamp`);
|
|
19355
19384
|
}
|
|
19356
19385
|
throw error51;
|
|
19357
19386
|
}
|
|
19358
19387
|
}
|
|
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
19388
|
function normalizeChecksum(value) {
|
|
19366
19389
|
if (value === void 0) return void 0;
|
|
19367
19390
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
@@ -19378,7 +19401,7 @@ function normalizeChecksum(value) {
|
|
|
19378
19401
|
return { algorithm: "sha256", value: digest };
|
|
19379
19402
|
}
|
|
19380
19403
|
function normalizeUploadInput(input) {
|
|
19381
|
-
const contentType = normalizeContentType(input?.contentType);
|
|
19404
|
+
const contentType = normalizeContentType(input?.contentType, "contentType \u4E0D\u5408\u6CD5");
|
|
19382
19405
|
let filename;
|
|
19383
19406
|
if (input.filename !== void 0) {
|
|
19384
19407
|
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 +19450,7 @@ function normalizeContentTypePattern(value) {
|
|
|
19427
19450
|
const prefix = value.slice(0, -1);
|
|
19428
19451
|
if (prefix.length > 1 && !/[\r\n\0]/.test(value)) return value.toLowerCase();
|
|
19429
19452
|
}
|
|
19430
|
-
return normalizeContentType(value);
|
|
19453
|
+
return normalizeContentType(value, "contentType \u4E0D\u5408\u6CD5");
|
|
19431
19454
|
}
|
|
19432
19455
|
function descriptorOf(object2) {
|
|
19433
19456
|
if (object2.status !== "ready" || object2.readyAt === void 0 || object2.size === void 0) throw stateCorrupt("ready object");
|
|
@@ -19449,6 +19472,15 @@ function descriptorOf(object2) {
|
|
|
19449
19472
|
};
|
|
19450
19473
|
}
|
|
19451
19474
|
var StoreService = class {
|
|
19475
|
+
maxObjectBytes;
|
|
19476
|
+
now;
|
|
19477
|
+
relayMaxBytes;
|
|
19478
|
+
shareTtlSec;
|
|
19479
|
+
tokenSecret;
|
|
19480
|
+
uploadTtlSec;
|
|
19481
|
+
cas;
|
|
19482
|
+
state;
|
|
19483
|
+
objects;
|
|
19452
19484
|
constructor(state, objects, opts) {
|
|
19453
19485
|
this.state = state;
|
|
19454
19486
|
this.objects = objects;
|
|
@@ -19480,15 +19512,6 @@ var StoreService = class {
|
|
|
19480
19512
|
"shareTtlSec"
|
|
19481
19513
|
);
|
|
19482
19514
|
}
|
|
19483
|
-
state;
|
|
19484
|
-
objects;
|
|
19485
|
-
maxObjectBytes;
|
|
19486
|
-
now;
|
|
19487
|
-
relayMaxBytes;
|
|
19488
|
-
shareTtlSec;
|
|
19489
|
-
tokenSecret;
|
|
19490
|
-
uploadTtlSec;
|
|
19491
|
-
cas;
|
|
19492
19515
|
/** 所有已存在记录的 CAS 共用 revision 期望,并拒绝错误的版本跃迁。 */
|
|
19493
19516
|
async compareRecord(key, current, next) {
|
|
19494
19517
|
if (next !== null && next.revision !== current.revision + 1)
|
|
@@ -19625,12 +19648,12 @@ var StoreService = class {
|
|
|
19625
19648
|
ifNoneMatch: "*"
|
|
19626
19649
|
});
|
|
19627
19650
|
} catch (error51) {
|
|
19628
|
-
if (error51
|
|
19651
|
+
if (isTBError(error51) && error51.code === "conflict") {
|
|
19629
19652
|
const existing = await this.objects.head(object2.driverKey);
|
|
19630
19653
|
if (existing === null) throw error51;
|
|
19631
19654
|
meta3 = existing;
|
|
19632
19655
|
} else {
|
|
19633
|
-
if (error51
|
|
19656
|
+
if (isTBError(error51) && error51.code === "rate_limited") {
|
|
19634
19657
|
await this.objects.delete(object2.driverKey);
|
|
19635
19658
|
await this.failUpload(session, object2);
|
|
19636
19659
|
}
|
|
@@ -20756,7 +20779,7 @@ function encodeCallContext(ctx) {
|
|
|
20756
20779
|
function decodeCallContext(header) {
|
|
20757
20780
|
let text;
|
|
20758
20781
|
try {
|
|
20759
|
-
text = new
|
|
20782
|
+
text = new TextDecoder2().decode(base64urlDecode(header));
|
|
20760
20783
|
} catch {
|
|
20761
20784
|
throw new TBError("invalid_argument", `${HEADER_TB_CONTEXT} \u975E\u6CD5 base64url`);
|
|
20762
20785
|
}
|
|
@@ -21340,9 +21363,9 @@ async function decodeToolSearchCursor(cursor, query, mode, revision, secret, opt
|
|
|
21340
21363
|
await cursorCryptoKey(secret),
|
|
21341
21364
|
sealed.slice(12)
|
|
21342
21365
|
);
|
|
21343
|
-
value = JSON.parse(new
|
|
21366
|
+
value = JSON.parse(new TextDecoder2("utf-8", { fatal: true }).decode(new Uint8Array(plaintext)));
|
|
21344
21367
|
} catch (error51) {
|
|
21345
|
-
if (error51
|
|
21368
|
+
if (isTBError(error51)) throw error51;
|
|
21346
21369
|
throw new TBError("invalid_argument", "\u641C\u7D22 cursor \u683C\u5F0F\u975E\u6CD5");
|
|
21347
21370
|
}
|
|
21348
21371
|
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
@@ -21408,36 +21431,45 @@ var TOOL_SEARCH_INSERT_SQL = `
|
|
|
21408
21431
|
INSERT INTO tb_search_tools_v5 (path, name, description, effect, feedback)
|
|
21409
21432
|
VALUES (?, ?, ?, ?, ?)
|
|
21410
21433
|
`;
|
|
21411
|
-
|
|
21412
|
-
|
|
21413
|
-
|
|
21414
|
-
|
|
21434
|
+
function toolSearchFixedStatements(syntax) {
|
|
21435
|
+
const p = (index) => syntax.placeholder(index);
|
|
21436
|
+
const int2 = syntax.castInt ?? ((expr) => expr);
|
|
21437
|
+
return {
|
|
21438
|
+
bumpRevision: "UPDATE tb_search_meta_v5 SET revision = revision + 1 WHERE singleton = 1",
|
|
21439
|
+
completeRebuild: "UPDATE tb_search_meta_v5 SET seeded = 1, revision = revision + 1 WHERE singleton = 1",
|
|
21440
|
+
deleteAllSnapshots: "DELETE FROM tb_search_snapshots_v5",
|
|
21441
|
+
deleteAllTools: "DELETE FROM tb_search_tools_v5",
|
|
21442
|
+
deleteSnapshot: `DELETE FROM tb_search_snapshots_v5 WHERE path = ${p(1)}`,
|
|
21443
|
+
deleteSnapshotPrefix: `
|
|
21444
|
+
DELETE FROM tb_search_snapshots_v5
|
|
21445
|
+
WHERE path = ${p(1)} OR substr(path, 1, length(${p(2)}) + 1) = ${p(3)} || '/'
|
|
21446
|
+
`,
|
|
21447
|
+
deleteTools: `DELETE FROM tb_search_tools_v5 WHERE path = ${p(1)}`,
|
|
21448
|
+
deleteToolsPrefix: `
|
|
21449
|
+
DELETE FROM tb_search_tools_v5
|
|
21450
|
+
WHERE path = ${p(1)} OR substr(path, 1, length(${p(2)}) + 1) = ${p(3)} || '/'
|
|
21451
|
+
`,
|
|
21452
|
+
insertSnapshot: `INSERT INTO tb_search_snapshots_v5(path, digest) VALUES (${p(1)}, ${p(2)})`,
|
|
21453
|
+
meta: `SELECT ${int2("revision")} AS revision, ${int2("seeded")} AS seeded, cursor_secret FROM tb_search_meta_v5 WHERE singleton = 1`,
|
|
21454
|
+
// replace 的前置探测:一次拿到本 path 的 digest、是否残留 source 行、已用节点数。
|
|
21455
|
+
pathState: `
|
|
21415
21456
|
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
|
|
21457
|
+
${int2(`EXISTS(SELECT 1 FROM tb_search_tools_v5 WHERE path = ${p(1)})`)} AS has_tools,
|
|
21458
|
+
${int2("(SELECT COUNT(*) FROM tb_search_snapshots_v5)")} AS path_count
|
|
21418
21459
|
FROM (SELECT 1) AS singleton
|
|
21419
|
-
LEFT JOIN tb_search_snapshots_v5 AS snapshots ON snapshots.path =
|
|
21420
|
-
|
|
21421
|
-
|
|
21422
|
-
|
|
21460
|
+
LEFT JOIN tb_search_snapshots_v5 AS snapshots ON snapshots.path = ${p(2)}
|
|
21461
|
+
`,
|
|
21462
|
+
present: `SELECT 1 AS present FROM tb_search_tools_v5 WHERE path = ${p(1)} LIMIT 1`,
|
|
21463
|
+
presentPrefix: `
|
|
21423
21464
|
SELECT 1 AS present FROM tb_search_tools_v5
|
|
21424
|
-
WHERE path =
|
|
21465
|
+
WHERE path = ${p(1)} OR substr(path, 1, length(${p(2)}) + 1) = ${p(3)} || '/'
|
|
21425
21466
|
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";
|
|
21467
|
+
`,
|
|
21468
|
+
snapshotDigests: "SELECT path, digest FROM tb_search_snapshots_v5 ORDER BY path"
|
|
21469
|
+
};
|
|
21470
|
+
}
|
|
21471
|
+
var SQLITE_FIXED_STATEMENTS = toolSearchFixedStatements({ placeholder: () => "?" });
|
|
21472
|
+
var TOOL_SEARCH_INSERT_SNAPSHOT_SQL = SQLITE_FIXED_STATEMENTS.insertSnapshot;
|
|
21441
21473
|
function toolSearchEffectSql(effect) {
|
|
21442
21474
|
switch (effect) {
|
|
21443
21475
|
case "read":
|
|
@@ -21544,31 +21576,16 @@ var sqliteSearchDialect = {
|
|
|
21544
21576
|
);
|
|
21545
21577
|
},
|
|
21546
21578
|
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
|
-
}
|
|
21579
|
+
statements: SQLITE_FIXED_STATEMENTS
|
|
21563
21580
|
};
|
|
21564
21581
|
var SqlSearchIndex = class {
|
|
21582
|
+
capabilities = ["search"];
|
|
21583
|
+
dialect;
|
|
21584
|
+
driver;
|
|
21565
21585
|
constructor(driver, dialect = sqliteSearchDialect) {
|
|
21566
21586
|
this.driver = driver;
|
|
21567
21587
|
this.dialect = dialect;
|
|
21568
21588
|
}
|
|
21569
|
-
driver;
|
|
21570
|
-
capabilities = ["search"];
|
|
21571
|
-
dialect;
|
|
21572
21589
|
/** 容量 trigger 的 ABORT 在各驱动里错误形状不同,统一按标记串归一。 */
|
|
21573
21590
|
async writeOrCapacity(statements) {
|
|
21574
21591
|
try {
|
|
@@ -21788,7 +21805,11 @@ var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
21788
21805
|
FOR EACH ROW EXECUTE FUNCTION tb_search_snapshots_v5_capacity()`
|
|
21789
21806
|
];
|
|
21790
21807
|
var PG_SEARCH_WRITE_LOCK_KEY = 2069799624;
|
|
21791
|
-
var
|
|
21808
|
+
var PG_FIXED_STATEMENTS = toolSearchFixedStatements({
|
|
21809
|
+
castInt: (expr) => `${expr}::int`,
|
|
21810
|
+
placeholder: (index) => `$${index}`
|
|
21811
|
+
});
|
|
21812
|
+
var PG_SEARCH_INSERT_SNAPSHOT_SQL = PG_FIXED_STATEMENTS.insertSnapshot;
|
|
21792
21813
|
function pgBulkInsertSql(table, columns, rows) {
|
|
21793
21814
|
const tuples = [];
|
|
21794
21815
|
for (let r = 0; r < rows; r++) {
|
|
@@ -21808,38 +21829,6 @@ var PG_SEARCH_TOOLS_COLUMNS = [
|
|
|
21808
21829
|
var PG_SEARCH_SNAPSHOTS_TABLE = "tb_search_snapshots_v5";
|
|
21809
21830
|
var PG_SEARCH_SNAPSHOTS_COLUMNS = ["path", "digest"];
|
|
21810
21831
|
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
21832
|
var pgSearchDialect = {
|
|
21844
21833
|
candidateStatement: (query, limit, offset, rawConstraints) => {
|
|
21845
21834
|
const constraints = normalizeToolSearchOptions(rawConstraints);
|
|
@@ -21857,22 +21846,7 @@ var pgSearchDialect = {
|
|
|
21857
21846
|
);
|
|
21858
21847
|
},
|
|
21859
21848
|
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
|
-
}
|
|
21849
|
+
statements: PG_FIXED_STATEMENTS
|
|
21876
21850
|
};
|
|
21877
21851
|
|
|
21878
21852
|
// ../core/src/secret/secretStore.ts
|
|
@@ -22004,7 +21978,7 @@ var SecretStoreImpl = class _SecretStoreImpl {
|
|
|
22004
21978
|
await this.key(),
|
|
22005
21979
|
ciphertext
|
|
22006
21980
|
);
|
|
22007
|
-
return new
|
|
21981
|
+
return new TextDecoder2().decode(plaintext);
|
|
22008
21982
|
}
|
|
22009
21983
|
};
|
|
22010
21984
|
|
|
@@ -22509,7 +22483,7 @@ function rewriteRemotePath(nodePath, requestPath, baseUrl) {
|
|
|
22509
22483
|
return rel === "" ? base : `${base}/${rel}`;
|
|
22510
22484
|
}
|
|
22511
22485
|
function hostOf(url2) {
|
|
22512
|
-
const m = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/([
|
|
22486
|
+
const m = /^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/([^/?#\\]*)/.exec(url2);
|
|
22513
22487
|
if (m === null) return void 0;
|
|
22514
22488
|
let authority = m[1] ?? "";
|
|
22515
22489
|
const at = authority.lastIndexOf("@");
|
|
@@ -22608,10 +22582,10 @@ function byPath(a, b) {
|
|
|
22608
22582
|
return a.path < b.path ? -1 : a.path > b.path ? 1 : 0;
|
|
22609
22583
|
}
|
|
22610
22584
|
var NodeRegistryStore = class {
|
|
22585
|
+
store;
|
|
22611
22586
|
constructor(store) {
|
|
22612
22587
|
this.store = store;
|
|
22613
22588
|
}
|
|
22614
|
-
store;
|
|
22615
22589
|
keyOf(path) {
|
|
22616
22590
|
return KEY_NODE + path;
|
|
22617
22591
|
}
|
|
@@ -23265,6 +23239,7 @@ export {
|
|
|
23265
23239
|
TBError,
|
|
23266
23240
|
isTBError,
|
|
23267
23241
|
normalizePath,
|
|
23242
|
+
assertNoCollision,
|
|
23268
23243
|
validatePath,
|
|
23269
23244
|
KEY_SK_HASH,
|
|
23270
23245
|
KEY_SK_ID,
|
|
@@ -23278,9 +23253,10 @@ export {
|
|
|
23278
23253
|
checkRegisterPath,
|
|
23279
23254
|
assertSecretRefUse,
|
|
23280
23255
|
NEVER,
|
|
23256
|
+
safeParse,
|
|
23281
23257
|
toJSONSchema,
|
|
23282
23258
|
iso_exports,
|
|
23283
|
-
safeParse2
|
|
23259
|
+
safeParse2,
|
|
23284
23260
|
string2 as string,
|
|
23285
23261
|
email2 as email,
|
|
23286
23262
|
url,
|
|
@@ -23300,6 +23276,7 @@ export {
|
|
|
23300
23276
|
literal,
|
|
23301
23277
|
optional,
|
|
23302
23278
|
lazy,
|
|
23279
|
+
custom,
|
|
23303
23280
|
preprocess,
|
|
23304
23281
|
ZodIssueCode,
|
|
23305
23282
|
coerce_exports,
|