agent-orchestrator/docs
Harshit Singh Bhandari a1789a3a1e
feat(update): channel-aware auto-update runtime + nightly pipeline (#2221)
* docs(spec): auto-update with stable + nightly channels

Design spec for channel-aware auto-update via electron-updater: stable
(manual semver releases) and nightly (daily CI cron, version
X.Y.(Z+1)-nightly.<UTC-ts>+<sha>). Covers runtime wiring, the feed,
the version scheme and its ordering/channel rationale, the nightly
pipeline, in-app UX (opt-in + channel + nightly disclaimer), error
handling, testing, and the deferred/prereq items (CI signing for macOS
updates, stable version stamping, polished UI in #2207).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(plan): auto-update channels implementation plan

Bite-sized TDD plan for the in-app channel-aware updater + nightly pipeline:
nightly version compute module, daily cron workflow, macOS feed metadata,
~/.ao update-settings module, electron-updater shell + main.ts wiring, and the
first-run opt-in/channel/nightly-disclaimer prompt. Deferred items and Track-B
prereqs (CI signing, stable stamping) are called out.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(release): nightly version compute module

computeNightlyVersion -> X.Y.(Z+1)-nightly.<UTC-ts>+<sha>: next-patch base,
fixed-width UTC timestamp for monotonic prerelease ordering, sha as build
metadata. Pure ESM so CI runs it and vitest tests it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(release): daily nightly build + publish workflow

Cron computes the nightly version from the latest stable tag, stamps it,
builds all platforms, and publishes a prerelease (nightly channel). Skips
when HEAD is already covered by the latest nightly. forge publisher prerelease
flag is now env-driven (AO_RELEASE_PRERELEASE) so stable stays non-prerelease.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(release): pass nightly version via env, not inline interpolation

Avoids interpolating ${{ }} into the run script (GitHub Actions injection
hardening); the version now arrives via the NIGHTLY_VERSION env var.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(update): persist auto-update settings under ~/.ao

readUpdateSettings/writeUpdateSettings store {enabled, channel, nightlyAck}
with safe defaults and channel coercion, atomic temp+rename like app-state.ts.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(update): channel-aware electron-updater wiring

Replace update-electron-app (stable-only, no channels) with electron-updater
driven by the user's ~/.ao settings: channel from settings, allowDowngrade for
channel switches, auto-download gated on opt-in, errors swallowed. Feed
configured via setFeedURL since forge does not emit app-update.yml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* style(update): tabs in auto-updater.ts to match repo prettier config

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(update): first-run opt-in + channel + nightly disclaimer prompt

Minimal main-process dialog flow: opt into auto-updates, pick stable/nightly,
and acknowledge a nightly instability/data-loss disclaimer. Persists the choice
to ~/.ao. Polished Settings-page selector is tracked in #2207.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs(spec): correct feed-yml premise (no platform emits it as built)

Final review verified that publish:null in both custom makers makes
electron-builder skip update-info yml generation on Windows and Linux too
(app-builder-lib PublishManager returns early before createUpdateInfoTasks),
not just signing-blocked macOS. The runtime updater is therefore inert on all
platforms until a separate feed-publishing workstream (yml gen+upload across
all 3 platforms, coupled to Track-B signing) lands. Recorded in the Feed
section and the prerequisites table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(release): nightly skip-guard must match the v<version> tag namespace

The forge publisher tags nightly releases v<version> (e.g.
v0.10.4-nightly.<ts>), not desktop-v..., so the no-new-commits guard queried a
namespace that never exists and never fired. Query v*-nightly.* instead.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore: format with prettier [skip ci]

* chore(release): run nightly at 19:00 IST (13:30 UTC)

Was 03:00 UTC (08:30 AM IST); move to 13:30 UTC = 7:00 PM IST.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-06-27 02:26:56 +05:30
..
agent feat(cli): ao start fetches + opens the desktop app; deprecate npm as an app channel (Track A) (#2201) 2026-06-26 19:31:56 +05:30
cli Zellij to tmux + ConPTY runtime, session save/restore, crash-proof reconcile (port #404) (#2183) 2026-06-25 15:05:41 +05:30
plans feat: dashboard legacy-migration popup + app-state migration marker (#2219) 2026-06-27 02:24:36 +05:30
superpowers feat(update): channel-aware auto-update runtime + nightly pipeline (#2221) 2026-06-27 02:26:56 +05:30
README.md docs: refocus README on the product, move progress to docs/STATUS.md (#311) 2026-06-18 15:43:41 +05:30
STATUS.md Zellij to tmux + ConPTY runtime, session save/restore, crash-proof reconcile (port #404) (#2183) 2026-06-25 15:05:41 +05:30
ao-start-bootstrapper-and-npm-deprecation.md feat(cli): ao start fetches + opens the desktop app; deprecate npm as an app channel (Track A) (#2201) 2026-06-26 19:31:56 +05:30
architecture.md docs: refresh repository readme [skip ci] (#2190) 2026-06-26 17:28:07 +05:30
backend-code-structure.md feat(cli): ao start fetches + opens the desktop app; deprecate npm as an app channel (Track A) (#2201) 2026-06-26 19:31:56 +05:30
daemon-environment.md Zellij to tmux + ConPTY runtime, session save/restore, crash-proof reconcile (port #404) (#2183) 2026-06-25 15:05:41 +05:30
stack.md Zellij to tmux + ConPTY runtime, session save/restore, crash-proof reconcile (port #404) (#2183) 2026-06-25 15:05:41 +05:30
telemetry.md docs: refresh repository readme [skip ci] (#2190) 2026-06-26 17:28:07 +05:30

README.md

agent-orchestrator rewrite docs

The agent-orchestrator is being rebuilt as a long-running Go backend daemon
(backend/) plus an Electron + TypeScript frontend (frontend/). The backend
supervises coding-agent sessions and exposes daemon control, project/session
state, terminal streaming, and CDC/event infrastructure.

Start with architecture.md for the current backend model and
cli/README.md for the CLI surface.

Reference docs

Doc What it covers
architecture.md Current backend model, package layout, status derivation, persistence/CDC, and load-bearing rules.
backend-code-structure.md Package ownership rules for the Go backend: domain, services, ports, adapters, storage, HTTP, CLI, and daemon wiring.
cli/README.md CLI commands and daemon control surface.
agent/README.md Agent adapter contract, hook methodology, and session-info derivation.
STATUS.md What is shipped on main today and what is still in flight.
stack.md Accepted library/runtime choices, pending stack decisions, and dependencies explicitly avoided for V1.

Mental model

Persist durable facts, derive display status:

  • session table: activity_state, is_terminated, identity, metadata
  • PR tables: PR/CI/review facts
  • derived read model: service.Session computes display status from session + PR facts