Skip to content

Merge staging into main#275

Merged
YushaArif99 merged 16 commits into
mainfrom
staging
May 19, 2026
Merged

Merge staging into main#275
YushaArif99 merged 16 commits into
mainfrom
staging

Conversation

@YushaArif99
Copy link
Copy Markdown
Contributor

Automated PR to merge staging into main.

djl11 and others added 16 commits May 13, 2026 13:21
… 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.
@YushaArif99 YushaArif99 deployed to unity-testing May 19, 2026 13:32 — with GitHub Actions Active
@YushaArif99 YushaArif99 merged commit 105fb56 into main May 19, 2026
14 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants