@cyanheads/cyanheads-mcp-server 0.4.2 → 0.4.4
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/AGENTS.md +14 -13
- package/CLAUDE.md +14 -13
- package/Dockerfile +41 -29
- package/README.md +40 -22
- package/changelog/0.4.x/0.4.3.md +34 -0
- package/changelog/0.4.x/0.4.4.md +36 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts +34 -2
- package/dist/mcp-server/tools/definitions/describe-entry.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/describe-entry.tool.js +151 -106
- package/dist/mcp-server/tools/definitions/describe-entry.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts +14 -0
- package/dist/mcp-server/tools/definitions/search-catalog.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-catalog.tool.js +103 -23
- package/dist/mcp-server/tools/definitions/search-catalog.tool.js.map +1 -1
- package/dist/services/catalog/catalog-service.d.ts +12 -9
- package/dist/services/catalog/catalog-service.d.ts.map +1 -1
- package/dist/services/catalog/catalog-service.js +98 -25
- package/dist/services/catalog/catalog-service.js.map +1 -1
- package/dist/services/catalog/remote-catalog-provider.d.ts +2 -2
- package/dist/services/catalog/remote-catalog-provider.d.ts.map +1 -1
- package/dist/services/catalog/remote-catalog-provider.js +34 -5
- package/dist/services/catalog/remote-catalog-provider.js.map +1 -1
- package/dist/services/catalog/self-record.js +5 -5
- package/dist/services/catalog/snippets.d.ts.map +1 -1
- package/dist/services/catalog/snippets.js +50 -18
- package/dist/services/catalog/snippets.js.map +1 -1
- package/dist/services/catalog/types.d.ts +29 -14
- package/dist/services/catalog/types.d.ts.map +1 -1
- package/dist/services/catalog/types.js +12 -3
- package/dist/services/catalog/types.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +15 -14
- package/server.json +11 -13
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { tool, z } from '@cyanheads/mcp-ts-core';
|
|
8
8
|
import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
|
|
9
|
+
import { markdown } from '@cyanheads/mcp-ts-core/utils';
|
|
9
10
|
import { getCatalogService } from '../../../services/catalog/service-instance.js';
|
|
10
11
|
/**
|
|
11
12
|
* Upper bound on the query string. A natural-language capability description
|
|
@@ -14,6 +15,14 @@ import { getCatalogService } from '../../../services/catalog/service-instance.js
|
|
|
14
15
|
* model, which is the most expensive step in the request path.
|
|
15
16
|
*/
|
|
16
17
|
const QUERY_MAX_LENGTH = 500;
|
|
18
|
+
/** Most ranked results one call returns; a larger `limit` is served up to this and the rest named. */
|
|
19
|
+
const RESULTS_PER_CALL = 20;
|
|
20
|
+
/**
|
|
21
|
+
* Hard ceiling on `limit`, set above the catalog's tool count so a "return everything"
|
|
22
|
+
* request is served while garbage input like `1e6` is rejected. It bounds no cost:
|
|
23
|
+
* the full match set is ranked before the page is sliced.
|
|
24
|
+
*/
|
|
25
|
+
const LIMIT_MAX = 1000;
|
|
17
26
|
export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
18
27
|
title: 'Search Fleet Tools and Servers',
|
|
19
28
|
description: 'Search fleet tools and servers by natural-language description. Returns ranked matches with ' +
|
|
@@ -26,8 +35,9 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
26
35
|
.string()
|
|
27
36
|
.min(1)
|
|
28
37
|
.max(QUERY_MAX_LENGTH)
|
|
38
|
+
.regex(/\S/u, 'Query must contain a non-whitespace character.')
|
|
29
39
|
.describe('Natural language search query. Describe what you want to accomplish, a workflow, or a ' +
|
|
30
|
-
`capability area. 1-${QUERY_MAX_LENGTH} characters.`),
|
|
40
|
+
`capability area. 1-${QUERY_MAX_LENGTH} raw characters; surrounding whitespace is trimmed. Must contain non-whitespace text.`),
|
|
31
41
|
scope: z
|
|
32
42
|
.enum(['tools', 'servers'])
|
|
33
43
|
.default('tools')
|
|
@@ -40,11 +50,37 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
40
50
|
.number()
|
|
41
51
|
.int()
|
|
42
52
|
.min(1)
|
|
43
|
-
.max(
|
|
53
|
+
.max(LIMIT_MAX)
|
|
44
54
|
.default(5)
|
|
45
|
-
.describe(
|
|
55
|
+
.describe(`Maximum number of results to return (1-${LIMIT_MAX}). Default 5. At most ${RESULTS_PER_CALL} per call: a larger limit returns up to ${RESULTS_PER_CALL}, with a notice naming the offset to continue from when more matches follow.`),
|
|
56
|
+
offset: z
|
|
57
|
+
.number()
|
|
58
|
+
.int()
|
|
59
|
+
.min(0)
|
|
60
|
+
.default(0)
|
|
61
|
+
.describe('Result offset. Use nextOffset with the same query, scope, category, and limit; pages use the current catalog.'),
|
|
62
|
+
serversOffset: z
|
|
63
|
+
.number()
|
|
64
|
+
.int()
|
|
65
|
+
.min(0)
|
|
66
|
+
.default(0)
|
|
67
|
+
.describe('Independent server roll-up offset (10 per page). Use nextServersOffset; must be zero in servers scope.'),
|
|
46
68
|
}),
|
|
47
69
|
output: z.object({
|
|
70
|
+
offset: z.number().describe('Current ranked-result offset.'),
|
|
71
|
+
nextOffset: z
|
|
72
|
+
.number()
|
|
73
|
+
.nullable()
|
|
74
|
+
.describe('Next ranked-result offset, or null when exhausted.'),
|
|
75
|
+
serversOffset: z
|
|
76
|
+
.number()
|
|
77
|
+
.optional()
|
|
78
|
+
.describe('Current server roll-up offset; tools scope only.'),
|
|
79
|
+
nextServersOffset: z
|
|
80
|
+
.number()
|
|
81
|
+
.nullable()
|
|
82
|
+
.optional()
|
|
83
|
+
.describe('Next server roll-up offset, or null when exhausted; tools scope only.'),
|
|
48
84
|
results: z
|
|
49
85
|
.array(z
|
|
50
86
|
.object({
|
|
@@ -53,7 +89,7 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
53
89
|
.describe('Tool name (snake_case) or server name (kebab-case) depending on scope.'),
|
|
54
90
|
server: z
|
|
55
91
|
.string()
|
|
56
|
-
.describe('Server package name that owns this tool (e.g. "arxiv-mcp-server"). Same as name when scope is "servers".'),
|
|
92
|
+
.describe('Server package name that owns this tool (e.g. "arxiv-mcp-server"). Same as name when scope is "servers". Pass name and server to cyanheads_describe_entry to describe exactly this row.'),
|
|
57
93
|
brief: z.string().describe('One-line summary of what this tool or server does.'),
|
|
58
94
|
category: z
|
|
59
95
|
.enum(['research', 'government', 'public-data', 'utility'])
|
|
@@ -82,7 +118,7 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
82
118
|
})
|
|
83
119
|
.describe('A server roll-up entry.'))
|
|
84
120
|
.optional()
|
|
85
|
-
.describe('
|
|
121
|
+
.describe('Server roll-up from the full match set, independent of result offset/limit. Tools scope only. Ordered by topScore desc (name-tiebroken); 10 per page starting at serversOffset. Use nextServersOffset to continue and serversTotal for the full distinct count.'),
|
|
86
122
|
serversTotal: z
|
|
87
123
|
.number()
|
|
88
124
|
.optional()
|
|
@@ -93,12 +129,24 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
93
129
|
enrichment: {
|
|
94
130
|
effectiveQuery: z.string().describe('The query that was searched.'),
|
|
95
131
|
totalCount: z.number().describe('Total relevant matches before the limit was applied.'),
|
|
132
|
+
truncated: z
|
|
133
|
+
.boolean()
|
|
134
|
+
.optional()
|
|
135
|
+
.describe(`True when limit exceeded the ${RESULTS_PER_CALL}-per-call cap and more matches follow this page.`),
|
|
136
|
+
shown: z.number().optional().describe('Results returned on this capped page.'),
|
|
137
|
+
cap: z.number().optional().describe('Per-call result cap that was applied.'),
|
|
96
138
|
notice: z
|
|
97
139
|
.string()
|
|
98
140
|
.optional()
|
|
99
|
-
.describe(
|
|
141
|
+
.describe(`Guidance for zero matches, an exhausted result page, or a page cut to the ${RESULTS_PER_CALL}-per-call cap with more matches following (names the offset to continue from). Absent otherwise.`),
|
|
100
142
|
},
|
|
101
143
|
errors: [
|
|
144
|
+
{
|
|
145
|
+
reason: 'invalid_servers_offset',
|
|
146
|
+
code: JsonRpcErrorCode.ValidationError,
|
|
147
|
+
when: 'A nonzero serversOffset is supplied in servers scope.',
|
|
148
|
+
recovery: 'Set serversOffset to zero in servers scope; use offset to page server results.',
|
|
149
|
+
},
|
|
102
150
|
{
|
|
103
151
|
reason: 'catalog_empty',
|
|
104
152
|
code: JsonRpcErrorCode.ServiceUnavailable,
|
|
@@ -112,25 +160,41 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
112
160
|
},
|
|
113
161
|
],
|
|
114
162
|
async handler(input, ctx) {
|
|
163
|
+
if (input.scope === 'servers' && input.serversOffset !== 0) {
|
|
164
|
+
throw ctx.fail('invalid_servers_offset');
|
|
165
|
+
}
|
|
166
|
+
const query = input.query.trim();
|
|
115
167
|
ctx.log.info('Searching catalog', {
|
|
116
|
-
query
|
|
168
|
+
query,
|
|
117
169
|
scope: input.scope,
|
|
118
170
|
limit: input.limit,
|
|
119
171
|
});
|
|
120
172
|
const catalog = getCatalogService();
|
|
121
173
|
const allResults = await catalog.search({
|
|
122
|
-
query
|
|
174
|
+
query,
|
|
123
175
|
scope: input.scope,
|
|
124
176
|
...(input.category ? { category: input.category } : {}),
|
|
125
177
|
});
|
|
126
178
|
const totalMatched = allResults.length;
|
|
127
|
-
ctx.enrich.echo(
|
|
179
|
+
ctx.enrich.echo(query);
|
|
128
180
|
ctx.enrich.total(totalMatched);
|
|
129
181
|
if (totalMatched === 0) {
|
|
130
|
-
ctx.enrich.notice(`No ${input.scope} matched
|
|
131
|
-
|
|
182
|
+
ctx.enrich.notice(`No ${input.scope} matched. Try broadening the query${input.category ? ', removing the category filter,' : ''} or switching to scope "${input.scope === 'tools' ? 'servers' : 'tools'}".`);
|
|
183
|
+
}
|
|
184
|
+
else if (input.offset >= totalMatched) {
|
|
185
|
+
ctx.enrich.notice('No results on this page. Use offset 0 to return to the first result page.');
|
|
186
|
+
}
|
|
187
|
+
const results = allResults.slice(input.offset, input.offset + Math.min(input.limit, RESULTS_PER_CALL));
|
|
188
|
+
const nextOffset = input.offset + results.length < totalMatched ? input.offset + results.length : null;
|
|
189
|
+
const page = { results, scope: input.scope, offset: input.offset, nextOffset };
|
|
190
|
+
if (input.limit > RESULTS_PER_CALL && nextOffset !== null) {
|
|
191
|
+
const remaining = totalMatched - nextOffset;
|
|
192
|
+
ctx.enrich.truncated({
|
|
193
|
+
shown: results.length,
|
|
194
|
+
cap: RESULTS_PER_CALL,
|
|
195
|
+
guidance: `limit ${input.limit} exceeds the per-call cap of ${RESULTS_PER_CALL}; ${remaining} more ${remaining === 1 ? 'result follows' : 'results follow'}. Continue with offset ${nextOffset}.`,
|
|
196
|
+
});
|
|
132
197
|
}
|
|
133
|
-
const results = allResults.slice(0, input.limit);
|
|
134
198
|
ctx.log.info('Search complete', { totalMatched, returned: results.length });
|
|
135
199
|
if (input.scope === 'tools') {
|
|
136
200
|
// Build server roll-up from the full match set (before limit slice)
|
|
@@ -150,7 +214,7 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
150
214
|
const serversTotal = serverMap.size;
|
|
151
215
|
const servers = Array.from(serverMap.entries())
|
|
152
216
|
.sort(([nameA, a], [nameB, b]) => b.topScore - a.topScore || nameA.localeCompare(nameB))
|
|
153
|
-
.slice(
|
|
217
|
+
.slice(input.serversOffset, input.serversOffset + SERVERS_CAP)
|
|
154
218
|
.map(([name, agg]) => {
|
|
155
219
|
const record = catalog.getServer(name);
|
|
156
220
|
return {
|
|
@@ -161,32 +225,48 @@ export const searchCatalogTool = tool('cyanheads_search_catalog', {
|
|
|
161
225
|
topScore: agg.topScore,
|
|
162
226
|
};
|
|
163
227
|
});
|
|
164
|
-
return {
|
|
228
|
+
return {
|
|
229
|
+
...page,
|
|
230
|
+
servers,
|
|
231
|
+
serversTotal,
|
|
232
|
+
serversOffset: input.serversOffset,
|
|
233
|
+
nextServersOffset: input.serversOffset + servers.length < serversTotal
|
|
234
|
+
? input.serversOffset + servers.length
|
|
235
|
+
: null,
|
|
236
|
+
};
|
|
165
237
|
}
|
|
166
|
-
return
|
|
238
|
+
return page;
|
|
167
239
|
},
|
|
168
240
|
format: (result) => {
|
|
169
|
-
const
|
|
241
|
+
const label = (value) => /[\r\n]/u.test(value)
|
|
242
|
+
? `\n\n${markdown().codeBlock(value).build()}`
|
|
243
|
+
: markdown().inlineCode(value).build();
|
|
244
|
+
const lines = [
|
|
245
|
+
`**Scope:** ${result.scope}`,
|
|
246
|
+
`offset: ${result.offset}; nextOffset: ${result.nextOffset}`,
|
|
247
|
+
'',
|
|
248
|
+
];
|
|
170
249
|
if (result.results.length === 0) {
|
|
171
|
-
lines.push('No results matched.');
|
|
250
|
+
lines.push(result.offset > 0 ? 'No results on this page.' : 'No results matched.');
|
|
172
251
|
}
|
|
173
252
|
else {
|
|
174
253
|
for (const item of result.results) {
|
|
175
|
-
lines.push(`### ${item.name}`);
|
|
176
|
-
lines.push(`**Server:** ${item.server}
|
|
177
|
-
lines.push(item.brief);
|
|
254
|
+
lines.push(`### ${label(item.name)}`);
|
|
255
|
+
lines.push(`**Server:** ${label(item.server)}\n\n**Category:** ${item.category} | **Score:** ${item.score.toFixed(3)}`);
|
|
256
|
+
lines.push(markdown().codeBlock(item.brief).build());
|
|
178
257
|
lines.push('');
|
|
179
258
|
}
|
|
180
259
|
}
|
|
181
|
-
if (result.servers
|
|
260
|
+
if (result.servers) {
|
|
261
|
+
lines.push(`serversOffset: ${result.serversOffset}; nextServersOffset: ${result.nextServersOffset}`);
|
|
182
262
|
const cap = result.servers.length;
|
|
183
263
|
const total = result.serversTotal ?? cap;
|
|
184
264
|
const header = total > cap ? `## Servers (showing ${cap} of ${total})` : '## Servers';
|
|
185
265
|
lines.push(header);
|
|
186
266
|
lines.push('');
|
|
187
267
|
for (const s of result.servers) {
|
|
188
|
-
lines.push(
|
|
189
|
-
lines.push(s.brief);
|
|
268
|
+
lines.push(`${label(s.name)}\n\n(${s.category}) — ${s.matchedTools} matched tool${s.matchedTools === 1 ? '' : 's'}, top score ${s.topScore.toFixed(3)}`);
|
|
269
|
+
lines.push(markdown().codeBlock(s.brief).build());
|
|
190
270
|
lines.push('');
|
|
191
271
|
}
|
|
192
272
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-catalog.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-catalog.tool.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,0BAA0B,EAAE;IAChE,KAAK,EAAE,gCAAgC;IACvC,WAAW,EACT,8FAA8F;QAC9F,yFAAyF;QACzF,kFAAkF;IACpF,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;IACzD,IAAI,EAAE,CAAC,oCAAoC,CAAC;IAE5C,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,gBAAgB,CAAC;aACrB,QAAQ,CACP,wFAAwF;YACtF,sBAAsB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"search-catalog.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-catalog.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview CatalogService — fleet catalog with semantic search.
|
|
3
|
-
* Loads fleet.json (v2 with baked embeddings) at startup,
|
|
4
|
-
* Float32Array for cache locality, and serves
|
|
5
|
-
* embedding the query at runtime and
|
|
3
|
+
* Loads fleet.json (v2 with baked embeddings) at startup, normalizes each vector
|
|
4
|
+
* and packs it into a Float32Array for cache locality, and serves
|
|
5
|
+
* cosine-similarity search by embedding the query at runtime and
|
|
6
|
+
* dot-producting against the in-memory index.
|
|
6
7
|
* Polls the remote payload on a configurable interval; atomic swap on change.
|
|
7
8
|
* @module services/catalog/catalog-service
|
|
8
9
|
*/
|
|
9
10
|
import type { ServerConfig } from '../../config/server-config.js';
|
|
10
11
|
import { type IEmbeddingsRuntime } from './embeddings-runtime.js';
|
|
11
|
-
import type { CatalogCategory, CatalogRecord, CatalogSearchResult,
|
|
12
|
+
import type { CatalogCategory, CatalogRecord, CatalogSearchResult, CatalogToolEntry, ICatalogService } from './types.js';
|
|
12
13
|
type CatalogServiceConfig = Pick<ServerConfig, 'catalogUrl' | 'catalogFetchTimeoutMs' | 'catalogRefreshSeconds' | 'embeddingModelId' | 'similarityFloor'>;
|
|
13
14
|
export declare class CatalogService implements ICatalogService {
|
|
14
15
|
private _index;
|
|
@@ -26,17 +27,19 @@ export declare class CatalogService implements ICatalogService {
|
|
|
26
27
|
}): Promise<CatalogSearchResult[]>;
|
|
27
28
|
/**
|
|
28
29
|
* The remote catalog is generated outside this repo and does not include the
|
|
29
|
-
* discovery front door itself, so both
|
|
30
|
+
* discovery front door itself, so both name lookups fall back to the
|
|
30
31
|
* server-local self record. The remote index is always consulted first: if the
|
|
31
|
-
* generator ever starts emitting
|
|
32
|
+
* generator ever starts emitting an exact or unique case-folded entry, that
|
|
32
33
|
* entry wins on every request and the fallback becomes unreachable — no
|
|
33
34
|
* duplication, no stale local metadata masking the real record. The static
|
|
34
35
|
* record also survives `_maybeRefresh()`'s atomic index swap by construction,
|
|
35
36
|
* since it is never part of `this._index`.
|
|
37
|
+
*
|
|
38
|
+
* Same-spelling tools under different servers are separate rows, so a name
|
|
39
|
+
* can have several owners. Every candidate is returned in payload order and
|
|
40
|
+
* the caller decides; `server` narrows to one owner's rows.
|
|
36
41
|
*/
|
|
37
|
-
getTool(name: string):
|
|
38
|
-
serverRecord: CatalogRecord;
|
|
39
|
-
}) | null;
|
|
42
|
+
getTool(name: string, server?: string): CatalogToolEntry[];
|
|
40
43
|
getServer(name: string): CatalogRecord | null;
|
|
41
44
|
listCategories(): CatalogCategory[];
|
|
42
45
|
stats(): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-service.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"catalog-service.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,kBAAkB,EAAiC,MAAM,yBAAyB,CAAC;AAIjG,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAEhB,eAAe,EAChB,MAAM,YAAY,CAAC;AA8BpB,KAAK,oBAAoB,GAAG,IAAI,CAC9B,YAAY,EACV,YAAY,GACZ,uBAAuB,GACvB,uBAAuB,GACvB,kBAAkB,GAClB,iBAAiB,CACpB,CAAC;AAMF,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAA+C;IAEpE,YAAY,MAAM,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAIxE;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAgChC;IAEK,MAAM,CAAC,MAAM,EAAE;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;QAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgDjC;IAED;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAgBzD;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAO5C;IAED,cAAc,IAAI,eAAe,EAAE,CAKlC;IAED,KAAK,IAAI;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAQA;IAED,gEAAgE;IAChE,QAAQ,IAAI,IAAI,CAKf;IAMD,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,WAAW;YA+FL,aAAa;IA2B3B,OAAO,CAAC,kBAAkB;CAe3B;AAoBD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,EAC5B,UAAU,CAAC,EAAE,kBAAkB,GAC9B,IAAI,CAEN"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview CatalogService — fleet catalog with semantic search.
|
|
3
|
-
* Loads fleet.json (v2 with baked embeddings) at startup,
|
|
4
|
-
* Float32Array for cache locality, and serves
|
|
5
|
-
* embedding the query at runtime and
|
|
3
|
+
* Loads fleet.json (v2 with baked embeddings) at startup, normalizes each vector
|
|
4
|
+
* and packs it into a Float32Array for cache locality, and serves
|
|
5
|
+
* cosine-similarity search by embedding the query at runtime and
|
|
6
|
+
* dot-producting against the in-memory index.
|
|
6
7
|
* Polls the remote payload on a configurable interval; atomic swap on change.
|
|
7
8
|
* @module services/catalog/catalog-service
|
|
8
9
|
*/
|
|
@@ -12,6 +13,13 @@ import { TransformersEmbeddingsRuntime } from './embeddings-runtime.js';
|
|
|
12
13
|
import { RemoteJsonCatalogProvider } from './remote-catalog-provider.js';
|
|
13
14
|
import { getSelfCatalogRecord, getSelfCatalogTool, SELF_RECORD_NAME } from './self-record.js';
|
|
14
15
|
import { setCatalogService } from './service-instance.js';
|
|
16
|
+
/**
|
|
17
|
+
* Norm deviation past which a load logs a warning. Producer vectors are unit
|
|
18
|
+
* length up to six-decimal rounding (measured drift below 1e-6); a deviation
|
|
19
|
+
* past this means the producer skipped or misordered normalization. The vector
|
|
20
|
+
* is normalized either way.
|
|
21
|
+
*/
|
|
22
|
+
const NORM_TOLERANCE = 1e-4;
|
|
15
23
|
// ---------------------------------------------------------------------------
|
|
16
24
|
// CatalogService
|
|
17
25
|
// ---------------------------------------------------------------------------
|
|
@@ -31,7 +39,7 @@ export class CatalogService {
|
|
|
31
39
|
const payload = await this._provider.load();
|
|
32
40
|
this._assertModelMatch(payload);
|
|
33
41
|
this._index = this._buildIndex(payload);
|
|
34
|
-
logger.info(`Fleet catalog loaded: ${payload.servers.length} servers, ${this._index.
|
|
42
|
+
logger.info(`Fleet catalog loaded: ${payload.servers.length} servers, ${this._index.toolVectors.length / this._index.dims} tools ` +
|
|
35
43
|
`(model=${payload.embeddingModel}, dims=${payload.embeddingDims}, generatedAt=${payload.generatedAt})`);
|
|
36
44
|
/**
|
|
37
45
|
* Eager warm-up: load the embedding model synchronously inside the setup
|
|
@@ -97,21 +105,48 @@ export class CatalogService {
|
|
|
97
105
|
}
|
|
98
106
|
/**
|
|
99
107
|
* The remote catalog is generated outside this repo and does not include the
|
|
100
|
-
* discovery front door itself, so both
|
|
108
|
+
* discovery front door itself, so both name lookups fall back to the
|
|
101
109
|
* server-local self record. The remote index is always consulted first: if the
|
|
102
|
-
* generator ever starts emitting
|
|
110
|
+
* generator ever starts emitting an exact or unique case-folded entry, that
|
|
103
111
|
* entry wins on every request and the fallback becomes unreachable — no
|
|
104
112
|
* duplication, no stale local metadata masking the real record. The static
|
|
105
113
|
* record also survives `_maybeRefresh()`'s atomic index swap by construction,
|
|
106
114
|
* since it is never part of `this._index`.
|
|
115
|
+
*
|
|
116
|
+
* Same-spelling tools under different servers are separate rows, so a name
|
|
117
|
+
* can have several owners. Every candidate is returned in payload order and
|
|
118
|
+
* the caller decides; `server` narrows to one owner's rows.
|
|
107
119
|
*/
|
|
108
|
-
getTool(name) {
|
|
120
|
+
getTool(name, server) {
|
|
109
121
|
const index = this._assertInitialized();
|
|
110
|
-
|
|
122
|
+
const folded = name.toLowerCase();
|
|
123
|
+
let exact = index.toolsByName.get(name) ?? [];
|
|
124
|
+
let folds = index.toolsByFoldedName.get(folded) ?? [];
|
|
125
|
+
if (server !== undefined) {
|
|
126
|
+
const owner = this.getServer(server);
|
|
127
|
+
if (!owner)
|
|
128
|
+
return [];
|
|
129
|
+
exact = exact.filter((t) => t.serverRecord === owner);
|
|
130
|
+
folds = folds.filter((t) => t.serverRecord === owner);
|
|
131
|
+
if (!exact.length && !folds.length && owner.name !== SELF_RECORD_NAME)
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
if (exact.length)
|
|
135
|
+
return exact;
|
|
136
|
+
if (folds.length)
|
|
137
|
+
return new Set(folds.map((t) => t.name)).size === 1 ? folds : [];
|
|
138
|
+
const self = getSelfCatalogTool(folded);
|
|
139
|
+
return self ? [self] : [];
|
|
111
140
|
}
|
|
112
141
|
getServer(name) {
|
|
113
142
|
const index = this._assertInitialized();
|
|
114
|
-
|
|
143
|
+
const exact = index.serverByName.get(name);
|
|
144
|
+
if (exact)
|
|
145
|
+
return exact;
|
|
146
|
+
const folded = name.toLowerCase();
|
|
147
|
+
if (index.serverByFoldedName.has(folded))
|
|
148
|
+
return index.serverByFoldedName.get(folded) ?? null;
|
|
149
|
+
return folded === SELF_RECORD_NAME ? getSelfCatalogRecord() : null;
|
|
115
150
|
}
|
|
116
151
|
listCategories() {
|
|
117
152
|
const index = this._assertInitialized();
|
|
@@ -123,7 +158,7 @@ export class CatalogService {
|
|
|
123
158
|
stats() {
|
|
124
159
|
const index = this._assertInitialized();
|
|
125
160
|
return {
|
|
126
|
-
toolCount: index.
|
|
161
|
+
toolCount: index.toolVectors.length / index.dims,
|
|
127
162
|
serverCount: index.payload.servers.length,
|
|
128
163
|
initializedAt: index.initializedAt,
|
|
129
164
|
embeddingModel: index.payload.embeddingModel,
|
|
@@ -156,36 +191,74 @@ export class CatalogService {
|
|
|
156
191
|
toolCount += s.tools.length;
|
|
157
192
|
const serverVectors = new Float32Array(serverCount * dims);
|
|
158
193
|
const toolVectors = new Float32Array(toolCount * dims);
|
|
159
|
-
const
|
|
194
|
+
const toolEntries = [];
|
|
160
195
|
const serverByName = new Map();
|
|
161
|
-
const
|
|
196
|
+
const serverByFoldedName = new Map();
|
|
197
|
+
/**
|
|
198
|
+
* Scores are dot products, so each row is packed at unit length. The norm
|
|
199
|
+
* is taken in float64 from the payload values before packing: a non-unit
|
|
200
|
+
* producer vector keeps its direction and scores as a true cosine, and no
|
|
201
|
+
* normalized component can overflow float32. Components are divided by the
|
|
202
|
+
* largest magnitude before squaring, since squaring raw values overflows
|
|
203
|
+
* above ~1e154 and underflows below ~1e-154; any nonzero vector then has a
|
|
204
|
+
* finite, nonzero norm, and only a zero vector cannot be normalized.
|
|
205
|
+
*/
|
|
206
|
+
let drifted = 0;
|
|
207
|
+
let maxDrift = 0;
|
|
208
|
+
const driftIdentities = [];
|
|
209
|
+
const pack = (embedding, store, row, kind, identity) => {
|
|
210
|
+
if (embedding.length !== dims) {
|
|
211
|
+
throw internalError(`${kind} "${identity}" embedding has ${embedding.length} dims; expected ${dims}.`);
|
|
212
|
+
}
|
|
213
|
+
let max = 0;
|
|
214
|
+
for (const v of embedding)
|
|
215
|
+
max = Math.max(max, Math.abs(v));
|
|
216
|
+
if (max === 0) {
|
|
217
|
+
throw internalError(`${kind} "${identity}" embedding cannot be normalized: its norm is 0.`);
|
|
218
|
+
}
|
|
219
|
+
let sumSq = 0;
|
|
220
|
+
for (const v of embedding)
|
|
221
|
+
sumSq += (v / max) ** 2;
|
|
222
|
+
const scaledNorm = Math.sqrt(sumSq);
|
|
223
|
+
const drift = Math.abs(max * scaledNorm - 1);
|
|
224
|
+
if (drift > NORM_TOLERANCE) {
|
|
225
|
+
drifted++;
|
|
226
|
+
maxDrift = Math.max(maxDrift, drift);
|
|
227
|
+
if (driftIdentities.length < 10)
|
|
228
|
+
driftIdentities.push(identity.slice(0, 160));
|
|
229
|
+
}
|
|
230
|
+
const offset = row * dims;
|
|
231
|
+
// biome-ignore lint/style/noNonNullAssertion: bounds enforced by the dims check above
|
|
232
|
+
for (let i = 0; i < dims; i++)
|
|
233
|
+
store[offset + i] = embedding[i] / max / scaledNorm;
|
|
234
|
+
};
|
|
162
235
|
let toolI = 0;
|
|
163
236
|
for (const [si, server] of payload.servers.entries()) {
|
|
164
237
|
if (server.name.includes('_')) {
|
|
165
238
|
throw internalError(`Server name "${server.name}" contains underscores. Fleet naming convention requires hyphenated server names.`);
|
|
166
239
|
}
|
|
167
|
-
|
|
168
|
-
throw internalError(`Server "${server.name}" embedding has ${server.embedding.length} dims; expected ${dims}.`);
|
|
169
|
-
}
|
|
170
|
-
serverVectors.set(server.embedding, si * dims);
|
|
240
|
+
pack(server.embedding, serverVectors, si, 'Server', server.name);
|
|
171
241
|
serverByName.set(server.name, server);
|
|
242
|
+
const serverFold = server.name.toLowerCase();
|
|
243
|
+
serverByFoldedName.set(serverFold, serverByFoldedName.has(serverFold) ? null : server);
|
|
172
244
|
for (const tool of server.tools) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
toolVectors.set(tool.embedding, toolI * dims);
|
|
177
|
-
toolByName.set(tool.name, { ...tool, serverRecord: server });
|
|
178
|
-
toolNamesInOrder.push(tool.name);
|
|
245
|
+
pack(tool.embedding, toolVectors, toolI, 'Tool', `${server.name}/${tool.name}`);
|
|
246
|
+
toolEntries.push({ ...tool, serverRecord: server });
|
|
179
247
|
toolI++;
|
|
180
248
|
}
|
|
181
249
|
}
|
|
250
|
+
if (drifted) {
|
|
251
|
+
logger.warning(`Normalized ${drifted} catalog vectors whose norm deviates from 1 by more than ${NORM_TOLERANCE} ` +
|
|
252
|
+
`(largest deviation ${maxDrift.toPrecision(4)}): ${JSON.stringify(driftIdentities)}`);
|
|
253
|
+
}
|
|
182
254
|
return {
|
|
183
255
|
payload,
|
|
184
256
|
serverVectors,
|
|
185
257
|
toolVectors,
|
|
186
|
-
|
|
258
|
+
toolsByName: Map.groupBy(toolEntries, (t) => t.name),
|
|
187
259
|
serverByName,
|
|
188
|
-
|
|
260
|
+
toolsByFoldedName: Map.groupBy(toolEntries, (t) => t.name.toLowerCase()),
|
|
261
|
+
serverByFoldedName,
|
|
189
262
|
dims,
|
|
190
263
|
initializedAt: new Date().toISOString(),
|
|
191
264
|
};
|
|
@@ -206,7 +279,7 @@ export class CatalogService {
|
|
|
206
279
|
}
|
|
207
280
|
const next = this._buildIndex(payload);
|
|
208
281
|
this._index = next;
|
|
209
|
-
logger.info(`Catalog refreshed: ${payload.servers.length} servers, ${next.
|
|
282
|
+
logger.info(`Catalog refreshed: ${payload.servers.length} servers, ${next.toolVectors.length / next.dims} tools (generatedAt=${payload.generatedAt})`);
|
|
210
283
|
}
|
|
211
284
|
catch (err) {
|
|
212
285
|
logger.warning(`Catalog refresh failed; keeping last-known state. ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog-service.js","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAEtD,OAAO,EAA2B,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAqC1D,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,MAAM,OAAO,cAAc;IACjB,MAAM,GAAwB,IAAI,CAAC;IAC1B,SAAS,CAA4B;IACrC,WAAW,CAAqB;IAChC,OAAO,CAAuB;IACvC,aAAa,GAA0C,IAAI,CAAC;IAEpE,YAAY,MAA4B,EAAE,UAA+B;QACvE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAyB,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,UAAU,IAAI,IAAI,6BAA6B,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QAE5C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAExC,MAAM,CAAC,IAAI,CACT,yBAAyB,OAAO,CAAC,OAAO,CAAC,MAAM,aAAa,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,SAAS;YAC9F,UAAU,OAAO,CAAC,cAAc,UAAU,OAAO,CAAC,aAAa,iBAAiB,OAAO,CAAC,WAAW,GAAG,CACzG,CAAC;QAEF;;;;;;;;WAQG;QACH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAC/B,QAAQ,EACR,IAAI,CAAC,MAAM,CAAC,IAAI,EAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CACzC,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACpC,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAC5B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAKZ;QACC,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAChD,MAAM,CAAC,KAAK,EACZ,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,OAAO,CAAC,oBAAoB,CACnC,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QAC3C,MAAM,OAAO,GAA0B,EAAE,CAAC;QAE1C,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1D,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ;oBAAE,SAAS;gBACrE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnE,IAAI,KAAK,GAAG,KAAK;oBAAE,SAAS;gBAC5B,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,IAAI;oBACnB,KAAK,EAAE,MAAM,CAAC,WAAW;oBACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK;iBACN,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC3C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;wBAC3D,KAAK,EAAE,CAAC;wBACR,SAAS;oBACX,CAAC;oBACD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrE,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,GAAG,KAAK;wBAAE,SAAS;oBAC5B,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,MAAM,EAAE,MAAM,CAAC,IAAI;wBACnB,KAAK,EAAE,IAAI,CAAC,WAAW;wBACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,CAAC;IAED;;;;;;;;;OASG;IACH,OAAO,CAAC,IAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,OAAO,CACL,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5F,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAmB,CAAC;QACxC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACtE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAED,KAAK;QAMH,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI;YAChC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM;YACzC,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,cAAc,EAAE,KAAK,CAAC,OAAO,CAAC,cAAc;SAC7C,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,QAAQ;QACN,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAEpE,iBAAiB,CAAC,OAAqB;QAC7C,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7D,MAAM,aAAa,CACjB,uDAAuD,OAAO,CAAC,cAAc,yBAAyB,IAAI,CAAC,OAAO,CAAC,gBAAgB,KAAK;gBACtI,8EAA8E,EAChF;gBACE,YAAY,EAAE,OAAO,CAAC,cAAc;gBACpC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;aACxC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,OAAqB;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;QACnC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3C,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO;YAAE,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAE7D,MAAM,aAAa,GAAG,IAAI,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyD,CAAC;QACpF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAyB,CAAC;QACtD,MAAM,gBAAgB,GAAa,EAAE,CAAC;QAEtC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACrD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9B,MAAM,aAAa,CACjB,gBAAgB,MAAM,CAAC,IAAI,mFAAmF,CAC/G,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,aAAa,CACjB,WAAW,MAAM,CAAC,IAAI,mBAAmB,MAAM,CAAC,SAAS,CAAC,MAAM,mBAAmB,IAAI,GAAG,CAC3F,CAAC;YACJ,CAAC;YAED,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;YAC/C,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAEtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBACnC,MAAM,aAAa,CACjB,SAAS,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,SAAS,CAAC,MAAM,mBAAmB,IAAI,GAAG,CACrF,CAAC;gBACJ,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;gBAC9C,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC7D,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO;YACP,aAAa;YACb,WAAW;YACX,UAAU;YACV,YAAY;YACZ,gBAAgB;YAChB,IAAI;YACJ,aAAa,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACxC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxD,MAAM,CAAC,KAAK,CAAC,2CAA2C,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,cAAc,KAAK,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7D,MAAM,CAAC,OAAO,CACZ,kDAAkD,OAAO,CAAC,cAAc,yBAAyB,IAAI,CAAC,OAAO,CAAC,gBAAgB,8BAA8B,CAC7J,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,MAAM,CAAC,IAAI,CACT,sBAAsB,OAAO,CAAC,OAAO,CAAC,MAAM,aAAa,IAAI,CAAC,UAAU,CAAC,IAAI,uBAAuB,OAAO,CAAC,WAAW,GAAG,CAC3H,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,OAAO,CACZ,qDAAqD,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB;;;;;eAKG;YACH,MAAM,kBAAkB,CAAC,+DAA+D,EAAE;gBACxF,MAAM,EAAE,eAAe;gBACvB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,SAAS,MAAM,CAAC,KAAmB,EAAE,KAAmB,EAAE,MAAc,EAAE,IAAY;IACpF,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,4FAA4F;QAC5F,GAAG,IAAI,KAAK,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,MAA4B,EAC5B,UAA+B;IAE/B,iBAAiB,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAC5D,CAAC"}
|
|
1
|
+
{"version":3,"file":"catalog-service.js","sourceRoot":"","sources":["../../../src/services/catalog/catalog-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @fileoverview RemoteJsonCatalogProvider — fetches and validates the fleet.json
|
|
3
|
-
* payload (schema v2, with baked embeddings) from a configurable URL.
|
|
4
|
-
*
|
|
3
|
+
* payload (schema v2, with baked embeddings) from a configurable URL. Normalizes
|
|
4
|
+
* duplicate identities before CatalogService builds and caches the index.
|
|
5
5
|
* @module services/catalog/remote-catalog-provider
|
|
6
6
|
*/
|
|
7
7
|
import type { ServerConfig } from '../../config/server-config.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-catalog-provider.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"remote-catalog-provider.d.ts","sourceRoot":"","sources":["../../../src/services/catalog/remote-catalog-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0C/C,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,YAAY,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,uBAAuB,CAAC,EAG7E;IAED;;;;OAIG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CA4DtD;CACF"}
|