Skip to content

feat(attachment_bear_note): Support bear:NOTE_ID shorthand URI#605

Merged
JeanMertz merged 4 commits into
mainfrom
prr173
May 6, 2026
Merged

feat(attachment_bear_note): Support bear:NOTE_ID shorthand URI#605
JeanMertz merged 4 commits into
mainfrom
prr173

Conversation

@JeanMertz
Copy link
Copy Markdown
Collaborator

The Bear note attachment handler previously required the full bear://get/NOTE_ID URI form. This adds support for the opaque shorthand bear:NOTE_ID, where no authority (//) is present and the note ID is taken directly from the path.

This mirrors the shorthand pattern already used by the GitHub attachment handler, and makes it quicker to attach a note when you have the ID at hand:

jp attachment add "bear:2356A6D7-49D7-4818-8E37-3E02D1B95146"

JeanMertz added 4 commits May 6, 2026 11:29
Three related rendering bugs are addressed in `TurnView` and the
`TurnCoordinator`:

1. **Unclosed structured fences.** A conversation ending on a
   `ChatResponse::Structured` would print an opening ` ```json ` with no
   matching close. `flush()` only drained the chat sub-renderer; the
   structured renderer was left open. Content boundaries (`begin_turn`,
   `render_user_request`, `render_chat_response`, `enter_tool_call`,
   `reconfigure`) now each call `structured.flush()` before proceeding,
   and the top-level `flush()` (formerly `flush_all()`) closes both
   renderers. The old `flush()` (chat-only) is removed; `flush_all()` is
   renamed to `flush()`.

2. **Missing assistant header after Continue-before-first-chunk.**
   `reset_for_continuation` unconditionally set
   `assistant_header_rendered = true`, so if the user interrupted before
   any chunk arrived the flag was forced on and the resumed output had
   no `── jp …` boundary. The flag is now left as-is; if no header had
   been emitted yet it stays `false` and the next assistant event
   renders one normally.

3. **Missing user header on Reply interrupt (live vs replay gap).** When
   the user replied mid-stream, the new `ChatRequest` was pushed to the
   conversation but never rendered in live mode, so the terminal showed
   no `── alice …` boundary. `coordinator.rs` now calls
   `view.render_user_request()` before pushing the event, matching what
   replay emits.

Signed-off-by: Jean Mertz <git@jeanmertz.com>
When `build_execution_plan` encountered a `ToolCallRequest` with no
matching pending entry, it pushed the request into `orphaned` as a bare
`ToolCallRequest`. The caller in `turn_loop` then synthesized an error
response and assigned it an index of `approved.len() +
pre_resolved.len()` — effectively appending it at the end regardless of
where the request appeared in the stream.

Because `commit_tool_responses` sorts responses by index before
persisting them, this caused any orphaned response to land after all
non-orphaned responses, breaking document order in the stored
conversation.

The fix threads the document-order index through the orphaned path:
`orphaned` is now `Vec<(usize, ToolCallRequest)>` and
`build_execution_plan` populates the index from the same loop counter
used for `PlanItem`. The `turn_loop` destructs the pair and uses the
carried index directly when building the `pre_resolved` entry, removing
the incorrect append-to-end calculation entirely.

Also removes two stale references to internal Bear notes from code
comments.

Signed-off-by: Jean Mertz <git@jeanmertz.com>
The Bear note attachment handler previously required the full
`bear://get/NOTE_ID` URI form. This adds support for the opaque
shorthand `bear:NOTE_ID`, where no authority (`//`) is present and the
note ID is taken directly from the path.

This mirrors the shorthand pattern already used by the GitHub attachment
handler, and makes it quicker to attach a note when you have the ID at
hand:

    jp attachment add "bear:2356A6D7-49D7-4818-8E37-3E02D1B95146"

Signed-off-by: Jean Mertz <git@jeanmertz.com>
Signed-off-by: Jean Mertz <git@jeanmertz.com>
Base automatically changed from prr172 to main May 6, 2026 13:06
@JeanMertz JeanMertz merged commit 1726cea into main May 6, 2026
13 checks passed
@JeanMertz JeanMertz deleted the prr173 branch May 6, 2026 13:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant