@kilnai/core 0.1.15 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/agents/agent-rag.d.ts +21 -0
  2. package/dist/agents/agent-rag.d.ts.map +1 -0
  3. package/dist/agents/agent-rag.js +79 -0
  4. package/dist/agents/agent-rag.js.map +1 -0
  5. package/dist/agents/complexity-scorer.d.ts +8 -0
  6. package/dist/agents/complexity-scorer.d.ts.map +1 -0
  7. package/dist/agents/complexity-scorer.js +58 -0
  8. package/dist/agents/complexity-scorer.js.map +1 -0
  9. package/dist/agents/index.d.ts +14 -0
  10. package/dist/agents/index.d.ts.map +1 -1
  11. package/dist/agents/index.js +9 -0
  12. package/dist/agents/index.js.map +1 -1
  13. package/dist/agents/infrastructure/deepgram-stt.d.ts +15 -0
  14. package/dist/agents/infrastructure/deepgram-stt.d.ts.map +1 -0
  15. package/dist/agents/infrastructure/deepgram-stt.js +56 -0
  16. package/dist/agents/infrastructure/deepgram-stt.js.map +1 -0
  17. package/dist/agents/infrastructure/openai-stt.d.ts +15 -0
  18. package/dist/agents/infrastructure/openai-stt.d.ts.map +1 -0
  19. package/dist/agents/infrastructure/openai-stt.js +65 -0
  20. package/dist/agents/infrastructure/openai-stt.js.map +1 -0
  21. package/dist/agents/mcp-client.d.ts +4 -0
  22. package/dist/agents/mcp-client.d.ts.map +1 -1
  23. package/dist/agents/mcp-client.js +15 -2
  24. package/dist/agents/mcp-client.js.map +1 -1
  25. package/dist/agents/model-capability-registry.d.ts +13 -0
  26. package/dist/agents/model-capability-registry.d.ts.map +1 -0
  27. package/dist/agents/model-capability-registry.js +64 -0
  28. package/dist/agents/model-capability-registry.js.map +1 -0
  29. package/dist/agents/rules-router.d.ts +14 -0
  30. package/dist/agents/rules-router.d.ts.map +1 -0
  31. package/dist/agents/rules-router.js +59 -0
  32. package/dist/agents/rules-router.js.map +1 -0
  33. package/dist/agents/sliding-window-rate-limiter.d.ts +11 -0
  34. package/dist/agents/sliding-window-rate-limiter.d.ts.map +1 -0
  35. package/dist/agents/sliding-window-rate-limiter.js +56 -0
  36. package/dist/agents/sliding-window-rate-limiter.js.map +1 -0
  37. package/dist/agents/tool-error-classifier.d.ts +4 -0
  38. package/dist/agents/tool-error-classifier.d.ts.map +1 -0
  39. package/dist/agents/tool-error-classifier.js +32 -0
  40. package/dist/agents/tool-error-classifier.js.map +1 -0
  41. package/dist/agents/tool-execution-engine.d.ts +4 -0
  42. package/dist/agents/tool-execution-engine.d.ts.map +1 -0
  43. package/dist/agents/tool-execution-engine.js +100 -0
  44. package/dist/agents/tool-execution-engine.js.map +1 -0
  45. package/dist/cost/cost-tracker.d.ts +12 -2
  46. package/dist/cost/cost-tracker.d.ts.map +1 -1
  47. package/dist/cost/cost-tracker.js +73 -13
  48. package/dist/cost/cost-tracker.js.map +1 -1
  49. package/dist/cost/index.d.ts +11 -1
  50. package/dist/cost/index.d.ts.map +1 -1
  51. package/dist/cost/index.js +1 -1
  52. package/dist/cost/index.js.map +1 -1
  53. package/dist/domains/routing-templates.d.ts +12 -0
  54. package/dist/domains/routing-templates.d.ts.map +1 -0
  55. package/dist/domains/routing-templates.js +109 -0
  56. package/dist/domains/routing-templates.js.map +1 -0
  57. package/dist/engine/domain/capability.d.ts +2 -0
  58. package/dist/engine/domain/capability.d.ts.map +1 -1
  59. package/dist/engine/domain/chunker.d.ts +4 -0
  60. package/dist/engine/domain/chunker.d.ts.map +1 -1
  61. package/dist/engine/domain/contact-memory.d.ts +30 -0
  62. package/dist/engine/domain/contact-memory.d.ts.map +1 -0
  63. package/dist/engine/domain/contact-memory.js +4 -0
  64. package/dist/engine/domain/contact-memory.js.map +1 -0
  65. package/dist/engine/domain/knowledge-config.d.ts +26 -1
  66. package/dist/engine/domain/knowledge-config.d.ts.map +1 -1
  67. package/dist/engine/domain/knowledge-config.js +41 -3
  68. package/dist/engine/domain/knowledge-config.js.map +1 -1
  69. package/dist/engine/domain/knowledge-source.d.ts +31 -0
  70. package/dist/engine/domain/knowledge-source.d.ts.map +1 -0
  71. package/dist/engine/domain/knowledge-source.js +3 -0
  72. package/dist/engine/domain/knowledge-source.js.map +1 -0
  73. package/dist/engine/domain/model-router.d.ts +87 -0
  74. package/dist/engine/domain/model-router.d.ts.map +1 -0
  75. package/dist/engine/domain/model-router.js +4 -0
  76. package/dist/engine/domain/model-router.js.map +1 -0
  77. package/dist/engine/domain/rate-limiter.d.ts +15 -0
  78. package/dist/engine/domain/rate-limiter.d.ts.map +1 -0
  79. package/dist/engine/domain/rate-limiter.js +3 -0
  80. package/dist/engine/domain/rate-limiter.js.map +1 -0
  81. package/dist/engine/domain/tool-execution.d.ts +33 -0
  82. package/dist/engine/domain/tool-execution.d.ts.map +1 -0
  83. package/dist/engine/domain/tool-execution.js +3 -0
  84. package/dist/engine/domain/tool-execution.js.map +1 -0
  85. package/dist/engine/domain/vector-store.d.ts +1 -0
  86. package/dist/engine/domain/vector-store.d.ts.map +1 -1
  87. package/dist/engine/error-catalog.d.ts.map +1 -1
  88. package/dist/engine/error-catalog.js +110 -0
  89. package/dist/engine/error-catalog.js.map +1 -1
  90. package/dist/engine/errors.d.ts +1 -1
  91. package/dist/engine/errors.d.ts.map +1 -1
  92. package/dist/engine/errors.js.map +1 -1
  93. package/dist/engine/gateway/conversation-event.d.ts +69 -1
  94. package/dist/engine/gateway/conversation-event.d.ts.map +1 -1
  95. package/dist/engine/gateway/events-config.d.ts +4 -0
  96. package/dist/engine/gateway/events-config.d.ts.map +1 -1
  97. package/dist/engine/gateway/tenant-config.d.ts +65 -0
  98. package/dist/engine/gateway/tenant-config.d.ts.map +1 -1
  99. package/dist/engine/gateway/tenant-config.js +181 -0
  100. package/dist/engine/gateway/tenant-config.js.map +1 -1
  101. package/dist/engine/index.d.ts +6 -2
  102. package/dist/engine/index.d.ts.map +1 -1
  103. package/dist/engine/index.js.map +1 -1
  104. package/dist/engine/loader/app-loader.d.ts.map +1 -1
  105. package/dist/engine/loader/app-loader.js +41 -0
  106. package/dist/engine/loader/app-loader.js.map +1 -1
  107. package/dist/enrichment/effort-score.d.ts +7 -0
  108. package/dist/enrichment/effort-score.d.ts.map +1 -0
  109. package/dist/enrichment/effort-score.js +15 -0
  110. package/dist/enrichment/effort-score.js.map +1 -0
  111. package/dist/enrichment/enrichment-pipeline.d.ts +13 -0
  112. package/dist/enrichment/enrichment-pipeline.d.ts.map +1 -0
  113. package/dist/enrichment/enrichment-pipeline.js +191 -0
  114. package/dist/enrichment/enrichment-pipeline.js.map +1 -0
  115. package/dist/enrichment/index.d.ts +4 -0
  116. package/dist/enrichment/index.d.ts.map +1 -0
  117. package/dist/enrichment/index.js +3 -0
  118. package/dist/enrichment/index.js.map +1 -0
  119. package/dist/enrichment/types.d.ts +105 -0
  120. package/dist/enrichment/types.d.ts.map +1 -0
  121. package/dist/enrichment/types.js +3 -0
  122. package/dist/enrichment/types.js.map +1 -0
  123. package/dist/events/index.d.ts +71 -1
  124. package/dist/events/index.d.ts.map +1 -1
  125. package/dist/events/index.js +10 -0
  126. package/dist/events/index.js.map +1 -1
  127. package/dist/index.d.ts +18 -1
  128. package/dist/index.d.ts.map +1 -1
  129. package/dist/index.js +6 -0
  130. package/dist/index.js.map +1 -1
  131. package/dist/knowledge/contact-memory.d.ts +26 -0
  132. package/dist/knowledge/contact-memory.d.ts.map +1 -0
  133. package/dist/knowledge/contact-memory.js +235 -0
  134. package/dist/knowledge/contact-memory.js.map +1 -0
  135. package/dist/knowledge/contextual-enricher.d.ts +16 -0
  136. package/dist/knowledge/contextual-enricher.d.ts.map +1 -0
  137. package/dist/knowledge/contextual-enricher.js +82 -0
  138. package/dist/knowledge/contextual-enricher.js.map +1 -0
  139. package/dist/knowledge/index.d.ts +16 -0
  140. package/dist/knowledge/index.d.ts.map +1 -1
  141. package/dist/knowledge/index.js +13 -0
  142. package/dist/knowledge/index.js.map +1 -1
  143. package/dist/knowledge/infrastructure/cohere-reranker.d.ts +13 -0
  144. package/dist/knowledge/infrastructure/cohere-reranker.d.ts.map +1 -0
  145. package/dist/knowledge/infrastructure/cohere-reranker.js +61 -0
  146. package/dist/knowledge/infrastructure/cohere-reranker.js.map +1 -0
  147. package/dist/knowledge/infrastructure/composite-extractor.d.ts +8 -0
  148. package/dist/knowledge/infrastructure/composite-extractor.d.ts.map +1 -0
  149. package/dist/knowledge/infrastructure/composite-extractor.js +26 -0
  150. package/dist/knowledge/infrastructure/composite-extractor.js.map +1 -0
  151. package/dist/knowledge/infrastructure/file-extractor.d.ts +6 -0
  152. package/dist/knowledge/infrastructure/file-extractor.d.ts.map +1 -0
  153. package/dist/knowledge/infrastructure/file-extractor.js +19 -0
  154. package/dist/knowledge/infrastructure/file-extractor.js.map +1 -0
  155. package/dist/knowledge/infrastructure/json-source-store.d.ts +14 -0
  156. package/dist/knowledge/infrastructure/json-source-store.d.ts.map +1 -0
  157. package/dist/knowledge/infrastructure/json-source-store.js +56 -0
  158. package/dist/knowledge/infrastructure/json-source-store.js.map +1 -0
  159. package/dist/knowledge/infrastructure/memory-source-store.d.ts +10 -0
  160. package/dist/knowledge/infrastructure/memory-source-store.d.ts.map +1 -0
  161. package/dist/knowledge/infrastructure/memory-source-store.js +26 -0
  162. package/dist/knowledge/infrastructure/memory-source-store.js.map +1 -0
  163. package/dist/knowledge/infrastructure/memory-vector-store.d.ts +1 -0
  164. package/dist/knowledge/infrastructure/memory-vector-store.d.ts.map +1 -1
  165. package/dist/knowledge/infrastructure/memory-vector-store.js +10 -0
  166. package/dist/knowledge/infrastructure/memory-vector-store.js.map +1 -1
  167. package/dist/knowledge/infrastructure/pdf-extractor.d.ts +6 -0
  168. package/dist/knowledge/infrastructure/pdf-extractor.d.ts.map +1 -0
  169. package/dist/knowledge/infrastructure/pdf-extractor.js +46 -0
  170. package/dist/knowledge/infrastructure/pdf-extractor.js.map +1 -0
  171. package/dist/knowledge/infrastructure/pgvector-store.d.ts +29 -0
  172. package/dist/knowledge/infrastructure/pgvector-store.d.ts.map +1 -0
  173. package/dist/knowledge/infrastructure/pgvector-store.js +141 -0
  174. package/dist/knowledge/infrastructure/pgvector-store.js.map +1 -0
  175. package/dist/knowledge/infrastructure/url-extractor.d.ts +6 -0
  176. package/dist/knowledge/infrastructure/url-extractor.d.ts.map +1 -0
  177. package/dist/knowledge/infrastructure/url-extractor.js +71 -0
  178. package/dist/knowledge/infrastructure/url-extractor.js.map +1 -0
  179. package/dist/knowledge/retrieval-pipeline.d.ts +8 -1
  180. package/dist/knowledge/retrieval-pipeline.d.ts.map +1 -1
  181. package/dist/knowledge/retrieval-pipeline.js +28 -2
  182. package/dist/knowledge/retrieval-pipeline.js.map +1 -1
  183. package/dist/knowledge/source-manager.d.ts +29 -0
  184. package/dist/knowledge/source-manager.d.ts.map +1 -0
  185. package/dist/knowledge/source-manager.js +124 -0
  186. package/dist/knowledge/source-manager.js.map +1 -0
  187. package/dist/observability/span-mapper.d.ts.map +1 -1
  188. package/dist/observability/span-mapper.js +104 -0
  189. package/dist/observability/span-mapper.js.map +1 -1
  190. package/dist/safety/index.d.ts +2 -0
  191. package/dist/safety/index.d.ts.map +1 -1
  192. package/dist/safety/index.js +2 -0
  193. package/dist/safety/index.js.map +1 -1
  194. package/dist/safety/pii-scanner.d.ts.map +1 -1
  195. package/dist/safety/pii-scanner.js +18 -0
  196. package/dist/safety/pii-scanner.js.map +1 -1
  197. package/dist/safety/tool-result-sanitizer.d.ts +21 -0
  198. package/dist/safety/tool-result-sanitizer.d.ts.map +1 -0
  199. package/dist/safety/tool-result-sanitizer.js +68 -0
  200. package/dist/safety/tool-result-sanitizer.js.map +1 -0
  201. package/dist/security/annotation-authorizer.d.ts +13 -0
  202. package/dist/security/annotation-authorizer.d.ts.map +1 -0
  203. package/dist/security/annotation-authorizer.js +37 -0
  204. package/dist/security/annotation-authorizer.js.map +1 -0
  205. package/dist/security/index.d.ts +2 -0
  206. package/dist/security/index.d.ts.map +1 -1
  207. package/dist/security/index.js +1 -0
  208. package/dist/security/index.js.map +1 -1
  209. package/dist/security/types.d.ts +2 -2
  210. package/dist/security/types.d.ts.map +1 -1
  211. package/package.json +10 -2
