@adonis-agora/agent 0.16.0 → 0.18.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 (57) hide show
  1. package/CHANGELOG.md +139 -0
  2. package/README.md +210 -0
  3. package/dist/providers/agent_provider.d.ts +6 -4
  4. package/dist/providers/agent_provider.d.ts.map +1 -1
  5. package/dist/providers/agent_provider.js +23 -16
  6. package/dist/providers/agent_provider.js.map +1 -1
  7. package/dist/src/agent-deps-factory.d.ts +6 -0
  8. package/dist/src/agent-deps-factory.d.ts.map +1 -1
  9. package/dist/src/agent-deps-factory.js +5 -1
  10. package/dist/src/agent-deps-factory.js.map +1 -1
  11. package/dist/src/agent-deps.d.ts +6 -1
  12. package/dist/src/agent-deps.d.ts.map +1 -1
  13. package/dist/src/agent-deps.js.map +1 -1
  14. package/dist/src/agent-loop.d.ts +11 -2
  15. package/dist/src/agent-loop.d.ts.map +1 -1
  16. package/dist/src/agent-loop.js +69 -2
  17. package/dist/src/agent-loop.js.map +1 -1
  18. package/dist/src/data/tenant-scope.d.ts +16 -1
  19. package/dist/src/data/tenant-scope.d.ts.map +1 -1
  20. package/dist/src/data/tenant-scope.js +50 -7
  21. package/dist/src/data/tenant-scope.js.map +1 -1
  22. package/dist/src/define_config.d.ts +25 -9
  23. package/dist/src/define_config.d.ts.map +1 -1
  24. package/dist/src/define_config.js.map +1 -1
  25. package/dist/src/governance-gate.d.ts +24 -8
  26. package/dist/src/governance-gate.d.ts.map +1 -1
  27. package/dist/src/governance-gate.js +14 -3
  28. package/dist/src/governance-gate.js.map +1 -1
  29. package/dist/src/index.d.ts +2 -1
  30. package/dist/src/index.d.ts.map +1 -1
  31. package/dist/src/index.js +5 -1
  32. package/dist/src/index.js.map +1 -1
  33. package/dist/src/rag/chunk.d.ts +35 -0
  34. package/dist/src/rag/chunk.d.ts.map +1 -1
  35. package/dist/src/rag/chunk.js +60 -0
  36. package/dist/src/rag/chunk.js.map +1 -1
  37. package/dist/src/rag/index.d.ts +1 -1
  38. package/dist/src/rag/index.d.ts.map +1 -1
  39. package/dist/src/rag/index.js +1 -1
  40. package/dist/src/rag/index.js.map +1 -1
  41. package/dist/src/rag/memory-vector-store.d.ts +20 -1
  42. package/dist/src/rag/memory-vector-store.d.ts.map +1 -1
  43. package/dist/src/rag/memory-vector-store.js +56 -1
  44. package/dist/src/rag/memory-vector-store.js.map +1 -1
  45. package/dist/src/rag/pg-vector-store.d.ts +32 -1
  46. package/dist/src/rag/pg-vector-store.d.ts.map +1 -1
  47. package/dist/src/rag/pg-vector-store.js +69 -0
  48. package/dist/src/rag/pg-vector-store.js.map +1 -1
  49. package/dist/src/rag/qdrant-store.d.ts +89 -2
  50. package/dist/src/rag/qdrant-store.d.ts.map +1 -1
  51. package/dist/src/rag/qdrant-store.js +155 -2
  52. package/dist/src/rag/qdrant-store.js.map +1 -1
  53. package/dist/src/rag/vector-store.d.ts +144 -0
  54. package/dist/src/rag/vector-store.d.ts.map +1 -1
  55. package/dist/src/rag/vector-store.js +73 -0
  56. package/dist/src/rag/vector-store.js.map +1 -1
  57. package/package.json +14 -9
