kernl 0.6.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-check-types.log +1 -1
  3. package/CHANGELOG.md +44 -0
  4. package/dist/agent/__tests__/concurrency.test.js +1 -1
  5. package/dist/agent/__tests__/run.test.js +1 -1
  6. package/dist/agent/__tests__/systools.test.d.ts +2 -0
  7. package/dist/agent/__tests__/systools.test.d.ts.map +1 -0
  8. package/dist/agent/__tests__/systools.test.js +121 -0
  9. package/dist/{types/agent.d.ts → agent/types.d.ts} +19 -2
  10. package/dist/agent/types.d.ts.map +1 -0
  11. package/dist/agent.d.ts +48 -6
  12. package/dist/agent.d.ts.map +1 -1
  13. package/dist/agent.js +100 -13
  14. package/dist/api/models/thread.d.ts +1 -1
  15. package/dist/api/resources/agents/agents.d.ts +38 -0
  16. package/dist/api/resources/agents/agents.d.ts.map +1 -0
  17. package/dist/api/resources/agents/agents.js +44 -0
  18. package/dist/api/resources/agents/index.d.ts +2 -0
  19. package/dist/api/resources/agents/index.d.ts.map +1 -0
  20. package/dist/api/resources/agents/index.js +1 -0
  21. package/dist/api/resources/threads/threads.d.ts +1 -1
  22. package/dist/api/resources/threads/threads.d.ts.map +1 -1
  23. package/dist/api/resources/threads/threads.js +1 -1
  24. package/dist/api/resources/threads/types.d.ts +2 -2
  25. package/dist/api/resources/threads/types.d.ts.map +1 -1
  26. package/dist/context.d.ts +10 -4
  27. package/dist/context.d.ts.map +1 -1
  28. package/dist/context.js +5 -0
  29. package/dist/guardrail.d.ts +2 -2
  30. package/dist/index.d.ts +5 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -3
  33. package/dist/internal.d.ts +2 -2
  34. package/dist/internal.js +1 -1
  35. package/dist/kernl/index.d.ts +1 -1
  36. package/dist/kernl/index.d.ts.map +1 -1
  37. package/dist/kernl/index.js +0 -1
  38. package/dist/kernl/kernl.d.ts +11 -20
  39. package/dist/kernl/kernl.d.ts.map +1 -1
  40. package/dist/kernl/kernl.js +37 -34
  41. package/dist/kernl/types.d.ts +91 -0
  42. package/dist/kernl/types.d.ts.map +1 -0
  43. package/dist/lib/error.d.ts +2 -2
  44. package/dist/lifecycle.d.ts +2 -2
  45. package/dist/memory/codec.d.ts +32 -0
  46. package/dist/memory/codec.d.ts.map +1 -0
  47. package/dist/memory/codec.js +97 -0
  48. package/dist/memory/codecs/domain.d.ts +34 -0
  49. package/dist/memory/codecs/domain.d.ts.map +1 -0
  50. package/dist/memory/codecs/domain.js +99 -0
  51. package/dist/memory/codecs/identity.d.ts +12 -0
  52. package/dist/memory/codecs/identity.d.ts.map +1 -0
  53. package/dist/memory/codecs/identity.js +17 -0
  54. package/dist/memory/codecs/index.d.ts +31 -0
  55. package/dist/memory/codecs/index.d.ts.map +1 -0
  56. package/dist/memory/codecs/index.js +39 -0
  57. package/dist/memory/codecs/tpuf.d.ts +38 -0
  58. package/dist/memory/codecs/tpuf.d.ts.map +1 -0
  59. package/dist/memory/codecs/tpuf.js +90 -0
  60. package/dist/memory/encoder.d.ts +29 -0
  61. package/dist/memory/encoder.d.ts.map +1 -0
  62. package/dist/memory/encoder.js +45 -0
  63. package/dist/memory/handle.d.ts +89 -0
  64. package/dist/memory/handle.d.ts.map +1 -0
  65. package/dist/memory/handle.js +128 -0
  66. package/dist/memory/index.d.ts +12 -0
  67. package/dist/memory/index.d.ts.map +1 -0
  68. package/dist/memory/index.js +7 -0
  69. package/dist/memory/indexes.d.ts +91 -0
  70. package/dist/memory/indexes.d.ts.map +1 -0
  71. package/dist/memory/indexes.js +7 -0
  72. package/dist/memory/memory.d.ts +55 -0
  73. package/dist/memory/memory.d.ts.map +1 -0
  74. package/dist/memory/memory.js +113 -0
  75. package/dist/memory/schema.d.ts +41 -0
  76. package/dist/memory/schema.d.ts.map +1 -0
  77. package/dist/memory/schema.js +112 -0
  78. package/dist/memory/store.d.ts +36 -0
  79. package/dist/memory/store.d.ts.map +1 -0
  80. package/dist/memory/store.js +4 -0
  81. package/dist/memory/types.d.ts +250 -0
  82. package/dist/memory/types.d.ts.map +1 -0
  83. package/dist/memory/types.js +4 -0
  84. package/dist/storage/base.d.ts +6 -1
  85. package/dist/storage/base.d.ts.map +1 -1
  86. package/dist/storage/in-memory.d.ts +24 -2
  87. package/dist/storage/in-memory.d.ts.map +1 -1
  88. package/dist/storage/in-memory.js +131 -0
  89. package/dist/storage/thread.d.ts +1 -1
  90. package/dist/thread/__tests__/integration.test.js +1 -1
  91. package/dist/thread/__tests__/mock.d.ts +1 -1
  92. package/dist/thread/__tests__/namespace.test.js +1 -1
  93. package/dist/thread/__tests__/thread.test.js +1 -1
  94. package/dist/thread/thread.d.ts +2 -2
  95. package/dist/thread/thread.d.ts.map +1 -1
  96. package/dist/thread/thread.js +3 -1
  97. package/dist/{types/thread.d.ts → thread/types.d.ts} +2 -2
  98. package/dist/thread/types.d.ts.map +1 -0
  99. package/dist/thread/utils.d.ts +2 -2
  100. package/dist/thread/utils.d.ts.map +1 -1
  101. package/dist/tool/index.d.ts +1 -0
  102. package/dist/tool/index.d.ts.map +1 -1
  103. package/dist/tool/index.js +2 -0
  104. package/dist/tool/sys/index.d.ts +7 -0
  105. package/dist/tool/sys/index.d.ts.map +1 -0
  106. package/dist/tool/sys/index.js +6 -0
  107. package/dist/tool/sys/memory.d.ts +14 -0
  108. package/dist/tool/sys/memory.d.ts.map +1 -0
  109. package/dist/tool/sys/memory.js +103 -0
  110. package/dist/tool/tool.d.ts +1 -1
  111. package/dist/tool/tool.d.ts.map +1 -1
  112. package/dist/tool/tool.js +2 -2
  113. package/package.json +4 -2
  114. package/src/agent/__tests__/systools.test.ts +146 -0
  115. package/src/{types/agent.ts → agent/types.ts} +22 -1
  116. package/src/agent.ts +144 -36
  117. package/src/api/__tests__/threads.test.ts +2 -2
  118. package/src/api/models/thread.ts +1 -1
  119. package/src/api/resources/agents/agents.ts +56 -0
  120. package/src/api/resources/agents/index.ts +1 -0
  121. package/src/api/resources/threads/events.ts +1 -1
  122. package/src/api/resources/threads/threads.ts +2 -2
  123. package/src/api/resources/threads/types.ts +2 -2
  124. package/src/context.ts +14 -136
  125. package/src/guardrail.ts +2 -2
  126. package/src/index.ts +35 -6
  127. package/src/internal.ts +2 -2
  128. package/src/kernl/index.ts +8 -0
  129. package/src/{kernl.ts → kernl/kernl.ts} +50 -10
  130. package/src/kernl/types.ts +106 -0
  131. package/src/lib/error.ts +2 -2
  132. package/src/lifecycle.ts +2 -2
  133. package/src/memory/codecs/domain.ts +115 -0
  134. package/src/memory/codecs/identity.ts +28 -0
  135. package/src/memory/codecs/index.ts +61 -0
  136. package/src/memory/codecs/tpuf.ts +115 -0
  137. package/src/memory/encoder.ts +56 -0
  138. package/src/memory/handle.ts +189 -0
  139. package/src/memory/index.ts +49 -0
  140. package/src/memory/indexes.ts +108 -0
  141. package/src/memory/memory.ts +151 -0
  142. package/src/memory/schema.ts +142 -0
  143. package/src/memory/store.ts +47 -0
  144. package/src/memory/types.ts +282 -0
  145. package/src/storage/__tests__/in-memory.test.ts +1 -1
  146. package/src/storage/base.ts +7 -1
  147. package/src/storage/in-memory.ts +170 -2
  148. package/src/storage/thread.ts +1 -1
  149. package/src/thread/__tests__/integration.test.ts +1 -1
  150. package/src/thread/__tests__/mock.ts +1 -1
  151. package/src/thread/__tests__/thread.test.ts +1 -1
  152. package/src/thread/thread.ts +5 -3
  153. package/src/{types/thread.ts → thread/types.ts} +1 -1
  154. package/src/thread/utils.ts +2 -2
  155. package/src/tool/index.ts +3 -0
  156. package/src/tool/sys/index.ts +7 -0
  157. package/src/tool/sys/memory.ts +120 -0
  158. package/src/tool/tool.ts +8 -4
  159. package/tsconfig.tsbuildinfo +1 -0
  160. package/dist/api/__tests__/cursor-page.test.d.ts +0 -2
  161. package/dist/api/__tests__/cursor-page.test.d.ts.map +0 -1
  162. package/dist/api/__tests__/cursor-page.test.js +0 -414
  163. package/dist/api/__tests__/offset-page.test.d.ts +0 -2
  164. package/dist/api/__tests__/offset-page.test.d.ts.map +0 -1
  165. package/dist/api/__tests__/offset-page.test.js +0 -510
  166. package/dist/api/pagination/base.d.ts +0 -48
  167. package/dist/api/pagination/base.d.ts.map +0 -1
  168. package/dist/api/pagination/base.js +0 -45
  169. package/dist/api/pagination/cursor.d.ts +0 -44
  170. package/dist/api/pagination/cursor.d.ts.map +0 -1
  171. package/dist/api/pagination/cursor.js +0 -52
  172. package/dist/api/pagination/offset.d.ts +0 -42
  173. package/dist/api/pagination/offset.d.ts.map +0 -1
  174. package/dist/api/pagination/offset.js +0 -55
  175. package/dist/kernl/threads.d.ts +0 -110
  176. package/dist/kernl/threads.d.ts.map +0 -1
  177. package/dist/kernl/threads.js +0 -126
  178. package/dist/kernl.d.ts +0 -51
  179. package/dist/kernl.d.ts.map +0 -1
  180. package/dist/kernl.js +0 -91
  181. package/dist/types/agent.d.ts.map +0 -1
  182. package/dist/types/kernl.d.ts +0 -42
  183. package/dist/types/kernl.d.ts.map +0 -1
  184. package/dist/types/thread.d.ts.map +0 -1
  185. package/src/api/__tests__/cursor-page.test.ts +0 -512
  186. package/src/api/__tests__/offset-page.test.ts +0 -624
  187. package/src/api/pagination/base.ts +0 -79
  188. package/src/api/pagination/cursor.ts +0 -86
  189. package/src/api/pagination/offset.ts +0 -89
  190. package/src/types/kernl.ts +0 -51
  191. /package/dist/{types/agent.js → agent/types.js} +0 -0
  192. /package/dist/{types/kernl.js → kernl/types.js} +0 -0
  193. /package/dist/{types/thread.js → thread/types.js} +0 -0
