@mcp-abap-adt/llm-agent 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/smart-agent/agent.d.ts +24 -1
- package/dist/smart-agent/agent.d.ts.map +1 -1
- package/dist/smart-agent/agent.js +138 -23
- package/dist/smart-agent/agent.js.map +1 -1
- package/dist/smart-agent/builder.d.ts +38 -4
- package/dist/smart-agent/builder.d.ts.map +1 -1
- package/dist/smart-agent/builder.js +113 -14
- package/dist/smart-agent/builder.js.map +1 -1
- package/dist/smart-agent/cache/index.d.ts +4 -0
- package/dist/smart-agent/cache/index.d.ts.map +1 -0
- package/dist/smart-agent/cache/index.js +3 -0
- package/dist/smart-agent/cache/index.js.map +1 -0
- package/dist/smart-agent/cache/noop-tool-cache.d.ts +7 -0
- package/dist/smart-agent/cache/noop-tool-cache.d.ts.map +1 -0
- package/dist/smart-agent/cache/noop-tool-cache.js +8 -0
- package/dist/smart-agent/cache/noop-tool-cache.js.map +1 -0
- package/dist/smart-agent/cache/tool-cache.d.ts +14 -0
- package/dist/smart-agent/cache/tool-cache.d.ts.map +1 -0
- package/dist/smart-agent/cache/tool-cache.js +32 -0
- package/dist/smart-agent/cache/tool-cache.js.map +1 -0
- package/dist/smart-agent/cache/types.d.ts +7 -0
- package/dist/smart-agent/cache/types.d.ts.map +1 -0
- package/dist/smart-agent/cache/types.js +2 -0
- package/dist/smart-agent/cache/types.js.map +1 -0
- package/dist/smart-agent/config/config-watcher.d.ts +53 -0
- package/dist/smart-agent/config/config-watcher.d.ts.map +1 -0
- package/dist/smart-agent/config/config-watcher.js +105 -0
- package/dist/smart-agent/config/config-watcher.js.map +1 -0
- package/dist/smart-agent/config/index.d.ts +2 -0
- package/dist/smart-agent/config/index.d.ts.map +1 -0
- package/dist/smart-agent/config/index.js +2 -0
- package/dist/smart-agent/config/index.js.map +1 -0
- package/dist/smart-agent/config.d.ts +3 -1
- package/dist/smart-agent/config.d.ts.map +1 -1
- package/dist/smart-agent/config.js +9 -1
- package/dist/smart-agent/config.js.map +1 -1
- package/dist/smart-agent/health/health-checker.d.ts +21 -0
- package/dist/smart-agent/health/health-checker.d.ts.map +1 -0
- package/dist/smart-agent/health/health-checker.js +52 -0
- package/dist/smart-agent/health/health-checker.js.map +1 -0
- package/dist/smart-agent/health/index.d.ts +3 -0
- package/dist/smart-agent/health/index.d.ts.map +1 -0
- package/dist/smart-agent/health/index.js +2 -0
- package/dist/smart-agent/health/index.js.map +1 -0
- package/dist/smart-agent/health/types.d.ts +25 -0
- package/dist/smart-agent/health/types.d.ts.map +1 -0
- package/dist/smart-agent/health/types.js +2 -0
- package/dist/smart-agent/health/types.js.map +1 -0
- package/dist/smart-agent/interfaces/index.d.ts +6 -0
- package/dist/smart-agent/interfaces/index.d.ts.map +1 -1
- package/dist/smart-agent/interfaces/index.js.map +1 -1
- package/dist/smart-agent/metrics/in-memory-metrics.d.ts +58 -0
- package/dist/smart-agent/metrics/in-memory-metrics.d.ts.map +1 -0
- package/dist/smart-agent/metrics/in-memory-metrics.js +78 -0
- package/dist/smart-agent/metrics/in-memory-metrics.js.map +1 -0
- package/dist/smart-agent/metrics/index.d.ts +4 -0
- package/dist/smart-agent/metrics/index.d.ts.map +1 -0
- package/dist/smart-agent/metrics/index.js +3 -0
- package/dist/smart-agent/metrics/index.js.map +1 -0
- package/dist/smart-agent/metrics/noop-metrics.d.ts +17 -0
- package/dist/smart-agent/metrics/noop-metrics.d.ts.map +1 -0
- package/dist/smart-agent/metrics/noop-metrics.js +22 -0
- package/dist/smart-agent/metrics/noop-metrics.js.map +1 -0
- package/dist/smart-agent/metrics/types.d.ts +36 -0
- package/dist/smart-agent/metrics/types.d.ts.map +1 -0
- package/dist/smart-agent/metrics/types.js +9 -0
- package/dist/smart-agent/metrics/types.js.map +1 -0
- package/dist/smart-agent/pipeline.d.ts +6 -4
- package/dist/smart-agent/pipeline.d.ts.map +1 -1
- package/dist/smart-agent/pipeline.js +26 -0
- package/dist/smart-agent/pipeline.js.map +1 -1
- package/dist/smart-agent/rag/inverted-index.d.ts +26 -0
- package/dist/smart-agent/rag/inverted-index.d.ts.map +1 -0
- package/dist/smart-agent/rag/inverted-index.js +61 -0
- package/dist/smart-agent/rag/inverted-index.js.map +1 -0
- package/dist/smart-agent/rag/qdrant-rag.d.ts +26 -0
- package/dist/smart-agent/rag/qdrant-rag.d.ts.map +1 -0
- package/dist/smart-agent/rag/qdrant-rag.js +175 -0
- package/dist/smart-agent/rag/qdrant-rag.js.map +1 -0
- package/dist/smart-agent/rag/query-expander.d.ts +14 -0
- package/dist/smart-agent/rag/query-expander.d.ts.map +1 -0
- package/dist/smart-agent/rag/query-expander.js +40 -0
- package/dist/smart-agent/rag/query-expander.js.map +1 -0
- package/dist/smart-agent/rag/vector-rag.d.ts +10 -3
- package/dist/smart-agent/rag/vector-rag.d.ts.map +1 -1
- package/dist/smart-agent/rag/vector-rag.js +29 -16
- package/dist/smart-agent/rag/vector-rag.js.map +1 -1
- package/dist/smart-agent/reranker/index.d.ts +4 -0
- package/dist/smart-agent/reranker/index.d.ts.map +1 -0
- package/dist/smart-agent/reranker/index.js +3 -0
- package/dist/smart-agent/reranker/index.js.map +1 -0
- package/dist/smart-agent/reranker/llm-reranker.d.ts +10 -0
- package/dist/smart-agent/reranker/llm-reranker.d.ts.map +1 -0
- package/dist/smart-agent/reranker/llm-reranker.js +55 -0
- package/dist/smart-agent/reranker/llm-reranker.js.map +1 -0
- package/dist/smart-agent/reranker/noop-reranker.d.ts +6 -0
- package/dist/smart-agent/reranker/noop-reranker.d.ts.map +1 -0
- package/dist/smart-agent/reranker/noop-reranker.js +6 -0
- package/dist/smart-agent/reranker/noop-reranker.js.map +1 -0
- package/dist/smart-agent/reranker/types.d.ts +5 -0
- package/dist/smart-agent/reranker/types.d.ts.map +1 -0
- package/dist/smart-agent/reranker/types.js +2 -0
- package/dist/smart-agent/reranker/types.js.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts +16 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.d.ts.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.js +30 -0
- package/dist/smart-agent/resilience/circuit-breaker-embedder.js.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts +18 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.d.ts.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.js +65 -0
- package/dist/smart-agent/resilience/circuit-breaker-llm.js.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker.d.ts +36 -0
- package/dist/smart-agent/resilience/circuit-breaker.d.ts.map +1 -0
- package/dist/smart-agent/resilience/circuit-breaker.js +60 -0
- package/dist/smart-agent/resilience/circuit-breaker.js.map +1 -0
- package/dist/smart-agent/resilience/fallback-rag.d.ts +21 -0
- package/dist/smart-agent/resilience/fallback-rag.d.ts.map +1 -0
- package/dist/smart-agent/resilience/fallback-rag.js +35 -0
- package/dist/smart-agent/resilience/fallback-rag.js.map +1 -0
- package/dist/smart-agent/resilience/index.d.ts +5 -0
- package/dist/smart-agent/resilience/index.d.ts.map +1 -0
- package/dist/smart-agent/resilience/index.js +5 -0
- package/dist/smart-agent/resilience/index.js.map +1 -0
- package/dist/smart-agent/session/index.d.ts +4 -0
- package/dist/smart-agent/session/index.d.ts.map +1 -0
- package/dist/smart-agent/session/index.js +3 -0
- package/dist/smart-agent/session/index.js.map +1 -0
- package/dist/smart-agent/session/noop-session-manager.d.ts +8 -0
- package/dist/smart-agent/session/noop-session-manager.d.ts.map +1 -0
- package/dist/smart-agent/session/noop-session-manager.js +11 -0
- package/dist/smart-agent/session/noop-session-manager.js.map +1 -0
- package/dist/smart-agent/session/session-manager.d.ts +13 -0
- package/dist/smart-agent/session/session-manager.d.ts.map +1 -0
- package/dist/smart-agent/session/session-manager.js +20 -0
- package/dist/smart-agent/session/session-manager.js.map +1 -0
- package/dist/smart-agent/session/types.d.ts +7 -0
- package/dist/smart-agent/session/types.d.ts.map +1 -0
- package/dist/smart-agent/session/types.js +2 -0
- package/dist/smart-agent/session/types.js.map +1 -0
- package/dist/smart-agent/smart-server.d.ts +15 -1
- package/dist/smart-agent/smart-server.d.ts.map +1 -1
- package/dist/smart-agent/smart-server.js +73 -4
- package/dist/smart-agent/smart-server.js.map +1 -1
- package/dist/smart-agent/testing/index.d.ts +32 -0
- package/dist/smart-agent/testing/index.d.ts.map +1 -1
- package/dist/smart-agent/testing/index.js +70 -0
- package/dist/smart-agent/testing/index.js.map +1 -1
- package/dist/smart-agent/validator/index.d.ts +3 -0
- package/dist/smart-agent/validator/index.d.ts.map +1 -0
- package/dist/smart-agent/validator/index.js +2 -0
- package/dist/smart-agent/validator/index.js.map +1 -0
- package/dist/smart-agent/validator/noop-validator.d.ts +6 -0
- package/dist/smart-agent/validator/noop-validator.d.ts.map +1 -0
- package/dist/smart-agent/validator/noop-validator.js +6 -0
- package/dist/smart-agent/validator/noop-validator.js.map +1 -0
- package/dist/smart-agent/validator/types.d.ts +18 -0
- package/dist/smart-agent/validator/types.d.ts.map +1 -0
- package/dist/smart-agent/validator/types.js +8 -0
- package/dist/smart-agent/validator/types.js.map +1 -0
- package/package.json +14 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,GAGd,MAAM,qBAAqB,CAAC"}
|
|
@@ -12,8 +12,10 @@ export interface ResolveConfigArgs {
|
|
|
12
12
|
'rag-type'?: string | boolean;
|
|
13
13
|
'rag-url'?: string | boolean;
|
|
14
14
|
'rag-model'?: string | boolean;
|
|
15
|
+
'rag-collection-name'?: string | boolean;
|
|
15
16
|
'rag-vector-weight'?: string | boolean;
|
|
16
17
|
'rag-keyword-weight'?: string | boolean;
|
|
18
|
+
'qdrant-api-key'?: string | boolean;
|
|
17
19
|
'mcp-type'?: string | boolean;
|
|
18
20
|
'mcp-url'?: string | boolean;
|
|
19
21
|
'mcp-command'?: string | boolean;
|
|
@@ -24,7 +26,7 @@ export interface ResolveConfigArgs {
|
|
|
24
26
|
'log-dir'?: string;
|
|
25
27
|
mode?: string | boolean;
|
|
26
28
|
}
|
|
27
|
-
export declare const YAML_TEMPLATE = "port: 4004\nhost: 0.0.0.0\n\n# Request routing mode:\n# hard \u2014 Fully managed context. Ignores client history/system prompt. Uses RAG + internal MCP tools only.\n# pass \u2014 Transparent proxy. Logs everything but modifies nothing.\n# smart \u2014 Hybrid. Preserves client history but enriches it with RAG facts and MCP tools based on analysis. (default)\nmode: smart\n\nllm:\n apiKey: ${DEEPSEEK_API_KEY}\n model: deepseek-chat\n temperature: 0.7\n classifierTemperature: 0.1\n\nrag:\n type: ollama # ollama | in-memory\n url: http://localhost:11434\n model: nomic-embed-text\n dedupThreshold: 0.92\n vectorWeight: 0.7 # Semantic similarity weight (0..1)\n keywordWeight: 0.3 # Lexical matching weight (0..1)\n\nmcp:\n # type: none | http | stdio\n # To disable MCP, set type to 'none'\n type: http\n url: http://localhost:3001/mcp/stream/http\n\nagent:\n externalToolsValidationMode: permissive # permissive | strict\n maxIterations: 10\n maxToolCalls: 30\n toolUnavailableTtlMs: 600000 # Temporary tool blacklist TTL (ms)\n ragQueryK: 10\n showReasoning: false # Explain strategy at start of response\n historyAutoSummarizeLimit: 10 # History length to trigger compression\n\n# --- Advanced Multi-Model Pipeline (optional) -------------------------------\n# Use this section to assign different models for different internal tasks.\n# pipeline:\n# llm:\n# main:\n# provider: deepseek # deepseek | openai | anthropic\n# apiKey: ${DEEPSEEK_API_KEY}\n# model: deepseek-chat\n# temperature: 0.7\n# classifier: # optional; if absent, main config is reused\n# provider: deepseek\n# apiKey: ${DEEPSEEK_API_KEY}\n# model: deepseek-chat\n# temperature: 0.1\n# helper: # optional; if absent, main config is reused\n# provider: deepseek\n# apiKey: ${DEEPSEEK_API_KEY}\n# model: deepseek-chat\n# temperature: 0.1\n#\n# rag:\n# facts:\n# type: ollama\n# url: http://localhost:11434\n# model: nomic-embed-text\n# dedupThreshold: 0.92\n# feedback:\n# type: in-memory\n# state:\n# type: in-memory\n#\n# mcp:\n# - type: http\n# url: http://localhost:3001/mcp/stream/http\n\n# prompts:\n# system: \"You are a helpful assistant specialized in SAP ABAP development.\"\n# classifier: |\n# You are an intent classifier... (see source for full default prompt)\n# reasoning: |\n# IMPORTANT: Always start your response with a brief <reasoning> block...\n# ragTranslate: |\n# Translate the user request to English for search purposes...\n# historySummary: |\n# Summarize the conversation so far...\n\nlog: smart-server.log # path to log file; omit for stdout\n# logDir: sessions # Directory for detailed session debug logs\n";
|
|
29
|
+
export declare const YAML_TEMPLATE = "port: 4004\nhost: 0.0.0.0\n\n# Request routing mode:\n# hard \u2014 Fully managed context. Ignores client history/system prompt. Uses RAG + internal MCP tools only.\n# pass \u2014 Transparent proxy. Logs everything but modifies nothing.\n# smart \u2014 Hybrid. Preserves client history but enriches it with RAG facts and MCP tools based on analysis. (default)\nmode: smart\n\nllm:\n apiKey: ${DEEPSEEK_API_KEY}\n model: deepseek-chat\n temperature: 0.7\n classifierTemperature: 0.1\n\nrag:\n type: ollama # ollama | in-memory | qdrant\n url: http://localhost:11434\n model: nomic-embed-text\n # collectionName: llm-agent # Qdrant collection name (qdrant type only)\n dedupThreshold: 0.92\n vectorWeight: 0.7 # Semantic similarity weight (0..1)\n keywordWeight: 0.3 # Lexical matching weight (0..1)\n\nmcp:\n # type: none | http | stdio\n # To disable MCP, set type to 'none'\n type: http\n url: http://localhost:3001/mcp/stream/http\n\nagent:\n externalToolsValidationMode: permissive # permissive | strict\n maxIterations: 10\n maxToolCalls: 30\n toolUnavailableTtlMs: 600000 # Temporary tool blacklist TTL (ms)\n ragQueryK: 10\n showReasoning: false # Explain strategy at start of response\n historyAutoSummarizeLimit: 10 # History length to trigger compression\n queryExpansionEnabled: false # Expand RAG queries with LLM-generated synonyms\n toolResultCacheTtlMs: 300000 # Tool result cache TTL (ms); 0 to disable\n sessionTokenBudget: 0 # Multi-turn token budget; 0 to disable\n\n# --- Advanced Multi-Model Pipeline (optional) -------------------------------\n# Use this section to assign different models for different internal tasks.\n# pipeline:\n# llm:\n# main:\n# provider: deepseek # deepseek | openai | anthropic\n# apiKey: ${DEEPSEEK_API_KEY}\n# model: deepseek-chat\n# temperature: 0.7\n# classifier: # optional; if absent, main config is reused\n# provider: deepseek\n# apiKey: ${DEEPSEEK_API_KEY}\n# model: deepseek-chat\n# temperature: 0.1\n# helper: # optional; if absent, main config is reused\n# provider: deepseek\n# apiKey: ${DEEPSEEK_API_KEY}\n# model: deepseek-chat\n# temperature: 0.1\n#\n# rag:\n# facts:\n# type: ollama\n# url: http://localhost:11434\n# model: nomic-embed-text\n# dedupThreshold: 0.92\n# feedback:\n# type: in-memory\n# state:\n# type: in-memory\n#\n# mcp:\n# - type: http\n# url: http://localhost:3001/mcp/stream/http\n\n# prompts:\n# system: \"You are a helpful assistant specialized in SAP ABAP development.\"\n# classifier: |\n# You are an intent classifier... (see source for full default prompt)\n# reasoning: |\n# IMPORTANT: Always start your response with a brief <reasoning> block...\n# ragTranslate: |\n# Translate the user request to English for search purposes...\n# historySummary: |\n# Summarize the conversation so far...\n\nlog: smart-server.log # path to log file; omit for stdout\n# logDir: sessions # Directory for detailed session debug logs\n";
|
|
28
30
|
export declare function resolveEnvVars(value: unknown, env?: NodeJS.ProcessEnv): unknown;
|
|
29
31
|
export declare function loadYamlConfig(filePath: string, env?: NodeJS.ProcessEnv): YamlConfig;
|
|
30
32
|
export declare function generateConfigTemplate(outputPath: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/smart-agent/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/smart-agent/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,mBAAmB,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,eAAO,MAAM,aAAa,mxGA0FzB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAYT;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,UAAU,CAGZ;AAED,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAE/D;AAUD,wBAAgB,wBAAwB,CACtC,IAAI,GAAE,iBAAsB,EAC5B,IAAI,GAAE,UAAe,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAuJhC"}
|
|
@@ -19,9 +19,10 @@ llm:
|
|
|
19
19
|
classifierTemperature: 0.1
|
|
20
20
|
|
|
21
21
|
rag:
|
|
22
|
-
type: ollama # ollama | in-memory
|
|
22
|
+
type: ollama # ollama | in-memory | qdrant
|
|
23
23
|
url: http://localhost:11434
|
|
24
24
|
model: nomic-embed-text
|
|
25
|
+
# collectionName: llm-agent # Qdrant collection name (qdrant type only)
|
|
25
26
|
dedupThreshold: 0.92
|
|
26
27
|
vectorWeight: 0.7 # Semantic similarity weight (0..1)
|
|
27
28
|
keywordWeight: 0.3 # Lexical matching weight (0..1)
|
|
@@ -40,6 +41,9 @@ agent:
|
|
|
40
41
|
ragQueryK: 10
|
|
41
42
|
showReasoning: false # Explain strategy at start of response
|
|
42
43
|
historyAutoSummarizeLimit: 10 # History length to trigger compression
|
|
44
|
+
queryExpansionEnabled: false # Expand RAG queries with LLM-generated synonyms
|
|
45
|
+
toolResultCacheTtlMs: 300000 # Tool result cache TTL (ms); 0 to disable
|
|
46
|
+
sessionTokenBudget: 0 # Multi-turn token budget; 0 to disable
|
|
43
47
|
|
|
44
48
|
# --- Advanced Multi-Model Pipeline (optional) -------------------------------
|
|
45
49
|
# Use this section to assign different models for different internal tasks.
|
|
@@ -169,6 +173,9 @@ export function resolveSmartServerConfig(args = {}, yaml = {}, env = process.env
|
|
|
169
173
|
get(yaml, 'rag', 'model') ??
|
|
170
174
|
env.OLLAMA_EMBED_MODEL ??
|
|
171
175
|
'nomic-embed-text',
|
|
176
|
+
collectionName: args['rag-collection-name'] ??
|
|
177
|
+
get(yaml, 'rag', 'collectionName') ??
|
|
178
|
+
undefined,
|
|
172
179
|
dedupThreshold: Number(get(yaml, 'rag', 'dedupThreshold') ?? 0.92),
|
|
173
180
|
vectorWeight: Number(args['rag-vector-weight'] ?? get(yaml, 'rag', 'vectorWeight') ?? 0.7),
|
|
174
181
|
keywordWeight: Number(args['rag-keyword-weight'] ?? get(yaml, 'rag', 'keywordWeight') ?? 0.3),
|
|
@@ -193,6 +200,7 @@ export function resolveSmartServerConfig(args = {}, yaml = {}, env = process.env
|
|
|
193
200
|
get(yaml, 'agent', 'showReasoning') ??
|
|
194
201
|
false),
|
|
195
202
|
historyAutoSummarizeLimit: Number(get(yaml, 'agent', 'historyAutoSummarizeLimit') ?? 10),
|
|
203
|
+
queryExpansionEnabled: Boolean(get(yaml, 'agent', 'queryExpansionEnabled') ?? false),
|
|
196
204
|
},
|
|
197
205
|
prompts: promptSystem ||
|
|
198
206
|
promptClassifier ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/smart-agent/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/smart-agent/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SmartAgent } from '../agent.js';
|
|
2
|
+
import type { InMemoryMetrics } from '../metrics/in-memory-metrics.js';
|
|
3
|
+
import type { CircuitBreaker } from '../resilience/circuit-breaker.js';
|
|
4
|
+
import type { HealthStatus } from './types.js';
|
|
5
|
+
export interface HealthCheckerDeps {
|
|
6
|
+
agent: SmartAgent;
|
|
7
|
+
startTime: number;
|
|
8
|
+
version: string;
|
|
9
|
+
circuitBreakers?: CircuitBreaker[];
|
|
10
|
+
metrics?: InMemoryMetrics;
|
|
11
|
+
}
|
|
12
|
+
export declare class HealthChecker {
|
|
13
|
+
private readonly agent;
|
|
14
|
+
private readonly startTime;
|
|
15
|
+
private readonly version;
|
|
16
|
+
private readonly circuitBreakers;
|
|
17
|
+
private readonly metrics?;
|
|
18
|
+
constructor(deps: HealthCheckerDeps);
|
|
19
|
+
check(): Promise<HealthStatus>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=health-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-checker.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/health/health-checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAkB;gBAE/B,IAAI,EAAE,iBAAiB;IAQ7B,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CA6CrC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export class HealthChecker {
|
|
2
|
+
agent;
|
|
3
|
+
startTime;
|
|
4
|
+
version;
|
|
5
|
+
circuitBreakers;
|
|
6
|
+
metrics;
|
|
7
|
+
constructor(deps) {
|
|
8
|
+
this.agent = deps.agent;
|
|
9
|
+
this.startTime = deps.startTime;
|
|
10
|
+
this.version = deps.version;
|
|
11
|
+
this.circuitBreakers = deps.circuitBreakers ?? [];
|
|
12
|
+
this.metrics = deps.metrics;
|
|
13
|
+
}
|
|
14
|
+
async check() {
|
|
15
|
+
const healthResult = await this.agent.healthCheck();
|
|
16
|
+
const components = healthResult.ok
|
|
17
|
+
? healthResult.value
|
|
18
|
+
: { llm: false, rag: false, mcp: [] };
|
|
19
|
+
const cbStatuses = this.circuitBreakers.length > 0
|
|
20
|
+
? this.circuitBreakers.map((cb, i) => ({
|
|
21
|
+
index: i,
|
|
22
|
+
state: cb.state,
|
|
23
|
+
}))
|
|
24
|
+
: undefined;
|
|
25
|
+
const metricsSnapshot = this.metrics?.snapshot();
|
|
26
|
+
// Determine overall status
|
|
27
|
+
const llmOk = components.llm;
|
|
28
|
+
const ragOk = components.rag;
|
|
29
|
+
const mcpAllOk = components.mcp.length === 0 || components.mcp.every((m) => m.ok);
|
|
30
|
+
const anyCircuitOpen = this.circuitBreakers.some((cb) => cb.state === 'open');
|
|
31
|
+
let status;
|
|
32
|
+
if (!llmOk) {
|
|
33
|
+
status = 'unhealthy';
|
|
34
|
+
}
|
|
35
|
+
else if (!ragOk || !mcpAllOk || anyCircuitOpen) {
|
|
36
|
+
status = 'degraded';
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
status = 'healthy';
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
status,
|
|
43
|
+
uptime: Date.now() - this.startTime,
|
|
44
|
+
version: this.version,
|
|
45
|
+
timestamp: new Date().toISOString(),
|
|
46
|
+
components,
|
|
47
|
+
...(cbStatuses ? { circuitBreakers: cbStatuses } : {}),
|
|
48
|
+
...(metricsSnapshot ? { metrics: metricsSnapshot } : {}),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=health-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-checker.js","sourceRoot":"","sources":["../../../src/smart-agent/health/health-checker.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,aAAa;IACP,KAAK,CAAa;IAClB,SAAS,CAAS;IAClB,OAAO,CAAS;IAChB,eAAe,CAAmB;IAClC,OAAO,CAAmB;IAE3C,YAAY,IAAuB;QACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAEpD,MAAM,UAAU,GAAG,YAAY,CAAC,EAAE;YAChC,CAAC,CAAC,YAAY,CAAC,KAAK;YACpB,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAExC,MAAM,UAAU,GACd,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAC7B,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,EAAE,CAAC,KAAK;aAChB,CAAC,CAAC;YACL,CAAC,CAAC,SAAS,CAAC;QAEhB,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAEjD,2BAA2B;QAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC;QAC7B,MAAM,QAAQ,GACZ,UAAU,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC9C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,KAAK,MAAM,CAC5B,CAAC;QAEF,IAAI,MAA4C,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,cAAc,EAAE,CAAC;YACjD,MAAM,GAAG,UAAU,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QAED,OAAO;YACL,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU;YACV,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/health/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/health/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0B,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MetricsSnapshot } from '../metrics/in-memory-metrics.js';
|
|
2
|
+
import type { CircuitState } from '../resilience/circuit-breaker.js';
|
|
3
|
+
export interface HealthComponentStatus {
|
|
4
|
+
llm: boolean;
|
|
5
|
+
rag: boolean;
|
|
6
|
+
mcp: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
ok: boolean;
|
|
9
|
+
error?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
export interface CircuitBreakerStatus {
|
|
13
|
+
index: number;
|
|
14
|
+
state: CircuitState;
|
|
15
|
+
}
|
|
16
|
+
export interface HealthStatus {
|
|
17
|
+
status: 'healthy' | 'degraded' | 'unhealthy';
|
|
18
|
+
uptime: number;
|
|
19
|
+
version: string;
|
|
20
|
+
timestamp: string;
|
|
21
|
+
components: HealthComponentStatus;
|
|
22
|
+
circuitBreakers?: CircuitBreakerStatus[];
|
|
23
|
+
metrics?: MetricsSnapshot;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/health/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,qBAAqB,CAAC;IAClC,eAAe,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACzC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/smart-agent/health/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
export type { IToolCache } from '../cache/types.js';
|
|
2
|
+
export type { ICounter, IHistogram, IMetrics } from '../metrics/types.js';
|
|
3
|
+
export type { IQueryExpander } from '../rag/query-expander.js';
|
|
4
|
+
export type { IReranker } from '../reranker/types.js';
|
|
5
|
+
export type { ISessionManager } from '../session/types.js';
|
|
1
6
|
export type { ISpan, ITracer, SpanOptions, SpanStatus, } from '../tracer/types.js';
|
|
7
|
+
export type { IOutputValidator, ValidationResult, } from '../validator/types.js';
|
|
2
8
|
export type { IContextAssembler } from './assembler.js';
|
|
3
9
|
export type { ISubpromptClassifier } from './classifier.js';
|
|
4
10
|
export type { ILlm } from './llm.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/interfaces/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,OAAO,EACP,aAAa,EACb,WAAW,EACX,SAAS,EACT,MAAM,EACN,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/interfaces/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,YAAY,EACV,KAAK,EACL,OAAO,EACP,WAAW,EACX,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AACrC,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,cAAc,EACd,OAAO,EACP,WAAW,EACX,OAAO,EACP,aAAa,EACb,WAAW,EACX,SAAS,EACT,MAAM,EACN,SAAS,EACT,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/interfaces/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/interfaces/index.ts"],"names":[],"mappings":"AAuCA,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,eAAe,GAChB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { ICounter, IHistogram, IMetrics } from './types.js';
|
|
2
|
+
export interface CounterSnapshot {
|
|
3
|
+
total: number;
|
|
4
|
+
byAttributes: Map<string, number>;
|
|
5
|
+
}
|
|
6
|
+
declare class MemCounter implements ICounter {
|
|
7
|
+
private total;
|
|
8
|
+
private readonly byAttrs;
|
|
9
|
+
add(value?: number, attributes?: Record<string, string>): void;
|
|
10
|
+
snapshot(): CounterSnapshot;
|
|
11
|
+
}
|
|
12
|
+
export interface HistogramSnapshot {
|
|
13
|
+
count: number;
|
|
14
|
+
sum: number;
|
|
15
|
+
min: number;
|
|
16
|
+
max: number;
|
|
17
|
+
values: number[];
|
|
18
|
+
}
|
|
19
|
+
declare class MemHistogram implements IHistogram {
|
|
20
|
+
private readonly values;
|
|
21
|
+
record(value: number, _attributes?: Record<string, string>): void;
|
|
22
|
+
snapshot(): HistogramSnapshot;
|
|
23
|
+
/** Return the p-th percentile (0..100). */
|
|
24
|
+
percentile(p: number): number;
|
|
25
|
+
}
|
|
26
|
+
export interface MetricsSnapshot {
|
|
27
|
+
requestCount: CounterSnapshot;
|
|
28
|
+
requestLatency: HistogramSnapshot;
|
|
29
|
+
toolCallCount: CounterSnapshot;
|
|
30
|
+
ragQueryCount: CounterSnapshot;
|
|
31
|
+
classifierIntentCount: CounterSnapshot;
|
|
32
|
+
llmCallCount: CounterSnapshot;
|
|
33
|
+
llmCallLatency: HistogramSnapshot;
|
|
34
|
+
circuitBreakerTransition: CounterSnapshot;
|
|
35
|
+
toolCacheHitCount: CounterSnapshot;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* In-memory metrics collector — useful for testing and diagnostics endpoints.
|
|
39
|
+
* Call `snapshot()` to get a point-in-time view of all metrics.
|
|
40
|
+
*/
|
|
41
|
+
export declare class InMemoryMetrics implements IMetrics {
|
|
42
|
+
readonly requestCount: MemCounter;
|
|
43
|
+
readonly requestLatency: MemHistogram;
|
|
44
|
+
readonly toolCallCount: MemCounter;
|
|
45
|
+
readonly ragQueryCount: MemCounter;
|
|
46
|
+
readonly classifierIntentCount: MemCounter;
|
|
47
|
+
readonly llmCallCount: MemCounter;
|
|
48
|
+
readonly llmCallLatency: MemHistogram;
|
|
49
|
+
readonly circuitBreakerTransition: MemCounter;
|
|
50
|
+
readonly toolCacheHitCount: MemCounter;
|
|
51
|
+
snapshot(): MetricsSnapshot;
|
|
52
|
+
/** Convenience: get p-th percentile of request latency. */
|
|
53
|
+
requestLatencyPercentile(p: number): number;
|
|
54
|
+
/** Convenience: get p-th percentile of LLM call latency. */
|
|
55
|
+
llmCallLatencyPercentile(p: number): number;
|
|
56
|
+
}
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=in-memory-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-metrics.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/metrics/in-memory-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAMjE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,cAAM,UAAW,YAAW,QAAQ;IAClC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,GAAG,CAAC,KAAK,SAAI,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAWzD,QAAQ,IAAI,eAAe;CAG5B;AAMD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,cAAM,YAAa,YAAW,UAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IAEvC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIjE,QAAQ,IAAI,iBAAiB;IAW7B,2CAA2C;IAC3C,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAM9B;AAMD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,iBAAiB,CAAC;IAClC,aAAa,EAAE,eAAe,CAAC;IAC/B,aAAa,EAAE,eAAe,CAAC;IAC/B,qBAAqB,EAAE,eAAe,CAAC;IACvC,YAAY,EAAE,eAAe,CAAC;IAC9B,cAAc,EAAE,iBAAiB,CAAC;IAClC,wBAAwB,EAAE,eAAe,CAAC;IAC1C,iBAAiB,EAAE,eAAe,CAAC;CACpC;AAED;;;GAGG;AACH,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,YAAY,aAAoB;IACzC,QAAQ,CAAC,cAAc,eAAsB;IAC7C,QAAQ,CAAC,aAAa,aAAoB;IAC1C,QAAQ,CAAC,aAAa,aAAoB;IAC1C,QAAQ,CAAC,qBAAqB,aAAoB;IAClD,QAAQ,CAAC,YAAY,aAAoB;IACzC,QAAQ,CAAC,cAAc,eAAsB;IAC7C,QAAQ,CAAC,wBAAwB,aAAoB;IACrD,QAAQ,CAAC,iBAAiB,aAAoB;IAE9C,QAAQ,IAAI,eAAe;IAc3B,2DAA2D;IAC3D,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAI3C,4DAA4D;IAC5D,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;CAG5C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
class MemCounter {
|
|
2
|
+
total = 0;
|
|
3
|
+
byAttrs = new Map();
|
|
4
|
+
add(value = 1, attributes) {
|
|
5
|
+
this.total += value;
|
|
6
|
+
if (attributes) {
|
|
7
|
+
const key = Object.entries(attributes)
|
|
8
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
9
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
10
|
+
.join(',');
|
|
11
|
+
this.byAttrs.set(key, (this.byAttrs.get(key) ?? 0) + value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
snapshot() {
|
|
15
|
+
return { total: this.total, byAttributes: new Map(this.byAttrs) };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
class MemHistogram {
|
|
19
|
+
values = [];
|
|
20
|
+
record(value, _attributes) {
|
|
21
|
+
this.values.push(value);
|
|
22
|
+
}
|
|
23
|
+
snapshot() {
|
|
24
|
+
const sorted = [...this.values].sort((a, b) => a - b);
|
|
25
|
+
return {
|
|
26
|
+
count: sorted.length,
|
|
27
|
+
sum: sorted.reduce((a, b) => a + b, 0),
|
|
28
|
+
min: sorted.length > 0 ? sorted[0] : 0,
|
|
29
|
+
max: sorted.length > 0 ? sorted[sorted.length - 1] : 0,
|
|
30
|
+
values: sorted,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Return the p-th percentile (0..100). */
|
|
34
|
+
percentile(p) {
|
|
35
|
+
if (this.values.length === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
const sorted = [...this.values].sort((a, b) => a - b);
|
|
38
|
+
const idx = Math.ceil((p / 100) * sorted.length) - 1;
|
|
39
|
+
return sorted[Math.max(0, idx)];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* In-memory metrics collector — useful for testing and diagnostics endpoints.
|
|
44
|
+
* Call `snapshot()` to get a point-in-time view of all metrics.
|
|
45
|
+
*/
|
|
46
|
+
export class InMemoryMetrics {
|
|
47
|
+
requestCount = new MemCounter();
|
|
48
|
+
requestLatency = new MemHistogram();
|
|
49
|
+
toolCallCount = new MemCounter();
|
|
50
|
+
ragQueryCount = new MemCounter();
|
|
51
|
+
classifierIntentCount = new MemCounter();
|
|
52
|
+
llmCallCount = new MemCounter();
|
|
53
|
+
llmCallLatency = new MemHistogram();
|
|
54
|
+
circuitBreakerTransition = new MemCounter();
|
|
55
|
+
toolCacheHitCount = new MemCounter();
|
|
56
|
+
snapshot() {
|
|
57
|
+
return {
|
|
58
|
+
requestCount: this.requestCount.snapshot(),
|
|
59
|
+
requestLatency: this.requestLatency.snapshot(),
|
|
60
|
+
toolCallCount: this.toolCallCount.snapshot(),
|
|
61
|
+
ragQueryCount: this.ragQueryCount.snapshot(),
|
|
62
|
+
classifierIntentCount: this.classifierIntentCount.snapshot(),
|
|
63
|
+
llmCallCount: this.llmCallCount.snapshot(),
|
|
64
|
+
llmCallLatency: this.llmCallLatency.snapshot(),
|
|
65
|
+
circuitBreakerTransition: this.circuitBreakerTransition.snapshot(),
|
|
66
|
+
toolCacheHitCount: this.toolCacheHitCount.snapshot(),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Convenience: get p-th percentile of request latency. */
|
|
70
|
+
requestLatencyPercentile(p) {
|
|
71
|
+
return this.requestLatency.percentile(p);
|
|
72
|
+
}
|
|
73
|
+
/** Convenience: get p-th percentile of LLM call latency. */
|
|
74
|
+
llmCallLatencyPercentile(p) {
|
|
75
|
+
return this.llmCallLatency.percentile(p);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=in-memory-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-metrics.js","sourceRoot":"","sources":["../../../src/smart-agent/metrics/in-memory-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type CounterSnapshot, type HistogramSnapshot, InMemoryMetrics, type MetricsSnapshot, } from './in-memory-metrics.js';
|
|
2
|
+
export { NoopMetrics } from './noop-metrics.js';
|
|
3
|
+
export type { ICounter, IHistogram, IMetrics } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/smart-agent/metrics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,eAAe,GAEhB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ICounter, IHistogram, IMetrics } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* No-op metrics implementation — zero overhead.
|
|
4
|
+
* Used as the default when no metrics provider is configured.
|
|
5
|
+
*/
|
|
6
|
+
export declare class NoopMetrics implements IMetrics {
|
|
7
|
+
readonly requestCount: ICounter;
|
|
8
|
+
readonly requestLatency: IHistogram;
|
|
9
|
+
readonly toolCallCount: ICounter;
|
|
10
|
+
readonly ragQueryCount: ICounter;
|
|
11
|
+
readonly classifierIntentCount: ICounter;
|
|
12
|
+
readonly llmCallCount: ICounter;
|
|
13
|
+
readonly llmCallLatency: IHistogram;
|
|
14
|
+
readonly circuitBreakerTransition: ICounter;
|
|
15
|
+
readonly toolCacheHitCount: ICounter;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=noop-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-metrics.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/metrics/noop-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUjE;;;GAGG;AACH,qBAAa,WAAY,YAAW,QAAQ;IAC1C,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAe;IAC9C,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAiB;IACpD,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAe;IAC/C,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAe;IAC/C,QAAQ,CAAC,qBAAqB,EAAE,QAAQ,CAAe;IACvD,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAe;IAC9C,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAiB;IACpD,QAAQ,CAAC,wBAAwB,EAAE,QAAQ,CAAe;IAC1D,QAAQ,CAAC,iBAAiB,EAAE,QAAQ,CAAe;CACpD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const noopCounter = {
|
|
2
|
+
add() { },
|
|
3
|
+
};
|
|
4
|
+
const noopHistogram = {
|
|
5
|
+
record() { },
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* No-op metrics implementation — zero overhead.
|
|
9
|
+
* Used as the default when no metrics provider is configured.
|
|
10
|
+
*/
|
|
11
|
+
export class NoopMetrics {
|
|
12
|
+
requestCount = noopCounter;
|
|
13
|
+
requestLatency = noopHistogram;
|
|
14
|
+
toolCallCount = noopCounter;
|
|
15
|
+
ragQueryCount = noopCounter;
|
|
16
|
+
classifierIntentCount = noopCounter;
|
|
17
|
+
llmCallCount = noopCounter;
|
|
18
|
+
llmCallLatency = noopHistogram;
|
|
19
|
+
circuitBreakerTransition = noopCounter;
|
|
20
|
+
toolCacheHitCount = noopCounter;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=noop-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noop-metrics.js","sourceRoot":"","sources":["../../../src/smart-agent/metrics/noop-metrics.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAa;IAC5B,GAAG,KAAI,CAAC;CACT,CAAC;AAEF,MAAM,aAAa,GAAe;IAChC,MAAM,KAAI,CAAC;CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,WAAW;IACb,YAAY,GAAa,WAAW,CAAC;IACrC,cAAc,GAAe,aAAa,CAAC;IAC3C,aAAa,GAAa,WAAW,CAAC;IACtC,aAAa,GAAa,WAAW,CAAC;IACtC,qBAAqB,GAAa,WAAW,CAAC;IAC9C,YAAY,GAAa,WAAW,CAAC;IACrC,cAAc,GAAe,aAAa,CAAC;IAC3C,wBAAwB,GAAa,WAAW,CAAC;IACjD,iBAAiB,GAAa,WAAW,CAAC;CACpD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics interfaces — modeled after OTEL-compatible counters and histograms.
|
|
3
|
+
*
|
|
4
|
+
* Consumers implement `IMetrics` to plug in Prometheus, OTEL, or any metrics
|
|
5
|
+
* backend. The library ships `NoopMetrics` (zero overhead) and `InMemoryMetrics`
|
|
6
|
+
* (useful for testing and diagnostics).
|
|
7
|
+
*/
|
|
8
|
+
export interface ICounter {
|
|
9
|
+
/** Increment the counter by 1 (or a custom value). */
|
|
10
|
+
add(value?: number, attributes?: Record<string, string>): void;
|
|
11
|
+
}
|
|
12
|
+
export interface IHistogram {
|
|
13
|
+
/** Record a single observation (e.g. latency in ms). */
|
|
14
|
+
record(value: number, attributes?: Record<string, string>): void;
|
|
15
|
+
}
|
|
16
|
+
export interface IMetrics {
|
|
17
|
+
/** Total incoming requests to SmartAgent.process / streamProcess. */
|
|
18
|
+
requestCount: ICounter;
|
|
19
|
+
/** Request end-to-end latency (ms). */
|
|
20
|
+
requestLatency: IHistogram;
|
|
21
|
+
/** Number of tool calls executed (internal MCP). */
|
|
22
|
+
toolCallCount: ICounter;
|
|
23
|
+
/** Number of RAG queries executed. Attributes: store (facts|feedback|state), hit (true|false). */
|
|
24
|
+
ragQueryCount: ICounter;
|
|
25
|
+
/** Intent classifier invocation count. Attributes: intent (action|fact|feedback|state|chat). */
|
|
26
|
+
classifierIntentCount: ICounter;
|
|
27
|
+
/** LLM chat / streamChat invocations. */
|
|
28
|
+
llmCallCount: ICounter;
|
|
29
|
+
/** LLM call latency (ms). */
|
|
30
|
+
llmCallLatency: IHistogram;
|
|
31
|
+
/** Circuit breaker state transitions. Attributes: from, to, target (llm|embedder). */
|
|
32
|
+
circuitBreakerTransition: ICounter;
|
|
33
|
+
/** Tool result cache hits. */
|
|
34
|
+
toolCacheHitCount: ICounter;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/smart-agent/metrics/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,QAAQ;IACvB,sDAAsD;IACtD,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,UAAU;IACzB,wDAAwD;IACxD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,QAAQ;IACvB,qEAAqE;IACrE,YAAY,EAAE,QAAQ,CAAC;IACvB,uCAAuC;IACvC,cAAc,EAAE,UAAU,CAAC;IAC3B,oDAAoD;IACpD,aAAa,EAAE,QAAQ,CAAC;IACxB,kGAAkG;IAClG,aAAa,EAAE,QAAQ,CAAC;IACxB,gGAAgG;IAChG,qBAAqB,EAAE,QAAQ,CAAC;IAChC,yCAAyC;IACzC,YAAY,EAAE,QAAQ,CAAC;IACvB,6BAA6B;IAC7B,cAAc,EAAE,UAAU,CAAC;IAC3B,sFAAsF;IACtF,wBAAwB,EAAE,QAAQ,CAAC;IACnC,8BAA8B;IAC9B,iBAAiB,EAAE,QAAQ,CAAC;CAC7B"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metrics interfaces — modeled after OTEL-compatible counters and histograms.
|
|
3
|
+
*
|
|
4
|
+
* Consumers implement `IMetrics` to plug in Prometheus, OTEL, or any metrics
|
|
5
|
+
* backend. The library ships `NoopMetrics` (zero overhead) and `InMemoryMetrics`
|
|
6
|
+
* (useful for testing and diagnostics).
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/smart-agent/metrics/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -12,14 +12,16 @@ export interface PipelineLlmProviderConfig {
|
|
|
12
12
|
resourceGroup?: string;
|
|
13
13
|
}
|
|
14
14
|
export interface PipelineRagStoreConfig {
|
|
15
|
-
/** 'ollama' | 'openai' | 'in-memory'. Default: 'ollama' */
|
|
16
|
-
type?: 'ollama' | 'openai' | 'in-memory';
|
|
17
|
-
/** Base URL for embedding service */
|
|
15
|
+
/** 'ollama' | 'openai' | 'in-memory' | 'qdrant'. Default: 'ollama' */
|
|
16
|
+
type?: 'ollama' | 'openai' | 'in-memory' | 'qdrant';
|
|
17
|
+
/** Base URL for embedding service or Qdrant server */
|
|
18
18
|
url?: string;
|
|
19
|
-
/** API key (for openai type) */
|
|
19
|
+
/** API key (for openai type or Qdrant auth) */
|
|
20
20
|
apiKey?: string;
|
|
21
21
|
/** Embedding model name */
|
|
22
22
|
model?: string;
|
|
23
|
+
/** Qdrant collection name (required for qdrant type) */
|
|
24
|
+
collectionName?: string;
|
|
23
25
|
/** Cosine similarity dedup threshold. Default: 0.92 */
|
|
24
26
|
dedupThreshold?: number;
|
|
25
27
|
/** Weight for vector search (0..1). Default: 0.7 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/smart-agent/pipeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/smart-agent/pipeline.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAW/D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,sEAAsE;IACtE,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpD,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE;QACJ,0CAA0C;QAC1C,IAAI,EAAE,yBAAyB,CAAC;QAChC,6DAA6D;QAC7D,MAAM,CAAC,EAAE,yBAAyB,CAAC;QACnC,uFAAuF;QACvF,UAAU,CAAC,EAAE,yBAAyB,CAAC;KACxC,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,wDAAwD;QACxD,KAAK,CAAC,EAAE,sBAAsB,CAAC;QAC/B,kDAAkD;QAClD,QAAQ,CAAC,EAAE,sBAAsB,CAAC;QAClC,mCAAmC;QACnC,KAAK,CAAC,EAAE,sBAAsB,CAAC;KAChC,CAAC;IACF,4DAA4D;IAC5D,GAAG,CAAC,EAAE,KAAK,CAAC;QACV,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC,CAAC;CACJ;AAMD,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,yBAAyB,EAC9B,WAAW,EAAE,MAAM,GAClB,gBAAgB,CA6DlB;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,CA0DxE"}
|