Conversation
|
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:
For more information about GitHub Code Scanning, check out the documentation. |
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)
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
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.
| "%s [%s] ToolCall Scheduled | arg_keys=%s", | ||
| ICONS["info"], | ||
| label, | ||
| sorted(args.keys()) if isinstance(args, dict) else type(args).__name__, |
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.
Member
Author
|
Closing this staging-to-main PR to stop automatic full test matrix runs while CI cost hardening is applied. |
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.
Promotes 6 commits from staging to main. Two themes plus one feature.
Open-source-readiness pass (3 commits)
aaabf3d46chore(repo): tighten .gitignore for build artifacts and add AGENTS.md.gitignorenow coversbuild/,dist/,*.egg-info/,Local/AGENTS.mddistilled from.cursor/rules/so Claude Code, Codex, Aider, Cline, etc. pick up the same conventions Cursor doesbfe44c46fchore(github): add CODEOWNERS, PR/issue templates, dependabot, OSV scannerCODEOWNERS—@unifyai/Engineersas catch-all + explicit ownership of security-sensitive pathsPULL_REQUEST_TEMPLATE.md— references the.cursor/rulesinvariantsISSUE_TEMPLATE/{config,bug_report,feature_request}.yml— routes bugs by surface; steers "please add this skill" feature requests towardGuidanceManager/FunctionManagerdependabot.yml— github-actions weekly (grouped) +agent-service/npm weekly; deliberately skips scheduled pip per the editable-sibling install modelworkflows/osv-scanner.yml— Google's reusable workflow pinned by SHA, SARIF to Security tabDependabot CVE triage (1 commit + 5 dismissals)
351563a81chore(deps): bump 9 packages to clear Dependabot CVE alertsurllib32.6.3 → 2.7.0 (CVE-2026-44431, CVE-2026-44432, both high)langchain-core1.3.0 → 1.4.0 (CVE-2026-44843 high)python-multipart0.0.26 → 0.0.29 (CVE-2026-42561 high)lxml6.0.3 → 6.1.1 (CVE-2026-41066 high)langsmith0.7.33 → 0.8.5 (CVE-2026-45134 high)authlib1.7.0 → 1.7.2 (CVE-2026-44681 medium)idna3.11 → 3.16 (CVE-2026-45409 medium)qs6.15.0 → 6.15.2 (CVE-2026-8723 medium, npm)ws8.18.3 → 8.21.0 (CVE-2026-45736 medium, npm)Plus 5 alerts dismissed out-of-band as
not_used: 4 LiteLLM proxy CVEs (Conversation Manager Refactor #69/add timestamp arg to clear_notifications #70/Summary #71/add assistant phone utterance to the thread #74 — proxy not deployed) and Replace explicit requests API calls to use Unify API #67 python-dotenv (we only read.env, never callset_key()). The litellm bump to 1.83.10 was investigated and rejected — it forcesopenai 2.30 → 2.24andlangchain-openai 1.1.15 → 1.1.10because litellm hard-pins openai. Recorded that decision via@dependabot ignore this versionon unillm#54.Net effect on the Security tab after this merge: 15 alerts (1 critical, 9 high, 5 medium) → 0.
Captcha primitive + docs (2 commits)
c9ba90982feat(computer): add solve_captcha primitive for reCAPTCHA v2 via AntiCaptcha39fe85099docs(env): document ANTICAPTCHA_KEY placeholder in .env.exampleOther in-flight work picked up incidentally
bd001c346test(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.ymlline 130). No tags needed. Auto-merge on green.