Skip to content

v0.5.1

Latest

Choose a tag to compare

@github-actions github-actions released this 22 Jul 13:57

Added

  • Bug reporting from the Hub UI and the CLI. A "🐞 Bug report" button in
    the Hub opens a dialog where you describe the symptom and the steps to
    reproduce; the Hub then opens a pre-filled GitHub Issue form. Everything
    that will leave your machine is shown in a preview first. The same flow is
    available as many-ai-cli issue (--title / --provider / --dry-run);
    under MANY_AI_CLI_AUTO=1 only --dry-run is permitted. Environment
    details are gathered through an explicit allow-list (version, OS, arch, Go
    version, provider, model, User-Agent, hub port, per-provider last model) —
    the config file is never attached. Adds POST /api/bug-report/preview and
    POST /api/bug-report/finalize
    (internal/hub/bug_report_handler.go, internal/report/,
    cmd/many-ai-cli/issue.go, web/src/app/bug-report-modal.ts).
  • Optional session-log attachment for bug reports. Off by default. When
    enabled, the last 200 lines are redacted and shown to you, and only after
    you confirm are they uploaded via gh gist create --secret and linked from
    the issue body. Without gh, or if the gist fails, or if the issue URL
    would exceed 8192 bytes, the redacted report is written to
    ~/.many-ai-cli/reports/ instead and GitHub opens with the title only.
  • Vietnamese language support. Hub UI locale (web/src/i18n/vi.json),
    a Tiếng Việt entry in the language selector, automatic selection when
    navigator.language starts with vi, and vi-VN speech recognition.
    Vietnamese translations of the README, CLAUDE.md, and 11 manuals under
    docs/ are included. The UI locale is at full parity with Japanese and
    English (1337 keys each).
    Contributed by @ngav1491 in
    #2.
  • Copy button on each message in the Grok conversation viewer
    (web/src/app/grok-chat-viewer.ts).
  • include_body toggle in Hub Settings. The notification section now
    exposes the notify.include_body config key that was previously only
    editable by hand in config.yaml, with a note explaining that enabling it
    sends approval questions and completion summaries to an external service.
  • hub.wrapper_send_write_timeout_sec setting (default 5) for the
    WebSocket write deadline used by the wrapper.

Changed

  • Approval markers are now detected across scrollback. The VT buffer keeps
    a 500-line scrollback ring and marker extraction scans 300 lines instead of
    the visible 120, so multi-question blocks taller than the terminal (as Grok
    emits) are picked up. Native approval detection still looks only at the
    current screen, to avoid re-detecting prompts that were already answered
    (internal/hub/vt_buffer.go, approval_detector.go, wrapper_loop.go).
  • The wrapper no longer blocks PTY reads on WebSocket writes. Output now
    goes through a bounded 64-slot queue drained by a dedicated goroutine, so a
    stalled Hub connection can no longer freeze the wrapped CLI. If the queue
    overflows or a send fails, the connection is dropped as a transport fault
    rather than silently discarding output, and the existing 64 KB replay
    buffer restores a consistent screen on reconnect. The reconnect supervisor
    now distinguishes "Hub HTTP is alive but the WebSocket transport is broken"
    from a deliberate disconnect (internal/wrapper/wrapper.go).
  • AI-generated commit messages now follow Conventional Commits. Subjects
    are <type>(<scope>): …, where the scope is the first non-generic segment
    of the deepest common directory (src / internal / cmd / pkg / lib
    are skipped, so web/src/app yields app). The verb is chosen from ten
    candidates including new move, simplify, and handle detections
    (internal/hub/git_commit.go).
  • The session list no longer reorders cards when approvals arrive. Cards
    keep their position; pending approvals are indicated by the badge and the
    per-project pending count instead. Summary counts are localized and collapse
    to numbers only when space is tight (web/src/app/session-list.ts).
  • Working-directory favorites in the spawn panel are sorted automatically
    by folder name (ties broken by full path) instead of being manually
    ordered, and every row now commits on mousedown
    (web/src/app/spawn-panel.ts).
  • Task-completion notifications no longer send the summary body by default.
    SendDone now follows the same opt-in rule as approval notifications: only
    session #<id>: <status label> is sent unless notify.include_body is
    enabled, and when it is, the summary goes through MaskSecrets first.
    Previously the raw summary was sent to ntfy / webhook with truncation only.

