Addresses PR review: escape Markdown-sensitive characters in
_formatTieredAlert signal bullets to prevent Telegram Bot API
rejections, and add a 1500-char budget for URGENT_OSINT in
compactSweepForLLM to bound prompt size while keeping full text upstream.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The prior fix (753c676) only removed truncation at source ingestion and
alert formatting. Signals were still being cut to 120 chars in the delta
engine, 80 chars in memory snapshots, and 120 chars in the ideas LLM
context — so OSINT posts arrived at the alerter already truncated.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Posts were being cut to 300 chars (source ingestion) and 150 chars
(alert evaluation), losing valuable OSINT context. The sendMessage
chunker already handles the 4096-char Telegram API limit.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add i18n module with locale loading and translation helpers
- Add English (en) and French (fr) locale files with comprehensive translations
- Inject locale data into dashboard HTML via server
- Add /api/locales endpoint for locale info
- Add t() translation function to dashboard
Translated elements:
- Boot sequence (initialization, connecting, sweep complete)
- Header pills (sweep, sources, delta, risk indicators)
- Left rail panels (sensor grid, nuclear watch, risk gauges, space watch)
- Layer names and descriptions
- Map legend items
- Lower panels (news ticker, sweep delta, macro+markets, trade ideas)
- Right rail (OSINT stream)
- Badges and status indicators
Supported languages: English (default), French
Set CRUCIX_LANG=fr to switch to French
Restrict command handling to TELEGRAM_CHAT_ID again to prevent arbitrary private chats from executing privileged bot commands. Keep reply routing, @BotName parsing, and long-message chunking while scoping setMyCommands to the configured chat only.
Made-with: Cursor
- Call setMyCommands on startup for private and group chat scopes
- Parse /cmd@BotName in groups; reply to originating chat
- Allow sendMessage chatId override for command replies
Made-with: Cursor
Add MiniMax (api.minimax.io) as a fifth LLM provider option alongside
Anthropic, OpenAI, Gemini, and Codex. MiniMax offers an
OpenAI-compatible Chat Completions API with the M2.5 model (204K
context window).
Changes:
- lib/llm/minimax.mjs: new provider using raw fetch (no SDK)
- lib/llm/index.mjs: register MiniMax in the factory
- .env.example, crucix.config.mjs, README.md: document the new option
- test/llm-minimax.test.mjs: 10 unit tests (node:test)
- test/llm-minimax-integration.test.mjs: live API integration test
Usage:
LLM_PROVIDER=minimax
LLM_API_KEY=sk-...
LLM_MODEL=MiniMax-M2.5 # optional, this is the default
26-source OSINT intelligence engine with live Jarvis dashboard,
auto-refresh via SSE, optional LLM layer (4 providers), delta/memory
system, and Telegram breaking news alerts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>