teleton 0.6.0 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +34 -31
  2. package/dist/{chunk-6L6KGATM.js → chunk-3YM57ZAV.js} +1638 -1749
  3. package/dist/{chunk-D5I7GBV7.js → chunk-FNV5FF35.js} +22 -13
  4. package/dist/{chunk-4IPJ25HE.js → chunk-HZNZT4TG.js} +1106 -711
  5. package/dist/chunk-LRCPA7SC.js +149 -0
  6. package/dist/chunk-ND2X5FWB.js +368 -0
  7. package/dist/chunk-NERLQY2H.js +421 -0
  8. package/dist/{chunk-YBA6IBGT.js → chunk-OCLG5GKI.js} +24 -24
  9. package/dist/{chunk-ADCMUNYU.js → chunk-RBU6JXD3.js} +60 -55
  10. package/dist/chunk-RCMD3U65.js +141 -0
  11. package/dist/{chunk-ECSCVEQQ.js → chunk-UCN6TI25.js} +7 -3
  12. package/dist/{chunk-WL2Q3VRD.js → chunk-UDD7FYOU.js} +12 -4
  13. package/dist/chunk-VAUJSSD3.js +20 -0
  14. package/dist/chunk-XBE4JB7C.js +8 -0
  15. package/dist/{chunk-GDCODBNO.js → chunk-XBKSS6DM.js} +2 -16
  16. package/dist/cli/index.js +878 -433
  17. package/dist/client-3VWE7NC4.js +29 -0
  18. package/dist/{get-my-gifts-KVULMBJ3.js → get-my-gifts-RI7FAXAL.js} +3 -1
  19. package/dist/index.js +17 -11
  20. package/dist/{memory-TVDOGQXS.js → memory-5SS3Q5EA.js} +7 -5
  21. package/dist/{migrate-QIEMPOMT.js → migrate-M7SJMDOL.js} +14 -9
  22. package/dist/{server-RSWVCVY3.js → server-DS5OARW6.js} +174 -85
  23. package/dist/setup-server-C7ZTPHD5.js +934 -0
  24. package/dist/{task-dependency-resolver-72DLY2HV.js → task-dependency-resolver-WKZWJLLM.js} +19 -15
  25. package/dist/{task-executor-VXB6DAV2.js → task-executor-PD3H4MLO.js} +4 -1
  26. package/dist/tool-adapter-Y3TCEQOC.js +145 -0
  27. package/dist/{tool-index-DKI2ZNOU.js → tool-index-MIVK3D7H.js} +14 -9
  28. package/dist/{transcript-7V4UNID4.js → transcript-UDJZP6NK.js} +2 -1
  29. package/dist/web/assets/complete-fZLnb5Ot.js +1 -0
  30. package/dist/web/assets/index-BqwoDycr.js +72 -0
  31. package/dist/web/assets/index-CRDIf07k.css +1 -0
  32. package/dist/web/assets/index.es-D81xLR29.js +11 -0
  33. package/dist/web/assets/login-telegram-BP7CJDmx.js +1 -0
  34. package/dist/web/assets/run-DOrDowjK.js +1 -0
  35. package/dist/web/index.html +2 -2
  36. package/package.json +7 -3
  37. package/dist/chunk-2QUJLHCZ.js +0 -362
  38. package/dist/web/assets/index-BNhrx9S1.js +0 -67
  39. package/dist/web/assets/index-CqrrRLOh.css +0 -1
@@ -1,18 +1,21 @@
1
+ import {
2
+ JOURNAL_SCHEMA
3
+ } from "./chunk-UCN6TI25.js";
1
4
  import {
2
5
  CachedEmbeddingProvider,
3
6
  createEmbeddingProvider,
4
7
  hashText,
5
8
  serializeEmbedding
6
- } from "./chunk-D5I7GBV7.js";
7
- import {
8
- JOURNAL_SCHEMA
9
- } from "./chunk-ECSCVEQQ.js";
9
+ } from "./chunk-FNV5FF35.js";
10
10
  import {
11
11
  HYBRID_SEARCH_MIN_SCORE,
12
12
  KNOWLEDGE_CHUNK_SIZE,
13
13
  SQLITE_CACHE_SIZE_KB,
14
14
  SQLITE_MMAP_SIZE
15
15
  } from "./chunk-RO62LO6Z.js";
