@rcrsr/rill-agent 0.18.4

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Andre Bremer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @rcrsr/rill-agent
2
+
3
+ Core agent runtime for the [rill](https://github.com/rcrsr/rill) language. Loads agent manifests, builds an `AgentRouter`, and serves agents over HTTP via the included Hono harness. Supports single-agent and multi-agent deployments.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @rcrsr/rill-agent
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { loadManifest, createRouter } from '@rcrsr/rill-agent';
15
+ import { httpHarness } from '@rcrsr/rill-agent/http';
16
+
17
+ const manifest = await loadManifest('./build');
18
+ const router = await createRouter(manifest, {
19
+ globalVars: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY ?? '' },
20
+ });
21
+
22
+ const harness = httpHarness(router);
23
+ await harness.listen(3000);
24
+ ```
25
+
26
+ A handler module exports four functions: `describe`, `init`, `execute`, `dispose`. Place a `handler.js` in a directory for single-agent mode, or a `manifest.json` listing multiple agents for multi-agent mode.
27
+
28
+ ## Documentation
29
+
30
+ See [full documentation](docs/agent-core.md) for handler contract, router behavior, manifest format, and HTTP routes.
31
+
32
+ ## License
33
+
34
+ MIT
@@ -0,0 +1,17 @@
1
+ import { Hono } from 'hono';
2
+ import type { AgentRouter } from '../types.js';
3
+ export interface HttpHarness {
4
+ listen(port?: number): Promise<void>;
5
+ close(): Promise<void>;
6
+ readonly app: Hono;
7
+ }
8
+ /**
9
+ * Create an HTTP harness wrapping an AgentRouter.
10
+ *
11
+ * Routes:
12
+ * POST /agents/:name/run — execute a named agent
13
+ * POST /run — execute the default agent
14
+ * GET /agents — list agents with descriptions
15
+ */
16
+ export declare function httpHarness(router: AgentRouter): HttpHarness;
17
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/harness/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AAM3D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACpB;AA2CD;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAqH5D"}
@@ -0,0 +1,149 @@
1
+ import { Hono } from 'hono';
2
+ import { serve } from '@hono/node-server';
3
+ // ============================================================
4
+ // PARAM VALIDATION
5
+ // ============================================================
6
+ function validateParams(params, agentName, router) {
7
+ const desc = router.describe(agentName);
8
+ if (desc === null)
9
+ return null;
10
+ for (const param of desc.params) {
11
+ const value = params[param.name];
12
+ if (param.required && (value === undefined || value === null)) {
13
+ return `Missing required parameter: ${param.name}`;
14
+ }
15
+ if (value !== undefined && value !== null && param.type !== 'any') {
16
+ const actual = typeof value;
17
+ const expected = param.type === 'dict' ? 'object' : param.type;
18
+ if (expected === 'list') {
19
+ if (!Array.isArray(value)) {
20
+ return `Parameter "${param.name}" must be a list, got ${actual}`;
21
+ }
22
+ }
23
+ else if (expected === 'object') {
24
+ if (actual !== 'object' || value === null || Array.isArray(value)) {
25
+ return `Parameter "${param.name}" must be a dict, got ${Array.isArray(value) ? 'list' : actual}`;
26
+ }
27
+ }
28
+ else if (actual !== expected) {
29
+ return `Parameter "${param.name}" must be ${param.type}, got ${actual}`;
30
+ }
31
+ }
32
+ }
33
+ return null;
34
+ }
35
+ // ============================================================
36
+ // HTTP HARNESS
37
+ // ============================================================
38
+ /**
39
+ * Create an HTTP harness wrapping an AgentRouter.
40
+ *
41
+ * Routes:
42
+ * POST /agents/:name/run — execute a named agent
43
+ * POST /run — execute the default agent
44
+ * GET /agents — list agents with descriptions
45
+ */
46
+ export function httpHarness(router) {
47
+ const app = new Hono();
48
+ let server;
49
+ // List agents
50
+ app.get('/agents', (c) => {
51
+ const names = router.agents();
52
+ const agents = names.map((name) => ({
53
+ name,
54
+ description: router.describe(name),
55
+ default: name === router.defaultAgent(),
56
+ }));
57
+ return c.json({ agents });
58
+ });
59
+ // Run named agent
60
+ app.post('/agents/:name/run', async (c) => {
61
+ const name = c.req.param('name');
62
+ let body;
63
+ try {
64
+ const parsed = await c.req.json();
65
+ if (parsed === null ||
66
+ typeof parsed !== 'object' ||
67
+ Array.isArray(parsed)) {
68
+ return c.json({ error: 'Request body must be a JSON object' }, 400);
69
+ }
70
+ body = parsed;
71
+ }
72
+ catch {
73
+ return c.json({ error: 'Invalid JSON in request body' }, 400);
74
+ }
75
+ const params = body['params'] ?? {};
76
+ const validationError = validateParams(params, name, router);
77
+ if (validationError !== null) {
78
+ return c.json({ error: validationError }, 400);
79
+ }
80
+ const request = {
81
+ params,
82
+ ...(typeof body['timeout'] === 'number'
83
+ ? { timeout: body['timeout'] }
84
+ : {}),
85
+ };
86
+ try {
87
+ const response = await router.run(name, request);
88
+ return c.json(response);
89
+ }
90
+ catch (err) {
91
+ const message = err instanceof Error ? err.message : String(err);
92
+ if (message.includes('not found')) {
93
+ return c.json({ error: message }, 404);
94
+ }
95
+ return c.json({ error: message }, 500);
96
+ }
97
+ });
98
+ // Run default agent
99
+ app.post('/run', async (c) => {
100
+ let body;
101
+ try {
102
+ const parsed = await c.req.json();
103
+ if (parsed === null ||
104
+ typeof parsed !== 'object' ||
105
+ Array.isArray(parsed)) {
106
+ return c.json({ error: 'Request body must be a JSON object' }, 400);
107
+ }
108
+ body = parsed;
109
+ }
110
+ catch {
111
+ return c.json({ error: 'Invalid JSON in request body' }, 400);
112
+ }
113
+ const params = body['params'] ?? {};
114
+ const defaultName = router.defaultAgent();
115
+ const validationError = validateParams(params, defaultName, router);
116
+ if (validationError !== null) {
117
+ return c.json({ error: validationError }, 400);
118
+ }
119
+ const request = {
120
+ params,
121
+ ...(typeof body['timeout'] === 'number'
122
+ ? { timeout: body['timeout'] }
123
+ : {}),
124
+ };
125
+ try {
126
+ const response = await router.run('', request);
127
+ return c.json(response);
128
+ }
129
+ catch (err) {
130
+ const message = err instanceof Error ? err.message : String(err);
131
+ return c.json({ error: message }, 500);
132
+ }
133
+ });
134
+ async function listen(port = 3000) {
135
+ return new Promise((resolve) => {
136
+ server = serve({ fetch: app.fetch, port }, () => {
137
+ resolve();
138
+ });
139
+ });
140
+ }
141
+ async function close() {
142
+ if (server !== undefined) {
143
+ server.close();
144
+ server = undefined;
145
+ }
146
+ }
147
+ return { listen, close, app };
148
+ }
149
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/harness/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { loadManifest } from './manifest.js';
2
+ export { createRouter } from './router.js';
3
+ export type { AgentHandler, AgentManifest, AgentRouter, HandlerDescription, InitContext, RunRequest, RunContext, RunResponse, } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EACV,YAAY,EACZ,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { loadManifest } from './manifest.js';
2
+ export { createRouter } from './router.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AgentManifest } from './types.js';
2
+ /**
3
+ * Load an agent manifest from a directory.
4
+ *
5
+ * If manifest.json exists, reads it and imports handler.js for each agent.
6
+ * If no manifest.json but handler.js exists in the directory, treats it as
7
+ * a single-agent deployment (auto-detect).
8
+ */
9
+ export declare function loadManifest(dir: string): Promise<AgentManifest>;
10
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0BtE"}
@@ -0,0 +1,93 @@
1
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { pathToFileURL } from 'node:url';
4
+ /**
5
+ * Load an agent manifest from a directory.
6
+ *
7
+ * If manifest.json exists, reads it and imports handler.js for each agent.
8
+ * If no manifest.json but handler.js exists in the directory, treats it as
9
+ * a single-agent deployment (auto-detect).
10
+ */
11
+ export async function loadManifest(dir) {
12
+ const absDir = path.resolve(dir);
13
+ const manifestPath = path.join(absDir, 'manifest.json');
14
+ if (existsSync(manifestPath)) {
15
+ return loadMultiAgent(absDir, manifestPath);
16
+ }
17
+ // Auto-detect single agent: look for handler.js directly
18
+ const handlerPath = path.join(absDir, 'handler.js');
19
+ if (existsSync(handlerPath)) {
20
+ return loadSingleAgent(absDir, handlerPath);
21
+ }
22
+ // Check one level deep (build/[name]/ pattern)
23
+ const entries = readdirSync(absDir, { withFileTypes: true });
24
+ for (const entry of entries) {
25
+ if (entry.isDirectory()) {
26
+ const nested = path.join(absDir, entry.name, 'handler.js');
27
+ if (existsSync(nested)) {
28
+ return loadSingleAgent(path.join(absDir, entry.name), nested);
29
+ }
30
+ }
31
+ }
32
+ throw new Error(`No manifest.json or handler.js found in ${absDir}`);
33
+ }
34
+ async function loadMultiAgent(dir, manifestPath) {
35
+ const raw = JSON.parse(readFileSync(manifestPath, 'utf-8'));
36
+ const defaultAgent = typeof raw['default'] === 'string' ? raw['default'] : '';
37
+ const agentsConfig = raw['agents'];
38
+ if (agentsConfig === undefined ||
39
+ agentsConfig === null ||
40
+ typeof agentsConfig !== 'object' ||
41
+ Array.isArray(agentsConfig)) {
42
+ throw new Error('manifest.json must have an "agents" object');
43
+ }
44
+ const agents = new Map();
45
+ for (const [name, relPath] of Object.entries(agentsConfig)) {
46
+ if (typeof relPath !== 'string' || relPath === '') {
47
+ throw new Error(`Agent "${name}" in manifest.json must have a non-empty string path`);
48
+ }
49
+ const handlerPath = path.resolve(dir, relPath, 'handler.js');
50
+ if (!existsSync(handlerPath)) {
51
+ throw new Error(`handler.js not found for agent "${name}" at ${handlerPath}`);
52
+ }
53
+ const handler = await importHandler(handlerPath);
54
+ agents.set(name, handler);
55
+ }
56
+ if (defaultAgent === '' && agents.size === 1) {
57
+ const firstName = agents.keys().next().value;
58
+ return { defaultAgent: firstName, agents };
59
+ }
60
+ if (defaultAgent !== '' && !agents.has(defaultAgent)) {
61
+ throw new Error(`Default agent "${defaultAgent}" not found in manifest`);
62
+ }
63
+ return {
64
+ defaultAgent: defaultAgent || agents.keys().next().value,
65
+ agents,
66
+ };
67
+ }
68
+ async function loadSingleAgent(agentDir, handlerPath) {
69
+ const handler = await importHandler(handlerPath);
70
+ const description = handler.describe();
71
+ const name = description?.name ?? path.basename(agentDir);
72
+ const agents = new Map();
73
+ agents.set(name, handler);
74
+ return { defaultAgent: name, agents };
75
+ }
76
+ async function importHandler(handlerPath) {
77
+ const url = pathToFileURL(handlerPath).href;
78
+ const mod = (await import(url));
79
+ if (typeof mod['describe'] !== 'function') {
80
+ throw new Error(`handler.js at ${handlerPath} does not export describe()`);
81
+ }
82
+ if (typeof mod['init'] !== 'function') {
83
+ throw new Error(`handler.js at ${handlerPath} does not export init()`);
84
+ }
85
+ if (typeof mod['execute'] !== 'function') {
86
+ throw new Error(`handler.js at ${handlerPath} does not export execute()`);
87
+ }
88
+ if (typeof mod['dispose'] !== 'function') {
89
+ throw new Error(`handler.js at ${handlerPath} does not export dispose()`);
90
+ }
91
+ return mod;
92
+ }
93
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAExD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IAED,yDAAyD;IACzD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,OAAO,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,+CAA+C;IAC/C,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAC3D,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvB,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,2CAA2C,MAAM,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,GAAW,EACX,YAAoB;IAEpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAGzD,CAAC;IAEF,MAAM,YAAY,GAAG,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEnC,IACE,YAAY,KAAK,SAAS;QAC1B,YAAY,KAAK,IAAI;QACrB,OAAO,YAAY,KAAK,QAAQ;QAChC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE/C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAC1C,YAAuC,CACxC,EAAE,CAAC;QACF,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CACb,UAAU,IAAI,sDAAsD,CACrE,CAAC;QACJ,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,QAAQ,WAAW,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED,IAAI,YAAY,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAe,CAAC;QACvD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,YAAY,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,yBAAyB,CAAC,CAAC;IAC3E,CAAC;IAED,OAAO;QACL,YAAY,EAAE,YAAY,IAAK,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAgB;QACpE,MAAM;KACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,QAAgB,EAChB,WAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,WAAW,EAAE,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1B,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,WAAmB;IAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;IAC5C,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,CAA4B,CAAC;IAE3D,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,UAAU,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,6BAA6B,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,yBAAyB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,4BAA4B,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,SAAS,CAAC,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,iBAAiB,WAAW,4BAA4B,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,GAA8B,CAAC;AACxC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { AgentManifest, AgentRouter } from './types.js';
2
+ /**
3
+ * Create a router from a loaded manifest.
4
+ *
5
+ * 1. Calls describe() on each agent (type info before init)
6
+ * 2. Creates AHI resolver
7
+ * 3. Calls init({ globalVars, ahiResolver }) on each agent
8
+ * 4. Returns AgentRouter ready for execute() calls
9
+ */
10
+ export declare function createRouter(manifest: AgentManifest, options?: {
11
+ globalVars?: Record<string, string> | undefined;
12
+ }): Promise<AgentRouter>;
13
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EAKZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;CAAE,GAC5D,OAAO,CAAC,WAAW,CAAC,CA2EtB"}
package/dist/router.js ADDED
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Create a router from a loaded manifest.
3
+ *
4
+ * 1. Calls describe() on each agent (type info before init)
5
+ * 2. Creates AHI resolver
6
+ * 3. Calls init({ globalVars, ahiResolver }) on each agent
7
+ * 4. Returns AgentRouter ready for execute() calls
8
+ */
9
+ export async function createRouter(manifest, options) {
10
+ const descriptions = new Map();
11
+ // Step 1: Gather descriptions (before init)
12
+ for (const [name, handler] of manifest.agents) {
13
+ descriptions.set(name, handler.describe());
14
+ }
15
+ // Step 2: Create AHI resolver (references the router's own run function)
16
+ // Note: AHI calls are agent-to-agent and do not carry the caller's session
17
+ // variables, so context is intentionally not forwarded here.
18
+ const ahiResolver = async (agentName, request) => {
19
+ return run(agentName, request);
20
+ };
21
+ // Step 3: Initialize all agents concurrently
22
+ await Promise.all(Array.from(manifest.agents.values()).map((handler) => handler.init({
23
+ globalVars: options?.globalVars,
24
+ ahiResolver,
25
+ })));
26
+ // Step 4: Build router
27
+ async function run(agentName, request, context) {
28
+ const resolvedName = agentName === '' ? manifest.defaultAgent : agentName;
29
+ const handler = manifest.agents.get(resolvedName);
30
+ if (handler === undefined) {
31
+ const available = Array.from(manifest.agents.keys()).join(', ');
32
+ throw new Error(`Agent "${resolvedName}" not found. Available: ${available}`);
33
+ }
34
+ const normalized = {
35
+ ...request,
36
+ params: request.params ?? {},
37
+ };
38
+ return handler.execute(normalized, context);
39
+ }
40
+ function describe(agentName) {
41
+ const resolvedName = agentName === '' ? manifest.defaultAgent : agentName;
42
+ return descriptions.get(resolvedName) ?? null;
43
+ }
44
+ function agents() {
45
+ return Array.from(manifest.agents.keys());
46
+ }
47
+ function getDefaultAgent() {
48
+ return manifest.defaultAgent;
49
+ }
50
+ async function dispose() {
51
+ for (const handler of manifest.agents.values()) {
52
+ await handler.dispose();
53
+ }
54
+ }
55
+ return {
56
+ run,
57
+ describe,
58
+ agents,
59
+ defaultAgent: getDefaultAgent,
60
+ dispose,
61
+ };
62
+ }
63
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AASA;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAuB,EACvB,OAA6D;IAE7D,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqC,CAAC;IAElE,4CAA4C;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9C,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,6DAA6D;IAC7D,MAAM,WAAW,GAAG,KAAK,EACvB,SAAiB,EACjB,OAAmB,EACG,EAAE;QACxB,OAAO,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,6CAA6C;IAC7C,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACnD,OAAO,CAAC,IAAI,CAAC;QACX,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,WAAW;KACZ,CAAC,CACH,CACF,CAAC;IAEF,uBAAuB;IACvB,KAAK,UAAU,GAAG,CAChB,SAAiB,EACjB,OAAmB,EACnB,OAAoB;QAEpB,MAAM,YAAY,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CACb,UAAU,YAAY,2BAA2B,SAAS,EAAE,CAC7D,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAe;YAC7B,GAAG,OAAO;YACV,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;SAC7B,CAAC;QACF,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,SAAS,QAAQ,CAAC,SAAiB;QACjC,MAAM,YAAY,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,OAAO,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IAChD,CAAC;IAED,SAAS,MAAM;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,eAAe;QACtB,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/C,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG;QACH,QAAQ;QACR,MAAM;QACN,YAAY,EAAE,eAAe;QAC7B,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,47 @@
1
+ export interface HandlerDescription {
2
+ readonly name: string;
3
+ readonly description?: string | undefined;
4
+ readonly params: ReadonlyArray<{
5
+ readonly name: string;
6
+ readonly type: string;
7
+ readonly required: boolean;
8
+ readonly description?: string | undefined;
9
+ readonly defaultValue?: unknown;
10
+ }>;
11
+ }
12
+ export interface InitContext {
13
+ readonly globalVars?: Record<string, string> | undefined;
14
+ readonly ahiResolver?: ((agentName: string, request: RunRequest) => Promise<RunResponse>) | undefined;
15
+ }
16
+ export interface RunRequest {
17
+ readonly params?: Record<string, unknown> | undefined;
18
+ readonly timeout?: number | undefined;
19
+ }
20
+ export interface RunContext {
21
+ readonly sessionVars?: Record<string, string> | undefined;
22
+ readonly onLog?: ((message: string) => void) | undefined;
23
+ readonly onChunk?: ((chunk: unknown) => Promise<void>) | undefined;
24
+ }
25
+ export interface RunResponse {
26
+ readonly state: 'completed' | 'error';
27
+ readonly result: unknown;
28
+ readonly streamed?: boolean | undefined;
29
+ }
30
+ export interface AgentHandler {
31
+ describe(): HandlerDescription | null;
32
+ init(context?: InitContext): Promise<void>;
33
+ execute(request?: RunRequest, context?: RunContext): Promise<RunResponse>;
34
+ dispose(): Promise<void>;
35
+ }
36
+ export interface AgentManifest {
37
+ readonly defaultAgent: string;
38
+ readonly agents: ReadonlyMap<string, AgentHandler>;
39
+ }
40
+ export interface AgentRouter {
41
+ run(agentName: string, request: RunRequest, context?: RunContext): Promise<RunResponse>;
42
+ describe(agentName: string): HandlerDescription | null;
43
+ agents(): string[];
44
+ defaultAgent(): string;
45
+ dispose(): Promise<void>;
46
+ }
47
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;QAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;KACjC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,WAAW,CAAC,EACjB,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,GAClE,SAAS,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACzD,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;CACpE;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,IAAI,kBAAkB,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACpD;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CACD,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAAC;IACvD,MAAM,IAAI,MAAM,EAAE,CAAC;IACnB,YAAY,IAAI,MAAM,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@rcrsr/rill-agent",
3
+ "version": "0.18.4",
4
+ "license": "MIT",
5
+ "author": "Andre Bremer",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "./http": {
13
+ "types": "./dist/harness/http.d.ts",
14
+ "default": "./dist/harness/http.js"
15
+ }
16
+ },
17
+ "scripts": {
18
+ "build": "tsc --build",
19
+ "test": "vitest run",
20
+ "typecheck": "tsc --noEmit",
21
+ "lint": "eslint --config ../../../eslint.config.js src/",
22
+ "check": "pnpm run build && pnpm run test && pnpm run lint"
23
+ },
24
+ "dependencies": {
25
+ "@hono/node-server": "^1.19.12",
26
+ "hono": "^4.12.10"
27
+ },
28
+ "files": [
29
+ "dist"
30
+ ],
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/rcrsr/rill-agent.git",
37
+ "directory": "packages/agent/core"
38
+ }
39
+ }