kernl 0.1.1

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 (257) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +53 -0
  3. package/LICENSE +201 -0
  4. package/dist/agent.d.ts +43 -0
  5. package/dist/agent.d.ts.map +1 -0
  6. package/dist/agent.js +130 -0
  7. package/dist/context.d.ts +70 -0
  8. package/dist/context.d.ts.map +1 -0
  9. package/dist/context.js +111 -0
  10. package/dist/env.d.ts +45 -0
  11. package/dist/env.d.ts.map +1 -0
  12. package/dist/env.js +31 -0
  13. package/dist/error.d.ts +1 -0
  14. package/dist/error.d.ts.map +1 -0
  15. package/dist/error.js +1 -0
  16. package/dist/guardrail.d.ts +178 -0
  17. package/dist/guardrail.d.ts.map +1 -0
  18. package/dist/guardrail.js +34 -0
  19. package/dist/index.d.ts +4 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +2 -0
  22. package/dist/kernel.d.ts +7 -0
  23. package/dist/kernel.d.ts.map +1 -0
  24. package/dist/kernel.js +7 -0
  25. package/dist/kernl.d.ts +18 -0
  26. package/dist/kernl.d.ts.map +1 -0
  27. package/dist/kernl.js +16 -0
  28. package/dist/lib/env.d.ts +43 -0
  29. package/dist/lib/env.d.ts.map +1 -0
  30. package/dist/lib/env.js +29 -0
  31. package/dist/lib/error.d.ts +88 -0
  32. package/dist/lib/error.d.ts.map +1 -0
  33. package/dist/lib/error.js +117 -0
  34. package/dist/lib/logger.d.ts +36 -0
  35. package/dist/lib/logger.d.ts.map +1 -0
  36. package/dist/lib/logger.js +43 -0
  37. package/dist/lib/serde/__tests__/codec.test.d.ts +2 -0
  38. package/dist/lib/serde/__tests__/codec.test.d.ts.map +1 -0
  39. package/dist/lib/serde/__tests__/codec.test.js +75 -0
  40. package/dist/lib/serde/codec.d.ts +12 -0
  41. package/dist/lib/serde/codec.d.ts.map +1 -0
  42. package/dist/lib/serde/codec.js +54 -0
  43. package/dist/lib/serde/json.d.ts +8 -0
  44. package/dist/lib/serde/json.d.ts.map +1 -0
  45. package/dist/lib/serde/json.js +13 -0
  46. package/dist/lib/serde/thread.d.ts +1 -0
  47. package/dist/lib/serde/thread.d.ts.map +1 -0
  48. package/dist/lib/serde/thread.js +172 -0
  49. package/dist/lib/serde/tool.d.ts +36 -0
  50. package/dist/lib/serde/tool.d.ts.map +1 -0
  51. package/dist/lib/serde/tool.js +1 -0
  52. package/dist/lib/utils.d.ts +19 -0
  53. package/dist/lib/utils.d.ts.map +1 -0
  54. package/dist/lib/utils.js +41 -0
  55. package/dist/lifecycle.d.ts +133 -0
  56. package/dist/lifecycle.d.ts.map +1 -0
  57. package/dist/lifecycle.js +29 -0
  58. package/dist/logger.d.ts +36 -0
  59. package/dist/logger.d.ts.map +1 -0
  60. package/dist/logger.js +43 -0
  61. package/dist/mcp/__tests__/base.test.d.ts +2 -0
  62. package/dist/mcp/__tests__/base.test.d.ts.map +1 -0
  63. package/dist/mcp/__tests__/base.test.js +268 -0
  64. package/dist/mcp/__tests__/fixtures/echo-server.d.ts +3 -0
  65. package/dist/mcp/__tests__/fixtures/echo-server.d.ts.map +1 -0
  66. package/dist/mcp/__tests__/fixtures/echo-server.js +92 -0
  67. package/dist/mcp/__tests__/fixtures/math-server.d.ts +3 -0
  68. package/dist/mcp/__tests__/fixtures/math-server.d.ts.map +1 -0
  69. package/dist/mcp/__tests__/fixtures/math-server.js +98 -0
  70. package/dist/mcp/__tests__/fixtures/server.d.ts +3 -0
  71. package/dist/mcp/__tests__/fixtures/server.d.ts.map +1 -0
  72. package/dist/mcp/__tests__/fixtures/server.js +162 -0
  73. package/dist/mcp/__tests__/fixtures/test-server.d.ts +3 -0
  74. package/dist/mcp/__tests__/fixtures/test-server.d.ts.map +1 -0
  75. package/dist/mcp/__tests__/fixtures/test-server.js +163 -0
  76. package/dist/mcp/__tests__/fixtures/utils.d.ts +17 -0
  77. package/dist/mcp/__tests__/fixtures/utils.d.ts.map +1 -0
  78. package/dist/mcp/__tests__/fixtures/utils.js +42 -0
  79. package/dist/mcp/__tests__/integration.test.d.ts +2 -0
  80. package/dist/mcp/__tests__/integration.test.d.ts.map +1 -0
  81. package/dist/mcp/__tests__/integration.test.js +360 -0
  82. package/dist/mcp/__tests__/stdio.test.d.ts +2 -0
  83. package/dist/mcp/__tests__/stdio.test.d.ts.map +1 -0
  84. package/dist/mcp/__tests__/stdio.test.js +180 -0
  85. package/dist/mcp/__tests__/test-utils.d.ts +17 -0
  86. package/dist/mcp/__tests__/test-utils.d.ts.map +1 -0
  87. package/dist/mcp/__tests__/test-utils.js +42 -0
  88. package/dist/mcp/__tests__/utils.test.d.ts +2 -0
  89. package/dist/mcp/__tests__/utils.test.d.ts.map +1 -0
  90. package/dist/mcp/__tests__/utils.test.js +300 -0
  91. package/dist/mcp/base.d.ts +88 -0
  92. package/dist/mcp/base.d.ts.map +1 -0
  93. package/dist/mcp/base.js +68 -0
  94. package/dist/mcp/http.d.ts +34 -0
  95. package/dist/mcp/http.d.ts.map +1 -0
  96. package/dist/mcp/http.js +100 -0
  97. package/dist/mcp/node.d.ts +60 -0
  98. package/dist/mcp/node.d.ts.map +1 -0
  99. package/dist/mcp/node.js +297 -0
  100. package/dist/mcp/sse.d.ts +34 -0
  101. package/dist/mcp/sse.d.ts.map +1 -0
  102. package/dist/mcp/sse.js +97 -0
  103. package/dist/mcp/stdio.d.ts +32 -0
  104. package/dist/mcp/stdio.d.ts.map +1 -0
  105. package/dist/mcp/stdio.js +96 -0
  106. package/dist/mcp/types.d.ts +172 -0
  107. package/dist/mcp/types.d.ts.map +1 -0
  108. package/dist/mcp/types.js +16 -0
  109. package/dist/mcp/utils.d.ts +23 -0
  110. package/dist/mcp/utils.d.ts.map +1 -0
  111. package/dist/mcp/utils.js +44 -0
  112. package/dist/model.d.ts +175 -0
  113. package/dist/model.d.ts.map +1 -0
  114. package/dist/model.js +1 -0
  115. package/dist/providers/ai.d.ts +1 -0
  116. package/dist/providers/ai.d.ts.map +1 -0
  117. package/dist/providers/ai.js +1 -0
  118. package/dist/providers/default.d.ts +16 -0
  119. package/dist/providers/default.d.ts.map +1 -0
  120. package/dist/providers/default.js +17 -0
  121. package/dist/providers/registry.d.ts +1 -0
  122. package/dist/providers/registry.d.ts.map +1 -0
  123. package/dist/providers/registry.js +1 -0
  124. package/dist/sched/scheduler.d.ts +20 -0
  125. package/dist/sched/scheduler.d.ts.map +1 -0
  126. package/dist/sched/scheduler.js +1 -0
  127. package/dist/sched/task.d.ts +92 -0
  128. package/dist/sched/task.d.ts.map +1 -0
  129. package/dist/sched/task.js +102 -0
  130. package/dist/serde/__tests__/codec.test.d.ts +2 -0
  131. package/dist/serde/__tests__/codec.test.d.ts.map +1 -0
  132. package/dist/serde/__tests__/codec.test.js +75 -0
  133. package/dist/serde/codec.d.ts +12 -0
  134. package/dist/serde/codec.d.ts.map +1 -0
  135. package/dist/serde/codec.js +54 -0
  136. package/dist/serde/json.d.ts +8 -0
  137. package/dist/serde/json.d.ts.map +1 -0
  138. package/dist/serde/json.js +13 -0
  139. package/dist/serde/thread.d.ts +687 -0
  140. package/dist/serde/thread.d.ts.map +1 -0
  141. package/dist/serde/thread.js +158 -0
  142. package/dist/serde/tool.d.ts +36 -0
  143. package/dist/serde/tool.d.ts.map +1 -0
  144. package/dist/serde/tool.js +1 -0
  145. package/dist/session.d.ts +1 -0
  146. package/dist/session.d.ts.map +1 -0
  147. package/dist/session.js +1 -0
  148. package/dist/task.d.ts +87 -0
  149. package/dist/task.d.ts.map +1 -0
  150. package/dist/task.js +97 -0
  151. package/dist/thread/__tests__/mock.d.ts +28 -0
  152. package/dist/thread/__tests__/mock.d.ts.map +1 -0
  153. package/dist/thread/__tests__/mock.js +74 -0
  154. package/dist/thread/__tests__/thread.test.d.ts +2 -0
  155. package/dist/thread/__tests__/thread.test.d.ts.map +1 -0
  156. package/dist/thread/__tests__/thread.test.js +1412 -0
  157. package/dist/thread/index.d.ts +2 -0
  158. package/dist/thread/index.d.ts.map +1 -0
  159. package/dist/thread/index.js +1 -0
  160. package/dist/thread/thread.d.ts +66 -0
  161. package/dist/thread/thread.d.ts.map +1 -0
  162. package/dist/thread/thread.js +472 -0
  163. package/dist/thread/utils.d.ts +19 -0
  164. package/dist/thread/utils.d.ts.map +1 -0
  165. package/dist/thread/utils.js +50 -0
  166. package/dist/tool/__tests__/fixtures.d.ts +45 -0
  167. package/dist/tool/__tests__/fixtures.d.ts.map +1 -0
  168. package/dist/tool/__tests__/fixtures.js +97 -0
  169. package/dist/tool/__tests__/tool.test.d.ts +2 -0
  170. package/dist/tool/__tests__/tool.test.d.ts.map +1 -0
  171. package/dist/tool/__tests__/tool.test.js +172 -0
  172. package/dist/tool/__tests__/toolkit.test.d.ts +2 -0
  173. package/dist/tool/__tests__/toolkit.test.d.ts.map +1 -0
  174. package/dist/tool/__tests__/toolkit.test.js +134 -0
  175. package/dist/tool/index.d.ts +4 -0
  176. package/dist/tool/index.d.ts.map +1 -0
  177. package/dist/tool/index.js +2 -0
  178. package/dist/tool/mcp.d.ts +75 -0
  179. package/dist/tool/mcp.d.ts.map +1 -0
  180. package/dist/tool/mcp.js +111 -0
  181. package/dist/tool/tool.d.ts +95 -0
  182. package/dist/tool/tool.d.ts.map +1 -0
  183. package/dist/tool/tool.js +176 -0
  184. package/dist/tool/toolkit.d.ts +121 -0
  185. package/dist/tool/toolkit.d.ts.map +1 -0
  186. package/dist/tool/toolkit.js +180 -0
  187. package/dist/tool/types.d.ts +187 -0
  188. package/dist/tool/types.d.ts.map +1 -0
  189. package/dist/tool/types.js +1 -0
  190. package/dist/tools.d.ts +362 -0
  191. package/dist/tools.d.ts.map +1 -0
  192. package/dist/tools.js +220 -0
  193. package/dist/trace/processor.d.ts +1 -0
  194. package/dist/trace/processor.d.ts.map +1 -0
  195. package/dist/trace/processor.js +1 -0
  196. package/dist/trace/traces.d.ts +1 -0
  197. package/dist/trace/traces.d.ts.map +1 -0
  198. package/dist/trace/traces.js +73 -0
  199. package/dist/trace/utils.d.ts +22 -0
  200. package/dist/trace/utils.d.ts.map +1 -0
  201. package/dist/trace/utils.js +30 -0
  202. package/dist/types/agent.d.ts +91 -0
  203. package/dist/types/agent.d.ts.map +1 -0
  204. package/dist/types/agent.js +1 -0
  205. package/dist/types/proto.d.ts +1551 -0
  206. package/dist/types/proto.d.ts.map +1 -0
  207. package/dist/types/proto.js +531 -0
  208. package/dist/types/thread.d.ts +71 -0
  209. package/dist/types/thread.d.ts.map +1 -0
  210. package/dist/types/thread.js +5 -0
  211. package/dist/usage.d.ts +43 -0
  212. package/dist/usage.d.ts.map +1 -0
  213. package/dist/usage.js +61 -0
  214. package/package.json +52 -0
  215. package/src/agent.ts +203 -0
  216. package/src/context.ts +265 -0
  217. package/src/guardrail.ts +277 -0
  218. package/src/index.ts +3 -0
  219. package/src/kernl.ts +22 -0
  220. package/src/lib/env.ts +36 -0
  221. package/src/lib/error.ts +158 -0
  222. package/src/lib/logger.ts +78 -0
  223. package/src/lib/serde/json.ts +18 -0
  224. package/src/lib/serde/thread.ts +188 -0
  225. package/src/lifecycle.ts +181 -0
  226. package/src/mcp/__tests__/base.test.ts +344 -0
  227. package/src/mcp/__tests__/fixtures/server.ts +179 -0
  228. package/src/mcp/__tests__/fixtures/utils.ts +58 -0
  229. package/src/mcp/__tests__/integration.test.ts +447 -0
  230. package/src/mcp/__tests__/stdio.test.ts +236 -0
  231. package/src/mcp/__tests__/utils.test.ts +360 -0
  232. package/src/mcp/base.ts +162 -0
  233. package/src/mcp/http.ts +147 -0
  234. package/src/mcp/sse.ts +137 -0
  235. package/src/mcp/stdio.ts +136 -0
  236. package/src/mcp/types.ts +202 -0
  237. package/src/mcp/utils.ts +62 -0
  238. package/src/task.ts +119 -0
  239. package/src/thread/__tests__/mock.ts +95 -0
  240. package/src/thread/__tests__/thread.test.ts +1574 -0
  241. package/src/thread/index.ts +1 -0
  242. package/src/thread/thread.ts +611 -0
  243. package/src/thread/utils.ts +67 -0
  244. package/src/tool/__tests__/fixtures.ts +106 -0
  245. package/src/tool/__tests__/tool.test.ts +235 -0
  246. package/src/tool/__tests__/toolkit.test.ts +174 -0
  247. package/src/tool/index.ts +10 -0
  248. package/src/tool/tool.ts +264 -0
  249. package/src/tool/toolkit.ts +234 -0
  250. package/src/tool/types.ts +243 -0
  251. package/src/trace/processor.ts +0 -0
  252. package/src/trace/traces.ts +86 -0
  253. package/src/trace/utils.ts +38 -0
  254. package/src/types/agent.ts +145 -0
  255. package/src/types/thread.ts +86 -0
  256. package/tsconfig.json +13 -0
  257. package/vitest.config.ts +14 -0
