Repository navigation
Feat/dashboard UI - #3
Merged
Merged
Conversation
…otes opencode colours its output. The live panel already cleaned it, but the final reply went to glamour raw, which drops ESC and leaves literal "[0m" in the transcript. Replies (and failing-check output in review) now go through the same cleaning. Long system notes also wrap with an indent instead of starting at column 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Only pgup/pgdn scrolled the transcript; arrows went to the input and the program never enabled mouse reporting, so a long reply looked stuck at its end. - Mouse wheel scrolls the transcript and open diffs, and moves the selection in Changes/History (tea.WithMouseCellMotion). - ↑/↓ scroll the transcript while the input is empty. - Status bar shows "scrolled · N%" when not at the bottom. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Below the minimum the layout was clipped from the top (header and tabs disappeared). Frames now always fit the window, and tiny windows say what size is needed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add APIClassifier, which classifies a message by calling an llm.Provider directly (system prompt = the shared output contract, temperature 0, 256 max tokens, own 30s timeout) instead of spawning the router agent's CLI. Configured with an optional router.classifier block; BuildRouter uses it only when a model is set and its key env var is non-empty, and otherwise falls back to the CLI classifier without failing startup. router.agent still answers plain questions. Includes the Router v2 design spec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The git worktree Manager now satisfies an Isolator interface; a new CopyIsolator gives each task a directory copy (fsdiff exclusion rules, modes and symlinks preserved), diffs it with fsdiff, and merges accepted changes back all-or-nothing with per-file conflict detection and traversal-guarded writes. worktree.New picks the backend. engine.ExecuteHeadless diffs against a snapshot and skips the commit when its directory is not a git repository; inside a repo it is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resolution order is now: the AI's healthy suggestion -> the agent with the best track record in this directory -> static routes -> default agent -> first healthy agent. The router defines a History interface (BestAgent(dir, candidates)) set via Router.WithHistory; nil keeps the old behaviour. memory.Store implements it: successes = accepted runs + benchmark wins, samples = all runs + wins + validation-failed benchmarks, score = (s+1)/(n+2). A pick needs >=3 samples, more successes than failures and a strictly higher score than every other healthy candidate; ties yield no pick. The decision reason explains it, e.g. "claude: 8/10 accepted in this dir". Wired into the shell and dashboard using their existing memory store; skipped silently when the store did not open. Only the choice of agent changes - dispatch, validation, retry and diff review are untouched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gents Providers parse usage (OpenAI prompt/completion_tokens, Anthropic input/output_tokens); a missing usage object is zero, never an error. agent.Result gains Usage; APIAgent fills it and prices it from the new optional price_input_per_mtok / price_output_per_mtok agent fields. Includes the design spec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Check compares the latest release tag by semver (never offering a prerelease to a stable build; dev/snapshot builds skip the network). Install picks the GoReleaser archive for this platform, verifies its SHA-256 against checksums.txt, extracts only the orchestra binary (refusing traversal entries) and atomically swaps the resolved executable (rename-aside to .old on windows). A small JSON state file throttles automatic checks to once per 24h. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A root PersistentPreRunE checks for a newer release (2s timeout, throttled to once a day) only in interactive terminals, never in CI, for dev builds, with ORCHESTRA_NO_UPDATE_CHECK=1, or for help, completion, --version and update itself. Accepting installs, prints 'Updated to vX. Please relaunch orchestra.' and exits 0; declining or a failed install continues with the requested command. `orchestra update` forces a check (--check to report, -y to skip the prompt). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both commands now pick their isolation backend with worktree.New: git worktrees inside a repository (unchanged), folder copies elsewhere. The 'needs a git repository' errors are gone; the clean-tree check still applies inside a repo. In a plain folder the stray-write guard snapshots the base before each wave and restores it with fsdiff. The benchmark body moves into runBenchmark so it can be tested with fake agents. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Outcome and Turn carry Usage summed over every attempt (including one whose agent call failed); EventAgentDone carries per-attempt usage for the dashboard. run/do/shell print a one-line summary when usage is known. runs and benchmarks gain tokens_in, tokens_out and cost_usd via the idempotent ADD COLUMN migration; StatsByAgent returns per-agent totals. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Files over MaxFileBytes were always reported as "Binary files … differ", so git-free runs, copy isolation and the stray-write guard saw phantom changes in folders holding large files. Withheld files now carry a streamed SHA-256; matching fingerprints are treated as unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
orchestra history and the benchmark leaderboard gain TOKENS/COST columns (and benchmarks persist usage). The dashboard shows them in History and Benchmarks, per-agent totals in Agents, and a running total in the live run panel; usage columns appear only when some row has usage, and narrow windows shed low-priority columns (new col.drop) instead of overflowing. Chat turns now record their summed usage to history. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…updater Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
New internal/parallel package holds the UI-free pieces of the parallel workflow: step id/prompt/agent helpers, a dependency Graph (ready waves, done/dead bookkeeping, waves-left estimate), the base-tree stray-write BaseGuard, and RunStep (quiet Produce + commit on a worktree branch) for UIs. do --parallel now uses it; its output and behaviour are unchanged. engine exports CommitMessage. Adds the dashboard-parallel design spec. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A Chat message starting with /parallel (or /par) plans the request with the default agent, then runs it wave by wave: each ready step in its own isolated tree (worktree.New: git worktrees in a repo, folder copies elsewhere), up to parallel.DefaultJobs at a time, via parallel.RunStep. - Live view: the run panel becomes a task list (status, agent, attempt, elapsed, last output line); up/down or j/k select, enter/tab expand the task's full output, esc collapses (esc on the list cancels). Worker events/output are tagged with the task id over the channel. - Review: after each wave, tasks with changes open in the existing reviewer headed "wave i/N · task k/M"; y merges (Isolator.Merge; a conflict is reported and counts as rejected), n discards. Failed tasks are reported and skipped; dependents of dead steps are skipped. - ctrl+c mid-run cancels all tasks, restores stray base writes (guard), removes every isolated tree, then quits. - Every task outcome is recorded to memory like single runs. - README documents /parallel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The /parallel branch predates usage tracking, so its history records dropped tokens and cost. Stamp them via usageRun like single runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
do --parallel creates worktrees from several goroutines; appending to the tree list raced (caught by -race) and concurrent git worktree add contends on git's locks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.