@@ -0,0 +1,21 @@
1
+ import type { EmbeddingAdapter } from "../engine/domain/embedding.js";
2
+ import type { VectorStore } from "../engine/domain/vector-store.js";
3
+ export interface AgentDescription {
4
+ readonly id: string;
5
+ readonly name: string;
6
+ readonly role: string;
7
+ readonly goal: string;
8
+ }
9
+ export interface AgentRagResult {
10
+ readonly agentId: string;
11
+ readonly score: number;
12
+ }
13
+ export declare class AgentRAG {
14
+ private readonly embedder;
15
+ private readonly store;
16
+ private ingested;
17
+ constructor(embedder: EmbeddingAdapter, store: VectorStore);
18
+ ingestAgents(agents: readonly AgentDescription[]): Promise<void>;
19
+ selectAgent(query: string, agents: readonly AgentDescription[]): Promise<AgentRagResult | undefined>;
20
+ }
21
+ //# sourceMappingURL=agent-rag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-rag.d.ts","sourceRoot":"","sources":["../../src/agents/agent-rag.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,kCAAkC,CAAC;AAGjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW;IAKpD,YAAY,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuChE,WAAW,CACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;CAqCvC"}
@@ -0,0 +1,79 @@
1
+ // AgentRAG: embeds agent descriptions and retrieves the best-matching agent per query
2
+ import { KilnError } from "../engine/errors.js";
3
+ export class AgentRAG {
4
+ embedder;
5
+ store;
6
+ ingested = false;
7
+ constructor(embedder, store) {
8
+ this.embedder = embedder;
9
+ this.store = store;
10
+ }
11
+ async ingestAgents(agents) {
12
+ this.ingested = false;
13
+ if (agents.length === 0) {
14
+ this.ingested = true;
15
+ return;
16
+ }
17
+ const texts = [];
18
+ for (const agent of agents) {
19
+ texts.push(`${agent.name}: ${agent.role}. ${agent.goal}`);
20
+ }
21
+ try {
22
+ const embeddings = await this.embedder.embed(texts);
23
+ const entries = [];
24
+ for (let i = 0; i < agents.length; i++) {
25
+ const agent = agents[i];
26
+ const embedding = embeddings[i];
27
+ if (!embedding)
28
+ continue;
29
+ entries.push({
30
+ id: `agent:${agent.id}`,
31
+ content: texts[i],
32
+ embedding,
33
+ metadata: { agentId: agent.id },
34
+ });
35
+ }
36
+ await this.store.upsert(entries);
37
+ this.ingested = true;
38
+ }
39
+ catch (err) {
40
+ throw new KilnError("AGENT_RAG_FAILED", `Failed to ingest agents: ${err}`, {
41
+ context: { agentCount: agents.length },
42
+ cause: err,
43
+ });
44
+ }
45
+ }
46
+ async selectAgent(query, agents) {
47
+ if (!this.ingested) {
48
+ return undefined;
49
+ }
50
+ try {
51
+ const embeddings = await this.embedder.embed([query]);
52
+ const queryEmbedding = embeddings[0];
53
+ if (!queryEmbedding) {
54
+ return undefined;
55
+ }
56
+ const results = await this.store.query(queryEmbedding, { topK: 1 });
57
+ if (results.length === 0) {
58
+ return undefined;
59
+ }
60
+ const result = results[0];
61
+ const agentId = result.metadata.agentId;
62
+ if (!agentId) {
63
+ return undefined;
64
+ }
65
+ const agent = agents.find((a) => a.id === agentId);
66
+ if (!agent) {
67
+ return undefined;
68
+ }
69
+ return { agentId, score: result.score };
70
+ }
71
+ catch (err) {
72
+ throw new KilnError("AGENT_RAG_FAILED", `Failed to select agent: ${err}`, {
73
+ context: { queryLength: query.length },
74
+ cause: err,
75
+ });
76
+ }
77
+ }
78
+ }
79
+ //# sourceMappingURL=agent-rag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-rag.js","sourceRoot":"","sources":["../../src/agents/agent-rag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ComplexityScore } from "../engine/domain/model-router.js";
2
+ export interface ComplexityScorerInput {
3
+ readonly messageText: string;
4
+ readonly toolCount: number;
5
+ readonly turnDepth: number;
6
+ }
7
+ export declare function scoreComplexity(input: ComplexityScorerInput): ComplexityScore;
8
+ //# sourceMappingURL=complexity-scorer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-scorer.d.ts","sourceRoot":"","sources":["../../src/agents/complexity-scorer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,kCAAkC,CAAC;AAEzF,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAgBD,wBAAgB,eAAe,CAAC,KAAK,EAAE,qBAAqB,GAAG,eAAe,CAuC7E"}
@@ -0,0 +1,58 @@
1
+ // Complexity scorer: stateless function that estimates query complexity
2
+ // Runs in <1ms, used by model router to select appropriate model tier
3
+ const REASONING_MARKERS = [
4
+ "step by step",
5
+ "analyze",
6
+ "architect",
7
+ "debug",
8
+ "refactor",
9
+ "compare",
10
+ "evaluate",
11
+ "explain why",
12
+ "reason about",
13
+ ];
14
+ const CODE_BLOCK_PATTERN = /```[\s\S]*?```/g;
15
+ export function scoreComplexity(input) {
16
+ // 5 signals with weights
17
+ const tokenEstimate = Math.ceil(input.messageText.length / 4);
18
+ const tokenScore = Math.min(1, tokenEstimate / 2000);
19
+ const hasTools = input.toolCount > 0;
20
+ const toolScore = hasTools ? Math.min(1, input.toolCount / 10) : 0;
21
+ const hasCodeBlocks = CODE_BLOCK_PATTERN.test(input.messageText);
22
+ const codeScore = hasCodeBlocks ? 1 : 0;
23
+ const lowerMessage = input.messageText.toLowerCase();
24
+ const hasReasoningMarkers = REASONING_MARKERS.some((m) => lowerMessage.includes(m));
25
+ const reasoningScore = hasReasoningMarkers ? 1 : 0;
26
+ const turnScore = Math.min(1, input.turnDepth / 20);
27
+ // Weighted combination
28
+ const score = tokenScore * 0.3 +
29
+ toolScore * 0.25 +
30
+ codeScore * 0.2 +
31
+ reasoningScore * 0.15 +
32
+ turnScore * 0.1;
33
+ const complexityClass = classifyComplexity(score);
34
+ return {
35
+ score,
36
+ class: complexityClass,
37
+ signals: {
38
+ tokenCount: tokenEstimate,
39
+ hasTools,
40
+ toolCount: input.toolCount,
41
+ hasCodeBlocks,
42
+ hasReasoningMarkers,
43
+ turnDepth: input.turnDepth,
44
+ },
45
+ };
46
+ }
47
+ function classifyComplexity(score) {
48
+ if (score < 0.2)
49
+ return "trivial";
50
+ if (score < 0.4)
51
+ return "simple";
52
+ if (score < 0.6)
53
+ return "moderate";
54
+ if (score < 0.8)
55
+ return "complex";
56
+ return "expert";
57
+ }
58
+ //# sourceMappingURL=complexity-scorer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complexity-scorer.js","sourceRoot":"","sources":["../../src/agents/complexity-scorer.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,sEAAsE;AAUtE,MAAM,iBAAiB,GAAG;IACxB,cAAc;IACd,SAAS;IACT,WAAW;IACX,OAAO;IACP,UAAU;IACV,SAAS;IACT,UAAU;IACV,aAAa;IACb,cAAc;CACf,CAAC;AAEF,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAE7C,MAAM,UAAU,eAAe,CAAC,KAA4B;IAC1D,yBAAyB;IACzB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC,CAAC;IAErD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACrD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;IAEpD,uBAAuB;IACvB,MAAM,KAAK,GACT,UAAU,GAAG,GAAG;QAChB,SAAS,GAAG,IAAI;QAChB,SAAS,GAAG,GAAG;QACf,cAAc,GAAG,IAAI;QACrB,SAAS,GAAG,GAAG,CAAC;IAElB,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IAElD,OAAO;QACL,KAAK;QACL,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE;YACP,UAAU,EAAE,aAAa;YACzB,QAAQ;YACR,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa;YACb,mBAAmB;YACnB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -78,4 +78,18 @@ export { compressContext } from "./context-compressor.js";
78
78
  export type { CompressOptions } from "./context-compressor.js";
