[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-75487":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":8,"rankLanguage":8,"license":8,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":8,"pushedAt":8,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":16,"lastSyncTime":26,"discoverSource":27},75487,"charon","yunus-0x\u002Fcharon","yunus-0x",null,"JavaScript",155,131,70,5,0,1,2,86,3,51.96,false,"main",[],"2026-06-12 04:01:18","# Charon\n\nCharon is a Telegram trench agent for screening noisy Pump-token flow with overlap signals, strategy gates, LLM selection, and dry-run\u002Fconfirm\u002Flive execution.\n\n# ALERT\nThis Codebase is on testing-period, developer doesn't guarantee of any result.\n\n\n## Flow\n\n1. Charon polls the Charon signal server every `SIGNAL_POLL_MS`.\n2. The active strategy gates source count, fee requirement, token age, market cap, holders, fees, trend quality, ATH distance, and position caps.\n3. Passing candidates are enriched with token info, Jupiter asset\u002Fholders\u002Fchart data, saved-wallet exposure, and fxtwitter narrative when available.\n4. The LLM screens up to `LLM_CANDIDATE_PICK_COUNT` recent candidates and may pick one `BUY`.\n5. Charon routes approved buys through `dry_run`, `confirm`, or `live`.\n6. Open positions are monitored every `POSITION_CHECK_MS` for TP, SL, trailing TP, max hold, and partial TP rules.\n\n## Access\n\nCharon requires a signal server URL and API key. The signal server aggregates fee-claim, graduated, and trending data from Pump.fun in real time — without it Charon has nothing to screen.\n\nTo get access, contact the maintainer. Once you have credentials, set them in `.env`:\n\n```env\nSIGNAL_SERVER_URL=https:\u002F\u002Fapi.thecharon.xyz\u002Fapi\nSIGNAL_SERVER_KEY=your_key_here\n```\n\n## Install\n\n```bash\ngit clone git@github.com:yunus-0x\u002Fcharon.git\ncd charon\nnpm install\ncp .env.example .env\n```\n\nEdit `.env` with your credentials, then run:\n\n```bash\nnpm start\n```\n\nFor PM2:\n\n```bash\npm2 start index.js --name charon\npm2 save\n```\n\n## Required Config\n\n```env\nTELEGRAM_BOT_TOKEN=\nTELEGRAM_CHAT_ID=\n```\n\n`TELEGRAM_CHAT_ID` is the chat or group ID where Charon sends alerts and accepts commands. Only messages from this chat are processed.\n\nSignal server (required — see [Access](#access) above):\n\n```env\nSIGNAL_SERVER_URL=https:\u002F\u002Fapi.thecharon.xyz\u002Fapi\nSIGNAL_SERVER_KEY=\nSIGNAL_POLL_MS=30000\n```\n\nRPC endpoint (required for live execution):\n\n```env\nSOLANA_RPC_URL=https:\u002F\u002Fmainnet.helius-rpc.com\u002F?api-key=YOUR_KEY\nSOLANA_WS_URL=wss:\u002F\u002Fmainnet.helius-rpc.com\u002F?api-key=YOUR_KEY\n```\n\nIf `SOLANA_RPC_URL`\u002F`SOLANA_WS_URL` are not set, Charon falls back to Helius mainnet URLs and requires:\n\n```env\nHELIUS_API_KEY=\n```\n\n## GMGN Enrichment\n\n```env\nGMGN_ENABLED=true\nGMGN_API_KEY=\n```\n\nGMGN enriches candidates with holder count, liquidity, fee data, and social links. Set `GMGN_ENABLED=false` to skip it — Charon falls back to Jupiter\u002Fserver data and the status line shows `off`. GMGN has aggressive rate limits; keep `GMGN_REQUEST_DELAY_MS` at 2500+ ms.\n\n## LLM Config\n\n```env\nENABLE_LLM=true\nLLM_BASE_URL=https:\u002F\u002Fapi.minimax.io\u002Fv1\nLLM_API_KEY=\nLLM_MODEL=MiniMax-M2.7\nLLM_TIMEOUT_MS=60000\nLLM_CANDIDATE_PICK_COUNT=10\nLLM_CANDIDATE_MAX_AGE_MS=600000\n```\n\n`LLM_BASE_URL` accepts any OpenAI-compatible endpoint. The default is MiniMax M2.7, which is fast and cheap for this use case. OpenAI (`https:\u002F\u002Fapi.openai.com\u002Fv1`), Groq, and local Ollama endpoints all work — just set the matching `LLM_MODEL`.\n\nSet `ENABLE_LLM=false` to disable LLM globally. Individual strategies also have a `use_llm` flag — strategies with `use_llm: false` (e.g. `degen`) auto-approve any candidate that passes filters without calling the LLM.\n\nEach strategy has its own `llm_min_confidence` threshold. Configure it from `\u002Fmenu → Strategy`, or:\n\n```bash\n\u002Fstratset sniper llm_min_confidence 70\n```\n\n## Execution Modes\n\n```env\nTRADING_MODE=dry_run\n```\n\n- `dry_run`: stores simulated buys\u002Fsells in SQLite. No wallet needed.\n- `confirm`: sends a Telegram trade intent with approve\u002Freject buttons. Executes live only after you confirm.\n- `live`: signs and executes Jupiter Ultra swaps immediately after strategy and LLM approval.\n\nLive and confirm modes require:\n\n```env\nSOLANA_PRIVATE_KEY=\nJUPITER_API_KEY=\nJUPITER_SWAP_BASE_URL=https:\u002F\u002Fapi.jup.ag\u002Fswap\u002Fv2\nLIVE_MIN_SOL_RESERVE=0.02\n```\n\n`LIVE_MIN_SOL_RESERVE` is the minimum SOL kept in the wallet after any buy. Charon refuses to execute if the balance would fall below this.\n\nSwaps use Jupiter Ultra mode — slippage and routing are handled automatically by Jupiter. No manual slippage config needed.\n\n## Strategies\n\nUse `\u002Fmenu → Strategy` or commands:\n\n```bash\n\u002Fstrategy\n\u002Fstrategy sniper\n\u002Fstrategy dip_buy\n\u002Fstrategy smart_money\n\u002Fstrategy degen\n\u002Fstratset sniper tp_percent 75\n```\n\nDefault strategies:\n\n- `sniper`: fee-claim overlap, immediate entry, LLM on.\n- `dip_buy`: waits for ATH-distance dip alerts.\n- `smart_money`: stricter holder\u002Ftrending quality, partial TP support.\n- `degen`: lower source threshold, rule-based (no LLM).\n\nStrategy settings are stored in SQLite and hot-read. Menu changes apply without restart.\n\n## Telegram Commands\n\n```bash\n\u002Fmenu\n\u002Fstrategy\n\u002Fstratset \u003Cstrategy_id> \u003Ckey> \u003Cvalue>\n\u002Fpositions\n\u002Fcandidate \u003Cmint>\n\u002Ffilters\n\u002Fpnl\n\u002Flearn \u003Cwindow>\n\u002Flessons\n\u002Fwalletadd \u003Clabel> \u003Caddress>\n\u002Fwalletremove \u003Clabel>\n\u002Fwallets\n```\n\n## Storage\n\nCharon uses `charon.sqlite` as source of truth. It stores:\n\n- candidates and filter results\n- LLM decisions and batches\n- decision logs\n- dry-run\u002Flive positions and trades\n- trade intents\n- saved wallets\n- strategy configs\n- price alerts\n- learning runs and lessons\n\nOpen positions resume monitoring after restart.\n\n## Verification\n\n```bash\nnpm run check\n```\n\n## Config Reloading\n\nSQLite\u002Fmenu settings are hot-read by the bot. API keys, wallet key, RPC URLs, Jupiter base URL, and polling intervals are `.env` values and require restart.\n\n## API Usage Notes\n\n- **GMGN**: Rate-limited. Keep `GMGN_REQUEST_DELAY_MS=2500` or higher. Running many instances or lowering the delay will get your key banned.\n- **Jupiter**: `fetchJupiterAsset` and `fetchJupiterHolders` are called per candidate and per position refresh cycle. At high throughput, you may hit 429s — Charon backs off automatically and retries from cache.\n- **Helius RPC**: Position monitoring polls every `POSITION_CHECK_MS` (default 10s). Use a paid Helius plan for live trading; free tier will throttle under load.\n- **LLM**: One API call per batch cycle (up to `LLM_CANDIDATE_PICK_COUNT` candidates per call). MiniMax M2.7 is the most cost-efficient default for this prompt shape.\n\n## Notes\n\n- Live execution uses `@solana\u002Fweb3.js` v1 (legacy SDK). It works, but a future version may migrate to `@solana\u002Fkit`.\n- The position monitor sends a Telegram alert after 3 consecutive failures on any polling loop.\n","Charon 是一个用于筛选Telegram上噪音泵币流的代理工具，通过重叠信号、策略门控、LLM选择以及干运行\u002F确认\u002F实时执行等功能来优化交易决策。其核心功能包括定期从信号服务器获取数据，并基于一系列参数如费用要求、代币年龄、市值等进行筛选；进一步利用LLM（大型语言模型）对候选项目进行深度分析以决定是否购买；支持多种执行模式确保交易灵活性与安全性。该项目特别适用于需要自动化监控和管理加密货币投资组合的场景，尤其是在频繁变动的市场环境中寻找短期投资机会时。请注意，当前代码库仍处于测试阶段，开发者不对结果作出保证。","2026-06-11 03:52:56","CREATED_QUERY"]