hmo
9b53ba6872
fix(rdp): disable HW graphics adapter (software rendering) in enable step — DisplayLink/multi-GPU WDDM init conflict is a top cause of 'stuck at configuring'
2026-08-26 02:58:22 +08:00
hmo
345abd782e
fix(rdp): disable NLA by default in enable step — CredSSP pre-auth is the root cause of 'stuck at configuring'; tunnel is already SSH-encrypted
2026-08-26 02:48:32 +08:00
hmo
811d2dd6db
feat(rdp): robust RDP enable — step-machine + deep health check + self-heal + end-to-end verify + live progress & structured log
2026-08-26 02:40:06 +08:00
hmo
7036b667b1
refactor: article_processor as external service, disable wechat_qr_notifier
2026-08-24 05:53:22 +08:00
hmo
df3a630084
fix: disable SenseNova+Kimi usage collectors (CDP consent spam)
2026-08-24 05:40:29 +08:00
hmo
39a73db9b3
feat: WeChat QR get button — trigger container /api/bot/login (DISABLE_AUTO_LOGIN) via POST /api/wechat/trigger-login; show QR block when logged_out even without qr_url
2026-08-17 19:18:36 +08:00
hmo
5a736ddaa8
feat: streaming passthrough for stream=True + first-byte timeout (30s) — distinguish slow upstream (data flowing) vs hung key (no first byte); fix 180s cutoff killing legit 3-8min requests
2026-08-15 20:22:22 +08:00
hmo
a7a42448d4
fix: 5xx (503) and read-timeout now try next key instead of break/fail — key1 down but key6/key5 healthy should succeed; wide 180s per-key timeout only as safety net (no per-request deadline)
2026-08-15 20:10:58 +08:00
hmo
8de5b6ccb6
fix: overall request deadline (180s) + upstream timeout 180->60s — prevent multi-key retry chain hanging 15min (2026-08-15 incident)
2026-08-15 20:04:33 +08:00
hmo
aa0d005925
feat: router firewall — validate model against OCG whitelist + require messages; block client errors before upstream call (prevents rate-limit pollution)
2026-08-15 17:37:39 +08:00
hmo
42bcc4d4ec
fix: return HTTP 400 (not 502) for client ModelError/bad model requests
2026-08-15 17:32:32 +08:00
hmo
a800d5214d
fix: ModelError 401 (bad model name) was cooling all keys -> cooldown avalanche 502; treat as client error, return 400 without cooling
2026-08-15 17:30:33 +08:00
hmo
3becd8ea08
fix: empty_content false-positive on reasoning models — deepseek-v4-flash/pro return content in reasoning_content; only treat as empty when no content AND no reasoning AND not finish_reason=length
2026-08-15 16:56:49 +08:00
hmo
f4af37fe49
fix: Kimi/SenseNova collection fails with utf-8 decode error — SSH output is GBK on Windows; use bytes+errors=replace + PYTHONIOENCODING=utf-8 via cmd /c
2026-08-15 12:51:22 +08:00
hmo
fd71e8ffcd
fix: Kimi/SenseNova usage not auto-refreshed — auto-timer only collected OCG; extract _collect_kimi_usage/_collect_sensenova_usage, refresh every 30min in timer
2026-08-15 12:45:12 +08:00
hmo
936925c74f
revert: Windows now static IP 192.168.1.16 (was .248 DHCP) — restore .16 in configs
2026-08-12 21:51:08 +08:00
hmo
f19f93931a
fix: wechat login status — logged in / message activity takes priority over stale QR text in docker logs
2026-08-12 16:14:05 +08:00
hmo
a83ae177cb
fix: ocg_router error classification — 400 client error no retry, 5xx/Router.Unavailable no longer kill keys into cooldown, client disconnect handled, max parallel 16
2026-08-12 16:08:14 +08:00
hmo
44b77be525
fix: Windows IP changed 192.168.1.16 -> 192.168.1.248 — update dashboard bridge URL, health checks, agents.yaml
2026-08-12 16:07:46 +08:00
hmo
4b838b5a6b
fix: ocg_router single-threaded HTTPServer blocks all requests on large body — switch to ThreadingHTTPServer
2026-08-10 12:56:01 +08:00
hmo
15a97696f7
fix: kanban-handler SKILL.md — replace nonexistent GET /api/kanban/t_xxx with POST :9580/kanban/show + comment/update examples
2026-08-10 12:56:01 +08:00
hmo
a8b46178e3
fix: spec audit — align specs with reality (xmpp_bot 5807, dashboard missing endpoints, article_processor X-Lines, api_proxy capability, health_check JSON escape); fix 5802->5807 across dashboard/health_check/watchdog consumers
2026-08-06 16:48:16 +08:00
hmo
1dd3f9aad5
fix: watchdog revival — port 5807 in registry, skip remote/self-managed services, add to start.bat
...
- service_registry: xmpp_bot port 5802 -> 5807 (matches xmpp_agent_core), fix health_url/log
- xmpp_watchdog: skip services without script or pid_file (dashboard self-managed, gateway_* remote) — previously crashed on open(None)
- start.bat: launch watchdog after xxm bot so crash auto-recovery runs on boot
2026-08-05 09:57:51 +08:00
hmo
afcce956f0
fix: chat_bridge missing import sys -> xmpp_bot crash on startup; RDP/EasyTier bridge offline
2026-08-05 02:22:20 +08:00
hmo
745daaa1a2
fix: Router.Unavailable -> all keys short-cooldown 30s + cooldown error shows cause/expiry
2026-08-04 11:09:27 +08:00
hmo
a83660ebd3
feat: enable/disable OCG keys via Dashboard — disabled keys removed from router pool instantly
2026-08-03 11:45:16 +08:00
hmo
f25a15f3bf
fix: usage collection error no longer kills keys; 401/403 treated as key failure; key3 (renewal cancelled) skipped via accounts.json
2026-08-03 11:21:12 +08:00
hmo
bd87a341dc
fix: strip Transfer-Encoding from proxy response (buffered, not chunked)
2026-08-02 04:25:44 +08:00
hmo
ad40956f33
docs: ocg_router spec file (human help + AI spec)
2026-08-01 14:39:32 +08:00
hmo
e8111a3a59
merge: resolve dashboard.html conflict (keep proxy section)
2026-08-01 12:40:47 +08:00
hmo
79a9264cbd
feat: OCG router proxy — quota-aware 6-key routing
2026-08-01 12:39:35 +08:00
hmo
3e2a74d4d9
fix: SenseNova卡片不再混入OpenCode Go组
...
- accounts.json移除key8/9/10(它们是同一SenseNova账户的3个模型视角,非OCG账号)
否则OCG采集器会把它们当OCG账户采集,前端归到OpenCode Go组
- /api/keys: 注册表外的用量条目(sensenova)以独立provider追加,不进OCG
- 前端provider名映射补sensenova
2026-07-23 22:52:53 +08:00
hmo
0a3986238e
feat: SenseNova Token Plan余量监控(参考OCG/Kimi CDP模式)
...
- usage_collector_sensenova.py: CDP刮platform.sensenova.cn/console三模型余量
(锚定'模型名+换行+数字%剩余'防图例区误匹配)
- dashboard: /api/usage和/api/keys合并sensenova数据; refresh流程加SSH采集+scp回传
- accounts.json注册key8/9/10(同一SenseNova key三模型视角)
2026-07-23 18:23:16 +08:00
hmo
e59c1bcc53
fix: 移除afw-proxy(已废弃试验)+ocg-key顺序由/api/keys配额动态决定
...
- afw-proxy是早期试验代理,老爸确认已废弃,不入链
- ocg-key*按AgentsMeeting/api/keys健康度排序,session_expired跳过
2026-07-23 16:47:28 +08:00
hmo
eddbee968c
fix: provider链白名单与实际config脱节导致模型无响应
...
- 原allowed仅4个provider(deepseek/volcengine/opencode-go*), config里只有deepseek(402欠费)→全链死
- 现按存活度排序: sense-nova(实测可用+tools支持)→deepseek→afw-proxy→ocg-key*
- 模型名: options.model优先, 否则取provider models字典第一个key
2026-07-23 15:54:38 +08:00
hmo
ea193a9881
chore: retire legacy wechat-hermes-gateway xmpp_bot, unify bridge to :5807
...
Old xmpp_bot.py (PID-locked separately) coexisted with new xmpp_agent_core,
causing duplicate JID connections and split bridge traffic (5802 vs 5807).
Deploy scripts now use new bot's :5807 bridge with X-Api-Key auth.
2026-07-23 13:59:11 +08:00
hmo
b3b8c8dec4
fix: RDP health check uses correct 19-byte X.224 packet
...
Yesterday's malformed packet (TPKT len=0x1b mismatch) made health check
always fail -> every enable triggered needless TermService restarts and
false 'STILL FAILING' reports (root cause of 2026-07-23 morning incident)
2026-07-23 13:48:08 +08:00
hmo
6553e51b8b
fix: RDP tunnel status adopts detached/wild tunnels instead of false-disabled
...
- _rdp_find_tunnel_process(): find ssh.exe hosting -R 8080 forwarding via CIM
- _rdp_status(): adopt actual tunnel process when pid file stale/missing
- _rdp_enable(): adopt existing tunnel instead of spawning duplicate that
fails on 'remote port forwarding failed' (8080 occupied)
- Fixes 2026-07-23 incident: tunnel alive but dashboard showed disabled,
repeated enable attempts failed because port was occupied by working tunnel
2026-07-23 13:34:06 +08:00
hmo
8a27d8e847
fix: RDP enable auto-health-restore on handshake failure, anti-Huorong firewall rule
2026-07-22 16:51:52 +08:00
hmo
d7b2ee0460
chore: gitignore rdp_tunnel.pid(运行时产物)
2026-07-21 23:11:04 +08:00
hmo
74496bacd9
chore: set executable bit on cron wrapper scripts
2026-07-21 01:02:50 +08:00
hmo
37bfbad921
feat: add cron wrapper scripts for OCG and Kimi local collectors
...
- ocg_collect.sh: local OCG collection via HTTP+cookies
- kimi_collect_local.sh: local Kimi collection via Playwright CDP
- Replaces kimi_collect.sh (SSH-to-Windows approach)
2026-07-21 01:00:58 +08:00
hmo
c11222e55c
feat: local Kimi collection via Playwright + headless Chrome on 246
...
- usage_collector_kimi_local.py: Playwright connect_over_cdp to local Chrome
- kimi_login.py: interactive login helper for headless Chrome
- Replaces SSH-to-Windows approach, removes single point of failure
- Chrome CDP service: chrome-kimi-cdp.service (systemd)
2026-07-21 00:56:00 +08:00
hmo
2598b286eb
fix: kimi collector crash on CDP error + auto-start CDP proxy + dashboard renewal badge
...
- usage_collector_kimi: guard /targets dict response, auto-start CDP proxy if down
- usage_collector: add subscribed/renewal fields to HTTP+CDP collection
- dashboard: show UNSUBSCRIBED red badge / renewal-cancelled orange badge
2026-07-20 23:18:40 +08:00
hmo
dc3b3d1868
fix: Kimi collector always reloads page for fresh data
2026-07-19 22:17:12 +08:00
hmo
9a6ff4a3bd
fix: refresh endpoint triggers Kimi collector via SSH to Windows + scp result back
2026-07-19 22:12:46 +08:00
hmo
84423565f8
fix: Kimi collector targets correct membership/subscription tab, parses 3 usage metrics with dates
2026-07-19 21:26:40 +08:00
hmo
c1232ed382
fix: OCG output includes provider field + Kimi collector uses membership/subscription page
2026-07-19 21:09:01 +08:00
hmo
bfb6bfba59
fix: OCG collector skips non-opencode_go provider accounts (key7 Kimi was leaking into OCG section)
2026-07-19 20:22:04 +08:00
hmo
e509334ff4
fix: /api/keys reads Kimi usage_stats_kimi.json for key7 data
2026-07-19 19:47:46 +08:00
hmo
7a43fec2b1
feat: multi-provider usage — Kimi collector via CDP, unified /api/usage, frontend grouping
2026-07-19 19:46:08 +08:00
hmo
94f5f9ec92
feat: add /api/keys endpoint — masked API keys with usage data (rolling/weekly/monthly)
2026-07-19 10:53:32 +08:00
hmo
3128db09c6
docs: add TEMPLATE-GUIDE — how to use AgentsMeeting as reference template for new projects or refactoring
2026-07-19 10:19:27 +08:00
hmo
0b345c2ca1
docs: add HEALTH-PIPELINE + DASHBOARD, update DEPLOY/OPS/QUICKSTART/README — Linux 246 as production standard
2026-07-19 10:09:42 +08:00
hmo
94250e9dda
fix: match crontab entries by script filename (underscore) not task name (hyphen)
2026-07-19 09:25:25 +08:00
hmo
0ed048c327
fix: dashboard monitor checks local crontab + dev-spec adds Linux-first deployment rule
2026-07-19 09:24:03 +08:00
hmo
d6950b0982
rewrite: health check, daily health, todo executor for Linux 246 deployment (native tools, no Windows deps)
2026-07-19 09:21:26 +08:00
hmo
1d4f083b10
fix: use 10s timeout for remote service HTTP checks
2026-07-19 09:12:15 +08:00
hmo
b248fc62c5
fix: auto_heal extract service_key from composite key (agent-XXX:name) for SERVICE_UNIT_MAP lookup
2026-07-19 09:10:39 +08:00
hmo
b56b1b3b47
fix: health check PID now advisory-only, remote services skip local port, add ?§ to task entries
2026-07-19 09:05:16 +08:00
hmo
4bba29965f
fix: handle GBK encoding from Windows schtasks output via SSH
2026-07-19 08:20:08 +08:00
hmo
9fca8185a5
fix: monitor endpoint checks Windows schtasks via SSH instead of Linux systemd/crontab
2026-07-19 08:18:54 +08:00
hmo
a87a4e6d5b
fix: skip scheduled entries in Layer 3 loop to prevent duplicate 定时任务 section
2026-07-18 22:29:02 +08:00
hmo
7dc5cc1c74
fix: add missing hermes_gateway + omlx_server specs + all M map spec fields
2026-07-18 13:28:50 +08:00
hmo
0ac756b241
fix: F Tab unique keys per instance + spec buttons + dedup + naming rules
2026-07-18 13:23:43 +08:00
hmo
c43486a6f2
feat: auto_heal.py + api/autoheal + F Tab auto-heal display
2026-07-18 12:28:47 +08:00
hmo
e4a9b7ff55
fix: api_services cross-platform health URLs + frontend isHealthy() accepts online/remote
2026-07-18 11:52:35 +08:00
hmo
944ce33ac4
fix: wechat_bridge 401 false-negative + hermes xmpp_bot filter + M map key
2026-07-18 11:47:15 +08:00
hmo
471a643050
fix: add expected field back for frontend F Tab rendering
2026-07-18 11:38:47 +08:00
hmo
0139e2949d
fix: xmpp type entries check via ejabberdctl JID online status
2026-07-18 11:33:04 +08:00
hmo
7eee60a7cf
fix: _is_local_host helper for EJABBERD_HOST + local IP
2026-07-18 11:30:31 +08:00
hmo
f5edce71c9
fix: F Tab expected dynamic + AGENTS.md encoding + dev-spec sync
2026-07-18 10:39:35 +08:00
hmo
525c53a51a
docs: add 4th red line — implement then sync spec; record learned lesson
2026-07-17 13:18:23 +08:00
hmo
bb26fb4207
chore: add junk file patterns to .gitignore
2026-07-17 00:54:44 +08:00
hmo
f0b2e3f3cc
docs: add architecture diagram + gitignore bot output and temp files
2026-07-17 00:53:42 +08:00
hmo
c3d9f0e661
feat(gateway): 双轨规范体系完善 — 新增 7 个模块 spec (dashboard/xmpp_bot/health_service/watchdog/chat_bridge/session_router/usage_collector) + 修复 3 个已有 spec + dashboard status_reason + Platform ejabberd 集成
2026-07-17 00:33:44 +08:00
hmo
79e8480f3c
fix: remove stale Loading span in Infrastructure tab; add per-service ?/§ for Platform (WeChat Bridge, API Proxy, article_processor) and Ejabberd with dedicated spec files
2026-07-16 22:25:17 +08:00
hmo
c8b641bb65
feat: add ? and § dual-track buttons to Agents, Kanban, Infrastructure tabs
2026-07-16 22:10:53 +08:00
hmo
d1b31dac15
feat: add module spec files for agents, kanban, infra tabs
2026-07-16 22:10:34 +08:00
hmo
6009c20f74
add ? and § dual-track buttons to G/K/F/H tabs + 4 spec JSON files
2026-07-16 18:42:42 +08:00
hmo
7acbe04aa1
F: rework fHealth into 3-layer view (summary + issues + grouped services)
2026-07-16 18:35:58 +08:00
hmo
cf53788627
fix: dev-spec.md API candidate 用 _PROJECT_DIR 确保 path 正确
2026-07-16 18:22:19 +08:00
hmo
8f2f3466b7
fix: dev-spec.md 移入 git 跟踪目录 docs/ + api candidates 更新
2026-07-16 18:19:40 +08:00
hmo
7df8df956e
restructure: 开发原则 Tab 精简为 G+K+F+H + 历史版本 + F 健康视图
2026-07-16 18:17:44 +08:00
hmo
7c2655dc95
fix: display usage timestamp in CST (UTC+8) not UTC
2026-07-15 22:47:21 +08:00
hmo
4e705f30de
fix: create logs dir before FileHandler init (246 compat)
2026-07-15 22:33:57 +08:00
hmo
fefdc29d06
feat: OpenCode Go usage monitor — hybrid collector + 246-centric dashboard
...
- usage_collector.py v3.0: HTTP+stored cookies (primary) + CDP (bonus)
- Cookie keepalive: captures Set-Cookie from responses, saves back to JSON
- Per-metric regex for SSR parsing (handles nested \[N]={...} structure)
- Cache merge: preserves other accounts' data on partial collection
- extract_cookies.py: one-time CDP /cookies endpoint → per-account JSON
- dashboard.py: /api/usage reads local file (no Windows bot dependency)
- /api/usage/refresh: local subprocess collector
- Auto-timer: 5min background thread (cookie keepalive + fresh data)
- xmpp_agent_core.py: /usage endpoint + auto-timer (for local testing)
- dashboard.html: usage-monitor section (4 cards × 3 metrics + alerts)
- accounts.json: 4 accounts configured (key1-4, gitignored)
- .gitignore: cookies/, accounts.json, usage_stats.json
2026-07-15 22:30:20 +08:00
hmo
ac34556588
fix: RDP tunnel SSH auth under LocalSystem — port 5807 + key path search + detached process
...
- http_port 5802→5807: 5802 occupied by wechat-hermes-gateway xmpp_bot, dual-listener caused ~50% request 400s
- _rdp_enable(): DETACHED_PROCESS so tunnel survives bot restart/crash
- ExitOnForwardFailure=yes so dead forward exits immediately instead of hanging
- stderr→rdp_tunnel_ssh.log for diagnosability
- -i explicit key path with multi-home search (LocalSystem ~ = systemprofile, not C:\Users\hmo)
- env injection HOME/USERPROFILE for ssh subprocess
- IdentitiesOnly=yes so -i key is used exclusively
- health_service.py: /health port 5802→5807 (was causing 30s restart loop)
- easytier.json + rdp.json: all 5802→5807 references updated
- rdp.json: add xiaoguo/Mac as RDP participant + architecture participant
2026-07-15 13:30:34 +08:00
hmo
47e323c8fc
refactor(spec): 拆分 easytier-rdp.json 为 easytier.json + rdp.json
...
遵守针对性+完整性原则:
- EasyTier section 的 ?/§ 只显示 EasyTier 内容
- RDP section 的 ?/§ 只显示 RDP 内容
- ai_spec.related_models 互相引用对方
- human_help.related 引用对方入口
dashboard.html:
- EasyTier 按钮调用 showModuleHelp('easytier', ...)
- RDP 按钮调用 showModuleHelp('rdp', ...)
- _renderSpecModal 新增 related_modules 显示, 每个 related 模块可点击跳转
2026-07-15 11:10:28 +08:00
hmo
ef34e6bd1a
feat: co-located module spec prototype (EasyTier/RDP)
...
- specs/easytier-rdp.json: 双层文档 — human_help(人看) + ai_spec(AI看)
- ai_spec 包含: apis, dependencies, architecture, constraints, must_not, tests, related_files
- dashboard.py: 新增 /api/module-spec/<module> 和 /api/module-specs endpoints
- dashboard.html: EasyTier/RDP 标题旁加 ? (人看) 和 § (AI看) 按钮
- 点击 ? 显示使用说明(人话), 点击 § 显示 AI spec(机器可读)
- CSS: .help-btn 圆形按钮, .spec-modal 全屏弹窗
2026-07-15 10:47:39 +08:00
hmo
b11b88887c
merge: 恢复077c649内容(开发原则/K tests/spec/prd paths) + 保留flicker-free EasyTier/RDP + Linux兼容改善
...
- dashboard.html: 应用fI()闪烁修复到077c649版本(create-once/update-state pattern)
- dashboard.py: 新增 /api/tests 端点 (import tests_api)
- dashboard.py: /api/git 改用 git log 命令优先, 降级到 reflog
- dashboard.py: /api/monitor + /api/expected 增加 Linux 支持(systemd timer/crontab)
- dashboard.py: /api/spec + /api/prd 增加 246 venv 路径候选
- dashboard.py: /api/metagrowth git路径探测改善
- 恢复: meta_growth.py, tests_api.py, checklist_audit.py, service_registry.py
- 恢复: sync-venv.sh, post-deploy-check.sh, meta-growth-design.md
2026-07-15 10:10:25 +08:00
hmo
ed165db8c9
fix: EasyTier/RDP sections created once, only state values updated each poll — eliminates flicker
2026-07-15 00:23:14 +08:00
hmo
c63fa0182a
fix: EasyTier/RDP buttons proxy to Windows xmpp_bot via XMPP_BRIDGE_URL (Linux-compatible)
2026-07-14 23:46:42 +08:00
hmo
4e71d5ba85
修复Infrastructure重复: 删除旧版fetchEasyTierStatus/RdpStatus
...
- 旧版函数与fI内的createElement冲突导致重复出现
- 删除旧函数+interval,所有逻辑归入fI
- Playwright验证: 各section出现一次,无闪
2026-07-14 03:38:05 +08:00
hmo
73098176c0
R02修复: 连接检测60s×3→exit→systemd重启
2026-07-14 03:13:53 +08:00
hmo
8a53e13aa1
修复Kanban: 恢复筛选器+卡片+指派者完整视图
2026-07-14 02:58:52 +08:00
hmo
5e7204016e
交付物: 测试套件完成(15/15通过) + 清单更新
...
- 创建tests/test_health_checks.py: 15个测试覆盖Tier1/Tier2/Registry/Watchdog/Executor
- 交付物清单: 测试套件❌ →✅ (已完成)
- 测试内容: pid/port/http/todo/service_registry/watchdog各维度
- 运行方式: pytest tests/test_health_checks.py -v
2026-07-14 02:49:09 +08:00
hmo
d656c3ac8c
自检循环2完成: E表 ⏸️ 修正 + R01→ 🔄
...
- checklist_audit: 支持⏸️ 表格单元格检测
- E元成长表: ❌ →⏸️ (Phase3暂缓)
- 自检报告: 19✅ /3🔄 /6⏸️ /4❌
- 剩余4❌ : R06(架构) + 交付物3项(文档)
2026-07-14 02:49:09 +08:00
hmo
3bd50e70ea
自检循环2: R01 Gateway监控 + 服务树扩展
...
- 新增gateway_mohe:8642 + gateway_zhiwei:8643到服务注册表
- 新增api_services返回2个Gateway的健康状态
- I功能树+J拓扑自动包含Gateway节点
- PRD R01状态: ❌ →🔄 (监控已加,auto-restart待systemd)
2026-07-14 02:49:09 +08:00
hmo
d743b0a274
增强自检: 表格单元格 ❌ 检测 + TODO写入
...
- 新增正则扫描表格中❌ 状态单元格
- 8个缺口写入checklist_gaps.jsonl
- 可被self_todo_executor消费
- 与annotations解析互补,全量覆盖
2026-07-14 02:49:09 +08:00