@rcrsr/rill-agent-ext-ahi 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 +21 -0
- package/README.md +36 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +320 -0
- package/dist/index.js.map +1 -0
- package/package.json +46 -0
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,36 @@
|
|
|
1
|
+
# @rcrsr/rill-agent-ext-ahi
|
|
2
|
+
|
|
3
|
+
[rill](https://github.com/rcrsr/rill) extension for the Agent Host Interface (AHI). Registers `ahi::<agentName>` host functions so a rill agent can call other agents over HTTP. Uses static URL resolution with `${VAR_NAME}` environment variable substitution.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @rcrsr/rill-agent-ext-ahi
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { createAhiExtension } from '@rcrsr/rill-agent-ext-ahi';
|
|
15
|
+
|
|
16
|
+
const ext = createAhiExtension({
|
|
17
|
+
agents: {
|
|
18
|
+
summarizer: { url: 'http://localhost:3001' },
|
|
19
|
+
classifier: { url: 'http://localhost:3002' },
|
|
20
|
+
},
|
|
21
|
+
timeout: 10000,
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
```rill
|
|
26
|
+
ahi::summarizer([text: "Long article content..."]) => $result
|
|
27
|
+
$result -> log
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Documentation
|
|
31
|
+
|
|
32
|
+
See [full documentation](docs/agent-ahi.md) for configuration, error mapping, and in-process binding.
|
|
33
|
+
|
|
34
|
+
## License
|
|
35
|
+
|
|
36
|
+
MIT
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AHI Extension Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides agent-to-agent HTTP invocation via the Agent Host Interface (AHI).
|
|
5
|
+
* Static URL mode: agents are configured with explicit endpoint URLs.
|
|
6
|
+
*/
|
|
7
|
+
import type { ExtensionConfigSchema, ExtensionManifest } from '@rcrsr/rill';
|
|
8
|
+
import type { RillValue, ApplicationCallable } from '@rcrsr/rill';
|
|
9
|
+
/**
|
|
10
|
+
* Result object returned by extension factories. Contains application
|
|
11
|
+
* callables keyed by function name with optional lifecycle hooks.
|
|
12
|
+
*/
|
|
13
|
+
export type ExtensionResult = Record<string, ApplicationCallable> & {
|
|
14
|
+
dispose?: () => void | Promise<void>;
|
|
15
|
+
suspend?: () => unknown;
|
|
16
|
+
restore?: (state: unknown) => void;
|
|
17
|
+
};
|
|
18
|
+
/** Minimal run request for in-process agent invocation. */
|
|
19
|
+
interface InProcessRunRequest {
|
|
20
|
+
readonly params?: Record<string, unknown> | undefined;
|
|
21
|
+
readonly correlationId?: string | undefined;
|
|
22
|
+
readonly timeout?: number | undefined;
|
|
23
|
+
readonly trigger?: string | {
|
|
24
|
+
readonly type: 'agent';
|
|
25
|
+
readonly agentName: string;
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Minimal run response for in-process agent invocation. */
|
|
30
|
+
interface InProcessRunResponse {
|
|
31
|
+
readonly state: 'running' | 'completed' | 'failed';
|
|
32
|
+
readonly result?: RillValue | undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Interface for an in-process agent host accepted by createInProcessFunction.
|
|
36
|
+
* Implemented by AgentHost from @rcrsr/rill-host. Defined here locally to
|
|
37
|
+
* avoid a cross-package dependency.
|
|
38
|
+
*/
|
|
39
|
+
export interface InProcessRunner {
|
|
40
|
+
runForAgent(agentName: string, input: InProcessRunRequest): Promise<InProcessRunResponse>;
|
|
41
|
+
}
|
|
42
|
+
/** Configuration for a single AHI agent endpoint */
|
|
43
|
+
export interface AhiAgentConfig {
|
|
44
|
+
/** Resolved endpoint URL (after env substitution) */
|
|
45
|
+
url: string;
|
|
46
|
+
}
|
|
47
|
+
/** AHI extension configuration (static URL mode) */
|
|
48
|
+
export interface AhiExtensionConfig {
|
|
49
|
+
/** Agent name to endpoint config map */
|
|
50
|
+
agents: Record<string, AhiAgentConfig>;
|
|
51
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
52
|
+
timeout?: number | undefined;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create AHI extension for agent-to-agent HTTP invocation.
|
|
56
|
+
*
|
|
57
|
+
* Each agent name registers an `ahi::<name>` host function.
|
|
58
|
+
*
|
|
59
|
+
* @param config - AHI extension configuration
|
|
60
|
+
* @returns ExtensionResult with one function per agent
|
|
61
|
+
* @throws Error if any agent URL contains an unset env variable (EC-2)
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* const ahiExt = createAhiExtension({
|
|
66
|
+
* agents: {
|
|
67
|
+
* parser: { url: 'http://localhost:4001' },
|
|
68
|
+
* },
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*/
|
|
72
|
+
export declare function createAhiExtension(config: AhiExtensionConfig): ExtensionResult;
|
|
73
|
+
export declare const configSchema: ExtensionConfigSchema;
|
|
74
|
+
/**
|
|
75
|
+
* Create a HostFunctionDefinition for in-process AHI invocation.
|
|
76
|
+
*
|
|
77
|
+
* Used by bindHost() to register ahi::<name> functions that bypass HTTP
|
|
78
|
+
* and call the agent directly.
|
|
79
|
+
*
|
|
80
|
+
* @param runner - In-process agent runner (InProcessRunner-compatible)
|
|
81
|
+
* @param targetAgentName - Name of the target agent
|
|
82
|
+
* @param timeout - Default request timeout in ms (0 = unlimited)
|
|
83
|
+
* @returns HostFunctionDefinition ready for registration
|
|
84
|
+
*/
|
|
85
|
+
export declare function createInProcessFunction(runner: InProcessRunner, targetAgentName: string, timeout: number): ApplicationCallable;
|
|
86
|
+
/**
|
|
87
|
+
* Standard extension manifest for @rcrsr/rill-agent-ext-ahi.
|
|
88
|
+
* Wraps createAhiExtension so that loadProject() can validate the
|
|
89
|
+
* bundle output config at build time (dry-run validation, AC-49).
|
|
90
|
+
*
|
|
91
|
+
* The factory accepts AhiExtensionConfig and returns the extension's
|
|
92
|
+
* callable dict as the mounted RillValue.
|
|
93
|
+
*/
|
|
94
|
+
export declare const extensionManifest: ExtensionManifest;
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAOlE;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAAG;IAClE,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,2DAA2D;AAC3D,UAAU,mBAAmB;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IACtD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EACb,MAAM,GACN;QACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC5B,CAAC;CACP;AAED,4DAA4D;AAC5D,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;CACzC;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAAC;CAClC;AAED,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;CACb;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAqKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,GACzB,eAAe,CA6DjB;AAKD,eAAO,MAAM,YAAY,EAAE,qBAG1B,CAAC;AA6FF;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,EACvB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM,GACd,mBAAmB,CAQrB;AAMD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,EAAE,iBAU/B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AHI Extension Factory
|
|
3
|
+
*
|
|
4
|
+
* Provides agent-to-agent HTTP invocation via the Agent Host Interface (AHI).
|
|
5
|
+
* Static URL mode: agents are configured with explicit endpoint URLs.
|
|
6
|
+
*/
|
|
7
|
+
import { isDict, RuntimeError, callable } from '@rcrsr/rill';
|
|
8
|
+
// ============================================================
|
|
9
|
+
// HELPERS
|
|
10
|
+
// ============================================================
|
|
11
|
+
/** ENV_VAR_PATTERN matches ${VAR_NAME} substitution tokens */
|
|
12
|
+
const ENV_VAR_PATTERN = /\$\{([^}]+)\}/g;
|
|
13
|
+
/**
|
|
14
|
+
* Resolve all ${VAR} tokens in a URL string using process.env.
|
|
15
|
+
* Throws synchronously if any referenced variable is unset.
|
|
16
|
+
*/
|
|
17
|
+
function resolveEnvVars(url) {
|
|
18
|
+
return url.replace(ENV_VAR_PATTERN, (_match, varName) => {
|
|
19
|
+
const value = process.env[varName];
|
|
20
|
+
if (value === undefined) {
|
|
21
|
+
throw new Error(`AHI: environment variable ${varName} is not set`);
|
|
22
|
+
}
|
|
23
|
+
return value;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert the first rill argument to a JSON-serializable params object.
|
|
28
|
+
* If args[0] is a dict, spread it into a plain object.
|
|
29
|
+
* Otherwise return an empty object.
|
|
30
|
+
*/
|
|
31
|
+
function extractParams(args) {
|
|
32
|
+
const first = args[0];
|
|
33
|
+
if (first !== undefined && isDict(first)) {
|
|
34
|
+
return { ...first };
|
|
35
|
+
}
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
// ============================================================
|
|
39
|
+
// SHARED HTTP INVOCATION
|
|
40
|
+
// ============================================================
|
|
41
|
+
/**
|
|
42
|
+
* Perform the HTTP POST to a resolved agent endpoint.
|
|
43
|
+
*
|
|
44
|
+
* @param agentUrl - Resolved base URL of the agent
|
|
45
|
+
* @param agentTimeout - Effective timeout in ms (0 = unlimited)
|
|
46
|
+
* @param args - Rill call arguments
|
|
47
|
+
* @param ctx - Rill call context (metadata forwarded as headers)
|
|
48
|
+
* @param inFlight - Set of active AbortControllers for dispose tracking
|
|
49
|
+
* @returns Rill value from downstream agent
|
|
50
|
+
*/
|
|
51
|
+
async function invokeAgent(agentUrl, agentTimeout, args, ctx, inFlight) {
|
|
52
|
+
const params = extractParams(args);
|
|
53
|
+
const metadata = ctx.metadata ?? {};
|
|
54
|
+
// AC-5 / AC-22: forward remaining budget when it is less than the
|
|
55
|
+
// configured default. Read timeoutDeadline set by host.ts / handler.ts.
|
|
56
|
+
const deadlineRaw = metadata['timeoutDeadline'];
|
|
57
|
+
const deadlineMs = deadlineRaw !== undefined ? parseInt(deadlineRaw, 10) : undefined;
|
|
58
|
+
let effectiveTimeout = agentTimeout;
|
|
59
|
+
if (deadlineMs !== undefined && !isNaN(deadlineMs)) {
|
|
60
|
+
const remaining = deadlineMs - Date.now();
|
|
61
|
+
// If deadline has already passed, send 1 ms (not 0, which means no timeout).
|
|
62
|
+
// If remaining < configured default (or default is 0 = unlimited), use remaining.
|
|
63
|
+
if (agentTimeout === 0 || remaining < agentTimeout) {
|
|
64
|
+
effectiveTimeout = remaining > 0 ? remaining : 1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const body = JSON.stringify({
|
|
68
|
+
params,
|
|
69
|
+
trigger: {
|
|
70
|
+
type: 'agent',
|
|
71
|
+
agentName: metadata['agentName'] ?? '',
|
|
72
|
+
sessionId: metadata['sessionId'] ?? '',
|
|
73
|
+
},
|
|
74
|
+
timeout: effectiveTimeout,
|
|
75
|
+
});
|
|
76
|
+
// Build AbortController only when a non-zero timeout is configured.
|
|
77
|
+
// AC-21: timeout 0 means no deadline — skip AbortController entirely.
|
|
78
|
+
let controller;
|
|
79
|
+
let timeoutHandle;
|
|
80
|
+
if (effectiveTimeout !== 0) {
|
|
81
|
+
controller = new AbortController();
|
|
82
|
+
timeoutHandle = setTimeout(() => {
|
|
83
|
+
controller.abort();
|
|
84
|
+
}, effectiveTimeout);
|
|
85
|
+
}
|
|
86
|
+
// Track controller for dispose cancellation
|
|
87
|
+
if (controller !== undefined) {
|
|
88
|
+
inFlight.add(controller);
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const response = await fetch(`${agentUrl}/run`, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: {
|
|
94
|
+
'Content-Type': 'application/json',
|
|
95
|
+
'X-Correlation-ID': metadata['correlationId'] ?? '',
|
|
96
|
+
},
|
|
97
|
+
body,
|
|
98
|
+
signal: controller?.signal ?? null,
|
|
99
|
+
});
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
const status = response.status;
|
|
102
|
+
if (status === 400) {
|
|
103
|
+
const text = await response.text();
|
|
104
|
+
throw new RuntimeError('RILL-R027', `AHI: validation failed: ${text}`);
|
|
105
|
+
}
|
|
106
|
+
if (status === 404) {
|
|
107
|
+
throw new RuntimeError('RILL-R028', 'AHI: agent unreachable');
|
|
108
|
+
}
|
|
109
|
+
if (status === 429) {
|
|
110
|
+
throw new RuntimeError('RILL-R032', 'AHI: rate limited');
|
|
111
|
+
}
|
|
112
|
+
if (status === 500) {
|
|
113
|
+
throw new RuntimeError('RILL-R029', 'AHI: downstream execution failed');
|
|
114
|
+
}
|
|
115
|
+
throw new RuntimeError('RILL-R034', `AHI: downstream error: HTTP ${status}`);
|
|
116
|
+
}
|
|
117
|
+
const json = (await response.json());
|
|
118
|
+
return json.result;
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
// Re-throw structured errors immediately
|
|
122
|
+
if (err instanceof RuntimeError) {
|
|
123
|
+
throw err;
|
|
124
|
+
}
|
|
125
|
+
// EC-7: AbortController signal fired → timeout exceeded
|
|
126
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
127
|
+
throw new RuntimeError('RILL-R030', 'AHI: timeout exceeded');
|
|
128
|
+
}
|
|
129
|
+
// EC-8: Network failure (DNS, connection refused)
|
|
130
|
+
if (err instanceof TypeError) {
|
|
131
|
+
throw new RuntimeError('RILL-R031', 'AHI: connection refused');
|
|
132
|
+
}
|
|
133
|
+
throw err;
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
if (controller !== undefined) {
|
|
137
|
+
inFlight.delete(controller);
|
|
138
|
+
}
|
|
139
|
+
if (timeoutHandle !== undefined) {
|
|
140
|
+
clearTimeout(timeoutHandle);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// ============================================================
|
|
145
|
+
// FACTORY
|
|
146
|
+
// ============================================================
|
|
147
|
+
/**
|
|
148
|
+
* Create AHI extension for agent-to-agent HTTP invocation.
|
|
149
|
+
*
|
|
150
|
+
* Each agent name registers an `ahi::<name>` host function.
|
|
151
|
+
*
|
|
152
|
+
* @param config - AHI extension configuration
|
|
153
|
+
* @returns ExtensionResult with one function per agent
|
|
154
|
+
* @throws Error if any agent URL contains an unset env variable (EC-2)
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```typescript
|
|
158
|
+
* const ahiExt = createAhiExtension({
|
|
159
|
+
* agents: {
|
|
160
|
+
* parser: { url: 'http://localhost:4001' },
|
|
161
|
+
* },
|
|
162
|
+
* });
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
export function createAhiExtension(config) {
|
|
166
|
+
const { agents, timeout = 30000 } = config;
|
|
167
|
+
// Static URL mode: validate and resolve env vars in each agent URL
|
|
168
|
+
const resolvedAgents = new Map();
|
|
169
|
+
for (const [name, agentConfig] of Object.entries(agents)) {
|
|
170
|
+
const resolvedUrl = resolveEnvVars(agentConfig.url);
|
|
171
|
+
resolvedAgents.set(name, { url: resolvedUrl });
|
|
172
|
+
}
|
|
173
|
+
// ============================================================
|
|
174
|
+
// IN-FLIGHT TRACKING (factory-level, shared across all agents)
|
|
175
|
+
// ============================================================
|
|
176
|
+
const inFlight = new Set();
|
|
177
|
+
let disposed = false;
|
|
178
|
+
// ============================================================
|
|
179
|
+
// FUNCTION REGISTRATION
|
|
180
|
+
// ============================================================
|
|
181
|
+
const functions = {};
|
|
182
|
+
for (const [name, agent] of resolvedAgents) {
|
|
183
|
+
// Capture agent state for this closure
|
|
184
|
+
const agentUrl = agent.url;
|
|
185
|
+
functions[name] = callable(((args, ctx) => {
|
|
186
|
+
// AC-11: reject calls after dispose
|
|
187
|
+
if (disposed) {
|
|
188
|
+
throw new RuntimeError('RILL-R033', 'AHI: extension disposed');
|
|
189
|
+
}
|
|
190
|
+
return invokeAgent(agentUrl, timeout, args, ctx, inFlight);
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
// ============================================================
|
|
194
|
+
// DISPOSE
|
|
195
|
+
// ============================================================
|
|
196
|
+
// AC-11: cancel all in-flight requests and block further calls
|
|
197
|
+
const dispose = () => {
|
|
198
|
+
disposed = true;
|
|
199
|
+
for (const ctrl of inFlight) {
|
|
200
|
+
ctrl.abort();
|
|
201
|
+
}
|
|
202
|
+
inFlight.clear();
|
|
203
|
+
};
|
|
204
|
+
// ============================================================
|
|
205
|
+
// EXTENSION RESULT
|
|
206
|
+
// ============================================================
|
|
207
|
+
const result = { ...functions };
|
|
208
|
+
result.dispose = dispose;
|
|
209
|
+
return result;
|
|
210
|
+
}
|
|
211
|
+
// ============================================================
|
|
212
|
+
// CONFIG SCHEMA
|
|
213
|
+
// ============================================================
|
|
214
|
+
export const configSchema = {
|
|
215
|
+
agents: { type: 'string' },
|
|
216
|
+
timeout: { type: 'number' },
|
|
217
|
+
};
|
|
218
|
+
// ============================================================
|
|
219
|
+
// IN-PROCESS CALL
|
|
220
|
+
// ============================================================
|
|
221
|
+
/**
|
|
222
|
+
* Create a CallableFn that invokes a target agent in-process via runner.
|
|
223
|
+
*
|
|
224
|
+
* IR-9: Calls runner.runForAgent() with caller trigger metadata and
|
|
225
|
+
* propagated timeout deadline. Maps capacity errors to RILL-R032 and
|
|
226
|
+
* failed state to RILL-R029.
|
|
227
|
+
*
|
|
228
|
+
* @param runner - In-process agent runner
|
|
229
|
+
* @param targetAgentName - Name of the target agent to invoke
|
|
230
|
+
* @param defaultTimeout - Default timeout in ms (0 = unlimited)
|
|
231
|
+
*/
|
|
232
|
+
function createInProcessCallFn(runner, targetAgentName, defaultTimeout) {
|
|
233
|
+
return async (args, ctx) => {
|
|
234
|
+
const params = extractParams(args);
|
|
235
|
+
const metadata = ctx.metadata ?? {};
|
|
236
|
+
const callerAgentName = metadata['agentName'] ?? '';
|
|
237
|
+
const callerSessionId = metadata['sessionId'] ?? '';
|
|
238
|
+
const callerCorrelationId = metadata['correlationId'];
|
|
239
|
+
// AC-5 / AC-22: propagate remaining budget when it is less than the
|
|
240
|
+
// configured default. Mirror the same logic used in invokeAgent().
|
|
241
|
+
const deadlineRaw = metadata['timeoutDeadline'];
|
|
242
|
+
const deadlineMs = deadlineRaw !== undefined ? parseInt(deadlineRaw, 10) : undefined;
|
|
243
|
+
let effectiveTimeout = defaultTimeout;
|
|
244
|
+
if (deadlineMs !== undefined && !isNaN(deadlineMs)) {
|
|
245
|
+
const remaining = deadlineMs - Date.now();
|
|
246
|
+
if (defaultTimeout === 0 || remaining < defaultTimeout) {
|
|
247
|
+
effectiveTimeout = remaining > 0 ? remaining : 1;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
let response;
|
|
251
|
+
try {
|
|
252
|
+
response = await runner.runForAgent(targetAgentName, {
|
|
253
|
+
params,
|
|
254
|
+
correlationId: callerCorrelationId,
|
|
255
|
+
trigger: {
|
|
256
|
+
type: 'agent',
|
|
257
|
+
agentName: callerAgentName,
|
|
258
|
+
sessionId: callerSessionId,
|
|
259
|
+
},
|
|
260
|
+
timeout: effectiveTimeout,
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
// EC-12: capacity error from host → RILL-R032 rate limited
|
|
265
|
+
// Duck-type check: ahi cannot import AgentHostError directly.
|
|
266
|
+
if (err instanceof Error &&
|
|
267
|
+
(('phase' in err &&
|
|
268
|
+
err.phase === 'capacity') ||
|
|
269
|
+
err.message.includes('capacity'))) {
|
|
270
|
+
throw new RuntimeError('RILL-R032', 'AHI: rate limited');
|
|
271
|
+
}
|
|
272
|
+
throw err;
|
|
273
|
+
}
|
|
274
|
+
// EC-13: downstream execution failed → RILL-R029
|
|
275
|
+
if (response.state === 'failed') {
|
|
276
|
+
throw new RuntimeError('RILL-R029', 'AHI: downstream execution failed');
|
|
277
|
+
}
|
|
278
|
+
return response.result ?? null;
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
// ============================================================
|
|
282
|
+
// IN-PROCESS FUNCTION FACTORY
|
|
283
|
+
// ============================================================
|
|
284
|
+
/**
|
|
285
|
+
* Create a HostFunctionDefinition for in-process AHI invocation.
|
|
286
|
+
*
|
|
287
|
+
* Used by bindHost() to register ahi::<name> functions that bypass HTTP
|
|
288
|
+
* and call the agent directly.
|
|
289
|
+
*
|
|
290
|
+
* @param runner - In-process agent runner (InProcessRunner-compatible)
|
|
291
|
+
* @param targetAgentName - Name of the target agent
|
|
292
|
+
* @param timeout - Default request timeout in ms (0 = unlimited)
|
|
293
|
+
* @returns HostFunctionDefinition ready for registration
|
|
294
|
+
*/
|
|
295
|
+
export function createInProcessFunction(runner, targetAgentName, timeout) {
|
|
296
|
+
return callable(createInProcessCallFn(runner, targetAgentName, timeout));
|
|
297
|
+
}
|
|
298
|
+
// ============================================================
|
|
299
|
+
// EXTENSION MANIFEST
|
|
300
|
+
// ============================================================
|
|
301
|
+
/**
|
|
302
|
+
* Standard extension manifest for @rcrsr/rill-agent-ext-ahi.
|
|
303
|
+
* Wraps createAhiExtension so that loadProject() can validate the
|
|
304
|
+
* bundle output config at build time (dry-run validation, AC-49).
|
|
305
|
+
*
|
|
306
|
+
* The factory accepts AhiExtensionConfig and returns the extension's
|
|
307
|
+
* callable dict as the mounted RillValue.
|
|
308
|
+
*/
|
|
309
|
+
export const extensionManifest = {
|
|
310
|
+
factory: async (config) => {
|
|
311
|
+
const result = createAhiExtension(config);
|
|
312
|
+
const { dispose, ...value } = result;
|
|
313
|
+
return {
|
|
314
|
+
value: value,
|
|
315
|
+
...(dispose !== undefined ? { dispose } : {}),
|
|
316
|
+
};
|
|
317
|
+
},
|
|
318
|
+
configSchema,
|
|
319
|
+
};
|
|
320
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rcrsr/rill-agent-ext-ahi",
|
|
3
|
+
"version": "0.18.4",
|
|
4
|
+
"description": "rill extension for Agent Host Interface (AHI) integration",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Andre Bremer",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"rill",
|
|
12
|
+
"ahi",
|
|
13
|
+
"agent",
|
|
14
|
+
"extension",
|
|
15
|
+
"ai",
|
|
16
|
+
"scripting"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc --build",
|
|
20
|
+
"test": "vitest run",
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"lint": "eslint --config ../../../eslint.config.js src/",
|
|
23
|
+
"check": "pnpm run build && pnpm run test && pnpm run lint"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@rcrsr/rill": "~0.18.4"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@rcrsr/rill": "^0.18.4"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "git+https://github.com/rcrsr/rill-agent.git",
|
|
37
|
+
"directory": "packages/agent/ahi"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://rill.run/docs/extensions/ahi/",
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/rcrsr/rill-agent/issues"
|
|
42
|
+
},
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
}
|
|
46
|
+
}
|