theokit 0.67.0 → 0.69.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/README.md +21 -0
- package/dist/{actions-virtual-module-YIWQTI6Q.js → actions-virtual-module-DH3N34I6.js} +6 -6
- package/dist/{actions-virtual-module-WCHXKH6R.js → actions-virtual-module-OMIFGXK6.js} +4 -4
- package/dist/adapters/agent-mount.d.ts +190 -2
- package/dist/adapters/agent-mount.js +18 -3
- package/dist/adapters/security-headers.d.ts +17 -1
- package/dist/adapters/security-headers.js +7 -0
- package/dist/adapters/security-headers.js.map +1 -1
- package/dist/{agent-C7F5O5V4.js → agent-7RPGAKTY.js} +3 -3
- package/dist/{app-typed-client-2ZEGNFJP.js → app-typed-client-C4LRUSIS.js} +6 -6
- package/dist/{app-typed-client-CUM2GZ5Y.js → app-typed-client-R6OUJZEE.js} +4 -4
- package/dist/assets-map-BMQASQHW.js +70 -0
- package/dist/assets-map-BMQASQHW.js.map +1 -0
- package/dist/assets-map-CV2YZ3MY.js +69 -0
- package/dist/assets-map-CV2YZ3MY.js.map +1 -0
- package/dist/{aws-lambda-R76PWR27.js → aws-lambda-OCJM5YGB.js} +35 -23
- package/dist/aws-lambda-OCJM5YGB.js.map +1 -0
- package/dist/{build-UNBI6VKC.js → build-CGFKWZ73.js} +13 -8
- package/dist/build-CGFKWZ73.js.map +1 -0
- package/dist/{bun-NPBIAWSU.js → bun-KRUAWYRW.js} +51 -39
- package/dist/bun-KRUAWYRW.js.map +1 -0
- package/dist/{chunk-GQNBZDYK.js → chunk-2FHNJ7LI.js} +1 -1
- package/dist/{chunk-GQNBZDYK.js.map → chunk-2FHNJ7LI.js.map} +1 -1
- package/dist/chunk-3T5XLDOH.js +807 -0
- package/dist/chunk-3T5XLDOH.js.map +1 -0
- package/dist/{chunk-WAYUHS54.js → chunk-425FJKKO.js} +5 -3
- package/dist/chunk-425FJKKO.js.map +1 -0
- package/dist/chunk-46FM5AFZ.js +44 -0
- package/dist/chunk-46FM5AFZ.js.map +1 -0
- package/dist/{chunk-ASBXR57P.js → chunk-4WB62S22.js} +7 -4
- package/dist/{chunk-ASBXR57P.js.map → chunk-4WB62S22.js.map} +1 -1
- package/dist/chunk-BDPD5HEO.js +554 -0
- package/dist/chunk-BDPD5HEO.js.map +1 -0
- package/dist/{chunk-UETVDZBE.js → chunk-BINRCILF.js} +4 -1
- package/dist/{chunk-UETVDZBE.js.map → chunk-BINRCILF.js.map} +1 -1
- package/dist/{chunk-EQCSUC65.js → chunk-BTDTHXUI.js} +2 -2
- package/dist/chunk-FFGP2LGQ.js +465 -0
- package/dist/chunk-FFGP2LGQ.js.map +1 -0
- package/dist/{chunk-PRZCPSUE.js → chunk-I2H6KRCQ.js} +29 -14
- package/dist/chunk-I2H6KRCQ.js.map +1 -0
- package/dist/{chunk-ENRT6DAU.js → chunk-IDWN2OSG.js} +15 -2
- package/dist/chunk-IDWN2OSG.js.map +1 -0
- package/dist/{chunk-GAJOZJWD.js → chunk-MOGTMGGA.js} +5 -2
- package/dist/chunk-MOGTMGGA.js.map +1 -0
- package/dist/{chunk-5VLP3GQ2.js → chunk-MS4A7N77.js} +1 -1
- package/dist/chunk-MS4A7N77.js.map +1 -0
- package/dist/{chunk-YNK7DW5V.js → chunk-QVXMAHZC.js} +55 -551
- package/dist/chunk-QVXMAHZC.js.map +1 -0
- package/dist/{chunk-B4Z7KIIU.js → chunk-SJ4AW54X.js} +45 -4
- package/dist/chunk-SJ4AW54X.js.map +1 -0
- package/dist/{chunk-5AGNZXHJ.js → chunk-SRJBH5E5.js} +16 -679
- package/dist/chunk-SRJBH5E5.js.map +1 -0
- package/dist/{chunk-GQIATJEG.js → chunk-T2LDLVVV.js} +28 -3
- package/dist/chunk-T2LDLVVV.js.map +1 -0
- package/dist/{chunk-UKMOQWUC.js → chunk-TJPENLGQ.js} +3 -3
- package/dist/chunk-V5SSTT3C.js +52 -0
- package/dist/chunk-V5SSTT3C.js.map +1 -0
- package/dist/chunk-XG6SQUEP.js +27 -0
- package/dist/chunk-XG6SQUEP.js.map +1 -0
- package/dist/cli/index.js +6 -6
- package/dist/client/index.d.ts +20 -0
- package/dist/client/index.js.map +1 -1
- package/dist/{cloudflare-2WVDBHCC.js → cloudflare-GK4VD3EU.js} +71 -21
- package/dist/cloudflare-GK4VD3EU.js.map +1 -0
- package/dist/{route-config-B7FaTSby.d.ts → define-middleware-BOHpPOBs.d.ts} +39 -1
- package/dist/{deno-deploy-BXOQ45LD.js → deno-deploy-WMNXRVGL.js} +37 -36
- package/dist/deno-deploy-WMNXRVGL.js.map +1 -0
- package/dist/{dev-GLUZNBNH.js → dev-72ISY3BP.js} +7 -7
- package/dist/{index-BdIaxp0c.d.ts → index-DZ_G5iY2.d.ts} +76 -5
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/{internal-api-3JIWUI3V.js → internal-api-CEZSXGRB.js} +4 -4
- package/dist/{internal-api-OK7FS2ZF.js → internal-api-XRIBUACB.js} +8 -7
- package/dist/match-DaKsL73w.d.ts +28 -0
- package/dist/{mcp-IPDFRK4S.js → mcp-S2AOB3RE.js} +3 -3
- package/dist/{match-Dw4CNXJH.d.ts → module-loader-DCip7NoL.d.ts} +1 -28
- package/dist/{netlify-LPJAPMQ2.js → netlify-VOL54SC7.js} +23 -20
- package/dist/netlify-VOL54SC7.js.map +1 -0
- package/dist/{observability-bootstrap-H4NSILXD.js → observability-bootstrap-YQKMEYW7.js} +2 -2
- package/dist/{preview-5ONGHDKY.js → preview-WA4HORUQ.js} +3 -3
- package/dist/registry-DDBXDHJ2.js +23 -0
- package/dist/server/cost/index.d.ts +14 -1
- package/dist/server/cost/index.js +1 -1
- package/dist/server/define/index.d.ts +2 -28
- package/dist/server/define/index.js +2 -3
- package/dist/server/http/index.d.ts +4 -3
- package/dist/server/http/index.js +13 -8
- package/dist/server/index.d.ts +6 -4
- package/dist/server/index.js +15 -10
- package/dist/server/index.js.map +1 -1
- package/dist/server/scan/index.d.ts +3 -2
- package/dist/{server-boundary-6PYWFYEL.js → server-boundary-S3G4CSNK.js} +4 -4
- package/dist/{server-boundary-CNYNVFT5.js → server-boundary-YN5HAICY.js} +6 -6
- package/dist/{start-UYBVPTSV.js → start-ZTMQLNJI.js} +39 -15
- package/dist/start-ZTMQLNJI.js.map +1 -0
- package/dist/{static-SVDWIOXJ.js → static-7OJNB7D2.js} +4 -4
- package/dist/{vercel-YUZADKGV.js → vercel-LZTDSDJF.js} +42 -28
- package/dist/vercel-LZTDSDJF.js.map +1 -0
- package/dist/vite-plugin/index.js +7 -6
- package/dist/{vite-plugin-ILWLTOKK.js → vite-plugin-Z7AJG3M2.js} +7 -7
- package/package.json +4 -4
- package/dist/aws-lambda-R76PWR27.js.map +0 -1
- package/dist/build-UNBI6VKC.js.map +0 -1
- package/dist/bun-NPBIAWSU.js.map +0 -1
- package/dist/chunk-5AGNZXHJ.js.map +0 -1
- package/dist/chunk-5VLP3GQ2.js.map +0 -1
- package/dist/chunk-6B3CMPE4.js +0 -192
- package/dist/chunk-6B3CMPE4.js.map +0 -1
- package/dist/chunk-B4Z7KIIU.js.map +0 -1
- package/dist/chunk-D4VP2QPR.js +0 -16
- package/dist/chunk-D4VP2QPR.js.map +0 -1
- package/dist/chunk-ENRT6DAU.js.map +0 -1
- package/dist/chunk-GAJOZJWD.js.map +0 -1
- package/dist/chunk-GQIATJEG.js.map +0 -1
- package/dist/chunk-O55RLSGG.js +0 -127
- package/dist/chunk-O55RLSGG.js.map +0 -1
- package/dist/chunk-PRZCPSUE.js.map +0 -1
- package/dist/chunk-WAYUHS54.js.map +0 -1
- package/dist/chunk-YNK7DW5V.js.map +0 -1
- package/dist/cloudflare-2WVDBHCC.js.map +0 -1
- package/dist/deno-deploy-BXOQ45LD.js.map +0 -1
- package/dist/netlify-LPJAPMQ2.js.map +0 -1
- package/dist/registry-E5XEUKG6.js +0 -23
- package/dist/start-UYBVPTSV.js.map +0 -1
- package/dist/vercel-YUZADKGV.js.map +0 -1
- /package/dist/{actions-virtual-module-YIWQTI6Q.js.map → actions-virtual-module-DH3N34I6.js.map} +0 -0
- /package/dist/{actions-virtual-module-WCHXKH6R.js.map → actions-virtual-module-OMIFGXK6.js.map} +0 -0
- /package/dist/{agent-C7F5O5V4.js.map → agent-7RPGAKTY.js.map} +0 -0
- /package/dist/{app-typed-client-2ZEGNFJP.js.map → app-typed-client-C4LRUSIS.js.map} +0 -0
- /package/dist/{app-typed-client-CUM2GZ5Y.js.map → app-typed-client-R6OUJZEE.js.map} +0 -0
- /package/dist/{chunk-EQCSUC65.js.map → chunk-BTDTHXUI.js.map} +0 -0
- /package/dist/{chunk-UKMOQWUC.js.map → chunk-TJPENLGQ.js.map} +0 -0
- /package/dist/{dev-GLUZNBNH.js.map → dev-72ISY3BP.js.map} +0 -0
- /package/dist/{internal-api-3JIWUI3V.js.map → internal-api-CEZSXGRB.js.map} +0 -0
- /package/dist/{internal-api-OK7FS2ZF.js.map → internal-api-XRIBUACB.js.map} +0 -0
- /package/dist/{mcp-IPDFRK4S.js.map → mcp-S2AOB3RE.js.map} +0 -0
- /package/dist/{observability-bootstrap-H4NSILXD.js.map → observability-bootstrap-YQKMEYW7.js.map} +0 -0
- /package/dist/{preview-5ONGHDKY.js.map → preview-WA4HORUQ.js.map} +0 -0
- /package/dist/{registry-E5XEUKG6.js.map → registry-DDBXDHJ2.js.map} +0 -0
- /package/dist/{server-boundary-6PYWFYEL.js.map → server-boundary-S3G4CSNK.js.map} +0 -0
- /package/dist/{server-boundary-CNYNVFT5.js.map → server-boundary-YN5HAICY.js.map} +0 -0
- /package/dist/{static-SVDWIOXJ.js.map → static-7OJNB7D2.js.map} +0 -0
- /package/dist/{vite-plugin-ILWLTOKK.js.map → vite-plugin-Z7AJG3M2.js.map} +0 -0
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RUN_ID_HEADER,
|
|
3
|
+
SSE_BASE_HEADERS,
|
|
4
|
+
SSE_DONE_FRAME,
|
|
5
|
+
admitAgentRequest,
|
|
6
|
+
agentAccessDenied,
|
|
7
|
+
encodeSse,
|
|
8
|
+
formatSseFrame,
|
|
9
|
+
getApprovalRegistry,
|
|
10
|
+
getRunEventCache,
|
|
11
|
+
makeThreadStartRun,
|
|
12
|
+
mintRunId,
|
|
13
|
+
parseAgentRequestBody,
|
|
14
|
+
readAgentPolicy
|
|
15
|
+
} from "./chunk-MOGTMGGA.js";
|
|
16
|
+
import {
|
|
17
|
+
createServerContext
|
|
18
|
+
} from "./chunk-3T5XLDOH.js";
|
|
19
|
+
import {
|
|
20
|
+
validateCsrfRequest
|
|
21
|
+
} from "./chunk-P6OS7652.js";
|
|
22
|
+
import {
|
|
23
|
+
subjectFromContext
|
|
24
|
+
} from "./chunk-IDWN2OSG.js";
|
|
25
|
+
import {
|
|
26
|
+
extractAppResources,
|
|
27
|
+
handleMcpJsonRpc,
|
|
28
|
+
isMcpPath
|
|
29
|
+
} from "./chunk-TQEE36VD.js";
|
|
30
|
+
|
|
31
|
+
// src/server/agent/agent-card-handler.ts
|
|
32
|
+
import { buildAgentCard, compileLoadedAgentModule } from "@theokit/agents";
|
|
33
|
+
var WELL_KNOWN = /^\/\.well-known\/([^/]+)\/agent-card\.json$/;
|
|
34
|
+
function isAgentCardPath(urlPath) {
|
|
35
|
+
const match = WELL_KNOWN.exec(urlPath);
|
|
36
|
+
return match ? decodeURIComponent(match[1]) : null;
|
|
37
|
+
}
|
|
38
|
+
function toManifestEntry(name, route, mod) {
|
|
39
|
+
const compiled = compileLoadedAgentModule(mod, `agent card for "${name}"`);
|
|
40
|
+
return {
|
|
41
|
+
name,
|
|
42
|
+
route,
|
|
43
|
+
stream: compiled.stream,
|
|
44
|
+
mainLoop: { method: "", strategy: "" },
|
|
45
|
+
guards: [],
|
|
46
|
+
interceptors: [],
|
|
47
|
+
tools: compiled.tools.map((t) => ({
|
|
48
|
+
name: t.name,
|
|
49
|
+
description: t.description,
|
|
50
|
+
approval: false,
|
|
51
|
+
trace: false,
|
|
52
|
+
audit: false
|
|
53
|
+
})),
|
|
54
|
+
subAgents: []
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
function handleAgentCard(mod, name, route, baseUrl) {
|
|
58
|
+
try {
|
|
59
|
+
const card = buildAgentCard(toManifestEntry(name, route, mod), { baseUrl });
|
|
60
|
+
return new Response(JSON.stringify(card), {
|
|
61
|
+
status: 200,
|
|
62
|
+
headers: { "content-type": "application/json; charset=utf-8" }
|
|
63
|
+
});
|
|
64
|
+
} catch (err) {
|
|
65
|
+
return new Response(
|
|
66
|
+
JSON.stringify({
|
|
67
|
+
error: {
|
|
68
|
+
code: "AGENT_CARD_FAILED",
|
|
69
|
+
message: err instanceof Error ? err.message : "card build failed"
|
|
70
|
+
}
|
|
71
|
+
}),
|
|
72
|
+
{ status: 500, headers: { "content-type": "application/json; charset=utf-8" } }
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// src/server/agent/handle-agent-run-reconnect.ts
|
|
78
|
+
var RUN_STREAM_PATH = /^\/api\/agents\/([^/]+)\/runs\/([^/]+)\/stream$/;
|
|
79
|
+
function isAgentRunStreamPath(urlPath) {
|
|
80
|
+
const m = RUN_STREAM_PATH.exec(urlPath);
|
|
81
|
+
return m ? { name: decodeURIComponent(m[1]), runId: decodeURIComponent(m[2]) } : null;
|
|
82
|
+
}
|
|
83
|
+
function parseLastEventId(raw) {
|
|
84
|
+
if (raw === null) return -1;
|
|
85
|
+
const n = Number.parseInt(raw, 10);
|
|
86
|
+
return Number.isInteger(n) && n >= 0 ? n : -1;
|
|
87
|
+
}
|
|
88
|
+
function handleAgentRunReconnect(runId, request, cache) {
|
|
89
|
+
if (!cache.has(runId)) {
|
|
90
|
+
return new Response(
|
|
91
|
+
JSON.stringify({ error: { code: "RUN_NOT_FOUND", message: `Unknown run '${runId}'.` } }),
|
|
92
|
+
{
|
|
93
|
+
status: 404,
|
|
94
|
+
headers: { "content-type": "application/json" }
|
|
95
|
+
}
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
const afterSeq = parseLastEventId(request.headers.get("last-event-id"));
|
|
99
|
+
const stream = new ReadableStream({
|
|
100
|
+
start(controller) {
|
|
101
|
+
let closed = false;
|
|
102
|
+
const safeEnqueue = (text) => {
|
|
103
|
+
if (closed) return;
|
|
104
|
+
try {
|
|
105
|
+
controller.enqueue(encodeSse(text));
|
|
106
|
+
} catch {
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const close = () => {
|
|
110
|
+
if (closed) return;
|
|
111
|
+
safeEnqueue(SSE_DONE_FRAME);
|
|
112
|
+
closed = true;
|
|
113
|
+
try {
|
|
114
|
+
controller.close();
|
|
115
|
+
} catch {
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const res = cache.attach(
|
|
119
|
+
runId,
|
|
120
|
+
afterSeq,
|
|
121
|
+
(frame) => {
|
|
122
|
+
safeEnqueue(formatSseFrame(frame.seq, frame.data));
|
|
123
|
+
},
|
|
124
|
+
() => {
|
|
125
|
+
close();
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
if (!res.known) {
|
|
129
|
+
close();
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
for (const frame of res.replay) {
|
|
133
|
+
safeEnqueue(formatSseFrame(frame.seq, frame.data));
|
|
134
|
+
}
|
|
135
|
+
if (res.ended) {
|
|
136
|
+
close();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
request.signal.addEventListener("abort", () => {
|
|
140
|
+
res.unsubscribe();
|
|
141
|
+
close();
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
return new Response(stream, { headers: { ...SSE_BASE_HEADERS, [RUN_ID_HEADER]: runId } });
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// src/server/agent/thread-dispatcher.ts
|
|
149
|
+
function postThreadFollowUp(deps, sessionId, message) {
|
|
150
|
+
if (deps.registry.getActive(sessionId) !== null) {
|
|
151
|
+
deps.registry.queue(sessionId, { message });
|
|
152
|
+
return { queued: true };
|
|
153
|
+
}
|
|
154
|
+
return { runId: startAndPump(deps, sessionId, message) };
|
|
155
|
+
}
|
|
156
|
+
function startAndPump(deps, sessionId, message) {
|
|
157
|
+
const runId = mintRunId();
|
|
158
|
+
deps.cache.begin(runId);
|
|
159
|
+
deps.registry.startRun(sessionId, runId);
|
|
160
|
+
pumpIntoCache(deps, sessionId, runId, deps.startRun(sessionId, message));
|
|
161
|
+
return runId;
|
|
162
|
+
}
|
|
163
|
+
function pumpIntoCache(deps, sessionId, runId, chunks) {
|
|
164
|
+
void (async () => {
|
|
165
|
+
try {
|
|
166
|
+
for await (const chunk of chunks) {
|
|
167
|
+
deps.cache.append(runId, JSON.stringify(chunk));
|
|
168
|
+
}
|
|
169
|
+
} catch {
|
|
170
|
+
} finally {
|
|
171
|
+
deps.cache.end(runId);
|
|
172
|
+
const next = deps.registry.endRun(sessionId, runId);
|
|
173
|
+
if (next !== void 0) startAndPump(deps, sessionId, next.message);
|
|
174
|
+
}
|
|
175
|
+
})();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// src/server/agent/thread-run-registry.ts
|
|
179
|
+
function createInProcessThreadRunRegistry() {
|
|
180
|
+
const threads = /* @__PURE__ */ new Map();
|
|
181
|
+
const ensure = (sessionId) => {
|
|
182
|
+
let s = threads.get(sessionId);
|
|
183
|
+
if (s === void 0) {
|
|
184
|
+
s = { activeRunId: null, queue: [], waiters: /* @__PURE__ */ new Set() };
|
|
185
|
+
threads.set(sessionId, s);
|
|
186
|
+
}
|
|
187
|
+
return s;
|
|
188
|
+
};
|
|
189
|
+
return {
|
|
190
|
+
getActive(sessionId) {
|
|
191
|
+
return threads.get(sessionId)?.activeRunId ?? null;
|
|
192
|
+
},
|
|
193
|
+
startRun(sessionId, runId) {
|
|
194
|
+
const s = ensure(sessionId);
|
|
195
|
+
s.activeRunId = runId;
|
|
196
|
+
const waiters = [...s.waiters];
|
|
197
|
+
s.waiters.clear();
|
|
198
|
+
for (const cb of waiters) cb(runId);
|
|
199
|
+
},
|
|
200
|
+
endRun(sessionId, runId) {
|
|
201
|
+
const s = threads.get(sessionId);
|
|
202
|
+
if (s?.activeRunId !== runId) return void 0;
|
|
203
|
+
s.activeRunId = null;
|
|
204
|
+
return s.queue.shift();
|
|
205
|
+
},
|
|
206
|
+
queue(sessionId, followUp) {
|
|
207
|
+
ensure(sessionId).queue.push(followUp);
|
|
208
|
+
},
|
|
209
|
+
onNextRun(sessionId, cb) {
|
|
210
|
+
const s = ensure(sessionId);
|
|
211
|
+
s.waiters.add(cb);
|
|
212
|
+
return () => {
|
|
213
|
+
s.waiters.delete(cb);
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
var serverRegistry;
|
|
219
|
+
function getThreadRunRegistry() {
|
|
220
|
+
serverRegistry ??= createInProcessThreadRunRegistry();
|
|
221
|
+
return serverRegistry;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// src/server/agent/handle-thread-routes.ts
|
|
225
|
+
var THREAD_MESSAGE_PATH = /^\/api\/agents\/([^/]+)\/threads\/([^/]+)\/message$/;
|
|
226
|
+
var THREAD_STREAM_PATH = /^\/api\/agents\/([^/]+)\/threads\/([^/]+)\/stream$/;
|
|
227
|
+
var DEFAULT_IDLE_WAIT_MS = 3e4;
|
|
228
|
+
function matchThread(re, urlPath) {
|
|
229
|
+
const m = re.exec(urlPath);
|
|
230
|
+
return m ? { name: decodeURIComponent(m[1]), sessionId: decodeURIComponent(m[2]) } : null;
|
|
231
|
+
}
|
|
232
|
+
var isThreadMessagePath = (urlPath) => matchThread(THREAD_MESSAGE_PATH, urlPath);
|
|
233
|
+
var isThreadStreamPath = (urlPath) => matchThread(THREAD_STREAM_PATH, urlPath);
|
|
234
|
+
function jsonError(status, code, message) {
|
|
235
|
+
return new Response(JSON.stringify({ error: { code, message } }), {
|
|
236
|
+
status,
|
|
237
|
+
headers: { "content-type": "application/json; charset=utf-8" }
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
async function handleThreadMessage(args) {
|
|
241
|
+
const { mod, apiKey, sessionId, request, source, agentName, csrfMode = "strict" } = args;
|
|
242
|
+
if (csrfMode === "strict") {
|
|
243
|
+
const csrf = validateCsrfRequest(request);
|
|
244
|
+
if (!csrf.valid) return jsonError(403, "CSRF_FAILED", `CSRF check failed: ${csrf.reason}`);
|
|
245
|
+
}
|
|
246
|
+
let body = null;
|
|
247
|
+
try {
|
|
248
|
+
body = await request.json();
|
|
249
|
+
} catch {
|
|
250
|
+
}
|
|
251
|
+
const input = parseAgentRequestBody(body);
|
|
252
|
+
if (input === null) {
|
|
253
|
+
return jsonError(400, "BAD_REQUEST", "Request must contain a non-empty message.");
|
|
254
|
+
}
|
|
255
|
+
const result = postThreadFollowUp(
|
|
256
|
+
{
|
|
257
|
+
registry: getThreadRunRegistry(),
|
|
258
|
+
cache: getRunEventCache(),
|
|
259
|
+
// usetheokit/theokit#381 — the request goes with it, so the run's spans join the trace of
|
|
260
|
+
// the caller that queued it instead of opening one of their own.
|
|
261
|
+
startRun: makeThreadStartRun(mod, apiKey, source, agentName, request)
|
|
262
|
+
},
|
|
263
|
+
sessionId,
|
|
264
|
+
input.message
|
|
265
|
+
);
|
|
266
|
+
const headers = { "content-type": "application/json; charset=utf-8" };
|
|
267
|
+
if ("runId" in result) headers[RUN_ID_HEADER] = result.runId;
|
|
268
|
+
return new Response(JSON.stringify(result), { status: 202, headers });
|
|
269
|
+
}
|
|
270
|
+
function handleThreadStream(sessionId, request, registry = getThreadRunRegistry(), cache = getRunEventCache(), idleWaitMs = DEFAULT_IDLE_WAIT_MS) {
|
|
271
|
+
const active = registry.getActive(sessionId);
|
|
272
|
+
if (active !== null && cache.has(active)) {
|
|
273
|
+
return handleAgentRunReconnect(active, request, cache);
|
|
274
|
+
}
|
|
275
|
+
return waitThenAttachStream(sessionId, request, registry, cache, idleWaitMs);
|
|
276
|
+
}
|
|
277
|
+
function waitThenAttachStream(sessionId, request, registry, cache, idleWaitMs) {
|
|
278
|
+
const stream = new ReadableStream({
|
|
279
|
+
start(controller) {
|
|
280
|
+
let closed = false;
|
|
281
|
+
const send = (text) => {
|
|
282
|
+
if (closed) return;
|
|
283
|
+
try {
|
|
284
|
+
controller.enqueue(encodeSse(text));
|
|
285
|
+
} catch {
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
let detachAttach;
|
|
289
|
+
const close = () => {
|
|
290
|
+
if (closed) return;
|
|
291
|
+
send(SSE_DONE_FRAME);
|
|
292
|
+
closed = true;
|
|
293
|
+
try {
|
|
294
|
+
controller.close();
|
|
295
|
+
} catch {
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
const offNext = registry.onNextRun(sessionId, (runId) => {
|
|
299
|
+
const res = cache.attach(
|
|
300
|
+
runId,
|
|
301
|
+
-1,
|
|
302
|
+
(frame) => {
|
|
303
|
+
send(formatSseFrame(frame.seq, frame.data));
|
|
304
|
+
},
|
|
305
|
+
() => {
|
|
306
|
+
close();
|
|
307
|
+
}
|
|
308
|
+
);
|
|
309
|
+
if (!res.known) {
|
|
310
|
+
close();
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
for (const frame of res.replay) send(formatSseFrame(frame.seq, frame.data));
|
|
314
|
+
if (res.ended) {
|
|
315
|
+
close();
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
detachAttach = res.unsubscribe;
|
|
319
|
+
});
|
|
320
|
+
const teardownWaiter = () => {
|
|
321
|
+
offNext();
|
|
322
|
+
detachAttach?.();
|
|
323
|
+
};
|
|
324
|
+
const timer = setTimeout(() => {
|
|
325
|
+
teardownWaiter();
|
|
326
|
+
close();
|
|
327
|
+
}, idleWaitMs);
|
|
328
|
+
timer.unref();
|
|
329
|
+
request.signal.addEventListener("abort", () => {
|
|
330
|
+
teardownWaiter();
|
|
331
|
+
clearTimeout(timer);
|
|
332
|
+
close();
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
return new Response(stream, { headers: { ...SSE_BASE_HEADERS } });
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// src/server/agent/list-approvals-handler.ts
|
|
340
|
+
var LIST_PATH = /^\/api\/agents\/([^/]+)\/approvals$/;
|
|
341
|
+
function isListApprovalsPath(urlPath) {
|
|
342
|
+
const match = LIST_PATH.exec(urlPath);
|
|
343
|
+
return match ? decodeURIComponent(match[1]) : null;
|
|
344
|
+
}
|
|
345
|
+
function handleListApprovals(registry, subject) {
|
|
346
|
+
const visible = registry.list().filter((approval) => {
|
|
347
|
+
const owner = registry.ownerOf(approval.approvalId);
|
|
348
|
+
return owner === void 0 || owner === subject;
|
|
349
|
+
});
|
|
350
|
+
return new Response(JSON.stringify({ approvals: visible, scope: registry.scope ?? "instance" }), {
|
|
351
|
+
status: 200,
|
|
352
|
+
headers: { "content-type": "application/json; charset=utf-8" }
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// src/server/agent/serve-aux-routes.ts
|
|
357
|
+
function jsonError2(status, code, message) {
|
|
358
|
+
return new Response(JSON.stringify({ error: { code, message } }), {
|
|
359
|
+
status,
|
|
360
|
+
headers: { "content-type": "application/json; charset=utf-8" }
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
function routeFor(deps, name, build) {
|
|
364
|
+
if (name === null) return null;
|
|
365
|
+
const agent = deps.agents.find((a) => a.name === name);
|
|
366
|
+
return agent === void 0 ? null : build(agent);
|
|
367
|
+
}
|
|
368
|
+
function matchGetAuxRoute(verb, urlPath, deps) {
|
|
369
|
+
if (verb !== "GET") return null;
|
|
370
|
+
const card = routeFor(
|
|
371
|
+
deps,
|
|
372
|
+
isAgentCardPath(urlPath),
|
|
373
|
+
(agent) => ({ kind: "card", agent })
|
|
374
|
+
);
|
|
375
|
+
if (card !== null) return card;
|
|
376
|
+
const approvals = routeFor(
|
|
377
|
+
deps,
|
|
378
|
+
isListApprovalsPath(urlPath),
|
|
379
|
+
(agent) => ({ kind: "approvals", agent })
|
|
380
|
+
);
|
|
381
|
+
if (approvals !== null) return approvals;
|
|
382
|
+
const run = isAgentRunStreamPath(urlPath);
|
|
383
|
+
if (run !== null) {
|
|
384
|
+
return routeFor(
|
|
385
|
+
deps,
|
|
386
|
+
run.name,
|
|
387
|
+
(agent) => ({ kind: "run-stream", agent, runId: run.runId })
|
|
388
|
+
);
|
|
389
|
+
}
|
|
390
|
+
const stream = isThreadStreamPath(urlPath);
|
|
391
|
+
if (stream === null) return null;
|
|
392
|
+
return routeFor(
|
|
393
|
+
deps,
|
|
394
|
+
stream.name,
|
|
395
|
+
(agent) => ({ kind: "thread-stream", agent, sessionId: stream.sessionId })
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
async function matchPostAuxRoute(verb, urlPath, deps) {
|
|
399
|
+
if (verb !== "POST") return null;
|
|
400
|
+
const msg = isThreadMessagePath(urlPath);
|
|
401
|
+
if (msg !== null) {
|
|
402
|
+
return routeFor(
|
|
403
|
+
deps,
|
|
404
|
+
msg.name,
|
|
405
|
+
(agent2) => ({ kind: "thread-message", agent: agent2, sessionId: msg.sessionId })
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
const agent = routeFor(deps, isMcpPath(urlPath), (found) => found);
|
|
409
|
+
if (agent === null) return null;
|
|
410
|
+
const mod = await deps.loadModule(agent.filePath);
|
|
411
|
+
return isMcpExposed(mod) ? { kind: "mcp", agent, mod } : null;
|
|
412
|
+
}
|
|
413
|
+
async function matchAgentAuxRoute(method, urlPath, deps) {
|
|
414
|
+
const verb = method.toUpperCase();
|
|
415
|
+
return matchGetAuxRoute(verb, urlPath, deps) ?? await matchPostAuxRoute(verb, urlPath, deps);
|
|
416
|
+
}
|
|
417
|
+
async function admitAux(deps, agent, params, body) {
|
|
418
|
+
const mod = await deps.loadModule(agent.filePath);
|
|
419
|
+
const resolve2 = deps.resolveSubject;
|
|
420
|
+
const admitted = { subject: null };
|
|
421
|
+
const recording = resolve2 === void 0 ? void 0 : async () => {
|
|
422
|
+
admitted.subject = await resolve2();
|
|
423
|
+
return admitted.subject;
|
|
424
|
+
};
|
|
425
|
+
const decision = await admitAgentRequest(
|
|
426
|
+
readAgentPolicy(mod, agent.filePath),
|
|
427
|
+
recording,
|
|
428
|
+
params,
|
|
429
|
+
body
|
|
430
|
+
);
|
|
431
|
+
const refusal = decision.allowed ? null : agentAccessDenied(decision, params);
|
|
432
|
+
return { refusal, subject: admitted.subject?.id };
|
|
433
|
+
}
|
|
434
|
+
async function serveMatchedAuxRoute(route, request, deps) {
|
|
435
|
+
if (route.kind === "card") {
|
|
436
|
+
const mod = await deps.loadModule(route.agent.filePath);
|
|
437
|
+
return handleAgentCard(mod, route.agent.name, route.agent.agentPath, deps.baseUrl);
|
|
438
|
+
}
|
|
439
|
+
if (route.kind === "approvals") {
|
|
440
|
+
const admission = await admitAux(deps, route.agent, {
|
|
441
|
+
agent: route.agent.name,
|
|
442
|
+
endpoint: "approvals"
|
|
443
|
+
});
|
|
444
|
+
if (admission.refusal !== null) return admission.refusal;
|
|
445
|
+
return handleListApprovals(getApprovalRegistry(), admission.subject);
|
|
446
|
+
}
|
|
447
|
+
if (route.kind === "run-stream") {
|
|
448
|
+
return handleAgentRunReconnect(route.runId, request, getRunEventCache());
|
|
449
|
+
}
|
|
450
|
+
if (route.kind === "mcp") return serveMcpRoute(route, request, deps);
|
|
451
|
+
return serveThreadRoute(route, request, deps);
|
|
452
|
+
}
|
|
453
|
+
async function serveThreadRoute(route, request, deps) {
|
|
454
|
+
const { agent, sessionId } = route;
|
|
455
|
+
if (route.kind === "thread-stream") {
|
|
456
|
+
const { refusal: refusal2 } = await admitAux(deps, agent, {
|
|
457
|
+
agent: agent.name,
|
|
458
|
+
endpoint: "thread-stream",
|
|
459
|
+
sessionId
|
|
460
|
+
});
|
|
461
|
+
return refusal2 ?? handleThreadStream(sessionId, request);
|
|
462
|
+
}
|
|
463
|
+
const { refusal } = await admitAux(deps, agent, {
|
|
464
|
+
agent: agent.name,
|
|
465
|
+
endpoint: "thread-message",
|
|
466
|
+
sessionId
|
|
467
|
+
});
|
|
468
|
+
if (refusal !== null) return refusal;
|
|
469
|
+
if (deps.resolveApiKey === void 0) {
|
|
470
|
+
return jsonError2(
|
|
471
|
+
501,
|
|
472
|
+
"NOT_CONFIGURED",
|
|
473
|
+
"Thread follow-up requires a provider API key (resolveApiKey was not provided to serveMatchedAuxRoute)."
|
|
474
|
+
);
|
|
475
|
+
}
|
|
476
|
+
const mod = await deps.loadModule(agent.filePath);
|
|
477
|
+
return handleThreadMessage({
|
|
478
|
+
mod,
|
|
479
|
+
// Passed unresolved: `makeThreadStartRun` calls it once the module is compiled and the
|
|
480
|
+
// model is known (theokit#328).
|
|
481
|
+
apiKey: deps.resolveApiKey,
|
|
482
|
+
sessionId,
|
|
483
|
+
request,
|
|
484
|
+
source: `agent "${agent.name}"`,
|
|
485
|
+
// usetheokit/theokit#406 — the label above reads well in an `AgentDefinitionError` and is not
|
|
486
|
+
// a name; the spans get the name, so the same agent is one series whichever route started it.
|
|
487
|
+
agentName: agent.name,
|
|
488
|
+
csrfMode: deps.csrfMode ?? "strict"
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
async function serveMcpRoute(route, request, deps) {
|
|
492
|
+
const { agent, mod } = route;
|
|
493
|
+
const mcpParams = { agent: agent.name, endpoint: "mcp" };
|
|
494
|
+
const mcpDecision = await admitAgentRequest(
|
|
495
|
+
readAgentPolicy(mod, agent.filePath),
|
|
496
|
+
deps.resolveSubject,
|
|
497
|
+
mcpParams
|
|
498
|
+
);
|
|
499
|
+
if (!mcpDecision.allowed) return agentAccessDenied(mcpDecision, mcpParams);
|
|
500
|
+
const csrfMode = deps.csrfMode ?? "strict";
|
|
501
|
+
if (csrfMode === "strict") {
|
|
502
|
+
const csrf = validateCsrfRequest(request);
|
|
503
|
+
if (!csrf.valid) return jsonError2(403, "CSRF_FAILED", `CSRF check failed: ${csrf.reason}`);
|
|
504
|
+
}
|
|
505
|
+
let body = null;
|
|
506
|
+
try {
|
|
507
|
+
body = await request.json();
|
|
508
|
+
} catch {
|
|
509
|
+
}
|
|
510
|
+
return handleMcpJsonRpc(mod, agent.name, body, extractAppResources(mod));
|
|
511
|
+
}
|
|
512
|
+
function isMcpExposed(mod) {
|
|
513
|
+
return mod?.mcp === true;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// src/server/http/resolve-agent-subject.ts
|
|
517
|
+
function createAgentSubjectResolver(sources) {
|
|
518
|
+
let pending;
|
|
519
|
+
return () => {
|
|
520
|
+
pending ??= resolve(sources);
|
|
521
|
+
return pending;
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
async function resolve(sources) {
|
|
525
|
+
const { req, res, loadModule, serverDir, pluginRunner } = sources;
|
|
526
|
+
const produced = serverDir === void 0 ? {} : await createServerContext(req, res, loadModule, serverDir);
|
|
527
|
+
return subjectFrom(produced, pluginRunner);
|
|
528
|
+
}
|
|
529
|
+
function createSubjectResolverFromFactory(createContext, request, response, pluginRunner) {
|
|
530
|
+
let pending;
|
|
531
|
+
return () => {
|
|
532
|
+
pending ??= (async () => subjectFrom(
|
|
533
|
+
// An app with no `context.ts` bakes no factory, and an anonymous caller is the honest
|
|
534
|
+
// answer — not an error, and not a subject invented to fill the slot.
|
|
535
|
+
createContext === void 0 ? {} : await createContext({ request, response }),
|
|
536
|
+
pluginRunner
|
|
537
|
+
))();
|
|
538
|
+
return pending;
|
|
539
|
+
};
|
|
540
|
+
}
|
|
541
|
+
function subjectFrom(produced, pluginRunner) {
|
|
542
|
+
const ctx = produced ?? {};
|
|
543
|
+
pluginRunner?.applyDecorations(ctx);
|
|
544
|
+
return subjectFromContext(ctx);
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
export {
|
|
548
|
+
isAgentCardPath,
|
|
549
|
+
matchAgentAuxRoute,
|
|
550
|
+
serveMatchedAuxRoute,
|
|
551
|
+
createAgentSubjectResolver,
|
|
552
|
+
createSubjectResolverFromFactory
|
|
553
|
+
};
|
|
554
|
+
//# sourceMappingURL=chunk-BDPD5HEO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/agent/agent-card-handler.ts","../src/server/agent/handle-agent-run-reconnect.ts","../src/server/agent/thread-dispatcher.ts","../src/server/agent/thread-run-registry.ts","../src/server/agent/handle-thread-routes.ts","../src/server/agent/list-approvals-handler.ts","../src/server/agent/serve-aux-routes.ts","../src/server/http/resolve-agent-subject.ts"],"mappings":"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","names":["jsonError","agent","resolve","refusal"]}
|
|
@@ -164,6 +164,9 @@ function getApprovalRegistry() {
|
|
|
164
164
|
function createInProcessApprovalRegistry() {
|
|
165
165
|
const pending = /* @__PURE__ */ new Map();
|
|
166
166
|
return {
|
|
167
|
+
// B-236 — stated rather than left for a caller to infer from the name. This map is one
|
|
168
|
+
// process's, so every answer built from it is one process's.
|
|
169
|
+
scope: "instance",
|
|
167
170
|
register(approvalId, opts) {
|
|
168
171
|
return new Promise((resolve) => {
|
|
169
172
|
const settle = (decision) => {
|
|
@@ -218,4 +221,4 @@ export {
|
|
|
218
221
|
getApprovalRegistry,
|
|
219
222
|
resolveProvider
|
|
220
223
|
};
|
|
221
|
-
//# sourceMappingURL=chunk-
|
|
224
|
+
//# sourceMappingURL=chunk-BINRCILF.js.map
|