Skip to content

Release: open-source-readiness pass + CVE clear + captcha primitive#283

Closed
djl11 wants to merge 261 commits into
mainfrom
staging
Closed

Release: open-source-readiness pass + CVE clear + captcha primitive#283
djl11 wants to merge 261 commits into
mainfrom
staging

Conversation

@djl11

@djl11 djl11 commented May 26, 2026

Copy link
Copy Markdown
Member

Promotes 6 commits from staging to main. Two themes plus one feature.

Open-source-readiness pass (3 commits)

  • aaabf3d46 chore(repo): tighten .gitignore for build artifacts and add AGENTS.md

    • .gitignore now covers build/, dist/, *.egg-info/, Local/
    • Removed ~12MB of build artifacts from the working tree
    • New AGENTS.md distilled from .cursor/rules/ so Claude Code, Codex, Aider, Cline, etc. pick up the same conventions Cursor does
  • bfe44c46f chore(github): add CODEOWNERS, PR/issue templates, dependabot, OSV scanner

    • CODEOWNERS@unifyai/Engineers as catch-all + explicit ownership of security-sensitive paths
    • PULL_REQUEST_TEMPLATE.md — references the .cursor/rules invariants
    • ISSUE_TEMPLATE/{config,bug_report,feature_request}.yml — routes bugs by surface; steers "please add this skill" feature requests toward GuidanceManager/FunctionManager
    • dependabot.yml — github-actions weekly (grouped) + agent-service/ npm weekly; deliberately skips scheduled pip per the editable-sibling install model
    • workflows/osv-scanner.yml — Google's reusable workflow pinned by SHA, SARIF to Security tab

Dependabot CVE triage (1 commit + 5 dismissals)

Captcha primitive + docs (2 commits)

  • c9ba90982 feat(computer): add solve_captcha primitive for reCAPTCHA v2 via AntiCaptcha
  • 39fe85099 docs(env): document ANTICAPTCHA_KEY placeholder in .env.example

Other in-flight work picked up incidentally

  • bd001c346 test(task_scheduler): pin Communication env-builder equivalence in shared contract tests — landed on staging before this session.

Test plan

The full test suite auto-runs on staging→main PRs (tests.yml line 130). No tags needed. Auto-merge on green.

@djl11 djl11 temporarily deployed to unity-testing May 26, 2026 13:04 — with GitHub Actions Inactive
@djl11 djl11 temporarily deployed to unity-testing May 26, 2026 13:04 — with GitHub Actions Inactive
@github-advanced-security

Copy link
Copy Markdown

You are seeing this message because GitHub Code Scanning has recently been set up for this repository, or this pull request contains the workflow file for the Code Scanning tool.

What Enabling Code Scanning Means:

  • The 'Security' tab will display more code scanning analysis results (e.g., for the default branch).
  • Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results.
  • You will be able to see the analysis results for the pull request's branch on this overview once the scans have completed and the checks have passed.

For more information about GitHub Code Scanning, check out the documentation.

@djl11 djl11 temporarily deployed to unity-testing May 26, 2026 13:21 — with GitHub Actions Inactive
@djl11 djl11 temporarily deployed to unity-testing May 26, 2026 13:21 — with GitHub Actions Inactive
@djl11 djl11 temporarily deployed to unity-testing May 26, 2026 13:21 — with GitHub Actions Inactive
@djl11 djl11 temporarily deployed to unity-testing May 26, 2026 13:21 — with GitHub Actions Inactive
YushaArif99 and others added 21 commits June 3, 2026 14:13
Personal scheduled wakes omit destination, but get_task_activation treated
_coerce_str(None) as an invalid label and returned activation_missing before
querying Orchestra. Match ContextRegistry personal inputs and add regression
coverage for null and invalid destination guards.
Adds a CoordinatorOnboardingEvent domain so the Coordinator reactively narrates real onboarding milestones published from orchestra (workspace OAuth landing, integration secret saved) with a single short acknowledgement, instead of staying mute.
- New event dataclass, payload factory, and notifications-bar handler dispatched via comms_manager.system_event_map.
- prompt_builders injects a coordinator-only narration bloc  listing the recognised subtypes and the "acknowledge in one line  + preview the next pending step" rule.
Pull cross-section restatements out of the slow brain so each surface
owns its rules once.

