kernl 0.1.3 → 0.2.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/.turbo/turbo-build.log +5 -4
- package/CHANGELOG.md +18 -0
- package/dist/agent.d.ts +20 -3
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +60 -41
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/kernl.d.ts +27 -1
- package/dist/kernl.d.ts.map +1 -1
- package/dist/kernl.js +36 -2
- package/dist/mcp/__tests__/integration.test.js +16 -0
- package/dist/thread/__tests__/fixtures/mock-model.d.ts +7 -0
- package/dist/thread/__tests__/fixtures/mock-model.d.ts.map +1 -0
- package/dist/thread/__tests__/fixtures/mock-model.js +59 -0
- package/dist/thread/__tests__/integration.test.d.ts +2 -0
- package/dist/thread/__tests__/integration.test.d.ts.map +1 -0
- package/dist/thread/__tests__/integration.test.js +247 -0
- package/dist/thread/__tests__/stream.test.d.ts +2 -0
- package/dist/thread/__tests__/stream.test.d.ts.map +1 -0
- package/dist/thread/__tests__/stream.test.js +244 -0
- package/dist/thread/__tests__/thread.test.js +612 -763
- package/dist/thread/thread.d.ts +30 -25
- package/dist/thread/thread.d.ts.map +1 -1
- package/dist/thread/thread.js +114 -314
- package/dist/thread/utils.d.ts +16 -1
- package/dist/thread/utils.d.ts.map +1 -1
- package/dist/thread/utils.js +30 -0
- package/dist/tool/index.d.ts +1 -1
- package/dist/tool/index.d.ts.map +1 -1
- package/dist/tool/index.js +1 -1
- package/dist/tool/tool.d.ts.map +1 -1
- package/dist/tool/tool.js +6 -2
- package/dist/tool/toolkit.d.ts +13 -3
- package/dist/tool/toolkit.d.ts.map +1 -1
- package/dist/tool/toolkit.js +11 -3
- package/dist/tool/types.d.ts +8 -0
- package/dist/tool/types.d.ts.map +1 -1
- package/dist/types/agent.d.ts +5 -5
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/thread.d.ts +10 -16
- package/dist/types/thread.d.ts.map +1 -1
- package/package.json +6 -4
- package/src/agent.ts +97 -86
- package/src/index.ts +1 -1
- package/src/kernl.ts +51 -2
- package/src/mcp/__tests__/integration.test.ts +17 -0
- package/src/thread/__tests__/fixtures/mock-model.ts +71 -0
- package/src/thread/__tests__/integration.test.ts +349 -0
- package/src/thread/__tests__/thread.test.ts +625 -775
- package/src/thread/thread.ts +134 -381
- package/src/thread/utils.ts +36 -1
- package/src/tool/index.ts +1 -1
- package/src/tool/tool.ts +6 -2
- package/src/tool/toolkit.ts +19 -3
- package/src/tool/types.ts +10 -0
- package/src/types/agent.ts +9 -6
- package/src/types/thread.ts +25 -17
package/dist/tool/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { BaseTool, FunctionTool, HostedTool, tool } from "./tool";
|
|
2
|
-
export { Toolkit, FunctionToolkit, MCPToolkit } from "./toolkit";
|
|
2
|
+
export { BaseToolkit, Toolkit, FunctionToolkit, MCPToolkit } from "./toolkit";
|
package/dist/tool/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/tool/tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/tool/tool.ts"],"names":[],"mappings":"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"}
|
package/dist/tool/tool.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
1
2
|
import { ModelBehaviorError } from "../lib/error";
|
|
2
3
|
import { logger } from "../lib/logger";
|
|
3
4
|
import { json } from "@kernl-sdk/shared/lib";
|
|
@@ -93,9 +94,10 @@ export class FunctionTool extends BaseTool {
|
|
|
93
94
|
throw new ModelBehaviorError("Invalid JSON input for tool");
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
|
-
//
|
|
97
|
+
// check if approval is required
|
|
97
98
|
const needsApproval = await this.requiresApproval(context, parsed, callId);
|
|
98
99
|
const approvalStatus = callId ? context.approvals.get(callId) : undefined;
|
|
100
|
+
// (TODO): this will become a more detailed action.approval event
|
|
99
101
|
if (needsApproval && approvalStatus !== "approved") {
|
|
100
102
|
return {
|
|
101
103
|
state: INTERRUPTIBLE,
|
|
@@ -118,7 +120,9 @@ export class FunctionTool extends BaseTool {
|
|
|
118
120
|
kind: "function",
|
|
119
121
|
name: this.id,
|
|
120
122
|
description: this.description,
|
|
121
|
-
parameters: this.parameters
|
|
123
|
+
parameters: (this.parameters
|
|
124
|
+
? z.toJSONSchema(this.parameters, { target: "draft-7" })
|
|
125
|
+
: {}), // JSONSchema7 - target: 'draft-7' produces this
|
|
122
126
|
};
|
|
123
127
|
}
|
|
124
128
|
}
|
package/dist/tool/toolkit.d.ts
CHANGED
|
@@ -8,11 +8,15 @@ import type { FunctionToolkitConfig, MCPToolkitConfig } from "./types";
|
|
|
8
8
|
* Toolkits can be static (FunctionToolkit) or dynamic (MCPToolkit), and provide
|
|
9
9
|
* a unified interface for tool discovery and management.
|
|
10
10
|
*/
|
|
11
|
-
export declare abstract class
|
|
11
|
+
export declare abstract class BaseToolkit<TContext = UnknownContext> {
|
|
12
12
|
/**
|
|
13
13
|
* Unique identifier for this toolkit
|
|
14
14
|
*/
|
|
15
15
|
abstract readonly id: string;
|
|
16
|
+
/**
|
|
17
|
+
* Description of what this toolkit provides
|
|
18
|
+
*/
|
|
19
|
+
abstract readonly description: string;
|
|
16
20
|
/**
|
|
17
21
|
* The agent this toolkit is bound to (if any)
|
|
18
22
|
*/
|
|
@@ -55,8 +59,9 @@ export declare abstract class Toolkit<TContext = UnknownContext> {
|
|
|
55
59
|
* });
|
|
56
60
|
* ```
|
|
57
61
|
*/
|
|
58
|
-
export declare class FunctionToolkit<TContext = UnknownContext> extends
|
|
62
|
+
export declare class FunctionToolkit<TContext = UnknownContext> extends BaseToolkit<TContext> {
|
|
59
63
|
readonly id: string;
|
|
64
|
+
readonly description: string;
|
|
60
65
|
private tools;
|
|
61
66
|
/**
|
|
62
67
|
* Create a new function toolkit.
|
|
@@ -79,8 +84,13 @@ export declare class FunctionToolkit<TContext = UnknownContext> extends Toolkit<
|
|
|
79
84
|
*/
|
|
80
85
|
list(context?: Context<TContext>): Promise<Tool<TContext>[]>;
|
|
81
86
|
}
|
|
82
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Convenience alias for FunctionToolkit - the default toolkit implementation.
|
|
89
|
+
*/
|
|
90
|
+
export { FunctionToolkit as Toolkit };
|
|
91
|
+
export declare class MCPToolkit<TContext = UnknownContext> extends BaseToolkit<TContext> {
|
|
83
92
|
readonly id: string;
|
|
93
|
+
readonly description: string;
|
|
84
94
|
private server;
|
|
85
95
|
private cache;
|
|
86
96
|
private filter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../../src/tool/toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;AAC9B,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,8BAAsB,
|
|
1
|
+
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../../src/tool/toolkit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAMzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC;AAC9B,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AAEjB;;;;;GAKG;AACH,8BAAsB,WAAW,CAAC,QAAQ,GAAG,cAAc;IACzD;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAEtC;;OAEG;IACH,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAEvC;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,IAAI;IAIvC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;IAEpD;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAErE;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAe,CAC1B,QAAQ,GAAG,cAAc,CACzB,SAAQ,WAAW,CAAC,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,KAAK,CAA8B;IAE3C;;;;OAIG;gBACS,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC;IAOnD;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;IAI3C;;;;;OAKG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;CAGnE;AAED;;GAEG;AACH,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,CAAC;AAiCtC,qBAAa,UAAU,CACrB,QAAQ,GAAG,cAAc,CACzB,SAAQ,WAAW,CAAC,QAAQ,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,MAAM,CAA0B;IAExC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;OAIG;gBACS,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC;IAS9C;;;;;;;;OAQG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;IAI3C;;;;;;;;;OASG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IA+BlE;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ/B"}
|
package/dist/tool/toolkit.js
CHANGED
|
@@ -6,7 +6,7 @@ import { filter } from "@kernl-sdk/shared/lib";
|
|
|
6
6
|
* Toolkits can be static (FunctionToolkit) or dynamic (MCPToolkit), and provide
|
|
7
7
|
* a unified interface for tool discovery and management.
|
|
8
8
|
*/
|
|
9
|
-
export class
|
|
9
|
+
export class BaseToolkit {
|
|
10
10
|
/**
|
|
11
11
|
* The agent this toolkit is bound to (if any)
|
|
12
12
|
*/
|
|
@@ -38,8 +38,9 @@ export class Toolkit {
|
|
|
38
38
|
* });
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
export class FunctionToolkit extends
|
|
41
|
+
export class FunctionToolkit extends BaseToolkit {
|
|
42
42
|
id;
|
|
43
|
+
description;
|
|
43
44
|
tools;
|
|
44
45
|
/**
|
|
45
46
|
* Create a new function toolkit.
|
|
@@ -49,6 +50,7 @@ export class FunctionToolkit extends Toolkit {
|
|
|
49
50
|
constructor(config) {
|
|
50
51
|
super();
|
|
51
52
|
this.id = config.id;
|
|
53
|
+
this.description = config.description ?? "";
|
|
52
54
|
this.tools = new Map(config.tools.map((t) => [t.id, t]));
|
|
53
55
|
}
|
|
54
56
|
/**
|
|
@@ -70,6 +72,10 @@ export class FunctionToolkit extends Toolkit {
|
|
|
70
72
|
return Array.from(this.tools.values());
|
|
71
73
|
}
|
|
72
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Convenience alias for FunctionToolkit - the default toolkit implementation.
|
|
77
|
+
*/
|
|
78
|
+
export { FunctionToolkit as Toolkit };
|
|
73
79
|
/*
|
|
74
80
|
* A toolkit that wraps an MCP server and provides tools from it.
|
|
75
81
|
*
|
|
@@ -101,8 +107,9 @@ export class FunctionToolkit extends Toolkit {
|
|
|
101
107
|
* });
|
|
102
108
|
* ```
|
|
103
109
|
*/
|
|
104
|
-
export class MCPToolkit extends
|
|
110
|
+
export class MCPToolkit extends BaseToolkit {
|
|
105
111
|
id;
|
|
112
|
+
description;
|
|
106
113
|
server;
|
|
107
114
|
cache;
|
|
108
115
|
filter;
|
|
@@ -116,6 +123,7 @@ export class MCPToolkit extends Toolkit {
|
|
|
116
123
|
constructor(config) {
|
|
117
124
|
super();
|
|
118
125
|
this.id = config.id;
|
|
126
|
+
this.description = config.description ?? "";
|
|
119
127
|
this.server = config.server;
|
|
120
128
|
this.filter = config.filter ?? (() => true);
|
|
121
129
|
this.cache = new Map();
|
package/dist/tool/types.d.ts
CHANGED
|
@@ -96,6 +96,10 @@ export interface FunctionToolkitConfig<TContext = UnknownContext> {
|
|
|
96
96
|
* Unique identifier for this toolkit.
|
|
97
97
|
*/
|
|
98
98
|
id: string;
|
|
99
|
+
/**
|
|
100
|
+
* Optional description of what this toolkit provides.
|
|
101
|
+
*/
|
|
102
|
+
description?: string;
|
|
99
103
|
/**
|
|
100
104
|
* Array of tools to include in this toolkit.
|
|
101
105
|
*/
|
|
@@ -109,6 +113,10 @@ export interface MCPToolkitConfig<TContext = UnknownContext> {
|
|
|
109
113
|
* Unique identifier for this toolkit.
|
|
110
114
|
*/
|
|
111
115
|
id: string;
|
|
116
|
+
/**
|
|
117
|
+
* Optional description of what this toolkit provides.
|
|
118
|
+
*/
|
|
119
|
+
description?: string;
|
|
112
120
|
/**
|
|
113
121
|
* The MCP server instance to wrap.
|
|
114
122
|
*/
|
package/dist/tool/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tool/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tool/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/agent.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type ZodType } from "zod";
|
|
|
2
2
|
import { Context, UnknownContext } from "../context";
|
|
3
3
|
import { LanguageModel, LanguageModelRequestSettings } from "@kernl-sdk/protocol";
|
|
4
4
|
import { InputGuardrail, OutputGuardrail } from "../guardrail";
|
|
5
|
-
import {
|
|
5
|
+
import { BaseToolkit } from "../tool";
|
|
6
6
|
import { TextResponse } from "./thread";
|
|
7
7
|
/**
|
|
8
8
|
* Configuration for an agent.
|
|
@@ -24,18 +24,18 @@ export interface AgentConfig<TContext = UnknownContext, TResponse extends AgentR
|
|
|
24
24
|
*
|
|
25
25
|
* By default, if not set, the agent will use a default model that throws an error when called.
|
|
26
26
|
*/
|
|
27
|
-
model
|
|
27
|
+
model: LanguageModel;
|
|
28
28
|
/**
|
|
29
29
|
* Configures model-specific tuning parameters (e.g. temperature, top_p, etc.)
|
|
30
30
|
*/
|
|
31
31
|
modelSettings?: LanguageModelRequestSettings;
|
|
32
32
|
/**
|
|
33
33
|
* A list of toolkits the agent can use. Toolkits are collections of related tools
|
|
34
|
-
* that can be static (
|
|
34
|
+
* that can be static (Toolkit) or dynamic (MCPToolkit).
|
|
35
35
|
*
|
|
36
36
|
* @example
|
|
37
37
|
* ```typescript
|
|
38
|
-
* const myTools = new
|
|
38
|
+
* const myTools = new Toolkit({
|
|
39
39
|
* id: "custom",
|
|
40
40
|
* tools: [tool1, tool2]
|
|
41
41
|
* });
|
|
@@ -52,7 +52,7 @@ export interface AgentConfig<TContext = UnknownContext, TResponse extends AgentR
|
|
|
52
52
|
* });
|
|
53
53
|
* ```
|
|
54
54
|
*/
|
|
55
|
-
toolkits?:
|
|
55
|
+
toolkits?: BaseToolkit<TContext>[];
|
|
56
56
|
/**
|
|
57
57
|
* A list of checks that run in parallel to the agent's execution on the input + output for the agent,
|
|
58
58
|
* depending on the configuration.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/types/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAEnC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EACL,aAAa,EACb,4BAA4B,EAC7B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,QAAQ,GAAG,cAAc,EACzB,SAAS,SAAS,iBAAiB,GAAG,YAAY;IAGlD,EAAE,EAAE,MAAM,CAAC;IAGX,IAAI,EAAE,MAAM,CAAC;IAEb;;;;;;;OAOG;IACH,YAAY,EACR,MAAM,GACN,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;IAe/D;;;;OAIG;IACH,KAAK,EAAE,aAAa,CAAC;IAErB;;OAEG;IACH,aAAa,CAAC,EAAE,4BAA4B,CAAC;IAE7C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;IAEnC;;;OAGG;IACH,UAAU,CAAC,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAExC;;OAEG;IACH,YAAY,CAAC,EAAE,SAAS,CAAC;IAsBzB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAC9B,SAAS,SAAS,iBAAiB,GAAG,YAAY;IAElD;;;OAGG;IACH,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB;;;OAGG;IACH,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,YAAY,GAAG,OAAO,CAAC"}
|
package/dist/types/thread.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import { ToolCall, LanguageModel, LanguageModelItem, LanguageModelStreamEvent } from "@kernl-sdk/protocol";
|
|
1
|
+
import { ToolCall, LanguageModel, LanguageModelItem, LanguageModelStreamEvent, RUNNING, STOPPED, INTERRUPTIBLE, UNINTERRUPTIBLE, ZOMBIE, DEAD } from "@kernl-sdk/protocol";
|
|
2
2
|
import { Task } from "../task";
|
|
3
3
|
import { Context } from "../context";
|
|
4
|
+
export type TextResponse = "text";
|
|
5
|
+
/**
|
|
6
|
+
* Thread state discriminated union
|
|
7
|
+
*/
|
|
8
|
+
export type ThreadState = typeof RUNNING | typeof STOPPED | typeof INTERRUPTIBLE | typeof UNINTERRUPTIBLE | typeof ZOMBIE | typeof DEAD;
|
|
4
9
|
/**
|
|
5
10
|
* Thread-specific tool call state for approval workflow.
|
|
6
11
|
* This extends the protocol states for internal thread use.
|
|
@@ -23,19 +28,6 @@ export type ThreadStreamEvent = LanguageModelStreamEvent;
|
|
|
23
28
|
export interface ActionSet {
|
|
24
29
|
toolCalls: ToolCall[];
|
|
25
30
|
}
|
|
26
|
-
/**
|
|
27
|
-
* Result of a single tick of execution
|
|
28
|
-
*/
|
|
29
|
-
export interface TickResult {
|
|
30
|
-
/**
|
|
31
|
-
* Events to add to thread history
|
|
32
|
-
*/
|
|
33
|
-
events: ThreadEvent[];
|
|
34
|
-
/**
|
|
35
|
-
* Action intentions that need to be performed as a result of this tick
|
|
36
|
-
*/
|
|
37
|
-
intentions: ActionSet | null;
|
|
38
|
-
}
|
|
39
31
|
/**
|
|
40
32
|
* Result of performing actions, including both executed results and pending approvals
|
|
41
33
|
*/
|
|
@@ -64,8 +56,10 @@ export interface ThreadExecuteResult<TResponse = any> {
|
|
|
64
56
|
}
|
|
65
57
|
export interface ThreadOptions<TContext> {
|
|
66
58
|
context: Context<TContext>;
|
|
67
|
-
task?: Task<TContext>;
|
|
68
59
|
model?: LanguageModel;
|
|
60
|
+
task?: Task<TContext>;
|
|
61
|
+
threadId?: string;
|
|
62
|
+
maxTicks?: number;
|
|
63
|
+
abort?: AbortSignal;
|
|
69
64
|
}
|
|
70
|
-
export type TextResponse = "text";
|
|
71
65
|
//# sourceMappingURL=thread.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/types/thread.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"thread.d.ts","sourceRoot":"","sources":["../../src/types/thread.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;AAEpC,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC;;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;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAC;CAEvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB;;OAEG;IACH,gBAAgB,EAAE,QAAQ,EAAE,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,SAAS,GAAG,GAAG;IAClD;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,WAAW,aAAa,CAAC,QAAQ;IACrC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;CAGrB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kernl",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A modern AI agent framework
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "A modern AI agent framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"kernl",
|
|
7
7
|
"ai",
|
|
@@ -31,14 +31,16 @@
|
|
|
31
31
|
"@modelcontextprotocol/sdk": "^1.20.2",
|
|
32
32
|
"pino": "^9.6.0",
|
|
33
33
|
"zod": "^4.1.12",
|
|
34
|
-
"@kernl-sdk/protocol": "0.
|
|
34
|
+
"@kernl-sdk/protocol": "0.2.0",
|
|
35
35
|
"@kernl-sdk/shared": "^0.1.1"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
+
"@ai-sdk/openai": "3.0.0-beta.57",
|
|
38
39
|
"@types/node": "^24.10.0",
|
|
39
40
|
"tsc-alias": "^1.8.10",
|
|
40
41
|
"typescript": "5.9.2",
|
|
41
|
-
"vitest": "^4.0.8"
|
|
42
|
+
"vitest": "^4.0.8",
|
|
43
|
+
"@kernl-sdk/ai": "0.1.1"
|
|
42
44
|
},
|
|
43
45
|
"scripts": {
|
|
44
46
|
"build": "tsc && tsc-alias",
|
package/src/agent.ts
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
LanguageModel,
|
|
3
|
+
LanguageModelRequestSettings,
|
|
4
|
+
message,
|
|
5
|
+
} from "@kernl-sdk/protocol";
|
|
2
6
|
|
|
3
7
|
import type { Context, UnknownContext } from "./context";
|
|
4
8
|
import { InputGuardrail, OutputGuardrail } from "./guardrail";
|
|
5
9
|
import { AgentHooks } from "./lifecycle";
|
|
6
|
-
import {
|
|
10
|
+
import { BaseToolkit } from "./tool/toolkit";
|
|
7
11
|
import { Tool } from "./tool";
|
|
8
|
-
|
|
12
|
+
import { Thread } from "./thread";
|
|
9
13
|
|
|
10
14
|
import { MisconfiguredError } from "./lib/error";
|
|
11
15
|
|
|
12
16
|
import type { AgentConfig, AgentResponseType } from "./types/agent";
|
|
13
|
-
import {
|
|
17
|
+
import type {
|
|
18
|
+
TextResponse,
|
|
19
|
+
ThreadOptions,
|
|
20
|
+
ThreadExecuteResult,
|
|
21
|
+
ThreadStreamEvent,
|
|
22
|
+
} from "./types/thread";
|
|
23
|
+
import type { Kernl } from "./kernl";
|
|
24
|
+
import type { ResolvedAgentResponse } from "./guardrail";
|
|
14
25
|
|
|
15
26
|
export class Agent<
|
|
16
27
|
TContext = UnknownContext,
|
|
@@ -19,13 +30,22 @@ export class Agent<
|
|
|
19
30
|
extends AgentHooks<TContext, TResponse>
|
|
20
31
|
implements AgentConfig<TContext, TResponse>
|
|
21
32
|
{
|
|
33
|
+
private kernl?: Kernl;
|
|
34
|
+
|
|
22
35
|
id: string;
|
|
23
36
|
name: string;
|
|
24
37
|
instructions: (context: Context<TContext>) => Promise<string> | string;
|
|
25
38
|
|
|
26
39
|
model: LanguageModel;
|
|
27
40
|
modelSettings: LanguageModelRequestSettings;
|
|
28
|
-
toolkits:
|
|
41
|
+
toolkits: BaseToolkit<TContext>[];
|
|
42
|
+
guardrails: {
|
|
43
|
+
input: InputGuardrail[];
|
|
44
|
+
output: OutputGuardrail<AgentResponseType>[];
|
|
45
|
+
};
|
|
46
|
+
responseType: TResponse = "text" as TResponse;
|
|
47
|
+
resetToolChoice: boolean;
|
|
48
|
+
// toolUseBehavior: ToolUseBehavior; (TODO)
|
|
29
49
|
|
|
30
50
|
// --- (TODO) ---
|
|
31
51
|
// handoffDescription: string; // ??
|
|
@@ -35,36 +55,11 @@ export class Agent<
|
|
|
35
55
|
// /* Process/thread-group–wide signal state shared by all threads in the group: shared pending signals, job control
|
|
36
56
|
// (stops/cont, group exit), rlimits, etc. */
|
|
37
57
|
// signal: *struct signal_struct;
|
|
38
|
-
//
|
|
58
|
+
//
|
|
59
|
+
// /* Table of signal handlers (sa_handler, sa_mask, flags) shared by threads
|
|
60
|
+
// (CLONE_SIGHAND). RCU-protected so readers can access it locklessly. */
|
|
39
61
|
// sighand: *struct sighand_struct __rcu;
|
|
40
62
|
|
|
41
|
-
guardrails: {
|
|
42
|
-
input: InputGuardrail[];
|
|
43
|
-
output: OutputGuardrail<AgentResponseType>[];
|
|
44
|
-
};
|
|
45
|
-
responseType: TResponse = "text" as TResponse;
|
|
46
|
-
resetToolChoice: boolean;
|
|
47
|
-
// toolUseBehavior: ToolUseBehavior; (TODO)
|
|
48
|
-
|
|
49
|
-
// /**
|
|
50
|
-
// * Create an Agent with handoffs and automatically infer the union type for TResponse from the handoff agents' response types.
|
|
51
|
-
// */
|
|
52
|
-
// static create<
|
|
53
|
-
// TResponse extends AgentResponseType = TextResponse,
|
|
54
|
-
// Handoffs extends readonly (Agent<any, any> | Handoff<any, any>)[] = [],
|
|
55
|
-
// >(
|
|
56
|
-
// config: AgentConfigWithHandoffs<TResponse, Handoffs>,
|
|
57
|
-
// ): Agent<UnknownContext, TResponse | HandoffsOutputUnion<Handoffs>> {
|
|
58
|
-
// return new Agent<UnknownContext, TResponse | HandoffsOutputUnion<Handoffs>>(
|
|
59
|
-
// {
|
|
60
|
-
// ...config,
|
|
61
|
-
// handoffs: config.handoffs as any,
|
|
62
|
-
// responseType: config.responseType,
|
|
63
|
-
// handoffresponseTypeWarningEnabled: false,
|
|
64
|
-
// },
|
|
65
|
-
// );
|
|
66
|
-
// }
|
|
67
|
-
|
|
68
63
|
constructor(config: AgentConfig<TContext, TResponse>) {
|
|
69
64
|
super();
|
|
70
65
|
if (config.id.trim() === "") {
|
|
@@ -76,7 +71,7 @@ export class Agent<
|
|
|
76
71
|
typeof config.instructions === "function"
|
|
77
72
|
? config.instructions
|
|
78
73
|
: () => config.instructions as string;
|
|
79
|
-
this.model = config.model
|
|
74
|
+
this.model = config.model; // (TODO): include optional default setting for convenience like env.DEFAULT_LLM = "gpt-5"
|
|
80
75
|
this.modelSettings = config.modelSettings ?? {};
|
|
81
76
|
|
|
82
77
|
this.toolkits = config.toolkits ?? [];
|
|
@@ -95,30 +90,82 @@ export class Agent<
|
|
|
95
90
|
// this.handoffs = config.handoffs ?? [];
|
|
96
91
|
|
|
97
92
|
// --- Runtime warning for handoff response type compatibility ---
|
|
98
|
-
// if (
|
|
99
|
-
//
|
|
100
|
-
// config.handoffresponseTypeWarningEnabled
|
|
101
|
-
// ) {
|
|
102
|
-
// if (this.handoffs && this.responseType) {
|
|
103
|
-
// const responseTypes = new Set<string>([
|
|
104
|
-
// JSON.stringify(this.responseType),
|
|
105
|
-
// ]);
|
|
106
|
-
// for (const h of this.handoffs) {
|
|
107
|
-
// if ("responseType" in h && h.responseType) {
|
|
108
|
-
// responseTypes.add(JSON.stringify(h.responseType));
|
|
109
|
-
// } else if ("agent" in h && h.agent.responseType) {
|
|
110
|
-
// responseTypes.add(JSON.stringify(h.agent.responseType));
|
|
111
|
-
// }
|
|
112
|
-
// }
|
|
93
|
+
// if (config.handoffresponseTypeWarningEnabled) {
|
|
94
|
+
// ...
|
|
113
95
|
// if (responseTypes.size > 1) {
|
|
114
96
|
// logger.warn(
|
|
115
|
-
// `[Agent] Warning: Handoff agents have different response types: ${Array.from(responseTypes).join(", ")}.
|
|
97
|
+
// `[Agent] Warning: Handoff agents have different response types: ${Array.from(responseTypes).join(", ")}.
|
|
98
|
+
// You can make it type-safe by using Agent.create({ ... }) method instead.`,
|
|
116
99
|
// );
|
|
117
100
|
// }
|
|
118
101
|
// }
|
|
119
102
|
// }
|
|
120
103
|
}
|
|
121
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Bind this agent to a kernl instance. Called by kernl.register().
|
|
107
|
+
*/
|
|
108
|
+
bind(kernl: Kernl): void {
|
|
109
|
+
this.kernl = kernl;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Blocking execution - spawns or resumes thread and waits for completion
|
|
114
|
+
*/
|
|
115
|
+
async run(
|
|
116
|
+
instructions: string,
|
|
117
|
+
options?: ThreadOptions<TContext>,
|
|
118
|
+
): Promise<ThreadExecuteResult<ResolvedAgentResponse<TResponse>>> {
|
|
119
|
+
if (!this.kernl) {
|
|
120
|
+
throw new MisconfiguredError(
|
|
121
|
+
`Agent ${this.id} not bound to kernl. Call kernl.register(agent) first.`,
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const m = message({ role: "user", text: instructions });
|
|
126
|
+
const tid = options?.threadId;
|
|
127
|
+
|
|
128
|
+
// NOTE: may end up moving this to the kernl
|
|
129
|
+
let thread = tid ? this.kernl.threads.get(tid) : null;
|
|
130
|
+
if (!thread) {
|
|
131
|
+
thread = new Thread(this.kernl, this, [m], options);
|
|
132
|
+
return this.kernl.spawn(thread);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
thread.append(m);
|
|
136
|
+
return this.kernl.schedule(thread);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Streaming execution - spawns or resumes thread and returns async iterator
|
|
141
|
+
*
|
|
142
|
+
* NOTE: streaming probably won't make sense in scheduling contexts so spawnStream etc. won't make sense
|
|
143
|
+
*/
|
|
144
|
+
async *stream(
|
|
145
|
+
instructions: string,
|
|
146
|
+
options?: ThreadOptions<TContext>,
|
|
147
|
+
): AsyncIterable<ThreadStreamEvent> {
|
|
148
|
+
if (!this.kernl) {
|
|
149
|
+
throw new MisconfiguredError(
|
|
150
|
+
`Agent ${this.id} not bound to kernl. Call kernl.register(agent) first.`,
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const m = message({ role: "user", text: instructions });
|
|
155
|
+
const tid = options?.threadId;
|
|
156
|
+
|
|
157
|
+
// NOTE: may end up moving this to the kernl
|
|
158
|
+
let thread = tid ? this.kernl.threads.get(tid) : null;
|
|
159
|
+
if (!thread) {
|
|
160
|
+
thread = new Thread(this.kernl, this, [m], options);
|
|
161
|
+
yield* this.kernl.spawnStream(thread);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
thread.append(m);
|
|
166
|
+
yield* this.kernl.scheduleStream(thread);
|
|
167
|
+
}
|
|
168
|
+
|
|
122
169
|
/**
|
|
123
170
|
* Get a specific tool by ID from all toolkits.
|
|
124
171
|
*
|
|
@@ -164,40 +211,4 @@ export class Agent<
|
|
|
164
211
|
|
|
165
212
|
return allTools;
|
|
166
213
|
}
|
|
167
|
-
|
|
168
|
-
// async run<TContext>(
|
|
169
|
-
// input: string,
|
|
170
|
-
// options: SharedRunOptions<TContext>,
|
|
171
|
-
// ): Promise<RunResult<TContext>> {
|
|
172
|
-
// // TODO
|
|
173
|
-
// // ...
|
|
174
|
-
// }
|
|
175
|
-
|
|
176
|
-
// async stream<TContext>(
|
|
177
|
-
// input: string,
|
|
178
|
-
// options: StreamOptions<TContext>,
|
|
179
|
-
// ): Promise<StreamedRunResult<TContext>> {
|
|
180
|
-
// // TODO
|
|
181
|
-
// // ...
|
|
182
|
-
// }
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
// ----------------------
|
|
186
|
-
// Events
|
|
187
|
-
// ----------------------
|
|
188
|
-
|
|
189
|
-
// on(event: any, handler: Function): void {
|
|
190
|
-
// // TODO
|
|
191
|
-
// // ...
|
|
192
|
-
// }
|
|
193
|
-
|
|
194
|
-
// once(event: any, handler: Function): void {
|
|
195
|
-
// // TODO
|
|
196
|
-
// // ...
|
|
197
|
-
// }
|
|
198
|
-
|
|
199
|
-
// off(event: any, handler: Function): void {
|
|
200
|
-
// // TODO
|
|
201
|
-
// // ...
|
|
202
|
-
// }
|
|
203
214
|
}
|
package/src/index.ts
CHANGED
package/src/kernl.ts
CHANGED
|
@@ -1,22 +1,71 @@
|
|
|
1
1
|
import { Agent } from "./agent";
|
|
2
2
|
import { UnknownContext } from "./context";
|
|
3
3
|
import { KernlHooks } from "./lifecycle";
|
|
4
|
+
import type { Thread } from "./thread";
|
|
4
5
|
|
|
5
6
|
import type { AgentResponseType } from "./types/agent";
|
|
7
|
+
import type { ThreadExecuteResult, ThreadStreamEvent } from "./types/thread";
|
|
8
|
+
import type { ResolvedAgentResponse } from "./guardrail";
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
|
-
*
|
|
11
|
+
* The kernl - manages agent processes, scheduling, and task lifecycle
|
|
9
12
|
*
|
|
10
13
|
* Orchestrates agent execution, including guardrails, tool calls, session persistence, and
|
|
11
14
|
* tracing.
|
|
12
15
|
*/
|
|
13
16
|
export class Kernl extends KernlHooks<UnknownContext, AgentResponseType> {
|
|
14
17
|
private agents: Map<string, Agent> = new Map();
|
|
18
|
+
threads: Map<string, Thread<any, any>> = new Map();
|
|
15
19
|
|
|
16
20
|
/**
|
|
17
21
|
* Registers a new agent with the kernl instance.
|
|
18
22
|
*/
|
|
19
23
|
register(agent: Agent): void {
|
|
20
|
-
|
|
24
|
+
this.agents.set(agent.id, agent);
|
|
25
|
+
agent.bind(this);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Spawn a new thread - blocking execution
|
|
30
|
+
*/
|
|
31
|
+
async spawn<TContext, TResponse extends AgentResponseType>(
|
|
32
|
+
thread: Thread<TContext, TResponse>,
|
|
33
|
+
): Promise<ThreadExecuteResult<ResolvedAgentResponse<TResponse>>> {
|
|
34
|
+
this.threads.set(thread.id, thread);
|
|
35
|
+
return await thread.execute();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Schedule an existing thread - blocking execution
|
|
40
|
+
*
|
|
41
|
+
* NOTE: just blocks for now
|
|
42
|
+
*/
|
|
43
|
+
async schedule<TContext, TResponse extends AgentResponseType>(
|
|
44
|
+
thread: Thread<TContext, TResponse>,
|
|
45
|
+
): Promise<ThreadExecuteResult<ResolvedAgentResponse<TResponse>>> {
|
|
46
|
+
return await thread.execute();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* (TMP) - probably won't make sense with assync scheduling contexts
|
|
51
|
+
*
|
|
52
|
+
* Spawn a new thread - streaming execution
|
|
53
|
+
*/
|
|
54
|
+
async *spawnStream<TContext, TResponse extends AgentResponseType>(
|
|
55
|
+
thread: Thread<TContext, TResponse>,
|
|
56
|
+
): AsyncIterable<ThreadStreamEvent> {
|
|
57
|
+
this.threads.set(thread.id, thread);
|
|
58
|
+
yield* thread.stream();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* (TMP) - probably won't make sense with assync scheduling contexts
|
|
63
|
+
*
|
|
64
|
+
* Schedule an existing thread - streaming execution
|
|
65
|
+
*/
|
|
66
|
+
async *scheduleStream<TContext, TResponse extends AgentResponseType>(
|
|
67
|
+
thread: Thread<TContext, TResponse>,
|
|
68
|
+
): AsyncIterable<ThreadStreamEvent> {
|
|
69
|
+
yield* thread.stream();
|
|
21
70
|
}
|
|
22
71
|
}
|