@mcp-abap-adt/llm-agent 26.0.0 → 28.0.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 (147) hide show
  1. package/README.md +2 -0
  2. package/dist/credentials/static.d.ts +9 -0
  3. package/dist/credentials/static.d.ts.map +1 -0
  4. package/dist/credentials/static.js +12 -0
  5. package/dist/credentials/static.js.map +1 -0
  6. package/dist/index.d.ts +6 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +5 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/interfaces/builder.d.ts +11 -1
  11. package/dist/interfaces/builder.d.ts.map +1 -1
  12. package/dist/interfaces/collect-server-descriptors.d.ts +12 -0
  13. package/dist/interfaces/collect-server-descriptors.d.ts.map +1 -0
  14. package/dist/interfaces/collect-server-descriptors.js +19 -0
  15. package/dist/interfaces/collect-server-descriptors.js.map +1 -0
  16. package/dist/interfaces/index.d.ts +3 -2
  17. package/dist/interfaces/index.d.ts.map +1 -1
  18. package/dist/interfaces/index.js.map +1 -1
  19. package/dist/interfaces/mcp-connection-strategy.d.ts +29 -2
  20. package/dist/interfaces/mcp-connection-strategy.d.ts.map +1 -1
  21. package/dist/interfaces/mcp-server-from-factory.d.ts +15 -0
  22. package/dist/interfaces/mcp-server-from-factory.d.ts.map +1 -0
  23. package/dist/interfaces/mcp-server-from-factory.js +37 -0
  24. package/dist/interfaces/mcp-server-from-factory.js.map +1 -0
  25. package/dist/interfaces/mcp-server.d.ts +24 -0
  26. package/dist/interfaces/mcp-server.d.ts.map +1 -0
  27. package/dist/interfaces/mcp-server.js +2 -0
  28. package/dist/interfaces/mcp-server.js.map +1 -0
  29. package/dist/interfaces/pipeline-plugin.d.ts +16 -6
  30. package/dist/interfaces/pipeline-plugin.d.ts.map +1 -1
  31. package/dist/interfaces/plugin.d.ts +11 -3
  32. package/dist/interfaces/plugin.d.ts.map +1 -1
  33. package/dist/interfaces/rag.d.ts +124 -21
  34. package/dist/interfaces/rag.d.ts.map +1 -1
  35. package/dist/interfaces/rag.js.map +1 -1
  36. package/dist/interfaces/tool-catalog.d.ts +4 -2
  37. package/dist/interfaces/tool-catalog.d.ts.map +1 -1
  38. package/dist/interfaces/tool-catalog.js.map +1 -1
  39. package/dist/interfaces/types.d.ts +2 -1
  40. package/dist/interfaces/types.d.ts.map +1 -1
  41. package/dist/interfaces/types.js.map +1 -1
  42. package/dist/llm/base-llm-provider.d.ts +29 -4
  43. package/dist/llm/base-llm-provider.d.ts.map +1 -1
  44. package/dist/llm/base-llm-provider.js +45 -9
  45. package/dist/llm/base-llm-provider.js.map +1 -1
  46. package/dist/logger/normalise-logger.d.ts +28 -0
  47. package/dist/logger/normalise-logger.d.ts.map +1 -0
  48. package/dist/logger/normalise-logger.js +50 -0
  49. package/dist/logger/normalise-logger.js.map +1 -0
  50. package/dist/logger/text-logger.d.ts +14 -0
  51. package/dist/logger/text-logger.d.ts.map +1 -0
  52. package/dist/logger/text-logger.js +2 -0
  53. package/dist/logger/text-logger.js.map +1 -0
  54. package/dist/policy/fallback-llm-call-strategy.d.ts +3 -3
  55. package/dist/policy/fallback-llm-call-strategy.d.ts.map +1 -1
  56. package/dist/policy/fallback-llm-call-strategy.js +3 -2
  57. package/dist/policy/fallback-llm-call-strategy.js.map +1 -1
  58. package/dist/rag/catalog/index.d.ts +2 -0
  59. package/dist/rag/catalog/index.d.ts.map +1 -0
  60. package/dist/rag/catalog/index.js +2 -0
  61. package/dist/rag/catalog/index.js.map +1 -0
  62. package/dist/rag/catalog/validation.d.ts +56 -0
  63. package/dist/rag/catalog/validation.d.ts.map +1 -0
  64. package/dist/rag/catalog/validation.js +168 -0
  65. package/dist/rag/catalog/validation.js.map +1 -0
  66. package/dist/rag/corrections/errors.d.ts +47 -0
  67. package/dist/rag/corrections/errors.d.ts.map +1 -1
  68. package/dist/rag/corrections/errors.js +73 -0
  69. package/dist/rag/corrections/errors.js.map +1 -1
  70. package/dist/rag/identity-filter.d.ts +19 -0
  71. package/dist/rag/identity-filter.d.ts.map +1 -0
  72. package/dist/rag/identity-filter.js +31 -0
  73. package/dist/rag/identity-filter.js.map +1 -0
  74. package/dist/rag/in-memory-rag.d.ts +3 -1
  75. package/dist/rag/in-memory-rag.d.ts.map +1 -1
  76. package/dist/rag/in-memory-rag.js +20 -15
  77. package/dist/rag/in-memory-rag.js.map +1 -1
  78. package/dist/rag/index.d.ts +3 -0
  79. package/dist/rag/index.d.ts.map +1 -1
  80. package/dist/rag/index.js +2 -0
  81. package/dist/rag/index.js.map +1 -1
  82. package/dist/rag/mcp-tools/index.d.ts +1 -1
  83. package/dist/rag/mcp-tools/index.d.ts.map +1 -1
  84. package/dist/rag/mcp-tools/index.js.map +1 -1
  85. package/dist/rag/mcp-tools/rag-collection-tools.d.ts +36 -5
  86. package/dist/rag/mcp-tools/rag-collection-tools.d.ts.map +1 -1
  87. package/dist/rag/mcp-tools/rag-collection-tools.js +121 -58
  88. package/dist/rag/mcp-tools/rag-collection-tools.js.map +1 -1
  89. package/dist/rag/providers/base-provider.d.ts +8 -6
  90. package/dist/rag/providers/base-provider.d.ts.map +1 -1
  91. package/dist/rag/providers/base-provider.js +18 -0
  92. package/dist/rag/providers/base-provider.js.map +1 -1
  93. package/dist/rag/providers/in-memory-rag-provider.d.ts +4 -7
  94. package/dist/rag/providers/in-memory-rag-provider.d.ts.map +1 -1
  95. package/dist/rag/providers/in-memory-rag-provider.js +11 -4
  96. package/dist/rag/providers/in-memory-rag-provider.js.map +1 -1
  97. package/dist/rag/providers/vector-rag-provider.d.ts +4 -7
  98. package/dist/rag/providers/vector-rag-provider.d.ts.map +1 -1
  99. package/dist/rag/providers/vector-rag-provider.js +11 -4
  100. package/dist/rag/providers/vector-rag-provider.js.map +1 -1
  101. package/dist/rag/registry/index.d.ts +1 -0
  102. package/dist/rag/registry/index.d.ts.map +1 -1
  103. package/dist/rag/registry/index.js +1 -0
  104. package/dist/rag/registry/index.js.map +1 -1
  105. package/dist/rag/registry/simple-rag-registry.d.ts +74 -30
  106. package/dist/rag/registry/simple-rag-registry.d.ts.map +1 -1
  107. package/dist/rag/registry/simple-rag-registry.js +265 -100
  108. package/dist/rag/registry/simple-rag-registry.js.map +1 -1
  109. package/dist/rag/registry/store-key.d.ts +15 -0
  110. package/dist/rag/registry/store-key.d.ts.map +1 -0
  111. package/dist/rag/registry/store-key.js +25 -0
  112. package/dist/rag/registry/store-key.js.map +1 -0
  113. package/dist/rag/search-strategy.d.ts +9 -0
  114. package/dist/rag/search-strategy.d.ts.map +1 -1
  115. package/dist/rag/search-strategy.js +49 -22
  116. package/dist/rag/search-strategy.js.map +1 -1
  117. package/dist/rag/tokenizer.d.ts +17 -0
  118. package/dist/rag/tokenizer.d.ts.map +1 -0
  119. package/dist/rag/tokenizer.js +38 -0
  120. package/dist/rag/tokenizer.js.map +1 -0
  121. package/dist/rag/vector-rag.d.ts +2 -2
  122. package/dist/rag/vector-rag.d.ts.map +1 -1
  123. package/dist/rag/vector-rag.js +29 -21
  124. package/dist/rag/vector-rag.js.map +1 -1
  125. package/dist/resilience/embedder-resilience.d.ts +2 -2
  126. package/dist/resilience/embedder-resilience.d.ts.map +1 -1
  127. package/dist/resilience/embedder-resilience.js +3 -1
  128. package/dist/resilience/embedder-resilience.js.map +1 -1
  129. package/dist/testing/rag-filter-conformance.d.ts +60 -0
  130. package/dist/testing/rag-filter-conformance.d.ts.map +1 -0
  131. package/dist/testing/rag-filter-conformance.js +379 -0
  132. package/dist/testing/rag-filter-conformance.js.map +1 -0
  133. package/dist/types.d.ts +11 -2
  134. package/dist/types.d.ts.map +1 -1
  135. package/package.json +11 -2
  136. package/dist/interfaces/failure-strategy.d.ts +0 -95
  137. package/dist/interfaces/failure-strategy.d.ts.map +0 -1
  138. package/dist/interfaces/failure-strategy.js +0 -96
  139. package/dist/interfaces/failure-strategy.js.map +0 -1
  140. package/dist/llm/rate-limit.d.ts +0 -165
  141. package/dist/llm/rate-limit.d.ts.map +0 -1
  142. package/dist/llm/rate-limit.js +0 -394
  143. package/dist/llm/rate-limit.js.map +0 -1
  144. package/dist/resilience/status.d.ts +0 -29
  145. package/dist/resilience/status.d.ts.map +0 -1
  146. package/dist/resilience/status.js +0 -51
  147. package/dist/resilience/status.js.map +0 -1
