@otakumesi/heph 0.0.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/hono.mjs ADDED
@@ -0,0 +1,425 @@
1
+ import { F as isHephError, P as HephError } from "./src-DeheByi4.mjs";
2
+ import { z } from "zod";
3
+ import { Hono } from "hono";
4
+ //#region ../server-hono/src/index.ts
5
+ const createAgentSchema = z.object({
6
+ spec: z.string().min(1),
7
+ input: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
8
+ state: z.record(z.string(), z.unknown()).optional(),
9
+ metadata: z.record(z.string(), z.unknown()).optional(),
10
+ capabilities: z.array(z.string()).optional(),
11
+ skills: z.array(z.string()).optional()
12
+ });
13
+ const createMessageSchema = z.object({
14
+ type: z.enum(["user.message", "steering.message"]).optional(),
15
+ content: z.string().min(1),
16
+ metadata: z.record(z.string(), z.unknown()).optional()
17
+ });
18
+ const createRunSchema = z.object({
19
+ input: z.union([z.string(), z.record(z.string(), z.unknown())]),
20
+ metadata: z.record(z.string(), z.unknown()).optional()
21
+ });
22
+ const createMcpBindingSchema = z.object({
23
+ capabilityId: z.string().min(1),
24
+ accountRef: z.string().min(1).nullable().optional(),
25
+ allowTools: z.union([z.literal("all"), z.array(z.string())]),
26
+ metadata: z.record(z.string(), z.unknown()).optional()
27
+ });
28
+ function createHephApp(options) {
29
+ const app = new Hono();
30
+ app.route("/", createHephRouter(options));
31
+ return app;
32
+ }
33
+ function createHephRouter(options) {
34
+ const app = new Hono();
35
+ app.post("/agents", async (c) => {
36
+ const auth = await resolveAuth(c, options);
37
+ if (auth instanceof Response) return auth;
38
+ const body = await parseJson(c, createAgentSchema);
39
+ if (body instanceof Response) return body;
40
+ const metadata = mergeMetadata(body.metadata, {
41
+ capabilities: body.capabilities,
42
+ skills: body.skills
43
+ });
44
+ if (body.input === void 0) {
45
+ const agent = await options.heph.agents.create({
46
+ spec: body.spec,
47
+ skills: body.skills,
48
+ auth,
49
+ state: body.state,
50
+ metadata
51
+ });
52
+ return c.json({ agent: serializeAgent(agent) }, 201);
53
+ }
54
+ const created = await options.heph.agents.createAndRun({
55
+ spec: body.spec,
56
+ input: normalizeRunInput(body.input),
57
+ skills: body.skills,
58
+ auth,
59
+ state: body.state,
60
+ metadata
61
+ });
62
+ return c.json({
63
+ agent_id: created.agent_id,
64
+ agent_spec_id: created.agent_spec_id,
65
+ run_id: created.run_id,
66
+ agent: serializeAgent(created.agent),
67
+ run: serializeRun(created.run),
68
+ message: created.message ? serializeMessage(created.message) : null
69
+ }, 201);
70
+ });
71
+ app.get("/agents/:agentId", async (c) => {
72
+ const auth = await resolveAuth(c, options);
73
+ if (auth instanceof Response) return auth;
74
+ const agent = await options.heph.agents.get(c.req.param("agentId"));
75
+ if (!agent) return errorResponse(c, notFound("AgentSession not found", { agentId: c.req.param("agentId") }));
76
+ return c.json({ agent: serializeAgent(agent) });
77
+ });
78
+ app.post("/agents/:agentId/mcp-bindings", async (c) => {
79
+ const auth = await resolveAuth(c, options);
80
+ if (auth instanceof Response) return auth;
81
+ const agentId = c.req.param("agentId");
82
+ if (!await options.heph.agents.get(agentId)) return errorResponse(c, notFound("AgentSession not found", { agentId }));
83
+ const body = await parseJson(c, createMcpBindingSchema);
84
+ if (body instanceof Response) return body;
85
+ const binding = await options.heph.agents.addMcpBinding({
86
+ agentId,
87
+ capabilityId: body.capabilityId,
88
+ accountRef: body.accountRef ?? null,
89
+ allowTools: body.allowTools,
90
+ auth,
91
+ metadata: body.metadata
92
+ });
93
+ return c.json({
94
+ mcp_binding_id: binding.id,
95
+ binding: serializeMcpBinding(binding)
96
+ }, 201);
97
+ });
98
+ app.get("/agents/:agentId/mcp-bindings", async (c) => {
99
+ const auth = await resolveAuth(c, options);
100
+ if (auth instanceof Response) return auth;
101
+ const agentId = c.req.param("agentId");
102
+ if (!await options.heph.agents.get(agentId)) return errorResponse(c, notFound("AgentSession not found", { agentId }));
103
+ const bindings = await options.heph.agents.listMcpBindings(agentId);
104
+ return c.json({ bindings: bindings.map(serializeMcpBinding) });
105
+ });
106
+ app.delete("/agents/:agentId/mcp-bindings/:bindingId", async (c) => {
107
+ const auth = await resolveAuth(c, options);
108
+ if (auth instanceof Response) return auth;
109
+ const binding = await options.heph.agents.removeMcpBinding({
110
+ agentId: c.req.param("agentId"),
111
+ bindingId: c.req.param("bindingId")
112
+ });
113
+ return c.json({ binding: serializeMcpBinding(binding) });
114
+ });
115
+ app.post("/agents/:agentId/messages", async (c) => {
116
+ const auth = await resolveAuth(c, options);
117
+ if (auth instanceof Response) return auth;
118
+ const agentId = c.req.param("agentId");
119
+ if (!await options.heph.agents.get(agentId)) return errorResponse(c, notFound("AgentSession not found", { agentId }));
120
+ const body = await parseJson(c, createMessageSchema);
121
+ if (body instanceof Response) return body;
122
+ const appended = await options.heph.agents.appendMessage({
123
+ agentId,
124
+ type: body.type,
125
+ content: body.content,
126
+ auth,
127
+ metadata: body.metadata
128
+ });
129
+ return c.json({
130
+ message_id: appended.message_id,
131
+ inbox_event_id: appended.inbox_event_id,
132
+ scheduled: appended.scheduled,
133
+ message: serializeMessage(appended.message),
134
+ inbox_event: serializeInboxEvent(appended.inboxEvent)
135
+ }, 202);
136
+ });
137
+ app.post("/agents/:agentId/runs", async (c) => {
138
+ const auth = await resolveAuth(c, options);
139
+ if (auth instanceof Response) return auth;
140
+ const agentId = c.req.param("agentId");
141
+ const body = await parseJson(c, createRunSchema);
142
+ if (body instanceof Response) return body;
143
+ const run = await options.heph.runs.create({
144
+ agentId,
145
+ input: normalizeRunInput(body.input),
146
+ auth,
147
+ metadata: body.metadata
148
+ });
149
+ return c.json({
150
+ run_id: run.id,
151
+ run: serializeRun(run)
152
+ }, 201);
153
+ });
154
+ app.get("/runs/:runId", async (c) => {
155
+ const auth = await resolveAuth(c, options);
156
+ if (auth instanceof Response) return auth;
157
+ const run = await options.heph.runs.get(c.req.param("runId"));
158
+ if (!run) return errorResponse(c, notFound("Run not found", { runId: c.req.param("runId") }));
159
+ return c.json({ run: serializeRun(run) });
160
+ });
161
+ app.get("/runs/:runId/events", async (c) => {
162
+ const auth = await resolveAuth(c, options);
163
+ if (auth instanceof Response) return auth;
164
+ const runId = c.req.param("runId");
165
+ if (!await options.heph.runs.get(runId)) return errorResponse(c, notFound("Run not found", { runId }));
166
+ const after = parseOptionalInteger(c.req.query("after"));
167
+ const limit = parseOptionalInteger(c.req.query("limit"));
168
+ const listOptions = {};
169
+ if (after !== void 0) listOptions.after = after;
170
+ if (limit !== void 0) listOptions.limit = limit;
171
+ const events = await options.heph.stores.events.listRunEvents(runId, listOptions);
172
+ return c.json({ events: events.map(serializeRunEvent) });
173
+ });
174
+ app.get("/runs/:runId/stream", async (c) => {
175
+ const auth = await resolveAuth(c, options);
176
+ if (auth instanceof Response) return auth;
177
+ const runId = c.req.param("runId");
178
+ if (!await options.heph.runs.get(runId)) return errorResponse(c, notFound("Run not found", { runId }));
179
+ const after = parseOptionalInteger(c.req.query("after")) ?? parseOptionalInteger(c.req.header("Last-Event-ID")) ?? 0;
180
+ return streamEvents(options.heph, runId, after, c.req.raw.signal, options.stream);
181
+ });
182
+ app.post("/runs/:runId/cancel", async (c) => {
183
+ const auth = await resolveAuth(c, options);
184
+ if (auth instanceof Response) return auth;
185
+ const run = await options.heph.runs.cancel(c.req.param("runId"));
186
+ return c.json({ run: serializeRun(run) });
187
+ });
188
+ app.onError((error, c) => {
189
+ return errorResponse(c, error);
190
+ });
191
+ return app;
192
+ }
193
+ function createDevAuth(options = {}) {
194
+ return (c) => {
195
+ const subject = (options.cookieName ? readCookie(c.req.header("Cookie"), options.cookieName) : null) ?? options.subject ?? "dev";
196
+ const auth = {
197
+ subject,
198
+ userId: options.userId ?? subject,
199
+ actorType: "user"
200
+ };
201
+ if (options.tenantId !== void 0) auth.tenantId = options.tenantId;
202
+ if (options.roles !== void 0) auth.roles = options.roles;
203
+ if (options.scopes !== void 0) auth.scopes = options.scopes;
204
+ return auth;
205
+ };
206
+ }
207
+ async function resolveAuth(c, options) {
208
+ const auth = options.getAuth ? await options.getAuth(c) : null;
209
+ if (options.requireAuth && !auth) return errorResponse(c, new HephError({
210
+ code: "HEPH6001",
211
+ title: "Unauthorized",
212
+ message: "Authentication is required.",
213
+ status: 401
214
+ }));
215
+ return auth;
216
+ }
217
+ async function parseJson(c, schema) {
218
+ let raw;
219
+ try {
220
+ raw = await c.req.json();
221
+ } catch (cause) {
222
+ return errorResponse(c, new HephError({
223
+ code: "HEPH6002",
224
+ title: "Invalid JSON body",
225
+ message: "Request body must be valid JSON.",
226
+ status: 400,
227
+ cause
228
+ }));
229
+ }
230
+ const parsed = schema.safeParse(raw);
231
+ if (!parsed.success) return errorResponse(c, new HephError({
232
+ code: "HEPH6003",
233
+ title: "Invalid request body",
234
+ message: "Request body does not match the expected shape.",
235
+ status: 400,
236
+ details: { issues: parsed.error.issues }
237
+ }));
238
+ return parsed.data;
239
+ }
240
+ function streamEvents(heph, runId, startAfter, signal, options = {}) {
241
+ const encoder = new TextEncoder();
242
+ const pollIntervalMs = options.pollIntervalMs ?? 250;
243
+ const closeOnTerminal = options.closeOnTerminal ?? true;
244
+ let after = startAfter;
245
+ const stream = new ReadableStream({
246
+ async start(controller) {
247
+ while (!signal.aborted) {
248
+ const events = await heph.stores.events.listRunEvents(runId, { after });
249
+ for (const event of events) {
250
+ after = event.seq;
251
+ controller.enqueue(encoder.encode(formatSseEvent(event)));
252
+ }
253
+ const latestRun = await heph.runs.get(runId);
254
+ if (closeOnTerminal && latestRun && isTerminalStatus(latestRun.status) && events.length === 0) break;
255
+ if (closeOnTerminal && latestRun && isTerminalStatus(latestRun.status) && events.length > 0) {
256
+ const lastEvent = events.at(-1);
257
+ if (lastEvent && isTerminalEvent(lastEvent)) break;
258
+ }
259
+ await delay(pollIntervalMs, signal);
260
+ }
261
+ controller.close();
262
+ },
263
+ cancel() {}
264
+ });
265
+ return new Response(stream, { headers: {
266
+ "Content-Type": "text/event-stream; charset=utf-8",
267
+ "Cache-Control": "no-cache, no-transform",
268
+ Connection: "keep-alive",
269
+ "X-Accel-Buffering": "no"
270
+ } });
271
+ }
272
+ function formatSseEvent(event) {
273
+ return `event: ${event.type}\nid: ${event.seq}\ndata: ${JSON.stringify(serializeRunEvent(event))}\n\n`;
274
+ }
275
+ function serializeAgent(agent) {
276
+ return {
277
+ agent_id: agent.id,
278
+ agent_spec_id: agent.agentSpecId,
279
+ agent_spec_version: agent.agentSpecVersion,
280
+ active_run_id: agent.activeRunId,
281
+ state: agent.state,
282
+ auth: agent.auth,
283
+ metadata: agent.metadata,
284
+ created_at: agent.createdAt.toISOString(),
285
+ updated_at: agent.updatedAt.toISOString()
286
+ };
287
+ }
288
+ function serializeRun(run) {
289
+ return {
290
+ run_id: run.id,
291
+ agent_id: run.agentId,
292
+ agent_spec_id: run.agentSpecId,
293
+ agent_spec_version: run.agentSpecVersion,
294
+ status: run.status,
295
+ input: run.input,
296
+ error: run.error,
297
+ context_manifest: run.contextManifest,
298
+ skill_manifest: run.skillManifest,
299
+ tool_manifest: run.toolManifest,
300
+ metadata: run.metadata,
301
+ queued_at: run.queuedAt.toISOString(),
302
+ started_at: run.startedAt?.toISOString() ?? null,
303
+ completed_at: run.completedAt?.toISOString() ?? null,
304
+ created_at: run.createdAt.toISOString(),
305
+ updated_at: run.updatedAt.toISOString()
306
+ };
307
+ }
308
+ function serializeMcpBinding(binding) {
309
+ return {
310
+ mcp_binding_id: binding.id,
311
+ agent_id: binding.agentId,
312
+ capability_id: binding.capabilityId,
313
+ account_ref: binding.accountRef,
314
+ allow_tools: binding.allowTools,
315
+ status: binding.status,
316
+ metadata: binding.metadata,
317
+ created_at: binding.createdAt.toISOString(),
318
+ updated_at: binding.updatedAt.toISOString(),
319
+ removed_at: binding.removedAt?.toISOString() ?? null
320
+ };
321
+ }
322
+ function serializeMessage(message) {
323
+ return {
324
+ message_id: message.id,
325
+ agent_id: message.agentId,
326
+ role: message.role,
327
+ content: message.content,
328
+ source_run_id: message.sourceRunId,
329
+ metadata: message.metadata,
330
+ created_at: message.createdAt.toISOString()
331
+ };
332
+ }
333
+ function serializeInboxEvent(event) {
334
+ return {
335
+ inbox_event_id: event.id,
336
+ agent_id: event.agentId,
337
+ type: event.type,
338
+ input: event.input,
339
+ status: event.status,
340
+ run_id: event.runId,
341
+ metadata: event.metadata,
342
+ created_at: event.createdAt.toISOString(),
343
+ updated_at: event.updatedAt.toISOString()
344
+ };
345
+ }
346
+ function serializeRunEvent(event) {
347
+ return {
348
+ event_id: event.id,
349
+ run_id: event.runId,
350
+ seq: event.seq,
351
+ type: event.type,
352
+ payload: event.payload,
353
+ source_refs: event.sourceRefs,
354
+ created_at: event.createdAt.toISOString()
355
+ };
356
+ }
357
+ function errorResponse(c, error) {
358
+ const hephError = isHephError(error) ? error : new HephError({
359
+ code: "HEPH6004",
360
+ title: "Internal Server Error",
361
+ message: error instanceof Error ? error.message : "Unexpected server error.",
362
+ status: 500,
363
+ cause: error
364
+ });
365
+ return Response.json({ error: {
366
+ code: hephError.code,
367
+ title: hephError.title,
368
+ message: hephError.message,
369
+ details: hephError.details ?? null
370
+ } }, { status: hephError.status ?? 500 });
371
+ }
372
+ function notFound(title, details) {
373
+ return new HephError({
374
+ code: "HEPH6005",
375
+ title,
376
+ message: title,
377
+ status: 404,
378
+ details
379
+ });
380
+ }
381
+ function normalizeRunInput(input) {
382
+ if (typeof input === "string") return input;
383
+ return input;
384
+ }
385
+ function mergeMetadata(metadata, generated) {
386
+ const entries = Object.entries(generated).filter(([, value]) => value !== void 0);
387
+ if (!metadata && entries.length === 0) return;
388
+ return {
389
+ ...metadata ?? {},
390
+ ...Object.fromEntries(entries)
391
+ };
392
+ }
393
+ function parseOptionalInteger(value) {
394
+ if (value === void 0 || value.trim() === "") return;
395
+ const parsed = Number.parseInt(value, 10);
396
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : void 0;
397
+ }
398
+ function isTerminalStatus(status) {
399
+ return status === "completed" || status === "failed" || status === "cancelled";
400
+ }
401
+ function isTerminalEvent(event) {
402
+ return event.type === "run.completed" || event.type === "run.failed" || event.type === "run.cancelled";
403
+ }
404
+ async function delay(ms, signal) {
405
+ if (signal.aborted) return;
406
+ await new Promise((resolve) => {
407
+ const timer = setTimeout(resolve, ms);
408
+ signal.addEventListener("abort", () => {
409
+ clearTimeout(timer);
410
+ resolve();
411
+ }, { once: true });
412
+ });
413
+ }
414
+ function readCookie(header, name) {
415
+ if (!header) return null;
416
+ for (const part of header.split(";")) {
417
+ const [rawKey, ...rawValue] = part.trim().split("=");
418
+ if (rawKey === name) return decodeURIComponent(rawValue.join("="));
419
+ }
420
+ return null;
421
+ }
422
+ //#endregion
423
+ export { createDevAuth, createHephApp, createHephRouter };
424
+
425
+ //# sourceMappingURL=hono.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hono.mjs","names":[],"sources":["../../server-hono/src/index.ts"],"sourcesContent":["import { Hono } from \"hono\";\nimport { z } from \"zod\";\nimport { HephError, isHephError } from \"@heph/core\";\nimport type { Context, Env } from \"hono\";\nimport type { AgentSession, AuthContext, HephRuntime, InboxEvent, McpBinding, Message, Run, RunEvent, RunInput } from \"@heph/core\";\n\nexport type GetAuth<E extends Env = Env> = (c: Context<E>) => AuthContext | null | Promise<AuthContext | null>;\n\nexport interface CreateHephRouterOptions<E extends Env = Env> {\n heph: HephRuntime;\n getAuth?: GetAuth<E>;\n requireAuth?: boolean;\n stream?: StreamOptions;\n}\n\nexport interface CreateHephAppOptions<E extends Env = Env> extends CreateHephRouterOptions<E> {}\n\nexport interface DevAuthOptions {\n subject?: string;\n userId?: string;\n tenantId?: string;\n roles?: string[];\n scopes?: string[];\n cookieName?: string;\n}\n\nexport interface StreamOptions {\n pollIntervalMs?: number;\n closeOnTerminal?: boolean;\n}\n\nconst createAgentSchema = z.object({\n spec: z.string().min(1),\n input: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n state: z.record(z.string(), z.unknown()).optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n capabilities: z.array(z.string()).optional(),\n skills: z.array(z.string()).optional()\n});\n\nconst createMessageSchema = z.object({\n type: z.enum([\"user.message\", \"steering.message\"]).optional(),\n content: z.string().min(1),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nconst createRunSchema = z.object({\n input: z.union([z.string(), z.record(z.string(), z.unknown())]),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nconst createMcpBindingSchema = z.object({\n capabilityId: z.string().min(1),\n accountRef: z.string().min(1).nullable().optional(),\n allowTools: z.union([z.literal(\"all\"), z.array(z.string())]),\n metadata: z.record(z.string(), z.unknown()).optional()\n});\n\nexport function createHephApp<E extends Env = Env>(options: CreateHephAppOptions<E>): Hono<E> {\n const app = new Hono<E>();\n app.route(\"/\", createHephRouter(options));\n return app;\n}\n\nexport function createHephRouter<E extends Env = Env>(options: CreateHephRouterOptions<E>): Hono<E> {\n const app = new Hono<E>();\n\n app.post(\"/agents\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const body = await parseJson(c, createAgentSchema);\n if (body instanceof Response) return body;\n\n const metadata = mergeMetadata(body.metadata, {\n capabilities: body.capabilities,\n skills: body.skills\n });\n\n if (body.input === undefined) {\n const agent = await options.heph.agents.create({\n spec: body.spec,\n skills: body.skills,\n auth,\n state: body.state,\n metadata\n });\n return c.json({ agent: serializeAgent(agent) }, 201);\n }\n\n const created = await options.heph.agents.createAndRun({\n spec: body.spec,\n input: normalizeRunInput(body.input),\n skills: body.skills,\n auth,\n state: body.state,\n metadata\n });\n\n return c.json(\n {\n agent_id: created.agent_id,\n agent_spec_id: created.agent_spec_id,\n run_id: created.run_id,\n agent: serializeAgent(created.agent),\n run: serializeRun(created.run),\n message: created.message ? serializeMessage(created.message) : null\n },\n 201\n );\n });\n\n app.get(\"/agents/:agentId\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const agent = await options.heph.agents.get(c.req.param(\"agentId\"));\n if (!agent) return errorResponse(c, notFound(\"AgentSession not found\", { agentId: c.req.param(\"agentId\") }));\n\n return c.json({ agent: serializeAgent(agent) });\n });\n\n app.post(\"/agents/:agentId/mcp-bindings\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const agentId = c.req.param(\"agentId\");\n const agent = await options.heph.agents.get(agentId);\n if (!agent) return errorResponse(c, notFound(\"AgentSession not found\", { agentId }));\n\n const body = await parseJson(c, createMcpBindingSchema);\n if (body instanceof Response) return body;\n\n const binding = await options.heph.agents.addMcpBinding({\n agentId,\n capabilityId: body.capabilityId,\n accountRef: body.accountRef ?? null,\n allowTools: body.allowTools,\n auth,\n metadata: body.metadata\n });\n\n return c.json(\n {\n mcp_binding_id: binding.id,\n binding: serializeMcpBinding(binding)\n },\n 201\n );\n });\n\n app.get(\"/agents/:agentId/mcp-bindings\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const agentId = c.req.param(\"agentId\");\n const agent = await options.heph.agents.get(agentId);\n if (!agent) return errorResponse(c, notFound(\"AgentSession not found\", { agentId }));\n\n const bindings = await options.heph.agents.listMcpBindings(agentId);\n return c.json({ bindings: bindings.map(serializeMcpBinding) });\n });\n\n app.delete(\"/agents/:agentId/mcp-bindings/:bindingId\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const binding = await options.heph.agents.removeMcpBinding({\n agentId: c.req.param(\"agentId\"),\n bindingId: c.req.param(\"bindingId\")\n });\n\n return c.json({ binding: serializeMcpBinding(binding) });\n });\n\n app.post(\"/agents/:agentId/messages\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const agentId = c.req.param(\"agentId\");\n const agent = await options.heph.agents.get(agentId);\n if (!agent) return errorResponse(c, notFound(\"AgentSession not found\", { agentId }));\n\n const body = await parseJson(c, createMessageSchema);\n if (body instanceof Response) return body;\n\n const appended = await options.heph.agents.appendMessage({\n agentId,\n type: body.type,\n content: body.content,\n auth,\n metadata: body.metadata\n });\n\n return c.json(\n {\n message_id: appended.message_id,\n inbox_event_id: appended.inbox_event_id,\n scheduled: appended.scheduled,\n message: serializeMessage(appended.message),\n inbox_event: serializeInboxEvent(appended.inboxEvent)\n },\n 202\n );\n });\n\n app.post(\"/agents/:agentId/runs\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const agentId = c.req.param(\"agentId\");\n const body = await parseJson(c, createRunSchema);\n if (body instanceof Response) return body;\n\n const run = await options.heph.runs.create({\n agentId,\n input: normalizeRunInput(body.input),\n auth,\n metadata: body.metadata\n });\n\n return c.json({ run_id: run.id, run: serializeRun(run) }, 201);\n });\n\n app.get(\"/runs/:runId\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const run = await options.heph.runs.get(c.req.param(\"runId\"));\n if (!run) return errorResponse(c, notFound(\"Run not found\", { runId: c.req.param(\"runId\") }));\n\n return c.json({ run: serializeRun(run) });\n });\n\n app.get(\"/runs/:runId/events\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const runId = c.req.param(\"runId\");\n const run = await options.heph.runs.get(runId);\n if (!run) return errorResponse(c, notFound(\"Run not found\", { runId }));\n\n const after = parseOptionalInteger(c.req.query(\"after\"));\n const limit = parseOptionalInteger(c.req.query(\"limit\"));\n const listOptions: { after?: number; limit?: number } = {};\n if (after !== undefined) listOptions.after = after;\n if (limit !== undefined) listOptions.limit = limit;\n const events = await options.heph.stores.events.listRunEvents(runId, listOptions);\n\n return c.json({ events: events.map(serializeRunEvent) });\n });\n\n app.get(\"/runs/:runId/stream\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const runId = c.req.param(\"runId\");\n const run = await options.heph.runs.get(runId);\n if (!run) return errorResponse(c, notFound(\"Run not found\", { runId }));\n\n const after = parseOptionalInteger(c.req.query(\"after\")) ?? parseOptionalInteger(c.req.header(\"Last-Event-ID\")) ?? 0;\n return streamEvents(options.heph, runId, after, c.req.raw.signal, options.stream);\n });\n\n app.post(\"/runs/:runId/cancel\", async (c) => {\n const auth = await resolveAuth(c, options);\n if (auth instanceof Response) return auth;\n\n const run = await options.heph.runs.cancel(c.req.param(\"runId\"));\n return c.json({ run: serializeRun(run) });\n });\n\n app.onError((error, c) => {\n return errorResponse(c, error);\n });\n\n return app;\n}\n\nexport function createDevAuth(options: DevAuthOptions = {}): GetAuth {\n return (c) => {\n const cookieValue = options.cookieName ? readCookie(c.req.header(\"Cookie\"), options.cookieName) : null;\n const subject = cookieValue ?? options.subject ?? \"dev\";\n\n const auth: AuthContext = {\n subject,\n userId: options.userId ?? subject,\n actorType: \"user\"\n };\n\n if (options.tenantId !== undefined) auth.tenantId = options.tenantId;\n if (options.roles !== undefined) auth.roles = options.roles;\n if (options.scopes !== undefined) auth.scopes = options.scopes;\n\n return auth;\n };\n}\n\nasync function resolveAuth<E extends Env>(\n c: Context<E>,\n options: CreateHephRouterOptions<E>\n): Promise<AuthContext | null | Response> {\n const auth = options.getAuth ? await options.getAuth(c) : null;\n\n if (options.requireAuth && !auth) {\n return errorResponse(\n c,\n new HephError({\n code: \"HEPH6001\",\n title: \"Unauthorized\",\n message: \"Authentication is required.\",\n status: 401\n })\n );\n }\n\n return auth;\n}\n\nasync function parseJson<T extends z.ZodType>(c: Context, schema: T): Promise<z.infer<T> | Response> {\n let raw: unknown;\n\n try {\n raw = await c.req.json();\n } catch (cause) {\n return errorResponse(\n c,\n new HephError({\n code: \"HEPH6002\",\n title: \"Invalid JSON body\",\n message: \"Request body must be valid JSON.\",\n status: 400,\n cause\n })\n );\n }\n\n const parsed = schema.safeParse(raw);\n if (!parsed.success) {\n return errorResponse(\n c,\n new HephError({\n code: \"HEPH6003\",\n title: \"Invalid request body\",\n message: \"Request body does not match the expected shape.\",\n status: 400,\n details: {\n issues: parsed.error.issues\n }\n })\n );\n }\n\n return parsed.data;\n}\n\nfunction streamEvents(\n heph: HephRuntime,\n runId: string,\n startAfter: number,\n signal: AbortSignal,\n options: StreamOptions = {}\n): Response {\n const encoder = new TextEncoder();\n const pollIntervalMs = options.pollIntervalMs ?? 250;\n const closeOnTerminal = options.closeOnTerminal ?? true;\n let after = startAfter;\n\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n while (!signal.aborted) {\n const events = await heph.stores.events.listRunEvents(runId, { after });\n\n for (const event of events) {\n after = event.seq;\n controller.enqueue(encoder.encode(formatSseEvent(event)));\n }\n\n const latestRun = await heph.runs.get(runId);\n if (closeOnTerminal && latestRun && isTerminalStatus(latestRun.status) && events.length === 0) {\n break;\n }\n\n if (closeOnTerminal && latestRun && isTerminalStatus(latestRun.status) && events.length > 0) {\n const lastEvent = events.at(-1);\n if (lastEvent && isTerminalEvent(lastEvent)) {\n break;\n }\n }\n\n await delay(pollIntervalMs, signal);\n }\n\n controller.close();\n },\n cancel() {\n // The request AbortSignal is the source of cancellation for this stream.\n }\n });\n\n return new Response(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream; charset=utf-8\",\n \"Cache-Control\": \"no-cache, no-transform\",\n Connection: \"keep-alive\",\n \"X-Accel-Buffering\": \"no\"\n }\n });\n}\n\nfunction formatSseEvent(event: RunEvent): string {\n return `event: ${event.type}\\nid: ${event.seq}\\ndata: ${JSON.stringify(serializeRunEvent(event))}\\n\\n`;\n}\n\nfunction serializeAgent(agent: AgentSession) {\n return {\n agent_id: agent.id,\n agent_spec_id: agent.agentSpecId,\n agent_spec_version: agent.agentSpecVersion,\n active_run_id: agent.activeRunId,\n state: agent.state,\n auth: agent.auth,\n metadata: agent.metadata,\n created_at: agent.createdAt.toISOString(),\n updated_at: agent.updatedAt.toISOString()\n };\n}\n\nfunction serializeRun(run: Run) {\n return {\n run_id: run.id,\n agent_id: run.agentId,\n agent_spec_id: run.agentSpecId,\n agent_spec_version: run.agentSpecVersion,\n status: run.status,\n input: run.input,\n error: run.error,\n context_manifest: run.contextManifest,\n skill_manifest: run.skillManifest,\n tool_manifest: run.toolManifest,\n metadata: run.metadata,\n queued_at: run.queuedAt.toISOString(),\n started_at: run.startedAt?.toISOString() ?? null,\n completed_at: run.completedAt?.toISOString() ?? null,\n created_at: run.createdAt.toISOString(),\n updated_at: run.updatedAt.toISOString()\n };\n}\n\nfunction serializeMcpBinding(binding: McpBinding) {\n return {\n mcp_binding_id: binding.id,\n agent_id: binding.agentId,\n capability_id: binding.capabilityId,\n account_ref: binding.accountRef,\n allow_tools: binding.allowTools,\n status: binding.status,\n metadata: binding.metadata,\n created_at: binding.createdAt.toISOString(),\n updated_at: binding.updatedAt.toISOString(),\n removed_at: binding.removedAt?.toISOString() ?? null\n };\n}\n\nfunction serializeMessage(message: Message) {\n return {\n message_id: message.id,\n agent_id: message.agentId,\n role: message.role,\n content: message.content,\n source_run_id: message.sourceRunId,\n metadata: message.metadata,\n created_at: message.createdAt.toISOString()\n };\n}\n\nfunction serializeInboxEvent(event: InboxEvent) {\n return {\n inbox_event_id: event.id,\n agent_id: event.agentId,\n type: event.type,\n input: event.input,\n status: event.status,\n run_id: event.runId,\n metadata: event.metadata,\n created_at: event.createdAt.toISOString(),\n updated_at: event.updatedAt.toISOString()\n };\n}\n\nfunction serializeRunEvent(event: RunEvent) {\n return {\n event_id: event.id,\n run_id: event.runId,\n seq: event.seq,\n type: event.type,\n payload: event.payload,\n source_refs: event.sourceRefs,\n created_at: event.createdAt.toISOString()\n };\n}\n\nfunction errorResponse(c: Context, error: unknown): Response {\n const hephError = isHephError(error)\n ? error\n : new HephError({\n code: \"HEPH6004\",\n title: \"Internal Server Error\",\n message: error instanceof Error ? error.message : \"Unexpected server error.\",\n status: 500,\n cause: error\n });\n\n return Response.json(\n {\n error: {\n code: hephError.code,\n title: hephError.title,\n message: hephError.message,\n details: hephError.details ?? null\n }\n },\n {\n status: hephError.status ?? 500\n }\n );\n}\n\nfunction notFound(title: string, details: Record<string, unknown>): HephError {\n return new HephError({\n code: \"HEPH6005\",\n title,\n message: title,\n status: 404,\n details\n });\n}\n\nfunction normalizeRunInput(input: string | Record<string, unknown>): string | RunInput {\n if (typeof input === \"string\") {\n return input;\n }\n\n return input as RunInput;\n}\n\nfunction mergeMetadata(\n metadata: Record<string, unknown> | undefined,\n generated: { capabilities?: string[] | undefined; skills?: string[] | undefined }\n): Record<string, unknown> | undefined {\n const entries = Object.entries(generated).filter(([, value]) => value !== undefined);\n\n if (!metadata && entries.length === 0) {\n return undefined;\n }\n\n return {\n ...(metadata ?? {}),\n ...Object.fromEntries(entries)\n };\n}\n\nfunction parseOptionalInteger(value: string | undefined): number | undefined {\n if (value === undefined || value.trim() === \"\") {\n return undefined;\n }\n\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) && parsed >= 0 ? parsed : undefined;\n}\n\nfunction isTerminalStatus(status: Run[\"status\"]): boolean {\n return status === \"completed\" || status === \"failed\" || status === \"cancelled\";\n}\n\nfunction isTerminalEvent(event: RunEvent): boolean {\n return event.type === \"run.completed\" || event.type === \"run.failed\" || event.type === \"run.cancelled\";\n}\n\nasync function delay(ms: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, ms);\n signal.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true }\n );\n });\n}\n\nfunction readCookie(header: string | undefined, name: string): string | null {\n if (!header) {\n return null;\n }\n\n for (const part of header.split(\";\")) {\n const [rawKey, ...rawValue] = part.trim().split(\"=\");\n if (rawKey === name) {\n return decodeURIComponent(rawValue.join(\"=\"));\n }\n }\n\n return null;\n}\n"],"mappings":"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"}