kern-ai 0.16.0 → 0.18.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/README.md +25 -13
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +83 -11
- package/dist/app.js.map +1 -1
- package/dist/config.d.ts +4 -6
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +43 -8
- package/dist/config.js.map +1 -1
- package/dist/context.d.ts +4 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -21
- package/dist/context.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +9 -0
- package/dist/daemon.js.map +1 -1
- package/dist/index.js +124 -11
- package/dist/index.js.map +1 -1
- package/dist/init.js +1 -2
- package/dist/init.js.map +1 -1
- package/dist/install.d.ts +7 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +268 -0
- package/dist/install.js.map +1 -0
- package/dist/interfaces/telegram.js +3 -3
- package/dist/interfaces/telegram.js.map +1 -1
- package/dist/kernel.d.ts.map +1 -1
- package/dist/kernel.js +4 -3
- package/dist/kernel.js.map +1 -1
- package/dist/log.d.ts +5 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +22 -2
- package/dist/log.js.map +1 -1
- package/dist/memory.d.ts +24 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +38 -0
- package/dist/memory.js.map +1 -1
- package/dist/notes.d.ts +8 -0
- package/dist/notes.d.ts.map +1 -1
- package/dist/notes.js +23 -3
- package/dist/notes.js.map +1 -1
- package/dist/queue.js +1 -1
- package/dist/queue.js.map +1 -1
- package/dist/recall.d.ts +2 -0
- package/dist/recall.d.ts.map +1 -1
- package/dist/recall.js +6 -4
- package/dist/recall.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +22 -8
- package/dist/runtime.js.map +1 -1
- package/dist/segments.d.ts +17 -0
- package/dist/segments.d.ts.map +1 -1
- package/dist/segments.js +149 -13
- package/dist/segments.js.map +1 -1
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +151 -2
- package/dist/server.js.map +1 -1
- package/dist/status.d.ts.map +1 -1
- package/dist/status.js +51 -19
- package/dist/status.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +3 -20
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +16 -15
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/index.d.ts +58 -2
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +4 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/kern.d.ts +16 -2
- package/dist/tools/kern.d.ts.map +1 -1
- package/dist/tools/kern.js +73 -10
- package/dist/tools/kern.js.map +1 -1
- package/dist/tools/pwsh.d.ts +5 -0
- package/dist/tools/pwsh.d.ts.map +1 -0
- package/dist/tools/pwsh.js +33 -0
- package/dist/tools/pwsh.js.map +1 -0
- package/dist/tools/shell.d.ts +20 -0
- package/dist/tools/shell.d.ts.map +1 -0
- package/dist/tools/shell.js +69 -0
- package/dist/tools/shell.js.map +1 -0
- package/dist/web-daemon.d.ts.map +1 -1
- package/dist/web-daemon.js +9 -3
- package/dist/web-daemon.js.map +1 -1
- package/dist/web.js +5 -2
- package/dist/web.js.map +1 -1
- package/docs/commands.md +50 -8
- package/docs/config.md +8 -37
- package/docs/context.md +97 -0
- package/docs/interfaces.md +14 -0
- package/docs/memory.md +18 -100
- package/docs/tools.md +19 -3
- package/package.json +1 -1
- package/templates/KERN.md +1 -1
- package/templates/web/index.html +1633 -181
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@ Most agent frameworks give you sessions that reset, memory that's a black box, o
|
|
|
11
11
|
- **One brain** — a single continuous session across every interface. Message from Telegram, pick up in the terminal, continue in the browser. The agent always knows what happened.
|
|
12
12
|
- **Context-aware** — the agent knows who's talking and where. It sees the user, the channel, and the interface — so it can adjust tone, filter context, and keep track of different conversations within the same session.
|
|
13
13
|
- **A folder is the agent** — AGENTS.md defines behavior, IDENTITY.md defines who it is, knowledge/ and notes/ are its memory. Everything is plain text, git-tracked, and inspectable.
|
|
14
|
-
- **No infra** — no server
|
|
14
|
+
- **No external infra** — no hosted server or managed database required. Runs locally with a folder, SQLite, an API key, and `npm install -g kern-ai`.
|
|
15
15
|
|
|
16
16
|
kern pairs with [agent-kernel](https://github.com/oguzbilgic/agent-kernel) — the kernel defines how an agent remembers, kern runs it.
|
|
17
17
|
|
|
@@ -55,7 +55,7 @@ my-agent/
|
|
|
55
55
|
config.json # model, provider, toolScope (committed)
|
|
56
56
|
.env # API keys, bot tokens (gitignored)
|
|
57
57
|
sessions/ # conversation history (gitignored)
|
|
58
|
-
recall.db #
|
|
58
|
+
recall.db # memory database (gitignored)
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
Everything the agent needs is in this folder. Move it, zip it, clone it — the agent comes with it. Run `kern init` on any existing repo to adopt it as a kern agent.
|
|
@@ -67,17 +67,19 @@ kern init <name> # create or configure an agent
|
|
|
67
67
|
kern start [name|path] # start agents in background
|
|
68
68
|
kern stop [name] # stop agents
|
|
69
69
|
kern restart [name] # restart agents
|
|
70
|
+
kern install [name|--web] # install systemd services (auto-restart, boot persistence)
|
|
71
|
+
kern uninstall [name] # remove systemd services
|
|
70
72
|
kern tui [name] # interactive chat
|
|
71
73
|
kern web <start|stop|status|token> # web UI server
|
|
72
|
-
kern logs [name] #
|
|
73
|
-
kern list # show all agents
|
|
74
|
+
kern logs [name] # follow agent logs
|
|
75
|
+
kern list # show all agents and web status
|
|
74
76
|
kern remove <name> # unregister an agent
|
|
75
77
|
kern backup <name> # backup agent to .tar.gz
|
|
76
78
|
kern restore <file> # restore agent from backup
|
|
77
|
-
kern import opencode
|
|
79
|
+
kern import opencode # import session from OpenCode
|
|
78
80
|
```
|
|
79
81
|
|
|
80
|
-
Agents auto-register when you init, start, or run them. `kern list` shows every agent with
|
|
82
|
+
Agents auto-register when you init, start, or run them. `kern list` shows every agent and the web daemon with running state and mode (systemd/daemon).
|
|
81
83
|
|
|
82
84
|
### Web UI
|
|
83
85
|
|
|
@@ -131,17 +133,23 @@ Invite the bot to channels where it should listen.
|
|
|
131
133
|
|
|
132
134
|
## Memory
|
|
133
135
|
|
|
134
|
-
Agents remember across sessions through
|
|
136
|
+
Agents remember across sessions through three mechanisms:
|
|
135
137
|
|
|
136
138
|
- **Files** — `knowledge/` for mutable state, `notes/` for daily logs. The agent reads and writes these through tools. Git-tracked, inspectable, portable.
|
|
137
139
|
- **Recall** — semantic search over all past conversations. Messages are embedded and stored in a local SQLite database (`recall.db`). The agent uses the `recall` tool to search by query with optional date filters, or load raw messages from a specific session.
|
|
140
|
+
- **Segments** — messages are automatically grouped into topic-coherent segments, summarized, and rolled up into a hierarchy (L0 → L1 → L2). When old messages are trimmed from context, compressed summaries are injected in their place — the agent sees its full conversation history at decreasing resolution.
|
|
138
141
|
|
|
139
142
|
On startup, the agent's system prompt is automatically injected with:
|
|
140
143
|
- The latest daily note (full content)
|
|
141
144
|
- An LLM-generated summary of the previous 5 daily notes
|
|
145
|
+
- Compressed conversation history from segments (when messages have been trimmed)
|
|
142
146
|
|
|
143
147
|
This means the agent boots with recent context — no manual reading required. Summaries are cached in SQLite and regenerated in the background on day rollover.
|
|
144
148
|
|
|
149
|
+
### Memory UI
|
|
150
|
+
|
|
151
|
+
The web UI includes a Memory overlay with five tabs for examining all aspects of agent memory: sessions, segments, notes, recall, and context. See the full context pipeline — from raw messages through segment hierarchy to the final system prompt — with token breakdowns and compression ratios.
|
|
152
|
+
|
|
145
153
|
## Heartbeat
|
|
146
154
|
|
|
147
155
|
Kern sends a periodic `[heartbeat]` to the agent. The agent reviews notes, updates knowledge files, and messages the operator if something needs attention. Visible in the TUI only — Telegram and Slack never see it.
|
|
@@ -157,10 +165,12 @@ Interval in minutes. Default 60 (1 hour). Set to 0 to disable.
|
|
|
157
165
|
## Logging
|
|
158
166
|
|
|
159
167
|
```bash
|
|
160
|
-
kern logs [name]
|
|
168
|
+
kern logs [name] # follow logs (default)
|
|
169
|
+
kern logs [name] -n 50 # last 50 lines, exit
|
|
170
|
+
kern logs [name] --level warn # warnings and errors only
|
|
161
171
|
```
|
|
162
172
|
|
|
163
|
-
Structured,
|
|
173
|
+
Structured, leveled logs with colored labels. Stored in `.kern/logs/kern.log`. All levels written, filter on read.
|
|
164
174
|
|
|
165
175
|
## Configuration
|
|
166
176
|
|
|
@@ -171,13 +181,13 @@ Structured, colored logs for queue, runtime, interfaces, and server. Logs stored
|
|
|
171
181
|
"model": "anthropic/claude-opus-4.6",
|
|
172
182
|
"provider": "openrouter",
|
|
173
183
|
"toolScope": "full",
|
|
174
|
-
"maxSteps": 30,
|
|
175
184
|
"maxContextTokens": 50000,
|
|
176
|
-
"maxToolResultChars": 20000
|
|
185
|
+
"maxToolResultChars": 20000,
|
|
186
|
+
"summaryBudget": 0.2
|
|
177
187
|
}
|
|
178
188
|
```
|
|
179
189
|
|
|
180
|
-
`maxContextTokens` controls the sliding context window — older messages are trimmed to stay within budget. `maxToolResultChars` caps individual tool results in context (full results stay in session JSONL and are searchable via recall). Set to `0` to disable.
|
|
190
|
+
`maxContextTokens` controls the sliding context window — older messages are trimmed to stay within budget. `maxToolResultChars` caps individual tool results in context (full results stay in session JSONL and are searchable via recall). `summaryBudget` controls what fraction of the context window is reserved for compressed segment summaries when old messages are trimmed (default 20%). Set to `0` to disable.
|
|
181
191
|
|
|
182
192
|
Agent auth tokens are auto-generated on first start and stored in `.kern/.env`. The web proxy injects them automatically — no manual setup needed.
|
|
183
193
|
|
|
@@ -194,10 +204,12 @@ Controls the `kern web` server. Optional — defaults apply if the file doesn't
|
|
|
194
204
|
|
|
195
205
|
### Tool scopes
|
|
196
206
|
|
|
197
|
-
- **full** — bash, read, write, edit, glob, grep, webfetch, kern, message, recall
|
|
207
|
+
- **full** — shell (bash/pwsh), read, write, edit, glob, grep, webfetch, kern, message, recall
|
|
198
208
|
- **write** — read, write, edit, glob, grep, webfetch, kern, message, recall
|
|
199
209
|
- **read** — read, glob, grep, webfetch, kern, recall
|
|
200
210
|
|
|
211
|
+
Shell tool is platform-specific: `bash` on Unix/Linux, `pwsh` on Windows. Selected automatically.
|
|
212
|
+
|
|
201
213
|
### Providers
|
|
202
214
|
|
|
203
215
|
- **openrouter** — any model via OpenRouter (default)
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AA+DA,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CA6bhF"}
|
package/dist/app.js
CHANGED
|
@@ -7,7 +7,7 @@ import { loadConfig } from "./config.js";
|
|
|
7
7
|
import { readFile, appendFile } from "fs/promises";
|
|
8
8
|
import { join, basename } from "path";
|
|
9
9
|
import { randomBytes } from "crypto";
|
|
10
|
-
import { registerAgent, setPortAndToken } from "./registry.js";
|
|
10
|
+
import { registerAgent, setPortAndToken, setPid } from "./registry.js";
|
|
11
11
|
import { AgentServer } from "./server.js";
|
|
12
12
|
import { PairingManager } from "./pairing.js";
|
|
13
13
|
import { setMessageSender } from "./tools/message.js";
|
|
@@ -15,6 +15,7 @@ import { setRecallIndex } from "./tools/recall.js";
|
|
|
15
15
|
import { RecallIndex } from "./recall.js";
|
|
16
16
|
import { SegmentIndex } from "./segments.js";
|
|
17
17
|
import { MemoryDB } from "./memory.js";
|
|
18
|
+
import { regenerateNotesSummary } from "./notes.js";
|
|
18
19
|
import { MessageQueue } from "./queue.js";
|
|
19
20
|
import { getStatusData as getStatusDataFn, setQueueStatusFn, setInterfaceStatusFn, setRecallStatsFn, setSegmentStatsFn } from "./tools/kern.js";
|
|
20
21
|
import { log } from "./log.js";
|
|
@@ -22,11 +23,20 @@ async function handleSlashCommand(cmd, userId, iface, agentName) {
|
|
|
22
23
|
switch (cmd) {
|
|
23
24
|
case "/restart": {
|
|
24
25
|
log("kern", `restart requested by ${userId} via ${iface}`);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
const { spawn } = await import("child_process");
|
|
27
|
+
const child = spawn("kern", ["restart", agentName], { stdio: "pipe" });
|
|
28
|
+
const result = await new Promise((resolve) => {
|
|
29
|
+
let stderr = "";
|
|
30
|
+
child.stderr.on("data", (chunk) => {
|
|
31
|
+
stderr += chunk.toString();
|
|
32
|
+
});
|
|
33
|
+
child.on("close", (code) => resolve({ code, stderr: stderr.trim() }));
|
|
34
|
+
child.on("error", (err) => resolve({ code: 1, stderr: err.message }));
|
|
35
|
+
});
|
|
36
|
+
if (result.code === 0) {
|
|
37
|
+
return "Restart initiated.";
|
|
38
|
+
}
|
|
39
|
+
return `Restart failed: ${result.stderr || `exit code ${result.code}`}`;
|
|
30
40
|
}
|
|
31
41
|
case "/status": {
|
|
32
42
|
const { formatStatus } = await import("./tools/kern.js");
|
|
@@ -97,12 +107,12 @@ export async function startApp(agentDir, forceCli = false) {
|
|
|
97
107
|
}
|
|
98
108
|
}).catch((err) => {
|
|
99
109
|
recallBuilding = false;
|
|
100
|
-
log("recall", `backfill failed: ${err.message}`);
|
|
110
|
+
log.error("recall", `backfill failed: ${err.message}`);
|
|
101
111
|
});
|
|
102
112
|
}
|
|
103
113
|
}
|
|
104
114
|
catch (err) {
|
|
105
|
-
log("recall", `init failed: ${err.message} — recall disabled`);
|
|
115
|
+
log.error("recall", `init failed: ${err.message} — recall disabled`);
|
|
106
116
|
}
|
|
107
117
|
}
|
|
108
118
|
// Initialize semantic segments (uses same embedding infra as recall)
|
|
@@ -115,7 +125,7 @@ export async function startApp(agentDir, forceCli = false) {
|
|
|
115
125
|
setSegmentStatsFn(() => segmentIndex ? segmentIndex.getStats() : null);
|
|
116
126
|
}
|
|
117
127
|
catch (err) {
|
|
118
|
-
log("segments", `init failed: ${err.message} — segments disabled`);
|
|
128
|
+
log.error("segments", `init failed: ${err.message} — segments disabled`);
|
|
119
129
|
}
|
|
120
130
|
}
|
|
121
131
|
const agentName = basename(agentDir);
|
|
@@ -174,12 +184,12 @@ export async function startApp(agentDir, forceCli = false) {
|
|
|
174
184
|
if (sessionId) {
|
|
175
185
|
if (recallIndex) {
|
|
176
186
|
recallIndex.indexSession(sessionId).catch((err) => {
|
|
177
|
-
log("recall", `indexing failed: ${err.message}`);
|
|
187
|
+
log.error("recall", `indexing failed: ${err.message}`);
|
|
178
188
|
});
|
|
179
189
|
}
|
|
180
190
|
if (segmentIndex) {
|
|
181
191
|
segmentIndex.indexSession(sessionId).catch((err) => {
|
|
182
|
-
log("segments", `indexing failed: ${err.message}`);
|
|
192
|
+
log.error("segments", `indexing failed: ${err.message}`);
|
|
183
193
|
});
|
|
184
194
|
}
|
|
185
195
|
}
|
|
@@ -223,6 +233,31 @@ export async function startApp(agentDir, forceCli = false) {
|
|
|
223
233
|
const built = runtime.buildPromptContext();
|
|
224
234
|
return { system: built.system || latestSystem };
|
|
225
235
|
});
|
|
236
|
+
server.setContextSegmentsFn(() => {
|
|
237
|
+
if (!segmentIndex)
|
|
238
|
+
return { segments: [], tokenCount: 0 };
|
|
239
|
+
const sessionId = runtime.getSessionId();
|
|
240
|
+
if (!sessionId)
|
|
241
|
+
return { segments: [], tokenCount: 0 };
|
|
242
|
+
const messages = runtime.getMessages();
|
|
243
|
+
const built = runtime.buildPromptContext();
|
|
244
|
+
const summaryBudget = Math.round(config.maxContextTokens * (config.summaryBudget || 0));
|
|
245
|
+
const trimmedCount = Math.max(0, messages.length - (built.messages?.length || messages.length));
|
|
246
|
+
if (trimmedCount <= 0 || summaryBudget <= 0)
|
|
247
|
+
return { segments: [], tokenCount: 0 };
|
|
248
|
+
const history = segmentIndex.composeHistory(sessionId, trimmedCount, summaryBudget);
|
|
249
|
+
if (!history)
|
|
250
|
+
return { segments: [], tokenCount: 0 };
|
|
251
|
+
return {
|
|
252
|
+
tokenCount: history.tokens,
|
|
253
|
+
segments: history.segments.map((seg) => ({
|
|
254
|
+
id: seg.id,
|
|
255
|
+
level: seg.level,
|
|
256
|
+
msg_start: seg.msg_start,
|
|
257
|
+
msg_end: seg.msg_end,
|
|
258
|
+
})),
|
|
259
|
+
};
|
|
260
|
+
});
|
|
226
261
|
server.setSegmentsFn((sessionId) => {
|
|
227
262
|
if (!segmentIndex)
|
|
228
263
|
return { segments: [], stats: { segments: 0, level0: 0 } };
|
|
@@ -279,8 +314,45 @@ export async function startApp(agentDir, forceCli = false) {
|
|
|
279
314
|
segmentRunning = false;
|
|
280
315
|
}
|
|
281
316
|
});
|
|
317
|
+
server.setSegmentResummarizeFn(async (id) => {
|
|
318
|
+
if (!segmentIndex)
|
|
319
|
+
throw new Error("segments not enabled");
|
|
320
|
+
return segmentIndex.resummarizeSegment(id);
|
|
321
|
+
});
|
|
322
|
+
// Notes summaries API
|
|
323
|
+
server.setSummariesFn(() => {
|
|
324
|
+
return memoryDB.getAllSummaries("daily_notes");
|
|
325
|
+
});
|
|
326
|
+
server.setSummaryRegenerateFn(async () => {
|
|
327
|
+
return regenerateNotesSummary(agentDir, config, memoryDB);
|
|
328
|
+
});
|
|
329
|
+
// Sessions API
|
|
330
|
+
server.setSessionListFn(() => {
|
|
331
|
+
return memoryDB.getSessionList();
|
|
332
|
+
});
|
|
333
|
+
server.setCurrentSessionIdFn(() => {
|
|
334
|
+
return runtime.getSessionId();
|
|
335
|
+
});
|
|
336
|
+
server.setSessionActivityFn((sessionId) => {
|
|
337
|
+
return {
|
|
338
|
+
daily: memoryDB.getSessionActivity(sessionId),
|
|
339
|
+
hourly: memoryDB.getSessionHourlyActivity(sessionId),
|
|
340
|
+
};
|
|
341
|
+
});
|
|
342
|
+
// Recall API
|
|
343
|
+
if (recallIndex) {
|
|
344
|
+
server.setRecallStatsFn(() => {
|
|
345
|
+
const stats = recallIndex.getStats();
|
|
346
|
+
return { ...stats, building: recallBuilding };
|
|
347
|
+
});
|
|
348
|
+
server.setRecallSearchFn(async (query, limit) => {
|
|
349
|
+
const results = await recallIndex.search(query, limit);
|
|
350
|
+
return { query, results };
|
|
351
|
+
});
|
|
352
|
+
}
|
|
282
353
|
const port = await server.start("127.0.0.1");
|
|
283
354
|
await setPortAndToken(agentName, port, process.env.KERN_AUTH_TOKEN || null);
|
|
355
|
+
await setPid(agentName, process.pid);
|
|
284
356
|
// Start Telegram if configured
|
|
285
357
|
const telegramToken = process.env.TELEGRAM_BOT_TOKEN;
|
|
286
358
|
let telegramBot = null;
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -6,14 +6,12 @@ export interface KernConfig {
|
|
|
6
6
|
maxSteps: number;
|
|
7
7
|
maxContextTokens: number;
|
|
8
8
|
maxToolResultChars: number;
|
|
9
|
+
summaryBudget: number;
|
|
10
|
+
recall: boolean;
|
|
11
|
+
autoRecall: boolean;
|
|
9
12
|
heartbeatInterval: number;
|
|
10
|
-
historyBudget: number;
|
|
11
|
-
autoRecall?: boolean;
|
|
12
|
-
telegram?: {
|
|
13
|
-
allowedUsers?: number[];
|
|
14
|
-
showTools?: boolean;
|
|
15
|
-
};
|
|
16
13
|
}
|
|
14
|
+
export declare const configDefaults: KernConfig;
|
|
17
15
|
export declare function getToolsForScope(scope: ToolScope): string[];
|
|
18
16
|
export declare function loadConfig(agentDir: string): Promise<KernConfig>;
|
|
19
17
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,WAAW,UAAU;IAEzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IAGjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IAGpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAUD,eAAO,MAAM,cAAc,EAAE,UAW5B,CAAC;AA6BF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAE3D;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA8BtE"}
|
package/dist/config.js
CHANGED
|
@@ -2,21 +2,50 @@ import { readFile } from "fs/promises";
|
|
|
2
2
|
import { join } from "path";
|
|
3
3
|
import { existsSync } from "fs";
|
|
4
4
|
import { config as loadDotenv } from "dotenv";
|
|
5
|
+
import { log } from "./log.js";
|
|
6
|
+
const shell = process.platform === "win32" ? "pwsh" : "bash";
|
|
5
7
|
const TOOL_SCOPES = {
|
|
6
|
-
full: [
|
|
8
|
+
full: [shell, "read", "write", "edit", "glob", "grep", "webfetch", "kern", "message", "recall"],
|
|
7
9
|
write: ["read", "write", "edit", "glob", "grep", "webfetch", "kern", "message", "recall"],
|
|
8
10
|
read: ["read", "glob", "grep", "webfetch", "kern", "recall"],
|
|
9
11
|
};
|
|
10
|
-
const
|
|
12
|
+
export const configDefaults = {
|
|
11
13
|
model: "anthropic/claude-opus-4.6",
|
|
12
14
|
provider: "openrouter",
|
|
13
15
|
toolScope: "full",
|
|
14
16
|
maxSteps: 30,
|
|
15
17
|
maxContextTokens: 50000,
|
|
16
18
|
maxToolResultChars: 20000,
|
|
19
|
+
summaryBudget: 0.2,
|
|
20
|
+
recall: true,
|
|
21
|
+
autoRecall: false,
|
|
17
22
|
heartbeatInterval: 60,
|
|
18
|
-
historyBudget: 0.2,
|
|
19
23
|
};
|
|
24
|
+
const FIELD_TYPES = {
|
|
25
|
+
model: "string",
|
|
26
|
+
provider: "string",
|
|
27
|
+
toolScope: "string",
|
|
28
|
+
maxSteps: "number",
|
|
29
|
+
maxContextTokens: "number",
|
|
30
|
+
maxToolResultChars: "number",
|
|
31
|
+
summaryBudget: "number",
|
|
32
|
+
recall: "boolean",
|
|
33
|
+
autoRecall: "boolean",
|
|
34
|
+
heartbeatInterval: "number",
|
|
35
|
+
};
|
|
36
|
+
function validateConfig(userConfig) {
|
|
37
|
+
for (const key of Object.keys(userConfig)) {
|
|
38
|
+
if (!(key in FIELD_TYPES)) {
|
|
39
|
+
log.warn("config", `unknown field "${key}" — ignored`);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const expected = FIELD_TYPES[key];
|
|
43
|
+
const actual = typeof userConfig[key];
|
|
44
|
+
if (actual !== expected) {
|
|
45
|
+
log.warn("config", `"${key}" should be ${expected}, got ${actual} — using default`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
20
49
|
export function getToolsForScope(scope) {
|
|
21
50
|
return TOOL_SCOPES[scope] || TOOL_SCOPES.full;
|
|
22
51
|
}
|
|
@@ -29,17 +58,23 @@ export async function loadConfig(agentDir) {
|
|
|
29
58
|
// Load .kern/config.json
|
|
30
59
|
const configPath = join(agentDir, ".kern", "config.json");
|
|
31
60
|
if (!existsSync(configPath)) {
|
|
32
|
-
return
|
|
61
|
+
return configDefaults;
|
|
33
62
|
}
|
|
34
63
|
try {
|
|
35
64
|
const raw = await readFile(configPath, "utf-8");
|
|
36
65
|
const userConfig = JSON.parse(raw);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
66
|
+
validateConfig(userConfig);
|
|
67
|
+
// Filter out unknown and wrong-type fields
|
|
68
|
+
const cleaned = {};
|
|
69
|
+
for (const [key, value] of Object.entries(userConfig)) {
|
|
70
|
+
if (key in FIELD_TYPES && typeof value === FIELD_TYPES[key]) {
|
|
71
|
+
cleaned[key] = value;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return { ...configDefaults, ...cleaned };
|
|
40
75
|
}
|
|
41
76
|
catch {
|
|
42
|
-
return
|
|
77
|
+
return configDefaults;
|
|
43
78
|
}
|
|
44
79
|
}
|
|
45
80
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/context.d.ts
CHANGED
|
@@ -4,14 +4,16 @@ import type { RecallIndex } from "./recall.js";
|
|
|
4
4
|
import type { MemoryDB } from "./memory.js";
|
|
5
5
|
import type { SegmentIndex } from "./segments.js";
|
|
6
6
|
export declare function loadSystemPrompt(agentDir: string, config: KernConfig, memoryDB?: MemoryDB | null): Promise<string>;
|
|
7
|
+
export declare function estimateTextTokens(text: string): number;
|
|
7
8
|
export interface SessionStats {
|
|
8
9
|
totalMessages: number;
|
|
9
10
|
estimatedTokens: number;
|
|
10
11
|
windowTokens: number;
|
|
11
12
|
windowMessages: number;
|
|
12
13
|
truncatedCount: number;
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
summaryTokens: number;
|
|
15
|
+
summaryLevelCounts: Record<number, number>;
|
|
16
|
+
systemPromptTokens?: number;
|
|
15
17
|
}
|
|
16
18
|
export interface PrepareContextOptions {
|
|
17
19
|
messages: ModelMessage[];
|
package/dist/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,IAAI,CAAC;AAKvD,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiBlD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,IAAI,CAAC;AAKvD,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiBlD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAmExH;AAQD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAwHD,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;CACrB;AAGD,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,qBAAqB,GAAG,eAAe,CA+CpH;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE;AAGD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,YAAY,EAAE,EACxB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,GAAG,IAAI,EAC/B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;IAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;CAAE,CAAC,CAyCpE"}
|
package/dist/context.js
CHANGED
|
@@ -52,12 +52,13 @@ export async function loadSystemPrompt(agentDir, config, memoryDB) {
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
catch (err) {
|
|
55
|
-
log("context", `failed to load notes context: ${err.message}`);
|
|
55
|
+
log.error("context", `failed to load notes context: ${err.message}`);
|
|
56
56
|
}
|
|
57
57
|
// Inject live runtime info
|
|
58
58
|
const tools = getToolsForScope(config.toolScope);
|
|
59
59
|
const toolDescriptions = {
|
|
60
60
|
bash: "run shell commands",
|
|
61
|
+
pwsh: "run PowerShell commands (Windows)",
|
|
61
62
|
read: "read files and directories",
|
|
62
63
|
write: "create or overwrite files",
|
|
63
64
|
edit: "find and replace in files",
|
|
@@ -75,20 +76,27 @@ export async function loadSystemPrompt(agentDir, config, memoryDB) {
|
|
|
75
76
|
}
|
|
76
77
|
return parts.join("\n\n");
|
|
77
78
|
}
|
|
78
|
-
// Token estimate: stringify everything, ~
|
|
79
|
+
// Token estimate: stringify everything, ~3.3 chars per token + per-message overhead.
|
|
80
|
+
// chars/4 underestimates by ~25% vs actual tokenizer output.
|
|
81
|
+
// Per-message overhead accounts for API framing not captured in JSON.stringify.
|
|
82
|
+
const CHARS_PER_TOKEN = 3.3;
|
|
83
|
+
const PER_MESSAGE_OVERHEAD = 4; // role/separator tokens per message
|
|
84
|
+
export function estimateTextTokens(text) {
|
|
85
|
+
return Math.ceil(text.length / CHARS_PER_TOKEN);
|
|
86
|
+
}
|
|
79
87
|
function estimateTokens(messages) {
|
|
80
88
|
let chars = 0;
|
|
81
89
|
for (const msg of messages) {
|
|
82
90
|
chars += JSON.stringify(msg).length;
|
|
83
91
|
}
|
|
84
|
-
return Math.ceil(chars /
|
|
92
|
+
return Math.ceil(chars / CHARS_PER_TOKEN) + (messages.length * PER_MESSAGE_OVERHEAD);
|
|
85
93
|
}
|
|
86
94
|
// Per-message token size cache
|
|
87
95
|
const msgSizeCache = new WeakMap();
|
|
88
96
|
function getMsgSize(msg) {
|
|
89
97
|
let size = msgSizeCache.get(msg);
|
|
90
98
|
if (size === undefined) {
|
|
91
|
-
size = Math.ceil(JSON.stringify(msg).length /
|
|
99
|
+
size = Math.ceil(JSON.stringify(msg).length / CHARS_PER_TOKEN) + PER_MESSAGE_OVERHEAD;
|
|
92
100
|
msgSizeCache.set(msg, size);
|
|
93
101
|
}
|
|
94
102
|
return size;
|
|
@@ -185,26 +193,26 @@ function trimToTokenBudget(messages, maxTokens) {
|
|
|
185
193
|
}
|
|
186
194
|
return { messages: messages.slice(cutIndex), trimmedCount: cutIndex };
|
|
187
195
|
}
|
|
188
|
-
// Unified pipeline: truncate → trim → inject
|
|
196
|
+
// Unified pipeline: truncate → trim → inject summary → stats.
|
|
189
197
|
export function prepareContext({ messages, config, sessionId, segmentIndex }) {
|
|
190
198
|
const totalTokens = estimateTokens(messages);
|
|
191
199
|
const { messages: truncated, truncatedCount } = truncateLargeToolResults(messages, config.maxToolResultChars, config.maxContextTokens);
|
|
192
|
-
const rawBudget = segmentIndex && config.
|
|
193
|
-
? Math.round(config.maxContextTokens * (1 - config.
|
|
200
|
+
const rawBudget = segmentIndex && config.summaryBudget > 0
|
|
201
|
+
? Math.round(config.maxContextTokens * (1 - config.summaryBudget))
|
|
194
202
|
: config.maxContextTokens;
|
|
195
203
|
const { messages: window, trimmedCount } = trimToTokenBudget(truncated, rawBudget);
|
|
196
|
-
// Inject compressed
|
|
197
|
-
let
|
|
198
|
-
let
|
|
199
|
-
let
|
|
204
|
+
// Inject compressed summary at trim boundary
|
|
205
|
+
let summaryTokens = 0;
|
|
206
|
+
let summaryLevelCounts = {};
|
|
207
|
+
let summarySystemAddition = "";
|
|
200
208
|
const finalMessages = window;
|
|
201
|
-
if (trimmedCount > 0 && segmentIndex && sessionId && config.
|
|
202
|
-
const budgetTokens = Math.round(config.maxContextTokens * config.
|
|
209
|
+
if (trimmedCount > 0 && segmentIndex && sessionId && config.summaryBudget > 0) {
|
|
210
|
+
const budgetTokens = Math.round(config.maxContextTokens * config.summaryBudget);
|
|
203
211
|
const history = segmentIndex.composeHistory(sessionId, trimmedCount, budgetTokens);
|
|
204
212
|
if (history) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
213
|
+
summaryTokens = history.tokens;
|
|
214
|
+
summaryLevelCounts = history.levelCounts;
|
|
215
|
+
summarySystemAddition = `<conversation_summary>\nCompressed conversation summary of trimmed earlier messages (oldest → newest). Use recall tool to load full messages by range.\n\n${history.text}\n</conversation_summary>`;
|
|
208
216
|
}
|
|
209
217
|
}
|
|
210
218
|
// Only count truncations that survived trimming
|
|
@@ -218,7 +226,7 @@ export function prepareContext({ messages, config, sessionId, segmentIndex }) {
|
|
|
218
226
|
}, 0)
|
|
219
227
|
: 0;
|
|
220
228
|
return {
|
|
221
|
-
systemAdditions:
|
|
229
|
+
systemAdditions: summarySystemAddition ? [summarySystemAddition] : [],
|
|
222
230
|
messages: finalMessages,
|
|
223
231
|
stats: {
|
|
224
232
|
totalMessages: messages.length,
|
|
@@ -226,8 +234,8 @@ export function prepareContext({ messages, config, sessionId, segmentIndex }) {
|
|
|
226
234
|
windowTokens: estimateTokens(finalMessages),
|
|
227
235
|
windowMessages: finalMessages.length,
|
|
228
236
|
truncatedCount: trimmedTruncated,
|
|
229
|
-
|
|
230
|
-
|
|
237
|
+
summaryTokens,
|
|
238
|
+
summaryLevelCounts,
|
|
231
239
|
},
|
|
232
240
|
};
|
|
233
241
|
}
|
|
@@ -256,7 +264,7 @@ export async function injectRecall(messages, query, recallIndex, trimmedCount, a
|
|
|
256
264
|
if (recallTokens > 2000) {
|
|
257
265
|
return { messages, recall: null };
|
|
258
266
|
}
|
|
259
|
-
log("recall", `auto-recall: injected ${relevant.length} chunks (~${recallTokens} tokens)`);
|
|
267
|
+
log.debug("recall", `auto-recall: injected ${relevant.length} chunks (~${recallTokens} tokens)`);
|
|
260
268
|
return {
|
|
261
269
|
messages: [recallMsg, ...messages],
|
|
262
270
|
recall: {
|
|
@@ -268,7 +276,7 @@ export async function injectRecall(messages, query, recallIndex, trimmedCount, a
|
|
|
268
276
|
};
|
|
269
277
|
}
|
|
270
278
|
catch (err) {
|
|
271
|
-
log("recall", `auto-recall failed: ${err.message}`);
|
|
279
|
+
log.error("recall", `auto-recall failed: ${err.message}`);
|
|
272
280
|
return { messages, recall: null };
|
|
273
281
|
}
|
|
274
282
|
}
|