16
+ import {
17
+ createLogger
18
+ } from "./chunk-RCMD3U65.js";
16
19
 
17
20
  // src/memory/database.ts
18
21
  import Database from "better-sqlite3";
@@ -21,6 +24,7 @@ import { dirname } from "path";
21
24
  import * as sqliteVec from "sqlite-vec";
22
25
 
23
26
  // src/memory/schema.ts
27
+ var log = createLogger("Memory");
24
28
  function compareSemver(a, b) {
25
29
  const parseVersion = (v) => {
26
30
  const parts = v.split("-")[0].split(".").map(Number);
@@ -313,11 +317,11 @@ var CURRENT_SCHEMA_VERSION = "1.11.0";
313
317
  function runMigrations(db) {
314
318
  const currentVersion = getSchemaVersion(db);
315
319
  if (!currentVersion || versionLessThan(currentVersion, "1.1.0")) {
316
- console.log("\u{1F4E6} Running migration: Adding scheduled task columns...");
320
+ log.info("Running migration: Adding scheduled task columns...");
317
321
  try {
318
322
  const tableExists = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='tasks'").get();
319
323
  if (!tableExists) {
320
- console.log(" Tasks table doesn't exist yet, skipping column migration");
324
+ log.info("Tasks table doesn't exist yet, skipping column migration");
321
325
  setSchemaVersion(db, CURRENT_SCHEMA_VERSION);
322
326
  return;
323
327
  }
@@ -350,15 +354,15 @@ function runMigrations(db) {
350
354
  CREATE INDEX IF NOT EXISTS idx_task_deps_task ON task_dependencies(task_id);
351
355
  CREATE INDEX IF NOT EXISTS idx_task_deps_parent ON task_dependencies(depends_on_task_id);
352
356
  `);
353
- console.log("\u2705 Migration 1.1.0 complete: Scheduled tasks support added");
357
+ log.info("Migration 1.1.0 complete: Scheduled tasks support added");
354
358
  } catch (error) {
355
- console.error("\u274C Migration 1.1.0 failed:", error);
359
+ log.error({ err: error }, "Migration 1.1.0 failed");
356
360
  throw error;
357
361
  }
358
362
  }
359
363
  if (!currentVersion || versionLessThan(currentVersion, "1.2.0")) {
360
364
  try {
361
- console.log("\u{1F504} Running migration 1.2.0: Extend sessions table for SQLite backend");
365
+ log.info("Running migration 1.2.0: Extend sessions table for SQLite backend");
362
366
  const addColumnIfNotExists = (table, column, type) => {
363
367
  try {
364
368
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${type}`);
@@ -387,14 +391,14 @@ function runMigrations(db) {
387
391
  );
388
392
  }
389
393
  db.exec("CREATE INDEX IF NOT EXISTS idx_sessions_updated ON sessions(updated_at DESC)");
390
- console.log("\u2705 Migration 1.2.0 complete: Sessions table extended");
394
+ log.info("Migration 1.2.0 complete: Sessions table extended");
391
395
  } catch (error) {
392
- console.error("\u274C Migration 1.2.0 failed:", error);
396
+ log.error({ err: error }, "Migration 1.2.0 failed");
393
397
  throw error;
394
398
  }
395
399
  }
396
400
  if (!currentVersion || versionLessThan(currentVersion, "1.9.0")) {
397
- console.log("\u{1F504} Running migration 1.9.0: Upgrade embedding_cache to BLOB storage");
401
+ log.info("Running migration 1.9.0: Upgrade embedding_cache to BLOB storage");
398
402
  try {
399
403
  db.exec(`DROP TABLE IF EXISTS embedding_cache`);
400
404
  db.exec(`
@@ -410,14 +414,14 @@ function runMigrations(db) {
410
414
  );
411
415
  CREATE INDEX IF NOT EXISTS idx_embedding_cache_accessed ON embedding_cache(accessed_at);
412
416
  `);
413
- console.log("\u2705 Migration 1.9.0 complete: embedding_cache upgraded to BLOB storage");
417
+ log.info("Migration 1.9.0 complete: embedding_cache upgraded to BLOB storage");
414
418
  } catch (error) {
415
- console.error("\u274C Migration 1.9.0 failed:", error);
419
+ log.error({ err: error }, "Migration 1.9.0 failed");
416
420
  throw error;
417
421
  }
418
422
  }
419
423
  if (!currentVersion || versionLessThan(currentVersion, "1.10.0")) {
420
- console.log("\u{1F504} Running migration 1.10.0: Add tool_config table for runtime tool management");
424
+ log.info("Running migration 1.10.0: Add tool_config table for runtime tool management");
421
425
  try {
422
426
  db.exec(`
423
427
  CREATE TABLE IF NOT EXISTS tool_config (
@@ -428,37 +432,37 @@ function runMigrations(db) {
428
432
  updated_by INTEGER
429
433
  );
430
434
  `);
431
- console.log("\u2705 Migration 1.10.0 complete: tool_config table created");
435
+ log.info("Migration 1.10.0 complete: tool_config table created");
432
436
  } catch (error) {
433
- console.error("\u274C Migration 1.10.0 failed:", error);
437
+ log.error({ err: error }, "Migration 1.10.0 failed");
434
438
  throw error;
435
439
  }
436
440
  }
437
441
  if (!currentVersion || versionLessThan(currentVersion, "1.10.1")) {
438
- console.log(
439
- "\u{1F504} Running migration 1.10.1: Fix tool_config scope CHECK constraint (add admin-only)"
440
- );
442
+ log.info("Running migration 1.10.1: Fix tool_config scope CHECK constraint (add admin-only)");
441
443
  try {
442
- db.exec(`
443
- CREATE TABLE IF NOT EXISTS tool_config_new (
444
- tool_name TEXT PRIMARY KEY,
445
- enabled INTEGER NOT NULL DEFAULT 1 CHECK(enabled IN (0, 1)),
446
- scope TEXT CHECK(scope IN ('always', 'dm-only', 'group-only', 'admin-only')),
447
- updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
448
- updated_by INTEGER
449
- );
450
- INSERT OR IGNORE INTO tool_config_new SELECT * FROM tool_config;
451
- DROP TABLE tool_config;
452
- ALTER TABLE tool_config_new RENAME TO tool_config;
453
- `);
454
- console.log("\u2705 Migration 1.10.1 complete: tool_config CHECK constraint updated");
444
+ db.transaction(() => {
445
+ db.exec(`
446
+ CREATE TABLE IF NOT EXISTS tool_config_new (
447
+ tool_name TEXT PRIMARY KEY,
448
+ enabled INTEGER NOT NULL DEFAULT 1 CHECK(enabled IN (0, 1)),
449
+ scope TEXT CHECK(scope IN ('always', 'dm-only', 'group-only', 'admin-only')),
450
+ updated_at INTEGER NOT NULL DEFAULT (unixepoch()),
451
+ updated_by INTEGER
452
+ );
453
+ INSERT OR IGNORE INTO tool_config_new SELECT * FROM tool_config;
454
+ DROP TABLE tool_config;
455
+ ALTER TABLE tool_config_new RENAME TO tool_config;
456
+ `);
457
+ })();
458
+ log.info("Migration 1.10.1 complete: tool_config CHECK constraint updated");
455
459
  } catch (error) {
456
- console.error("\u274C Migration 1.10.1 failed:", error);
460
+ log.error({ err: error }, "Migration 1.10.1 failed");
457
461
  throw error;
458
462
  }
459
463
  }
460
464
  if (!currentVersion || versionLessThan(currentVersion, "1.11.0")) {
461
- console.log("\u{1F504} Running migration 1.11.0: Add tool_index tables for Tool RAG");
465
+ log.info("Running migration 1.11.0: Add tool_index tables for Tool RAG");
462
466
  try {
463
467
  db.exec(`
464
468
  CREATE TABLE IF NOT EXISTS tool_index (
@@ -490,9 +494,9 @@ function runMigrations(db) {
490
494
  VALUES (new.rowid, new.search_text, new.name);
491
495
  END;
492
496
  `);
493
- console.log("\u2705 Migration 1.11.0 complete: tool_index tables created");
497
+ log.info("Migration 1.11.0 complete: tool_index tables created");
494
498
  } catch (error) {
495
- console.error("\u274C Migration 1.11.0 failed:", error);
499
+ log.error({ err: error }, "Migration 1.11.0 failed");
496
500
  throw error;
497
501
  }
498
502
  }
@@ -500,6 +504,7 @@ function runMigrations(db) {
500
504
  }
501
505
 
502
506
  // src/memory/database.ts
507
+ var log2 = createLogger("Memory");
503
508
  var MemoryDatabase = class {
504
509
  db;
505
510
  config;
@@ -511,7 +516,7 @@ var MemoryDatabase = class {
511
516
  mkdirSync(dir, { recursive: true });
512
517
  }
513
518
  this.db = new Database(config.path, {
514
- verbose: process.env.DEBUG_SQL ? console.log : void 0
519
+ verbose: process.env.DEBUG_SQL ? (msg) => log2.debug(String(msg)) : void 0
515
520
  });
516
521
  try {
517
522
  chmodSync(config.path, 384);
@@ -551,18 +556,16 @@ var MemoryDatabase = class {
551
556
  ensureVectorTables(this.db, dims);
552
557
  this.vectorReady = true;
553
558
  } catch (error) {
554
- console.warn(
555
- `\u26A0\uFE0F sqlite-vec not available, vector search disabled: ${error.message}`
556
- );
557
- console.warn(" Falling back to keyword-only search");
559
+ log2.warn(`sqlite-vec not available, vector search disabled: ${error.message}`);
560
+ log2.warn("Falling back to keyword-only search");
558
561
  this.config.enableVectorSearch = false;
559
562
  }
560
563
  }
561
564
  migrate(from, to) {
562
- console.log(`Migrating database from ${from} to ${to}...`);
565
+ log2.info(`Migrating database from ${from} to ${to}...`);
563
566
  runMigrations(this.db);
564
567
  ensureSchema(this.db);
565
- console.log("Migration complete");
568
+ log2.info("Migration complete");
566
569
  }
567
570
  getDb() {
568
571
  return this.db;
@@ -811,6 +814,7 @@ var KnowledgeIndexer = class {
811
814
 
812
815
  // src/memory/agent/sessions.ts
813
816
  import { randomUUID } from "crypto";
817
+ var log3 = createLogger("Memory");
814
818
  var SessionStore = class {
815
819
  constructor(db, embedder, vectorEnabled) {
816
820
  this.db = db;
@@ -931,13 +935,12 @@ ${session.summary}`;
931
935
  ).run(knowledgeId, sessionId, text, hash);
932
936
  if (embedding && this.vectorEnabled) {
933
937
  const embeddingBuffer = serializeEmbedding(embedding);
934
- const rowid = this.db.prepare(`SELECT rowid FROM knowledge WHERE id = ?`).get(knowledgeId);
935
- this.db.prepare(`DELETE FROM knowledge_vec WHERE rowid = ?`).run(rowid.rowid);
936
- this.db.prepare(`INSERT INTO knowledge_vec (rowid, embedding) VALUES (?, ?)`).run(rowid.rowid, embeddingBuffer);
938
+ this.db.prepare(`DELETE FROM knowledge_vec WHERE id = ?`).run(knowledgeId);
939
+ this.db.prepare(`INSERT INTO knowledge_vec (id, embedding) VALUES (?, ?)`).run(knowledgeId, embeddingBuffer);
937
940
  }
938
- console.log(`Indexed session ${sessionId} to knowledge base`);
941
+ log3.info(`Indexed session ${sessionId} to knowledge base`);
939
942
  } catch (error) {
940
- console.error("Error indexing session:", error);
943
+ log3.error({ err: error }, "Error indexing session");
941
944
  }
942
945
  }
943
946
  deleteSession(sessionId) {
@@ -1302,6 +1305,7 @@ var UserStore = class {
1302
1305
  };
1303
1306
 
1304
1307
  // src/memory/search/hybrid.ts
1308
+ var log4 = createLogger("Memory");
1305
1309
  function escapeFts5Query(query) {
1306
1310
  return query.replace(/["\*\-\+\(\)\:\^\~\?\.\@\#\$\%\&\!\[\]\{\}\|\\\/<>=,;'`]/g, " ").replace(/\s+/g, " ").trim();
1307
1311
  }
@@ -1349,7 +1353,7 @@ var HybridSearch = class {
1349
1353
  vectorScore: 1 - row.distance
1350
1354
  }));
1351
1355
  } catch (error) {
1352
- console.error("Vector search error (knowledge):", error);
1356
+ log4.error({ err: error }, "Vector search error (knowledge)");
1353
1357
  return [];
1354
1358
  }
1355
1359
  }
