@kilnai/runtime 0.21.1 → 0.23.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/gateway/dev-routes.d.ts.map +1 -1
- package/dist/gateway/dev-routes.js +14 -0
- package/dist/gateway/dev-routes.js.map +1 -1
- package/dist/gateway/gateway-server.d.ts.map +1 -1
- package/dist/gateway/gateway-server.js +301 -3
- package/dist/gateway/gateway-server.js.map +1 -1
- package/dist/gateway/tenant-tool-factory.d.ts +2 -0
- package/dist/gateway/tenant-tool-factory.d.ts.map +1 -1
- package/dist/gateway/tenant-tool-factory.js +4 -0
- package/dist/gateway/tenant-tool-factory.js.map +1 -1
- package/dist/mcp/gateway-mcp-server.d.ts +8 -0
- package/dist/mcp/gateway-mcp-server.d.ts.map +1 -1
- package/dist/mcp/gateway-mcp-server.js +108 -13
- package/dist/mcp/gateway-mcp-server.js.map +1 -1
- package/dist/mcp/gateway-mcp-types.d.ts +37 -0
- package/dist/mcp/gateway-mcp-types.d.ts.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +1 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/swarm-store.d.ts +36 -0
- package/dist/mcp/swarm-store.d.ts.map +1 -0
- package/dist/mcp/swarm-store.js +138 -0
- package/dist/mcp/swarm-store.js.map +1 -0
- package/dist/mcp/tool-schemas.d.ts +334 -0
- package/dist/mcp/tool-schemas.d.ts.map +1 -1
- package/dist/mcp/tool-schemas.js +126 -5
- package/dist/mcp/tool-schemas.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/dev-routes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dev-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/dev-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export function createDevRoutes(config) {
|
|
|
10
10
|
app.get("/events", (c) => {
|
|
11
11
|
const eventBus = config.getEventBus?.();
|
|
12
12
|
let liveHandler;
|
|
13
|
+
let heartbeatTimer;
|
|
13
14
|
return c.newResponse(new ReadableStream({
|
|
14
15
|
start(controller) {
|
|
15
16
|
const encoder = new TextEncoder();
|
|
@@ -19,6 +20,15 @@ export function createDevRoutes(config) {
|
|
|
19
20
|
const data = JSON.stringify(serializeEvent(event));
|
|
20
21
|
controller.enqueue(encoder.encode(`event: ${event.type}\ndata: ${data}\n\n`));
|
|
21
22
|
}
|
|
23
|
+
// SSE keepalive: send comment every 30s to prevent idle timeout
|
|
24
|
+
heartbeatTimer = setInterval(() => {
|
|
25
|
+
try {
|
|
26
|
+
controller.enqueue(encoder.encode(":keepalive\n\n"));
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Client disconnected
|
|
30
|
+
}
|
|
31
|
+
}, 30_000);
|
|
22
32
|
if (!eventBus)
|
|
23
33
|
return;
|
|
24
34
|
// Subscribe to new events
|
|
@@ -35,6 +45,10 @@ export function createDevRoutes(config) {
|
|
|
35
45
|
eventBus.onAny(handler);
|
|
36
46
|
},
|
|
37
47
|
cancel() {
|
|
48
|
+
if (heartbeatTimer) {
|
|
49
|
+
clearInterval(heartbeatTimer);
|
|
50
|
+
heartbeatTimer = undefined;
|
|
51
|
+
}
|
|
38
52
|
if (liveHandler) {
|
|
39
53
|
eventBus?.offAny(liveHandler);
|
|
40
54
|
liveHandler = undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-routes.js","sourceRoot":"","sources":["../../src/gateway/dev-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA0B5B,MAAM,UAAU,eAAe,CAAC,MAAuB;IACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,4CAA4C;IAC5C,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,gDAAgD;IAChD,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAExC,IAAI,WAAqD,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-routes.js","sourceRoot":"","sources":["../../src/gateway/dev-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway-server.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-server.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAA6F,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmClJ,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClI,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;
|
|
1
|
+
{"version":3,"file":"gateway-server.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-server.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAA6F,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAmClJ,YAAY,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClI,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,gFAAgF;IAChF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAmED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2sCnG;AAkKD,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF9E"}
|
|
@@ -22,11 +22,11 @@ import { DevTokenStore } from "./dev-token-store.js";
|
|
|
22
22
|
import { ConversationEventEmitter } from "./conversation-event-emitter.js";
|
|
23
23
|
import { createSttAdapter } from "./stt-factory.js";
|
|
24
24
|
import { createKnowledgePipeline, createSourceManager, createContactMemoryService } from "./knowledge-factory.js";
|
|
25
|
-
import { extractText } from "@kilnai/core";
|
|
25
|
+
import { extractText, textPart, textParts } from "@kilnai/core";
|
|
26
26
|
import { WebhookDedup } from "./webhook-dedup.js";
|
|
27
27
|
import { IntegrationRegistry } from "./integration-registry.js";
|
|
28
28
|
import { LocalCredentialResolver } from "./local-credential-resolver.js";
|
|
29
|
-
import { configureIntegrationDeps } from "./tenant-tool-factory.js";
|
|
29
|
+
import { configureIntegrationDeps, getIntegrationDeps } from "./tenant-tool-factory.js";
|
|
30
30
|
import { SqliteEmailThreadStore } from "./sqlite-email-thread-store.js";
|
|
31
31
|
import { SqliteEnrichmentStore } from "../enrichment/sqlite-enrichment-store.js";
|
|
32
32
|
import { CompositeEventStore } from "../observability/composite-event-store.js";
|
|
@@ -79,6 +79,22 @@ function resolveStudioDist() {
|
|
|
79
79
|
return undefined;
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
+
class ProviderScorerLlmBridge {
|
|
83
|
+
adapter;
|
|
84
|
+
model;
|
|
85
|
+
constructor(adapter, model) {
|
|
86
|
+
this.adapter = adapter;
|
|
87
|
+
this.model = model;
|
|
88
|
+
}
|
|
89
|
+
async evaluate(prompt) {
|
|
90
|
+
const response = await this.adapter.createMessage({
|
|
91
|
+
system: `You are an evaluation judge running as model ${this.model}.`,
|
|
92
|
+
messages: [{ role: "user", parts: [textPart(prompt)] }],
|
|
93
|
+
maxTokens: 512,
|
|
94
|
+
});
|
|
95
|
+
return extractText(response.parts);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
82
98
|
export async function startGateway(configPath, options) {
|
|
83
99
|
let content;
|
|
84
100
|
try {
|
|
@@ -844,6 +860,18 @@ export async function startGateway(configPath, options) {
|
|
|
844
860
|
const mcpApiKey = gatewayConfig.mcp.auth?.type === "api-key" && gatewayConfig.mcp.auth.keyEnv
|
|
845
861
|
? process.env[gatewayConfig.mcp.auth.keyEnv]
|
|
846
862
|
: undefined;
|
|
863
|
+
const evalProvider = gatewayConfig.mcp.eval
|
|
864
|
+
? createProviderFromConfig({
|
|
865
|
+
name: gatewayConfig.mcp.eval.provider,
|
|
866
|
+
model: gatewayConfig.mcp.eval.model,
|
|
867
|
+
apiKeyEnv: gatewayConfig.mcp.eval.apiKeyEnv,
|
|
868
|
+
})
|
|
869
|
+
: undefined;
|
|
870
|
+
const evalBridge = evalProvider && gatewayConfig.mcp.eval
|
|
871
|
+
? new ProviderScorerLlmBridge(evalProvider, gatewayConfig.mcp.eval.model ?? "claude-haiku-4-5-20251001")
|
|
872
|
+
: undefined;
|
|
873
|
+
const { SwarmStore } = await import("../mcp/swarm-store.js");
|
|
874
|
+
const swarmStore = devMemoryStores ? new SwarmStore(devMemoryStores.get("project")) : undefined;
|
|
847
875
|
const mcpServer = new GatewayMcpServer({
|
|
848
876
|
deps: {
|
|
849
877
|
getMemoryByScope: devMemoryStores
|
|
@@ -887,6 +915,100 @@ export async function startGateway(configPath, options) {
|
|
|
887
915
|
return false;
|
|
888
916
|
}
|
|
889
917
|
: undefined,
|
|
918
|
+
getCrossAgentMemory: devMemoryStores
|
|
919
|
+
? async (teamId, q, tags, limit) => {
|
|
920
|
+
const store = devMemoryStores.get("project");
|
|
921
|
+
if (!store)
|
|
922
|
+
return [];
|
|
923
|
+
const teamTag = `_team:${teamId}`;
|
|
924
|
+
const requiredTags = [teamTag, ...parseCommaTags(tags)];
|
|
925
|
+
const maxResults = limit ?? 50;
|
|
926
|
+
if (q) {
|
|
927
|
+
const results = await store.search(q, maxResults);
|
|
928
|
+
return results
|
|
929
|
+
.filter((r) => hasAllTags(r.entry.tags, requiredTags))
|
|
930
|
+
.slice(0, maxResults)
|
|
931
|
+
.map((r) => ({
|
|
932
|
+
id: r.entry.id,
|
|
933
|
+
layer: r.entry.layer,
|
|
934
|
+
content: r.entry.content,
|
|
935
|
+
tags: r.entry.tags,
|
|
936
|
+
score: r.score,
|
|
937
|
+
snippet: r.snippet,
|
|
938
|
+
}));
|
|
939
|
+
}
|
|
940
|
+
return store
|
|
941
|
+
.listEntries({ tags: requiredTags.join(","), limit: maxResults })
|
|
942
|
+
.slice(0, maxResults)
|
|
943
|
+
.map((e) => ({
|
|
944
|
+
id: e.id,
|
|
945
|
+
layer: e.layer,
|
|
946
|
+
content: e.content,
|
|
947
|
+
tags: e.tags,
|
|
948
|
+
}));
|
|
949
|
+
}
|
|
950
|
+
: undefined,
|
|
951
|
+
setCrossAgentMemory: devMemoryStores
|
|
952
|
+
? async (teamId, key, content, tags) => {
|
|
953
|
+
const store = devMemoryStores.get("project");
|
|
954
|
+
if (!store)
|
|
955
|
+
return { id: "" };
|
|
956
|
+
const teamTag = `_team:${teamId}`;
|
|
957
|
+
const mergedTags = uniqueTags([teamTag, `key:${key}`, ...parseCommaTags(tags)]);
|
|
958
|
+
const id = await store.save({ layer: "project", content, tags: mergedTags });
|
|
959
|
+
return { id };
|
|
960
|
+
}
|
|
961
|
+
: undefined,
|
|
962
|
+
deleteCrossAgentMemory: devMemoryStores
|
|
963
|
+
? async (teamId, id) => {
|
|
964
|
+
const store = devMemoryStores.get("project");
|
|
965
|
+
if (!store)
|
|
966
|
+
return false;
|
|
967
|
+
const teamTag = `_team:${teamId}`;
|
|
968
|
+
const entry = store.listEntries({ limit: 1000000 }).find((e) => e.id === id);
|
|
969
|
+
if (!entry || !entry.tags.includes(teamTag))
|
|
970
|
+
return false;
|
|
971
|
+
await store.forget(id);
|
|
972
|
+
return true;
|
|
973
|
+
}
|
|
974
|
+
: undefined,
|
|
975
|
+
listCrossAgentMemory: devMemoryStores
|
|
976
|
+
? async (teamId, tags, limit) => {
|
|
977
|
+
const store = devMemoryStores.get("project");
|
|
978
|
+
if (!store)
|
|
979
|
+
return [];
|
|
980
|
+
const teamTag = `_team:${teamId}`;
|
|
981
|
+
const tagFilter = uniqueTags([teamTag, ...parseCommaTags(tags)]).join(",");
|
|
982
|
+
const maxResults = limit ?? 50;
|
|
983
|
+
return store
|
|
984
|
+
.listEntries({ tags: tagFilter, limit: maxResults })
|
|
985
|
+
.slice(0, maxResults)
|
|
986
|
+
.map((e) => ({
|
|
987
|
+
id: e.id,
|
|
988
|
+
layer: e.layer,
|
|
989
|
+
content: e.content,
|
|
990
|
+
tags: e.tags,
|
|
991
|
+
}));
|
|
992
|
+
}
|
|
993
|
+
: undefined,
|
|
994
|
+
swarmJoin: swarmStore
|
|
995
|
+
? (swarmId, agentId, description) => swarmStore.join(swarmId, agentId, description)
|
|
996
|
+
: undefined,
|
|
997
|
+
swarmLeave: swarmStore
|
|
998
|
+
? (swarmId, agentId) => swarmStore.leave(swarmId, agentId)
|
|
999
|
+
: undefined,
|
|
1000
|
+
swarmStatus: swarmStore
|
|
1001
|
+
? (swarmId) => swarmStore.status(swarmId)
|
|
1002
|
+
: undefined,
|
|
1003
|
+
swarmBroadcast: swarmStore
|
|
1004
|
+
? (swarmId, agentId, message) => swarmStore.broadcast(swarmId, agentId, message)
|
|
1005
|
+
: undefined,
|
|
1006
|
+
swarmClaim: swarmStore
|
|
1007
|
+
? (swarmId, agentId, resourceId) => swarmStore.claim(swarmId, agentId, resourceId)
|
|
1008
|
+
: undefined,
|
|
1009
|
+
swarmRelease: swarmStore
|
|
1010
|
+
? (swarmId, agentId, resourceId) => swarmStore.release(swarmId, agentId, resourceId)
|
|
1011
|
+
: undefined,
|
|
890
1012
|
searchKnowledge: async (appName, query, limit) => {
|
|
891
1013
|
const loaded = loadedApps.find((a) => a.name === appName);
|
|
892
1014
|
if (!loaded?.knowledgePipeline)
|
|
@@ -916,6 +1038,170 @@ export async function startGateway(configPath, options) {
|
|
|
916
1038
|
apps[appName] = pipeline.metrics;
|
|
917
1039
|
return { enabled: true, apps };
|
|
918
1040
|
},
|
|
1041
|
+
// Integration Runtime (Phase 4)
|
|
1042
|
+
listIntegrations: () => {
|
|
1043
|
+
const deps = getIntegrationDeps();
|
|
1044
|
+
if (!deps)
|
|
1045
|
+
return [];
|
|
1046
|
+
return deps.registry.all().map((a) => ({
|
|
1047
|
+
provider: a.provider,
|
|
1048
|
+
version: a.version,
|
|
1049
|
+
operations: a.operations.map((op) => ({ name: op.name, description: op.description })),
|
|
1050
|
+
}));
|
|
1051
|
+
},
|
|
1052
|
+
executeIntegration: async (provider, operation, tenantId, input) => {
|
|
1053
|
+
const deps = getIntegrationDeps();
|
|
1054
|
+
if (!deps)
|
|
1055
|
+
throw new KilnError("CONFIG_INVALID", "Integration runtime not configured");
|
|
1056
|
+
const adapter = deps.registry.get(provider);
|
|
1057
|
+
if (!adapter)
|
|
1058
|
+
throw new KilnError("CONFIG_INVALID", `Integration provider "${provider}" not registered`);
|
|
1059
|
+
const { IntegrationExecutor } = await import("./integration-executor.js");
|
|
1060
|
+
const executor = new IntegrationExecutor(adapter, deps.credentialResolver, tenantId, provider);
|
|
1061
|
+
return executor.execute(operation, input);
|
|
1062
|
+
},
|
|
1063
|
+
// Routing diagnostics
|
|
1064
|
+
testRouting: async (tenantId, message) => {
|
|
1065
|
+
for (const loaded of loadedApps) {
|
|
1066
|
+
const tr = loaded.tenantRuntime;
|
|
1067
|
+
if (!tr)
|
|
1068
|
+
continue;
|
|
1069
|
+
const tenant = tr.tenantRegistry.get(tenantId);
|
|
1070
|
+
if (!tenant || !tenant.routing || !tenant.agents?.length)
|
|
1071
|
+
continue;
|
|
1072
|
+
const { DefaultTenantRouter } = await import("../tenant/tenant-router.js");
|
|
1073
|
+
const userParts = textParts(message);
|
|
1074
|
+
const text = extractText(userParts);
|
|
1075
|
+
const allRules = [];
|
|
1076
|
+
for (const rule of tenant.routing.rules ?? []) {
|
|
1077
|
+
try {
|
|
1078
|
+
allRules.push({ pattern: rule.match, agent: rule.agent, matched: new RegExp(rule.match, "i").test(text) });
|
|
1079
|
+
}
|
|
1080
|
+
catch {
|
|
1081
|
+
allRules.push({ pattern: rule.match, agent: rule.agent, matched: false });
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
const router = new DefaultTenantRouter(tenant.routing);
|
|
1085
|
+
const result = router.route(userParts);
|
|
1086
|
+
const agent = tenant.agents.find((a) => a.id === result.agentId);
|
|
1087
|
+
return {
|
|
1088
|
+
agentId: result.agentId,
|
|
1089
|
+
agentName: agent?.name ?? result.agentId,
|
|
1090
|
+
tier: result.tier,
|
|
1091
|
+
matchedPattern: result.matchedPattern ?? null,
|
|
1092
|
+
confidence: result.confidence ?? null,
|
|
1093
|
+
allRules,
|
|
1094
|
+
};
|
|
1095
|
+
}
|
|
1096
|
+
throw new KilnError("CONFIG_INVALID", `Tenant "${tenantId}" not found or has no routing configured`);
|
|
1097
|
+
},
|
|
1098
|
+
// Eval scoring (rule-based scorers only — no LLM dependency)
|
|
1099
|
+
evalScore: async (input, output, expected, scorerNames) => {
|
|
1100
|
+
const { ExactMatchScorer, JsonValidityScorer, EffortScorer, RoutingAccuracyScorer, ToolCallingAccuracyScorer } = await import("@kilnai/core");
|
|
1101
|
+
const allScorers = [
|
|
1102
|
+
new ExactMatchScorer(),
|
|
1103
|
+
new JsonValidityScorer(),
|
|
1104
|
+
new EffortScorer(),
|
|
1105
|
+
new RoutingAccuracyScorer(),
|
|
1106
|
+
new ToolCallingAccuracyScorer(),
|
|
1107
|
+
];
|
|
1108
|
+
const scorers = scorerNames?.length
|
|
1109
|
+
? allScorers.filter((s) => scorerNames.includes(s.name))
|
|
1110
|
+
: allScorers;
|
|
1111
|
+
const results = await Promise.all(scorers.map((s) => s.score({ input, output, expected })));
|
|
1112
|
+
return results;
|
|
1113
|
+
},
|
|
1114
|
+
evalScoreLlm: gatewayConfig.mcp?.eval
|
|
1115
|
+
? async (input, output, expected, context, scorerNames, scorerOptions) => {
|
|
1116
|
+
if (!evalBridge)
|
|
1117
|
+
return [];
|
|
1118
|
+
const { FaithfulnessScorer, RelevanceScorer, CoherenceScorer, HallucinationScorer, ToxicityScorer, PolicyAdherenceScorer, ContextRelevanceScorer, ToolTrajectoryScorer, MultiTurnConsistencyScorer, SafetyPreservationScorer, HandoffQualityScorer, CustomPromptScorer, } = await import("@kilnai/core");
|
|
1119
|
+
const isRecord = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
1120
|
+
const options = isRecord(scorerOptions) ? scorerOptions : {};
|
|
1121
|
+
const policies = Array.isArray(options["policies"]) && options["policies"].every((p) => typeof p === "string")
|
|
1122
|
+
? options["policies"]
|
|
1123
|
+
: [];
|
|
1124
|
+
const customPrompt = typeof options["prompt"] === "string" && options["prompt"].trim()
|
|
1125
|
+
? options["prompt"]
|
|
1126
|
+
: `Evaluate this output quality.
|
|
1127
|
+
|
|
1128
|
+
Input: {{input}}
|
|
1129
|
+
Output: {{output}}
|
|
1130
|
+
Expected: {{expected}}
|
|
1131
|
+
Context: {{context}}
|
|
1132
|
+
|
|
1133
|
+
Respond EXACTLY in this format:
|
|
1134
|
+
SCORE: <number from 0.0 to 1.0>
|
|
1135
|
+
REASONING: <one sentence explanation>`;
|
|
1136
|
+
const metadata = {};
|
|
1137
|
+
if (isRecord(options["metadata"]))
|
|
1138
|
+
Object.assign(metadata, options["metadata"]);
|
|
1139
|
+
for (const key of ["toolCalls", "conversationHistory", "handoffHistory", "attackType"]) {
|
|
1140
|
+
if (key in options)
|
|
1141
|
+
metadata[key] = options[key];
|
|
1142
|
+
}
|
|
1143
|
+
const allScorers = [
|
|
1144
|
+
new FaithfulnessScorer(evalBridge),
|
|
1145
|
+
new RelevanceScorer(evalBridge),
|
|
1146
|
+
new CoherenceScorer(evalBridge),
|
|
1147
|
+
new HallucinationScorer(evalBridge),
|
|
1148
|
+
new ToxicityScorer(evalBridge),
|
|
1149
|
+
new PolicyAdherenceScorer(evalBridge, policies),
|
|
1150
|
+
new ContextRelevanceScorer(evalBridge),
|
|
1151
|
+
new ToolTrajectoryScorer(evalBridge),
|
|
1152
|
+
new MultiTurnConsistencyScorer(evalBridge),
|
|
1153
|
+
new SafetyPreservationScorer(evalBridge),
|
|
1154
|
+
new HandoffQualityScorer(evalBridge),
|
|
1155
|
+
new CustomPromptScorer("custom-prompt", customPrompt, evalBridge),
|
|
1156
|
+
];
|
|
1157
|
+
const scorers = scorerNames?.length
|
|
1158
|
+
? allScorers.filter((s) => scorerNames.includes(s.name))
|
|
1159
|
+
: allScorers;
|
|
1160
|
+
return Promise.all(scorers.map((s) => s.score({ input, output, expected, context, metadata })));
|
|
1161
|
+
}
|
|
1162
|
+
: undefined,
|
|
1163
|
+
// Enrichment access
|
|
1164
|
+
getEnrichment: async (sessionId) => {
|
|
1165
|
+
for (const loaded of loadedApps) {
|
|
1166
|
+
const store = loaded.enrichmentAdminConfig?.enrichmentStore;
|
|
1167
|
+
if (!store)
|
|
1168
|
+
continue;
|
|
1169
|
+
const enrichment = await store.get(sessionId);
|
|
1170
|
+
if (enrichment)
|
|
1171
|
+
return enrichment;
|
|
1172
|
+
}
|
|
1173
|
+
return undefined;
|
|
1174
|
+
},
|
|
1175
|
+
listEnrichments: async (tenantId, limit, cursor) => {
|
|
1176
|
+
for (const loaded of loadedApps) {
|
|
1177
|
+
const store = loaded.enrichmentAdminConfig?.enrichmentStore;
|
|
1178
|
+
if (!store)
|
|
1179
|
+
continue;
|
|
1180
|
+
const result = await store.listByTenant(tenantId, limit ?? 20, cursor);
|
|
1181
|
+
return {
|
|
1182
|
+
enrichments: result.enrichments,
|
|
1183
|
+
nextCursor: result.nextCursor,
|
|
1184
|
+
};
|
|
1185
|
+
}
|
|
1186
|
+
return { enrichments: [] };
|
|
1187
|
+
},
|
|
1188
|
+
// Budget enforcement
|
|
1189
|
+
checkBudget: async (tenantId, appName) => {
|
|
1190
|
+
const loaded = loadedApps.find((a) => a.name === appName);
|
|
1191
|
+
const billing = loaded?.tenantRuntime?.billing;
|
|
1192
|
+
if (!billing)
|
|
1193
|
+
return { allowed: true, remaining: -1, unit: "unknown" };
|
|
1194
|
+
const { checkBudget: check } = await import("./budget-middleware.js");
|
|
1195
|
+
return check(billing, tenantId);
|
|
1196
|
+
},
|
|
1197
|
+
reportUsage: async (tenantId, appName, messages, tokens, model) => {
|
|
1198
|
+
const loaded = loadedApps.find((a) => a.name === appName);
|
|
1199
|
+
const billing = loaded?.tenantRuntime?.billing;
|
|
1200
|
+
if (!billing)
|
|
1201
|
+
return;
|
|
1202
|
+
const { reportUsage: report } = await import("./budget-middleware.js");
|
|
1203
|
+
await report(billing, { tenantId, messages, tokens, model });
|
|
1204
|
+
},
|
|
919
1205
|
},
|
|
920
1206
|
apiKey: mcpApiKey,
|
|
921
1207
|
});
|
|
@@ -948,6 +1234,17 @@ const VALID_MEMORY_LAYERS = ["user", "agent", "project"];
|
|
|
948
1234
|
function resolveMemoryLayer(scope) {
|
|
949
1235
|
return VALID_MEMORY_LAYERS.includes(scope) ? scope : "project";
|
|
950
1236
|
}
|
|
1237
|
+
function parseCommaTags(tags) {
|
|
1238
|
+
if (!tags)
|
|
1239
|
+
return [];
|
|
1240
|
+
return tags.split(",").map((t) => t.trim()).filter(Boolean);
|
|
1241
|
+
}
|
|
1242
|
+
function uniqueTags(tags) {
|
|
1243
|
+
return [...new Set(tags.filter(Boolean))];
|
|
1244
|
+
}
|
|
1245
|
+
function hasAllTags(entryTags, requiredTags) {
|
|
1246
|
+
return requiredTags.every((tag) => entryTags.includes(tag));
|
|
1247
|
+
}
|
|
951
1248
|
/** Create a ProviderAdapter from a Mode B provider config */
|
|
952
1249
|
function createProviderFromConfig(config) {
|
|
953
1250
|
const apiKey = config.apiKeyEnv ? process.env[config.apiKeyEnv] ?? "" : "";
|
|
@@ -1056,7 +1353,8 @@ async function serveAndWait(app, port, onShutdown, websocketHandler) {
|
|
|
1056
1353
|
const websocket = websocketHandler ?? createBunWebSocket().websocket;
|
|
1057
1354
|
let server;
|
|
1058
1355
|
try {
|
|
1059
|
-
|
|
1356
|
+
// idleTimeout: 255s is the uWebSockets max (uint8). Prevents Bun from killing SSE streams.
|
|
1357
|
+
server = Bun.serve({ port, fetch: app.fetch, websocket, idleTimeout: 255 });
|
|
1060
1358
|
}
|
|
1061
1359
|
catch (err) {
|
|
1062
1360
|
if (err instanceof Error && "code" in err && err.code === "EADDRINUSE") {
|