Skip to content

Releases: 8-Sync-Dev/8sync

v0.108.3

Choose a tag to compare

@github-actions github-actions released this 20 Oct 00:58
bb4a2e9

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 --here projects. 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 plain on now resumes the projects auto last held, also after pause; the first on ever still covers every project. auto on --all widens on purpose, and off forgets the list.

Install or update: curl -fsSL https://get.8syncdev.com/install | sh · 8sync up · then 8sync ccc kit

What's Changed

  • v0.108.3: HQ Chạy liên tục keeps auto's projects by @8syncdev in #131

Full Changelog: v0.108.2...v0.108.3

v0.108.2

Choose a tag to compare

@github-actions github-actions released this 20 Oct 00:39
dfbc7c3

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 add and 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 run git init -b main there 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 status names every running project. With two teams on (auto on --here in 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

  • v0.108.2: ccc team in a new folder inside a repo stays in that folder by @8syncdev in #130

Full Changelog: v0.108.1...v0.108.2

v0.108.1

Choose a tag to compare

@github-actions github-actions released this 19 Oct 23:15
05abe23

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 by auto lint/board. [hot-fix], [follow-up], [wip], [bug], [feature], [chore] and [p0]–[p3] are not roles.
  • "Conflict" right after a push. GitHub reports mergeable: UNKNOWN for 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 wait after auto merge refused 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 wait now defaults to 1800 s when BASH_MAX_TIMEOUT_MS allows it (rooms started by auto up/revive), else 540 s; room texts run plain auto wait --json.
  • ccc risk on a stale base. With an unfetched origin/main, PR 116 (84 files) was read as 177 files including ci.yml, so every gate skill ran. ccc risk fetches 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

  • v0.108.1: fixes from the live UAT of 0.108.0 by @8syncdev in #129

Full Changelog: v0.108.0...v0.108.1

v0.108.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 18:21
0e6d099

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-commit and closes the card with merged <sha>. A stacked card runs after its root. A PR whose base branch was already merged is retargeted and sent back to review, so its new diff is reviewed before it merges. A conflict, a moved head, or another base sends the card back to ready with the reason. The lead runs it first on every turn, and its auto wait wakes 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, and auto status --json shows it as self_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 a Ship question. Free text and labels with a negation (không, chưa, tắt, no, not, off, later, sau) grant nothing.
    • Revoking: any other Ship answer 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.
  • 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] and ci in auto status: ok, failing, billing or unknown, from the last 5 gh run results plus the annotations of the newest failed run. The reading is cached 10 min, and status never runs gh itself. 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 risk lists the skills to call (skills; docs-only diff → /sec).