@@ -1372,7 +1376,7 @@ var HybridSearch = class {
1372
1376
  keywordScore: this.bm25ToScore(row.score)
1373
1377
  }));
1374
1378
  } catch (error) {
1375
- console.error("FTS5 search error (knowledge):", error);
1379
+ log4.error({ err: error }, "FTS5 search error (knowledge)");
1376
1380
  return [];
1377
1381
  }
1378
1382
  }
@@ -1407,7 +1411,7 @@ var HybridSearch = class {
1407
1411
  vectorScore: 1 - row.distance
1408
1412
  }));
1409
1413
  } catch (error) {
1410
- console.error("Vector search error (messages):", error);
1414
+ log4.error({ err: error }, "Vector search error (messages)");
1411
1415
  return [];
1412
1416
  }
1413
1417
  }
@@ -1437,7 +1441,7 @@ var HybridSearch = class {
1437
1441
  keywordScore: this.bm25ToScore(row.score)
1438
1442
  }));
1439
1443
  } catch (error) {
1440
- console.error("FTS5 search error (messages):", error);
1444
+ log4.error({ err: error }, "FTS5 search error (messages)");
1441
1445
  return [];
1442
1446
  }
1443
1447
  }
@@ -1467,6 +1471,7 @@ var HybridSearch = class {
1467
1471
  };
