theokit 0.12.0 → 0.13.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.
Files changed (131) hide show
  1. package/dist/{actions-virtual-module-SQDY3V5X.js → actions-virtual-module-3CDQTWOC.js} +6 -6
  2. package/dist/{actions-virtual-module-PNPRCEOS.js → actions-virtual-module-EIPXX4ZB.js} +3 -3
  3. package/dist/adapters/web-shim.d.ts +67 -0
  4. package/dist/adapters/ws-shim.d.ts +55 -0
  5. package/dist/agent-events-DosDXkSV.d.ts +94 -0
  6. package/dist/agents-typed-client-SAWAAH7K.js +142 -0
  7. package/dist/agents-typed-client-SAWAAH7K.js.map +1 -0
  8. package/dist/agents-typed-client-UTEQUA63.js +143 -0
  9. package/dist/agents-typed-client-UTEQUA63.js.map +1 -0
  10. package/dist/{app-typed-client-5GYEOYP3.js → app-typed-client-7PBFWZUE.js} +3 -3
  11. package/dist/{app-typed-client-QG7BVZYW.js → app-typed-client-CSOK7NPC.js} +6 -6
  12. package/dist/audit-log-BQWM5YLG.d.ts +60 -0
  13. package/dist/body-parser-web-FV5HWCY3.js +71 -0
  14. package/dist/body-parser-web-FV5HWCY3.js.map +1 -0
  15. package/dist/boot/index.d.ts +39 -0
  16. package/dist/{build-QFRLSEZ4.js → build-HXND27XG.js} +11 -11
  17. package/dist/{chunk-223EFY5X.js → chunk-2J7XU3PW.js} +68 -27
  18. package/dist/chunk-2J7XU3PW.js.map +1 -0
  19. package/dist/{chunk-RESN62GB.js → chunk-2KZQPDYR.js} +5 -48
  20. package/dist/chunk-2KZQPDYR.js.map +1 -0
  21. package/dist/chunk-3S3BNW5K.js +445 -0
  22. package/dist/chunk-3S3BNW5K.js.map +1 -0
  23. package/dist/{chunk-6FYD34NX.js → chunk-BQDGES7C.js} +28 -28
  24. package/dist/{chunk-6FYD34NX.js.map → chunk-BQDGES7C.js.map} +1 -1
  25. package/dist/chunk-EXP56GFQ.js +52 -0
  26. package/dist/chunk-EXP56GFQ.js.map +1 -0
  27. package/dist/chunk-F4YUPDJ2.js +115 -0
  28. package/dist/chunk-F4YUPDJ2.js.map +1 -0
  29. package/dist/{chunk-NAZ4E2GT.js → chunk-KXA37ONC.js} +2 -2
  30. package/dist/chunk-NHJMZCAS.js +32 -0
  31. package/dist/chunk-NHJMZCAS.js.map +1 -0
  32. package/dist/{chunk-43D6XNDR.js → chunk-O62MW4MT.js} +91 -18
  33. package/dist/chunk-O62MW4MT.js.map +1 -0
  34. package/dist/chunk-RSVN727G.js +1 -0
  35. package/dist/{chunk-7CBRKNQA.js → chunk-RYTZYFSD.js} +198 -6
  36. package/dist/chunk-RYTZYFSD.js.map +1 -0
  37. package/dist/chunk-UNLA45FY.js +235 -0
  38. package/dist/chunk-UNLA45FY.js.map +1 -0
  39. package/dist/{chunk-GFMQJHXX.js → chunk-WR4F4EEZ.js} +1082 -1074
  40. package/dist/chunk-WR4F4EEZ.js.map +1 -0
  41. package/dist/{chunk-AD74EAK3.js → chunk-ZSTZXR2D.js} +1 -30
  42. package/dist/chunk-ZSTZXR2D.js.map +1 -0
  43. package/dist/cli/index.js +5 -5
  44. package/dist/client/index.d.ts +418 -0
  45. package/dist/client/index.js +84 -3
  46. package/dist/client/index.js.map +1 -1
  47. package/dist/csrf-BBrEZSBW.d.ts +107 -0
  48. package/dist/csrf-readiness-store-CjIoub3U.d.ts +43 -0
  49. package/dist/define-websocket-CdK94O-D.d.ts +64 -0
  50. package/dist/{dev-GBXOTXUP.js → dev-OWW4XVIH.js} +10 -10
  51. package/dist/{dev-emit-FEFEDLZF.js → dev-emit-5MDSBP5D.js} +3 -3
  52. package/dist/{dev-emit-O4EGOSNV.js → dev-emit-QH2YGZXN.js} +2 -2
  53. package/dist/devtools/entry.d.ts +5 -0
  54. package/dist/error-envelope-BsNzzAV5.d.ts +62 -0
  55. package/dist/health-route-C0hk64_U.d.ts +57 -0
  56. package/dist/index-B40qUSrQ.d.ts +575 -0
  57. package/dist/index.d.ts +361 -0
  58. package/dist/index.js +6 -4
  59. package/dist/index.js.map +1 -1
  60. package/dist/internal-api-4YTJDITC.js +83 -0
  61. package/dist/internal-api-EFKZWIYZ.js +66 -0
  62. package/dist/internal-api-EFKZWIYZ.js.map +1 -0
  63. package/dist/job-backend-CgC8Xf33.d.ts +68 -0
  64. package/dist/match-CfbEFRG4.d.ts +26 -0
  65. package/dist/{openapi-VR6AFBLJ.js → openapi-FHY6HC6I.js} +7 -7
  66. package/dist/plugin-runner-BGBkzgi0.d.ts +95 -0
  67. package/dist/plugin-types-DNJGxr4Z.d.ts +79 -0
  68. package/dist/rate-limit-BdNDZ3vt.d.ts +58 -0
  69. package/dist/rate-limit-store-BEJnhWdw.d.ts +72 -0
  70. package/dist/react-query/index.d.ts +33 -0
  71. package/dist/{registry-Q2TZQLUH.js → registry-34LL7NF4.js} +1 -1
  72. package/dist/{routes-LRYOIIAI.js → routes-EW7TP7NJ.js} +2 -2
  73. package/dist/schema-BpH6ivDY.d.ts +74 -0
  74. package/dist/server/agent/index.d.ts +229 -0
  75. package/dist/server/agent/index.js +2 -1
  76. package/dist/server/auth/index.d.ts +419 -0
  77. package/dist/server/cost/index.d.ts +177 -0
  78. package/dist/server/cron/index.d.ts +208 -0
  79. package/dist/server/define/index.d.ts +313 -0
  80. package/dist/server/define/index.js +4 -2
  81. package/dist/server/http/index.d.ts +11 -0
  82. package/dist/server/index.d.ts +848 -0
  83. package/dist/server/index.js +9 -294
  84. package/dist/server/index.js.map +1 -1
  85. package/dist/server/jobs/index.d.ts +348 -0
  86. package/dist/server/observability/index.d.ts +324 -0
  87. package/dist/server/plugins/index.d.ts +17 -0
  88. package/dist/server/rate-limit/index.d.ts +105 -0
  89. package/dist/server/realtime/index.d.ts +15 -0
  90. package/dist/server/scan/index.d.ts +126 -0
  91. package/dist/server/scan/index.js +1 -1
  92. package/dist/server/security/index.d.ts +193 -0
  93. package/dist/server/storage/index.d.ts +22 -0
  94. package/dist/server/webhook/index.d.ts +148 -0
  95. package/dist/{start-3ZHAXSJE.js → start-KIQ5TTLR.js} +76 -13
  96. package/dist/start-KIQ5TTLR.js.map +1 -0
  97. package/dist/storage-manager-C4jsO0Tp.d.ts +89 -0
  98. package/dist/storage-types-DsDTCPbp.d.ts +96 -0
  99. package/dist/vite-plugin/index.d.ts +115 -0
  100. package/dist/vite-plugin/index.js +6 -4
  101. package/dist/{vite-plugin-WO72VLYR.js → vite-plugin-RK66K26Z.js} +7 -7
  102. package/dist/vite-plugin-RK66K26Z.js.map +1 -0
  103. package/package.json +4 -4
  104. package/dist/chunk-223EFY5X.js.map +0 -1
  105. package/dist/chunk-3LVRAGAZ.js +0 -73
  106. package/dist/chunk-3LVRAGAZ.js.map +0 -1
  107. package/dist/chunk-43D6XNDR.js.map +0 -1
  108. package/dist/chunk-7CBRKNQA.js.map +0 -1
  109. package/dist/chunk-AD74EAK3.js.map +0 -1
  110. package/dist/chunk-GFMQJHXX.js.map +0 -1
  111. package/dist/chunk-PBEH6NXR.js +0 -44
  112. package/dist/chunk-PBEH6NXR.js.map +0 -1
  113. package/dist/chunk-PIVX3DYW.js +0 -142
  114. package/dist/chunk-PIVX3DYW.js.map +0 -1
  115. package/dist/chunk-PPPR5DGR.js +0 -1
  116. package/dist/chunk-RESN62GB.js.map +0 -1
  117. package/dist/start-3ZHAXSJE.js.map +0 -1
  118. /package/dist/{actions-virtual-module-SQDY3V5X.js.map → actions-virtual-module-3CDQTWOC.js.map} +0 -0
  119. /package/dist/{actions-virtual-module-PNPRCEOS.js.map → actions-virtual-module-EIPXX4ZB.js.map} +0 -0
  120. /package/dist/{app-typed-client-5GYEOYP3.js.map → app-typed-client-7PBFWZUE.js.map} +0 -0
  121. /package/dist/{app-typed-client-QG7BVZYW.js.map → app-typed-client-CSOK7NPC.js.map} +0 -0
  122. /package/dist/{build-QFRLSEZ4.js.map → build-HXND27XG.js.map} +0 -0
  123. /package/dist/{chunk-NAZ4E2GT.js.map → chunk-KXA37ONC.js.map} +0 -0
  124. /package/dist/{chunk-PPPR5DGR.js.map → chunk-RSVN727G.js.map} +0 -0
  125. /package/dist/{dev-GBXOTXUP.js.map → dev-OWW4XVIH.js.map} +0 -0
  126. /package/dist/{dev-emit-FEFEDLZF.js.map → dev-emit-5MDSBP5D.js.map} +0 -0
  127. /package/dist/{dev-emit-O4EGOSNV.js.map → dev-emit-QH2YGZXN.js.map} +0 -0
  128. /package/dist/{vite-plugin-WO72VLYR.js.map → internal-api-4YTJDITC.js.map} +0 -0
  129. /package/dist/{openapi-VR6AFBLJ.js.map → openapi-FHY6HC6I.js.map} +0 -0
  130. /package/dist/{registry-Q2TZQLUH.js.map → registry-34LL7NF4.js.map} +0 -0
  131. /package/dist/{routes-LRYOIIAI.js.map → routes-EW7TP7NJ.js.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  loadEnv,
10
10
  resolveTransformer
11
- } from "./chunk-PIVX3DYW.js";
11
+ } from "./chunk-3S3BNW5K.js";
12
12
  import {
13
13
  BATCH_PATH,
14
14
  TRACE_HEADER,
@@ -36,10 +36,11 @@ import {
36
36
  } from "./chunk-JQSKBMXP.js";
37
37
  import {
38
38
  matchRoute,
39
+ scanAgents,
39
40
  scanServerActions,
40
41
  scanServerRoutes,
41
42
  scanWebSocketRoutes
42
- } from "./chunk-223EFY5X.js";
43
+ } from "./chunk-2J7XU3PW.js";
43
44
  import {
44
45
  CSP_REPORT_PATH,
45
46
  CsrfReadinessStore,
@@ -47,12 +48,21 @@ import {
47
48
  handleCspReport,
48
49
  handleCsrfReadiness
49
50
  } from "./chunk-JBCHWRKF.js";
51
+ import {
52
+ validateCsrfRequest
53
+ } from "./chunk-TSLSIRBR.js";
54
+ import {
55
+ resolveProvider
56
+ } from "./chunk-EXP56GFQ.js";
50
57
  import {
51
58
  generateNonce
52
59
  } from "./chunk-C3ZZ56YZ.js";
53
60
  import {
54
61
  importUserModule
55
62
  } from "./chunk-7MQOHNHE.js";
63
+ import {
64
+ uiMessageStreamResponse
65
+ } from "./chunk-NHJMZCAS.js";
56
66
 
57
67
  // src/vite-plugin/index.ts
58
68
  import { existsSync as existsSync9 } from "fs";
@@ -974,6 +984,177 @@ function createActionMiddleware(vite, serverDir, options) {
974
984
  };
975
985
  }
