kernl 0.7.4 → 0.8.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 (67) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +27 -1
  3. package/dist/agent/types.d.ts +20 -12
  4. package/dist/agent/types.d.ts.map +1 -1
  5. package/dist/agent.d.ts +7 -7
  6. package/dist/agent.d.ts.map +1 -1
  7. package/dist/agent.js +3 -14
  8. package/dist/api/resources/agents/agents.d.ts +5 -5
  9. package/dist/api/resources/agents/agents.d.ts.map +1 -1
  10. package/dist/api/resources/agents/agents.js +1 -1
  11. package/dist/guardrail.d.ts +19 -19
  12. package/dist/guardrail.d.ts.map +1 -1
  13. package/dist/kernl/kernl.d.ts +6 -6
  14. package/dist/kernl/kernl.d.ts.map +1 -1
  15. package/dist/lib/error.d.ts +3 -3
  16. package/dist/lib/error.d.ts.map +1 -1
  17. package/dist/lifecycle.d.ts +6 -6
  18. package/dist/lifecycle.d.ts.map +1 -1
  19. package/dist/memory/__tests__/encoder.test.d.ts +2 -0
  20. package/dist/memory/__tests__/encoder.test.d.ts.map +1 -0
  21. package/dist/memory/__tests__/encoder.test.js +121 -0
  22. package/dist/memory/codecs/domain.d.ts +6 -0
  23. package/dist/memory/codecs/domain.d.ts.map +1 -1
  24. package/dist/memory/codecs/domain.js +6 -0
  25. package/dist/memory/codecs/tpuf.d.ts.map +1 -1
  26. package/dist/memory/codecs/tpuf.js +2 -5
  27. package/dist/memory/encoder.d.ts +25 -2
  28. package/dist/memory/encoder.d.ts.map +1 -1
  29. package/dist/memory/encoder.js +46 -5
  30. package/dist/memory/index.d.ts +1 -1
  31. package/dist/memory/index.d.ts.map +1 -1
  32. package/dist/memory/index.js +1 -1
  33. package/dist/memory/schema.js +5 -4
  34. package/dist/memory/types.d.ts +2 -1
  35. package/dist/memory/types.d.ts.map +1 -1
  36. package/dist/thread/__tests__/integration.test.d.ts +1 -1
  37. package/dist/thread/__tests__/integration.test.d.ts.map +1 -1
  38. package/dist/thread/__tests__/integration.test.js +10 -5
  39. package/dist/thread/__tests__/thread.test.js +8 -8
  40. package/dist/thread/thread.d.ts +5 -5
  41. package/dist/thread/thread.d.ts.map +1 -1
  42. package/dist/thread/thread.js +13 -2
  43. package/dist/thread/types.d.ts +9 -6
  44. package/dist/thread/types.d.ts.map +1 -1
  45. package/dist/thread/utils.d.ts +7 -6
  46. package/dist/thread/utils.d.ts.map +1 -1
  47. package/dist/thread/utils.js +9 -8
  48. package/package.json +5 -4
  49. package/src/agent/types.ts +25 -29
  50. package/src/agent.ts +15 -28
  51. package/src/api/resources/agents/agents.ts +8 -8
  52. package/src/guardrail.ts +28 -28
  53. package/src/kernl/kernl.ts +12 -12
  54. package/src/lib/error.ts +3 -3
  55. package/src/lifecycle.ts +6 -6
  56. package/src/memory/__tests__/encoder.test.ts +154 -0
  57. package/src/memory/codecs/domain.ts +6 -0
  58. package/src/memory/codecs/tpuf.ts +2 -5
  59. package/src/memory/encoder.ts +51 -6
  60. package/src/memory/index.ts +1 -1
  61. package/src/memory/schema.ts +5 -5
  62. package/src/memory/types.ts +2 -1
  63. package/src/thread/__tests__/integration.test.ts +130 -146
  64. package/src/thread/__tests__/thread.test.ts +8 -8
  65. package/src/thread/thread.ts +21 -7
  66. package/src/thread/types.ts +9 -6
  67. package/src/thread/utils.ts +15 -14
