@tool-bridge/server 0.5.0 → 0.10.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-7TFNLFIF.js → airtable-5W6SJMSM.js} +4 -4
- package/dist/{alt_text_generator_ai-VJSAHBJM.js → alt_text_generator_ai-YYVJM3RG.js} +4 -4
- package/dist/{amap-KZMUDGK6.js → amap-EREMQZHQ.js} +4 -4
- package/dist/{anthropic-C6FCUSY7.js → anthropic-53H7WGSE.js} +4 -4
- package/dist/{apify-MUCWNIWU.js → apify-CMRNU7VZ.js} +4 -4
- package/dist/{brave_search-NRVZ4ZNY.js → brave_search-AFZVZ3QK.js} +4 -4
- package/dist/{chunk-FHYFPPBZ.js → chunk-2DA2UI37.js} +2 -2
- package/dist/{chunk-B4ZA7EGO.js → chunk-Q44CYUSI.js} +1 -1
- package/dist/{chunk-3C3J36GT.js → chunk-Q7YHZ2SD.js} +683 -54
- package/dist/{chunk-7GP7DRES.js → chunk-SBJMMSPA.js} +1 -1
- package/dist/{chunk-7PM4FD5K.js → chunk-TPGTA43F.js} +291 -55
- package/dist/{circleci-QY36SZIM.js → circleci-JG7RV2RU.js} +4 -4
- package/dist/{clerk-ECH23XL5.js → clerk-U7OS5ALG.js} +4 -4
- package/dist/{cloudflare_dns-F6DN2F3X.js → cloudflare_dns-ADCTFMMI.js} +4 -4
- package/dist/{cohere-HD4XZOPJ.js → cohere-Z7ZEC2YV.js} +4 -4
- package/dist/{confluence-J4AZ2KYL.js → confluence-FT22JGYQ.js} +4 -4
- package/dist/{convertapi-BXBII5Z6.js → convertapi-UQQCWVWP.js} +4 -4
- package/dist/{currencyapi-HEEQ7EQJ.js → currencyapi-Y63O7JTP.js} +4 -4
- package/dist/{deepseek-RKRGIFPM.js → deepseek-7TSAMZJ6.js} +4 -4
- package/dist/{docker_hub-YFSTEZVP.js → docker_hub-AJYTVI25.js} +4 -4
- package/dist/{dropbox-VGK634PO.js → dropbox-CNGGNR5J.js} +4 -4
- package/dist/{dub-GEXD3XK6.js → dub-WTADKHA7.js} +4 -4
- package/dist/{e2b-LPTZQEDV.js → e2b-75EKXMN5.js} +4 -4
- package/dist/{exa-VJENLTKN.js → exa-OFLA5XND.js} +4 -4
- package/dist/{fal_ai-75O63LLP.js → fal_ai-5542HB7N.js} +4 -4
- package/dist/{feishu-FATBHGEJ.js → feishu-QQIZ7G24.js} +3 -3
- package/dist/{feishu_custom_bot-QFSYPOLI.js → feishu_custom_bot-EVDKIZCR.js} +4 -4
- package/dist/{figma-JED3Q56H.js → figma-ZEBDUMWI.js} +4 -4
- package/dist/{firehydrant-7JDKFJTB.js → firehydrant-CTBNY6FL.js} +4 -4
- package/dist/{fixer-ZI2JS5GU.js → fixer-ITDYMRBW.js} +4 -4
- package/dist/{fly-3RA7ETFP.js → fly-IBFMSAAO.js} +4 -4
- package/dist/{front-X2CJXBYS.js → front-AZQLLUJQ.js} +4 -4
- package/dist/{geocodio-C6NHG5UJ.js → geocodio-XHZHEWQW.js} +4 -4
- package/dist/{ghost-ZBFOMWQF.js → ghost-RTIKXD3T.js} +4 -4
- package/dist/{github-6QM2NIP4.js → github-WRJBJ5N7.js} +4 -4
- package/dist/{gmail-ST3MS32S.js → gmail-527RVDXV.js} +4 -4
- package/dist/{googlecalendar-SAUTUJ3Q.js → googlecalendar-WZJSK2MR.js} +4 -4
- package/dist/{googledocs-2SJKS2SC.js → googledocs-LFBVIHIK.js} +4 -4
- package/dist/{grafana-RP7DOS3A.js → grafana-3JEKO7NT.js} +4 -4
- package/dist/{graphhopper-XSDTLJTE.js → graphhopper-TOJN6K2Q.js} +4 -4
- package/dist/index.d.ts +400 -26
- package/dist/index.js +14 -2
- package/dist/{ip2proxy-IKV5IWUI.js → ip2proxy-KOA2JUNV.js} +4 -4
- package/dist/{ipgeolocation_io-NSUWUF5X.js → ipgeolocation_io-KNOQD7R7.js} +4 -4
- package/dist/{ipqualityscore-ZQKL3WLC.js → ipqualityscore-GF2MQKXI.js} +4 -4
- package/dist/{jina_ai-F4Y7V5AS.js → jina_ai-GB3CQPJ4.js} +4 -4
- package/dist/{jira-CYDY44ZO.js → jira-35XYV6G4.js} +4 -4
- package/dist/{langsmith-74JSSJNY.js → langsmith-W5234OE7.js} +4 -4
- package/dist/{lemlist-C3LKIPVN.js → lemlist-QB6W2G7N.js} +4 -4
- package/dist/{linear-YYGRHKJC.js → linear-MHBD6A7X.js} +4 -4
- package/dist/{logsnag-YBMDJ6DO.js → logsnag-RN57XIJS.js} +4 -4
- package/dist/main.js +113 -106
- package/dist/{mattermost-NDID4TAL.js → mattermost-QRXSZMZA.js} +4 -4
- package/dist/{mem0-ASBAEBWR.js → mem0-K63NN3LA.js} +4 -4
- package/dist/{memos-76I27HCW.js → memos-4IOUOFKH.js} +4 -4
- package/dist/{metabase-LCPIP2DL.js → metabase-IOE44EKL.js} +4 -4
- package/dist/{mistral_ai-YVBQ6QKO.js → mistral_ai-X7ASGV5I.js} +4 -4
- package/dist/{mother_duck-J2MPBIFO.js → mother_duck-CNN3QWQH.js} +4 -4
- package/dist/{ngrok-UJC2ORDH.js → ngrok-QNE4AHEH.js} +4 -4
- package/dist/{notes-6VWWD6RW.js → notes-Q6OLBS2L.js} +2 -2
- package/dist/{notion-6LBO2KHR.js → notion-ADDRQTCE.js} +4 -4
- package/dist/{open_exchange_rates-OGDH4ZBX.js → open_exchange_rates-WR5PJQTG.js} +4 -4
- package/dist/{openai-IKGD5M66.js → openai-UZBNNAAH.js} +4 -4
- package/dist/{opengraph_io-CIILQ7VK.js → opengraph_io-2JNEXCPJ.js} +4 -4
- package/dist/{openrouter-IYG5CPG5.js → openrouter-EF62BDIH.js} +4 -4
- package/dist/{outline-R2UMBY4M.js → outline-O4TIRWJT.js} +4 -4
- package/dist/{paddle-IYWA7DOV.js → paddle-SEFKNENH.js} +4 -4
- package/dist/{perplexity-3TGYQWHT.js → perplexity-FZYOIPDS.js} +4 -4
- package/dist/{pinecone-TEBOW4LJ.js → pinecone-EXDPYDY7.js} +4 -4
- package/dist/{pipedrive-ZXDY753U.js → pipedrive-EDO4C3AM.js} +4 -4
- package/dist/{polar-BVZV5A4O.js → polar-QJXHVFIP.js} +4 -4
- package/dist/{posthog-DXKAS4PJ.js → posthog-U6QEXJE2.js} +4 -4
- package/dist/{postmark-6RWFC3TD.js → postmark-PFZIWXMP.js} +4 -4
- package/dist/{prerender-YIXOTM3K.js → prerender-SK2AXNJY.js} +4 -4
- package/dist/{pubmed-2RHSZB4E.js → pubmed-CB7OJNBH.js} +4 -4
- package/dist/{railway-IF64BUE2.js → railway-BMMNQ6XH.js} +4 -4
- package/dist/{readwise-5XKQZNOM.js → readwise-YQY7O5QR.js} +4 -4
- package/dist/{render-Q2Z66LTA.js → render-7CRNEEJ3.js} +4 -4
- package/dist/{replicate-SOI65IJO.js → replicate-V6AX7WFC.js} +4 -4
- package/dist/{resend-O2BGONOO.js → resend-ZBH56UAQ.js} +4 -4
- package/dist/{rootly-WPQKTVU3.js → rootly-C4FIXIF7.js} +4 -4
- package/dist/{scrapfly-GLMBVNPG.js → scrapfly-UE434KD7.js} +4 -4
- package/dist/{scrapingbee-TUER54CY.js → scrapingbee-PQCNKALD.js} +4 -4
- package/dist/{screenshot_fyi-4J4W5EKY.js → screenshot_fyi-U6QGI6ZH.js} +4 -4
- package/dist/{semantic_scholar-4PITOANV.js → semantic_scholar-PSMUOG2W.js} +4 -4
- package/dist/{sentry-4WURPLIE.js → sentry-F5CNVQA2.js} +4 -4
- package/dist/{shodan-G3M3LFEW.js → shodan-NOWG7NV5.js} +4 -4
- package/dist/{shopify-72AIELMS.js → shopify-GGPLJIGC.js} +4 -4
- package/dist/{stripe-7C7XVPMU.js → stripe-72K2UMK3.js} +4 -4
- package/dist/{supabase-N4Y3YC23.js → supabase-H7NRCSAO.js} +4 -4
- package/dist/{tavily-GGLSWERP.js → tavily-ISP24QUX.js} +4 -4
- package/dist/{telegram-4RH36WYP.js → telegram-POII6NKE.js} +4 -4
- package/dist/{telnyx-I2KUITFV.js → telnyx-3D7TOVNA.js} +4 -4
- package/dist/{todoist-A3NX6X2Y.js → todoist-LKYPKRKB.js} +4 -4
- package/dist/{trello-2GJYN7GR.js → trello-WW74UYIQ.js} +4 -4
- package/dist/{turso-WKUXMTZ5.js → turso-SUFRHBHW.js} +4 -4
- package/dist/{twilio-SSXDBOK4.js → twilio-QB7PBL2B.js} +4 -4
- package/dist/{umami-SBDB4GXK.js → umami-CAHHP3SV.js} +4 -4
- package/dist/{unsplash-4AVC4ZGP.js → unsplash-ZCGEPHGQ.js} +4 -4
- package/dist/{upstash_redis-7XY3UHBO.js → upstash_redis-DZ4AKZWT.js} +4 -4
- package/dist/{uptimerobot-QVQP3QYG.js → uptimerobot-KVEQJGTZ.js} +4 -4
- package/dist/{v2ex-ASVTIKO7.js → v2ex-BCYYBPH7.js} +4 -4
- package/dist/{vercel-ZQXZCGWY.js → vercel-GH4G7EUS.js} +4 -4
- package/dist/{wolfram_alpha_api-RVBWQSEF.js → wolfram_alpha_api-XFG2MQBL.js} +4 -4
- package/dist/{wordpress-SOWKVNCX.js → wordpress-DZ2TVNAA.js} +4 -4
- package/dist/{workos-F45INANB.js → workos-EHUAGTGN.js} +4 -4
- package/dist/{zhihu-5VODAGAP.js → zhihu-OJJW3ZIH.js} +4 -4
- package/package.json +6 -4
|
@@ -14820,7 +14820,7 @@ function checkRegisterPath(input) {
|
|
|
14820
14820
|
if (!checkScopes(sk.scopes, targetPath, "register")) {
|
|
14821
14821
|
return deny(`no scope grants 'register' on '${targetPath}'`);
|
|
14822
14822
|
}
|
|
14823
|
-
if (existing && existing.registeredBy !== sk.id && existing.registeredBy !== SYSTEM_AUTO) {
|
|
14823
|
+
if (existing && existing.registeredBy !== sk.id && existing.registeredBy !== SYSTEM_AUTO && !checkScopes(sk.scopes, targetPath, "admin")) {
|
|
14824
14824
|
return {
|
|
14825
14825
|
allow: false,
|
|
14826
14826
|
error: new TBError("conflict", `path '${targetPath}' is registered by another key`)
|
|
@@ -16362,7 +16362,7 @@ function registryCmds(nodePath) {
|
|
|
16362
16362
|
name: "delete",
|
|
16363
16363
|
method: "POST",
|
|
16364
16364
|
path,
|
|
16365
|
-
h: "unmount a node (and reclaim empty auto-created parents)",
|
|
16365
|
+
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
16366
|
inputSchema: {
|
|
16367
16367
|
type: "object",
|
|
16368
16368
|
properties: { path: { type: "string", description: "exact tree path" } },
|
|
@@ -17255,6 +17255,7 @@ var deviceNodeCmdSchema = external_exports.object({
|
|
|
17255
17255
|
name: external_exports.string().min(1),
|
|
17256
17256
|
description: external_exports.string().optional(),
|
|
17257
17257
|
inputSchema: external_exports.unknown().optional(),
|
|
17258
|
+
outputSchema: external_exports.unknown().optional(),
|
|
17258
17259
|
effect: external_exports.string().optional(),
|
|
17259
17260
|
confirm: external_exports.boolean().optional()
|
|
17260
17261
|
}).passthrough();
|
|
@@ -17276,6 +17277,16 @@ var deviceExposeSchema = external_exports.object({
|
|
|
17276
17277
|
nodes: external_exports.array(nodeInputSchema).optional()
|
|
17277
17278
|
});
|
|
17278
17279
|
var idSchema = external_exports.string().min(1);
|
|
17280
|
+
var deviceCallContextSchema = external_exports.object({
|
|
17281
|
+
caller: external_exports.object({
|
|
17282
|
+
keyId: external_exports.string().min(1),
|
|
17283
|
+
owner: external_exports.string().min(1),
|
|
17284
|
+
displayName: external_exports.string().optional()
|
|
17285
|
+
}).passthrough(),
|
|
17286
|
+
traceId: external_exports.string().min(1),
|
|
17287
|
+
createdAt: external_exports.string().min(1),
|
|
17288
|
+
expiresAt: external_exports.string().min(1)
|
|
17289
|
+
}).passthrough();
|
|
17279
17290
|
var schemaByType = {
|
|
17280
17291
|
hello: external_exports.object({
|
|
17281
17292
|
type: external_exports.literal("hello"),
|
|
@@ -17290,7 +17301,8 @@ var schemaByType = {
|
|
|
17290
17301
|
id: idSchema,
|
|
17291
17302
|
path: external_exports.string(),
|
|
17292
17303
|
tool: external_exports.string().min(1),
|
|
17293
|
-
arguments: external_exports.record(external_exports.string(), external_exports.unknown())
|
|
17304
|
+
arguments: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
17305
|
+
context: deviceCallContextSchema.optional()
|
|
17294
17306
|
}),
|
|
17295
17307
|
result: external_exports.discriminatedUnion("ok", [
|
|
17296
17308
|
external_exports.object({ type: external_exports.literal("result"), id: idSchema, ok: external_exports.literal(true), value: external_exports.unknown() }),
|
|
@@ -17385,13 +17397,33 @@ function deviceDirectoryHelpModel(node, children = []) {
|
|
|
17385
17397
|
node: {
|
|
17386
17398
|
path: node.path,
|
|
17387
17399
|
kind: "directory",
|
|
17388
|
-
description: `${node.description} (${node.
|
|
17400
|
+
description: `${node.description} (${node.presence.state})`
|
|
17389
17401
|
},
|
|
17390
17402
|
cmds: [],
|
|
17391
17403
|
children
|
|
17392
17404
|
};
|
|
17393
17405
|
}
|
|
17394
17406
|
|
|
17407
|
+
// ../core/src/device/presence.ts
|
|
17408
|
+
var PRESENCE_STALE_AFTER_MS = 9e4;
|
|
17409
|
+
function derivePresence(input) {
|
|
17410
|
+
const lastSeenAt = input.lastSeenAt;
|
|
17411
|
+
const base = lastSeenAt !== void 0 ? { lastSeenAt } : {};
|
|
17412
|
+
if (input.online !== true) {
|
|
17413
|
+
return { state: "offline", ...base };
|
|
17414
|
+
}
|
|
17415
|
+
if (lastSeenAt === void 0) {
|
|
17416
|
+
return { state: "stale", ...base };
|
|
17417
|
+
}
|
|
17418
|
+
const seenMs = Date.parse(lastSeenAt);
|
|
17419
|
+
const nowMs = Date.parse(input.now);
|
|
17420
|
+
if (!Number.isFinite(seenMs) || !Number.isFinite(nowMs)) {
|
|
17421
|
+
return { state: "stale", ...base };
|
|
17422
|
+
}
|
|
17423
|
+
const ttl = input.staleAfterMs ?? PRESENCE_STALE_AFTER_MS;
|
|
17424
|
+
return { state: nowMs - seenMs <= ttl ? "online" : "stale", ...base };
|
|
17425
|
+
}
|
|
17426
|
+
|
|
17395
17427
|
// ../core/src/device/session.ts
|
|
17396
17428
|
var DEVICE_CALL_TIMEOUT_MS = 6e4;
|
|
17397
17429
|
var DEVICE_REJECT_CLOSE_CODE = 1008;
|
|
@@ -17499,7 +17531,9 @@ var DeviceGatewaySession = class {
|
|
|
17499
17531
|
id: req.id,
|
|
17500
17532
|
path: req.path,
|
|
17501
17533
|
tool: req.tool,
|
|
17502
|
-
arguments: req.arguments
|
|
17534
|
+
arguments: req.arguments,
|
|
17535
|
+
// undefined 经 JSON.stringify 丢弃:老网关不带 context 时帧形状不变。
|
|
17536
|
+
...req.context !== void 0 ? { context: req.context } : {}
|
|
17503
17537
|
});
|
|
17504
17538
|
}
|
|
17505
17539
|
/** 幂等表回放种子(DO 从 ctx.storage 恢复时用);已有同 id 结果则忽略。 */
|
|
@@ -17999,7 +18033,7 @@ async function buildTree(opts) {
|
|
|
17999
18033
|
visited.add(entry.path);
|
|
18000
18034
|
count++;
|
|
18001
18035
|
const node = { path: entry.path, kind: entry.kind, description: entry.description };
|
|
18002
|
-
if (entry.
|
|
18036
|
+
if (entry.presence !== void 0) node.presence = entry.presence;
|
|
18003
18037
|
if (depthLeft <= 0) {
|
|
18004
18038
|
if (opts.opaqueKinds?.has(entry.kind)) {
|
|
18005
18039
|
node.truncated = true;
|
|
@@ -18023,7 +18057,7 @@ async function buildTree(opts) {
|
|
|
18023
18057
|
description: kid.description,
|
|
18024
18058
|
truncated: true
|
|
18025
18059
|
};
|
|
18026
|
-
if (kid.
|
|
18060
|
+
if (kid.presence !== void 0) cyc.presence = kid.presence;
|
|
18027
18061
|
count++;
|
|
18028
18062
|
children.push(cyc);
|
|
18029
18063
|
continue;
|
|
@@ -18394,32 +18428,6 @@ function decodePluginCall(body) {
|
|
|
18394
18428
|
return parsed.data;
|
|
18395
18429
|
}
|
|
18396
18430
|
|
|
18397
|
-
// ../core/src/search/shortTermSql.ts
|
|
18398
|
-
function shortTermsSql(patterns) {
|
|
18399
|
-
return `short_terms(pattern) AS (VALUES ${patterns.map(() => "(?)").join(", ")})`;
|
|
18400
|
-
}
|
|
18401
|
-
var SHORT_MATCH_SQL = `
|
|
18402
|
-
NOT EXISTS (
|
|
18403
|
-
SELECT 1 FROM short_terms
|
|
18404
|
-
WHERE tools.name NOT LIKE pattern ESCAPE '!'
|
|
18405
|
-
AND tools.description NOT LIKE pattern ESCAPE '!'
|
|
18406
|
-
AND tools.feedback NOT LIKE pattern ESCAPE '!'
|
|
18407
|
-
)
|
|
18408
|
-
`;
|
|
18409
|
-
var SHORT_SCORE_SQL = `
|
|
18410
|
-
(
|
|
18411
|
-
SELECT COALESCE(SUM(
|
|
18412
|
-
CASE
|
|
18413
|
-
WHEN tools.name LIKE pattern ESCAPE '!' THEN 10
|
|
18414
|
-
WHEN tools.description LIKE pattern ESCAPE '!' THEN 3
|
|
18415
|
-
WHEN tools.feedback LIKE pattern ESCAPE '!' THEN 1
|
|
18416
|
-
ELSE 0
|
|
18417
|
-
END
|
|
18418
|
-
), 0)
|
|
18419
|
-
FROM short_terms
|
|
18420
|
-
)
|
|
18421
|
-
`;
|
|
18422
|
-
|
|
18423
18431
|
// ../core/src/search/types.ts
|
|
18424
18432
|
var TOOL_SEARCH_BATCH_LIMIT = 100;
|
|
18425
18433
|
var TOOL_SEARCH_WORK_LIMIT = 400;
|
|
@@ -18604,6 +18612,13 @@ function likePattern(term) {
|
|
|
18604
18612
|
const escaped = term.replaceAll("!", "!!").replaceAll("%", "!%").replaceAll("_", "!_");
|
|
18605
18613
|
return `%${escaped}%`;
|
|
18606
18614
|
}
|
|
18615
|
+
function toolSearchLikePatterns(query) {
|
|
18616
|
+
const terms = normalizeToolSearchQuery(query).split(/\s+/u);
|
|
18617
|
+
if (terms.length > TOOL_SEARCH_TERM_LIMIT) {
|
|
18618
|
+
throw new TBError("invalid_argument", `\u641C\u7D22 query \u6700\u591A ${TOOL_SEARCH_TERM_LIMIT} \u4E2A terms`);
|
|
18619
|
+
}
|
|
18620
|
+
return terms.map(likePattern);
|
|
18621
|
+
}
|
|
18607
18622
|
function prepareToolSearchQuery(query) {
|
|
18608
18623
|
const normalized = normalizeToolSearchQuery(query);
|
|
18609
18624
|
const terms = normalized.split(/\s+/u);
|
|
@@ -18688,6 +18703,32 @@ async function decodeToolSearchCursor(cursor, query, mode, revision, secret) {
|
|
|
18688
18703
|
return payload.o ?? 0;
|
|
18689
18704
|
}
|
|
18690
18705
|
|
|
18706
|
+
// ../core/src/search/shortTermSql.ts
|
|
18707
|
+
function shortTermsSql(patterns) {
|
|
18708
|
+
return `short_terms(pattern) AS (VALUES ${patterns.map(() => "(?)").join(", ")})`;
|
|
18709
|
+
}
|
|
18710
|
+
var SHORT_MATCH_SQL = `
|
|
18711
|
+
NOT EXISTS (
|
|
18712
|
+
SELECT 1 FROM short_terms
|
|
18713
|
+
WHERE tools.name NOT LIKE pattern ESCAPE '!'
|
|
18714
|
+
AND tools.description NOT LIKE pattern ESCAPE '!'
|
|
18715
|
+
AND tools.feedback NOT LIKE pattern ESCAPE '!'
|
|
18716
|
+
)
|
|
18717
|
+
`;
|
|
18718
|
+
var SHORT_SCORE_SQL = `
|
|
18719
|
+
(
|
|
18720
|
+
SELECT COALESCE(SUM(
|
|
18721
|
+
CASE
|
|
18722
|
+
WHEN tools.name LIKE pattern ESCAPE '!' THEN 10
|
|
18723
|
+
WHEN tools.description LIKE pattern ESCAPE '!' THEN 3
|
|
18724
|
+
WHEN tools.feedback LIKE pattern ESCAPE '!' THEN 1
|
|
18725
|
+
ELSE 0
|
|
18726
|
+
END
|
|
18727
|
+
), 0)
|
|
18728
|
+
FROM short_terms
|
|
18729
|
+
)
|
|
18730
|
+
`;
|
|
18731
|
+
|
|
18691
18732
|
// ../core/src/search/sqlSearchIndex.ts
|
|
18692
18733
|
var TOOL_SEARCH_SCHEMA_STATEMENTS = [
|
|
18693
18734
|
`CREATE TABLE IF NOT EXISTS tb_search_tools_v3 (
|
|
@@ -18825,12 +18866,34 @@ function toolSearchCandidateStatement(prepared, limit, offset) {
|
|
|
18825
18866
|
`
|
|
18826
18867
|
};
|
|
18827
18868
|
}
|
|
18869
|
+
var sqliteSearchDialect = {
|
|
18870
|
+
candidateStatement: (query, limit, offset) => toolSearchCandidateStatement(prepareToolSearchQuery(query), limit, offset),
|
|
18871
|
+
schemaStatements: TOOL_SEARCH_SCHEMA_STATEMENTS,
|
|
18872
|
+
statements: {
|
|
18873
|
+
bumpRevision: BUMP_REVISION_SQL,
|
|
18874
|
+
completeRebuild: COMPLETE_REBUILD_SQL,
|
|
18875
|
+
deleteAllSnapshots: DELETE_ALL_SNAPSHOTS_SQL,
|
|
18876
|
+
deleteAllTools: DELETE_ALL_TOOLS_SQL,
|
|
18877
|
+
deleteSnapshot: DELETE_SNAPSHOT_SQL,
|
|
18878
|
+
deleteSnapshotPrefix: DELETE_SNAPSHOT_PREFIX_SQL,
|
|
18879
|
+
deleteTools: DELETE_TOOLS_SQL,
|
|
18880
|
+
deleteToolsPrefix: DELETE_TOOLS_PREFIX_SQL,
|
|
18881
|
+
insertSnapshot: TOOL_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
18882
|
+
meta: META_SQL,
|
|
18883
|
+
pathState: PATH_STATE_SQL,
|
|
18884
|
+
present: PRESENT_SQL,
|
|
18885
|
+
presentPrefix: PRESENT_PREFIX_SQL,
|
|
18886
|
+
snapshotDigests: SNAPSHOT_DIGESTS_SQL
|
|
18887
|
+
}
|
|
18888
|
+
};
|
|
18828
18889
|
var SqlSearchIndex = class {
|
|
18829
|
-
constructor(driver) {
|
|
18890
|
+
constructor(driver, dialect = sqliteSearchDialect) {
|
|
18830
18891
|
this.driver = driver;
|
|
18892
|
+
this.dialect = dialect;
|
|
18831
18893
|
}
|
|
18832
18894
|
driver;
|
|
18833
18895
|
capabilities = ["search"];
|
|
18896
|
+
dialect;
|
|
18834
18897
|
/** 容量 trigger 的 ABORT 在各驱动里错误形状不同,统一按标记串归一。 */
|
|
18835
18898
|
async writeOrCapacity(statements) {
|
|
18836
18899
|
try {
|
|
@@ -18843,14 +18906,14 @@ var SqlSearchIndex = class {
|
|
|
18843
18906
|
}
|
|
18844
18907
|
}
|
|
18845
18908
|
async meta() {
|
|
18846
|
-
const row = await this.driver.first({ params: [], sql:
|
|
18909
|
+
const row = await this.driver.first({ params: [], sql: this.dialect.statements.meta });
|
|
18847
18910
|
if (row === null) throw new TBError("internal", "\u5DE5\u5177\u641C\u7D22 meta \u7F3A\u5931");
|
|
18848
18911
|
return row;
|
|
18849
18912
|
}
|
|
18850
18913
|
async snapshotDigests() {
|
|
18851
18914
|
const rows = await this.driver.all({
|
|
18852
18915
|
params: [],
|
|
18853
|
-
sql:
|
|
18916
|
+
sql: this.dialect.statements.snapshotDigests
|
|
18854
18917
|
});
|
|
18855
18918
|
return new Map(rows.map((row) => [row.path, row.digest]));
|
|
18856
18919
|
}
|
|
@@ -18864,7 +18927,7 @@ var SqlSearchIndex = class {
|
|
|
18864
18927
|
await this.driver.ensureSchema();
|
|
18865
18928
|
const current = await this.driver.first({
|
|
18866
18929
|
params: [canonical, canonical],
|
|
18867
|
-
sql:
|
|
18930
|
+
sql: this.dialect.statements.pathState
|
|
18868
18931
|
});
|
|
18869
18932
|
const digest = records.length === 0 ? null : toolSearchSnapshotDigest(records);
|
|
18870
18933
|
if (current !== null && (digest !== null && current.digest === digest || digest === null && current.digest === null && current.has_tools === 0)) return;
|
|
@@ -18873,12 +18936,13 @@ var SqlSearchIndex = class {
|
|
|
18873
18936
|
}
|
|
18874
18937
|
const inserts = this.driver.insertRecords(records);
|
|
18875
18938
|
this.driver.assertInsertBudget?.(inserts.length);
|
|
18939
|
+
const statements = this.dialect.statements;
|
|
18876
18940
|
await this.writeOrCapacity([
|
|
18877
|
-
{ params: [canonical], sql:
|
|
18941
|
+
{ params: [canonical], sql: statements.deleteTools },
|
|
18878
18942
|
...inserts,
|
|
18879
|
-
{ params: [canonical], sql:
|
|
18880
|
-
...digest === null ? [] : [{ params: [canonical, digest], sql:
|
|
18881
|
-
{ params: [], sql:
|
|
18943
|
+
{ params: [canonical], sql: statements.deleteSnapshot },
|
|
18944
|
+
...digest === null ? [] : [{ params: [canonical, digest], sql: statements.insertSnapshot }],
|
|
18945
|
+
{ params: [], sql: statements.bumpRevision }
|
|
18882
18946
|
]);
|
|
18883
18947
|
}
|
|
18884
18948
|
async remove(path) {
|
|
@@ -18886,13 +18950,14 @@ var SqlSearchIndex = class {
|
|
|
18886
18950
|
await this.driver.ensureSchema();
|
|
18887
18951
|
const current = await this.driver.first({
|
|
18888
18952
|
params: [canonical],
|
|
18889
|
-
sql:
|
|
18953
|
+
sql: this.dialect.statements.present
|
|
18890
18954
|
});
|
|
18891
18955
|
if (current === null) return;
|
|
18956
|
+
const statements = this.dialect.statements;
|
|
18892
18957
|
await this.driver.write([
|
|
18893
|
-
{ params: [canonical], sql:
|
|
18894
|
-
{ params: [canonical], sql:
|
|
18895
|
-
{ params: [], sql:
|
|
18958
|
+
{ params: [canonical], sql: statements.deleteTools },
|
|
18959
|
+
{ params: [canonical], sql: statements.deleteSnapshot },
|
|
18960
|
+
{ params: [], sql: statements.bumpRevision }
|
|
18896
18961
|
]);
|
|
18897
18962
|
}
|
|
18898
18963
|
async removePrefix(path) {
|
|
@@ -18901,13 +18966,14 @@ var SqlSearchIndex = class {
|
|
|
18901
18966
|
const prefixParams = [canonical, canonical, canonical];
|
|
18902
18967
|
const current = await this.driver.first({
|
|
18903
18968
|
params: prefixParams,
|
|
18904
|
-
sql:
|
|
18969
|
+
sql: this.dialect.statements.presentPrefix
|
|
18905
18970
|
});
|
|
18906
18971
|
if (current === null) return;
|
|
18972
|
+
const statements = this.dialect.statements;
|
|
18907
18973
|
await this.driver.write([
|
|
18908
|
-
{ params: prefixParams, sql:
|
|
18909
|
-
{ params: prefixParams, sql:
|
|
18910
|
-
{ params: [], sql:
|
|
18974
|
+
{ params: prefixParams, sql: statements.deleteToolsPrefix },
|
|
18975
|
+
{ params: prefixParams, sql: statements.deleteSnapshotPrefix },
|
|
18976
|
+
{ params: [], sql: statements.bumpRevision }
|
|
18911
18977
|
]);
|
|
18912
18978
|
}
|
|
18913
18979
|
async rebuild(documents) {
|
|
@@ -18921,12 +18987,13 @@ var SqlSearchIndex = class {
|
|
|
18921
18987
|
const inserts = this.driver.insertRecords(records);
|
|
18922
18988
|
const snapshots = this.driver.insertSnapshots(desired);
|
|
18923
18989
|
this.driver.assertInsertBudget?.(inserts.length + snapshots.length);
|
|
18990
|
+
const statements = this.dialect.statements;
|
|
18924
18991
|
await this.writeOrCapacity([
|
|
18925
|
-
{ params: [], sql:
|
|
18926
|
-
{ params: [], sql:
|
|
18992
|
+
{ params: [], sql: statements.deleteAllTools },
|
|
18993
|
+
{ params: [], sql: statements.deleteAllSnapshots },
|
|
18927
18994
|
...inserts,
|
|
18928
18995
|
...snapshots,
|
|
18929
|
-
{ params: [], sql:
|
|
18996
|
+
{ params: [], sql: statements.completeRebuild }
|
|
18930
18997
|
]);
|
|
18931
18998
|
}
|
|
18932
18999
|
async search(query, opts) {
|
|
@@ -18945,7 +19012,7 @@ var SqlSearchIndex = class {
|
|
|
18945
19012
|
);
|
|
18946
19013
|
const limit = Math.min(normalizeToolSearchLimit(opts?.limit), TOOL_SEARCH_BATCH_LIMIT);
|
|
18947
19014
|
const rows = await this.driver.all(
|
|
18948
|
-
|
|
19015
|
+
this.dialect.candidateStatement(normalized, limit, offset)
|
|
18949
19016
|
);
|
|
18950
19017
|
const hasMore = rows.length > limit;
|
|
18951
19018
|
const page = hasMore ? rows.slice(0, limit) : rows;
|
|
@@ -18984,6 +19051,145 @@ var SqlSearchIndex = class {
|
|
|
18984
19051
|
}
|
|
18985
19052
|
};
|
|
18986
19053
|
|
|
19054
|
+
// ../core/src/search/pgSearchDialect.ts
|
|
19055
|
+
var PG_SEARCH_SCHEMA_STATEMENTS = [
|
|
19056
|
+
`CREATE TABLE IF NOT EXISTS tb_search_tools_v3 (
|
|
19057
|
+
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
19058
|
+
path text NOT NULL,
|
|
19059
|
+
name text NOT NULL,
|
|
19060
|
+
description text NOT NULL DEFAULT '',
|
|
19061
|
+
feedback text NOT NULL DEFAULT '',
|
|
19062
|
+
UNIQUE(path, name)
|
|
19063
|
+
)`,
|
|
19064
|
+
// 这里**故意不建 trigram GIN 索引**。实测(4000 条记录 = 500 节点上限满载):
|
|
19065
|
+
// 候选查询是"三列 ILIKE 用 OR 连接 + LIMIT",规划器一律选 Seq Scan(整表仅 1 个
|
|
19066
|
+
// buffer),GIN 索引一次都没被使用;而它让插入从 13.7ms 涨到 75.8ms(5.5×)、表总大小
|
|
19067
|
+
// 从 1072 kB 涨到 7208 kB(6.7×),检索却仍是 0.50 vs 0.53ms —— 纯负担。
|
|
19068
|
+
// 索引记录数受 TOOL_SEARCH_AUDIT_NODE_LIMIT 硬顶约束,不会增长到需要索引的规模;
|
|
19069
|
+
// 若将来放宽该上限,应连同候选查询形状(拆成 UNION 或改单列检索列)一起重新评估。
|
|
19070
|
+
`CREATE TABLE IF NOT EXISTS tb_search_meta_v3 (
|
|
19071
|
+
singleton integer PRIMARY KEY CHECK (singleton = 1),
|
|
19072
|
+
revision bigint NOT NULL DEFAULT 0,
|
|
19073
|
+
seeded integer NOT NULL DEFAULT 0,
|
|
19074
|
+
cursor_secret text NOT NULL
|
|
19075
|
+
)`,
|
|
19076
|
+
// cursor_secret 需 64 hex(32 字节)。两个内置 gen_random_uuid() 去连字符正好 64
|
|
19077
|
+
// hex,避免依赖 pgcrypto 的 gen_random_bytes(自托管 PG 未必预装 pgcrypto)。
|
|
19078
|
+
`INSERT INTO tb_search_meta_v3(singleton, revision, seeded, cursor_secret)
|
|
19079
|
+
VALUES (
|
|
19080
|
+
1, 0, 0,
|
|
19081
|
+
replace(gen_random_uuid()::text, '-', '') || replace(gen_random_uuid()::text, '-', '')
|
|
19082
|
+
)
|
|
19083
|
+
ON CONFLICT (singleton) DO NOTHING`,
|
|
19084
|
+
`CREATE TABLE IF NOT EXISTS tb_search_snapshots_v3 (
|
|
19085
|
+
path text PRIMARY KEY,
|
|
19086
|
+
digest text NOT NULL
|
|
19087
|
+
)`,
|
|
19088
|
+
`CREATE OR REPLACE FUNCTION tb_search_snapshots_v3_capacity()
|
|
19089
|
+
RETURNS trigger AS $$
|
|
19090
|
+
BEGIN
|
|
19091
|
+
IF (SELECT COUNT(*) FROM tb_search_snapshots_v3) >= ${TOOL_SEARCH_AUDIT_NODE_LIMIT} THEN
|
|
19092
|
+
RAISE EXCEPTION '${TOOL_SEARCH_CAPACITY_MARKER}';
|
|
19093
|
+
END IF;
|
|
19094
|
+
RETURN NEW;
|
|
19095
|
+
END;
|
|
19096
|
+
$$ LANGUAGE plpgsql`,
|
|
19097
|
+
`DROP TRIGGER IF EXISTS tb_search_snapshots_v3_capacity_trg ON tb_search_snapshots_v3`,
|
|
19098
|
+
`CREATE TRIGGER tb_search_snapshots_v3_capacity_trg
|
|
19099
|
+
BEFORE INSERT ON tb_search_snapshots_v3
|
|
19100
|
+
FOR EACH ROW EXECUTE FUNCTION tb_search_snapshots_v3_capacity()`
|
|
19101
|
+
];
|
|
19102
|
+
var PG_SEARCH_WRITE_LOCK_KEY = 2069799624;
|
|
19103
|
+
var PG_SEARCH_INSERT_SNAPSHOT_SQL = "INSERT INTO tb_search_snapshots_v3(path, digest) VALUES ($1, $2)";
|
|
19104
|
+
function pgBulkInsertSql(table, columns, rows) {
|
|
19105
|
+
const tuples = [];
|
|
19106
|
+
for (let r = 0; r < rows; r++) {
|
|
19107
|
+
const placeholders = columns.map((_, c) => `$${r * columns.length + c + 1}`);
|
|
19108
|
+
tuples.push(`(${placeholders.join(", ")})`);
|
|
19109
|
+
}
|
|
19110
|
+
return `INSERT INTO ${table} (${columns.join(", ")}) VALUES ${tuples.join(", ")}`;
|
|
19111
|
+
}
|
|
19112
|
+
var PG_SEARCH_TOOLS_TABLE = "tb_search_tools_v3";
|
|
19113
|
+
var PG_SEARCH_TOOLS_COLUMNS = ["path", "name", "description", "feedback"];
|
|
19114
|
+
var PG_SEARCH_SNAPSHOTS_TABLE = "tb_search_snapshots_v3";
|
|
19115
|
+
var PG_SEARCH_SNAPSHOTS_COLUMNS = ["path", "digest"];
|
|
19116
|
+
var PG_SEARCH_INSERT_ROWS_MAX = 1e3;
|
|
19117
|
+
var META_SQL2 = `
|
|
19118
|
+
SELECT revision::int AS revision, seeded::int AS seeded, cursor_secret
|
|
19119
|
+
FROM tb_search_meta_v3 WHERE singleton = 1
|
|
19120
|
+
`;
|
|
19121
|
+
var SNAPSHOT_DIGESTS_SQL2 = "SELECT path, digest FROM tb_search_snapshots_v3 ORDER BY path";
|
|
19122
|
+
var PATH_STATE_SQL2 = `
|
|
19123
|
+
SELECT snapshots.digest,
|
|
19124
|
+
EXISTS(SELECT 1 FROM tb_search_tools_v3 WHERE path = $1)::int AS has_tools,
|
|
19125
|
+
(SELECT COUNT(*) FROM tb_search_snapshots_v3)::int AS path_count
|
|
19126
|
+
FROM (SELECT 1) AS singleton
|
|
19127
|
+
LEFT JOIN tb_search_snapshots_v3 AS snapshots ON snapshots.path = $2
|
|
19128
|
+
`;
|
|
19129
|
+
var PRESENT_SQL2 = "SELECT 1 AS present FROM tb_search_tools_v3 WHERE path = $1 LIMIT 1";
|
|
19130
|
+
var PRESENT_PREFIX_SQL2 = `
|
|
19131
|
+
SELECT 1 AS present FROM tb_search_tools_v3
|
|
19132
|
+
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19133
|
+
LIMIT 1
|
|
19134
|
+
`;
|
|
19135
|
+
var DELETE_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v3 WHERE path = $1";
|
|
19136
|
+
var DELETE_SNAPSHOT_SQL2 = "DELETE FROM tb_search_snapshots_v3 WHERE path = $1";
|
|
19137
|
+
var DELETE_TOOLS_PREFIX_SQL2 = `
|
|
19138
|
+
DELETE FROM tb_search_tools_v3
|
|
19139
|
+
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19140
|
+
`;
|
|
19141
|
+
var DELETE_SNAPSHOT_PREFIX_SQL2 = `
|
|
19142
|
+
DELETE FROM tb_search_snapshots_v3
|
|
19143
|
+
WHERE path = $1 OR substr(path, 1, length($2) + 1) = $3 || '/'
|
|
19144
|
+
`;
|
|
19145
|
+
var DELETE_ALL_TOOLS_SQL2 = "DELETE FROM tb_search_tools_v3";
|
|
19146
|
+
var DELETE_ALL_SNAPSHOTS_SQL2 = "DELETE FROM tb_search_snapshots_v3";
|
|
19147
|
+
var BUMP_REVISION_SQL2 = "UPDATE tb_search_meta_v3 SET revision = revision + 1 WHERE singleton = 1";
|
|
19148
|
+
var COMPLETE_REBUILD_SQL2 = "UPDATE tb_search_meta_v3 SET seeded = 1, revision = revision + 1 WHERE singleton = 1";
|
|
19149
|
+
function pgCandidateStatement(query, limit, offset) {
|
|
19150
|
+
const patterns = toolSearchLikePatterns(query);
|
|
19151
|
+
const matchClauses = patterns.map((_, i) => {
|
|
19152
|
+
const p = `$${i + 1}`;
|
|
19153
|
+
return `(name ILIKE ${p} ESCAPE '!' OR description ILIKE ${p} ESCAPE '!' OR feedback ILIKE ${p} ESCAPE '!')`;
|
|
19154
|
+
});
|
|
19155
|
+
const scoreTerms = patterns.map((_, i) => {
|
|
19156
|
+
const p = `$${i + 1}`;
|
|
19157
|
+
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`;
|
|
19158
|
+
});
|
|
19159
|
+
const limitParam = `$${patterns.length + 1}`;
|
|
19160
|
+
const offsetParam = `$${patterns.length + 2}`;
|
|
19161
|
+
return {
|
|
19162
|
+
params: [...patterns, limit + 1, offset],
|
|
19163
|
+
sql: `
|
|
19164
|
+
SELECT id, path, name, (${scoreTerms.join(" + ")}) AS score
|
|
19165
|
+
FROM tb_search_tools_v3
|
|
19166
|
+
WHERE ${matchClauses.join(" AND ")}
|
|
19167
|
+
ORDER BY score DESC, path, name
|
|
19168
|
+
LIMIT ${limitParam} OFFSET ${offsetParam}
|
|
19169
|
+
`
|
|
19170
|
+
};
|
|
19171
|
+
}
|
|
19172
|
+
var pgSearchDialect = {
|
|
19173
|
+
candidateStatement: pgCandidateStatement,
|
|
19174
|
+
schemaStatements: PG_SEARCH_SCHEMA_STATEMENTS,
|
|
19175
|
+
statements: {
|
|
19176
|
+
bumpRevision: BUMP_REVISION_SQL2,
|
|
19177
|
+
completeRebuild: COMPLETE_REBUILD_SQL2,
|
|
19178
|
+
deleteAllSnapshots: DELETE_ALL_SNAPSHOTS_SQL2,
|
|
19179
|
+
deleteAllTools: DELETE_ALL_TOOLS_SQL2,
|
|
19180
|
+
deleteSnapshot: DELETE_SNAPSHOT_SQL2,
|
|
19181
|
+
deleteSnapshotPrefix: DELETE_SNAPSHOT_PREFIX_SQL2,
|
|
19182
|
+
deleteTools: DELETE_TOOLS_SQL2,
|
|
19183
|
+
deleteToolsPrefix: DELETE_TOOLS_PREFIX_SQL2,
|
|
19184
|
+
insertSnapshot: PG_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
19185
|
+
meta: META_SQL2,
|
|
19186
|
+
pathState: PATH_STATE_SQL2,
|
|
19187
|
+
present: PRESENT_SQL2,
|
|
19188
|
+
presentPrefix: PRESENT_PREFIX_SQL2,
|
|
19189
|
+
snapshotDigests: SNAPSHOT_DIGESTS_SQL2
|
|
19190
|
+
}
|
|
19191
|
+
};
|
|
19192
|
+
|
|
18987
19193
|
// ../core/src/secret/secretStore.ts
|
|
18988
19194
|
var AES_GCM_IV_BYTES = 12;
|
|
18989
19195
|
var MASTER_KEY_BYTES = 32;
|
|
@@ -19913,6 +20119,7 @@ var NodeRegistryStore = class {
|
|
|
19913
20119
|
...node.config !== void 0 ? { config: node.config } : {},
|
|
19914
20120
|
...node.virtualize !== void 0 ? { virtualize: node.virtualize } : {},
|
|
19915
20121
|
...opts.online !== void 0 ? { online: opts.online } : {},
|
|
20122
|
+
...opts.lastSeenAt !== void 0 ? { lastSeenAt: opts.lastSeenAt } : {},
|
|
19916
20123
|
registeredBy,
|
|
19917
20124
|
createdAt: existing?.createdAt ?? now,
|
|
19918
20125
|
updatedAt: now
|
|
@@ -19941,15 +20148,34 @@ var NodeRegistryStore = class {
|
|
|
19941
20148
|
await this.store.put(this.keyOf(norm), merged);
|
|
19942
20149
|
return merged;
|
|
19943
20150
|
}
|
|
19944
|
-
/**
|
|
20151
|
+
/**
|
|
20152
|
+
* 设备生命周期专用:更新节点 online 状态,不存在 → not_found。
|
|
20153
|
+
* online 翻 true 时视为一次存活观察,同步把 `lastSeenAt` 刷到 now;翻 false 时保留原
|
|
20154
|
+
* `lastSeenAt`(用于展示"最后在线于")。
|
|
20155
|
+
*/
|
|
19945
20156
|
async setOnline(path, online, now) {
|
|
19946
20157
|
const norm = normalizePath(path);
|
|
19947
20158
|
const existing = await this.read(norm);
|
|
19948
20159
|
if (!existing) throw new TBError("not_found", `\u8282\u70B9\u4E0D\u5B58\u5728:'${norm}'`);
|
|
19949
|
-
const updated = {
|
|
20160
|
+
const updated = {
|
|
20161
|
+
...existing,
|
|
20162
|
+
online,
|
|
20163
|
+
...online ? { lastSeenAt: now } : {},
|
|
20164
|
+
updatedAt: now
|
|
20165
|
+
};
|
|
19950
20166
|
await this.store.put(this.keyOf(norm), updated);
|
|
19951
20167
|
return updated;
|
|
19952
20168
|
}
|
|
20169
|
+
/**
|
|
20170
|
+
* 设备心跳专用:只把 `lastSeenAt` 刷到 now,不改 online 也不动 updatedAt(心跳不是元数据变更,
|
|
20171
|
+
* 不该扰动 updatedAt 的语义)。节点不存在时静默返回——心跳晚于节点删除是正常竞态,不报错。
|
|
20172
|
+
*/
|
|
20173
|
+
async touchSeen(path, now) {
|
|
20174
|
+
const norm = normalizePath(path);
|
|
20175
|
+
const existing = await this.read(norm);
|
|
20176
|
+
if (!existing) return;
|
|
20177
|
+
await this.store.put(this.keyOf(norm), { ...existing, lastSeenAt: now });
|
|
20178
|
+
}
|
|
19953
20179
|
/**
|
|
19954
20180
|
* 卸载;不存在 → not_found。删除后自底向上级联回收:
|
|
19955
20181
|
* 仅回收 registeredBy=system:auto 且再无子节点的 directory,遇显式节点/仍有子节点即停。
|
|
@@ -20088,6 +20314,8 @@ export {
|
|
|
20088
20314
|
deviceShellHelpModel,
|
|
20089
20315
|
deviceFsHelpModel,
|
|
20090
20316
|
deviceDirectoryHelpModel,
|
|
20317
|
+
derivePresence,
|
|
20318
|
+
DEVICE_CALL_TIMEOUT_MS,
|
|
20091
20319
|
DeviceGatewaySession,
|
|
20092
20320
|
FEEDBACK_HIDE_SCORE,
|
|
20093
20321
|
selectFeedbackSearchText,
|
|
@@ -20129,6 +20357,14 @@ export {
|
|
|
20129
20357
|
TOOL_SEARCH_INSERT_SQL,
|
|
20130
20358
|
TOOL_SEARCH_INSERT_SNAPSHOT_SQL,
|
|
20131
20359
|
SqlSearchIndex,
|
|
20360
|
+
PG_SEARCH_WRITE_LOCK_KEY,
|
|
20361
|
+
pgBulkInsertSql,
|
|
20362
|
+
PG_SEARCH_TOOLS_TABLE,
|
|
20363
|
+
PG_SEARCH_TOOLS_COLUMNS,
|
|
20364
|
+
PG_SEARCH_SNAPSHOTS_TABLE,
|
|
20365
|
+
PG_SEARCH_SNAPSHOTS_COLUMNS,
|
|
20366
|
+
PG_SEARCH_INSERT_ROWS_MAX,
|
|
20367
|
+
pgSearchDialect,
|
|
20132
20368
|
SecretStoreImpl,
|
|
20133
20369
|
SKILLHUB_CAPABILITIES,
|
|
20134
20370
|
skillhubScopeForCmd,
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DA2UI37.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-SBJMMSPA.js";
|
|
9
|
+
import "./chunk-Q44CYUSI.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TPGTA43F.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/circleci/api.ts
|
|
@@ -2,14 +2,14 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DA2UI37.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-SBJMMSPA.js";
|
|
9
|
+
import "./chunk-Q44CYUSI.js";
|
|
10
10
|
import {
|
|
11
11
|
external_exports
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TPGTA43F.js";
|
|
13
13
|
import "./chunk-MLKGABMK.js";
|
|
14
14
|
|
|
15
15
|
// ../plugins/src/clerk/api.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DA2UI37.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-SBJMMSPA.js";
|
|
9
|
+
import "./chunk-Q44CYUSI.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TPGTA43F.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/cloudflare_dns/api.ts
|
|
@@ -2,14 +2,14 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DA2UI37.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-SBJMMSPA.js";
|
|
9
|
+
import "./chunk-Q44CYUSI.js";
|
|
10
10
|
import {
|
|
11
11
|
external_exports
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-TPGTA43F.js";
|
|
13
13
|
import "./chunk-MLKGABMK.js";
|
|
14
14
|
|
|
15
15
|
// ../plugins/src/cohere/api.ts
|
|
@@ -2,15 +2,15 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireCredential,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DA2UI37.js";
|
|
6
6
|
import {
|
|
7
7
|
guardedFetch
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-SBJMMSPA.js";
|
|
9
|
+
import "./chunk-Q44CYUSI.js";
|
|
10
10
|
import {
|
|
11
11
|
TBError,
|
|
12
12
|
external_exports
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TPGTA43F.js";
|
|
14
14
|
import "./chunk-MLKGABMK.js";
|
|
15
15
|
|
|
16
16
|
// ../plugins/src/confluence/api.ts
|
|
@@ -2,16 +2,16 @@ import {
|
|
|
2
2
|
createProviderPlugin,
|
|
3
3
|
requireApiKey,
|
|
4
4
|
upstreamError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2DA2UI37.js";
|
|
6
6
|
import {
|
|
7
7
|
assertPublicHttpUrl,
|
|
8
8
|
guardedFetch
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-SBJMMSPA.js";
|
|
10
|
+
import "./chunk-Q44CYUSI.js";
|
|
11
11
|
import {
|
|
12
12
|
TBError,
|
|
13
13
|
external_exports
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-TPGTA43F.js";
|
|
15
15
|
import "./chunk-MLKGABMK.js";
|
|
16
16
|
|
|
17
17
|
// ../plugins/src/convertapi/schema.ts
|