@mcp-abap-adt/llm-agent-libs 16.2.0 → 18.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 (198) hide show
  1. package/dist/adapters/llm-provider-bridge.js +2 -2
  2. package/dist/adapters/llm-provider-bridge.js.map +1 -1
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +48 -37
  5. package/dist/agent.js.map +1 -1
  6. package/dist/builder.d.ts +19 -0
  7. package/dist/builder.d.ts.map +1 -1
  8. package/dist/builder.js +29 -3
  9. package/dist/builder.js.map +1 -1
  10. package/dist/classifier/llm-classifier.d.ts.map +1 -1
  11. package/dist/classifier/llm-classifier.js +1 -0
  12. package/dist/classifier/llm-classifier.js.map +1 -1
  13. package/dist/coordinator/dag/abort-error-strategy.d.ts +7 -0
  14. package/dist/coordinator/dag/abort-error-strategy.d.ts.map +1 -0
  15. package/dist/coordinator/dag/abort-error-strategy.js +8 -0
  16. package/dist/coordinator/dag/abort-error-strategy.js.map +1 -0
  17. package/dist/coordinator/dag/compose-node-task.d.ts +8 -0
  18. package/dist/coordinator/dag/compose-node-task.d.ts.map +1 -0
  19. package/dist/coordinator/dag/compose-node-task.js +41 -0
  20. package/dist/coordinator/dag/compose-node-task.js.map +1 -0
  21. package/dist/coordinator/dag/dag-plan-interpreter.d.ts +9 -0
  22. package/dist/coordinator/dag/dag-plan-interpreter.d.ts.map +1 -0
  23. package/dist/coordinator/dag/dag-plan-interpreter.js +236 -0
  24. package/dist/coordinator/dag/dag-plan-interpreter.js.map +1 -0
  25. package/dist/coordinator/dag/index.d.ts +5 -0
  26. package/dist/coordinator/dag/index.d.ts.map +1 -0
  27. package/dist/coordinator/dag/index.js +5 -0
  28. package/dist/coordinator/dag/index.js.map +1 -0
  29. package/dist/coordinator/dag/llm-dag-planner.d.ts +24 -0
  30. package/dist/coordinator/dag/llm-dag-planner.d.ts.map +1 -0
  31. package/dist/coordinator/dag/llm-dag-planner.js +161 -0
  32. package/dist/coordinator/dag/llm-dag-planner.js.map +1 -0
  33. package/dist/coordinator/dag/llm-finalizer.d.ts +21 -0
  34. package/dist/coordinator/dag/llm-finalizer.d.ts.map +1 -0
  35. package/dist/coordinator/dag/llm-finalizer.js +77 -0
  36. package/dist/coordinator/dag/llm-finalizer.js.map +1 -0
  37. package/dist/coordinator/dag/llm-review-strategy.d.ts +17 -0
  38. package/dist/coordinator/dag/llm-review-strategy.d.ts.map +1 -0
  39. package/dist/coordinator/dag/llm-review-strategy.js +149 -0
  40. package/dist/coordinator/dag/llm-review-strategy.js.map +1 -0
  41. package/dist/coordinator/dag/noop-review-strategy.d.ts +8 -0
  42. package/dist/coordinator/dag/noop-review-strategy.d.ts.map +1 -0
  43. package/dist/coordinator/dag/noop-review-strategy.js +11 -0
  44. package/dist/coordinator/dag/noop-review-strategy.js.map +1 -0
  45. package/dist/coordinator/dag/passthrough-finalizer.d.ts +11 -0
  46. package/dist/coordinator/dag/passthrough-finalizer.d.ts.map +1 -0
  47. package/dist/coordinator/dag/passthrough-finalizer.js +13 -0
  48. package/dist/coordinator/dag/passthrough-finalizer.js.map +1 -0
  49. package/dist/coordinator/dag/render-ancestor-context.d.ts +8 -0
  50. package/dist/coordinator/dag/render-ancestor-context.d.ts.map +1 -0
  51. package/dist/coordinator/dag/render-ancestor-context.js +27 -0
  52. package/dist/coordinator/dag/render-ancestor-context.js.map +1 -0
  53. package/dist/coordinator/dag/replan-error-strategy.d.ts +15 -0
  54. package/dist/coordinator/dag/replan-error-strategy.d.ts.map +1 -0
  55. package/dist/coordinator/dag/replan-error-strategy.js +32 -0
  56. package/dist/coordinator/dag/replan-error-strategy.js.map +1 -0
  57. package/dist/coordinator/dag/reviewer-error-strategy.d.ts +15 -0
  58. package/dist/coordinator/dag/reviewer-error-strategy.d.ts.map +1 -0
  59. package/dist/coordinator/dag/reviewer-error-strategy.js +38 -0
  60. package/dist/coordinator/dag/reviewer-error-strategy.js.map +1 -0
  61. package/dist/coordinator/dag/splice-sub-plan.d.ts +12 -0
  62. package/dist/coordinator/dag/splice-sub-plan.d.ts.map +1 -0
  63. package/dist/coordinator/dag/splice-sub-plan.js +41 -0
  64. package/dist/coordinator/dag/splice-sub-plan.js.map +1 -0
  65. package/dist/coordinator/dag/subagent-state-oracle.d.ts +19 -0
  66. package/dist/coordinator/dag/subagent-state-oracle.d.ts.map +1 -0
  67. package/dist/coordinator/dag/subagent-state-oracle.js +31 -0
  68. package/dist/coordinator/dag/subagent-state-oracle.js.map +1 -0
  69. package/dist/coordinator/dag/template-finalizer.d.ts +11 -0
  70. package/dist/coordinator/dag/template-finalizer.d.ts.map +1 -0
  71. package/dist/coordinator/dag/template-finalizer.js +17 -0
  72. package/dist/coordinator/dag/template-finalizer.js.map +1 -0
  73. package/dist/coordinator/dispatch/subagent.d.ts.map +1 -1
  74. package/dist/coordinator/dispatch/subagent.js +6 -12
  75. package/dist/coordinator/dispatch/subagent.js.map +1 -1
  76. package/dist/coordinator/index.d.ts +6 -0
  77. package/dist/coordinator/index.d.ts.map +1 -1
  78. package/dist/coordinator/index.js +6 -0
  79. package/dist/coordinator/index.js.map +1 -1
  80. package/dist/coordinator/planning/one-shot.d.ts.map +1 -1
  81. package/dist/coordinator/planning/one-shot.js +14 -7
  82. package/dist/coordinator/planning/one-shot.js.map +1 -1
  83. package/dist/coordinator/stepper/cyclic-react-executor.d.ts +42 -0
  84. package/dist/coordinator/stepper/cyclic-react-executor.d.ts.map +1 -0
  85. package/dist/coordinator/stepper/cyclic-react-executor.js +272 -0
  86. package/dist/coordinator/stepper/cyclic-react-executor.js.map +1 -0
  87. package/dist/coordinator/stepper/index.d.ts +10 -0
  88. package/dist/coordinator/stepper/index.d.ts.map +1 -0
  89. package/dist/coordinator/stepper/index.js +10 -0
  90. package/dist/coordinator/stepper/index.js.map +1 -0
  91. package/dist/coordinator/stepper/llm-stepper-planner.d.ts +27 -0
  92. package/dist/coordinator/stepper/llm-stepper-planner.d.ts.map +1 -0
  93. package/dist/coordinator/stepper/llm-stepper-planner.js +86 -0
  94. package/dist/coordinator/stepper/llm-stepper-planner.js.map +1 -0
  95. package/dist/coordinator/stepper/llm-task-formalizer.d.ts +22 -0
  96. package/dist/coordinator/stepper/llm-task-formalizer.d.ts.map +1 -0
  97. package/dist/coordinator/stepper/llm-task-formalizer.js +73 -0
  98. package/dist/coordinator/stepper/llm-task-formalizer.js.map +1 -0
  99. package/dist/coordinator/stepper/logging-llm.d.ts +30 -0
  100. package/dist/coordinator/stepper/logging-llm.d.ts.map +1 -0
  101. package/dist/coordinator/stepper/logging-llm.js +73 -0
  102. package/dist/coordinator/stepper/logging-llm.js.map +1 -0
  103. package/dist/coordinator/stepper/need-resolver.d.ts +18 -0
  104. package/dist/coordinator/stepper/need-resolver.d.ts.map +1 -0
  105. package/dist/coordinator/stepper/need-resolver.js +42 -0
  106. package/dist/coordinator/stepper/need-resolver.js.map +1 -0
  107. package/dist/coordinator/stepper/root-finalizer.d.ts +17 -0
  108. package/dist/coordinator/stepper/root-finalizer.d.ts.map +1 -0
  109. package/dist/coordinator/stepper/root-finalizer.js +53 -0
  110. package/dist/coordinator/stepper/root-finalizer.js.map +1 -0
  111. package/dist/coordinator/stepper/static-planner.d.ts +23 -0
  112. package/dist/coordinator/stepper/static-planner.d.ts.map +1 -0
  113. package/dist/coordinator/stepper/static-planner.js +25 -0
  114. package/dist/coordinator/stepper/static-planner.js.map +1 -0
  115. package/dist/coordinator/stepper/stepper-interpreter.d.ts +6 -0
  116. package/dist/coordinator/stepper/stepper-interpreter.d.ts.map +1 -0
  117. package/dist/coordinator/stepper/stepper-interpreter.js +130 -0
  118. package/dist/coordinator/stepper/stepper-interpreter.js.map +1 -0
  119. package/dist/coordinator/stepper/stepper.d.ts +36 -0
  120. package/dist/coordinator/stepper/stepper.d.ts.map +1 -0
  121. package/dist/coordinator/stepper/stepper.js +49 -0
  122. package/dist/coordinator/stepper/stepper.js.map +1 -0
  123. package/dist/index.d.ts +10 -2
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +10 -1
  126. package/dist/index.js.map +1 -1
  127. package/dist/logger/default-request-logger.d.ts +18 -6
  128. package/dist/logger/default-request-logger.d.ts.map +1 -1
  129. package/dist/logger/default-request-logger.js +25 -4
  130. package/dist/logger/default-request-logger.js.map +1 -1
  131. package/dist/logger/noop-request-logger.d.ts +10 -5
  132. package/dist/logger/noop-request-logger.d.ts.map +1 -1
  133. package/dist/logger/noop-request-logger.js +5 -3
  134. package/dist/logger/noop-request-logger.js.map +1 -1
  135. package/dist/logger/session-request-logger.d.ts +50 -0
  136. package/dist/logger/session-request-logger.d.ts.map +1 -0
  137. package/dist/logger/session-request-logger.js +161 -0
  138. package/dist/logger/session-request-logger.js.map +1 -0
  139. package/dist/pipeline/context.d.ts +8 -3
  140. package/dist/pipeline/context.d.ts.map +1 -1
  141. package/dist/pipeline/default-pipeline.d.ts +35 -4
  142. package/dist/pipeline/default-pipeline.d.ts.map +1 -1
  143. package/dist/pipeline/default-pipeline.js +49 -7
  144. package/dist/pipeline/default-pipeline.js.map +1 -1
  145. package/dist/pipeline/handlers/coordinator.d.ts +0 -3
  146. package/dist/pipeline/handlers/coordinator.d.ts.map +1 -1
  147. package/dist/pipeline/handlers/coordinator.js +33 -22
  148. package/dist/pipeline/handlers/coordinator.js.map +1 -1
  149. package/dist/pipeline/handlers/dag-coordinator.d.ts +47 -0
  150. package/dist/pipeline/handlers/dag-coordinator.d.ts.map +1 -0
  151. package/dist/pipeline/handlers/dag-coordinator.js +369 -0
  152. package/dist/pipeline/handlers/dag-coordinator.js.map +1 -0
  153. package/dist/pipeline/handlers/index.d.ts +14 -0
  154. package/dist/pipeline/handlers/index.d.ts.map +1 -1
  155. package/dist/pipeline/handlers/index.js +8 -1
  156. package/dist/pipeline/handlers/index.js.map +1 -1
  157. package/dist/pipeline/handlers/rag-query.d.ts.map +1 -1
  158. package/dist/pipeline/handlers/rag-query.js +1 -0
  159. package/dist/pipeline/handlers/rag-query.js.map +1 -1
  160. package/dist/pipeline/handlers/subagent.d.ts.map +1 -1
  161. package/dist/pipeline/handlers/subagent.js +0 -2
  162. package/dist/pipeline/handlers/subagent.js.map +1 -1
  163. package/dist/pipeline/handlers/summarize.d.ts.map +1 -1
  164. package/dist/pipeline/handlers/summarize.js +5 -0
  165. package/dist/pipeline/handlers/summarize.js.map +1 -1
  166. package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -1
  167. package/dist/pipeline/handlers/tool-loop.js +17 -0
  168. package/dist/pipeline/handlers/tool-loop.js.map +1 -1
  169. package/dist/pipeline/handlers/translate.d.ts.map +1 -1
  170. package/dist/pipeline/handlers/translate.js +1 -0
  171. package/dist/pipeline/handlers/translate.js.map +1 -1
  172. package/dist/pipeline/index.d.ts +2 -1
  173. package/dist/pipeline/index.d.ts.map +1 -1
  174. package/dist/pipeline/index.js +1 -1
  175. package/dist/pipeline/index.js.map +1 -1
  176. package/dist/rag/knowledge-rag.d.ts +74 -0
  177. package/dist/rag/knowledge-rag.d.ts.map +1 -0
  178. package/dist/rag/knowledge-rag.js +116 -0
  179. package/dist/rag/knowledge-rag.js.map +1 -0
  180. package/dist/session/session-graph-factory.d.ts +66 -0
  181. package/dist/session/session-graph-factory.d.ts.map +1 -0
  182. package/dist/session/session-graph-factory.js +63 -0
  183. package/dist/session/session-graph-factory.js.map +1 -0
  184. package/dist/session/session-graph.d.ts +54 -0
  185. package/dist/session/session-graph.d.ts.map +1 -0
  186. package/dist/session/session-graph.js +76 -0
  187. package/dist/session/session-graph.js.map +1 -0
  188. package/dist/session/session-registry.d.ts +96 -0
  189. package/dist/session/session-registry.d.ts.map +1 -0
  190. package/dist/session/session-registry.js +297 -0
  191. package/dist/session/session-registry.js.map +1 -0
  192. package/dist/subagent/direct-llm-subagent.d.ts.map +1 -1
  193. package/dist/subagent/direct-llm-subagent.js +0 -2
  194. package/dist/subagent/direct-llm-subagent.js.map +1 -1
  195. package/dist/subagent/smart-agent-subagent.d.ts.map +1 -1
  196. package/dist/subagent/smart-agent-subagent.js +3 -3
  197. package/dist/subagent/smart-agent-subagent.js.map +1 -1
  198. package/package.json +14 -14
