@mcp-abap-adt/llm-agent-libs 19.1.2 → 19.2.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.
Files changed (89) hide show
  1. package/dist/index.d.ts +2 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +2 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/rag/knowledge-rag.d.ts +28 -8
  6. package/dist/rag/knowledge-rag.d.ts.map +1 -1
  7. package/dist/rag/knowledge-rag.js +42 -8
  8. package/dist/rag/knowledge-rag.js.map +1 -1
  9. package/dist/skills/plugin-host/chunker.d.ts +17 -0
  10. package/dist/skills/plugin-host/chunker.d.ts.map +1 -0
  11. package/dist/skills/plugin-host/chunker.js +72 -0
  12. package/dist/skills/plugin-host/chunker.js.map +1 -0
  13. package/dist/skills/plugin-host/chunker.test.d.ts +2 -0
  14. package/dist/skills/plugin-host/chunker.test.d.ts.map +1 -0
  15. package/dist/skills/plugin-host/chunker.test.js +31 -0
  16. package/dist/skills/plugin-host/chunker.test.js.map +1 -0
  17. package/dist/skills/plugin-host/compatible-skills-rag.d.ts +14 -0
  18. package/dist/skills/plugin-host/compatible-skills-rag.d.ts.map +1 -0
  19. package/dist/skills/plugin-host/compatible-skills-rag.js +83 -0
  20. package/dist/skills/plugin-host/compatible-skills-rag.js.map +1 -0
  21. package/dist/skills/plugin-host/compatible-skills-rag.test.d.ts +2 -0
  22. package/dist/skills/plugin-host/compatible-skills-rag.test.d.ts.map +1 -0
  23. package/dist/skills/plugin-host/compatible-skills-rag.test.js +174 -0
  24. package/dist/skills/plugin-host/compatible-skills-rag.test.js.map +1 -0
  25. package/dist/skills/plugin-host/http-marketplace-source.d.ts +46 -0
  26. package/dist/skills/plugin-host/http-marketplace-source.d.ts.map +1 -0
  27. package/dist/skills/plugin-host/http-marketplace-source.js +67 -0
  28. package/dist/skills/plugin-host/http-marketplace-source.js.map +1 -0
  29. package/dist/skills/plugin-host/http-marketplace-source.test.d.ts +2 -0
  30. package/dist/skills/plugin-host/http-marketplace-source.test.d.ts.map +1 -0
  31. package/dist/skills/plugin-host/http-marketplace-source.test.js +71 -0
  32. package/dist/skills/plugin-host/http-marketplace-source.test.js.map +1 -0
  33. package/dist/skills/plugin-host/in-memory-store.d.ts +15 -0
  34. package/dist/skills/plugin-host/in-memory-store.d.ts.map +1 -0
  35. package/dist/skills/plugin-host/in-memory-store.js +151 -0
  36. package/dist/skills/plugin-host/in-memory-store.js.map +1 -0
  37. package/dist/skills/plugin-host/in-memory-store.test.d.ts +2 -0
  38. package/dist/skills/plugin-host/in-memory-store.test.d.ts.map +1 -0
  39. package/dist/skills/plugin-host/in-memory-store.test.js +100 -0
  40. package/dist/skills/plugin-host/in-memory-store.test.js.map +1 -0
  41. package/dist/skills/plugin-host/index.d.ts +10 -0
  42. package/dist/skills/plugin-host/index.d.ts.map +1 -0
  43. package/dist/skills/plugin-host/index.js +12 -0
  44. package/dist/skills/plugin-host/index.js.map +1 -0
  45. package/dist/skills/plugin-host/marketplace-adapter.d.ts +23 -0
  46. package/dist/skills/plugin-host/marketplace-adapter.d.ts.map +1 -0
  47. package/dist/skills/plugin-host/marketplace-adapter.js +32 -0
  48. package/dist/skills/plugin-host/marketplace-adapter.js.map +1 -0
  49. package/dist/skills/plugin-host/marketplace-adapter.test.d.ts +2 -0
  50. package/dist/skills/plugin-host/marketplace-adapter.test.d.ts.map +1 -0
  51. package/dist/skills/plugin-host/marketplace-adapter.test.js +46 -0
  52. package/dist/skills/plugin-host/marketplace-adapter.test.js.map +1 -0
  53. package/dist/skills/plugin-host/qdrant-store.d.ts +85 -0
  54. package/dist/skills/plugin-host/qdrant-store.d.ts.map +1 -0
  55. package/dist/skills/plugin-host/qdrant-store.js +542 -0
  56. package/dist/skills/plugin-host/qdrant-store.js.map +1 -0
  57. package/dist/skills/plugin-host/qdrant-store.test.d.ts +2 -0
  58. package/dist/skills/plugin-host/qdrant-store.test.d.ts.map +1 -0
  59. package/dist/skills/plugin-host/qdrant-store.test.js +396 -0
  60. package/dist/skills/plugin-host/qdrant-store.test.js.map +1 -0
  61. package/dist/skills/plugin-host/skill-plugin-host.d.ts +41 -0
  62. package/dist/skills/plugin-host/skill-plugin-host.d.ts.map +1 -0
  63. package/dist/skills/plugin-host/skill-plugin-host.ingest.test.d.ts +2 -0
  64. package/dist/skills/plugin-host/skill-plugin-host.ingest.test.d.ts.map +1 -0
  65. package/dist/skills/plugin-host/skill-plugin-host.ingest.test.js +520 -0
  66. package/dist/skills/plugin-host/skill-plugin-host.ingest.test.js.map +1 -0
  67. package/dist/skills/plugin-host/skill-plugin-host.js +367 -0
  68. package/dist/skills/plugin-host/skill-plugin-host.js.map +1 -0
  69. package/dist/skills/plugin-host/skill-plugin-host.recall-and-reload.test.d.ts +2 -0
  70. package/dist/skills/plugin-host/skill-plugin-host.recall-and-reload.test.d.ts.map +1 -0
  71. package/dist/skills/plugin-host/skill-plugin-host.recall-and-reload.test.js +328 -0
  72. package/dist/skills/plugin-host/skill-plugin-host.recall-and-reload.test.js.map +1 -0
  73. package/dist/skills/plugin-host/skills-rag-source.d.ts +17 -0
  74. package/dist/skills/plugin-host/skills-rag-source.d.ts.map +1 -0
  75. package/dist/skills/plugin-host/skills-rag-source.js +52 -0
  76. package/dist/skills/plugin-host/skills-rag-source.js.map +1 -0
  77. package/dist/skills/plugin-host/skills-rag-source.test.d.ts +2 -0
  78. package/dist/skills/plugin-host/skills-rag-source.test.d.ts.map +1 -0
  79. package/dist/skills/plugin-host/skills-rag-source.test.js +69 -0
  80. package/dist/skills/plugin-host/skills-rag-source.test.js.map +1 -0
  81. package/dist/skills/plugin-host/source-strategies.d.ts +20 -0
  82. package/dist/skills/plugin-host/source-strategies.d.ts.map +1 -0
  83. package/dist/skills/plugin-host/source-strategies.js +37 -0
  84. package/dist/skills/plugin-host/source-strategies.js.map +1 -0
  85. package/dist/skills/plugin-host/source-strategies.test.d.ts +2 -0
  86. package/dist/skills/plugin-host/source-strategies.test.d.ts.map +1 -0
  87. package/dist/skills/plugin-host/source-strategies.test.js +52 -0
  88. package/dist/skills/plugin-host/source-strategies.test.js.map +1 -0
  89. package/package.json +14 -14
