@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.
- package/dist/agents/agent-rag.d.ts +21 -0
- package/dist/agents/agent-rag.d.ts.map +1 -0
- package/dist/agents/agent-rag.js +79 -0
- package/dist/agents/agent-rag.js.map +1 -0
- package/dist/agents/complexity-scorer.d.ts +8 -0
- package/dist/agents/complexity-scorer.d.ts.map +1 -0
- package/dist/agents/complexity-scorer.js +58 -0
- package/dist/agents/complexity-scorer.js.map +1 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +9 -0
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/infrastructure/deepgram-stt.d.ts +15 -0
- package/dist/agents/infrastructure/deepgram-stt.d.ts.map +1 -0
- package/dist/agents/infrastructure/deepgram-stt.js +56 -0
- package/dist/agents/infrastructure/deepgram-stt.js.map +1 -0
- package/dist/agents/infrastructure/openai-stt.d.ts +15 -0
- package/dist/agents/infrastructure/openai-stt.d.ts.map +1 -0
- package/dist/agents/infrastructure/openai-stt.js +65 -0
- package/dist/agents/infrastructure/openai-stt.js.map +1 -0
- package/dist/agents/mcp-client.d.ts +4 -0
- package/dist/agents/mcp-client.d.ts.map +1 -1
- package/dist/agents/mcp-client.js +15 -2
- package/dist/agents/mcp-client.js.map +1 -1
- package/dist/agents/model-capability-registry.d.ts +13 -0
- package/dist/agents/model-capability-registry.d.ts.map +1 -0
- package/dist/agents/model-capability-registry.js +64 -0
- package/dist/agents/model-capability-registry.js.map +1 -0
- package/dist/agents/rules-router.d.ts +14 -0
- package/dist/agents/rules-router.d.ts.map +1 -0
- package/dist/agents/rules-router.js +59 -0
- package/dist/agents/rules-router.js.map +1 -0
- package/dist/agents/sliding-window-rate-limiter.d.ts +11 -0
- package/dist/agents/sliding-window-rate-limiter.d.ts.map +1 -0
- package/dist/agents/sliding-window-rate-limiter.js +56 -0
- package/dist/agents/sliding-window-rate-limiter.js.map +1 -0
- package/dist/agents/tool-error-classifier.d.ts +4 -0
- package/dist/agents/tool-error-classifier.d.ts.map +1 -0
- package/dist/agents/tool-error-classifier.js +32 -0
- package/dist/agents/tool-error-classifier.js.map +1 -0
- package/dist/agents/tool-execution-engine.d.ts +4 -0
- package/dist/agents/tool-execution-engine.d.ts.map +1 -0
- package/dist/agents/tool-execution-engine.js +100 -0
- package/dist/agents/tool-execution-engine.js.map +1 -0
- package/dist/cost/cost-tracker.d.ts +12 -2
- package/dist/cost/cost-tracker.d.ts.map +1 -1
- package/dist/cost/cost-tracker.js +73 -13
- package/dist/cost/cost-tracker.js.map +1 -1
- package/dist/cost/index.d.ts +11 -1
- package/dist/cost/index.d.ts.map +1 -1
- package/dist/cost/index.js +1 -1
- package/dist/cost/index.js.map +1 -1
- package/dist/domains/routing-templates.d.ts +12 -0
- package/dist/domains/routing-templates.d.ts.map +1 -0
- package/dist/domains/routing-templates.js +109 -0
- package/dist/domains/routing-templates.js.map +1 -0
- package/dist/engine/domain/capability.d.ts +2 -0
- package/dist/engine/domain/capability.d.ts.map +1 -1
- package/dist/engine/domain/chunker.d.ts +4 -0
- package/dist/engine/domain/chunker.d.ts.map +1 -1
- package/dist/engine/domain/contact-memory.d.ts +30 -0
- package/dist/engine/domain/contact-memory.d.ts.map +1 -0
- package/dist/engine/domain/contact-memory.js +4 -0
- package/dist/engine/domain/contact-memory.js.map +1 -0
- package/dist/engine/domain/knowledge-config.d.ts +26 -1
- package/dist/engine/domain/knowledge-config.d.ts.map +1 -1
- package/dist/engine/domain/knowledge-config.js +41 -3
- package/dist/engine/domain/knowledge-config.js.map +1 -1
- package/dist/engine/domain/knowledge-source.d.ts +31 -0
- package/dist/engine/domain/knowledge-source.d.ts.map +1 -0
- package/dist/engine/domain/knowledge-source.js +3 -0
- package/dist/engine/domain/knowledge-source.js.map +1 -0
- package/dist/engine/domain/model-router.d.ts +87 -0
- package/dist/engine/domain/model-router.d.ts.map +1 -0
- package/dist/engine/domain/model-router.js +4 -0
- package/dist/engine/domain/model-router.js.map +1 -0
- package/dist/engine/domain/rate-limiter.d.ts +15 -0
- package/dist/engine/domain/rate-limiter.d.ts.map +1 -0
- package/dist/engine/domain/rate-limiter.js +3 -0
- package/dist/engine/domain/rate-limiter.js.map +1 -0
- package/dist/engine/domain/tool-execution.d.ts +33 -0
- package/dist/engine/domain/tool-execution.d.ts.map +1 -0
- package/dist/engine/domain/tool-execution.js +3 -0
- package/dist/engine/domain/tool-execution.js.map +1 -0
- package/dist/engine/domain/vector-store.d.ts +1 -0
- package/dist/engine/domain/vector-store.d.ts.map +1 -1
- package/dist/engine/error-catalog.d.ts.map +1 -1
- package/dist/engine/error-catalog.js +110 -0
- package/dist/engine/error-catalog.js.map +1 -1
- package/dist/engine/errors.d.ts +1 -1
- package/dist/engine/errors.d.ts.map +1 -1
- package/dist/engine/errors.js.map +1 -1
- package/dist/engine/gateway/conversation-event.d.ts +69 -1
- package/dist/engine/gateway/conversation-event.d.ts.map +1 -1
- package/dist/engine/gateway/events-config.d.ts +4 -0
- package/dist/engine/gateway/events-config.d.ts.map +1 -1
- package/dist/engine/gateway/tenant-config.d.ts +65 -0
- package/dist/engine/gateway/tenant-config.d.ts.map +1 -1
- package/dist/engine/gateway/tenant-config.js +181 -0
- package/dist/engine/gateway/tenant-config.js.map +1 -1
- package/dist/engine/index.d.ts +6 -2
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/loader/app-loader.d.ts.map +1 -1
- package/dist/engine/loader/app-loader.js +41 -0
- package/dist/engine/loader/app-loader.js.map +1 -1
- package/dist/enrichment/effort-score.d.ts +7 -0
- package/dist/enrichment/effort-score.d.ts.map +1 -0
- package/dist/enrichment/effort-score.js +15 -0
- package/dist/enrichment/effort-score.js.map +1 -0
- package/dist/enrichment/enrichment-pipeline.d.ts +13 -0
- package/dist/enrichment/enrichment-pipeline.d.ts.map +1 -0
- package/dist/enrichment/enrichment-pipeline.js +191 -0
- package/dist/enrichment/enrichment-pipeline.js.map +1 -0
- package/dist/enrichment/index.d.ts +4 -0
- package/dist/enrichment/index.d.ts.map +1 -0
- package/dist/enrichment/index.js +3 -0
- package/dist/enrichment/index.js.map +1 -0
- package/dist/enrichment/types.d.ts +105 -0
- package/dist/enrichment/types.d.ts.map +1 -0
- package/dist/enrichment/types.js +3 -0
- package/dist/enrichment/types.js.map +1 -0
- package/dist/events/index.d.ts +71 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -1
- package/dist/index.d.ts +18 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/knowledge/contact-memory.d.ts +26 -0
- package/dist/knowledge/contact-memory.d.ts.map +1 -0
- package/dist/knowledge/contact-memory.js +235 -0
- package/dist/knowledge/contact-memory.js.map +1 -0
- package/dist/knowledge/contextual-enricher.d.ts +16 -0
- package/dist/knowledge/contextual-enricher.d.ts.map +1 -0
- package/dist/knowledge/contextual-enricher.js +82 -0
- package/dist/knowledge/contextual-enricher.js.map +1 -0
- package/dist/knowledge/index.d.ts +16 -0
- package/dist/knowledge/index.d.ts.map +1 -1
- package/dist/knowledge/index.js +13 -0
- package/dist/knowledge/index.js.map +1 -1
- package/dist/knowledge/infrastructure/cohere-reranker.d.ts +13 -0
- package/dist/knowledge/infrastructure/cohere-reranker.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/cohere-reranker.js +61 -0
- package/dist/knowledge/infrastructure/cohere-reranker.js.map +1 -0
- package/dist/knowledge/infrastructure/composite-extractor.d.ts +8 -0
- package/dist/knowledge/infrastructure/composite-extractor.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/composite-extractor.js +26 -0
- package/dist/knowledge/infrastructure/composite-extractor.js.map +1 -0
- package/dist/knowledge/infrastructure/file-extractor.d.ts +6 -0
- package/dist/knowledge/infrastructure/file-extractor.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/file-extractor.js +19 -0
- package/dist/knowledge/infrastructure/file-extractor.js.map +1 -0
- package/dist/knowledge/infrastructure/json-source-store.d.ts +14 -0
- package/dist/knowledge/infrastructure/json-source-store.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/json-source-store.js +56 -0
- package/dist/knowledge/infrastructure/json-source-store.js.map +1 -0
- package/dist/knowledge/infrastructure/memory-source-store.d.ts +10 -0
- package/dist/knowledge/infrastructure/memory-source-store.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/memory-source-store.js +26 -0
- package/dist/knowledge/infrastructure/memory-source-store.js.map +1 -0
- package/dist/knowledge/infrastructure/memory-vector-store.d.ts +1 -0
- package/dist/knowledge/infrastructure/memory-vector-store.d.ts.map +1 -1
- package/dist/knowledge/infrastructure/memory-vector-store.js +10 -0
- package/dist/knowledge/infrastructure/memory-vector-store.js.map +1 -1
- package/dist/knowledge/infrastructure/pdf-extractor.d.ts +6 -0
- package/dist/knowledge/infrastructure/pdf-extractor.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/pdf-extractor.js +46 -0
- package/dist/knowledge/infrastructure/pdf-extractor.js.map +1 -0
- package/dist/knowledge/infrastructure/pgvector-store.d.ts +29 -0
- package/dist/knowledge/infrastructure/pgvector-store.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/pgvector-store.js +141 -0
- package/dist/knowledge/infrastructure/pgvector-store.js.map +1 -0
- package/dist/knowledge/infrastructure/url-extractor.d.ts +6 -0
- package/dist/knowledge/infrastructure/url-extractor.d.ts.map +1 -0
- package/dist/knowledge/infrastructure/url-extractor.js +71 -0
- package/dist/knowledge/infrastructure/url-extractor.js.map +1 -0
- package/dist/knowledge/retrieval-pipeline.d.ts +8 -1
- package/dist/knowledge/retrieval-pipeline.d.ts.map +1 -1
- package/dist/knowledge/retrieval-pipeline.js +28 -2
- package/dist/knowledge/retrieval-pipeline.js.map +1 -1
- package/dist/knowledge/source-manager.d.ts +29 -0
- package/dist/knowledge/source-manager.d.ts.map +1 -0
- package/dist/knowledge/source-manager.js +124 -0
- package/dist/knowledge/source-manager.js.map +1 -0
- package/dist/observability/span-mapper.d.ts.map +1 -1
- package/dist/observability/span-mapper.js +104 -0
- package/dist/observability/span-mapper.js.map +1 -1
- package/dist/safety/index.d.ts +2 -0
- package/dist/safety/index.d.ts.map +1 -1
- package/dist/safety/index.js +2 -0
- package/dist/safety/index.js.map +1 -1
- package/dist/safety/pii-scanner.d.ts.map +1 -1
- package/dist/safety/pii-scanner.js +18 -0
- package/dist/safety/pii-scanner.js.map +1 -1
- package/dist/safety/tool-result-sanitizer.d.ts +21 -0
- package/dist/safety/tool-result-sanitizer.d.ts.map +1 -0
- package/dist/safety/tool-result-sanitizer.js +68 -0
- package/dist/safety/tool-result-sanitizer.js.map +1 -0
- package/dist/security/annotation-authorizer.d.ts +13 -0
- package/dist/security/annotation-authorizer.d.ts.map +1 -0
- package/dist/security/annotation-authorizer.js +37 -0
- package/dist/security/annotation-authorizer.js.map +1 -0
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1 -0
- package/dist/security/index.js.map +1 -1
- package/dist/security/types.d.ts +2 -2
- package/dist/security/types.d.ts.map +1 -1
- 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"}
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -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":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/index.js
CHANGED
|
@@ -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
|
package/dist/agents/index.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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
|
-
|
|
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":"AAAA,mEAAmE;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,6BAA6B,EAAE,MAAM,oDAAoD,CAAC;AAGnG,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;
|
|
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":"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"}
|
|
@@ -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
|