@@ -1,23 +1,29 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { RagError } from '../../interfaces/types.js';
3
- import { CollectionNotFoundError, DeleteUnsupportedError, ProviderNotFoundError, SessionCloseIncompleteError, } from '../corrections/errors.js';
3
+ import { ragOwnerKeys, validateRagAttributes, validateRagOwner, } from '../catalog/validation.js';
4
+ import { AmbiguousCollectionError, CatalogRecordDeleteError, CollectionNotFoundError, DeleteUnsupportedError, DuplicateCollectionError, ProviderNotFoundError, SessionCloseIncompleteError, } from '../corrections/errors.js';
4
5
  import { ImmutableEditStrategy } from '../strategies/edit/immutable.js';
6
+ import { reservedGlobalNameError } from './store-key.js';
5
7
  /**
6
8
  * The name a provider keeps a collection's data under.
7
9
  *
8
10
  * The collection name and a digest of its scope, its owner (the session for a
9
11
  * session collection, the user for a user one) and the name. The same
10
- * collection of the same owner gets the same store, so a user or global
11
- * collection finds its data again after a restart; another session or user
12
- * gets another one, so none opens a store someone else's deletion left. It fits
13
- * the strictest provider rules: letters, digits and underscores, not starting
14
- * with a digit, at most 63 characters (PostgreSQL, HANA).
12
+ * collection of the same owner always names the same store; another session or
13
+ * user names another one, so none opens a store someone else left. Because the
14
+ * name is deterministic, a second creation of a collection that exists is
15
+ * refused by the provider (RAG_DUPLICATE_COLLECTION when it has a record,
16
+ * RAG_ORPHAN_STORE when only its store is there) — a restart reattaches a
17
+ * collection by hydration (describeCollections, openCollection, adopt), never
18
+ * by creating it again (§6.3). It fits the strictest provider rules: letters,
19
+ * digits and underscores, not starting with a digit, at most 63 characters
20
+ * (PostgreSQL, HANA).
15
21
  */
