easyoref 1.18.4 → 1.20.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.
Files changed (91) hide show
  1. package/dist/agent/extract.d.ts +5 -5
  2. package/dist/agent/extract.d.ts.map +1 -1
  3. package/dist/agent/extract.js +86 -110
  4. package/dist/agent/extract.js.map +1 -1
  5. package/dist/agent/types.d.ts.map +1 -1
  6. package/dist/agent/types.js +21 -30
  7. package/dist/agent/types.js.map +1 -1
  8. package/dist/bot.js +17 -19
  9. package/dist/bot.js.map +1 -1
  10. package/dist/gif-state.js +1 -1
  11. package/dist/gif-state.js.map +1 -1
  12. package/dist/init.js +1 -1
  13. package/dist/init.js.map +1 -1
  14. package/package.json +5 -9
  15. package/dist/agent/auth.d.ts +0 -11
  16. package/dist/agent/auth.d.ts.map +0 -1
  17. package/dist/agent/auth.js +0 -54
  18. package/dist/agent/auth.js.map +0 -1
  19. package/dist/agent/clarify.d.ts +0 -44
  20. package/dist/agent/clarify.d.ts.map +0 -1
  21. package/dist/agent/clarify.js +0 -284
  22. package/dist/agent/clarify.js.map +0 -1
  23. package/dist/agent/dry-run.d.ts +0 -12
  24. package/dist/agent/dry-run.d.ts.map +0 -1
  25. package/dist/agent/dry-run.js +0 -236
  26. package/dist/agent/dry-run.js.map +0 -1
  27. package/dist/agent/filters.d.ts +0 -48
  28. package/dist/agent/filters.d.ts.map +0 -1
  29. package/dist/agent/filters.js +0 -124
  30. package/dist/agent/filters.js.map +0 -1
  31. package/dist/agent/gramjs-monitor.d.ts +0 -26
  32. package/dist/agent/gramjs-monitor.d.ts.map +0 -1
  33. package/dist/agent/gramjs-monitor.js +0 -324
  34. package/dist/agent/gramjs-monitor.js.map +0 -1
  35. package/dist/agent/graph.d.ts +0 -30
  36. package/dist/agent/graph.d.ts.map +0 -1
  37. package/dist/agent/graph.js +0 -240
  38. package/dist/agent/graph.js.map +0 -1
  39. package/dist/agent/helpers.d.ts +0 -6
  40. package/dist/agent/helpers.d.ts.map +0 -1
  41. package/dist/agent/helpers.js +0 -15
  42. package/dist/agent/helpers.js.map +0 -1
  43. package/dist/agent/message.d.ts +0 -69
  44. package/dist/agent/message.d.ts.map +0 -1
  45. package/dist/agent/message.js +0 -464
  46. package/dist/agent/message.js.map +0 -1
  47. package/dist/agent/queue.d.ts +0 -15
  48. package/dist/agent/queue.d.ts.map +0 -1
  49. package/dist/agent/queue.js +0 -41
  50. package/dist/agent/queue.js.map +0 -1
  51. package/dist/agent/redis.d.ts +0 -8
  52. package/dist/agent/redis.d.ts.map +0 -1
  53. package/dist/agent/redis.js +0 -33
  54. package/dist/agent/redis.js.map +0 -1
  55. package/dist/agent/store.d.ts +0 -93
  56. package/dist/agent/store.d.ts.map +0 -1
  57. package/dist/agent/store.js +0 -145
  58. package/dist/agent/store.js.map +0 -1
  59. package/dist/agent/tools.d.ts +0 -159
  60. package/dist/agent/tools.d.ts.map +0 -1
  61. package/dist/agent/tools.js +0 -439
  62. package/dist/agent/tools.js.map +0 -1
  63. package/dist/agent/types.d.ts +0 -213
  64. package/dist/agent/vote.d.ts +0 -13
  65. package/dist/agent/vote.d.ts.map +0 -1
  66. package/dist/agent/vote.js +0 -226
  67. package/dist/agent/vote.js.map +0 -1
  68. package/dist/agent/worker.d.ts +0 -14
  69. package/dist/agent/worker.d.ts.map +0 -1
  70. package/dist/agent/worker.js +0 -137
  71. package/dist/agent/worker.js.map +0 -1
  72. package/dist/bin.d.ts +0 -17
  73. package/dist/bot.d.ts +0 -16
  74. package/dist/config.d.ts +0 -129
  75. package/dist/config.d.ts.map +0 -1
  76. package/dist/config.js +0 -157
  77. package/dist/config.js.map +0 -1
  78. package/dist/gif-state.d.ts +0 -17
  79. package/dist/i18n.d.ts +0 -49
  80. package/dist/i18n.d.ts.map +0 -1
  81. package/dist/i18n.js +0 -229
  82. package/dist/i18n.js.map +0 -1
  83. package/dist/init.d.ts +0 -7
  84. package/dist/logger.d.ts +0 -14
  85. package/dist/logger.d.ts.map +0 -1
  86. package/dist/logger.js +0 -45
  87. package/dist/logger.js.map +0 -1
  88. package/dist/service.d.ts +0 -19
  89. package/dist/service.d.ts.map +0 -1
  90. package/dist/service.js +0 -165
  91. package/dist/service.js.map +0 -1