Changed

  • The board checks the PR, not just the text.
    • Moving a card into qa or approved reads its PR with gh 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 a gh error.
    • done needs evidence with a SHA or the <lệnh>: <kết quả> shape. "chưa" no longer closes a card.
    • Leaving blocked keeps the bounce count. blocked → review needs a gate <sha> note matching the current head.
  • Cards go to the right role. A card's role comes from the tag at the start of its title ([ui], [dev], [rd], …) or --role on add/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 in ready) are never handed out; auto lint and auto board list 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 into review.
  • Fewer turns spent polling:
    • Rooms started by auto up/revive wait in auto wait --timeout 1800 (their settings raise BASH_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 by merge runs auto merge.
    • The cron backup runs every 30 min (was 10), and --loop refuses 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/off clears those marks.
  • Gates run once:
    • /ship and the lead's merge call 8sync ccc risk and run only the skills it lists, instead of /sec + /rules + /aup-audit on 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-ai Caddy routes and their import, the omniroute-update and vps-clean timers;
    • on GitHub: the omniroute-router-ai GHCR package and its workflow runs; the org's "public packages" setting is back off;
    • locally: the omniroute provider in omp's models.yml, the guide and PDF; the LLM7 and Gemini keys made for it were deleted.
    • --model examples in ccc auto omp help and errors now read <provider>/<model>. The ccc auto omp on --model feature 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

Choose a tag to compare

@github-actions github-actions released this 19 Oct 16:48
60f15dd

Added

  • HQ native core. 8sync hq ui now also serves a loopback JSON core (random port + token, handed to the web server as HQ_CORE / HQ_CORE_TOKEN, never passed on to rooms): the claude agents listing behind a fingerprint cache (re-run only when a session/job file changes or a room's pid dies, ≤ 30 s), 8sync ls --all rows 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 of tasklist / nvidia-smi / typeperf per request, the Hạn mức transcript scan, and the project size walk. Without the core (a next dev server) 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 no claude agents / tasklist / 8sync ls process 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 runs claude stop, claude rm (drops its own worktree unless it holds unpushed commits) and 8sync 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, rm failed) 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-dev under .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. Then git 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 pushes ghcr.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, runs setup.sh on 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/*.routes to the main site once and installs router-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 :8444 site from the edge compose, the oauth2-proxy allowlist and ufw.
    • omniroute-update.timer (daily 04:00 VN) pulls the compose image. It tags the running image omniroute:rollback before 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, /home or 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 as omniroute/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-ai build still sends fetch('/api/…') and <img src="/providers/…"> without the basePath. router-ai.routes redirects page loads and rewrites fetches and images whose Referer is a /router-ai page, and leaves /sw.js alone so the PWA worker never takes scope / over HQ. A fresh login lands on /router-ai/home with 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.

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 runs gh pr edit <pr> --base main and merges; otherwise it merges the root first. UAT on ai-game-studio found 13 open PRs based on other branches, and PR 103 merged into card-125-ui-palette instead of main. That repo also gets delete_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-model on auto on --omp / auto up --omp) stores the team model in auto.json; the team is blocked only when that model (else omp's default) is anthropic/…, so an omniroute/<combo> team runs while the owner's omp default stays a Claude login. Rooms open with 8sync . omp-<role> --model <m> (new --model on 8sync . <name>); auto status --json adds omp_model. The omp extension sends its live model to auto nudge --model; a room on anthropic/… gets no nudge, and a nudge without --model is still judged by omp's global default.
    • The whole session runs on that model. A session started with --model gets the same model for --smol, --slow and --plan, and no --advisor. Before this, the launch added 8sync's role flags (--plan opus --slow opus) and the advisor, which runs on omp's modelRoles.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 real omp command line.

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

Choose a tag to compare

@github-actions github-actions released this 19 Oct 13:39
8613322

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): note and 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/messages takes files (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/machine poll for the chip and the tab.
  • Awake switch. 8sync ccc awake on [--hours N] [--screen-off N] starts 8sync awake --while-rooms detached (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; off stops only the pid in that file after checking it is that very process (image + creation time), idempotent. status --json gains ours ({pid, until, while_rooms} or null). The hold's minute claude agents --json runs without a console window. HQ: POST /api/machine/awake {on} and a switch in Thức & màn hình that reads ours, never held (on Windows held is 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 and disk.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 rm in 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

Choose a tag to compare

@github-actions github-actions released this 19 Oct 12:39
3ab74b1

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 8sync binary; rooms retried auto status hundreds of times), and 178 calls used meet --as, which did not exist.

Changed

  • Team rooms compact at ~195K, not 650K. auto up and auto revive start 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 --bg session). 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 --json says why), move <id> ready from 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/main and 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 meet takes --as like every auto verb.
  • 8sync ccc help and the site's command table list awake --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

Choose a tag to compare

@github-actions github-actions released this 19 Oct 11:02
b384dc2

Added

  • 8sync awake turns 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 with keep_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 N minutes without mouse/keyboard input, default 10, 0 leaves 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 1 with 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

  • feat(awake): turn the screen off when nobody is at the machine (v0.104.0) by @8syncdev in #123

Full Changelog: v0.103.0...v0.104.0

v0.103.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 07:10
b639424

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 powercap energy_uj when 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] (also 8sync awake status): screen on/off/dim (Windows console display state), what keeps the screen on (from powercfg /requests when HQ runs elevated), minutes since the last mouse/keyboard input, whether anything holds the machine awake (system-wide execution state; Linux: an 8sync sleep inhibitor), time asleep since boot (Windows unbiased interrupt time; Linux CLOCK_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

Choose a tag to compare

@github-actions github-actions released this 19 Oct 03:33
3ff999f

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 (/hq and :8443): they pass HQ's checks.
  • A terminal reopened, opened in a second tab, or redrawn on a theme change no longer types junk (;5R at a prompt, R in vim, a stray key in a Claude dialog): the kept screen a late viewer gets is sent as a replay once the bridge has had input, and the page does not answer the queries in it (ConPTY's opening ESC[6n, DA…) a second time.
  • After HQ restarts on a new version, an open page reloads itself (/api/version checked 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