@@ -0,0 +1,76 @@
1
+ import { OrchestratorError } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Per-session runtime container. Owns the per-session instances produced by the
4
+ * SessionGraphFactory (agent/pipeline/interpreter/coordinator/workers via the
5
+ * agent), the sessionId-keyed registries, and the session token-logger. Tracks
6
+ * in-flight requests so eviction cannot dispose a graph mid-run; supports a
7
+ * mark-for-disposal "drain" so a pinned graph is torn down once it goes idle.
8
+ */
9
+ export class SessionGraph {
10
+ sessionId;
11
+ toolAvailability;
12
+ pendingToolResults;
13
+ logger;
14
+ agent;
15
+ disposeFn;
16
+ _active = 0;
17
+ _lastUsedMs = Date.now();
18
+ _marked = false;
19
+ _disposed = false;
20
+ constructor(parts) {
21
+ this.sessionId = parts.sessionId;
22
+ this.toolAvailability = parts.toolAvailability;
23
+ this.pendingToolResults = parts.pendingToolResults;
24
+ this.logger = parts.logger;
25
+ this.agent = parts.agent;
26
+ this.disposeFn = parts.dispose;
27
+ }
28
+ get activeRequests() {
29
+ return this._active;
30
+ }
31
+ get isPinned() {
32
+ return this._active > 0;
33
+ }
34
+ get lastUsedMs() {
35
+ return this._lastUsedMs;
36
+ }
37
+ get markedForDisposal() {
38
+ return this._marked;
39
+ }
40
+ acquire() {
41
+ if (this._disposed) {
42
+ throw new OrchestratorError('SessionGraph is disposed; cannot acquire', 'SESSION_GRAPH_DISPOSED');
43
+ }
44
+ this._active++;
45
+ this._lastUsedMs = Date.now();
46
+ }
47
+ release() {
48
+ if (this._active > 0)
49
+ this._active--;
50
+ this._lastUsedMs = Date.now();
51
+ }
52
+ markForDisposal() {
53
+ this._marked = true;
54
+ }
55
+ /**
56
+ * Idempotent. Ordering (review MEDIUM #2):
57
+ * 1) run the dispose hook (session RAG cleanup + any factory teardown);
58
+ * 2) reset the logger in `finally` — runs even if the hook throws, so the
59
+ * logger is always reset, but the hook's effect (or surfaced failure)
60
+ * is preserved before the in-memory counters are wiped.
61
+ * Previously the logger was reset BEFORE the hook ran, which made post-hoc
62
+ * inspection of session token counts impossible if the hook failed.
63
+ */
64
+ async dispose() {
65
+ if (this._disposed)
66
+ return;
67
+ this._disposed = true;
68
+ try {
69
+ await this.disposeFn(this.sessionId);
70
+ }
71
+ finally {
72
+ this.logger.reset();
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=session-graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-graph.js","sourceRoot":"","sources":["../../src/session/session-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAmB5D;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACd,SAAS,CAAS;IAClB,gBAAgB,CAA2B;IAC3C,kBAAkB,CAA6B;IAC/C,MAAM,CAAuB;IAC7B,KAAK,CAAc;IACX,SAAS,CAAuC;IACzD,OAAO,GAAG,CAAC,CAAC;IACZ,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,OAAO,GAAG,KAAK,CAAC;IAChB,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,KAAwB;QAClC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,CAAC;QAC/C,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC;QACnD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;IACjC,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,iBAAiB,CACzB,0CAA0C,EAC1C,wBAAwB,CACzB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IACD,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC;YAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,eAAe;QACb,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,96 @@
1
+ import type { SessionGraph } from './session-graph.js';
2
+ import type { SessionGraphIdentity } from './session-graph-factory.js';
3
+ /** Minimal seam over SessionGraphFactory so the registry is unit-testable. */
4
+ export interface SessionGraphSource {
5
+ build(identity: SessionGraphIdentity): Promise<SessionGraph>;
6
+ }
7
+ export interface SessionRegistryOptions {
8
+ /** Idle time before an unpinned graph is evicted. */
9
+ idleTtlMs: number;
10
+ /** Max live sessions before LRU eviction of unpinned graphs (drain if pinned). */
11
+ maxSessions: number;
12
+ factory: SessionGraphSource;
13
+ }
14
+ export declare class SessionRegistry {
15
+ private readonly opts;
16
+ private readonly graphs;
17
+ /**
18
+ * Graphs detached from `graphs` because they were pinned at the moment
19
+ * `invalidateAll()` was called. We cannot dispose mid-run, so we move them
20
+ * here to drain — once their last in-flight `release()` lands, dispose
21
+ * fires. They are NOT served to new `acquire()` calls, which forces those
22
+ * to mint a fresh graph using the just-applied config. Keyed by sessionId
23
+ * so `release()` can find them after `graphs.get(sessionId)` misses.
24
+ */
25
+ private readonly draining;
26
+ /** Single-flight guard: in-flight builds keyed by sessionId (review HIGH #2). */
27
+ private readonly pendingBuilds;
28
+ private readonly pending;
29
+ /**
30
+ * Set by `disposeAll` BEFORE any await. While closed the registry refuses new
31
+ * `acquire` calls so a post-shutdown caller cannot orphan a fresh graph past
32
+ * disposal. Defense-in-depth — the server's `close()` drains HTTP first, so
33
+ * in practice no acquire arrives after disposeAll.
34
+ */
35
+ private _closed;
36
+ /**
37
+ * Monotonic counter bumped by `invalidateAll()` (Fix #19). Each acquire
38
+ * captures the value BEFORE awaiting the build; if the counter has moved
39
+ * by the time the build resolves, the in-flight build is treated as
40
+ * orphaned — its `.then()` disposes the resolved graph instead of
41
+ * publishing it, and the awaiting acquire rejects. Closes the race where
42
+ * a build started before invalidate would otherwise publish a graph built
43
+ * with the OLD config after the invalidate completed.
44
+ */
45
+ private _generation;
46
+ constructor(opts: SessionRegistryOptions);
47
+ get size(): number;
48
+ /**
49
+ * Lazy-build + pin. Async because factory.build is async. SINGLE-FLIGHT: two
50
+ * concurrent acquires for the SAME new sessionId await the SAME build promise
51
+ * and receive the identical graph (never two graphs for one session). Each
52
+ * in-flight request increments the refcount (spec A.4).
53
+ */
54
+ acquire(sessionId: string): Promise<SessionGraph>;
55
+ /**
56
+ * Release one in-flight request. Non-creating lookup: an unknown/removed
57
+ * sessionId is a no-op (never resurrect). Disposes a marked graph once idle.
58
+ */
59
+ release(sessionId: string, graph?: SessionGraph): void;
60
+ /**
61
+ * Evict (dispose) a specific session by ID, regardless of idle TTL.
62
+ * If the graph is pinned (an in-flight request is holding it), it is marked
63
+ * for disposal so `release()` disposes it when the request completes.
64
+ * No-op if the session is not live.
65
+ */
66
+ evictOne(sessionId: string): Promise<void>;
67
+ /** Evict every unpinned graph idle longer than idleTtlMs. */
68
+ evictIdle(): Promise<void>;
69
+ /** Resolve all in-flight dispose() calls (test + shutdown helper). */
70
+ flushEvictions(): Promise<void>;
71
+ /**
72
+ * Dispose every graph (server shutdown). Awaits in-flight builds FIRST so
73
+ * graphs whose build resolves after disposeAll's initial sweep are not
74
+ * orphaned. `allSettled` is intentional: a failed build must not reject
75
+ * disposeAll (the failing build cleared its pendingBuilds slot in its own
76
+ * catch handler, so there is nothing to dispose for it).
77
+ */
78
+ disposeAll(): Promise<void>;
79
+ /**
80
+ * Soft reset — dispose every graph but keep the registry OPEN for new
81
+ * acquires. Used by config-reload (PUT /v1/config + hot-reload) to force
82
+ * the next request to mint a fresh per-session graph that picks up the
83
+ * just-applied config. Unpinned graphs are disposed immediately; pinned
84
+ * graphs are marked for disposal (drained when their last in-flight
85
+ * request releases) — same drain semantics as `enforceCap`.
86
+ *
87
+ * Unlike `disposeAll`, this does NOT set `_closed`, so callers can keep
88
+ * serving traffic after a config change.
89
+ */
90
+ invalidateAll(): Promise<void>;
91
+ private enforceCap;
92
+ /** Sessions that still count toward the cap (not yet draining). */
93
+ private liveCount;
94
+ private evictNow;
95
+ }
96
+ //# sourceMappingURL=session-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.d.ts","sourceRoot":"","sources":["../../src/session/session-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAED,qBAAa,eAAe;IAgCd,OAAO,CAAC,QAAQ,CAAC,IAAI;IA/BjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmC;IAC1D;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAC5D,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4C;IAC1E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C;;;;;OAKG;IACH,OAAO,CAAC,OAAO,CAAS;IACxB;;;;;;;;OAQG;IACH,OAAO,CAAC,WAAW,CAAK;gBAEK,IAAI,EAAE,sBAAsB;IAEzD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAiFvD;;;OAGG;IACH,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI;IA2CtD;;;;;OAKG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWhD,6DAA6D;IACvD,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAUhC,sEAAsE;IAChE,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrC;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBjC;;;;;;;;;;OAUG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BpC,OAAO,CAAC,UAAU;IAuBlB,mEAAmE;IACnE,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,QAAQ;CAIjB"}
@@ -0,0 +1,297 @@
1
+ import { OrchestratorError } from '@mcp-abap-adt/llm-agent';
2
+ export class SessionRegistry {
3
+ opts;
4
+ graphs = new Map();
5
+ /**
6
+ * Graphs detached from `graphs` because they were pinned at the moment
7
+ * `invalidateAll()` was called. We cannot dispose mid-run, so we move them
8
+ * here to drain — once their last in-flight `release()` lands, dispose
9
+ * fires. They are NOT served to new `acquire()` calls, which forces those
10
+ * to mint a fresh graph using the just-applied config. Keyed by sessionId
11
+ * so `release()` can find them after `graphs.get(sessionId)` misses.
12
+ */
13
+ draining = new Map();
14
+ /** Single-flight guard: in-flight builds keyed by sessionId (review HIGH #2). */
15
+ pendingBuilds = new Map();
16
+ pending = [];
17
+ /**
18
+ * Set by `disposeAll` BEFORE any await. While closed the registry refuses new
19
+ * `acquire` calls so a post-shutdown caller cannot orphan a fresh graph past
20
+ * disposal. Defense-in-depth — the server's `close()` drains HTTP first, so
21
+ * in practice no acquire arrives after disposeAll.
22
+ */
23
+ _closed = false;
24
+ /**
25
+ * Monotonic counter bumped by `invalidateAll()` (Fix #19). Each acquire
26
+ * captures the value BEFORE awaiting the build; if the counter has moved
27
+ * by the time the build resolves, the in-flight build is treated as
28
+ * orphaned — its `.then()` disposes the resolved graph instead of
29
+ * publishing it, and the awaiting acquire rejects. Closes the race where
30
+ * a build started before invalidate would otherwise publish a graph built
31
+ * with the OLD config after the invalidate completed.
32
+ */
33
+ _generation = 0;
34
+ constructor(opts) {
35
+ this.opts = opts;
36
+ }
37
+ get size() {
38
+ return this.graphs.size;
39
+ }
40
+ /**
41
+ * Lazy-build + pin. Async because factory.build is async. SINGLE-FLIGHT: two
42
+ * concurrent acquires for the SAME new sessionId await the SAME build promise
43
+ * and receive the identical graph (never two graphs for one session). Each
44
+ * in-flight request increments the refcount (spec A.4).
45
+ */
46
+ async acquire(sessionId) {
47
+ if (this._closed) {
48
+ throw new OrchestratorError('SessionRegistry is closed; cannot acquire', 'SESSION_REGISTRY_CLOSED');
49
+ }
50
+ // Capture generation BEFORE awaiting the build (Fix #19). If
51
+ // invalidateAll() bumps the counter mid-build, the build's `.then()`
52
+ // disposes the resolved graph instead of publishing it, and the
53
+ // post-await check below rejects this acquire.
54
+ const gen = this._generation;
55
+ let g = this.graphs.get(sessionId);
56
+ if (!g) {
57
+ let build = this.pendingBuilds.get(sessionId);
58
+ if (!build) {
59
+ const buildGen = gen;
60
+ // Forward reference so .then/.catch can identify "are we still the
61
+ // entry in pendingBuilds?" (Fix #20). Without this, a stale
62
+ // invalidated build A would unconditionally delete the pendingBuilds
63
+ // slot — evicting a NEWER in-flight build B that took A's place
64
+ // after `invalidateAll()` cleared pendingBuilds.
65
+ let self;
66
+ const clearIfMine = () => {
67
+ if (this.pendingBuilds.get(sessionId) === self) {
68
+ this.pendingBuilds.delete(sessionId);
69
+ }
70
+ };
71
+ build = this.opts.factory
72
+ .build({ sessionId })
73
+ .then((graph) => {
74
+ if (this._generation !== buildGen) {
75
+ // Orphaned by invalidateAll(); dispose async and do NOT
76
+ // publish into `graphs` (which would be a stale-config graph).
77
+ this.pending.push(graph.dispose());
78
+ clearIfMine();
79
+ throw new OrchestratorError('Session graph invalidated mid-build', 'SESSION_INVALIDATED');
80
+ }
81
+ this.graphs.set(sessionId, graph);
82
+ clearIfMine();
83
+ this.enforceCap();
84
+ return graph;
85
+ })
86
+ .catch((err) => {
87
+ // Clear the in-flight entry so a later request can retry the build
88
+ // — but ONLY if we are still the current entry (Fix #20).
89
+ clearIfMine();
90
+ throw err;
91
+ });
92
+ self = build;
93
+ this.pendingBuilds.set(sessionId, build);
94
+ }
95
+ g = await build;
96
+ }
97
+ // Re-check after the await: disposeAll() may have completed during the
98
+ // build's then-callback, which inserts the graph and then disposes it.
99
+ // Without this re-check the post-await continuation would acquire() on a
100
+ // disposed graph (SessionGraph.acquire() also guards via _disposed —
101
+ // defense in depth).
102
+ if (this._closed) {
103
+ throw new OrchestratorError('SessionRegistry is closed; cannot acquire', 'SESSION_REGISTRY_CLOSED');
104
+ }
105
+ // Mid-build invalidate check (Fix #19). If we awaited an existing
106
+ // pending build whose `.then()` had not yet observed the bump (different
107
+ // task ordering than the throw path above), still refuse to publish.
108
+ if (this._generation !== gen) {
109
+ throw new OrchestratorError('Session graph invalidated mid-build', 'SESSION_INVALIDATED');
110
+ }
111
+ g.acquire();
112
+ return g;
113
+ }
114
+ /**
115
+ * Release one in-flight request. Non-creating lookup: an unknown/removed
116
+ * sessionId is a no-op (never resurrect). Disposes a marked graph once idle.
117
+ */
118
+ release(sessionId, graph) {
119
+ // When the caller passes the exact graph reference they acquired (recent
120
+ // change required by `invalidateAll`), use it directly — a draining graph
121
+ // and a freshly-built replacement may coexist under the same sessionId,
122
+ // and only the original graph instance must be decremented.
123
+ if (graph) {
124
+ graph.release();
125
+ if (!graph.isPinned) {
126
+ const drain = this.draining.get(sessionId);
127
+ if (drain === graph) {
128
+ this.draining.delete(sessionId);
129
+ this.pending.push(graph.dispose());
130
+ return;
131
+ }
132
+ if (graph.markedForDisposal) {
133
+ const live = this.graphs.get(sessionId);
134
+ if (live === graph)
135
+ this.graphs.delete(sessionId);
136
+ this.pending.push(graph.dispose());
137
+ }
138
+ }
139
+ return;
140
+ }
141
+ // Legacy by-sessionId path — preserved for callers that haven't been
142
+ // updated. When a draining entry exists it wins (those graphs are
143
+ // detached and otherwise unreachable for release).
144
+ const drain = this.draining.get(sessionId);
145
+ if (drain) {
146
+ drain.release();
147
+ if (!drain.isPinned) {
148
+ this.draining.delete(sessionId);
149
+ this.pending.push(drain.dispose());
150
+ }
151
+ return;
152
+ }
153
+ const g = this.graphs.get(sessionId);
154
+ if (!g)
155
+ return;
156
+ g.release();
157
+ if (g.markedForDisposal && !g.isPinned) {
158
+ this.graphs.delete(sessionId);
159
+ this.pending.push(g.dispose());
160
+ }
161
+ }
162
+ /**
163
+ * Evict (dispose) a specific session by ID, regardless of idle TTL.
164
+ * If the graph is pinned (an in-flight request is holding it), it is marked
165
+ * for disposal so `release()` disposes it when the request completes.
166
+ * No-op if the session is not live.
167
+ */
168
+ async evictOne(sessionId) {
169
+ const g = this.graphs.get(sessionId);
170
+ if (!g)
171
+ return;
172
+ if (g.isPinned) {
173
+ g.markForDisposal();
174
+ }
175
+ else {
176
+ this.evictNow(sessionId, g);
177
+ }
178
+ await this.flushEvictions();
179
+ }
180
+ /** Evict every unpinned graph idle longer than idleTtlMs. */
181
+ async evictIdle() {
182
+ const now = Date.now();
183
+ for (const [id, g] of this.graphs) {
184
+ if (!g.isPinned && now - g.lastUsedMs >= this.opts.idleTtlMs) {
185
+ this.evictNow(id, g);
186
+ }
187
+ }
188
+ await this.flushEvictions();
189
+ }
190
+ /** Resolve all in-flight dispose() calls (test + shutdown helper). */
191
+ async flushEvictions() {
192
+ await Promise.all(this.pending.splice(0));
193
+ }
194
+ /**
195
+ * Dispose every graph (server shutdown). Awaits in-flight builds FIRST so
196
+ * graphs whose build resolves after disposeAll's initial sweep are not
197
+ * orphaned. `allSettled` is intentional: a failed build must not reject
198
+ * disposeAll (the failing build cleared its pendingBuilds slot in its own
199
+ * catch handler, so there is nothing to dispose for it).
200
+ */
201
+ async disposeAll() {
202
+ // Mark closed BEFORE the first await so concurrent acquire() calls observe
203
+ // the closed state and reject — never start a build that escapes disposal.
204
+ this._closed = true;
205
+ if (this.pendingBuilds.size > 0) {
206
+ await Promise.allSettled([...this.pendingBuilds.values()]);
207
+ }
208
+ for (const [id, g] of this.graphs) {
209
+ this.graphs.delete(id);
210
+ this.pending.push(g.dispose());
211
+ }
212
+ // Drain any graphs detached by a prior `invalidateAll()`.
213
+ for (const [id, g] of this.draining) {
214
+ this.draining.delete(id);
215
+ this.pending.push(g.dispose());
216
+ }
217
+ this.pendingBuilds.clear();
218
+ await this.flushEvictions();
219
+ }
220
+ /**
221
+ * Soft reset — dispose every graph but keep the registry OPEN for new
222
+ * acquires. Used by config-reload (PUT /v1/config + hot-reload) to force
223
+ * the next request to mint a fresh per-session graph that picks up the
224
+ * just-applied config. Unpinned graphs are disposed immediately; pinned
225
+ * graphs are marked for disposal (drained when their last in-flight
226
+ * request releases) — same drain semantics as `enforceCap`.
227
+ *
228
+ * Unlike `disposeAll`, this does NOT set `_closed`, so callers can keep
229
+ * serving traffic after a config change.
230
+ */
231
+ async invalidateAll() {
232
+ // Bump generation FIRST (Fix #19). Any in-flight build's `.then()` will
233
+ // observe the new value and dispose its result instead of publishing it.
234
+ this._generation++;
235
+ for (const [id, g] of [...this.graphs]) {
236
+ if (g.isPinned) {
237
+ // Detach: move to the draining side-map so a fresh `acquire(id)`
238
+ // builds a NEW graph with the just-applied config, while the
239
+ // original pinned graph keeps serving its current in-flight
240
+ // request until its last `release(id, graph)` lands.
241
+ g.markForDisposal();
242
+ this.graphs.delete(id);
243
+ this.draining.set(id, g);
244
+ }
245
+ else {
246
+ this.evictNow(id, g);
247
+ }
248
+ }
249
+ // Also abandon any in-flight builds — when they resolve they will insert
250
+ // their graph back into `graphs`, but we want next acquires to rebuild
251
+ // using the new config. Clearing pendingBuilds means the next acquire
252
+ // will start a fresh build; the resolved-but-orphan graph is unpinned
253
+ // and will be evicted by enforceCap (it never gets returned to a caller
254
+ // because the acquire that started it already returned the OLD graph).
255
+ // Defense-in-depth: pendingBuilds is rarely non-empty at config-change
256
+ // time in practice.
257
+ this.pendingBuilds.clear();
258
+ await this.flushEvictions();
259
+ }
260
+ enforceCap() {
261
+ while (this.liveCount() > this.opts.maxSessions) {
262
+ let lruId;
263
+ let lruGraph;
264
+ let lruTime = Number.POSITIVE_INFINITY;
265
+ for (const [id, g] of this.graphs) {
266
+ if (g.markedForDisposal)
267
+ continue; // already draining
268
+ if (g.lastUsedMs < lruTime) {
269
+ lruTime = g.lastUsedMs;
270
+ lruId = id;
271
+ lruGraph = g;
272
+ }
273
+ }
274
+ if (!lruId || !lruGraph)
275
+ break; // nothing left to mark
276
+ if (lruGraph.isPinned) {
277
+ // DRAIN: cannot dispose mid-run; mark and stop (release() finishes it).
278
+ lruGraph.markForDisposal();
279
+ break;
280
+ }
281
+ this.evictNow(lruId, lruGraph);
282
+ }
283
+ }
284
+ /** Sessions that still count toward the cap (not yet draining). */
285
+ liveCount() {
286
+ let n = 0;
287
+ for (const g of this.graphs.values())
288
+ if (!g.markedForDisposal)
289
+ n++;
290
+ return n;
291
+ }
292
+ evictNow(sessionId, g) {
293
+ this.graphs.delete(sessionId);
294
+ this.pending.push(g.dispose());
295
+ }
296
+ }
297
+ //# sourceMappingURL=session-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-registry.js","sourceRoot":"","sources":["../../src/session/session-registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"direct-llm-subagent.d.ts","sourceRoot":"","sources":["../../src/subagent/direct-llm-subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,SAAS,EACT,cAAc,EACd,eAAe,EAEf,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,YAAW,SAAS;aAM/B,IAAI,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,YAAY,EAAE,oBAAoB,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpB,IAAI,EAAE,MAAM,EACX,GAAG,EAAE,IAAI,EAC1B,IAAI,EAAE,wBAAwB;IAW1B,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;CAiC3D"}
1
+ {"version":3,"file":"direct-llm-subagent.d.ts","sourceRoot":"","sources":["../../src/subagent/direct-llm-subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,SAAS,EACT,cAAc,EACd,eAAe,EAEf,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,CAAC;CACvD;AAED;;;;;;;GAOG;AACH,qBAAa,iBAAkB,YAAW,SAAS;aAM/B,IAAI,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,YAAY,EAAE,oBAAoB,CAAC;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGpB,IAAI,EAAE,MAAM,EACX,GAAG,EAAE,IAAI,EAC1B,IAAI,EAAE,wBAAwB;IAS1B,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;CAiC3D"}
@@ -18,8 +18,6 @@ export class DirectLlmSubAgent {
18
18
  this.description = opts.description;
19
19
  this.systemPrompt = opts.systemPrompt;
20
20
  this.capabilities = {
21
- kind: 'constrained',
22
- canDispatchChildren: false,
23
21
  contextPolicy: opts.contextPolicy ?? 'required',
24
22
  };
25
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"direct-llm-subagent.js","sourceRoot":"","sources":["../../src/subagent/direct-llm-subagent.ts"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IAMV;IACC;IANH,WAAW,CAAU;IACrB,YAAY,CAAuB;IAClC,YAAY,CAAS;IAEtC,YACkB,IAAY,EACX,GAAS,EAC1B,IAA8B;QAFd,SAAI,GAAJ,IAAI,CAAQ;QACX,QAAG,GAAH,GAAG,CAAM;QAG1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG;YAClB,IAAI,EAAE,aAAa;YACnB,mBAAmB,EAAE,KAAK;YAC1B,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,UAAU;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAqB;QAC7B,IACE,IAAI,CAAC,YAAY,CAAC,aAAa,KAAK,UAAU;YAC9C,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAC9C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,IAAI,6CAA6C,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GACf,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAEjB,MAAM,QAAQ,GAAc;YAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACvC,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,KAAK,CAAC;QAClB,CAAC;QAED,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;SACvB,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"direct-llm-subagent.js","sourceRoot":"","sources":["../../src/subagent/direct-llm-subagent.ts"],"names":[],"mappings":"AAeA;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IAMV;IACC;IANH,WAAW,CAAU;IACrB,YAAY,CAAuB;IAClC,YAAY,CAAS;IAEtC,YACkB,IAAY,EACX,GAAS,EAC1B,IAA8B;QAFd,SAAI,GAAJ,IAAI,CAAQ;QACX,QAAG,GAAH,GAAG,CAAM;QAG1B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,YAAY,GAAG;YAClB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,UAAU;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAqB;QAC7B,IACE,IAAI,CAAC,YAAY,CAAC,aAAa,KAAK,UAAU;YAC9C,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,EAC9C,CAAC;YACD,MAAM,IAAI,KAAK,CACb,sBAAsB,IAAI,CAAC,IAAI,6CAA6C,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GACf,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QAEjB,MAAM,QAAQ,GAAc;YAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE;YAC9C,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;SACvC,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE;YAC5C,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,KAAK,CAAC;QAClB,CAAC;QAED,OAAO;YACL,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK;SACvB,CAAC;IACJ,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"smart-agent-subagent.d.ts","sourceRoot":"","sources":["../../src/subagent/smart-agent-subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,eAAe,EAEf,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,kBAAmB,YAAW,SAAS;aAShC,IAAI,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,YAAY,EAAE,oBAAoB,CAIhD;gBAGgB,IAAI,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EAClC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAK3B,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;CAmC3D"}
1
+ {"version":3,"file":"smart-agent-subagent.d.ts","sourceRoot":"","sources":["../../src/subagent/smart-agent-subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,cAAc,EACd,eAAe,EAEf,oBAAoB,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,qBAAa,kBAAmB,YAAW,SAAS;aAOhC,IAAI,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAPxB,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,YAAY,EAAE,oBAAoB,CAEhD;gBAGgB,IAAI,EAAE,MAAM,EACX,KAAK,EAAE,UAAU,EAClC,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAK3B,GAAG,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;CAqC3D"}
@@ -3,8 +3,6 @@ export class SmartAgentSubAgent {
3
3
  agent;
4
4
  description;
5
5
  capabilities = {
6
- kind: 'autonomous',
7
- canDispatchChildren: true,
8
6
  contextPolicy: 'optional',
9
7
  };
10
8
  constructor(name, agent, opts) {
@@ -19,7 +17,9 @@ export class SmartAgentSubAgent {
19
17
  const res = await this.agent.process(prompt, {
20
18
  sessionId: input.sessionId,
21
19
  signal: input.signal,
22
- layer: input.layer,
20
+ trace: input.trace,
21
+ sessionLogger: input.sessionLogger,
22
+ onPartial: input.onPartial,
23
23
  });
24
24
  if (!res.ok) {
25
25
  throw res.error;
@@ -1 +1 @@
1
- {"version":3,"file":"smart-agent-subagent.js","sourceRoot":"","sources":["../../src/subagent/smart-agent-subagent.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,kBAAkB;IASX;IACC;IATH,WAAW,CAAU;IACrB,YAAY,GAAyB;QACnD,IAAI,EAAE,YAAY;QAClB,mBAAmB,EAAE,IAAI;QACzB,aAAa,EAAE,UAAU;KAC1B,CAAC;IAEF,YACkB,IAAY,EACX,KAAiB,EAClC,IAA+B;QAFf,SAAI,GAAJ,IAAI,CAAQ;QACX,UAAK,GAAL,KAAK,CAAY;QAGlC,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAqB;QAC7B,MAAM,MAAM,GACV,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACjB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,KAAK,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAEhD,MAAM,eAAe,GAA8B,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACzE,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;YACtB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAA4B;SACxE,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,KAAK;gBACV,CAAC,CAAC;oBACE,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"smart-agent-subagent.js","sourceRoot":"","sources":["../../src/subagent/smart-agent-subagent.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,kBAAkB;IAOX;IACC;IAPH,WAAW,CAAU;IACrB,YAAY,GAAyB;QACnD,aAAa,EAAE,UAAU;KAC1B,CAAC;IAEF,YACkB,IAAY,EACX,KAAiB,EAClC,IAA+B;QAFf,SAAI,GAAJ,IAAI,CAAQ;QACX,UAAK,GAAL,KAAK,CAAY;QAGlC,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAqB;QAC7B,MAAM,MAAM,GACV,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,OAAO,KAAK,CAAC,IAAI,EAAE;YACrC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACjB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,KAAK,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;QAEhD,MAAM,eAAe,GAA8B,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACzE,EAAE,EAAE,EAAE,CAAC,EAAE;YACT,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;YACtB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAA4B;SACxE,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,MAAM,EAAE,OAAO;YACf,SAAS,EAAE,eAAe;YAC1B,KAAK,EAAE,KAAK;gBACV,CAAC,CAAC;oBACE,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;oBACxC,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B;gBACH,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-abap-adt/llm-agent-libs",
3
- "version": "16.2.0",
3
+ "version": "18.0.0",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -31,20 +31,20 @@
31
31
  "test": "node --import tsx/esm --test --test-reporter=spec 'src/**/*.test.ts'"
32
32
  },
33
33
  "dependencies": {
34
- "@mcp-abap-adt/llm-agent": "^16.2.0",
35
- "@mcp-abap-adt/llm-agent-mcp": "^16.2.0",
36
- "@mcp-abap-adt/llm-agent-rag": "^16.2.0",
34
+ "@mcp-abap-adt/llm-agent": "^18.0.0",
35
+ "@mcp-abap-adt/llm-agent-mcp": "^18.0.0",
36
+ "@mcp-abap-adt/llm-agent-rag": "^18.0.0",
37
37
  "@opentelemetry/api": "^1.9.1",
38
38
  "dotenv": "^17.3.1",
39
39
  "yaml": "^2.8.3",
40
40
  "zod": "^4.3.6"
41
41
  },
42
42
  "peerDependencies": {
43
- "@mcp-abap-adt/openai-llm": "^16.2.0",
44
- "@mcp-abap-adt/anthropic-llm": "^16.2.0",
45
- "@mcp-abap-adt/deepseek-llm": "^16.2.0",
46
- "@mcp-abap-adt/ollama-llm": "^16.2.0",
47
- "@mcp-abap-adt/sap-aicore-llm": "^16.2.0"
43
+ "@mcp-abap-adt/openai-llm": "^18.0.0",
44
+ "@mcp-abap-adt/anthropic-llm": "^18.0.0",
45
+ "@mcp-abap-adt/deepseek-llm": "^18.0.0",
46
+ "@mcp-abap-adt/ollama-llm": "^18.0.0",
47
+ "@mcp-abap-adt/sap-aicore-llm": "^18.0.0"
48
48
  },
49
49
  "peerDependenciesMeta": {
50
50
  "@mcp-abap-adt/openai-llm": {
@@ -64,11 +64,11 @@
64
64
  }
65
65
  },
66
66
  "devDependencies": {
67
- "@mcp-abap-adt/openai-llm": "^16.2.0",
68
- "@mcp-abap-adt/anthropic-llm": "^16.2.0",
69
- "@mcp-abap-adt/deepseek-llm": "^16.2.0",
70
- "@mcp-abap-adt/ollama-llm": "^16.2.0",
71
- "@mcp-abap-adt/sap-aicore-llm": "^16.2.0"
67
+ "@mcp-abap-adt/openai-llm": "^18.0.0",
68
+ "@mcp-abap-adt/anthropic-llm": "^18.0.0",
69
+ "@mcp-abap-adt/deepseek-llm": "^18.0.0",
70
+ "@mcp-abap-adt/ollama-llm": "^18.0.0",
71
+ "@mcp-abap-adt/sap-aicore-llm": "^18.0.0"
72
72
  },
73
73
  "publishConfig": {
74
74
  "access": "public"