@reminix/runtime 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.
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Reminix Runtime Server
3
+ */
4
+ import { Hono } from 'hono';
5
+ import type { AgentBase } from './adapters/base.js';
6
+ export interface ServeOptions {
7
+ port?: number;
8
+ hostname?: string;
9
+ }
10
+ /**
11
+ * Create a Hono application with agent endpoints.
12
+ *
13
+ * @param agents - List of agents.
14
+ * @returns A Hono application instance.
15
+ * @throws Error if no agents are provided.
16
+ */
17
+ export declare function createApp(agents: AgentBase[]): Hono;
18
+ /**
19
+ * Serve agents via REST API.
20
+ *
21
+ * @param agents - List of agents.
22
+ * @param options - Server options.
23
+ */
24
+ export declare function serve(agents: AgentBase[], options?: ServeOptions): void;
25
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CA2GnD;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,YAAiB,GAAG,IAAI,CAY3E"}
package/dist/server.js ADDED
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Reminix Runtime Server
3
+ */
4
+ import { Hono } from 'hono';
5
+ import { streamSSE } from 'hono/streaming';
6
+ import { serve as honoServe } from '@hono/node-server';
7
+ import { VERSION } from './version.js';
8
+ /**
9
+ * Create a Hono application with agent endpoints.
10
+ *
11
+ * @param agents - List of agents.
12
+ * @returns A Hono application instance.
13
+ * @throws Error if no agents are provided.
14
+ */
15
+ export function createApp(agents) {
16
+ if (agents.length === 0) {
17
+ throw new Error('At least one agent is required');
18
+ }
19
+ // Build a lookup map for agents by name
20
+ const agentMap = new Map();
21
+ for (const agent of agents) {
22
+ agentMap.set(agent.name, agent);
23
+ }
24
+ const app = new Hono();
25
+ // Health check endpoint
26
+ app.get('/health', (c) => {
27
+ return c.json({ status: 'ok' });
28
+ });
29
+ // Runtime discovery endpoint
30
+ app.get('/info', (c) => {
31
+ return c.json({
32
+ runtime: {
33
+ name: 'reminix-runtime',
34
+ version: VERSION,
35
+ language: 'typescript',
36
+ framework: 'hono',
37
+ },
38
+ agents: agents.map((agent) => ({
39
+ name: agent.name,
40
+ ...agent.metadata,
41
+ invoke: { streaming: agent.invokeStreaming },
42
+ chat: { streaming: agent.chatStreaming },
43
+ })),
44
+ });
45
+ });
46
+ // Invoke endpoint
47
+ app.post('/agents/:agentName/invoke', async (c) => {
48
+ const agentName = c.req.param('agentName');
49
+ const agent = agentMap.get(agentName);
50
+ if (!agent) {
51
+ return c.json({ error: `Agent '${agentName}' not found` }, 404);
52
+ }
53
+ const body = await c.req.json();
54
+ // Validate request
55
+ if (!body.input || Object.keys(body.input).length === 0) {
56
+ return c.json({ error: 'input is required and must not be empty' }, 400);
57
+ }
58
+ // Handle streaming
59
+ if (body.stream) {
60
+ return streamSSE(c, async (stream) => {
61
+ try {
62
+ for await (const chunk of agent.invokeStream(body)) {
63
+ await stream.writeSSE({ data: chunk });
64
+ }
65
+ await stream.writeSSE({ data: '[DONE]' });
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : 'Unknown error';
69
+ await stream.writeSSE({ data: JSON.stringify({ error: message }) });
70
+ }
71
+ });
72
+ }
73
+ const response = await agent.invoke(body);
74
+ return c.json(response);
75
+ });
76
+ // Chat endpoint
77
+ app.post('/agents/:agentName/chat', async (c) => {
78
+ const agentName = c.req.param('agentName');
79
+ const agent = agentMap.get(agentName);
80
+ if (!agent) {
81
+ return c.json({ error: `Agent '${agentName}' not found` }, 404);
82
+ }
83
+ const body = await c.req.json();
84
+ // Validate request
85
+ if (!body.messages || body.messages.length === 0) {
86
+ return c.json({ error: 'messages is required and must not be empty' }, 400);
87
+ }
88
+ // Handle streaming
89
+ if (body.stream) {
90
+ return streamSSE(c, async (stream) => {
91
+ try {
92
+ for await (const chunk of agent.chatStream(body)) {
93
+ await stream.writeSSE({ data: chunk });
94
+ }
95
+ await stream.writeSSE({ data: '[DONE]' });
96
+ }
97
+ catch (error) {
98
+ const message = error instanceof Error ? error.message : 'Unknown error';
99
+ await stream.writeSSE({ data: JSON.stringify({ error: message }) });
100
+ }
101
+ });
102
+ }
103
+ const response = await agent.chat(body);
104
+ return c.json(response);
105
+ });
106
+ return app;
107
+ }
108
+ /**
109
+ * Serve agents via REST API.
110
+ *
111
+ * @param agents - List of agents.
112
+ * @param options - Server options.
113
+ */
114
+ export function serve(agents, options = {}) {
115
+ const { port = 8080, hostname = '0.0.0.0' } = options;
116
+ const app = createApp(agents);
117
+ honoServe({
118
+ fetch: app.fetch,
119
+ port,
120
+ hostname,
121
+ });
122
+ console.log(`Reminix Runtime listening on http://${hostname}:${port}`);
123
+ }
124
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Reminix Runtime Types
3
+ */
4
+ /** Valid message roles */
5
+ export type Role = 'user' | 'assistant' | 'system' | 'tool';
6
+ export interface ToolCall {
7
+ id: string;
8
+ type: 'function';
9
+ function: {
10
+ name: string;
11
+ arguments: string;
12
+ };
13
+ }
14
+ export interface Message {
15
+ role: Role;
16
+ content: string | null;
17
+ tool_calls?: ToolCall[];
18
+ tool_call_id?: string;
19
+ name?: string;
20
+ }
21
+ export interface InvokeRequest {
22
+ input: Record<string, unknown>;
23
+ stream?: boolean;
24
+ context?: Record<string, unknown>;
25
+ }
26
+ export interface InvokeResponse {
27
+ output: unknown;
28
+ }
29
+ export interface ChatRequest {
30
+ messages: Message[];
31
+ stream?: boolean;
32
+ context?: Record<string, unknown>;
33
+ }
34
+ export interface ChatResponse {
35
+ output: string;
36
+ messages: Message[];
37
+ }
38
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,0BAA0B;AAC1B,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB"}
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Reminix Runtime Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Runtime version.
3
+ */
4
+ export declare const VERSION = "0.0.1";
5
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Runtime version.
3
+ */
4
+ export const VERSION = '0.0.1';
5
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@reminix/runtime",
3
+ "version": "0.0.1",
4
+ "description": "Reminix Runtime - Deploy AI agents via REST APIs",
5
+ "license": "Apache-2.0",
6
+ "type": "module",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "default": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "dependencies": {
19
+ "hono": "^4.11.4",
20
+ "@hono/node-server": "^1.19.8"
21
+ },
22
+ "devDependencies": {
23
+ "@types/node": "^22.0.0",
24
+ "typescript": "^5.9.3",
25
+ "vitest": "^3.1.3"
26
+ },
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "clean": "rm -rf dist",
30
+ "test": "vitest run",
31
+ "test:watch": "vitest"
32
+ }
33
+ }