teleton 0.8.0 → 0.8.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 (32) hide show
  1. package/README.md +28 -11
  2. package/dist/{chunk-U56QTM46.js → chunk-3S4GGLLR.js} +28 -26
  3. package/dist/{chunk-NUGDTPE4.js → chunk-4L66JHQE.js} +2 -1
  4. package/dist/{chunk-H36RFKRI.js → chunk-5FNWBZ5K.js} +476 -143
  5. package/dist/{chunk-SD4NLLYG.js → chunk-7U7BOHCL.js} +80 -33
  6. package/dist/{chunk-QVBSUYVX.js → chunk-AYWEJCDB.js} +11 -3
  7. package/dist/{chunk-RQBAMUCV.js → chunk-CGOXE4WP.js} +1235 -201
  8. package/dist/{chunk-TVRZJIZX.js → chunk-KVXV7EF7.js} +3 -3
  9. package/dist/{chunk-WIKM24GZ.js → chunk-QBHRXLZS.js} +5 -0
  10. package/dist/{chunk-P36I6OIV.js → chunk-QV2GLOTK.js} +12 -1
  11. package/dist/{chunk-JHYZYFZJ.js → chunk-S6PHGKOC.js} +8 -1
  12. package/dist/{chunk-IJBWWQE4.js → chunk-UP55PXFH.js} +4 -0
  13. package/dist/cli/index.js +17 -16
  14. package/dist/{client-LNZTDQSA.js → client-MPHPIZB6.js} +2 -2
  15. package/dist/{get-my-gifts-OMGKOEPM.js → get-my-gifts-CC6HAVWB.js} +1 -1
  16. package/dist/index.js +11 -11
  17. package/dist/{memory-AS7WKGTW.js → memory-UBHM7ILG.js} +4 -4
  18. package/dist/{migrate-POHWYEIW.js → migrate-UBBEJ5BL.js} +4 -4
  19. package/dist/{server-H3QA252W.js → server-3FHI2SEB.js} +392 -51
  20. package/dist/{setup-server-QXED3D2L.js → setup-server-32XGDPE6.js} +157 -7
  21. package/dist/{store-GAFULOOX.js → store-M5IMUQCL.js} +5 -5
  22. package/dist/{task-dependency-resolver-3FIKQ7Z6.js → task-dependency-resolver-RR2O5S7B.js} +2 -2
  23. package/dist/{task-executor-RUTFG6VG.js → task-executor-6W5HRX5C.js} +2 -2
  24. package/dist/{tasks-BEZ4QRI2.js → tasks-WQIKXDX5.js} +1 -1
  25. package/dist/{tool-index-H3SHOJC3.js → tool-index-PMAOXWUA.js} +8 -5
  26. package/dist/{transcript-IMNE6KU3.js → transcript-NGDPSNIH.js} +1 -1
  27. package/dist/web/assets/index-BfYCdwLI.js +80 -0
  28. package/dist/web/assets/{index-BrVqauzj.css → index-DmlyQVhR.css} +1 -1
  29. package/dist/web/assets/{index.es-DkU1GvWU.js → index.es-DitvF-9H.js} +1 -1
  30. package/dist/web/index.html +2 -2
  31. package/package.json +11 -4
  32. package/dist/web/assets/index-DYeEkvJ6.js +0 -72
@@ -3,14 +3,14 @@ import {
3
3
  createEmbeddingProvider,
4
4
  hashText,
5
5
  serializeEmbedding
6
- } from "./chunk-U56QTM46.js";
6
+ } from "./chunk-3S4GGLLR.js";
7
7
  import {
8
8
  FEED_MESSAGE_MAX_CHARS,
9
9
  HYBRID_SEARCH_MIN_SCORE,
10
10
  KNOWLEDGE_CHUNK_SIZE,
11
11
  SQLITE_CACHE_SIZE_KB,
12
12
  SQLITE_MMAP_SIZE
13
- } from "./chunk-IJBWWQE4.js";
13
+ } from "./chunk-UP55PXFH.js";
14
14
  import {
15
15
  TELETON_ROOT
16
16
  } from "./chunk-EYWNOHMJ.js";
@@ -133,11 +133,7 @@ function migrateFromMainDb(moduleDb, tables) {
133
133
  `INSERT OR IGNORE INTO ${table} (${cols}) SELECT ${cols} FROM main_db.${table}`
134
134
  );
135
135
  totalMigrated += src.c;
136
- try {
137
- moduleDb.exec(`DROP TABLE main_db.${table}`);
138
- } catch {
139
- }
140
- log.info(`Migrated ${src.c} rows from memory.db \u2192 ${table} (source dropped)`);
136
+ log.info(`Migrated ${src.c} rows from memory.db \u2192 ${table}`);
141
137
  } catch (e) {
142
138
  log.warn({ err: e }, `Could not migrate table ${table}`);
143
139
  }
