@ouispec/agent-worker 0.1.0
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 +175 -0
- package/dist/approvals/client.d.ts +29 -0
- package/dist/approvals/client.d.ts.map +1 -0
- package/dist/approvals/client.js +50 -0
- package/dist/approvals/client.js.map +1 -0
- package/dist/approvals/continuation.d.ts +28 -0
- package/dist/approvals/continuation.d.ts.map +1 -0
- package/dist/approvals/continuation.js +43 -0
- package/dist/approvals/continuation.js.map +1 -0
- package/dist/approvals/preview.d.ts +15 -0
- package/dist/approvals/preview.d.ts.map +1 -0
- package/dist/approvals/preview.js +33 -0
- package/dist/approvals/preview.js.map +1 -0
- package/dist/approvals/requirement.d.ts +15 -0
- package/dist/approvals/requirement.d.ts.map +1 -0
- package/dist/approvals/requirement.js +26 -0
- package/dist/approvals/requirement.js.map +1 -0
- package/dist/authz/tool-policy.d.ts +63 -0
- package/dist/authz/tool-policy.d.ts.map +1 -0
- package/dist/authz/tool-policy.js +23 -0
- package/dist/authz/tool-policy.js.map +1 -0
- package/dist/container/server.d.ts +24 -0
- package/dist/container/server.d.ts.map +1 -0
- package/dist/container/server.js +119 -0
- package/dist/container/server.js.map +1 -0
- package/dist/emit/http-adapter.d.ts +15 -0
- package/dist/emit/http-adapter.d.ts.map +1 -0
- package/dist/emit/http-adapter.js +35 -0
- package/dist/emit/http-adapter.js.map +1 -0
- package/dist/emit/types.d.ts +9 -0
- package/dist/emit/types.d.ts.map +1 -0
- package/dist/emit/types.js +7 -0
- package/dist/emit/types.js.map +1 -0
- package/dist/events/http-waiter.d.ts +19 -0
- package/dist/events/http-waiter.d.ts.map +1 -0
- package/dist/events/http-waiter.js +20 -0
- package/dist/events/http-waiter.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/lambda/handler.d.ts +38 -0
- package/dist/lambda/handler.d.ts.map +1 -0
- package/dist/lambda/handler.js +26 -0
- package/dist/lambda/handler.js.map +1 -0
- package/dist/model.d.ts +33 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +15 -0
- package/dist/model.js.map +1 -0
- package/dist/openapi/document.d.ts +87 -0
- package/dist/openapi/document.d.ts.map +1 -0
- package/dist/openapi/document.js +117 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/executor.d.ts +51 -0
- package/dist/openapi/executor.d.ts.map +1 -0
- package/dist/openapi/executor.js +140 -0
- package/dist/openapi/executor.js.map +1 -0
- package/dist/openapi/index.d.ts +14 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +9 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/loader.d.ts +81 -0
- package/dist/openapi/loader.d.ts.map +1 -0
- package/dist/openapi/loader.js +361 -0
- package/dist/openapi/loader.js.map +1 -0
- package/dist/openapi/x-agent.d.ts +34 -0
- package/dist/openapi/x-agent.d.ts.map +1 -0
- package/dist/openapi/x-agent.js +102 -0
- package/dist/openapi/x-agent.js.map +1 -0
- package/dist/orchestrator.d.ts +12 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +1019 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/prompt/builder.d.ts +29 -0
- package/dist/prompt/builder.d.ts.map +1 -0
- package/dist/prompt/builder.js +129 -0
- package/dist/prompt/builder.js.map +1 -0
- package/dist/prompt/index.d.ts +15 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +13 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/rules/base.d.ts +6 -0
- package/dist/prompt/rules/base.d.ts.map +1 -0
- package/dist/prompt/rules/base.js +38 -0
- package/dist/prompt/rules/base.js.map +1 -0
- package/dist/prompt/rules/communication.d.ts +7 -0
- package/dist/prompt/rules/communication.d.ts.map +1 -0
- package/dist/prompt/rules/communication.js +53 -0
- package/dist/prompt/rules/communication.js.map +1 -0
- package/dist/prompt/rules/tool-strategy.d.ts +6 -0
- package/dist/prompt/rules/tool-strategy.d.ts.map +1 -0
- package/dist/prompt/rules/tool-strategy.js +42 -0
- package/dist/prompt/rules/tool-strategy.js.map +1 -0
- package/dist/prompt/rules/ui-control.d.ts +10 -0
- package/dist/prompt/rules/ui-control.d.ts.map +1 -0
- package/dist/prompt/rules/ui-control.js +44 -0
- package/dist/prompt/rules/ui-control.js.map +1 -0
- package/dist/prompt/types.d.ts +85 -0
- package/dist/prompt/types.d.ts.map +1 -0
- package/dist/prompt/types.js +10 -0
- package/dist/prompt/types.js.map +1 -0
- package/dist/realtime/long-poll.d.ts +21 -0
- package/dist/realtime/long-poll.d.ts.map +1 -0
- package/dist/realtime/long-poll.js +36 -0
- package/dist/realtime/long-poll.js.map +1 -0
- package/dist/runtime/config.d.ts +4 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +29 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/turn-runner.d.ts +32 -0
- package/dist/runtime/turn-runner.d.ts.map +1 -0
- package/dist/runtime/turn-runner.js +216 -0
- package/dist/runtime/turn-runner.js.map +1 -0
- package/dist/runtime/types.d.ts +244 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/testing/desk-events.d.ts +12 -0
- package/dist/testing/desk-events.d.ts.map +1 -0
- package/dist/testing/desk-events.js +62 -0
- package/dist/testing/desk-events.js.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +7 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/openapi-fixture.d.ts +47 -0
- package/dist/testing/openapi-fixture.d.ts.map +1 -0
- package/dist/testing/openapi-fixture.js +370 -0
- package/dist/testing/openapi-fixture.js.map +1 -0
- package/dist/tools/async-binding.d.ts +71 -0
- package/dist/tools/async-binding.d.ts.map +1 -0
- package/dist/tools/async-binding.js +104 -0
- package/dist/tools/async-binding.js.map +1 -0
- package/dist/tools/builtin-tools.d.ts +20 -0
- package/dist/tools/builtin-tools.d.ts.map +1 -0
- package/dist/tools/builtin-tools.js +108 -0
- package/dist/tools/builtin-tools.js.map +1 -0
- package/dist/tools/entity-tools.d.ts +6 -0
- package/dist/tools/entity-tools.d.ts.map +1 -0
- package/dist/tools/entity-tools.js +227 -0
- package/dist/tools/entity-tools.js.map +1 -0
- package/dist/tools/input-validation.d.ts +16 -0
- package/dist/tools/input-validation.d.ts.map +1 -0
- package/dist/tools/input-validation.js +75 -0
- package/dist/tools/input-validation.js.map +1 -0
- package/dist/tools/load-all-tools.d.ts +12 -0
- package/dist/tools/load-all-tools.d.ts.map +1 -0
- package/dist/tools/load-all-tools.js +42 -0
- package/dist/tools/load-all-tools.js.map +1 -0
- package/dist/tools/schema-loader.d.ts +24 -0
- package/dist/tools/schema-loader.d.ts.map +1 -0
- package/dist/tools/schema-loader.js +267 -0
- package/dist/tools/schema-loader.js.map +1 -0
- package/dist/tools/types.d.ts +85 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +22 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/turn-policy.d.ts +68 -0
- package/dist/turn-policy.d.ts.map +1 -0
- package/dist/turn-policy.js +21 -0
- package/dist/turn-policy.js.map +1 -0
- package/dist/types.d.ts +151 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/channel.d.ts +64 -0
- package/dist/ui/channel.d.ts.map +1 -0
- package/dist/ui/channel.js +81 -0
- package/dist/ui/channel.js.map +1 -0
- package/dist/ui/knowledge.d.ts +30 -0
- package/dist/ui/knowledge.d.ts.map +1 -0
- package/dist/ui/knowledge.js +66 -0
- package/dist/ui/knowledge.js.map +1 -0
- package/dist/ui/observations.d.ts +41 -0
- package/dist/ui/observations.d.ts.map +1 -0
- package/dist/ui/observations.js +236 -0
- package/dist/ui/observations.js.map +1 -0
- package/dist/ui/snapshot.d.ts +33 -0
- package/dist/ui/snapshot.d.ts.map +1 -0
- package/dist/ui/snapshot.js +75 -0
- package/dist/ui/snapshot.js.map +1 -0
- package/dist/ui/ui-sequence.d.ts +75 -0
- package/dist/ui/ui-sequence.d.ts.map +1 -0
- package/dist/ui/ui-sequence.js +73 -0
- package/dist/ui/ui-sequence.js.map +1 -0
- package/dist/ui/ui-tools.d.ts +59 -0
- package/dist/ui/ui-tools.d.ts.map +1 -0
- package/dist/ui/ui-tools.js +244 -0
- package/dist/ui/ui-tools.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The container host adapter: a long-running HTTP server that takes turns.
|
|
3
|
+
*
|
|
4
|
+
* The host's API POSTs a turn to `/turns` with the worker's key; the worker
|
|
5
|
+
* answers `202` once the turn is accepted and runs it, streaming to the
|
|
6
|
+
* realtime server as the Lambda adapter does. The same runtime core runs it
|
|
7
|
+
* (runtime/turn-runner.ts), so a turn behaves the same on either host.
|
|
8
|
+
*
|
|
9
|
+
* POST /turns AgentTurnPayload → 202 { turnId }
|
|
10
|
+
* 400 not a turn · 401 wrong key · 409 turn already running
|
|
11
|
+
* 503 at capacity or shutting down (retry later)
|
|
12
|
+
* GET /health 200 { status, running, capacity, model }
|
|
13
|
+
*/
|
|
14
|
+
import http from 'node:http';
|
|
15
|
+
import crypto from 'node:crypto';
|
|
16
|
+
import { createAgentTurnRunner, payloadRefusal } from '../runtime/turn-runner.js';
|
|
17
|
+
export async function startContainerAgentWorker(config) {
|
|
18
|
+
const missing = [
|
|
19
|
+
!(Number.isInteger(config?.port) && config.port >= 0) && 'port (the port to listen on, 0 for any free port)',
|
|
20
|
+
!(typeof config?.workerApiKey === 'string' && config.workerApiKey.length > 0) && 'workerApiKey (the key the host sends as x-api-key)',
|
|
21
|
+
].filter(Boolean);
|
|
22
|
+
if (missing.length > 0)
|
|
23
|
+
throw new Error(`[agent-sdk] Missing required configuration: ${missing.join('; ')}`);
|
|
24
|
+
const runner = createAgentTurnRunner(config);
|
|
25
|
+
const capacity = config.maxConcurrentTurns ?? 8;
|
|
26
|
+
const maxBodyBytes = config.maxBodyBytes ?? 1024 * 1024;
|
|
27
|
+
const expectedKey = crypto.createHash('sha256').update(config.workerApiKey).digest();
|
|
28
|
+
const isKey = (presented) => typeof presented === 'string' &&
|
|
29
|
+
presented.length > 0 &&
|
|
30
|
+
crypto.timingSafeEqual(crypto.createHash('sha256').update(presented).digest(), expectedKey);
|
|
31
|
+
const inFlight = new Map();
|
|
32
|
+
let closing = false;
|
|
33
|
+
const send = (res, status, body) => {
|
|
34
|
+
res.writeHead(status, { 'content-type': 'application/json' });
|
|
35
|
+
res.end(body === undefined ? undefined : JSON.stringify(body));
|
|
36
|
+
};
|
|
37
|
+
const server = http.createServer((req, res) => {
|
|
38
|
+
if (req.method === 'GET' && req.url === '/health') {
|
|
39
|
+
send(res, closing ? 503 : 200, { status: closing ? 'closing' : 'ok', running: inFlight.size, capacity, model: runner.model });
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (req.method !== 'POST' || req.url !== '/turns') {
|
|
43
|
+
send(res, 404, { error: 'not found' });
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
if (!isKey(req.headers['x-api-key'])) {
|
|
47
|
+
send(res, 401, { error: 'Invalid or missing API key' });
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
let size = 0;
|
|
51
|
+
const chunks = [];
|
|
52
|
+
req.on('data', (chunk) => {
|
|
53
|
+
size += chunk.length;
|
|
54
|
+
if (size > maxBodyBytes) {
|
|
55
|
+
send(res, 413, { error: `body larger than ${maxBodyBytes} bytes` });
|
|
56
|
+
req.destroy();
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
chunks.push(chunk);
|
|
60
|
+
});
|
|
61
|
+
req.on('end', () => {
|
|
62
|
+
if (res.writableEnded)
|
|
63
|
+
return;
|
|
64
|
+
let payload;
|
|
65
|
+
try {
|
|
66
|
+
payload = JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
send(res, 400, { error: 'body is not JSON' });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const refusal = payloadRefusal(payload);
|
|
73
|
+
if (refusal) {
|
|
74
|
+
send(res, 400, { error: refusal });
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (inFlight.has(payload.turnId)) {
|
|
78
|
+
send(res, 409, { error: `turn ${payload.turnId} is already running` });
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (closing || inFlight.size >= capacity) {
|
|
82
|
+
send(res, 503, { error: closing ? 'shutting down' : 'at capacity' });
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const run = runner
|
|
86
|
+
.run(payload)
|
|
87
|
+
.then((outcome) => config.onTurnEnd?.(outcome))
|
|
88
|
+
.catch((err) => {
|
|
89
|
+
// A turn's own failure is an outcome, not a throw; this is the
|
|
90
|
+
// runtime failing around it (getDb, say). Nothing retries a
|
|
91
|
+
// container turn, so it is logged where the host will see it.
|
|
92
|
+
runner.logger.error('[agent-sdk] Turn could not run', {
|
|
93
|
+
turnId: payload.turnId,
|
|
94
|
+
error: err instanceof Error ? err.message : String(err),
|
|
95
|
+
});
|
|
96
|
+
})
|
|
97
|
+
.finally(() => inFlight.delete(payload.turnId));
|
|
98
|
+
inFlight.set(payload.turnId, run);
|
|
99
|
+
send(res, 202, { turnId: payload.turnId });
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
await new Promise((resolve, reject) => {
|
|
103
|
+
server.once('error', reject);
|
|
104
|
+
server.listen(config.port, () => {
|
|
105
|
+
server.off('error', reject);
|
|
106
|
+
resolve();
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
return {
|
|
110
|
+
port: server.address().port,
|
|
111
|
+
running: () => inFlight.size,
|
|
112
|
+
async close() {
|
|
113
|
+
closing = true;
|
|
114
|
+
await Promise.allSettled([...inFlight.values()]);
|
|
115
|
+
await new Promise((resolve) => server.close(() => resolve()));
|
|
116
|
+
},
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/container/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HTTP emit adapter — sends events to a realtime server via HTTP POST /api/emit.
|
|
3
|
+
* This is the default adapter used when the worker runs as a Lambda/container
|
|
4
|
+
* and the realtime server is a separate process.
|
|
5
|
+
*/
|
|
6
|
+
import type { RealtimeEmitAdapter } from './types.js';
|
|
7
|
+
export interface HttpEmitAdapterConfig {
|
|
8
|
+
url: string;
|
|
9
|
+
apiKey: string;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function createHttpEmitAdapter(config: HttpEmitAdapterConfig): RealtimeEmitAdapter;
|
|
13
|
+
/** Throws, naming the value, unless the realtime server's URL and key are both given. */
|
|
14
|
+
export declare function requireRealtime(url: string | undefined, apiKey: string | undefined): void;
|
|
15
|
+
//# sourceMappingURL=http-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-adapter.d.ts","sourceRoot":"","sources":["../../src/emit/http-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,mBAAmB,CA2BxF;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAKzF"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export function createHttpEmitAdapter(config) {
|
|
2
|
+
const { url, apiKey, timeoutMs = 5000 } = config;
|
|
3
|
+
// No silent no-op: an adapter without a URL used to drop every event, so a
|
|
4
|
+
// misconfigured worker streamed its turns to nobody.
|
|
5
|
+
requireRealtime(url, apiKey);
|
|
6
|
+
return {
|
|
7
|
+
async emit(room, event, data) {
|
|
8
|
+
try {
|
|
9
|
+
const res = await fetch(`${url}/api/emit`, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: {
|
|
12
|
+
'Content-Type': 'application/json',
|
|
13
|
+
'X-Api-Key': apiKey,
|
|
14
|
+
},
|
|
15
|
+
body: JSON.stringify({ event, data, rooms: [room] }),
|
|
16
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
17
|
+
});
|
|
18
|
+
if (!res.ok) {
|
|
19
|
+
console.warn(`[agent-worker] Emit failed: ${res.status} for event ${event}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.warn(`[agent-worker] Emit error for ${event}:`, error instanceof Error ? error.message : error);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** Throws, naming the value, unless the realtime server's URL and key are both given. */
|
|
29
|
+
export function requireRealtime(url, apiKey) {
|
|
30
|
+
const missing = [!url && 'realtime.url', !apiKey && 'realtime.apiKey'].filter(Boolean);
|
|
31
|
+
if (missing.length > 0) {
|
|
32
|
+
throw new Error(`[agent-sdk] Missing required configuration: ${missing.join(', ')} (the realtime server that carries turns and UI actions)`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=http-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-adapter.js","sourceRoot":"","sources":["../../src/emit/http-adapter.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,qBAAqB,CAAC,MAA6B;IACjE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IACjD,2EAA2E;IAC3E,qDAAqD;IACrD,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE7B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,KAAa,EAAE,IAAa;YACnD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,WAAW,EAAE;oBACzC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,WAAW,EAAE,MAAM;qBACpB;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;iBACvC,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;oBACZ,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,MAAM,cAAc,KAAK,EAAE,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,KAAK,GAAG,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,eAAe,CAAC,GAAuB,EAAE,MAA0B;IACjF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,cAAc,EAAE,CAAC,MAAM,IAAI,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+CAA+C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC/I,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realtime emit adapter — how the worker sends events to connected clients.
|
|
3
|
+
* Default implementation: HTTP POST to a Socket.IO server's /api/emit endpoint.
|
|
4
|
+
* Platforms can provide custom adapters (direct Socket.IO, Redis pub/sub, etc.).
|
|
5
|
+
*/
|
|
6
|
+
export interface RealtimeEmitAdapter {
|
|
7
|
+
emit(room: string, event: string, data: unknown): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/emit/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Realtime emit adapter — how the worker sends events to connected clients.
|
|
3
|
+
* Default implementation: HTTP POST to a Socket.IO server's /api/emit endpoint.
|
|
4
|
+
* Platforms can provide custom adapters (direct Socket.IO, Redis pub/sub, etc.).
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/emit/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The worker's wait for a job to settle, through the SDK realtime server.
|
|
3
|
+
*
|
|
4
|
+
* The server keeps every declared completion or failure it emits as its job's
|
|
5
|
+
* settlement (`GET /internal/events/settlements/:kind/:id`), so the worker
|
|
6
|
+
* never joins a socket room: it asks, with the internal key, until the job
|
|
7
|
+
* settles or its deadline passes.
|
|
8
|
+
*/
|
|
9
|
+
import type { EventWaiter } from '@ouispec/agent-events';
|
|
10
|
+
export interface HttpEventWaiterConfig {
|
|
11
|
+
/** The realtime server's base URL. */
|
|
12
|
+
url: string;
|
|
13
|
+
/** Its internal API key (the same key the emit adapter uses). */
|
|
14
|
+
apiKey: string;
|
|
15
|
+
/** Longest single wait the server is asked to hold open. Default 20 s. */
|
|
16
|
+
maxPollMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare function createHttpEventWaiter(config: HttpEventWaiterConfig): EventWaiter;
|
|
19
|
+
//# sourceMappingURL=http-waiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-waiter.d.ts","sourceRoot":"","sources":["../../src/events/http-waiter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,uBAAuB,CAAC;AAIrE,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,WAAW,CAkBhF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { requireRealtime } from '../emit/http-adapter.js';
|
|
2
|
+
import { longPoll } from '../realtime/long-poll.js';
|
|
3
|
+
export function createHttpEventWaiter(config) {
|
|
4
|
+
const { url, apiKey } = config;
|
|
5
|
+
requireRealtime(url, apiKey);
|
|
6
|
+
const maxPollMs = config.maxPollMs ?? 20_000;
|
|
7
|
+
return {
|
|
8
|
+
waitForSettlement({ binding, id, timeoutMs, signal }) {
|
|
9
|
+
return longPoll({
|
|
10
|
+
url: (waitMs) => `${url}/internal/events/settlements/${encodeURIComponent(binding.kind)}/${encodeURIComponent(id)}?waitMs=${waitMs}`,
|
|
11
|
+
apiKey,
|
|
12
|
+
timeoutMs,
|
|
13
|
+
maxPollMs,
|
|
14
|
+
...(signal ? { signal } : {}),
|
|
15
|
+
describe: `the settlement of ${binding.kind} ${id} (${binding.usedBy})`,
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=http-waiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-waiter.js","sourceRoot":"","sources":["../../src/events/http-waiter.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAWpD,MAAM,UAAU,qBAAqB,CAAC,MAA6B;IACjE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC/B,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAE7C,OAAO;QACL,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAClD,OAAO,QAAQ,CAAa;gBAC1B,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CACd,GAAG,GAAG,gCAAgC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,WAAW,MAAM,EAAE;gBACrH,MAAM;gBACN,SAAS;gBACT,SAAS;gBACT,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7B,QAAQ,EAAE,qBAAqB,OAAO,CAAC,IAAI,IAAI,EAAE,KAAK,OAAO,CAAC,MAAM,GAAG;aACxE,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ouispec/agent-worker — the agent runtime.
|
|
3
|
+
*
|
|
4
|
+
* Hosts provide: the model (any `ai` provider), the realtime server, the
|
|
5
|
+
* persona, tools and persistence callbacks (ADR-0227 §2.2).
|
|
6
|
+
* The worker handles: the multi-round tool loop, UI actions, streaming,
|
|
7
|
+
* retries and timeouts, on Lambda + SQS or in a container.
|
|
8
|
+
*/
|
|
9
|
+
export type { AgentWorkerConfig, AgentTurnInput, AgentTurnResult, TurnMessage, TurnHistoryMessage, ToolCallRef, SystemPromptContext } from './types.js';
|
|
10
|
+
export type { RealtimeEmitAdapter } from './emit/types.js';
|
|
11
|
+
export type { ToolRegistry, RegisteredTool, ToolExecutionResult, ToolExecutionContext } from './tools/types.js';
|
|
12
|
+
export { createToolRegistry } from './tools/types.js';
|
|
13
|
+
export { loadToolsFromSchema } from './tools/schema-loader.js';
|
|
14
|
+
export type { LoadToolsOptions } from './tools/schema-loader.js';
|
|
15
|
+
export { bindAsyncTool, awaitAsyncTool } from './tools/async-binding.js';
|
|
16
|
+
export type { AsyncToolSpec, BoundAsyncTool, AsyncToolSettlement } from './tools/async-binding.js';
|
|
17
|
+
export { createHttpEventWaiter } from './events/http-waiter.js';
|
|
18
|
+
export type { HttpEventWaiterConfig } from './events/http-waiter.js';
|
|
19
|
+
export { loadEntityToolsFromSchema } from './tools/entity-tools.js';
|
|
20
|
+
export { loadBuiltinTools } from './tools/builtin-tools.js';
|
|
21
|
+
export { loadAllTools } from './tools/load-all-tools.js';
|
|
22
|
+
export type { LoadAllToolsOptions } from './tools/load-all-tools.js';
|
|
23
|
+
export { createToolInputValidator } from './tools/input-validation.js';
|
|
24
|
+
export type { ToolInputValidation, ToolInputValidator } from './tools/input-validation.js';
|
|
25
|
+
export { loadOpenApiTools, OpenApiToolError, API_OPERATION_EFFECTS } from './openapi/index.js';
|
|
26
|
+
export type { OpenApiTool, OpenApiToolsOptions, OpenApiToolAudience, ActAs, OperationRef, OpenApiDocument, OpenApiOperation, OpenApiParameter, OpenApiPathItem, OpenApiRequestBody, SecurityRequirement, HttpMethod, } from './openapi/index.js';
|
|
27
|
+
export type { ToolPolicy, ToolPolicyContext, ToolPolicyDecision } from './authz/tool-policy.js';
|
|
28
|
+
export { defaultToolPolicy, evaluateToolPolicySafe } from './authz/tool-policy.js';
|
|
29
|
+
export { createHttpApprovalStoreClient } from './approvals/client.js';
|
|
30
|
+
export type { ApprovalStoreClient, HttpApprovalStoreClientConfig } from './approvals/client.js';
|
|
31
|
+
export { approvalRequirement, APPROVAL_TOOL_NOTE } from './approvals/requirement.js';
|
|
32
|
+
export type { ApprovalRequirement } from './approvals/requirement.js';
|
|
33
|
+
export { buildApprovalPreview } from './approvals/preview.js';
|
|
34
|
+
export type { UIActionChannel, HttpUIActionChannelConfig } from './ui/channel.js';
|
|
35
|
+
export { createHttpUIActionChannel } from './ui/channel.js';
|
|
36
|
+
export { readClientSnapshot, withoutClientSnapshot, withoutClientUI, capabilityFingerprint, CLIENT_SNAPSHOT_KEY } from './ui/snapshot.js';
|
|
37
|
+
export { readClientKnowledge, renderClientKnowledge, withClientKnowledge, CLIENT_KNOWLEDGE_KEY, type ClientKnowledge } from './ui/knowledge.js';
|
|
38
|
+
export { buildUITools } from './ui/ui-tools.js';
|
|
39
|
+
export type { UIToolDependencies, UIToolCollision } from './ui/ui-tools.js';
|
|
40
|
+
export { createUISequence } from './ui/ui-sequence.js';
|
|
41
|
+
export type { UISequence } from './ui/ui-sequence.js';
|
|
42
|
+
export type { AgentApiSurface, EntityInstance, EntityFilter, EntityMutation, IntentResult, ViewAnnotationState, NavigationState, SessionApiSurface, LearningApiSurface, } from '@ouispec/agent-core';
|
|
43
|
+
export { runAgentTurn } from './orchestrator.js';
|
|
44
|
+
export { PROMPT_CACHE_BREAKPOINTS, describeModel } from './model.js';
|
|
45
|
+
export type { LanguageModel, ProviderOptions } from './model.js';
|
|
46
|
+
export type { TurnPolicy } from './turn-policy.js';
|
|
47
|
+
export { defaultTurnPolicy } from './turn-policy.js';
|
|
48
|
+
export { createHttpEmitAdapter } from './emit/http-adapter.js';
|
|
49
|
+
export type { HttpEmitAdapterConfig } from './emit/http-adapter.js';
|
|
50
|
+
export { createAgentTurnRunner, categorizeError, payloadRefusal } from './runtime/turn-runner.js';
|
|
51
|
+
export type { AgentTurnRunner, TurnOutcome, CategorizedError } from './runtime/turn-runner.js';
|
|
52
|
+
export { assertAgentRuntimeConfig } from './runtime/config.js';
|
|
53
|
+
export type { AgentRuntimeConfig, LambdaAgentConfig, AgentTurnPayload } from './runtime/types.js';
|
|
54
|
+
export { createLambdaAgentHandler } from './lambda/handler.js';
|
|
55
|
+
export { startContainerAgentWorker } from './container/server.js';
|
|
56
|
+
export type { ContainerAgentConfig, ContainerAgentWorker } from './container/server.js';
|
|
57
|
+
export { buildAgentSystemPrompt } from './prompt/index.js';
|
|
58
|
+
export type { AgentPersonaConfig, AgentKnowledgeEntry, AgentWorkflow, AgentFewShotExample, AgentPersonaOverrides, PromptBuildContext, CommunicationStyle, } from './prompt/index.js';
|
|
59
|
+
export { getBaseRules, getCommunicationRules, getToolStrategyRules, getUIControlRules } from './prompt/index.js';
|
|
60
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ouispec/agent-worker — the agent runtime.
|
|
3
|
+
*
|
|
4
|
+
* Hosts provide: the model (any `ai` provider), the realtime server, the
|
|
5
|
+
* persona, tools and persistence callbacks (ADR-0227 §2.2).
|
|
6
|
+
* The worker handles: the multi-round tool loop, UI actions, streaming,
|
|
7
|
+
* retries and timeouts, on Lambda + SQS or in a container.
|
|
8
|
+
*/
|
|
9
|
+
export { createToolRegistry } from './tools/types.js';
|
|
10
|
+
export { loadToolsFromSchema } from './tools/schema-loader.js';
|
|
11
|
+
// Async tools wait on the product's declared events (W9)
|
|
12
|
+
export { bindAsyncTool, awaitAsyncTool } from './tools/async-binding.js';
|
|
13
|
+
export { createHttpEventWaiter } from './events/http-waiter.js';
|
|
14
|
+
export { loadEntityToolsFromSchema } from './tools/entity-tools.js';
|
|
15
|
+
export { loadBuiltinTools } from './tools/builtin-tools.js';
|
|
16
|
+
export { loadAllTools } from './tools/load-all-tools.js';
|
|
17
|
+
export { createToolInputValidator } from './tools/input-validation.js';
|
|
18
|
+
// API tools generated from any OpenAPI 3 document (ADR-0181 §2), each call acting
|
|
19
|
+
// as the caller the host's actAs seam names. Also at `/openapi`.
|
|
20
|
+
export { loadOpenApiTools, OpenApiToolError, API_OPERATION_EFFECTS } from './openapi/index.js';
|
|
21
|
+
export { defaultToolPolicy, evaluateToolPolicySafe } from './authz/tool-policy.js';
|
|
22
|
+
// Approvals (ADR-0228): an irreversible action runs only on an approval the
|
|
23
|
+
// user gave, bound to the call, kept by the realtime server's approval store.
|
|
24
|
+
export { createHttpApprovalStoreClient } from './approvals/client.js';
|
|
25
|
+
export { approvalRequirement, APPROVAL_TOOL_NOTE } from './approvals/requirement.js';
|
|
26
|
+
export { buildApprovalPreview } from './approvals/preview.js';
|
|
27
|
+
export { createHttpUIActionChannel } from './ui/channel.js';
|
|
28
|
+
export { readClientSnapshot, withoutClientSnapshot, withoutClientUI, capabilityFingerprint, CLIENT_SNAPSHOT_KEY } from './ui/snapshot.js';
|
|
29
|
+
export { readClientKnowledge, renderClientKnowledge, withClientKnowledge, CLIENT_KNOWLEDGE_KEY } from './ui/knowledge.js';
|
|
30
|
+
export { buildUITools } from './ui/ui-tools.js';
|
|
31
|
+
export { createUISequence } from './ui/ui-sequence.js';
|
|
32
|
+
export { runAgentTurn } from './orchestrator.js';
|
|
33
|
+
// The model seam: any `ai` library model; the worker imports no provider.
|
|
34
|
+
export { PROMPT_CACHE_BREAKPOINTS, describeModel } from './model.js';
|
|
35
|
+
export { defaultTurnPolicy } from './turn-policy.js';
|
|
36
|
+
export { createHttpEmitAdapter } from './emit/http-adapter.js';
|
|
37
|
+
// The runtime: one core, two host adapters (Lambda + SQS, container)
|
|
38
|
+
export { createAgentTurnRunner, categorizeError, payloadRefusal } from './runtime/turn-runner.js';
|
|
39
|
+
export { assertAgentRuntimeConfig } from './runtime/config.js';
|
|
40
|
+
export { createLambdaAgentHandler } from './lambda/handler.js';
|
|
41
|
+
export { startContainerAgentWorker } from './container/server.js';
|
|
42
|
+
// Prompt Framework
|
|
43
|
+
export { buildAgentSystemPrompt } from './prompt/index.js';
|
|
44
|
+
export { getBaseRules, getCommunicationRules, getToolStrategyRules, getUIControlRules } from './prompt/index.js';
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAGvE,kFAAkF;AAClF,iEAAiE;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAkB/F,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEnF,4EAA4E;AAC5E,8EAA8E;AAC9E,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAK9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1I,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAwB,MAAM,mBAAmB,CAAC;AAChJ,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAevD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,0EAA0E;AAC1E,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,qEAAqE;AACrE,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAElG,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,mBAAmB;AACnB,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAU3D,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createLambdaAgentHandler — the Lambda + SQS host adapter.
|
|
3
|
+
*
|
|
4
|
+
* The runtime core (runtime/turn-runner.ts) runs the turn; this adapter reads
|
|
5
|
+
* it from the SQS record and tells SQS what a failure means. The host passes
|
|
6
|
+
* every seam explicitly, and a missing one fails when the handler is created
|
|
7
|
+
* — at cold start — naming it.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { createLambdaAgentHandler, PROMPT_CACHE_BREAKPOINTS } from '@ouispec/agent-worker';
|
|
12
|
+
* import { bedrock } from '@ai-sdk/amazon-bedrock';
|
|
13
|
+
*
|
|
14
|
+
* export const handler = createLambdaAgentHandler({
|
|
15
|
+
* model: bedrock('us.anthropic.claude-sonnet-4-6'),
|
|
16
|
+
* promptCacheBreakpoint: PROMPT_CACHE_BREAKPOINTS.bedrock,
|
|
17
|
+
* realtime: { url: env.REALTIME_URL, apiKey: env.REALTIME_INTERNAL_KEY },
|
|
18
|
+
* persona,
|
|
19
|
+
* tools: [],
|
|
20
|
+
* getDb,
|
|
21
|
+
* getHistory: (conversationId, db) => db.message.findMany({ where: { conversationId }, orderBy: { createdAt: 'asc' } }),
|
|
22
|
+
* persistMessages: ({ turnId, conversationId, messages, db }) => db.message.createMany({ data: toRows(turnId, conversationId, messages) }),
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
import type { SQSEvent } from 'aws-lambda';
|
|
27
|
+
import type { LambdaAgentConfig } from '../runtime/types.js';
|
|
28
|
+
/**
|
|
29
|
+
* Creates a Lambda handler for SQS: one record per invocation, its body an
|
|
30
|
+
* `AgentTurnPayload`.
|
|
31
|
+
*
|
|
32
|
+
* A failure the runtime marks unrecoverable is rethrown, so SQS's redrive
|
|
33
|
+
* policy sees it; a recoverable one (the provider rate-limiting or
|
|
34
|
+
* unavailable) has already been reported to the client and is not retried.
|
|
35
|
+
*/
|
|
36
|
+
export declare function createLambdaAgentHandler<TDb>(config: LambdaAgentConfig<TDb>): (event: SQSEvent) => Promise<void>;
|
|
37
|
+
export type { LambdaAgentConfig, AgentTurnPayload } from '../runtime/types.js';
|
|
38
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/lambda/handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,iBAAiB,CAAC,GAAG,CAAC,IAG5D,OAAO,QAAQ,KAAG,OAAO,CAAC,IAAI,CAAC,CAY9C;AAED,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { createAgentTurnRunner, payloadRefusal } from '../runtime/turn-runner.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a Lambda handler for SQS: one record per invocation, its body an
|
|
4
|
+
* `AgentTurnPayload`.
|
|
5
|
+
*
|
|
6
|
+
* A failure the runtime marks unrecoverable is rethrown, so SQS's redrive
|
|
7
|
+
* policy sees it; a recoverable one (the provider rate-limiting or
|
|
8
|
+
* unavailable) has already been reported to the client and is not retried.
|
|
9
|
+
*/
|
|
10
|
+
export function createLambdaAgentHandler(config) {
|
|
11
|
+
const runner = createAgentTurnRunner(config);
|
|
12
|
+
return async (event) => {
|
|
13
|
+
if (!event.Records?.length) {
|
|
14
|
+
runner.logger.warn('[agent-sdk] Empty SQS event');
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const payload = JSON.parse(event.Records[0].body);
|
|
18
|
+
const refusal = payloadRefusal(payload);
|
|
19
|
+
if (refusal)
|
|
20
|
+
throw new Error(`[agent-sdk] ${refusal}`);
|
|
21
|
+
const outcome = await runner.run(payload);
|
|
22
|
+
if (outcome.status === 'failed' && !outcome.error.recoverable)
|
|
23
|
+
throw outcome.cause;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/lambda/handler.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGlF;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAM,MAA8B;IAC1E,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAE7C,OAAO,KAAK,EAAE,KAAe,EAAiB,EAAE;QAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAqB,CAAC;QACtE,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;QAEvD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC;IACrF,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/model.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The model seam (ADR-0227 §2.2, D5): the host passes any `ai` library model.
|
|
3
|
+
* The worker names no provider and imports none.
|
|
4
|
+
*/
|
|
5
|
+
import type { LanguageModel, SystemModelMessage } from 'ai';
|
|
6
|
+
export type { LanguageModel };
|
|
7
|
+
/** Provider options on a message, keyed by provider. */
|
|
8
|
+
export type ProviderOptions = NonNullable<SystemModelMessage['providerOptions']>;
|
|
9
|
+
/**
|
|
10
|
+
* The provider options that mark a prompt-cache breakpoint, for providers that
|
|
11
|
+
* cache by breakpoint. Pass one as `promptCacheBreakpoint`; omit it for a
|
|
12
|
+
* provider that caches on its own or not at all. These are data, not
|
|
13
|
+
* dependencies: the worker imports no provider.
|
|
14
|
+
*/
|
|
15
|
+
export declare const PROMPT_CACHE_BREAKPOINTS: {
|
|
16
|
+
readonly bedrock: {
|
|
17
|
+
readonly amazonBedrock: {
|
|
18
|
+
readonly cachePoint: {
|
|
19
|
+
readonly type: "default";
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
readonly anthropic: {
|
|
24
|
+
readonly anthropic: {
|
|
25
|
+
readonly cacheControl: {
|
|
26
|
+
readonly type: "ephemeral";
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/** How a model is named in logs and in `recordTurnStart`. */
|
|
32
|
+
export declare function describeModel(model: LanguageModel): string;
|
|
33
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,IAAI,CAAC;AAE5D,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,wDAAwD;AACxD,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAEjF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;CAGe,CAAC;AAErD,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAE1D"}
|
package/dist/model.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The provider options that mark a prompt-cache breakpoint, for providers that
|
|
3
|
+
* cache by breakpoint. Pass one as `promptCacheBreakpoint`; omit it for a
|
|
4
|
+
* provider that caches on its own or not at all. These are data, not
|
|
5
|
+
* dependencies: the worker imports no provider.
|
|
6
|
+
*/
|
|
7
|
+
export const PROMPT_CACHE_BREAKPOINTS = {
|
|
8
|
+
bedrock: { amazonBedrock: { cachePoint: { type: 'default' } } },
|
|
9
|
+
anthropic: { anthropic: { cacheControl: { type: 'ephemeral' } } },
|
|
10
|
+
};
|
|
11
|
+
/** How a model is named in logs and in `recordTurnStart`. */
|
|
12
|
+
export function describeModel(model) {
|
|
13
|
+
return typeof model === 'string' ? model : `${model.provider}:${model.modelId}`;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,OAAO,EAAE,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;IAC/D,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;CACf,CAAC;AAErD,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,KAAoB;IAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The parts of an OpenAPI 3.0 or 3.1 document the tool loader reads, and the
|
|
3
|
+
* conversion of its schemas into the JSON Schema a tool declares.
|
|
4
|
+
*/
|
|
5
|
+
export type HttpMethod = 'get' | 'put' | 'post' | 'delete' | 'options' | 'head' | 'patch' | 'trace';
|
|
6
|
+
export declare const HTTP_METHODS: readonly HttpMethod[];
|
|
7
|
+
export type JsonSchema = Record<string, unknown>;
|
|
8
|
+
export type Reference = {
|
|
9
|
+
$ref: string;
|
|
10
|
+
};
|
|
11
|
+
/** A security requirement object: scheme name → the scopes or roles it must carry. */
|
|
12
|
+
export type SecurityRequirement = Record<string, string[]>;
|
|
13
|
+
export interface OpenApiParameter {
|
|
14
|
+
name: string;
|
|
15
|
+
in: 'path' | 'query' | 'header' | 'cookie';
|
|
16
|
+
description?: string;
|
|
17
|
+
required?: boolean;
|
|
18
|
+
deprecated?: boolean;
|
|
19
|
+
style?: string;
|
|
20
|
+
explode?: boolean;
|
|
21
|
+
schema?: JsonSchema;
|
|
22
|
+
content?: Record<string, {
|
|
23
|
+
schema?: JsonSchema;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
export interface OpenApiRequestBody {
|
|
27
|
+
description?: string;
|
|
28
|
+
required?: boolean;
|
|
29
|
+
content?: Record<string, {
|
|
30
|
+
schema?: JsonSchema;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
export interface OpenApiOperation {
|
|
34
|
+
operationId?: string;
|
|
35
|
+
summary?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
parameters?: Array<OpenApiParameter | Reference>;
|
|
38
|
+
requestBody?: OpenApiRequestBody | Reference;
|
|
39
|
+
responses?: Record<string, unknown>;
|
|
40
|
+
security?: SecurityRequirement[];
|
|
41
|
+
[extension: `x-${string}`]: unknown;
|
|
42
|
+
}
|
|
43
|
+
export type OpenApiPathItem = {
|
|
44
|
+
summary?: string;
|
|
45
|
+
description?: string;
|
|
46
|
+
parameters?: Array<OpenApiParameter | Reference>;
|
|
47
|
+
} & Partial<Record<HttpMethod, OpenApiOperation>>;
|
|
48
|
+
export interface OpenApiDocument {
|
|
49
|
+
openapi: string;
|
|
50
|
+
info?: {
|
|
51
|
+
title?: string;
|
|
52
|
+
version?: string;
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
};
|
|
55
|
+
paths: Record<string, OpenApiPathItem>;
|
|
56
|
+
components?: {
|
|
57
|
+
schemas?: Record<string, JsonSchema>;
|
|
58
|
+
parameters?: Record<string, OpenApiParameter | Reference>;
|
|
59
|
+
requestBodies?: Record<string, OpenApiRequestBody | Reference>;
|
|
60
|
+
securitySchemes?: Record<string, unknown>;
|
|
61
|
+
[key: string]: unknown;
|
|
62
|
+
};
|
|
63
|
+
security?: SecurityRequirement[];
|
|
64
|
+
[key: string]: unknown;
|
|
65
|
+
}
|
|
66
|
+
/** Thrown for anything the loader refuses; the message names the operation. */
|
|
67
|
+
export declare class OpenApiToolError extends Error {
|
|
68
|
+
constructor(message: string);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Resolves `#/...` references in one document. `where` names the operation in
|
|
72
|
+
* errors. A reference outside the document, or one that does not resolve, is refused.
|
|
73
|
+
*/
|
|
74
|
+
export declare function createResolver(doc: OpenApiDocument): {
|
|
75
|
+
deref: <T>(value: T | Reference, where: string) => T;
|
|
76
|
+
lookup: (ref: string, where: string) => unknown;
|
|
77
|
+
};
|
|
78
|
+
export type Resolver = ReturnType<typeof createResolver>;
|
|
79
|
+
/**
|
|
80
|
+
* An OpenAPI schema as the JSON Schema of a tool's input: every reference inlined,
|
|
81
|
+
* 3.0's `nullable` as a `null` type, `example` as `examples`, and properties the
|
|
82
|
+
* server sets (`readOnly`) left out, since a caller never sends them.
|
|
83
|
+
*
|
|
84
|
+
* A schema that refers to itself cannot be inlined and is refused.
|
|
85
|
+
*/
|
|
86
|
+
export declare function toInputSchema(schema: unknown, resolver: Resolver, where: string, stack?: string[]): JsonSchema;
|
|
87
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/openapi/document.ts"],"names":[],"mappings":"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"}
|