79
79
  export { McpClient } from "./mcp-client.js";
80
80
  export { ToolRAG } from "./tool-rag.js";
81
+ export { AgentRAG } from "./agent-rag.js";
82
+ export type { AgentDescription, AgentRagResult } from "./agent-rag.js";
83
+ export { OpenAISttAdapter } from "./infrastructure/openai-stt.js";
84
+ export type { OpenAISttConfig } from "./infrastructure/openai-stt.js";
85
+ export { DeepgramSttAdapter } from "./infrastructure/deepgram-stt.js";
86
+ export type { DeepgramSttConfig } from "./infrastructure/deepgram-stt.js";
87
+ export { classifyToolError } from "./tool-error-classifier.js";
88
+ export { executeWithRetry } from "./tool-execution-engine.js";
89
+ export type { ToolExecutor } from "./tool-execution-engine.js";
90
+ export { SlidingWindowRateLimiter } from "./sliding-window-rate-limiter.js";
91
+ export { ModelCapabilityRegistry } from "./model-capability-registry.js";
92
+ export { scoreComplexity } from "./complexity-scorer.js";
93
+ export type { ComplexityScorerInput } from "./complexity-scorer.js";
94
+ export { RulesRouter } from "./rules-router.js";
81
95
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;CAChF;AAED,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,2BAA2B;AAC3B,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,sCAAsC;AACtC,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,oCAAoC;AACpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,CAAC;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;CAChF;AAED,2CAA2C;AAC3C,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,qCAAqC;AACrC,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,6BAA6B;AAC7B,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACpC;AAED,2BAA2B;AAC3B,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,YAAY,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -10,4 +10,13 @@ export { ToolCache } from "./tool-cache.js";
10
10
  export { compressContext } from "./context-compressor.js";