@@ -1,13 +0,0 @@
1
- /**
2
- * Consensus voting — deterministic, 0 tokens.
3
- *
4
- * Aggregates extraction results from multiple sources into a single
5
- * voted consensus using median, majority, and weighted confidence.
6
- */
7
- import type { ValidatedExtraction, VotedResult } from "./types.js";
8
- /**
9
- * Aggregate valid extractions into a single consensus result.
10
- * Returns null if no valid extractions.
11
- */
12
- export declare function vote(extractions: ValidatedExtraction[], alertId: string): VotedResult | null;
13
- //# sourceMappingURL=vote.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vote.d.ts","sourceRoot":"","sources":["../../src/agent/vote.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAGV,mBAAmB,EACnB,WAAW,EACZ,MAAM,YAAY,CAAC;AA0CpB;;;GAGG;AACH,wBAAgB,IAAI,CAClB,WAAW,EAAE,mBAAmB,EAAE,EAClC,OAAO,EAAE,MAAM,GACd,WAAW,GAAG,IAAI,CA4OpB"}
@@ -1,226 +0,0 @@
1
- /**
2
- * Consensus voting — deterministic, 0 tokens.
3
- *
4
- * Aggregates extraction results from multiple sources into a single
5
- * voted consensus using median, majority, and weighted confidence.
6
- */
7
- import * as logger from "../logger.js";
8
- // ── Helpers ────────────────────────────────────────────
9
- /** Average weighted confidence across sources */
10
- function fieldConf(srcs) {
11
- if (srcs.length === 0)
12
- return 0;
13
- return (srcs.reduce((s, e) => s + e.source_trust * e.confidence, 0) / srcs.length);
14
- }
15
- /** Mode (most frequent value) for QualCount fields */
16
- function modeQual(srcs, key) {
17
- const vals = srcs
18
- .map((e) => e[key])
19
- .filter((v) => v !== null);
20
- if (vals.length === 0)
21
- return null;
22
- const freq = new Map();
23
- for (const v of vals)
24
- freq.set(v, (freq.get(v) ?? 0) + 1);
25
- return [...freq.entries()].sort((a, b) => b[1] - a[1])[0][0];
26
- }
27
- /** Median reference number for qual fields */
28
- function medianQualNum(srcs, key) {
29
- const vals = srcs
30
- .map((e) => e[key])
31
- .filter((v) => v !== null)
32
- .sort((a, b) => a - b);
33
- return vals.length > 0 ? vals[Math.floor(vals.length / 2)] : null;
34
- }
35
- // ── Vote ───────────────────────────────────────────────
36
- /**
37
- * Aggregate valid extractions into a single consensus result.
38
- * Returns null if no valid extractions.
39
- */
40
- export function vote(extractions, alertId) {
41
- const valid = extractions.filter((e) => e.valid);
42
- if (valid.length === 0)
43
- return null;
44
- // Assign 1-based citation indices
45
- const indexed = valid.map((e, i) => ({ ...e, idx: i + 1 }));
46
- const citedSources = indexed.map((e) => ({
47
- index: e.idx,
48
- channel: e.channel,
49
- messageUrl: e.messageUrl ?? null,
50
- }));
51
- // ETA: highest confidence source
52
- const withEta = indexed
53
- .filter((e) => e.eta_refined_minutes !== null)
54
- .sort((a, b) => b.confidence - a.confidence);
55
- const bestEta = withEta[0] ?? null;
56
- // Country: group unique values
57
- const countryMap = new Map();
58
- for (const e of indexed) {
59
- if (e.country_origin) {
60
- const list = countryMap.get(e.country_origin) ?? [];
61
- list.push(e.idx);
62
- countryMap.set(e.country_origin, list);
63
- }
64
- }
65
- const country_origins = countryMap.size > 0
66
- ? Array.from(countryMap.entries()).map(([name, citations]) => ({
67
- name,
68
- citations,
69
- }))
70
- : null;
71
- // Rocket count: range
72
- const rocketSrcs = indexed.filter((e) => e.rocket_count !== null);
73
- const rocketVals = rocketSrcs.map((e) => e.rocket_count);
74
- const rocket_count_min = rocketVals.length > 0 ? Math.min(...rocketVals) : null;
75
- const rocket_count_max = rocketVals.length > 0 ? Math.max(...rocketVals) : null;
76
- const rocket_citations = rocketSrcs.map((e) => e.idx);
77
- const rocket_confidence = fieldConf(rocketSrcs);
78
- // Rocket detail: pick from highest-confidence source with a detail string
79
- const detailSrcs = indexed
80
- .filter((e) => e.rocket_detail)
81
- .sort((a, b) => b.confidence - a.confidence);
82
- const rocket_detail = detailSrcs[0]?.rocket_detail ?? null;
83
- // Cassette: majority
84
- const cassSrcs = indexed.filter((e) => e.is_cassette !== null);
85
- const cassVals = cassSrcs.map((e) => e.is_cassette);
86
- const is_cassette = cassVals.length > 0
87
- ? cassVals.filter(Boolean).length > cassVals.length / 2
88
- : null;
89
- const is_cassette_confidence = fieldConf(cassSrcs);
90
- // Intercepted: median / qual
91
- const interceptedSrcs = indexed.filter((e) => e.intercepted !== null);
92
- const interceptedQualSrcs = indexed.filter((e) => e.intercepted_qual !== null);
93
- const interceptedVals = interceptedSrcs
94
- .map((e) => e.intercepted)
95
- .sort((a, b) => a - b);
96
- const intercepted = interceptedVals.length > 0
97
- ? interceptedVals[Math.floor(interceptedVals.length / 2)]
98
- : null;
99
- const intercepted_qual = intercepted === null
100
- ? modeQual(interceptedQualSrcs, "intercepted_qual")
101
- : null;
102
- const intercepted_qual_num = intercepted_qual !== null
103
- ? medianQualNum(interceptedQualSrcs, "intercepted_qual_num")
104
- : null;
105
- const intercepted_confidence = fieldConf(interceptedSrcs.length > 0 ? interceptedSrcs : interceptedQualSrcs);
106
- // Sea impact
107
- const seaSrcs = indexed.filter((e) => e.sea_impact !== null);
108
- const seaQualSrcs = indexed.filter((e) => e.sea_impact_qual !== null);
109
- const seaVals = seaSrcs
110
- .map((e) => e.sea_impact)
111
- .sort((a, b) => a - b);
112
- const sea_impact = seaVals.length > 0 ? seaVals[Math.floor(seaVals.length / 2)] : null;
113
- const sea_impact_qual = sea_impact === null ? modeQual(seaQualSrcs, "sea_impact_qual") : null;
114
- const sea_impact_qual_num = sea_impact_qual !== null
115
- ? medianQualNum(seaQualSrcs, "sea_impact_qual_num")
116
- : null;
117
- const sea_confidence = fieldConf(seaSrcs.length > 0 ? seaSrcs : seaQualSrcs);
118
- // Open area impact
119
- const openSrcs = indexed.filter((e) => e.open_area_impact !== null);
120
- const openQualSrcs = indexed.filter((e) => e.open_area_impact_qual !== null);
121
- const openVals = openSrcs
122
- .map((e) => e.open_area_impact)
123
- .sort((a, b) => a - b);
124
- const open_area_impact = openVals.length > 0 ? openVals[Math.floor(openVals.length / 2)] : null;
125
- const open_area_impact_qual = open_area_impact === null
126
- ? modeQual(openQualSrcs, "open_area_impact_qual")
127
- : null;
128
- const open_area_impact_qual_num = open_area_impact_qual !== null
129
- ? medianQualNum(openQualSrcs, "open_area_impact_qual_num")
130
- : null;
131
- const open_area_confidence = fieldConf(openSrcs.length > 0 ? openSrcs : openQualSrcs);
132
- // Hits
133
- const allHitsSrcs = indexed.filter((e) => e.hits_confirmed !== null);
134
- const hitsVals = allHitsSrcs
135
- .map((e) => e.hits_confirmed)
136
- .sort((a, b) => a - b);
137
- const hits_confirmed = hitsVals.length > 0 ? hitsVals[Math.floor(hitsVals.length / 2)] : null;
138
- const hitsSrcs = allHitsSrcs.filter((e) => e.hits_confirmed > 0);
139
- const hits_citations = hitsSrcs.length > 0
140
- ? hitsSrcs.map((e) => e.idx)
141
- : allHitsSrcs.map((e) => e.idx);
142
- const hits_confidence = fieldConf(allHitsSrcs);
143
- // Hit location & type & detail: highest-confidence source with hits > 0
144
- const hitsWithLoc = hitsSrcs
145
- .filter((e) => e.hit_location)
146
- .sort((a, b) => b.confidence - a.confidence);
147
- const hit_location = hitsWithLoc[0]?.hit_location ?? null;
148
- const hit_type = hitsWithLoc[0]?.hit_type ?? null;
149
- // hit_detail: from highest-confidence source that has one
150
- const hitsWithDetail = hitsSrcs
151
- .filter((e) => e.hit_detail)
152
- .sort((a, b) => b.confidence - a.confidence);
153
- const hit_detail = hitsWithDetail[0]?.hit_detail ?? null;
154
- // No impacts: explicit confirmation from sources
155
- const noImpactSrcs = allHitsSrcs.filter((e) => e.hits_confirmed === 0);
156
- const no_impacts = noImpactSrcs.length > 0 && hits_confirmed === 0;
157
- const no_impacts_citations = noImpactSrcs.map((e) => e.idx);
158
- // Casualties
159
- const casualtySrcs = indexed.filter((e) => e.casualties !== null && e.casualties > 0);
160
- const casualtyVals = casualtySrcs
161
- .map((e) => e.casualties)
162
- .sort((a, b) => a - b);
163
- const casualties = casualtyVals.length > 0
164
- ? casualtyVals[Math.floor(casualtyVals.length / 2)]
165
- : null;
166
- const casualties_citations = casualtySrcs.map((e) => e.idx);
167
- const casualties_confidence = fieldConf(casualtySrcs);
168
- // Injuries
169
- const injurySrcs = indexed.filter((e) => e.injuries !== null && e.injuries > 0);
170
- const injuryVals = injurySrcs
171
- .map((e) => e.injuries)
172
- .sort((a, b) => a - b);
173
- const injuries = injuryVals.length > 0
174
- ? injuryVals[Math.floor(injuryVals.length / 2)]
175
- : null;
176
- const injuries_citations = injurySrcs.map((e) => e.idx);
177
- const injuries_confidence = fieldConf(injurySrcs);
178
- // Overall weighted confidence
179
- const totalWeight = indexed.reduce((s, e) => s + e.source_trust * e.confidence, 0);
180
- const weightedConf = totalWeight / indexed.length;
181
- const voted = {
182
- eta_refined_minutes: bestEta?.eta_refined_minutes ?? null,
183
- eta_citations: bestEta ? [bestEta.idx] : [],
184
- country_origins,
185
- rocket_count_min,
186
- rocket_count_max,
187
- rocket_citations,
188
- rocket_confidence,
189
- rocket_detail,
190
- is_cassette,
191
- is_cassette_confidence,
192
- intercepted,
193
- intercepted_qual,
194
- intercepted_qual_num,
195
- intercepted_confidence,
196
- sea_impact,
197
- sea_impact_qual,
198
- sea_impact_qual_num,
199
- sea_confidence,
200
- open_area_impact,
201
- open_area_impact_qual,
202
- open_area_impact_qual_num,
203
- open_area_confidence,
204
- hits_confirmed,
205
- hits_citations,
206
- hits_confidence,
207
- hit_location,
208
- hit_type,
209
- hit_detail,
210
- no_impacts,
211
- no_impacts_citations,
212
- intercepted_citations: interceptedSrcs.map((e) => e.idx),
213
- casualties,
214
- casualties_citations,
215
- casualties_confidence,
216
- injuries,
217
- injuries_citations,
218
- injuries_confidence,
219
- confidence: Math.round(weightedConf * 100) / 100,
220
- sources_count: indexed.length,
221
- citedSources,
222
- };
223
- logger.info("Agent: voted", { alertId, voted });
224
- return voted;
225
- }
226
- //# sourceMappingURL=vote.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vote.js","sourceRoot":"","sources":["../../src/agent/vote.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * BullMQ worker — processes "enrich-alert" jobs.
3
- *
4
- * Session-aware scheduling:
5
- * early_warning → every 20s, up to 30 min
6
- * siren → every 20s, up to 15 min
7
- * resolved → every 60s, up to 10 min (tail — detailed intel)
8
- *
9
- * After each job, checks the session phase and re-enqueues
10
- * with the appropriate delay. Stops when phase expires.
11
- */
12
- export declare function startEnrichWorker(): void;
13
- export declare function stopEnrichWorker(): Promise<void>;
14
- //# sourceMappingURL=worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgEH,wBAAgB,iBAAiB,IAAI,IAAI,CAsFxC;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD"}
@@ -1,137 +0,0 @@
1
- /**
2
- * BullMQ worker — processes "enrich-alert" jobs.
3
- *
4
- * Session-aware scheduling:
5
- * early_warning → every 20s, up to 30 min
6
- * siren → every 20s, up to 15 min
7
- * resolved → every 60s, up to 10 min (tail — detailed intel)
8
- *
9
- * After each job, checks the session phase and re-enqueues
10
- * with the appropriate delay. Stops when phase expires.
11
- */
12
- import { Bot } from "grammy";
13
- import { Worker } from "bullmq";
14
- import { config } from "../config.js";
15
- import { getLanguagePack } from "../i18n.js";
16
- import * as logger from "../logger.js";
17
- import { runEnrichment } from "./graph.js";
18
- import { MONITORING_RE, stripMonitoring } from "./message.js";
19
- import { enqueueEnrich } from "./queue.js";
20
- import { clearSession, getActiveSession, isPhaseExpired, PHASE_ENRICH_DELAY_MS, } from "./store.js";
21
- let _worker = null;
22
- /** Remove ⏳ monitoring indicator from all chat messages (best-effort) */
23
- async function removeMonitoringIndicator(session) {
24
- if (!config.botToken || !MONITORING_RE.test(session.currentText))
25
- return;
26
- const cleaned = stripMonitoring(session.currentText);
27
- const tgBot = new Bot(config.botToken);
28
- const targets = session.chatMessages ?? [
29
- {
30
- chatId: session.chatId,
31
- messageId: session.latestMessageId,
32
- isCaption: session.isCaption,
33
- },
34
- ];
35
- for (const cm of targets) {
36
- try {
37
- if (cm.isCaption) {
38
- await tgBot.api.editMessageCaption(cm.chatId, cm.messageId, {
39
- caption: cleaned,
40
- parse_mode: "HTML",
41
- });
42
- }
43
- else {
44
- await tgBot.api.editMessageText(cm.chatId, cm.messageId, cleaned, {
45
- parse_mode: "HTML",
46
- });
47
- }
48
- }
49
- catch (err) {
50
- const errStr = String(err);
51
- if (!errStr.includes("message is not modified")) {
52
- logger.error("Failed to remove monitoring indicator", {
53
- error: errStr,
54
- chatId: cm.chatId,
55
- });
56
- }
57
- }
58
- }
59
- logger.info("Removed monitoring indicator", { targets: targets.length });
60
- }
61
- export function startEnrichWorker() {
62
- if (!config.agent.enabled)
63
- return;
64
- const connection = {
65
- host: new URL(config.agent.redisUrl).hostname,
66
- port: Number(new URL(config.agent.redisUrl).port || 6379),
67
- password: new URL(config.agent.redisUrl).password || undefined,
68
- };
69
- _worker = new Worker("enrich-alert", async (job) => {
70
- const { alertId } = job.data;
71
- logger.info("Enrich worker: processing job", { alertId, jobId: job.id });
72
- const session = await getActiveSession();
73
- if (!session) {
74
- logger.info("Enrich worker: no active session — skipping", { alertId });
75
- return;
76
- }
77
- // Phase expired → end session
78
- if (isPhaseExpired(session)) {
79
- logger.info("Enrich worker: phase expired — ending session", {
80
- alertId: session.latestAlertId,
81
- phase: session.phase,
82
- });
83
- await removeMonitoringIndicator(session);
84
- await clearSession();
85
- return;
86
- }
87
- const langPack = getLanguagePack(config.language);
88
- // Run enrichment using latest alert's message as edit target
89
- await runEnrichment({
90
- alertId: session.latestAlertId,
91
- alertTs: session.latestAlertTs,
92
- alertType: session.phase,
93
- alertAreas: session.alertAreas,
94
- chatId: session.chatId,
95
- messageId: session.latestMessageId,
96
- isCaption: session.isCaption,
97
- chatMessages: session.chatMessages,
98
- currentText: session.baseText ?? session.currentText,
99
- monitoringLabel: langPack.labels.monitoring,
100
- });
101
- // Re-check session after enrichment (may have changed phase)
102
- const after = await getActiveSession();
103
- if (!after)
104
- return;
105
- if (isPhaseExpired(after)) {
106
- logger.info("Enrich worker: phase expired post-enrich — ending session", {
107
- phase: after.phase,
108
- });
109
- await removeMonitoringIndicator(after);
110
- await clearSession();
111
- return;
112
- }
113
- // Re-enqueue with phase-appropriate delay
114
- const delay = PHASE_ENRICH_DELAY_MS[after.phase];
115
- await enqueueEnrich(after.latestAlertId, after.latestAlertTs, delay);
116
- }, {
117
- connection,
118
- concurrency: 1,
119
- });
120
- _worker.on("completed", (job) => {
121
- logger.info("Enrich worker: job completed", { jobId: job.id });
122
- });
123
- _worker.on("failed", (job, err) => {
124
- logger.error("Enrich worker: job failed", {
125
- jobId: job?.id,
126
- error: String(err),
127
- });
128
- });
129
- logger.info("Enrich worker started");
130
- }
131
- export async function stopEnrichWorker() {
132
- if (_worker) {
133
- await _worker.close();
134
- _worker = null;
135
- }
136
- }
137
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/agent/worker.ts"],"names":[],"mappings":"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"}
package/dist/bin.d.ts DELETED
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * EasyOref CLI entrypoint.
4
- *
5
- * easyoref — run the bot (foreground)
6
- * easyoref run — same as above
7
- * easyoref init — interactive setup wizard
8
- * easyoref install — create systemd service + start
9
- * easyoref uninstall — remove systemd service
10
- * easyoref start — start service (install if needed)
11
- * easyoref stop — stop service
12
- * easyoref restart — restart service
13
- * easyoref status — show service status
14
- * easyoref logs — follow service logs
15
- */
16
- export {};
17
- //# sourceMappingURL=bin.d.ts.map
package/dist/bot.d.ts DELETED
@@ -1,16 +0,0 @@
1
- /**
2
- * EasyOref — Real-time Israeli Red Alert Filter Bot
3
- *
4
- * Architecture:
5
- * oref.org.il API → local filter (area map) → Telegram (grammY)
6
- *
7
- * Flow:
8
- * 1. Poll oref.org.il every 2 seconds for active alerts
9
- * 2. Match areas against configured regions (Hebrew names)
10
- * 3. Classify alert type: early warning / siren / incident over
11
- * 4. If relevant → send calm message to configured Telegram chat
12
- *
13
- * No LLM needed — purely deterministic matching for <1s latency.
14
- */
15
- export {};
16
- //# sourceMappingURL=bot.d.ts.map
package/dist/config.d.ts DELETED
@@ -1,129 +0,0 @@
1
- /**
2
- * EasyOref — Centralized Configuration
3
- *
4
- * Primary: config.yaml (searched in cwd, /app, /etc/easyoref)
5
- * Fallback: environment variables + Docker secrets (for backward compat)
6
- *
7
- * See config.yaml.example for all available options.
8
- */
9
- import { type Language } from "./i18n.js";
10
- export type AlertTypeConfig = "early" | "siren" | "resolved";
11
- export type GifMode = "funny_cats" | "none";
12
- /** Raw YAML schema */
13
- interface ConfigYaml {
14
- alert_types?: AlertTypeConfig[];
15
- city_ids?: number[];
16
- language?: string;
17
- gif_mode?: string;
18
- emoji_override?: Partial<Record<AlertTypeConfig, string>>;
19
- title_override?: Partial<Record<AlertTypeConfig, string>>;
20
- description_override?: Partial<Record<AlertTypeConfig, string>>;
21
- observability?: {
22
- betterstack_token?: string;
23
- };
24
- telegram?: {
25
- bot_token?: string;
26
- chat_id?: string | string[];
27
- };
28
- health_port?: number;
29
- poll_interval_ms?: number;
30
- data_dir?: string;
31
- oref_api_url?: string;
32
- oref_history_url?: string;
33
- ai?: ConfigYamlAi;
34
- }
35
- interface ConfigYamlAi {
36
- enabled?: boolean;
37
- openrouter_api_key?: string;
38
- openrouter_filter_model?: string;
39
- openrouter_extract_model?: string;
40
- redis_url?: string;
41
- socks5_proxy?: string;
42
- enrich_delay_ms?: number;
43
- confidence_threshold?: number;
44
- window_minutes?: number;
45
- timeout_minutes?: number;
46
- /** Enable MCP tool calling for low-confidence clarification */
47
- mcp_tools?: boolean;
48
- /** Number of recent posts to fetch per channel during clarify (1-4) */
49
- clarify_fetch_count?: number;
50
- mtproto?: {
51
- api_id?: number;
52
- api_hash?: string;
53
- session_string?: string;
54
- };
55
- channels?: string[];
56
- /** Map monitored area prefix → human-readable region label */
57
- area_labels?: Record<string, string>;
58
- }
59
- /** Config dir in user home — ~/.easyoref/ */
60
- export declare const CONFIG_DIR: string;
61
- export declare const HOME_CONFIG_PATH: string;
62
- declare function loadYaml(): ConfigYaml;
63
- declare function parseAlertTypes(raw?: AlertTypeConfig[]): AlertTypeConfig[];
64
- export declare const config: {
65
- /** Telegram bot token */
66
- botToken: string;
67
- /** All Telegram chat IDs to broadcast to */
68
- chatIds: string[];
69
- /** Primary Telegram chat ID (first in the list) */
70
- chatId: string;
71
- /** City IDs to monitor (resolved to Hebrew names at startup via cities.json) */
72
- cityIds: number[];
73
- /**
74
- * Hebrew area names — legacy fallback for AREAS env var.
75
- * Populated at startup from cityIds OR from AREAS env if no cityIds.
76
- */
77
- areas: string[];
78
- /** Which alert types to send */
79
- alertTypes: AlertTypeConfig[];
80
- /** Message language */
81
- language: Language;
82
- /** Emoji overrides per alert type */
83
- emojiOverride: Partial<Record<AlertTypeConfig, string>>;
84
- /** Title overrides per alert type */
85
- titleOverride: Partial<Record<AlertTypeConfig, string>>;
86
- /** Description overrides per alert type */
87
- descriptionOverride: Partial<Record<AlertTypeConfig, string>>;
88
- /** Oref API polling interval (ms) */
89
- pollIntervalMs: number;
90
- /** Health endpoint port */
91
- healthPort: number;
92
- /** Oref API URL */
93
- orefApiUrl: string;
94
- /** Oref alert history URL (base, without date params) */
95
- orefHistoryUrl: string;
96
- /** Better Stack Logtail token */
97
- logtailToken: string;
98
- /** GIF mode */
99
- gifMode: GifMode;
100
- /** Path for persistent data */
101
- dataDir: string;
102
- /** AI enrichment config (YAML key: `ai`) */
103
- agent: {
104
- enabled: boolean;
105
- apiKey: string;
106
- filterModel: string;
107
- extractModel: string;
108
- redisUrl: string;
109
- socks5Proxy: string;
110
- enrichDelayMs: number;
111
- confidenceThreshold: number;
112
- windowMinutes: number;
113
- timeoutMinutes: number;
114
- mtproto: {
115
- apiId: number;
116
- apiHash: string;
117
- sessionString: string;
118
- };
119
- channels: string[];
120
- areaLabels: Record<string, string>;
121
- /** Enable MCP tool calling — deterministic fan-out on low confidence */
122
- mcpTools: boolean;
123
- /** Posts per channel to fetch during clarify (1-4, default 3) */
124
- clarifyFetchCount: number;
125
- };
126
- };
127
- /** Exported for testing */
128
- export { loadYaml as _loadYaml, parseAlertTypes as _parseAlertTypes, type ConfigYaml, };
129
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}