@@ -1,3 +1,76 @@
1
+ /**
2
+ * A destructive call was refused because its scope could not be trusted. Thrown by
3
+ * {@link VectorStore.removeWhere} — never for a filter that merely matched nothing (that is a legitimate
4
+ * result of `0`), only for one that would have deleted *more* than the caller plausibly meant.
5
+ */
6
+ export class UnsafeRemovalError extends Error {
7
+ reason;
8
+ constructor(
9
+ /** Why the removal was refused. */
10
+ reason, message) {
11
+ super(message);
12
+ this.reason = reason;
13
+ this.name = 'UnsafeRemovalError';
14
+ }
15
+ }
16
+ /**
17
+ * Guard for {@link VectorStore.removeWhere}: refuse a filter that scopes nothing. Shared so all three
18
+ * stores refuse the same input with the same error, rather than each deciding for itself how much of the
19
+ * corpus an empty object means.
20
+ */
21
+ export function assertRemovalFilter(filter) {
22
+ if (Object.keys(filter).length === 0) {
23
+ throw new UnsafeRemovalError('empty-filter', 'removeWhere refused an empty filter: it would delete every chunk in the store, which is far ' +
24
+ 'more likely to be a filter built wrong than a deliberate request. For a deliberate wipe, ' +
25
+ 'loop `remove` over `listDocumentIds()`, or drop the table/collection.');
26
+ }
27
+ }
28
+ /**
29
+ * Does this filter deny everything? True when any key carries an **empty array** — no value is a member
30
+ * of the empty set, so nothing can match (see {@link import('./filter.js').matchesFilter}).
31
+ *
32
+ * Every filter builder in this package already encodes that (`matchesFilter` returns false,
33
+ * `buildMetadataWhere` emits a `false` clause, `buildQdrantFilter` emits `any: []`), and the live specs
34
+ * confirm the backends agree. {@link VectorStore.removeWhere} checks it anyway and short-circuits before
35
+ * issuing anything: for the one operation where misreading a deny as "no filter" destroys the corpus, the
36
+ * deny should not depend on a backend's interpretation of an empty set.
37
+ */
38
+ export function filterDeniesAll(filter) {
39
+ return Object.values(filter).some((value) => Array.isArray(value) && value.length === 0);
40
+ }
41
+ /**
42
+ * The keys of a `patch` that will actually be written — every key whose value is not `undefined`. Shared
43
+ * by all three stores so "an empty patch writes nothing and returns 0" means the same thing on each, and
44
+ * so none of them issues a round trip for a no-op.
45
+ */
46
+ export function effectivePatchKeys(patch) {
47
+ return Object.keys(patch).filter((key) => patch[key] !== undefined);
48
+ }
49
+ /**
50
+ * Apply a {@link MetadataPatch} to one chunk's metadata, returning the new metadata object. The single
51
+ * definition of the merge, shared by every store that can do the merge in JS — so the semantics cannot
52
+ * drift between adapters. Pure: the input object is never mutated.
53
+ *
54
+ * Always returns an object (never `undefined`), so a patched chunk has metadata even if it had none
55
+ * before, and an all-deleting patch leaves `{}` rather than a hole. `{}` and absent metadata are
56
+ * indistinguishable to {@link import('./filter.js').matchesFilter} and to pgvector's `@>`, so this costs
57
+ * a caller nothing.
58
+ */
59
+ export function applyMetadataPatch(metadata, patch) {
60
+ const next = { ...metadata };
61
+ for (const key of Object.keys(patch)) {
62
+ const value = patch[key];
63
+ if (value === undefined) {
64
+ continue; // JSON has no `undefined`; treat it as "key not present".
65
+ }
66
+ if (value === null) {
67
+ delete next[key]; // JSON Merge Patch: null REMOVES the key.
68
+ continue;
69
+ }
70
+ next[key] = value; // Replaced wholesale — shallow, so no recursive merge.
71
+ }
72
+ return next;
73
+ }
1
74
  /** Collapse a chunk id (`${documentId}#<n>`) back to its source document id. */
