@mcp-abap-adt/llm-agent-libs 12.0.2 → 12.0.4
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.
- package/dist/adapters/index.d.ts +4 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +4 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/llm-adapter.d.ts +24 -0
- package/dist/adapters/llm-adapter.d.ts.map +1 -0
- package/dist/adapters/llm-adapter.js +345 -0
- package/dist/adapters/llm-adapter.js.map +1 -0
- package/dist/adapters/llm-provider-bridge.d.ts +30 -0
- package/dist/adapters/llm-provider-bridge.d.ts.map +1 -0
- package/dist/adapters/llm-provider-bridge.js +122 -0
- package/dist/adapters/llm-provider-bridge.js.map +1 -0
- package/dist/adapters/non-streaming-llm.d.ts +18 -0
- package/dist/adapters/non-streaming-llm.d.ts.map +1 -0
- package/dist/adapters/non-streaming-llm.js +44 -0
- package/dist/adapters/non-streaming-llm.js.map +1 -0
- package/dist/agent.d.ts +227 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +1534 -0
- package/dist/agent.js.map +1 -0
- package/dist/builder.d.ts +260 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +949 -0
- package/dist/builder.js.map +1 -0
- package/dist/classifier/index.d.ts +3 -0
- package/dist/classifier/index.d.ts.map +1 -0
- package/dist/classifier/index.js +2 -0
- package/dist/classifier/index.js.map +1 -0
- package/dist/classifier/llm-classifier.d.ts +20 -0
- package/dist/classifier/llm-classifier.d.ts.map +1 -0
- package/dist/classifier/llm-classifier.js +128 -0
- package/dist/classifier/llm-classifier.js.map +1 -0
- package/dist/config/config-watcher.d.ts +54 -0
- package/dist/config/config-watcher.d.ts.map +1 -0
- package/dist/config/config-watcher.js +107 -0
- package/dist/config/config-watcher.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +2 -0
- package/dist/config/index.js.map +1 -0
- package/dist/context/context-assembler.d.ts +49 -0
- package/dist/context/context-assembler.d.ts.map +1 -0
- package/dist/context/context-assembler.js +184 -0
- package/dist/context/context-assembler.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -0
- package/dist/health/health-checker.d.ts +21 -0
- package/dist/health/health-checker.d.ts.map +1 -0
- package/dist/health/health-checker.js +52 -0
- package/dist/health/health-checker.js.map +1 -0
- package/dist/health/index.d.ts +3 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +2 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/types.d.ts +2 -0
- package/dist/health/types.d.ts.map +1 -0
- package/dist/health/types.js +2 -0
- package/dist/health/types.js.map +1 -0
- package/dist/history/history-memory.d.ts +12 -0
- package/dist/history/history-memory.d.ts.map +1 -0
- package/dist/history/history-memory.js +26 -0
- package/dist/history/history-memory.js.map +1 -0
- package/dist/history/history-summarizer.d.ts +10 -0
- package/dist/history/history-summarizer.d.ts.map +1 -0
- package/dist/history/history-summarizer.js +27 -0
- package/dist/history/history-summarizer.js.map +1 -0
- package/dist/history/index.d.ts +3 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +3 -0
- package/dist/history/index.js.map +1 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/mcp-connection-strategy.d.ts +2 -0
- package/dist/interfaces/mcp-connection-strategy.d.ts.map +1 -0
- package/dist/interfaces/mcp-connection-strategy.js +2 -0
- package/dist/interfaces/mcp-connection-strategy.js.map +1 -0
- package/dist/interfaces/model-resolver.d.ts +2 -0
- package/dist/interfaces/model-resolver.d.ts.map +1 -0
- package/dist/interfaces/model-resolver.js +2 -0
- package/dist/interfaces/model-resolver.js.map +1 -0
- package/dist/interfaces/pipeline.d.ts +123 -0
- package/dist/interfaces/pipeline.d.ts.map +1 -0
- package/dist/interfaces/pipeline.js +13 -0
- package/dist/interfaces/pipeline.js.map +1 -0
- package/dist/logger/console-logger.d.ts +7 -0
- package/dist/logger/console-logger.d.ts.map +1 -0
- package/dist/logger/console-logger.js +12 -0
- package/dist/logger/console-logger.js.map +1 -0
- package/dist/logger/default-request-logger.d.ts +17 -0
- package/dist/logger/default-request-logger.d.ts.map +1 -0
- package/dist/logger/default-request-logger.js +86 -0
- package/dist/logger/default-request-logger.js.map +1 -0
- package/dist/logger/index.d.ts +3 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +2 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/noop-request-logger.d.ts +11 -0
- package/dist/logger/noop-request-logger.d.ts.map +1 -0
- package/dist/logger/noop-request-logger.js +20 -0
- package/dist/logger/noop-request-logger.js.map +1 -0
- package/dist/logger/session-logger.d.ts +10 -0
- package/dist/logger/session-logger.d.ts.map +1 -0
- package/dist/logger/session-logger.js +40 -0
- package/dist/logger/session-logger.js.map +1 -0
- package/dist/metrics/in-memory-metrics.d.ts +36 -0
- package/dist/metrics/in-memory-metrics.d.ts.map +1 -0
- package/dist/metrics/in-memory-metrics.js +87 -0
- package/dist/metrics/in-memory-metrics.js.map +1 -0
- package/dist/metrics/index.d.ts +4 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +3 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/noop-metrics.d.ts +17 -0
- package/dist/metrics/noop-metrics.d.ts.map +1 -0
- package/dist/metrics/noop-metrics.js +22 -0
- package/dist/metrics/noop-metrics.js.map +1 -0
- package/dist/metrics/types.d.ts +2 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +2 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/otel/index.d.ts +2 -0
- package/dist/otel/index.d.ts.map +1 -0
- package/dist/otel/index.js +2 -0
- package/dist/otel/index.js.map +1 -0
- package/dist/otel/otel-tracer-adapter.d.ts +15 -0
- package/dist/otel/otel-tracer-adapter.d.ts.map +1 -0
- package/dist/otel/otel-tracer-adapter.js +62 -0
- package/dist/otel/otel-tracer-adapter.js.map +1 -0
- package/dist/pipeline/condition-evaluator.d.ts +35 -0
- package/dist/pipeline/condition-evaluator.d.ts.map +1 -0
- package/dist/pipeline/condition-evaluator.js +143 -0
- package/dist/pipeline/condition-evaluator.js.map +1 -0
- package/dist/pipeline/context.d.ts +119 -0
- package/dist/pipeline/context.d.ts.map +1 -0
- package/dist/pipeline/context.js +19 -0
- package/dist/pipeline/context.js.map +1 -0
- package/dist/pipeline/default-pipeline.d.ts +69 -0
- package/dist/pipeline/default-pipeline.d.ts.map +1 -0
- package/dist/pipeline/default-pipeline.js +276 -0
- package/dist/pipeline/default-pipeline.js.map +1 -0
- package/dist/pipeline/executor.d.ts +54 -0
- package/dist/pipeline/executor.d.ts.map +1 -0
- package/dist/pipeline/executor.js +133 -0
- package/dist/pipeline/executor.js.map +1 -0
- package/dist/pipeline/handlers/assemble.d.ts +16 -0
- package/dist/pipeline/handlers/assemble.d.ts.map +1 -0
- package/dist/pipeline/handlers/assemble.js +72 -0
- package/dist/pipeline/handlers/assemble.js.map +1 -0
- package/dist/pipeline/handlers/build-tool-query.d.ts +30 -0
- package/dist/pipeline/handlers/build-tool-query.d.ts.map +1 -0
- package/dist/pipeline/handlers/build-tool-query.js +80 -0
- package/dist/pipeline/handlers/build-tool-query.js.map +1 -0
- package/dist/pipeline/handlers/classify.d.ts +21 -0
- package/dist/pipeline/handlers/classify.d.ts.map +1 -0
- package/dist/pipeline/handlers/classify.js +60 -0
- package/dist/pipeline/handlers/classify.js.map +1 -0
- package/dist/pipeline/handlers/expand.d.ts +16 -0
- package/dist/pipeline/handlers/expand.d.ts.map +1 -0
- package/dist/pipeline/handlers/expand.js +24 -0
- package/dist/pipeline/handlers/expand.js.map +1 -0
- package/dist/pipeline/handlers/history-upsert.d.ts +29 -0
- package/dist/pipeline/handlers/history-upsert.d.ts.map +1 -0
- package/dist/pipeline/handlers/history-upsert.js +75 -0
- package/dist/pipeline/handlers/history-upsert.js.map +1 -0
- package/dist/pipeline/handlers/index.d.ts +31 -0
- package/dist/pipeline/handlers/index.d.ts.map +1 -0
- package/dist/pipeline/handlers/index.js +44 -0
- package/dist/pipeline/handlers/index.js.map +1 -0
- package/dist/pipeline/handlers/rag-query.d.ts +27 -0
- package/dist/pipeline/handlers/rag-query.d.ts.map +1 -0
- package/dist/pipeline/handlers/rag-query.js +117 -0
- package/dist/pipeline/handlers/rag-query.js.map +1 -0
- package/dist/pipeline/handlers/rerank.d.ts +16 -0
- package/dist/pipeline/handlers/rerank.d.ts.map +1 -0
- package/dist/pipeline/handlers/rerank.js +27 -0
- package/dist/pipeline/handlers/rerank.js.map +1 -0
- package/dist/pipeline/handlers/skill-select.d.ts +18 -0
- package/dist/pipeline/handlers/skill-select.d.ts.map +1 -0
- package/dist/pipeline/handlers/skill-select.js +88 -0
- package/dist/pipeline/handlers/skill-select.js.map +1 -0
- package/dist/pipeline/handlers/summarize.d.ts +17 -0
- package/dist/pipeline/handlers/summarize.d.ts.map +1 -0
- package/dist/pipeline/handlers/summarize.js +56 -0
- package/dist/pipeline/handlers/summarize.js.map +1 -0
- package/dist/pipeline/handlers/tool-loop.d.ts +32 -0
- package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -0
- package/dist/pipeline/handlers/tool-loop.js +734 -0
- package/dist/pipeline/handlers/tool-loop.js.map +1 -0
- package/dist/pipeline/handlers/tool-select.d.ts +21 -0
- package/dist/pipeline/handlers/tool-select.d.ts.map +1 -0
- package/dist/pipeline/handlers/tool-select.js +109 -0
- package/dist/pipeline/handlers/tool-select.js.map +1 -0
- package/dist/pipeline/handlers/translate.d.ts +17 -0
- package/dist/pipeline/handlers/translate.d.ts.map +1 -0
- package/dist/pipeline/handlers/translate.js +42 -0
- package/dist/pipeline/handlers/translate.js.map +1 -0
- package/dist/pipeline/index.d.ts +14 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +16 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/stage-handler.d.ts +27 -0
- package/dist/pipeline/stage-handler.d.ts.map +1 -0
- package/dist/pipeline/stage-handler.js +25 -0
- package/dist/pipeline/stage-handler.js.map +1 -0
- package/dist/pipeline/types.d.ts +5 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +2 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/plugins/index.d.ts +4 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/loader.d.ts +67 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +114 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +24 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +86 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/policy/heuristic-injection-detector.d.ts +5 -0
- package/dist/policy/heuristic-injection-detector.d.ts.map +1 -0
- package/dist/policy/heuristic-injection-detector.js +36 -0
- package/dist/policy/heuristic-injection-detector.js.map +1 -0
- package/dist/policy/index.d.ts +6 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +5 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/mixed-tool-call-handler.d.ts +15 -0
- package/dist/policy/mixed-tool-call-handler.d.ts.map +1 -0
- package/dist/policy/mixed-tool-call-handler.js +49 -0
- package/dist/policy/mixed-tool-call-handler.js.map +1 -0
- package/dist/policy/pending-tool-results-registry.d.ts +25 -0
- package/dist/policy/pending-tool-results-registry.d.ts.map +1 -0
- package/dist/policy/pending-tool-results-registry.js +50 -0
- package/dist/policy/pending-tool-results-registry.js.map +1 -0
- package/dist/policy/tool-availability-registry.d.ts +21 -0
- package/dist/policy/tool-availability-registry.d.ts.map +1 -0
- package/dist/policy/tool-availability-registry.js +77 -0
- package/dist/policy/tool-availability-registry.js.map +1 -0
- package/dist/policy/tool-policy-guard.d.ts +8 -0
- package/dist/policy/tool-policy-guard.d.ts.map +1 -0
- package/dist/policy/tool-policy-guard.js +40 -0
- package/dist/policy/tool-policy-guard.js.map +1 -0
- package/dist/policy/types.d.ts +51 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +17 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/providers.d.ts +48 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/providers.js +192 -0
- package/dist/providers.js.map +1 -0
- package/dist/reranker/index.d.ts +4 -0
- package/dist/reranker/index.d.ts.map +1 -0
- package/dist/reranker/index.js +3 -0
- package/dist/reranker/index.js.map +1 -0
- package/dist/reranker/llm-reranker.d.ts +10 -0
- package/dist/reranker/llm-reranker.d.ts.map +1 -0
- package/dist/reranker/llm-reranker.js +55 -0
- package/dist/reranker/llm-reranker.js.map +1 -0
- package/dist/reranker/noop-reranker.d.ts +6 -0
- package/dist/reranker/noop-reranker.d.ts.map +1 -0
- package/dist/reranker/noop-reranker.js +6 -0
- package/dist/reranker/noop-reranker.js.map +1 -0
- package/dist/reranker/types.d.ts +2 -0
- package/dist/reranker/types.d.ts.map +1 -0
- package/dist/reranker/types.js +2 -0
- package/dist/reranker/types.js.map +1 -0
- package/dist/resilience/rate-limiter-llm.d.ts +17 -0
- package/dist/resilience/rate-limiter-llm.d.ts.map +1 -0
- package/dist/resilience/rate-limiter-llm.js +30 -0
- package/dist/resilience/rate-limiter-llm.js.map +1 -0
- package/dist/resilience/retry-llm.d.ts +32 -0
- package/dist/resilience/retry-llm.d.ts.map +1 -0
- package/dist/resilience/retry-llm.js +103 -0
- package/dist/resilience/retry-llm.js.map +1 -0
- package/dist/resilience/token-bucket-rate-limiter.d.ts +21 -0
- package/dist/resilience/token-bucket-rate-limiter.d.ts.map +1 -0
- package/dist/resilience/token-bucket-rate-limiter.js +32 -0
- package/dist/resilience/token-bucket-rate-limiter.js.map +1 -0
- package/dist/session/index.d.ts +4 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +3 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/noop-session-manager.d.ts +8 -0
- package/dist/session/noop-session-manager.d.ts.map +1 -0
- package/dist/session/noop-session-manager.js +11 -0
- package/dist/session/noop-session-manager.js.map +1 -0
- package/dist/session/session-manager.d.ts +13 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +20 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/types.d.ts +2 -0
- package/dist/session/types.d.ts.map +1 -0
- package/dist/session/types.js +2 -0
- package/dist/session/types.js.map +1 -0
- package/dist/skills/claude-skill-manager.d.ts +24 -0
- package/dist/skills/claude-skill-manager.d.ts.map +1 -0
- package/dist/skills/claude-skill-manager.js +81 -0
- package/dist/skills/claude-skill-manager.js.map +1 -0
- package/dist/skills/codex-skill-manager.d.ts +20 -0
- package/dist/skills/codex-skill-manager.d.ts.map +1 -0
- package/dist/skills/codex-skill-manager.js +75 -0
- package/dist/skills/codex-skill-manager.js.map +1 -0
- package/dist/skills/filesystem-skill-manager.d.ts +17 -0
- package/dist/skills/filesystem-skill-manager.d.ts.map +1 -0
- package/dist/skills/filesystem-skill-manager.js +48 -0
- package/dist/skills/filesystem-skill-manager.js.map +1 -0
- package/dist/skills/filesystem-skill.d.ts +25 -0
- package/dist/skills/filesystem-skill.d.ts.map +1 -0
- package/dist/skills/filesystem-skill.js +110 -0
- package/dist/skills/filesystem-skill.js.map +1 -0
- package/dist/skills/index.d.ts +9 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +9 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-utils.d.ts +15 -0
- package/dist/skills/skill-utils.d.ts.map +1 -0
- package/dist/skills/skill-utils.js +46 -0
- package/dist/skills/skill-utils.js.map +1 -0
- package/dist/testing/index.d.ts +118 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +351 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/tracer/index.d.ts +3 -0
- package/dist/tracer/index.d.ts.map +1 -0
- package/dist/tracer/index.js +2 -0
- package/dist/tracer/index.js.map +1 -0
- package/dist/tracer/noop-tracer.d.ts +5 -0
- package/dist/tracer/noop-tracer.d.ts.map +1 -0
- package/dist/tracer/noop-tracer.js +16 -0
- package/dist/tracer/noop-tracer.js.map +1 -0
- package/dist/tracer/types.d.ts +2 -0
- package/dist/tracer/types.d.ts.map +1 -0
- package/dist/tracer/types.js +2 -0
- package/dist/tracer/types.js.map +1 -0
- package/dist/utils/lazy.d.ts +51 -0
- package/dist/utils/lazy.d.ts.map +1 -0
- package/dist/utils/lazy.js +127 -0
- package/dist/utils/lazy.js.map +1 -0
- package/dist/utils/parse-frontmatter.d.ts +15 -0
- package/dist/utils/parse-frontmatter.d.ts.map +1 -0
- package/dist/utils/parse-frontmatter.js +22 -0
- package/dist/utils/parse-frontmatter.js.map +1 -0
- package/dist/validator/index.d.ts +3 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +2 -0
- package/dist/validator/index.js.map +1 -0
- package/dist/validator/noop-validator.d.ts +6 -0
- package/dist/validator/noop-validator.d.ts.map +1 -0
- package/dist/validator/noop-validator.js +6 -0
- package/dist/validator/noop-validator.js.map +1 -0
- package/dist/validator/types.d.ts +3 -0
- package/dist/validator/types.d.ts.map +1 -0
- package/dist/validator/types.js +2 -0
- package/dist/validator/types.js.map +1 -0
- package/package.json +14 -11
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DefaultPipeline — IPipeline implementation backed by PipelineExecutor + stage handlers.
|
|
3
|
+
*
|
|
4
|
+
* This is the standard pipeline used by SmartAgent when no custom pipeline is
|
|
5
|
+
* configured. It runs one of two stage sequences, selected by
|
|
6
|
+
* {@link SmartAgentConfig.enrichedToolSearch}:
|
|
7
|
+
*
|
|
8
|
+
* **Single-phase (default):**
|
|
9
|
+
* ```text
|
|
10
|
+
* classify → summarize → parallel(rag-query tools, rag-query history, rag-query <custom>…) →
|
|
11
|
+
* rerank → skill-select → tool-select → assemble → tool-loop → history-upsert
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* **Enriched (`enrichedToolSearch: true`):** the tools RAG store is queried in
|
|
15
|
+
* a second phase driven by context from prior retrieval + selected skills:
|
|
16
|
+
* ```text
|
|
17
|
+
* classify → summarize → parallel(rag-query history, rag-query <custom>…) →
|
|
18
|
+
* rerank → skill-select → build-tool-query → rag-query tools (enriched) →
|
|
19
|
+
* tool-select → assemble → tool-loop → history-upsert
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Built-in RAG stores (`tools`, `history`) are wired from `toolsRag`/`historyRag` deps.
|
|
23
|
+
* Additional custom stores can be passed via `ragStores` and are queried in parallel
|
|
24
|
+
* with built-ins. Stores can be added/removed at runtime via `rebuildStages()`.
|
|
25
|
+
*/
|
|
26
|
+
import { NoopQueryExpander, NoopToolCache, StreamingLlmCallStrategy, } from '@mcp-abap-adt/llm-agent';
|
|
27
|
+
import { LlmClassifier } from '../classifier/llm-classifier.js';
|
|
28
|
+
import { ContextAssembler } from '../context/context-assembler.js';
|
|
29
|
+
import { NoopRequestLogger } from '../logger/noop-request-logger.js';
|
|
30
|
+
import { NoopMetrics } from '../metrics/noop-metrics.js';
|
|
31
|
+
import { PendingToolResultsRegistry } from '../policy/pending-tool-results-registry.js';
|
|
32
|
+
import { ToolAvailabilityRegistry } from '../policy/tool-availability-registry.js';
|
|
33
|
+
import { NoopReranker } from '../reranker/noop-reranker.js';
|
|
34
|
+
import { NoopSessionManager } from '../session/noop-session-manager.js';
|
|
35
|
+
import { NoopTracer } from '../tracer/noop-tracer.js';
|
|
36
|
+
import { NoopValidator } from '../validator/noop-validator.js';
|
|
37
|
+
import { PipelineExecutor } from './executor.js';
|
|
38
|
+
import { buildDefaultHandlerRegistry } from './handlers/index.js';
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Default SmartAgentConfig for standalone use
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
const DEFAULT_CONFIG = {
|
|
43
|
+
maxIterations: 10,
|
|
44
|
+
classificationEnabled: false,
|
|
45
|
+
skillInjectionEnabled: true,
|
|
46
|
+
mode: 'smart',
|
|
47
|
+
ragQueryK: 10,
|
|
48
|
+
};
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// DefaultPipeline
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* Standard IPipeline implementation that orchestrates the default SmartAgent
|
|
54
|
+
* request lifecycle via PipelineExecutor and built-in stage handlers.
|
|
55
|
+
*
|
|
56
|
+
* Usage:
|
|
57
|
+
* ```ts
|
|
58
|
+
* const pipeline = new DefaultPipeline();
|
|
59
|
+
* pipeline.initialize(deps);
|
|
60
|
+
* const result = await pipeline.execute(input, history, options, yieldChunk);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export class DefaultPipeline {
|
|
64
|
+
deps;
|
|
65
|
+
executor;
|
|
66
|
+
stages;
|
|
67
|
+
// Cached defaults (created once in initialize, reused per request)
|
|
68
|
+
resolvedTracer;
|
|
69
|
+
resolvedClassifier;
|
|
70
|
+
resolvedAssembler;
|
|
71
|
+
resolvedReranker;
|
|
72
|
+
resolvedQueryExpander;
|
|
73
|
+
resolvedToolCache;
|
|
74
|
+
resolvedOutputValidator;
|
|
75
|
+
resolvedSessionManager;
|
|
76
|
+
resolvedMetrics;
|
|
77
|
+
resolvedRequestLogger;
|
|
78
|
+
resolvedLlmCallStrategy;
|
|
79
|
+
// -------------------------------------------------------------------------
|
|
80
|
+
// IPipeline
|
|
81
|
+
// -------------------------------------------------------------------------
|
|
82
|
+
initialize(deps) {
|
|
83
|
+
this.deps = deps;
|
|
84
|
+
// Resolve all optional deps once
|
|
85
|
+
this.resolvedTracer = deps.tracer ?? new NoopTracer();
|
|
86
|
+
this.resolvedClassifier =
|
|
87
|
+
deps.classifier ?? new LlmClassifier(deps.classifierLlm ?? deps.mainLlm);
|
|
88
|
+
this.resolvedAssembler = deps.assembler ?? new ContextAssembler();
|
|
89
|
+
this.resolvedReranker = deps.reranker ?? new NoopReranker();
|
|
90
|
+
this.resolvedQueryExpander = deps.queryExpander ?? new NoopQueryExpander();
|
|
91
|
+
this.resolvedToolCache = deps.toolCache ?? new NoopToolCache();
|
|
92
|
+
this.resolvedOutputValidator = deps.outputValidator ?? new NoopValidator();
|
|
93
|
+
this.resolvedSessionManager =
|
|
94
|
+
deps.sessionManager ?? new NoopSessionManager();
|
|
95
|
+
this.resolvedMetrics = deps.metrics ?? new NoopMetrics();
|
|
96
|
+
this.resolvedRequestLogger = deps.requestLogger ?? new NoopRequestLogger();
|
|
97
|
+
this.resolvedLlmCallStrategy =
|
|
98
|
+
deps.llmCallStrategy ?? new StreamingLlmCallStrategy();
|
|
99
|
+
const registry = buildDefaultHandlerRegistry();
|
|
100
|
+
this.executor = new PipelineExecutor(registry, this.resolvedTracer);
|
|
101
|
+
// Fixed stage list — only tools + history RAG stores
|
|
102
|
+
this.stages = this._buildStages();
|
|
103
|
+
}
|
|
104
|
+
async execute(input, history, options, yieldChunk, externalTools) {
|
|
105
|
+
const rootSpan = this.resolvedTracer.startSpan('pipeline.execute');
|
|
106
|
+
const ctx = this._buildContext(input, history, options, yieldChunk, externalTools);
|
|
107
|
+
try {
|
|
108
|
+
await this.executor.executeStages(this.stages, ctx, rootSpan);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
rootSpan.setStatus('error', String(err));
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
rootSpan.end();
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
timing: ctx.timing,
|
|
118
|
+
error: ctx.error,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
rebuildStages() {
|
|
122
|
+
this.stages = this._buildStages();
|
|
123
|
+
}
|
|
124
|
+
// -------------------------------------------------------------------------
|
|
125
|
+
// Internals
|
|
126
|
+
// -------------------------------------------------------------------------
|
|
127
|
+
/**
|
|
128
|
+
* Build the fixed stage list. RAG parallel block only includes stores
|
|
129
|
+
* that were provided in deps.
|
|
130
|
+
*/
|
|
131
|
+
_buildStages() {
|
|
132
|
+
const enriched = this.deps.agentConfig?.enrichedToolSearch === true;
|
|
133
|
+
const hasToolsRag = Boolean(this.deps.toolsRag);
|
|
134
|
+
const ragChildren = [];
|
|
135
|
+
// In enriched mode, the tools store is queried separately AFTER
|
|
136
|
+
// build-tool-query so the enriched query can drive tool discovery.
|
|
137
|
+
if (hasToolsRag && !enriched) {
|
|
138
|
+
ragChildren.push({
|
|
139
|
+
id: 'rag-tools',
|
|
140
|
+
type: 'rag-query',
|
|
141
|
+
config: { store: 'tools' },
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
if (this.deps.historyRag) {
|
|
145
|
+
ragChildren.push({
|
|
146
|
+
id: 'rag-history',
|
|
147
|
+
type: 'rag-query',
|
|
148
|
+
config: { store: 'history', scope: 'session' },
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
// Custom stores — appended after built-in, same parallel block
|
|
152
|
+
if (this.deps.ragStores) {
|
|
153
|
+
for (const name of Object.keys(this.deps.ragStores)) {
|
|
154
|
+
if (name === 'tools' || name === 'history')
|
|
155
|
+
continue;
|
|
156
|
+
ragChildren.push({
|
|
157
|
+
id: `rag-${name}`,
|
|
158
|
+
type: 'rag-query',
|
|
159
|
+
config: { store: name },
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const stages = [
|
|
164
|
+
{ id: 'classify', type: 'classify' },
|
|
165
|
+
{ id: 'summarize', type: 'summarize' },
|
|
166
|
+
];
|
|
167
|
+
const needsTranslate = ragChildren.length > 0 || (enriched && hasToolsRag);
|
|
168
|
+
if (needsTranslate) {
|
|
169
|
+
// Translate non-ASCII RAG query before retrieval (enabled by default)
|
|
170
|
+
stages.push({
|
|
171
|
+
id: 'translate',
|
|
172
|
+
type: 'translate',
|
|
173
|
+
when: 'config.ragTranslateEnabled != false',
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
// First-phase retrieval: non-tool stores (enriched mode) or all stores (default).
|
|
177
|
+
if (ragChildren.length > 0) {
|
|
178
|
+
stages.push({
|
|
179
|
+
id: 'rag-retrieval',
|
|
180
|
+
type: 'parallel',
|
|
181
|
+
stages: ragChildren,
|
|
182
|
+
after: [{ id: 'rerank', type: 'rerank' }],
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
stages.push({ id: 'skill-select', type: 'skill-select' });
|
|
186
|
+
// Second-phase retrieval (enriched mode only): build the enriched
|
|
187
|
+
// query, then hit the tools RAG store with it.
|
|
188
|
+
if (enriched && hasToolsRag) {
|
|
189
|
+
stages.push({ id: 'build-tool-query', type: 'build-tool-query' });
|
|
190
|
+
stages.push({
|
|
191
|
+
id: 'rag-tools',
|
|
192
|
+
type: 'rag-query',
|
|
193
|
+
config: { store: 'tools', queryText: 'toolQueryText' },
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
stages.push({ id: 'tool-select', type: 'tool-select' }, { id: 'assemble', type: 'assemble' }, { id: 'tool-loop', type: 'tool-loop' }, { id: 'history-upsert', type: 'history-upsert' });
|
|
197
|
+
return stages;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create a PipelineContext from deps + per-request input.
|
|
201
|
+
* Mirrors the pattern in SmartAgent._runStructuredPipeline().
|
|
202
|
+
*/
|
|
203
|
+
_buildContext(input, history, options, yieldChunk, externalTools) {
|
|
204
|
+
const text = typeof input === 'string'
|
|
205
|
+
? input
|
|
206
|
+
: (input.filter((m) => m.role === 'user').slice(-1)[0]?.content ?? '');
|
|
207
|
+
// Build ragStores record — custom stores first, built-ins override by name
|
|
208
|
+
const ragStores = {
|
|
209
|
+
...(this.deps.ragStores ?? {}),
|
|
210
|
+
};
|
|
211
|
+
if (this.deps.toolsRag)
|
|
212
|
+
ragStores.tools = this.deps.toolsRag;
|
|
213
|
+
if (this.deps.historyRag)
|
|
214
|
+
ragStores.history = this.deps.historyRag;
|
|
215
|
+
return {
|
|
216
|
+
// Immutable input
|
|
217
|
+
textOrMessages: input,
|
|
218
|
+
options,
|
|
219
|
+
config: { ...DEFAULT_CONFIG, ...this.deps.agentConfig },
|
|
220
|
+
sessionId: options?.sessionId ?? 'default',
|
|
221
|
+
// Dependencies (resolved once in initialize)
|
|
222
|
+
mainLlm: this.deps.mainLlm,
|
|
223
|
+
helperLlm: this.deps.helperLlm,
|
|
224
|
+
classifierLlm: this.deps.classifierLlm ?? this.deps.mainLlm,
|
|
225
|
+
classifier: this.resolvedClassifier,
|
|
226
|
+
assembler: this.resolvedAssembler,
|
|
227
|
+
ragStores,
|
|
228
|
+
ragRegistry: this.deps.ragRegistry,
|
|
229
|
+
ragProviderRegistry: this.deps.ragProviderRegistry,
|
|
230
|
+
mcpClients: this.deps.mcpClients,
|
|
231
|
+
reranker: this.resolvedReranker,
|
|
232
|
+
queryExpander: this.resolvedQueryExpander,
|
|
233
|
+
toolCache: this.resolvedToolCache,
|
|
234
|
+
outputValidator: this.resolvedOutputValidator,
|
|
235
|
+
sessionManager: this.resolvedSessionManager,
|
|
236
|
+
tracer: this.resolvedTracer,
|
|
237
|
+
metrics: this.resolvedMetrics,
|
|
238
|
+
logger: this.deps.logger,
|
|
239
|
+
requestLogger: this.resolvedRequestLogger,
|
|
240
|
+
toolPolicy: this.deps.toolPolicy,
|
|
241
|
+
injectionDetector: this.deps.injectionDetector,
|
|
242
|
+
toolAvailabilityRegistry: new ToolAvailabilityRegistry(),
|
|
243
|
+
pendingToolResults: new PendingToolResultsRegistry(),
|
|
244
|
+
skillManager: this.deps.skillManager,
|
|
245
|
+
embedder: this.deps.embedder,
|
|
246
|
+
historyMemory: this.deps.historyMemory,
|
|
247
|
+
historySummarizer: this.deps.historySummarizer,
|
|
248
|
+
llmCallStrategy: this.resolvedLlmCallStrategy,
|
|
249
|
+
// Mutable state
|
|
250
|
+
inputText: text,
|
|
251
|
+
history: [...history],
|
|
252
|
+
subprompts: [],
|
|
253
|
+
toolClientMap: new Map(),
|
|
254
|
+
ragText: '',
|
|
255
|
+
ragResults: Object.fromEntries(Object.keys(ragStores).map((k) => [k, []])),
|
|
256
|
+
mcpTools: [],
|
|
257
|
+
selectedTools: [],
|
|
258
|
+
externalTools: externalTools ?? [],
|
|
259
|
+
assembledMessages: [],
|
|
260
|
+
activeTools: [],
|
|
261
|
+
selectedSkills: [],
|
|
262
|
+
skillContent: '',
|
|
263
|
+
skillArgs: '',
|
|
264
|
+
queryEmbedding: undefined,
|
|
265
|
+
// Control flags — DefaultPipeline always retrieves when stores exist
|
|
266
|
+
shouldRetrieve: true,
|
|
267
|
+
isAscii: true,
|
|
268
|
+
isSapRequired: false,
|
|
269
|
+
// Output
|
|
270
|
+
timing: [],
|
|
271
|
+
// Streaming callback
|
|
272
|
+
yield: yieldChunk,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
//# sourceMappingURL=default-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-pipeline.js","sourceRoot":"","sources":["../../src/pipeline/default-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PipelineExecutor — walks a stage definition tree and dispatches to handlers.
|
|
3
|
+
*
|
|
4
|
+
* The executor is the engine that interprets the structured pipeline YAML.
|
|
5
|
+
* It handles three execution modes:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Sequential** (default) — stages in a list run one after another.
|
|
8
|
+
* 2. **Parallel** — child stages run concurrently via `Promise.all`.
|
|
9
|
+
* Optional `after` stages run sequentially after all children complete.
|
|
10
|
+
* 3. **Repeat** — child stages run in a loop until a condition or max iterations.
|
|
11
|
+
*
|
|
12
|
+
* ## Condition evaluation
|
|
13
|
+
*
|
|
14
|
+
* Each stage can have a `when` field — a condition expression evaluated
|
|
15
|
+
* against the {@link PipelineContext}. If the condition is falsy, the stage
|
|
16
|
+
* is skipped. See {@link evaluateCondition} for supported expression syntax.
|
|
17
|
+
*
|
|
18
|
+
* ## Error handling
|
|
19
|
+
*
|
|
20
|
+
* If a handler returns `false` or sets `ctx.error`, the executor stops
|
|
21
|
+
* processing and propagates the error back to the caller.
|
|
22
|
+
*
|
|
23
|
+
* ## Tracing
|
|
24
|
+
*
|
|
25
|
+
* Each stage execution is wrapped in a tracer span named `pipeline.<stage.id>`.
|
|
26
|
+
* The span is passed to the handler for sub-span creation.
|
|
27
|
+
*/
|
|
28
|
+
import type { ISpan, ITracer } from '../tracer/types.js';
|
|
29
|
+
import type { PipelineContext } from './context.js';
|
|
30
|
+
import type { StageHandlerRegistry } from './handlers/index.js';
|
|
31
|
+
import type { StageDefinition } from './types.js';
|
|
32
|
+
export declare class PipelineExecutor {
|
|
33
|
+
private readonly handlers;
|
|
34
|
+
private readonly tracer;
|
|
35
|
+
constructor(handlers: StageHandlerRegistry, tracer: ITracer);
|
|
36
|
+
/**
|
|
37
|
+
* Execute a list of stages sequentially.
|
|
38
|
+
*
|
|
39
|
+
* @param stages - Stage definitions to execute in order.
|
|
40
|
+
* @param ctx - Mutable pipeline context.
|
|
41
|
+
* @param parentSpan - Parent tracing span.
|
|
42
|
+
* @returns `true` if all stages completed successfully, `false` if aborted.
|
|
43
|
+
*/
|
|
44
|
+
executeStages(stages: StageDefinition[], ctx: PipelineContext, parentSpan: ISpan): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* Execute child stages in parallel, then run `after` stages sequentially.
|
|
47
|
+
*/
|
|
48
|
+
private _executeParallel;
|
|
49
|
+
/**
|
|
50
|
+
* Execute child stages in a loop until condition or max iterations.
|
|
51
|
+
*/
|
|
52
|
+
private _executeRepeat;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/pipeline/executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,OAAO;IAGlC;;;;;;;OAOG;IACG,aAAa,CACjB,MAAM,EAAE,eAAe,EAAE,EACzB,GAAG,EAAE,eAAe,EACpB,UAAU,EAAE,KAAK,GAChB,OAAO,CAAC,OAAO,CAAC;IAyDnB;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,cAAc;CAkB7B"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PipelineExecutor — walks a stage definition tree and dispatches to handlers.
|
|
3
|
+
*
|
|
4
|
+
* The executor is the engine that interprets the structured pipeline YAML.
|
|
5
|
+
* It handles three execution modes:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Sequential** (default) — stages in a list run one after another.
|
|
8
|
+
* 2. **Parallel** — child stages run concurrently via `Promise.all`.
|
|
9
|
+
* Optional `after` stages run sequentially after all children complete.
|
|
10
|
+
* 3. **Repeat** — child stages run in a loop until a condition or max iterations.
|
|
11
|
+
*
|
|
12
|
+
* ## Condition evaluation
|
|
13
|
+
*
|
|
14
|
+
* Each stage can have a `when` field — a condition expression evaluated
|
|
15
|
+
* against the {@link PipelineContext}. If the condition is falsy, the stage
|
|
16
|
+
* is skipped. See {@link evaluateCondition} for supported expression syntax.
|
|
17
|
+
*
|
|
18
|
+
* ## Error handling
|
|
19
|
+
*
|
|
20
|
+
* If a handler returns `false` or sets `ctx.error`, the executor stops
|
|
21
|
+
* processing and propagates the error back to the caller.
|
|
22
|
+
*
|
|
23
|
+
* ## Tracing
|
|
24
|
+
*
|
|
25
|
+
* Each stage execution is wrapped in a tracer span named `pipeline.<stage.id>`.
|
|
26
|
+
* The span is passed to the handler for sub-span creation.
|
|
27
|
+
*/
|
|
28
|
+
import { evaluateCondition } from './condition-evaluator.js';
|
|
29
|
+
export class PipelineExecutor {
|
|
30
|
+
handlers;
|
|
31
|
+
tracer;
|
|
32
|
+
constructor(handlers, tracer) {
|
|
33
|
+
this.handlers = handlers;
|
|
34
|
+
this.tracer = tracer;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Execute a list of stages sequentially.
|
|
38
|
+
*
|
|
39
|
+
* @param stages - Stage definitions to execute in order.
|
|
40
|
+
* @param ctx - Mutable pipeline context.
|
|
41
|
+
* @param parentSpan - Parent tracing span.
|
|
42
|
+
* @returns `true` if all stages completed successfully, `false` if aborted.
|
|
43
|
+
*/
|
|
44
|
+
async executeStages(stages, ctx, parentSpan) {
|
|
45
|
+
for (const stage of stages) {
|
|
46
|
+
if (ctx.error)
|
|
47
|
+
return false;
|
|
48
|
+
if (ctx.options?.signal?.aborted)
|
|
49
|
+
return false;
|
|
50
|
+
// Evaluate `when` condition
|
|
51
|
+
const shouldRun = evaluateCondition(stage.when, ctx);
|
|
52
|
+
if (!shouldRun) {
|
|
53
|
+
ctx.options?.sessionLogger?.logStep(`stage_skipped_${stage.id}`, {
|
|
54
|
+
reason: stage.when,
|
|
55
|
+
});
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
const span = this.tracer.startSpan(`pipeline.${stage.id}`, {
|
|
59
|
+
parent: parentSpan,
|
|
60
|
+
attributes: { 'stage.type': stage.type },
|
|
61
|
+
});
|
|
62
|
+
const stageStart = Date.now();
|
|
63
|
+
let ok;
|
|
64
|
+
try {
|
|
65
|
+
if (stage.type === 'parallel') {
|
|
66
|
+
ok = await this._executeParallel(stage, ctx, span);
|
|
67
|
+
}
|
|
68
|
+
else if (stage.type === 'repeat') {
|
|
69
|
+
ok = await this._executeRepeat(stage, ctx, span);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
const handler = this.handlers.get(stage.type);
|
|
73
|
+
if (!handler) {
|
|
74
|
+
throw new Error(`Unknown stage type "${stage.type}" in stage "${stage.id}". ` +
|
|
75
|
+
`Available types: ${[...this.handlers.keys()].join(', ')}, parallel, repeat`);
|
|
76
|
+
}
|
|
77
|
+
ok = await handler.execute(ctx, stage.config ?? {}, span);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
span.setStatus('error', String(err));
|
|
82
|
+
span.end();
|
|
83
|
+
ctx.options?.sessionLogger?.logStep(`stage_error_${stage.id}`, {
|
|
84
|
+
error: String(err),
|
|
85
|
+
});
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
ctx.timing.push({
|
|
89
|
+
phase: stage.id,
|
|
90
|
+
duration: Date.now() - stageStart,
|
|
91
|
+
});
|
|
92
|
+
span.setStatus(ok ? 'ok' : 'error');
|
|
93
|
+
span.end();
|
|
94
|
+
if (!ok)
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Execute child stages in parallel, then run `after` stages sequentially.
|
|
101
|
+
*/
|
|
102
|
+
async _executeParallel(stage, ctx, parentSpan) {
|
|
103
|
+
if (!stage.stages?.length)
|
|
104
|
+
return true;
|
|
105
|
+
const results = await Promise.all(stage.stages.map((child) => this.executeStages([child], ctx, parentSpan)));
|
|
106
|
+
if (results.some((r) => !r))
|
|
107
|
+
return false;
|
|
108
|
+
// Run sequential `after` stages after all parallel children complete
|
|
109
|
+
if (stage.after?.length) {
|
|
110
|
+
return this.executeStages(stage.after, ctx, parentSpan);
|
|
111
|
+
}
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Execute child stages in a loop until condition or max iterations.
|
|
116
|
+
*/
|
|
117
|
+
async _executeRepeat(stage, ctx, parentSpan) {
|
|
118
|
+
const max = stage.maxIterations ?? 10;
|
|
119
|
+
for (let i = 0; i < max; i++) {
|
|
120
|
+
// Check `until` stop condition
|
|
121
|
+
if (stage.until && evaluateCondition(stage.until, ctx)) {
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
if (stage.stages) {
|
|
125
|
+
const ok = await this.executeStages(stage.stages, ctx, parentSpan);
|
|
126
|
+
if (!ok)
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/pipeline/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AssembleHandler — builds the final LLM context from action + retrieved + history.
|
|
3
|
+
*
|
|
4
|
+
* Reads: `ctx.subprompts`, `ctx.ragResults`, `ctx.mcpTools` (selected), `ctx.history`
|
|
5
|
+
* Writes: `ctx.assembledMessages`
|
|
6
|
+
*
|
|
7
|
+
* Merges multiple action subprompts into a single action, then delegates
|
|
8
|
+
* to the injected IContextAssembler.
|
|
9
|
+
*/
|
|
10
|
+
import type { ISpan } from '../../tracer/types.js';
|
|
11
|
+
import type { PipelineContext } from '../context.js';
|
|
12
|
+
import type { IStageHandler } from '../stage-handler.js';
|
|
13
|
+
export declare class AssembleHandler implements IStageHandler {
|
|
14
|
+
execute(ctx: PipelineContext, _config: Record<string, unknown>, span: ISpan): Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=assemble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/assemble.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,eAAgB,YAAW,aAAa;IAC7C,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CAoFpB"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AssembleHandler — builds the final LLM context from action + retrieved + history.
|
|
3
|
+
*
|
|
4
|
+
* Reads: `ctx.subprompts`, `ctx.ragResults`, `ctx.mcpTools` (selected), `ctx.history`
|
|
5
|
+
* Writes: `ctx.assembledMessages`
|
|
6
|
+
*
|
|
7
|
+
* Merges multiple action subprompts into a single action, then delegates
|
|
8
|
+
* to the injected IContextAssembler.
|
|
9
|
+
*/
|
|
10
|
+
import { OrchestratorError } from '../../agent.js';
|
|
11
|
+
export class AssembleHandler {
|
|
12
|
+
async execute(ctx, _config, span) {
|
|
13
|
+
const actions = ctx.subprompts.filter((sp) => sp.type === 'action');
|
|
14
|
+
// Merge multiple actions into one
|
|
15
|
+
const mainAction = actions.length > 1
|
|
16
|
+
? {
|
|
17
|
+
type: 'action',
|
|
18
|
+
text: actions.map((a) => a.text).join('\n'),
|
|
19
|
+
context: actions.find((a) => a.context)?.context,
|
|
20
|
+
dependency: 'independent',
|
|
21
|
+
}
|
|
22
|
+
: actions.length === 1
|
|
23
|
+
? actions[0]
|
|
24
|
+
: (ctx.subprompts.find((sp) => sp.type === 'chat') ??
|
|
25
|
+
ctx.subprompts[0]);
|
|
26
|
+
if (actions.length > 1) {
|
|
27
|
+
ctx.options?.sessionLogger?.logStep('actions_merged', {
|
|
28
|
+
count: actions.length,
|
|
29
|
+
actions: actions.map((a) => ({
|
|
30
|
+
text: a.text,
|
|
31
|
+
dependency: a.dependency,
|
|
32
|
+
})),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// Build retrieved context — select tools that were chosen
|
|
36
|
+
const selectedMcpTools = ctx.mcpTools.filter((t) => ctx.activeTools.some((at) => at.name === t.name));
|
|
37
|
+
const recentActions = ctx.historyMemory && ctx.config.semanticHistoryEnabled
|
|
38
|
+
? ctx.historyMemory.getRecent(ctx.sessionId, ctx.config.historyRecencyWindow ?? 3)
|
|
39
|
+
: undefined;
|
|
40
|
+
const retrieved = {
|
|
41
|
+
ragResults: ctx.ragResults,
|
|
42
|
+
tools: selectedMcpTools,
|
|
43
|
+
recentActions,
|
|
44
|
+
};
|
|
45
|
+
const result = await ctx.assembler.assemble(mainAction, retrieved, ctx.history, ctx.options);
|
|
46
|
+
if (!result.ok) {
|
|
47
|
+
ctx.error = new OrchestratorError(result.error.message, 'ASSEMBLER_ERROR');
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
ctx.assembledMessages = result.value;
|
|
51
|
+
// Inject skill content into system message (post-assembly)
|
|
52
|
+
if (ctx.skillContent) {
|
|
53
|
+
const sysMsg = ctx.assembledMessages.find((m) => m.role === 'system');
|
|
54
|
+
if (sysMsg) {
|
|
55
|
+
sysMsg.content += `\n\n## Active Skills\n${ctx.skillContent}`;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
ctx.assembledMessages.unshift({
|
|
59
|
+
role: 'system',
|
|
60
|
+
content: `## Active Skills\n${ctx.skillContent}`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
ctx.options?.sessionLogger?.logStep('final_context_assembled', {
|
|
65
|
+
messages: result.value,
|
|
66
|
+
tools: ctx.activeTools.map((t) => t.name),
|
|
67
|
+
});
|
|
68
|
+
span.setAttribute('message_count', result.value.length);
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=assemble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../../src/pipeline/handlers/assemble.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BuildToolQueryHandler — composes an enriched query text for tool/skill retrieval.
|
|
3
|
+
*
|
|
4
|
+
* Reads: `ctx.ragText`, `ctx.ragResults`, `ctx.selectedSkills`
|
|
5
|
+
* Writes: `ctx.toolQueryText`
|
|
6
|
+
*
|
|
7
|
+
* The resulting text combines the user-facing RAG query with top-K snippets
|
|
8
|
+
* already retrieved from non-tool RAG stores plus descriptions of skills
|
|
9
|
+
* selected for this request. Downstream stages configured with
|
|
10
|
+
* `queryText: 'toolQueryText'` use this to drive tool discovery, so consumers
|
|
11
|
+
* can steer tool selection by seeding domain knowledge into other RAG stores
|
|
12
|
+
* or skills.
|
|
13
|
+
*
|
|
14
|
+
* ## Config
|
|
15
|
+
*
|
|
16
|
+
* | Field | Type | Default | Description |
|
|
17
|
+
* |---------------------|---------|---------|------------------------------------------------------|
|
|
18
|
+
* | `topK` | number | 5 | Max RAG snippets (per store, top-scored) to include |
|
|
19
|
+
* | `maxChars` | number | 2000 | Hard cap on the composed text length |
|
|
20
|
+
* | `includeRagSnippets`| boolean | true | Append RAG snippets (excluding `tool:*` IDs) |
|
|
21
|
+
* | `includeSkills` | boolean | true | Append selected skill names + descriptions |
|
|
22
|
+
* | `skipStores` | string[]| [] | RAG store names to exclude from snippet source |
|
|
23
|
+
*/
|
|
24
|
+
import type { ISpan } from '../../tracer/types.js';
|
|
25
|
+
import type { PipelineContext } from '../context.js';
|
|
26
|
+
import type { IStageHandler } from '../stage-handler.js';
|
|
27
|
+
export declare class BuildToolQueryHandler implements IStageHandler {
|
|
28
|
+
execute(ctx: PipelineContext, config: Record<string, unknown>, span: ISpan): Promise<boolean>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=build-tool-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-tool-query.d.ts","sourceRoot":"","sources":["../../../src/pipeline/handlers/build-tool-query.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,qBAAsB,YAAW,aAAa;IACnD,OAAO,CACX,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,IAAI,EAAE,KAAK,GACV,OAAO,CAAC,OAAO,CAAC;CA8DpB"}
|