11
11
  export { McpClient } from "./mcp-client.js";
12
12
  export { ToolRAG } from "./tool-rag.js";
13
+ export { AgentRAG } from "./agent-rag.js";
14
+ export { OpenAISttAdapter } from "./infrastructure/openai-stt.js";
15
+ export { DeepgramSttAdapter } from "./infrastructure/deepgram-stt.js";
16
+ export { classifyToolError } from "./tool-error-classifier.js";
17
+ export { executeWithRetry } from "./tool-execution-engine.js";
18
+ export { SlidingWindowRateLimiter } from "./sliding-window-rate-limiter.js";
19
+ export { ModelCapabilityRegistry } from "./model-capability-registry.js";
20
+ export { scoreComplexity } from "./complexity-scorer.js";
21
+ export { RulesRouter } from "./rules-router.js";
13
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAuEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAuB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAuEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,YAAY,GACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAuB,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SttAdapter, SttResult } from "../../engine/domain/speech-config.js";
2
+ export interface DeepgramSttConfig {
3
+ readonly apiKey: string;
4
+ readonly model?: string;
5
+ readonly language?: string;
6
+ }
7
+ export declare class DeepgramSttAdapter implements SttAdapter {
8
+ readonly name = "deepgram";
9
+ private readonly apiKey;
10
+ private readonly model;
11
+ private readonly language;
12
+ constructor(config: DeepgramSttConfig);
13
+ transcribe(audio: Uint8Array, mimeType: string): Promise<SttResult>;
14
+ }
15
+ //# sourceMappingURL=deepgram-stt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram-stt.d.ts","sourceRoot":"","sources":["../../../src/agents/infrastructure/deepgram-stt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAIlF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAgBD,qBAAa,kBAAmB,YAAW,UAAU;IACnD,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAElC,MAAM,EAAE,iBAAiB;IAM/B,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAkD1E"}
@@ -0,0 +1,56 @@
1
+ import { KilnError } from "../../engine/errors.js";
2
+ import { withRetry } from "./retry.js";
3
+ export class DeepgramSttAdapter {
4
+ name = "deepgram";
5
+ apiKey;
6
+ model;
7
+ language;
8
+ constructor(config) {
9
+ this.apiKey = config.apiKey;
10
+ this.model = config.model ?? "nova-3";
11
+ this.language = config.language;
12
+ }
13
+ async transcribe(audio, mimeType) {
14
+ let url = `https://api.deepgram.com/v1/listen?model=${this.model}`;
15
+ if (this.language) {
16
+ url += `&language=${this.language}`;
17
+ }
18
+ const data = await withRetry(async () => {
19
+ const response = await fetch(url, {
20
+ method: "POST",
21
+ headers: {
22
+ Authorization: `Token ${this.apiKey}`,
23
+ "Content-Type": mimeType,
24
+ },
25
+ body: audio.buffer,
26
+ });
27
+ if (!response.ok) {
28
+ const status = response.status;
29
+ if (status === 429 || status >= 500) {
30
+ const err = new Error(`Deepgram STT returned ${status}`);
31
+ err.status = status;
32
+ throw err;
33
+ }
34
+ const body = await response.text();
35
+ throw new KilnError("STT_FAILED", `Deepgram STT error ${status}: ${body}`, {
36
+ context: { provider: "deepgram", status },
37
+ retryable: false,
38
+ });
39
+ }
40
+ return response.json();
41
+ }, {
42
+ maxRetries: 3,
43
+ baseDelayMs: 1000,
44
+ isRetryable: (error) => !(error instanceof KilnError) &&
45
+ error instanceof Error &&
46
+ "status" in error,
47
+ });
48
+ const firstAlternative = data.results.channels[0]?.alternatives[0];
49
+ return {
50
+ text: firstAlternative?.transcript ?? "",
51
+ confidence: firstAlternative?.confidence,
52
+ durationMs: Math.round(data.metadata.duration * 1000),
53
+ };
54
+ }
55
+ }
56
+ //# sourceMappingURL=deepgram-stt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepgram-stt.js","sourceRoot":"","sources":["../../../src/agents/infrastructure/deepgram-stt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsBvC,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,UAAU,CAAC;IACV,MAAM,CAAS;IACf,KAAK,CAAS;IACd,QAAQ,CAAqB;IAE9C,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,QAAQ,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAiB,EAAE,QAAgB;QAClD,IAAI,GAAG,GAAG,4CAA4C,IAAI,CAAC,KAAK,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,GAAG,IAAI,aAAa,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,SAAS,CAC1B,KAAK,IAAI,EAAE;YACT,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,aAAa,EAAE,SAAS,IAAI,CAAC,MAAM,EAAE;oBACrC,cAAc,EAAE,QAAQ;iBACzB;gBACD,IAAI,EAAE,KAAK,CAAC,MAAqB;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;gBAC/B,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;oBACpC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;oBACxD,GAAyC,CAAC,MAAM,GAAG,MAAM,CAAC;oBAC3D,MAAM,GAAG,CAAC;gBACZ,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,IAAI,SAAS,CAAC,YAAY,EAAE,sBAAsB,MAAM,KAAK,IAAI,EAAE,EAAE;oBACzE,OAAO,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE;oBACzC,SAAS,EAAE,KAAK;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,QAAQ,CAAC,IAAI,EAA+B,CAAC;QACtD,CAAC,EACD;YACE,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,CAAC,KAAc,EAAE,EAAE,CAC9B,CAAC,CAAC,KAAK,YAAY,SAAS,CAAC;gBAC7B,KAAK,YAAY,KAAK;gBACtB,QAAQ,IAAI,KAAK;SACpB,CACF,CAAC;QAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO;YACL,IAAI,EAAE,gBAAgB,EAAE,UAAU,IAAI,EAAE;YACxC,UAAU,EAAE,gBAAgB,EAAE,UAAU;YACxC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { SttAdapter, SttResult } from "../../engine/domain/speech-config.js";
2
+ export interface OpenAISttConfig {
3
+ readonly apiKey: string;
4
+ readonly model?: string;
5
+ readonly language?: string;
6
+ }
7
+ export declare class OpenAISttAdapter implements SttAdapter {
8
+ readonly name = "openai";
9
+ private readonly apiKey;
10
+ private readonly model;
11
+ private readonly language;
12
+ constructor(config: OpenAISttConfig);
13
+ transcribe(audio: Uint8Array, mimeType: string): Promise<SttResult>;
14
+ }
15
+ //# sourceMappingURL=openai-stt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-stt.d.ts","sourceRoot":"","sources":["../../../src/agents/infrastructure/openai-stt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAIlF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAYD,qBAAa,gBAAiB,YAAW,UAAU;IACjD,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAElC,MAAM,EAAE,eAAe;IAM7B,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;CAqD1E"}
@@ -0,0 +1,65 @@
1
+ import { KilnError } from "../../engine/errors.js";
2
+ import { withRetry } from "./retry.js";
3
+ const MIME_TO_EXT = {
4
+ "audio/ogg": "audio.ogg",
5
+ "audio/mpeg": "audio.mp3",
6
+ "audio/mp3": "audio.mp3",
7
+ "audio/wav": "audio.wav",
8
+ "audio/webm": "audio.webm",
9
+ "audio/mp4": "audio.mp4",
10
+ "audio/flac": "audio.flac",
11
+ };
12
+ export class OpenAISttAdapter {
13
+ name = "openai";
14
+ apiKey;
15
+ model;
16
+ language;
17
+ constructor(config) {
18
+ this.apiKey = config.apiKey;
19
+ this.model = config.model ?? "gpt-4o-transcribe";
20
+ this.language = config.language;
21
+ }
22
+ async transcribe(audio, mimeType) {
23
+ const filename = MIME_TO_EXT[mimeType] ?? "audio.bin";
24
+ const formData = new FormData();
25
+ formData.append("file", new Blob([audio.buffer], { type: mimeType }), filename);
26
+ formData.append("model", this.model);
27
+ formData.append("response_format", "verbose_json");
28
+ if (this.language) {
29
+ formData.append("language", this.language);
30
+ }
31
+ const data = await withRetry(async () => {
32
+ const response = await fetch("https://api.openai.com/v1/audio/transcriptions", {
33
+ method: "POST",
34
+ headers: { Authorization: `Bearer ${this.apiKey}` },
35
+ body: formData,
36
+ });
37
+ if (!response.ok) {
38
+ const status = response.status;
39
+ if (status === 429 || status >= 500) {
40
+ const err = new Error(`OpenAI STT returned ${status}`);
41
+ err.status = status;
42
+ throw err;
43
+ }
44
+ const body = await response.text();
45
+ throw new KilnError("STT_FAILED", `OpenAI STT error ${status}: ${body}`, {
46
+ context: { provider: "openai", status },
47
+ retryable: false,
48
+ });
49
+ }
50
+ return response.json();
51
+ }, {
52
+ maxRetries: 3,
53
+ baseDelayMs: 1000,
54
+ isRetryable: (error) => !(error instanceof KilnError) &&
55
+ error instanceof Error &&
56
+ "status" in error,
57
+ });
58
+ return {
59
+ text: data.text,
60
+ confidence: undefined,
61
+ durationMs: data.duration ? Math.round(data.duration * 1000) : undefined,
62
+ };
63
+ }
64
+ }
65
+ //# sourceMappingURL=openai-stt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-stt.js","sourceRoot":"","sources":["../../../src/agents/infrastructure/openai-stt.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,20 @@
1
1
  import type { Capability } from "../engine/domain/capability.js";
