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,93 +0,0 @@
1
- /**
2
- * Session-based alert state store — Redis operations.
3
- *
4
- * A "session" spans the lifecycle of one attack event:
5
- * early_warning → (optional siren) → resolved → +10 min tail
6
- *
7
- * Keys:
8
- * session:active — ActiveSession JSON TTL 45min
9
- * session:posts — LPUSH list of ChannelPost TTL 45min
10
- * session:ext_cache — HASH {post_hash → extraction JSON} TTL 45min
11
- * alert:{alertId}:meta — AlertMeta JSON TTL 20min
12
- *
13
- * Only the LATEST alert's Telegram message gets enrichment edits.
14
- * Posts accumulate across the entire session (shared context).
15
- */
16
- import type { AlertType, EnrichmentData } from "./types.js";
17
- /** Max duration (ms) for each phase before auto-expire */
18
- export declare const PHASE_TIMEOUT_MS: Record<AlertType, number>;
19
- /** Enrichment interval (ms) per phase */
20
- export declare const PHASE_ENRICH_DELAY_MS: Record<AlertType, number>;
21
- /** Initial enrichment delay — first job after alert (channels need time to post) */
22
- export declare const PHASE_INITIAL_DELAY_MS: Record<AlertType, number>;
23
- export interface ChatMessage {
24
- chatId: string;
25
- messageId: number;
26
- isCaption: boolean;
27
- }
28
- export interface AlertMeta {
29
- alertId: string;
30
- messageId: number;
31
- chatId: string;
32
- isCaption: boolean;
33
- alertTs: number;
34
- alertType: AlertType;
35
- alertAreas: string[];
36
- currentText: string;
37
- }
38
- export interface ChannelPost {
39
- channel: string;
40
- text: string;
41
- ts: number;
42
- messageUrl?: string;
43
- }
44
- export interface ActiveSession {
45
- /** First alertId that started this session */
46
- sessionId: string;
47
- sessionStartTs: number;
48
- /** Current phase */
49
- phase: AlertType;
50
- phaseStartTs: number;
51
- /** Latest alert being enriched */
52
- latestAlertId: string;
53
- latestMessageId: number;
54
- latestAlertTs: number;
55
- chatId: string;
56
- isCaption: boolean;
57
- currentText: string;
58
- /** Original formatMessage output without enrichment — used for rebuild */
59
- baseText: string;
60
- alertAreas: string[];
61
- /** Per-chat message tracking for multi-chat broadcasting */
62
- chatMessages?: ChatMessage[];
63
- }
64
- export declare function saveAlertMeta(meta: AlertMeta): Promise<void>;
65
- export declare function getAlertMeta(alertId: string): Promise<AlertMeta | null>;
66
- export declare function pushSessionPost(post: ChannelPost): Promise<void>;
67
- export declare function getSessionPosts(): Promise<ChannelPost[]>;
68
- export declare function setActiveSession(session: ActiveSession): Promise<void>;
69
- export declare function getActiveSession(): Promise<ActiveSession | null>;
70
- export declare function clearSession(): Promise<void>;
71
- export declare function isPhaseExpired(session: ActiveSession): boolean;
72
- export declare function getActiveAlert(): Promise<{
73
- alertId: string;
74
- alertTs: number;
75
- alertType: AlertType;
76
- } | null>;
77
- export declare function pushChannelPost(_alertId: string, post: ChannelPost): Promise<void>;
78
- export declare function getChannelPosts(_alertId: string): Promise<ChannelPost[]>;
79
- export declare function saveEnrichmentData(data: EnrichmentData): Promise<void>;
80
- export declare function getEnrichmentData(): Promise<EnrichmentData>;
81
- export declare function getLastUpdateTs(): Promise<number>;
82
- export declare function setLastUpdateTs(ts: number): Promise<void>;
83
- /**
84
- * Get cached extraction results for a batch of post hashes.
85
- * Returns a map: postHash → serialized ValidatedExtraction JSON.
86
- */
87
- export declare function getCachedExtractions(postHashes: string[]): Promise<Map<string, string>>;
88
- /**
89
- * Save new extraction results to cache.
90
- * @param entries - Record of postHash → serialized ValidatedExtraction JSON
91
- */
92
- export declare function saveCachedExtractions(entries: Record<string, string>): Promise<void>;
93
- //# sourceMappingURL=store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/agent/store.ts"],"names":[],"mappings":"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"}
@@ -1,145 +0,0 @@
1
- /**
2
- * Session-based alert state store — Redis operations.
3
- *
4
- * A "session" spans the lifecycle of one attack event:
5
- * early_warning → (optional siren) → resolved → +10 min tail
6
- *
7
- * Keys:
8
- * session:active — ActiveSession JSON TTL 45min
9
- * session:posts — LPUSH list of ChannelPost TTL 45min
10
- * session:ext_cache — HASH {post_hash → extraction JSON} TTL 45min
11
- * alert:{alertId}:meta — AlertMeta JSON TTL 20min
12
- *
13
- * Only the LATEST alert's Telegram message gets enrichment edits.
14
- * Posts accumulate across the entire session (shared context).
15
- */
16
- import { getRedis } from "./redis.js";
17
- import { emptyEnrichmentData } from "./types.js";
18
- const META_TTL_S = 20 * 60; // 20 minutes
19
- const SESSION_TTL_S = 45 * 60; // 45 min worst case
20
- // ── Session phase timeouts ─────────────────────────────
21
- /** Max duration (ms) for each phase before auto-expire */
22
- export const PHASE_TIMEOUT_MS = {
23
- early_warning: 30 * 60 * 1000, // 30 min
24
- siren: 15 * 60 * 1000, // 15 min
25
- resolved: 10 * 60 * 1000, // 10 min tail
26
- };
27
- /** Enrichment interval (ms) per phase */
28
- export const PHASE_ENRICH_DELAY_MS = {
29
- early_warning: 60_000, // 60s — channels need time to post; saves tokens
30
- siren: 45_000, // 45s
31
- resolved: 150_000, // 150s (2.5 min) — per user requirement: 10 min window, update every 2.5 min
32
- };
33
- /** Initial enrichment delay — first job after alert (channels need time to post) */
34
- export const PHASE_INITIAL_DELAY_MS = {
35
- early_warning: 120_000, // 2 min — wait for launch reports
36
- siren: 15_000, // 15s
37
- resolved: 90_000, // 90s — wait for first wave of post-incident reports
38
- };
39
- // ── Alert Meta (per-alert) ─────────────────────────────
40
- export async function saveAlertMeta(meta) {
41
- const redis = getRedis();
42
- await redis.setex(`alert:${meta.alertId}:meta`, META_TTL_S, JSON.stringify(meta));
43
- }
44
- export async function getAlertMeta(alertId) {
45
- const redis = getRedis();
46
- const raw = await redis.get(`alert:${alertId}:meta`);
47
- return raw ? JSON.parse(raw) : null;
48
- }
49
- // ── Session posts (shared across entire session) ───────
50
- export async function pushSessionPost(post) {
51
- const redis = getRedis();
52
- await redis.lpush("session:posts", JSON.stringify(post));
53
- await redis.expire("session:posts", SESSION_TTL_S);
54
- }
55
- export async function getSessionPosts() {
56
- const redis = getRedis();
57
- const items = await redis.lrange("session:posts", 0, -1);
58
- return items.map((i) => JSON.parse(i));
59
- }
60
- // ── Active session ─────────────────────────────────────
61
- export async function setActiveSession(session) {
62
- const redis = getRedis();
63
- await redis.setex("session:active", SESSION_TTL_S, JSON.stringify(session));
64
- }
65
- export async function getActiveSession() {
66
- const redis = getRedis();
67
- const raw = await redis.get("session:active");
68
- return raw ? JSON.parse(raw) : null;
69
- }
70
- export async function clearSession() {
71
- const redis = getRedis();
72
- await redis.del("session:active", "session:posts", "session:enrichment", EXT_CACHE_KEY, LAST_UPDATE_KEY);
73
- }
74
- export function isPhaseExpired(session) {
75
- const elapsed = Date.now() - session.phaseStartTs;
76
- return elapsed >= PHASE_TIMEOUT_MS[session.phase];
77
- }
78
- // ── Compat shims (used by gramjs-monitor, graph) ───────
79
- export async function getActiveAlert() {
80
- const s = await getActiveSession();
81
- if (!s)
82
- return null;
83
- return {
84
- alertId: s.latestAlertId,
85
- alertTs: s.latestAlertTs,
86
- alertType: s.phase,
87
- };
88
- }
89
- export async function pushChannelPost(_alertId, post) {
90
- await pushSessionPost(post);
91
- }
92
- export async function getChannelPosts(_alertId) {
93
- return getSessionPosts();
94
- }
95
- // ── Enrichment data (cross-phase persistence) ──────────
96
- export async function saveEnrichmentData(data) {
97
- const redis = getRedis();
98
- await redis.setex("session:enrichment", SESSION_TTL_S, JSON.stringify(data));
99
- }
100
- export async function getEnrichmentData() {
101
- const redis = getRedis();
102
- const raw = await redis.get("session:enrichment");
103
- return raw ? JSON.parse(raw) : emptyEnrichmentData();
104
- }
105
- // ── Last update timestamp (tracks when last enrichment job ran) ──
106
- const LAST_UPDATE_KEY = "session:last_update_ts";
107
- export async function getLastUpdateTs() {
108
- const redis = getRedis();
109
- const raw = await redis.get(LAST_UPDATE_KEY);
110
- return raw ? Number(raw) : 0;
111
- }
112
- export async function setLastUpdateTs(ts) {
113
- const redis = getRedis();
114
- await redis.setex(LAST_UPDATE_KEY, SESSION_TTL_S, String(ts));
115
- }
116
- // ── Extraction cache (post-level dedup between jobs) ───
117
- const EXT_CACHE_KEY = "session:ext_cache";
118
- /**
119
- * Get cached extraction results for a batch of post hashes.
120
- * Returns a map: postHash → serialized ValidatedExtraction JSON.
121
- */
122
- export async function getCachedExtractions(postHashes) {
123
- if (postHashes.length === 0)
124
- return new Map();
125
- const redis = getRedis();
126
- const results = await redis.hmget(EXT_CACHE_KEY, ...postHashes);
127
- const map = new Map();
128
- postHashes.forEach((hash, i) => {
129
- if (results[i])
130
- map.set(hash, results[i]);
131
- });
132
- return map;
133
- }
134
- /**
135
- * Save new extraction results to cache.
136
- * @param entries - Record of postHash → serialized ValidatedExtraction JSON
137
- */
138
- export async function saveCachedExtractions(entries) {
139
- if (Object.keys(entries).length === 0)
140
- return;
141
- const redis = getRedis();
142
- await redis.hset(EXT_CACHE_KEY, entries);
143
- await redis.expire(EXT_CACHE_KEY, SESSION_TTL_S);
144
- }
145
- //# sourceMappingURL=store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/agent/store.ts"],"names":[],"mappings":"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"}
@@ -1,159 +0,0 @@
1
- /**
2
- * LangChain tool definitions for agentic clarification.
3
- *
4
- * 4 tools the LLM can choose to call (or not):
5
- *
6
- * 1. read_telegram_sources
7
- * → Fetch last 1-4 posts from a Telegram news channel via MTProto.
8
- * Returns actual message texts — the LLM extracts data from them.
9
- * Rate-limited: max 4 posts/call, anti-flood jitter.
10
- *
11
- * 2. alert_history
12
- * → Get recent alert history from Pikud HaOref.
13
- * Answers: "was there really an alert in area X recently?"
14
- * More useful than active alerts (bot already has those).
15
- *
16
- * 3. resolve_area
17
- * → Determine if a mentioned location is relevant to user's
18
- * monitored areas. "попадание в Петах Тикве" → relevant for
19
- * Герцлия? (same defense zone / Gush Dan).
20
- *
21
- * 4. betterstack_log
22
- * → Query recent EasyOref logs from Better Stack.
23
- * Answers: "what happened in the enrichment pipeline recently?"
24
- * Uses existing Logtail token (observability.betterstack_token).
25
- *
26
- * Each tool returns a JSON string consumable by the LLM.
27
- * Error handling: tool failures return { error, retry } objects.
28
- */
29
- import { z } from "zod";
30
- /**
31
- * Resolve whether a mentioned location is in the same defense zone
32
- * as any of the user's monitored areas.
33
- */
34
- declare function resolveAreaProximity(mentioned: string, monitoredAreas: string[]): {
35
- relevant: boolean;
36
- sameZone: string | null;
37
- monitoredMatch: string[];
38
- reasoning: string;
39
- };
40
- export { resolveAreaProximity as _resolveAreaProximity };
41
- export declare const readSourcesTool: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
42
- channel: z.ZodString;
43
- limit: z.ZodDefault<z.ZodNumber>;
44
- }, "strip", z.ZodTypeAny, {
45
- limit: number;
46
- channel: string;
47
- }, {
48
- channel: string;
49
- limit?: number | undefined;
50
- }>, {
51
- channel: string;
52
- limit: number;
53
- }, {
54
- channel: string;
55
- limit?: number | undefined;
56
- }, string, "read_telegram_sources">;
57
- export declare const alertHistoryTool: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
58
- area: z.ZodString;
59
- last_minutes: z.ZodDefault<z.ZodNumber>;
60
- }, "strip", z.ZodTypeAny, {
61
- area: string;
62
- last_minutes: number;
63
- }, {
64
- area: string;
65
- last_minutes?: number | undefined;
66
- }>, {
67
- area: string;
68
- last_minutes: number;
69
- }, {
70
- area: string;
71
- last_minutes?: number | undefined;
72
- }, string, "alert_history">;
73
- export declare const resolveAreaTool: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
74
- location: z.ZodString;
75
- }, "strip", z.ZodTypeAny, {
76
- location: string;
77
- }, {
78
- location: string;
79
- }>, {
80
- location: string;
81
- }, {
82
- location: string;
83
- }, string, "resolve_area">;
84
- /** Format date as DD.MM.YYYY for Oref history API */
85
- declare function formatOrefDate(d: Date): string;
86
- export { formatOrefDate as _formatOrefDate };
87
- export declare const betterstackLogTool: import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
88
- query: z.ZodString;
89
- last_minutes: z.ZodDefault<z.ZodNumber>;
90
- }, "strip", z.ZodTypeAny, {
91
- last_minutes: number;
92
- query: string;
93
- }, {
94
- query: string;
95
- last_minutes?: number | undefined;
96
- }>, {
97
- query: string;
98
- last_minutes: number;
99
- }, {
100
- query: string;
101
- last_minutes?: number | undefined;
102
- }, string, "betterstack_log">;
103
- export declare const clarifyTools: (import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
104
- channel: z.ZodString;
105
- limit: z.ZodDefault<z.ZodNumber>;
106
- }, "strip", z.ZodTypeAny, {
107
- limit: number;
108
- channel: string;
109
- }, {
110
- channel: string;
111
- limit?: number | undefined;
112
- }>, {
113
- channel: string;
114
- limit: number;
115
- }, {
116
- channel: string;
117
- limit?: number | undefined;
118
- }, string, "read_telegram_sources"> | import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
119
- area: z.ZodString;
120
- last_minutes: z.ZodDefault<z.ZodNumber>;
121
- }, "strip", z.ZodTypeAny, {
122
- area: string;
123
- last_minutes: number;
124
- }, {
125
- area: string;
126
- last_minutes?: number | undefined;
127
- }>, {
128
- area: string;
129
- last_minutes: number;
130
- }, {
131
- area: string;
132
- last_minutes?: number | undefined;
133
- }, string, "alert_history"> | import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
134
- location: z.ZodString;
135
- }, "strip", z.ZodTypeAny, {
136
- location: string;
137
- }, {
138
- location: string;
139
- }>, {
140
- location: string;
141
- }, {
142
- location: string;
143
- }, string, "resolve_area"> | import("@langchain/core/tools").DynamicStructuredTool<z.ZodObject<{
144
- query: z.ZodString;
145
- last_minutes: z.ZodDefault<z.ZodNumber>;
146
- }, "strip", z.ZodTypeAny, {
147
- last_minutes: number;
148
- query: string;
149
- }, {
150
- query: string;
151
- last_minutes?: number | undefined;
152
- }>, {
153
- query: string;
154
- last_minutes: number;
155
- }, {
156
- query: string;
157
- last_minutes?: number | undefined;
158
- }, string, "betterstack_log">)[];
159
- //# sourceMappingURL=tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/agent/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8DxB;;;GAGG;AACH,iBAAS,oBAAoB,CAC3B,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EAAE,GACvB;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAmFA;AAID,OAAO,EAAE,oBAAoB,IAAI,qBAAqB,EAAE,CAAC;AAIzD,eAAO,MAAM,eAAe;;;;;;;;;;aAKf,MAAM;WACR,MAAM;;;;mCAmEhB,CAAC;AAIF,eAAO,MAAM,gBAAgB;;;;;;;;;;UAKnB,MAAM;kBACE,MAAM;;;;2BA+FvB,CAAC;AAIF,eAAO,MAAM,eAAe;;;;;;;cACO,MAAM;;;0BA0CxC,CAAC;AAIF,qDAAqD;AACrD,iBAAS,cAAc,CAAC,CAAC,EAAE,IAAI,GAAG,MAAM,CAKvC;AAED,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,CAAC;AAI7C,eAAO,MAAM,kBAAkB;;;;;;;;;;WAKpB,MAAM;kBACC,MAAM;;;;6BAkGvB,CAAC;AAIF,eAAO,MAAM,YAAY;;;;;;;;;;aAxVZ,MAAM;WACR,MAAM;;;;;;;;;;;;;;UA4EP,MAAM;kBACE,MAAM;;;;;;;;;;;cAoGW,MAAM;;;;;;;;;;;;;WA+D9B,MAAM;kBACC,MAAM;;;;gCA2GvB,CAAC"}