Merge staging into main#275
Merged
Merged
Conversation
… diagrams Restructure the README to lead with user-visible behaviour rather than architectural jargon. Open with the voice/video + mid-task interruption headline, follow with concrete scenarios and a benefit-oriented highlights table, then ramp into technical depth at "How it works". Add a Mermaid hero diagram of the two-tier cognition (interaction loop + background reasoner + back office) and a sequence diagram showing nested steering propagation. Add a foldable comparison section with analogous diagrams for OpenClaw and Hermes Agent, using shared visual language so the structural contrast (persistent supervisor + unified event broker) reads at a glance. Cite the Thinking Machines interaction-models post as the architectural reference. Surface schedules and triggers as a first-class capability — both as a highlights row and a new under-the-hood subsection that explains the description-driven recurring task model and the graduation path into stored functions via the storage-review loop.
…all hardening README: - Reframe the headline around "virtual teammates" and "hop on a call" rather than "AI agent" / "agent harness". The product UX is meeting a teammate, not configuring a runtime. - Add a "Try one" section with two paths: hosted (console.unify.ai) as the lowest-friction entry, then self-host below for the open-source install. - Rename "Quick Install" to "Self-host" to reinforce the two-path model. - Make explicit that the local installer auto-generates the API key, so no Unify signup is required for the local path. - Note that Orchestra ships with Stripe/credits routines that are dormant in local mode (preempts "why is there billing code?" reaction from anyone reading source). setup.sh: - Locate Python 3.12 explicitly via uv (auto-installing it if missing) before invoking poetry, so users on a 3.13-default system don't get surprise build errors. Defense in depth alongside the orchestra pyproject Python pin. - Capture poetry's output and surface the last 40 lines on failure instead of swallowing the error and printing only "poetry install failed". Saves the full log to a temp file for further diagnosis. - Add helpful next-steps when no Python 3.12 is locatable (uv / brew / apt instructions).
Reader has now seen the structural diagrams for OpenClaw, Hermes, and Unity side-by-side. The natural next question is "wait, who arrived where first?" — answer it with the actual git-log dates rather than making the reader infer it. Tone is deliberately understated. Lead with the receipts; refuse the foresight claim explicitly. Repo dates are verifiable, which gives the reader something to push back against if the claim is overreached.
The Back Office subgraph in the hero diagram was rendering as a vertical stack of 10 single-row boxes on GitHub — Mermaid's renderer ignores 'direction LR' inside subgraphs when the children have no edges between them. Same problem in the OpenClaw and Hermes comparison diagrams. Fix: - Collapse each multi-node subgraph into a single wide node listing the children inline. Reduces hero diagram from ~50 lines + 14 nodes to ~17 lines + 6 nodes. - Reduce colour palette from 7 classes to 3 (pink for the persistent supervisor, green for the background reasoner, neutral gray for everything else). - Drop the <i> italic tags from node labels — GitHub Mermaid renders them inconsistently across themes. Net: 90 lines removed, dramatically shorter rendered output, same information density.
Mermaid treats 'actor' as a reserved keyword in sequence diagrams (used to declare a stick-figure participant). 'participant Actor' parses as 'participant <keyword>' and breaks the diagram. Alias the participant id to 'Ax' while keeping the display label as 'Actor' via 'participant Ax as Actor', matching the existing CM/TM aliasing pattern.
…rinciples
Two cleanups:
1. 'What's open and what isn't' → 'The runtime stack'. The original
section was written when half the stack was closed and needed
expectation-management. Everything is open now, so the 'what's not
open' inventory and the Stripe-dormancy note were drawing attention
to non-issues — preempting questions nobody was going to ask, and
inviting concern where there was none. Keep the four-repo table
as orientation; drop the surrounding prose.
2. Remove the 'Design principles' section entirely. The four bullets
('no regex routing', 'no mocked LLMs in tests', 'no defensive
coding', 'English as an API') were lifted from internal cursor
rules — they're development directives, not architectural design
principles. The interesting one (English-as-API) is already
covered in 'Under the hood'; the other three are noise to a
public reader.
Adds a hand-crafted SVG hero diagram (assets/hero-architecture.svg) embedded near the top of the README. Extends the Thinking Machines interaction-model / background-model two-layer pattern with a third tier that's specific to Unity: Fast Brain (LiveKit voice agent, real-time, sub-second) Slow Brain (ConversationManager, always present, supervisor) Actor (background reasoner, async, primitives.* loop) Visual style mirrors thinkingmachines.ai/blog/interaction-models: - cream background, soft blue drop-shadow glow on boxes - rounded rectangles, light-blue stroke, white fill - thin gray arrows, simple arrowheads - dashed boundary box around the real-time zone - lots of whitespace, no extra colour User-to-slow-brain is a direct diagonal (not a detour around the right of the diagram). Bidirectional channels are parallel arrow pairs matching TML's convention. Also tightens .gitignore: 'assets/' became 'assets/*' so the explicit '!assets/hero-architecture.svg' allow-list rule actually takes effect. Local screenshots in assets/ remain ignored.
Track in-process active work separately from Pub/Sub and EventBus activity so long-running CodeAct work is not treated as idle chat silence.
Wrap code and function execution with active-work heartbeats, emit sparse fallback progress, and clear active-work records before awaited cleanup.
Apply the CodeAct execution timeout to cooperative in-process Python runs so async code follows the same hard limit semantics as shell and venv execution.
Verify active work registration, cleanup, fallback progress notifications, async timeout cleanup, and ConversationManager idle behavior around quiet long-running work.
Route accepted live TaskDue events into TaskScheduler.execute instead of leaving the conversation loop to interpret a natural-language execute directive. This keeps scheduled live runs on the normal task lifecycle while still registering the returned handle with ConversationManager steering state. The event-handler coverage now verifies that due activations start automatically, preserve the scheduled activation reason, and no longer request an extra LLM run just to begin execution.
Thread the activation reason through queue execution so scheduled runs are materialized as scheduled task runs instead of explicit user-triggered runs. This keeps Tasks/Runs provenance aligned with the TaskDue source and lets recurring execution consume the remembered activation snapshot. Add coverage for the scheduled execution path so provenance consumption and recurring rearming stay coupled to the scheduler lifecycle.
Treat attaching a stored entrypoint as the handoff from description-driven live execution to the offline function lane for future non-terminal task instances. The storage-review guidance now makes that contract explicit so the actor only attaches functions that are stable enough to run headlessly. Extend recurring and triggerable task coverage to lock in that patched and cloned future instances carry both the entrypoint and offline flag.
Remove venv_id from the model-facing execute_function contract and resolve stored function environments from FunctionManager metadata instead. This makes venv selection deterministic for stored functions rather than depending on the model to preserve an implementation detail in tool arguments. Route stateless Python execution with a resolved venv through FunctionManager.execute_in_venv so dependency-isolated stored functions use the same subprocess environment even without a persistent session.
Verify execute_function no longer exposes venv_id in its signature or generated tool schema while still passing the stored FunctionManager venv metadata into execution. Cover the lower-level stateless Python venv routing separately so SessionExecutor cannot regress back to the in-process sandbox. Add SingleFunctionActor coverage for function-id execution so offline function runs continue to honor the venv linked on the stored function row.
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.
Automated PR to merge
stagingintomain.