Codync
免费开源的 1:1 Grok Bot 与 Muse 替代方案。可在 iPhone、Mac 或 Linux 桌面上将 Claude 代码、Codex、Cursor 以及 40 多个编码代理作为持久机器人使用。支持群组聊天、线程、应用。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Open-source GNSS base station reference implementation (u-blox ZED-F9P, RINEX 3.03).
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Software that turns a Raspberry Pi and a u-blox ZED-F9P receiver into an unattended GNSS base station. It records dual-frequency raw measurements continuously, converts each ten-minute UTC slot to RINEX 3.03, and uploads the files to the Xeroth network, where approved users download them for post-processed (PPK) positioning.
The guide for building one, joining the network and getting data is the
site at base.xeroth.ai, whose source is the
site/ folder of this repository.
Built for a station somewhere unattended on an intermittent link: capture never stops for the network, uploads catch up when the link returns, a watchdog restarts capture if it stalls, and a disk guard keeps the card from filling.
+------------------+
| gnss-capture | <-- systemd unit; resident str2str
| (str2str) | writes UBX with -f 30 swap margin
+--------+---------+ to logs/raw/%Y%m%d%h%M.ubx
|
v
+------------------+
| logs/raw/ | <-- 10-minute closed-slot UBX files
+--------+---------+
|
v cron 1 min
+------------------+ convbin -v 3.03 -f 2 -r ubx
| upload_worker | inject APPROX POSITION XYZ
| | PUT to base.xeroth.ai/v1 with the
+--------+---------+ station's key (or gcloud storage cp
| for Xeroth's own stations);
v delete local copy once stored
+------------------+
| Xeroth network | <STATION_ID>/<YYYY>/<DOY>/...
+------------------+
In parallel:
gnss-health.service exposes a JSON /health endpoint on
http://${TAILSCALE_IP}:8080/ (only if Tailscale is installed). Returns
HTTP 200 / status: "ok" when capture, upload, disk and OTA state check out;
HTTP 503 / status: "degraded" with a reasons array otherwise.gnss-watchdog.sh runs every minute; restarts gnss-capture.service
if str2str has stalled.gnss-disk-guard.sh runs every 5 minutes; protects the 3 newest
closed slots + the live slot, deletes older raw files when disk
free falls below threshold.gnss_update_agent.sh (Xeroth's own stations only, which can read
the private release bucket) runs every 10 minutes; polls
gs://${RELEASE_BUCKET}/base_station/channels/${CHANNEL}.version,
fetches and SHA-256 verifies the tarball when the pointer moves,
invokes a narrowly-scoped sudo wrapper (apply_update.sh) to
install. Failed installs leave the previous version running.The full design is in docs/OPERATIONS.md.
Follow base.xeroth.ai/build. In short,
on a Raspberry Pi with a user called xeroth, RTKLIB's str2str and
convbin in /usr/local/bin, and the receiver's UART1 on /dev/ttyUSB0:
mkdir -p /home/xeroth/base_station/scripts
cp station-configs.example/example.conf /home/xeroth/base_station/scripts/station.conf
# edit station.conf: STATION_ID, UPLOAD_KEY, and the surveyed antenna position
sudo ./install.sh
Xeroth's own stations upload with a Google Cloud service account instead
of a key; docs/runbooks/DEPLOY.md covers that.
install.sh idempotent installer
payload/scripts/ upload worker, receiver set-up, OTA agent and its sudo wrapper
payload/hardening/ watchdog, disk guard, /health server
payload/systemd/ gnss-capture.service, gnss-health.service
station-configs.example/ station.conf template
tests/bats/ tests for every shell entry point
site/ base.xeroth.ai (static pages)
worker/index.js the Cloudflare Worker serving site/ and passing the
network's own paths to its service
wrangler.jsonc Worker configuration
docs/, infra/ operations, runbooks, Xeroth's buckets and releases
npx wrangler@4 dev # local preview
npx wrangler@4 deploy # publish base.xeroth.ai (Xeroth's Cloudflare account)
payload/scripts/apply_update.sh has a frozen contract. The
sudoers fragment installed by install.sh whitelists exactly:
${USER} ALL=(root) NOPASSWD: \
/home/xeroth/base_station/scripts/apply_update.sh \
/home/xeroth/base_station/staging/*/base_station
Changing the staging path shape, or changing the wrapper's argument contract, breaks the very next OTA on every station already running this code. The wrapper is intentionally minimal and parameter-free for this reason. Other parts of the codebase can evolve; this one cannot, except via a deliberate flag-day migration co-ordinated across the entire fleet.
Apache-2.0. See LICENSE. RTKLIB (BSD) and the gcloud CLI
are run as separate programs; neither is vendored.