@easyoref/agent 1.21.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/__tests__/clarify.test.ts +827 -0
- package/__tests__/config.test.ts +304 -0
- package/__tests__/enrichment.integration.test.ts +871 -0
- package/__tests__/graph.test.ts +661 -0
- package/dist/auth.d.ts +11 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +54 -0
- package/dist/auth.js.map +1 -0
- package/dist/dry-run.d.ts +12 -0
- package/dist/dry-run.d.ts.map +1 -0
- package/dist/dry-run.js +236 -0
- package/dist/dry-run.js.map +1 -0
- package/dist/extract.d.ts +180 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/extract.js +210 -0
- package/dist/extract.js.map +1 -0
- package/dist/graph.d.ts +4083 -0
- package/dist/graph.d.ts.map +1 -0
- package/dist/graph.js +162 -0
- package/dist/graph.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/models.d.ts +7 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/models.js +18 -0
- package/dist/models.js.map +1 -0
- package/dist/nodes/clarify-node.d.ts +132 -0
- package/dist/nodes/clarify-node.d.ts.map +1 -0
- package/dist/nodes/clarify-node.js +118 -0
- package/dist/nodes/clarify-node.js.map +1 -0
- package/dist/nodes/clarify.d.ts +6 -0
- package/dist/nodes/clarify.d.ts.map +1 -0
- package/dist/nodes/clarify.js +124 -0
- package/dist/nodes/clarify.js.map +1 -0
- package/dist/nodes/edit-node.d.ts +71 -0
- package/dist/nodes/edit-node.d.ts.map +1 -0
- package/dist/nodes/edit-node.js +496 -0
- package/dist/nodes/edit-node.js.map +1 -0
- package/dist/nodes/edit.d.ts +6 -0
- package/dist/nodes/edit.d.ts.map +1 -0
- package/dist/nodes/edit.js +22 -0
- package/dist/nodes/edit.js.map +1 -0
- package/dist/nodes/extract-node.d.ts +174 -0
- package/dist/nodes/extract-node.d.ts.map +1 -0
- package/dist/nodes/extract-node.js +233 -0
- package/dist/nodes/extract-node.js.map +1 -0
- package/dist/nodes/extract.d.ts +6 -0
- package/dist/nodes/extract.d.ts.map +1 -0
- package/dist/nodes/extract.js +49 -0
- package/dist/nodes/extract.js.map +1 -0
- package/dist/nodes/filter-agent.d.ts +11 -0
- package/dist/nodes/filter-agent.d.ts.map +1 -0
- package/dist/nodes/filter-agent.js +60 -0
- package/dist/nodes/filter-agent.js.map +1 -0
- package/dist/nodes/filter-node.d.ts +9 -0
- package/dist/nodes/filter-node.d.ts.map +1 -0
- package/dist/nodes/filter-node.js +111 -0
- package/dist/nodes/filter-node.js.map +1 -0
- package/dist/nodes/filters.d.ts +13 -0
- package/dist/nodes/filters.d.ts.map +1 -0
- package/dist/nodes/filters.js +111 -0
- package/dist/nodes/filters.js.map +1 -0
- package/dist/nodes/message-node.d.ts +71 -0
- package/dist/nodes/message-node.d.ts.map +1 -0
- package/dist/nodes/message-node.js +491 -0
- package/dist/nodes/message-node.js.map +1 -0
- package/dist/nodes/message.d.ts +71 -0
- package/dist/nodes/message.d.ts.map +1 -0
- package/dist/nodes/message.js +496 -0
- package/dist/nodes/message.js.map +1 -0
- package/dist/nodes/vote-node.d.ts +13 -0
- package/dist/nodes/vote-node.d.ts.map +1 -0
- package/dist/nodes/vote-node.js +232 -0
- package/dist/nodes/vote-node.js.map +1 -0
- package/dist/nodes/vote.d.ts +13 -0
- package/dist/nodes/vote.d.ts.map +1 -0
- package/dist/nodes/vote.js +232 -0
- package/dist/nodes/vote.js.map +1 -0
- package/dist/queue.d.ts +15 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +41 -0
- package/dist/queue.js.map +1 -0
- package/dist/redis.d.ts +8 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +33 -0
- package/dist/redis.js.map +1 -0
- package/dist/runtime/auth.d.ts +11 -0
- package/dist/runtime/auth.d.ts.map +1 -0
- package/dist/runtime/auth.js +54 -0
- package/dist/runtime/auth.js.map +1 -0
- package/dist/runtime/dry-run.d.ts +12 -0
- package/dist/runtime/dry-run.d.ts.map +1 -0
- package/dist/runtime/dry-run.js +236 -0
- package/dist/runtime/dry-run.js.map +1 -0
- package/dist/runtime/queue.d.ts +15 -0
- package/dist/runtime/queue.d.ts.map +1 -0
- package/dist/runtime/queue.js +41 -0
- package/dist/runtime/queue.js.map +1 -0
- package/dist/runtime/redis.d.ts +8 -0
- package/dist/runtime/redis.d.ts.map +1 -0
- package/dist/runtime/redis.js +33 -0
- package/dist/runtime/redis.js.map +1 -0
- package/dist/runtime/worker.d.ts +14 -0
- package/dist/runtime/worker.d.ts.map +1 -0
- package/dist/runtime/worker.js +135 -0
- package/dist/runtime/worker.js.map +1 -0
- package/dist/tools/alert-history.d.ts +18 -0
- package/dist/tools/alert-history.d.ts.map +1 -0
- package/dist/tools/alert-history.js +98 -0
- package/dist/tools/alert-history.js.map +1 -0
- package/dist/tools/betterstack-log.d.ts +15 -0
- package/dist/tools/betterstack-log.d.ts.map +1 -0
- package/dist/tools/betterstack-log.js +80 -0
- package/dist/tools/betterstack-log.js.map +1 -0
- package/dist/tools/index.d.ts +44 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/read-sources.d.ts +15 -0
- package/dist/tools/read-sources.d.ts.map +1 -0
- package/dist/tools/read-sources.js +67 -0
- package/dist/tools/read-sources.js.map +1 -0
- package/dist/tools/resolve-area.d.ts +19 -0
- package/dist/tools/resolve-area.d.ts.map +1 -0
- package/dist/tools/resolve-area.js +147 -0
- package/dist/tools/resolve-area.js.map +1 -0
- package/dist/tools.d.ts +115 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +439 -0
- package/dist/tools.js.map +1 -0
- package/dist/worker.d.ts +14 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +135 -0
- package/dist/worker.js.map +1 -0
- package/package.json +26 -0
- package/src/graph.ts +200 -0
- package/src/index.ts +27 -0
- package/src/models.ts +20 -0
- package/src/nodes/clarify-node.ts +172 -0
- package/src/nodes/edit-node.ts +695 -0
- package/src/nodes/extract-node.ts +299 -0
- package/src/nodes/filter-node.ts +139 -0
- package/src/nodes/message.ts +695 -0
- package/src/nodes/vote-node.ts +354 -0
- package/src/nodes/vote.ts +354 -0
- package/src/runtime/auth.ts +63 -0
- package/src/runtime/dry-run.ts +303 -0
- package/src/runtime/queue.ts +53 -0
- package/src/runtime/redis.ts +38 -0
- package/src/runtime/worker.ts +167 -0
- package/src/tools/alert-history.ts +120 -0
- package/src/tools/betterstack-log.ts +102 -0
- package/src/tools/index.ts +23 -0
- package/src/tools/read-sources.ts +86 -0
- package/src/tools/resolve-area.ts +202 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clarify Node — optional ReAct tool calling for low-confidence enrichment.
|
|
3
|
+
*/
|
|
4
|
+
import * as logger from "@easyoref/monitoring";
|
|
5
|
+
import { ClarifyOutputSchema, config, pushSessionPost, } from "@easyoref/shared";
|
|
6
|
+
import { ChatOpenRouter } from "@langchain/openrouter";
|
|
7
|
+
import { createAgent, toolStrategy } from "langchain";
|
|
8
|
+
import { clarifyTools } from "../tools/index.js";
|
|
9
|
+
const clarifyModel = new ChatOpenRouter({
|
|
10
|
+
apiKey: config.agent.apiKey,
|
|
11
|
+
model: config.agent.filterModel,
|
|
12
|
+
temperature: 0,
|
|
13
|
+
maxTokens: 600,
|
|
14
|
+
});
|
|
15
|
+
const clarifyAgent = createAgent({
|
|
16
|
+
model: clarifyModel,
|
|
17
|
+
tools: clarifyTools,
|
|
18
|
+
responseFormat: toolStrategy(ClarifyOutputSchema),
|
|
19
|
+
systemPrompt: `
|
|
20
|
+
You are the clarification agent for EasyOref — an Israeli missile alert enrichment system.
|
|
21
|
+
|
|
22
|
+
The voting pipeline analyzed Telegram channel posts and produced a result with
|
|
23
|
+
low confidence or contradictions. You have access to 4 tools:
|
|
24
|
+
|
|
25
|
+
1. read_telegram_sources — fetch last N posts from a Telegram news channel
|
|
26
|
+
2. alert_history — get recent alert history from Pikud HaOref.
|
|
27
|
+
3. resolve_area — check if a location mentioned in news is relevant to user's areas.
|
|
28
|
+
4. betterstack_log — query recent EasyOref logs from Better Stack.
|
|
29
|
+
|
|
30
|
+
CRITICAL — TIME VALIDATION:
|
|
31
|
+
You receive the alert time (Israel timezone). Channel posts may be about PREVIOUS
|
|
32
|
+
attacks or ongoing military operations (not THIS specific alert). When in doubt:
|
|
33
|
+
- Use alert_history to verify if an alert really occurred at the claimed time/area.
|
|
34
|
+
- If a post discusses events from hours ago, it is STALE — ignore it.
|
|
35
|
+
|
|
36
|
+
You decide whether tools would help:
|
|
37
|
+
- If contradictions can be resolved with existing data → respond immediately, no tools.
|
|
38
|
+
- If an authoritative source (IDF, N12) could settle a disagreement → fetch 1-4 posts.
|
|
39
|
+
- If you need to verify whether an alert occurred → check alert_history.
|
|
40
|
+
|
|
41
|
+
Always respect an output format.
|
|
42
|
+
`,
|
|
43
|
+
});
|
|
44
|
+
const describeContradictions = (extractions, voted) => {
|
|
45
|
+
const issues = [];
|
|
46
|
+
if (voted.countryorigins && voted.countryorigins.length > 1) {
|
|
47
|
+
const names = voted.countryorigins.map((c) => c.name).join(", ");
|
|
48
|
+
issues.push(`Multiple origin countries reported: ${names}`);
|
|
49
|
+
}
|
|
50
|
+
if (voted.rocket_count_min &&
|
|
51
|
+
voted.rocket_count_max &&
|
|
52
|
+
voted.rocket_count_max - voted.rocket_count_min > 3) {
|
|
53
|
+
issues.push(`Wide rocket count range: ${voted.rocket_count_min}–${voted.rocket_count_max}`);
|
|
54
|
+
}
|
|
55
|
+
if ((voted.intercepted_confidence ?? 0) < 0.5 &&
|
|
56
|
+
voted.intercepted !== undefined) {
|
|
57
|
+
issues.push(`Intercepted count (${voted.intercepted}) has low confidence: ${(voted.intercepted_confidence ?? 0).toFixed(2)}`);
|
|
58
|
+
}
|
|
59
|
+
issues.push(`Overall confidence: ${voted.confidence}`);
|
|
60
|
+
issues.push(`Sources count: ${voted.sources_count}`);
|
|
61
|
+
return issues.join("\n");
|
|
62
|
+
};
|
|
63
|
+
export const clarifyNode = async (state) => {
|
|
64
|
+
if (!state.votedResult) {
|
|
65
|
+
logger.info("Agent: clarify skipped — no voted result", {
|
|
66
|
+
alertId: state.alertId,
|
|
67
|
+
});
|
|
68
|
+
return { clarifyAttempted: true };
|
|
69
|
+
}
|
|
70
|
+
logger.info("Agent: clarify triggered", {
|
|
71
|
+
alertId: state.alertId,
|
|
72
|
+
confidence: state.votedResult.confidence,
|
|
73
|
+
});
|
|
74
|
+
try {
|
|
75
|
+
const contradictions = describeContradictions(state.extractions, state.votedResult);
|
|
76
|
+
const alertTimeIL = new Date(state.alertTs).toLocaleTimeString("he-IL", {
|
|
77
|
+
hour: "2-digit",
|
|
78
|
+
minute: "2-digit",
|
|
79
|
+
timeZone: "Asia/Jerusalem",
|
|
80
|
+
});
|
|
81
|
+
const userPrompt = `Alert region: ${state.alertAreas.join(", ")}\n` +
|
|
82
|
+
`Alert type: ${state.alertType}\n` +
|
|
83
|
+
`Alert time: ${alertTimeIL} (Israel)\n` +
|
|
84
|
+
`Message ID: ${state.messageId}\n\n` +
|
|
85
|
+
`Current voted result:\n` +
|
|
86
|
+
JSON.stringify(state.votedResult, undefined, 2) +
|
|
87
|
+
`\n\nContradictions & issues:\n${contradictions}\n\n` +
|
|
88
|
+
`Existing extractions (${state.extractions.filter((e) => e.valid).length} valid):\n` +
|
|
89
|
+
state.extractions
|
|
90
|
+
.filter((e) => e.valid)
|
|
91
|
+
.map((e) => ` [${e.channel}] country=${e.countryorigin}, rockets=${e.rocket_count}, ` +
|
|
92
|
+
`intercepted=${e.intercepted}, hits=${e.hitsconfirmed}, conf=${e.confidence}`)
|
|
93
|
+
.join("\n") +
|
|
94
|
+
`\n\nDecide: would fetching more data from authoritative channels resolve these issues?`;
|
|
95
|
+
const result = await clarifyAgent.invoke({ messages: [userPrompt] });
|
|
96
|
+
const output = result.structuredResponse;
|
|
97
|
+
const newPosts = [];
|
|
98
|
+
if (output?.newPosts) {
|
|
99
|
+
for (const p of output.newPosts) {
|
|
100
|
+
const post = {
|
|
101
|
+
channel: p.channel,
|
|
102
|
+
text: p.text,
|
|
103
|
+
ts: p.ts,
|
|
104
|
+
messageUrl: p.messageUrl,
|
|
105
|
+
};
|
|
106
|
+
newPosts.push(post);
|
|
107
|
+
await pushSessionPost(post);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
extractions: [...state.extractions, ...(output?.newExtractions ?? [])],
|
|
112
|
+
votedResult: undefined,
|
|
113
|
+
clarifyAttempted: true,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
logger.error("Agent: clarify failed", {
|
|
118
|
+
alertId: state.alertId,
|
|
119
|
+
error: String(err),
|
|
120
|
+
});
|
|
121
|
+
return { clarifyAttempted: true };
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=clarify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clarify.js","sourceRoot":"","sources":["../../src/nodes/clarify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message building and Telegram editing.
|
|
3
|
+
*
|
|
4
|
+
* Builds enriched message text from voted consensus + carry-forward data.
|
|
5
|
+
* Uses inline [[1]](url) citations. No superscripts. No footer sources.
|
|
6
|
+
*/
|
|
7
|
+
import type { AlertType, CitedSource, EnrichmentData, InlineCite, VotedResult } from "@easyoref/shared";
|
|
8
|
+
/** EN country name → Russian */
|
|
9
|
+
export declare const COUNTRY_RU: Record<string, string>;
|
|
10
|
+
/** Format inline citations: [[1]](url), [[2]](url) */
|
|
11
|
+
export declare function inlineCites(indices: number[], citedSources: CitedSource[]): string;
|
|
12
|
+
/** Get InlineCite[] from citation indices */
|
|
13
|
+
export declare function extractCites(indices: number[], citedSources: CitedSource[]): InlineCite[];
|
|
14
|
+
/** Format inline citations from InlineCite[] (carry-forward data) */
|
|
15
|
+
export declare function inlineCitesFromData(cites: InlineCite[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* Build a global URL→index map across ALL enrichment fields.
|
|
18
|
+
* Deduplicates by URL so the same source gets the same [N] everywhere.
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildGlobalCiteMap(enrichment: EnrichmentData): Map<string, number>;
|
|
21
|
+
/** Format inline citations using global numbering */
|
|
22
|
+
export declare function renderCitesGlobal(cites: InlineCite[], globalMap: Map<string, number>): string;
|
|
23
|
+
export declare const SKIP = 0.6;
|
|
24
|
+
export declare const UNCERTAIN = 0.75;
|
|
25
|
+
export declare const CERTAIN = 0.95;
|
|
26
|
+
/** Strip custom-emoji monitoring line from message text */
|
|
27
|
+
export declare const MONITORING_RE: RegExp;
|
|
28
|
+
export declare function stripMonitoring(text: string): string;
|
|
29
|
+
export declare function appendMonitoring(text: string, label: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Build enrichment data from current vote + previous enrichment (carry-forward).
|
|
32
|
+
* Returns updated EnrichmentData for Redis persistence.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildEnrichmentFromVote(result: VotedResult, prev: EnrichmentData, alertType: AlertType, alertTs: number): EnrichmentData;
|
|
35
|
+
/**
|
|
36
|
+
* Build the enriched message text from current message + enrichment data.
|
|
37
|
+
* Uses inline [[1]](url) citations.
|
|
38
|
+
*/
|
|
39
|
+
export declare function buildEnrichedMessage(currentText: string, alertType: AlertType, alertTs: number, enrichment: EnrichmentData, monitoringLabel?: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Insert a line before </blockquote> (or legacy time line as fallback).
|
|
42
|
+
*/
|
|
43
|
+
export declare function insertBeforeBlockEnd(text: string, line: string): string;
|
|
44
|
+
/** @deprecated Use insertBeforeBlockEnd */
|
|
45
|
+
export declare const insertBeforeTimeLine: typeof insertBeforeBlockEnd;
|
|
46
|
+
export interface TelegramTargetMessage {
|
|
47
|
+
chatId: string;
|
|
48
|
+
messageId: number;
|
|
49
|
+
isCaption: boolean;
|
|
50
|
+
}
|
|
51
|
+
export interface EditMessageInput {
|
|
52
|
+
alertId: string;
|
|
53
|
+
alertTs: number;
|
|
54
|
+
alertType: AlertType;
|
|
55
|
+
chatId: string;
|
|
56
|
+
messageId: number;
|
|
57
|
+
isCaption: boolean;
|
|
58
|
+
telegramMessages?: TelegramTargetMessage[];
|
|
59
|
+
currentText: string;
|
|
60
|
+
votedResult: VotedResult | undefined;
|
|
61
|
+
previousEnrichment: EnrichmentData;
|
|
62
|
+
monitoringLabel?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Edit the Telegram message with enriched data.
|
|
66
|
+
*/
|
|
67
|
+
export declare const editTelegramMessage: (input: EditMessageInput) => Promise<void>;
|
|
68
|
+
export declare const editMessage: (input: EditMessageInput) => Promise<void>;
|
|
69
|
+
import type { AgentStateType } from "../graph.js";
|
|
70
|
+
export declare const editNode: (state: AgentStateType) => Promise<Partial<AgentStateType>>;
|
|
71
|
+
//# sourceMappingURL=edit-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-node.d.ts","sourceRoot":"","sources":["../../src/nodes/edit-node.ts"],"names":[],"mappings":"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"}
|