@@ -1,4 +1,4 @@
1
1
 
2
- > kernl@0.6.1 build /Users/andjones/Documents/projects/kernl/packages/kernl
2
+ > kernl@0.6.3 build /Users/andjones/Documents/projects/kernl/packages/kernl
3
3
  > tsc && tsc-alias --resolve-full-paths
4
4
 
@@ -1,4 +1,4 @@
1
1
 
2
- > @kernl-sdk/core@0.2.2 check-types /Users/andjones/Documents/projects/kernl/packages/kernl
2
+ > kernl@0.6.2 check-types /Users/andjones/Documents/projects/kernl/packages/kernl
3
3
  > tsc --noEmit
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # @kernl/core
2
2
 
3
+ ## 0.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 13545a5: Add memory system tools and agents public API
8
+ - Add system tools infrastructure (`agent.systools`) for built-in agent capabilities
9
+ - Add memory toolkit with `memories.search`, `memories.create`, `memories.list` tools
10
+ - Add `memory: { enabled: true }` agent config to enable memory tools
11
+ - Add `ctx.agent` reference for tools to access agent APIs
12
+ - Add `kernl.agents` public API with `get`, `list`, `has`, `unregister` methods
13
+ - Add `Memory.list()` method for listing memories with filters
14
+ - Add `agent.description` field for agent metadata
15
+ - Fix: exclude metadata from thread checkpoint to prevent race conditions
16
+
17
+ ## 0.6.3
18
+
19
+ ### Patch Changes
20
+
21
+ - a7d6138: Add agent.memories API and memory integration with vector backends
22
+
23
+ **@kernl-sdk/retrieval**
24
+ - Add `planQuery()` for adapting queries based on backend capabilities
25
+ - Add `SearchCapabilities` interface to describe backend features
26
+ - Gracefully degrade hybrid queries when not supported
27
+
28
+ **@kernl-sdk/pg**
29
+ - Add `capabilities()` method to PGVectorSearchIndex
30
+ - Fix hit decoding to include id in document
31
+
32
+ **@kernl-sdk/turbopuffer**
33
+ - Add `capabilities()` method describing supported search modes
34
+ - Add bigint type mapping for timestamps
35
+ - Fix hit decoding to include id in document
36
+ - Add memory integration tests
37
+
38
+ **kernl**
39
+ - Add `agent.memories.create()` with simplified syntax (auto-generated IDs, flattened scope)
40
+ - Add `agent.memories.search()` scoped to agent
41
+ - Add backend-aware codecs for Turbopuffer field mapping (tvec → vector)
42
+ - Default `include: true` for Turbopuffer queries to return all attributes
43
+
44
+ - Updated dependencies [a7d6138]
45
+ - @kernl-sdk/retrieval@0.1.0
46
+
3
47
  ## 0.6.2
