@mcp-abap-adt/llm-agent 2.3.0 → 2.4.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 (164) hide show
  1. package/dist/index.d.ts +23 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +22 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/smart-agent/agent.d.ts +24 -1
  6. package/dist/smart-agent/agent.d.ts.map +1 -1
  7. package/dist/smart-agent/agent.js +138 -23
  8. package/dist/smart-agent/agent.js.map +1 -1
  9. package/dist/smart-agent/builder.d.ts +38 -4
  10. package/dist/smart-agent/builder.d.ts.map +1 -1
  11. package/dist/smart-agent/builder.js +113 -14
  12. package/dist/smart-agent/builder.js.map +1 -1
  13. package/dist/smart-agent/cache/index.d.ts +4 -0
  14. package/dist/smart-agent/cache/index.d.ts.map +1 -0
  15. package/dist/smart-agent/cache/index.js +3 -0
  16. package/dist/smart-agent/cache/index.js.map +1 -0
  17. package/dist/smart-agent/cache/noop-tool-cache.d.ts +7 -0
  18. package/dist/smart-agent/cache/noop-tool-cache.d.ts.map +1 -0
  19. package/dist/smart-agent/cache/noop-tool-cache.js +8 -0
  20. package/dist/smart-agent/cache/noop-tool-cache.js.map +1 -0
  21. package/dist/smart-agent/cache/tool-cache.d.ts +14 -0
  22. package/dist/smart-agent/cache/tool-cache.d.ts.map +1 -0
  23. package/dist/smart-agent/cache/tool-cache.js +32 -0
  24. package/dist/smart-agent/cache/tool-cache.js.map +1 -0
  25. package/dist/smart-agent/cache/types.d.ts +7 -0
  26. package/dist/smart-agent/cache/types.d.ts.map +1 -0
  27. package/dist/smart-agent/cache/types.js +2 -0
  28. package/dist/smart-agent/cache/types.js.map +1 -0
  29. package/dist/smart-agent/config/config-watcher.d.ts +53 -0
  30. package/dist/smart-agent/config/config-watcher.d.ts.map +1 -0
  31. package/dist/smart-agent/config/config-watcher.js +105 -0
  32. package/dist/smart-agent/config/config-watcher.js.map +1 -0
  33. package/dist/smart-agent/config/index.d.ts +2 -0
  34. package/dist/smart-agent/config/index.d.ts.map +1 -0
  35. package/dist/smart-agent/config/index.js +2 -0
  36. package/dist/smart-agent/config/index.js.map +1 -0
  37. package/dist/smart-agent/config.d.ts +3 -1
  38. package/dist/smart-agent/config.d.ts.map +1 -1
  39. package/dist/smart-agent/config.js +9 -1
  40. package/dist/smart-agent/config.js.map +1 -1
  41. package/dist/smart-agent/health/health-checker.d.ts +21 -0
  42. package/dist/smart-agent/health/health-checker.d.ts.map +1 -0
  43. package/dist/smart-agent/health/health-checker.js +52 -0
  44. package/dist/smart-agent/health/health-checker.js.map +1 -0
  45. package/dist/smart-agent/health/index.d.ts +3 -0
  46. package/dist/smart-agent/health/index.d.ts.map +1 -0
  47. package/dist/smart-agent/health/index.js +2 -0
  48. package/dist/smart-agent/health/index.js.map +1 -0
  49. package/dist/smart-agent/health/types.d.ts +25 -0
  50. package/dist/smart-agent/health/types.d.ts.map +1 -0
  51. package/dist/smart-agent/health/types.js +2 -0
  52. package/dist/smart-agent/health/types.js.map +1 -0
  53. package/dist/smart-agent/interfaces/index.d.ts +6 -0
  54. package/dist/smart-agent/interfaces/index.d.ts.map +1 -1
  55. package/dist/smart-agent/interfaces/index.js.map +1 -1
  56. package/dist/smart-agent/metrics/in-memory-metrics.d.ts +58 -0
  57. package/dist/smart-agent/metrics/in-memory-metrics.d.ts.map +1 -0
  58. package/dist/smart-agent/metrics/in-memory-metrics.js +78 -0
  59. package/dist/smart-agent/metrics/in-memory-metrics.js.map +1 -0
  60. package/dist/smart-agent/metrics/index.d.ts +4 -0
  61. package/dist/smart-agent/metrics/index.d.ts.map +1 -0
  62. package/dist/smart-agent/metrics/index.js +3 -0
  63. package/dist/smart-agent/metrics/index.js.map +1 -0
  64. package/dist/smart-agent/metrics/noop-metrics.d.ts +17 -0
  65. package/dist/smart-agent/metrics/noop-metrics.d.ts.map +1 -0
  66. package/dist/smart-agent/metrics/noop-metrics.js +22 -0
  67. package/dist/smart-agent/metrics/noop-metrics.js.map +1 -0
  68. package/dist/smart-agent/metrics/types.d.ts +36 -0
  69. package/dist/smart-agent/metrics/types.d.ts.map +1 -0
  70. package/dist/smart-agent/metrics/types.js +9 -0
  71. package/dist/smart-agent/metrics/types.js.map +1 -0
  72. package/dist/smart-agent/pipeline.d.ts +6 -4
  73. package/dist/smart-agent/pipeline.d.ts.map +1 -1
  74. package/dist/smart-agent/pipeline.js +26 -0
  75. package/dist/smart-agent/pipeline.js.map +1 -1
  76. package/dist/smart-agent/rag/inverted-index.d.ts +26 -0
  77. package/dist/smart-agent/rag/inverted-index.d.ts.map +1 -0
  78. package/dist/smart-agent/rag/inverted-index.js +61 -0
  79. package/dist/smart-agent/rag/inverted-index.js.map +1 -0
  80. package/dist/smart-agent/rag/qdrant-rag.d.ts +26 -0
  81. package/dist/smart-agent/rag/qdrant-rag.d.ts.map +1 -0
  82. package/dist/smart-agent/rag/qdrant-rag.js +175 -0
  83. package/dist/smart-agent/rag/qdrant-rag.js.map +1 -0
  84. package/dist/smart-agent/rag/query-expander.d.ts +14 -0
  85. package/dist/smart-agent/rag/query-expander.d.ts.map +1 -0
  86. package/dist/smart-agent/rag/query-expander.js +40 -0
  87. package/dist/smart-agent/rag/query-expander.js.map +1 -0
  88. package/dist/smart-agent/rag/vector-rag.d.ts +10 -3
  89. package/dist/smart-agent/rag/vector-rag.d.ts.map +1 -1
  90. package/dist/smart-agent/rag/vector-rag.js +29 -16
  91. package/dist/smart-agent/rag/vector-rag.js.map +1 -1
  92. package/dist/smart-agent/reranker/index.d.ts +4 -0
  93. package/dist/smart-agent/reranker/index.d.ts.map +1 -0
  94. package/dist/smart-agent/reranker/index.js +3 -0
  95. package/dist/smart-agent/reranker/index.js.map +1 -0
  96. package/dist/smart-agent/reranker/llm-reranker.d.ts +10 -0
  97. package/dist/smart-agent/reranker/llm-reranker.d.ts.map +1 -0
  98. package/dist/smart-agent/reranker/llm-reranker.js +55 -0
  99. package/dist/smart-agent/reranker/llm-reranker.js.map +1 -0
  100. package/dist/smart-agent/reranker/noop-reranker.d.ts +6 -0
  101. package/dist/smart-agent/reranker/noop-reranker.d.ts.map +1 -0
  102. package/dist/smart-agent/reranker/noop-reranker.js +6 -0
  103. package/dist/smart-agent/reranker/noop-reranker.js.map +1 -0
  104. package/dist/smart-agent/reranker/types.d.ts +5 -0
  105. package/dist/smart-agent/reranker/types.d.ts.map +1 -0
  106. package/dist/smart-agent/reranker/types.js +2 -0
  107. package/dist/smart-agent/reranker/types.js.map +1 -0
  108. package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts +16 -0
  109. package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts.map +1 -0
  110. package/dist/smart-agent/resilience/circuit-breaker-embedder.js +30 -0
  111. package/dist/smart-agent/resilience/circuit-breaker-embedder.js.map +1 -0
  112. package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts +18 -0
  113. package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts.map +1 -0
  114. package/dist/smart-agent/resilience/circuit-breaker-llm.js +65 -0
  115. package/dist/smart-agent/resilience/circuit-breaker-llm.js.map +1 -0
  116. package/dist/smart-agent/resilience/circuit-breaker.d.ts +36 -0
  117. package/dist/smart-agent/resilience/circuit-breaker.d.ts.map +1 -0
  118. package/dist/smart-agent/resilience/circuit-breaker.js +60 -0
  119. package/dist/smart-agent/resilience/circuit-breaker.js.map +1 -0
  120. package/dist/smart-agent/resilience/fallback-rag.d.ts +21 -0
  121. package/dist/smart-agent/resilience/fallback-rag.d.ts.map +1 -0
  122. package/dist/smart-agent/resilience/fallback-rag.js +35 -0
  123. package/dist/smart-agent/resilience/fallback-rag.js.map +1 -0
  124. package/dist/smart-agent/resilience/index.d.ts +5 -0
  125. package/dist/smart-agent/resilience/index.d.ts.map +1 -0
  126. package/dist/smart-agent/resilience/index.js +5 -0
  127. package/dist/smart-agent/resilience/index.js.map +1 -0
  128. package/dist/smart-agent/session/index.d.ts +4 -0
  129. package/dist/smart-agent/session/index.d.ts.map +1 -0
  130. package/dist/smart-agent/session/index.js +3 -0
  131. package/dist/smart-agent/session/index.js.map +1 -0
  132. package/dist/smart-agent/session/noop-session-manager.d.ts +8 -0
  133. package/dist/smart-agent/session/noop-session-manager.d.ts.map +1 -0
  134. package/dist/smart-agent/session/noop-session-manager.js +11 -0
  135. package/dist/smart-agent/session/noop-session-manager.js.map +1 -0
  136. package/dist/smart-agent/session/session-manager.d.ts +13 -0
  137. package/dist/smart-agent/session/session-manager.d.ts.map +1 -0
  138. package/dist/smart-agent/session/session-manager.js +20 -0
  139. package/dist/smart-agent/session/session-manager.js.map +1 -0
  140. package/dist/smart-agent/session/types.d.ts +7 -0
  141. package/dist/smart-agent/session/types.d.ts.map +1 -0
  142. package/dist/smart-agent/session/types.js +2 -0
  143. package/dist/smart-agent/session/types.js.map +1 -0
  144. package/dist/smart-agent/smart-server.d.ts +15 -1
  145. package/dist/smart-agent/smart-server.d.ts.map +1 -1
  146. package/dist/smart-agent/smart-server.js +73 -4
  147. package/dist/smart-agent/smart-server.js.map +1 -1
  148. package/dist/smart-agent/testing/index.d.ts +32 -0
  149. package/dist/smart-agent/testing/index.d.ts.map +1 -1
  150. package/dist/smart-agent/testing/index.js +70 -0
  151. package/dist/smart-agent/testing/index.js.map +1 -1
  152. package/dist/smart-agent/validator/index.d.ts +3 -0
  153. package/dist/smart-agent/validator/index.d.ts.map +1 -0
  154. package/dist/smart-agent/validator/index.js +2 -0
  155. package/dist/smart-agent/validator/index.js.map +1 -0
  156. package/dist/smart-agent/validator/noop-validator.d.ts +6 -0
  157. package/dist/smart-agent/validator/noop-validator.d.ts.map +1 -0
  158. package/dist/smart-agent/validator/noop-validator.js +6 -0
  159. package/dist/smart-agent/validator/noop-validator.js.map +1 -0
  160. package/dist/smart-agent/validator/types.d.ts +18 -0
  161. package/dist/smart-agent/validator/types.d.ts.map +1 -0
  162. package/dist/smart-agent/validator/types.js +8 -0
  163. package/dist/smart-agent/validator/types.js.map +1 -0
  164. package/package.json +14 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-reranker.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/reranker/llm-reranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,MAAM,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAS5C,qBAAa,WAAY,YAAW,SAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,IAAI;IAEhC,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,EAAE,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;IAyCzC,OAAO,CAAC,YAAY;CAWrB"}
