@zackbart/connecta 0.9.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/CHANGELOG.md +145 -0
- package/README.md +43 -91
- package/dist/catalog-service.d.ts +8 -0
- package/dist/catalog-service.d.ts.map +1 -1
- package/dist/catalog-service.js +24 -5
- package/dist/catalog-service.js.map +1 -1
- package/dist/catalog.d.ts +34 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +264 -40
- package/dist/catalog.js.map +1 -1
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +26 -0
- package/dist/errors.js.map +1 -1
- package/dist/execute.d.ts +3 -1
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +87 -20
- package/dist/execute.js.map +1 -1
- package/dist/executor-result.d.ts.map +1 -1
- package/dist/executor-result.js +37 -6
- package/dist/executor-result.js.map +1 -1
- package/dist/executors/quickjs-protocol.d.ts +12 -0
- package/dist/executors/quickjs-protocol.d.ts.map +1 -1
- package/dist/executors/quickjs-protocol.js +14 -0
- package/dist/executors/quickjs-protocol.js.map +1 -1
- package/dist/executors/quickjs-runtime.d.ts.map +1 -1
- package/dist/executors/quickjs-runtime.js +6 -3
- package/dist/executors/quickjs-runtime.js.map +1 -1
- package/dist/executors/quickjs.d.ts.map +1 -1
- package/dist/executors/quickjs.js +10 -4
- package/dist/executors/quickjs.js.map +1 -1
- package/dist/index.d.ts +16 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -1
- package/dist/invocation.d.ts.map +1 -1
- package/dist/invocation.js +1 -4
- package/dist/invocation.js.map +1 -1
- package/dist/meta-tools.d.ts +26 -5
- package/dist/meta-tools.d.ts.map +1 -1
- package/dist/meta-tools.js +86 -42
- package/dist/meta-tools.js.map +1 -1
- package/dist/routes/mcp.d.ts.map +1 -1
- package/dist/routes/mcp.js +8 -2
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/shared.d.ts +8 -2
- package/dist/routes/shared.d.ts.map +1 -1
- package/dist/routes/shared.js.map +1 -1
- package/dist/skills.d.ts +17 -5
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +70 -17
- package/dist/skills.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +2 -2
- package/src/catalog-service.ts +44 -5
- package/src/catalog.ts +327 -33
- package/src/errors.ts +28 -0
- package/src/execute.ts +126 -42
- package/src/executor-result.ts +50 -6
- package/src/executors/quickjs-protocol.ts +19 -0
- package/src/executors/quickjs-runtime.ts +6 -2
- package/src/executors/quickjs.ts +10 -3
- package/src/index.ts +52 -4
- package/src/invocation.ts +1 -5
- package/src/meta-tools.ts +118 -55
- package/src/routes/mcp.ts +8 -2
- package/src/routes/shared.ts +8 -1
- package/src/skills.ts +86 -16
- package/src/types.ts +15 -0
- package/src/version.ts +1 -1
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
* a bump that forgets this file fails the build rather than shipping a stale
|
|
5
5
|
* version to `/health` and to downstream MCP handshakes.
|
|
6
6
|
*/
|
|
7
|
-
export declare const CONNECTA_VERSION = "0.
|
|
7
|
+
export declare const CONNECTA_VERSION = "0.10.0";
|
|
8
8
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,WAAW,CAAC"}
|
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zackbart/connecta",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
|
-
"description": "One MCP to rule them all — a single MCP endpoint aggregating many downstream connectors behind
|
|
6
|
+
"description": "One MCP to rule them all — a single MCP endpoint aggregating many downstream connectors behind a code-first surface of seven meta-tools.",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"engines": {
|
|
9
9
|
"node": ">=20.9.0"
|
package/src/catalog-service.ts
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
compactSchema,
|
|
3
|
+
lexicalCorpusStatistics,
|
|
3
4
|
lexicalSearchQuery,
|
|
4
5
|
rankTools,
|
|
6
|
+
schemaObjectKeys,
|
|
5
7
|
summarizeDescription,
|
|
6
8
|
} from "./catalog.js";
|
|
7
9
|
import {
|
|
8
10
|
mapSettledWithConcurrency,
|
|
9
11
|
resolveDiscoveryConcurrency,
|
|
10
12
|
} from "./concurrency.js";
|
|
11
|
-
import { classifyCallError,
|
|
13
|
+
import { classifyCallError, framingError } from "./errors.js";
|
|
12
14
|
import type { CallErrorDetails } from "./errors.js";
|
|
13
15
|
import type {
|
|
14
16
|
ConnectorOperationOptions,
|
|
@@ -103,6 +105,8 @@ export interface CatalogSearchArgs {
|
|
|
103
105
|
offset?: number;
|
|
104
106
|
fullDescriptions?: boolean;
|
|
105
107
|
includeSchemas?: "compact" | "json";
|
|
108
|
+
/** Code-mode helper metadata; never exposed by the public search_tools schema. */
|
|
109
|
+
includeSchemaKeys?: boolean;
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
export interface CatalogDescribeArgs {
|
|
@@ -120,10 +124,39 @@ interface CatalogSearchEntry {
|
|
|
120
124
|
description?: string;
|
|
121
125
|
inputSchema?: unknown;
|
|
122
126
|
outputSchema?: unknown;
|
|
127
|
+
inputKeys?: string[];
|
|
128
|
+
requiredInputKeys?: string[];
|
|
129
|
+
outputKeys?: string[];
|
|
123
130
|
annotations?: ToolDef["annotations"];
|
|
124
131
|
};
|
|
125
132
|
}
|
|
126
133
|
|
|
134
|
+
/**
|
|
135
|
+
* Code-mode key metadata for one match. Each half is omitted when its schema
|
|
136
|
+
* does not resolve to an object shape, so a program reads "no metadata, use the
|
|
137
|
+
* rendered schema" rather than "this tool has no fields".
|
|
138
|
+
*/
|
|
139
|
+
function schemaKeyMetadata(
|
|
140
|
+
input: JsonSchema,
|
|
141
|
+
output: JsonSchema | undefined,
|
|
142
|
+
): {
|
|
143
|
+
inputKeys?: string[];
|
|
144
|
+
requiredInputKeys?: string[];
|
|
145
|
+
outputKeys?: string[];
|
|
146
|
+
} {
|
|
147
|
+
const inputKeys = schemaObjectKeys(input);
|
|
148
|
+
const outputKeys = schemaObjectKeys(output);
|
|
149
|
+
return {
|
|
150
|
+
...(inputKeys
|
|
151
|
+
? {
|
|
152
|
+
inputKeys: inputKeys.properties,
|
|
153
|
+
requiredInputKeys: inputKeys.required,
|
|
154
|
+
}
|
|
155
|
+
: {}),
|
|
156
|
+
...(outputKeys ? { outputKeys: outputKeys.properties } : {}),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
127
160
|
export interface CatalogSearchPage {
|
|
128
161
|
entries: CatalogSearchEntry[];
|
|
129
162
|
total: number;
|
|
@@ -166,10 +199,6 @@ export type CatalogResolution =
|
|
|
166
199
|
cause?: unknown;
|
|
167
200
|
};
|
|
168
201
|
|
|
169
|
-
function framingError(code: string, message: string): CallErrorDetails {
|
|
170
|
-
return { code, message, retryable: messageLooksRetryable(message) };
|
|
171
|
-
}
|
|
172
|
-
|
|
173
202
|
function renderSchema(schema: JsonSchema, format: "compact" | "json"): unknown {
|
|
174
203
|
return format === "json" ? schema : compactSchema(schema);
|
|
175
204
|
}
|
|
@@ -391,6 +420,12 @@ export class CatalogService {
|
|
|
391
420
|
order: number;
|
|
392
421
|
}> = [];
|
|
393
422
|
let matchMode: "all" | "partial" = "all";
|
|
423
|
+
const statistics = lexicalCorpusStatistics(
|
|
424
|
+
catalogs.flatMap((catalog) =>
|
|
425
|
+
catalog.status === "fulfilled" ? [catalog.value] : [],
|
|
426
|
+
),
|
|
427
|
+
retrievalQuery,
|
|
428
|
+
);
|
|
394
429
|
const collectMatches = (mode: "all" | "partial") => {
|
|
395
430
|
matches.length = 0;
|
|
396
431
|
let orderBase = 0;
|
|
@@ -404,6 +439,7 @@ export class CatalogService {
|
|
|
404
439
|
catalog.value,
|
|
405
440
|
retrievalQuery,
|
|
406
441
|
mode,
|
|
442
|
+
statistics,
|
|
407
443
|
)) {
|
|
408
444
|
matches.push({
|
|
409
445
|
connector,
|
|
@@ -450,6 +486,9 @@ export class CatalogService {
|
|
|
450
486
|
renderSchema(match.tool.outputSchema, args.includeSchemas),
|
|
451
487
|
}
|
|
452
488
|
: {}),
|
|
489
|
+
...(args.includeSchemas && args.includeSchemaKeys
|
|
490
|
+
? schemaKeyMetadata(input, match.tool.outputSchema)
|
|
491
|
+
: {}),
|
|
453
492
|
...(match.tool.annotations
|
|
454
493
|
? { annotations: match.tool.annotations }
|
|
455
494
|
: {}),
|
package/src/catalog.ts
CHANGED
|
@@ -13,8 +13,19 @@ export function summarizeDescription(
|
|
|
13
13
|
return `${compact.slice(0, DEFAULT_DESCRIPTION_LENGTH - 1).trimEnd()}…`;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
function lexicalTokens(text: string): string[] {
|
|
17
|
+
return text
|
|
18
|
+
.replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
|
|
19
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
20
|
+
.toLowerCase()
|
|
21
|
+
.replace(/[^a-z0-9]+/g, " ")
|
|
22
|
+
.trim()
|
|
23
|
+
.split(/\s+/)
|
|
24
|
+
.filter(Boolean);
|
|
25
|
+
}
|
|
26
|
+
|
|
16
27
|
function normalized(text: string): string {
|
|
17
|
-
return text
|
|
28
|
+
return lexicalTokens(text).join(" ");
|
|
18
29
|
}
|
|
19
30
|
|
|
20
31
|
/**
|
|
@@ -75,7 +86,14 @@ export function lexicalSearchQuery(query: string): string {
|
|
|
75
86
|
interface SearchDocument {
|
|
76
87
|
tool: ToolDef;
|
|
77
88
|
name: string;
|
|
78
|
-
|
|
89
|
+
nameTokens: string[];
|
|
90
|
+
descriptionTokens: string[];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
interface SearchIndex {
|
|
94
|
+
documents: SearchDocument[];
|
|
95
|
+
nameTokenDocuments: ReadonlyMap<string, readonly ToolDef[]>;
|
|
96
|
+
descriptionTokenDocuments: ReadonlyMap<string, readonly ToolDef[]>;
|
|
79
97
|
}
|
|
80
98
|
|
|
81
99
|
export type LexicalMatchMode = "all" | "partial";
|
|
@@ -86,19 +104,174 @@ export interface RankedTool {
|
|
|
86
104
|
order: number;
|
|
87
105
|
}
|
|
88
106
|
|
|
89
|
-
const
|
|
107
|
+
const searchIndexes = new WeakMap<ToolDef[], SearchIndex>();
|
|
108
|
+
|
|
109
|
+
function indexFor(tools: ToolDef[]): SearchIndex {
|
|
110
|
+
let index = searchIndexes.get(tools);
|
|
111
|
+
if (!index) {
|
|
112
|
+
const nameTokenDocuments = new Map<string, ToolDef[]>();
|
|
113
|
+
const descriptionTokenDocuments = new Map<string, ToolDef[]>();
|
|
114
|
+
const addTokens = (
|
|
115
|
+
target: Map<string, ToolDef[]>,
|
|
116
|
+
tokens: string[],
|
|
117
|
+
tool: ToolDef,
|
|
118
|
+
) => {
|
|
119
|
+
for (const token of new Set(tokens)) {
|
|
120
|
+
const documents = target.get(token) ?? [];
|
|
121
|
+
documents.push(tool);
|
|
122
|
+
target.set(token, documents);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
const documents = tools.map((tool) => {
|
|
126
|
+
const nameTokens = lexicalTokens(tool.name);
|
|
127
|
+
const descriptionTokens = lexicalTokens(tool.description ?? "");
|
|
128
|
+
addTokens(nameTokenDocuments, nameTokens, tool);
|
|
129
|
+
addTokens(descriptionTokenDocuments, descriptionTokens, tool);
|
|
130
|
+
return {
|
|
131
|
+
tool,
|
|
132
|
+
name: nameTokens.join(" "),
|
|
133
|
+
nameTokens,
|
|
134
|
+
descriptionTokens,
|
|
135
|
+
};
|
|
136
|
+
});
|
|
137
|
+
index = {
|
|
138
|
+
documents,
|
|
139
|
+
nameTokenDocuments,
|
|
140
|
+
descriptionTokenDocuments,
|
|
141
|
+
};
|
|
142
|
+
searchIndexes.set(tools, index);
|
|
143
|
+
}
|
|
144
|
+
return index;
|
|
145
|
+
}
|
|
90
146
|
|
|
91
147
|
function documentsFor(tools: ToolDef[]): SearchDocument[] {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
148
|
+
return indexFor(tools).documents;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Whole-token equality is the ordinary lexical match. A deliberately narrow
|
|
153
|
+
* inflection check retains useful singular/plural and past-tense recall
|
|
154
|
+
* without bringing back arbitrary substring matches (`list` must not match
|
|
155
|
+
* `enlist`, and `record` must not match the noun `recording`).
|
|
156
|
+
*/
|
|
157
|
+
function inflectionVariants(base: string): string[] {
|
|
158
|
+
return [
|
|
159
|
+
`${base}s`,
|
|
160
|
+
`${base}es`,
|
|
161
|
+
`${base}ed`,
|
|
162
|
+
...(base.endsWith("e") ? [`${base}d`] : []),
|
|
163
|
+
...(base.endsWith("y")
|
|
164
|
+
? [
|
|
165
|
+
`${base.slice(0, -1)}ies`,
|
|
166
|
+
`${base.slice(0, -1)}ied`,
|
|
167
|
+
]
|
|
168
|
+
: []),
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
function matchingTokenCandidates(term: string): Set<string> {
|
|
173
|
+
const candidates = new Set([term, ...inflectionVariants(term)]);
|
|
174
|
+
const possibleBases = [
|
|
175
|
+
...(term.endsWith("s") ? [term.slice(0, -1)] : []),
|
|
176
|
+
...(term.endsWith("es") ? [term.slice(0, -2)] : []),
|
|
177
|
+
...(term.endsWith("ed") ? [term.slice(0, -2)] : []),
|
|
178
|
+
...(term.endsWith("d") ? [term.slice(0, -1)] : []),
|
|
179
|
+
...(term.endsWith("ies")
|
|
180
|
+
? [`${term.slice(0, -3)}y`]
|
|
181
|
+
: []),
|
|
182
|
+
...(term.endsWith("ied")
|
|
183
|
+
? [`${term.slice(0, -3)}y`]
|
|
184
|
+
: []),
|
|
185
|
+
];
|
|
186
|
+
for (const base of possibleBases) {
|
|
187
|
+
if (base && inflectionVariants(base).includes(term)) {
|
|
188
|
+
candidates.add(base);
|
|
189
|
+
}
|
|
100
190
|
}
|
|
101
|
-
return
|
|
191
|
+
return candidates;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export interface LexicalCorpusStatistics {
|
|
195
|
+
documentCount: number;
|
|
196
|
+
documentFrequency: ReadonlyMap<string, number>;
|
|
197
|
+
nameMatches: ReadonlyMap<string, ReadonlySet<ToolDef>>;
|
|
198
|
+
descriptionMatches: ReadonlyMap<string, ReadonlySet<ToolDef>>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Compute query-specific document frequencies across every available catalog.
|
|
203
|
+
* The caller does this once per search and shares the result with each
|
|
204
|
+
* connector rank, so ubiquitous words contribute less than discriminative
|
|
205
|
+
* ones without making any action word a stopword.
|
|
206
|
+
*/
|
|
207
|
+
export function lexicalCorpusStatistics(
|
|
208
|
+
toolSets: ToolDef[][],
|
|
209
|
+
query: string,
|
|
210
|
+
): LexicalCorpusStatistics {
|
|
211
|
+
const terms = [...new Set(lexicalTokens(query))];
|
|
212
|
+
if (terms.length === 0) {
|
|
213
|
+
return {
|
|
214
|
+
documentCount: toolSets.reduce(
|
|
215
|
+
(total, tools) => total + tools.length,
|
|
216
|
+
0,
|
|
217
|
+
),
|
|
218
|
+
documentFrequency: new Map(),
|
|
219
|
+
nameMatches: new Map(),
|
|
220
|
+
descriptionMatches: new Map(),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
const nameMatches = new Map<string, Set<ToolDef>>();
|
|
224
|
+
const descriptionMatches = new Map<string, Set<ToolDef>>();
|
|
225
|
+
for (const term of terms) {
|
|
226
|
+
const termNameMatches = new Set<ToolDef>();
|
|
227
|
+
const termDescriptionMatches = new Set<ToolDef>();
|
|
228
|
+
for (const tools of toolSets) {
|
|
229
|
+
const index = indexFor(tools);
|
|
230
|
+
for (const candidate of matchingTokenCandidates(term)) {
|
|
231
|
+
for (const tool of index.nameTokenDocuments.get(candidate) ?? []) {
|
|
232
|
+
termNameMatches.add(tool);
|
|
233
|
+
}
|
|
234
|
+
for (
|
|
235
|
+
const tool of
|
|
236
|
+
index.descriptionTokenDocuments.get(candidate) ?? []
|
|
237
|
+
) {
|
|
238
|
+
termDescriptionMatches.add(tool);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
nameMatches.set(term, termNameMatches);
|
|
243
|
+
descriptionMatches.set(term, termDescriptionMatches);
|
|
244
|
+
}
|
|
245
|
+
const documentFrequency = new Map(
|
|
246
|
+
terms.map((term) => [
|
|
247
|
+
term,
|
|
248
|
+
new Set([
|
|
249
|
+
...(nameMatches.get(term) ?? []),
|
|
250
|
+
...(descriptionMatches.get(term) ?? []),
|
|
251
|
+
]).size,
|
|
252
|
+
]),
|
|
253
|
+
);
|
|
254
|
+
return {
|
|
255
|
+
documentCount: toolSets.reduce(
|
|
256
|
+
(total, tools) => total + tools.length,
|
|
257
|
+
0,
|
|
258
|
+
),
|
|
259
|
+
documentFrequency,
|
|
260
|
+
nameMatches,
|
|
261
|
+
descriptionMatches,
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
function inverseDocumentFrequency(
|
|
266
|
+
term: string,
|
|
267
|
+
statistics: LexicalCorpusStatistics,
|
|
268
|
+
): number {
|
|
269
|
+
const frequency = statistics.documentFrequency.get(term) ?? 0;
|
|
270
|
+
return Math.log(
|
|
271
|
+
1 +
|
|
272
|
+
(statistics.documentCount - frequency + 0.5) /
|
|
273
|
+
(frequency + 0.5),
|
|
274
|
+
);
|
|
102
275
|
}
|
|
103
276
|
|
|
104
277
|
function scoreDocument(
|
|
@@ -106,30 +279,45 @@ function scoreDocument(
|
|
|
106
279
|
phrase: string,
|
|
107
280
|
terms: string[],
|
|
108
281
|
mode: LexicalMatchMode,
|
|
282
|
+
statistics: LexicalCorpusStatistics,
|
|
109
283
|
): number | null {
|
|
110
284
|
if (!phrase) return 0;
|
|
111
|
-
const
|
|
112
|
-
|
|
285
|
+
const matchedTerms = terms.filter((term) =>
|
|
286
|
+
statistics.nameMatches.get(term)?.has(doc.tool) ||
|
|
287
|
+
statistics.descriptionMatches.get(term)?.has(doc.tool),
|
|
288
|
+
);
|
|
113
289
|
if (mode === "all" && matchedTerms.length !== terms.length) return null;
|
|
114
|
-
if (
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
290
|
+
if (matchedTerms.length === 0) return null;
|
|
291
|
+
|
|
292
|
+
// Coverage remains meaningful in partial mode, but is IDF-weighted rather
|
|
293
|
+
// than a raw term count: one rare domain term can beat several ubiquitous
|
|
294
|
+
// catalog verbs.
|
|
295
|
+
let score = matchedTerms.reduce(
|
|
296
|
+
(total, term) =>
|
|
297
|
+
total + 4 * inverseDocumentFrequency(term, statistics),
|
|
298
|
+
0,
|
|
299
|
+
);
|
|
300
|
+
const phraseWeight = terms.reduce(
|
|
301
|
+
(total, term) =>
|
|
302
|
+
total + inverseDocumentFrequency(term, statistics),
|
|
303
|
+
0,
|
|
304
|
+
);
|
|
305
|
+
if (doc.name === phrase) score += 40 * phraseWeight;
|
|
306
|
+
else if (doc.name.startsWith(`${phrase} `)) score += 24 * phraseWeight;
|
|
307
|
+
else if (` ${doc.name} `.includes(` ${phrase} `)) {
|
|
308
|
+
score += 16 * phraseWeight;
|
|
122
309
|
}
|
|
123
310
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
else if (
|
|
132
|
-
|
|
311
|
+
for (const term of matchedTerms) {
|
|
312
|
+
const weight = inverseDocumentFrequency(term, statistics);
|
|
313
|
+
if (doc.nameTokens.includes(term)) score += 12 * weight;
|
|
314
|
+
else if (statistics.nameMatches.get(term)?.has(doc.tool)) {
|
|
315
|
+
score += 8 * weight;
|
|
316
|
+
}
|
|
317
|
+
if (doc.descriptionTokens.includes(term)) score += 3 * weight;
|
|
318
|
+
else if (statistics.descriptionMatches.get(term)?.has(doc.tool)) {
|
|
319
|
+
score += 1.5 * weight;
|
|
320
|
+
}
|
|
133
321
|
}
|
|
134
322
|
return score;
|
|
135
323
|
}
|
|
@@ -139,12 +327,16 @@ export function rankTools(
|
|
|
139
327
|
tools: ToolDef[],
|
|
140
328
|
query: string,
|
|
141
329
|
mode: LexicalMatchMode = "all",
|
|
330
|
+
statistics: LexicalCorpusStatistics = lexicalCorpusStatistics(
|
|
331
|
+
[tools],
|
|
332
|
+
query,
|
|
333
|
+
),
|
|
142
334
|
): RankedTool[] {
|
|
143
335
|
const phrase = normalized(query);
|
|
144
|
-
const terms = phrase.split(/\s+/).filter(Boolean);
|
|
336
|
+
const terms = [...new Set(phrase.split(/\s+/).filter(Boolean))];
|
|
145
337
|
const ranked: RankedTool[] = [];
|
|
146
338
|
documentsFor(tools).forEach((doc, order) => {
|
|
147
|
-
const score = scoreDocument(doc, phrase, terms, mode);
|
|
339
|
+
const score = scoreDocument(doc, phrase, terms, mode, statistics);
|
|
148
340
|
if (score !== null) ranked.push({ tool: doc.tool, score, order });
|
|
149
341
|
});
|
|
150
342
|
return ranked;
|
|
@@ -300,3 +492,105 @@ export function compactSchema(schema: JsonSchema): string {
|
|
|
300
492
|
compactSchemas.set(schema, rendered);
|
|
301
493
|
return rendered;
|
|
302
494
|
}
|
|
495
|
+
|
|
496
|
+
/** The property and required names a schema resolves to, or undefined. */
|
|
497
|
+
export interface SchemaObjectKeys {
|
|
498
|
+
properties: string[];
|
|
499
|
+
required: string[];
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Walk a schema the way renderSchema does — composing `allOf` and resolving
|
|
504
|
+
* `$ref` against the root's `$defs`/`definitions` — and collect the top-level
|
|
505
|
+
* property names it would render. A shallow `Object.keys(schema.properties)`
|
|
506
|
+
* disagrees with the rendered compact schema for exactly the shapes real
|
|
507
|
+
* connectors emit (a top-level `$ref` to a `$defs` entry, or the OpenAPI
|
|
508
|
+
* "extend this base" `allOf`), which is worse than no metadata at all: it
|
|
509
|
+
* reports an empty field list for a tool that plainly has fields.
|
|
510
|
+
*
|
|
511
|
+
* Returns undefined when the schema is not an object shape at all — a union,
|
|
512
|
+
* array, enum, or unresolvable `$ref`. Absent metadata tells a caller to read
|
|
513
|
+
* the rendered schema instead; an empty array would claim the tool takes no
|
|
514
|
+
* fields.
|
|
515
|
+
*/
|
|
516
|
+
export function schemaObjectKeys(
|
|
517
|
+
schema: JsonSchema | undefined,
|
|
518
|
+
): SchemaObjectKeys | undefined {
|
|
519
|
+
if (!schema) return undefined;
|
|
520
|
+
const defs = {
|
|
521
|
+
...(schema.$defs as Record<string, unknown>),
|
|
522
|
+
...(schema.definitions as Record<string, unknown>),
|
|
523
|
+
};
|
|
524
|
+
try {
|
|
525
|
+
return objectKeys(schema, defs, new Set(), 0);
|
|
526
|
+
} catch {
|
|
527
|
+
return undefined;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/** Merge in declaration order, first occurrence winning, as renderSchema renders. */
|
|
532
|
+
function mergedKeys(
|
|
533
|
+
parts: readonly SchemaObjectKeys[],
|
|
534
|
+
): SchemaObjectKeys | undefined {
|
|
535
|
+
if (parts.length === 0) return undefined;
|
|
536
|
+
return {
|
|
537
|
+
properties: [...new Set(parts.flatMap((part) => part.properties))],
|
|
538
|
+
required: [...new Set(parts.flatMap((part) => part.required))],
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
/** The key-collecting twin of renderSchema; the branch order must match it. */
|
|
543
|
+
function objectKeys(
|
|
544
|
+
schema: unknown,
|
|
545
|
+
defs: Record<string, unknown>,
|
|
546
|
+
seen: Set<string>,
|
|
547
|
+
depth: number,
|
|
548
|
+
): SchemaObjectKeys | undefined {
|
|
549
|
+
if (depth > 4) return undefined;
|
|
550
|
+
if (schema === null || typeof schema !== "object") return undefined;
|
|
551
|
+
const s = schema as Record<string, unknown>;
|
|
552
|
+
|
|
553
|
+
if (Array.isArray(s.allOf)) {
|
|
554
|
+
const { allOf: _members, ...own } = s;
|
|
555
|
+
const parts = declaresShape(own)
|
|
556
|
+
? [objectKeys(own, defs, seen, depth)]
|
|
557
|
+
: [];
|
|
558
|
+
for (const member of s.allOf) {
|
|
559
|
+
parts.push(objectKeys(member, defs, seen, depth + 1));
|
|
560
|
+
}
|
|
561
|
+
// An allOf whose members are not all object shapes renders as an
|
|
562
|
+
// intersection with a non-object half; no single key list describes it.
|
|
563
|
+
return parts.every((part) => part !== undefined)
|
|
564
|
+
? mergedKeys(parts as SchemaObjectKeys[])
|
|
565
|
+
: undefined;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (typeof s.$ref === "string") {
|
|
569
|
+
const name = refName(s.$ref);
|
|
570
|
+
if (seen.has(name)) return undefined;
|
|
571
|
+
const target = defs[name];
|
|
572
|
+
if (target === undefined) return undefined;
|
|
573
|
+
seen.add(name);
|
|
574
|
+
const resolved = objectKeys(target, defs, seen, depth);
|
|
575
|
+
seen.delete(name);
|
|
576
|
+
return resolved;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
if (Array.isArray(s.oneOf ?? s.anyOf)) return undefined;
|
|
580
|
+
if (Array.isArray(s.enum)) return undefined;
|
|
581
|
+
if (s.const !== undefined) return undefined;
|
|
582
|
+
if (s.type === "array" || s.items) return undefined;
|
|
583
|
+
if (s.type === "object" || s.properties) {
|
|
584
|
+
const props = s.properties;
|
|
585
|
+
if (props === null || Array.isArray(props) || typeof props !== "object") {
|
|
586
|
+
return { properties: [], required: [] };
|
|
587
|
+
}
|
|
588
|
+
return {
|
|
589
|
+
properties: Object.keys(props as Record<string, unknown>),
|
|
590
|
+
required: Array.isArray(s.required)
|
|
591
|
+
? s.required.filter((key): key is string => typeof key === "string")
|
|
592
|
+
: [],
|
|
593
|
+
};
|
|
594
|
+
}
|
|
595
|
+
return undefined;
|
|
596
|
+
}
|
package/src/errors.ts
CHANGED
|
@@ -102,6 +102,34 @@ export interface CallErrorDetails {
|
|
|
102
102
|
retry?: string;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Codes whose retryability is a fact about connecta's own framing, never a
|
|
107
|
+
* guess from text. The message embeds the address the caller asked for, so a
|
|
108
|
+
* connector named `svc-503` or `temporary-export` would otherwise flip a policy
|
|
109
|
+
* refusal into `retryable: true` through the heuristic below — and a caller that
|
|
110
|
+
* trusts the flag would cheerfully retry a refusal forever.
|
|
111
|
+
*/
|
|
112
|
+
const NEVER_RETRYABLE_FRAMING = new Set([
|
|
113
|
+
"unknown_address",
|
|
114
|
+
"unknown_tool",
|
|
115
|
+
"ambiguous_tool_alias",
|
|
116
|
+
"destructive_tool_requires_approval",
|
|
117
|
+
]);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Details for a failure connecta itself framed — an address it could not
|
|
121
|
+
* resolve, a tool it refuses to run — rather than one a connector threw.
|
|
122
|
+
*/
|
|
123
|
+
export function framingError(code: string, message: string): CallErrorDetails {
|
|
124
|
+
return {
|
|
125
|
+
code,
|
|
126
|
+
message,
|
|
127
|
+
retryable: NEVER_RETRYABLE_FRAMING.has(code)
|
|
128
|
+
? false
|
|
129
|
+
: messageLooksRetryable(message),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
105
133
|
const RETRYABLE_MESSAGE_RE =
|
|
106
134
|
/timeout|timed out|econnreset|econnrefused|temporar|rate.?limit|429|502|503|504|refcountedcanceler|different request/i;
|
|
107
135
|
const TIMEOUT_MESSAGE_RE = /timed out|timeout/i;
|