- Voice-output block no longer restates URL/secret routing — the
  canonical "Spoken output for live TTS" rules in the Voice Agent
  prompt are now the single source for what gets spoken vs handed off
  to chat.
- Console-knowledge block collapses to the three-panel orientation
  plus the two click paths that actually matter (Secrets, Contact
  Details), and tells me to look the rest up live since the Console
  surface evolves.
- Concurrent-action acknowledgment example becomes channel-agnostic:
  the helper no longer depends on assistant_has_phone, and the
  example uses send_unify_message with a one-line note that the same
  shape applies on SMS / Teams / Discord / etc.
- The whole onboarding-reference + Team-Coordinator surface is gated
  behind is_coordinator=False. The Coordinator's bio already carries
  this material, and routing privileged work to a peer Coordinator
  does not apply when I am the Coordinator.
… order

Reshape build_system_prompt so the prompt reads top-down as a story
about who I am, what I read, what I emit, how I decide, and how I
talk, then ends with conversational guardrails and dynamic context.

- Annotate build_system_prompt with the canonical 17-section order
  the slow brain is built from, and reorder parts.add to match.
- Move setup readiness above the Bio so runtime state lands first
  when present.
- Move tool-usage decision guides (uncertainty / direct specialist /
  act / persistent sessions / computer fast path) to land
  immediately after action steering guidelines, with the demo-mode
  block occupying the same slot in demo mode.
- Move concurrent action and acknowledgment next to the tool-usage
  guides it depends on, and let it apply uniformly to non-demo runs
  regardless of persona.
- Move conversational restraint, communication guidelines, and
  multilingual into a single contiguous communication-shape band.
- Move proactive meeting offers, console knowledge, and the
  onboarding reference into late "ambient guidance" slots so they
  no longer interrupt the identity and tool-decision flow.
- Pull "Recognizing my own actions from the input stream" into its
  own helper attached to Input format — it is about parsing **NEW**
  tags, not about communication restraint.
- Extract channels_str, computer fast-path tools, and the
  web_act / desktop_act selection guide into named helpers so
  build_system_prompt no longer carries inline prompt strings.
…gular variant

The fast brain serves both regular assistants and the Coordinator,
but the Coordinator bio already carries its own identity framing
and its own "look up Console paths live" posture. Restating those in
generic blocks confused the persona on voice.

Gate the generic "remote employee" Role block and the "Platform
knowledge" walkthrough/click-path block behind is_coordinator=False,
so the regular assistant keeps both blocks unchanged and the
Coordinator runs cleanly on its own bio without two competing voices
explaining what it is and how the Console is laid out.
Add RULE 1b to the data-handling rules in the voice agent prompt
so the fast brain treats the bio as a description of system-wide
range, not of what is visible in the current call.

Smaller voice models tend to pull specifics — calendar events,
contact details, organization members, integration state — out of
the bio because the bio implies access. RULE 1b makes the contract
explicit: operational facts enter the call only through a
[notification]; if no notification has surfaced one, the model
defers, ends its turn, and waits. The rule applies to both the
regular assistant and the Coordinator, so the Coordinator can keep
its natural call persona without leaning on the bio for answers it
has not actually been told.
Rewrite the Team Coordinator block (and the app-management FAQ arm
that references it) to match the actual product framing: a peer
Coordinator is a unified stand-in that takes everyday work AND owns
the org-admin / setup surfaces I don't, not an escalation path for
"privileged operations".

The previous wording defaulted to "I handle the request unless it
needs privileged operations, then I escalate", which made the
assistant fumble naturally everyday asks the Coordinator could also
take. The new block names the user's Coordinator alongside me,
spells out the surfaces where handing off is the natural move
(member shaping, team-space ownership, shared credentials, org-wide
configuration), and explicitly tells me not to redirect day-to-day
work to it unnecessarily.
…ompt dumps

scripts/dev/dump_coordinator_voice_prompts.py renders the exact
slow-brain and fast-brain system prompts that production
build_system_prompt and build_voice_agent_prompt produce, using the
same kwargs wiring as the runtime. It is a read-only inspection
tool for prompt review, not a runtime path.

