@tool-bridge/server 0.7.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{airtable-BNVPDLF2.js → airtable-SLT4UDB3.js} +4 -4
- package/dist/{alt_text_generator_ai-RMQPHK2Y.js → alt_text_generator_ai-HCFYQNEN.js} +4 -4
- package/dist/{amap-PRNZPQ34.js → amap-ZOOTZCI2.js} +4 -4
- package/dist/{anthropic-A76VIXR7.js → anthropic-IUWXKV76.js} +4 -4
- package/dist/{apify-2Q2CTLKE.js → apify-HQXUP3ZL.js} +4 -4
- package/dist/{brave_search-5YJJVPXH.js → brave_search-HG5PMEDZ.js} +4 -4
- package/dist/{chunk-76YX7XSX.js → chunk-AWXZMW6M.js} +246 -52
- package/dist/{chunk-7ASYWVYP.js → chunk-EMUJLM32.js} +599 -38
- package/dist/{chunk-EBO6Q4NR.js → chunk-THDEI7S7.js} +1 -1
- package/dist/{chunk-BUHY4IE6.js → chunk-V4VHC3Q6.js} +2 -2
- package/dist/{chunk-GMHELPK3.js → chunk-WIH5OHFG.js} +1 -1
- package/dist/{circleci-TDXP3CPQ.js → circleci-XA4GXPOT.js} +4 -4
- package/dist/{clerk-JRSGMXMS.js → clerk-MUAETUIY.js} +4 -4
- package/dist/{cloudflare_dns-G4CHNLO7.js → cloudflare_dns-BRYRH55W.js} +4 -4
- package/dist/{cohere-3KN27F2B.js → cohere-XKVGQJQH.js} +4 -4
- package/dist/{confluence-QV6J2PBV.js → confluence-SWP6UUEK.js} +4 -4
- package/dist/{convertapi-HETITAHL.js → convertapi-42FNXPAS.js} +4 -4
- package/dist/{currencyapi-647DEY6G.js → currencyapi-7IECLAKK.js} +4 -4
- package/dist/{deepseek-G63RUHM6.js → deepseek-VD3VY3D2.js} +4 -4
- package/dist/{docker_hub-RH72CRWO.js → docker_hub-YCEWCV5D.js} +4 -4
- package/dist/{dropbox-T4Y5KSZW.js → dropbox-KCAEQENT.js} +4 -4
- package/dist/{dub-ECKQT3DC.js → dub-AVLJI73G.js} +4 -4
- package/dist/{e2b-N5SRTPLF.js → e2b-NZPEKNY3.js} +4 -4
- package/dist/{exa-525ZDM7G.js → exa-MHHTRY4Y.js} +4 -4
- package/dist/{fal_ai-BFMVHAUW.js → fal_ai-VKVUKXE2.js} +4 -4
- package/dist/{feishu-NIDOD7EW.js → feishu-AFLX4VZX.js} +3 -3
- package/dist/{feishu_custom_bot-V5RGAIUH.js → feishu_custom_bot-S4XJYZVB.js} +4 -4
- package/dist/{figma-GH7TXJMP.js → figma-6LBMPYPL.js} +4 -4
- package/dist/{firehydrant-5T3UHAQM.js → firehydrant-JRAJ4CMG.js} +4 -4
- package/dist/{fixer-3RMJLMFO.js → fixer-BTWM3K4Z.js} +4 -4
- package/dist/{fly-NPHJC5MH.js → fly-FUY25D36.js} +4 -4
- package/dist/{front-PYGXJAQK.js → front-SFQD4V63.js} +4 -4
- package/dist/{geocodio-T6G3FVIF.js → geocodio-JZTFWKOE.js} +4 -4
- package/dist/{ghost-L3XIF4SJ.js → ghost-HNZTH6AR.js} +4 -4
- package/dist/{github-7YDUB6N6.js → github-3J6ZYHGY.js} +4 -4
- package/dist/{gmail-RY2ZDG3B.js → gmail-Y4GWZ2UJ.js} +4 -4
- package/dist/{googlecalendar-EHOFMXHE.js → googlecalendar-JK6B3ZCO.js} +4 -4
- package/dist/{googledocs-BA3OAMKA.js → googledocs-VERSNFGF.js} +4 -4
- package/dist/{grafana-PYZQ4CKI.js → grafana-WABWHNKT.js} +4 -4
- package/dist/{graphhopper-3P4YU45N.js → graphhopper-PWZOVQQF.js} +4 -4
- package/dist/index.d.ts +372 -28
- package/dist/index.js +14 -2
- package/dist/{ip2proxy-GQO6VF4P.js → ip2proxy-IJKSNZVR.js} +4 -4
- package/dist/{ipgeolocation_io-VOZU6E7H.js → ipgeolocation_io-I27LWP7M.js} +4 -4
- package/dist/{ipqualityscore-XDJ3TTMM.js → ipqualityscore-THLB64L6.js} +4 -4
- package/dist/{jina_ai-ELXPSTUJ.js → jina_ai-KHC4WQAK.js} +4 -4
- package/dist/{jira-INDXWO4I.js → jira-NAGZYZLK.js} +4 -4
- package/dist/{langsmith-PMCQBCIK.js → langsmith-5BZ4CAWL.js} +4 -4
- package/dist/{lemlist-VWZXIHJX.js → lemlist-4D5DLIWT.js} +4 -4
- package/dist/{linear-YXG4KZR4.js → linear-5A6IZTNW.js} +4 -4
- package/dist/{logsnag-XENBYHHK.js → logsnag-Q7CU4J7A.js} +4 -4
- package/dist/main.js +113 -106
- package/dist/{mattermost-BHVJP5MA.js → mattermost-36YSAHMQ.js} +4 -4
- package/dist/{mem0-7AP5UBJV.js → mem0-EVJ7KY5E.js} +4 -4
- package/dist/{memos-MNVRYSLG.js → memos-KDNZATPM.js} +4 -4
- package/dist/{metabase-NSXM7EID.js → metabase-MRBJG473.js} +4 -4
- package/dist/{mistral_ai-HXN625YX.js → mistral_ai-PDT25XCR.js} +4 -4
- package/dist/{mother_duck-46VQ3V3D.js → mother_duck-MN3OHZDF.js} +4 -4
- package/dist/{ngrok-BWCVMS3T.js → ngrok-PEGRSO2H.js} +4 -4
- package/dist/{notes-AVHKCFLU.js → notes-UUDL64JP.js} +2 -2
- package/dist/{notion-BSEN3KSU.js → notion-XRTFGM3Q.js} +4 -4
- package/dist/{open_exchange_rates-DWO4T5TF.js → open_exchange_rates-TLNDRZ54.js} +4 -4
- package/dist/{openai-HPZYRS3M.js → openai-EUDWNNU6.js} +4 -4
- package/dist/{opengraph_io-OLUAYD5P.js → opengraph_io-MKH5AUR3.js} +4 -4
- package/dist/{openrouter-4DQYZIG3.js → openrouter-YMGWGPI3.js} +4 -4
- package/dist/{outline-ZDNMKXZ6.js → outline-MTH7SZBU.js} +4 -4
- package/dist/{paddle-HCOOYW3F.js → paddle-PWSGQPO6.js} +4 -4
- package/dist/{perplexity-2GJJPDA7.js → perplexity-NBUHF5Z6.js} +4 -4
- package/dist/{pinecone-ZPOBKL5T.js → pinecone-5FVBDTET.js} +4 -4
- package/dist/{pipedrive-3WN2RFMB.js → pipedrive-IJUNMGFQ.js} +4 -4
- package/dist/{polar-DJFGBTXW.js → polar-L72J7ISM.js} +4 -4
- package/dist/{posthog-G4OXNEXP.js → posthog-4GDGMSSQ.js} +4 -4
- package/dist/{postmark-NJMGDQKO.js → postmark-25TFX6LC.js} +4 -4
- package/dist/{prerender-2TUPKRK5.js → prerender-ZY7S5S4R.js} +4 -4
- package/dist/{pubmed-CCXZZT34.js → pubmed-KCPFV76N.js} +4 -4
- package/dist/{railway-ZUUY5YYR.js → railway-IWOCVOXL.js} +4 -4
- package/dist/{readwise-PYSRGJ4J.js → readwise-JCN5J4ON.js} +4 -4
- package/dist/{render-SFA3EMGM.js → render-FUM4QWKI.js} +4 -4
- package/dist/{replicate-KGZHYBPK.js → replicate-V5VIAEYB.js} +4 -4
- package/dist/{resend-HENMZC5U.js → resend-F3XQOI24.js} +4 -4
- package/dist/{rootly-HV2PXIDP.js → rootly-XEDRHK66.js} +4 -4
- package/dist/{scrapfly-FOZFHUN3.js → scrapfly-PXDWBCOD.js} +4 -4
- package/dist/{scrapingbee-VHUMSO2J.js → scrapingbee-X5QCNZSS.js} +4 -4
- package/dist/{screenshot_fyi-FFDXAKHD.js → screenshot_fyi-V6CE6WQS.js} +4 -4
- package/dist/{semantic_scholar-GHO37BZF.js → semantic_scholar-NHEQ5J72.js} +4 -4
- package/dist/{sentry-MZVZW3YE.js → sentry-XDLPYMQI.js} +4 -4
- package/dist/{shodan-IDICOPGU.js → shodan-H2YTSK7R.js} +4 -4
- package/dist/{shopify-WQLO23JO.js → shopify-Q5YDMDAD.js} +4 -4
- package/dist/{stripe-XOAKLAKU.js → stripe-ZXSIKY6A.js} +4 -4
- package/dist/{supabase-6DKGSLST.js → supabase-TV2ZEVH5.js} +4 -4
- package/dist/{tavily-76QZGEHM.js → tavily-KKBMTUW6.js} +4 -4
- package/dist/{telegram-O536CLFR.js → telegram-JM4VE5FR.js} +4 -4
- package/dist/{telnyx-XOPYXF3K.js → telnyx-NOXAAP6B.js} +4 -4
- package/dist/{todoist-YXHVWPP3.js → todoist-ATYSMZ2W.js} +4 -4
- package/dist/{trello-WMTM3WA2.js → trello-BWRSV7VZ.js} +4 -4
- package/dist/{turso-CG7PR5HM.js → turso-P7Z4X5C5.js} +4 -4
- package/dist/{twilio-ZW4SD36D.js → twilio-YL7NUXCX.js} +4 -4
- package/dist/{umami-IJQ5VH77.js → umami-JPWFBAPI.js} +4 -4
- package/dist/{unsplash-JBQY7NKO.js → unsplash-CJBI3UGZ.js} +4 -4
- package/dist/{upstash_redis-2BAO776T.js → upstash_redis-J5IGSHWB.js} +4 -4
- package/dist/{uptimerobot-BRIHMPB3.js → uptimerobot-HEFFBT3N.js} +4 -4
- package/dist/{v2ex-HWIHF4HX.js → v2ex-MRYW7RM6.js} +4 -4
- package/dist/{vercel-MGMRY2DJ.js → vercel-RNY4ZRTH.js} +4 -4
- package/dist/{wolfram_alpha_api-JG6JD33L.js → wolfram_alpha_api-AF346YID.js} +4 -4
- package/dist/{wordpress-ZSYJERWV.js → wordpress-YWKGCQA5.js} +4 -4
- package/dist/{workos-QFEOSJAN.js → workos-Y7AORGEG.js} +4 -4
- package/dist/{zhihu-5RF7BBFV.js → zhihu-X4FAKOAQ.js} +4 -4
- package/package.json +8 -6
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V4VHC3Q6.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-THDEI7S7.js";
|
|
9
|
+
import "./chunk-WIH5OHFG.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AWXZMW6M.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/airtable/api.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V4VHC3Q6.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-THDEI7S7.js";
|
|
9
|
+
import "./chunk-WIH5OHFG.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AWXZMW6M.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/alt_text_generator_ai/schema.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V4VHC3Q6.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-THDEI7S7.js";
|
|
9
|
+
import "./chunk-WIH5OHFG.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AWXZMW6M.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/amap/api.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V4VHC3Q6.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-THDEI7S7.js";
|
|
9
|
+
import "./chunk-WIH5OHFG.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AWXZMW6M.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/anthropic/api.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V4VHC3Q6.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-THDEI7S7.js";
|
|
9
|
+
import "./chunk-WIH5OHFG.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AWXZMW6M.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/apify/api.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-V4VHC3Q6.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-THDEI7S7.js";
|
|
9
|
+
import "./chunk-WIH5OHFG.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-AWXZMW6M.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/brave_search/api.ts
|
|
@@ -14637,6 +14637,20 @@ var KEY_BOOTSTRAPPED = "sys:bootstrapped";
|
|
|
14637
14637
|
var KEY_REMOTE_ALLOWLIST = "sys:remoteallowlist";
|
|
14638
14638
|
var KEY_ANNOTATION = "annotation:";
|
|
14639
14639
|
var KEY_FEEDBACK = "feedback:";
|
|
14640
|
+
var MAX_CODE_POINT = 1114111;
|
|
14641
|
+
var SURROGATE_START = 55296;
|
|
14642
|
+
var SURROGATE_END = 57343;
|
|
14643
|
+
function prefixUpperBound(prefix) {
|
|
14644
|
+
const points = [...prefix];
|
|
14645
|
+
for (let i = points.length - 1; i >= 0; i--) {
|
|
14646
|
+
const code = points[i]?.codePointAt(0);
|
|
14647
|
+
if (code === void 0 || code >= MAX_CODE_POINT) continue;
|
|
14648
|
+
let next = code + 1;
|
|
14649
|
+
if (next >= SURROGATE_START && next <= SURROGATE_END) next = SURROGATE_END + 1;
|
|
14650
|
+
return points.slice(0, i).join("") + String.fromCodePoint(next);
|
|
14651
|
+
}
|
|
14652
|
+
return void 0;
|
|
14653
|
+
}
|
|
14640
14654
|
|
|
14641
14655
|
// ../core/src/annotation/store.ts
|
|
14642
14656
|
var ANNOTATION_TEXT_MAX = 2e3;
|
|
@@ -14820,7 +14834,7 @@ function checkRegisterPath(input) {
|
|
|
14820
14834
|
if (!checkScopes(sk.scopes, targetPath, "register")) {
|
|
14821
14835
|
return deny(`no scope grants 'register' on '${targetPath}'`);
|
|
14822
14836
|
}
|
|
14823
|
-
if (existing && existing.registeredBy !== sk.id && existing.registeredBy !== SYSTEM_AUTO) {
|
|
14837
|
+
if (existing && existing.registeredBy !== sk.id && existing.registeredBy !== SYSTEM_AUTO && !checkScopes(sk.scopes, targetPath, "admin")) {
|
|
14824
14838
|
return {
|
|
14825
14839
|
allow: false,
|
|
14826
14840
|
error: new TBError("conflict", `path '${targetPath}' is registered by another key`)
|
|
@@ -16362,7 +16376,7 @@ function registryCmds(nodePath) {
|
|
|
16362
16376
|
name: "delete",
|
|
16363
16377
|
method: "POST",
|
|
16364
16378
|
path,
|
|
16365
|
-
h: "unmount a node (and reclaim empty auto-created parents)",
|
|
16379
|
+
h: "unmount a node (and reclaim empty auto-created parents); a node registered by another key can only be removed by its registrar or by a key holding the 'admin' scope on that path",
|
|
16366
16380
|
inputSchema: {
|
|
16367
16381
|
type: "object",
|
|
16368
16382
|
properties: { path: { type: "string", description: "exact tree path" } },
|
|
@@ -18428,32 +18442,6 @@ function decodePluginCall(body) {
|
|
|
18428
18442
|
return parsed.data;
|
|
18429
18443
|
}
|
|
18430
18444
|
|
|
18431
|
-
// ../core/src/search/shortTermSql.ts
|
|
18432
|
-
function shortTermsSql(patterns) {
|
|
18433
|
-
return `short_terms(pattern) AS (VALUES ${patterns.map(() => "(?)").join(", ")})`;
|
|
18434
|
-
}
|
|
18435
|
-
var SHORT_MATCH_SQL = `
|
|
18436
|
-
NOT EXISTS (
|
|
18437
|
-
SELECT 1 FROM short_terms
|
|
18438
|
-
WHERE tools.name NOT LIKE pattern ESCAPE '!'
|
|
18439
|
-
AND tools.description NOT LIKE pattern ESCAPE '!'
|
|
18440
|
-
AND tools.feedback NOT LIKE pattern ESCAPE '!'
|
|
18441
|
-
)
|
|
18442
|
-
`;
|
|
18443
|
-
var SHORT_SCORE_SQL = `
|
|
18444
|
-
(
|
|
18445
|
-
SELECT COALESCE(SUM(
|
|
18446
|
-
CASE
|
|
18447
|
-
WHEN tools.name LIKE pattern ESCAPE '!' THEN 10
|
|
18448
|
-
WHEN tools.description LIKE pattern ESCAPE '!' THEN 3
|
|
18449
|
-
WHEN tools.feedback LIKE pattern ESCAPE '!' THEN 1
|
|
18450
|
-
ELSE 0
|
|
18451
|
-
END
|
|
18452
|
-
), 0)
|
|
18453
|
-
FROM short_terms
|
|
18454
|
-
)
|
|
18455
|
-
`;
|
|
18456
|
-
|
|
18457
18445
|
// ../core/src/search/types.ts
|
|
18458
18446
|
var TOOL_SEARCH_BATCH_LIMIT = 100;
|
|
18459
18447
|
var TOOL_SEARCH_WORK_LIMIT = 400;
|
|
@@ -18638,6 +18626,13 @@ function likePattern(term) {
|
|
|
18638
18626
|
const escaped = term.replaceAll("!", "!!").replaceAll("%", "!%").replaceAll("_", "!_");
|
|
18639
18627
|
return `%${escaped}%`;
|
|
18640
18628
|
}
|
|
18629
|
+
function toolSearchLikePatterns(query) {
|
|
18630
|
+
const terms = normalizeToolSearchQuery(query).split(/\s+/u);
|
|
18631
|
+
if (terms.length > TOOL_SEARCH_TERM_LIMIT) {
|
|
18632
|
+
throw new TBError("invalid_argument", `\u641C\u7D22 query \u6700\u591A ${TOOL_SEARCH_TERM_LIMIT} \u4E2A terms`);
|
|
18633
|
+
}
|
|
18634
|
+
return terms.map(likePattern);
|
|
18635
|
+
}
|
|
18641
18636
|
function prepareToolSearchQuery(query) {
|
|
18642
18637
|
const normalized = normalizeToolSearchQuery(query);
|
|
18643
18638
|
const terms = normalized.split(/\s+/u);
|
|
@@ -18722,6 +18717,32 @@ async function decodeToolSearchCursor(cursor, query, mode, revision, secret) {
|
|
|
18722
18717
|
return payload.o ?? 0;
|
|
18723
18718
|
}
|
|
18724
18719
|
|
|
18720
|
+
// ../core/src/search/shortTermSql.ts
|
|
18721
|
+
function shortTermsSql(patterns) {
|
|
18722
|
+
return `short_terms(pattern) AS (VALUES ${patterns.map(() => "(?)").join(", ")})`;
|
|
18723
|
+
}
|
|
18724
|
+
var SHORT_MATCH_SQL = `
|
|
18725
|
+
NOT EXISTS (
|
|
18726
|
+
SELECT 1 FROM short_terms
|
|
18727
|
+
WHERE tools.name NOT LIKE pattern ESCAPE '!'
|
|
18728
|
+
AND tools.description NOT LIKE pattern ESCAPE '!'
|
|
18729
|
+
AND tools.feedback NOT LIKE pattern ESCAPE '!'
|
|
18730
|
+
)
|
|
18731
|
+
`;
|
|
18732
|
+
var SHORT_SCORE_SQL = `
|
|
18733
|
+
(
|
|
18734
|
+
SELECT COALESCE(SUM(
|
|
18735
|
+
CASE
|
|
18736
|
+
WHEN tools.name LIKE pattern ESCAPE '!' THEN 10
|
|
18737
|
+
WHEN tools.description LIKE pattern ESCAPE '!' THEN 3
|
|
18738
|
+
WHEN tools.feedback LIKE pattern ESCAPE '!' THEN 1
|
|
18739
|
+
ELSE 0
|
|
18740
|
+
END
|
|
18741
|
+
), 0)
|
|
18742
|
+
FROM short_terms
|
|
18743
|
+
)
|
|
18744
|
+
`;
|
|
18745
|
+
|
|
18725
18746
|
// ../core/src/search/sqlSearchIndex.ts
|
|
18726
18747
|
var TOOL_SEARCH_SCHEMA_STATEMENTS = [
|
|
18727
18748
|
`CREATE TABLE IF NOT EXISTS tb_search_tools_v3 (
|
|
@@ -18859,12 +18880,34 @@ function toolSearchCandidateStatement(prepared, limit, offset) {
|
|
|
18859
18880
|
`
|
|
18860
18881
|
};
|
|
18861
18882
|
}
|
|
18883
|
+
var sqliteSearchDialect = {
|
|
18884
|
+
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(prepareToolSearchQuery(query), limit, offset),
|
|
18885
|
+
schemaStatements: TOOL_SEARCH_SCHEMA_STATEMENTS,
|
|
18886
|
+
statements: {
|
|
18887
|
+
bumpRevision: BUMP_REVISION_SQL,
|
|
18888
|
+
completeRebuild: COMPLETE_REBUILD_SQL,
|
|
18889
|
+
deleteAllSnapshots: DELETE_ALL_SNAPSHOTS_SQL,
|
|
18890
|
+
deleteAllTools: DELETE_ALL_TOOLS_SQL,
|
|
18891
|
+
deleteSnapshot: DELETE_SNAPSHOT_SQL,
|
|
18892
|
+
deleteSnapshotPrefix: DELETE_SNAPSHOT_PREFIX_SQL,
|
|
18893
|
+
deleteTools: DELETE_TOOLS_SQL,
|
|
18894
|
+
deleteToolsPrefix: DELETE_TOOLS_PREFIX_SQL,
|
|
18895
|
+
insertSnapshot: TOOL_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
18896
|
+
meta: META_SQL,
|
|
18897
|
+
pathState: PATH_STATE_SQL,
|
|
18898
|
+
present: PRESENT_SQL,
|
|
18899
|
+
presentPrefix: PRESENT_PREFIX_SQL,
|
|
18900
|
+
snapshotDigests: SNAPSHOT_DIGESTS_SQL
|
|
18901
|
+
}
|
|
18902
|
+
};
|
|
18862
18903
|
var SqlSearchIndex = class {
|
|
18863
|
-
constructor(driver) {
|
|
18904
|
+
constructor(driver, dialect = sqliteSearchDialect) {
|
|
18864
18905
|
this.driver = driver;
|
|
18906
|
+
this.dialect = dialect;
|
|
18865
18907
|
}
|
|
18866
18908
|
driver;
|
|
18867
18909
|
capabilities = ["search"];
|
|
18910
|
+
dialect;
|
|
18868
18911
|
/** 容量 trigger 的 ABORT 在各驱动里错误形状不同,统一按标记串归一。 */
|
|
18869
18912
|
async writeOrCapacity(statements) {
|
|
18870
18913
|
try {
|
|
@@ -18877,14 +18920,14 @@ var SqlSearchIndex = class {
|
|
|
18877
18920
|
}
|
|
18878
18921
|
}
|
|
18879
18922
|
async meta() {
|
|
18880
|
-
const row = await this.driver.first({ params: [], sql:
|
|
18923
|
+
const row = await this.driver.first({ params: [], sql: this.dialect.statements.meta });
|
|
18881
18924
|
if (row === null) throw new TBError("internal", "\u5DE5\u5177\u641C\u7D22 meta \u7F3A\u5931");
|
|
18882
18925
|
return row;
|
|
18883
18926
|
}
|
|
18884
18927
|
async snapshotDigests() {
|
|
18885
18928
|
const rows = await this.driver.all({
|
|
18886
18929
|
params: [],
|
|
18887
|
-
sql:
|
|
18930
|
+
sql: this.dialect.statements.snapshotDigests
|
|
18888
18931
|
});
|
|
18889
18932
|
return new Map(rows.map((row) => [row.path, row.digest]));
|
|
18890
18933
|
}
|
|
@@ -18898,7 +18941,7 @@ var SqlSearchIndex = class {
|
|
|
18898
18941
|
await this.driver.ensureSchema();
|
|
18899
18942
|
const current = await this.driver.first({
|
|
18900
18943
|
params: [canonical, canonical],
|
|
18901
|
-
sql:
|
|
18944
|
+
sql: this.dialect.statements.pathState
|
|
18902
18945
|
});
|
|
18903
18946
|
const digest = records.length === 0 ? null : toolSearchSnapshotDigest(records);
|
|
18904
18947
|
if (current !== null && (digest !== null && current.digest === digest || digest === null && current.digest === null && current.has_tools === 0)) return;
|
|
@@ -18907,12 +18950,13 @@ var SqlSearchIndex = class {
|
|
|
18907
18950
|
}
|
|
18908
18951
|
const inserts = this.driver.insertRecords(records);
|
|
18909
18952
|
this.driver.assertInsertBudget?.(inserts.length);
|
|
18953
|
+
const statements = this.dialect.statements;
|
|
18910
18954
|
await this.writeOrCapacity([
|
|
18911
|
-
{ params: [canonical], sql:
|
|
18955
|
+
{ params: [canonical], sql: statements.deleteTools },
|
|
18912
18956
|
...inserts,
|
|
18913
|
-
{ params: [canonical], sql:
|
|
18914
|
-
...digest === null ? [] : [{ params: [canonical, digest], sql:
|
|
18915
|
-
{ params: [], sql:
|
|
18957
|
+
{ params: [canonical], sql: statements.deleteSnapshot },
|
|
18958
|
+
...digest === null ? [] : [{ params: [canonical, digest], sql: statements.insertSnapshot }],
|
|
18959
|
+
{ params: [], sql: statements.bumpRevision }
|
|
18916
18960
|
]);
|
|
18917
18961
|
}
|
|
18918
18962
|
async remove(path) {
|
|
@@ -18920,13 +18964,14 @@ var SqlSearchIndex = class {
|
|
|
18920
18964
|
await this.driver.ensureSchema();
|
|
18921
18965
|
const current = await this.driver.first({
|
|
18922
18966
|
params: [canonical],
|
|
18923
|
-
sql:
|
|
18967
|
+
sql: this.dialect.statements.present
|
|
18924
18968
|
});
|
|
18925
18969
|
if (current === null) return;
|
|
18970
|
+
const statements = this.dialect.statements;
|
|
18926
18971
|
await this.driver.write([
|
|
18927
|
-
{ params: [canonical], sql:
|
|
18928
|
-
{ params: [canonical], sql:
|
|
18929
|
-
{ params: [], sql:
|
|
18972
|
+
{ params: [canonical], sql: statements.deleteTools },
|
|
18973
|
+
{ params: [canonical], sql: statements.deleteSnapshot },
|
|
18974
|
+
{ params: [], sql: statements.bumpRevision }
|
|
18930
18975
|
]);
|
|
18931
18976
|
}
|
|
18932
18977
|
async removePrefix(path) {
|
|
@@ -18935,13 +18980,14 @@ var SqlSearchIndex = class {
|
|
|
18935
18980
|
const prefixParams = [canonical, canonical, canonical];
|
|
18936
18981
|
const current = await this.driver.first({
|
|
18937
18982
|
params: prefixParams,
|
|
18938
|
-
sql:
|
|
18983
|
+
sql: this.dialect.statements.presentPrefix
|
|
18939
18984
|
});
|
|
18940
18985
|
if (current === null) return;
|
|
18986
|
+
const statements = this.dialect.statements;
|
|
18941
18987
|
await this.driver.write([
|
|
18942
|
-
{ params: prefixParams, sql:
|
|
18943
|
-
{ params: prefixParams, sql:
|
|
18944
|
-
{ params: [], sql:
|
|
18988
|
+
{ params: prefixParams, sql: statements.deleteToolsPrefix },
|
|
18989
|
+
{ params: prefixParams, sql: statements.deleteSnapshotPrefix },
|
|
18990
|
+
{ params: [], sql: statements.bumpRevision }
|
|
18945
18991
|
]);
|
|
18946
18992
|
}
|
|
18947
18993
|
async rebuild(documents) {
|
|
@@ -18955,12 +19001,13 @@ var SqlSearchIndex = class {
|
|
|
18955
19001
|
const inserts = this.driver.insertRecords(records);
|
|
18956
19002
|
const snapshots = this.driver.insertSnapshots(desired);
|
|
18957
19003
|
this.driver.assertInsertBudget?.(inserts.length + snapshots.length);
|
|
19004
|
+
const statements = this.dialect.statements;
|
|
18958
19005
|
await this.writeOrCapacity([
|
|
18959
|
-
{ params: [], sql:
|
|
18960
|
-
{ params: [], sql:
|
|
19006
|
+
{ params: [], sql: statements.deleteAllTools },
|
|
19007
|
+
{ params: [], sql: statements.deleteAllSnapshots },
|
|
18961
19008
|
...inserts,
|
|
18962
19009
|
...snapshots,
|
|
18963
|
-
{ params: [], sql:
|
|
19010
|
+
{ params: [], sql: statements.completeRebuild }
|
|
18964
19011
|
]);
|
|
18965
19012
|
}
|
|
18966
19013
|
async search(query, opts) {
|
|
@@ -18979,7 +19026,7 @@ var SqlSearchIndex = class {
|
|
|
18979
19026
|
);
|
|
18980
19027
|
const limit = Math.min(normalizeToolSearchLimit(opts?.limit), TOOL_SEARCH_BATCH_LIMIT);
|
|
18981
19028
|
const rows = await this.driver.all(
|
|
18982
|
-
|
|
19029
|
+
this.dialect.candidateStatement(normalized, limit, offset)
|
|
18983
19030
|
);
|
|
18984
19031
|
const hasMore = rows.length > limit;
|
|
18985
19032
|
const page = hasMore ? rows.slice(0, limit) : rows;
|
|
@@ -19018,6 +19065,145 @@ var SqlSearchIndex = class {
|
|
|
19018
19065
|
}
|
|
19019
19066
|
};
|
|
19020
19067
|
|
|
19068
|
+
// ../core/src/search/pgSearchDialect.ts
|
|
19069
|
+
var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
19070
|
+
`CREATE TABLE IF NOT EXISTS tb_search_tools_v3 (
|
|
19071
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
19072
|
+
path text NOT NULL,
|
|
19073
|
+
name text NOT NULL,
|
|
19074
|
+
description text NOT NULL DEFAULT '',
|
|
19075
|
+
feedback text NOT NULL DEFAULT '',
|
|
19076
|
+
UNIQUE(path, name)
|
|
19077
|
+
)`,
|
|
19078
|
+
// 这里**故意不建 trigram GIN 索引**。实测(4000 条记录 = 500 节点上限满载):
|
|
19079
|
+
// 候选查询是"三列 ILIKE 用 OR 连接 + LIMIT",规划器一律选 Seq Scan(整表仅 1 个
|
|
19080
|
+
// buffer),GIN 索引一次都没被使用;而它让插入从 13.7ms 涨到 75.8ms(5.5×)、表总大小
|
|
19081
|
+
// 从 1072 kB 涨到 7208 kB(6.7×),检索却仍是 0.50 vs 0.53ms —— 纯负担。
|
|
19082
|
+
// 索引记录数受 TOOL_SEARCH_AUDIT_NODE_LIMIT 硬顶约束,不会增长到需要索引的规模;
|
|
19083
|
+
// 若将来放宽该上限,应连同候选查询形状(拆成 UNION 或改单列检索列)一起重新评估。
|
|
19084
|
+
`CREATE TABLE IF NOT EXISTS tb_search_meta_v3 (
|
|
19085
|
+
singleton integer PRIMARY KEY CHECK (singleton = 1),
|
|
19086
|
+
revision bigint NOT NULL DEFAULT 0,
|
|
19087
|
+
seeded integer NOT NULL DEFAULT 0,
|
|
19088
|
+
cursor_secret text NOT NULL
|
|
19089
|
+
)`,
|
|
19090
|
+
// cursor_secret 需 64 hex(32 字节)。两个内置 gen_random_uuid() 去连字符正好 64
|
|
19091
|
+
// hex,避免依赖 pgcrypto 的 gen_random_bytes(自托管 PG 未必预装 pgcrypto)。
|
|
19092
|
+
`INSERT INTO tb_search_meta_v3(singleton, revision, seeded, cursor_secret)
|
|
19093
|
+
VALUES (
|
|
19094
|
+
1, 0, 0,
|
|
19095
|
+
replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '')
|
|
19096
|
+
)
|
|
19097
|
+
ON CONFLICT (singleton) DO NOTHING`,
|
|
19098
|
+
`CREATE TABLE IF NOT EXISTS tb_search_snapshots_v3 (
|
|
19099
|
+
path text PRIMARY KEY,
|
|
19100
|
+
digest text NOT NULL
|
|
19101
|
+
)`,
|
|
19102
|
+
`CREATE OR REPLACE FUNCTION tb_search_snapshots_v3_capacity()
|
|
19103
|
+
RETURNS trigger AS $$
|
|
19104
|
+
BEGIN
|
|
19105
|
+
IF (SELECT COUNT(*) FROM tb_search_snapshots_v3) >= ${TOOL_SEARCH_AUDIT_NODE_LIMIT} THEN
|
|
19106
|
+
RAISE EXCEPTION '${TOOL_SEARCH_CAPACITY_MARKER}';
|
|
19107
|
+
END IF;
|
|
19108
|
+
RETURN NEW;
|
|
19109
|
+
END;
|
|
19110
|
+
$$ LANGUAGE plpgsql`,
|
|
19111
|
+
`DROP TRIGGER IF EXISTS tb_search_snapshots_v3_capacity_trg ON tb_search_snapshots_v3`,
|
|
19112
|
+
`CREATE TRIGGER tb_search_snapshots_v3_capacity_trg
|
|
19113
|
+
BEFORE INSERT ON tb_search_snapshots_v3
|
|
19114
|
+
FOR EACH ROW EXECUTE FUNCTION tb_search_snapshots_v3_capacity()`
|
|
19115
|
+
];
|
|
19116
|
+
var PG_SEARCH_WRITE_LOCK_KEY = 2069799624;
|
|
19117
|
+
var PG_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO tb_search_snapshots_v3(path, digest) VALUES ($1, $2)";
|
|
19118
|
+
function pgBulkInsertSql(table, columns, rows) {
|
|
19119
|
+
const tuples = [];
|
|
19120
|
+
for (let r = 0; r < rows; r++) {
|
|
19121
|
+
const placeholders = columns.map((_, c) => `$${r * columns.length + c + 1}`);
|
|
19122
|
+
tuples.push(`(${placeholders.join(", ")})`);
|
|
19123
|
+
}
|
|
19124
|
+
return `INSERT INTO ${table} (${columns.join(", ")}) VALUES ${tuples.join(", ")}`;
|
|
19125
|
+
}
|
|
19126
|
+
var PG_SEARCH_TOOLS_TABLE = "tb_search_tools_v3";
|
|
19127
|
+
var PG_SEARCH_TOOLS_COLUMNS = ["path", "name", "description", "feedback"];
|
|
19128
|
+
var PG_SEARCH_SNAPSHOTS_TABLE = "tb_search_snapshots_v3";
|
|
19129
|
+
var PG_SEARCH_SNAPSHOTS_COLUMNS = ["path", "digest"];
|
|
19130
|
+
var PG_SEARCH_INSERT_ROWS_MAX = 1e3;
|
|
19131
|
+
var META_SQL2 = `
|
|
19132
|
+
SELECT revision::int AS revision, seeded::int AS seeded, cursor_secret
|
|
19133
|
+
FROM tb_search_meta_v3 WHERE singleton = 1
|
|
19134
|
+
`;
|
|
19135
|
+
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM tb_search_snapshots_v3 ORDER BY path";
|
|
19136
|
+
var PATH_STATE_SQL2 = `
|
|
19137
|
+
SELECT snapshots.digest,
|
|
19138
|
+
EXISTS(SELECT 1 FROM tb_search_tools_v3 WHERE path = $1)::int AS has_tools,
|
|
19139
|
+
(SELECT COUNT(*) FROM tb_search_snapshots_v3)::int AS path_count
|
|
19140
|
+
FROM (SELECT 1) AS singleton
|
|
19141
|
+
LEFT JOIN tb_search_snapshots_v3 AS snapshots ON snapshots.path = $2
|
|
19142
|
+
`;
|
|
19143
|
+
var PRESENT_SQL2 = "SELECT 1 AS present FROM tb_search_tools_v3 WHERE path = $1 LIMIT 1";
|
|
19144
|
+
var PRESENT_PREFIX_SQL2 = `
|
|
19145
|
+
SELECT 1 AS present FROM tb_search_tools_v3
|
|
19146
|
+
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19147
|
+
LIMIT 1
|
|
19148
|
+
`;
|
|
19149
|
+
var DELETE_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v3 WHERE path = $1";
|
|
19150
|
+
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM tb_search_snapshots_v3 WHERE path = $1";
|
|
19151
|
+
var DELETE_TOOLS_PREFIX_SQL2 = `
|
|
19152
|
+
DELETE FROM tb_search_tools_v3
|
|
19153
|
+
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19154
|
+
`;
|
|
19155
|
+
var DELETE_SNAPSHOT_PREFIX_SQL2 = `
|
|
19156
|
+
DELETE FROM tb_search_snapshots_v3
|
|
19157
|
+
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19158
|
+
`;
|
|
19159
|
+
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v3";
|
|
19160
|
+
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM tb_search_snapshots_v3";
|
|
19161
|
+
var BUMP_REVISION_SQL2 = "UPDATE tb_search_meta_v3 SET revision = revision + 1 WHERE singleton = 1";
|
|
19162
|
+
var COMPLETE_REBUILD_SQL2 = "UPDATE tb_search_meta_v3 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
19163
|
+
function pgCandidateStatement(query, limit, offset) {
|
|
19164
|
+
const patterns = toolSearchLikePatterns(query);
|
|
19165
|
+
const matchClauses = patterns.map((_, i) => {
|
|
19166
|
+
const p = `$${i + 1}`;
|
|
19167
|
+
return `(name ILIKE ${p} ESCAPE '!' OR description ILIKE ${p} ESCAPE '!' OR feedback ILIKE ${p} ESCAPE '!')`;
|
|
19168
|
+
});
|
|
19169
|
+
const scoreTerms = patterns.map((_, i) => {
|
|
19170
|
+
const p = `$${i + 1}`;
|
|
19171
|
+
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`;
|
|
19172
|
+
});
|
|
19173
|
+
const limitParam = `$${patterns.length + 1}`;
|
|
19174
|
+
const offsetParam = `$${patterns.length + 2}`;
|
|
19175
|
+
return {
|
|
19176
|
+
params: [...patterns, limit + 1, offset],
|
|
19177
|
+
sql: `
|
|
19178
|
+
SELECT id, path, name, (${scoreTerms.join(" + ")}) AS score
|
|
19179
|
+
FROM tb_search_tools_v3
|
|
19180
|
+
WHERE ${matchClauses.join(" AND ")}
|
|
19181
|
+
ORDER BY score DESC, path, name
|
|
19182
|
+
LIMIT ${limitParam} OFFSET ${offsetParam}
|
|
19183
|
+
`
|
|
19184
|
+
};
|
|
19185
|
+
}
|
|
19186
|
+
var pgSearchDialect = {
|
|
19187
|
+
candidateStatement: pgCandidateStatement,
|
|
19188
|
+
schemaStatements: PG_SEARCH_SCHEMA_STATEMENTS,
|
|
19189
|
+
statements: {
|
|
19190
|
+
bumpRevision: BUMP_REVISION_SQL2,
|
|
19191
|
+
completeRebuild: COMPLETE_REBUILD_SQL2,
|
|
19192
|
+
deleteAllSnapshots: DELETE_ALL_SNAPSHOTS_SQL2,
|
|
19193
|
+
deleteAllTools: DELETE_ALL_TOOLS_SQL2,
|
|
19194
|
+
deleteSnapshot: DELETE_SNAPSHOT_SQL2,
|
|
19195
|
+
deleteSnapshotPrefix: DELETE_SNAPSHOT_PREFIX_SQL2,
|
|
19196
|
+
deleteTools: DELETE_TOOLS_SQL2,
|
|
19197
|
+
deleteToolsPrefix: DELETE_TOOLS_PREFIX_SQL2,
|
|
19198
|
+
insertSnapshot: PG_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
19199
|
+
meta: META_SQL2,
|
|
19200
|
+
pathState: PATH_STATE_SQL2,
|
|
19201
|
+
present: PRESENT_SQL2,
|
|
19202
|
+
presentPrefix: PRESENT_PREFIX_SQL2,
|
|
19203
|
+
snapshotDigests: SNAPSHOT_DIGESTS_SQL2
|
|
19204
|
+
}
|
|
19205
|
+
};
|
|
19206
|
+
|
|
19021
19207
|
// ../core/src/secret/secretStore.ts
|
|
19022
19208
|
var AES_GCM_IV_BYTES = 12;
|
|
19023
19209
|
var MASTER_KEY_BYTES = 32;
|
|
@@ -19792,10 +19978,9 @@ var NodeRegistryStore = class {
|
|
|
19792
19978
|
* 只扫子树(前缀限定),不再对全树做内存过滤——避免 children/hasChildren/subtree 的
|
|
19793
19979
|
* O(N²)(每层各扫全树)。`opts.limit` 传给底层 `store.list` 以小步取(hasChildren 短路用)。
|
|
19794
19980
|
*
|
|
19795
|
-
* **Workers
|
|
19796
|
-
*
|
|
19797
|
-
* (
|
|
19798
|
-
* 需改 KV metadata 承载值(list 不再逐 get)或换 SQLite 宿主。
|
|
19981
|
+
* **Workers 查询预算约束**:D1StateStore.list 是单条 SQL 直接带值返回(ADR-001 迁 D1 后
|
|
19982
|
+
* 不再逐键 get),每页只花一次 D1 查询;但 Workers 单请求仍有查询/子请求预算,深翻页的
|
|
19983
|
+
* 页数应远小于预算——当前树规模小(节点数十级)可接受。
|
|
19799
19984
|
*/
|
|
19800
19985
|
async scanPrefix(keyPrefix, opts) {
|
|
19801
19986
|
const out = [];
|
|
@@ -20074,6 +20259,7 @@ export {
|
|
|
20074
20259
|
KEY_PLUGIN,
|
|
20075
20260
|
KEY_BOOTSTRAPPED,
|
|
20076
20261
|
KEY_FEEDBACK,
|
|
20262
|
+
prefixUpperBound,
|
|
20077
20263
|
AnnotationStore,
|
|
20078
20264
|
checkScopes,
|
|
20079
20265
|
check2 as check,
|
|
@@ -20185,6 +20371,14 @@ export {
|
|
|
20185
20371
|
TOOL_SEARCH_INSERT_SQL,
|
|
20186
20372
|
TOOL_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
20187
20373
|
SqlSearchIndex,
|
|
20374
|
+
PG_SEARCH_WRITE_LOCK_KEY,
|
|
20375
|
+
pgBulkInsertSql,
|
|
20376
|
+
PG_SEARCH_TOOLS_TABLE,
|
|
20377
|
+
PG_SEARCH_TOOLS_COLUMNS,
|
|
20378
|
+
PG_SEARCH_SNAPSHOTS_TABLE,
|
|
20379
|
+
PG_SEARCH_SNAPSHOTS_COLUMNS,
|
|
20380
|
+
PG_SEARCH_INSERT_ROWS_MAX,
|
|
20381
|
+
pgSearchDialect,
|
|
20188
20382
|
SecretStoreImpl,
|
|
20189
20383
|
SKILLHUB_CAPABILITIES,
|
|
20190
20384
|
skillhubScopeForCmd,
|