@tool-bridge/server 0.13.1 → 0.15.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-UNWCQOO5.js → airtable-QYTOPRFV.js} +4 -4
- package/dist/{alt_text_generator_ai-7U2B7DWL.js → alt_text_generator_ai-2CFYNSZV.js} +4 -4
- package/dist/{amap-SAB3CM4I.js → amap-HGOBOHSZ.js} +4 -4
- package/dist/{anthropic-IHWDMPTS.js → anthropic-3OXOQNSR.js} +4 -4
- package/dist/{apify-PJOKBSVM.js → apify-PUV2QGKL.js} +4 -4
- package/dist/{brave_search-UTFAT6LW.js → brave_search-DG75AVKA.js} +4 -4
- package/dist/{chunk-EF33TVRV.js → chunk-DXXYNIXV.js} +236 -190
- package/dist/{chunk-7KSQ6GMZ.js → chunk-KH663T3A.js} +1 -1
- package/dist/{chunk-O7XJFJIP.js → chunk-NLPTB3IL.js} +76 -8
- package/dist/{chunk-QMBAFKBX.js → chunk-NQ67PIIS.js} +2 -2
- package/dist/{chunk-YZMU3Y2S.js → chunk-UI4E4T5Q.js} +1 -1
- package/dist/{circleci-CYNZ4RNR.js → circleci-EFNLX5AW.js} +4 -4
- package/dist/{clerk-LEO34VS5.js → clerk-UWDLMZVM.js} +4 -4
- package/dist/{cloudflare_dns-GR2QRDOR.js → cloudflare_dns-WQXVDSPU.js} +4 -4
- package/dist/{cohere-GGMHBGBX.js → cohere-VPDIKUDP.js} +4 -4
- package/dist/{confluence-BV3HXUK5.js → confluence-NBOOQNTR.js} +4 -4
- package/dist/{convertapi-GS2YMFYF.js → convertapi-6Z6OP25T.js} +4 -4
- package/dist/{currencyapi-PVT6NG64.js → currencyapi-CAMUWCTV.js} +4 -4
- package/dist/{deepseek-N3A33XJS.js → deepseek-GRALXYXR.js} +4 -4
- package/dist/{docker_hub-T52LCIXM.js → docker_hub-5AASF3TJ.js} +4 -4
- package/dist/{dropbox-7D5KGZWB.js → dropbox-HS3VGRD3.js} +4 -4
- package/dist/{dub-4MYONVIJ.js → dub-KHERUTW6.js} +4 -4
- package/dist/{e2b-D4RJYFWX.js → e2b-4MGHPFXY.js} +4 -4
- package/dist/{exa-QY3FJWKM.js → exa-O77PKTBT.js} +4 -4
- package/dist/{fal_ai-KZWNB4EL.js → fal_ai-TX2TZFMP.js} +4 -4
- package/dist/{feishu-5A2BTU5Z.js → feishu-I7VPWO3C.js} +3 -3
- package/dist/{feishu_custom_bot-JSPSGC7F.js → feishu_custom_bot-D4XZDLES.js} +4 -4
- package/dist/{figma-SLJPNPIA.js → figma-SW3HZCZ5.js} +4 -4
- package/dist/{firehydrant-RWAQFAPG.js → firehydrant-ND5DEW3L.js} +4 -4
- package/dist/{fixer-KN7PNA2S.js → fixer-ZTSV7ZK3.js} +4 -4
- package/dist/{fly-EUUMRUOA.js → fly-RZ7SZKFT.js} +4 -4
- package/dist/{front-NDQEA5FF.js → front-Q5MZVUGX.js} +4 -4
- package/dist/{geocodio-43AW5OCB.js → geocodio-QPHHODHG.js} +4 -4
- package/dist/{ghost-MZCUCRIB.js → ghost-3Q6O7EWZ.js} +4 -4
- package/dist/{github-2DAQEJIN.js → github-LDMGJHXV.js} +4 -4
- package/dist/{gmail-XHLM4BQE.js → gmail-6QBCI3TT.js} +4 -4
- package/dist/{googlecalendar-C6TQ5TPM.js → googlecalendar-LLSYY4ZJ.js} +4 -4
- package/dist/{googledocs-PHWMCVQJ.js → googledocs-KRGVBGWY.js} +4 -4
- package/dist/{grafana-34MZYU2V.js → grafana-OHPZMRHT.js} +4 -4
- package/dist/{graphhopper-X6APDY3M.js → graphhopper-2PBY7OX4.js} +4 -4
- package/dist/index.d.ts +25 -9
- package/dist/index.js +2 -2
- package/dist/{ip2proxy-AODVERWD.js → ip2proxy-GPBQZKKG.js} +4 -4
- package/dist/{ipgeolocation_io-2WZ3462V.js → ipgeolocation_io-YNTOLOFH.js} +4 -4
- package/dist/{ipqualityscore-AWRQEQKM.js → ipqualityscore-CZLQUAQ7.js} +4 -4
- package/dist/{jina_ai-BTBWMSHI.js → jina_ai-JIFEYH5C.js} +4 -4
- package/dist/{jira-ME62KT7T.js → jira-2DKTIWHK.js} +4 -4
- package/dist/{langsmith-X4V62JDO.js → langsmith-UCX7NHKP.js} +4 -4
- package/dist/{lemlist-X2F4X4XI.js → lemlist-IS6K2VJG.js} +4 -4
- package/dist/{linear-NXXHNHYR.js → linear-AK6547ZS.js} +4 -4
- package/dist/{logsnag-CMNFM5DD.js → logsnag-EB5LICOH.js} +4 -4
- package/dist/main.js +101 -101
- package/dist/{mattermost-UUPXATVV.js → mattermost-YOSWUA3R.js} +4 -4
- package/dist/{mem0-J4ZT6KFD.js → mem0-IICTSHLB.js} +4 -4
- package/dist/{memos-O7OLF43F.js → memos-DIV6MZPB.js} +4 -4
- package/dist/{metabase-LW5CT4SE.js → metabase-ZGHNTCAT.js} +4 -4
- package/dist/{mistral_ai-UBPH5I2O.js → mistral_ai-IAG3WZYO.js} +4 -4
- package/dist/{mother_duck-FSXTF7W3.js → mother_duck-PYKG4ZHO.js} +4 -4
- package/dist/{ngrok-7ZEFTQFO.js → ngrok-BXN3DGTK.js} +4 -4
- package/dist/{notes-E2SOGAC5.js → notes-L2UO36HQ.js} +2 -2
- package/dist/{notion-6L2B5SOP.js → notion-PVHVOV4R.js} +4 -4
- package/dist/{open_exchange_rates-5MEDCXDA.js → open_exchange_rates-DVMOPFNQ.js} +4 -4
- package/dist/{openai-DGZ4UVGN.js → openai-VW6F5YTK.js} +4 -4
- package/dist/{opengraph_io-3WZHS2G7.js → opengraph_io-MQUREYWM.js} +4 -4
- package/dist/{openrouter-AEVJKGL2.js → openrouter-5MI3ODCU.js} +4 -4
- package/dist/{outline-NIDSWKQL.js → outline-B2U7NIVA.js} +4 -4
- package/dist/{paddle-KXUMVYWP.js → paddle-LDZTVYQO.js} +4 -4
- package/dist/{perplexity-SGCXVRPL.js → perplexity-P7BNWFMH.js} +4 -4
- package/dist/{pinecone-TEPE2YN6.js → pinecone-3Y67EJYP.js} +4 -4
- package/dist/{pipedrive-HSLALJJF.js → pipedrive-4KFLGCJW.js} +4 -4
- package/dist/{polar-W3MS7L3S.js → polar-NIULQPUD.js} +4 -4
- package/dist/{posthog-Q26LDFUB.js → posthog-UXGCIHRP.js} +4 -4
- package/dist/{postmark-Y4CGMQ6N.js → postmark-XT77YNQM.js} +4 -4
- package/dist/{prerender-ZXDEGJFM.js → prerender-37E6ZN6Z.js} +4 -4
- package/dist/{pubmed-M5D6VUDC.js → pubmed-BO2W4IR6.js} +4 -4
- package/dist/{railway-IMKRAE5U.js → railway-5BACZNYC.js} +4 -4
- package/dist/{readwise-KVO2HGRR.js → readwise-DXABSDKY.js} +4 -4
- package/dist/{render-PCF3BY2W.js → render-4MCO6RLA.js} +4 -4
- package/dist/{replicate-SPYM2A2X.js → replicate-IVEPY4EP.js} +4 -4
- package/dist/{resend-J2VSMZEQ.js → resend-XJBJO46B.js} +4 -4
- package/dist/{rootly-XLVVLQ5E.js → rootly-R6QDVF3D.js} +4 -4
- package/dist/{scrapfly-4MCQ2L3S.js → scrapfly-E24XNN32.js} +4 -4
- package/dist/{scrapingbee-I5B45KRL.js → scrapingbee-QT3O334C.js} +4 -4
- package/dist/{screenshot_fyi-ZRVS7KGW.js → screenshot_fyi-MJNFPUFV.js} +4 -4
- package/dist/{semantic_scholar-EOOCAOGH.js → semantic_scholar-BVKWS72R.js} +4 -4
- package/dist/{sentry-NQFN5QWM.js → sentry-52T5XARK.js} +4 -4
- package/dist/{shodan-NA4YQ5EF.js → shodan-RTOTTCX2.js} +4 -4
- package/dist/{shopify-SSQWQLVZ.js → shopify-3RVWQDZ6.js} +4 -4
- package/dist/{stripe-4O4LFWWX.js → stripe-M3T2K3EW.js} +4 -4
- package/dist/{supabase-L6HIG3AO.js → supabase-UUUXAEYR.js} +4 -4
- package/dist/{tavily-YIZ257JR.js → tavily-LVOZQQKJ.js} +4 -4
- package/dist/{telegram-GCHRPOUO.js → telegram-WJQPCKQT.js} +4 -4
- package/dist/{telnyx-SAPDG42W.js → telnyx-THKSKAI2.js} +4 -4
- package/dist/{todoist-PLWNX5EV.js → todoist-YTRGFFRC.js} +4 -4
- package/dist/{trello-P373RD2Z.js → trello-QBK6WKN2.js} +4 -4
- package/dist/{turso-UOK734KL.js → turso-EA44ZKLR.js} +4 -4
- package/dist/{twilio-QTZ5B5JF.js → twilio-GSW3V55S.js} +4 -4
- package/dist/{umami-JR24H6UL.js → umami-DVZ7XUYC.js} +4 -4
- package/dist/{unsplash-2REBXIN5.js → unsplash-ZWUWQ7OS.js} +4 -4
- package/dist/{upstash_redis-JW5CLN3M.js → upstash_redis-BQIQB5NM.js} +4 -4
- package/dist/{uptimerobot-T7ZY334I.js → uptimerobot-2OJHTUPV.js} +4 -4
- package/dist/{v2ex-OZXEQ7YR.js → v2ex-IZF4BB4O.js} +4 -4
- package/dist/{vercel-IRS2BQMP.js → vercel-PI3BJENX.js} +4 -4
- package/dist/{wolfram_alpha_api-FXO3FCL6.js → wolfram_alpha_api-EYQ2QCHH.js} +4 -4
- package/dist/{wordpress-HDJP5IKC.js → wordpress-ETDA6XLX.js} +4 -4
- package/dist/{workos-HDXADI3J.js → workos-D7INO4Y4.js} +4 -4
- package/dist/{zhihu-6MRZYPMO.js → zhihu-Q7FNHEDM.js} +4 -4
- package/package.json +5 -5
|
@@ -16822,13 +16822,15 @@ function createBuiltins(deps) {
|
|
|
16822
16822
|
|
|
16823
16823
|
// ../core/src/context/help.ts
|
|
16824
16824
|
var CONTEXT_CAPABILITIES = ["search", "delete"];
|
|
16825
|
+
var CONTEXT_DIRECT_UPLOAD_CAPABILITY = "direct-upload";
|
|
16825
16826
|
var SCOPE_BY_CMD = {
|
|
16826
16827
|
list: "read",
|
|
16827
16828
|
get: "read",
|
|
16828
16829
|
search: "read",
|
|
16829
16830
|
write: "write",
|
|
16830
16831
|
update: "write",
|
|
16831
|
-
delete: "write"
|
|
16832
|
+
delete: "write",
|
|
16833
|
+
create_upload: "write"
|
|
16832
16834
|
};
|
|
16833
16835
|
function contextScopeForCmd(command) {
|
|
16834
16836
|
return SCOPE_BY_CMD[command] ?? null;
|
|
@@ -16976,6 +16978,29 @@ function contextCmds(nodePath) {
|
|
|
16976
16978
|
];
|
|
16977
16979
|
return withCommandPaths(nodePath, cmds);
|
|
16978
16980
|
}
|
|
16981
|
+
function contextUploadCmd(nodePath) {
|
|
16982
|
+
return withCommandPaths(nodePath, [{
|
|
16983
|
+
name: "create_upload",
|
|
16984
|
+
method: "POST",
|
|
16985
|
+
path: cmdPath(nodePath),
|
|
16986
|
+
h: "create a short-lived, path-scoped direct-upload grant; persist the returned uri, not url",
|
|
16987
|
+
inputSchema: {
|
|
16988
|
+
type: "object",
|
|
16989
|
+
required: ["path", "contentType"],
|
|
16990
|
+
properties: {
|
|
16991
|
+
path: { type: "string", description: "target entry path inside the namespace" },
|
|
16992
|
+
contentType: { type: "string", description: "media type signed into the PUT request" },
|
|
16993
|
+
overwrite: {
|
|
16994
|
+
type: "boolean",
|
|
16995
|
+
description: "allow replacing an existing object; default false"
|
|
16996
|
+
}
|
|
16997
|
+
}
|
|
16998
|
+
},
|
|
16999
|
+
returns: "ContextUploadGrant",
|
|
17000
|
+
scope: "write",
|
|
17001
|
+
effect: "write"
|
|
17002
|
+
}])[0];
|
|
17003
|
+
}
|
|
16979
17004
|
function contextHelpModel(node, opts = {}) {
|
|
16980
17005
|
const all = contextCmds(node.path);
|
|
16981
17006
|
const present = opts.methods === void 0 ? all : all.filter((c) => opts.methods?.has(c.name));
|
|
@@ -17075,8 +17100,59 @@ function normalizeEntryPath(path) {
|
|
|
17075
17100
|
// ../core/src/context/objectProvider.ts
|
|
17076
17101
|
var REF_THRESHOLD_BYTES_DEFAULT = 1024 * 1024;
|
|
17077
17102
|
var PRESIGN_TTL_SEC_DEFAULT = 900;
|
|
17103
|
+
var PRESIGN_TTL_SEC_MAX = 604800;
|
|
17104
|
+
function assertPresignTtlSec(ttlSec) {
|
|
17105
|
+
if (!Number.isInteger(ttlSec) || ttlSec < 1 || ttlSec > PRESIGN_TTL_SEC_MAX) {
|
|
17106
|
+
throw new TBError(
|
|
17107
|
+
"invalid_argument",
|
|
17108
|
+
`presign TTL \u5FC5\u987B\u662F 1..${PRESIGN_TTL_SEC_MAX} \u7684\u6574\u6570\u79D2`
|
|
17109
|
+
);
|
|
17110
|
+
}
|
|
17111
|
+
return ttlSec;
|
|
17112
|
+
}
|
|
17078
17113
|
var SEARCH_METADATA_HEAD_MAX = 200;
|
|
17079
17114
|
var DIRECTORY_CONTENT_TYPE = "application/x-directory";
|
|
17115
|
+
async function createObjectContextUploadGrant(store, opts, input) {
|
|
17116
|
+
if (opts.readOnly === true) {
|
|
17117
|
+
throw new TBError("permission_denied", "readOnly \u6302\u8F7D\u62D2\u7EDD create_upload");
|
|
17118
|
+
}
|
|
17119
|
+
if (store.presignPut === void 0) {
|
|
17120
|
+
throw new TBError("unavailable", "\u5BF9\u8C61\u5B58\u50A8\u672A\u914D\u7F6E\u76F4\u4F20\u7B7E\u540D\u80FD\u529B", { retryable: false });
|
|
17121
|
+
}
|
|
17122
|
+
if (typeof input?.path !== "string") {
|
|
17123
|
+
throw new TBError("invalid_argument", "create_upload \u9700\u8981\u5B57\u7B26\u4E32 'path'");
|
|
17124
|
+
}
|
|
17125
|
+
if (input.overwrite !== void 0 && typeof input.overwrite !== "boolean") {
|
|
17126
|
+
throw new TBError("invalid_argument", "create_upload \u7684 'overwrite' \u5FC5\u987B\u662F boolean");
|
|
17127
|
+
}
|
|
17128
|
+
const unknownKeys = Object.keys(input).filter(
|
|
17129
|
+
(key2) => key2 !== "path" && key2 !== "contentType" && key2 !== "overwrite"
|
|
17130
|
+
);
|
|
17131
|
+
if (unknownKeys.length > 0) {
|
|
17132
|
+
throw new TBError("invalid_argument", `create_upload \u542B\u672A\u77E5\u5B57\u6BB5:${unknownKeys.join(",")}`);
|
|
17133
|
+
}
|
|
17134
|
+
if (typeof input?.contentType !== "string" || input.contentType.trim() === "" || input.contentType.length > 255 || !input.contentType.includes("/") || /[\r\n\0]/.test(input.contentType)) {
|
|
17135
|
+
throw new TBError("invalid_argument", "create_upload \u9700\u8981\u5408\u6CD5\u7684 'contentType'");
|
|
17136
|
+
}
|
|
17137
|
+
const nsPath = normalizePath(opts.nsPath);
|
|
17138
|
+
const entryPath = normalizeEntryPath(input.path);
|
|
17139
|
+
const keyPrefixBare = opts.keyPrefix?.replace(/^\/+|\/+$/g, "") ?? "";
|
|
17140
|
+
const key = `${keyPrefixBare === "" ? "" : `${keyPrefixBare}/`}${entryPath}`;
|
|
17141
|
+
const ttlSec = assertPresignTtlSec(opts.uploadGrantTtlSec ?? PRESIGN_TTL_SEC_DEFAULT);
|
|
17142
|
+
const contentType = input.contentType.trim();
|
|
17143
|
+
const expiresAt = new Date(Date.now() + ttlSec * 1e3).toISOString();
|
|
17144
|
+
const signed = await store.presignPut(key, ttlSec, {
|
|
17145
|
+
contentType,
|
|
17146
|
+
...input.overwrite === true ? {} : { ifNoneMatch: "*" }
|
|
17147
|
+
});
|
|
17148
|
+
return {
|
|
17149
|
+
uri: `node://${nsPath}/${entryPath}`,
|
|
17150
|
+
method: "PUT",
|
|
17151
|
+
url: signed.url,
|
|
17152
|
+
headers: signed.headers,
|
|
17153
|
+
expiresAt
|
|
17154
|
+
};
|
|
17155
|
+
}
|
|
17080
17156
|
function clampLimit3(limit) {
|
|
17081
17157
|
if (limit === void 0) return LIST_LIMIT_DEFAULT;
|
|
17082
17158
|
if (!Number.isInteger(limit) || limit < 1) {
|
|
@@ -18476,6 +18552,8 @@ var TOOL_SEARCH_SNAPSHOT_CHUNKS_MAX = Math.ceil(
|
|
|
18476
18552
|
);
|
|
18477
18553
|
var TOOL_SEARCH_REBUILD_CHUNKS_MAX = TOOL_SEARCH_SOURCE_CHUNKS_MAX + TOOL_SEARCH_SNAPSHOT_CHUNKS_MAX;
|
|
18478
18554
|
var TOOL_SEARCH_TERM_LIMIT = 32;
|
|
18555
|
+
var TOOL_SEARCH_UNIT_LIMIT = 98;
|
|
18556
|
+
var TOOL_SEARCH_LIKE_PATTERN_BYTES_MAX = 50;
|
|
18479
18557
|
var TOOL_SEARCH_QUERY_MAX = 1024;
|
|
18480
18558
|
var TOOL_SEARCH_CURSOR_OFFSET_MAX = 1e6;
|
|
18481
18559
|
function assertKeywordToolSearchMode(opts) {
|
|
@@ -18643,25 +18721,70 @@ function likePattern(term) {
|
|
|
18643
18721
|
const escaped = term.replaceAll("!", "!!").replaceAll("%", "!%").replaceAll("_", "!_");
|
|
18644
18722
|
return `%${escaped}%`;
|
|
18645
18723
|
}
|
|
18646
|
-
function
|
|
18647
|
-
|
|
18648
|
-
|
|
18649
|
-
|
|
18724
|
+
function likePatternBytes(term) {
|
|
18725
|
+
return new TextEncoder().encode(likePattern(term)).length;
|
|
18726
|
+
}
|
|
18727
|
+
function isCjkCodePoint(value) {
|
|
18728
|
+
return new RegExp("^(?:\\p{Script=Han}|\\p{Script=Hiragana}|\\p{Script=Katakana}|\\p{Script=Hangul})$", "u").test(value);
|
|
18729
|
+
}
|
|
18730
|
+
function scriptRuns(term) {
|
|
18731
|
+
const runs = [];
|
|
18732
|
+
for (const codePoint of term) {
|
|
18733
|
+
const cjk = isCjkCodePoint(codePoint);
|
|
18734
|
+
const current = runs.at(-1);
|
|
18735
|
+
if (current?.cjk === cjk) current.codePoints.push(codePoint);
|
|
18736
|
+
else runs.push({ cjk, codePoints: [codePoint] });
|
|
18737
|
+
}
|
|
18738
|
+
return runs;
|
|
18739
|
+
}
|
|
18740
|
+
function addSearchUnit(units, value, tier) {
|
|
18741
|
+
const pattern = likePattern(value);
|
|
18742
|
+
if (new TextEncoder().encode(pattern).length > TOOL_SEARCH_LIKE_PATTERN_BYTES_MAX) return false;
|
|
18743
|
+
const existing = units.get(pattern);
|
|
18744
|
+
if (existing === void 0 || tier > existing.tier) {
|
|
18745
|
+
units.set(pattern, { pattern, tier });
|
|
18650
18746
|
}
|
|
18651
|
-
return
|
|
18747
|
+
return true;
|
|
18652
18748
|
}
|
|
18653
|
-
function
|
|
18654
|
-
|
|
18655
|
-
const
|
|
18749
|
+
function addChunkedSearchUnits(units, value, tier) {
|
|
18750
|
+
let chunk = "";
|
|
18751
|
+
for (const codePoint of value) {
|
|
18752
|
+
if (likePatternBytes(chunk + codePoint) <= TOOL_SEARCH_LIKE_PATTERN_BYTES_MAX) {
|
|
18753
|
+
chunk += codePoint;
|
|
18754
|
+
continue;
|
|
18755
|
+
}
|
|
18756
|
+
if (chunk.length > 0) addSearchUnit(units, chunk, tier);
|
|
18757
|
+
chunk = codePoint;
|
|
18758
|
+
}
|
|
18759
|
+
if (chunk.length > 0) addSearchUnit(units, chunk, tier);
|
|
18760
|
+
}
|
|
18761
|
+
function prepareToolSearchUnits(query) {
|
|
18762
|
+
const terms = normalizeToolSearchQuery(query).split(/\s+/u);
|
|
18656
18763
|
if (terms.length > TOOL_SEARCH_TERM_LIMIT) {
|
|
18657
18764
|
throw new TBError("invalid_argument", `\u641C\u7D22 query \u6700\u591A ${TOOL_SEARCH_TERM_LIMIT} \u4E2A terms`);
|
|
18658
18765
|
}
|
|
18659
|
-
const
|
|
18660
|
-
const
|
|
18661
|
-
|
|
18662
|
-
|
|
18663
|
-
|
|
18664
|
-
|
|
18766
|
+
const units = /* @__PURE__ */ new Map();
|
|
18767
|
+
for (const term of terms) {
|
|
18768
|
+
const wholeAdded = addSearchUnit(units, term, 4);
|
|
18769
|
+
const runs = scriptRuns(term);
|
|
18770
|
+
if (runs.length > 1) {
|
|
18771
|
+
for (const run of runs) {
|
|
18772
|
+
const value = run.codePoints.join("");
|
|
18773
|
+
if (run.cjk) addSearchUnit(units, value, 2);
|
|
18774
|
+
else addChunkedSearchUnits(units, value, 2);
|
|
18775
|
+
}
|
|
18776
|
+
} else if (!wholeAdded && runs[0]?.cjk === false) {
|
|
18777
|
+
addChunkedSearchUnits(units, term, 2);
|
|
18778
|
+
}
|
|
18779
|
+
for (const run of runs) {
|
|
18780
|
+
if (!run.cjk) continue;
|
|
18781
|
+
for (let index = 0; index < run.codePoints.length - 1; index += 1) {
|
|
18782
|
+
addSearchUnit(units, run.codePoints.slice(index, index + 2).join(""), 2);
|
|
18783
|
+
}
|
|
18784
|
+
for (const codePoint of run.codePoints) addSearchUnit(units, codePoint, 1);
|
|
18785
|
+
}
|
|
18786
|
+
}
|
|
18787
|
+
return [...units.values()].sort((left, right) => right.tier - left.tier).slice(0, TOOL_SEARCH_UNIT_LIMIT);
|
|
18665
18788
|
}
|
|
18666
18789
|
function cursorBase64UrlDecode(value) {
|
|
18667
18790
|
if (value.length === 0 || value.length > 4096) {
|
|
@@ -18734,35 +18857,9 @@ async function decodeToolSearchCursor(cursor, query, mode, revision, secret) {
|
|
|
18734
18857
|
return payload.o ?? 0;
|
|
18735
18858
|
}
|
|
18736
18859
|
|
|
18737
|
-
// ../core/src/search/shortTermSql.ts
|
|
18738
|
-
function shortTermsSql(patterns) {
|
|
18739
|
-
return `short_terms(pattern) AS (VALUES ${patterns.map(() => "(?)").join(", ")})`;
|
|
18740
|
-
}
|
|
18741
|
-
var SHORT_MATCH_SQL = `
|
|
18742
|
-
NOT EXISTS (
|
|
18743
|
-
SELECT 1 FROM short_terms
|
|
18744
|
-
WHERE tools.name NOT LIKE pattern ESCAPE '!'
|
|
18745
|
-
AND tools.description NOT LIKE pattern ESCAPE '!'
|
|
18746
|
-
AND tools.feedback NOT LIKE pattern ESCAPE '!'
|
|
18747
|
-
)
|
|
18748
|
-
`;
|
|
18749
|
-
var SHORT_SCORE_SQL = `
|
|
18750
|
-
(
|
|
18751
|
-
SELECT COALESCE(SUM(
|
|
18752
|
-
CASE
|
|
18753
|
-
WHEN tools.name LIKE pattern ESCAPE '!' THEN 10
|
|
18754
|
-
WHEN tools.description LIKE pattern ESCAPE '!' THEN 3
|
|
18755
|
-
WHEN tools.feedback LIKE pattern ESCAPE '!' THEN 1
|
|
18756
|
-
ELSE 0
|
|
18757
|
-
END
|
|
18758
|
-
), 0)
|
|
18759
|
-
FROM short_terms
|
|
18760
|
-
)
|
|
18761
|
-
`;
|
|
18762
|
-
|
|
18763
18860
|
// ../core/src/search/sqlSearchIndex.ts
|
|
18764
18861
|
var TOOL_SEARCH_SCHEMA_STATEMENTS = [
|
|
18765
|
-
`CREATE TABLE IF NOT EXISTS
|
|
18862
|
+
`CREATE TABLE IF NOT EXISTS tb_search_tools_v4 (
|
|
18766
18863
|
id INTEGER PRIMARY KEY,
|
|
18767
18864
|
path TEXT NOT NULL,
|
|
18768
18865
|
name TEXT NOT NULL,
|
|
@@ -18770,135 +18867,99 @@ var TOOL_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
18770
18867
|
feedback TEXT NOT NULL DEFAULT '',
|
|
18771
18868
|
UNIQUE(path, name)
|
|
18772
18869
|
)`,
|
|
18773
|
-
`CREATE
|
|
18774
|
-
name,
|
|
18775
|
-
description,
|
|
18776
|
-
feedback,
|
|
18777
|
-
content='tb_search_tools_v3',
|
|
18778
|
-
content_rowid='id',
|
|
18779
|
-
tokenize='trigram'
|
|
18780
|
-
)`,
|
|
18781
|
-
`CREATE TRIGGER IF NOT EXISTS tb_search_tools_v3_ai AFTER INSERT ON tb_search_tools_v3 BEGIN
|
|
18782
|
-
INSERT INTO tb_search_tools_fts_v3(rowid, name, description, feedback)
|
|
18783
|
-
VALUES (new.id, new.name, new.description, new.feedback);
|
|
18784
|
-
END`,
|
|
18785
|
-
`CREATE TRIGGER IF NOT EXISTS tb_search_tools_v3_ad AFTER DELETE ON tb_search_tools_v3 BEGIN
|
|
18786
|
-
INSERT INTO tb_search_tools_fts_v3(tb_search_tools_fts_v3, rowid, name, description, feedback)
|
|
18787
|
-
VALUES ('delete', old.id, old.name, old.description, old.feedback);
|
|
18788
|
-
END`,
|
|
18789
|
-
`CREATE TRIGGER IF NOT EXISTS tb_search_tools_v3_au
|
|
18790
|
-
AFTER UPDATE OF name, description, feedback ON tb_search_tools_v3 BEGIN
|
|
18791
|
-
INSERT INTO tb_search_tools_fts_v3(tb_search_tools_fts_v3, rowid, name, description, feedback)
|
|
18792
|
-
VALUES ('delete', old.id, old.name, old.description, old.feedback);
|
|
18793
|
-
INSERT INTO tb_search_tools_fts_v3(rowid, name, description, feedback)
|
|
18794
|
-
VALUES (new.id, new.name, new.description, new.feedback);
|
|
18795
|
-
END`,
|
|
18796
|
-
`CREATE TABLE IF NOT EXISTS tb_search_meta_v3 (
|
|
18870
|
+
`CREATE TABLE IF NOT EXISTS tb_search_meta_v4 (
|
|
18797
18871
|
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
18798
18872
|
revision INTEGER NOT NULL DEFAULT 0,
|
|
18799
18873
|
seeded INTEGER NOT NULL DEFAULT 0,
|
|
18800
18874
|
cursor_secret TEXT NOT NULL
|
|
18801
18875
|
)`,
|
|
18802
|
-
`INSERT OR IGNORE INTO
|
|
18876
|
+
`INSERT OR IGNORE INTO tb_search_meta_v4(
|
|
18803
18877
|
singleton, revision, seeded, cursor_secret
|
|
18804
18878
|
) VALUES (1, 0, 0, lower(hex(randomblob(32))))`,
|
|
18805
|
-
`CREATE TABLE IF NOT EXISTS
|
|
18879
|
+
`CREATE TABLE IF NOT EXISTS tb_search_snapshots_v4 (
|
|
18806
18880
|
path TEXT PRIMARY KEY,
|
|
18807
18881
|
digest TEXT NOT NULL
|
|
18808
18882
|
)`,
|
|
18809
|
-
`CREATE TRIGGER IF NOT EXISTS
|
|
18810
|
-
BEFORE INSERT ON
|
|
18883
|
+
`CREATE TRIGGER IF NOT EXISTS tb_search_snapshots_v4_capacity
|
|
18884
|
+
BEFORE INSERT ON tb_search_snapshots_v4
|
|
18811
18885
|
WHEN NOT EXISTS (
|
|
18812
|
-
SELECT 1 FROM
|
|
18813
|
-
) AND (SELECT COUNT(*) FROM
|
|
18886
|
+
SELECT 1 FROM tb_search_snapshots_v4 WHERE path = new.path
|
|
18887
|
+
) AND (SELECT COUNT(*) FROM tb_search_snapshots_v4) >= ${TOOL_SEARCH_AUDIT_NODE_LIMIT}
|
|
18814
18888
|
BEGIN
|
|
18815
18889
|
SELECT RAISE(ABORT, 'tb_search_path_capacity');
|
|
18816
18890
|
END`
|
|
18817
18891
|
];
|
|
18818
18892
|
var TOOL_SEARCH_CAPACITY_MARKER = "tb_search_path_capacity";
|
|
18819
18893
|
var TOOL_SEARCH_INSERT_SQL = `
|
|
18820
|
-
INSERT INTO
|
|
18894
|
+
INSERT INTO tb_search_tools_v4 (path, name, description, feedback)
|
|
18821
18895
|
VALUES (?, ?, ?, ?)
|
|
18822
18896
|
`;
|
|
18823
|
-
var TOOL_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO
|
|
18824
|
-
var META_SQL = "SELECT revision, seeded, cursor_secret FROM
|
|
18825
|
-
var SNAPSHOT_DIGESTS_SQL = "SELECT path, digest FROM
|
|
18897
|
+
var TOOL_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO tb_search_snapshots_v4(path, digest) VALUES (?, ?)";
|
|
18898
|
+
var META_SQL = "SELECT revision, seeded, cursor_secret FROM tb_search_meta_v4 WHERE singleton = 1";
|
|
18899
|
+
var SNAPSHOT_DIGESTS_SQL = "SELECT path, digest FROM tb_search_snapshots_v4 ORDER BY path";
|
|
18826
18900
|
var PATH_STATE_SQL = `
|
|
18827
18901
|
SELECT snapshots.digest,
|
|
18828
|
-
EXISTS(SELECT 1 FROM
|
|
18829
|
-
(SELECT COUNT(*) FROM
|
|
18902
|
+
EXISTS(SELECT 1 FROM tb_search_tools_v4 WHERE path = ?) AS has_tools,
|
|
18903
|
+
(SELECT COUNT(*) FROM tb_search_snapshots_v4) AS path_count
|
|
18830
18904
|
FROM (SELECT 1) AS singleton
|
|
18831
|
-
LEFT JOIN
|
|
18905
|
+
LEFT JOIN tb_search_snapshots_v4 AS snapshots ON snapshots.path = ?
|
|
18832
18906
|
`;
|
|
18833
|
-
var PRESENT_SQL = "SELECT 1 AS present FROM
|
|
18907
|
+
var PRESENT_SQL = "SELECT 1 AS present FROM tb_search_tools_v4 WHERE path = ? LIMIT 1";
|
|
18834
18908
|
var PRESENT_PREFIX_SQL = `
|
|
18835
|
-
SELECT 1 AS present FROM
|
|
18909
|
+
SELECT 1 AS present FROM tb_search_tools_v4
|
|
18836
18910
|
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
18837
18911
|
LIMIT 1
|
|
18838
18912
|
`;
|
|
18839
|
-
var DELETE_TOOLS_SQL = "DELETE FROM
|
|
18840
|
-
var DELETE_SNAPSHOT_SQL = "DELETE FROM
|
|
18913
|
+
var DELETE_TOOLS_SQL = "DELETE FROM tb_search_tools_v4 WHERE path = ?";
|
|
18914
|
+
var DELETE_SNAPSHOT_SQL = "DELETE FROM tb_search_snapshots_v4 WHERE path = ?";
|
|
18841
18915
|
var DELETE_TOOLS_PREFIX_SQL = `
|
|
18842
|
-
DELETE FROM
|
|
18916
|
+
DELETE FROM tb_search_tools_v4
|
|
18843
18917
|
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
18844
18918
|
`;
|
|
18845
18919
|
var DELETE_SNAPSHOT_PREFIX_SQL = `
|
|
18846
|
-
DELETE FROM
|
|
18920
|
+
DELETE FROM tb_search_snapshots_v4
|
|
18847
18921
|
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
18848
18922
|
`;
|
|
18849
|
-
var DELETE_ALL_TOOLS_SQL = "DELETE FROM
|
|
18850
|
-
var DELETE_ALL_SNAPSHOTS_SQL = "DELETE FROM
|
|
18851
|
-
var BUMP_REVISION_SQL = "UPDATE
|
|
18852
|
-
var COMPLETE_REBUILD_SQL = "UPDATE
|
|
18853
|
-
function toolSearchCandidateStatement(
|
|
18854
|
-
|
|
18855
|
-
|
|
18856
|
-
|
|
18857
|
-
|
|
18858
|
-
WITH ${shortTermsSql(prepared.patterns)}
|
|
18859
|
-
SELECT tools.id, tools.path, tools.name, ${SHORT_SCORE_SQL} AS short_score
|
|
18860
|
-
FROM tb_search_tools_v3 AS tools
|
|
18861
|
-
WHERE ${SHORT_MATCH_SQL}
|
|
18862
|
-
ORDER BY short_score DESC, tools.path, tools.name
|
|
18863
|
-
LIMIT ? OFFSET ?
|
|
18864
|
-
`
|
|
18865
|
-
};
|
|
18866
|
-
}
|
|
18867
|
-
if (prepared.kind === "hybrid") {
|
|
18868
|
-
return {
|
|
18869
|
-
params: [...prepared.patterns, prepared.expression, limit + 1, offset],
|
|
18870
|
-
sql: `
|
|
18871
|
-
WITH ${shortTermsSql(prepared.patterns)},
|
|
18872
|
-
long_hits AS (
|
|
18873
|
-
SELECT tools.id, bm25(tb_search_tools_fts_v3, 10.0, 3.0, 1.0) AS fts_rank
|
|
18874
|
-
FROM tb_search_tools_fts_v3
|
|
18875
|
-
JOIN tb_search_tools_v3 AS tools ON tools.id = tb_search_tools_fts_v3.rowid
|
|
18876
|
-
WHERE tb_search_tools_fts_v3 MATCH ?
|
|
18877
|
-
)
|
|
18878
|
-
SELECT tools.id, tools.path, tools.name, long_hits.fts_rank,
|
|
18879
|
-
${SHORT_SCORE_SQL} AS short_score
|
|
18880
|
-
FROM long_hits
|
|
18881
|
-
JOIN tb_search_tools_v3 AS tools ON tools.id = long_hits.id
|
|
18882
|
-
WHERE ${SHORT_MATCH_SQL}
|
|
18883
|
-
ORDER BY long_hits.fts_rank, short_score DESC, tools.path, tools.name
|
|
18884
|
-
LIMIT ? OFFSET ?
|
|
18885
|
-
`
|
|
18886
|
-
};
|
|
18887
|
-
}
|
|
18923
|
+
var DELETE_ALL_TOOLS_SQL = "DELETE FROM tb_search_tools_v4";
|
|
18924
|
+
var DELETE_ALL_SNAPSHOTS_SQL = "DELETE FROM tb_search_snapshots_v4";
|
|
18925
|
+
var BUMP_REVISION_SQL = "UPDATE tb_search_meta_v4 SET revision = revision + 1 WHERE singleton = 1";
|
|
18926
|
+
var COMPLETE_REBUILD_SQL = "UPDATE tb_search_meta_v4 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
18927
|
+
function toolSearchCandidateStatement(units, limit, offset, syntax) {
|
|
18928
|
+
const values = units.map((unit, index) => `(${syntax.placeholder(index + 1)}, ${unit.tier})`).join(", ");
|
|
18929
|
+
const limitParam = syntax.placeholder(units.length + 1);
|
|
18930
|
+
const offsetParam = syntax.placeholder(units.length + 2);
|
|
18931
|
+
const like = syntax.likeOperator;
|
|
18888
18932
|
return {
|
|
18889
|
-
params: [
|
|
18933
|
+
params: [...units.map((unit) => unit.pattern), limit + 1, offset],
|
|
18890
18934
|
sql: `
|
|
18891
|
-
|
|
18892
|
-
FROM
|
|
18893
|
-
|
|
18894
|
-
|
|
18895
|
-
|
|
18896
|
-
|
|
18935
|
+
WITH units(pattern, tier) AS (VALUES ${values})
|
|
18936
|
+
SELECT * FROM (
|
|
18937
|
+
SELECT tools.id, tools.path, tools.name,
|
|
18938
|
+
(
|
|
18939
|
+
SELECT COALESCE(SUM(units.tier * CASE
|
|
18940
|
+
WHEN tools.name ${like} units.pattern ESCAPE '!' THEN 10
|
|
18941
|
+
WHEN tools.path ${like} units.pattern ESCAPE '!' THEN 5
|
|
18942
|
+
WHEN tools.description ${like} units.pattern ESCAPE '!' THEN 3
|
|
18943
|
+
WHEN tools.feedback ${like} units.pattern ESCAPE '!' THEN 1
|
|
18944
|
+
ELSE 0
|
|
18945
|
+
END), 0)
|
|
18946
|
+
FROM units
|
|
18947
|
+
) AS score
|
|
18948
|
+
FROM tb_search_tools_v4 AS tools
|
|
18949
|
+
) AS scored_tools
|
|
18950
|
+
WHERE score > 0
|
|
18951
|
+
ORDER BY score DESC, path, name
|
|
18952
|
+
LIMIT ${limitParam} OFFSET ${offsetParam}
|
|
18897
18953
|
`
|
|
18898
18954
|
};
|
|
18899
18955
|
}
|
|
18900
18956
|
var sqliteSearchDialect = {
|
|
18901
|
-
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(
|
|
18957
|
+
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(
|
|
18958
|
+
prepareToolSearchUnits(query),
|
|
18959
|
+
limit,
|
|
18960
|
+
offset,
|
|
18961
|
+
{ likeOperator: "LIKE", placeholder: () => "?" }
|
|
18962
|
+
),
|
|
18902
18963
|
schemaStatements: TOOL_SEARCH_SCHEMA_STATEMENTS,
|
|
18903
18964
|
statements: {
|
|
18904
18965
|
bumpRevision: BUMP_REVISION_SQL,
|
|
@@ -19084,7 +19145,7 @@ var SqlSearchIndex = class {
|
|
|
19084
19145
|
|
|
19085
19146
|
// ../core/src/search/pgSearchDialect.ts
|
|
19086
19147
|
var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
19087
|
-
`CREATE TABLE IF NOT EXISTS
|
|
19148
|
+
`CREATE TABLE IF NOT EXISTS tb_search_tools_v4 (
|
|
19088
19149
|
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
19089
19150
|
path text NOT NULL,
|
|
19090
19151
|
name text NOT NULL,
|
|
@@ -19092,13 +19153,11 @@ var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
19092
19153
|
feedback text NOT NULL DEFAULT '',
|
|
19093
19154
|
UNIQUE(path, name)
|
|
19094
19155
|
)`,
|
|
19095
|
-
// 这里**故意不建 trigram GIN
|
|
19096
|
-
//
|
|
19097
|
-
//
|
|
19098
|
-
//
|
|
19099
|
-
|
|
19100
|
-
// 若将来放宽该上限,应连同候选查询形状(拆成 UNION 或改单列检索列)一起重新评估。
|
|
19101
|
-
`CREATE TABLE IF NOT EXISTS tb_search_meta_v3 (
|
|
19156
|
+
// 这里**故意不建 trigram GIN 索引**。历史基准在 500 节点 × 8 工具(4000 行)
|
|
19157
|
+
// 样本上对单 unit 多列 ILIKE 一律选 Seq Scan;GIN 让写入和体积显著增加却未改善
|
|
19158
|
+
// 检索。4000 行只是代表样本,不是严格工具行上限(节点内还受 20KB JSON 约束);
|
|
19159
|
+
// 查询单元数或容量边界变化时,应重跑 searchBench 并重新评估查询形状与索引。
|
|
19160
|
+
`CREATE TABLE IF NOT EXISTS tb_search_meta_v4 (
|
|
19102
19161
|
singleton integer PRIMARY KEY CHECK (singleton = 1),
|
|
19103
19162
|
revision bigint NOT NULL DEFAULT 0,
|
|
19104
19163
|
seeded integer NOT NULL DEFAULT 0,
|
|
@@ -19106,32 +19165,32 @@ var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
19106
19165
|
)`,
|
|
19107
19166
|
// cursor_secret 需 64 hex(32 字节)。两个内置 gen_random_uuid() 去连字符正好 64
|
|
19108
19167
|
// hex,避免依赖 pgcrypto 的 gen_random_bytes(自托管 PG 未必预装 pgcrypto)。
|
|
19109
|
-
`INSERT INTO
|
|
19168
|
+
`INSERT INTO tb_search_meta_v4(singleton, revision, seeded, cursor_secret)
|
|
19110
19169
|
VALUES (
|
|
19111
19170
|
1, 0, 0,
|
|
19112
19171
|
replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '')
|
|
19113
19172
|
)
|
|
19114
19173
|
ON CONFLICT (singleton) DO NOTHING`,
|
|
19115
|
-
`CREATE TABLE IF NOT EXISTS
|
|
19174
|
+
`CREATE TABLE IF NOT EXISTS tb_search_snapshots_v4 (
|
|
19116
19175
|
path text PRIMARY KEY,
|
|
19117
19176
|
digest text NOT NULL
|
|
19118
19177
|
)`,
|
|
19119
|
-
`CREATE OR REPLACE FUNCTION
|
|
19178
|
+
`CREATE OR REPLACE FUNCTION tb_search_snapshots_v4_capacity()
|
|
19120
19179
|
RETURNS trigger AS $$
|
|
19121
19180
|
BEGIN
|
|
19122
|
-
IF (SELECT COUNT(*) FROM
|
|
19181
|
+
IF (SELECT COUNT(*) FROM tb_search_snapshots_v4) >= ${TOOL_SEARCH_AUDIT_NODE_LIMIT} THEN
|
|
19123
19182
|
RAISE EXCEPTION '${TOOL_SEARCH_CAPACITY_MARKER}';
|
|
19124
19183
|
END IF;
|
|
19125
19184
|
RETURN NEW;
|
|
19126
19185
|
END;
|
|
19127
19186
|
$$ LANGUAGE plpgsql`,
|
|
19128
|
-
`DROP TRIGGER IF EXISTS
|
|
19129
|
-
`CREATE TRIGGER
|
|
19130
|
-
BEFORE INSERT ON
|
|
19131
|
-
FOR EACH ROW EXECUTE FUNCTION
|
|
19187
|
+
`DROP TRIGGER IF EXISTS tb_search_snapshots_v4_capacity_trg ON tb_search_snapshots_v4`,
|
|
19188
|
+
`CREATE TRIGGER tb_search_snapshots_v4_capacity_trg
|
|
19189
|
+
BEFORE INSERT ON tb_search_snapshots_v4
|
|
19190
|
+
FOR EACH ROW EXECUTE FUNCTION tb_search_snapshots_v4_capacity()`
|
|
19132
19191
|
];
|
|
19133
19192
|
var PG_SEARCH_WRITE_LOCK_KEY = 2069799624;
|
|
19134
|
-
var PG_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO
|
|
19193
|
+
var PG_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO tb_search_snapshots_v4(path, digest) VALUES ($1, $2)";
|
|
19135
19194
|
function pgBulkInsertSql(table, columns, rows) {
|
|
19136
19195
|
const tuples = [];
|
|
19137
19196
|
for (let r = 0; r < rows; r++) {
|
|
@@ -19140,68 +19199,50 @@ function pgBulkInsertSql(table, columns, rows) {
|
|
|
19140
19199
|
}
|
|
19141
19200
|
return `INSERT INTO ${table} (${columns.join(", ")}) VALUES ${tuples.join(", ")}`;
|
|
19142
19201
|
}
|
|
19143
|
-
var PG_SEARCH_TOOLS_TABLE = "
|
|
19202
|
+
var PG_SEARCH_TOOLS_TABLE = "tb_search_tools_v4";
|
|
19144
19203
|
var PG_SEARCH_TOOLS_COLUMNS = ["path", "name", "description", "feedback"];
|
|
19145
|
-
var PG_SEARCH_SNAPSHOTS_TABLE = "
|
|
19204
|
+
var PG_SEARCH_SNAPSHOTS_TABLE = "tb_search_snapshots_v4";
|
|
19146
19205
|
var PG_SEARCH_SNAPSHOTS_COLUMNS = ["path", "digest"];
|
|
19147
19206
|
var PG_SEARCH_INSERT_ROWS_MAX = 1e3;
|
|
19148
19207
|
var META_SQL2 = `
|
|
19149
19208
|
SELECT revision::int AS revision, seeded::int AS seeded, cursor_secret
|
|
19150
|
-
FROM
|
|
19209
|
+
FROM tb_search_meta_v4 WHERE singleton = 1
|
|
19151
19210
|
`;
|
|
19152
|
-
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM
|
|
19211
|
+
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM tb_search_snapshots_v4 ORDER BY path";
|
|
19153
19212
|
var PATH_STATE_SQL2 = `
|
|
19154
19213
|
SELECT snapshots.digest,
|
|
19155
|
-
EXISTS(SELECT 1 FROM
|
|
19156
|
-
(SELECT COUNT(*) FROM
|
|
19214
|
+
EXISTS(SELECT 1 FROM tb_search_tools_v4 WHERE path = $1)::int AS has_tools,
|
|
19215
|
+
(SELECT COUNT(*) FROM tb_search_snapshots_v4)::int AS path_count
|
|
19157
19216
|
FROM (SELECT 1) AS singleton
|
|
19158
|
-
LEFT JOIN
|
|
19217
|
+
LEFT JOIN tb_search_snapshots_v4 AS snapshots ON snapshots.path = $2
|
|
19159
19218
|
`;
|
|
19160
|
-
var PRESENT_SQL2 = "SELECT 1 AS present FROM
|
|
19219
|
+
var PRESENT_SQL2 = "SELECT 1 AS present FROM tb_search_tools_v4 WHERE path = $1 LIMIT 1";
|
|
19161
19220
|
var PRESENT_PREFIX_SQL2 = `
|
|
19162
|
-
SELECT 1 AS present FROM
|
|
19221
|
+
SELECT 1 AS present FROM tb_search_tools_v4
|
|
19163
19222
|
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19164
19223
|
LIMIT 1
|
|
19165
19224
|
`;
|
|
19166
|
-
var DELETE_TOOLS_SQL2 = "DELETE FROM
|
|
19167
|
-
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM
|
|
19225
|
+
var DELETE_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v4 WHERE path = $1";
|
|
19226
|
+
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM tb_search_snapshots_v4 WHERE path = $1";
|
|
19168
19227
|
var DELETE_TOOLS_PREFIX_SQL2 = `
|
|
19169
|
-
DELETE FROM
|
|
19228
|
+
DELETE FROM tb_search_tools_v4
|
|
19170
19229
|
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19171
19230
|
`;
|
|
19172
19231
|
var DELETE_SNAPSHOT_PREFIX_SQL2 = `
|
|
19173
|
-
DELETE FROM
|
|
19232
|
+
DELETE FROM tb_search_snapshots_v4
|
|
19174
19233
|
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19175
19234
|
`;
|
|
19176
|
-
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM
|
|
19177
|
-
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM
|
|
19178
|
-
var BUMP_REVISION_SQL2 = "UPDATE
|
|
19179
|
-
var COMPLETE_REBUILD_SQL2 = "UPDATE
|
|
19180
|
-
function pgCandidateStatement(query, limit, offset) {
|
|
19181
|
-
const patterns = toolSearchLikePatterns(query);
|
|
19182
|
-
const matchClauses = patterns.map((_, i) => {
|
|
19183
|
-
const p = `$${i + 1}`;
|
|
19184
|
-
return `(name ILIKE ${p} ESCAPE '!' OR description ILIKE ${p} ESCAPE '!' OR feedback ILIKE ${p} ESCAPE '!')`;
|
|
19185
|
-
});
|
|
19186
|
-
const scoreTerms = patterns.map((_, i) => {
|
|
19187
|
-
const p = `$${i + 1}`;
|
|
19188
|
-
return `CASE WHEN name ILIKE ${p} ESCAPE '!' THEN 10 WHEN description ILIKE ${p} ESCAPE '!' THEN 3 WHEN feedback ILIKE ${p} ESCAPE '!' THEN 1 ELSE 0 END`;
|
|
19189
|
-
});
|
|
19190
|
-
const limitParam = `$${patterns.length + 1}`;
|
|
19191
|
-
const offsetParam = `$${patterns.length + 2}`;
|
|
19192
|
-
return {
|
|
19193
|
-
params: [...patterns, limit + 1, offset],
|
|
19194
|
-
sql: `
|
|
19195
|
-
SELECT id, path, name, (${scoreTerms.join(" + ")}) AS score
|
|
19196
|
-
FROM tb_search_tools_v3
|
|
19197
|
-
WHERE ${matchClauses.join(" AND ")}
|
|
19198
|
-
ORDER BY score DESC, path, name
|
|
19199
|
-
LIMIT ${limitParam} OFFSET ${offsetParam}
|
|
19200
|
-
`
|
|
19201
|
-
};
|
|
19202
|
-
}
|
|
19235
|
+
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v4";
|
|
19236
|
+
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM tb_search_snapshots_v4";
|
|
19237
|
+
var BUMP_REVISION_SQL2 = "UPDATE tb_search_meta_v4 SET revision = revision + 1 WHERE singleton = 1";
|
|
19238
|
+
var COMPLETE_REBUILD_SQL2 = "UPDATE tb_search_meta_v4 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
19203
19239
|
var pgSearchDialect = {
|
|
19204
|
-
candidateStatement:
|
|
19240
|
+
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(
|
|
19241
|
+
prepareToolSearchUnits(query),
|
|
19242
|
+
limit,
|
|
19243
|
+
offset,
|
|
19244
|
+
{ likeOperator: "ILIKE", placeholder: (index) => `$${index}` }
|
|
19245
|
+
),
|
|
19205
19246
|
schemaStatements: PG_SEARCH_SCHEMA_STATEMENTS,
|
|
19206
19247
|
statements: {
|
|
19207
19248
|
bumpRevision: BUMP_REVISION_SQL2,
|
|
@@ -20332,12 +20373,17 @@ export {
|
|
|
20332
20373
|
parseNodeInput,
|
|
20333
20374
|
createBuiltins,
|
|
20334
20375
|
CONTEXT_CAPABILITIES,
|
|
20376
|
+
CONTEXT_DIRECT_UPLOAD_CAPABILITY,
|
|
20335
20377
|
contextScopeForCmd,
|
|
20378
|
+
contextUploadCmd,
|
|
20336
20379
|
contextHelpModel,
|
|
20337
20380
|
objectBodyToBytes,
|
|
20338
20381
|
bytesToObjectStream,
|
|
20339
20382
|
normalizeEntryPath,
|
|
20340
20383
|
PRESIGN_TTL_SEC_DEFAULT,
|
|
20384
|
+
PRESIGN_TTL_SEC_MAX,
|
|
20385
|
+
assertPresignTtlSec,
|
|
20386
|
+
createObjectContextUploadGrant,
|
|
20341
20387
|
createObjectContextProvider,
|
|
20342
20388
|
isContextExpired,
|
|
20343
20389
|
decodeDeviceFrame,
|