@@ -427,6 +423,26 @@ function ensureSchema(db) {
427
423
  CREATE INDEX IF NOT EXISTS idx_exec_audit_timestamp ON exec_audit(timestamp DESC);
428
424
  CREATE INDEX IF NOT EXISTS idx_exec_audit_user ON exec_audit(user_id);
429
425
 
426
+ -- =====================================================
427
+ -- PLUGIN CONFIG (Plugin Priority Order)
428
+ -- =====================================================
429
+
430
+ CREATE TABLE IF NOT EXISTS plugin_config (
431
+ plugin_name TEXT PRIMARY KEY,
432
+ priority INTEGER NOT NULL DEFAULT 0,
433
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
434
+ );
435
+
436
+ -- =====================================================
437
+ -- USER HOOK CONFIG (Keyword Blocklist + Context Triggers)
438
+ -- =====================================================
439
+
440
+ CREATE TABLE IF NOT EXISTS user_hook_config (
441
+ key TEXT PRIMARY KEY,
442
+ value TEXT NOT NULL,
443
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
444
+ );
445
+
430
446
  -- =====================================================
431
447
  -- JOURNAL (Trading & Business Operations)
432
448
  -- =====================================================
@@ -469,7 +485,7 @@ function setSchemaVersion(db, version) {
469
485
  `
470
486
  ).run(version);
471
487
  }
472
- var CURRENT_SCHEMA_VERSION = "1.13.0";
488
+ var CURRENT_SCHEMA_VERSION = "1.15.0";
473
489
  function runMigrations(db) {
474
490
  const currentVersion = getSchemaVersion(db);
475
491
  if (!currentVersion || versionLessThan(currentVersion, "1.1.0")) {
@@ -523,7 +539,7 @@ function runMigrations(db) {
523
539
  try {
524
540
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${type}`);
525
541
  } catch (e) {
526
- if (!e.message.includes("duplicate column name")) {
542
+ if (!(e instanceof Error) || !e.message.includes("duplicate column name")) {
527
543
  throw e;
528
544
  }
529
545
  }
@@ -692,7 +708,7 @@ function runMigrations(db) {
692
708
  try {
693
709
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${type}`);
694
710
  } catch (e) {
695
- if (!e.message.includes("duplicate column name")) {
711
+ if (!(e instanceof Error) || !e.message.includes("duplicate column name")) {
696
712
  throw e;
697
713
  }
698
714
  }
@@ -705,6 +721,38 @@ function runMigrations(db) {
705
721
  throw error;
706
722
  }
707
723
  }
724
+ if (!currentVersion || versionLessThan(currentVersion, "1.14.0")) {
725
+ log2.info("Running migration 1.14.0: Add plugin_config table for plugin priority");
726
+ try {
727
+ db.exec(`
728
+ CREATE TABLE IF NOT EXISTS plugin_config (
729
+ plugin_name TEXT PRIMARY KEY,
730
+ priority INTEGER NOT NULL DEFAULT 0,
731
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
732
+ );
733
+ `);
734
+ log2.info("Migration 1.14.0 complete: plugin_config table created");
735
+ } catch (error) {
736
+ log2.error({ err: error }, "Migration 1.14.0 failed");
737
+ throw error;
738
+ }
739
+ }
740
+ if (!currentVersion || versionLessThan(currentVersion, "1.15.0")) {
741
+ log2.info("Running migration 1.15.0: Add user_hook_config table");
742
+ try {
743
+ db.exec(`
744
+ CREATE TABLE IF NOT EXISTS user_hook_config (
745
+ key TEXT PRIMARY KEY,
746
+ value TEXT NOT NULL,
747
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
748
+ );
749
+ `);
750
+ log2.info("Migration 1.15.0 complete: user_hook_config table created");
751
+ } catch (error) {
752
+ log2.error({ err: error }, "Migration 1.15.0 failed");
753
+ throw error;
754
+ }
755
+ }
708
756
  setSchemaVersion(db, CURRENT_SCHEMA_VERSION);
709
757
  }
710
758
 
@@ -1720,33 +1768,32 @@ var ContextBuilder = class {
1720
1768
  role: m.isFromAgent ? "assistant" : "user",
1721
1769
  content: m.text ?? ""
1722
1770
  }));
1723
- const relevantKnowledge = [];
1724
- if (includeAgentMemory) {
1725
- try {
1726
- const knowledgeResults = await this.hybridSearch.searchKnowledge(query, queryEmbedding, {
1727
- limit: maxRelevantChunks
1728
- });
1729
- relevantKnowledge.push(...reorderForEdges(knowledgeResults.map((r) => r.text)));
1730
- } catch (error) {
1731
- log6.warn({ err: error }, "Knowledge search failed");
1732
- }
1733
- }
1734
1771
  const recentTextsSet = new Set(
1772
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- filtered for non-null text above
1735
1773
  recentTgMessages.filter((m) => m.text && m.text.length > 0).map((m) => m.text)
1736
1774
  );
1775
+ const knowledgePromise = includeAgentMemory ? this.hybridSearch.searchKnowledge(query, queryEmbedding, { limit: maxRelevantChunks }).catch((error) => {
1776
+ log6.warn({ err: error }, "Knowledge search failed");
1777
+ return [];
1778
+ }) : Promise.resolve([]);
1779
+ const feedPromise = includeFeedHistory ? this.hybridSearch.searchMessages(query, queryEmbedding, { chatId, limit: maxRelevantChunks }).catch((error) => {
1780
+ log6.warn({ err: error }, "Feed search failed");
1781
+ return [];
1782
+ }) : Promise.resolve([]);
1783
+ const [knowledgeResults, feedResults] = await Promise.all([knowledgePromise, feedPromise]);
1784
+ const relevantKnowledge = [];
1785
+ if (knowledgeResults.length > 0) {
1786
+ relevantKnowledge.push(...reorderForEdges(knowledgeResults.map((r) => r.text)));
1787
+ }
1737
1788
  const relevantFeed = [];
1738
1789
  if (includeFeedHistory) {
1739
- try {
1740
- const feedResults = await this.hybridSearch.searchMessages(query, queryEmbedding, {
1741
- chatId,
1742
- limit: maxRelevantChunks
1743
- });
1744
- for (const r of feedResults) {
1745
- if (!recentTextsSet.has(r.text)) {
1746
- relevantFeed.push(truncateFeedMessage(r.text));
1747
- }
1790
+ for (const r of feedResults) {
1791
+ if (!recentTextsSet.has(r.text)) {
1792
+ relevantFeed.push(truncateFeedMessage(r.text));
1748
1793
  }
1749
- if (searchAllChats) {
1794
+ }
1795
+ if (searchAllChats) {
1796
+ try {
1750
1797
  const globalResults = await this.hybridSearch.searchMessages(query, queryEmbedding, {
1751
1798
  limit: maxRelevantChunks
1752
1799
  });
@@ -1757,9 +1804,9 @@ var ContextBuilder = class {
1757
1804
  relevantFeed.push(`[From chat ${r.source}]: ${truncated}`);
1758
1805
  }
1759
1806
  }
1807
+ } catch (error) {
1808
+ log6.warn({ err: error }, "Global feed search failed");
1760
1809
  }
1761
- } catch (error) {
1762
- log6.warn({ err: error }, "Feed search failed");
1763
1810
  }
1764
1811
  if (relevantFeed.length === 0 && recentTgMessages.length > 0) {
1765
1812
  const recentTexts = recentTgMessages.filter((m) => m.text && m.text.length > 0).slice(-maxRelevantChunks).map((m) => {
@@ -6,7 +6,7 @@ import {
6
6
  import {
7
7
  appendToTranscript,
8
8
  readTranscript
9
- } from "./chunk-P36I6OIV.js";
9
+ } from "./chunk-QV2GLOTK.js";
10
10
  import {
11
11
  fetchWithTimeout
12
12
  } from "./chunk-XQUHC3JZ.js";
@@ -225,7 +225,7 @@ function getProviderModel(provider, modelId) {
225
225
  }
226
226
  modelCache.set(cacheKey, model);
227
227
  return model;
228
- } catch (e) {
228
+ } catch {
229
229
  log.warn(`Model ${modelId} not found for ${provider}, falling back to ${meta.defaultModel}`);
230
230
  const fallbackKey = `${provider}:${meta.defaultModel}`;
231
231
  const fallbackCached = modelCache.get(fallbackKey);
@@ -331,9 +331,17 @@ async function chatWithContext(config, options) {
331
331
  }
332
332
  function loadContextFromTranscript(sessionId, systemPrompt) {
333
333
  const messages = readTranscript(sessionId);
334
+ const seenToolCallIds = /* @__PURE__ */ new Set();
335
+ const deduped = messages.filter((msg) => {
336
+ if (msg.role !== "toolResult") return true;
337
+ const id = msg.toolCallId;
338
+ if (seenToolCallIds.has(id)) return false;
339
+ seenToolCallIds.add(id);
340
+ return true;
341
+ });
334
342
  return {
335
343
  systemPrompt,
336
- messages
344
+ messages: deduped
337
345
  };
338
346
  }
339
347
  function createClient(_config) {