Repository navigation
Releases: 8-Sync-Dev/8sync
Release list
v0.108.3
Fixed
- HQ "Chạy liên tục" no longer widens auto to every project. HQ's button runs a plain
8sync ccc auto on, which used to drop the--hereprojects. Live, it turned "ai-game-studio + 3d-game" into "mọi dự án", so auto's lease, critic and nudges covered sessions in every folder on the machine. A plainonnow resumes the projects auto last held, also afterpause; the firstonever still covers every project.auto on --allwidens on purpose, andoffforgets the list.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
Full Changelog: v0.108.2...v0.108.3
v0.108.2
Owner (2026-10-20): "sao nó cứ mở nhầm folder cần làm không vậy 3d-game mà sao vô sai". He ran mkdir 3d-game; cd 3d-game; 8sync ccc auto up "…" inside the cluster repo 8sync-startup. The folder had no .git, so the project root resolved to 8sync-startup: the card went onto 8sync-startup's board, the rooms opened there, and the lead name resumed an older ai-game-studio conversation in which the owner then typed messages meant for 3d-game.
Fixed
- New folder inside a repo = its own project.
ccc auto up,auto addand session opens (8sync ccc . <name>,new, bare.) in a folder the enclosing repo does not track (no tracked file, no submodule entry under it) now rungit init -b mainthere plus an empty first commit, and say so. Board, rooms and sessions then belong to that folder. Subfolders the parent tracks (apps/x), uninitialised submodules, Claude Code worktrees and read-only verbs are untouched. auto statusnames every running project. With two teams on (auto on --herein two repos), the line said "chỉ dự án " only. It now lists all of them.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
Full Changelog: v0.108.1...v0.108.2
v0.108.1
Live UAT of 0.108.0 on ai-game-studio (6 rooms relaunched 01:23 VN, 33 min): 156 calls/h and 15.6M context tokens/h (0.105 window: 1,062/h and 114M/h), wrong-role returns 1 (was 10), conflict returns 0 (was 10), 4 tool errors (was 58). Fixes for what the UAT still showed:
Fixed
- Unknown role tags. A card tagged
[art-director]counted as untagged, so a dev room took it (#134). A role tag the team has no room for is now a role with no room: never handed out, listed byauto lint/board.[hot-fix],[follow-up],[wip],[bug],[feature],[chore]and[p0]–[p3]are not roles. - "Conflict" right after a push. GitHub reports
mergeable: UNKNOWNfor a few seconds after a push, and the board refused the move as a conflict (#147 passed 45 s later). The board re-reads UNKNOWN up to 3 times, then says GitHub is still computing it (no bounce). Only CONFLICTING is a conflict. - Ship question at once. The lead went into
auto waitafterauto mergerefused for missing permission and asked the Ship question 8.7 min later. The refusal now prints the exact question (header Ship, options, every approved card and PR), and the lead asks it in the same turn. - Wait length from the room's own Bash limit. dev rooms still ran
auto wait --timeout 540.auto waitnow defaults to 1800 s whenBASH_MAX_TIMEOUT_MSallows it (rooms started byauto up/revive), else 540 s; room texts run plainauto wait --json. ccc riskon a stale base. With an unfetchedorigin/main, PR 116 (84 files) was read as 177 files includingci.yml, so every gate skill ran.ccc riskfetches the base (20 s limit) and diffs against the merge-base; when the fetch fails it says the base may be stale.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
Full Changelog: v0.108.0...v0.108.1
v0.108.0
Owner (2026-10-20): "quay lại nâng cấp ccc đi uat đi sao mà nó dở quá luôn á auto kém chất lượng kết quả đạt chậm". Measured on ai-game-studio, 71 min after the 0.105.0 relaunch (9 rooms, 1,264 API calls):
- 14 cards were approved and 2 PRs merged; 15 approved cards waited 3.4–4.8 h.
- 25 of 59 open PRs conflicted and 14 sat on a branch other than main.
- 10 of 33 returns were a room getting another role's card.
- The team ran at 1,068 calls/h, 3.8× the day before. The Claude session limit had stopped every room 3 times in the 36 h before, 191 min in all.
- GitHub Actions on that repo had failed on billing for 12 h, and nothing told the owner.
Added
8sync ccc auto merge. It merges approved cards in code, with no model turn. Each card's PR must target the repo's default branch (gh repo view, cached a day; when it can't be read, nothing moves), be MERGEABLE, and have the card's SHA as head. It merges with--squash --delete-branch --match-head-commitand closes the card withmerged <sha>. A stacked card runs after its root. A PR whose base branch was already merged is retargeted and sent back toreview, so its new diff is reviewed before it merges. A conflict, a moved head, or another base sends the card back toreadywith the reason. The lead runs it first on every turn, and itsauto waitwakes on a new approved card.- Merge permission per project. It used to be stored per session, so the 19:40 relaunch dropped it and the merge guard then refused lead's
gh pr merge. The owner's answer is now stored per project root for at most 8 h in~/.local/state/8sync/ccc/grants/self-merge.projects.json, andauto status --jsonshows it asself_merge.- What grants it: only an option label the owner picked, read back from Claude Code's own transcript under
~/.claude/projects/every time the permission is used. The label must be "Tự merge…" / "Self-merge…" / "Auto-merge…" on any question, or "Duyệt tất cả" / "Chỉ merge" on aShipquestion. Free text and labels with a negation (không, chưa, tắt, no, not, off, later, sau) grant nothing. - Revoking: any other
Shipanswer revokes it. - Forgery: a hand-written store entry grants nothing. The guard also denies writes to the store, including through
..paths. - The guard allows exactly
gh pr merge <number> [--squash|--merge|--rebase] [--delete-branch] --match-head-commit <card sha>, only for a PR of an approved card whose base is the default branch.
- What grants it: only an option label the owner picked, read back from Claude Code's own transcript under
8sync ccc auto reopen <id> [--note]. A card closed by mistake goes back to the lane it came from, keeping its notes, SHA and PR.8sync ccc auto ci [--json]andciinauto status:ok,failing,billingorunknown, from the last 5gh runresults plus the annotations of the newest failed run. The reading is cached 10 min, and status never runsghitself.billing(payments failed or spending limit) shows in HQ's Office header and in status text, sends one owner alert a day, and tells rooms not to wait on CI.8sync ccc risklists the skills to call (skills; docs-only diff →/sec).
Changed
- The board checks the PR, not just the text.
- Moving a card into
qaorapprovedreads its PR withgh pr view(20 s limit). It refuses a base other than the default branch, a conflicting PR, an already-merged PR, a head different from--sha, or agherror. doneneeds evidence with a SHA or the<lệnh>: <kết quả>shape. "chưa" no longer closes a card.- Leaving
blockedkeeps the bounce count.blocked → reviewneeds agate <sha>note matching the current head.
- Moving a card into
- Cards go to the right role. A card's role comes from the tag at the start of its title (
[ui],[dev],[rd], …) or--roleonadd/move.- In
ready, dev rooms (dev, dev2, backend, core, …) get only[dev]or untagged cards, and ui rooms only[ui]or untagged. - Cards for a role no building room takes (
[game-designer],[art-director], or[rd]/[arch]sitting inready) are never handed out;auto lintandauto boardlist them for the lead. The team is the registered rooms plus the live Claude Code rooms of the project, so rooms HQ reopened count. - Adding or relabelling an
[arch]card wakes the arch room once, and so does an arch card moving intoreview.
- In
- Fewer turns spent polling:
- Rooms started by
auto up/revivewait inauto wait --timeout 1800(their settings raiseBASH_MAX_TIMEOUT_MS). Other rooms keep the 540 s default under Claude Code's 10-min Bash limit. A wake with a card claims it and works on it in the same turn, and a lead woken bymergerunsauto merge. - The cron backup runs every 30 min (was 10), and
--looprefuses less than 30 min. Rooms without a lane (arch, rd, ops, docs, sec) get no cron and no HQ auto-tick; they work on cards and messages only. - HQ's auto-tick skips a session that has its own cron for 35 min after its last turn, and skips lane-less rooms entirely.
auto on/pause/offclears those marks.
- Rooms started by
- Gates run once:
/shipand the lead's merge call8sync ccc riskand run only the skills it lists, instead of/sec+/rules+/aup-auditon every PR.- QA runs the test gate once per PR head SHA and records
gate <sha>: <lệnh>: <kết quả>on the card; review and lead reuse it until the head changes.
- The QA room runs on Sonnet (was Haiku): it gates visual UAT, and it had bounced cards that review then judged differently.
Removed
- OmniRoute. Owner (2026-10-20): "xóa sạch omniroute, ảnh github,… all liên quan omniroute cho lành nhé sài ccc chính chủ được rồi". The free providers it could route (LLM7, Gemini Free) never carried one omp turn, and both train on prompts. Gone:
scripts/vps/omniroute/and.github/workflows/omniroute-image.yml;- on the VPS: the container and its data volume,
/srv/apps/omniroute, the/router-aiCaddy routes and theirimport, theomniroute-updateandvps-cleantimers; - on GitHub: the
omniroute-router-aiGHCR package and its workflow runs; the org's "public packages" setting is back off; - locally: the
omnirouteprovider in omp'smodels.yml, the guide and PDF; the LLM7 and Gemini keys made for it were deleted. --modelexamples inccc auto omphelp and errors now read<provider>/<model>. Theccc auto omp on --modelfeature itself stays: it works with any non-Claude omp provider.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
- v0.108.0: ccc auto lands approved work, board checks PRs and roles, fewer polling turns, CI billing health; remove OmniRoute by @8syncdev in #128
Full Changelog: v0.107.0...v0.108.0
v0.107.0
Added
- HQ native core.
8sync hq uinow also serves a loopback JSON core (random port + token, handed to the web server asHQ_CORE/HQ_CORE_TOKEN, never passed on to rooms): theclaude agentslisting behind a fingerprint cache (re-run only when a session/job file changes or a room's pid dies, ≤ 30 s),8sync ls --allrows from warm transcript digests (only appended lines are read), boards and the awake probe in process, a 5 s machine sampler (GetSystemTimes, GlobalMemoryStatusEx, Toolhelp working sets, NVML, PDH RAPL energy; Linux /proc + powercap) instead oftasklist/nvidia-smi/typeperfper request, the Hạn mức transcript scan, and the project size walk. Without the core (anext devserver) every route keeps its own probe. One client, 60 s: HQ node 5.5 → 4.0 s CPU, RSS 181 → 132 MB (plus ~1.3 s in the core), and noclaude agents/tasklist/8sync lsprocess per poll; office 349 → 87 ms, board 386 → 108 ms, machine 1405 → 546 ms. - HQ sidebar: Đóng phòng / Xóa phòng. Each room row has a "⋯" menu (always shown on phones, 44 px). Đóng phòng runs
claude stop(conversation kept, "Mở team" resumes it; tmux kill for hq-* rooms); Xóa phòng looks up the registry entry bound to that session first, then runsclaude stop,claude rm(drops its own worktree unless it holds unpushed commits) and8sync ccc . rm <name>from the folder whose registry holds it, which deletes the transcript, and the confirm says so. An entry it cannot remove (none found, its folder went with the worktree,rmfailed) comes back as a warning toast, not a success. Both confirm with the room's state (waiting on the owner, working, stuck).POST /api/sessions/[name]/end {action}; omp rooms and terminals the owner opened are refused. - HQ sidebar: Đóng dự án. The project "⋯" hides a project (HQ state,
hidden_projects, carried on/api/office); it comes back by itself when a room waits on the owner, is stuck, or does anything after the close. "Hiện dự án đã đóng (N)" lists them with "Hiện lại", and the toast has an undo. - HQ sidebar: Xóa worktree. For a project folder that is a git worktree (like
card-113-devunder.claude/worktrees): the confirm reads git first and refuses with the reasons when a room still runs inside, it is locked, another worktree sits inside, files are uncommitted, or commits are not merged into the main branch or not pushed; never the main repo. Thengit worktree remove <path>from the main worktree, never--force; the branch stays. "Đóng N phòng" in the dialog clears the live-room guard. Roots come from HQ's own project list, never from the request (GET|POST /api/projects/worktree). - OmniRoute on the VPS at
https://vps.8syncdev.com/router-ai, no port in any URL (scripts/vps/omniroute/,.github/workflows/omniroute-image.yml). Owner (2026-10-19): "cài OmniRoute lên ovh vps có trang /router-ai … auto update … auto clean rác", then "url web ovh không được lộ port".- Image. The workflow builds each upstream release with
OMNIROUTE_BASE_PATH=/router-ai, using upstream's own publish settings (webpack, 12 GB build heap). It pushesghcr.io/8-sync-dev/omniroute-router-ai:<tag>and:latest, daily at 01:00 VN. - Why a custom build. Next.js fixes basePath at build time. The upstream images' start-up patch (v3.8.51) leaves client-side links and lazy chunks at the root, so the dashboard broke under a subpath. Serving the dashboard on its own port was rejected by the owner, and DNS for a subdomain was blocked by Vercel's fair-use limit.
install.sh. Runs from the PC with Git Bash: it copies the files, runssetup.shon the VPS, then runs live checks. These cover the gate on the dashboard, a 401 on the API without a key, the HQ link unchanged, and port 8444 closed.setup.sh. Idempotent:- generates the secrets once (
.env, 600); - starts the container: 2 GB memory, 1 GB heap, no host port;
- adds
import /sites/*.routesto the main site once and installsrouter-ai.routes, where/router-ai/v1/*is open (OmniRoute API keys are the lock) and the dashboard sits behind the same GitHub gate as HQ plus OmniRoute's own password; - validates Caddy with every real site file in a throwaway container, and restores the previous files if the reload fails;
- retires the first install's
:8444site from the edge compose, the oauth2-proxy allowlist and ufw.
- generates the secrets once (
omniroute-update.timer(daily 04:00 VN) pulls the compose image. It tags the running imageomniroute:rollbackbefore pulling, then recreates the container. It rolls back when creation fails or the container is not healthy within 3 minutes, and it records that image id and skips it afterwards. The compose tag always ends on an image that runs.vps-clean.timer(daily 04:40 VN) removes stopped containers older than 3 days, unused images and build cache older than 7 days, journald beyond 300 MB / 14 days, and the apt cache. It never touches volumes,/srv,/homeor the CI caches.- Combo for omp. OmniRoute combo
omp-manh(GLM-5.3-Flash → DeepSeek-V4-Flash → MiniMax-M2.7 → gpt-oss-20b, priority) is wired into omp asomniroute/omp-manh. All four steps share one LLM7 free key, so its daily token quota stops the whole combo. One omp turn with tools used it up in UAT (429 "Daily token quota exceeded"), so another provider is needed before agents can rely on it. - Referer rule. The
/router-aibuild still sendsfetch('/api/…')and<img src="/providers/…">without the basePath.router-ai.routesredirects page loads and rewrites fetches and images whose Referer is a/router-aipage, and leaves/sw.jsalone so the PWA worker never takes scope/over HQ. A fresh login lands on/router-ai/homewith 67 requests and none failing. - Shared lock. The update and cleanup scripts share
/run/lock/8sync-docker.lock. - Claude. Claude models resold by others (LLM7
claude-*) are hidden. omp's OmniRoute key is limited to the free LLM7 models and combos; any other model returns 403. - Owner guide:
Downloads/OmniRoute-huong-dan.pdf.
- Image. The workflow builds each upstream release with
Changed
- Lead merges stacked PRs in order. The lead's approved-card step (
BACKLOG_FIRST) never merges into a base other than main. Once the root PR is on main, it runsgh pr edit <pr> --base mainand merges; otherwise it merges the root first. UAT on ai-game-studio found 13 open PRs based on other branches, and PR 103 merged intocard-125-ui-paletteinstead of main. That repo also getsdelete_branch_on_merge, so GitHub retargets dependent PRs when a base merges. - omp team on any non-Claude model:
8sync ccc auto omp on --model <provider/model>(also--omp-modelonauto on --omp/auto up --omp) stores the team model in auto.json; the team is blocked only when that model (else omp's default) isanthropic/…, so anomniroute/<combo>team runs while the owner's omp default stays a Claude login. Rooms open with8sync . omp-<role> --model <m>(new--modelon8sync . <name>);auto status --jsonaddsomp_model. The omp extension sends its live model toauto nudge --model; a room onanthropic/…gets no nudge, and a nudge without--modelis still judged by omp's global default.- The whole session runs on that model. A session started with
--modelgets the same model for--smol,--slowand--plan, and no--advisor. Before this, the launch added 8sync's role flags (--plan opus --slow opus) and the advisor, which runs on omp'smodelRoles.advisor(anthropic/claude-opus-5-5:max). A room "on" OmniRoute would have sent part of its calls to the Claude login. Checked on the realompcommand line.
- The whole session runs on that model. A session started with
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
- v0.107.0: HQ native core, sidebar close/delete, omp team model, OmniRoute /router-ai by @8syncdev in #127
Full Changelog: v0.106.0...v0.107.0
v0.106.0
Added
- HQ Chat tổng: one room or every room. The composer under Văn phòng / Chat tổng picks "Mọi phòng" (a project or all projects, as before, with Gửi ngay and Lệnh kiểm) or one specific room, and suggests the project's lead room: one room reads the task instead of N (with the rough context tokens saved), and the lead hands parts out with
8sync ccc msg <phòng>/msg --all. One tap applies it. Ctrl+Enter sends. - HQ Preview: "Hỏi về ảnh này". In the image viewer (or the small button on each thumbnail) the owner taps the image to drop numbered pins, each with an optional note (keyboard: add a pin in the middle, arrows move it, Delete removes it), then sends with the same composer. The pins are drawn onto a full-size PNG copy that goes as an attachment; the text carries the image path, each pin as
#n (x%, y%; x px, y px): noteand the question. The default room is the one that saved the shot (card holder, worktree, lane), else the lead. On phones it is a bottom sheet. POST /api/messagestakesfiles(upload ids, at most 5): they are copied into the room's repo (.claude/hq-uploads/<id>/, found from HQ's live session list, never a client path) and their paths appended, for terminal and inbox rooms.- HQ tab Máy. The header chip (busiest of RAM/CPU/GPU, watts) now opens a full tab instead of a popover: Tải máy, Điện, Thức & màn hình, Cấu hình máy (CPU model, cores/threads, RAM, GPU and VRAM, OS; read once), Dung lượng dự án, Tiến trình. One shared
/api/machinepoll for the chip and the tab. - Awake switch.
8sync ccc awake on [--hours N] [--screen-off N]starts8sync awake --while-roomsdetached (null stdio, no console, own process group, out of the caller's job when allowed: it outlives the shell and HQ restarts) and returns once the hold has written~/.local/state/8sync/ccc/awake.json;offstops only the pid in that file after checking it is that very process (image + creation time), idempotent.status --jsongainsours({pid, until, while_rooms}or null). The hold's minuteclaude agents --jsonruns without a console window. HQ:POST /api/machine/awake {on}and a switch in Thức & màn hình that readsours, neverheld(on Windowsheldis everyone's, omp.exe included). - Dung lượng dự án. For every sidebar project: top-level sizes,
.git,.claude/worktrees(count, size), evidence folders, node_modules, build output,.claude/hq-uploads, and git-tracked files over 5 MB (git ls-tree -r -l HEAD). Bounded walk (400k entries / 45 s per project, symlinks and junctions skipped, never into another repo), cached ≤ 6 h in memory anddisk.json, "Đo lại" on demand. Named thresholds flag tracked file > 5 MB (high > 50 MB), evidence > 20 MB, worktrees > 10 or > 2 GB, any folder > 1 GB (high > 10 GB), upload leftovers older than a day. - One-tap cleanup send. Each project, and each flagged item, has a button that sends the findings plus the rules (no deleting uncommitted/unpushed work, AskUserQuestion before deleting owner-only assets or evidence,
git rmin a commit through a PR) straight to the project's lead room (else dev; a picker changes it), toasting the delivery as the other composers do. - Dọn định kỳ. A per-project switch: every 6 h HQ re-measures the projects that have it on and sends the cleanup message when it finds abnormal items it has not sent in the last 24 h. Started from
instrumentation.ts; settings and last sends in~/.local/state/8sync/hq/cleanup.json(/api/machine/cleanup); the tab shows the last run, the next run and the last send. - HQ tab Hạn mức registered (plan windows and tokens per room,
UsageView). On phones every tab is a 44 px target and the active one scrolls into view.
Fixed
- The 0.105.0 notes below said planning and checking rooms used ~75% of ai-game-studio's tokens and the dev room 3%. That came from guessing each transcript's room from its text. With the room names Claude Code records (
claude agents --all --json): ui 23%, rd 14%, dev 11%, qa 10%, arch 7%, review 6%, lead 6%, ba 4%, older forks of rooms 19%. Two of the eight rooms were building; the board still held 23 cards in ready and 1 in building.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
- feat(hq): Máy tab, Hạn mức tab, room picker + lead suggestion, Preview pins (v0.106.0) by @8syncdev in #126
Full Changelog: v0.105.0...v0.106.0
v0.105.0
Owner (2026-10-19): ai-game-studio "treo hơn 1 ngày liên tục mà chả ra gì … nghi bị chạy ngắn quá đứt gãy do loop". Measured over the last 36 h of that project (31 transcripts, 565 turns, 15K API calls, board, GitHub). Turns were long, not fragmented (rooms were busy about 220 room-hours); the losses were elsewhere:
- 64% of input tokens went to calls that re-read over 300K tokens of context (median call 305K, p90 553K): the kit compacts at 65% of a 1M window.
- Two of eight rooms were building (ui 23% and dev 11% of the tokens; rd 14%, qa 10%, arch 7%, review 6%, lead 6%, ba 4%, older forks 19%); the board held 23 cards in ready and 1 in building. (An earlier version of these notes said dev 3%: that guessed rooms from transcript text.)
- 51 PRs open, merges held up by stacked branch chains (PR 108 on 103 on 99; one PR carrying 5 cards); an owner ask ("nút skill xấu") split into R&D, ADR notes and a UI card that waits on the R&D one.
- 742 Bash calls were blocked on 18/10 12:00–14:00 because the guard hook itself failed (a few with ENOENT on the
8syncbinary; rooms retriedauto statushundreds of times), and 178 calls usedmeet --as, which did not exist.
Changed
- Team rooms compact at ~195K, not 650K.
auto upandauto revivestart every room with--settings <state>/ccc/room-settings.json(CLAUDE_CODE_AUTO_COMPACT_WINDOW=300000; launch-level settings beat the user env, checked live on a--bgsession). The owner's own sessions keep the kit's window. --roles full(HQ "Team đầy đủ") is builder-heavy: lead, dev, dev2, ui, qa, review (was lead, ba, arch, rd, dev, ui, qa, review). BA, architect and R&D join on request with--roles.- WIP limit on the board: with 6 or more cards waiting in
ready, planning rooms get no new backlog card (claim --jsonsays why),move <id> readyfrom backlog is refused, and a card a room adds with a check waits in backlog. The owner's own cards and P0 cards pass. - Approved work lands first: backlog rooms (lead, ba) start every turn by merging approved cards when the owner allowed self-merge (else one Ship question for all of them), then unblocking cards whose reason is gone. Builders branch from
origin/mainand never stack on another card's branch (blocked "chờ PR #n" instead); review sends stacked PRs back. Cards are sized as one PR a dev finishes in one session, without separate R&D/audit/ADR cards for work a dev can do. 8sync ccc meettakes--aslike everyautoverb.8sync ccc helpand the site's command table listawake --screen-off.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
- docs(awake): help cheatsheet and site table list --screen-off by @8syncdev in #124
- feat(ccc): team rooms compact at ~195K, builder-heavy full team, WIP limit, no stacked PRs (v0.105.0) by @8syncdev in #125
Full Changelog: v0.104.0...v0.105.0
v0.104.0
Added
8sync awaketurns the screen off when nobody is at the machine (Windows). Owner (2026-10-19): "8sync awake --while-rooms fix máy chưa sleep màn hình được". The power plan had the display timeout at 180 min, and apps that reset the display timer (a room's windowed Godot runs withkeep_screen_on) kept it on all day while rooms worked. The hold loop now checks every minute and turns the screen off (WM_SYSCOMMAND/SC_MONITORPOWER, posted) after--screen-off Nminutes without mouse/keyboard input, default 10,0leaves it to the power plan. It never does when an app holds the display (video), when the machine has Modern Standby (screen off can pull it into standby), or when any of those readings is unknown. A touch turns it back on; the machine keeps working. Proven live:--screen-off 1with nobody at the keyboard, the console display state went from on to off on the first check and stayed off with the hold still in place.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
Full Changelog: v0.103.0...v0.104.0
v0.103.0
Added
- Điện và tiền điện trong chip "Máy" của HQ. Owner (2026-10-19): "Trên hq ui xem đc ram cpu gpu điện tiêu thụ chi phí vnd kiểm soát chặt tiêu hao". The chip shows the watts next to the load; its panel shows watts now and ₫/giờ, kWh and ₫ today and this month. CPU package energy is measured (Windows RAPL "Energy Meter" counter through
typeperf, no admin; Linux powercapenergy_ujwhen readable), GPU board power is measured (nvidia-smi power.draw), the rest of the box (board, RAM, disks, fans, PSU loss) is an editable estimate, default 60 W. Price default 3.500 ₫/kWh (EVN top household tiers + 8 % VAT), editable. The HQ server counts every 15 s from start (instrumentation.ts), with or without a tab open; a gap longer than 90 s (asleep, stalled) counts only the measured CPU energy. Ledger:~/.local/state/8sync/hq/power.json, 70 days. - Daily electricity budget. Set in ₫ from the panel. When today's spend reaches it, HQ pauses the team (
8sync ccc auto pause) and keeps it paused for the rest of the day: "Chạy liên tục" answers 409 with the reason until the budget is raised or cleared. - "Thức & màn hình" in the same panel, from the new
8sync ccc awake status [--json](also8sync awake status): screen on/off/dim (Windows console display state), what keeps the screen on (frompowercfg /requestswhen HQ runs elevated), minutes since the last mouse/keyboard input, whether anything holds the machine awake (system-wide execution state; Linux: an8syncsleep inhibitor), time asleep since boot (Windows unbiased interrupt time; LinuxCLOCK_BOOTTIME − CLOCK_MONOTONIC), Modern Standby or not, and how many rooms finished a turn since the owner left.
Changed
- The "Máy" chip shows on phones too (it was hidden below 640 px), and its panel is a popover so the settings fields take typing.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
- feat(hq): power, ₫ cost and daily budget in the Máy chip; awake status (v0.103.0) by @8syncdev in #121
Full Changelog: v0.102.1...v0.103.0
v0.102.1
Fixed
- Typing from a phone. Owner (2026-10-19): "input hq gửi không được ở link vps". Room and shell terminals get a real input line under the screen (Enter or "Gửi" sends the line + Enter; empty = Enter): a phone keyboard with IME, Vietnamese or autocorrect types into it reliably, where xterm's hidden textarea may drop keys. Write endpoints were checked through both VPS links (
/hqand:8443): they pass HQ's checks. - A terminal reopened, opened in a second tab, or redrawn on a theme change no longer types junk (
;5Rat a prompt,Rin vim, a stray key in a Claude dialog): the kept screen a late viewer gets is sent as areplayonce the bridge has had input, and the page does not answer the queries in it (ConPTY's openingESC[6n, DA…) a second time. - After HQ restarts on a new version, an open page reloads itself (
/api/versionchecked every minute and when the tab comes back; a build chunk that fails to load reloads once) instead of running the old build against the new server. - The self-restart waits while the HQ shell is open (it would kill what runs there) and says so once; it goes ahead when the shell closes. Proven on Windows with a second HQ on another port: replacing its binary restarted it on the other version within 30 s.
Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit
What's Changed
- fix(hq): phone input line, no re-answered replays, reload on new UI, restart waits for the shell (v0.102.1) by @8syncdev in #120
Full Changelog: v0.102.0...v0.102.1