1468
1472
 
1469
1473
  // src/memory/search/context.ts
1474
+ var log5 = createLogger("Memory");
1470
1475
  var ContextBuilder = class {
1471
1476
  constructor(db, embedder, vectorEnabled) {
1472
1477
  this.db = db;
@@ -1500,7 +1505,7 @@ var ContextBuilder = class {
1500
1505
  });
1501
1506
  relevantKnowledge.push(...knowledgeResults.map((r) => r.text));
1502
1507
  } catch (error) {
1503
- console.warn("Knowledge search failed:", error);
1508
+ log5.warn({ err: error }, "Knowledge search failed");
1504
1509
  }
1505
1510
  }
1506
1511
  const recentTextsSet = new Set(
@@ -1530,7 +1535,7 @@ var ContextBuilder = class {
1530
1535
  }
1531
1536
  }
1532
1537
  } catch (error) {
1533
- console.warn("Feed search failed:", error);
1538
+ log5.warn({ err: error }, "Feed search failed");
1534
1539
  }
1535
1540
  if (relevantFeed.length === 0 && recentTgMessages.length > 0) {
1536
1541
  const recentTexts = recentTgMessages.filter((m) => m.text && m.text.length > 0).slice(-maxRelevantChunks).map((m) => {
@@ -0,0 +1,141 @@
1
+ // src/utils/logger.ts
2
+ import pino from "pino";
3
+ import { Writable } from "stream";
4
+ var listeners = /* @__PURE__ */ new Set();
5
+ function addLogListener(fn) {
6
+ listeners.add(fn);
7
+ return () => listeners.delete(fn);
8
+ }
9
+ function clearLogListeners() {
10
+ listeners.clear();
11
+ }
12
+ var LEVEL_MAP = {
13
+ 10: "log",
14
+ // trace → log
15
+ 20: "log",
16
+ // debug → log
17
+ 30: "log",
18
+ // info → log
19
+ 40: "warn",
20
+ // warn → warn
21
+ 50: "error",
22
+ // error → error
23
+ 60: "error"
24
+ // fatal → error
25
+ };
26
+ var WebUILogStream = class extends Writable {
27
+ _write(chunk, _encoding, callback) {
28
+ if (listeners.size === 0) {
29
+ callback();
30
+ return;
31
+ }
32
+ try {
33
+ const obj = JSON.parse(chunk.toString());
34
+ const entry = {
35
+ level: LEVEL_MAP[obj.level] ?? "log",
36
+ message: obj.msg ?? "",
37
+ timestamp: obj.time ?? Date.now()
38
+ };
39
+ for (const fn of listeners) {
40
+ try {
41
+ fn(entry);
42
+ } catch {
43
+ }
44
+ }
45
+ } catch {
46
+ }
47
+ callback();
48
+ }
49
+ };
50
+ var VALID_LEVELS = ["fatal", "error", "warn", "info", "debug", "trace"];
51
+ function isValidLevel(s) {
52
+ return VALID_LEVELS.includes(s);
53
+ }
54
+ function resolveLevel() {
55
+ const explicit = process.env.TELETON_LOG_LEVEL?.toLowerCase();
56
+ if (explicit && isValidLevel(explicit)) {
57
+ return explicit;
58
+ }
59
+ if (process.env.TELETON_LOG === "verbose") {
60
+ return "debug";
61
+ }
62
+ return "info";
63
+ }
64
+ var webUIStream = new WebUILogStream();
65
+ var usePretty = process.env.TELETON_LOG_PRETTY !== "false";
66
+ var stdoutStream = usePretty ? pino.transport({
67
+ target: "pino-pretty",
68
+ options: {
69
+ colorize: true,
70
+ translateTime: "HH:MM:ss",
71
+ ignore: "pid,hostname,module",
72
+ messageFormat: "{if module}[{module}] {end}{msg}"
73
+ }
74
+ }) : pino.destination(1);
75
+ var initialLevel = resolveLevel();
76
+ var multiStream = pino.multistream([
77
+ { stream: stdoutStream, level: initialLevel },
78
+ { stream: webUIStream, level: "trace" }
79
+ // WebUI gets everything
80
+ ]);
81
+ var rootLogger = pino(
82
+ {
83
+ level: initialLevel,
84
+ timestamp: pino.stdTimeFunctions.isoTime,
85
+ base: null,
86
+ // no pid/hostname noise
87
+ redact: {
88
+ paths: [
89
+ "apiKey",
90
+ "api_key",
91
+ "password",
92
+ "secret",
93
+ "token",
94
+ "mnemonic",
95
+ "*.apiKey",
96
+ "*.api_key",
97
+ "*.password",
98
+ "*.secret",
99
+ "*.token",
100
+ "*.mnemonic"
101
+ ],
102
+ censor: "[REDACTED]"
103
+ }
104
+ },
105
+ multiStream
106
+ );
107
+ function createLogger(module) {
108
+ return rootLogger.child({ module });
109
+ }
110
+ function initLoggerFromConfig(logging) {
111
+ if (!process.env.TELETON_LOG_LEVEL && !process.env.TELETON_LOG) {
112
+ const level = logging.level?.toLowerCase();
113
+ if (level && isValidLevel(level)) {
114
+ setLogLevel(level);
115
+ }
116
+ }
117
+ }
118
+ function setLogLevel(level) {
119
+ rootLogger.level = level;
120
+ const streams = multiStream.streams;
121
+ if (Array.isArray(streams) && streams[0]) {
122
+ streams[0].level = pino.levels.values[level] ?? 30;
123
+ }
124
+ _verbose = level === "debug" || level === "trace";
125
+ }
126
+ var _verbose = rootLogger.isLevelEnabled("debug");
127
+ function setVerbose(v) {
128
+ setLogLevel(v ? "debug" : "info");
129
+ }
130
+ function isVerbose() {
131
+ return _verbose;
132
+ }
133
+
134
+ export {
135
+ addLogListener,
136
+ clearLogListeners,
137
+ createLogger,
138
+ initLoggerFromConfig,
139
+ setVerbose,
140
+ isVerbose
141
+ };
@@ -1,11 +1,15 @@
1
1
  import {
2
2
  TELETON_ROOT
3
3
  } from "./chunk-EYWNOHMJ.js";
4
+ import {
5
+ createLogger
6
+ } from "./chunk-RCMD3U65.js";
4
7
 
5
8
  // src/utils/module-db.ts
6
9
  import Database from "better-sqlite3";
7
10
  import { existsSync, mkdirSync, chmodSync } from "fs";
8
11
  import { dirname, join } from "path";
12
+ var log = createLogger("Utils");
9
13
  var JOURNAL_SCHEMA = `
10
14
  CREATE TABLE IF NOT EXISTS journal (
11
15
  id INTEGER PRIMARY KEY AUTOINCREMENT,
@@ -114,14 +118,14 @@ function migrateFromMainDb(moduleDb, tables) {
114
118
  moduleDb.exec(`DROP TABLE main_db.${table}`);
115
119
  } catch {
116
120
  }
117
- console.log(` \u{1F4E6} Migrated ${src.c} rows from memory.db \u2192 ${table} (source dropped)`);
121
+ log.info(`Migrated ${src.c} rows from memory.db \u2192 ${table} (source dropped)`);
118
122
  } catch (e) {
119
- console.warn(` \u26A0\uFE0F Could not migrate table ${table}:`, e);
123
+ log.warn({ err: e }, `Could not migrate table ${table}`);
120
124
  }
121
125
  }
122
126
  moduleDb.exec(`DETACH DATABASE main_db`);
123
127
  } catch (e) {
124
- console.warn(`\u26A0\uFE0F Migration from memory.db failed:`, e);
128
+ log.warn({ err: e }, `Migration from memory.db failed`);
125
129
  try {
126
130
  moduleDb.exec(`DETACH DATABASE main_db`);
127
131
  } catch {
@@ -1,6 +1,14 @@
1
+ import {
2
+ getErrorMessage
3
+ } from "./chunk-XBE4JB7C.js";
4
+ import {
5
+ createLogger
6
+ } from "./chunk-RCMD3U65.js";
7
+
1
8
  // src/agent/tools/telegram/gifts/get-my-gifts.ts
2
9
  import { Type } from "@sinclair/typebox";
3
10
  import { Api } from "telegram";
11
+ var log = createLogger("Tools");
4
12
  var giftCatalogCache = null;
5
13
  var CATALOG_CACHE_TTL_MS = 5 * 60 * 1e3;
6
14
  function extractEmoji(sticker) {
@@ -179,8 +187,8 @@ var telegramGetMyGiftsExecutor = async (params, context) => {
179
187
  const unlimited = gifts.filter((g) => !g.isLimited);
180
188
  const collectibles = gifts.filter((g) => g.isCollectible);
181
189
  const viewingLabel = viewSender ? `sender (${context.senderId})` : userId || "self";
182
- console.log(
183
- `\u{1F4E6} get_my_gifts: viewing ${viewingLabel}, found ${gifts.length} gifts (${collectibles.length} collectibles)`
190
+ log.info(
191
+ `get_my_gifts: viewing ${viewingLabel}, found ${gifts.length} gifts (${collectibles.length} collectibles)`
184
192
  );
185
193
  return {
186
194
  success: true,
@@ -198,10 +206,10 @@ var telegramGetMyGiftsExecutor = async (params, context) => {
198
206
  }
199
207
  };
200
208
  } catch (error) {
201
- console.error("Error getting gifts:", error);
209
+ log.error({ err: error }, "Error getting gifts");
202
210
  return {
203
211
  success: false,
204
- error: error instanceof Error ? error.message : String(error)
212
+ error: getErrorMessage(error)
205
213
  };
206
214
  }
207
215
  };
@@ -0,0 +1,20 @@
1
+ import {
2
+ DEFAULT_FETCH_TIMEOUT_MS
3
+ } from "./chunk-4DU3C27M.js";
4
+
5
+ // src/utils/fetch.ts
6
+ var DEFAULT_TIMEOUT_MS = DEFAULT_FETCH_TIMEOUT_MS;
7
+ function fetchWithTimeout(url, init) {
8
+ const { timeoutMs = DEFAULT_TIMEOUT_MS, ...fetchInit } = init ?? {};
9
+ if (fetchInit.signal) {
10
+ return fetch(url, fetchInit);
11
+ }
12
+ return fetch(url, {
13
+ ...fetchInit,
14
+ signal: AbortSignal.timeout(timeoutMs)
15
+ });
16
+ }
17
+
18
+ export {
19
+ fetchWithTimeout
20
+ };
@@ -0,0 +1,8 @@
1
+ // src/utils/errors.ts
2
+ function getErrorMessage(error) {
3
+ return error instanceof Error ? error.message : String(error);
4
+ }
5
+
6
+ export {
7
+ getErrorMessage
8
+ };
@@ -1,19 +1,6 @@
1
1
  import {
2
- DEFAULT_FETCH_TIMEOUT_MS
3
- } from "./chunk-4DU3C27M.js";
4
-
5
- // src/utils/fetch.ts
6
- var DEFAULT_TIMEOUT_MS = DEFAULT_FETCH_TIMEOUT_MS;
7
- function fetchWithTimeout(url, init) {
8
- const { timeoutMs = DEFAULT_TIMEOUT_MS, ...fetchInit } = init ?? {};
9
- if (fetchInit.signal) {
10
- return fetch(url, fetchInit);
11
- }
12
- return fetch(url, {
13
- ...fetchInit,
14
- signal: AbortSignal.timeout(timeoutMs)
15
- });
16
- }
2
+ fetchWithTimeout
3
+ } from "./chunk-VAUJSSD3.js";
17
4
 
18
5
  // src/constants/api-endpoints.ts
19
6
  var TONAPI_BASE_URL = "https://tonapi.io/v2";
@@ -60,7 +47,6 @@ var ELEVENLABS_TTS_URL = "https://api.elevenlabs.io/v1/text-to-speech";
60
47
  var VOYAGE_API_URL = "https://api.voyageai.com/v1";
61
48
 
62
49
  export {
63
- fetchWithTimeout,
64
50
  setTonapiKey,
65
51
  tonapiFetch,
66
52
  STONFI_API_BASE_URL,