# Capture changes into my fork

You're integrating one or more commits from a sibling GitHub fork into
the CURRENT WORKING DIRECTORY. The CWD should already be a clean git
working tree on a branch you're willing to commit to.

## Source thread: dropthejase polishes the chat surface

Seventeen small fixes to the streaming chat UI that you only catch by using the product every day.

| # | SHA | Subject | Fork | Authored |
|---|-----|---------|------|----------|
| 1 | [`2b301415`](https://github.com/dropthejase/louis/commit/2b30141533bb1ce5fd39111c6a31e2313184f871) | fix(sidebar): always navigate to /assistant after chat delete | `dropthejase/louis` | 2026-05-12 |
| 2 | [`37c8b1d5`](https://github.com/dropthejase/louis/commit/37c8b1d54f0f51826c6729ec78ae61d706201ee9) | fix(chat): fallback to dated title when LLM returns unhelpful generate-title res | `dropthejase/louis` | 2026-05-12 |
| 3 | [`51d7f384`](https://github.com/dropthejase/louis/commit/51d7f38495958f97586abad3ec1b1ea8a5e1a19d) | fix(AssistantChatPage): remove 2s timeout redirect for empty messages | `dropthejase/louis` | 2026-05-12 |
| 4 | [`acba2e4f`](https://github.com/dropthejase/louis/commit/acba2e4f0157fd91c29839ae576ec76706b0f6d0) | fix(edit-document): align annotation field names with MikeEditAnnotation type | `dropthejase/louis` | 2026-05-12 |
| 5 | [`3206edf0`](https://github.com/dropthejase/louis/commit/3206edf0378488ca374bfd74a81435e1f24306cb) | fix(agent): resolve read_document spinner stuck forever | `dropthejase/louis` | 2026-05-12 |
| 6 | [`256b41ba`](https://github.com/dropthejase/louis/commit/256b41ba3c1dd37d0a39daa9c9e88d28469be9d0) | feat(frontend): cycle thinking phrases randomly in ReasoningBlock and ThinkingBl | `dropthejase/louis` | 2026-05-12 |
| 7 | [`7eca5fd2`](https://github.com/dropthejase/louis/commit/7eca5fd260b0cc5859833fca63d3cbc1dadce38b) | feat(agents): enable extended thinking, disable printer, add reasoning SSE event | `dropthejase/louis` | 2026-05-12 |
| 8 | [`ee1668eb`](https://github.com/dropthejase/louis/commit/ee1668eb5ce3ee9b9c0cdf3f2910718c6b997963) | fix(frontend): collapse tool card immediately when trailing content event is sti | `dropthejase/louis` | 2026-05-13 |
| 9 | [`cbd9640d`](https://github.com/dropthejase/louis/commit/cbd9640dfbde4a562b1dd2e1a45216d21ac63ae0) | refactor(frontend): extract MessageList shared component for chat message render | `dropthejase/louis` | 2026-05-13 |
| 10 | [`f99b111a`](https://github.com/dropthejase/louis/commit/f99b111a6239109060e0da8b4875c4e0102ab4af) | fix(frontend): widen MessageList ref types to accept null | `dropthejase/louis` | 2026-05-13 |
| 11 | [`9afbe9d4`](https://github.com/dropthejase/louis/commit/9afbe9d494ed25f3b955866209dc809e52e466b5) | fix(frontend): collapse edit cards on resolve; fix tool card bleed in Project Ch | `dropthejase/louis` | 2026-05-13 |
| 12 | [`95ff93fc`](https://github.com/dropthejase/louis/commit/95ff93fc31c68b9ce67decf848f36a8dff3abba1) | fix(frontend): remove unreachable Accepted/Rejected button labels after early re | `dropthejase/louis` | 2026-05-13 |
| 13 | [`dc7aa1d1`](https://github.com/dropthejase/louis/commit/dc7aa1d16b5cc24a558420d38499569e00837533) | feat(frontend): extract MessageList component; fix edit card collapse and tool c | `dropthejase/louis` | 2026-05-13 |
| 14 | [`af49112e`](https://github.com/dropthejase/louis/commit/af49112ea4919b40058f9e9e24848596f2c44ce0) | fix(frontend): derive PreResponseWrapper isOpen from props during streaming to e | `dropthejase/louis` | 2026-05-13 |
| 15 | [`4dd0b8a7`](https://github.com/dropthejase/louis/commit/4dd0b8a7ace5b70a67f5ea28fa80e93e00bd363f) | fix(frontend): use context deleteChat in ProjectChatPage so sidebar updates imme | `dropthejase/louis` | 2026-05-13 |
| 16 | [`f757bc84`](https://github.com/dropthejase/louis/commit/f757bc841866ba28dd6a999a8956bb298ed8038b) | fix(streaming): prevent tool_call_start from splitting mid-sentence content bloc | `dropthejase/louis` | 2026-05-15 |
| 17 | [`e25bfd80`](https://github.com/dropthejase/louis/commit/e25bfd801d93fcfae47c32dc8ed383d7d401a743) | Merge feature/fix-tool-call-streaming into development | `dropthejase/louis` | 2026-05-15 |

### Commit URLs (for your tooling)

1. https://github.com/dropthejase/louis/commit/2b30141533bb1ce5fd39111c6a31e2313184f871
2. https://github.com/dropthejase/louis/commit/37c8b1d54f0f51826c6729ec78ae61d706201ee9
3. https://github.com/dropthejase/louis/commit/51d7f38495958f97586abad3ec1b1ea8a5e1a19d
4. https://github.com/dropthejase/louis/commit/acba2e4f0157fd91c29839ae576ec76706b0f6d0
5. https://github.com/dropthejase/louis/commit/3206edf0378488ca374bfd74a81435e1f24306cb
6. https://github.com/dropthejase/louis/commit/256b41ba3c1dd37d0a39daa9c9e88d28469be9d0
7. https://github.com/dropthejase/louis/commit/7eca5fd260b0cc5859833fca63d3cbc1dadce38b
8. https://github.com/dropthejase/louis/commit/ee1668eb5ce3ee9b9c0cdf3f2910718c6b997963
9. https://github.com/dropthejase/louis/commit/cbd9640dfbde4a562b1dd2e1a45216d21ac63ae0
10. https://github.com/dropthejase/louis/commit/f99b111a6239109060e0da8b4875c4e0102ab4af
11. https://github.com/dropthejase/louis/commit/9afbe9d494ed25f3b955866209dc809e52e466b5
12. https://github.com/dropthejase/louis/commit/95ff93fc31c68b9ce67decf848f36a8dff3abba1
13. https://github.com/dropthejase/louis/commit/dc7aa1d16b5cc24a558420d38499569e00837533
14. https://github.com/dropthejase/louis/commit/af49112ea4919b40058f9e9e24848596f2c44ce0
15. https://github.com/dropthejase/louis/commit/4dd0b8a7ace5b70a67f5ea28fa80e93e00bd363f
16. https://github.com/dropthejase/louis/commit/f757bc841866ba28dd6a999a8956bb298ed8038b
17. https://github.com/dropthejase/louis/commit/e25bfd801d93fcfae47c32dc8ed383d7d401a743

## What I want you to do

1.  **Sanity check first.**

    - Run `git status`. If the working tree is dirty (uncommitted
      changes you don't recognise, untracked stuff you don't expect),
      STOP and tell me — don't try to be helpful by stashing. I'll
      resolve it.
    - Run `git branch --show-current`. If the branch is `main` or
      `master`, confirm with me before proceeding.

2.  **For each commit URL above, in the order listed:**

    a.  Fetch the diff. Pick whichever works:
        - `gh api repos/<owner>/<repo>/commits/<sha>` returns the full
          patch in JSON.
        - WebFetch the URL with `.patch` appended, e.g.
          `https://github.com/<owner>/<repo>/commit/<sha>.patch`.

    b.  Read the original commit message. That's the AUTHOR's intent —
        respect it.

    c.  Read the diff and understand the change. **Don't blindly
        cherry-pick.** This is a sibling fork — paths, naming, and
        structure can differ. You're porting, not pasting.

    d.  Compare against THIS repo's layout:
        - File at the same path → apply the change.
        - File exists under a different name (renamed / restructured) →
          apply the equivalent change at the right location.
        - File doesn't exist here at all → decide: new file we want, or
          is the source adding something this repo already has by
          another name? Use judgement. Lean towards creating the file
          when in doubt — easier for me to delete than to recreate.

    e.  Apply the change. Run `git diff` after, eyeball it, fix
        obvious issues (lint errors, broken imports, typos in the diff
        itself).

    f.  Commit with a message that:
        - Preserves the source commit's subject line.
        - Adds a short body explaining what you adapted, if anything.
        - Includes trailers:

              Source: <commit-url>
              Source-author: <original author name>

        so the attribution stays clear.

3.  **After all commits are applied:**

    - Run `git log --oneline -<count>` showing what you produced.
    - Show `git status` final state.
    - List any files you skipped, conflicts you resolved, and any
      assumptions you made.

## Rules

- **Do not push.** Local commits only. I'll review and push.
- **Do not rebase or force.** Only fresh commits. If you'd otherwise
  need a force push, stop and explain why.
- **Don't touch `.git/config` or run `git remote add`.** Leave my
  repo's remote setup alone.
- **No package installs, build steps, or migrations** unless the
  change manifestly requires it AND you explicitly tell me what
  you're about to run first.
- **One commit per source commit.** Don't squash. Don't split. If
  porting genuinely requires either, explain.
- **Read existing code before changing it.** This isn't the source
  fork. Match the local style.

## If you get stuck

Stop and tell me. Show what you've already done (commits made, files
changed), what blocked you (conflict, missing file, ambiguous intent),
and your recommended next move. I'd rather ship 3 of 5 commits cleanly
than have you guess on the 4th and break things.
