feat(app): improve agent workflows and settings - #66
Conversation
Make concurrent agent sessions easier to follow with pane-scoped unread notifications and explicit lifecycle state. Add native prompt drafts and output readers, plus editor line navigation and local previews. Document the opt-in hook and editor setup.
Let users choose the file-link editor and open the bundled workflow guide from Settings. Apply editor changes on save and preserve cancel, reset, and undo behavior.
Include synthetic native text-view captures so reviewers can inspect prompt composition and output readability.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8bcc3b0b50
ℹ️ 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".
| AppCommand::Quit | AppCommand::About => return false, | ||
| _ => {} | ||
| } | ||
| true |
There was a problem hiding this comment.
Let unhandled commands reach the app
When a native text panel is the key window, the wildcard arm does nothing but the method still returns true, causing App::handle_app_command to stop dispatching. Consequently unrelated app-level commands such as Preferences, New Window, Next Notification, and quick-terminal toggles silently stop working whenever the supposedly modeless composer or reader has focus. Return false for commands the panel does not intentionally consume.
Useful? React with 👍 / 👎.
Pass unhandled commands through to app dispatch so modeless panels do not suppress settings, new windows, or notification navigation. Cover passthrough in the native panel smoke check.
Unread notifications from sibling panes now remain visible until their own pane is selected. This also adds native tools for composing long prompts, reading output, and navigating source files during concurrent agent sessions.
Setup is documented in Agent workflows. Editor CLIs must be on Noa's PATH; agent hooks are opt-in and existing agent settings are not modified automatically.
Validation completed:
cargo test --workspace --quiet— passed on the final implementation, including local IPC tests.cargo test -p noa-app --lib --quiet— 1,182 passed, 6 ignored.cargo build --workspaceandcargo fmt --all -- --check— passed.python3 -B -m unittest discover -s scripts -p test_noa_agent_hook.py— 4 passed.bash scripts/test-native-text-panels.sh— Japanese draft preservation, reader/guide modes, Find/selection routing, and clean closure passed on macOS.git diff --check— passed.Interactive Japanese IME candidate selection, actual editor CLI launches, and a live agent-hook session remain unverified. Structured agent status currently applies to local session cards.
Native text-view captures below use synthetic content from the GUI smoke check; window chrome and Find controls are outside the captured area.