The script supports both personas:
- --persona coordinator (default) loads the live COORDINATOR_BIO
  from the sibling orchestra-coordinator repo so the dump reflects
  what assistants.about actually carries at provision time.
- --persona regular renders a regular assistant with
  is_coordinator=False, no authorized-humans roster, and a short
  generic placeholder bio so the surrounding scaffolding is what
  shows up in the output.

Output files are prefixed by persona (e.g.
coordinator_slow_brain_system_prompt.txt,
regular_fast_brain_system_prompt.txt) so a single review directory
can hold both variants side by side. The rendered .txt dumps
themselves stay gitignored — only the script is tracked.
Replace raw colleague pre-seeding with an async delegation tool and route Coordinator wake reasons through the colleague runtime.
…e delivery

Handle the new `onboarding_session_started` subtype in `coordinator_onboarding` (medium + completed-step hints in the notification body) and extend `prompt_builders` with intro/recap rules, a first-name + "virtual double" framing, an onboarding-flow UI reference, and explicit next-step routing after
`workspace_connected` / `integration_connected`. Always publish outbound messages to Pub/Sub even in local-comms mode (in-memory outbox kept as best-effort mirror) so Console actually receives them, and honour `UNITY_INACTIVITY_TIMEOUT_SECONDS` (defaulted to 0 in `scripts/local.sh`) so local dev sessions don't get killed mid-test.
Explain that manager primitives operate in the current assistant's contexts so coordinator actors use delegation for colleague-owned follow-up work.
…lleague

Document that a successful delegation return confirms accepted async
dispatch, not completed colleague work, and refine manager-scope wording
for shared-space visibility.
…egate primitive

The actor reads delegate_to_colleague through CoordinatorWorkspaceManager;
align its docstring with the async receipt contract so delegation success is
not mistaken for completed colleague work.
Collapse delegate_to_colleague into one docstring paragraph so Method
Reference compaction retains async delegation receipt semantics.
Add coordinator act query guidance so act requests treat async
delegation receipts as success instead of mandating colleague-side
schedule verification and coordinator-owned fallback tasks.
Wait for the persistent worker to register with LiveKit before
create_dispatch, and recover orphaned _active_job state when no voice
agent connects so unify_meet retries are not blocked.
Update stale assertions to match the unified peer Coordinator framing,
console navigation copy, and shared base sections that now apply to both
regular assistants and coordinators.
Require explicit approval for broad or uncached LLM test runs so normal CI fails closed instead of spending on cache misses.
feat(coordinator): shared-space routing and resolved identity (1/4)
Comment thread .github/workflows/llm-cache-refresh.yml Fixed
Comment thread .github/workflows/llm-cache-refresh.yml Fixed
Comment thread .github/workflows/llm-cache-refresh.yml Fixed
YushaArif99 and others added 3 commits June 3, 2026 14:59
Regenerate the lockfile so CI uv lock --check passes after merging
staging workflow changes into the coordinator part-4 branch.
feat(coordinator): land parts 2-4 on staging
Comment thread scripts/dev/dump_coordinator_voice_prompts.py Fixed
Resolve staging→main uv lock failures by checking unify/unillm staging
tips unless unity itself is on main. Harden llm-cache-refresh workflow
permissions and action pins, and redact or sanitize logging flagged by
CodeQL on the release PR.
Comment thread unity/common/simulated.py
"%s [%s] ToolCall Scheduled | arg_keys=%s",
ICONS["info"],
label,
sorted(args.keys()) if isinstance(args, dict) else type(args).__name__,
Comment thread unity/gateway/channels/discord/gateway.py Fixed
Comment thread unity/gateway/channels/discord/gateway.py Fixed
Comment thread unity/gateway/channels/discord/gateway.py Fixed
Strip newline-bearing log fields in Discord and Slack gateway paths,
drop secret-bearing assignment diagnostics, and avoid logging tool-call
labels that CodeQL treats as sensitive.
@djl11

djl11 commented Jun 3, 2026

Copy link
Copy Markdown
Member Author

Closing this staging-to-main PR to stop automatic full test matrix runs while CI cost hardening is applied.

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.

6 participants