@@ -0,0 +1,43 @@
1
+ import pino from "pino";
2
+ import { env } from "./env";
3
+ /**
4
+ * By default we don't log LLM inputs/outputs, to prevent exposing sensitive data.
5
+ * Set KERNL_LOG_MODEL_DATA=true to enable.
6
+ */
7
+ const dontLogModelData = !env.KERNL_LOG_MODEL_DATA;
8
+ /**
9
+ * By default we don't log tool inputs/outputs, to prevent exposing sensitive data.
10
+ * Set KERNL_LOG_TOOL_DATA=true to enable.
11
+ */
12
+ const dontLogToolData = !env.KERNL_LOG_TOOL_DATA;
13
+ /**
14
+ * Base pino logger instance
15
+ */
16
+ const base = pino({
17
+ level: env.LOG_LEVEL,
18
+ });
19
+ /**
20
+ * Get a logger for a given namespace.
21
+ *
22
+ * @param namespace - the namespace to use for the logger (e.g., 'kernl:core', 'kernl:agent').
23
+ * @returns A logger object with all pino log levels and sensitive data flags.
24
+ */
25
+ export function getLogger(namespace = "kernl") {
26
+ const child = base.child({ namespace });
27
+ return {
28
+ namespace,
29
+ trace: child.trace.bind(child),
30
+ debug: child.debug.bind(child),
31
+ info: child.info.bind(child),
32
+ warn: child.warn.bind(child),
33
+ error: child.error.bind(child),
34
+ fatal: child.fatal.bind(child),
35
+ dontLogModelData,
36
+ dontLogToolData,
37
+ };
38
+ }
39
+ /**
40
+ * Default logger instance for the core library.
41
+ */
42
+ export const logger = getLogger("kernl");
43
+ export default logger;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=codec.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.test.d.ts","sourceRoot":"","sources":["../../../../src/lib/serde/__tests__/codec.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { z } from "zod";
3
+ import { json } from "../codec";
4
+ describe("json codec", () => {
5
+ it("should parse valid JSON and validate against schema", () => {
6
+ const schema = z.object({
7
+ name: z.string(),
8
+ age: z.number(),
9
+ });
10
+ const codec = json(schema);
11
+ const result = codec.decode('{"name": "Alice", "age": 30}');
12
+ expect(result).toEqual({ name: "Alice", age: 30 });
13
+ });
14
+ it("should reject invalid JSON syntax", () => {
15
+ const schema = z.object({
16
+ name: z.string(),
17
+ });
18
+ const codec = json(schema);
19
+ expect(() => {
20
+ codec.decode('{"name": "Alice"');
21
+ }).toThrow();
22
+ });
23
+ it("should reject valid JSON that doesn't match schema", () => {
24
+ const schema = z.object({
25
+ name: z.string(),
26
+ age: z.number(),
27
+ });
28
+ const codec = json(schema);
29
+ // Valid JSON but age is a string, not a number
30
+ expect(() => {
31
+ codec.decode('{"name": "Alice", "age": "30"}');
32
+ }).toThrow();
33
+ });
34
+ it("should reject JSON missing required fields", () => {
35
+ const schema = z.object({
36
+ name: z.string(),
37
+ age: z.number(),
38
+ });
39
+ const codec = json(schema);
40
+ // Valid JSON but missing age field
41
+ expect(() => {
42
+ codec.decode('{"name": "Alice"}');
43
+ }).toThrow();
44
+ });
45
+ it("should handle nested objects", () => {
46
+ const schema = z.object({
47
+ user: z.object({
48
+ name: z.string(),
49
+ email: z.string().email(),
50
+ }),
51
+ metadata: z.object({
52
+ createdAt: z.string(),
53
+ }),
54
+ });
55
+ const codec = json(schema);
56
+ const result = codec.decode('{"user": {"name": "Bob", "email": "bob@example.com"}, "metadata": {"createdAt": "2024-01-01"}}');
57
+ expect(result).toEqual({
58
+ user: { name: "Bob", email: "bob@example.com" },
59
+ metadata: { createdAt: "2024-01-01" },
60
+ });
61
+ });
62
+ it("should reject nested objects that don't match schema", () => {
63
+ const schema = z.object({
64
+ user: z.object({
65
+ name: z.string(),
66
+ email: z.string().email(),
67
+ }),
68
+ });
69
+ const codec = json(schema);
70
+ // Invalid email format
71
+ expect(() => {
72
+ codec.decode('{"user": {"name": "Bob", "email": "not-an-email"}}');
73
+ }).toThrow();
74
+ });
75
+ });
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ export declare const stringToNumber: z.ZodCodec<z.ZodString, z.ZodNumber>;
3
+ export declare const stringToInt: z.ZodCodec<z.ZodString, z.ZodInt>;
4
+ export declare const isotime: z.ZodCodec<z.ZodISODateTime, z.ZodDate>;
5
+ export declare const epochsec: z.ZodCodec<z.ZodInt, z.ZodDate>;
6
+ export declare const epochms: z.ZodCodec<z.ZodInt, z.ZodDate>;
7
+ export declare const json: <T extends z.core.$ZodType>(schema: T) => z.ZodCodec<z.ZodString, T>;
8
+ export declare const stringToURL: z.ZodCodec<z.ZodURL, z.ZodCustom<import("url").URL, import("url").URL>>;
9
+ export declare const stringToHttpURL: z.ZodCodec<z.ZodURL, z.ZodCustom<import("url").URL, import("url").URL>>;
10
+ export declare const base64ToBytes: z.ZodCodec<z.ZodBase64, z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
11
+ export declare const base64urlToBytes: z.ZodCodec<z.ZodBase64URL, z.ZodCustom<Uint8Array<ArrayBuffer>, Uint8Array<ArrayBuffer>>>;
12
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../../src/lib/serde/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,cAAc,sCAO1B,CAAC;AAEF,eAAO,MAAM,WAAW,mCAOvB,CAAC;AAEF,eAAO,MAAM,OAAO,yCAGlB,CAAC;AAEH,eAAO,MAAM,QAAQ,iCAGnB,CAAC;AAEH,eAAO,MAAM,OAAO,iCAGlB,CAAC;AAEH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,+BAgBrD,CAAC;AAEL,eAAO,MAAM,WAAW,yEAGtB,CAAC;AAEH,eAAO,MAAM,eAAe,yEAG1B,CAAC;AAEH,eAAO,MAAM,aAAa,wFAGxB,CAAC;AAEH,eAAO,MAAM,gBAAgB,2FAO5B,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { z } from "zod";
2
+ export const stringToNumber = z.codec(z.string().regex(z.regexes.number), z.number(), {
3
+ decode: (str) => Number.parseFloat(str),
4
+ encode: (num) => num.toString(),
5
+ });
6
+ export const stringToInt = z.codec(z.string().regex(z.regexes.integer), z.int(), {
7
+ decode: (str) => Number.parseInt(str, 10),
8
+ encode: (num) => num.toString(),
9
+ });
10
+ export const isotime = z.codec(z.iso.datetime(), z.date(), {
11
+ decode: (isoString) => new Date(isoString),
12
+ encode: (date) => date.toISOString(),
13
+ });
14
+ export const epochsec = z.codec(z.int().min(0), z.date(), {
15
+ decode: (seconds) => new Date(seconds * 1000),
16
+ encode: (date) => Math.floor(date.getTime() / 1000),
17
+ });
18
+ export const epochms = z.codec(z.int().min(0), z.date(), {
19
+ decode: (millis) => new Date(millis),
20
+ encode: (date) => date.getTime(),
21
+ });
22
+ export const json = (schema) => z.codec(z.string(), schema, {
23
+ decode: (jsonString, ctx) => {
24
+ try {
25
+ return JSON.parse(jsonString);
26
+ }
27
+ catch (err) {
28
+ ctx.issues.push({
29
+ code: "invalid_format",
30
+ format: "json",
31
+ input: jsonString,
32
+ message: err.message,
33
+ });
34
+ return z.NEVER;
35
+ }
36
+ },
37
+ encode: (value) => JSON.stringify(value),
38
+ });
39
+ export const stringToURL = z.codec(z.url(), z.instanceof(URL), {
40
+ decode: (urlString) => new URL(urlString),
41
+ encode: (url) => url.href,
42
+ });
43
+ export const stringToHttpURL = z.codec(z.httpUrl(), z.instanceof(URL), {
44
+ decode: (urlString) => new URL(urlString),
45
+ encode: (url) => url.href,
46
+ });
47
+ export const base64ToBytes = z.codec(z.base64(), z.instanceof(Uint8Array), {
48
+ decode: (base64String) => z.util.base64ToUint8Array(base64String),
49
+ encode: (bytes) => z.util.uint8ArrayToBase64(bytes),
50
+ });
51
+ export const base64urlToBytes = z.codec(z.base64url(), z.instanceof(Uint8Array), {
52
+ decode: (base64urlString) => z.util.base64urlToUint8Array(base64urlString),
53
+ encode: (bytes) => z.util.uint8ArrayToBase64url(bytes),
54
+ });
@@ -0,0 +1,8 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Represents a JSON-serializable value that can be safely stringified and sent to the model.
4
+ * Recursive type that allows nested structures.
5
+ */
6
+ export declare const JSONValue: z.ZodType<unknown>;
7
+ export type JSONValue = z.infer<typeof JSONValue>;
8
+ //# sourceMappingURL=json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../src/lib/serde/json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CASxC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Represents a JSON-serializable value that can be safely stringified and sent to the model.
4
+ * Recursive type that allows nested structures.
5
+ */
6
+ export const JSONValue = z.lazy(() => z.union([
7
+ z.string(),
8
+ z.number(),
9
+ z.boolean(),
10
+ z.null(),
11
+ z.array(JSONValue),
12
+ z.record(z.string(), JSONValue),
13
+ ]));
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=thread.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../../src/lib/serde/thread.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ // import { z } from "zod";
3
+ // import * as events from "../../types/thread";
4
+ // /**
5
+ // * Utilities and schemas for serializing the run-state so that it can be paused / resumed later.
6
+ // *
7
+ // * (TODO): should be able to define this as a codec for the ThreadState schema
8
+ // */
9
+ // /**
10
+ // * The schema version of the serialized run state. This is used to ensure that the serialized
11
+ // * run state is compatible with the current version of the SDK.
12
+ // * If anything in this schema changes, the version will have to be incremented.
13
+ // */
14
+ // export const CURRENT_SCHEMA_VERSION = "1.0" as const;
15
+ // const $schemaVersion = z.literal(CURRENT_SCHEMA_VERSION);
16
+ // const serializedAgentSchema = z.object({
17
+ // id: z.string(),
18
+ // name: z.string().optional(),
19
+ // });
20
+ // const serializedSpanBase = z.object({
21
+ // object: z.literal("trace.span"),
22
+ // id: z.string(),
23
+ // trace_id: z.string(),
24
+ // parent_id: z.string().nullable(),
25
+ // started_at: z.string().nullable(),
26
+ // ended_at: z.string().nullable(),
27
+ // error: z
28
+ // .object({
29
+ // message: z.string(),
30
+ // data: z.record(z.string(), z.any()).optional(),
31
+ // })
32
+ // .nullable(),
33
+ // span_data: z.record(z.string(), z.any()),
34
+ // });
35
+ // type SerializedSpanType = z.infer<typeof serializedSpanBase> & {
36
+ // previous_span?: SerializedSpanType;
37
+ // };
38
+ // const SerializedSpan: z.ZodType<SerializedSpanType> = serializedSpanBase.extend(
39
+ // {
40
+ // previous_span: z.lazy(() => SerializedSpan).optional(),
41
+ // },
42
+ // );
43
+ // const usageSchema = z.object({
44
+ // requests: z.number(),
45
+ // inputTokens: z.number(),
46
+ // outputTokens: z.number(),
47
+ // totalTokens: z.number(),
48
+ // });
49
+ // const modelResponseSchema = z.object({
50
+ // usage: usageSchema,
51
+ // events: z.array(events.ThreadEvent),
52
+ // responseId: z.string().optional(),
53
+ // providerData: z.record(z.string(), z.any()).optional(),
54
+ // });
55
+ // const itemSchema = z.discriminatedUnion("kind", [
56
+ // z.object({
57
+ // kind: z.literal("message"),
58
+ // rawItem: events.AssistantMessage,
59
+ // agent: serializedAgentSchema,
60
+ // }),
61
+ // z.object({
62
+ // kind: z.literal("tool-call"),
63
+ // // rawItem: events.ToolCall.or(events.HostedToolCall),
64
+ // rawItem: events.ToolCall,
65
+ // agent: serializedAgentSchema,
66
+ // }),
67
+ // z.object({
68
+ // kind: z.literal("tool-result"),
69
+ // rawItem: events.ToolResultEvent,
70
+ // agent: serializedAgentSchema,
71
+ // output: z.string(),
72
+ // }),
73
+ // z.object({
74
+ // kind: z.literal("reasoning"),
75
+ // rawItem: events.Reasoning,
76
+ // agent: serializedAgentSchema,
77
+ // }),
78
+ // ]);
79
+ // const serializedTraceSchema = z.object({
80
+ // object: z.literal("trace"),
81
+ // id: z.string(),
82
+ // workflow_name: z.string(),
83
+ // group_id: z.string().nullable(),
84
+ // metadata: z.record(z.string(), z.any()),
85
+ // });
86
+ // const serializedProcessedResponseSchema = z.object({
87
+ // newItems: z.array(itemSchema),
88
+ // toolsUsed: z.array(z.string()),
89
+ // functions: z.array(
90
+ // z.object({
91
+ // toolCall: z.any(),
92
+ // tool: z.any(),
93
+ // }),
94
+ // ),
95
+ // mcpApprovalRequests: z
96
+ // .array(
97
+ // z.object({
98
+ // requestItem: z.object({
99
+ // // protocol.HostedToolCallItem
100
+ // rawItem: z.object({
101
+ // type: z.literal("hosted_tool_call"),
102
+ // name: z.string(),
103
+ // arguments: z.string().optional(),
104
+ // status: z.string().optional(),
105
+ // output: z.string().optional(),
106
+ // // this always exists but marked as optional for early version compatibility; when releasing 1.0, we can remove the nullable and optional
107
+ // providerData: z.record(z.string(), z.any()).nullable().optional(),
108
+ // }),
109
+ // }),
110
+ // // HostedMCPTool
111
+ // mcpTool: z.object({
112
+ // type: z.literal("hosted_tool"),
113
+ // name: z.literal("hosted_mcp"),
114
+ // providerData: z.record(z.string(), z.any()),
115
+ // }),
116
+ // }),
117
+ // )
118
+ // .optional(),
119
+ // });
120
+ // const guardrailFunctionOutputSchema = z.object({
121
+ // tripwireTriggered: z.boolean(),
122
+ // outputInfo: z.any(),
123
+ // });
124
+ // const inputGuardrailResultSchema = z.object({
125
+ // guardrail: z.object({
126
+ // type: z.literal("input"),
127
+ // name: z.string(),
128
+ // }),
129
+ // output: guardrailFunctionOutputSchema,
130
+ // });
131
+ // const outputGuardrailResultSchema = z.object({
132
+ // guardrail: z.object({
133
+ // type: z.literal("output"),
134
+ // name: z.string(),
135
+ // }),
136
+ // agentOutput: z.any(),
137
+ // agent: serializedAgentSchema,
138
+ // output: guardrailFunctionOutputSchema,
139
+ // });
140
+ // // (TODO): define z.codec
141
+ // export const SerializedThread = z.object({
142
+ // $schemaVersion,
143
+ // currentTurn: z.number(),
144
+ // currentAgent: serializedAgentSchema, // (TODO): in our case we probably don't need to serialize the whole agent - an ID would suffice
145
+ // originalInput: z.string().or(z.array(events.ThreadEvent)),
146
+ // modelResponses: z.array(modelResponseSchema),
147
+ // context: z.object({
148
+ // usage: usageSchema, // (TODO): move to stats
149
+ // // (TODO): belongs elsewhere
150
+ // approvals: z.record(
151
+ // z.string(),
152
+ // z.object({
153
+ // approved: z.array(z.string()).or(z.boolean()),
154
+ // rejected: z.array(z.string()).or(z.boolean()),
155
+ // }),
156
+ // ),
157
+ // context: z.record(z.string(), z.any()),
158
+ // }),
159
+ // toolUseTracker: z.record(z.string(), z.array(z.string())),
160
+ // maxTurns: z.number(),
161
+ // currentAgentSpan: SerializedSpan.nullable().optional(),
162
+ // noActiveAgentRun: z.boolean(),
163
+ // inputGuardrailResults: z.array(inputGuardrailResultSchema),
164
+ // outputGuardrailResults: z.array(outputGuardrailResultSchema),
165
+ // // (TODO): currentStep: nextStepSchema.optional(),
166
+ // lastModelResponse: modelResponseSchema.optional(),
167
+ // generatedItems: z.array(itemSchema),
168
+ // lastProcessedResponse: serializedProcessedResponseSchema.optional(),
169
+ // currentTurnPersistedItemCount: z.number().int().min(0).optional(),
170
+ // trace: serializedTraceSchema.nullable(),
171
+ // });
172
+ // export type SerializedThread = z.infer<typeof SerializedThread>;
@@ -0,0 +1,36 @@
1
+ import type { ToolInputParameters } from "../../tool/types";
2
+ /**
3
+ * Serialized function tool for model requests
4
+ */
5
+ export type SerializedFunctionTool = {
6
+ /**
7
+ * The type of the tool.
8
+ */
9
+ type: "function";
10
+ /**
11
+ * The name of the tool.
12
+ */
13
+ name?: string;
14
+ /**
15
+ * The description of the tool that helps the model to understand when to use the tool
16
+ */
17
+ description: string;
18
+ /**
19
+ * A JSON schema describing the parameters of the tool.
20
+ */
21
+ parameters: ToolInputParameters;
22
+ };
23
+ /**
24
+ * Serialized hosted tool for model requests
25
+ */
26
+ export type SerializedHostedTool = {
27
+ type: "hosted-tool";
28
+ id: string;
29
+ name?: string;
30
+ providerData?: Record<string, any>;
31
+ };
32
+ /**
33
+ * Union of all serialized tool types
34
+ */
35
+ export type SerializedTool = SerializedFunctionTool | SerializedHostedTool;
36
+ //# sourceMappingURL=tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../../src/lib/serde/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC;;OAEG;IACH,IAAI,EAAE,UAAU,CAAC;IAEjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,mBAAmB,CAAC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACpC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,sBAAsB,GAAG,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Async version of Array.filter() that works with async predicates.
3
+ * Runs all predicates in parallel and filters based on results.
4
+ */
5
+ export declare function filter<T>(array: T[], predicate: (item: T) => Promise<boolean>): Promise<T[]>;
6
+ /**
7
+ * Generate an ISO 8601 timestamp of the current time.
8
+ * @returns An ISO 8601 timestamp.
9
+ */
10
+ export declare function timeISO(): string;
11
+ /**
12
+ * Generate a random ID with the specified number of bytes.
13
+ * @param bytes - Number of bytes to generate (e.g., 8 for 64-bit, 16 for 128-bit)
14
+ * @returns A hex string representation of the random bytes
15
+ */
16
+ export declare function randomID(bytes?: number): string;
17
+ export type SafeExecuteResult<T> = [Error | unknown | null, T | null];
18
+ export declare function safeExecute<T>(fn: () => T): Promise<SafeExecuteResult<T>>;
19
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAC5B,KAAK,EAAE,CAAC,EAAE,EACV,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GACvC,OAAO,CAAC,CAAC,EAAE,CAAC,CAGd;AAED;;;GAGG;AACH,wBAAgB,OAAO,IAAI,MAAM,CAEhC;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,GAAE,MAAW,GAAG,MAAM,CAanD;AAED,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAEtE,wBAAsB,WAAW,CAAC,CAAC,EACjC,EAAE,EAAE,MAAM,CAAC,GACV,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAM/B"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Async version of Array.filter() that works with async predicates.
3
+ * Runs all predicates in parallel and filters based on results.
4
+ */
5
+ export async function filter(array, predicate) {
6
+ const results = await Promise.all(array.map(predicate));
7
+ return array.filter((_, index) => results[index]);
8
+ }
9
+ /**
10
+ * Generate an ISO 8601 timestamp of the current time.
11
+ * @returns An ISO 8601 timestamp.
12
+ */
13
+ export function timeISO() {
14
+ return new Date().toISOString();
15
+ }
16
+ /**
17
+ * Generate a random ID with the specified number of bytes.
18
+ * @param bytes - Number of bytes to generate (e.g., 8 for 64-bit, 16 for 128-bit)
19
+ * @returns A hex string representation of the random bytes
20
+ */
21
+ export function randomID(bytes = 12) {
22
+ const byteArray = new Uint8Array(bytes);
23
+ if (typeof crypto !== "undefined" && crypto.getRandomValues) {
24
+ crypto.getRandomValues(byteArray);
25
+ }
26
+ else {
27
+ // Fallback for environments without crypto.getRandomValues
28
+ for (let i = 0; i < bytes; i++) {
29
+ byteArray[i] = Math.floor(Math.random() * 256);
30
+ }
31
+ }
32
+ return Array.from(byteArray, (byte) => byte.toString(16).padStart(2, "0")).join("");
33
+ }
34
+ export async function safeExecute(fn) {
35
+ try {
36
+ return [null, await fn()];
37
+ }
38
+ catch (error) {
39
+ return [error, null];
40
+ }
41
+ }
@@ -0,0 +1,133 @@
1
+ import { EventEmitter } from "node:events";
2
+ import { Agent } from "./agent";
3
+ import { Context, UnknownContext } from "./context";
4
+ import { Tool } from "./tool";
5
+ import type { ToolCall } from "@kernl/protocol";
6
+ import { AgentResponseType } from "./types/agent";
7
+ import { TextResponse } from "./types/thread";
8
+ export type EventEmitterEvents = Record<string, any[]>;
9
+ /**
10
+ * Generic typed event emitter that wraps Node's EventEmitter with type safety
11
+ */
12
+ declare class TypedEventEmitter<EventTypes extends EventEmitterEvents = Record<string, any[]>> extends EventEmitter {
13
+ on<K extends keyof EventTypes>(event: K, listener: (...args: EventTypes[K]) => void): this;
14
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
15
+ off<K extends keyof EventTypes>(event: K, listener: (...args: EventTypes[K]) => void): this;
16
+ off(event: string | symbol, listener: (...args: any[]) => void): this;
17
+ emit<K extends keyof EventTypes>(event: K, ...args: EventTypes[K]): boolean;
18
+ emit(event: string | symbol, ...args: any[]): boolean;
19
+ once<K extends keyof EventTypes>(event: K, listener: (...args: EventTypes[K]) => void): this;
20
+ once(event: string | symbol, listener: (...args: any[]) => void): this;
21
+ }
22
+ export type AgentHookEvents<TContext = UnknownContext, TOutput extends AgentResponseType = TextResponse> = {
23
+ /**
24
+ * @param context - The context of the run
25
+ */
26
+ agent_start: [context: Context<TContext>, agent: Agent<TContext, TOutput>];
27
+ /**
28
+ * @param context - The context of the run
29
+ * @param output - The output of the agent
30
+ */
31
+ agent_end: [context: Context<TContext>, output: string];
32
+ /**
33
+ * @param context - The context of the run
34
+ * @param agent - The agent that is starting a tool
35
+ * @param tool - The tool that is starting
36
+ */
37
+ agent_tool_start: [
38
+ context: Context<TContext>,
39
+ tool: Tool<any>,
40
+ details: {
41
+ toolCall: ToolCall;
42
+ }
43
+ ];
44
+ /**
45
+ * @param context - The context of the run
46
+ * @param agent - The agent that is ending a tool
47
+ * @param tool - The tool that is ending
48
+ * @param result - The result of the tool
49
+ */
50
+ agent_tool_end: [
51
+ context: Context<TContext>,
52
+ tool: Tool<any>,
53
+ result: string,
54
+ details: {
55
+ toolCall: ToolCall;
56
+ }
57
+ ];
58
+ };
59
+ /**
60
+ * Event emitter that every Agent instance inherits from and that emits events for the lifecycle
61
+ * of the agent.
62
+ */
63
+ export declare class AgentHooks<TContext = UnknownContext, TOutput extends AgentResponseType = TextResponse> extends TypedEventEmitter<AgentHookEvents<TContext, TOutput>> {
64
+ }
65
+ /**
66
+ * Events emitted by the kernl during execution.
67
+ *
68
+ * Unlike AgentHookEvents (which are emitted by individual agents with implicit context),
69
+ * KernlHookEvents explicitly include the agent reference in all events since it needs to
70
+ * coordinate multiple agents and listeners need to know which agent triggered each event.
71
+ */
72
+ export type KernlHookEvents<TContext = UnknownContext, TOutput extends AgentResponseType = TextResponse> = {
73
+ /**
74
+ * @param context - The context of the run
75
+ * @param agent - The agent that is starting
76
+ */
77
+ agent_start: [context: Context<TContext>, agent: Agent<TContext, TOutput>];
78
+ /**
79
+ * @param context - The context of the run
80
+ * @param agent - The agent that is ending
81
+ * @param output - The output of the agent
82
+ */
83
+ agent_end: [
84
+ context: Context<TContext>,
85
+ agent: Agent<TContext, TOutput>,
86
+ output: string
87
+ ];
88
+ /**
89
+ * @param context - The context of the run
90
+ * @param fromAgent - The agent that is handing off
91
+ * @param toAgent - The next agent to run
92
+ */
93
+ agent_handoff: [
94
+ context: Context<TContext>,
95
+ fromAgent: Agent<any, any>,
96
+ toAgent: Agent<any, any>
97
+ ];
98
+ /**
99
+ * @param context - The context of the run
100
+ * @param agent - The agent that is starting a tool
101
+ * @param tool - The tool that is starting
102
+ */
103
+ agent_tool_start: [
104
+ context: Context<TContext>,
105
+ agent: Agent<TContext, TOutput>,
106
+ tool: Tool,
107
+ details: {
108
+ toolCall: ToolCall;
109
+ }
110
+ ];
111
+ /**
112
+ * @param context - The context of the run
113
+ * @param agent - The agent that is ending a tool
114
+ * @param tool - The tool that is ending
115
+ * @param result - The result of the tool
116
+ */
117
+ agent_tool_end: [
118
+ context: Context<TContext>,
119
+ agent: Agent<TContext, TOutput>,
120
+ tool: Tool,
121
+ result: string,
122
+ details: {
123
+ toolCall: ToolCall;
124
+ }
125
+ ];
126
+ };
127
+ /**
128
+ * Event emitter that the kernl uses to emit events for the lifecycle of every agent run.
129
+ */
130
+ export declare class KernlHooks<TContext = UnknownContext, TOutput extends AgentResponseType = TextResponse> extends TypedEventEmitter<KernlHookEvents<TContext, TOutput>> {
131
+ }
132
+ export {};
133
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}