@kilnai/runtime 0.1.16 → 0.9.1
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/README.md +2 -2
- package/dist/channels/email-api.d.ts +29 -0
- package/dist/channels/email-api.d.ts.map +1 -0
- package/dist/channels/email-api.js +133 -0
- package/dist/channels/email-api.js.map +1 -0
- package/dist/channels/email-channel.d.ts +26 -0
- package/dist/channels/email-channel.d.ts.map +1 -0
- package/dist/channels/email-channel.js +59 -0
- package/dist/channels/email-channel.js.map +1 -0
- package/dist/channels/email-template.d.ts +10 -0
- package/dist/channels/email-template.d.ts.map +1 -0
- package/dist/channels/email-template.js +63 -0
- package/dist/channels/email-template.js.map +1 -0
- package/dist/channels/instagram-api.d.ts +29 -0
- package/dist/channels/instagram-api.d.ts.map +1 -0
- package/dist/channels/instagram-api.js +75 -0
- package/dist/channels/instagram-api.js.map +1 -0
- package/dist/channels/instagram-channel.d.ts +24 -0
- package/dist/channels/instagram-channel.d.ts.map +1 -0
- package/dist/channels/instagram-channel.js +55 -0
- package/dist/channels/instagram-channel.js.map +1 -0
- package/dist/channels/message-formatter.d.ts +17 -0
- package/dist/channels/message-formatter.d.ts.map +1 -1
- package/dist/channels/message-formatter.js +27 -0
- package/dist/channels/message-formatter.js.map +1 -1
- package/dist/channels/messenger-api.d.ts +27 -0
- package/dist/channels/messenger-api.d.ts.map +1 -0
- package/dist/channels/messenger-api.js +75 -0
- package/dist/channels/messenger-api.js.map +1 -0
- package/dist/channels/messenger-channel.d.ts +23 -0
- package/dist/channels/messenger-channel.d.ts.map +1 -0
- package/dist/channels/messenger-channel.js +55 -0
- package/dist/channels/messenger-channel.js.map +1 -0
- package/dist/enrichment/enrichment-runner.d.ts +17 -0
- package/dist/enrichment/enrichment-runner.d.ts.map +1 -0
- package/dist/enrichment/enrichment-runner.js +45 -0
- package/dist/enrichment/enrichment-runner.js.map +1 -0
- package/dist/enrichment/sqlite-enrichment-store.d.ts +14 -0
- package/dist/enrichment/sqlite-enrichment-store.d.ts.map +1 -0
- package/dist/enrichment/sqlite-enrichment-store.js +69 -0
- package/dist/enrichment/sqlite-enrichment-store.js.map +1 -0
- package/dist/gateway/audio-preprocessor.d.ts +11 -0
- package/dist/gateway/audio-preprocessor.d.ts.map +1 -0
- package/dist/gateway/audio-preprocessor.js +76 -0
- package/dist/gateway/audio-preprocessor.js.map +1 -0
- package/dist/gateway/auth-middleware.d.ts.map +1 -1
- package/dist/gateway/auth-middleware.js +10 -2
- package/dist/gateway/auth-middleware.js.map +1 -1
- package/dist/gateway/contact-memory-admin-routes.d.ts +9 -0
- package/dist/gateway/contact-memory-admin-routes.d.ts.map +1 -0
- package/dist/gateway/contact-memory-admin-routes.js +42 -0
- package/dist/gateway/contact-memory-admin-routes.js.map +1 -0
- package/dist/gateway/context-formatter.d.ts +5 -0
- package/dist/gateway/context-formatter.d.ts.map +1 -0
- package/dist/gateway/context-formatter.js +16 -0
- package/dist/gateway/context-formatter.js.map +1 -0
- package/dist/gateway/conversation-event-emitter.d.ts +4 -1
- package/dist/gateway/conversation-event-emitter.d.ts.map +1 -1
- package/dist/gateway/conversation-event-emitter.js +44 -13
- package/dist/gateway/conversation-event-emitter.js.map +1 -1
- package/dist/gateway/dev-routes.js +1 -1
- package/dist/gateway/dev-routes.js.map +1 -1
- package/dist/gateway/email-loop-guard.d.ts +10 -0
- package/dist/gateway/email-loop-guard.d.ts.map +1 -0
- package/dist/gateway/email-loop-guard.js +39 -0
- package/dist/gateway/email-loop-guard.js.map +1 -0
- package/dist/gateway/email-thread-store.d.ts +24 -0
- package/dist/gateway/email-thread-store.d.ts.map +1 -0
- package/dist/gateway/email-thread-store.js +34 -0
- package/dist/gateway/email-thread-store.js.map +1 -0
- package/dist/gateway/email-webhook-routes.d.ts +32 -0
- package/dist/gateway/email-webhook-routes.d.ts.map +1 -0
- package/dist/gateway/email-webhook-routes.js +411 -0
- package/dist/gateway/email-webhook-routes.js.map +1 -0
- package/dist/gateway/enrichment-admin-routes.d.ts +9 -0
- package/dist/gateway/enrichment-admin-routes.d.ts.map +1 -0
- package/dist/gateway/enrichment-admin-routes.js +41 -0
- package/dist/gateway/enrichment-admin-routes.js.map +1 -0
- package/dist/gateway/gateway-routes.d.ts +17 -1
- package/dist/gateway/gateway-routes.d.ts.map +1 -1
- package/dist/gateway/gateway-routes.js +41 -0
- package/dist/gateway/gateway-routes.js.map +1 -1
- package/dist/gateway/gateway-server.d.ts.map +1 -1
- package/dist/gateway/gateway-server.js +248 -12
- package/dist/gateway/gateway-server.js.map +1 -1
- package/dist/gateway/handoff-routes.d.ts.map +1 -1
- package/dist/gateway/handoff-routes.js +39 -0
- package/dist/gateway/handoff-routes.js.map +1 -1
- package/dist/gateway/instagram-webhook-routes.d.ts +30 -0
- package/dist/gateway/instagram-webhook-routes.d.ts.map +1 -0
- package/dist/gateway/instagram-webhook-routes.js +394 -0
- package/dist/gateway/instagram-webhook-routes.js.map +1 -0
- package/dist/gateway/knowledge-admin-routes.d.ts +9 -0
- package/dist/gateway/knowledge-admin-routes.d.ts.map +1 -0
- package/dist/gateway/knowledge-admin-routes.js +84 -0
- package/dist/gateway/knowledge-admin-routes.js.map +1 -0
- package/dist/gateway/knowledge-factory.d.ts +19 -0
- package/dist/gateway/knowledge-factory.d.ts.map +1 -0
- package/dist/gateway/knowledge-factory.js +122 -0
- package/dist/gateway/knowledge-factory.js.map +1 -0
- package/dist/gateway/message-pipeline.d.ts +22 -2
- package/dist/gateway/message-pipeline.d.ts.map +1 -1
- package/dist/gateway/message-pipeline.js +90 -4
- package/dist/gateway/message-pipeline.js.map +1 -1
- package/dist/gateway/messenger-webhook-routes.d.ts +30 -0
- package/dist/gateway/messenger-webhook-routes.d.ts.map +1 -0
- package/dist/gateway/messenger-webhook-routes.js +394 -0
- package/dist/gateway/messenger-webhook-routes.js.map +1 -0
- package/dist/gateway/meta-webhook-foundation.d.ts +12 -0
- package/dist/gateway/meta-webhook-foundation.d.ts.map +1 -0
- package/dist/gateway/meta-webhook-foundation.js +25 -0
- package/dist/gateway/meta-webhook-foundation.js.map +1 -0
- package/dist/gateway/mode-b-routes.d.ts +8 -0
- package/dist/gateway/mode-b-routes.d.ts.map +1 -1
- package/dist/gateway/mode-b-routes.js +53 -2
- package/dist/gateway/mode-b-routes.js.map +1 -1
- package/dist/gateway/outbound-routes.d.ts.map +1 -1
- package/dist/gateway/outbound-routes.js +49 -21
- package/dist/gateway/outbound-routes.js.map +1 -1
- package/dist/gateway/routing-test-routes.d.ts +10 -0
- package/dist/gateway/routing-test-routes.d.ts.map +1 -0
- package/dist/gateway/routing-test-routes.js +76 -0
- package/dist/gateway/routing-test-routes.js.map +1 -0
- package/dist/gateway/sqlite-email-thread-store.d.ts +13 -0
- package/dist/gateway/sqlite-email-thread-store.d.ts.map +1 -0
- package/dist/gateway/sqlite-email-thread-store.js +66 -0
- package/dist/gateway/sqlite-email-thread-store.js.map +1 -0
- package/dist/gateway/stt-factory.d.ts +3 -0
- package/dist/gateway/stt-factory.d.ts.map +1 -0
- package/dist/gateway/stt-factory.js +21 -0
- package/dist/gateway/stt-factory.js.map +1 -0
- package/dist/gateway/tenant-admin-routes.d.ts +1 -1
- package/dist/gateway/tenant-admin-routes.d.ts.map +1 -1
- package/dist/gateway/tenant-admin-routes.js +16 -2
- package/dist/gateway/tenant-admin-routes.js.map +1 -1
- package/dist/gateway/tenant-tool-factory.d.ts +10 -0
- package/dist/gateway/tenant-tool-factory.d.ts.map +1 -0
- package/dist/gateway/tenant-tool-factory.js +55 -0
- package/dist/gateway/tenant-tool-factory.js.map +1 -0
- package/dist/gateway/webhook-dedup.d.ts +13 -0
- package/dist/gateway/webhook-dedup.d.ts.map +1 -0
- package/dist/gateway/webhook-dedup.js +37 -0
- package/dist/gateway/webhook-dedup.js.map +1 -0
- package/dist/gateway/webhook-tool-executor.d.ts +17 -0
- package/dist/gateway/webhook-tool-executor.d.ts.map +1 -0
- package/dist/gateway/webhook-tool-executor.js +69 -0
- package/dist/gateway/webhook-tool-executor.js.map +1 -0
- package/dist/gateway/whatsapp-webhook-routes.d.ts +11 -0
- package/dist/gateway/whatsapp-webhook-routes.d.ts.map +1 -1
- package/dist/gateway/whatsapp-webhook-routes.js +158 -22
- package/dist/gateway/whatsapp-webhook-routes.js.map +1 -1
- package/dist/gateway/ws-tenant-routes.d.ts +9 -0
- package/dist/gateway/ws-tenant-routes.d.ts.map +1 -1
- package/dist/gateway/ws-tenant-routes.js +149 -6
- package/dist/gateway/ws-tenant-routes.js.map +1 -1
- package/dist/index.d.ts +47 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -1
- package/dist/index.js.map +1 -1
- package/dist/observability/composite-event-store.d.ts +13 -0
- package/dist/observability/composite-event-store.d.ts.map +1 -0
- package/dist/observability/composite-event-store.js +37 -0
- package/dist/observability/composite-event-store.js.map +1 -0
- package/dist/observability/prometheus-collector.d.ts +33 -0
- package/dist/observability/prometheus-collector.d.ts.map +1 -0
- package/dist/observability/prometheus-collector.js +169 -0
- package/dist/observability/prometheus-collector.js.map +1 -0
- package/dist/session/agent-handoff-summarizer.d.ts +11 -0
- package/dist/session/agent-handoff-summarizer.d.ts.map +1 -0
- package/dist/session/agent-handoff-summarizer.js +26 -0
- package/dist/session/agent-handoff-summarizer.js.map +1 -0
- package/dist/session/mode-b-orchestrator.d.ts +47 -1
- package/dist/session/mode-b-orchestrator.d.ts.map +1 -1
- package/dist/session/mode-b-orchestrator.js +286 -18
- package/dist/session/mode-b-orchestrator.js.map +1 -1
- package/dist/session/mode-b-session.d.ts +24 -4
- package/dist/session/mode-b-session.d.ts.map +1 -1
- package/dist/session/mode-b-session.js +37 -4
- package/dist/session/mode-b-session.js.map +1 -1
- package/dist/session/session-registry.d.ts +3 -2
- package/dist/session/session-registry.d.ts.map +1 -1
- package/dist/session/session-registry.js +35 -2
- package/dist/session/session-registry.js.map +1 -1
- package/dist/session/session-serializer.d.ts.map +1 -1
- package/dist/session/session-serializer.js +4 -0
- package/dist/session/session-serializer.js.map +1 -1
- package/dist/tenant/agent-resolver.d.ts +26 -0
- package/dist/tenant/agent-resolver.d.ts.map +1 -0
- package/dist/tenant/agent-resolver.js +232 -0
- package/dist/tenant/agent-resolver.js.map +1 -0
- package/dist/tenant/ping-pong-guard.d.ts +9 -0
- package/dist/tenant/ping-pong-guard.d.ts.map +1 -0
- package/dist/tenant/ping-pong-guard.js +30 -0
- package/dist/tenant/ping-pong-guard.js.map +1 -0
- package/dist/tenant/system-prompt-builder.d.ts +1 -1
- package/dist/tenant/system-prompt-builder.d.ts.map +1 -1
- package/dist/tenant/system-prompt-builder.js +13 -1
- package/dist/tenant/system-prompt-builder.js.map +1 -1
- package/dist/tenant/tenant-registry.d.ts +3 -0
- package/dist/tenant/tenant-registry.d.ts.map +1 -1
- package/dist/tenant/tenant-registry.js +83 -4
- package/dist/tenant/tenant-registry.js.map +1 -1
- package/dist/tenant/tenant-router.d.ts +27 -0
- package/dist/tenant/tenant-router.d.ts.map +1 -0
- package/dist/tenant/tenant-router.js +72 -0
- package/dist/tenant/tenant-router.js.map +1 -0
- package/dist/utils/hmac.d.ts +1 -0
- package/dist/utils/hmac.d.ts.map +1 -1
- package/dist/utils/hmac.js +3 -0
- package/dist/utils/hmac.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventStore implementation that updates Prometheus counters and histograms.
|
|
3
|
+
* Requires `prom-client` as an optional peer dependency.
|
|
4
|
+
* Write-only: getBySession/getAfter are not supported.
|
|
5
|
+
*/
|
|
6
|
+
export class PrometheusCollector {
|
|
7
|
+
config;
|
|
8
|
+
registry = null;
|
|
9
|
+
counters = {};
|
|
10
|
+
histograms = {};
|
|
11
|
+
initialized = false;
|
|
12
|
+
initPromise = null;
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
this.config = config;
|
|
15
|
+
this.initPromise = this.initialize();
|
|
16
|
+
}
|
|
17
|
+
async initialize() {
|
|
18
|
+
try {
|
|
19
|
+
const prom = await import("prom-client");
|
|
20
|
+
const prefix = this.config.prefix ?? "kiln";
|
|
21
|
+
const registry = new prom.Registry();
|
|
22
|
+
// Counters
|
|
23
|
+
this.counters.llm_requests = new prom.Counter({
|
|
24
|
+
name: `${prefix}_llm_requests_total`,
|
|
25
|
+
help: "Total LLM requests",
|
|
26
|
+
labelNames: ["provider", "model", "status"],
|
|
27
|
+
registers: [registry],
|
|
28
|
+
});
|
|
29
|
+
this.counters.llm_tokens = new prom.Counter({
|
|
30
|
+
name: `${prefix}_llm_tokens_total`,
|
|
31
|
+
help: "Total LLM tokens",
|
|
32
|
+
labelNames: ["direction", "provider", "model"],
|
|
33
|
+
registers: [registry],
|
|
34
|
+
});
|
|
35
|
+
this.counters.cost_usd = new prom.Counter({
|
|
36
|
+
name: `${prefix}_cost_usd_total`,
|
|
37
|
+
help: "Total cost in USD",
|
|
38
|
+
labelNames: ["provider", "model"],
|
|
39
|
+
registers: [registry],
|
|
40
|
+
});
|
|
41
|
+
this.counters.tool_calls = new prom.Counter({
|
|
42
|
+
name: `${prefix}_tool_calls_total`,
|
|
43
|
+
help: "Total tool calls",
|
|
44
|
+
labelNames: ["tool_name", "success"],
|
|
45
|
+
registers: [registry],
|
|
46
|
+
});
|
|
47
|
+
this.counters.tool_cache_hits = new prom.Counter({
|
|
48
|
+
name: `${prefix}_tool_cache_hits_total`,
|
|
49
|
+
help: "Total tool cache hits",
|
|
50
|
+
labelNames: ["tool_name"],
|
|
51
|
+
registers: [registry],
|
|
52
|
+
});
|
|
53
|
+
this.counters.errors = new prom.Counter({
|
|
54
|
+
name: `${prefix}_errors_total`,
|
|
55
|
+
help: "Total errors",
|
|
56
|
+
labelNames: ["code"],
|
|
57
|
+
registers: [registry],
|
|
58
|
+
});
|
|
59
|
+
this.counters.agent_routings = new prom.Counter({
|
|
60
|
+
name: `${prefix}_agent_routings_total`,
|
|
61
|
+
help: "Total agent routing decisions",
|
|
62
|
+
labelNames: ["agent_name", "routing_tier"],
|
|
63
|
+
registers: [registry],
|
|
64
|
+
});
|
|
65
|
+
this.counters.model_routings = new prom.Counter({
|
|
66
|
+
name: `${prefix}_model_routings_total`,
|
|
67
|
+
help: "Total model routing decisions",
|
|
68
|
+
labelNames: ["provider", "model", "routing_tier"],
|
|
69
|
+
registers: [registry],
|
|
70
|
+
});
|
|
71
|
+
// Histograms
|
|
72
|
+
this.histograms.llm_duration = new prom.Histogram({
|
|
73
|
+
name: `${prefix}_llm_request_duration_seconds`,
|
|
74
|
+
help: "LLM request duration in seconds",
|
|
75
|
+
labelNames: ["provider", "model"],
|
|
76
|
+
buckets: [0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0, 30.0],
|
|
77
|
+
registers: [registry],
|
|
78
|
+
});
|
|
79
|
+
this.registry = registry;
|
|
80
|
+
this.initialized = true;
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
console.warn("[prometheus] prom-client not available, metrics disabled");
|
|
84
|
+
this.initialized = false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Get the Prometheus registry for the /metrics endpoint */
|
|
88
|
+
async getRegistry() {
|
|
89
|
+
if (this.initPromise)
|
|
90
|
+
await this.initPromise;
|
|
91
|
+
return this.registry;
|
|
92
|
+
}
|
|
93
|
+
async save(event) {
|
|
94
|
+
if (!this.initialized)
|
|
95
|
+
return;
|
|
96
|
+
switch (event.type) {
|
|
97
|
+
case "cost_update": {
|
|
98
|
+
const e = event;
|
|
99
|
+
for (const [, role] of Object.entries(e.byRoleModel)) {
|
|
100
|
+
const model = role.model;
|
|
101
|
+
const provider = this.inferProvider(model);
|
|
102
|
+
this.counters.llm_requests?.inc({
|
|
103
|
+
provider,
|
|
104
|
+
model,
|
|
105
|
+
status: "success",
|
|
106
|
+
});
|
|
107
|
+
this.counters.cost_usd?.inc({ provider, model }, role.costUsd);
|
|
108
|
+
}
|
|
109
|
+
this.counters.llm_tokens?.inc({ direction: "input", provider: "", model: "" }, e.inputTokens);
|
|
110
|
+
this.counters.llm_tokens?.inc({ direction: "output", provider: "", model: "" }, e.outputTokens);
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
case "tool_result": {
|
|
114
|
+
const e = event;
|
|
115
|
+
this.counters.tool_calls?.inc({
|
|
116
|
+
tool_name: e.toolName,
|
|
117
|
+
success: String(e.success),
|
|
118
|
+
});
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case "tool_cache_hit": {
|
|
122
|
+
const e = event;
|
|
123
|
+
this.counters.tool_cache_hits?.inc({ tool_name: e.toolName });
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
case "error": {
|
|
127
|
+
const e = event;
|
|
128
|
+
this.counters.errors?.inc({ code: e.code });
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case "agent_routed": {
|
|
132
|
+
const e = event;
|
|
133
|
+
this.counters.agent_routings?.inc({
|
|
134
|
+
agent_name: e.agentName,
|
|
135
|
+
routing_tier: e.routingTier,
|
|
136
|
+
});
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
case "model_routed": {
|
|
140
|
+
const e = event;
|
|
141
|
+
this.counters.model_routings?.inc({
|
|
142
|
+
provider: e.provider,
|
|
143
|
+
model: e.model,
|
|
144
|
+
routing_tier: e.routingTier,
|
|
145
|
+
});
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
// Other event types: no metrics to collect
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async getBySession(_sessionId) {
|
|
152
|
+
throw new Error("PrometheusCollector is write-only");
|
|
153
|
+
}
|
|
154
|
+
async getAfter(_sessionId, _afterId) {
|
|
155
|
+
throw new Error("PrometheusCollector is write-only");
|
|
156
|
+
}
|
|
157
|
+
inferProvider(model) {
|
|
158
|
+
if (model.startsWith("claude"))
|
|
159
|
+
return "anthropic";
|
|
160
|
+
if (model.startsWith("gpt") ||
|
|
161
|
+
model.startsWith("o1") ||
|
|
162
|
+
model.startsWith("o3"))
|
|
163
|
+
return "openai";
|
|
164
|
+
if (model.startsWith("deepseek"))
|
|
165
|
+
return "deepseek";
|
|
166
|
+
return "ollama";
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=prometheus-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prometheus-collector.js","sourceRoot":"","sources":["../../src/observability/prometheus-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProviderAdapter } from "@kilnai/core";
|
|
2
|
+
import type { ModeBSession } from "./mode-b-session.js";
|
|
3
|
+
export interface AgentHandoffSummarizer {
|
|
4
|
+
summarize(session: ModeBSession, fromAgentName: string, toAgentName: string): Promise<string>;
|
|
5
|
+
}
|
|
6
|
+
export declare class DefaultAgentHandoffSummarizer implements AgentHandoffSummarizer {
|
|
7
|
+
private readonly provider;
|
|
8
|
+
constructor(provider: ProviderAdapter);
|
|
9
|
+
summarize(session: ModeBSession, fromAgentName: string, toAgentName: string): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=agent-handoff-summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-handoff-summarizer.d.ts","sourceRoot":"","sources":["../../src/session/agent-handoff-summarizer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,cAAc,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/F;AAKD,qBAAa,6BAA8B,YAAW,sBAAsB;IAC1E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,QAAQ,EAAE,eAAe;IAI/B,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAiBpG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Agent handoff summarizer: generates a brief context summary for warm agent handoffs.
|
|
2
|
+
// Follows the same pattern as DefaultContextSummarizer.
|
|
3
|
+
import { extractText } from "@kilnai/core";
|
|
4
|
+
const HANDOFF_MAX_MESSAGES = 10;
|
|
5
|
+
const HANDOFF_MAX_TOKENS = 150;
|
|
6
|
+
export class DefaultAgentHandoffSummarizer {
|
|
7
|
+
provider;
|
|
8
|
+
constructor(provider) {
|
|
9
|
+
this.provider = provider;
|
|
10
|
+
}
|
|
11
|
+
async summarize(session, fromAgentName, toAgentName) {
|
|
12
|
+
const history = session.conversationHistory;
|
|
13
|
+
const recent = history.slice(-HANDOFF_MAX_MESSAGES);
|
|
14
|
+
if (recent.length === 0)
|
|
15
|
+
return "";
|
|
16
|
+
const systemPrompt = `You are generating a handoff brief from agent "${fromAgentName}" to agent "${toAgentName}". In 2-3 sentences, summarize: what the customer needs, what has been discussed so far, and any important context the next agent should know. Be concise and actionable.`;
|
|
17
|
+
const response = await this.provider.createMessage({
|
|
18
|
+
system: systemPrompt,
|
|
19
|
+
messages: recent,
|
|
20
|
+
maxTokens: HANDOFF_MAX_TOKENS,
|
|
21
|
+
});
|
|
22
|
+
const brief = extractText(response.parts);
|
|
23
|
+
return brief ? `[Handoff from ${fromAgentName}]: ${brief}` : "";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=agent-handoff-summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-handoff-summarizer.js","sourceRoot":"","sources":["../../src/session/agent-handoff-summarizer.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,wDAAwD;AAGxD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAM,OAAO,6BAA6B;IACvB,QAAQ,CAAkB;IAE3C,YAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAqB,EAAE,aAAqB,EAAE,WAAmB;QAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;QAC5C,MAAM,MAAM,GAA4B,OAAO,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;QAE7E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,MAAM,YAAY,GAAG,kDAAkD,aAAa,eAAe,WAAW,2KAA2K,CAAC;QAE1R,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACjD,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,iBAAiB,aAAa,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,CAAC;CACF"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import type { ProviderAdapter, ContentPart, ToolDefinition } from "@kilnai/core";
|
|
2
2
|
import type { McpClient } from "@kilnai/core";
|
|
3
3
|
import type { EventBus } from "@kilnai/core";
|
|
4
|
+
import type { Capability, ToolAuthorizer } from "@kilnai/core";
|
|
5
|
+
import type { AuditLog } from "@kilnai/core";
|
|
6
|
+
import type { ToolResultSanitizer } from "@kilnai/core";
|
|
7
|
+
import type { ToolRAG } from "@kilnai/core";
|
|
8
|
+
import type { RateLimiter } from "@kilnai/core";
|
|
9
|
+
import type { ToolCache } from "@kilnai/core";
|
|
10
|
+
import type { ModelRouter } from "@kilnai/core";
|
|
4
11
|
import type { ModeBSession } from "./mode-b-session.js";
|
|
5
12
|
import type { EscalationDetector, EscalationSignal } from "./escalation-detector.js";
|
|
6
13
|
import type { ContextSummarizer } from "./context-summarizer.js";
|
|
@@ -15,6 +22,24 @@ export interface OrchestratorDeps {
|
|
|
15
22
|
readonly eventBus?: EventBus;
|
|
16
23
|
readonly escalationDetector?: EscalationDetector;
|
|
17
24
|
readonly contextSummarizer?: ContextSummarizer;
|
|
25
|
+
readonly capabilityMap?: ReadonlyMap<string, Capability>;
|
|
26
|
+
readonly toolAuthorizer?: ToolAuthorizer;
|
|
27
|
+
readonly toolResultSanitizer?: ToolResultSanitizer;
|
|
28
|
+
readonly budgetChecker?: () => Promise<{
|
|
29
|
+
allowed: boolean;
|
|
30
|
+
message?: string;
|
|
31
|
+
}>;
|
|
32
|
+
readonly auditLog?: AuditLog;
|
|
33
|
+
readonly toolRAG?: ToolRAG;
|
|
34
|
+
readonly toolCache?: ToolCache;
|
|
35
|
+
readonly modelRouter?: ModelRouter;
|
|
36
|
+
readonly providerPool?: ReadonlyMap<string, ProviderAdapter>;
|
|
37
|
+
}
|
|
38
|
+
export interface ToolExecutionSummary {
|
|
39
|
+
readonly toolName: string;
|
|
40
|
+
readonly durationMs: number;
|
|
41
|
+
readonly success: boolean;
|
|
42
|
+
readonly resultSummary: string;
|
|
18
43
|
}
|
|
19
44
|
export interface OrchestrateResult {
|
|
20
45
|
readonly parts: readonly ContentPart[];
|
|
@@ -25,6 +50,23 @@ export interface OrchestrateResult {
|
|
|
25
50
|
readonly queued: boolean;
|
|
26
51
|
readonly escalation?: EscalationSignal;
|
|
27
52
|
readonly contextSummary?: string;
|
|
53
|
+
readonly toolExecutions?: readonly ToolExecutionSummary[];
|
|
54
|
+
readonly routingDecision?: {
|
|
55
|
+
readonly provider: string;
|
|
56
|
+
readonly model: string;
|
|
57
|
+
readonly routingTier: string;
|
|
58
|
+
readonly reasoning: string;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export interface PerCallToolConfig {
|
|
62
|
+
readonly toolAllowlist?: ReadonlySet<string>;
|
|
63
|
+
readonly rateLimiter?: RateLimiter;
|
|
64
|
+
readonly tenantId?: string;
|
|
65
|
+
readonly additionalTools?: readonly ToolDefinition[];
|
|
66
|
+
readonly modelOverride?: {
|
|
67
|
+
readonly provider: string;
|
|
68
|
+
readonly model: string;
|
|
69
|
+
};
|
|
28
70
|
}
|
|
29
71
|
export declare class ModeBOrchestrator {
|
|
30
72
|
private readonly deps;
|
|
@@ -38,13 +80,17 @@ export declare class ModeBOrchestrator {
|
|
|
38
80
|
get tools(): readonly ToolDefinition[] | undefined;
|
|
39
81
|
/** Register additional tool definitions at runtime (e.g. builtin tools discovered per-tenant). */
|
|
40
82
|
registerTools(newTools: readonly ToolDefinition[]): void;
|
|
41
|
-
processMessage(session: ModeBSession, userParts: readonly ContentPart[], recalledMemory?: string, callBuiltinTools?: ReadonlyMap<string, (input: Record<string, unknown>) => Promise<unknown
|
|
83
|
+
processMessage(session: ModeBSession, userParts: readonly ContentPart[], recalledMemory?: string, callBuiltinTools?: ReadonlyMap<string, (input: Record<string, unknown>) => Promise<unknown>>, perCallConfig?: PerCallToolConfig): Promise<OrchestrateResult>;
|
|
42
84
|
private executeTool;
|
|
43
85
|
private emitToolCalled;
|
|
86
|
+
private emitToolAuthorized;
|
|
44
87
|
private emitToolResult;
|
|
88
|
+
private emitToolCacheHit;
|
|
89
|
+
private appendAudit;
|
|
45
90
|
private computeTotalCostUsd;
|
|
46
91
|
private get resolvedPricing();
|
|
47
92
|
private emitCostUpdate;
|
|
93
|
+
private emitModelRouted;
|
|
48
94
|
private emitError;
|
|
49
95
|
}
|
|
50
96
|
//# sourceMappingURL=mode-b-orchestrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-b-orchestrator.d.ts","sourceRoot":"","sources":["../../src/session/mode-b-orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAY,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"mode-b-orchestrator.d.ts","sourceRoot":"","sources":["../../src/session/mode-b-orchestrator.ts"],"names":[],"mappings":"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"}
|