2
75
  export function documentIdOf(chunkId) {
3
76
  return chunkId.replace(/#\d+$/, '');
@@ -1 +1 @@
1
- {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../../src/rag/vector-store.ts"],"names":[],"mappings":"AA4DA,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../../src/rag/vector-store.ts"],"names":[],"mappings":"AAoIA;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGhC;IAFX;IACE,mCAAmC;IAC1B,MAAsB,EAC/B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,WAAM,GAAN,MAAM,CAAgB;QAI/B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA+B;IACjE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,kBAAkB,CAC1B,cAAc,EACd,8FAA8F;YAC5F,2FAA2F;YAC3F,uEAAuE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,MAA+B;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AAC3F,CAAC;AAuBD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAoB;IACrD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAA6C,EAC7C,KAAoB;IAEpB,MAAM,IAAI,GAA4B,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS,CAAC,0DAA0D;QACtE,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0CAA0C;YAC5D,SAAS;QACX,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,uDAAuD;IAC5E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAQD,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/agent",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Governed, durable-backed AI agent (chat + tool-calling + governance) for AdonisJS — part of the Agora ecosystem.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -99,10 +99,10 @@
99
99
  "@standard-schema/spec": "^1.0.0"
100
100
  },
101
101
  "peerDependencies": {
102
- "@adonis-agora/authz": "^0.4.0",
103
- "@adonis-agora/diagnostics": "^0.1.0",
104
- "@adonis-agora/durable": "^0.8.0",
105
- "@adonis-agora/telescope": "^0.4.0",
102
+ "@adonis-agora/authz": ">=0.4.2 <1.0.0",
103
+ "@adonis-agora/diagnostics": ">=0.1.0 <1.0.0",
104
+ "@adonis-agora/durable": ">=0.8.0 <1.0.0",
105
+ "@adonis-agora/telescope": ">=0.4.0 <1.0.0",
106
106
  "@adonisjs/assembler": "^8.4.0",
107
107
  "@adonisjs/core": "^7.3.0",
108
108
  "@adonisjs/lucid": "^22.4.0",
@@ -155,7 +155,10 @@
155
155
  }
156
156
  },
157
157
  "devDependencies": {
158
- "@adonis-agora/durable": "^0.8.0",
158
+ "@adonis-agora/authz": "^0.10.1",
159
+ "@adonis-agora/diagnostics": "^0.2.5",
160
+ "@adonis-agora/durable": "^0.20.0",
161
+ "@adonis-agora/telescope": "^0.6.0",
159
162
  "@adonisjs/assembler": "^8.4.0",
160
163
  "@adonisjs/core": "^7.3.0",
161
164
  "@adonisjs/lucid": "^22.4.0",
@@ -172,7 +175,7 @@
172
175
  "zod": "^3.25.0"
173
176
  },
174
177
  "engines": {
175
- "node": ">=22.0.0"
178
+ "node": ">=22.0.0 <23"
176
179
  },
177
180
  "keywords": [
178
181
  "adonisjs",
@@ -187,10 +190,12 @@
187
190
  "agora"
188
191
  ],
189
192
  "scripts": {
190
- "build": "tsc -p tsconfig.json && pnpm run copy:stubs",
193
+ "build": "pnpm run clean && tsc -p tsconfig.build.json && pnpm run copy:stubs && pnpm run check:dist",
194
+ "check:dist": "node ../../scripts/assert-build-output.mjs dist src/index.js",
195
+ "clean": "rm -rf dist",
191
196
  "copy:stubs": "mkdir -p dist/stubs/config dist/stubs/database/migrations && cp stubs/config/agent.stub dist/stubs/config/agent.stub && cp -r stubs/database/migrations/. dist/stubs/database/migrations/",
192
197
  "test": "vitest run --passWithNoTests",
193
198
  "test:watch": "vitest",
194
- "typecheck": "tsc -p tsconfig.json --noEmit"
199
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.tests.json"
195
200
  }
196
201
  }