test(e2e): skip upstream create-project dialog cases on Crew - #4848
test(e2e): skip upstream create-project dialog cases on Crew#4848oscarlehuu wants to merge 136 commits into
Conversation
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
) * fix(desktop): arch-scope managed node-tools and self-repair adapters Close #4: scope the npm prefix by platform, isolate product dirs, purge+reinstall on arch mismatch with a guarded delete, pin managed adapter PATH to an existing Node binary, and replace upstream npm -g advice with an in-app repair hint. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> * fix(desktop): harden node-tools purge guard against path escapes Reject `..` components and the node-tools root itself before purge, make the guard injectable for hermetic fixtures, and run arch self-repair even when plan_adapter_install skips because an adapter already looks current. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> * fix(desktop): close managed-node arch-repair review blockers Split managed adapter install into modules for the file-size ratchet, match arch per adapter family, reinstall purged siblings as visible non-fatal steps, and gate PATH/spawn on the managed Node version probe. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> * fix(desktop): close managed-npm purge/repair re-review blockers Keep sibling repair accounting after primary failure, ignore orphan optionals, serialize the shared npm prefix, and memoize Node readiness as true-only so install can observe missing→ready. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> * fix(desktop): surface adapter-repair warnings and fresh spawn probe Keep primary install success:true while UI shows failed sibling adapter-repair steps, and clear the positive Node probe memo at managed-adapter spawn so a stale true cache cannot pass a missing binary. Hermetic tempfile seam replaces app data_dir rename tests. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> --------- Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
* feat: isolate project agent threads in worktrees Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> * test: align project relay contract with worktree isolation Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> --------- Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
* docs: clarify NuncioCrew fork identity for agents Add IDENTITY.md and entry-point notices so agents stop treating this checkout as stock block/buzz while leaving upstream Buzz docs intact. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> * docs: finish fork identity pointers for agents Point agent-facing clone/PR/gh commands at Nuncio-hq/crew, expand macOS data-dir map, and route release steps to docs/crew without touching CI. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> --------- Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Oscar Le Huu <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Signed-off-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-Authored-By: Oscar Le <oscar.lehuu@gmail.com>
Add Hermes to KNOWN_ACP_RUNTIMES so bare `hermes` on PATH probes as installed, default args map `hermes` → `acp`, and spawn always attaches buzz-dev-mcp (Hermes' sandbox strips BUZZ_* — verification 0006). Model and provider stay locked to the Hermes profile (Claude shape; D-019), with a declarative HERMES_ACP_SKIP_CONFIGURED_MCP default mirrored in buzz-acp. No auth_probe_args yet — Hermes v0.20.0 lacks exit-code semantics (spike 0010). Lands as Crew fork delta per D-020. Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Upstream v0.5.5 added the sidecar to tauri.conf and bundle-sidecars.sh, but Crew-owned CI/release/local build lists were left at five binaries. macOS ARM package failed looking for the sixth stub; release would have failed silently on the next dispatch. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Merge stacked both sides against the 1000-line ceiling. Split Crew-owned helpers/UI out of the hot sync files so Desktop Fast can pass without bumping limits, and keep future upstream syncs from colliding on the same blobs. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
feat(desktop): promote Hermes Agent to a tier-1 ACP runtime
Show which channel threads have agents working without opening each thread, and degrade the denser summary row via container-query tiers. Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Restore atomic::Ordering import dropped by file-size extract (E0433). Keep Crew discovery windows_install path and main's .cmd/.bat identity strip; renumber Repository decision to D-021 beside Hermes D-020. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
a0819b5 claimed the extract Ordering fix but left a bare Ordering in lib.rs (E0433). Point the Project send-contract at useMentionSendComplete and document D-022 extract + workflow audit in UPSTREAM-SYNC. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
docs: update Hermes runbook for the tier-1 runtime entry
Path-qualified Ordering uses remain; unused import fails clippy -D warnings. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
feat(desktop): per-thread agent status chip + responsive thread row
Smoke shard 3 failed after the v0.5.5 sync because TimelineMessageRow never received openThreadAnchorId (cast-hidden) and no-upload clear ran after the full send await. Wire the typed prop + isActive, clear inside finishSend after resolve succeeds, and keep an independent resolve-fail→no-clear contract assert. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
…08-05 Resolve TimelineMessageList conflict by keeping extracted sticky day divider (MessageRowItem lives in TimelineMessageRow). Pass channelId + profiles into MessageThreadSummaryRow so the new agent status chip wires. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
fix(acp): recover detached thread worktrees safely
…026-08-05 Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
sync: Buzz Desktop v0.5.5 (Refs #43)
Crew routes Projects → Create → Project through CrewAddProjectFlow (local folder picker), so CreateProjectDialog never mounts and these four upstream multi-repo create tests time out on create-project-name. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: oscarlehuu <oscar.lehuu@gmail.com> Signed-off-by: oscarlehuu <oscar.lehuu@gmail.com>
|
Opened against wrong repo (upstream). Replacing with Nuncio-hq/crew PR. |
| desktop-rust: ${{ steps.filter.outputs.desktop-rust }} | ||
| relay: ${{ steps.filter.outputs.relay }} | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 35 | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 45 | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| VITE_NUNCIO_CREW_CHANNEL: dev | ||
| VITE_NUNCIO_CREW_RELEASES_URL: https://github.com/Nuncio-hq/crew/releases | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 35 | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| matrix: | ||
| shard: [1, 2, 3, 4] | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 5 | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| VITE_NUNCIO_CREW_CHANNEL: ${{ inputs.channel }} | ||
| VITE_NUNCIO_CREW_RELEASES_URL: https://github.com/Nuncio-hq/crew/releases | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| runs-on: ubuntu-latest | ||
| timeout-minutes: 60 | ||
| steps: | ||
| - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6 |
| run: | | ||
| just desktop-install-ci | ||
| cd desktop | ||
| node scripts/set-version-from-tag.mjs \ | ||
| "${{ steps.release.outputs.version }}" | ||
| node scripts/sync-nuncio-crew-cargo-lock-version.mjs \ | ||
| buzz-desktop "${{ steps.release.outputs.version }}" | ||
|
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3723bbddae
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| updatedAt: number; | ||
| }; | ||
|
|
||
| const retryingByConversation = new Map<string, RetryingTurn>(); |
There was a problem hiding this comment.
Reset retrying-turn state on community switches
This new module-level map stores retry state keyed by conversation/channel, but it has no production reset path and is only cleared by a later turn_started for the same conversation. After switching communities, any old retrying frame stays in memory, so a new community with the same channel or conversation id can show a stale “Retrying n/N” badge from the previous relay until another retry/start overwrites it; add a reset function and wire it into resetCommunityState().
Useful? React with 👍 / 👎.
| let answer_filter = serde_json::json!({ | ||
| "kinds": [KIND_AGENT_USER_INPUT_ANSWER], | ||
| "#h": [channel], | ||
| "limit": 500 |
There was a problem hiding this comment.
Exclude resolved user-input requests from the list
Terminal user-input requests are represented by KIND_AGENT_USER_INPUT_RESOLVED, but cmd_list only queries request and answer events. When a turn is cancelled or the agent exits before any answer is published, that resolved request remains in user-input list forever and can be answered late even though the runtime has already terminally resolved it; query resolution events and filter those request ids as well.
Useful? React with 👍 / 👎.
| if kind_u32 == KIND_STREAM_MESSAGE_EDIT { | ||
| handle_queued_message_edit( | ||
| &buzz_event.event, | ||
| buzz_event.channel_id, | ||
| &mut queue, |
There was a problem hiding this comment.
Verify edit authors before patching queued prompts
This edit path runs before the normal author gate, and handle_queued_message_edit only trusts the edit event's e/p-removed tags when patching or removing queued work. If any non-owner or disallowed channel member publishes kind 40003 targeting someone else's still-held mention, they can replace the prompt the agent sees or drop it entirely; look up the queued target and require the edit signer to match the original message author before applying it.
Useful? React with 👍 / 👎.
| sender: tx, | ||
| }, | ||
| ); | ||
| if let Err(error) = self.publisher.publish_event(event).await { |
There was a problem hiding this comment.
Use an acked durable path for user-input events
Here publish_event only enqueues the request on the harness WebSocket publisher, whose PublishEvent path is best-effort and drops non-observer events while rate-limited or disconnected. In that state publish() still returns success and leaves the elicitation pending, but no durable request reaches the relay for the owner to answer, so the agent waits on an invisible question; publish user-input request/resolution events through an acked durable path instead.
AGENTS.md reference: AGENTS.md:L656-L662
Useful? React with 👍 / 👎.
| for (const event of deduped) { | ||
| const resolution = parseUserInputResolution(event); | ||
| const requestId = getResolvedRequestId(event); | ||
| if (resolution && requestId) resolved.set(requestId, resolution.outcome); |
There was a problem hiding this comment.
Require matching authors on resolution events
Because pending derivation accepts any resolved event with an e tag for the request id, any channel member can publish kind 46042 for a live request and make the desktop remove the card even though the ACP runtime is still waiting for the owner. Only treat a resolution as terminal when it is authored by the same agent pubkey as the original request (and ideally when the content request id matches the tag).
Useful? React with 👍 / 👎.
| ? '$triggerLabel · ${formatElapsed(elapsedMs)}' | ||
| : triggerLabel; | ||
|
|
||
| final stopping = useState(false); |
There was a problem hiding this comment.
Hoist the stopping hook before early returns
This widget returns before calling useState(false) whenever there are no active agents or the activity is still in the silence window, but later builds for the same mounted widget call that additional hook once activity becomes visible. flutter_hooks relies on a stable hook call order across builds, so a normal channel that starts idle and then receives agent activity can trip hook-order failures or attach state incorrectly; move this hook above the conditional returns or split the visible row into a child widget.
Useful? React with 👍 / 👎.
| - name: Desktop Tauri Rust format | ||
| run: just desktop-tauri-fmt-check | ||
| - name: Desktop Tauri Rust lint | ||
| run: just desktop-tauri-clippy |
There was a problem hiding this comment.
Install Tauri Linux deps in upstream-sync
This manual workflow runs on a fresh ubuntu-latest runner and reaches just desktop-tauri-clippy without installing the Linux Tauri packages that the new nuncio-crew-ci.yml desktop-rust job installs before the same command (libwebkit2gtk-4.1-dev, GTK, ayatana, xdo, etc.). The Tauri crate build needs those pkg-config libraries, so the upstream-sync compatibility job will fail before it can validate a sync; add the same install step before the Tauri clippy/test steps.
Useful? React with 👍 / 👎.
Summary
project-commit-detailcreate-project tests are not a mock-bridge/useChannelsQueryfailure.CrewProjectsScreen, which passesonCreateRepositoryintoProjectsView, so Create → Project opensCrewAddProjectFlow(local folder picker) and never mounts upstreamCreateProjectDialog/create-project-name.Test plan
project-commit-detailtests still runMade with Cursor