4
48
 
5
49
  ### Patch Changes
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import { Agent } from "../../agent.js";
3
- import { Kernl } from "../../kernl.js";
3
+ import { Kernl } from "../../kernl/index.js";
4
4
  import { createMockModel } from "../../thread/__tests__/fixtures/mock-model.js";
5
5
  import { RuntimeError } from "../../lib/error.js";
6
6
  import { message } from "@kernl-sdk/protocol";
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import { Agent } from "../../agent.js";
3
- import { Kernl } from "../../kernl.js";
3
+ import { Kernl } from "../../kernl/index.js";
4
4
  import { createMockModel } from "../../thread/__tests__/fixtures/mock-model.js";
5
5
  import { MisconfiguredError } from "../../lib/error.js";
6
6
  import { message } from "@kernl-sdk/protocol";
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=systools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"systools.test.d.ts","sourceRoot":"","sources":["../../../src/agent/__tests__/systools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { Agent } from "../../agent.js";
3
+ import { Kernl } from "../../kernl/index.js";
4
+ import { Context } from "../../context.js";
5
+ import { createMockModel } from "../../thread/__tests__/fixtures/mock-model.js";
6
+ import { message } from "@kernl-sdk/protocol";
7
+ describe("Agent systools", () => {
8
+ const model = createMockModel(async () => ({
9
+ content: [message({ role: "assistant", text: "Done" })],
10
+ finishReason: "stop",
11
+ usage: { inputTokens: 2, outputTokens: 2, totalTokens: 4 },
12
+ warnings: [],
13
+ }));
14
+ describe("memory toolkit", () => {
15
+ it("adds memory toolkit when memory.enabled is true", () => {
16
+ const agent = new Agent({
17
+ id: "test-agent",
18
+ name: "Test",
19
+ instructions: "Test",
20
+ model,
21
+ memory: { enabled: true },
22
+ });
23
+ const kernl = new Kernl();
24
+ kernl.register(agent);
25
+ expect(agent.systools.length).toBe(1);
26
+ expect(agent.systools[0].id).toBe("sys.memory");
27
+ });
28
+ it("has no systools when memory not configured", () => {
29
+ const agent = new Agent({
30
+ id: "test-agent",
31
+ name: "Test",
32
+ instructions: "Test",
33
+ model,
34
+ });
35
+ const kernl = new Kernl();
36
+ kernl.register(agent);
37
+ expect(agent.systools.length).toBe(0);
38
+ });
39
+ it("has no systools when memory.enabled is false", () => {
40
+ const agent = new Agent({
41
+ id: "test-agent",
42
+ name: "Test",
43
+ instructions: "Test",
44
+ model,
45
+ memory: { enabled: false },
46
+ });
47
+ const kernl = new Kernl();
48
+ kernl.register(agent);
49
+ expect(agent.systools.length).toBe(0);
50
+ });
51
+ it("can retrieve memory tools via agent.tool()", () => {
52
+ const agent = new Agent({
53
+ id: "test-agent",
54
+ name: "Test",
55
+ instructions: "Test",
56
+ model,
57
+ memory: { enabled: true },
58
+ });
59
+ const kernl = new Kernl();
60
+ kernl.register(agent);
61
+ expect(agent.tool("memories.search")).toBeDefined();
62
+ expect(agent.tool("memories.create")).toBeDefined();
63
+ expect(agent.tool("memories.list")).toBeDefined();
64
+ });
65
+ it("includes memory tools in agent.tools() output", async () => {
66
+ const agent = new Agent({
67
+ id: "test-agent",
68
+ name: "Test",
69
+ instructions: "Test",
70
+ model,
71
+ memory: { enabled: true },
72
+ });
73
+ const kernl = new Kernl();
74
+ kernl.register(agent);
75
+ const ctx = new Context("test");
76
+ const tools = await agent.tools(ctx);
77
+ const ids = tools.map((t) => t.id);
78
+ expect(ids).toContain("memories.search");
79
+ expect(ids).toContain("memories.create");
80
+ expect(ids).toContain("memories.list");
81
+ });
82
+ it("systools appear before user toolkits in tools() output", async () => {
83
+ const agent = new Agent({
84
+ id: "test-agent",
85
+ name: "Test",
86
+ instructions: "Test",
87
+ model,
88
+ memory: { enabled: true },
89
+ });
90
+ const kernl = new Kernl();
91
+ kernl.register(agent);
92
+ const ctx = new Context("test");
93
+ const tools = await agent.tools(ctx);
94
+ // Memory tools should be first (from systools)
95
+ expect(tools[0].id).toBe("memories.search");
96
+ expect(tools[1].id).toBe("memories.create");
97
+ expect(tools[2].id).toBe("memories.list");
98
+ });
99
+ });
100
+ describe("memory config defaults", () => {
101
+ it("defaults memory to { enabled: false }", () => {
102
+ const agent = new Agent({
103
+ id: "test-agent",
104
+ name: "Test",
105
+ instructions: "Test",
106
+ model,
107
+ });
108
+ expect(agent.memory).toEqual({ enabled: false });
109
+ });
110
+ it("preserves memory config when provided", () => {
111
+ const agent = new Agent({
112
+ id: "test-agent",
113
+ name: "Test",
114
+ instructions: "Test",
115
+ model,
116
+ memory: { enabled: true },
117
+ });
118
+ expect(agent.memory).toEqual({ enabled: true });
119
+ });
120
+ });
121
+ });
@@ -3,13 +3,14 @@ import { Context, UnknownContext } from "../context.js";
3
3
  import { LanguageModel, LanguageModelRequestSettings } from "@kernl-sdk/protocol";
4
4
  import { InputGuardrail, OutputGuardrail } from "../guardrail.js";
5
5
  import { BaseToolkit } from "../tool/index.js";
6
- import { TextResponse } from "./thread.js";
6
+ import { TextResponse } from "../thread/types.js";
7
7
  /**
8
8
  * Configuration for an agent.
9
9
  */
10
10
  export interface AgentConfig<TContext = UnknownContext, TResponse extends AgentResponseType = TextResponse> {
11
11
  id: string;
12
12
  name: string;
13
+ description?: string;
13
14
  /**
14
15
  * The instructions for the agent. Will be used as the "system prompt" when this agent is
15
16
  * invoked. Describes what the agent should do, and how it responds.
@@ -53,6 +54,13 @@ export interface AgentConfig<TContext = UnknownContext, TResponse extends AgentR
53
54
  * ```
54
55
  */
55
56
  toolkits?: BaseToolkit<TContext>[];
57
+ /**
58
+ * Memory configuration for this agent.
59
+ * Enables memory system tools (memories.search, memories.create, memories.list).
60
+ *
61
+ * Requires kernl to be configured with memory storage.
62
+ */
63
+ memory?: AgentMemoryConfig;
56
64
  /**
57
65
  * A list of checks that run in parallel to the agent's execution on the input + output for the agent,
58
66
  * depending on the configuration.
@@ -88,4 +96,13 @@ export interface AgentGuardrails<TResponse extends AgentResponseType = TextRespo
88
96
  * 'text' is a special type that indicates the output will be a string.
89
97
  */
90
98
  export type AgentResponseType = TextResponse | ZodType;
91
- //# sourceMappingURL=agent.d.ts.map
99
+ /**
100
+ * Memory configuration for an agent.
101
+ */
102
+ export interface AgentMemoryConfig {
103
+ /**
104
+ * Enable memory system tools for this agent.
105
+ */
106
+ enabled: boolean;
107
+ }
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.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,gBAAgB,CAAC;AAE9C;;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;IAGb,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;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;;;;;OAKG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAE3B;;;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;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB"}
package/dist/agent.d.ts CHANGED
@@ -1,21 +1,25 @@
1
1
  import { LanguageModel, LanguageModelItem, LanguageModelRequestSettings } from "@kernl-sdk/protocol";
2
- import type { Kernl } from "./kernl.js";
2
+ import type { Kernl } from "./kernl/index.js";
3
3
  import type { RThreadsListParams, RThreadCreateParams, RThreadGetOptions, RThreadHistoryParams, RThreadUpdateParams } from "./api/resources/threads/types.js";
4
4
  import type { Context, UnknownContext } from "./context.js";
5
5
  import { Tool } from "./tool/index.js";
6
6
  import { BaseToolkit } from "./tool/toolkit.js";
7
7
  import { InputGuardrail, OutputGuardrail, type ResolvedAgentResponse } from "./guardrail.js";
8
8
  import { AgentHooks } from "./lifecycle.js";
9
- import type { AgentConfig, AgentResponseType } from "./types/agent.js";
10
- import type { TextResponse, ThreadExecuteOptions, ThreadExecuteResult, ThreadStreamEvent } from "./types/thread.js";
9
+ import type { AgentConfig, AgentMemoryConfig, AgentResponseType } from "./agent/types.js";
10
+ import type { TextResponse, ThreadExecuteOptions, ThreadExecuteResult, ThreadStreamEvent } from "./thread/types.js";
11
+ import type { AgentMemoryCreate, MemoryListOptions, MemorySearchQuery } from "./memory/index.js";
11
12
  export declare class Agent<TContext = UnknownContext, TResponse extends AgentResponseType = TextResponse> extends AgentHooks<TContext, TResponse> implements AgentConfig<TContext, TResponse> {
12
13
  private kernl?;
13
14
  id: string;
14
15
  name: string;
16
+ description?: string;
15
17
  instructions: (context: Context<TContext>) => Promise<string> | string;
16
18
  model: LanguageModel;
17
19
  modelSettings: LanguageModelRequestSettings;
18
20
  toolkits: BaseToolkit<TContext>[];
21
+ systools: BaseToolkit<TContext>[];
22
+ memory: AgentMemoryConfig;
19
23
  guardrails: {
20
24
  input: InputGuardrail[];
21
25
  output: OutputGuardrail<AgentResponseType>[];
@@ -46,7 +50,7 @@ export declare class Agent<TContext = UnknownContext, TResponse extends AgentRes
46
50
  /**
47
51
  * @internal
48
52
  *
49
- * Get a specific tool by ID from all toolkits.
53
+ * Get a specific tool by ID from systools and toolkits.
50
54
  *
51
55
  * @param id The tool ID to look up
52
56
  * @returns The tool if found, undefined otherwise
@@ -55,7 +59,7 @@ export declare class Agent<TContext = UnknownContext, TResponse extends AgentRes
55
59
  /**
56
60
  * @internal
57
61
  *
58
- * Get all tools available from all toolkits for the given context.
62
+ * Get all tools available from systools and toolkits for the given context.
59
63
  * Checks for duplicate tool IDs across toolkits and throws an error if found.
60
64
  *
61
65
  * (TODO): Consider returning toolkits alongside tools so we can serialize them
@@ -73,11 +77,49 @@ export declare class Agent<TContext = UnknownContext, TResponse extends AgentRes
73
77
  */
74
78
  get threads(): {
75
79
  get: (tid: string, options?: RThreadGetOptions) => Promise<import("./index.js").Thread | null>;
76
- list: (params?: Omit<RThreadsListParams, "agentId">) => Promise<import("./api/pagination/cursor.js").CursorPage<import("./index.js").Thread, RThreadsListParams>>;
80
+ list: (params?: Omit<RThreadsListParams, "agentId">) => Promise<import("@kernl-sdk/shared").CursorPage<import("./index.js").Thread, RThreadsListParams>>;
77
81
  delete: (tid: string) => Promise<void>;
78
82
  history: (tid: string, params?: RThreadHistoryParams) => Promise<import("./index.js").ThreadEvent[]>;
79
83
  create: (params: Omit<RThreadCreateParams, "agentId" | "model">) => Promise<import("./index.js").Thread>;
80
84
  update: (tid: string, patch: RThreadUpdateParams) => Promise<import("./index.js").Thread | null>;
81
85
  };
86
+ /**
87
+ * Memory management scoped to this agent.
88
+ *
89
+ * Provides a simplified API for creating memories with:
90
+ * - Auto-generated IDs
91
+ * - Flattened scope fields (namespace, entityId) - agentId is implicit
92
+ * - Default kind of "semantic"
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * await agent.memories.create({
97
+ * namespace: "user-123",
98
+ * collection: "preferences",
99
+ * content: { text: "User prefers TypeScript" },
100
+ * });
101
+ * ```
102
+ */
103
+ get memories(): {
104
+ /**
105
+ * List memories scoped to this agent.
106
+ */
107
+ list: (params?: Omit<MemoryListOptions, "filter"> & {
108
+ collection?: string;
109
+ limit?: number;
110
+ }) => Promise<import("./memory/index.js").MemoryRecord[]>;
111
+ /**
112
+ * Create a new memory scoped to this agent.
113
+ */
114
+ create: (params: AgentMemoryCreate) => Promise<import("./memory/index.js").MemoryRecord>;
115
+ /**
116
+ * Search memories scoped to this agent.
117
+ */
118
+ search: (params: Omit<MemorySearchQuery, "filter"> & {
119
+ filter?: Omit<NonNullable<MemorySearchQuery["filter"]>, "scope"> & {
120
+ scope?: Omit<NonNullable<NonNullable<MemorySearchQuery["filter"]>["scope"]>, "agentId">;
121
+ };
122
+ }) => Promise<import("@kernl-sdk/retrieval").SearchHit<import("./memory/index.js").IndexMemoryRecord>[]>;
123
+ };
82
124
  }
83
125
  //# sourceMappingURL=agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EACb,iBAAiB,EACjB,4BAA4B,EAC7B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EACL,cAAc,EACd,eAAe,EACf,KAAK,qBAAqB,EAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,KAAK,CACd,QAAQ,GAAG,cAAc,EACzB,SAAS,SAAS,iBAAiB,GAAG,YAAY,CAEpD,SAAQ,UAAU,CAAC,QAAQ,EAAE,SAAS,CACtC,YAAW,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC;IAE3C,OAAO,CAAC,KAAK,CAAC,CAAQ;IAEtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAEvE,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,4BAA4B,CAAC;IAC5C,QAAQ,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;IAGlC,UAAU,EAAE;QACV,KAAK,EAAE,cAAc,EAAE,CAAC;QACxB,MAAM,EAAE,eAAe,CAAC,iBAAiB,CAAC,EAAE,CAAC;KAC9C,CAAC;IACF,YAAY,EAAE,SAAS,CAAuB;IAC9C,eAAe,EAAE,OAAO,CAAC;gBAgBb,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC;IA0CpD;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAIxB;;;;;OAKG;IACG,GAAG,CACP,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,EACnC,OAAO,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACvC,OAAO,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;IAkDjE;;;;;;;OAOG;IACI,MAAM,CACX,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,EACnC,OAAO,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GACvC,aAAa,CAAC,iBAAiB,CAAC;IAmDnC;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,SAAS;IAQ5C;;;;;;;;;;;;OAYG;IACG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IAqBlE;;;;OAIG;IACH,IAAI,OAAO;mBAWI,MAAM,YAAY,iBAAiB;wBAE/B,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC;sBAEpC,MAAM;uBACL,MAAM,WAAW,oBAAoB;yBAEnC,IAAI,CAAC,mBAAmB,EAAE,SAAS,GAAG,OAAO,CAAC;sBASjD,MAAM,SAAS,mBAAmB;MAGnD;CACF"}
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/agent.js CHANGED
@@ -1,15 +1,20 @@
1
1
  import { message, } from "@kernl-sdk/protocol";
2
2
  import { Thread } from "./thread/index.js";
3
+ import { memory } from "./tool/index.js";
3
4
  import { AgentHooks } from "./lifecycle.js";
4
5
  import { MisconfiguredError, RuntimeError } from "./lib/error.js";
6
+ import { randomID } from "@kernl-sdk/shared/lib";
5
7
  export class Agent extends AgentHooks {
6
8
  kernl;
7
9
  id;
8
10
  name;
11
+ description;
9
12
  instructions;
10
13
  model;
11
14
  modelSettings;
12
15
  toolkits;
16
+ systools;
17
+ memory;
13
18
  // actions: ActionSet; /* TODO */
14
19
  guardrails;
15
20
  responseType = "text";
@@ -33,6 +38,7 @@ export class Agent extends AgentHooks {
33
38
  }
34
39
  this.id = config.id;
35
40
  this.name = config.name;
41
+ this.description = config.description;
36
42
  this.instructions =
37
43
  typeof config.instructions === "function"
38
44
  ? config.instructions
@@ -40,6 +46,8 @@ export class Agent extends AgentHooks {
40
46
  this.model = config.model; // (TODO): include optional default setting for convenience like env.DEFAULT_LLM = "gpt-5"
41
47
  this.modelSettings = config.modelSettings ?? {};
42
48
  this.toolkits = config.toolkits ?? [];
49
+ this.systools = [];
50
+ this.memory = config.memory ?? { enabled: false };
43
51
  for (const toolkit of this.toolkits) {
44
52
  toolkit.bind(this);
45
53
  }
@@ -68,6 +76,13 @@ export class Agent extends AgentHooks {
68
76
  */
69
77
  bind(kernl) {
70
78
  this.kernl = kernl;
79
+ // initialize system toolkits
80
+ if (this.memory.enabled) {
81
+ // safety: system tools only rely on ctx.agent, not ctx.context
82
+ const toolkit = memory;
83
+ this.systools.push(toolkit);
84
+ toolkit.bind(this);
85
+ }
71
86
  }
72
87
  /**
73
88
  * Blocking execution - spawns or resumes thread and waits for completion
@@ -167,12 +182,19 @@ export class Agent extends AgentHooks {
167
182
  /**
168
183
  * @internal
169
184
  *
170
- * Get a specific tool by ID from all toolkits.
185
+ * Get a specific tool by ID from systools and toolkits.
171
186
  *
172
187
  * @param id The tool ID to look up
173
188
  * @returns The tool if found, undefined otherwise
174
189
  */
175
190
  tool(id) {
191
+ // Check systools first
192
+ for (const toolkit of this.systools) {
193
+ const tool = toolkit.get(id);
194
+ if (tool)
195
+ return tool;
196
+ }
197
+ // Then user toolkits
176
198
  for (const toolkit of this.toolkits) {
177
199
  const tool = toolkit.get(id);
178
200
  if (tool)
@@ -183,7 +205,7 @@ export class Agent extends AgentHooks {
183
205
  /**
184
206
  * @internal
185
207
  *
186
- * Get all tools available from all toolkits for the given context.
208
+ * Get all tools available from systools and toolkits for the given context.
187
209
  * Checks for duplicate tool IDs across toolkits and throws an error if found.
188
210
  *
189
211
  * (TODO): Consider returning toolkits alongside tools so we can serialize them
@@ -194,18 +216,16 @@ export class Agent extends AgentHooks {
194
216
  * @throws {MisconfiguredError} If duplicate tool IDs are found across toolkits
195
217
  */
196
218
  async tools(context) {
197
- const allTools = [];
198
- const toolIds = new Set();
199
- for (const toolkit of this.toolkits) {
200
- const tools = await toolkit.list(context);
201
- const duplicates = tools.map((t) => t.id).filter((id) => toolIds.has(id));
202
- if (duplicates.length > 0) {
203
- throw new MisconfiguredError(`Duplicate tool IDs found across toolkits: ${duplicates.join(", ")}`);
204
- }
205
- tools.forEach((t) => toolIds.add(t.id));
206
- allTools.push(...tools);
219
+ const all = [];
220
+ for (const toolkit of [...this.systools, ...this.toolkits]) {
221
+ all.push(...(await toolkit.list(context)));
222
+ }
223
+ const ids = all.map((t) => t.id);
224
+ const duplicates = ids.filter((id, i) => ids.indexOf(id) !== i);
225
+ if (duplicates.length > 0) {
226
+ throw new MisconfiguredError(`Duplicate tool IDs found: ${[...new Set(duplicates)].join(", ")}`);
207
227
  }
208
- return allTools;
228
+ return all;
209
229
  }
210
230
  /**
211
231
  * Thread management scoped to this agent.
@@ -234,4 +254,71 @@ export class Agent extends AgentHooks {
234
254
  update: (tid, patch) => kthreads.update(tid, patch),
235
255
  };
236
256
  }
257
+ /**
258
+ * Memory management scoped to this agent.
259
+ *
260
+ * Provides a simplified API for creating memories with:
261
+ * - Auto-generated IDs
262
+ * - Flattened scope fields (namespace, entityId) - agentId is implicit
263
+ * - Default kind of "semantic"
264
+ *
265
+ * @example
266
+ * ```ts
267
+ * await agent.memories.create({
268
+ * namespace: "user-123",
269
+ * collection: "preferences",
270
+ * content: { text: "User prefers TypeScript" },
271
+ * });
272
+ * ```
273
+ */
274
+ get memories() {
275
+ if (!this.kernl) {
276
+ throw new MisconfiguredError(`Agent ${this.id} not bound to kernl. Call kernl.register(agent) first.`);
277
+ }
278
+ const agentId = this.id;
279
+ const kmem = this.kernl.memories;
280
+ return {
281
+ /**
282
+ * List memories scoped to this agent.
283
+ */
284
+ list: (params) => kmem.list({
285
+ filter: {
286
+ scope: { agentId },
287
+ collections: params?.collection ? [params.collection] : undefined,
288
+ },
289
+ limit: params?.limit,
290
+ }),
291
+ /**
292
+ * Create a new memory scoped to this agent.
293
+ */
294
+ create: (params) => kmem.create({
295
+ id: params.id ?? `mem_${randomID()}`,
296
+ scope: {
297
+ namespace: params.namespace,
298
+ entityId: params.entityId,
299
+ agentId,
300
+ },
301
+ kind: "semantic",
302
+ collection: params.collection,
303
+ content: params.content,
304
+ wmem: params.wmem,
305
+ smem: params.smem,
306
+ timestamp: params.timestamp,
307
+ metadata: params.metadata,
308
+ }),
309
+ /**
310
+ * Search memories scoped to this agent.
311
+ */
312
+ search: (params) => kmem.search({
313
+ ...params,
314
+ filter: {
315
+ ...params.filter,
316
+ scope: {
317
+ ...params.filter?.scope,
318
+ agentId,
319
+ },
320
+ },
321
+ }),
322
+ };
323
+ }
237
324
  }
@@ -1,5 +1,5 @@
1
1
  import type { LanguageModelItem } from "@kernl-sdk/protocol";
2
- import type { ThreadState } from "../../types/thread.js";
2
+ import type { ThreadState } from "../../thread/types.js";
3
3
  /**
4
4
  * Model metadata for the language model used by a thread.
5
5
  *
@@ -0,0 +1,38 @@
1
+ import type { Agent } from "../../../agent.js";
2
+ import type { AgentResponseType } from "../../../agent/types.js";
3
+ import type { UnknownContext } from "../../../context.js";
4
+ import type { TextResponse } from "../../../thread/types.js";
5
+ /**
6
+ * Agents resource.
7
+ *
8
+ * Thin facade over the in-process agent registry, returning live Agent instances.
9
+ *
10
+ * Note: agents are code, not persisted data; this is process-local.
11
+ */
12
+ export declare class RAgents {
13
+ private readonly registry;
14
+ constructor(registry: Map<string, Agent>);
15
+ /**
16
+ * Get a live Agent instance by id.
17
+ *
18
+ * Callers are expected to know the concrete TContext/TResponse types
19
+ * for their own agents and can specify them via generics.
20
+ */
21
+ get<TContext = UnknownContext, TResponse extends AgentResponseType = TextResponse>(id: string): Agent<TContext, TResponse> | undefined;
22
+ /**
23
+ * Check if an agent with the given id is registered.
24
+ */
25
+ has(id: string): boolean;
26
+ /**
27
+ * List all registered agents as live instances.
28
+ *
29
+ * Since this is a heterogeneous collection, we expose the widest safe
30
+ * type parameters here.
31
+ */
32
+ list(): Agent<UnknownContext, AgentResponseType>[];
33
+ /**
34
+ * Unregister an agent at runtime.
35
+ */
36
+ unregister(id: string): boolean;
37
+ }
38
+ //# sourceMappingURL=agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../../src/api/resources/agents/agents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,OAAO;IACN,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAEzD;;;;;OAKG;IACH,GAAG,CACD,QAAQ,GAAG,cAAc,EACzB,SAAS,SAAS,iBAAiB,GAAG,YAAY,EAClD,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,SAAS;IAKrD;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAIxB;;;;;OAKG;IACH,IAAI,IAAI,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE;IAOlD;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAGhC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Agents resource.
3
+ *
4
+ * Thin facade over the in-process agent registry, returning live Agent instances.
5
+ *
6
+ * Note: agents are code, not persisted data; this is process-local.
7
+ */
8
+ export class RAgents {
9
+ registry;
10
+ constructor(registry) {
11
+ this.registry = registry;
12
+ }
13
+ /**
14
+ * Get a live Agent instance by id.
15
+ *
16
+ * Callers are expected to know the concrete TContext/TResponse types
17
+ * for their own agents and can specify them via generics.
18
+ */
19
+ get(id) {
20
+ const agent = this.registry.get(id);
21
+ return agent;
22
+ }
23
+ /**
24
+ * Check if an agent with the given id is registered.
25
+ */
26
+ has(id) {
27
+ return this.registry.has(id);
28
+ }
29
+ /**
30
+ * List all registered agents as live instances.
31
+ *
32
+ * Since this is a heterogeneous collection, we expose the widest safe
33
+ * type parameters here.
34
+ */
35
+ list() {
36
+ return Array.from(this.registry.values());
37
+ }
38
+ /**
39
+ * Unregister an agent at runtime.
40
+ */
41
+ unregister(id) {
42
+ return this.registry.delete(id);
43
+ }
44
+ }
@@ -0,0 +1,2 @@
1
+ export { RAgents } from "./agents.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/api/resources/agents/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1 @@
1
+ export { RAgents } from "./agents.js";