16
22
  function storeNameFor(params) {
17
23
  const owner = params.scope === 'session'
18
- ? (params.sessionId ?? '')
24
+ ? params.sessionId
19
25
  : params.scope === 'user'
20
- ? (params.userId ?? '')
26
+ ? params.userId
21
27
  : '';
22
28
  const digest = createHash('sha256')
23
29
  .update(JSON.stringify([params.scope, owner, params.collectionName]))
@@ -28,15 +34,23 @@ function storeNameFor(params) {
28
34
  base = `_${base}`;
29
35
  return `${base.slice(0, 63 - digest.length - 1)}_${digest}`;
30
36
  }
37
+ /** A collection is its scope and its name (§6.4); the owner is the registry's own. */
38
+ function keyOf(scope, name) {
39
+ return JSON.stringify([scope, name]);
40
+ }
41
+ const SCOPES = ['global', 'user', 'session'];
31
42
  export class SimpleRagRegistry {
43
+ /** Keyed by keyOf(scope, name). */
32
44
  entries = new Map();
33
45
  /**
34
- * Store names whose deletion is still running, with that deletion. A store
35
- * name is released only once its deletion has finished: a collection created
36
- * under it meanwhile waits, so the deletion cannot remove what it writes.
46
+ * Keys (scope, name) whose deletion is running. Absent to get, getEditor and
47
+ * list, so nothing reaches the collection; taken for createCollection,
48
+ * register and adopt, which refuse it — a taken name is refused, not queued
49
+ * (§6.3). The reservation is what lets a failed record deletion restore the
50
+ * entry: without it a creation could take the key in between.
37
51
  */
38
- deletions = new Map();
39
- /** Collection names being created, held until registered or refused. */
52
+ deleting = new Set();
53
+ /** Keys (scope, name) being created, held until inserted or refused. */
40
54
  creating = new Set();
41
55
  providerRegistry;
42
56
  mutationListener;
@@ -49,12 +63,52 @@ export class SimpleRagRegistry {
49
63
  fireMutation() {
50
64
  this.mutationListener?.();
51
65
  }
66
+ /**
67
+ * The entry `name` addresses: with a scope, that scope's; without one, the
68
+ * entry of the one scope holding it — or AmbiguousCollectionError naming
69
+ * every scope that does. Never a silent precedence between scopes.
70
+ */
71
+ find(name, scope) {
72
+ if (scope) {
73
+ const key = keyOf(scope, name);
74
+ const entry = this.entries.get(key);
75
+ return { ok: true, found: entry ? { key, entry } : undefined };
76
+ }
77
+ const held = SCOPES.filter((s) => this.entries.has(keyOf(s, name)));
78
+ if (held.length > 1) {
79
+ return { ok: false, error: new AmbiguousCollectionError(name, held) };
80
+ }
81
+ if (held.length === 0)
82
+ return { ok: true };
83
+ const key = keyOf(held[0], name);
84
+ const entry = this.entries.get(key);
85
+ return { ok: true, found: { key, entry } };
86
+ }
87
+ findOrThrow(name, scope) {
88
+ const f = this.find(name, scope);
89
+ if (!f.ok)
90
+ throw f.error;
91
+ return f.found;
92
+ }
93
+ /** A key is taken while an entry holds it, or a creation or deletion runs. */
94
+ isTaken(key) {
95
+ return (this.entries.has(key) || this.creating.has(key) || this.deleting.has(key));
96
+ }
97
+ insert(key, entry) {
98
+ this.entries.set(key, entry);
99
+ this.fireMutation();
100
+ }
52
101
  register(name, rag, editor, meta) {
53
- if (this.entries.has(name)) {
54
- throw new Error(`Collection '${name}' is already registered`);
102
+ const scope = meta?.scope ?? 'global';
103
+ const reserved = reservedGlobalNameError(scope, name);
104
+ if (reserved)
105
+ throw reserved;
106
+ const key = keyOf(scope, name);
107
+ if (this.isTaken(key)) {
108
+ throw new DuplicateCollectionError(name, `already registered in scope '${scope}'`);
55
109
  }
56
110
  const editable = Boolean(editor) && !(editor instanceof ImmutableEditStrategy);
57
- this.entries.set(name, {
111
+ this.insert(key, {
58
112
  rag,
59
113
  editor,
60
114
  storeName: name,
@@ -63,31 +117,97 @@ export class SimpleRagRegistry {
63
117
  displayName: meta?.displayName ?? name,
64
118
  description: meta?.description,
65
119
  editable,
66
- scope: meta?.scope ?? 'global',
120
+ scope,
67
121
  sessionId: meta?.sessionId,
68
122
  userId: meta?.userId,
69
123
  providerName: meta?.providerName,
70
124
  tags: meta?.tags,
71
125
  },
72
126
  });
127
+ }
128
+ /**
129
+ * Register a collection whose store EXISTS, from its catalog record (§6.3):
130
+ * under its logical name, with the store name the record gives. Creates
131
+ * nothing and asks no provider for anything. See IRagRegistry.adopt.
132
+ */
133
+ adopt(record, rag, editor, providerName) {
134
+ // A record may come from a caller no compiler saw: the one owner rule,
135
+ // and the owner it returns, with only the key its scope selects.
136
+ const owner = validateRagOwner(record);
137
+ if (!owner.ok)
138
+ throw owner.error;
139
+ const reserved = reservedGlobalNameError(owner.value.scope, record.name);
140
+ if (reserved)
141
+ throw reserved;
142
+ const key = keyOf(owner.value.scope, record.name);
143
+ if (this.isTaken(key)) {
144
+ throw new DuplicateCollectionError(record.name, `already registered in scope '${owner.value.scope}'`);
145
+ }
146
+ this.insert(key, {
147
+ rag,
148
+ editor,
149
+ // NOT record.name: the provider knows the store by its own name, and a
150
+ // deletion addressed to the logical name would miss it.
151
+ storeName: record.storeName,
152
+ meta: {
153
+ name: record.name,
154
+ displayName: record.name,
155
+ editable: Boolean(editor) && !(editor instanceof ImmutableEditStrategy),
156
+ scope: owner.value.scope,
157
+ ...ragOwnerKeys(owner.value),
158
+ providerName,
159
+ },
160
+ });
161
+ }
162
+ unregister(name, scope) {
163
+ const found = this.findOrThrow(name, scope);
164
+ if (!found)
165
+ return false;
166
+ this.entries.delete(found.key);
73
167
  this.fireMutation();
168
+ return true;
74
169
  }
75
- unregister(name) {
76
- const existed = this.entries.delete(name);
77
- if (existed)
78
- this.fireMutation();
79
- return existed;
170
+ get(name, scope) {
171
+ return this.findOrThrow(name, scope)?.entry.rag;
80
172
  }
81
- get(name) {
82
- return this.entries.get(name)?.rag;
173
+ getEditor(name, scope) {
174
+ return this.findOrThrow(name, scope)?.entry.editor;
83
175
  }
84
- getEditor(name) {
85
- return this.entries.get(name)?.editor;
176
+ /**
177
+ * Swap the store handle of an existing entry, keeping everything else — its
178
+ * editor, its provider, its store name and its meta — and tell the mutation
179
+ * listener. For a decorator such as the builder's circuit-breaker
180
+ * FallbackRag: re-registering would set the store name to the logical name
181
+ * and drop the provider, so a hydrated collection's delete would miss its
182
+ * store and its catalog record would come back (§6.3). The scope is
183
+ * required, so the lookup is never ambiguous. False when the entry is
184
+ * absent — including one currently reserved by an in-flight deletion (it is
185
+ * gone from `entries` already); never re-inserts.
186
+ */
187
+ replaceRag(name, scope, rag) {
188
+ const found = this.findOrThrow(name, scope);
189
+ if (!found)
190
+ return false;
191
+ found.entry.rag = rag;
192
+ this.fireMutation();
193
+ return true;
86
194
  }
87
195
  list() {
88
196
  return Array.from(this.entries.values()).map((e) => e.meta);
89
197
  }
90
198
  async createCollection(params) {
199
+ // Checked before anything else: an untyped caller's owner without its key
200
+ // would digest to a store every such caller shares (storeNameFor), and
201
+ // attributes JSON would change could not come back as given (§6.3).
202
+ const owner = validateRagOwner(params);
203
+ if (!owner.ok)
204
+ return owner;
205
+ const attributes = validateRagAttributes(params.attributes);
206
+ if (!attributes.ok)
207
+ return attributes;
208
+ const reserved = reservedGlobalNameError(owner.value.scope, params.collectionName);
209
+ if (reserved)
210
+ return { ok: false, error: reserved };
91
211
  if (!this.providerRegistry) {
92
212
  return {
93
213
  ok: false,
@@ -101,110 +221,155 @@ export class SimpleRagRegistry {
101
221
  error: new ProviderNotFoundError(params.providerName),
102
222
  };
103
223
  }
104
- // Preflight duplicate-name check, counting creations still running: two at
105
- // once would share one store, and the loser's rollback would delete it.
106
- if (this.entries.has(params.collectionName) ||
107
- this.creating.has(params.collectionName)) {
224
+ // Preflight duplicate check, counting creations still running: two at
225
+ // once would share one store.
226
+ const key = keyOf(owner.value.scope, params.collectionName);
227
+ if (this.isTaken(key)) {
108
228
  return {
109
229
  ok: false,
110
- error: new RagError(`Collection '${params.collectionName}' already exists`, 'RAG_DUPLICATE_COLLECTION'),
230
+ error: new DuplicateCollectionError(params.collectionName, `the name is taken in scope '${owner.value.scope}'`),
111
231
  };
112
232
  }
113
- this.creating.add(params.collectionName);
233
+ this.creating.add(key);
114
234
  try {
115
- return await this.createUnder(provider, params);
235
+ return await this.createUnder(provider, key, params, owner.value);
116
236
  }
117
237
  finally {
118
- this.creating.delete(params.collectionName);
238
+ this.creating.delete(key);
119
239
  }
120
240
  }
121
- async createUnder(provider, params) {
122
- // A provider that keeps stores by name (Qdrant, a database) opens whatever
123
- // is there, so each owner gets a store name of its own; see storeNameFor.
124
- const storeName = storeNameFor(params);
125
- // Released only when a deletion under it has finished; see deletions.
126
- await this.deletions.get(storeName);
241
+ async createUnder(provider, key, params, owner) {
242
+ // A provider that keeps stores by name gets one per owner; see storeNameFor.
243
+ const storeName = storeNameFor({
244
+ collectionName: params.collectionName,
245
+ ...owner,
246
+ });
247
+ // The logical name and the attributes go to the provider, because its
248
+ // catalog cannot return what it was never given (§6.3). Passed unread, and
249
+ // only when given, so `'attributes' in opts` reads the caller's intent.
127
250
  const created = await provider.createCollection(storeName, {
128
- scope: params.scope,
129
- sessionId: params.sessionId,
130
- userId: params.userId,
251
+ ...owner,
252
+ collectionName: params.collectionName,
253
+ ...(params.attributes !== undefined
254
+ ? { attributes: params.attributes }
255
+ : {}),
256
+ ...(params.adoptExisting ? { adoptExisting: true } : {}),
131
257
  });
132
258
  if (!created.ok)
133
259
  return created;
134
- try {
135
- this.register(params.collectionName, created.value.rag, created.value.editor, {
260
+ // Inserted directly: the key has been held in `creating` since the
261
+ // preflight, so nothing can have taken it, and there is nothing to roll
262
+ // back — a rollback would delete a store whose catalog record the provider
263
+ // has just committed (§6.3).
264
+ const editor = created.value.editor;
265
+ const entry = {
266
+ rag: created.value.rag,
267
+ editor,
268
+ storeName,
269
+ meta: {
270
+ name: params.collectionName,
136
271
  displayName: params.displayName ?? params.collectionName,
137
272
  description: params.description,
138
- scope: params.scope,
139
- sessionId: params.sessionId,
140
- userId: params.userId,
273
+ editable: Boolean(editor) && !(editor instanceof ImmutableEditStrategy),
274
+ scope: owner.scope,
275
+ ...ragOwnerKeys(owner),
141
276
  providerName: params.providerName,
142
277
  tags: params.tags,
143
- });
144
- }
145
- catch (err) {
146
- // Defense-in-depth rollback: the preflight check should prevent this,
147
- // but if register throws anyway (subclass or race), roll the backend back.
148
- if (provider.deleteCollection) {
149
- await provider.deleteCollection(storeName).catch(() => { });
150
- }
151
- return {
152
- ok: false,
153
- error: err instanceof RagError
154
- ? err
155
- : new RagError(String(err), 'RAG_REGISTER_FAILED'),
156
- };
157
- }
158
- const registered = this.entries.get(params.collectionName);
159
- if (!registered) {
160
- return {
161
- ok: false,
162
- error: new RagError(`Collection '${params.collectionName}' vanished after registration`, 'RAG_REGISTER_FAILED'),
163
- };
164
- }
165
- registered.storeName = storeName;
166
- return { ok: true, value: registered.meta };
278
+ },
279
+ };
280
+ this.insert(key, entry);
281
+ return { ok: true, value: entry.meta };
167
282
  }
168
283
  /**
169
284
  * Delete a collection.
170
285
  *
171
- * It is unregistered first, whatever follows, so nothing can reach it again.
172
- * Then its data goes: a collection a provider created is deleted by that
173
- * provider's `deleteCollection` or, where the provider has none, emptied
174
- * through its store's `writer().clearAll()`. A collection registered directly,
175
- * with no provider, is only unregistered — its store belongs to whoever
176
- * registered it. Nothing is retried. A failure comes back as the error, with
177
- * the collection already unregistered; its data may remain in the backend,
178
- * under a store name no other session or user is given (see storeNameFor).
179
- * The store name itself is held until the deletion has finished (see
180
- * deletions).
286
+ * It is unregistered first and its key reserved, so nothing reaches it and
287
+ * nothing takes its name while it is being deleted. Then its data goes: a
288
+ * collection a provider created is deleted by that provider's
289
+ * `deleteCollection` (which cannot throw — see deleteData) — which removes
290
+ * its catalog record before its data — or, where the provider has none,
291
+ * emptied through its store's `writer().clearAll()`. A collection
292
+ * registered without a provider is only unregistered. Nothing is retried.
293
+ *
294
+ * On CatalogRecordDeleteError nothing was deleted: record and data are both
295
+ * intact, so the same entry is registered again before the reservation ends,
296
+ * and the same call can be retried in place. Any other failure comes back as
297
+ * the error with the collection unregistered; its data may remain under a
298
+ * store name no other session or user is given (see storeNameFor).
299
+ *
300
+ * The reservation is released — and the entry restored first, if this was a
301
+ * CatalogRecordDeleteError — on every path, including a throwing
302
+ * `mutationListener`: that listener is consumer-injected and its own
303
+ * exception must never pin the key in `deleting` forever, nor skip the
304
+ * restore. Once state is settled, a listener exception is rethrown (so the
305
+ * caller sees it — never silently dropped); the delete's own Result is
306
+ * returned only when notifying succeeded.
181
307
  */
182
- async deleteCollection(name) {
183
- const entry = this.entries.get(name);
184
- if (!entry) {
308
+ async deleteCollection(name, scope) {
309
+ const f = this.find(name, scope);
310
+ if (!f.ok)
311
+ return { ok: false, error: f.error };
312
+ if (!f.found) {
185
313
  return { ok: false, error: new CollectionNotFoundError(name) };
186
314
  }
187
- this.unregister(name);
188
- const deletion = this.deleteData(name, entry).finally(() => {
189
- if (this.deletions.get(entry.storeName) === deletion) {
190
- this.deletions.delete(entry.storeName);
315
+ const { key, entry } = f.found;
316
+ this.entries.delete(key);
317
+ this.deleting.add(key);
318
+ let notifyFailed = false;
319
+ let notifyError;
320
+ try {
321
+ this.fireMutation();
322
+ }
323
+ catch (err) {
324
+ notifyFailed = true;
325
+ notifyError = err;
326
+ }
327
+ // deleteData never throws (its own try/catch turns everything, including
328
+ // an injected provider registry throwing, into a Result), so this await
329
+ // cannot reject.
330
+ const result = await this.deleteData(name, entry);
331
+ const restoring = !result.ok && result.error instanceof CatalogRecordDeleteError;
332
+ try {
333
+ if (restoring) {
334
+ // Restored while the key is still reserved, so nothing slips in
335
+ // between.
336
+ this.entries.set(key, entry);
191
337
  }
192
- });
193
- this.deletions.set(entry.storeName, deletion);
194
- return deletion;
338
+ }
339
+ finally {
340
+ // Released on every path — success, any other failure, or a restore —
341
+ // whatever the mutation listener above did.
342
+ this.deleting.delete(key);
343
+ }
344
+ if (restoring) {
345
+ try {
346
+ this.fireMutation();
347
+ }
348
+ catch (err) {
349
+ if (!notifyFailed) {
350
+ notifyFailed = true;
351
+ notifyError = err;
352
+ }
353
+ }
354
+ }
355
+ if (notifyFailed)
356
+ throw notifyError;
357
+ return result;
195
358
  }
196
359
  async deleteData(name, entry) {
197
360
  const providerName = entry.meta.providerName;
198
361
  if (!providerName)
199
362
  return { ok: true, value: undefined };
200
- const provider = this.providerRegistry?.getProvider(providerName);
201
- if (!provider) {
202
- return {
203
- ok: false,
204
- error: new DeleteUnsupportedError(name, `provider '${providerName}' is not registered`),
205
- };
206
- }
207
363
  try {
364
+ // getProvider is an injected registry's call, not ours — it belongs
365
+ // inside this try along with everything else that can throw.
366
+ const provider = this.providerRegistry?.getProvider(providerName);
367
+ if (!provider) {
368
+ return {
369
+ ok: false,
370
+ error: new DeleteUnsupportedError(name, `provider '${providerName}' is not registered`),
371
+ };
372
+ }
208
373
  if (provider.deleteCollection) {
209
374
  return await provider.deleteCollection(entry.storeName);
210
375
  }
@@ -236,7 +401,7 @@ export class SimpleRagRegistry {
236
401
  .map((e) => e.meta.name);
237
402
  const failures = [];
238
403
  for (const name of victims) {
239
- const res = await this.deleteCollection(name);
404
+ const res = await this.deleteCollection(name, 'session');
240
405
  if (!res.ok)
241
406
  failures.push({ name, error: res.error });
242
407
  }
@@ -1 +1 @@
1
- {"version":3,"file":"simple-rag-registry.js","sourceRoot":"","sources":["../../../src/rag/registry/simple-rag-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"simple-rag-registry.js","sourceRoot":"","sources":["../../../src/rag/registry/simple-rag-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { RagCollectionScope } from '../../interfaces/rag.js';
2
+ import { ReservedCollectionNameError } from '../corrections/errors.js';
3
+ /** The refusal for a global named into a reserved prefix, or undefined. */
4
+ export declare function reservedGlobalNameError(scope: RagCollectionScope, name: string): ReservedCollectionNameError | undefined;
5
+ /**
6
+ * The key a collection has in the `ragStores` projection: a global keeps its
7
+ * bare name, so every stage configuration naming one keeps working; a user or
8
+ * session collection is `user/<name>` or `session/<name>`. An absent scope is
9
+ * global, as `register` defaults it.
10
+ */
11
+ export declare function ragStoreKey(meta: {
12
+ readonly name: string;
13
+ readonly scope?: RagCollectionScope;
14
+ }): string;
15
+ //# sourceMappingURL=store-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-key.d.ts","sourceRoot":"","sources":["../../../src/rag/registry/store-key.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AASvE,2EAA2E;AAC3E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kBAAkB,EACzB,IAAI,EAAE,MAAM,GACX,2BAA2B,GAAG,SAAS,CAIzC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CACrC,GAAG,MAAM,CAGT"}
@@ -0,0 +1,25 @@
1
+ import { ReservedCollectionNameError } from '../corrections/errors.js';
2
+ /**
3
+ * The prefixes the `ragStores` projection gives the two owned scopes (§6.4). A
4
+ * global may not begin with one: it would take a key the projection gives
5
+ * another scope, and one entry would silently overwrite the other.
6
+ */
7
+ const RESERVED_GLOBAL_PREFIXES = ['user/', 'session/'];
8
+ /** The refusal for a global named into a reserved prefix, or undefined. */
9
+ export function reservedGlobalNameError(scope, name) {
10
+ if (scope !== 'global')
11
+ return undefined;
12
+ const prefix = RESERVED_GLOBAL_PREFIXES.find((p) => name.startsWith(p));
13
+ return prefix ? new ReservedCollectionNameError(name, prefix) : undefined;
14
+ }
15
+ /**
16
+ * The key a collection has in the `ragStores` projection: a global keeps its
17
+ * bare name, so every stage configuration naming one keeps working; a user or
18
+ * session collection is `user/<name>` or `session/<name>`. An absent scope is
19
+ * global, as `register` defaults it.
20
+ */
21
+ export function ragStoreKey(meta) {
22
+ const scope = meta.scope ?? 'global';
23
+ return scope === 'global' ? meta.name : `${scope}/${meta.name}`;
24
+ }
25
+ //# sourceMappingURL=store-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store-key.js","sourceRoot":"","sources":["../../../src/rag/registry/store-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,UAAU,CAAU,CAAC;AAEhE,2EAA2E;AAC3E,MAAM,UAAU,uBAAuB,CACrC,KAAyB,EACzB,IAAY;IAEZ,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,2BAA2B,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAG3B;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;IACrC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC"}
@@ -15,6 +15,15 @@ export interface IScoredResult {
15
15
  score: number;
16
16
  }
17
17
  export interface ISearchContext {
18
+ /**
19
+ * Term statistics over THIS query's candidates only — the records that
20
+ * passed the store's namespace / TTL / session / user filters — never over
21
+ * the whole store: store-wide statistics make one session's ranking depend
22
+ * on (and leak a signal about) another session's records. The built-in
23
+ * strategies do not read it; they compute the same statistics from the
24
+ * `candidates` they are given, so they are scoped whatever a caller passes.
25
+ * Kept for custom strategies.
26
+ */
18
27
  index: InvertedIndex;
19
28
  tokenize: (s: string) => string[];
20
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search-strategy.d.ts","sourceRoot":"","sources":["../../src/rag/search-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,KAAK,CACH,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,EAAE,cAAc,GACtB,aAAa,EAAE,CAAC;CACpB;AA8CD,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,QAAQ,CAAC,IAAI,qBAAqB;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAE3B,MAAM,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE;IAKtE,KAAK,CACH,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,EAAE,cAAc,GACtB,aAAa,EAAE;CAYnB;AAMD;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,eAAe;IACjD,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;gBAEf,MAAM,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAInC,KAAK,CACH,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,EAAE,cAAc,GACtB,aAAa,EAAE;CAoCnB;AAMD;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,KAAK,CACH,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,QAAQ,EAAE,cAAc,GACvB,aAAa,EAAE;CASnB;AAMD;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IACtD,QAAQ,CAAC,IAAI,eAAe;IAE5B,KAAK,CACH,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,EAAE,cAAc,GACtB,aAAa,EAAE;CAUnB;AAMD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAS;gBAEf,OAAO,EAAE,sBAAsB,EAAE,EAAE,MAAM,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAMtE,KAAK,CACH,KAAK,EAAE,YAAY,EACnB,UAAU,EAAE,gBAAgB,EAAE,EAC9B,OAAO,EAAE,cAAc,GACtB,aAAa,EAAE;CA0CnB"}
1
+ {"version":3,"file":"search-strategy.d.ts","sourceRoot":"","sources":["../../src/rag/search-strategy.ts"],"names":[],"mappings":"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"}