2
2
  import type { McpServerConfig } from "../engine/domain/mcp-config.js";
3
+ import type { PromptScanner } from "../security/prompt-scanner.js";
3
4
  export interface McpClientOptions {
4
5
  /** Override the client name reported to MCP servers */
5
6
  readonly clientName?: string;
6
7
  /** Override the client version reported to MCP servers */
7
8
  readonly clientVersion?: string;
9
+ /** Optional prompt scanner to filter tools with injection patterns in descriptions */
10
+ readonly promptScanner?: PromptScanner;
8
11
  }
9
12
  export declare class McpClient {
10
13
  readonly serverName: string;
11
14
  private readonly config;
12
15
  private readonly clientName;
13
16
  private readonly clientVersion;
17
+ private readonly promptScanner?;
14
18
  private client;
15
19
  constructor(config: McpServerConfig, options?: McpClientOptions);
16
20
  connect(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/agents/mcp-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,gCAAgC,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOtE,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBAAa,SAAS;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAOzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,aAAa,IAAI,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAiB/C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoChF,OAAO,CAAC,mBAAmB;CA0B5B"}
1
+ {"version":3,"file":"mcp-client.d.ts","sourceRoot":"","sources":["../../src/agents/mcp-client.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAyB,MAAM,gCAAgC,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAMnE,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,sFAAsF;IACtF,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;CACxC;AAED,qBAAa,SAAS;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAgB;IAC/C,OAAO,CAAC,MAAM,CAAqB;gBAEvB,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,gBAAgB;IAQzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,aAAa,IAAI,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC;IAgC/C,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoChF,OAAO,CAAC,mBAAmB;CA0B5B"}
@@ -4,18 +4,20 @@ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/
4
4
  import { KilnError } from "../engine/errors.js";
5
5
  /** Package identity for MCP client registration */
6
6
  const CLIENT_NAME = "kilnai";
7
- const CLIENT_VERSION = "0.2.1";
7
+ const CLIENT_VERSION = "0.5.0";
8
8
  export class McpClient {
9
9
  serverName;
10
10
  config;
11
11
  clientName;
12
12
  clientVersion;
13
+ promptScanner;
13
14
  client;
14
15
  constructor(config, options) {
15
16
  this.serverName = config.name;
16
17
  this.config = config;
17
18
  this.clientName = options?.clientName ?? CLIENT_NAME;
18
19
  this.clientVersion = options?.clientVersion ?? CLIENT_VERSION;
20
+ this.promptScanner = options?.promptScanner;
19
21
  }
20
22
  async connect() {
21
23
  if (!this.config.url) {
@@ -39,7 +41,18 @@ export class McpClient {
39
41
  }
40
42
  try {
41
43
  const result = await this.client.listTools();
42
- return result.tools.map((tool) => this.mapToolToCapability(tool));
44
+ const capabilities = [];
45
+ for (const tool of result.tools) {
46
+ if (this.promptScanner && tool.description) {
47
+ const scanResult = this.promptScanner.scanHeuristic(tool.description);
48
+ if (!scanResult.safe) {
49
+ console.warn(`[McpClient] Skipping MCP tool "${tool.name}" from server "${this.serverName}": description contains injection patterns (${scanResult.threats.map((t) => t.pattern).join(", ")})`);
50
+ continue;
51
+ }
52
+ }
53
+ capabilities.push(this.mapToolToCapability(tool));
54
+ }
55
+ return capabilities;
43
56
  }
44
57
  catch (err) {
45
58
  if (err instanceof KilnError)
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/agents/mcp-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-client.js","sourceRoot":"","sources":["../../src/agents/mcp-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { ModelCapabilityProfile } from "../engine/domain/model-router.js";
2
+ export declare class ModelCapabilityRegistry {
3
+ /** Get capability profile for a specific model */
4
+ get(model: string): ModelCapabilityProfile | undefined;
5
+ /** Return models that support the required capabilities */
6
+ eligible(request: {
7
+ hasTools: boolean;
8
+ requiresStreaming: boolean;
9
+ }): readonly ModelCapabilityProfile[];
10
+ /** Return all known model profiles */
11
+ all(): readonly ModelCapabilityProfile[];
12
+ }
13
+ //# sourceMappingURL=model-capability-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-capability-registry.d.ts","sourceRoot":"","sources":["../../src/agents/model-capability-registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAuD/E,qBAAa,uBAAuB;IAClC,kDAAkD;IAClD,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAItD,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,sBAAsB,EAAE;IAQvG,sCAAsC;IACtC,GAAG,IAAI,SAAS,sBAAsB,EAAE;CAGzC"}
@@ -0,0 +1,64 @@
1
+ // Model capability registry: static capability profiles for all known models
2
+ // Built from MODEL_CATALOG pricing data + hardcoded capability flags per provider
3
+ import { MODEL_CATALOG } from "./model-pricing.js";
4
+ const MODEL_CAPABILITIES = new Map([
5
+ // Anthropic
6
+ ["claude-opus-4-6", { supportsTools: true, supportsStreaming: true, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 200_000 }],
7
+ ["claude-sonnet-4-6", { supportsTools: true, supportsStreaming: true, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 200_000 }],
8
+ ["claude-haiku-4-5-20251001", { supportsTools: true, supportsStreaming: true, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 200_000 }],
9
+ // OpenAI
10
+ ["gpt-4o", { supportsTools: true, supportsStreaming: true, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 128_000 }],
11
+ ["gpt-4o-mini", { supportsTools: true, supportsStreaming: true, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 128_000 }],
12
+ ["o3", { supportsTools: true, supportsStreaming: false, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 200_000 }],
13
+ ["o3-mini", { supportsTools: true, supportsStreaming: false, supportsStructuredOutput: true, supportsVision: true, supportsAudio: false, maxContextTokens: 200_000 }],
14
+ // DeepSeek
15
+ ["deepseek-chat", { supportsTools: true, supportsStreaming: true, supportsStructuredOutput: true, supportsVision: false, supportsAudio: false, maxContextTokens: 64_000 }],
16
+ ["deepseek-reasoner", { supportsTools: false, supportsStreaming: true, supportsStructuredOutput: false, supportsVision: false, supportsAudio: false, maxContextTokens: 64_000 }],
17
+ // Ollama / Local
18
+ ["ollama-local", { supportsTools: false, supportsStreaming: true, supportsStructuredOutput: false, supportsVision: false, supportsAudio: false, maxContextTokens: 128_000 }],
19
+ ]);
20
+ function buildProfiles() {
21
+ const map = new Map();
22
+ for (const entry of MODEL_CATALOG) {
23
+ const caps = MODEL_CAPABILITIES.get(entry.model);
24
+ if (!caps)
25
+ continue;
26
+ map.set(entry.model, {
27
+ provider: entry.provider,
28
+ model: entry.model,
29
+ supportsTools: caps.supportsTools,
30
+ supportsStreaming: caps.supportsStreaming,
31
+ supportsStructuredOutput: caps.supportsStructuredOutput,
32
+ supportsVision: caps.supportsVision,
33
+ supportsAudio: caps.supportsAudio,
34
+ maxContextTokens: caps.maxContextTokens,
35
+ qualityTier: entry.qualityTier,
36
+ inputPer1M: entry.inputPer1M,
37
+ outputPer1M: entry.outputPer1M,
38
+ });
39
+ }
40
+ return map;
41
+ }
42
+ const PROFILES = buildProfiles();
43
+ const ALL_PROFILES = Array.from(PROFILES.values());
44
+ export class ModelCapabilityRegistry {
45
+ /** Get capability profile for a specific model */
46
+ get(model) {
47
+ return PROFILES.get(model);
48
+ }
49
+ /** Return models that support the required capabilities */
50
+ eligible(request) {
51
+ return ALL_PROFILES.filter((p) => {
52
+ if (request.hasTools && !p.supportsTools)
53
+ return false;
54
+ if (request.requiresStreaming && !p.supportsStreaming)
55
+ return false;
56
+ return true;
57
+ });
58
+ }
59
+ /** Return all known model profiles */
60
+ all() {
61
+ return ALL_PROFILES;
62
+ }
63
+ }
64
+ //# sourceMappingURL=model-capability-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-capability-registry.js","sourceRoot":"","sources":["../../src/agents/model-capability-registry.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,kFAAkF;AAGlF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYnD,MAAM,kBAAkB,GAAyC,IAAI,GAAG,CAAC;IACvE,YAAY;IACZ,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC5K,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAC9K,CAAC,2BAA2B,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IACtL,SAAS;IACT,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IACnK,CAAC,aAAa,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IACxK,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IAChK,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;IACrK,WAAW;IACX,CAAC,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC1K,CAAC,mBAAmB,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAChL,iBAAiB;IACjB,CAAC,cAAc,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;CAC7K,CAAC,CAAC;AAEH,SAAS,aAAa;IACpB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkC,CAAC;IACtD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE;YACnB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;YACvD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,QAAQ,GAAG,aAAa,EAAE,CAAC;AACjC,MAAM,YAAY,GAAsC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;AAEtF,MAAM,OAAO,uBAAuB;IAClC,kDAAkD;IAClD,GAAG,CAAC,KAAa;QACf,OAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,2DAA2D;IAC3D,QAAQ,CAAC,OAA0D;QACjE,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAC/B,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,aAAa;gBAAE,OAAO,KAAK,CAAC;YACvD,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,CAAC,CAAC,iBAAiB;gBAAE,OAAO,KAAK,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sCAAsC;IACtC,GAAG;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,14 @@
1
+ import type { ModelRouter, RoutingRequest, RoutingDecision, RoutingRule } from "../engine/domain/model-router.js";
2
+ import type { ModelCapabilityRegistry } from "./model-capability-registry.js";
3
+ export declare class RulesRouter implements ModelRouter {
4
+ private readonly rules;
5
+ private readonly defaultTarget;
6
+ private readonly registry;
7
+ constructor(rules: readonly RoutingRule[], defaultTarget: {
8
+ readonly provider: string;
9
+ readonly model: string;
10
+ }, registry: ModelCapabilityRegistry);
11
+ route(request: RoutingRequest): RoutingDecision;
12
+ private evaluateCondition;
13
+ }
14
+ //# sourceMappingURL=rules-router.d.ts.map