976
986
 
987
+ // src/vite-plugin/agent-middleware.ts
988
+ import { randomUUID as randomUUID2 } from "crypto";
989
+
990
+ // src/server/agent/mount-agent.ts
991
+ import { compileAgentModule, streamAgentUIMessages } from "@theokit/agents";
992
+ function partText(part) {
993
+ if (typeof part !== "object" || part === null) return "";
994
+ const p = part;
995
+ return p.type === "text" && typeof p.text === "string" ? p.text : "";
996
+ }
997
+ function jsonError(status, code, message) {
998
+ return new Response(JSON.stringify({ error: { code, message } }), {
999
+ status,
1000
+ headers: { "content-type": "application/json" }
1001
+ });
1002
+ }
1003
+ function parseAgentRequestBody(body) {
1004
+ if (typeof body !== "object" || body === null) return null;
1005
+ const b = body;
1006
+ if (Array.isArray(b.messages) && b.messages.length > 0) {
1007
+ const last = b.messages[b.messages.length - 1];
1008
+ const parts = Array.isArray(last.parts) ? last.parts : [];
1009
+ const text = parts.map(partText).join("");
1010
+ if (text.length === 0) return null;
1011
+ const sessionId = typeof b.id === "string" && b.id.length > 0 ? b.id : crypto.randomUUID();
1012
+ return { message: text, sessionId };
1013
+ }
1014
+ if (typeof b.message === "string" && b.message.length > 0) {
1015
+ const sessionId = typeof b.sessionId === "string" && b.sessionId.length > 0 ? b.sessionId : crypto.randomUUID();
1016
+ return { message: b.message, sessionId };
1017
+ }
1018
+ return null;
1019
+ }
1020
+ async function mountAgent(mod, request, apiKey, source = "agent module", csrfMode = "strict") {
1021
+ if (csrfMode !== "off") {
1022
+ const csrf = validateCsrfRequest(request);
1023
+ if (!csrf.valid && csrfMode === "strict") {
1024
+ return jsonError(403, "CSRF_FAILED", `CSRF check failed: ${csrf.reason}`);
1025
+ }
1026
+ }
1027
+ const compiled = compileAgentModule(mod, source);
1028
+ let body = null;
1029
+ try {
1030
+ body = await request.json();
1031
+ } catch {
1032
+ }
1033
+ const input = parseAgentRequestBody(body);
1034
+ if (input === null) {
1035
+ return jsonError(400, "BAD_REQUEST", "Request must contain a non-empty message or messages[].");
1036
+ }
1037
+ return uiMessageStreamResponse(streamAgentUIMessages(compiled, apiKey, input));
1038
+ }
1039
+
1040
+ // src/server/http/node-web-adapter.ts
1041
+ import { Readable } from "stream";
1042
+ function incomingMessageToWebRequest(req) {
1043
+ const host = pickHeaderString(req.headers.host) ?? "localhost";
1044
+ const url = `http://${host}${req.url ?? "/"}`;
1045
+ const headers = new Headers();
1046
+ for (const [key, value] of Object.entries(req.headers)) {
1047
+ if (value === void 0) continue;
1048
+ if (Array.isArray(value)) {
1049
+ headers.set(key, value.join(", "));
1050
+ } else {
1051
+ headers.set(key, value);
1052
+ }
1053
+ }
1054
+ const method = (req.method ?? "GET").toUpperCase();
1055
+ const hasBody = method !== "GET" && method !== "HEAD";
1056
+ if (!hasBody) {
1057
+ return new Request(url, { method, headers });
1058
+ }
1059
+ const webStream = Readable.toWeb(req);
1060
+ return new Request(url, {
1061
+ method,
1062
+ headers,
1063
+ body: webStream,
1064
+ // EC-2: Node 18+ requires `duplex: 'half'` when body is a stream.
1065
+ // The `RequestInit` type omits it (Web spec gap); cast accordingly.
1066
+ ...{ duplex: "half" }
1067
+ });
1068
+ }
1069
+ async function writeWebResponseToServerResponse(response, res) {
1070
+ const setCookies = response.headers.getSetCookie();
1071
+ if (setCookies.length > 0) {
1072
+ res.setHeader("Set-Cookie", setCookies);
1073
+ }
1074
+ const otherHeaders = {};
1075
+ for (const [key, value] of response.headers.entries()) {
1076
+ if (key.toLowerCase() === "set-cookie") continue;
1077
+ otherHeaders[key] = value;
1078
+ }
1079
+ res.writeHead(response.status, response.statusText, otherHeaders);
1080
+ if (response.body === null) {
1081
+ res.end();
1082
+ return;
1083
+ }
1084
+ const reader = response.body.getReader();
1085
+ try {
1086
+ for (; ; ) {
1087
+ const { done, value } = await reader.read();
1088
+ if (done) break;
1089
+ res.write(value);
1090
+ }
1091
+ res.end();
1092
+ } finally {
1093
+ reader.releaseLock();
1094
+ }
1095
+ }
1096
+ function pickHeaderString(value) {
1097
+ if (typeof value === "string") return value;
1098
+ if (Array.isArray(value)) {
1099
+ for (const v of value) if (typeof v === "string" && v.length > 0) return v;
1100
+ }
1101
+ return void 0;
1102
+ }
1103
+
1104
+ // src/vite-plugin/agent-middleware.ts
1105
+ var PREFIX2 = "/api/agents/";
1106
+ function createAgentMiddleware(vite, projectRoot, csrfMode = "strict") {
1107
+ const loadModule = createViteLoader(vite);
1108
+ return (req, res, next) => {
1109
+ void (async () => {
1110
+ const url = req.url ?? "";
1111
+ if (!url.startsWith(PREFIX2)) {
1112
+ next();
1113
+ return;
1114
+ }
1115
+ const requestId = randomUUID2();
1116
+ const start = Date.now();
1117
+ res.setHeader("x-request-id", requestId);
1118
+ const urlPath = url.split("?")[0];
1119
+ const agent = scanAgents(projectRoot).find((a) => a.agentPath === urlPath);
1120
+ if (!agent) {
1121
+ next();
1122
+ return;
1123
+ }
1124
+ const method = (req.method ?? "POST").toUpperCase();
1125
+ if (method !== "POST") {
1126
+ sendError(
1127
+ res,
1128
+ "METHOD_NOT_ALLOWED",
1129
+ "Agent endpoints accept POST",
1130
+ 405,
1131
+ void 0,
1132
+ requestId
1133
+ );
1134
+ logRequest({ method, url, status: 405, duration: Date.now() - start, requestId });
1135
+ return;
1136
+ }
1137
+ try {
1138
+ const mod = await loadModule(agent.filePath);
1139
+ const apiKey = resolveProvider().apiKey;
1140
+ const request = incomingMessageToWebRequest(req);
1141
+ const response = await mountAgent(mod, request, apiKey, agent.filePath, csrfMode);
1142
+ await writeWebResponseToServerResponse(response, res);
1143
+ } catch (err) {
1144
+ sendError(
1145
+ res,
1146
+ "INTERNAL",
1147
+ err instanceof Error ? err.message : "Agent handler failed",
1148
+ 500,
1149
+ void 0,
1150
+ requestId
1151
+ );
1152
+ }
1153
+ logRequest({ method, url, status: res.statusCode, duration: Date.now() - start, requestId });
1154
+ })();
1155
+ };
1156
+ }
1157
+
977
1158
  // src/vite-plugin/api-middleware.ts
