crucix 2.39.0 → 2.39.3
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/.env.example +151 -149
- package/LICENSE +661 -661
- package/README.md +238 -237
- package/apis/BRIEFING_PROMPT.md +220 -220
- package/apis/BRIEFING_TEMPLATE.md +106 -106
- package/apis/briefing.mjs +264 -264
- package/apis/save-briefing.mjs +27 -27
- package/apis/sources/acled.mjs +356 -311
- package/apis/sources/adsb-military.mjs +283 -283
- package/apis/sources/adsb-orbits.mjs +154 -154
- package/apis/sources/adsb.mjs +302 -302
- package/apis/sources/bls.mjs +199 -165
- package/apis/sources/bluesky.mjs +77 -77
- package/apis/sources/central-banks.mjs +144 -144
- package/apis/sources/cftc-cot.mjs +109 -109
- package/apis/sources/cisa-kev.mjs +144 -144
- package/apis/sources/cloudflare-radar.mjs +224 -224
- package/apis/sources/comtrade.mjs +303 -303
- package/apis/sources/copernicus-ems.mjs +117 -117
- package/apis/sources/ecb.mjs +62 -62
- package/apis/sources/ecdc-threats.mjs +99 -99
- package/apis/sources/eia.mjs +158 -158
- package/apis/sources/emsc.mjs +92 -92
- package/apis/sources/energy-charts.mjs +201 -201
- package/apis/sources/entsog.mjs +164 -164
- package/apis/sources/eonet.mjs +57 -57
- package/apis/sources/epa.mjs +266 -219
- package/apis/sources/epss.mjs +75 -75
- package/apis/sources/eurostat-hu.mjs +96 -96
- package/apis/sources/faa-airports.mjs +133 -133
- package/apis/sources/federal-register.mjs +148 -148
- package/apis/sources/finnhub.mjs +41 -41
- package/apis/sources/firms.mjs +157 -157
- package/apis/sources/fmp.mjs +109 -109
- package/apis/sources/fred.mjs +110 -110
- package/apis/sources/gdacs.mjs +75 -75
- package/apis/sources/gdelt.mjs +189 -189
- package/apis/sources/gpsjam.mjs +159 -159
- package/apis/sources/gscpi.mjs +165 -165
- package/apis/sources/hibp.mjs +105 -105
- package/apis/sources/inform.mjs +137 -137
- package/apis/sources/ioda.mjs +242 -242
- package/apis/sources/jma-typhoon.mjs +113 -113
- package/apis/sources/kiwisdr.mjs +305 -305
- package/apis/sources/launches.mjs +88 -88
- package/apis/sources/met-norway.mjs +129 -129
- package/apis/sources/meteoalarm.mjs +119 -119
- package/apis/sources/misp-galaxy.mjs +82 -82
- package/apis/sources/nhc.mjs +147 -147
- package/apis/sources/noaa.mjs +106 -106
- package/apis/sources/ofac.mjs +206 -206
- package/apis/sources/ooni.mjs +103 -103
- package/apis/sources/openmeteo-wind.mjs +83 -83
- package/apis/sources/opensanctions-index.mjs +155 -155
- package/apis/sources/opensanctions.mjs +112 -112
- package/apis/sources/opensky.mjs +271 -250
- package/apis/sources/patents.mjs +205 -205
- package/apis/sources/portwatch.mjs +183 -183
- package/apis/sources/prediction-markets.mjs +212 -212
- package/apis/sources/reddit.mjs +108 -108
- package/apis/sources/regulators.mjs +97 -97
- package/apis/sources/reliefweb.mjs +223 -223
- package/apis/sources/ripestat.mjs +99 -99
- package/apis/sources/safecast.mjs +164 -164
- package/apis/sources/sec-8k.mjs +152 -152
- package/apis/sources/ships.mjs +177 -177
- package/apis/sources/sigmet.mjs +189 -189
- package/apis/sources/space.mjs +222 -190
- package/apis/sources/swpc.mjs +47 -47
- package/apis/sources/telegram.mjs +309 -309
- package/apis/sources/threatfox.mjs +111 -111
- package/apis/sources/travel-advisories.mjs +100 -100
- package/apis/sources/treasury.mjs +81 -81
- package/apis/sources/unhcr-arrivals.mjs +131 -131
- package/apis/sources/usaspending.mjs +118 -118
- package/apis/sources/usgs.mjs +94 -94
- package/apis/sources/views.mjs +131 -131
- package/apis/sources/who.mjs +170 -170
- package/apis/sources/wmo-swic.mjs +119 -119
- package/apis/sources/yfinance.mjs +141 -141
- package/apis/utils/ais-collector.mjs +279 -279
- package/apis/utils/env.mjs +87 -87
- package/apis/utils/fetch.mjs +91 -87
- package/apis/utils/freshness.mjs +95 -95
- package/apis/utils/news-feeds.mjs +102 -102
- package/apis/utils/quota-cache.mjs +42 -0
- package/apis/utils/rss-pool.mjs +33 -0
- package/apis/utils/rss.mjs +56 -56
- package/apis/utils/xml.mjs +19 -19
- package/apis/utils/zip.mjs +42 -42
- package/crucix.config.mjs +209 -209
- package/dashboard/inject.mjs +944 -923
- package/dashboard/public/alert-rules.js +494 -494
- package/dashboard/public/alerts-core.js +48 -48
- package/dashboard/public/alerts.css +168 -168
- package/dashboard/public/alerts.js +475 -475
- package/dashboard/public/briefing.css +38 -38
- package/dashboard/public/briefing.js +171 -171
- package/dashboard/public/changes.css +45 -45
- package/dashboard/public/changes.js +331 -331
- package/dashboard/public/clock.js +14 -14
- package/dashboard/public/country.css +61 -61
- package/dashboard/public/country.js +259 -259
- package/dashboard/public/credits.js +56 -56
- package/dashboard/public/data/infrastructure.json +1 -1
- package/dashboard/public/domains.js +24 -24
- package/dashboard/public/embed.html +75 -75
- package/dashboard/public/health-matrix.css +75 -75
- package/dashboard/public/health-matrix.js +242 -242
- package/dashboard/public/infrastructure.js +186 -186
- package/dashboard/public/intelligence.css +63 -63
- package/dashboard/public/intelligence.js +341 -341
- package/dashboard/public/jarvis.html +3534 -3534
- package/dashboard/public/lens-core.js +37 -37
- package/dashboard/public/lens.css +13 -13
- package/dashboard/public/lens.js +101 -101
- package/dashboard/public/live-sources.css +36 -36
- package/dashboard/public/live-sources.js +115 -115
- package/dashboard/public/loading.html +169 -169
- package/dashboard/public/manifest.webmanifest +15 -15
- package/dashboard/public/palette-core.js +54 -54
- package/dashboard/public/palette.css +45 -45
- package/dashboard/public/palette.js +268 -268
- package/dashboard/public/pivots.js +61 -61
- package/dashboard/public/pwa.js +132 -132
- package/dashboard/public/record-core.js +153 -153
- package/dashboard/public/record-inspector.css +105 -105
- package/dashboard/public/record-inspector.js +350 -350
- package/dashboard/public/replay-core.js +72 -72
- package/dashboard/public/replay.css +33 -33
- package/dashboard/public/replay.js +251 -251
- package/dashboard/public/risk.css +35 -35
- package/dashboard/public/risk.js +292 -292
- package/dashboard/public/setup.html +1198 -1198
- package/dashboard/public/sw.js +52 -52
- package/data/world-rss/README.hu.md +324 -324
- package/data/world-rss/complete-world-feeds.js +6 -6
- package/data/world-rss/country-coverage.csv +251 -251
- package/data/world-rss/country-fallback-feeds.js +39 -39
- package/data/world-rss/country-search-feeds.js +594 -594
- package/data/world-rss/local-alternatives.js +610 -610
- package/data/world-rss/registry.json +48831 -48831
- package/data/world-rss/search-audit.json +241 -241
- package/data/world-rss/summary.json +15 -15
- package/data/world-rss/world-feeds.js +929 -929
- package/data/world-rss/world-feeds.opml +928 -928
- package/diag.mjs +94 -94
- package/lib/alerts/ask.mjs +216 -216
- package/lib/alerts/brief.mjs +85 -85
- package/lib/alerts/discord.mjs +661 -661
- package/lib/alerts/engine.mjs +614 -614
- package/lib/alerts/evaluators.mjs +417 -417
- package/lib/alerts/evidence.mjs +118 -118
- package/lib/alerts/levels.mjs +40 -40
- package/lib/alerts/lifecycle.mjs +185 -185
- package/lib/alerts/metrics.mjs +88 -88
- package/lib/alerts/notify.mjs +501 -501
- package/lib/alerts/routes.mjs +176 -176
- package/lib/alerts/rules.mjs +458 -458
- package/lib/alerts/store.mjs +383 -383
- package/lib/alerts/sweep.mjs +49 -49
- package/lib/alerts/telegram.mjs +828 -828
- package/lib/api-errors.mjs +24 -24
- package/lib/atomic-json.mjs +83 -83
- package/lib/basemap.mjs +48 -48
- package/lib/dashboard-path.mjs +80 -80
- package/lib/delta/engine.mjs +251 -251
- package/lib/delta/index.mjs +2 -2
- package/lib/delta/memory.mjs +247 -247
- package/lib/domains.mjs +32 -32
- package/lib/html.mjs +4 -4
- package/lib/http-security.mjs +142 -142
- package/lib/i18n.mjs +163 -163
- package/lib/install-mode.mjs +9 -9
- package/lib/intelligence/anomalies.mjs +63 -63
- package/lib/intelligence/countries.mjs +225 -225
- package/lib/intelligence/entities.mjs +269 -269
- package/lib/intelligence/events.mjs +423 -423
- package/lib/intelligence/export.mjs +90 -90
- package/lib/intelligence/exposure.mjs +61 -61
- package/lib/intelligence/geo.mjs +109 -109
- package/lib/intelligence/history.mjs +368 -368
- package/lib/intelligence/keywords.mjs +193 -193
- package/lib/intelligence/live-sources.mjs +80 -80
- package/lib/intelligence/military-sites.mjs +51 -51
- package/lib/intelligence/predictions.mjs +163 -163
- package/lib/intelligence/risk-routes.mjs +170 -170
- package/lib/intelligence/risk-step.mjs +145 -145
- package/lib/intelligence/risk.mjs +159 -159
- package/lib/intelligence/routes.mjs +46 -46
- package/lib/intelligence/thermal.mjs +194 -194
- package/lib/intelligence/timeline.mjs +34 -34
- package/lib/llm/alert-schema.mjs +22 -22
- package/lib/llm/anthropic.mjs +78 -78
- package/lib/llm/briefing.mjs +291 -291
- package/lib/llm/budgets.mjs +46 -46
- package/lib/llm/cadence.mjs +30 -30
- package/lib/llm/codex.mjs +160 -160
- package/lib/llm/cursor.mjs +88 -78
- package/lib/llm/gemini.mjs +57 -57
- package/lib/llm/grok.mjs +56 -56
- package/lib/llm/idea-schema.mjs +65 -65
- package/lib/llm/ideas.mjs +83 -83
- package/lib/llm/index.mjs +68 -68
- package/lib/llm/json-extract.mjs +129 -129
- package/lib/llm/minimax.mjs +53 -53
- package/lib/llm/mistral.mjs +53 -53
- package/lib/llm/ollama.mjs +54 -54
- package/lib/llm/openai-compatible.mjs +66 -66
- package/lib/llm/openai.mjs +52 -52
- package/lib/llm/openrouter.mjs +54 -54
- package/lib/llm/provider.mjs +26 -26
- package/lib/llm/rule-ideas.mjs +123 -123
- package/lib/markets/build.mjs +68 -68
- package/lib/markets/fx.mjs +136 -136
- package/lib/news/feed-store.mjs +332 -332
- package/lib/news/opml.mjs +69 -69
- package/lib/news/routes.mjs +75 -75
- package/lib/offline-shell.mjs +9 -9
- package/lib/open-browser.mjs +18 -18
- package/lib/profile-install.mjs +28 -28
- package/lib/setup-wizard.mjs +821 -821
- package/lib/snapshots.mjs +13 -13
- package/lib/sse.mjs +22 -22
- package/lib/sweeps/archive.mjs +463 -463
- package/lib/sweeps/changes.mjs +280 -280
- package/lib/sweeps/routes.mjs +122 -122
- package/lib/sweeps/step.mjs +22 -22
- package/lib/user-paths.mjs +38 -38
- package/lib/version.mjs +22 -0
- package/lib/world-rss-runner.mjs +225 -213
- package/locales/en.json +1724 -1724
- package/locales/fr.json +1724 -1724
- package/locales/hu.json +1724 -1724
- package/package.json +93 -93
- package/scripts/benchmark-world-rss.mjs +64 -64
- package/scripts/check.mjs +28 -28
- package/scripts/clean.mjs +18 -18
- package/scripts/cli.mjs +13 -0
- package/scripts/setup.mjs +8 -8
- package/scripts/status.mjs +113 -113
- package/scripts/sync-setup-html.mjs +47 -47
- package/scripts/verify-assets.mjs +16 -16
- package/scripts/watchlist.mjs +96 -96
package/.env.example
CHANGED
|
@@ -1,149 +1,151 @@
|
|
|
1
|
-
# ============================================
|
|
2
|
-
# Crucix Intelligence Engine — Configuration
|
|
3
|
-
# ============================================
|
|
4
|
-
# Copy this file to .env and fill in your keys.
|
|
5
|
-
# Keys are optional — sources without keys degrade gracefully.
|
|
6
|
-
#
|
|
7
|
-
# IMPORTANT: Do NOT put comments on the same line as values.
|
|
8
|
-
# Docker env_file treats inline comments as part of the value.
|
|
9
|
-
|
|
10
|
-
# === OSINT Source API Keys ===
|
|
11
|
-
|
|
12
|
-
# Federal Reserve Economic Data (free: fred.stlouisfed.org/docs/api)
|
|
13
|
-
FRED_API_KEY=
|
|
14
|
-
# NASA FIRMS fire data (free: firms.modaps.eosdis.nasa.gov/api)
|
|
15
|
-
FIRMS_MAP_KEY=
|
|
16
|
-
# Energy Information Administration (free: api.eia.gov/register)
|
|
17
|
-
EIA_API_KEY=
|
|
18
|
-
#
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
FMP_DAILY_LIMIT
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
|
|
30
|
-
#
|
|
31
|
-
|
|
32
|
-
#
|
|
33
|
-
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
#
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
#
|
|
51
|
-
|
|
52
|
-
#
|
|
53
|
-
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#
|
|
58
|
-
|
|
59
|
-
#
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
#
|
|
70
|
-
|
|
71
|
-
#
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
#
|
|
82
|
-
|
|
83
|
-
#
|
|
84
|
-
|
|
85
|
-
#
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
#
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
#
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
#
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
#
|
|
114
|
-
|
|
115
|
-
#
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
#
|
|
121
|
-
|
|
122
|
-
#
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
#
|
|
128
|
-
#
|
|
129
|
-
|
|
130
|
-
#
|
|
131
|
-
|
|
132
|
-
#
|
|
133
|
-
|
|
134
|
-
#
|
|
135
|
-
|
|
136
|
-
#
|
|
137
|
-
|
|
138
|
-
#
|
|
139
|
-
|
|
140
|
-
#
|
|
141
|
-
|
|
142
|
-
#
|
|
143
|
-
|
|
144
|
-
#
|
|
145
|
-
|
|
146
|
-
#
|
|
147
|
-
|
|
148
|
-
#
|
|
149
|
-
|
|
1
|
+
# ============================================
|
|
2
|
+
# Crucix Intelligence Engine — Configuration
|
|
3
|
+
# ============================================
|
|
4
|
+
# Copy this file to .env and fill in your keys.
|
|
5
|
+
# Keys are optional — sources without keys degrade gracefully.
|
|
6
|
+
#
|
|
7
|
+
# IMPORTANT: Do NOT put comments on the same line as values.
|
|
8
|
+
# Docker env_file treats inline comments as part of the value.
|
|
9
|
+
|
|
10
|
+
# === OSINT Source API Keys ===
|
|
11
|
+
|
|
12
|
+
# Federal Reserve Economic Data (free: fred.stlouisfed.org/docs/api)
|
|
13
|
+
FRED_API_KEY=
|
|
14
|
+
# NASA FIRMS fire data (free: firms.modaps.eosdis.nasa.gov/api)
|
|
15
|
+
FIRMS_MAP_KEY=
|
|
16
|
+
# Energy Information Administration (free: api.eia.gov/register)
|
|
17
|
+
EIA_API_KEY=
|
|
18
|
+
# BLS Public Data (optional: data.bls.gov/registrationEngine). v1 is ~25/day; Crucix caches 12 hours. v2 is 500/day.
|
|
19
|
+
BLS_API_KEY=
|
|
20
|
+
# Financial Modeling Prep (free: site.financialmodelingprep.com/register, 250 calls/day): equities, indexes, forex in two
|
|
21
|
+
# batch calls per sweep (192/day at the 15-minute sweep). FMP_DAILY_LIMIT caps the calls; without a key Yahoo covers it.
|
|
22
|
+
FMP_API_KEY=
|
|
23
|
+
FMP_DAILY_LIMIT=250
|
|
24
|
+
# Finnhub (free: finnhub.io/register, 60 calls/minute): second quote source for the US-listed equities
|
|
25
|
+
FINNHUB_API_KEY=
|
|
26
|
+
# Base currency of the FX crosses: USD | EUR | GBP | HUF | JPY | CHF | CAD | AUD | CNY (each dashboard user can switch)
|
|
27
|
+
CRUCIX_BASE_CURRENCY=USD
|
|
28
|
+
# Maritime live AIS (free: aisstream.io/account, sign in with GitHub). With a key the dashboard server keeps one
|
|
29
|
+
# aisstream.io WebSocket open and reports vessels seen at 11 chokepoints in the last hour; one-shot briefings do not.
|
|
30
|
+
# A key allows 3 connections; the service has no SLA and no written licence or terms of use (aisstream issue #290).
|
|
31
|
+
AISSTREAM_API_KEY=
|
|
32
|
+
# Armed Conflict Location & Event Data (acleddata.com/user/register)
|
|
33
|
+
ACLED_EMAIL=
|
|
34
|
+
# OAuth2 password grant (API keys deprecated Sept 2025)
|
|
35
|
+
ACLED_PASSWORD=
|
|
36
|
+
# OpenSky Network API client (opensky-network.org/my-opensky/account -> Create a new API client -> credentials.json)
|
|
37
|
+
# Optional: 4,000 instead of 400 credits/day and a refresh every 15 minutes instead of 2 hours; set both or neither
|
|
38
|
+
OPENSKY_CLIENT_ID=
|
|
39
|
+
OPENSKY_CLIENT_SECRET=
|
|
40
|
+
# Cloudflare Radar internet outages & traffic anomalies (free: dash.cloudflare.com/profile/api-tokens, Account Analytics Read)
|
|
41
|
+
CLOUDFLARE_API_TOKEN=
|
|
42
|
+
|
|
43
|
+
# === Server Configuration ===
|
|
44
|
+
|
|
45
|
+
# Dashboard server port
|
|
46
|
+
PORT=3117
|
|
47
|
+
# Auto-refresh interval (minutes)
|
|
48
|
+
REFRESH_INTERVAL_MINUTES=15
|
|
49
|
+
|
|
50
|
+
# === LLM Layer (optional) ===
|
|
51
|
+
# Enables AI-enhanced trade ideas and breaking news Telegram alerts.
|
|
52
|
+
# Provider options: anthropic | openai | gemini | codex | openrouter | minimax | mistral | ollama | grok | openai-compatible
|
|
53
|
+
LLM_PROVIDER=
|
|
54
|
+
# Not needed for codex (uses ~/.codex/auth.json) or ollama (local)
|
|
55
|
+
LLM_API_KEY=
|
|
56
|
+
# Optional override. Each provider has a sensible default:
|
|
57
|
+
# anthropic: claude-sonnet-4-6 | openai: gpt-5.4 | gemini: gemini-3.1-pro | codex: first model in ~/.codex/models_cache.json (gpt-6.1-sol) | openrouter: openrouter/auto | minimax: MiniMax-M2.5 | ollama: llama3.1:8b | grok: grok-4-latest
|
|
58
|
+
LLM_MODEL=
|
|
59
|
+
# Ollama base URL (only needed if not using default http://localhost:11434)
|
|
60
|
+
OLLAMA_BASE_URL=
|
|
61
|
+
# Output language for the "Trade Ideas" LLM box. Supported: en | fr | hu
|
|
62
|
+
# Falls back to CRUCIX_LANG, then to English if unset.
|
|
63
|
+
TRADE_IDEAS_LANG=
|
|
64
|
+
|
|
65
|
+
# === Telegram Alerts (optional; rules work without LLM) ===
|
|
66
|
+
# Create a bot via @BotFather, get chat ID via @userinfobot
|
|
67
|
+
TELEGRAM_BOT_TOKEN=
|
|
68
|
+
TELEGRAM_CHAT_ID=
|
|
69
|
+
# Alerts below this tier are not sent on their own but listed in /brief: FLASH | PRIORITY | ROUTINE (default PRIORITY)
|
|
70
|
+
TELEGRAM_ALERT_MIN_TIER=PRIORITY
|
|
71
|
+
# Group chats: only these Telegram user ids may run bot commands, /ask included (empty = anyone in TELEGRAM_CHAT_ID)
|
|
72
|
+
TELEGRAM_ALLOWED_USER_IDS=
|
|
73
|
+
# Local server access (HOST=0.0.0.0 enables LAN; Docker sets this internally)
|
|
74
|
+
HOST=127.0.0.1
|
|
75
|
+
AUTH_USER=
|
|
76
|
+
AUTH_PASSWORD=
|
|
77
|
+
PUBLIC_URL=
|
|
78
|
+
MAX_SSE_CLIENTS=100
|
|
79
|
+
NO_AUTO_OPEN=0
|
|
80
|
+
# Opt-in browser access from other sites (comma lists of origins like https://example.com; empty = off, see docs/API.md and docs/EMBEDDING.md)
|
|
81
|
+
# CORS_ORIGINS: pages from these origins may READ the GET /api routes (a lone * allows any site; only sensible with AUTH_USER/AUTH_PASSWORD)
|
|
82
|
+
CORS_ORIGINS=
|
|
83
|
+
# EMBED_ORIGINS: pages from these origins may show the dashboard (/) or the widget (/embed.html) in an iframe
|
|
84
|
+
EMBED_ORIGINS=
|
|
85
|
+
# Explicit opt-in to read public Telegram previews; never private bot updates
|
|
86
|
+
TELEGRAM_OSINT_ENABLED=false
|
|
87
|
+
# Optional user allowlist for Discord sweep/mute/unmute/ask (otherwise Manage Server required)
|
|
88
|
+
DISCORD_ALLOWED_USER_IDS=
|
|
89
|
+
DISCORD_ALERT_MIN_TIER=PRIORITY
|
|
90
|
+
# === Bounded LLM requests / local OpenAI-compatible servers ===
|
|
91
|
+
# LLM_PROVIDER=openai-compatible works with llama.cpp or LM Studio; key optional
|
|
92
|
+
LLM_BASE_URL=
|
|
93
|
+
# Independent from OLLAMA_BASE_URL; origin, /v1 or full chat/completions endpoint
|
|
94
|
+
# LLM_PROVIDER=anthropic against a self-hosted Anthropic Messages API (gateway, router); origin, /v1 or full /v1/messages endpoint
|
|
95
|
+
ANTHROPIC_BASE_URL=
|
|
96
|
+
# Sent as Authorization: Bearer instead of x-api-key; use either this or LLM_API_KEY, not both
|
|
97
|
+
ANTHROPIC_AUTH_TOKEN=
|
|
98
|
+
LLM_IDEAS_MAX_TOKENS=4096
|
|
99
|
+
LLM_IDEAS_TIMEOUT_MS=180000
|
|
100
|
+
LLM_ALERT_MAX_TOKENS=800
|
|
101
|
+
LLM_ALERT_TIMEOUT_MS=30000
|
|
102
|
+
# Cited briefings (POST /api/briefing): tokens 128-8192, timeout 1000-360000 ms; a failure falls back to the rule-based briefing
|
|
103
|
+
LLM_BRIEFING_MAX_TOKENS=1200
|
|
104
|
+
LLM_BRIEFING_TIMEOUT_MS=60000
|
|
105
|
+
# Bot /ask answers, from the latest sweep only: tokens 64-2048, timeout 1000-360000 ms
|
|
106
|
+
LLM_ASK_MAX_TOKENS=500
|
|
107
|
+
LLM_ASK_TIMEOUT_MS=45000
|
|
108
|
+
# Optional only when your local model supports it: none|minimal|low|medium|high
|
|
109
|
+
OLLAMA_REASONING_EFFORT=
|
|
110
|
+
# 1=every sweep; 3=first sweep then sweeps 3,6,...; delta alerts still run every sweep
|
|
111
|
+
LLM_IDEAS_EVERY_N_SWEEPS=1
|
|
112
|
+
|
|
113
|
+
# === Sweep archive (replay, changes, source-health matrix) ===
|
|
114
|
+
# Stored in RUNS_DIR/sweeps as one gzip file per sweep; the oldest go first when either limit is reached.
|
|
115
|
+
# Sweeps kept, 2-672 (default 96 = 24 hours at a 15-minute refresh interval)
|
|
116
|
+
SWEEP_ARCHIVE_COUNT=
|
|
117
|
+
# Disk budget of the archive in MB, 4-512 (default 64); the newest sweep is always kept
|
|
118
|
+
SWEEP_ARCHIVE_MAX_MB=
|
|
119
|
+
|
|
120
|
+
# === Country risk, logged predictions and cited briefings ===
|
|
121
|
+
# Stored in RUNS_DIR/intelligence (countries.json, predictions.json). The score is a heuristic 0-100 index, not a probability.
|
|
122
|
+
# false skips the risk step: no files, no snapshot.risk, and /api/countries, /api/predictions and /api/briefing answer 404 (default true)
|
|
123
|
+
RISK_ENABLED=
|
|
124
|
+
# Days of event references and score history kept, 14-90 (default 35)
|
|
125
|
+
RISK_RETENTION_DAYS=
|
|
126
|
+
|
|
127
|
+
# === Alert engine notifications (optional) ===
|
|
128
|
+
# Alerts always appear in the dashboard; these settings only control what is also sent out.
|
|
129
|
+
# Telegram and Discord alerts use the TELEGRAM_* and DISCORD_* settings above; ntfy and the webhook are set here.
|
|
130
|
+
# Send engine alerts to Telegram and/or Discord too: comma list of telegram, discord (default none; their /mute applies)
|
|
131
|
+
ALERT_NOTIFY_CHANNELS=
|
|
132
|
+
# Lowest severity that is sent: critical | high | watch | info (default high)
|
|
133
|
+
ALERT_NOTIFY_MIN_SEVERITY=
|
|
134
|
+
# Quiet hours in local time as HH:MM-HH:MM, for example 22:00-07:00; critical still goes through, the rest follows as one summary after the window
|
|
135
|
+
ALERT_QUIET_HOURS=
|
|
136
|
+
# Individual messages per sweep, 1-50 (default 5); further alerts are sent as one "+N more alerts" summary
|
|
137
|
+
ALERT_MAX_NOTIFICATIONS_PER_SWEEP=
|
|
138
|
+
# Dashboard address added as a link to every message and accepted as the page origin behind a reverse proxy, for example https://crucix.example.com (http or https, no user:password)
|
|
139
|
+
ALERT_PUBLIC_URL=
|
|
140
|
+
# Without AUTH_USER/AUTH_PASSWORD, alert changes are accepted only via localhost, an IP address, the ALERT_PUBLIC_URL host or these host names (comma list, e.g. crucix.lan)
|
|
141
|
+
ALERT_ALLOWED_HOSTS=
|
|
142
|
+
# ntfy topic URL, for example https://ntfy.sh/your-topic (http or https, no user:password)
|
|
143
|
+
ALERT_NTFY_URL=
|
|
144
|
+
# Optional ntfy access token sent as a Bearer header
|
|
145
|
+
ALERT_NTFY_TOKEN=
|
|
146
|
+
# Webhook URL that receives each alert as a JSON POST (http or https, no user:password)
|
|
147
|
+
ALERT_WEBHOOK_URL=
|
|
148
|
+
# Open alerts allowed per rule, 1-500 (default 50); more hits are counted but not opened
|
|
149
|
+
ALERT_MAX_ACTIVE_PER_RULE=
|
|
150
|
+
# Optional: the User-Agent sent to SEC EDGAR (SEC asks automated clients to declare contact details), for example "Example Org ops@example.org". Printable ASCII, at most 200 characters; empty uses the plain Crucix agent, which SEC accepts
|
|
151
|
+
SEC_USER_AGENT=
|