@kilnai/runtime 0.1.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/dist/a2a/a2a-client.d.ts +6 -0
- package/dist/a2a/a2a-client.d.ts.map +1 -0
- package/dist/a2a/a2a-client.js +112 -0
- package/dist/a2a/a2a-client.js.map +1 -0
- package/dist/a2a/index.d.ts +2 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +3 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/channels/api-channel.d.ts +43 -0
- package/dist/channels/api-channel.d.ts.map +1 -0
- package/dist/channels/api-channel.js +95 -0
- package/dist/channels/api-channel.js.map +1 -0
- package/dist/channels/channel-registry.d.ts +25 -0
- package/dist/channels/channel-registry.d.ts.map +1 -0
- package/dist/channels/channel-registry.js +49 -0
- package/dist/channels/channel-registry.js.map +1 -0
- package/dist/channels/channel-router.d.ts +43 -0
- package/dist/channels/channel-router.d.ts.map +1 -0
- package/dist/channels/channel-router.js +72 -0
- package/dist/channels/channel-router.js.map +1 -0
- package/dist/channels/cli-channel.d.ts +19 -0
- package/dist/channels/cli-channel.d.ts.map +1 -0
- package/dist/channels/cli-channel.js +37 -0
- package/dist/channels/cli-channel.js.map +1 -0
- package/dist/channels/event-bridge.d.ts +27 -0
- package/dist/channels/event-bridge.d.ts.map +1 -0
- package/dist/channels/event-bridge.js +83 -0
- package/dist/channels/event-bridge.js.map +1 -0
- package/dist/channels/index.d.ts +17 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +12 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/message-formatter.d.ts +4 -0
- package/dist/channels/message-formatter.d.ts.map +1 -0
- package/dist/channels/message-formatter.js +32 -0
- package/dist/channels/message-formatter.js.map +1 -0
- package/dist/channels/slack-channel.d.ts +32 -0
- package/dist/channels/slack-channel.d.ts.map +1 -0
- package/dist/channels/slack-channel.js +71 -0
- package/dist/channels/slack-channel.js.map +1 -0
- package/dist/channels/types.d.ts +27 -0
- package/dist/channels/types.d.ts.map +1 -0
- package/dist/channels/types.js +12 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/channels/web-channel.d.ts +37 -0
- package/dist/channels/web-channel.d.ts.map +1 -0
- package/dist/channels/web-channel.js +112 -0
- package/dist/channels/web-channel.js.map +1 -0
- package/dist/channels/whatsapp-api.d.ts +20 -0
- package/dist/channels/whatsapp-api.d.ts.map +1 -0
- package/dist/channels/whatsapp-api.js +44 -0
- package/dist/channels/whatsapp-api.js.map +1 -0
- package/dist/channels/whatsapp-channel.d.ts +32 -0
- package/dist/channels/whatsapp-channel.d.ts.map +1 -0
- package/dist/channels/whatsapp-channel.js +85 -0
- package/dist/channels/whatsapp-channel.js.map +1 -0
- package/dist/gateway/app-resolver.d.ts +11 -0
- package/dist/gateway/app-resolver.d.ts.map +1 -0
- package/dist/gateway/app-resolver.js +36 -0
- package/dist/gateway/app-resolver.js.map +1 -0
- package/dist/gateway/approval-registry.d.ts +19 -0
- package/dist/gateway/approval-registry.d.ts.map +1 -0
- package/dist/gateway/approval-registry.js +49 -0
- package/dist/gateway/approval-registry.js.map +1 -0
- package/dist/gateway/budget-middleware.d.ts +47 -0
- package/dist/gateway/budget-middleware.d.ts.map +1 -0
- package/dist/gateway/budget-middleware.js +88 -0
- package/dist/gateway/budget-middleware.js.map +1 -0
- package/dist/gateway/config-validator.d.ts +31 -0
- package/dist/gateway/config-validator.d.ts.map +1 -0
- package/dist/gateway/config-validator.js +68 -0
- package/dist/gateway/config-validator.js.map +1 -0
- package/dist/gateway/delegation-handler.d.ts +53 -0
- package/dist/gateway/delegation-handler.d.ts.map +1 -0
- package/dist/gateway/delegation-handler.js +257 -0
- package/dist/gateway/delegation-handler.js.map +1 -0
- package/dist/gateway/delegation-routes.d.ts +7 -0
- package/dist/gateway/delegation-routes.d.ts.map +1 -0
- package/dist/gateway/delegation-routes.js +48 -0
- package/dist/gateway/delegation-routes.js.map +1 -0
- package/dist/gateway/dev-inspector.d.ts +2 -0
- package/dist/gateway/dev-inspector.d.ts.map +1 -0
- package/dist/gateway/dev-inspector.js +355 -0
- package/dist/gateway/dev-inspector.js.map +1 -0
- package/dist/gateway/dev-orchestrator.d.ts +24 -0
- package/dist/gateway/dev-orchestrator.d.ts.map +1 -0
- package/dist/gateway/dev-orchestrator.js +71 -0
- package/dist/gateway/dev-orchestrator.js.map +1 -0
- package/dist/gateway/dev-routes-types.d.ts +39 -0
- package/dist/gateway/dev-routes-types.d.ts.map +1 -0
- package/dist/gateway/dev-routes-types.js +3 -0
- package/dist/gateway/dev-routes-types.js.map +1 -0
- package/dist/gateway/dev-routes.d.ts +53 -0
- package/dist/gateway/dev-routes.d.ts.map +1 -0
- package/dist/gateway/dev-routes.js +217 -0
- package/dist/gateway/dev-routes.js.map +1 -0
- package/dist/gateway/dev-token-store.d.ts +19 -0
- package/dist/gateway/dev-token-store.d.ts.map +1 -0
- package/dist/gateway/dev-token-store.js +40 -0
- package/dist/gateway/dev-token-store.js.map +1 -0
- package/dist/gateway/gateway-routes.d.ts +46 -0
- package/dist/gateway/gateway-routes.d.ts.map +1 -0
- package/dist/gateway/gateway-routes.js +143 -0
- package/dist/gateway/gateway-routes.js.map +1 -0
- package/dist/gateway/gateway-server.d.ts +25 -0
- package/dist/gateway/gateway-server.d.ts.map +1 -0
- package/dist/gateway/gateway-server.js +736 -0
- package/dist/gateway/gateway-server.js.map +1 -0
- package/dist/gateway/health-registry.d.ts +18 -0
- package/dist/gateway/health-registry.d.ts.map +1 -0
- package/dist/gateway/health-registry.js +40 -0
- package/dist/gateway/health-registry.js.map +1 -0
- package/dist/gateway/memory-routes.d.ts +12 -0
- package/dist/gateway/memory-routes.d.ts.map +1 -0
- package/dist/gateway/memory-routes.js +32 -0
- package/dist/gateway/memory-routes.js.map +1 -0
- package/dist/gateway/mode-b-routes.d.ts +14 -0
- package/dist/gateway/mode-b-routes.d.ts.map +1 -0
- package/dist/gateway/mode-b-routes.js +96 -0
- package/dist/gateway/mode-b-routes.js.map +1 -0
- package/dist/gateway/safety-middleware.d.ts +21 -0
- package/dist/gateway/safety-middleware.d.ts.map +1 -0
- package/dist/gateway/safety-middleware.js +175 -0
- package/dist/gateway/safety-middleware.js.map +1 -0
- package/dist/gateway/security-middleware.d.ts +12 -0
- package/dist/gateway/security-middleware.d.ts.map +1 -0
- package/dist/gateway/security-middleware.js +62 -0
- package/dist/gateway/security-middleware.js.map +1 -0
- package/dist/gateway/tenant-admin-routes.d.ts +15 -0
- package/dist/gateway/tenant-admin-routes.d.ts.map +1 -0
- package/dist/gateway/tenant-admin-routes.js +148 -0
- package/dist/gateway/tenant-admin-routes.js.map +1 -0
- package/dist/gateway/tenant-routes.d.ts +15 -0
- package/dist/gateway/tenant-routes.d.ts.map +1 -0
- package/dist/gateway/tenant-routes.js +107 -0
- package/dist/gateway/tenant-routes.js.map +1 -0
- package/dist/gateway/whatsapp-webhook-routes.d.ts +15 -0
- package/dist/gateway/whatsapp-webhook-routes.d.ts.map +1 -0
- package/dist/gateway/whatsapp-webhook-routes.js +217 -0
- package/dist/gateway/whatsapp-webhook-routes.js.map +1 -0
- package/dist/gateway/ws-routes.d.ts +19 -0
- package/dist/gateway/ws-routes.d.ts.map +1 -0
- package/dist/gateway/ws-routes.js +79 -0
- package/dist/gateway/ws-routes.js.map +1 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +44 -0
- package/dist/index.js.map +1 -0
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +4 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/mode-b-orchestrator.d.ts +43 -0
- package/dist/session/mode-b-orchestrator.d.ts.map +1 -0
- package/dist/session/mode-b-orchestrator.js +224 -0
- package/dist/session/mode-b-orchestrator.js.map +1 -0
- package/dist/session/mode-b-session.d.ts +29 -0
- package/dist/session/mode-b-session.d.ts.map +1 -0
- package/dist/session/mode-b-session.js +50 -0
- package/dist/session/mode-b-session.js.map +1 -0
- package/dist/session/session-registry.d.ts +15 -0
- package/dist/session/session-registry.d.ts.map +1 -0
- package/dist/session/session-registry.js +60 -0
- package/dist/session/session-registry.js.map +1 -0
- package/dist/tenant/index.d.ts +3 -0
- package/dist/tenant/index.d.ts.map +1 -0
- package/dist/tenant/index.js +3 -0
- package/dist/tenant/index.js.map +1 -0
- package/dist/tenant/system-prompt-builder.d.ts +3 -0
- package/dist/tenant/system-prompt-builder.d.ts.map +1 -0
- package/dist/tenant/system-prompt-builder.js +76 -0
- package/dist/tenant/system-prompt-builder.js.map +1 -0
- package/dist/tenant/tenant-registry.d.ts +33 -0
- package/dist/tenant/tenant-registry.d.ts.map +1 -0
- package/dist/tenant/tenant-registry.js +156 -0
- package/dist/tenant/tenant-registry.js.map +1 -0
- package/dist/trigger/event-listener.d.ts +22 -0
- package/dist/trigger/event-listener.d.ts.map +1 -0
- package/dist/trigger/event-listener.js +64 -0
- package/dist/trigger/event-listener.js.map +1 -0
- package/dist/trigger/index.d.ts +10 -0
- package/dist/trigger/index.d.ts.map +1 -0
- package/dist/trigger/index.js +7 -0
- package/dist/trigger/index.js.map +1 -0
- package/dist/trigger/scheduler.d.ts +22 -0
- package/dist/trigger/scheduler.d.ts.map +1 -0
- package/dist/trigger/scheduler.js +77 -0
- package/dist/trigger/scheduler.js.map +1 -0
- package/dist/trigger/trigger-executor.d.ts +14 -0
- package/dist/trigger/trigger-executor.d.ts.map +1 -0
- package/dist/trigger/trigger-executor.js +47 -0
- package/dist/trigger/trigger-executor.js.map +1 -0
- package/dist/trigger/trigger-registry.d.ts +28 -0
- package/dist/trigger/trigger-registry.d.ts.map +1 -0
- package/dist/trigger/trigger-registry.js +118 -0
- package/dist/trigger/trigger-registry.js.map +1 -0
- package/dist/trigger/webhook-handler.d.ts +11 -0
- package/dist/trigger/webhook-handler.d.ts.map +1 -0
- package/dist/trigger/webhook-handler.js +71 -0
- package/dist/trigger/webhook-handler.js.map +1 -0
- package/dist/utils/hmac.d.ts +15 -0
- package/dist/utils/hmac.d.ts.map +1 -0
- package/dist/utils/hmac.js +27 -0
- package/dist/utils/hmac.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
export function createDevRoutes(config) {
|
|
3
|
+
const app = new Hono();
|
|
4
|
+
// GET /state -- current phase machine state
|
|
5
|
+
app.get("/state", (c) => {
|
|
6
|
+
const state = config.getPhaseState?.() ?? { status: "idle", phase: null };
|
|
7
|
+
return c.json(state);
|
|
8
|
+
});
|
|
9
|
+
// GET /events -- SSE stream of real-time events
|
|
10
|
+
app.get("/events", (c) => {
|
|
11
|
+
const eventBus = config.getEventBus?.();
|
|
12
|
+
let liveHandler;
|
|
13
|
+
return c.newResponse(new ReadableStream({
|
|
14
|
+
start(controller) {
|
|
15
|
+
const encoder = new TextEncoder();
|
|
16
|
+
// Send recent history first
|
|
17
|
+
const history = eventBus?.history(50) ?? [];
|
|
18
|
+
for (const event of history) {
|
|
19
|
+
const data = JSON.stringify(serializeEvent(event));
|
|
20
|
+
controller.enqueue(encoder.encode(`event: ${event.type}\ndata: ${data}\n\n`));
|
|
21
|
+
}
|
|
22
|
+
if (!eventBus)
|
|
23
|
+
return;
|
|
24
|
+
// Subscribe to new events
|
|
25
|
+
const handler = (event) => {
|
|
26
|
+
try {
|
|
27
|
+
const data = JSON.stringify(serializeEvent(event));
|
|
28
|
+
controller.enqueue(encoder.encode(`event: ${event.type}\ndata: ${data}\n\n`));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// Client disconnected
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
liveHandler = handler;
|
|
35
|
+
eventBus.onAny(handler);
|
|
36
|
+
},
|
|
37
|
+
cancel() {
|
|
38
|
+
if (liveHandler) {
|
|
39
|
+
eventBus?.offAny(liveHandler);
|
|
40
|
+
liveHandler = undefined;
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
}), {
|
|
44
|
+
headers: {
|
|
45
|
+
"Content-Type": "text/event-stream",
|
|
46
|
+
"Cache-Control": "no-cache",
|
|
47
|
+
Connection: "keep-alive",
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
// GET /memory -- memory contents snapshot
|
|
52
|
+
app.get("/memory", (c) => {
|
|
53
|
+
const memory = config.getMemorySnapshot?.() ?? { entries: [] };
|
|
54
|
+
return c.json(memory);
|
|
55
|
+
});
|
|
56
|
+
// GET /cost -- cost summary
|
|
57
|
+
app.get("/cost", (c) => {
|
|
58
|
+
const cost = config.getCostSummary?.() ?? { totalCostUsd: 0, byRole: {} };
|
|
59
|
+
return c.json(cost);
|
|
60
|
+
});
|
|
61
|
+
// GET /apps -- list loaded apps
|
|
62
|
+
app.get("/apps", (c) => {
|
|
63
|
+
const apps = config.getAppNames?.() ?? [];
|
|
64
|
+
return c.json({ apps });
|
|
65
|
+
});
|
|
66
|
+
// GET /triggers -- list registered triggers
|
|
67
|
+
app.get("/triggers", (c) => {
|
|
68
|
+
const triggers = config.getTriggers?.() ?? [];
|
|
69
|
+
return c.json({ triggers });
|
|
70
|
+
});
|
|
71
|
+
// GET /safety -- safety pipeline metrics
|
|
72
|
+
app.get("/safety", (c) => {
|
|
73
|
+
const metrics = config.getSafetyMetrics?.() ?? { enabled: false };
|
|
74
|
+
return c.json(metrics);
|
|
75
|
+
});
|
|
76
|
+
// GET /app-graph -- serialized App composite for Studio graph view
|
|
77
|
+
app.get("/app-graph", (c) => {
|
|
78
|
+
const graph = config.getAppGraph?.();
|
|
79
|
+
return c.json(graph ?? { name: "", teams: [], router: { rules: [], fallback: "" }, channels: [], triggers: [], hasKnowledge: false, hasEval: false, hasSafety: false });
|
|
80
|
+
});
|
|
81
|
+
// GET /yaml -- raw app.yaml content
|
|
82
|
+
app.get("/yaml", (c) => {
|
|
83
|
+
const content = config.getYamlContent?.();
|
|
84
|
+
if (content === undefined)
|
|
85
|
+
return c.text("", 404);
|
|
86
|
+
return c.text(content);
|
|
87
|
+
});
|
|
88
|
+
// PUT /yaml -- write modified YAML (validates before saving)
|
|
89
|
+
app.put("/yaml", async (c) => {
|
|
90
|
+
const body = await c.req.text();
|
|
91
|
+
const result = config.putYamlContent?.(body);
|
|
92
|
+
if (!result)
|
|
93
|
+
return c.json({ ok: false, errors: ["YAML editing not available"] }, 400);
|
|
94
|
+
if (!result.ok)
|
|
95
|
+
return c.json(result, 400);
|
|
96
|
+
return c.json(result);
|
|
97
|
+
});
|
|
98
|
+
// GET /memory/:scope -- memory entries by scope with optional query/tags
|
|
99
|
+
app.get("/memory/:scope", async (c) => {
|
|
100
|
+
const scope = c.req.param("scope");
|
|
101
|
+
const q = c.req.query("q");
|
|
102
|
+
const tags = c.req.query("tags");
|
|
103
|
+
const entries = await (config.getMemoryByScope?.(scope, q, tags) ?? []);
|
|
104
|
+
return c.json(entries);
|
|
105
|
+
});
|
|
106
|
+
// POST /memory -- create a memory entry
|
|
107
|
+
app.post("/memory", async (c) => {
|
|
108
|
+
const entry = await c.req.json();
|
|
109
|
+
const result = await config.createMemoryEntry?.(entry);
|
|
110
|
+
if (!result)
|
|
111
|
+
return c.json({ error: "Memory creation not available" }, 400);
|
|
112
|
+
return c.json(result, 201);
|
|
113
|
+
});
|
|
114
|
+
// DELETE /memory/:id -- delete a memory entry
|
|
115
|
+
app.delete("/memory/:id", async (c) => {
|
|
116
|
+
const id = c.req.param("id");
|
|
117
|
+
const deleted = await (config.deleteMemoryEntry?.(id) ?? false);
|
|
118
|
+
if (!deleted)
|
|
119
|
+
return c.json({ error: "Not found" }, 404);
|
|
120
|
+
return c.json({ ok: true });
|
|
121
|
+
});
|
|
122
|
+
// GET /eval/experiments -- list eval experiment configs
|
|
123
|
+
app.get("/eval/experiments", (c) => {
|
|
124
|
+
const experiments = config.getEvalExperiments?.() ?? [];
|
|
125
|
+
return c.json(experiments);
|
|
126
|
+
});
|
|
127
|
+
// POST /run -- start a dev orchestrator run
|
|
128
|
+
app.post("/run", async (c) => {
|
|
129
|
+
if (!config.startRun)
|
|
130
|
+
return c.json({ error: "Orchestrator not available" }, 404);
|
|
131
|
+
let task = "";
|
|
132
|
+
try {
|
|
133
|
+
const body = await c.req.json();
|
|
134
|
+
task = body.task ?? "";
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// body parse failed
|
|
138
|
+
}
|
|
139
|
+
if (!task.trim())
|
|
140
|
+
return c.json({ error: "task is required" }, 400);
|
|
141
|
+
const result = config.startRun(task);
|
|
142
|
+
if ("error" in result)
|
|
143
|
+
return c.json(result, 409);
|
|
144
|
+
return c.json(result, 201);
|
|
145
|
+
});
|
|
146
|
+
// GET /run -- current run status
|
|
147
|
+
app.get("/run", (c) => {
|
|
148
|
+
const status = config.getRunStatus?.();
|
|
149
|
+
return c.json(status ?? { sessionId: null, status: "idle", phase: null, task: null });
|
|
150
|
+
});
|
|
151
|
+
// POST /approve -- approve a pending phase gate
|
|
152
|
+
app.post("/approve", async (c) => {
|
|
153
|
+
if (!config.approvePhase) {
|
|
154
|
+
return c.json({ error: "No active orchestrator" }, 404);
|
|
155
|
+
}
|
|
156
|
+
let sessionId;
|
|
157
|
+
try {
|
|
158
|
+
const body = await c.req.json();
|
|
159
|
+
sessionId = body.sessionId;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// body is optional
|
|
163
|
+
}
|
|
164
|
+
const result = config.approvePhase(sessionId);
|
|
165
|
+
if (!result.ok) {
|
|
166
|
+
return c.json({ error: result.error ?? "No approval pending" }, 409);
|
|
167
|
+
}
|
|
168
|
+
return c.json({ ok: true });
|
|
169
|
+
});
|
|
170
|
+
// POST /reject -- reject a pending phase gate
|
|
171
|
+
app.post("/reject", async (c) => {
|
|
172
|
+
if (!config.rejectPhase) {
|
|
173
|
+
return c.json({ error: "No active orchestrator" }, 404);
|
|
174
|
+
}
|
|
175
|
+
let reason = "";
|
|
176
|
+
let sessionId;
|
|
177
|
+
try {
|
|
178
|
+
const body = await c.req.json();
|
|
179
|
+
reason = body.reason ?? "";
|
|
180
|
+
sessionId = body.sessionId;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// body is optional
|
|
184
|
+
}
|
|
185
|
+
const result = config.rejectPhase(reason, sessionId);
|
|
186
|
+
if (!result.ok) {
|
|
187
|
+
return c.json({ error: result.error ?? "No approval pending" }, 409);
|
|
188
|
+
}
|
|
189
|
+
return c.json({ ok: true });
|
|
190
|
+
});
|
|
191
|
+
// POST /token -- issue a dev-mode WebSocket auth token
|
|
192
|
+
app.post("/token", async (c) => {
|
|
193
|
+
if (!config.issueToken)
|
|
194
|
+
return c.json({ error: "Token management not available" }, 404);
|
|
195
|
+
let userId = "dev-user";
|
|
196
|
+
try {
|
|
197
|
+
const body = await c.req.json();
|
|
198
|
+
if (body.userId)
|
|
199
|
+
userId = body.userId;
|
|
200
|
+
}
|
|
201
|
+
catch {
|
|
202
|
+
// body is optional
|
|
203
|
+
}
|
|
204
|
+
const token = config.issueToken(userId);
|
|
205
|
+
return c.json({ token, userId });
|
|
206
|
+
});
|
|
207
|
+
return app;
|
|
208
|
+
}
|
|
209
|
+
function serializeEvent(event) {
|
|
210
|
+
return {
|
|
211
|
+
...event,
|
|
212
|
+
type: event.type,
|
|
213
|
+
timestamp: event.timestamp.toISOString(),
|
|
214
|
+
sessionId: event.sessionId,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=dev-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-routes.js","sourceRoot":"","sources":["../../src/gateway/dev-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface DevToken {
|
|
2
|
+
readonly token: string;
|
|
3
|
+
readonly userId: string;
|
|
4
|
+
readonly createdAt: number;
|
|
5
|
+
lastActivityAt: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class DevTokenStore {
|
|
8
|
+
private readonly tokens;
|
|
9
|
+
private readonly ttlMs;
|
|
10
|
+
constructor(ttlMs?: number);
|
|
11
|
+
issue(userId: string): string;
|
|
12
|
+
validate(token: string): {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
userId?: string;
|
|
15
|
+
};
|
|
16
|
+
revoke(token: string): boolean;
|
|
17
|
+
cleanup(): number;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=dev-token-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-token-store.d.ts","sourceRoot":"","sources":["../../src/gateway/dev-token-store.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,SAAiB;IAIlC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;IAY5D,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9B,OAAO,IAAI,MAAM;CAWlB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export class DevTokenStore {
|
|
2
|
+
tokens = new Map();
|
|
3
|
+
ttlMs;
|
|
4
|
+
constructor(ttlMs = 30 * 60 * 1000) {
|
|
5
|
+
this.ttlMs = ttlMs;
|
|
6
|
+
}
|
|
7
|
+
issue(userId) {
|
|
8
|
+
const token = crypto.randomUUID();
|
|
9
|
+
const now = Date.now();
|
|
10
|
+
this.tokens.set(token, { token, userId, createdAt: now, lastActivityAt: now });
|
|
11
|
+
return token;
|
|
12
|
+
}
|
|
13
|
+
validate(token) {
|
|
14
|
+
this.cleanup();
|
|
15
|
+
const entry = this.tokens.get(token);
|
|
16
|
+
if (!entry)
|
|
17
|
+
return { valid: false };
|
|
18
|
+
if (Date.now() - entry.lastActivityAt > this.ttlMs) {
|
|
19
|
+
this.tokens.delete(token);
|
|
20
|
+
return { valid: false };
|
|
21
|
+
}
|
|
22
|
+
entry.lastActivityAt = Date.now();
|
|
23
|
+
return { valid: true, userId: entry.userId };
|
|
24
|
+
}
|
|
25
|
+
revoke(token) {
|
|
26
|
+
return this.tokens.delete(token);
|
|
27
|
+
}
|
|
28
|
+
cleanup() {
|
|
29
|
+
const now = Date.now();
|
|
30
|
+
let removed = 0;
|
|
31
|
+
for (const [t, entry] of this.tokens) {
|
|
32
|
+
if (now - entry.lastActivityAt > this.ttlMs) {
|
|
33
|
+
this.tokens.delete(t);
|
|
34
|
+
removed++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return removed;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=dev-token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-token-store.js","sourceRoot":"","sources":["../../src/gateway/dev-token-store.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,aAAa;IACP,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IACrC,KAAK,CAAS;IAE/B,YAAY,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,MAAc;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QACD,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/C,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,OAAO;QACL,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,GAAG,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import type { App } from "@kilnai/core";
|
|
3
|
+
import type { GatewayAppBinding, SecurityConfig, AuditLog } from "@kilnai/core";
|
|
4
|
+
import type { ChannelRegistry } from "../channels/channel-registry.js";
|
|
5
|
+
import type { WebChannel } from "../channels/web-channel.js";
|
|
6
|
+
import type { ModeBAppRuntime } from "./mode-b-routes.js";
|
|
7
|
+
import type { WsRoutesConfig } from "./ws-routes.js";
|
|
8
|
+
import type { DelegationRegistry } from "./delegation-handler.js";
|
|
9
|
+
import type { TenantAppRuntime } from "./tenant-routes.js";
|
|
10
|
+
import type { WhatsAppWebhookConfig } from "./whatsapp-webhook-routes.js";
|
|
11
|
+
import type { TenantAdminRoutesConfig } from "./tenant-admin-routes.js";
|
|
12
|
+
import { HealthRegistry } from "./health-registry.js";
|
|
13
|
+
import type { SafetyPipeline } from "@kilnai/core";
|
|
14
|
+
import type { DevRoutesConfig } from "./dev-routes.js";
|
|
15
|
+
import type { MemoryRoutesConfig } from "./memory-routes.js";
|
|
16
|
+
import type { TriggerRegistry } from "../trigger/trigger-registry.js";
|
|
17
|
+
export interface LoadedApp {
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly app: App;
|
|
20
|
+
readonly binding: GatewayAppBinding;
|
|
21
|
+
readonly registry: ChannelRegistry;
|
|
22
|
+
modeBRuntime?: ModeBAppRuntime;
|
|
23
|
+
tenantRuntime?: TenantAppRuntime;
|
|
24
|
+
whatsappWebhookConfig?: WhatsAppWebhookConfig;
|
|
25
|
+
tenantAdminConfig?: TenantAdminRoutesConfig;
|
|
26
|
+
webChannel?: WebChannel;
|
|
27
|
+
}
|
|
28
|
+
export interface GatewayServerConfig {
|
|
29
|
+
readonly port: number;
|
|
30
|
+
readonly apps: readonly LoadedApp[];
|
|
31
|
+
readonly delegationRegistry?: DelegationRegistry;
|
|
32
|
+
readonly healthRegistry?: HealthRegistry;
|
|
33
|
+
readonly startTime?: number;
|
|
34
|
+
readonly securityConfig?: SecurityConfig;
|
|
35
|
+
readonly auditLog?: AuditLog;
|
|
36
|
+
readonly devMode?: boolean;
|
|
37
|
+
readonly devRoutesConfig?: DevRoutesConfig;
|
|
38
|
+
readonly memoryRoutesConfig?: MemoryRoutesConfig;
|
|
39
|
+
readonly triggerRegistry?: TriggerRegistry;
|
|
40
|
+
readonly safetyPipelines?: Map<string, SafetyPipeline>;
|
|
41
|
+
readonly studioDistPath?: string;
|
|
42
|
+
readonly upgradeWebSocket?: WsRoutesConfig["upgradeWebSocket"];
|
|
43
|
+
readonly validateToken?: WsRoutesConfig["validateToken"];
|
|
44
|
+
}
|
|
45
|
+
export declare function createGatewayApp(config: GatewayServerConfig): Hono;
|
|
46
|
+
//# sourceMappingURL=gateway-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-routes.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-routes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEhF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAC/D,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;CAC1D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CA0IlE"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
// Gateway: createGatewayApp -- pure Hono app factory (no Bun-specific imports)
|
|
2
|
+
// Separated from gateway-server.ts so it can be tested without Bun runtime.
|
|
3
|
+
import { Hono } from "hono";
|
|
4
|
+
import { PromptScanner } from "@kilnai/core";
|
|
5
|
+
import { createModeBRoutes } from "./mode-b-routes.js";
|
|
6
|
+
import { createWsRoutes } from "./ws-routes.js";
|
|
7
|
+
import { createDelegationRoutes } from "./delegation-routes.js";
|
|
8
|
+
import { createTenantRoutes } from "./tenant-routes.js";
|
|
9
|
+
import { createWhatsAppWebhookRoutes } from "./whatsapp-webhook-routes.js";
|
|
10
|
+
import { createTenantAdminRoutes } from "./tenant-admin-routes.js";
|
|
11
|
+
import { HealthRegistry } from "./health-registry.js";
|
|
12
|
+
import { securityMiddleware } from "./security-middleware.js";
|
|
13
|
+
import { safetyMiddleware } from "./safety-middleware.js";
|
|
14
|
+
import { createDevRoutes } from "./dev-routes.js";
|
|
15
|
+
import { createDevInspectorHtml } from "./dev-inspector.js";
|
|
16
|
+
import { createMemoryRoutes } from "./memory-routes.js";
|
|
17
|
+
export function createGatewayApp(config) {
|
|
18
|
+
const app = new Hono();
|
|
19
|
+
// Security middleware: prompt injection scanning (opt-in via securityConfig)
|
|
20
|
+
if (config.securityConfig?.promptInjection?.enabled) {
|
|
21
|
+
const scanner = new PromptScanner(config.securityConfig.promptInjection);
|
|
22
|
+
app.use("*", securityMiddleware(scanner, config.auditLog, config.securityConfig.promptInjection));
|
|
23
|
+
}
|
|
24
|
+
// Health endpoint
|
|
25
|
+
app.get("/health", async (c) => {
|
|
26
|
+
const startTime = config.startTime ?? Date.now();
|
|
27
|
+
const uptime = Math.floor((Date.now() - startTime) / 1000);
|
|
28
|
+
const appStatuses = config.apps.map((loadedApp) => ({
|
|
29
|
+
name: loadedApp.name,
|
|
30
|
+
status: "ok",
|
|
31
|
+
channels: loadedApp.binding.channels.map((ch) => ch.type),
|
|
32
|
+
multiTenant: loadedApp.binding.channels.some((ch) => ch.multiTenant === true),
|
|
33
|
+
}));
|
|
34
|
+
// Check subsystem health if registry is provided
|
|
35
|
+
let subsystems = {};
|
|
36
|
+
let overallStatus = "ok";
|
|
37
|
+
if (config.healthRegistry) {
|
|
38
|
+
subsystems = await config.healthRegistry.checkAll();
|
|
39
|
+
overallStatus = HealthRegistry.aggregateStatus(subsystems);
|
|
40
|
+
}
|
|
41
|
+
return c.json({
|
|
42
|
+
status: overallStatus,
|
|
43
|
+
uptime,
|
|
44
|
+
apps: appStatuses,
|
|
45
|
+
subsystems,
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
// Dev mode routes (local development only -- no auth)
|
|
49
|
+
if (config.devMode) {
|
|
50
|
+
if (config.studioDistPath) {
|
|
51
|
+
app.get("/dev/", (c) => c.redirect("/studio/"));
|
|
52
|
+
// Studio static files are served separately by the gateway server
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
app.get("/dev/", (c) => c.html(createDevInspectorHtml()));
|
|
56
|
+
}
|
|
57
|
+
const devRoutes = createDevRoutes(config.devRoutesConfig ?? {});
|
|
58
|
+
app.route("/dev", devRoutes);
|
|
59
|
+
}
|
|
60
|
+
// Production memory routes (available in all modes)
|
|
61
|
+
if (config.memoryRoutesConfig) {
|
|
62
|
+
const memoryRoutes = createMemoryRoutes(config.memoryRoutesConfig);
|
|
63
|
+
app.route("/api", memoryRoutes);
|
|
64
|
+
}
|
|
65
|
+
// Per-app routes
|
|
66
|
+
for (const loadedApp of config.apps) {
|
|
67
|
+
// Safety middleware per app (scans both input and output)
|
|
68
|
+
const safetyPipeline = config.safetyPipelines?.get(loadedApp.name);
|
|
69
|
+
if (safetyPipeline) {
|
|
70
|
+
for (const channel of loadedApp.binding.channels) {
|
|
71
|
+
if (channel.type === "api" && channel.path) {
|
|
72
|
+
app.use(`${channel.path}/*`, safetyMiddleware(safetyPipeline));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
for (const channel of loadedApp.binding.channels) {
|
|
77
|
+
if (channel.type === "api" && channel.path) {
|
|
78
|
+
// Multi-tenant apps use tenant routes; otherwise Mode B or placeholder
|
|
79
|
+
if (loadedApp.tenantRuntime) {
|
|
80
|
+
const tenantApp = createTenantRoutes(loadedApp.tenantRuntime);
|
|
81
|
+
app.route(channel.path, tenantApp);
|
|
82
|
+
}
|
|
83
|
+
else if (loadedApp.modeBRuntime) {
|
|
84
|
+
const modeBApp = createModeBRoutes(loadedApp.modeBRuntime);
|
|
85
|
+
app.route(channel.path, modeBApp);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const apiApp = new Hono();
|
|
89
|
+
const appName = loadedApp.name;
|
|
90
|
+
apiApp.get("/", (c) => {
|
|
91
|
+
return c.json({ app: appName, status: "ok" });
|
|
92
|
+
});
|
|
93
|
+
app.route(channel.path, apiApp);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// WhatsApp webhook routes for multi-tenant apps
|
|
97
|
+
if (channel.type === "whatsapp" && loadedApp.whatsappWebhookConfig) {
|
|
98
|
+
const webhookApp = createWhatsAppWebhookRoutes(loadedApp.whatsappWebhookConfig);
|
|
99
|
+
app.route(`/whatsapp/${loadedApp.name}`, webhookApp);
|
|
100
|
+
}
|
|
101
|
+
// WebSocket route for web channel
|
|
102
|
+
// processMessage only wired for Mode B apps -- tenant apps require tenantId
|
|
103
|
+
// scoping, validation, and billing that the WS frame protocol doesn't carry yet.
|
|
104
|
+
if (channel.type === "web" && loadedApp.webChannel && config.upgradeWebSocket) {
|
|
105
|
+
const runtime = loadedApp.modeBRuntime;
|
|
106
|
+
const wsApp = createWsRoutes({
|
|
107
|
+
webChannel: loadedApp.webChannel,
|
|
108
|
+
upgradeWebSocket: config.upgradeWebSocket,
|
|
109
|
+
validateToken: config.validateToken,
|
|
110
|
+
processMessage: runtime ? async (userId, parts) => {
|
|
111
|
+
const session = runtime.sessionRegistry.getOrCreate({
|
|
112
|
+
appName: loadedApp.name,
|
|
113
|
+
userId,
|
|
114
|
+
systemPrompt: runtime.systemPrompt,
|
|
115
|
+
});
|
|
116
|
+
return runtime.orchestrator.processMessage(session, parts);
|
|
117
|
+
} : undefined,
|
|
118
|
+
});
|
|
119
|
+
app.route(`/apps/${loadedApp.name}`, wsApp);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Admin routes for multi-tenant apps
|
|
123
|
+
if (loadedApp.tenantAdminConfig) {
|
|
124
|
+
const adminApp = createTenantAdminRoutes(loadedApp.tenantAdminConfig);
|
|
125
|
+
app.route(`/admin/${loadedApp.name}`, adminApp);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
// Mount webhook trigger routes per app
|
|
129
|
+
if (config.triggerRegistry) {
|
|
130
|
+
for (const loadedApp of config.apps) {
|
|
131
|
+
const webhookApp = config.triggerRegistry.getWebhookApp(loadedApp.name);
|
|
132
|
+
if (webhookApp) {
|
|
133
|
+
app.route(`/webhooks/${loadedApp.name}`, webhookApp);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (config.delegationRegistry) {
|
|
138
|
+
const delegationApp = createDelegationRoutes({ registry: config.delegationRegistry });
|
|
139
|
+
app.route("/_internal/delegation", delegationApp);
|
|
140
|
+
}
|
|
141
|
+
return app;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=gateway-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-routes.js","sourceRoot":"","sources":["../../src/gateway/gateway-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type { LoadedApp, GatewayServerConfig } from "./gateway-routes.js";
|
|
2
|
+
export { createGatewayApp } from "./gateway-routes.js";
|
|
3
|
+
export type { DevRoutesConfig } from "./dev-routes.js";
|
|
4
|
+
export { createDevRoutes } from "./dev-routes.js";
|
|
5
|
+
export type { AppGraphResponse, AppGraphTeam, AppGraphAgent, AppGraphRouter, EvalExperimentSummary } from "./dev-routes-types.js";
|
|
6
|
+
export { createDevInspectorHtml } from "./dev-inspector.js";
|
|
7
|
+
export { ApprovalGateRegistry } from "./approval-registry.js";
|
|
8
|
+
export type { ApprovalTarget } from "./approval-registry.js";
|
|
9
|
+
export { DevOrchestrator } from "./dev-orchestrator.js";
|
|
10
|
+
export type { DevOrchestratorConfig, DevRunResult } from "./dev-orchestrator.js";
|
|
11
|
+
export { DevTokenStore } from "./dev-token-store.js";
|
|
12
|
+
export type { DevToken } from "./dev-token-store.js";
|
|
13
|
+
export interface StartGatewayOptions {
|
|
14
|
+
readonly port?: number;
|
|
15
|
+
readonly devMode?: boolean;
|
|
16
|
+
readonly studioDistPath?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface DevServerOptions {
|
|
19
|
+
readonly port?: number;
|
|
20
|
+
readonly appYamlPath?: string;
|
|
21
|
+
readonly studioDistPath?: string;
|
|
22
|
+
}
|
|
23
|
+
export declare function startGateway(configPath: string, options?: StartGatewayOptions): Promise<void>;
|
|
24
|
+
export declare function startDevServer(options?: DevServerOptions): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=gateway-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-server.d.ts","sourceRoot":"","sources":["../../src/gateway/gateway-server.ts"],"names":[],"mappings":"AAsCA,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;CAClC;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;AAmDD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoenG;AAuID,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuF9E"}
|