teleton 0.4.0 → 0.5.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.
- package/README.md +88 -13
- package/dist/BigInteger-DQ33LTTE.js +5 -0
- package/dist/chunk-4DU3C27M.js +30 -0
- package/dist/chunk-5WWR4CU3.js +124 -0
- package/dist/{chunk-7UPH62J2.js → chunk-BYTHCDZA.js} +261 -255
- package/dist/{chunk-E2NXSWOS.js → chunk-NUGDTPE4.js} +24 -64
- package/dist/{chunk-OA5L7GM6.js → chunk-O4R7V5Y2.js} +37 -5
- package/dist/chunk-QUAPFI2N.js +42 -0
- package/dist/{chunk-QU4ZOR35.js → chunk-RRB6BWU7.js} +3108 -3345
- package/dist/chunk-TSKJCWQQ.js +1263 -0
- package/dist/{chunk-B2PRMXOH.js → chunk-WL2Q3VRD.js} +0 -2
- package/dist/{chunk-OQGNS2FV.js → chunk-YBA6IBGT.js} +20 -5
- package/dist/cli/index.js +39 -172
- package/dist/{endpoint-FT2B2RZ2.js → endpoint-FLYNEZ2F.js} +1 -1
- package/dist/{get-my-gifts-AFKBG4YQ.js → get-my-gifts-KVULMBJ3.js} +1 -1
- package/dist/index.js +12 -12
- package/dist/{memory-SYTQ5P7P.js → memory-657W5AS6.js} +4 -5
- package/dist/{migrate-ITXMRRSZ.js → migrate-PMB2JVXH.js} +4 -5
- package/dist/server-BQY7CM2N.js +1120 -0
- package/dist/{task-dependency-resolver-GY6PEBIS.js → task-dependency-resolver-TRPILAHM.js} +2 -2
- package/dist/{task-executor-4QKTZZ3P.js → task-executor-N7XNVK5N.js} +1 -1
- package/dist/{tasks-M3QDPTGY.js → tasks-QSCWSMPS.js} +1 -1
- package/dist/{transcript-DF2Y6CFY.js → transcript-7V4UNID4.js} +1 -1
- package/dist/web/assets/index-CDMbujHf.css +1 -0
- package/dist/web/assets/index-DDX8oQ2z.js +67 -0
- package/dist/web/index.html +16 -0
- package/dist/web/logo_dark.png +0 -0
- package/package.json +23 -4
- package/dist/chunk-67QC5FBN.js +0 -60
- package/dist/chunk-A64NPEFL.js +0 -74
- package/dist/chunk-DUW5VBAZ.js +0 -133
- package/dist/chunk-QBGUCUOW.js +0 -16
- package/dist/scraper-SH7GS7TO.js +0 -282
|
@@ -4,9 +4,6 @@ var TaskStore = class {
|
|
|
4
4
|
constructor(db) {
|
|
5
5
|
this.db = db;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
* Create a new task
|
|
9
|
-
*/
|
|
10
7
|
createTask(task) {
|
|
11
8
|
const id = randomUUID();
|
|
12
9
|
const now = Math.floor(Date.now() / 1e3);
|
|
@@ -44,9 +41,6 @@ var TaskStore = class {
|
|
|
44
41
|
scheduledMessageId: task.scheduledMessageId
|
|
45
42
|
};
|
|
46
43
|
}
|
|
47
|
-
/**
|
|
48
|
-
* Update a task
|
|
49
|
-
*/
|
|
50
44
|
updateTask(taskId, updates) {
|
|
51
45
|
const task = this.getTask(taskId);
|
|
52
46
|
if (!task) return void 0;
|
|
@@ -92,9 +86,6 @@ var TaskStore = class {
|
|
|
92
86
|
).run(...updateValues);
|
|
93
87
|
return this.getTask(taskId);
|
|
94
88
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Get a task by ID
|
|
97
|
-
*/
|
|
98
89
|
getTask(id) {
|
|
99
90
|
const row = this.db.prepare(`SELECT * FROM tasks WHERE id = ?`).get(id);
|
|
100
91
|
if (!row) return void 0;
|
|
@@ -103,21 +94,18 @@ var TaskStore = class {
|
|
|
103
94
|
description: row.description,
|
|
104
95
|
status: row.status,
|
|
105
96
|
priority: row.priority,
|
|
106
|
-
createdBy: row.created_by,
|
|
97
|
+
createdBy: row.created_by ?? void 0,
|
|
107
98
|
createdAt: new Date(row.created_at * 1e3),
|
|
108
99
|
startedAt: row.started_at ? new Date(row.started_at * 1e3) : void 0,
|
|
109
100
|
completedAt: row.completed_at ? new Date(row.completed_at * 1e3) : void 0,
|
|
110
|
-
result: row.result,
|
|
111
|
-
error: row.error,
|
|
101
|
+
result: row.result ?? void 0,
|
|
102
|
+
error: row.error ?? void 0,
|
|
112
103
|
scheduledFor: row.scheduled_for ? new Date(row.scheduled_for * 1e3) : void 0,
|
|
113
|
-
payload: row.payload,
|
|
114
|
-
reason: row.reason,
|
|
115
|
-
scheduledMessageId: row.scheduled_message_id
|
|
104
|
+
payload: row.payload ?? void 0,
|
|
105
|
+
reason: row.reason ?? void 0,
|
|
106
|
+
scheduledMessageId: row.scheduled_message_id ?? void 0
|
|
116
107
|
};
|
|
117
108
|
}
|
|
118
|
-
/**
|
|
119
|
-
* List tasks with optional filters
|
|
120
|
-
*/
|
|
121
109
|
listTasks(filter) {
|
|
122
110
|
let sql = `SELECT * FROM tasks WHERE 1=1`;
|
|
123
111
|
const params = [];
|
|
@@ -136,21 +124,18 @@ var TaskStore = class {
|
|
|
136
124
|
description: row.description,
|
|
137
125
|
status: row.status,
|
|
138
126
|
priority: row.priority,
|
|
139
|
-
createdBy: row.created_by,
|
|
127
|
+
createdBy: row.created_by ?? void 0,
|
|
140
128
|
createdAt: new Date(row.created_at * 1e3),
|
|
141
129
|
startedAt: row.started_at ? new Date(row.started_at * 1e3) : void 0,
|
|
142
130
|
completedAt: row.completed_at ? new Date(row.completed_at * 1e3) : void 0,
|
|
143
|
-
result: row.result,
|
|
144
|
-
error: row.error,
|
|
131
|
+
result: row.result ?? void 0,
|
|
132
|
+
error: row.error ?? void 0,
|
|
145
133
|
scheduledFor: row.scheduled_for ? new Date(row.scheduled_for * 1e3) : void 0,
|
|
146
|
-
payload: row.payload,
|
|
147
|
-
reason: row.reason,
|
|
148
|
-
scheduledMessageId: row.scheduled_message_id
|
|
134
|
+
payload: row.payload ?? void 0,
|
|
135
|
+
reason: row.reason ?? void 0,
|
|
136
|
+
scheduledMessageId: row.scheduled_message_id ?? void 0
|
|
149
137
|
}));
|
|
150
138
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Get active (pending or in_progress) tasks
|
|
153
|
-
*/
|
|
154
139
|
getActiveTasks() {
|
|
155
140
|
const rows = this.db.prepare(
|
|
156
141
|
`
|
|
@@ -164,52 +149,37 @@ var TaskStore = class {
|
|
|
164
149
|
description: row.description,
|
|
165
150
|
status: row.status,
|
|
166
151
|
priority: row.priority,
|
|
167
|
-
createdBy: row.created_by,
|
|
152
|
+
createdBy: row.created_by ?? void 0,
|
|
168
153
|
createdAt: new Date(row.created_at * 1e3),
|
|
169
154
|
startedAt: row.started_at ? new Date(row.started_at * 1e3) : void 0,
|
|
170
155
|
completedAt: row.completed_at ? new Date(row.completed_at * 1e3) : void 0,
|
|
171
|
-
result: row.result,
|
|
172
|
-
error: row.error,
|
|
156
|
+
result: row.result ?? void 0,
|
|
157
|
+
error: row.error ?? void 0,
|
|
173
158
|
scheduledFor: row.scheduled_for ? new Date(row.scheduled_for * 1e3) : void 0,
|
|
174
|
-
payload: row.payload,
|
|
175
|
-
reason: row.reason,
|
|
176
|
-
scheduledMessageId: row.scheduled_message_id
|
|
159
|
+
payload: row.payload ?? void 0,
|
|
160
|
+
reason: row.reason ?? void 0,
|
|
161
|
+
scheduledMessageId: row.scheduled_message_id ?? void 0
|
|
177
162
|
}));
|
|
178
163
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Delete a task
|
|
181
|
-
*/
|
|
182
164
|
deleteTask(taskId) {
|
|
183
165
|
const result = this.db.prepare(`DELETE FROM tasks WHERE id = ?`).run(taskId);
|
|
184
166
|
return result.changes > 0;
|
|
185
167
|
}
|
|
186
|
-
/**
|
|
187
|
-
* Mark task as done
|
|
188
|
-
*/
|
|
189
168
|
completeTask(taskId, result) {
|
|
190
169
|
return this.updateTask(taskId, { status: "done", result });
|
|
191
170
|
}
|
|
192
|
-
/**
|
|
193
|
-
* Mark task as failed
|
|
194
|
-
*/
|
|
195
171
|
failTask(taskId, error) {
|
|
196
172
|
return this.updateTask(taskId, { status: "failed", error });
|
|
197
173
|
}
|
|
198
|
-
/**
|
|
199
|
-
* Start a task
|
|
200
|
-
*/
|
|
201
174
|
startTask(taskId) {
|
|
202
175
|
return this.updateTask(taskId, { status: "in_progress" });
|
|
203
176
|
}
|
|
204
|
-
/**
|
|
205
|
-
* Cancel a task
|
|
206
|
-
*/
|
|
207
177
|
cancelTask(taskId) {
|
|
208
178
|
return this.updateTask(taskId, { status: "cancelled" });
|
|
209
179
|
}
|
|
210
180
|
/**
|
|
211
|
-
* Check if adding a dependency would create a cycle
|
|
212
|
-
* Uses BFS to traverse dependency graph
|
|
181
|
+
* Check if adding a dependency would create a cycle.
|
|
182
|
+
* Uses BFS to traverse the dependency graph.
|
|
213
183
|
*/
|
|
214
184
|
wouldCreateCycle(taskId, newParentId) {
|
|
215
185
|
if (taskId === newParentId) {
|
|
@@ -231,10 +201,6 @@ var TaskStore = class {
|
|
|
231
201
|
}
|
|
232
202
|
return false;
|
|
233
203
|
}
|
|
234
|
-
/**
|
|
235
|
-
* Add a dependency (taskId depends on parentTaskId)
|
|
236
|
-
* Throws error if would create circular dependency
|
|
237
|
-
*/
|
|
238
204
|
addDependency(taskId, parentTaskId) {
|
|
239
205
|
if (this.wouldCreateCycle(taskId, parentTaskId)) {
|
|
240
206
|
throw new Error(
|
|
@@ -245,23 +211,17 @@ var TaskStore = class {
|
|
|
245
211
|
`INSERT OR IGNORE INTO task_dependencies (task_id, depends_on_task_id) VALUES (?, ?)`
|
|
246
212
|
).run(taskId, parentTaskId);
|
|
247
213
|
}
|
|
248
|
-
/**
|
|
249
|
-
* Get all tasks that this task depends on
|
|
250
|
-
*/
|
|
251
214
|
getDependencies(taskId) {
|
|
252
215
|
const rows = this.db.prepare(`SELECT depends_on_task_id FROM task_dependencies WHERE task_id = ?`).all(taskId);
|
|
253
216
|
return rows.map((r) => r.depends_on_task_id);
|
|
254
217
|
}
|
|
255
|
-
/**
|
|
256
|
-
* Get all tasks that depend on this task
|
|
257
|
-
*/
|
|
258
218
|
getDependents(taskId) {
|
|
259
219
|
const rows = this.db.prepare(`SELECT task_id FROM task_dependencies WHERE depends_on_task_id = ?`).all(taskId);
|
|
260
220
|
return rows.map((r) => r.task_id);
|
|
261
221
|
}
|
|
262
222
|
/**
|
|
263
|
-
* Check if a task can execute (all dependencies are done)
|
|
264
|
-
*
|
|
223
|
+
* Check if a task can execute (all dependencies are done).
|
|
224
|
+
* Uses a single JOIN query instead of N+1 queries.
|
|
265
225
|
*/
|
|
266
226
|
canExecute(taskId) {
|
|
267
227
|
const result = this.db.prepare(
|
|
@@ -276,8 +236,8 @@ var TaskStore = class {
|
|
|
276
236
|
return result.pending_count === 0;
|
|
277
237
|
}
|
|
278
238
|
/**
|
|
279
|
-
* Get all parent task results for a dependent task
|
|
280
|
-
*
|
|
239
|
+
* Get all parent task results for a dependent task.
|
|
240
|
+
* Uses a single JOIN query instead of N+1 queries.
|
|
281
241
|
*/
|
|
282
242
|
getParentResults(taskId) {
|
|
283
243
|
const rows = this.db.prepare(
|
|
@@ -15,17 +15,16 @@ var COMPACTION_MAX_MESSAGES = 200;
|
|
|
15
15
|
var COMPACTION_KEEP_RECENT = 20;
|
|
16
16
|
var COMPACTION_MAX_TOKENS_RATIO = 0.75;
|
|
17
17
|
var COMPACTION_SOFT_THRESHOLD_RATIO = 0.5;
|
|
18
|
-
var SCRAPER_PARALLEL_WORKERS = 4;
|
|
19
18
|
var PENDING_HISTORY_MAX_PER_CHAT = 50;
|
|
20
19
|
var PENDING_HISTORY_MAX_AGE_MS = 24 * 60 * 60 * 1e3;
|
|
21
20
|
var DEBOUNCE_MAX_MULTIPLIER = 3;
|
|
22
21
|
var DEBOUNCE_MAX_BUFFER_SIZE = 20;
|
|
23
22
|
var CONTEXT_MAX_RECENT_MESSAGES = 10;
|
|
24
23
|
var CONTEXT_MAX_RELEVANT_CHUNKS = 5;
|
|
24
|
+
var HYBRID_SEARCH_MIN_SCORE = 0.15;
|
|
25
25
|
var CONTEXT_OVERFLOW_SUMMARY_MESSAGES = 15;
|
|
26
26
|
var RATE_LIMIT_MAX_RETRIES = 3;
|
|
27
27
|
var KNOWLEDGE_CHUNK_SIZE = 500;
|
|
28
|
-
var KNOWLEDGE_CHUNK_OVERLAP = 50;
|
|
29
28
|
var PAYMENT_TOLERANCE_RATIO = 0.99;
|
|
30
29
|
var TELEGRAM_CONNECTION_RETRIES = 5;
|
|
31
30
|
var TELEGRAM_FLOOD_SLEEP_THRESHOLD = 60;
|
|
@@ -34,6 +33,23 @@ var EMBEDDING_CACHE_MAX_ENTRIES = 5e4;
|
|
|
34
33
|
var EMBEDDING_CACHE_TTL_DAYS = 60;
|
|
35
34
|
var EMBEDDING_CACHE_EVICTION_INTERVAL = 1e3;
|
|
36
35
|
var MAX_WRITE_SIZE = 50 * 1024 * 1024;
|
|
36
|
+
var DEFAULT_MAX_TOKENS = 96e3;
|
|
37
|
+
var DEFAULT_SOFT_THRESHOLD_TOKENS = 64e3;
|
|
38
|
+
var FALLBACK_SOFT_THRESHOLD_TOKENS = 6e3;
|
|
39
|
+
var DEFAULT_CONTEXT_WINDOW = 15e4;
|
|
40
|
+
var DEFAULT_MAX_SUMMARY_TOKENS = 2e3;
|
|
41
|
+
var DEFAULT_SUMMARY_FALLBACK_TOKENS = 1e3;
|
|
42
|
+
var MEMORY_FLUSH_RECENT_MESSAGES = 5;
|
|
43
|
+
var CHARS_PER_TOKEN_ESTIMATE = 4;
|
|
44
|
+
var TOKEN_ESTIMATE_SAFETY_MARGIN = 1.2;
|
|
45
|
+
var OVERSIZED_MESSAGE_RATIO = 0.5;
|
|
46
|
+
var ADAPTIVE_CHUNK_RATIO_BASE = 0.4;
|
|
47
|
+
var ADAPTIVE_CHUNK_RATIO_MIN = 0.15;
|
|
48
|
+
var ADAPTIVE_CHUNK_RATIO_TRIGGER = 0.1;
|
|
49
|
+
var SESSION_SLUG_RECENT_MESSAGES = 10;
|
|
50
|
+
var SESSION_SLUG_MAX_TOKENS = 50;
|
|
51
|
+
var MASKING_KEEP_RECENT_COUNT = 10;
|
|
52
|
+
var EMBEDDING_CACHE_EVICTION_RATIO = 0.1;
|
|
37
53
|
|
|
38
54
|
export {
|
|
39
55
|
MAX_TOOL_RESULT_SIZE,
|
|
@@ -52,17 +68,16 @@ export {
|
|
|
52
68
|
COMPACTION_KEEP_RECENT,
|
|
53
69
|
COMPACTION_MAX_TOKENS_RATIO,
|
|
54
70
|
COMPACTION_SOFT_THRESHOLD_RATIO,
|
|
55
|
-
SCRAPER_PARALLEL_WORKERS,
|
|
56
71
|
PENDING_HISTORY_MAX_PER_CHAT,
|
|
57
72
|
PENDING_HISTORY_MAX_AGE_MS,
|
|
58
73
|
DEBOUNCE_MAX_MULTIPLIER,
|
|
59
74
|
DEBOUNCE_MAX_BUFFER_SIZE,
|
|
60
75
|
CONTEXT_MAX_RECENT_MESSAGES,
|
|
61
76
|
CONTEXT_MAX_RELEVANT_CHUNKS,
|
|
77
|
+
HYBRID_SEARCH_MIN_SCORE,
|
|
62
78
|
CONTEXT_OVERFLOW_SUMMARY_MESSAGES,
|
|
63
79
|
RATE_LIMIT_MAX_RETRIES,
|
|
64
80
|
KNOWLEDGE_CHUNK_SIZE,
|
|
65
|
-
KNOWLEDGE_CHUNK_OVERLAP,
|
|
66
81
|
PAYMENT_TOLERANCE_RATIO,
|
|
67
82
|
TELEGRAM_CONNECTION_RETRIES,
|
|
68
83
|
TELEGRAM_FLOOD_SLEEP_THRESHOLD,
|
|
@@ -70,5 +85,22 @@ export {
|
|
|
70
85
|
EMBEDDING_CACHE_MAX_ENTRIES,
|
|
71
86
|
EMBEDDING_CACHE_TTL_DAYS,
|
|
72
87
|
EMBEDDING_CACHE_EVICTION_INTERVAL,
|
|
73
|
-
MAX_WRITE_SIZE
|
|
88
|
+
MAX_WRITE_SIZE,
|
|
89
|
+
DEFAULT_MAX_TOKENS,
|
|
90
|
+
DEFAULT_SOFT_THRESHOLD_TOKENS,
|
|
91
|
+
FALLBACK_SOFT_THRESHOLD_TOKENS,
|
|
92
|
+
DEFAULT_CONTEXT_WINDOW,
|
|
93
|
+
DEFAULT_MAX_SUMMARY_TOKENS,
|
|
94
|
+
DEFAULT_SUMMARY_FALLBACK_TOKENS,
|
|
95
|
+
MEMORY_FLUSH_RECENT_MESSAGES,
|
|
96
|
+
CHARS_PER_TOKEN_ESTIMATE,
|
|
97
|
+
TOKEN_ESTIMATE_SAFETY_MARGIN,
|
|
98
|
+
OVERSIZED_MESSAGE_RATIO,
|
|
99
|
+
ADAPTIVE_CHUNK_RATIO_BASE,
|
|
100
|
+
ADAPTIVE_CHUNK_RATIO_MIN,
|
|
101
|
+
ADAPTIVE_CHUNK_RATIO_TRIGGER,
|
|
102
|
+
SESSION_SLUG_RECENT_MESSAGES,
|
|
103
|
+
SESSION_SLUG_MAX_TOKENS,
|
|
104
|
+
MASKING_KEEP_RECENT_COUNT,
|
|
105
|
+
EMBEDDING_CACHE_EVICTION_RATIO
|
|
74
106
|
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// src/ton/endpoint.ts
|
|
2
|
+
var ENDPOINT_CACHE_TTL_MS = 6e4;
|
|
3
|
+
var ORBS_HOST = "ton.access.orbs.network";
|
|
4
|
+
var ORBS_TOPOLOGY_URL = `https://${ORBS_HOST}/mngr/nodes?npm_version=2.3.3`;
|
|
5
|
+
var TONCENTER_FALLBACK = `https://toncenter.com/api/v2/jsonRPC`;
|
|
6
|
+
var _cache = null;
|
|
7
|
+
async function discoverOrbsEndpoint() {
|
|
8
|
+
const res = await fetch(ORBS_TOPOLOGY_URL);
|
|
9
|
+
const nodes = await res.json();
|
|
10
|
+
const healthy = nodes.filter(
|
|
11
|
+
(n) => n.Healthy === "1" && n.Weight > 0 && n.Mngr?.health?.["v2-mainnet"]
|
|
12
|
+
);
|
|
13
|
+
if (healthy.length === 0) throw new Error("no healthy orbs nodes");
|
|
14
|
+
const totalWeight = healthy.reduce((sum, n) => sum + n.Weight, 0);
|
|
15
|
+
let r = Math.floor(Math.random() * totalWeight);
|
|
16
|
+
let chosen = healthy[0];
|
|
17
|
+
for (const node of healthy) {
|
|
18
|
+
r -= node.Weight;
|
|
19
|
+
if (r < 0) {
|
|
20
|
+
chosen = node;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return `https://${ORBS_HOST}/${chosen.NodeId}/1/mainnet/toncenter-api-v2/jsonRPC`;
|
|
25
|
+
}
|
|
26
|
+
async function getCachedHttpEndpoint() {
|
|
27
|
+
if (_cache && Date.now() - _cache.ts < ENDPOINT_CACHE_TTL_MS) {
|
|
28
|
+
return _cache.url;
|
|
29
|
+
}
|
|
30
|
+
let url;
|
|
31
|
+
try {
|
|
32
|
+
url = await discoverOrbsEndpoint();
|
|
33
|
+
} catch {
|
|
34
|
+
url = TONCENTER_FALLBACK;
|
|
35
|
+
}
|
|
36
|
+
_cache = { url, ts: Date.now() };
|
|
37
|
+
return url;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export {
|
|
41
|
+
getCachedHttpEndpoint
|
|
42
|
+
};
|