@@ -0,0 +1,55 @@
1
+ import { RagError, } from '../interfaces/types.js';
2
+ const RERANK_SYSTEM_PROMPT = `You are a relevance scoring engine. Given a query and a list of text passages, rate the relevance of each passage to the query on a scale of 0 to 10.
3
+
4
+ Respond with ONLY a JSON array of numbers representing the scores, one per passage, in the same order.
5
+ Example: [8, 3, 10, 1]
6
+
7
+ Do not include any other text.`;
8
+ export class LlmReranker {
9
+ llm;
10
+ constructor(llm) {
11
+ this.llm = llm;
12
+ }
13
+ async rerank(query, results, options) {
14
+ if (results.length === 0) {
15
+ return { ok: true, value: results };
16
+ }
17
+ const passages = results.map((r, i) => `[${i}] ${r.text}`).join('\n\n');
18
+ const userPrompt = `Query: ${query}\n\nPassages:\n${passages}`;
19
+ try {
20
+ const res = await this.llm.chat([
21
+ { role: 'system', content: RERANK_SYSTEM_PROMPT },
22
+ { role: 'user', content: userPrompt },
23
+ ], [], options);
24
+ if (!res.ok) {
25
+ return {
26
+ ok: false,
27
+ error: new RagError(res.error.message, 'RERANK_ERROR'),
28
+ };
29
+ }
30
+ const scores = this._parseScores(res.value.content, results.length);
31
+ const reranked = results
32
+ .map((r, i) => ({ ...r, score: scores[i] / 10 }))
33
+ .sort((a, b) => b.score - a.score);
34
+ return { ok: true, value: reranked };
35
+ }
36
+ catch (err) {
37
+ return {
38
+ ok: false,
39
+ error: new RagError(`Reranking failed: ${String(err)}`, 'RERANK_ERROR'),
40
+ };
41
+ }
42
+ }
43
+ _parseScores(content, expectedCount) {
44
+ const match = content.match(/\[[\d\s,.-]+\]/);
45
+ if (match) {
46
+ const parsed = JSON.parse(match[0]);
47
+ if (parsed.length === expectedCount) {
48
+ return parsed.map((s) => Math.max(0, Math.min(10, Number(s) || 0)));
49
+ }
50
+ }
51
+ // Fallback: preserve original ordering
52
+ return Array.from({ length: expectedCount }, (_, i) => expectedCount - i);
53
+ }
54
+ }
55
+ //# sourceMappingURL=llm-reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-reranker.js","sourceRoot":"","sources":["../../../src/smart-agent/reranker/llm-reranker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { CallOptions, RagError, RagResult, Result } from '../interfaces/types.js';
2
+ import type { IReranker } from './types.js';
3
+ export declare class NoopReranker implements IReranker {
4
+ rerank(_query: string, results: RagResult[], _options?: CallOptions): Promise<Result<RagResult[], RagError>>;
5
+ }
6
+ //# sourceMappingURL=noop-reranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-reranker.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/reranker/noop-reranker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,MAAM,EACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,qBAAa,YAAa,YAAW,SAAS;IACtC,MAAM,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,SAAS,EAAE,EACpB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;CAG1C"}
@@ -0,0 +1,6 @@
1
+ export class NoopReranker {
2
+ async rerank(_query, results, _options) {
3
+ return { ok: true, value: results };
4
+ }
5
+ }
6
+ //# sourceMappingURL=noop-reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-reranker.js","sourceRoot":"","sources":["../../../src/smart-agent/reranker/noop-reranker.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,MAAM,CACV,MAAc,EACd,OAAoB,EACpB,QAAsB;QAEtB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import type { CallOptions, RagError, RagResult, Result } from '../interfaces/types.js';
2
+ export interface IReranker {
3
+ rerank(query: string, results: RagResult[], options?: CallOptions): Promise<Result<RagResult[], RagError>>;
4
+ }
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/reranker/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,SAAS,EACT,MAAM,EACP,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,SAAS;IACxB,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,SAAS,EAAE,EACpB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/smart-agent/reranker/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CircuitBreakerEmbedder — IEmbedder decorator that wraps calls with a CircuitBreaker.
3
+ *
4
+ * When the circuit is open, calls throw an error rather than hitting the
5
+ * underlying embedding service.
6
+ */
7
+ import type { IEmbedder } from '../interfaces/rag.js';
8
+ import type { CallOptions } from '../interfaces/types.js';
9
+ import type { CircuitBreaker } from './circuit-breaker.js';
10
+ export declare class CircuitBreakerEmbedder implements IEmbedder {
11
+ private readonly inner;
12
+ readonly breaker: CircuitBreaker;
13
+ constructor(inner: IEmbedder, breaker: CircuitBreaker);
14
+ embed(text: string, options?: CallOptions): Promise<number[]>;
15
+ }
16
+ //# sourceMappingURL=circuit-breaker-embedder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-embedder.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/resilience/circuit-breaker-embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,sBAAuB,YAAW,SAAS;IAEpD,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,OAAO,EAAE,cAAc;gBADf,KAAK,EAAE,SAAS,EACxB,OAAO,EAAE,cAAc;IAG5B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;CAapE"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * CircuitBreakerEmbedder — IEmbedder decorator that wraps calls with a CircuitBreaker.
3
+ *
4
+ * When the circuit is open, calls throw an error rather than hitting the
5
+ * underlying embedding service.
6
+ */
7
+ import { RagError } from '../interfaces/types.js';
8
+ export class CircuitBreakerEmbedder {
9
+ inner;
10
+ breaker;
11
+ constructor(inner, breaker) {
12
+ this.inner = inner;
13
+ this.breaker = breaker;
14
+ }
15
+ async embed(text, options) {
16
+ if (!this.breaker.isCallPermitted) {
17
+ throw new RagError('Embedder circuit breaker is open', 'CIRCUIT_OPEN');
18
+ }
19
+ try {
20
+ const result = await this.inner.embed(text, options);
21
+ this.breaker.recordSuccess();
22
+ return result;
23
+ }
24
+ catch (err) {
25
+ this.breaker.recordFailure();
26
+ throw err;
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=circuit-breaker-embedder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-embedder.js","sourceRoot":"","sources":["../../../src/smart-agent/resilience/circuit-breaker-embedder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,OAAO,sBAAsB;IAEd;IACR;IAFX,YACmB,KAAgB,EACxB,OAAuB;QADf,UAAK,GAAL,KAAK,CAAW;QACxB,YAAO,GAAP,OAAO,CAAgB;IAC/B,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,OAAqB;QAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAClC,MAAM,IAAI,QAAQ,CAAC,kCAAkC,EAAE,cAAc,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * CircuitBreakerLlm — ILlm decorator that wraps calls with a CircuitBreaker.
3
+ *
4
+ * When the circuit is open, calls return `Result { ok: false, error: LlmError('CIRCUIT_OPEN') }`
5
+ * without hitting the underlying LLM.
6
+ */
7
+ import type { Message } from '../../types.js';
8
+ import type { ILlm } from '../interfaces/llm.js';
9
+ import { type CallOptions, LlmError, type LlmResponse, type LlmStreamChunk, type LlmTool, type Result } from '../interfaces/types.js';
10
+ import type { CircuitBreaker } from './circuit-breaker.js';
11
+ export declare class CircuitBreakerLlm implements ILlm {
12
+ private readonly inner;
13
+ readonly breaker: CircuitBreaker;
14
+ constructor(inner: ILlm, breaker: CircuitBreaker);
15
+ chat(messages: Message[], tools?: LlmTool[], options?: CallOptions): Promise<Result<LlmResponse, LlmError>>;
16
+ streamChat(messages: Message[], tools?: LlmTool[], options?: CallOptions): AsyncIterable<Result<LlmStreamChunk, LlmError>>;
17
+ }
18
+ //# sourceMappingURL=circuit-breaker-llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-llm.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/resilience/circuit-breaker-llm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EACL,KAAK,WAAW,EAChB,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,OAAO,EACZ,KAAK,MAAM,EACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,iBAAkB,YAAW,IAAI;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,QAAQ,CAAC,OAAO,EAAE,cAAc;gBADf,KAAK,EAAE,IAAI,EACnB,OAAO,EAAE,cAAc;IAG5B,IAAI,CACR,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAgBlC,UAAU,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,CAAC,EAAE,OAAO,EAAE,EACjB,OAAO,CAAC,EAAE,WAAW,GACpB,aAAa,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;CAoCnD"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * CircuitBreakerLlm — ILlm decorator that wraps calls with a CircuitBreaker.
3
+ *
4
+ * When the circuit is open, calls return `Result { ok: false, error: LlmError('CIRCUIT_OPEN') }`
5
+ * without hitting the underlying LLM.
6
+ */
7
+ import { LlmError, } from '../interfaces/types.js';
8
+ export class CircuitBreakerLlm {
9
+ inner;
10
+ breaker;
11
+ constructor(inner, breaker) {
12
+ this.inner = inner;
13
+ this.breaker = breaker;
14
+ }
15
+ async chat(messages, tools, options) {
16
+ if (!this.breaker.isCallPermitted) {
17
+ return {
18
+ ok: false,
19
+ error: new LlmError('Circuit breaker is open', 'CIRCUIT_OPEN'),
20
+ };
21
+ }
22
+ const result = await this.inner.chat(messages, tools, options);
23
+ if (result.ok) {
24
+ this.breaker.recordSuccess();
25
+ }
26
+ else {
27
+ this.breaker.recordFailure();
28
+ }
29
+ return result;
30
+ }
31
+ async *streamChat(messages, tools, options) {
32
+ if (!this.breaker.isCallPermitted) {
33
+ yield {
34
+ ok: false,
35
+ error: new LlmError('Circuit breaker is open', 'CIRCUIT_OPEN'),
36
+ };
37
+ return;
38
+ }
39
+ let hadError = false;
40
+ try {
41
+ for await (const chunk of this.inner.streamChat(messages, tools, options)) {
42
+ if (!chunk.ok) {
43
+ hadError = true;
44
+ this.breaker.recordFailure();
45
+ yield chunk;
46
+ return;
47
+ }
48
+ yield chunk;
49
+ }
50
+ }
51
+ catch (err) {
52
+ hadError = true;
53
+ this.breaker.recordFailure();
54
+ yield {
55
+ ok: false,
56
+ error: new LlmError(String(err), 'LLM_ERROR'),
57
+ };
58
+ return;
59
+ }
60
+ if (!hadError) {
61
+ this.breaker.recordSuccess();
62
+ }
63
+ }
64
+ }
65
+ //# sourceMappingURL=circuit-breaker-llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker-llm.js","sourceRoot":"","sources":["../../../src/smart-agent/resilience/circuit-breaker-llm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAEL,QAAQ,GAKT,MAAM,wBAAwB,CAAC;AAGhC,MAAM,OAAO,iBAAiB;IAET;IACR;IAFX,YACmB,KAAW,EACnB,OAAuB;QADf,UAAK,GAAL,KAAK,CAAM;QACnB,YAAO,GAAP,OAAO,CAAgB;IAC/B,CAAC;IAEJ,KAAK,CAAC,IAAI,CACR,QAAmB,EACnB,KAAiB,EACjB,OAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAClC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,QAAQ,CAAC,yBAAyB,EAAE,cAAc,CAAC;aAC/D,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACf,QAAmB,EACnB,KAAiB,EACjB,OAAqB;QAErB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAClC,MAAM;gBACJ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,QAAQ,CAAC,yBAAyB,EAAE,cAAc,CAAC;aAC/D,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAC7C,QAAQ,EACR,KAAK,EACL,OAAO,CACR,EAAE,CAAC;gBACF,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;oBAC7B,MAAM,KAAK,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;YAC7B,MAAM;gBACJ,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC;aAC9C,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC/B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Generic Circuit Breaker — three-state pattern (closed → open → half-open).
3
+ *
4
+ * - **Closed**: requests pass through; failures are counted.
5
+ * - **Open**: requests are rejected immediately; after `recoveryWindowMs` the
6
+ * breaker transitions to half-open.
7
+ * - **Half-Open**: a single probe request is allowed. If it succeeds the
8
+ * breaker closes; if it fails it re-opens.
9
+ */
10
+ export type CircuitState = 'closed' | 'open' | 'half-open';
11
+ export interface CircuitBreakerConfig {
12
+ /** Number of consecutive failures before opening. Default: 5 */
13
+ failureThreshold?: number;
14
+ /** Time (ms) to wait before probing again. Default: 30 000 */
15
+ recoveryWindowMs?: number;
16
+ /** Optional callback on state changes. */
17
+ onStateChange?: (from: CircuitState, to: CircuitState) => void;
18
+ }
19
+ export declare class CircuitBreaker {
20
+ private _state;
21
+ private failureCount;
22
+ private openedAt;
23
+ readonly failureThreshold: number;
24
+ readonly recoveryWindowMs: number;
25
+ private readonly onStateChange?;
26
+ constructor(config?: CircuitBreakerConfig);
27
+ get state(): CircuitState;
28
+ /** Record a successful call — resets the breaker to closed. */
29
+ recordSuccess(): void;
30
+ /** Record a failed call — may trip the breaker open. */
31
+ recordFailure(): void;
32
+ /** Whether the circuit allows requests through. */
33
+ get isCallPermitted(): boolean;
34
+ private _transition;
35
+ }
36
+ //# sourceMappingURL=circuit-breaker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/resilience/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0CAA0C;IAC1C,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,CAAC;CAChE;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAK;IAErB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAGrB;gBAEE,MAAM,GAAE,oBAAyB;IAM7C,IAAI,KAAK,IAAI,YAAY,CAQxB;IAED,+DAA+D;IAC/D,aAAa,IAAI,IAAI;IAOrB,wDAAwD;IACxD,aAAa,IAAI,IAAI;IAWrB,mDAAmD;IACnD,IAAI,eAAe,IAAI,OAAO,CAG7B;IAED,OAAO,CAAC,WAAW;CAOpB"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Generic Circuit Breaker — three-state pattern (closed → open → half-open).
3
+ *
4
+ * - **Closed**: requests pass through; failures are counted.
5
+ * - **Open**: requests are rejected immediately; after `recoveryWindowMs` the
6
+ * breaker transitions to half-open.
7
+ * - **Half-Open**: a single probe request is allowed. If it succeeds the
8
+ * breaker closes; if it fails it re-opens.
9
+ */
10
+ export class CircuitBreaker {
11
+ _state = 'closed';
12
+ failureCount = 0;
13
+ openedAt = 0;
14
+ failureThreshold;
15
+ recoveryWindowMs;
16
+ onStateChange;
17
+ constructor(config = {}) {
18
+ this.failureThreshold = config.failureThreshold ?? 5;
19
+ this.recoveryWindowMs = config.recoveryWindowMs ?? 30_000;
20
+ this.onStateChange = config.onStateChange;
21
+ }
22
+ get state() {
23
+ if (this._state === 'open' &&
24
+ Date.now() - this.openedAt >= this.recoveryWindowMs) {
25
+ this._transition('half-open');
26
+ }
27
+ return this._state;
28
+ }
29
+ /** Record a successful call — resets the breaker to closed. */
30
+ recordSuccess() {
31
+ if (this._state !== 'closed') {
32
+ this._transition('closed');
33
+ }
34
+ this.failureCount = 0;
35
+ }
36
+ /** Record a failed call — may trip the breaker open. */
37
+ recordFailure() {
38
+ this.failureCount++;
39
+ if (this._state === 'half-open' ||
40
+ this.failureCount >= this.failureThreshold) {
41
+ this._transition('open');
42
+ this.openedAt = Date.now();
43
+ }
44
+ }
45
+ /** Whether the circuit allows requests through. */
46
+ get isCallPermitted() {
47
+ const s = this.state; // triggers half-open check
48
+ return s === 'closed' || s === 'half-open';
49
+ }
50
+ _transition(to) {
51
+ if (this._state === to)
52
+ return;
53
+ const from = this._state;
54
+ this._state = to;
55
+ if (to === 'closed')
56
+ this.failureCount = 0;
57
+ this.onStateChange?.(from, to);
58
+ }
59
+ }
60
+ //# sourceMappingURL=circuit-breaker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../../src/smart-agent/resilience/circuit-breaker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAaH,MAAM,OAAO,cAAc;IACjB,MAAM,GAAiB,QAAQ,CAAC;IAChC,YAAY,GAAG,CAAC,CAAC;IACjB,QAAQ,GAAG,CAAC,CAAC;IAEZ,gBAAgB,CAAS;IACzB,gBAAgB,CAAS;IACjB,aAAa,CAGpB;IAEV,YAAY,SAA+B,EAAE;QAC3C,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK;QACP,IACE,IAAI,CAAC,MAAM,KAAK,MAAM;YACtB,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EACnD,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,+DAA+D;IAC/D,aAAa;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,wDAAwD;IACxD,aAAa;QACX,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IACE,IAAI,CAAC,MAAM,KAAK,WAAW;YAC3B,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,EAC1C,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,IAAI,eAAe;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,2BAA2B;QACjD,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,WAAW,CAAC;IAC7C,CAAC;IAEO,WAAW,CAAC,EAAgB;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE;YAAE,OAAO;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,EAAE,KAAK,QAAQ;YAAE,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * FallbackRag — IRag decorator wrapping a primary and fallback store.
3
+ *
4
+ * - **upsert** — always writes to both stores (best-effort for fallback).
5
+ * - **query** — uses primary when the embedder breaker is closed/half-open;
6
+ * routes to fallback when the breaker is open.
7
+ * - **healthCheck** — delegates to primary.
8
+ */
9
+ import type { IRag } from '../interfaces/rag.js';
10
+ import type { CallOptions, RagError, RagMetadata, RagResult, Result } from '../interfaces/types.js';
11
+ import type { CircuitBreaker } from './circuit-breaker.js';
12
+ export declare class FallbackRag implements IRag {
13
+ private readonly primary;
14
+ private readonly fallback;
15
+ private readonly embedderBreaker;
16
+ constructor(primary: IRag, fallback: IRag, embedderBreaker: CircuitBreaker);
17
+ upsert(text: string, metadata: RagMetadata, options?: CallOptions): Promise<Result<void, RagError>>;
18
+ query(text: string, k: number, options?: CallOptions): Promise<Result<RagResult[], RagError>>;
19
+ healthCheck(options?: CallOptions): Promise<Result<void, RagError>>;
20
+ }
21
+ //# sourceMappingURL=fallback-rag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback-rag.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/resilience/fallback-rag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,WAAW,EACX,SAAS,EACT,MAAM,EACP,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,WAAY,YAAW,IAAI;IAEpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAFf,OAAO,EAAE,IAAI,EACb,QAAQ,EAAE,IAAI,EACd,eAAe,EAAE,cAAc;IAG5C,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAQ5B,KAAK,CACT,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;IAOnC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;CAG1E"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * FallbackRag — IRag decorator wrapping a primary and fallback store.
3
+ *
4
+ * - **upsert** — always writes to both stores (best-effort for fallback).
5
+ * - **query** — uses primary when the embedder breaker is closed/half-open;
6
+ * routes to fallback when the breaker is open.
7
+ * - **healthCheck** — delegates to primary.
8
+ */
9
+ export class FallbackRag {
10
+ primary;
11
+ fallback;
12
+ embedderBreaker;
13
+ constructor(primary, fallback, embedderBreaker) {
14
+ this.primary = primary;
15
+ this.fallback = fallback;
16
+ this.embedderBreaker = embedderBreaker;
17
+ }
18
+ async upsert(text, metadata, options) {
19
+ const [primaryResult] = await Promise.all([
20
+ this.primary.upsert(text, metadata, options),
21
+ this.fallback.upsert(text, metadata, options).catch(() => { }),
22
+ ]);
23
+ return primaryResult;
24
+ }
25
+ async query(text, k, options) {
26
+ if (this.embedderBreaker.state === 'open') {
27
+ return this.fallback.query(text, k, options);
28
+ }
29
+ return this.primary.query(text, k, options);
30
+ }
31
+ async healthCheck(options) {
32
+ return this.primary.healthCheck(options);
33
+ }
34
+ }
35
+ //# sourceMappingURL=fallback-rag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fallback-rag.js","sourceRoot":"","sources":["../../../src/smart-agent/resilience/fallback-rag.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,OAAO,WAAW;IAEH;IACA;IACA;IAHnB,YACmB,OAAa,EACb,QAAc,EACd,eAA+B;QAF/B,YAAO,GAAP,OAAO,CAAM;QACb,aAAQ,GAAR,QAAQ,CAAM;QACd,oBAAe,GAAf,eAAe,CAAgB;IAC/C,CAAC;IAEJ,KAAK,CAAC,MAAM,CACV,IAAY,EACZ,QAAqB,EACrB,OAAqB;QAErB,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;YAC5C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;SAC9D,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CACT,IAAY,EACZ,CAAS,EACT,OAAqB;QAErB,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAqB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { CircuitBreaker, type CircuitBreakerConfig, type CircuitState, } from './circuit-breaker.js';
2
+ export { CircuitBreakerEmbedder } from './circuit-breaker-embedder.js';
3
+ export { CircuitBreakerLlm } from './circuit-breaker-llm.js';
4
+ export { FallbackRag } from './fallback-rag.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/resilience/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { CircuitBreaker, } from './circuit-breaker.js';
2
+ export { CircuitBreakerEmbedder } from './circuit-breaker-embedder.js';
3
+ export { CircuitBreakerLlm } from './circuit-breaker-llm.js';
4
+ export { FallbackRag } from './fallback-rag.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/resilience/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { NoopSessionManager } from './noop-session-manager.js';
2
+ export { SessionManager } from './session-manager.js';
3
+ export type { ISessionManager } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { NoopSessionManager } from './noop-session-manager.js';
2
+ export { SessionManager } from './session-manager.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/session/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ISessionManager } from './types.js';
2
+ export declare class NoopSessionManager implements ISessionManager {
3
+ get totalTokens(): number;
4
+ addTokens(): void;
5
+ isOverBudget(): boolean;
6
+ reset(): void;
7
+ }
8
+ //# sourceMappingURL=noop-session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-session-manager.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/session/noop-session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,WAAW,IAAI,MAAM,CAExB;IACD,SAAS,IAAI,IAAI;IACjB,YAAY,IAAI,OAAO;IAGvB,KAAK,IAAI,IAAI;CACd"}
@@ -0,0 +1,11 @@
1
+ export class NoopSessionManager {
2
+ get totalTokens() {
3
+ return 0;
4
+ }
5
+ addTokens() { }
6
+ isOverBudget() {
7
+ return false;
8
+ }
9
+ reset() { }
10
+ }
11
+ //# sourceMappingURL=noop-session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-session-manager.js","sourceRoot":"","sources":["../../../src/smart-agent/session/noop-session-manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAkB;IAC7B,IAAI,WAAW;QACb,OAAO,CAAC,CAAC;IACX,CAAC;IACD,SAAS,KAAU,CAAC;IACpB,YAAY;QACV,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,KAAU,CAAC;CACjB"}
@@ -0,0 +1,13 @@
1
+ import type { ISessionManager } from './types.js';
2
+ export declare class SessionManager implements ISessionManager {
3
+ private _totalTokens;
4
+ private readonly tokenBudget;
5
+ constructor(opts: {
6
+ tokenBudget: number;
7
+ });
8
+ get totalTokens(): number;
9
+ addTokens(count: number): void;
10
+ isOverBudget(): boolean;
11
+ reset(): void;
12
+ }
13
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/session/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE;IAIzC,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,IAAI,OAAO;IAIvB,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,20 @@
1
+ export class SessionManager {
2
+ _totalTokens = 0;
3
+ tokenBudget;
4
+ constructor(opts) {
5
+ this.tokenBudget = opts.tokenBudget;
6
+ }
7
+ get totalTokens() {
8
+ return this._totalTokens;
9
+ }
10
+ addTokens(count) {
11
+ this._totalTokens += count;
12
+ }
13
+ isOverBudget() {
14
+ return this._totalTokens >= this.tokenBudget;
15
+ }
16
+ reset() {
17
+ this._totalTokens = 0;
18
+ }
19
+ }
20
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../src/smart-agent/session/session-manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACjB,YAAY,GAAG,CAAC,CAAC;IACR,WAAW,CAAS;IAErC,YAAY,IAA6B;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACtC,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC;IAC7B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW,CAAC;IAC/C,CAAC;IAED,KAAK;QACH,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IACxB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ export interface ISessionManager {
2
+ addTokens(count: number): void;
3
+ isOverBudget(): boolean;
4
+ reset(): void;
5
+ readonly totalTokens: number;
6
+ }
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/session/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,IAAI,OAAO,CAAC;IACxB,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/smart-agent/session/types.ts"],"names":[],"mappings":""}
@@ -11,9 +11,10 @@ export interface SmartServerLlmConfig {
11
11
  classifierTemperature?: number;
12
12
  }
13
13
  export interface SmartServerRagConfig {
14
- type?: 'ollama' | 'openai' | 'in-memory';
14
+ type?: 'ollama' | 'openai' | 'in-memory' | 'qdrant';
15
15
  url?: string;
16
16
  model?: string;
17
+ collectionName?: string;
17
18
  dedupThreshold?: number;
18
19
  vectorWeight?: number;
19
20
  keywordWeight?: number;
@@ -32,6 +33,9 @@ export interface SmartServerAgentConfig {
32
33
  ragQueryK?: number;
33
34
  showReasoning?: boolean;
34
35
  historyAutoSummarizeLimit?: number;
36
+ queryExpansionEnabled?: boolean;
37
+ toolResultCacheTtlMs?: number;
38
+ sessionTokenBudget?: number;
35
39
  }
36
40
  export interface SmartServerPromptsConfig {
37
41
  system?: string;
@@ -41,6 +45,12 @@ export interface SmartServerPromptsConfig {
41
45
  historySummary?: string;
42
46
  }
43
47
  export type SmartServerMode = 'hard' | 'pass' | 'smart';
48
+ export interface SmartServerCircuitBreakerConfig {
49
+ /** Number of consecutive failures before opening. Default: 5 */
50
+ failureThreshold?: number;
51
+ /** Time (ms) to wait before probing again. Default: 30 000 */
52
+ recoveryWindowMs?: number;
53
+ }
44
54
  export interface SmartServerConfig {
45
55
  port?: number;
46
56
  host?: string;
@@ -53,6 +63,10 @@ export interface SmartServerConfig {
53
63
  pipeline?: PipelineConfig;
54
64
  log?: (event: Record<string, unknown>) => void;
55
65
  logDir?: string;
66
+ circuitBreaker?: SmartServerCircuitBreakerConfig;
67
+ version?: string;
68
+ /** Path to YAML config file for hot-reload. */
69
+ configFile?: string;
56
70
  }
57
71
  export interface SmartServerHandle {
58
72
  port: number;