@tool-bridge/server 0.13.0 → 0.14.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-E2TJFCGB.js → airtable-NVGQVZJW.js} +4 -4
- package/dist/{alt_text_generator_ai-UBV5H2N3.js → alt_text_generator_ai-WF7NHVWE.js} +4 -4
- package/dist/{amap-ASVRIYPW.js → amap-EPI7AQ4O.js} +4 -4
- package/dist/{anthropic-LQSJWGV3.js → anthropic-KVYWBZIV.js} +4 -4
- package/dist/{apify-CL4YK6HT.js → apify-MB56RQIA.js} +4 -4
- package/dist/{brave_search-WZQF2QWE.js → brave_search-JDAGJ7PO.js} +4 -4
- package/dist/{chunk-4U5OQW7F.js → chunk-ABHHWYEV.js} +161 -194
- package/dist/{chunk-BK2ZIWLD.js → chunk-BWGAV3MR.js} +2 -2
- package/dist/{chunk-HIROW6TB.js → chunk-CDOWN2AB.js} +1 -1
- package/dist/{chunk-P4TQJHBO.js → chunk-HGIPJFHA.js} +1 -1
- package/dist/{chunk-M4LHMRRY.js → chunk-X6LLG5OZ.js} +34 -33
- package/dist/{circleci-EHGI2HKR.js → circleci-2IL5RU2O.js} +4 -4
- package/dist/{clerk-OUN4SX22.js → clerk-A5YYGWYM.js} +4 -4
- package/dist/{cloudflare_dns-DMU3WOPG.js → cloudflare_dns-GUA5BUWO.js} +4 -4
- package/dist/{cohere-3HDSCQIB.js → cohere-BS27QMKR.js} +4 -4
- package/dist/{confluence-YPZXKQTQ.js → confluence-675IWLHU.js} +4 -4
- package/dist/{convertapi-47ENNUBY.js → convertapi-DGKXP2T3.js} +4 -4
- package/dist/{currencyapi-IX4ICDZA.js → currencyapi-PFH3UKVU.js} +4 -4
- package/dist/{deepseek-SCOPJSA6.js → deepseek-5U3STDGY.js} +4 -4
- package/dist/{docker_hub-2DXJVAP4.js → docker_hub-UVXRU2L3.js} +4 -4
- package/dist/{dropbox-LE2OM2SR.js → dropbox-BC54XUXF.js} +4 -4
- package/dist/{dub-7LKKJADI.js → dub-GV5M6PWD.js} +4 -4
- package/dist/{e2b-P3EOM65Q.js → e2b-KEQ3PYPV.js} +4 -4
- package/dist/{exa-AETANJQ3.js → exa-OGQR7D47.js} +4 -4
- package/dist/{fal_ai-VWAMTEZE.js → fal_ai-ULI6YF4O.js} +4 -4
- package/dist/{feishu-VQMM3APW.js → feishu-YWLRRUGP.js} +3 -3
- package/dist/{feishu_custom_bot-HEK63AP3.js → feishu_custom_bot-7HP4UHB7.js} +4 -4
- package/dist/{figma-7JMV3B5O.js → figma-BFGC24YI.js} +4 -4
- package/dist/{firehydrant-SOU4P7SE.js → firehydrant-R6DG7SBL.js} +4 -4
- package/dist/{fixer-KELXNOIQ.js → fixer-ZVXOVTMF.js} +4 -4
- package/dist/{fly-Y26QH6AC.js → fly-EBKWMDWV.js} +4 -4
- package/dist/{front-2RUHP54Y.js → front-CFWVIQYX.js} +4 -4
- package/dist/{geocodio-BTSXWU55.js → geocodio-N27RDBFV.js} +4 -4
- package/dist/{ghost-BA55ISIU.js → ghost-2HT2SJYO.js} +4 -4
- package/dist/{github-VUYFDSHK.js → github-ZDLAIRXP.js} +4 -4
- package/dist/{gmail-3Z2WCVLT.js → gmail-TICKPP6S.js} +4 -4
- package/dist/{googlecalendar-LZKRUXHY.js → googlecalendar-GUR47UTF.js} +4 -4
- package/dist/{googledocs-RBK2HMPZ.js → googledocs-QGDIJA4S.js} +4 -4
- package/dist/{grafana-E626W3N3.js → grafana-33Y3WEU5.js} +4 -4
- package/dist/{graphhopper-YNURJCFZ.js → graphhopper-KWTMYEVH.js} +4 -4
- package/dist/index.d.ts +11 -11
- package/dist/index.js +2 -2
- package/dist/{ip2proxy-4DAJUOUR.js → ip2proxy-4SAYDJPQ.js} +4 -4
- package/dist/{ipgeolocation_io-3BUSFLVD.js → ipgeolocation_io-4WT2WKHF.js} +4 -4
- package/dist/{ipqualityscore-7DKMRMEQ.js → ipqualityscore-VGZCROJJ.js} +4 -4
- package/dist/{jina_ai-NXXZRPT6.js → jina_ai-X5VJVORK.js} +4 -4
- package/dist/{jira-UG7ZIKSW.js → jira-XUAF2UPM.js} +4 -4
- package/dist/{langsmith-66IP4KJ6.js → langsmith-RRLFNL6D.js} +4 -4
- package/dist/{lemlist-MVB4EQMS.js → lemlist-KQKG6JHM.js} +4 -4
- package/dist/{linear-6UC3AFY3.js → linear-I32UBCBL.js} +4 -4
- package/dist/{logsnag-NFJM6O4U.js → logsnag-TVNUQEM7.js} +4 -4
- package/dist/main.js +101 -101
- package/dist/{mattermost-FTJER2B6.js → mattermost-OCIA7Z4P.js} +4 -4
- package/dist/{mem0-RR5ALUKD.js → mem0-FARYP2ZM.js} +4 -4
- package/dist/{memos-WOAY3T76.js → memos-6M6QEUYI.js} +4 -4
- package/dist/{metabase-ZYG7NBPU.js → metabase-VCNMPHIR.js} +4 -4
- package/dist/{mistral_ai-FTCSXHJ5.js → mistral_ai-SMPVEWBM.js} +4 -4
- package/dist/{mother_duck-ZMIGT5ZK.js → mother_duck-CMHFH5A6.js} +4 -4
- package/dist/{ngrok-TEDZ4WUB.js → ngrok-WRQJ3X54.js} +4 -4
- package/dist/{notes-4KZGQBRF.js → notes-HLPED7H7.js} +2 -2
- package/dist/{notion-ERLC3SKM.js → notion-FFCK2KZ4.js} +4 -4
- package/dist/{open_exchange_rates-GBBHZLUS.js → open_exchange_rates-VKQICRS6.js} +4 -4
- package/dist/{openai-24N26QWI.js → openai-PJDJ2AZ2.js} +4 -4
- package/dist/{opengraph_io-MTN4TTXP.js → opengraph_io-DMQQXMEC.js} +4 -4
- package/dist/{openrouter-BK6BL7EH.js → openrouter-I52ZZHQT.js} +4 -4
- package/dist/{outline-O3LF5SNM.js → outline-I6EIBEHQ.js} +4 -4
- package/dist/{paddle-IEDD5BMW.js → paddle-4DU7GKCS.js} +4 -4
- package/dist/{perplexity-HGPLFK72.js → perplexity-DE6K444O.js} +4 -4
- package/dist/{pinecone-FTWR4JVG.js → pinecone-KMRF5YWJ.js} +4 -4
- package/dist/{pipedrive-DDMA36AB.js → pipedrive-4OC5UU3L.js} +4 -4
- package/dist/{polar-YFGTOQYM.js → polar-OACUFN7P.js} +4 -4
- package/dist/{posthog-GFEFPIH3.js → posthog-PSGNT66O.js} +4 -4
- package/dist/{postmark-N7YCE2DZ.js → postmark-CSOVREPD.js} +4 -4
- package/dist/{prerender-B77XIKL7.js → prerender-B7M6SAIA.js} +4 -4
- package/dist/{pubmed-XAFQSOCJ.js → pubmed-JJ5URMS6.js} +4 -4
- package/dist/{railway-DJ4P5DAJ.js → railway-VO42EWHC.js} +4 -4
- package/dist/{readwise-UNBGXBYC.js → readwise-O7I4HLU4.js} +4 -4
- package/dist/{render-Z43FLDJ3.js → render-24X3H3WB.js} +4 -4
- package/dist/{replicate-BZAMQO7R.js → replicate-TO6OPISC.js} +4 -4
- package/dist/{resend-MFUW2LNU.js → resend-IBVGUV4X.js} +4 -4
- package/dist/{rootly-5CHCWRPM.js → rootly-MD5GFDUC.js} +4 -4
- package/dist/{scrapfly-36O4IJDA.js → scrapfly-ZKDGE4IL.js} +4 -4
- package/dist/{scrapingbee-JK6HZA75.js → scrapingbee-2FVX2BFI.js} +4 -4
- package/dist/{screenshot_fyi-BDEL4D53.js → screenshot_fyi-HNPNS43Z.js} +4 -4
- package/dist/{semantic_scholar-QHHG7RWT.js → semantic_scholar-EJ2CYAKO.js} +4 -4
- package/dist/{sentry-OCUW4KNC.js → sentry-DXB3CQZA.js} +4 -4
- package/dist/{shodan-5UBQ6RKP.js → shodan-HEFZ6NHP.js} +4 -4
- package/dist/{shopify-OXIMRVHL.js → shopify-SUN5J257.js} +4 -4
- package/dist/{stripe-W5XRW7WG.js → stripe-N3HNTHD5.js} +4 -4
- package/dist/{supabase-DIC7ZIG7.js → supabase-IMZ6YRES.js} +4 -4
- package/dist/{tavily-NVWQPGF3.js → tavily-QMPSOIGW.js} +4 -4
- package/dist/{telegram-S755MPMM.js → telegram-SHZX3C73.js} +4 -4
- package/dist/{telnyx-MXRX75AP.js → telnyx-SF6KMQ7W.js} +4 -4
- package/dist/{todoist-MNVUPHIF.js → todoist-Y252DAZ2.js} +4 -4
- package/dist/{trello-T7JLVYU4.js → trello-BTRC6I5Y.js} +4 -4
- package/dist/{turso-JDBW2RN4.js → turso-SB4KFTUP.js} +4 -4
- package/dist/{twilio-EGYNUGMZ.js → twilio-CRRJZ6MR.js} +4 -4
- package/dist/{umami-QF2V23Z5.js → umami-7PJKITQ5.js} +4 -4
- package/dist/{unsplash-VWTABYWL.js → unsplash-PYZXMXH2.js} +4 -4
- package/dist/{upstash_redis-FKUGE73T.js → upstash_redis-L2IJTHFW.js} +4 -4
- package/dist/{uptimerobot-55LTBUWA.js → uptimerobot-XDYEYFJQ.js} +4 -4
- package/dist/{v2ex-LGG6X53N.js → v2ex-TNACDCAO.js} +4 -4
- package/dist/{vercel-VAZGWMOZ.js → vercel-QRU4UC5M.js} +4 -4
- package/dist/{wolfram_alpha_api-YLVVZTPP.js → wolfram_alpha_api-TS663Q5L.js} +4 -4
- package/dist/{wordpress-6LDTITVV.js → wordpress-RTEUS26Y.js} +4 -4
- package/dist/{workos-ML6NIEEP.js → workos-4NGPU4VP.js} +4 -4
- package/dist/{zhihu-CACG2ZNY.js → zhihu-GGLOXAVO.js} +4 -4
- package/package.json +5 -5
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BWGAV3MR.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-HGIPJFHA.js";
|
|
9
|
+
import "./chunk-CDOWN2AB.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABHHWYEV.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-BWGAV3MR.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-HGIPJFHA.js";
|
|
9
|
+
import "./chunk-CDOWN2AB.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABHHWYEV.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-BWGAV3MR.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-HGIPJFHA.js";
|
|
9
|
+
import "./chunk-CDOWN2AB.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABHHWYEV.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-BWGAV3MR.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-HGIPJFHA.js";
|
|
9
|
+
import "./chunk-CDOWN2AB.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABHHWYEV.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-BWGAV3MR.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-HGIPJFHA.js";
|
|
9
|
+
import "./chunk-CDOWN2AB.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABHHWYEV.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-BWGAV3MR.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-HGIPJFHA.js";
|
|
9
|
+
import "./chunk-CDOWN2AB.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ABHHWYEV.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/brave_search/api.ts
|
|
@@ -16830,8 +16830,8 @@ var SCOPE_BY_CMD = {
|
|
|
16830
16830
|
update: "write",
|
|
16831
16831
|
delete: "write"
|
|
16832
16832
|
};
|
|
16833
|
-
function contextScopeForCmd(
|
|
16834
|
-
return SCOPE_BY_CMD[
|
|
16833
|
+
function contextScopeForCmd(command) {
|
|
16834
|
+
return SCOPE_BY_CMD[command] ?? null;
|
|
16835
16835
|
}
|
|
16836
16836
|
var OPTS_SCHEMA = {
|
|
16837
16837
|
type: "object",
|
|
@@ -17432,7 +17432,9 @@ function deviceShellHelpModel(nodePath, shell = {}) {
|
|
|
17432
17432
|
};
|
|
17433
17433
|
return {
|
|
17434
17434
|
node: { path: nodePath, kind: "device", description: shell.description ?? SHELL_DESCRIPTION },
|
|
17435
|
-
|
|
17435
|
+
// exec 是节点下的虚拟命令叶子;HelpModel 必须宣告完整直连路径,Dashboard、CLI
|
|
17436
|
+
// 与 Agent 都直接消费该字段,不能退回只指向 shell 节点的旧信封语义。
|
|
17437
|
+
cmds: withCommandPaths(nodePath, [exec])
|
|
17436
17438
|
};
|
|
17437
17439
|
}
|
|
17438
17440
|
function deviceFsHelpModel(node, opts = {}) {
|
|
@@ -18474,6 +18476,8 @@ var TOOL_SEARCH_SNAPSHOT_CHUNKS_MAX = Math.ceil(
|
|
|
18474
18476
|
);
|
|
18475
18477
|
var TOOL_SEARCH_REBUILD_CHUNKS_MAX = TOOL_SEARCH_SOURCE_CHUNKS_MAX + TOOL_SEARCH_SNAPSHOT_CHUNKS_MAX;
|
|
18476
18478
|
var TOOL_SEARCH_TERM_LIMIT = 32;
|
|
18479
|
+
var TOOL_SEARCH_UNIT_LIMIT = 98;
|
|
18480
|
+
var TOOL_SEARCH_LIKE_PATTERN_BYTES_MAX = 50;
|
|
18477
18481
|
var TOOL_SEARCH_QUERY_MAX = 1024;
|
|
18478
18482
|
var TOOL_SEARCH_CURSOR_OFFSET_MAX = 1e6;
|
|
18479
18483
|
function assertKeywordToolSearchMode(opts) {
|
|
@@ -18641,25 +18645,70 @@ function likePattern(term) {
|
|
|
18641
18645
|
const escaped = term.replaceAll("!", "!!").replaceAll("%", "!%").replaceAll("_", "!_");
|
|
18642
18646
|
return `%${escaped}%`;
|
|
18643
18647
|
}
|
|
18644
|
-
function
|
|
18645
|
-
|
|
18646
|
-
|
|
18647
|
-
|
|
18648
|
+
function likePatternBytes(term) {
|
|
18649
|
+
return new TextEncoder().encode(likePattern(term)).length;
|
|
18650
|
+
}
|
|
18651
|
+
function isCjkCodePoint(value) {
|
|
18652
|
+
return new RegExp("^(?:\\p{Script=Han}|\\p{Script=Hiragana}|\\p{Script=Katakana}|\\p{Script=Hangul})$", "u").test(value);
|
|
18653
|
+
}
|
|
18654
|
+
function scriptRuns(term) {
|
|
18655
|
+
const runs = [];
|
|
18656
|
+
for (const codePoint of term) {
|
|
18657
|
+
const cjk = isCjkCodePoint(codePoint);
|
|
18658
|
+
const current = runs.at(-1);
|
|
18659
|
+
if (current?.cjk === cjk) current.codePoints.push(codePoint);
|
|
18660
|
+
else runs.push({ cjk, codePoints: [codePoint] });
|
|
18648
18661
|
}
|
|
18649
|
-
return
|
|
18662
|
+
return runs;
|
|
18650
18663
|
}
|
|
18651
|
-
function
|
|
18652
|
-
const
|
|
18653
|
-
|
|
18664
|
+
function addSearchUnit(units, value, tier) {
|
|
18665
|
+
const pattern = likePattern(value);
|
|
18666
|
+
if (new TextEncoder().encode(pattern).length > TOOL_SEARCH_LIKE_PATTERN_BYTES_MAX) return false;
|
|
18667
|
+
const existing = units.get(pattern);
|
|
18668
|
+
if (existing === void 0 || tier > existing.tier) {
|
|
18669
|
+
units.set(pattern, { pattern, tier });
|
|
18670
|
+
}
|
|
18671
|
+
return true;
|
|
18672
|
+
}
|
|
18673
|
+
function addChunkedSearchUnits(units, value, tier) {
|
|
18674
|
+
let chunk = "";
|
|
18675
|
+
for (const codePoint of value) {
|
|
18676
|
+
if (likePatternBytes(chunk + codePoint) <= TOOL_SEARCH_LIKE_PATTERN_BYTES_MAX) {
|
|
18677
|
+
chunk += codePoint;
|
|
18678
|
+
continue;
|
|
18679
|
+
}
|
|
18680
|
+
if (chunk.length > 0) addSearchUnit(units, chunk, tier);
|
|
18681
|
+
chunk = codePoint;
|
|
18682
|
+
}
|
|
18683
|
+
if (chunk.length > 0) addSearchUnit(units, chunk, tier);
|
|
18684
|
+
}
|
|
18685
|
+
function prepareToolSearchUnits(query) {
|
|
18686
|
+
const terms = normalizeToolSearchQuery(query).split(/\s+/u);
|
|
18654
18687
|
if (terms.length > TOOL_SEARCH_TERM_LIMIT) {
|
|
18655
18688
|
throw new TBError("invalid_argument", `\u641C\u7D22 query \u6700\u591A ${TOOL_SEARCH_TERM_LIMIT} \u4E2A terms`);
|
|
18656
18689
|
}
|
|
18657
|
-
const
|
|
18658
|
-
const
|
|
18659
|
-
|
|
18660
|
-
|
|
18661
|
-
|
|
18662
|
-
|
|
18690
|
+
const units = /* @__PURE__ */ new Map();
|
|
18691
|
+
for (const term of terms) {
|
|
18692
|
+
const wholeAdded = addSearchUnit(units, term, 4);
|
|
18693
|
+
const runs = scriptRuns(term);
|
|
18694
|
+
if (runs.length > 1) {
|
|
18695
|
+
for (const run of runs) {
|
|
18696
|
+
const value = run.codePoints.join("");
|
|
18697
|
+
if (run.cjk) addSearchUnit(units, value, 2);
|
|
18698
|
+
else addChunkedSearchUnits(units, value, 2);
|
|
18699
|
+
}
|
|
18700
|
+
} else if (!wholeAdded && runs[0]?.cjk === false) {
|
|
18701
|
+
addChunkedSearchUnits(units, term, 2);
|
|
18702
|
+
}
|
|
18703
|
+
for (const run of runs) {
|
|
18704
|
+
if (!run.cjk) continue;
|
|
18705
|
+
for (let index = 0; index < run.codePoints.length - 1; index += 1) {
|
|
18706
|
+
addSearchUnit(units, run.codePoints.slice(index, index + 2).join(""), 2);
|
|
18707
|
+
}
|
|
18708
|
+
for (const codePoint of run.codePoints) addSearchUnit(units, codePoint, 1);
|
|
18709
|
+
}
|
|
18710
|
+
}
|
|
18711
|
+
return [...units.values()].sort((left, right) => right.tier - left.tier).slice(0, TOOL_SEARCH_UNIT_LIMIT);
|
|
18663
18712
|
}
|
|
18664
18713
|
function cursorBase64UrlDecode(value) {
|
|
18665
18714
|
if (value.length === 0 || value.length > 4096) {
|
|
@@ -18732,35 +18781,9 @@ async function decodeToolSearchCursor(cursor, query, mode, revision, secret) {
|
|
|
18732
18781
|
return payload.o ?? 0;
|
|
18733
18782
|
}
|
|
18734
18783
|
|
|
18735
|
-
// ../core/src/search/shortTermSql.ts
|
|
18736
|
-
function shortTermsSql(patterns) {
|
|
18737
|
-
return `short_terms(pattern) AS (VALUES ${patterns.map(() => "(?)").join(", ")})`;
|
|
18738
|
-
}
|
|
18739
|
-
var SHORT_MATCH_SQL = `
|
|
18740
|
-
NOT EXISTS (
|
|
18741
|
-
SELECT 1 FROM short_terms
|
|
18742
|
-
WHERE tools.name NOT LIKE pattern ESCAPE '!'
|
|
18743
|
-
AND tools.description NOT LIKE pattern ESCAPE '!'
|
|
18744
|
-
AND tools.feedback NOT LIKE pattern ESCAPE '!'
|
|
18745
|
-
)
|
|
18746
|
-
`;
|
|
18747
|
-
var SHORT_SCORE_SQL = `
|
|
18748
|
-
(
|
|
18749
|
-
SELECT COALESCE(SUM(
|
|
18750
|
-
CASE
|
|
18751
|
-
WHEN tools.name LIKE pattern ESCAPE '!' THEN 10
|
|
18752
|
-
WHEN tools.description LIKE pattern ESCAPE '!' THEN 3
|
|
18753
|
-
WHEN tools.feedback LIKE pattern ESCAPE '!' THEN 1
|
|
18754
|
-
ELSE 0
|
|
18755
|
-
END
|
|
18756
|
-
), 0)
|
|
18757
|
-
FROM short_terms
|
|
18758
|
-
)
|
|
18759
|
-
`;
|
|
18760
|
-
|
|
18761
18784
|
// ../core/src/search/sqlSearchIndex.ts
|
|
18762
18785
|
var TOOL_SEARCH_SCHEMA_STATEMENTS = [
|
|
18763
|
-
`CREATE TABLE IF NOT EXISTS
|
|
18786
|
+
`CREATE TABLE IF NOT EXISTS tb_search_tools_v4 (
|
|
18764
18787
|
id INTEGER PRIMARY KEY,
|
|
18765
18788
|
path TEXT NOT NULL,
|
|
18766
18789
|
name TEXT NOT NULL,
|
|
@@ -18768,135 +18791,99 @@ var TOOL_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
18768
18791
|
feedback TEXT NOT NULL DEFAULT '',
|
|
18769
18792
|
UNIQUE(path, name)
|
|
18770
18793
|
)`,
|
|
18771
|
-
`CREATE
|
|
18772
|
-
name,
|
|
18773
|
-
description,
|
|
18774
|
-
feedback,
|
|
18775
|
-
content='tb_search_tools_v3',
|
|
18776
|
-
content_rowid='id',
|
|
18777
|
-
tokenize='trigram'
|
|
18778
|
-
)`,
|
|
18779
|
-
`CREATE TRIGGER IF NOT EXISTS tb_search_tools_v3_ai AFTER INSERT ON tb_search_tools_v3 BEGIN
|
|
18780
|
-
INSERT INTO tb_search_tools_fts_v3(rowid, name, description, feedback)
|
|
18781
|
-
VALUES (new.id, new.name, new.description, new.feedback);
|
|
18782
|
-
END`,
|
|
18783
|
-
`CREATE TRIGGER IF NOT EXISTS tb_search_tools_v3_ad AFTER DELETE ON tb_search_tools_v3 BEGIN
|
|
18784
|
-
INSERT INTO tb_search_tools_fts_v3(tb_search_tools_fts_v3, rowid, name, description, feedback)
|
|
18785
|
-
VALUES ('delete', old.id, old.name, old.description, old.feedback);
|
|
18786
|
-
END`,
|
|
18787
|
-
`CREATE TRIGGER IF NOT EXISTS tb_search_tools_v3_au
|
|
18788
|
-
AFTER UPDATE OF name, description, feedback ON tb_search_tools_v3 BEGIN
|
|
18789
|
-
INSERT INTO tb_search_tools_fts_v3(tb_search_tools_fts_v3, rowid, name, description, feedback)
|
|
18790
|
-
VALUES ('delete', old.id, old.name, old.description, old.feedback);
|
|
18791
|
-
INSERT INTO tb_search_tools_fts_v3(rowid, name, description, feedback)
|
|
18792
|
-
VALUES (new.id, new.name, new.description, new.feedback);
|
|
18793
|
-
END`,
|
|
18794
|
-
`CREATE TABLE IF NOT EXISTS tb_search_meta_v3 (
|
|
18794
|
+
`CREATE TABLE IF NOT EXISTS tb_search_meta_v4 (
|
|
18795
18795
|
singleton INTEGER PRIMARY KEY CHECK (singleton = 1),
|
|
18796
18796
|
revision INTEGER NOT NULL DEFAULT 0,
|
|
18797
18797
|
seeded INTEGER NOT NULL DEFAULT 0,
|
|
18798
18798
|
cursor_secret TEXT NOT NULL
|
|
18799
18799
|
)`,
|
|
18800
|
-
`INSERT OR IGNORE INTO
|
|
18800
|
+
`INSERT OR IGNORE INTO tb_search_meta_v4(
|
|
18801
18801
|
singleton, revision, seeded, cursor_secret
|
|
18802
18802
|
) VALUES (1, 0, 0, lower(hex(randomblob(32))))`,
|
|
18803
|
-
`CREATE TABLE IF NOT EXISTS
|
|
18803
|
+
`CREATE TABLE IF NOT EXISTS tb_search_snapshots_v4 (
|
|
18804
18804
|
path TEXT PRIMARY KEY,
|
|
18805
18805
|
digest TEXT NOT NULL
|
|
18806
18806
|
)`,
|
|
18807
|
-
`CREATE TRIGGER IF NOT EXISTS
|
|
18808
|
-
BEFORE INSERT ON
|
|
18807
|
+
`CREATE TRIGGER IF NOT EXISTS tb_search_snapshots_v4_capacity
|
|
18808
|
+
BEFORE INSERT ON tb_search_snapshots_v4
|
|
18809
18809
|
WHEN NOT EXISTS (
|
|
18810
|
-
SELECT 1 FROM
|
|
18811
|
-
) AND (SELECT COUNT(*) FROM
|
|
18810
|
+
SELECT 1 FROM tb_search_snapshots_v4 WHERE path = new.path
|
|
18811
|
+
) AND (SELECT COUNT(*) FROM tb_search_snapshots_v4) >= ${TOOL_SEARCH_AUDIT_NODE_LIMIT}
|
|
18812
18812
|
BEGIN
|
|
18813
18813
|
SELECT RAISE(ABORT, 'tb_search_path_capacity');
|
|
18814
18814
|
END`
|
|
18815
18815
|
];
|
|
18816
18816
|
var TOOL_SEARCH_CAPACITY_MARKER = "tb_search_path_capacity";
|
|
18817
18817
|
var TOOL_SEARCH_INSERT_SQL = `
|
|
18818
|
-
INSERT INTO
|
|
18818
|
+
INSERT INTO tb_search_tools_v4 (path, name, description, feedback)
|
|
18819
18819
|
VALUES (?, ?, ?, ?)
|
|
18820
18820
|
`;
|
|
18821
|
-
var TOOL_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO
|
|
18822
|
-
var META_SQL = "SELECT revision, seeded, cursor_secret FROM
|
|
18823
|
-
var SNAPSHOT_DIGESTS_SQL = "SELECT path, digest FROM
|
|
18821
|
+
var TOOL_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO tb_search_snapshots_v4(path, digest) VALUES (?, ?)";
|
|
18822
|
+
var META_SQL = "SELECT revision, seeded, cursor_secret FROM tb_search_meta_v4 WHERE singleton = 1";
|
|
18823
|
+
var SNAPSHOT_DIGESTS_SQL = "SELECT path, digest FROM tb_search_snapshots_v4 ORDER BY path";
|
|
18824
18824
|
var PATH_STATE_SQL = `
|
|
18825
18825
|
SELECT snapshots.digest,
|
|
18826
|
-
EXISTS(SELECT 1 FROM
|
|
18827
|
-
(SELECT COUNT(*) FROM
|
|
18826
|
+
EXISTS(SELECT 1 FROM tb_search_tools_v4 WHERE path = ?) AS has_tools,
|
|
18827
|
+
(SELECT COUNT(*) FROM tb_search_snapshots_v4) AS path_count
|
|
18828
18828
|
FROM (SELECT 1) AS singleton
|
|
18829
|
-
LEFT JOIN
|
|
18829
|
+
LEFT JOIN tb_search_snapshots_v4 AS snapshots ON snapshots.path = ?
|
|
18830
18830
|
`;
|
|
18831
|
-
var PRESENT_SQL = "SELECT 1 AS present FROM
|
|
18831
|
+
var PRESENT_SQL = "SELECT 1 AS present FROM tb_search_tools_v4 WHERE path = ? LIMIT 1";
|
|
18832
18832
|
var PRESENT_PREFIX_SQL = `
|
|
18833
|
-
SELECT 1 AS present FROM
|
|
18833
|
+
SELECT 1 AS present FROM tb_search_tools_v4
|
|
18834
18834
|
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
18835
18835
|
LIMIT 1
|
|
18836
18836
|
`;
|
|
18837
|
-
var DELETE_TOOLS_SQL = "DELETE FROM
|
|
18838
|
-
var DELETE_SNAPSHOT_SQL = "DELETE FROM
|
|
18837
|
+
var DELETE_TOOLS_SQL = "DELETE FROM tb_search_tools_v4 WHERE path = ?";
|
|
18838
|
+
var DELETE_SNAPSHOT_SQL = "DELETE FROM tb_search_snapshots_v4 WHERE path = ?";
|
|
18839
18839
|
var DELETE_TOOLS_PREFIX_SQL = `
|
|
18840
|
-
DELETE FROM
|
|
18840
|
+
DELETE FROM tb_search_tools_v4
|
|
18841
18841
|
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
18842
18842
|
`;
|
|
18843
18843
|
var DELETE_SNAPSHOT_PREFIX_SQL = `
|
|
18844
|
-
DELETE FROM
|
|
18844
|
+
DELETE FROM tb_search_snapshots_v4
|
|
18845
18845
|
WHERE path = ? OR substr(path, 1, length(?) + 1) = ? || '/'
|
|
18846
18846
|
`;
|
|
18847
|
-
var DELETE_ALL_TOOLS_SQL = "DELETE FROM
|
|
18848
|
-
var DELETE_ALL_SNAPSHOTS_SQL = "DELETE FROM
|
|
18849
|
-
var BUMP_REVISION_SQL = "UPDATE
|
|
18850
|
-
var COMPLETE_REBUILD_SQL = "UPDATE
|
|
18851
|
-
function toolSearchCandidateStatement(
|
|
18852
|
-
|
|
18853
|
-
|
|
18854
|
-
|
|
18855
|
-
|
|
18856
|
-
WITH ${shortTermsSql(prepared.patterns)}
|
|
18857
|
-
SELECT tools.id, tools.path, tools.name, ${SHORT_SCORE_SQL} AS short_score
|
|
18858
|
-
FROM tb_search_tools_v3 AS tools
|
|
18859
|
-
WHERE ${SHORT_MATCH_SQL}
|
|
18860
|
-
ORDER BY short_score DESC, tools.path, tools.name
|
|
18861
|
-
LIMIT ? OFFSET ?
|
|
18862
|
-
`
|
|
18863
|
-
};
|
|
18864
|
-
}
|
|
18865
|
-
if (prepared.kind === "hybrid") {
|
|
18866
|
-
return {
|
|
18867
|
-
params: [...prepared.patterns, prepared.expression, limit + 1, offset],
|
|
18868
|
-
sql: `
|
|
18869
|
-
WITH ${shortTermsSql(prepared.patterns)},
|
|
18870
|
-
long_hits AS (
|
|
18871
|
-
SELECT tools.id, bm25(tb_search_tools_fts_v3, 10.0, 3.0, 1.0) AS fts_rank
|
|
18872
|
-
FROM tb_search_tools_fts_v3
|
|
18873
|
-
JOIN tb_search_tools_v3 AS tools ON tools.id = tb_search_tools_fts_v3.rowid
|
|
18874
|
-
WHERE tb_search_tools_fts_v3 MATCH ?
|
|
18875
|
-
)
|
|
18876
|
-
SELECT tools.id, tools.path, tools.name, long_hits.fts_rank,
|
|
18877
|
-
${SHORT_SCORE_SQL} AS short_score
|
|
18878
|
-
FROM long_hits
|
|
18879
|
-
JOIN tb_search_tools_v3 AS tools ON tools.id = long_hits.id
|
|
18880
|
-
WHERE ${SHORT_MATCH_SQL}
|
|
18881
|
-
ORDER BY long_hits.fts_rank, short_score DESC, tools.path, tools.name
|
|
18882
|
-
LIMIT ? OFFSET ?
|
|
18883
|
-
`
|
|
18884
|
-
};
|
|
18885
|
-
}
|
|
18847
|
+
var DELETE_ALL_TOOLS_SQL = "DELETE FROM tb_search_tools_v4";
|
|
18848
|
+
var DELETE_ALL_SNAPSHOTS_SQL = "DELETE FROM tb_search_snapshots_v4";
|
|
18849
|
+
var BUMP_REVISION_SQL = "UPDATE tb_search_meta_v4 SET revision = revision + 1 WHERE singleton = 1";
|
|
18850
|
+
var COMPLETE_REBUILD_SQL = "UPDATE tb_search_meta_v4 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
18851
|
+
function toolSearchCandidateStatement(units, limit, offset, syntax) {
|
|
18852
|
+
const values = units.map((unit, index) => `(${syntax.placeholder(index + 1)}, ${unit.tier})`).join(", ");
|
|
18853
|
+
const limitParam = syntax.placeholder(units.length + 1);
|
|
18854
|
+
const offsetParam = syntax.placeholder(units.length + 2);
|
|
18855
|
+
const like = syntax.likeOperator;
|
|
18886
18856
|
return {
|
|
18887
|
-
params: [
|
|
18857
|
+
params: [...units.map((unit) => unit.pattern), limit + 1, offset],
|
|
18888
18858
|
sql: `
|
|
18889
|
-
|
|
18890
|
-
FROM
|
|
18891
|
-
|
|
18892
|
-
|
|
18893
|
-
|
|
18894
|
-
|
|
18859
|
+
WITH units(pattern, tier) AS (VALUES ${values})
|
|
18860
|
+
SELECT * FROM (
|
|
18861
|
+
SELECT tools.id, tools.path, tools.name,
|
|
18862
|
+
(
|
|
18863
|
+
SELECT COALESCE(SUM(units.tier * CASE
|
|
18864
|
+
WHEN tools.name ${like} units.pattern ESCAPE '!' THEN 10
|
|
18865
|
+
WHEN tools.path ${like} units.pattern ESCAPE '!' THEN 5
|
|
18866
|
+
WHEN tools.description ${like} units.pattern ESCAPE '!' THEN 3
|
|
18867
|
+
WHEN tools.feedback ${like} units.pattern ESCAPE '!' THEN 1
|
|
18868
|
+
ELSE 0
|
|
18869
|
+
END), 0)
|
|
18870
|
+
FROM units
|
|
18871
|
+
) AS score
|
|
18872
|
+
FROM tb_search_tools_v4 AS tools
|
|
18873
|
+
) AS scored_tools
|
|
18874
|
+
WHERE score > 0
|
|
18875
|
+
ORDER BY score DESC, path, name
|
|
18876
|
+
LIMIT ${limitParam} OFFSET ${offsetParam}
|
|
18895
18877
|
`
|
|
18896
18878
|
};
|
|
18897
18879
|
}
|
|
18898
18880
|
var sqliteSearchDialect = {
|
|
18899
|
-
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(
|
|
18881
|
+
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(
|
|
18882
|
+
prepareToolSearchUnits(query),
|
|
18883
|
+
limit,
|
|
18884
|
+
offset,
|
|
18885
|
+
{ likeOperator: "LIKE", placeholder: () => "?" }
|
|
18886
|
+
),
|
|
18900
18887
|
schemaStatements: TOOL_SEARCH_SCHEMA_STATEMENTS,
|
|
18901
18888
|
statements: {
|
|
18902
18889
|
bumpRevision: BUMP_REVISION_SQL,
|
|
@@ -19082,7 +19069,7 @@ var SqlSearchIndex = class {
|
|
|
19082
19069
|
|
|
19083
19070
|
// ../core/src/search/pgSearchDialect.ts
|
|
19084
19071
|
var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
19085
|
-
`CREATE TABLE IF NOT EXISTS
|
|
19072
|
+
`CREATE TABLE IF NOT EXISTS tb_search_tools_v4 (
|
|
19086
19073
|
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
19087
19074
|
path text NOT NULL,
|
|
19088
19075
|
name text NOT NULL,
|
|
@@ -19090,13 +19077,11 @@ var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
19090
19077
|
feedback text NOT NULL DEFAULT '',
|
|
19091
19078
|
UNIQUE(path, name)
|
|
19092
19079
|
)`,
|
|
19093
|
-
// 这里**故意不建 trigram GIN
|
|
19094
|
-
//
|
|
19095
|
-
//
|
|
19096
|
-
//
|
|
19097
|
-
|
|
19098
|
-
// 若将来放宽该上限,应连同候选查询形状(拆成 UNION 或改单列检索列)一起重新评估。
|
|
19099
|
-
`CREATE TABLE IF NOT EXISTS tb_search_meta_v3 (
|
|
19080
|
+
// 这里**故意不建 trigram GIN 索引**。历史基准在 500 节点 × 8 工具(4000 行)
|
|
19081
|
+
// 样本上对单 unit 多列 ILIKE 一律选 Seq Scan;GIN 让写入和体积显著增加却未改善
|
|
19082
|
+
// 检索。4000 行只是代表样本,不是严格工具行上限(节点内还受 20KB JSON 约束);
|
|
19083
|
+
// 查询单元数或容量边界变化时,应重跑 searchBench 并重新评估查询形状与索引。
|
|
19084
|
+
`CREATE TABLE IF NOT EXISTS tb_search_meta_v4 (
|
|
19100
19085
|
singleton integer PRIMARY KEY CHECK (singleton = 1),
|
|
19101
19086
|
revision bigint NOT NULL DEFAULT 0,
|
|
19102
19087
|
seeded integer NOT NULL DEFAULT 0,
|
|
@@ -19104,32 +19089,32 @@ var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
|
19104
19089
|
)`,
|
|
19105
19090
|
// cursor_secret 需 64 hex(32 字节)。两个内置 gen_random_uuid() 去连字符正好 64
|
|
19106
19091
|
// hex,避免依赖 pgcrypto 的 gen_random_bytes(自托管 PG 未必预装 pgcrypto)。
|
|
19107
|
-
`INSERT INTO
|
|
19092
|
+
`INSERT INTO tb_search_meta_v4(singleton, revision, seeded, cursor_secret)
|
|
19108
19093
|
VALUES (
|
|
19109
19094
|
1, 0, 0,
|
|
19110
19095
|
replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '')
|
|
19111
19096
|
)
|
|
19112
19097
|
ON CONFLICT (singleton) DO NOTHING`,
|
|
19113
|
-
`CREATE TABLE IF NOT EXISTS
|
|
19098
|
+
`CREATE TABLE IF NOT EXISTS tb_search_snapshots_v4 (
|
|
19114
19099
|
path text PRIMARY KEY,
|
|
19115
19100
|
digest text NOT NULL
|
|
19116
19101
|
)`,
|
|
19117
|
-
`CREATE OR REPLACE FUNCTION
|
|
19102
|
+
`CREATE OR REPLACE FUNCTION tb_search_snapshots_v4_capacity()
|
|
19118
19103
|
RETURNS trigger AS $$
|
|
19119
19104
|
BEGIN
|
|
19120
|
-
IF (SELECT COUNT(*) FROM
|
|
19105
|
+
IF (SELECT COUNT(*) FROM tb_search_snapshots_v4) >= ${TOOL_SEARCH_AUDIT_NODE_LIMIT} THEN
|
|
19121
19106
|
RAISE EXCEPTION '${TOOL_SEARCH_CAPACITY_MARKER}';
|
|
19122
19107
|
END IF;
|
|
19123
19108
|
RETURN NEW;
|
|
19124
19109
|
END;
|
|
19125
19110
|
$$ LANGUAGE plpgsql`,
|
|
19126
|
-
`DROP TRIGGER IF EXISTS
|
|
19127
|
-
`CREATE TRIGGER
|
|
19128
|
-
BEFORE INSERT ON
|
|
19129
|
-
FOR EACH ROW EXECUTE FUNCTION
|
|
19111
|
+
`DROP TRIGGER IF EXISTS tb_search_snapshots_v4_capacity_trg ON tb_search_snapshots_v4`,
|
|
19112
|
+
`CREATE TRIGGER tb_search_snapshots_v4_capacity_trg
|
|
19113
|
+
BEFORE INSERT ON tb_search_snapshots_v4
|
|
19114
|
+
FOR EACH ROW EXECUTE FUNCTION tb_search_snapshots_v4_capacity()`
|
|
19130
19115
|
];
|
|
19131
19116
|
var PG_SEARCH_WRITE_LOCK_KEY = 2069799624;
|
|
19132
|
-
var PG_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO
|
|
19117
|
+
var PG_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO tb_search_snapshots_v4(path, digest) VALUES ($1, $2)";
|
|
19133
19118
|
function pgBulkInsertSql(table, columns, rows) {
|
|
19134
19119
|
const tuples = [];
|
|
19135
19120
|
for (let r = 0; r < rows; r++) {
|
|
@@ -19138,68 +19123,50 @@ function pgBulkInsertSql(table, columns, rows) {
|
|
|
19138
19123
|
}
|
|
19139
19124
|
return `INSERT INTO ${table} (${columns.join(", ")}) VALUES ${tuples.join(", ")}`;
|
|
19140
19125
|
}
|
|
19141
|
-
var PG_SEARCH_TOOLS_TABLE = "
|
|
19126
|
+
var PG_SEARCH_TOOLS_TABLE = "tb_search_tools_v4";
|
|
19142
19127
|
var PG_SEARCH_TOOLS_COLUMNS = ["path", "name", "description", "feedback"];
|
|
19143
|
-
var PG_SEARCH_SNAPSHOTS_TABLE = "
|
|
19128
|
+
var PG_SEARCH_SNAPSHOTS_TABLE = "tb_search_snapshots_v4";
|
|
19144
19129
|
var PG_SEARCH_SNAPSHOTS_COLUMNS = ["path", "digest"];
|
|
19145
19130
|
var PG_SEARCH_INSERT_ROWS_MAX = 1e3;
|
|
19146
19131
|
var META_SQL2 = `
|
|
19147
19132
|
SELECT revision::int AS revision, seeded::int AS seeded, cursor_secret
|
|
19148
|
-
FROM
|
|
19133
|
+
FROM tb_search_meta_v4 WHERE singleton = 1
|
|
19149
19134
|
`;
|
|
19150
|
-
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM
|
|
19135
|
+
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM tb_search_snapshots_v4 ORDER BY path";
|
|
19151
19136
|
var PATH_STATE_SQL2 = `
|
|
19152
19137
|
SELECT snapshots.digest,
|
|
19153
|
-
EXISTS(SELECT 1 FROM
|
|
19154
|
-
(SELECT COUNT(*) FROM
|
|
19138
|
+
EXISTS(SELECT 1 FROM tb_search_tools_v4 WHERE path = $1)::int AS has_tools,
|
|
19139
|
+
(SELECT COUNT(*) FROM tb_search_snapshots_v4)::int AS path_count
|
|
19155
19140
|
FROM (SELECT 1) AS singleton
|
|
19156
|
-
LEFT JOIN
|
|
19141
|
+
LEFT JOIN tb_search_snapshots_v4 AS snapshots ON snapshots.path = $2
|
|
19157
19142
|
`;
|
|
19158
|
-
var PRESENT_SQL2 = "SELECT 1 AS present FROM
|
|
19143
|
+
var PRESENT_SQL2 = "SELECT 1 AS present FROM tb_search_tools_v4 WHERE path = $1 LIMIT 1";
|
|
19159
19144
|
var PRESENT_PREFIX_SQL2 = `
|
|
19160
|
-
SELECT 1 AS present FROM
|
|
19145
|
+
SELECT 1 AS present FROM tb_search_tools_v4
|
|
19161
19146
|
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19162
19147
|
LIMIT 1
|
|
19163
19148
|
`;
|
|
19164
|
-
var DELETE_TOOLS_SQL2 = "DELETE FROM
|
|
19165
|
-
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM
|
|
19149
|
+
var DELETE_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v4 WHERE path = $1";
|
|
19150
|
+
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM tb_search_snapshots_v4 WHERE path = $1";
|
|
19166
19151
|
var DELETE_TOOLS_PREFIX_SQL2 = `
|
|
19167
|
-
DELETE FROM
|
|
19152
|
+
DELETE FROM tb_search_tools_v4
|
|
19168
19153
|
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19169
19154
|
`;
|
|
19170
19155
|
var DELETE_SNAPSHOT_PREFIX_SQL2 = `
|
|
19171
|
-
DELETE FROM
|
|
19156
|
+
DELETE FROM tb_search_snapshots_v4
|
|
19172
19157
|
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19173
19158
|
`;
|
|
19174
|
-
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM
|
|
19175
|
-
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM
|
|
19176
|
-
var BUMP_REVISION_SQL2 = "UPDATE
|
|
19177
|
-
var COMPLETE_REBUILD_SQL2 = "UPDATE
|
|
19178
|
-
function pgCandidateStatement(query, limit, offset) {
|
|
19179
|
-
const patterns = toolSearchLikePatterns(query);
|
|
19180
|
-
const matchClauses = patterns.map((_, i) => {
|
|
19181
|
-
const p = `$${i + 1}`;
|
|
19182
|
-
return `(name ILIKE ${p} ESCAPE '!' OR description ILIKE ${p} ESCAPE '!' OR feedback ILIKE ${p} ESCAPE '!')`;
|
|
19183
|
-
});
|
|
19184
|
-
const scoreTerms = patterns.map((_, i) => {
|
|
19185
|
-
const p = `$${i + 1}`;
|
|
19186
|
-
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`;
|
|
19187
|
-
});
|
|
19188
|
-
const limitParam = `$${patterns.length + 1}`;
|
|
19189
|
-
const offsetParam = `$${patterns.length + 2}`;
|
|
19190
|
-
return {
|
|
19191
|
-
params: [...patterns, limit + 1, offset],
|
|
19192
|
-
sql: `
|
|
19193
|
-
SELECT id, path, name, (${scoreTerms.join(" + ")}) AS score
|
|
19194
|
-
FROM tb_search_tools_v3
|
|
19195
|
-
WHERE ${matchClauses.join(" AND ")}
|
|
19196
|
-
ORDER BY score DESC, path, name
|
|
19197
|
-
LIMIT ${limitParam} OFFSET ${offsetParam}
|
|
19198
|
-
`
|
|
19199
|
-
};
|
|
19200
|
-
}
|
|
19159
|
+
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v4";
|
|
19160
|
+
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM tb_search_snapshots_v4";
|
|
19161
|
+
var BUMP_REVISION_SQL2 = "UPDATE tb_search_meta_v4 SET revision = revision + 1 WHERE singleton = 1";
|
|
19162
|
+
var COMPLETE_REBUILD_SQL2 = "UPDATE tb_search_meta_v4 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
19201
19163
|
var pgSearchDialect = {
|
|
19202
|
-
candidateStatement:
|
|
19164
|
+
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(
|
|
19165
|
+
prepareToolSearchUnits(query),
|
|
19166
|
+
limit,
|
|
19167
|
+
offset,
|
|
19168
|
+
{ likeOperator: "ILIKE", placeholder: (index) => `$${index}` }
|
|
19169
|
+
),
|
|
19203
19170
|
schemaStatements: PG_SEARCH_SCHEMA_STATEMENTS,
|
|
19204
19171
|
statements: {
|
|
19205
19172
|
bumpRevision: BUMP_REVISION_SQL2,
|
|
@@ -19400,8 +19367,8 @@ var SCOPE_BY_CMD2 = {
|
|
|
19400
19367
|
publish: "write",
|
|
19401
19368
|
remove: "write"
|
|
19402
19369
|
};
|
|
19403
|
-
function skillhubScopeForCmd(
|
|
19404
|
-
return SCOPE_BY_CMD2[
|
|
19370
|
+
function skillhubScopeForCmd(command) {
|
|
19371
|
+
return SCOPE_BY_CMD2[command] ?? null;
|
|
19405
19372
|
}
|
|
19406
19373
|
var OPTS_SCHEMA2 = {
|
|
19407
19374
|
type: "object",
|