Files
OpenCode 68a9071cf1 feat: reconcile local master with origin (exa/hot-platform hunters, leaks ledger, latest results)
Local branch had diverged from origin/master (sibling commits on the same base). Rewrote local history linearly on top of origin/master, folding in all local content: exa/hot-platform discovery hunters, leaks ledger, nightly sweep orchestrator, updated .gitignore and skill docs, plus the latest hunt output and vault state. Remote-only files (vault keys, channel scripts) were restored rather than dropped, so the resulting tree is a full union of both sides.
2026-08-07 12:53:47 +08:00

1 line
16 KiB
JSON

{"repo": "bydlokod/bidlobot", "files": {"docker-compose.yml": {"82ba6add18040a47565870fac70cbdcc16c72655": {"t": 1785745242.7546835, "n": 2874, "h": "ffe217d68b29a7d2", "c": "# Production compose for BidloBot.\n#\n# One bot replica plus an internal renderer sidecar. Telegram allows exactly\n# one getUpdates poller per token, so the bot cannot scale horizontally\n# without a webhook front-door. `restart: unless-stopped` plus the 30s\n# stop grace period leave time for the Go process to shut down cleanly.\n#\n# No `ports:` mapping. The host already has 8080 and 8081 occupied by\n# unrelated services (verified before deploy). The healthcheck reaches\n# the listener over the container's own loopback, so no host port is\n# needed - `docker inspect bidlobot` and `docker exec bidlobot wget ...`\n# remain available for operator debugging.\n#\n# Resource limits track the systemd MemoryMax/TasksMax from the bare\n# install path. CPU at 0.5 leaves the host responsive even if a runaway\n# loop appears; a moderation bot is wildly idle in normal operation.\n\nname: bidlobot\n\nservices:\n bot:\n build:\n context: .\n args:\n VERSION: ${VERSION:-dev}\n COMMIT: ${COMMIT:-unknown}\n image: bidlobot:${VERSION:-latest}\n container_name: bidlobot\n restart: unless-stopped\n env_file:\n # The deployment env file carries Telegram and Pi provider variables.\n # Compose passes them directly to the unprivileged bot process; no\n # host credential directory is mounted into the image.\n - ./env\n environment:\n - DEEPSEEK_API_KEY\n volumes:\n - bidlobot-data:/var/lib/bidlobot\n # 30s = App.ShutdownTimeout (10s for handler) + 10s for in-flight\n # WaitGroup + 10s slack for bbolt close. The systemd-era 15s was\n # too tight: a cleanup worker mid-kick can hit retry budgets that\n # individually take >10s, and we want bbolt.Close to land cleanly.\n stop_grace_period: 30s\n init: false # tini already runs as PID 1 inside the image\n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://127.0.0.1:8080/health\"]\n interval: 30s\n timeout: 3s\n start_period: 60s\n retries: 3\n depends_on:\n xshot:\n condition: service_healthy\n deploy:\n resources:\n limits:\n memory: 256M\n cpus: \"0.5\"\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"5\"\n\n xshot:\n build:\n context: ./xshot\n image: bidlobot-xshot:${VERSION:-latest}\n container_name: bidlobot-xshot\n restart: unless-stopped\n environment:\n - PORT=3210\n - WATERMARK_ENABLED=false\n expose:\n - \"3210\"\n healthcheck:\n test: [\"CMD\", \"node\", \"-e\", \"fetch('http://127.0.0.1:3210/api/config').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"]\n interval: 30s\n timeout: 5s\n start_period: 30s\n retries: 3\n deploy:\n resources:\n limits:\n memory: 512M\n cpus: \"0.5\"\n\nvolumes:\n bidlobot-data:\n name: bidlobot-data\n"}, "3560f782bba6832bb38fb7752e3159d9e74dc6ae": {"t": 1785749132.8154929, "n": 2874, "h": "ffe217d68b29a7d2", "c": "# Production compose for BidloBot.\n#\n# One bot replica plus an internal renderer sidecar. Telegram allows exactly\n# one getUpdates poller per token, so the bot cannot scale horizontally\n# without a webhook front-door. `restart: unless-stopped` plus the 30s\n# stop grace period leave time for the Go process to shut down cleanly.\n#\n# No `ports:` mapping. The host already has 8080 and 8081 occupied by\n# unrelated services (verified before deploy). The healthcheck reaches\n# the listener over the container's own loopback, so no host port is\n# needed - `docker inspect bidlobot` and `docker exec bidlobot wget ...`\n# remain available for operator debugging.\n#\n# Resource limits track the systemd MemoryMax/TasksMax from the bare\n# install path. CPU at 0.5 leaves the host responsive even if a runaway\n# loop appears; a moderation bot is wildly idle in normal operation.\n\nname: bidlobot\n\nservices:\n bot:\n build:\n context: .\n args:\n VERSION: ${VERSION:-dev}\n COMMIT: ${COMMIT:-unknown}\n image: bidlobot:${VERSION:-latest}\n container_name: bidlobot\n restart: unless-stopped\n env_file:\n # The deployment env file carries Telegram and Pi provider variables.\n # Compose passes them directly to the unprivileged bot process; no\n # host credential directory is mounted into the image.\n - ./env\n environment:\n - DEEPSEEK_API_KEY\n volumes:\n - bidlobot-data:/var/lib/bidlobot\n # 30s = App.ShutdownTimeout (10s for handler) + 10s for in-flight\n # WaitGroup + 10s slack for bbolt close. The systemd-era 15s was\n # too tight: a cleanup worker mid-kick can hit retry budgets that\n # individually take >10s, and we want bbolt.Close to land cleanly.\n stop_grace_period: 30s\n init: false # tini already runs as PID 1 inside the image\n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://127.0.0.1:8080/health\"]\n interval: 30s\n timeout: 3s\n start_period: 60s\n retries: 3\n depends_on:\n xshot:\n condition: service_healthy\n deploy:\n resources:\n limits:\n memory: 256M\n cpus: \"0.5\"\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"5\"\n\n xshot:\n build:\n context: ./xshot\n image: bidlobot-xshot:${VERSION:-latest}\n container_name: bidlobot-xshot\n restart: unless-stopped\n environment:\n - PORT=3210\n - WATERMARK_ENABLED=false\n expose:\n - \"3210\"\n healthcheck:\n test: [\"CMD\", \"node\", \"-e\", \"fetch('http://127.0.0.1:3210/api/config').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"]\n interval: 30s\n timeout: 5s\n start_period: 30s\n retries: 3\n deploy:\n resources:\n limits:\n memory: 512M\n cpus: \"0.5\"\n\nvolumes:\n bidlobot-data:\n name: bidlobot-data\n"}, "505bfe7e42e9d44f270758fa9007bd290d59811f": {"t": 1785749133.8758483, "n": 2264, "h": "adfa6ebf53be2086", "c": "# Production compose for BidloBot.\n#\n# Single service, single replica. Telegram allows exactly one\n# getUpdates poller per token, so horizontal scaling is impossible\n# without a webhook front-door. `restart: unless-stopped` plus\n# `stop_grace_period: 15s` align with App.ShutdownTimeout (10s) plus\n# slack so SIGTERM reaches tini -> Go runtime cleanly.\n#\n# No `ports:` mapping. The host already has 8080 and 8081 occupied by\n# unrelated services (verified before deploy). The healthcheck reaches\n# the listener over the container's own loopback, so no host port is\n# needed - `docker inspect bidlobot` and `docker exec bidlobot wget ...`\n# remain available for operator debugging.\n#\n# Resource limits track the systemd MemoryMax/TasksMax from the bare\n# install path. CPU at 0.5 leaves the host responsive even if a runaway\n# loop appears; a moderation bot is wildly idle in normal operation.\n\nname: bidlobot\n\nservices:\n bot:\n build:\n context: .\n args:\n VERSION: ${VERSION:-dev}\n COMMIT: ${COMMIT:-unknown}\n image: bidlobot:${VERSION:-latest}\n container_name: bidlobot\n restart: unless-stopped\n env_file:\n # The deployment env file carries Telegram and Pi provider variables.\n # Compose passes them directly to the unprivileged bot process; no\n # host credential directory is mounted into the image.\n - ./env\n environment:\n - DEEPSEEK_API_KEY\n volumes:\n - bidlobot-data:/var/lib/bidlobot\n # 30s = App.ShutdownTimeout (10s for handler) + 10s for in-flight\n # WaitGroup + 10s slack for bbolt close. The systemd-era 15s was\n # too tight: a cleanup worker mid-kick can hit retry budgets that\n # individually take >10s, and we want bbolt.Close to land cleanly.\n stop_grace_period: 30s\n init: false # tini already runs as PID 1 inside the image\n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://127.0.0.1:8080/health\"]\n interval: 30s\n timeout: 3s\n start_period: 60s\n retries: 3\n deploy:\n resources:\n limits:\n memory: 256M\n cpus: \"0.5\"\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"5\"\n\nvolumes:\n bidlobot-data:\n name: bidlobot-data\n"}, "caa8f5567d84951d83feabec3b9e7fbce49fa270": {"t": 1785749134.9848497, "n": 2222, "h": "0fc7022745eb20ae", "c": "# Production compose for BidloBot.\n#\n# Single service, single replica. Telegram allows exactly one\n# getUpdates poller per token, so horizontal scaling is impossible\n# without a webhook front-door. `restart: unless-stopped` plus\n# `stop_grace_period: 15s` align with App.ShutdownTimeout (10s) plus\n# slack so SIGTERM reaches tini -> Go runtime cleanly.\n#\n# No `ports:` mapping. The host already has 8080 and 8081 occupied by\n# unrelated services (verified before deploy). The healthcheck reaches\n# the listener over the container's own loopback, so no host port is\n# needed - `docker inspect bidlobot` and `docker exec bidlobot wget ...`\n# remain available for operator debugging.\n#\n# Resource limits track the systemd MemoryMax/TasksMax from the bare\n# install path. CPU at 0.5 leaves the host responsive even if a runaway\n# loop appears; a moderation bot is wildly idle in normal operation.\n\nname: bidlobot\n\nservices:\n bot:\n build:\n context: .\n args:\n VERSION: ${VERSION:-dev}\n COMMIT: ${COMMIT:-unknown}\n image: bidlobot:${VERSION:-latest}\n container_name: bidlobot\n restart: unless-stopped\n env_file:\n # The deployment env file carries Telegram and Pi provider variables.\n # Compose passes them directly to the unprivileged bot process; no\n # host credential directory is mounted into the image.\n - ./env\n volumes:\n - bidlobot-data:/var/lib/bidlobot\n # 30s = App.ShutdownTimeout (10s for handler) + 10s for in-flight\n # WaitGroup + 10s slack for bbolt close. The systemd-era 15s was\n # too tight: a cleanup worker mid-kick can hit retry budgets that\n # individually take >10s, and we want bbolt.Close to land cleanly.\n stop_grace_period: 30s\n init: false # tini already runs as PID 1 inside the image\n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://127.0.0.1:8080/health\"]\n interval: 30s\n timeout: 3s\n start_period: 60s\n retries: 3\n deploy:\n resources:\n limits:\n memory: 256M\n cpus: \"0.5\"\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"5\"\n\nvolumes:\n bidlobot-data:\n name: bidlobot-data\n"}, "ed5858198476fc8da84f011739ea2ddbff9a2150": {"t": 1785749136.0920358, "n": 2205, "h": "4e29603945153e41", "c": "# Production compose for BidloBot.\n#\n# Single service, single replica. Telegram allows exactly one\n# getUpdates poller per token, so horizontal scaling is impossible\n# without a webhook front-door. `restart: unless-stopped` plus\n# `stop_grace_period: 15s` align with App.ShutdownTimeout (10s) plus\n# slack so SIGTERM reaches tini -> Go runtime cleanly.\n#\n# No `ports:` mapping. The host already has 8080 and 8081 occupied by\n# unrelated services (verified before deploy). The healthcheck reaches\n# the listener over the container's own loopback, so no host port is\n# needed - `docker inspect bidlobot` and `docker exec bidlobot wget ...`\n# remain available for operator debugging.\n#\n# Resource limits track the systemd MemoryMax/TasksMax from the bare\n# install path. CPU at 0.5 leaves the host responsive even if a runaway\n# loop appears; a moderation bot is wildly idle in normal operation.\n\nname: bidlobot\n\nservices:\n bot:\n build:\n context: .\n args:\n VERSION: ${VERSION:-dev}\n COMMIT: ${COMMIT:-unknown}\n image: bidlobot:${VERSION:-latest}\n container_name: bidlobot\n restart: unless-stopped\n env_file:\n # On the deployment host this file lives at /etc/bidlobot/env\n # mode 0640, owned root:bidlobot. Compose bind-mounts it via the\n # path resolved relative to docker-compose.yml.\n - ./env\n volumes:\n - bidlobot-data:/var/lib/bidlobot\n # 30s = App.ShutdownTimeout (10s for handler) + 10s for in-flight\n # WaitGroup + 10s slack for bbolt close. The systemd-era 15s was\n # too tight: a cleanup worker mid-kick can hit retry budgets that\n # individually take >10s, and we want bbolt.Close to land cleanly.\n stop_grace_period: 30s\n init: false # tini already runs as PID 1 inside the image\n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://127.0.0.1:8080/health\"]\n interval: 30s\n timeout: 3s\n start_period: 60s\n retries: 3\n deploy:\n resources:\n limits:\n memory: 256M\n cpus: \"0.5\"\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"5\"\n\nvolumes:\n bidlobot-data:\n name: bidlobot-data\n"}, "874b198c1926d8fbf1975413b2527b933dfb7be6": {"t": 1786068220.2677422, "n": 2874, "h": "ffe217d68b29a7d2", "c": "# Production compose for BidloBot.\n#\n# One bot replica plus an internal renderer sidecar. Telegram allows exactly\n# one getUpdates poller per token, so the bot cannot scale horizontally\n# without a webhook front-door. `restart: unless-stopped` plus the 30s\n# stop grace period leave time for the Go process to shut down cleanly.\n#\n# No `ports:` mapping. The host already has 8080 and 8081 occupied by\n# unrelated services (verified before deploy). The healthcheck reaches\n# the listener over the container's own loopback, so no host port is\n# needed - `docker inspect bidlobot` and `docker exec bidlobot wget ...`\n# remain available for operator debugging.\n#\n# Resource limits track the systemd MemoryMax/TasksMax from the bare\n# install path. CPU at 0.5 leaves the host responsive even if a runaway\n# loop appears; a moderation bot is wildly idle in normal operation.\n\nname: bidlobot\n\nservices:\n bot:\n build:\n context: .\n args:\n VERSION: ${VERSION:-dev}\n COMMIT: ${COMMIT:-unknown}\n image: bidlobot:${VERSION:-latest}\n container_name: bidlobot\n restart: unless-stopped\n env_file:\n # The deployment env file carries Telegram and Pi provider variables.\n # Compose passes them directly to the unprivileged bot process; no\n # host credential directory is mounted into the image.\n - ./env\n environment:\n - DEEPSEEK_API_KEY\n volumes:\n - bidlobot-data:/var/lib/bidlobot\n # 30s = App.ShutdownTimeout (10s for handler) + 10s for in-flight\n # WaitGroup + 10s slack for bbolt close. The systemd-era 15s was\n # too tight: a cleanup worker mid-kick can hit retry budgets that\n # individually take >10s, and we want bbolt.Close to land cleanly.\n stop_grace_period: 30s\n init: false # tini already runs as PID 1 inside the image\n healthcheck:\n test: [\"CMD\", \"wget\", \"--quiet\", \"--tries=1\", \"--spider\", \"http://127.0.0.1:8080/health\"]\n interval: 30s\n timeout: 3s\n start_period: 60s\n retries: 3\n depends_on:\n xshot:\n condition: service_healthy\n deploy:\n resources:\n limits:\n memory: 256M\n cpus: \"0.5\"\n logging:\n driver: json-file\n options:\n max-size: \"10m\"\n max-file: \"5\"\n\n xshot:\n build:\n context: ./xshot\n image: bidlobot-xshot:${VERSION:-latest}\n container_name: bidlobot-xshot\n restart: unless-stopped\n environment:\n - PORT=3210\n - WATERMARK_ENABLED=false\n expose:\n - \"3210\"\n healthcheck:\n test: [\"CMD\", \"node\", \"-e\", \"fetch('http://127.0.0.1:3210/api/config').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"]\n interval: 30s\n timeout: 5s\n start_period: 30s\n retries: 3\n deploy:\n resources:\n limits:\n memory: 512M\n cpus: \"0.5\"\n\nvolumes:\n bidlobot-data:\n name: bidlobot-data\n"}}}}