978
1159
  function shouldBypassApiMiddleware(url, prefixes) {
979
1160
  if (!url.startsWith("/api/")) return true;
@@ -1303,6 +1484,7 @@ async function runConfigureServer(server, ctx) {
1303
1484
  disallowed: ctx.disallowed
1304
1485
  })
1305
1486
  );
1487
+ server.middlewares.use(createAgentMiddleware(server, ctx.projectRoot, ctx.csrfMode));
1306
1488
  const servicesProxyPrefixes = ctx.services && Object.keys(ctx.services).length > 0 ? Object.values(ctx.services).map((s) => s.proxy) : [];
1307
1489
  const csrfReadinessStore = ctx.csrfReadinessStoreOverride ?? new CsrfReadinessStore();
1308
1490
  server.middlewares.use(
@@ -1348,7 +1530,7 @@ async function runConfigureServer(server, ctx) {
1348
1530
  server.watcher.on("unlink", handleRouteChange);
1349
1531
  if (ctx.resolvedOpenApi !== void 0) {
1350
1532
  const openApiCfg = ctx.resolvedOpenApi;
1351
- const { reEmitOpenApi } = await import("./dev-emit-O4EGOSNV.js");
1533
+ const { reEmitOpenApi } = await import("./dev-emit-QH2YGZXN.js");
1352
1534
  const openApiServerDir = resolve6(ctx.projectRoot, "server");
1353
1535
  const openApiDistDir = resolve6(ctx.projectRoot, ctx.resolvedDistDir);
1354
1536
  const isRouteFileForOpenApi = (file) => file.startsWith(openApiServerDir) && /\.(ts|tsx|js|mjs)$/.test(file);
@@ -2334,17 +2516,26 @@ async function theoPluginAsync(rootOrOptions) {
2334
2516
  })
2335
2517
  );
2336
2518
  }
