@kilnai/runtime 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/README.md +7 -3
- 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/channels/web-channel.d.ts +2 -0
- package/dist/channels/web-channel.d.ts.map +1 -1
- package/dist/channels/web-channel.js +9 -0
- package/dist/channels/web-channel.js.map +1 -1
- 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.d.ts +1 -1
- package/dist/gateway/dev-routes.d.ts.map +1 -1
- package/dist/gateway/dev-routes.js +2 -2
- 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 +55 -1
- 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 +250 -14
- package/dist/gateway/gateway-server.js.map +1 -1
- package/dist/gateway/handoff-routes.d.ts +15 -0
- package/dist/gateway/handoff-routes.d.ts.map +1 -0
- package/dist/gateway/handoff-routes.js +253 -0
- package/dist/gateway/handoff-routes.js.map +1 -0
- 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 +69 -0
- package/dist/gateway/message-pipeline.d.ts.map +1 -0
- package/dist/gateway/message-pipeline.js +185 -0
- package/dist/gateway/message-pipeline.js.map +1 -0
- 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 +74 -36
- 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.map +1 -1
- package/dist/gateway/tenant-admin-routes.js +17 -3
- package/dist/gateway/tenant-admin-routes.js.map +1 -1
- package/dist/gateway/tenant-routes.d.ts.map +1 -1
- package/dist/gateway/tenant-routes.js +18 -27
- package/dist/gateway/tenant-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/trace-context.d.ts +8 -0
- package/dist/gateway/trace-context.d.ts.map +1 -0
- package/dist/gateway/trace-context.js +17 -0
- package/dist/gateway/trace-context.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 +205 -33
- 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 +184 -7
- package/dist/gateway/ws-tenant-routes.js.map +1 -1
- package/dist/index.d.ts +63 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -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 +170 -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/context-summarizer.d.ts +11 -0
- package/dist/session/context-summarizer.d.ts.map +1 -0
- package/dist/session/context-summarizer.js +23 -0
- package/dist/session/context-summarizer.js.map +1 -0
- package/dist/session/escalation-detector.d.ts +27 -0
- package/dist/session/escalation-detector.d.ts.map +1 -0
- package/dist/session/escalation-detector.js +75 -0
- package/dist/session/escalation-detector.js.map +1 -0
- package/dist/session/in-memory-session-store.d.ts +11 -0
- package/dist/session/in-memory-session-store.d.ts.map +1 -0
- package/dist/session/in-memory-session-store.js +26 -0
- package/dist/session/in-memory-session-store.js.map +1 -0
- package/dist/session/mode-b-orchestrator.d.ts +54 -1
- package/dist/session/mode-b-orchestrator.d.ts.map +1 -1
- package/dist/session/mode-b-orchestrator.js +349 -17
- package/dist/session/mode-b-orchestrator.js.map +1 -1
- package/dist/session/mode-b-session.d.ts +48 -1
- package/dist/session/mode-b-session.d.ts.map +1 -1
- package/dist/session/mode-b-session.js +105 -0
- package/dist/session/mode-b-session.js.map +1 -1
- package/dist/session/redis-session-store.d.ts +22 -0
- package/dist/session/redis-session-store.d.ts.map +1 -0
- package/dist/session/redis-session-store.js +44 -0
- package/dist/session/redis-session-store.js.map +1 -0
- package/dist/session/session-mode.d.ts +4 -0
- package/dist/session/session-mode.d.ts.map +1 -0
- package/dist/session/session-mode.js +20 -0
- package/dist/session/session-mode.js.map +1 -0
- package/dist/session/session-registry.d.ts +17 -9
- package/dist/session/session-registry.d.ts.map +1 -1
- package/dist/session/session-registry.js +80 -29
- package/dist/session/session-registry.js.map +1 -1
- package/dist/session/session-serializer.d.ts +4 -0
- package/dist/session/session-serializer.d.ts.map +1 -0
- package/dist/session/session-serializer.js +26 -0
- package/dist/session/session-serializer.js.map +1 -0
- package/dist/session/session-store.d.ts +9 -0
- package/dist/session/session-store.d.ts.map +1 -0
- package/dist/session/session-store.js +2 -0
- package/dist/session/session-store.js.map +1 -0
- 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 +7 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prometheus-collector.d.ts","sourceRoot":"","sources":["../../src/observability/prometheus-collector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,oDAAoD;AACpD,UAAU,YAAY;IACpB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wCAAwC;AACxC,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,qBAAa,mBAAoB,YAAW,UAAU;IAaxC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZnC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,QAAQ,CAGT;IACP,OAAO,CAAC,UAAU,CAGX;IACP,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;gBAEpB,MAAM,GAAE,yBAA8B;YAIrD,UAAU;IAkFxB,4DAA4D;IACtD,WAAW,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAK3C,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAsFrC,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAItD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI1E,OAAO,CAAC,aAAa;CAWtB"}
|
|
@@ -0,0 +1,170 @@
|
|
|
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
|
+
// Extract provider/model from byRole entries
|
|
100
|
+
for (const [, role] of Object.entries(e.byRole)) {
|
|
101
|
+
const model = role.model;
|
|
102
|
+
const provider = this.inferProvider(model);
|
|
103
|
+
this.counters.llm_requests?.inc({
|
|
104
|
+
provider,
|
|
105
|
+
model,
|
|
106
|
+
status: "success",
|
|
107
|
+
});
|
|
108
|
+
this.counters.cost_usd?.inc({ provider, model }, role.costUsd);
|
|
109
|
+
}
|
|
110
|
+
this.counters.llm_tokens?.inc({ direction: "input", provider: "", model: "" }, e.inputTokens);
|
|
111
|
+
this.counters.llm_tokens?.inc({ direction: "output", provider: "", model: "" }, e.outputTokens);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
case "tool_result": {
|
|
115
|
+
const e = event;
|
|
116
|
+
this.counters.tool_calls?.inc({
|
|
117
|
+
tool_name: e.toolName,
|
|
118
|
+
success: String(e.success),
|
|
119
|
+
});
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
case "tool_cache_hit": {
|
|
123
|
+
const e = event;
|
|
124
|
+
this.counters.tool_cache_hits?.inc({ tool_name: e.toolName });
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
case "error": {
|
|
128
|
+
const e = event;
|
|
129
|
+
this.counters.errors?.inc({ code: e.code });
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
case "agent_routed": {
|
|
133
|
+
const e = event;
|
|
134
|
+
this.counters.agent_routings?.inc({
|
|
135
|
+
agent_name: e.agentName,
|
|
136
|
+
routing_tier: e.routingTier,
|
|
137
|
+
});
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
case "model_routed": {
|
|
141
|
+
const e = event;
|
|
142
|
+
this.counters.model_routings?.inc({
|
|
143
|
+
provider: e.provider,
|
|
144
|
+
model: e.model,
|
|
145
|
+
routing_tier: e.routingTier,
|
|
146
|
+
});
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
// Other event types: no metrics to collect
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async getBySession(_sessionId) {
|
|
153
|
+
throw new Error("PrometheusCollector is write-only");
|
|
154
|
+
}
|
|
155
|
+
async getAfter(_sessionId, _afterId) {
|
|
156
|
+
throw new Error("PrometheusCollector is write-only");
|
|
157
|
+
}
|
|
158
|
+
inferProvider(model) {
|
|
159
|
+
if (model.startsWith("claude"))
|
|
160
|
+
return "anthropic";
|
|
161
|
+
if (model.startsWith("gpt") ||
|
|
162
|
+
model.startsWith("o1") ||
|
|
163
|
+
model.startsWith("o3"))
|
|
164
|
+
return "openai";
|
|
165
|
+
if (model.startsWith("deepseek"))
|
|
166
|
+
return "deepseek";
|
|
167
|
+
return "ollama";
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# 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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProviderAdapter } from "@kilnai/core";
|
|
2
|
+
import type { ModeBSession } from "./mode-b-session.js";
|
|
3
|
+
export interface ContextSummarizer {
|
|
4
|
+
summarize(session: ModeBSession): Promise<string>;
|
|
5
|
+
}
|
|
6
|
+
export declare class DefaultContextSummarizer implements ContextSummarizer {
|
|
7
|
+
private readonly provider;
|
|
8
|
+
constructor(provider: ProviderAdapter);
|
|
9
|
+
summarize(session: ModeBSession): Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=context-summarizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-summarizer.d.ts","sourceRoot":"","sources":["../../src/session/context-summarizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,cAAc,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAMD,qBAAa,wBAAyB,YAAW,iBAAiB;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,QAAQ,EAAE,eAAe;IAI/B,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;CAcxD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { extractText } from "@kilnai/core";
|
|
2
|
+
const SUMMARY_SYSTEM_PROMPT = "Summarize this customer conversation in 1-3 sentences for a human agent. Include: what the customer needs, what has been tried, and the current status.";
|
|
3
|
+
const SUMMARY_MAX_MESSAGES = 10;
|
|
4
|
+
const SUMMARY_MAX_TOKENS = 200;
|
|
5
|
+
export class DefaultContextSummarizer {
|
|
6
|
+
provider;
|
|
7
|
+
constructor(provider) {
|
|
8
|
+
this.provider = provider;
|
|
9
|
+
}
|
|
10
|
+
async summarize(session) {
|
|
11
|
+
const history = session.conversationHistory;
|
|
12
|
+
const recent = history.slice(-SUMMARY_MAX_MESSAGES);
|
|
13
|
+
if (recent.length === 0)
|
|
14
|
+
return "No conversation history.";
|
|
15
|
+
const response = await this.provider.createMessage({
|
|
16
|
+
system: SUMMARY_SYSTEM_PROMPT,
|
|
17
|
+
messages: recent,
|
|
18
|
+
maxTokens: SUMMARY_MAX_TOKENS,
|
|
19
|
+
});
|
|
20
|
+
return extractText(response.parts);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=context-summarizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-summarizer.js","sourceRoot":"","sources":["../../src/session/context-summarizer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAO3C,MAAM,qBAAqB,GAAG,yJAAyJ,CAAC;AACxL,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAM,OAAO,wBAAwB;IAClB,QAAQ,CAAkB;IAE3C,YAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAqB;QACnC,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,0BAA0B,CAAC;QAE3D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;YACjD,MAAM,EAAE,qBAAqB;YAC7B,QAAQ,EAAE,MAAM;YAChB,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ContentPart } from "@kilnai/core";
|
|
2
|
+
import type { ModeBSession } from "./mode-b-session.js";
|
|
3
|
+
export interface EscalationSignal {
|
|
4
|
+
readonly reason: "keyword" | "loop" | "confidence" | "tool_failure" | "custom";
|
|
5
|
+
readonly confidence: number;
|
|
6
|
+
readonly detail: string;
|
|
7
|
+
}
|
|
8
|
+
export interface EscalationDetector {
|
|
9
|
+
checkPreLLM(userText: string): EscalationSignal | null;
|
|
10
|
+
checkPostLLM(session: ModeBSession, responseParts: readonly ContentPart[]): EscalationSignal | null;
|
|
11
|
+
}
|
|
12
|
+
export interface DefaultEscalationDetectorConfig {
|
|
13
|
+
readonly keywords?: readonly string[];
|
|
14
|
+
readonly loopThreshold?: number;
|
|
15
|
+
readonly loopWindowSize?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class DefaultEscalationDetector implements EscalationDetector {
|
|
18
|
+
private readonly keywords;
|
|
19
|
+
private readonly loopThreshold;
|
|
20
|
+
private readonly loopWindowSize;
|
|
21
|
+
constructor(config?: DefaultEscalationDetectorConfig);
|
|
22
|
+
checkPreLLM(userText: string): EscalationSignal | null;
|
|
23
|
+
checkPostLLM(session: ModeBSession, _responseParts: readonly ContentPart[]): EscalationSignal | null;
|
|
24
|
+
}
|
|
25
|
+
/** Simple word overlap similarity (Jaccard index on word sets) */
|
|
26
|
+
export declare function wordOverlapSimilarity(a: string, b: string): number;
|
|
27
|
+
//# sourceMappingURL=escalation-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation-detector.d.ts","sourceRoot":"","sources":["../../src/session/escalation-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,YAAY,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC/E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAAC;IACvD,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB,GAAG,IAAI,CAAC;CACrG;AAQD,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,qBAAa,yBAA0B,YAAW,kBAAkB;IAClE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,MAAM,CAAC,EAAE,+BAA+B;IAMpD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IA+BtD,YAAY,CAAC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,WAAW,EAAE,GAAG,gBAAgB,GAAG,IAAI;CAgBrG;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAclE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
const DEFAULT_KEYWORDS = [
|
|
2
|
+
"agent", "human", "person", "representative",
|
|
3
|
+
"agente", "humano", "persona", "representante",
|
|
4
|
+
"hablar con alguien", "talk to someone",
|
|
5
|
+
];
|
|
6
|
+
export class DefaultEscalationDetector {
|
|
7
|
+
keywords;
|
|
8
|
+
loopThreshold;
|
|
9
|
+
loopWindowSize;
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.keywords = config?.keywords ?? DEFAULT_KEYWORDS;
|
|
12
|
+
this.loopThreshold = config?.loopThreshold ?? 0.85;
|
|
13
|
+
this.loopWindowSize = config?.loopWindowSize ?? 3;
|
|
14
|
+
}
|
|
15
|
+
checkPreLLM(userText) {
|
|
16
|
+
const lower = userText.toLowerCase().trim();
|
|
17
|
+
// Check multi-word keywords first (they must match as full phrases)
|
|
18
|
+
for (const keyword of this.keywords) {
|
|
19
|
+
if (keyword.includes(" ")) {
|
|
20
|
+
if (lower.includes(keyword.toLowerCase())) {
|
|
21
|
+
return {
|
|
22
|
+
reason: "keyword",
|
|
23
|
+
confidence: 0.9,
|
|
24
|
+
detail: `Matched phrase: "${keyword}"`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Check single-word keywords (must be whole words)
|
|
30
|
+
const words = lower.split(/\s+/);
|
|
31
|
+
for (const keyword of this.keywords) {
|
|
32
|
+
if (!keyword.includes(" ") && words.includes(keyword.toLowerCase())) {
|
|
33
|
+
return {
|
|
34
|
+
reason: "keyword",
|
|
35
|
+
confidence: 0.8,
|
|
36
|
+
detail: `Matched keyword: "${keyword}"`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
checkPostLLM(session, _responseParts) {
|
|
43
|
+
const recentTexts = session.lastAssistantTexts(this.loopWindowSize);
|
|
44
|
+
if (recentTexts.length < this.loopWindowSize)
|
|
45
|
+
return null;
|
|
46
|
+
// Check pairwise similarity
|
|
47
|
+
for (let i = 0; i < recentTexts.length - 1; i++) {
|
|
48
|
+
const similarity = wordOverlapSimilarity(recentTexts[i], recentTexts[i + 1]);
|
|
49
|
+
if (similarity < this.loopThreshold)
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
reason: "loop",
|
|
54
|
+
confidence: 0.85,
|
|
55
|
+
detail: `Last ${this.loopWindowSize} responses have similarity > ${this.loopThreshold}`,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Simple word overlap similarity (Jaccard index on word sets) */
|
|
60
|
+
export function wordOverlapSimilarity(a, b) {
|
|
61
|
+
const setA = new Set(a.toLowerCase().split(/\s+/).filter(w => w.length > 0));
|
|
62
|
+
const setB = new Set(b.toLowerCase().split(/\s+/).filter(w => w.length > 0));
|
|
63
|
+
if (setA.size === 0 && setB.size === 0)
|
|
64
|
+
return 1.0;
|
|
65
|
+
if (setA.size === 0 || setB.size === 0)
|
|
66
|
+
return 0.0;
|
|
67
|
+
let intersection = 0;
|
|
68
|
+
for (const word of setA) {
|
|
69
|
+
if (setB.has(word))
|
|
70
|
+
intersection++;
|
|
71
|
+
}
|
|
72
|
+
const union = setA.size + setB.size - intersection;
|
|
73
|
+
return union === 0 ? 0 : intersection / union;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=escalation-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escalation-detector.js","sourceRoot":"","sources":["../../src/session/escalation-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ModeBSession } from "./mode-b-session.js";
|
|
2
|
+
import type { SessionStore } from "./session-store.js";
|
|
3
|
+
export declare class InMemorySessionStore implements SessionStore {
|
|
4
|
+
private readonly store;
|
|
5
|
+
get(key: string): Promise<ModeBSession | undefined>;
|
|
6
|
+
set(key: string, session: ModeBSession): Promise<void>;
|
|
7
|
+
delete(key: string): Promise<boolean>;
|
|
8
|
+
deleteByPrefix(prefix: string): Promise<number>;
|
|
9
|
+
keys(): Promise<string[]>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=in-memory-session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-session-store.d.ts","sourceRoot":"","sources":["../../src/session/in-memory-session-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IAEnD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAInD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW/C,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGhC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export class InMemorySessionStore {
|
|
2
|
+
store = new Map();
|
|
3
|
+
async get(key) {
|
|
4
|
+
return this.store.get(key);
|
|
5
|
+
}
|
|
6
|
+
async set(key, session) {
|
|
7
|
+
this.store.set(key, session);
|
|
8
|
+
}
|
|
9
|
+
async delete(key) {
|
|
10
|
+
return this.store.delete(key);
|
|
11
|
+
}
|
|
12
|
+
async deleteByPrefix(prefix) {
|
|
13
|
+
let count = 0;
|
|
14
|
+
for (const key of this.store.keys()) {
|
|
15
|
+
if (key.startsWith(prefix)) {
|
|
16
|
+
this.store.delete(key);
|
|
17
|
+
count++;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return count;
|
|
21
|
+
}
|
|
22
|
+
async keys() {
|
|
23
|
+
return [...this.store.keys()];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=in-memory-session-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-session-store.js","sourceRoot":"","sources":["../../src/session/in-memory-session-store.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,oBAAoB;IACd,KAAK,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzD,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,OAAqB;QAC1C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACvB,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -1,7 +1,16 @@
|
|
|
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";
|
|
12
|
+
import type { EscalationDetector, EscalationSignal } from "./escalation-detector.js";
|
|
13
|
+
import type { ContextSummarizer } from "./context-summarizer.js";
|
|
5
14
|
export interface OrchestratorDeps {
|
|
6
15
|
readonly provider: ProviderAdapter;
|
|
7
16
|
readonly model?: string;
|
|
@@ -11,6 +20,26 @@ export interface OrchestratorDeps {
|
|
|
11
20
|
readonly mcpClients?: readonly McpClient[];
|
|
12
21
|
readonly builtinTools?: ReadonlyMap<string, (input: Record<string, unknown>) => Promise<unknown>>;
|
|
13
22
|
readonly eventBus?: EventBus;
|
|
23
|
+
readonly escalationDetector?: EscalationDetector;
|
|
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;
|
|
14
43
|
}
|
|
15
44
|
export interface OrchestrateResult {
|
|
16
45
|
readonly parts: readonly ContentPart[];
|
|
@@ -18,6 +47,26 @@ export interface OrchestrateResult {
|
|
|
18
47
|
readonly outputTokens: number;
|
|
19
48
|
readonly cacheReadTokens: number;
|
|
20
49
|
readonly cacheWriteTokens: number;
|
|
50
|
+
readonly queued: boolean;
|
|
51
|
+
readonly escalation?: EscalationSignal;
|
|
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
|
+
};
|
|
21
70
|
}
|
|
22
71
|
export declare class ModeBOrchestrator {
|
|
23
72
|
private readonly deps;
|
|
@@ -31,13 +80,17 @@ export declare class ModeBOrchestrator {
|
|
|
31
80
|
get tools(): readonly ToolDefinition[] | undefined;
|
|
32
81
|
/** Register additional tool definitions at runtime (e.g. builtin tools discovered per-tenant). */
|
|
33
82
|
registerTools(newTools: readonly ToolDefinition[]): void;
|
|
34
|
-
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>;
|
|
35
84
|
private executeTool;
|
|
36
85
|
private emitToolCalled;
|
|
86
|
+
private emitToolAuthorized;
|
|
37
87
|
private emitToolResult;
|
|
88
|
+
private emitToolCacheHit;
|
|
89
|
+
private appendAudit;
|
|
38
90
|
private computeTotalCostUsd;
|
|
39
91
|
private get resolvedPricing();
|
|
40
92
|
private emitCostUpdate;
|
|
93
|
+
private emitModelRouted;
|
|
41
94
|
private emitError;
|
|
42
95
|
}
|
|
43
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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"}
|