talon-agent 1.0.0 → 1.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/LICENSE +21 -0
- package/README.md +1 -0
- package/package.json +15 -11
- package/prompts/dream.md +7 -3
- package/prompts/heartbeat.md +30 -0
- package/prompts/identity.md +1 -0
- package/prompts/teams.md +3 -0
- package/prompts/telegram.md +1 -0
- package/src/__tests__/chat-settings.test.ts +108 -2
- package/src/__tests__/cleanup-registry.test.ts +58 -0
- package/src/__tests__/config.test.ts +118 -52
- package/src/__tests__/cron-store-extended.test.ts +661 -0
- package/src/__tests__/cron-store.test.ts +145 -11
- package/src/__tests__/daily-log.test.ts +224 -13
- package/src/__tests__/dispatcher.test.ts +424 -23
- package/src/__tests__/dream.test.ts +1028 -0
- package/src/__tests__/errors-extended.test.ts +428 -0
- package/src/__tests__/errors.test.ts +95 -3
- package/src/__tests__/fuzz.test.ts +87 -15
- package/src/__tests__/gateway-actions.test.ts +1174 -433
- package/src/__tests__/gateway-http.test.ts +210 -19
- package/src/__tests__/gateway-retry.test.ts +359 -0
- package/src/__tests__/gateway-withRetry-extended.test.ts +343 -0
- package/src/__tests__/graph.test.ts +830 -0
- package/src/__tests__/handlers-stream.test.ts +208 -0
- package/src/__tests__/handlers.test.ts +2539 -70
- package/src/__tests__/heartbeat.test.ts +364 -0
- package/src/__tests__/history-extended.test.ts +775 -0
- package/src/__tests__/history-persistence.test.ts +74 -19
- package/src/__tests__/history.test.ts +113 -79
- package/src/__tests__/integration.test.ts +43 -8
- package/src/__tests__/log-init.test.ts +129 -0
- package/src/__tests__/log.test.ts +23 -5
- package/src/__tests__/media-index.test.ts +317 -35
- package/src/__tests__/plugin.test.ts +314 -0
- package/src/__tests__/prompt-builder-extended.test.ts +296 -0
- package/src/__tests__/prompt-builder.test.ts +44 -9
- package/src/__tests__/sessions.test.ts +258 -4
- package/src/__tests__/storage-save-errors.test.ts +342 -0
- package/src/__tests__/teams-frontend.test.ts +526 -31
- package/src/__tests__/telegram-formatting.test.ts +82 -0
- package/src/__tests__/terminal-commands.test.ts +208 -1
- package/src/__tests__/terminal-renderer.test.ts +223 -0
- package/src/__tests__/time.test.ts +107 -0
- package/src/__tests__/workspace-migrate.test.ts +256 -0
- package/src/__tests__/workspace.test.ts +63 -1
- package/src/backend/claude-sdk/tools.ts +64 -18
- package/src/bootstrap.ts +14 -14
- package/src/cli.ts +440 -125
- package/src/core/cron.ts +20 -5
- package/src/core/dispatcher.ts +27 -9
- package/src/core/dream.ts +79 -24
- package/src/core/errors.ts +12 -2
- package/src/core/gateway-actions.ts +182 -46
- package/src/core/gateway.ts +93 -41
- package/src/core/heartbeat.ts +515 -0
- package/src/core/plugin.ts +1 -1
- package/src/core/prompt-builder.ts +1 -4
- package/src/core/pulse.ts +4 -3
- package/src/frontend/teams/actions.ts +3 -1
- package/src/frontend/teams/formatting.ts +47 -8
- package/src/frontend/teams/graph.ts +35 -11
- package/src/frontend/teams/index.ts +155 -57
- package/src/frontend/teams/tools.ts +4 -6
- package/src/frontend/telegram/actions.ts +358 -82
- package/src/frontend/telegram/admin.ts +162 -72
- package/src/frontend/telegram/callbacks.ts +16 -10
- package/src/frontend/telegram/commands.ts +37 -21
- package/src/frontend/telegram/formatting.ts +2 -4
- package/src/frontend/telegram/handlers.ts +262 -66
- package/src/frontend/telegram/index.ts +39 -14
- package/src/frontend/telegram/middleware.ts +14 -4
- package/src/frontend/telegram/userbot.ts +16 -4
- package/src/frontend/terminal/renderer.ts +1 -4
- package/src/index.ts +28 -4
- package/src/storage/chat-settings.ts +32 -9
- package/src/storage/cron-store.ts +53 -11
- package/src/storage/daily-log.ts +72 -19
- package/src/storage/history.ts +39 -21
- package/src/storage/media-index.ts +37 -12
- package/src/storage/sessions.ts +3 -2
- package/src/util/cleanup-registry.ts +34 -0
- package/src/util/config.ts +85 -23
- package/src/util/log.ts +47 -17
- package/src/util/paths.ts +10 -0
- package/src/util/time.ts +29 -6
- package/src/util/watchdog.ts +5 -1
- package/src/util/workspace.ts +51 -10
package/src/util/workspace.ts
CHANGED
|
@@ -4,7 +4,19 @@
|
|
|
4
4
|
* Includes periodic cleanup of old uploads to prevent disk exhaustion.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
existsSync,
|
|
9
|
+
mkdirSync,
|
|
10
|
+
readdirSync,
|
|
11
|
+
rmdirSync,
|
|
12
|
+
renameSync,
|
|
13
|
+
statSync,
|
|
14
|
+
unlinkSync,
|
|
15
|
+
copyFileSync,
|
|
16
|
+
cpSync,
|
|
17
|
+
rmSync,
|
|
18
|
+
writeFileSync,
|
|
19
|
+
} from "node:fs";
|
|
8
20
|
import { join, resolve } from "node:path";
|
|
9
21
|
import { log } from "./log.js";
|
|
10
22
|
import { dirs, files as pathFiles } from "./paths.js";
|
|
@@ -41,7 +53,10 @@ export function migrateLayout(): void {
|
|
|
41
53
|
[join(oldRoot, "talon.json"), dirs.root + "/config.json"],
|
|
42
54
|
[join(oldRoot, "sessions.json"), join(dirs.data, "sessions.json")],
|
|
43
55
|
[join(oldRoot, "history.json"), join(dirs.data, "history.json")],
|
|
44
|
-
[
|
|
56
|
+
[
|
|
57
|
+
join(oldRoot, "chat-settings.json"),
|
|
58
|
+
join(dirs.data, "chat-settings.json"),
|
|
59
|
+
],
|
|
45
60
|
[join(oldRoot, "cron.json"), join(dirs.data, "cron.json")],
|
|
46
61
|
[join(oldRoot, "media-index.json"), join(dirs.data, "media-index.json")],
|
|
47
62
|
[join(oldRoot, "talon.log"), join(dirs.root, "talon.log")],
|
|
@@ -92,9 +107,14 @@ export function migrateLayout(): void {
|
|
|
92
107
|
rmdirSync(oldRoot);
|
|
93
108
|
log("workspace", "Removed empty workspace/ directory");
|
|
94
109
|
} else {
|
|
95
|
-
log(
|
|
110
|
+
log(
|
|
111
|
+
"workspace",
|
|
112
|
+
`Old workspace/ still has ${remaining.length} item(s) — not removed`,
|
|
113
|
+
);
|
|
96
114
|
}
|
|
97
|
-
} catch {
|
|
115
|
+
} catch {
|
|
116
|
+
/* ignore */
|
|
117
|
+
}
|
|
98
118
|
|
|
99
119
|
log("workspace", "Migration complete");
|
|
100
120
|
}
|
|
@@ -112,7 +132,15 @@ export function initWorkspace(root: string): void {
|
|
|
112
132
|
if (!existsSync(root)) mkdirSync(root, { recursive: true });
|
|
113
133
|
|
|
114
134
|
// Ensure subdirectories exist
|
|
115
|
-
for (const sub of [
|
|
135
|
+
for (const sub of [
|
|
136
|
+
dirs.memory,
|
|
137
|
+
dirs.dailyMemory,
|
|
138
|
+
dirs.uploads,
|
|
139
|
+
dirs.logs,
|
|
140
|
+
dirs.stickers,
|
|
141
|
+
dirs.prompts,
|
|
142
|
+
dirs.traces,
|
|
143
|
+
]) {
|
|
116
144
|
if (!existsSync(sub)) mkdirSync(sub, { recursive: true });
|
|
117
145
|
}
|
|
118
146
|
|
|
@@ -145,10 +173,16 @@ export function getWorkspaceDiskUsage(root: string): number {
|
|
|
145
173
|
const full = join(dir, entry.name);
|
|
146
174
|
if (entry.isDirectory()) walk(full);
|
|
147
175
|
else if (entry.isFile()) {
|
|
148
|
-
try {
|
|
176
|
+
try {
|
|
177
|
+
total += statSync(full).size;
|
|
178
|
+
} catch {
|
|
179
|
+
/* skip */
|
|
180
|
+
}
|
|
149
181
|
}
|
|
150
182
|
}
|
|
151
|
-
} catch {
|
|
183
|
+
} catch {
|
|
184
|
+
/* skip */
|
|
185
|
+
}
|
|
152
186
|
}
|
|
153
187
|
walk(root);
|
|
154
188
|
return total;
|
|
@@ -164,7 +198,10 @@ let cleanupTimer: ReturnType<typeof setInterval> | null = null;
|
|
|
164
198
|
* Delete files in uploads/ older than maxAgeMs.
|
|
165
199
|
* Returns number of files deleted.
|
|
166
200
|
*/
|
|
167
|
-
export function cleanupUploads(
|
|
201
|
+
export function cleanupUploads(
|
|
202
|
+
root: string,
|
|
203
|
+
maxAgeMs = DEFAULT_MAX_AGE_MS,
|
|
204
|
+
): number {
|
|
168
205
|
const uploadsDir = join(root, "uploads");
|
|
169
206
|
if (!existsSync(uploadsDir)) return 0;
|
|
170
207
|
|
|
@@ -181,9 +218,13 @@ export function cleanupUploads(root: string, maxAgeMs = DEFAULT_MAX_AGE_MS): num
|
|
|
181
218
|
unlinkSync(filePath);
|
|
182
219
|
deleted++;
|
|
183
220
|
}
|
|
184
|
-
} catch {
|
|
221
|
+
} catch {
|
|
222
|
+
/* skip individual file errors */
|
|
223
|
+
}
|
|
185
224
|
}
|
|
186
|
-
} catch {
|
|
225
|
+
} catch {
|
|
226
|
+
/* skip if directory unreadable */
|
|
227
|
+
}
|
|
187
228
|
|
|
188
229
|
if (deleted > 0) {
|
|
189
230
|
log("workspace", `Cleaned up ${deleted} old upload(s)`);
|