2337
- const { appTypedClientPlugin } = await import("./app-typed-client-5GYEOYP3.js");
2519
+ const { appTypedClientPlugin } = await import("./app-typed-client-7PBFWZUE.js");
2338
2520
  const appClientPlugin = appTypedClientPlugin({
2339
2521
  cwd: projectRoot,
2340
2522
  serverDir: resolve9(projectRoot, "server"),
2341
2523
  distDir: resolve9(projectRoot, ".theokit")
2342
2524
  });
2343
- const { actionsVirtualModule } = await import("./actions-virtual-module-PNPRCEOS.js");
2525
+ const { actionsVirtualModule } = await import("./actions-virtual-module-EIPXX4ZB.js");
2344
2526
  const actionsPlugin = actionsVirtualModule({
2345
2527
  serverDir: resolve9(projectRoot, "server"),
2346
2528
  distDir: resolve9(projectRoot, ".theokit")
2347
2529
  });
2530
+ const { agentsTypedClientPlugin } = await import("./agents-typed-client-SAWAAH7K.js");
2531
+ const { generateManifest } = await import("./internal-api-4YTJDITC.js");
2532
+ const agentsClientPlugin = agentsTypedClientPlugin({
2533
+ projectRoot,
2534
+ distDir: resolve9(projectRoot, ".theokit"),
2535
+ // Agents live at <projectRoot>/agents; generateManifest scans them via the server dir's
2536
+ // parent, which is projectRoot for the canonical layout.
2537
+ scanManifest: () => generateManifest(resolve9(projectRoot, "server"), projectRoot)
2538
+ });
2348
2539
  const { serverRoutesHmrPlugin } = await import("./server-routes-hmr-PBHSKCQJ.js");
2349
2540
  const routesHmrPlugin = serverRoutesHmrPlugin({
2350
2541
  serverDir: resolve9(projectRoot, "server")
@@ -2355,6 +2546,7 @@ async function theoPluginAsync(rootOrOptions) {
2355
2546
  ...servicesPlugins,
2356
2547
  appClientPlugin,
2357
2548
  actionsPlugin,
2549
+ agentsClientPlugin,
2358
2550
  routesHmrPlugin
2359
2551
  ];
2360
2552
  }
@@ -2514,4 +2706,4 @@ export {
2514
2706
  theoPluginAsync,
2515
2707
  theoPlugin
2516
2708
  };
2517
- //# sourceMappingURL=chunk-7CBRKNQA.js.map
2709
+ //# sourceMappingURL=chunk-RYTZYFSD.js.map