Fixed

  • The ✕ on the action bar now suppresses the approval the same way the
    "✕ approve" control next to the input does. Previously it only hid the bar
    for 60 seconds, so the same question reappeared once the timer expired.
  • The action bar could stay hidden after switching back to a session when the
    Hub had already delivered that marker. It is now redrawn whenever the bar is
    empty or not visible (web/src/app/approval.ts).
  • A free-input option ("N. User specifies") was dropped when a single-section
    Q1-style block was flattened, so no free-input control appeared on the
    action bar (web/src/app/approval-parser.ts).
  • PTY resize suppression while the approval bar is shown was cut from 60
    seconds to 350 ms, followed by one authoritative viewport-size update. This
    stops Codex from redrawing against a stale row count and fossilizing blank
    lines into the scrollback (web/src/app/terminal.ts).
  • The preamble panel could not be expanded after being drag-resized, because
    the inline max-height survived; wheel events inside it no longer propagate
    to the terminal.
  • Approval summary cards no longer stretch vertically and leave a large gap in
    column layouts (web/src/styles/approval.css).
  • Dragging to select text in the Grok conversation and history viewers no
    longer clears the selection through focus recovery
    (web/src/app.ts, web/src/app/attachments.ts).
  • Session-dismiss no longer reorders other project groups. Dismissing a
    session in one project group used to bump neighbouring groups up/down
    because their keys were not yet registered in groupOrder. Unknown keys
    are now auto-appended so the visible ordering is stable across dismiss /
    spawn cycles (web/src/app/session-list.ts).
  • Auto-dismiss after Claude Code exits is now 24 h, not 5 s. The
    previous 5-second timer removed sessions from the list while the user
    was away from the desk, hiding recent exit context. Long-running desks
    now keep the finished session visible for up to a day.
  • Codex synchronized-update sequences pass through to xterm.js 6.0.0.
    ESC[?2026h / ESC[?2026l were being stripped, causing Codex to
    redraw past output line-by-line on every turn. The sequence is now
    forwarded so xterm.js batches the repaint as intended.
  • /api/debug/batch-log diagnostic endpoint. Temporary read-only
    endpoint for investigating the batch-approval action-bar redraw path;
    it will be removed once the underlying issue is confirmed fixed.

Removed

  • Drag-and-drop reordering of working-directory favorites in the spawn panel,
    superseded by automatic sorting (see Changed).

Security

  • All bug-report output is redacted at every boundary — preview, finalize,
    issue URL, and local fallback all pass through internal/report/redact.go.
    It masks provider and platform tokens (sk- / sk-ant-api*, ghp_ and the
    other GitHub prefixes, glpat-, xox[abprs]-, AIza, hf_, npm_,
    pypi-, xai-, gsk_, AWS key ids, JWTs, PEM private key blocks),
    generic secrets (?token= / Bearer / key: value pairs / credentials in
    URLs), private paths, home directories (so the account name never leaks),
    non-loopback IP addresses, email addresses, and private hostnames.
  • Attaching a session log requires a single-use preview token (32 random
    bytes, 15-minute TTL, constant-time comparison), so a gist is only created
    for content that was actually shown to you. Log reads are restricted to
    .jsonl files under <log_dir>/sessions after symlink resolution, capped
    at 512 KB, and returned gist URLs are strictly validated.
  • Second-pass audit fixes from plan_bughunt_audit_2026-07-19.md
    (F1 / F3 / F9 / F10 / F14 / F15 / F18 / F35).
    • F1: internal/hub/doctor_handler.go now threads r.Context()
      through the diagnostics HTTP calls instead of context.Background(),
      so a cancelled client no longer leaks probe goroutines.
    • F3: internal/hub/grok_history_handler.go returns early when
      os.UserHomeDir fails instead of walking an empty root, which used
      to expand into the process CWD on some Windows setups.
    • F9: internal/usagerelay validates that the injected hubURL
      resolves to a loopback address before forwarding, closing an SSRF
      surface exposed to co-tenant processes.
    • F10: HTML escaping for approval / bug-report previews is now
      served by a single local escapeHtml helper that also escapes
      single quotes, replacing three drifting per-file copies.
    • F14: privateNetworkBlockingDialContext now resolves the
      hostname itself and dials the verified IP directly, eliminating a
      DNS-rebinding TOCTOU window between the allow-list check and the
      real dial.
    • F15: handleNotifyConfig now routes the incoming payload
      through validateNotifyBackend, so an invalid backend combination
      can no longer be persisted to config.yaml and crash on next load.
    • F18: handleAuthLogin performs a strict PIN pre-format check
      before hitting the crypto compare path, rejecting malformed input
      without touching timing-sensitive code.
    • F35: WSL "open dir" now spawns explorer.exe <path> directly
      instead of cmd.exe /c start "" <path>, closing a
      command-injection surface on paths containing & / | / ".
  • Updated golang.org/x/crypto 0.52.0 → 0.54.0, golang.org/x/net 0.55.0 →
    0.57.0, golang.org/x/sys 0.45.0 → 0.47.0, golang.org/x/term 0.43.0 →
    0.45.0, and modernc.org/sqlite 1.51.0 → 1.54.0. Note that GO-2026-5932
    (x/crypto) has no fixed release upstream yet; govulncheck reports it at
    module level only and the affected symbols are not called by this project.