@@ -0,0 +1,396 @@
1
+ import assert from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { CatalogCasError } from '@mcp-abap-adt/llm-agent';
4
+ import { makeInProcessCatalogStore, makePgCatalogStore, makeQdrantBackendProvider, makeQdrantStoreProvider, pointId, } from './qdrant-store.js';
5
+ const MANIFEST = {
6
+ embeddingSpaceId: 'sp',
7
+ dimension: 3,
8
+ retrievalSchemaVersion: 1,
9
+ };
10
+ // deterministic 3-dim embed (like the other tests): hash text → unit-ish vector
11
+ const embed = async (text) => {
12
+ let a = 0;
13
+ let b = 0;
14
+ let c = 0;
15
+ for (let i = 0; i < text.length; i++) {
16
+ const code = text.charCodeAt(i);
17
+ if (i % 3 === 0)
18
+ a += code;
19
+ else if (i % 3 === 1)
20
+ b += code;
21
+ else
22
+ c += code;
23
+ }
24
+ return [a, b, c];
25
+ };
26
+ const rec = (id, group = 'g1', sourceId = 's') => ({
27
+ id,
28
+ sourceId,
29
+ group,
30
+ name: id,
31
+ retrievalText: id,
32
+ content: `c-${id}`,
33
+ provenance: id,
34
+ });
35
+ function eq(a, b) {
36
+ return JSON.stringify(a) === JSON.stringify(b);
37
+ }
38
+ function makeMockClient() {
39
+ const points = new Map();
40
+ const matches = (p, filter) => {
41
+ if (filter.generation !== undefined &&
42
+ p.payload.generation !== filter.generation)
43
+ return false;
44
+ if (Array.isArray(filter.sourceId)) {
45
+ if (!filter.sourceId.includes(p.payload.sourceId))
46
+ return false;
47
+ }
48
+ return true;
49
+ };
50
+ const cosine = (x, y) => {
51
+ let dot = 0;
52
+ let nx = 0;
53
+ let ny = 0;
54
+ for (let i = 0; i < x.length; i++) {
55
+ dot += x[i] * y[i];
56
+ nx += x[i] * x[i];
57
+ ny += y[i] * y[i];
58
+ }
59
+ return nx && ny ? dot / (Math.sqrt(nx) * Math.sqrt(ny)) : 0;
60
+ };
61
+ return {
62
+ _points: points,
63
+ async upsertPoints(pts) {
64
+ for (const p of pts)
65
+ points.set(p.id, { ...p });
66
+ },
67
+ async deleteByFilter(filter) {
68
+ for (const [id, p] of [...points.entries()]) {
69
+ if (matches(p, filter))
70
+ points.delete(id);
71
+ }
72
+ },
73
+ async search(filter, vector, k) {
74
+ return [...points.values()]
75
+ .filter((p) => matches(p, filter))
76
+ .map((p) => ({ payload: p.payload, score: cosine(vector, p.vector) }))
77
+ .sort((a, b) => b.score - a.score)
78
+ .slice(0, k);
79
+ },
80
+ async scroll(filter, cursor) {
81
+ const all = [...points.values()].filter((p) => matches(p, filter));
82
+ // paginate in pages of 2 to exercise the cursor loop
83
+ const start = cursor ? Number(cursor) : 0;
84
+ const page = all.slice(start, start + 2);
85
+ const nextStart = start + 2;
86
+ return {
87
+ points: page.map((p) => ({
88
+ id: p.id,
89
+ vector: p.vector,
90
+ payload: p.payload,
91
+ })),
92
+ next: nextStart < all.length ? String(nextStart) : undefined,
93
+ };
94
+ },
95
+ };
96
+ }
97
+ const fixedNow = () => 1_000_000;
98
+ function makeProvider(client, opts = {}) {
99
+ return makeQdrantStoreProvider({
100
+ client,
101
+ collection: 'skills',
102
+ catalogStore: opts.catalogStore ?? makeInProcessCatalogStore(),
103
+ embed,
104
+ pointId,
105
+ now: opts.now ?? fixedNow,
106
+ retiredGraceMs: opts.retiredGraceMs ?? 30_000,
107
+ orphanGraceMs: opts.orphanGraceMs ?? 3_600_000,
108
+ });
109
+ }
110
+ test('point ids are deterministic UUIDv5 of generation:recordId', () => {
111
+ const a = pointId('g0', 'r1');
112
+ const b = pointId('g0', 'r1');
113
+ const c = pointId('g1', 'r1');
114
+ assert.equal(a, b);
115
+ assert.notEqual(a, c);
116
+ assert.match(a, /^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
117
+ });
118
+ test('build inactive → publishCatalog (store-generated rev) → queryRevision by gen → activeSnapshot from catalog', async () => {
119
+ const client = makeMockClient();
120
+ const p = makeProvider(client);
121
+ const store = p.forGroup('g1');
122
+ const { generation } = await store.beginGeneration();
123
+ await store.upsert(generation, [rec('a'), rec('b')]);
124
+ // nothing serves yet
125
+ assert.equal(await store.activeSnapshot(), null);
126
+ const before = await p.readCatalog();
127
+ const entry = {
128
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
129
+ sources: ['s'],
130
+ generation,
131
+ manifest: MANIFEST,
132
+ };
133
+ const snap = await p.publishCatalog(before.catalogRevision, [entry]);
134
+ // store generated a (different) revision
135
+ assert.notEqual(snap.catalogRevision, before.catalogRevision);
136
+ const active = await store.activeSnapshot();
137
+ assert.equal(active?.revision, generation);
138
+ assert.deepEqual(active?.manifest, MANIFEST);
139
+ const hits = await store.queryRevision(generation, await embed('a'), 1);
140
+ assert.equal(hits[0].record.id, 'a');
141
+ assert.equal(hits[0].record.content, 'c-a');
142
+ assert.equal(hits[0].record.group, 'g1');
143
+ });
144
+ test('publishCatalog stale expected → CatalogCasError (in-process)', async () => {
145
+ const client = makeMockClient();
146
+ const p = makeProvider(client);
147
+ const r0 = (await p.readCatalog()).catalogRevision;
148
+ await p.publishCatalog(r0, []); // advances
149
+ await assert.rejects(() => p.publishCatalog(r0, []), (e) => e instanceof CatalogCasError);
150
+ });
151
+ test('makePgCatalogStore: stale expected (fake pool UPDATE rowCount 0) → CatalogCasError', async () => {
152
+ // fake pool: read returns empty initial row; UPDATE always rowCount 0 → stale
153
+ const pool = {
154
+ async query(sql) {
155
+ if (/^select/i.test(sql.trim()))
156
+ return { rows: [], rowCount: 0 };
157
+ if (/^insert/i.test(sql.trim()))
158
+ return { rows: [], rowCount: 1 };
159
+ // UPDATE ... WHERE revision=$expected → no match
160
+ return { rows: [], rowCount: 0 };
161
+ },
162
+ };
163
+ const store = makePgCatalogStore({ pool, table: 'skills_catalog' });
164
+ await assert.rejects(() => store.casPublish('whatever', [], 123), (e) => e instanceof CatalogCasError);
165
+ });
166
+ test('makePgCatalogStore: successful casPublish (fake pool UPDATE rowCount 1) returns committed snapshot', async () => {
167
+ let stored = {
168
+ revision: 'r-init',
169
+ snapshot: { catalogRevision: 'r-init', entries: [], retired: [] },
170
+ };
171
+ const pool = {
172
+ async query(sql, params) {
173
+ const s = sql.trim();
174
+ if (/^select/i.test(s)) {
175
+ return stored
176
+ ? {
177
+ rows: [{ revision: stored.revision, snapshot: stored.snapshot }],
178
+ rowCount: 1,
179
+ }
180
+ : { rows: [], rowCount: 0 };
181
+ }
182
+ if (/^update/i.test(s)) {
183
+ const expected = params?.[2];
184
+ if (stored && stored.revision === expected) {
185
+ stored = {
186
+ revision: params?.[0],
187
+ snapshot: params?.[1],
188
+ };
189
+ return { rows: [], rowCount: 1 };
190
+ }
191
+ return { rows: [], rowCount: 0 };
192
+ }
193
+ return { rows: [], rowCount: 1 };
194
+ },
195
+ };
196
+ const store = makePgCatalogStore({ pool, table: 'skills_catalog' });
197
+ const entry = {
198
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
199
+ sources: ['s'],
200
+ generation: 'g-1',
201
+ manifest: MANIFEST,
202
+ };
203
+ const snap = await store.casPublish('r-init', [entry], 555);
204
+ assert.notEqual(snap.catalogRevision, 'r-init');
205
+ assert.equal(snap.entries.length, 1);
206
+ const re = await store.read();
207
+ assert.equal(re.catalogRevision, snap.catalogRevision);
208
+ assert.equal(re.entries.length, 1);
209
+ });
210
+ test('carryForward SCROLLS the live generation by sourceId and re-ids with pointId(newGen, recordId)', async () => {
211
+ const client = makeMockClient();
212
+ const p = makeProvider(client);
213
+ const store = p.forGroup('g1');
214
+ const g0 = (await store.beginGeneration()).generation;
215
+ await store.upsert(g0, [
216
+ rec('a', 'g1', 's1'),
217
+ rec('b', 'g1', 's2'),
218
+ rec('c', 'g1', 's3'),
219
+ ]);
220
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, [
221
+ {
222
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
223
+ sources: ['s1', 's2', 's3'],
224
+ generation: g0,
225
+ manifest: MANIFEST,
226
+ },
227
+ ]);
228
+ // new generation carries forward only s1 and s2
229
+ const g1 = (await store.beginGeneration()).generation;
230
+ await store.carryForward(g1, ['s1', 's2']);
231
+ // points for g1 must exist under the NEW deterministic ids
232
+ assert.ok(client._points.has(pointId(g1, 'a')));
233
+ assert.ok(client._points.has(pointId(g1, 'b')));
234
+ assert.ok(!client._points.has(pointId(g1, 'c')));
235
+ // and they carry the new generation tag
236
+ assert.equal(client._points.get(pointId(g1, 'a'))?.payload.generation, g1);
237
+ const hits = await store.queryRevision(g1, await embed('a'), 5);
238
+ const ids = hits.map((h) => h.record.id).sort();
239
+ assert.deepEqual(ids, ['a', 'b']);
240
+ });
241
+ test('durable retirement: a commit dropping G stamps retired[{G, retiredAt}] readable via catalog.read()', async () => {
242
+ const client = makeMockClient();
243
+ const catalogStore = makeInProcessCatalogStore();
244
+ const p = makeProvider(client, { catalogStore, now: () => 7777 });
245
+ const store = p.forGroup('g1');
246
+ const g0 = (await store.beginGeneration()).generation;
247
+ await store.upsert(g0, [rec('a')]);
248
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, [
249
+ {
250
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
251
+ sources: ['s'],
252
+ generation: g0,
253
+ manifest: MANIFEST,
254
+ },
255
+ ]);
256
+ // now publish WITHOUT g0 → it is retired
257
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, []);
258
+ const snap = await catalogStore.read();
259
+ assert.ok(snap.retired?.some((r) => r.generation === g0 && r.retiredAt === 7777));
260
+ assert.equal(snap.retired?.find((r) => r.generation === g0)?.group, 'g1');
261
+ });
262
+ test('sweep + retiredGraceMs: before grace no delete; at/after grace deletes points + pruneRetired', async () => {
263
+ const client = makeMockClient();
264
+ const catalogStore = makeInProcessCatalogStore();
265
+ const clock = 1000;
266
+ const p = makeProvider(client, {
267
+ catalogStore,
268
+ now: () => clock,
269
+ retiredGraceMs: 30_000,
270
+ });
271
+ const store = p.forGroup('g1');
272
+ const g0 = (await store.beginGeneration()).generation;
273
+ await store.upsert(g0, [rec('a')]);
274
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, [
275
+ {
276
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
277
+ sources: ['s'],
278
+ generation: g0,
279
+ manifest: MANIFEST,
280
+ },
281
+ ]);
282
+ // retire g0 at clock=1000
283
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, []);
284
+ assert.ok(client._points.size > 0);
285
+ // sweep BEFORE grace → no delete, retired still present
286
+ await p.sweep?.(1000 + 29_999);
287
+ assert.ok(client._points.size > 0);
288
+ assert.ok((await catalogStore.read()).retired?.some((r) => r.generation === g0));
289
+ // sweep AT/after grace → delete + prune
290
+ await p.sweep?.(1000 + 30_000);
291
+ assert.equal([...client._points.values()].filter((pt) => pt.payload.generation === g0)
292
+ .length, 0);
293
+ assert.ok(!(await catalogStore.read()).retired?.some((r) => r.generation === g0));
294
+ });
295
+ test('orphan reconcile age-protected: old orphan swept, young (in-build) orphan kept', async () => {
296
+ const client = makeMockClient();
297
+ const catalogStore = makeInProcessCatalogStore();
298
+ const NOW = 10_000_000;
299
+ const p = makeProvider(client, {
300
+ catalogStore,
301
+ now: () => NOW,
302
+ orphanGraceMs: 3_600_000, // 1h
303
+ });
304
+ // Inject an OLD orphan generation (createdAt far in the past) — neither active nor retired.
305
+ await client.upsertPoints([
306
+ {
307
+ id: pointId('orphan-old', 'x'),
308
+ vector: [1, 0, 0],
309
+ payload: {
310
+ generation: 'orphan-old',
311
+ group: 'g1',
312
+ recordId: 'x',
313
+ content: 'cx',
314
+ name: 'x',
315
+ provenance: 'x',
316
+ sourceId: 's',
317
+ createdAt: NOW - 3_600_001, // older than grace
318
+ },
319
+ },
320
+ ]);
321
+ // Inject a YOUNG orphan (concurrent in-build loader) — createdAt within grace.
322
+ await client.upsertPoints([
323
+ {
324
+ id: pointId('orphan-young', 'y'),
325
+ vector: [0, 1, 0],
326
+ payload: {
327
+ generation: 'orphan-young',
328
+ group: 'g1',
329
+ recordId: 'y',
330
+ content: 'cy',
331
+ name: 'y',
332
+ provenance: 'y',
333
+ sourceId: 's',
334
+ createdAt: NOW - 1000, // younger than grace
335
+ },
336
+ },
337
+ ]);
338
+ await p.sweep?.(NOW);
339
+ // old orphan swept, young orphan retained
340
+ assert.equal([...client._points.values()].filter((pt) => pt.payload.generation === 'orphan-old').length, 0);
341
+ assert.equal([...client._points.values()].filter((pt) => pt.payload.generation === 'orphan-young').length, 1);
342
+ });
343
+ test('makeQdrantBackendProvider over IQdrantReader+ICatalogReader is read-only and serves query/activeSnapshot/readCatalog', async () => {
344
+ const client = makeMockClient();
345
+ const catalogStore = makeInProcessCatalogStore();
346
+ const p = makeProvider(client, { catalogStore });
347
+ const store = p.forGroup('g1');
348
+ const g0 = (await store.beginGeneration()).generation;
349
+ await store.upsert(g0, [rec('a'), rec('b')]);
350
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, [
351
+ {
352
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
353
+ sources: ['s'],
354
+ generation: g0,
355
+ manifest: MANIFEST,
356
+ },
357
+ ]);
358
+ // build a READER-ONLY provider over reader interfaces (no write methods)
359
+ const reader = { search: client.search, scroll: client.scroll };
360
+ const catalogReader = { read: () => catalogStore.read() };
361
+ const backendProvider = makeQdrantBackendProvider({
362
+ reader,
363
+ catalogReader,
364
+ collection: 'skills',
365
+ });
366
+ // compile-time read-only: the reader object has no upsert/delete
367
+ assert.equal(reader.upsertPoints, undefined);
368
+ assert.equal(backendProvider.publishCatalog, undefined);
369
+ const cat = await backendProvider.readCatalog();
370
+ assert.equal(cat.entries.length, 1);
371
+ const backend = backendProvider.forGroup('g1');
372
+ const active = await backend.activeSnapshot();
373
+ assert.equal(active?.revision, g0);
374
+ const hits = await backend.queryRevision(g0, await embed('a'), 1);
375
+ assert.equal(hits[0].record.id, 'a');
376
+ });
377
+ test('asBackendProvider() gives an in-process read view', async () => {
378
+ const client = makeMockClient();
379
+ const p = makeProvider(client);
380
+ const store = p.forGroup('g1');
381
+ const g0 = (await store.beginGeneration()).generation;
382
+ await store.upsert(g0, [rec('a')]);
383
+ await p.publishCatalog((await p.readCatalog()).catalogRevision, [
384
+ {
385
+ collection: { group: 'g1', description: 'd', collection: 'skills' },
386
+ sources: ['s'],
387
+ generation: g0,
388
+ manifest: MANIFEST,
389
+ },
390
+ ]);
391
+ const bp = p.asBackendProvider();
392
+ const active = await bp.forGroup('g1').activeSnapshot();
393
+ assert.equal(active?.revision, g0);
394
+ assert.ok(eq((await bp.readCatalog()).entries.length, 1));
395
+ });
396
+ //# sourceMappingURL=qdrant-store.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qdrant-store.test.js","sourceRoot":"","sources":["../../../src/skills/plugin-host/qdrant-store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { IEmbedder, ISkillPluginHost, ISkillSource, ISkillsRagBackendProvider, ISkillsStoreProvider } from '@mcp-abap-adt/llm-agent';
2
+ /** RECALL-ONLY construction: serves an already-materialised catalog through a READ-ONLY
3
+ * backend provider (least privilege — no source, no store, no write/reconcile API). The
4
+ * served collections are materialised out-of-band by a SEPARATE ingest job. */
5
+ export interface RecallHostDeps {
6
+ backendProvider: ISkillsRagBackendProvider;
7
+ /** Serving embedder — text query embed + lazy dimension probe. */
8
+ embedder: IEmbedder;
9
+ embeddingSpaceId: string;
10
+ retrievalSchemaVersion: number;
11
+ dimension?: number;
12
+ /** The collections this host serves; each MUST exist in the backend's catalog.
13
+ * OMIT to serve ALL (non-tombstoned) collections present in the catalog. */
14
+ serveCollections?: readonly string[];
15
+ /** Threaded into makeCompatibleSkillsRag in rag() (Qdrant time-grace). */
16
+ recallTimeoutMs?: number;
17
+ }
18
+ export type SkillPluginHostDeps = IngestHostDeps | RecallHostDeps;
19
+ export interface IngestHostDeps {
20
+ sources: ReadonlyArray<{
21
+ id: string;
22
+ source: ISkillSource;
23
+ }>;
24
+ storeProvider: ISkillsStoreProvider;
25
+ /** Serving embedder (also used to vectorise upserts via the provider). */
26
+ embedder: IEmbedder;
27
+ embeddingSpaceId: string;
28
+ retrievalSchemaVersion: number;
29
+ dimension?: number;
30
+ strict?: boolean;
31
+ /** Default 3. */
32
+ catalogCasMaxAttempts?: number;
33
+ /** Default true; false = an ingest-only job (skips the reload set-guard). */
34
+ servingMode?: boolean;
35
+ /** Threaded into makeCompatibleSkillsRag in rag() (Qdrant time-grace). */
36
+ recallTimeoutMs?: number;
37
+ /** Injected clock for deterministic tests (default Date.now). */
38
+ now?: () => number;
39
+ }
40
+ export declare function makeSkillPluginHost(deps: SkillPluginHostDeps): ISkillPluginHost;
41
+ //# sourceMappingURL=skill-plugin-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-plugin-host.d.ts","sourceRoot":"","sources":["../../../src/skills/plugin-host/skill-plugin-host.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,yBAAyB,EAEzB,oBAAoB,EAMrB,MAAM,yBAAyB,CAAC;AAIjC;;gFAEgF;AAChF,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,yBAAyB,CAAC;IAC3C,kEAAkE;IAClE,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;iFAC6E;IAC7E,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,cAAc,CAAC;AAMlE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;IAC7D,aAAa,EAAE,oBAAoB,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAeD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,mBAAmB,GACxB,gBAAgB,CAGlB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skill-plugin-host.ingest.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-plugin-host.ingest.test.d.ts","sourceRoot":"","sources":["../../../src/skills/plugin-host/skill-plugin-host.ingest.test.ts"],"names":[],"mappings":""}