@@ -2,13 +2,16 @@ import { ToolCall, LanguageModel, LanguageModelItem, LanguageModelStreamEvent, R
2
2
  import { Task } from "../task.js";
3
3
  import { Context } from "../context.js";
4
4
  import { Agent } from "../agent.js";
5
- import type { AgentResponseType } from "../agent/types.js";
5
+ import type { AgentOutputType } from "../agent/types.js";
6
6
  import type { ThreadStore } from "../storage/index.js";
7
7
  /**
8
8
  * Public/client-facing thread events (excludes internal system events).
9
9
  */
10
10
  export type PublicThreadEvent = LanguageModelItem & ThreadEventBase;
11
- export type TextResponse = "text";
11
+ /**
12
+ * Text output type - indicates the agent returns a plain string.
13
+ */
14
+ export type TextOutput = "text";
12
15
  /**
13
16
  * Thread state values as a const array (for zod schemas).
14
17
  */
@@ -27,9 +30,9 @@ export declare const REQUIRES_APPROVAL = "requires_approval";
27
30
  *
28
31
  * Represents the complete state of a Thread that can be stored and restored.
29
32
  */
30
- export interface IThread<TContext = unknown, TResponse extends AgentResponseType = "text"> {
33
+ export interface IThread<TContext = unknown, TOutput extends AgentOutputType = "text"> {
31
34
  tid: string;
32
- agent: Agent<TContext, TResponse>;
35
+ agent: Agent<TContext, TOutput>;
33
36
  model: LanguageModel;
34
37
  context: Context<TContext>;
35
38
  input: LanguageModelItem[];
@@ -95,8 +98,8 @@ export interface ThreadExecuteResult<TResponse = unknown> {
95
98
  /**
96
99
  * Options for constructing a Thread.
97
100
  */
98
- export interface ThreadOptions<TContext = unknown, TResponse extends AgentResponseType = "text"> {
99
- agent: Agent<TContext, TResponse>;
101
+ export interface ThreadOptions<TContext = unknown, TOutput extends AgentOutputType = "text"> {
102
+ agent: Agent<TContext, TOutput>;
100
103
  input?: LanguageModelItem[];
101
104
  history?: ThreadEvent[];
102
105
  context?: Context<TContext>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/thread/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/thread/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,OAAO,EACP,OAAO,EACP,aAAa,EACb,eAAe,EACf,MAAM,EACN,IAAI,EACL,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,aAAa,uFAOhB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,OAAO,OAAO,GACd,OAAO,OAAO,GACd,OAAO,aAAa,GACpB,OAAO,eAAe,GACtB,OAAO,MAAM,GACb,OAAO,IAAI,CAAC;AAEhB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AAErD;;;;GAIG;AACH,MAAM,WAAW,OAAO,CACtB,QAAQ,GAAG,OAAO,EAClB,OAAO,SAAS,eAAe,GAAG,MAAM;IAExC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,aAAa,CAAC;IAErB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,KAAK,EAAE,iBAAiB,EAAE,CAAoC;IAC9D,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAsD;IAGjF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAA+B;IACjD,SAAS,EAAE,MAAM,CAAC;IAGlB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CAEzB;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,CAAC,iBAAiB,GAAG,eAAe,CAAC,GACrC,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,SAAS,GAAG,OAAO;IACtD;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;CACZ;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAC5B,QAAQ,GAAG,OAAO,EAClB,OAAO,SAAS,eAAe,GAAG,MAAM;IAExC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,QAAQ;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAC;CAEvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;OAEG;IACH,gBAAgB,EAAE,QAAQ,EAAE,CAAC;CAC9B"}
@@ -1,6 +1,6 @@
1
1
  import type { ResolvedAgentResponse } from "../guardrail.js";
2
2
  import { ToolCall, LanguageModelItem } from "@kernl-sdk/protocol";
3
- import type { AgentResponseType } from "../agent/types.js";
3
+ import type { AgentOutputType } from "../agent/types.js";
4
4
  import type { ThreadEvent, ThreadStreamEvent, ActionSet, PublicThreadEvent } from "./types.js";
5
5
  /**
6
6
  * Create a ThreadEvent from a LanguageModelItem with thread metadata.
@@ -50,13 +50,14 @@ export declare function isPublicEvent(event: ThreadEvent): event is PublicThread
50
50
  */
51
51
  export declare function getFinalResponse(items: LanguageModelItem[]): string | null;
52
52
  /**
53
- * (TODO): This should run through the language model's native structured output (if avail)
53
+ * Parse the final response according to the output type schema.
54
54
  *
55
- * Parse the final response according to the response type schema.
56
- * - If responseType is "text", returns the text as-is
57
- * - If responseType is a ZodType, parses and validates the text as JSON
55
+ * This serves as a safety net validation after native structured output from the provider.
56
+ *
57
+ * - If output is "text", returns the text as-is
58
+ * - If output is a ZodType, parses and validates the text as JSON
58
59
  *
59
60
  * @throws {ModelBehaviorError} if structured output validation fails
60
61
  */
61
- export declare function parseFinalResponse<TResponse extends AgentResponseType>(text: string, responseType: TResponse): ResolvedAgentResponse<TResponse>;
62
+ export declare function parseFinalResponse<TOutput extends AgentOutputType>(text: string, output: TOutput): ResolvedAgentResponse<TOutput>;
62
63
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/thread/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIzD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,WAAW,CAad;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,IAAI,QAAQ,CAE7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,GAAG,IAAI,CAG3E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,IAAI,iBAAiB,CAY7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,iBAAiB,CAc5E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,MAAM,GAAG,IAAI,CAc1E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,SAAS,iBAAiB,EACpE,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,SAAS,GACtB,qBAAqB,CAAC,SAAS,CAAC,CAsBlC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/thread/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAIzD,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EAClB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1B,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,WAAW,CAad;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,IAAI,QAAQ,CAE7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,SAAS,GAAG,IAAI,CAG3E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,IAAI,iBAAiB,CAY7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,IAAI,iBAAiB,CAc5E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,MAAM,GAAG,IAAI,CAc1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,SAAS,eAAe,EAChE,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,GACd,qBAAqB,CAAC,OAAO,CAAC,CAsBhC"}
@@ -95,22 +95,23 @@ export function getFinalResponse(items) {
95
95
  return null;
96
96
  }
97
97
  /**
98
- * (TODO): This should run through the language model's native structured output (if avail)
98
+ * Parse the final response according to the output type schema.
99
99
  *
100
- * Parse the final response according to the response type schema.
101
- * - If responseType is "text", returns the text as-is
102
- * - If responseType is a ZodType, parses and validates the text as JSON
100
+ * This serves as a safety net validation after native structured output from the provider.
101
+ *
102
+ * - If output is "text", returns the text as-is
103
+ * - If output is a ZodType, parses and validates the text as JSON
103
104
  *
104
105
  * @throws {ModelBehaviorError} if structured output validation fails
105
106
  */
106
- export function parseFinalResponse(text, responseType) {
107
- if (responseType === "text") {
107
+ export function parseFinalResponse(text, output) {
108
+ if (output === "text") {
108
109
  return text; // text output - return as-is
109
110
  }
110
111
  // structured output - decode JSON and validate with schema
111
- if (responseType && typeof responseType === "object") {
112
+ if (output && typeof output === "object") {
112
113
  // (TODO): prob better way of checking this here
113
- const schema = responseType;
114
+ const schema = output;
114
115
  try {
115
116
  const validated = json(schema).decode(text); // (TODO): it would be nice if we could use `decodeSafe` here
116
117
  return validated;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kernl",
3
- "version": "0.7.4",
3
+ "version": "0.8.1",
4
4
  "description": "A modern AI agent framework",
5
5
  "keywords": [
6
6
  "kernl",
@@ -34,10 +34,11 @@
34
34
  "dependencies": {
35
35
  "@modelcontextprotocol/sdk": "^1.20.2",
36
36
  "pino": "^9.6.0",
37
+ "yaml": "^2.8.2",
37
38
  "zod": "^4.1.12",
39
+ "@kernl-sdk/protocol": "0.2.8",
38
40
  "@kernl-sdk/retrieval": "0.1.3",
39
- "@kernl-sdk/shared": "^0.3.0",
40
- "@kernl-sdk/protocol": "0.2.8"
41
+ "@kernl-sdk/shared": "^0.3.0"
41
42
  },
42
43
  "devDependencies": {
43
44
  "@ai-sdk/openai": "3.0.0-beta.57",
@@ -45,7 +46,7 @@
45
46
  "tsc-alias": "^1.8.10",
46
47
  "typescript": "5.9.2",
47
48
  "vitest": "^4.0.8",
48
- "@kernl-sdk/ai": "0.2.10"
49
+ "@kernl-sdk/ai": "0.3.0"
49
50
  },
50
51
  "scripts": {
51
52
  "clean": "rm -rf dist",
@@ -1,30 +1,26 @@
1
1
  import { type ZodType } from "zod";
2
2
 
3
- import { Context, UnknownContext } from "@/context";
4
3
  import {
5
4
  LanguageModel,
6
5
  LanguageModelRequestSettings,
7
6
  } from "@kernl-sdk/protocol";
7
+
8
+ import { Context, UnknownContext } from "@/context";
8
9
  import { InputGuardrail, OutputGuardrail } from "@/guardrail";
9
10
  import { BaseToolkit } from "@/tool";
10
11
 
11
- import { TextResponse } from "@/thread/types";
12
+ import { TextOutput } from "@/thread/types";
12
13
 
13
14
  /**
14
15
  * Configuration for an agent.
15
16
  */
16
17
  export interface AgentConfig<
17
18
  TContext = UnknownContext,
18
- TResponse extends AgentResponseType = TextResponse,
19
+ TOutput extends AgentOutputType = TextOutput,
19
20
  > {
20
- /* The unique identifier for the agent */
21
- id: string;
22
-
23
- /* The name of the agent (defaults to ID if not provided) */
24
- name: string;
25
-
26
- /* A brief description of the agent's purpose */
27
- description?: string;
21
+ id: string /* The unique identifier for the agent */;
22
+ name: string /* The name of the agent (defaults to ID if not provided) */;
23
+ description?: string /* A brief description of the agent's purpose */;
28
24
 
29
25
  /**
30
26
  * The instructions for the agent. Will be used as the "system prompt" when this agent is
@@ -38,12 +34,6 @@ export interface AgentConfig<
38
34
  | string
39
35
  | ((context: Context<TContext>) => Promise<string> | string);
40
36
 
41
- // /**
42
- // * A description of the agent. This is used when the agent is used as a handoff, so that an LLM
43
- // * knows what it does and when to invoke it.
44
- // */
45
- // handoffDescription: string;
46
-
47
37
  // /**
48
38
  // * Handoffs are sub-agents that the agent can delegate to. You can provide a list of handoffs,
49
39
  // * and the agent can choose to delegate to them if relevant. Allows for separation of concerns
@@ -63,6 +53,19 @@ export interface AgentConfig<
63
53
  */
64
54
  modelSettings?: LanguageModelRequestSettings;
65
55
 
56
+ /**
57
+ * The type of the output that the agent will return.
58
+ *
59
+ * Can be either:
60
+ * - `"text"` (default): The agent returns a plain string response
61
+ * - A Zod schema: The agent returns structured output validated against the schema
62
+ *
63
+ * When a Zod schema is provided, the output is converted to JSON Schema and sent to the
64
+ * model for native structured output support. The response is then validated against
65
+ * the Zod schema as a safety net.
66
+ */
67
+ output?: TOutput;
68
+
66
69
  /**
67
70
  * A list of toolkits the agent can use. Toolkits are collections of related tools
68
71
  * that can be static (Toolkit) or dynamic (MCPToolkit).
@@ -100,12 +103,7 @@ export interface AgentConfig<
100
103
  * A list of checks that run in parallel to the agent's execution on the input + output for the agent,
101
104
  * depending on the configuration.
102
105
  */
103
- guardrails?: AgentGuardrails<TResponse>;
104
-
105
- /**
106
- * The type of the response that the agent will return. If not provided, response will be a string.
107
- */
108
- responseType?: TResponse;
106
+ guardrails?: AgentGuardrails<TOutput>;
109
107
 
110
108
  // /**
111
109
  // * (TODO): Not sure if this is really necessary.. need to see use case examples
@@ -137,9 +135,7 @@ export interface AgentConfig<
137
135
  /**
138
136
  * Guardrails for an agent.
139
137
  */
140
- export interface AgentGuardrails<
141
- TResponse extends AgentResponseType = TextResponse,
142
- > {
138
+ export interface AgentGuardrails<TOutput extends AgentOutputType = TextOutput> {
143
139
  /**
144
140
  * A list of checks that run in parallel to the agent's execution, before generating a response.
145
141
  * Runs only if the agent is the first agent in the chain.
@@ -149,14 +145,14 @@ export interface AgentGuardrails<
149
145
  * A list of checks that run on the final output of the agent, after generating a response. Runs
150
146
  * only if the agent produces a final output.
151
147
  */
152
- output: OutputGuardrail<TResponse>[];
148
+ output: OutputGuardrail<TOutput>[];
153
149
  }
154
150
 
155
151
  /**
156
- * The type of the output object. If not provided, the output will be a string.
152
+ * The type of the output. If not provided, the output will be a string.
157
153
  * 'text' is a special type that indicates the output will be a string.
158
154
  */
159
- export type AgentResponseType = TextResponse | ZodType;
155
+ export type AgentOutputType = TextOutput | ZodType;
160
156
 
161
157
  /**
162
158
  * Memory configuration for an agent.
package/src/agent.ts CHANGED
@@ -37,10 +37,10 @@ import { MisconfiguredError, RuntimeError } from "./lib/error";
37
37
  import type {
38
38
  AgentConfig,
39
39
  AgentMemoryConfig,
40
- AgentResponseType,
40
+ AgentOutputType,
41
41
  } from "./agent/types";
42
42
  import type {
43
- TextResponse,
43
+ TextOutput,
44
44
  ThreadExecuteOptions,
45
45
  ThreadExecuteResult,
46
46
  ThreadStreamEvent,
@@ -48,10 +48,10 @@ import type {
48
48
 
49
49
  export class Agent<
50
50
  TContext = UnknownContext,
51
- TResponse extends AgentResponseType = TextResponse,
51
+ TOutput extends AgentOutputType = TextOutput,
52
52
  >
53
- extends AgentHooks<TContext, TResponse>
54
- implements AgentConfig<TContext, TResponse>
53
+ extends AgentHooks<TContext, TOutput>
54
+ implements AgentConfig<TContext, TOutput>
55
55
  {
56
56
  private kernl?: Kernl;
57
57
 
@@ -69,25 +69,12 @@ export class Agent<
69
69
 
70
70
  guardrails: {
71
71
  input: InputGuardrail[];
72
- output: OutputGuardrail<AgentResponseType>[];
72
+ output: OutputGuardrail<AgentOutputType>[];
73
73
  };
74
- responseType: TResponse = "text" as TResponse;
74
+ output: TOutput = "text" as TOutput;
75
75
  resetToolChoice: boolean;
76
76
 
77
- // --- (TODO) ---
78
- // toolUseBehavior: ToolUseBehavior;
79
- // handoffs: (Agent<any, TResponse> | Handoff<any, TResponse>)[];
80
- // ----------
81
-
82
- // /* Process/thread-group–wide signal state shared by all threads in the group: shared pending signals, job control
83
- // (stops/cont, group exit), rlimits, etc. */
84
- // signal: *struct signal_struct;
85
- //
86
- // /* Table of signal handlers (sa_handler, sa_mask, flags) shared by threads
87
- // (CLONE_SIGHAND). RCU-protected so readers can access it locklessly. */
88
- // sighand: *struct sighand_struct __rcu;
89
-
90
- constructor(config: AgentConfig<TContext, TResponse>) {
77
+ constructor(config: AgentConfig<TContext, TOutput>) {
91
78
  super();
92
79
  if (config.id.trim() === "") {
93
80
  throw new MisconfiguredError("Agent must have an id.");
@@ -111,8 +98,8 @@ export class Agent<
111
98
  }
112
99
 
113
100
  this.guardrails = config.guardrails ?? { input: [], output: [] };
114
- if (config.responseType) {
115
- this.responseType = config.responseType;
101
+ if (config.output) {
102
+ this.output = config.output;
116
103
  }
117
104
  this.resetToolChoice = config.resetToolChoice ?? true;
118
105
  // this.toolUseBehavior = config.toolUseBehavior ?? "run_llm_again";
@@ -142,7 +129,7 @@ export class Agent<
142
129
  async run(
143
130
  input: string | LanguageModelItem[],
144
131
  options?: ThreadExecuteOptions<TContext>,
145
- ): Promise<ThreadExecuteResult<ResolvedAgentResponse<TResponse>>> {
132
+ ): Promise<ThreadExecuteResult<ResolvedAgentResponse<TOutput>>> {
146
133
  if (!this.kernl) {
147
134
  throw new MisconfiguredError(
148
135
  `Agent ${this.id} not bound to kernl. Call kernl.register(agent) first.`,
@@ -155,7 +142,7 @@ export class Agent<
155
142
  : input;
156
143
  const tid = options?.threadId;
157
144
 
158
- let thread: Thread<TContext, TResponse> | null = null;
145
+ let thread: Thread<TContext, TOutput> | null = null;
159
146
 
160
147
  if (tid) {
161
148
  // no concurrent execution of same thread - correctness contract
@@ -168,7 +155,7 @@ export class Agent<
168
155
  if (this.kernl.storage?.threads) {
169
156
  thread = (await this.kernl.storage.threads.get(tid, {
170
157
  history: true,
171
- })) as Thread<TContext, TResponse> | null;
158
+ })) as Thread<TContext, TOutput> | null;
172
159
  }
173
160
  }
174
161
 
@@ -216,7 +203,7 @@ export class Agent<
216
203
  : input;
217
204
  const tid = options?.threadId;
218
205
 
219
- let thread: Thread<TContext, TResponse> | null = null;
206
+ let thread: Thread<TContext, TOutput> | null = null;
220
207
 
221
208
  if (tid) {
222
209
  // no concurrent execution of same thread - correctness contract
@@ -229,7 +216,7 @@ export class Agent<
229
216
  if (this.kernl.storage?.threads) {
230
217
  thread = (await this.kernl.storage.threads.get(tid, {
231
218
  history: true,
232
- })) as Thread<TContext, TResponse> | null;
219
+ })) as Thread<TContext, TOutput> | null;
233
220
  }
234
221
  }
235
222
 
@@ -1,7 +1,7 @@
1
1
  import type { Agent } from "@/agent";
2
- import type { AgentResponseType } from "@/agent/types";
2
+ import type { AgentOutputType } from "@/agent/types";
3
3
  import type { UnknownContext } from "@/context";
4
- import type { TextResponse } from "@/thread/types";
4
+ import type { TextOutput } from "@/thread/types";
5
5
 
6
6
  /**
7
7
  * Agents resource.
@@ -16,15 +16,15 @@ export class RAgents {
16
16
  /**
17
17
  * Get a live Agent instance by id.
18
18
  *
19
- * Callers are expected to know the concrete TContext/TResponse types
19
+ * Callers are expected to know the concrete TContext/TOutput types
20
20
  * for their own agents and can specify them via generics.
21
21
  */
22
22
  get<
23
23
  TContext = UnknownContext,
24
- TResponse extends AgentResponseType = TextResponse,
25
- >(id: string): Agent<TContext, TResponse> | undefined {
24
+ TOutput extends AgentOutputType = TextOutput,
25
+ >(id: string): Agent<TContext, TOutput> | undefined {
26
26
  const agent = this.registry.get(id);
27
- return agent as Agent<TContext, TResponse> | undefined;
27
+ return agent as Agent<TContext, TOutput> | undefined;
28
28
  }
29
29
 
30
30
  /**
@@ -40,10 +40,10 @@ export class RAgents {
40
40
  * Since this is a heterogeneous collection, we expose the widest safe
41
41
  * type parameters here.
42
42
  */
43
- list(): Agent<UnknownContext, AgentResponseType>[] {
43
+ list(): Agent<UnknownContext, AgentOutputType>[] {
44
44
  return Array.from(this.registry.values()) as Agent<
45
45
  UnknownContext,
46
- AgentResponseType
46
+ AgentOutputType
47
47
  >[];
48
48
  }
49
49
 
package/src/guardrail.ts CHANGED
@@ -4,19 +4,19 @@ import { LanguageModelResponse } from "@kernl-sdk/protocol";
4
4
 
5
5
  import { Agent } from "./agent";
6
6
  import { Context, UnknownContext } from "./context";
7
- import type { AgentResponseType } from "@/agent/types";
8
- import type { TextResponse, ThreadEvent } from "@/thread/types";
7
+ import type { AgentOutputType } from "@/agent/types";
8
+ import type { TextOutput, ThreadEvent } from "@/thread/types";
9
9
 
10
10
  /**
11
11
  * Resolves the agent output type based on the response type.
12
- * - If TResponse is "text" → output is string
13
- * - If TResponse is a ZodType → output is the inferred type from that schema
12
+ * - If TOutput is "text" → output is string
13
+ * - If TOutput is a ZodType → output is the inferred type from that schema
14
14
  */
15
- export type ResolvedAgentResponse<TResponse extends AgentResponseType> =
16
- TResponse extends TextResponse
15
+ export type ResolvedAgentResponse<TOutput extends AgentOutputType> =
16
+ TOutput extends TextOutput
17
17
  ? string
18
- : TResponse extends ZodType
19
- ? z.infer<TResponse>
18
+ : TOutput extends ZodType
19
+ ? z.infer<TOutput>
20
20
  : never;
21
21
 
22
22
  /**
@@ -149,10 +149,10 @@ export function defineInputGuardrail({
149
149
  */
150
150
  export interface OutputGuardrailFunctionArgs<
151
151
  TContext = UnknownContext,
152
- TResponse extends AgentResponseType = TextResponse,
152
+ TOutput extends AgentOutputType = TextOutput,
153
153
  > {
154
154
  agent: Agent<any, any>;
155
- agentOutput: ResolvedAgentResponse<TResponse>; // ??
155
+ agentOutput: ResolvedAgentResponse<TOutput>; // ??
156
156
  context: Context<TContext>;
157
157
  /**
158
158
  * Additional details about the agent output.
@@ -166,16 +166,16 @@ export interface OutputGuardrailFunctionArgs<
166
166
  * A function that takes an output guardrail function arguments and returns a `GuardrailFunctionOutput`.
167
167
  */
168
168
  export type OutputGuardrailFunction<
169
- TResponse extends AgentResponseType = TextResponse,
169
+ TOutput extends AgentOutputType = TextOutput,
170
170
  > = (
171
- args: OutputGuardrailFunctionArgs<UnknownContext, TResponse>,
171
+ args: OutputGuardrailFunctionArgs<UnknownContext, TOutput>,
172
172
  ) => Promise<GuardrailFunctionOutput>;
173
173
 
174
174
  /**
175
175
  * A guardrail that checks the output of the agent.
176
176
  */
177
177
  export interface OutputGuardrail<
178
- TResponse extends AgentResponseType = TextResponse,
178
+ TOutput extends AgentOutputType = TextOutput,
179
179
  > {
180
180
  /**
181
181
  * The name of the guardrail.
@@ -185,7 +185,7 @@ export interface OutputGuardrail<
185
185
  /**
186
186
  * The function that performs the guardrail check.
187
187
  */
188
- execute: OutputGuardrailFunction<TResponse>;
188
+ execute: OutputGuardrailFunction<TOutput>;
189
189
  }
190
190
 
191
191
  /**
@@ -201,7 +201,7 @@ export interface OutputGuardrailMetadata {
201
201
  */
202
202
  export interface OutputGuardrailResult<
203
203
  TMeta = OutputGuardrailMetadata,
204
- TResponse extends AgentResponseType = TextResponse,
204
+ TOutput extends AgentOutputType = TextOutput,
205
205
  > {
206
206
  /**
207
207
  * The metadata of the guardrail.
@@ -211,12 +211,12 @@ export interface OutputGuardrailResult<
211
211
  /**
212
212
  * The output of the agent that ran.
213
213
  */
214
- agentOutput: ResolvedAgentResponse<TResponse>; // ??
214
+ agentOutput: ResolvedAgentResponse<TOutput>; // ??
215
215
 
216
216
  /**
217
217
  * The agent that ran.
218
218
  */
219
- agent: Agent<UnknownContext, TResponse>;
219
+ agent: Agent<UnknownContext, TOutput>;
220
220
 
221
221
  /**
222
222
  * The output of the guardrail.
@@ -229,43 +229,43 @@ export interface OutputGuardrailResult<
229
229
  */
230
230
  export interface OutputGuardrailDefinition<
231
231
  TMeta = OutputGuardrailMetadata,
232
- TResponse extends AgentResponseType = TextResponse,
232
+ TOutput extends AgentOutputType = TextOutput,
233
233
  > extends OutputGuardrailMetadata {
234
- guardrailFunction: OutputGuardrailFunction<TResponse>;
234
+ guardrailFunction: OutputGuardrailFunction<TOutput>;
235
235
  run(
236
- args: OutputGuardrailFunctionArgs<UnknownContext, TResponse>,
237
- ): Promise<OutputGuardrailResult<TMeta, TResponse>>;
236
+ args: OutputGuardrailFunctionArgs<UnknownContext, TOutput>,
237
+ ): Promise<OutputGuardrailResult<TMeta, TOutput>>;
238
238
  }
239
239
 
240
240
  /**
241
241
  * Arguments for defining an output guardrail definition.
242
242
  */
243
243
  export interface DefineOutputGuardrailArgs<
244
- TResponse extends AgentResponseType = TextResponse,
244
+ TOutput extends AgentOutputType = TextOutput,
245
245
  > {
246
246
  name: string;
247
- execute: OutputGuardrailFunction<TResponse>;
247
+ execute: OutputGuardrailFunction<TOutput>;
248
248
  }
249
249
 
250
250
  /**
251
251
  * Creates an output guardrail definition.
252
252
  */
253
253
  export function defineOutputGuardrail<
254
- TResponse extends AgentResponseType = TextResponse,
254
+ TOutput extends AgentOutputType = TextOutput,
255
255
  >({
256
256
  name,
257
257
  execute,
258
- }: DefineOutputGuardrailArgs<TResponse>): OutputGuardrailDefinition<
258
+ }: DefineOutputGuardrailArgs<TOutput>): OutputGuardrailDefinition<
259
259
  OutputGuardrailMetadata,
260
- TResponse
260
+ TOutput
261
261
  > {
262
262
  return {
263
263
  type: "output",
264
264
  name,
265
265
  guardrailFunction: execute,
266
266
  async run(
267
- args: OutputGuardrailFunctionArgs<UnknownContext, TResponse>,
268
- ): Promise<OutputGuardrailResult<OutputGuardrailMetadata, TResponse>> {
267
+ args: OutputGuardrailFunctionArgs<UnknownContext, TOutput>,
268
+ ): Promise<OutputGuardrailResult<OutputGuardrailMetadata, TOutput>> {
269
269
  return {
270
270
  guardrail: { type: "output", name },
271
271
  agent: args.agent,
@@ -17,7 +17,7 @@ import {
17
17
  } from "@/memory";
18
18
 
19
19
  import type { ThreadExecuteResult, ThreadStreamEvent } from "@/thread/types";
20
- import type { AgentResponseType } from "@/agent/types";
20
+ import type { AgentOutputType } from "@/agent/types";
21
21
 
22
22
  import type { KernlOptions } from "./types";
23
23
 
@@ -27,7 +27,7 @@ import type { KernlOptions } from "./types";
27
27
  * Orchestrates agent execution, including guardrails, tool calls, session persistence, and
28
28
  * tracing.
29
29
  */
30
- export class Kernl extends KernlHooks<UnknownContext, AgentResponseType> {
30
+ export class Kernl extends KernlHooks<UnknownContext, AgentOutputType> {
31
31
  private readonly _agents: Map<string, Agent> = new Map();
32
32
  private readonly _models: Map<string, LanguageModel> = new Map();
33
33
 
@@ -94,9 +94,9 @@ export class Kernl extends KernlHooks<UnknownContext, AgentResponseType> {
94
94
  /**
95
95
  * Spawn a new thread - blocking execution
96
96
  */
97
- async spawn<TContext, TResponse extends AgentResponseType>(
98
- thread: Thread<TContext, TResponse>,
99
- ): Promise<ThreadExecuteResult<ResolvedAgentResponse<TResponse>>> {
97
+ async spawn<TContext, TOutput extends AgentOutputType>(
98
+ thread: Thread<TContext, TOutput>,
99
+ ): Promise<ThreadExecuteResult<ResolvedAgentResponse<TOutput>>> {
100
100
  this.athreads.set(thread.tid, thread);
101
101
  try {
102
102
  return await thread.execute();
@@ -110,9 +110,9 @@ export class Kernl extends KernlHooks<UnknownContext, AgentResponseType> {
110
110
  *
111
111
  * NOTE: just blocks for now
112
112
  */
113
- async schedule<TContext, TResponse extends AgentResponseType>(
114
- thread: Thread<TContext, TResponse>,
115
- ): Promise<ThreadExecuteResult<ResolvedAgentResponse<TResponse>>> {
113
+ async schedule<TContext, TOutput extends AgentOutputType>(
114
+ thread: Thread<TContext, TOutput>,
115
+ ): Promise<ThreadExecuteResult<ResolvedAgentResponse<TOutput>>> {
116
116
  this.athreads.set(thread.tid, thread);
117
117
  try {
118
118
  return await thread.execute();
@@ -126,8 +126,8 @@ export class Kernl extends KernlHooks<UnknownContext, AgentResponseType> {
126
126
  *
127
127
  * Spawn a new thread - streaming execution
128
128
  */
129
- async *spawnStream<TContext, TResponse extends AgentResponseType>(
130
- thread: Thread<TContext, TResponse>,
129
+ async *spawnStream<TContext, TOutput extends AgentOutputType>(
130
+ thread: Thread<TContext, TOutput>,
131
131
  ): AsyncIterable<ThreadStreamEvent> {
132
132
  this.athreads.set(thread.tid, thread);
133
133
  try {
@@ -142,8 +142,8 @@ export class Kernl extends KernlHooks<UnknownContext, AgentResponseType> {
142
142
  *
143
143
  * Schedule an existing thread - streaming execution
144
144
  */
145
- async *scheduleStream<TContext, TResponse extends AgentResponseType>(
146
- thread: Thread<TContext, TResponse>,
145
+ async *scheduleStream<TContext, TOutput extends AgentOutputType>(
146
+ thread: Thread<TContext, TOutput>,
147
147
  ): AsyncIterable<ThreadStreamEvent> {
148
148
  this.athreads.set(thread.tid, thread);
149
149
  try {
package/src/lib/error.ts CHANGED
@@ -9,8 +9,8 @@ import { randomID } from "@kernl-sdk/shared/lib";
9
9
  // import { SerializedThread } from "@/lib/serde/thread";
10
10
  type SerializedThread = any;
11
11
 
12
- import { AgentResponseType } from "@/agent/types";
13
- import { TextResponse } from "@/thread/types";
12
+ import { AgentOutputType } from "@/agent/types";
13
+ import { TextOutput } from "@/thread/types";
14
14
 
15
15
  /**
16
16
  * Abstract base class for all `kernl` errors
@@ -144,7 +144,7 @@ export class InputGuardrailTripwireTriggered extends AgentError {
144
144
  */
145
145
  export class OutputGuardrailTripwireTriggered<
146
146
  TMeta extends OutputGuardrailMetadata,
147
- TOutputType extends AgentResponseType = TextResponse,
147
+ TOutputType extends AgentOutputType = TextOutput,
148
148
  > extends AgentError {
149
149
  result: OutputGuardrailResult<TMeta, TOutputType>;
150
150
  constructor(