Repository navigation
Conversation
Signed-off-by: Bruney <[email protected]>
Contributor
|
✅ This PR no longer requires demo follow-up. |
Signed-off-by: Bruney <[email protected]>
Signed-off-by: Bruney <[email protected]> # Conflicts: # web/src/pages/settings/SettingsCustomizeSection.tsx
5 of 18 tasks
Resolve native runner conflicts using the shared launch lock registry, preserve Bob executable forwarding, and retain both orchestration helpers. Keep Bob excluded from idle reaping because its terminal context cannot be restored. Signed-off-by: Bruney <[email protected]>
Author
|
@daniellok-db I've merged the latest Validation after the merge:
Could you please review this PR when you have a chance? Thank you! |
This branch has not been deployed
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.
Related issue
Closes #8882
Summary
IBM Bob Shell users had no way to run Bob through Omnigent. This adds
bob-native, a terminal-first native harness:omnigent bob(or the web picker's IBM Bob row) runs the realbob chatTUI in a runner-owned tmux pane. Messages from the web composer are pasted into Bob's input box.NativeCodingAgentand provider row (key="bob", agentbob-native-ui, aliasesbobandnative-bob) plus a capability row. Built-in seeding, the CLI dispatch spec, lock coverage, interrupt/stop tables, readiness/install metadata (bob≥ 2.0.0, IBM's install script), the web picker/settings/grouping rows, and the agent-terminal id are wired the way Kiro, Goose, and Qwen are.❯composer row directly under a rule = ready; an↑↓ (n/m)selector = dialog) gates every keystroke:paste-bufferand again before the single Enter, and the staged buffer is deleted on refusal.--trust,--accept-license, or--auto-approve.bob chatoptions.--auto-approve,--workspace,--model, unknown options, and empty inline values are rejected, both in the CLI (before any backend starts) and at runner launch for persisted args.harness_supports_model_override, and a persisted model or effort override is refused at launch instead of being silently dropped.inherit_env=Falsewith an allowlist:PATH,HOME, locale, terminal,HTTP(S)_PROXY/NO_PROXY,NODE_EXTRA_CA_CERTS,BOB_LOG_LEVEL. Bob'sBOB_API_KEYis deliberately not forwarded; through Omnigent, Bob uses the IBMid login it stores in~/.bob.OMNIGENT_BOB_PATH(non-secret) now survives the CLI → daemon → runner hops, likeOMNIGENT_CODEX_PATH.elicitation=none,fork_history=none,subagents=false,streaming=false. The bench manifest now declaresmodel_override,tool_calling, andpolicy_denyas unsupported for Bob.Architecture tradeoff: Bob 2.0.2+ also documents
bob acp, which could be a one-row ACP harness. It is not used because it would not give users Bob's own interactive TUI. It is a possible follow-up.Test Plan
Environment: macOS, Python 3.12, Node 25.2, pnpm 11.15.1, tmux, IBM Bob Shell 2.0.5 (upgraded from 1.0.6 with IBM's checksum-verified installer).
uv run --no-sync pytest -q tests/test_bob_native.py→ 75 passed. Covers:2.0.5/2.0.0pass,1.0.6fails)--auto-approveand model/effort overridesuv run --no-sync pytest -q -p no:cacheprovider tests/test_bob_native.py tests/cli/test_host_daemon_env.py→ 105 passed. The threerun --harnessBob spellings reject--modelbefore_ensure_backend; focused native-dispatch/help tests add 55 passed.tests/runner tests/onboarding tests/cli tests/host tests/native tests/harness_bench tests/dev tests/server/test_app.py tests/server/test_builtin_bundles.pyplus the harness registry, capability, and alias tests) → 8013 passed, 26 failed. All 26 failures also fail on cleanmainin this environment (see below).pytest -n 8 --dist=loadfile) → 33207 passed, 82 failed. Re-running the 24 affected files on cleanmainreproduces 63 of them. The remaining 23 (deploy/entrypoint/guardrails/legal-files) pass when run in isolation on this branch (70 passed), so they are xdist ordering flakes. The pre-existing failures are environment-dependent: the local~/.claude/Codex login, a DB token callback, and timing.uv run --no-sync ruff check/ruff format --check(changed files) → clean.uv run --no-sync pyrefly check→ 0 errors.uv run --no-sync pre-commit run --all-files→ all hooks pass. The VS Code hook neededpnpm install --frozen-lockfile --filter ./editors/vscodefirst.git diff --check→ clean.pnpm run lint→ pass;pnpm run type-check→ pass;pnpm run build→ pass.LANG=en_US.UTF-8 NODE_OPTIONS=--no-experimental-webstorage pnpm test→ all pass. Without those settings the failures are pre-existing environment issues: Node 25's built-inlocalStorageshadows jsdom, and 4 number-formatting tests are locale-sensitive underes_ES.nativeCodingAgents(Bob resolution,native-bobalias, no picker capabilities),useTerminals(terminal_bob_mainis the agent pane), andAgentCard(generic icon fallback) cases.omnigent bob --server … -- --trustlaunchedbob chat --trustin a runner-owned tmux pane in a disposable directory. APOST /v1/sessions/{id}/eventsmessage (the web path) reached Bob, and Bob's one-word marker reply appeared in its pane. The pane was then killed, with no Bob, tmux, host, or runner processes left behind.git difffound 0 occurrences of the Bob key value. No fixture, snapshot, or test contains a credential.Demo
New-session picker on an isolated local server and host. IBM Bob is listed under Harnesses → Other with the generic bot-icon fallback (no IBM artwork). It is enabled because Bob 2.0.5 is installed; the other natives show the not-installed warning. The screenshot is cropped to exclude local paths.
GET /v1/agentson the same freshly seeded server includes{"name": "bob-native-ui", "harness": "bob-native"}, andGET /v1/harnesses→setup_steps["bob-native"]lists the install step.Type of change
Test coverage
Coverage notes
Manual verification:
HOMEto capture the real trust dialog, browser sign-in wait, ready composer (English andes_ESlocales), mid-turn "Enter to steer", and tool-approval dialog that the classifier fixtures are trimmed from./exitclean termination, and that a single Ctrl+C on an empty composer only arms exit (which is why drafts are not cleared).Not verified live: Escape interrupting a streaming Bob turn (it is Bob's documented key, and the fail-closed paths are unit-tested), web Stop / Stop session on a live Bob session, and Bob 2.0.0–2.0.4 (the floor is the documented 2.x CLI boundary; only 2.0.5 was driven).
Release notes
Should this change be included in the release notes? Choose exactly one.
Changelog
omnigent boband the web picker's IBM Bob entry run IBM Bob Shell 2.x's ownbob chatTUI as a native harness. Bob's sign-in, license, folder-trust, and tool-approval prompts stay in Bob's terminal.