@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,328 @@
1
+ import assert from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { SkillsIncompatibleError } from '@mcp-abap-adt/llm-agent';
4
+ import { makeInMemoryStoreProvider } from './in-memory-store.js';
5
+ import { makeSkillPluginHost } from './skill-plugin-host.js';
6
+ // Deterministic 3-dim vector from text — lets the in-memory store embed with no real embedder.
7
+ function hash3(text) {
8
+ const v = [0, 0, 0];
9
+ for (let i = 0; i < text.length; i++) {
10
+ v[i % 3] += text.charCodeAt(i);
11
+ }
12
+ return v;
13
+ }
14
+ // In-memory store provider embed: text → vector (number[]).
15
+ const embed = async (text) => hash3(text);
16
+ // Host serving embedder: text → IEmbedResult.
17
+ const embedder = {
18
+ async embed(text) {
19
+ return { vector: hash3(text) };
20
+ },
21
+ };
22
+ function rec(id, sourceId, group, content) {
23
+ return {
24
+ id,
25
+ sourceId,
26
+ group,
27
+ name: id,
28
+ retrievalText: content,
29
+ content,
30
+ provenance: id,
31
+ };
32
+ }
33
+ function info(group, description = `desc-${group}`) {
34
+ return { group, description, collection: group };
35
+ }
36
+ function makeStubSource(result) {
37
+ return {
38
+ async acquire(_options) {
39
+ if (typeof result === 'function')
40
+ return result();
41
+ return result;
42
+ },
43
+ };
44
+ }
45
+ const SERVE_BASE = {
46
+ embedder: embedder,
47
+ embeddingSpaceId: 'sp',
48
+ retrievalSchemaVersion: 1,
49
+ dimension: 3,
50
+ };
51
+ /** Seed an in-memory provider with one committed generation for `group`. */
52
+ async function seedProvider(group, records, manifest = {
53
+ embeddingSpaceId: 'sp',
54
+ dimension: 3,
55
+ retrievalSchemaVersion: 1,
56
+ }) {
57
+ const provider = makeInMemoryStoreProvider({ embed });
58
+ const generation = `${group}#g0`;
59
+ await provider._seed(generation, records.map((r) => ({ record: r, vector: hash3(r.retrievalText) })));
60
+ await provider.publishCatalog('c0', [
61
+ {
62
+ collection: info(group),
63
+ sources: ['seed'],
64
+ generation,
65
+ manifest,
66
+ },
67
+ ]);
68
+ return provider;
69
+ }
70
+ // 1 -------------------------------------------------------------------------
71
+ test('recall-only: load() validates serveCollections + eager compat; groups()/rag() from catalog', async () => {
72
+ const provider = await seedProvider('g1', [
73
+ rec('g1:a', 'seed', 'g1', 'alpha record'),
74
+ ]);
75
+ const host = makeSkillPluginHost({
76
+ ...SERVE_BASE,
77
+ backendProvider: provider.asBackendProvider(),
78
+ serveCollections: ['g1'],
79
+ });
80
+ const res = await host.load();
81
+ assert.equal(res.ok, true);
82
+ assert.deepEqual(res.committed, ['g1']);
83
+ assert.deepEqual(res.omitted, []);
84
+ assert.deepEqual(res.tombstoned, []);
85
+ assert.deepEqual(host.groups().map((g) => g.group), ['g1']);
86
+ const hits = await host
87
+ .rag('g1')
88
+ .query('alpha record', { k: 5, threshold: 0 });
89
+ assert.ok(hits.some((h) => h.record.id === 'g1:a'));
90
+ });
91
+ // 2 -------------------------------------------------------------------------
92
+ test('recall-only: serveCollections naming an absent collection → load() throws (config error)', async () => {
93
+ const provider = await seedProvider('g1', [
94
+ rec('g1:a', 'seed', 'g1', 'alpha'),
95
+ ]);
96
+ const host = makeSkillPluginHost({
97
+ ...SERVE_BASE,
98
+ backendProvider: provider.asBackendProvider(),
99
+ serveCollections: ['missing'],
100
+ });
101
+ await assert.rejects(() => host.load(), /serveCollections/);
102
+ });
103
+ // 3 -------------------------------------------------------------------------
104
+ test('recall-only: incompatible serving embeddingSpaceId → load() throws (eager)', async () => {
105
+ // Seed manifest with embeddingSpaceId 'sp'; serve with a different one → incompatible.
106
+ const provider = await seedProvider('g1', [
107
+ rec('g1:a', 'seed', 'g1', 'alpha'),
108
+ ]);
109
+ const host = makeSkillPluginHost({
110
+ ...SERVE_BASE,
111
+ embeddingSpaceId: 'OTHER-SPACE',
112
+ backendProvider: provider.asBackendProvider(),
113
+ serveCollections: ['g1'],
114
+ });
115
+ await assert.rejects(() => host.load(), (e) => e instanceof SkillsIncompatibleError);
116
+ });
117
+ // 4 -------------------------------------------------------------------------
118
+ test('serving reload SAME set, new generations → succeeds and rotates', async () => {
119
+ const provider = makeInMemoryStoreProvider({ embed });
120
+ const mkHost = (body) => makeSkillPluginHost({
121
+ ...SERVE_BASE,
122
+ storeProvider: provider,
123
+ sources: [
124
+ {
125
+ id: 's1',
126
+ source: makeStubSource({
127
+ collections: [info('c1')],
128
+ records: [rec('c1:a', 's1', 'c1', body)],
129
+ }),
130
+ },
131
+ ],
132
+ });
133
+ // First load registers the served set {c1}.
134
+ const host = mkHost('v1 body');
135
+ await host.load();
136
+ const gen1 = (await provider.readCatalog()).entries.find((e) => e.collection.group === 'c1')?.generation;
137
+ // Reload on the SAME host, SAME set → new generation, no throw.
138
+ const res = await host.load();
139
+ assert.equal(res.ok, true);
140
+ assert.deepEqual(res.committed, ['c1']);
141
+ const gen2 = (await provider.readCatalog()).entries.find((e) => e.collection.group === 'c1')?.generation;
142
+ assert.notEqual(gen1, gen2); // rotated
143
+ });
144
+ // 5 -------------------------------------------------------------------------
145
+ test('serving reload LOCAL change (sources resolve a new collection) → throws, no build/publish', async () => {
146
+ // A host whose source set changes between loads via a toggling stub: first load resolves
147
+ // {c1} (registers the served set), the second resolves {c1,c2} (a LOCAL change).
148
+ let loadNo = 0;
149
+ const togglingSource = {
150
+ async acquire() {
151
+ loadNo++;
152
+ if (loadNo === 1) {
153
+ return {
154
+ collections: [info('c1')],
155
+ records: [rec('c1:a', 'sX', 'c1', 'alpha')],
156
+ };
157
+ }
158
+ return {
159
+ collections: [info('c1'), info('c2')],
160
+ records: [
161
+ rec('c1:a', 'sX', 'c1', 'alpha'),
162
+ rec('c2:a', 'sX', 'c2', 'beta'),
163
+ ],
164
+ };
165
+ },
166
+ };
167
+ const provider2 = makeInMemoryStoreProvider({ embed });
168
+ let begin2 = 0;
169
+ let publish2 = 0;
170
+ const fg2 = provider2.forGroup.bind(provider2);
171
+ provider2.forGroup = (group) => {
172
+ const store = fg2(group);
173
+ return {
174
+ ...store,
175
+ async beginGeneration() {
176
+ begin2++;
177
+ return store.beginGeneration();
178
+ },
179
+ };
180
+ };
181
+ const pub2 = provider2.publishCatalog.bind(provider2);
182
+ provider2.publishCatalog = async (rev, entries, options) => {
183
+ publish2++;
184
+ return pub2(rev, entries, options);
185
+ };
186
+ const reloadHost = makeSkillPluginHost({
187
+ ...SERVE_BASE,
188
+ storeProvider: provider2,
189
+ sources: [{ id: 'sX', source: togglingSource }],
190
+ });
191
+ await reloadHost.load(); // registers {c1}
192
+ const beginAfterFirst = begin2;
193
+ const publishAfterFirst = publish2;
194
+ const catBeforeReload = await provider2.readCatalog();
195
+ // Second load resolves {c1,c2} → LOCAL change → guard throws BEFORE any build/publish.
196
+ await assert.rejects(() => reloadHost.load(), /served collection set changed/i);
197
+ assert.equal(begin2, beginAfterFirst); // NO new generation built
198
+ assert.equal(publish2, publishAfterFirst); // NO publish
199
+ // Catalog unchanged.
200
+ assert.deepEqual((await provider2.readCatalog()).catalogRevision, catBeforeReload.catalogRevision);
201
+ });
202
+ // 6 -------------------------------------------------------------------------
203
+ test('serving reload OUT-OF-BAND change (active catalog grew) → throws; external collection NOT tombstoned', async () => {
204
+ const provider = makeInMemoryStoreProvider({ embed });
205
+ let publishCalls = 0;
206
+ const origPublish = provider.publishCatalog.bind(provider);
207
+ provider.publishCatalog = async (rev, entries, options) => {
208
+ publishCalls++;
209
+ return origPublish(rev, entries, options);
210
+ };
211
+ // Serving host registers {c1}.
212
+ const host = makeSkillPluginHost({
213
+ ...SERVE_BASE,
214
+ storeProvider: provider,
215
+ sources: [
216
+ {
217
+ id: 's1',
218
+ source: makeStubSource({
219
+ collections: [info('c1')],
220
+ records: [rec('c1:a', 's1', 'c1', 'alpha')],
221
+ }),
222
+ },
223
+ ],
224
+ });
225
+ await host.load(); // registers {c1}
226
+ const publishAfterFirst = publishCalls;
227
+ // OUT-OF-BAND: a separate ingest adds c2 to the active catalog.
228
+ const ingest = makeSkillPluginHost({
229
+ ...SERVE_BASE,
230
+ storeProvider: provider,
231
+ servingMode: false,
232
+ sources: [
233
+ {
234
+ id: 's1',
235
+ source: makeStubSource({
236
+ collections: [info('c1')],
237
+ records: [rec('c1:a', 's1', 'c1', 'alpha')],
238
+ }),
239
+ },
240
+ {
241
+ id: 's2',
242
+ source: makeStubSource({
243
+ collections: [info('c2')],
244
+ records: [rec('c2:a', 's2', 'c2', 'beta')],
245
+ }),
246
+ },
247
+ ],
248
+ });
249
+ await ingest.load();
250
+ const catWithBoth = await provider.readCatalog();
251
+ assert.deepEqual(catWithBoth.entries.map((e) => e.collection.group).sort(), [
252
+ 'c1',
253
+ 'c2',
254
+ ]);
255
+ const publishAfterIngest = publishCalls;
256
+ // Serving host reloads: its desired stays {c1} but active catalog is now {c1,c2} →
257
+ // OUT-OF-BAND mismatch → guard throws BEFORE any publish.
258
+ await assert.rejects(() => host.load(), /served collection set changed/i);
259
+ assert.equal(publishCalls, publishAfterIngest); // serving host published NOTHING
260
+ assert.ok(publishAfterFirst <= publishAfterIngest); // sanity
261
+ // c2 is NOT tombstoned — it still serves (the externally-added collection survives).
262
+ const cat = await provider.readCatalog();
263
+ const c2 = cat.entries.find((e) => e.collection.group === 'c2');
264
+ assert.ok(c2 && !c2.tombstone);
265
+ const c2hits = await ingest.rag('c2').query('beta', { k: 5, threshold: 0 });
266
+ assert.ok(c2hits.some((h) => h.record.id === 'c2:a'));
267
+ });
268
+ // 7 -------------------------------------------------------------------------
269
+ test('groups()/rag(): one group → rag() defaults; several → rag() throws; inactive group serves []', async () => {
270
+ // One group: rag() with no arg resolves it.
271
+ {
272
+ const provider = await seedProvider('g1', [
273
+ rec('g1:a', 'seed', 'g1', 'alpha'),
274
+ ]);
275
+ const host = makeSkillPluginHost({
276
+ ...SERVE_BASE,
277
+ backendProvider: provider.asBackendProvider(),
278
+ serveCollections: ['g1'],
279
+ });
280
+ await host.load();
281
+ const hits = await host.rag().query('alpha', { k: 5, threshold: 0 });
282
+ assert.ok(hits.some((h) => h.record.id === 'g1:a'));
283
+ // An inactive/unknown group serves [] (does NOT throw).
284
+ const none = await host.rag('nonexistent').query('alpha', {
285
+ k: 5,
286
+ threshold: 0,
287
+ });
288
+ assert.equal(none.length, 0);
289
+ }
290
+ // Several groups: rag() with no arg throws.
291
+ {
292
+ const provider = makeInMemoryStoreProvider({ embed });
293
+ // seed two collections.
294
+ await provider._seed('g1#g0', [
295
+ { record: rec('g1:a', 'seed', 'g1', 'alpha'), vector: hash3('alpha') },
296
+ ]);
297
+ await provider._seed('g2#g0', [
298
+ { record: rec('g2:a', 'seed', 'g2', 'beta'), vector: hash3('beta') },
299
+ ]);
300
+ const manifest = {
301
+ embeddingSpaceId: 'sp',
302
+ dimension: 3,
303
+ retrievalSchemaVersion: 1,
304
+ };
305
+ await provider.publishCatalog('c0', [
306
+ {
307
+ collection: info('g1'),
308
+ sources: ['seed'],
309
+ generation: 'g1#g0',
310
+ manifest,
311
+ },
312
+ {
313
+ collection: info('g2'),
314
+ sources: ['seed'],
315
+ generation: 'g2#g0',
316
+ manifest,
317
+ },
318
+ ]);
319
+ const host = makeSkillPluginHost({
320
+ ...SERVE_BASE,
321
+ backendProvider: provider.asBackendProvider(),
322
+ serveCollections: ['g1', 'g2'],
323
+ });
324
+ await host.load();
325
+ assert.throws(() => host.rag(), /name the group/);
326
+ }
327
+ });
328
+ //# sourceMappingURL=skill-plugin-host.recall-and-reload.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-plugin-host.recall-and-reload.test.js","sourceRoot":"","sources":["../../../src/skills/plugin-host/skill-plugin-host.recall-and-reload.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,+FAA+F;AAC/F,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,4DAA4D;AAC5D,MAAM,KAAK,GAAG,KAAK,EAAE,IAAY,EAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACrE,8CAA8C;AAC9C,MAAM,QAAQ,GAAG;IACf,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;IACjC,CAAC;CACF,CAAC;AAEF,SAAS,GAAG,CACV,EAAU,EACV,QAAgB,EAChB,KAAa,EACb,OAAe;IAEf,OAAO;QACL,EAAE;QACF,QAAQ;QACR,KAAK;QACL,IAAI,EAAE,EAAE;QACR,aAAa,EAAE,OAAO;QACtB,OAAO;QACP,UAAU,EAAE,EAAE;KACf,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,KAAa,EAAE,WAAW,GAAG,QAAQ,KAAK,EAAE;IACxD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CACrB,MAAyC;IAEzC,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,QAAsB;YAClC,IAAI,OAAO,MAAM,KAAK,UAAU;gBAAE,OAAO,MAAM,EAAE,CAAC;YAClD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG;IACjB,QAAQ,EAAE,QAAiB;IAC3B,gBAAgB,EAAE,IAAI;IACtB,sBAAsB,EAAE,CAAC;IACzB,SAAS,EAAE,CAAC;CACb,CAAC;AAEF,4EAA4E;AAC5E,KAAK,UAAU,YAAY,CACzB,KAAa,EACb,OAAsB,EACtB,QAAQ,GAAG;IACT,gBAAgB,EAAE,IAAI;IACtB,SAAS,EAAE,CAAC;IACZ,sBAAsB,EAAE,CAAC;CAC1B;IAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,GAAG,KAAK,KAAK,CAAC;IACjC,MAAM,QAAQ,CAAC,KAAK,CAClB,UAAU,EACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CACpE,CAAC;IACF,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;QAClC;YACE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;YACvB,OAAO,EAAE,CAAC,MAAM,CAAC;YACjB,UAAU;YACV,QAAQ;SACT;KACgB,CAAC,CAAC;IACrB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8EAA8E;AAC9E,IAAI,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;IAC5G,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;QACxC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC;KAC1C,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,GAAG,UAAU;QACb,eAAe,EAAE,QAAQ,CAAC,iBAAiB,EAAE;QAC7C,gBAAgB,EAAE,CAAC,IAAI,CAAC;KACzB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,CAAC,SAAS,CACd,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EACjC,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,MAAM,IAAI,GAAG,MAAM,IAAI;SACpB,GAAG,CAAC,IAAI,CAAC;SACT,KAAK,CAAC,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,0FAA0F,EAAE,KAAK,IAAI,EAAE;IAC1G,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;QACxC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,GAAG,UAAU;QACb,eAAe,EAAE,QAAQ,CAAC,iBAAiB,EAAE;QAC7C,gBAAgB,EAAE,CAAC,SAAS,CAAC;KAC9B,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;IAC5F,uFAAuF;IACvF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;QACxC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,GAAG,UAAU;QACb,gBAAgB,EAAE,aAAa;QAC/B,eAAe,EAAE,QAAQ,CAAC,iBAAiB,EAAE;QAC7C,gBAAgB,EAAE,CAAC,IAAI,CAAC;KACzB,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,uBAAuB,CAC5C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IACjF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9B,mBAAmB,CAAC;QAClB,GAAG,UAAU;QACb,aAAa,EAAE,QAAQ;QACvB,OAAO,EAAE;YACP;gBACE,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,cAAc,CAAC;oBACrB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;iBACzC,CAAC;aACH;SACF;KACF,CAAC,CAAC;IAEL,4CAA4C;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAClB,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CACnC,EAAE,UAAU,CAAC;IAEd,gEAAgE;IAChE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CACtD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CACnC,EAAE,UAAU,CAAC;IACd,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU;AACzC,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;IAC3G,yFAAyF;IACzF,iFAAiF;IACjF,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,cAAc,GAAiB;QACnC,KAAK,CAAC,OAAO;YACX,MAAM,EAAE,CAAC;YACT,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,OAAO;oBACL,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;iBAC5C,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,OAAO,EAAE;oBACP,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;oBAChC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC;iBAChC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;IACF,MAAM,SAAS,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/C,SAAS,CAAC,QAAQ,GAAG,CAAC,KAAa,EAAgB,EAAE;QACnD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,OAAO;YACL,GAAG,KAAK;YACR,KAAK,CAAC,eAAe;gBACnB,MAAM,EAAE,CAAC;gBACT,OAAO,KAAK,CAAC,eAAe,EAAE,CAAC;YACjC,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,SAAS,CAAC,cAAc,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACzD,QAAQ,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,mBAAmB,CAAC;QACrC,GAAG,UAAU;QACb,aAAa,EAAE,SAAS;QACxB,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;KAChD,CAAC,CAAC;IACH,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;IAC1C,MAAM,eAAe,GAAG,MAAM,CAAC;IAC/B,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACnC,MAAM,eAAe,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;IAEtD,uFAAuF;IACvF,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EACvB,gCAAgC,CACjC,CAAC;IACF,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,0BAA0B;IACjE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,aAAa;IACxD,qBAAqB;IACrB,MAAM,CAAC,SAAS,CACd,CAAC,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,eAAe,EAC/C,eAAe,CAAC,eAAe,CAChC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,sGAAsG,EAAE,KAAK,IAAI,EAAE;IACtH,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtD,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3D,QAAQ,CAAC,cAAc,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;QACxD,YAAY,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,+BAA+B;IAC/B,MAAM,IAAI,GAAG,mBAAmB,CAAC;QAC/B,GAAG,UAAU;QACb,aAAa,EAAE,QAAQ;QACvB,OAAO,EAAE;YACP;gBACE,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,cAAc,CAAC;oBACrB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;iBAC5C,CAAC;aACH;SACF;KACF,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,iBAAiB;IACpC,MAAM,iBAAiB,GAAG,YAAY,CAAC;IAEvC,gEAAgE;IAChE,MAAM,MAAM,GAAG,mBAAmB,CAAC;QACjC,GAAG,UAAU;QACb,aAAa,EAAE,QAAQ;QACvB,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE;YACP;gBACE,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,cAAc,CAAC;oBACrB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;iBAC5C,CAAC;aACH;YACD;gBACE,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,cAAc,CAAC;oBACrB,WAAW,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;iBAC3C,CAAC;aACH;SACF;KACF,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACpB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;IACjD,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;QAC1E,IAAI;QACJ,IAAI;KACL,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,YAAY,CAAC;IAExC,mFAAmF;IACnF,0DAA0D;IAC1D,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,gCAAgC,CAAC,CAAC;IAC1E,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC,CAAC,iCAAiC;IACjF,MAAM,CAAC,EAAE,CAAC,iBAAiB,IAAI,kBAAkB,CAAC,CAAC,CAAC,SAAS;IAE7D,qFAAqF;IACrF,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,IAAI,CAAC,8FAA8F,EAAE,KAAK,IAAI,EAAE;IAC9G,4CAA4C;IAC5C,CAAC;QACC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE;YACxC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;SACnC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,GAAG,UAAU;YACb,eAAe,EAAE,QAAQ,CAAC,iBAAiB,EAAE;YAC7C,gBAAgB,EAAE,CAAC,IAAI,CAAC;SACzB,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC;QACpD,wDAAwD;QACxD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE;YACxD,CAAC,EAAE,CAAC;YACJ,SAAS,EAAE,CAAC;SACb,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,4CAA4C;IAC5C,CAAC;QACC,MAAM,QAAQ,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,wBAAwB;QACxB,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;YAC5B,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE;SACvE,CAAC,CAAC;QACH,MAAM,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;YAC5B,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;SACrE,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG;YACf,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,CAAC;YACZ,sBAAsB,EAAE,CAAC;SAC1B,CAAC;QACF,MAAM,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE;YAClC;gBACE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,CAAC,MAAM,CAAC;gBACjB,UAAU,EAAE,OAAO;gBACnB,QAAQ;aACT;YACD;gBACE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;gBACtB,OAAO,EAAE,CAAC,MAAM,CAAC;gBACjB,UAAU,EAAE,OAAO;gBACnB,QAAQ;aACT;SACgB,CAAC,CAAC;QAErB,MAAM,IAAI,GAAG,mBAAmB,CAAC;YAC/B,GAAG,UAAU;YACb,eAAe,EAAE,QAAQ,CAAC,iBAAiB,EAAE;YAC7C,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;SAC/B,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACpD,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { IRag, ISkillsRagHandle } from '@mcp-abap-adt/llm-agent';
2
+ export interface SkillsRagSourceConfig {
3
+ group: string;
4
+ k: number;
5
+ threshold?: number;
6
+ }
7
+ /**
8
+ * Read-only {@link IRag} adapter over an {@link ISkillsRagHandle}, letting the
9
+ * SmartAgent context-assembler consume the skills handle as just another RAG
10
+ * source.
11
+ *
12
+ * Skills live in their own embedding space, so this adapter RE-EMBEDS the
13
+ * query via the handle (`IQueryEmbedding.text`) and never reuses the
14
+ * assembler's vector (`IQueryEmbedding.toVector()`).
15
+ */
16
+ export declare function skillsRagSource(handle: ISkillsRagHandle, cfg: SkillsRagSourceConfig): IRag;
17
+ //# sourceMappingURL=skills-rag-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-rag-source.d.ts","sourceRoot":"","sources":["../../../src/skills/plugin-host/skills-rag-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,IAAI,EACJ,gBAAgB,EAGjB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,gBAAgB,EACxB,GAAG,EAAE,qBAAqB,GACzB,IAAI,CAiDN"}
@@ -0,0 +1,52 @@
1
+ import { RagError } from '@mcp-abap-adt/llm-agent'; // value (class)
2
+ /**
3
+ * Read-only {@link IRag} adapter over an {@link ISkillsRagHandle}, letting the
4
+ * SmartAgent context-assembler consume the skills handle as just another RAG
5
+ * source.
6
+ *
7
+ * Skills live in their own embedding space, so this adapter RE-EMBEDS the
8
+ * query via the handle (`IQueryEmbedding.text`) and never reuses the
9
+ * assembler's vector (`IQueryEmbedding.toVector()`).
10
+ */
11
+ export function skillsRagSource(handle, cfg) {
12
+ return {
13
+ async query(embedding, k, options) {
14
+ try {
15
+ const hits = await handle.query(embedding.text, { k: k ?? cfg.k, threshold: cfg.threshold }, options);
16
+ const value = hits.map((h) => ({
17
+ text: h.record.content,
18
+ score: h.score,
19
+ metadata: {
20
+ id: h.record.id,
21
+ group: cfg.group,
22
+ name: h.record.name,
23
+ provenance: h.record.provenance,
24
+ },
25
+ }));
26
+ return { ok: true, value };
27
+ }
28
+ catch (e) {
29
+ return {
30
+ ok: false,
31
+ error: new RagError(`skills source error: ${String(e)}`),
32
+ };
33
+ }
34
+ },
35
+ async healthCheck(options) {
36
+ try {
37
+ await handle.activeManifest(options);
38
+ return { ok: true, value: undefined };
39
+ }
40
+ catch (e) {
41
+ return { ok: false, error: new RagError(String(e)) };
42
+ }
43
+ },
44
+ async getById() {
45
+ return { ok: true, value: null };
46
+ },
47
+ writer() {
48
+ return undefined;
49
+ },
50
+ };
51
+ }
52
+ //# sourceMappingURL=skills-rag-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-rag-source.js","sourceRoot":"","sources":["../../../src/skills/plugin-host/skills-rag-source.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC,CAAC,gBAAgB;AAQpE;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAwB,EACxB,GAA0B;IAE1B,OAAO;QACL,KAAK,CAAC,KAAK,CACT,SAA0B,EAC1B,CAAS,EACT,OAAqB;YAErB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,KAAK,CAC7B,SAAS,CAAC,IAAI,EACd,EAAE,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,EAC3C,OAAO,CACR,CAAC;gBACF,MAAM,KAAK,GAAgB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;oBACtB,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,QAAQ,EAAE;wBACR,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE;wBACf,KAAK,EAAE,GAAG,CAAC,KAAK;wBAChB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI;wBACnB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU;qBAChC;iBACF,CAAC,CAAC,CAAC;gBACJ,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,IAAI,QAAQ,CAAC,wBAAwB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,OAAqB;YACrC,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBACrC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACxC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC;QACH,CAAC;QAED,KAAK,CAAC,OAAO;YACX,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACnC,CAAC;QAED,MAAM;YACJ,OAAO,SAAS,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skills-rag-source.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-rag-source.test.d.ts","sourceRoot":"","sources":["../../../src/skills/plugin-host/skills-rag-source.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ import assert from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { skillsRagSource } from './skills-rag-source.js';
4
+ test('query uses IQueryEmbedding.text (NOT toVector) and maps SkillHit→RagResult', async () => {
5
+ let usedToVector = false;
6
+ const handle = {
7
+ async query(text) {
8
+ assert.equal(text, 'goal-text');
9
+ return [
10
+ {
11
+ record: {
12
+ id: 'i',
13
+ name: 'n',
14
+ content: 'BODY',
15
+ provenance: 'pv',
16
+ group: 'g',
17
+ },
18
+ score: 0.91,
19
+ },
20
+ ];
21
+ },
22
+ async activeManifest() {
23
+ return {
24
+ revision: 'g0',
25
+ manifest: {
26
+ embeddingSpaceId: 'sp',
27
+ dimension: 3,
28
+ retrievalSchemaVersion: 1,
29
+ },
30
+ };
31
+ },
32
+ };
33
+ const src = skillsRagSource(handle, {
34
+ group: 'g',
35
+ k: 4,
36
+ threshold: 0.3,
37
+ });
38
+ const embedding = {
39
+ text: 'goal-text',
40
+ async toVector() {
41
+ usedToVector = true;
42
+ return [0, 0, 0];
43
+ },
44
+ };
45
+ const res = await src.query(embedding, 4);
46
+ assert.equal(res.ok, true);
47
+ const value = res.value;
48
+ assert.equal(value[0].text, 'BODY');
49
+ assert.equal(value[0].score, 0.91);
50
+ assert.equal(value[0].metadata.id, 'i');
51
+ assert.equal(usedToVector, false); // re-embeds via the skills handle, not the assembler vector
52
+ });
53
+ test('healthCheck ok when activeManifest resolves; writer undefined; getById ok(null)', async () => {
54
+ const handle = {
55
+ async query() {
56
+ return [];
57
+ },
58
+ async activeManifest() {
59
+ return { revision: 'g', manifest: {} };
60
+ },
61
+ };
62
+ const src = skillsRagSource(handle, { group: 'g', k: 4 });
63
+ assert.equal((await src.healthCheck()).ok, true);
64
+ assert.equal(src.writer?.(), undefined);
65
+ const byId = await src.getById('x');
66
+ assert.equal(byId.ok, true);
67
+ assert.equal(byId.value, null);
68
+ });
69
+ //# sourceMappingURL=skills-rag-source.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-rag-source.test.js","sourceRoot":"","sources":["../../../src/skills/plugin-host/skills-rag-source.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ISkillSource } from '@mcp-abap-adt/llm-agent';
2
+ import { type IMarketplaceTransport } from './http-marketplace-source.js';
3
+ /** A fetched source's config, resolved from YAML/CLI. A {@link SkillSourceStrategy}
4
+ * turns it into a concrete {@link ISkillSource} with strategy-specific placement. */
5
+ export type FetchedSourceConfig = {
6
+ source: string;
7
+ enabled: readonly string[];
8
+ transport: IMarketplaceTransport;
9
+ chunk: {
10
+ maxChars: number;
11
+ };
12
+ strategyConfig?: Record<string, unknown>;
13
+ };
14
+ /** Maps a {@link FetchedSourceConfig} to an {@link ISkillSource} (placement decided here). */
15
+ export type SkillSourceStrategy = (cfg: FetchedSourceConfig) => ISkillSource;
16
+ /** Register (or override) a named source strategy. */
17
+ export declare function registerSkillSourceStrategy(name: string, f: SkillSourceStrategy): void;
18
+ /** Resolve a registered strategy by name; throws (listing registered names) if unknown. */
19
+ export declare function resolveSkillSourceStrategy(name: string): SkillSourceStrategy;
20
+ //# sourceMappingURL=source-strategies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-strategies.d.ts","sourceRoot":"","sources":["../../../src/skills/plugin-host/source-strategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,KAAK,qBAAqB,EAE3B,MAAM,8BAA8B,CAAC;AAEtC;sFACsF;AACtF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,qBAAqB,CAAC;IACjC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C,CAAC;AAEF,8FAA8F;AAC9F,MAAM,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,YAAY,CAAC;AAI7E,sDAAsD;AACtD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,mBAAmB,GACrB,IAAI,CAEN;AAED,2FAA2F;AAC3F,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAS5E"}
@@ -0,0 +1,37 @@
1
+ import { makeHttpMarketplaceSource, } from './http-marketplace-source.js';
2
+ const registry = new Map();
3
+ /** Register (or override) a named source strategy. */
4
+ export function registerSkillSourceStrategy(name, f) {
5
+ registry.set(name, f);
6
+ }
7
+ /** Resolve a registered strategy by name; throws (listing registered names) if unknown. */
8
+ export function resolveSkillSourceStrategy(name) {
9
+ const f = registry.get(name);
10
+ if (!f) {
11
+ const known = [...registry.keys()].sort().join(', ');
12
+ throw new Error(`unknown skill source strategy '${name}'; registered: ${known}`);
13
+ }
14
+ return f;
15
+ }
16
+ // --- Built-in strategies (registered at module load) -----------------------
17
+ /** Default: one collection per plugin, named/described by the plugin id. */
18
+ registerSkillSourceStrategy('one-group-per-plugin', (cfg) => makeHttpMarketplaceSource({
19
+ source: cfg.source,
20
+ enabled: cfg.enabled,
21
+ transport: cfg.transport,
22
+ chunk: cfg.chunk,
23
+ placement: (plugin) => ({ group: plugin, description: plugin }),
24
+ }));
25
+ /** Bundle every enabled plugin into ONE collection named by
26
+ * `strategyConfig.collection` (default `'skills'`). */
27
+ registerSkillSourceStrategy('single-collection', (cfg) => {
28
+ const collection = String(cfg.strategyConfig?.collection ?? 'skills');
29
+ return makeHttpMarketplaceSource({
30
+ source: cfg.source,
31
+ enabled: cfg.enabled,
32
+ transport: cfg.transport,
33
+ chunk: cfg.chunk,
34
+ placement: () => ({ group: collection, description: collection }),
35
+ });
36
+ });
37
+ //# sourceMappingURL=source-strategies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-strategies.js","sourceRoot":"","sources":["../../../src/skills/plugin-host/source-strategies.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AAetC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;AAExD,sDAAsD;AACtD,MAAM,UAAU,2BAA2B,CACzC,IAAY,EACZ,CAAsB;IAEtB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,kCAAkC,IAAI,kBAAkB,KAAK,EAAE,CAChE,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8EAA8E;AAE9E,4EAA4E;AAC5E,2BAA2B,CAAC,sBAAsB,EAAE,CAAC,GAAG,EAAE,EAAE,CAC1D,yBAAyB,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,SAAS,EAAE,GAAG,CAAC,SAAS;IACxB,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;CAChE,CAAC,CACH,CAAC;AAEF;wDACwD;AACxD,2BAA2B,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;IACvD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,IAAI,QAAQ,CAAC,CAAC;IACtE,OAAO,yBAAyB,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;KAClE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=source-strategies.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-strategies.test.d.ts","sourceRoot":"","sources":["../../../src/skills/plugin-host/source-strategies.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ import assert from 'node:assert/strict';
2
+ import { test } from 'node:test';
3
+ import { resolveSkillSourceStrategy, } from './source-strategies.js';
4
+ const SKILL_MD = `---\nname: s\ndescription: d\n---\n## H\nbody`;
5
+ const transport = {
6
+ async listPlugins() {
7
+ return [
8
+ { plugin: 'a', version: '1', skills: ['s'] },
9
+ { plugin: 'b', version: '1', skills: ['s'] },
10
+ ];
11
+ },
12
+ async fetchSkillMd() {
13
+ return SKILL_MD;
14
+ },
15
+ };
16
+ const cfg = {
17
+ source: 'v',
18
+ enabled: ['*'],
19
+ transport,
20
+ chunk: { maxChars: 1000 },
21
+ };
22
+ test('one-group-per-plugin groups per plugin (≥2 plugins → ≥2 collections)', async () => {
23
+ const src = resolveSkillSourceStrategy('one-group-per-plugin')(cfg);
24
+ const res = await src.acquire();
25
+ assert.ok(res.collections.length >= 2);
26
+ assert.deepEqual(res.collections.map((c) => c.group).sort(), ['a', 'b']);
27
+ });
28
+ test('single-collection bundles all plugins into one named collection', async () => {
29
+ const src = resolveSkillSourceStrategy('single-collection')({
30
+ ...cfg,
31
+ strategyConfig: { collection: 'bundle' },
32
+ });
33
+ const res = await src.acquire();
34
+ assert.equal(res.collections.length, 1);
35
+ assert.equal(res.collections[0].group, 'bundle');
36
+ });
37
+ test('single-collection defaults to "skills" when unconfigured', async () => {
38
+ const src = resolveSkillSourceStrategy('single-collection')(cfg);
39
+ const res = await src.acquire();
40
+ assert.equal(res.collections.length, 1);
41
+ assert.equal(res.collections[0].group, 'skills');
42
+ });
43
+ test('resolveSkillSourceStrategy throws on unknown, listing registered names', () => {
44
+ assert.throws(() => resolveSkillSourceStrategy('nope'), (e) => {
45
+ const msg = String(e);
46
+ assert.match(msg, /nope/);
47
+ assert.match(msg, /one-group-per-plugin/);
48
+ assert.match(msg, /single-collection/);
49
+ return true;
50
+ });
51
+ });
52
+ //# sourceMappingURL=source-strategies.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-strategies.test.js","sourceRoot":"","sources":["../../../src/skills/plugin-host/source-strategies.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAEL,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAEhC,MAAM,QAAQ,GAAG,+CAA+C,CAAC;AAEjE,MAAM,SAAS,GAA0B;IACvC,KAAK,CAAC,WAAW;QACf,OAAO;YACL,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE;YAC5C,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE;SAC7C,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,YAAY;QAChB,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC;AAEF,MAAM,GAAG,GAAwB;IAC/B,MAAM,EAAE,GAAG;IACX,OAAO,EAAE,CAAC,GAAG,CAAC;IACd,SAAS;IACT,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;CAC1B,CAAC;AAEF,IAAI,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;IACtF,MAAM,GAAG,GAAG,0BAA0B,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,CAAC;IACpE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACvC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IACjF,MAAM,GAAG,GAAG,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;QAC1D,GAAG,GAAG;QACN,cAAc,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE;KACzC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;IAC1E,MAAM,GAAG,GAAG,0BAA0B,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACnD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IAClF,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC,EACxC,CAAC,CAAU,EAAE,EAAE;QACb,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC,CACF,CAAC;AACJ,CAAC,CAAC,CAAC"}