fix(agent): route bare git clone progress into TUI log panel #51

Merged
frank merged 3 commits from agent/issue-50-tui-git-clone-progress-von-bare-repos-ze into main 2026-07-13 01:40:40 +02:00
Owner

Summary

  • Add optional progress writer to gitutil.Clone / CloneBare; CLI callers pass nil and keep terminal output.
  • Forward the watch/TUI log writer from EnsureRepoRoot to bare clone so first-time cache clones stay inside the dashboard log.
  • Existing RunLogWriter CR handling already collapses Receiving objects: xx% lines; added regression tests.

Test plan

  • go test ./...
  • Delete bare cache for a repo, run forge agent watch --tui, confirm clone progress appears in the log panel without corrupting the footer
  • Run forge agent watch --no-tui and confirm git progress still prints to stderr

Closes #50

## Summary - Add optional progress writer to `gitutil.Clone` / `CloneBare`; CLI callers pass `nil` and keep terminal output. - Forward the watch/TUI log writer from `EnsureRepoRoot` to bare clone so first-time cache clones stay inside the dashboard log. - Existing `RunLogWriter` CR handling already collapses `Receiving objects: xx%` lines; added regression tests. ## Test plan - [x] `go test ./...` - [ ] Delete bare cache for a repo, run `forge agent watch --tui`, confirm clone progress appears in the log panel without corrupting the footer - [ ] Run `forge agent watch --no-tui` and confirm git progress still prints to stderr Closes #50
Author
Owner

🚧 WIP pull request opened — linked to issue #50. Agent is working…

🚧 **WIP pull request opened** — linked to issue #50. Agent is working…
Author
Owner

💭 Agent progress

Ich werde Issue #50 umsetzen. Der Git-Clone-Progress bei Bare-Repos zerstört das TUI-Layout.

Git-Progress soll über das TUI-Log-Panel laufen. Ohne TUI bleibt die Ausgabe bei stderr. Ich suche jetzt im Code nach der aktuellen Implementierung.
Ich schaue mir zuerst die relevanten Stellen im Code an: Git-Clone, EnsureRepoRoot und die TUI-Log-Ausgabe.

💭 **Agent progress** Ich werde Issue #50 umsetzen. Der Git-Clone-Progress bei Bare-Repos zerstört das TUI-Layout. Git-Progress soll über das TUI-Log-Panel laufen. Ohne TUI bleibt die Ausgabe bei stderr. Ich suche jetzt im Code nach der aktuellen Implementierung. Ich schaue mir zuerst die relevanten Stellen im Code an: Git-Clone, `EnsureRepoRoot` und die TUI-Log-Ausgabe.
Author
Owner

💭 Agent progress

Ich lese weitere Dateien im Git-Flow-Prozess.

Nun werden status.go, tu.go und die Tests nach Verwendungen von CloneBare und runAuthenticated durchsucht.

💭 **Agent progress** Ich lese weitere Dateien im Git-Flow-Prozess. Nun werden status.go, tu.go und die Tests nach Verwendungen von CloneBare und runAuthenticated durchsucht.
Author
Owner

💭 Agent progress

Ich muss die runLogWriter-Implementierung für Carriage-Return-Handling verstehen. Ich prüfe auch, ob es Tests für gitutil.CloneBare gibt.

💭 **Agent progress** Ich muss die runLogWriter-Implementierung für Carriage-Return-Handling verstehen. Ich prüfe auch, ob es Tests für gitutil.CloneBare gibt.
Author
Owner

💭 Agent progress

Ich prüfe die Write-Methode von runLogWriter und die Tests in gitutil.

💭 **Agent progress** Ich prüfe die Write-Methode von runLogWriter und die Tests in gitutil.
Author
Owner

💭 Agent progress

Ich habe das Problem verstanden und bereite die Umsetzung vor.

Die Lösung erfordert einen optionalen io.Writer für den Git-Clone-Fortschritt in gitutil. EnsureRepoRoot leitet den Log-Writer dorthin. Andere Git-Befehle werden ebenfalls auf direkte Terminal-Ausgaben geprüft.

Der konkrete Ansatz ist ein neuer Parameter progress io.Writer in CloneBare und clone. Die Git-Ausgabe wird dann direkt an diesen Writer geleitet statt auf das Terminal zu schreiben.

Der Fortschritt soll nur bei einem angegebenen Writer geleitet werden. Ohne Writer bleibt die Ausgabe auf stderr. Die CLI-Kommandos in cmd/root.go bleiben unverändert.

Ein Hilfsfunktion outputWriters wird ergänzt. Sie leitet alle Ausgaben an den optionalen Writer oder auf os.Stdout/os.Stderr um, falls kein Writer angegeben ist. Damit bleibt die bestehende CLI-Nutzung vollständig abwärtskompatibel. FetchOrigin verwendet bereits den Log-Writer. Nun folgt die Implementierung und ein Test für EnsureRepoRoot.

Ein Unit-Test für den Writer-Parameter ist ohne echtes Git schwierig. Ein Integrationstest in agent.go wäre besser geeignet. Ich prüfe nun, wie agent.go den Log-Writer an EnsureRepoRoot übergibt.

💭 **Agent progress** Ich habe das Problem verstanden und bereite die Umsetzung vor. Die Lösung erfordert einen optionalen `io.Writer` für den Git-Clone-Fortschritt in `gitutil`. `EnsureRepoRoot` leitet den Log-Writer dorthin. Andere Git-Befehle werden ebenfalls auf direkte Terminal-Ausgaben geprüft. Der konkrete Ansatz ist ein neuer Parameter `progress io.Writer` in `CloneBare` und `clone`. Die Git-Ausgabe wird dann direkt an diesen Writer geleitet statt auf das Terminal zu schreiben. Der Fortschritt soll nur bei einem angegebenen Writer geleitet werden. Ohne Writer bleibt die Ausgabe auf stderr. Die CLI-Kommandos in `cmd/root.go` bleiben unverändert. Ein Hilfsfunktion `outputWriters` wird ergänzt. Sie leitet alle Ausgaben an den optionalen Writer oder auf `os.Stdout`/`os.Stderr` um, falls kein Writer angegeben ist. Damit bleibt die bestehende CLI-Nutzung vollständig abwärtskompatibel. `FetchOrigin` verwendet bereits den Log-Writer. Nun folgt die Implementierung und ein Test für `EnsureRepoRoot`. Ein Unit-Test für den Writer-Parameter ist ohne echtes Git schwierig. Ein Integrationstest in `agent.go` wäre besser geeignet. Ich prüfe nun, wie `agent.go` den Log-Writer an `EnsureRepoRoot` übergibt.
Author
Owner

💭 Agent progress

Ich prüfe in agent.go, ob errW bei aktivierter TUI ein RunLogWriter ist.

💭 **Agent progress** Ich prüfe in agent.go, ob errW bei aktivierter TUI ein RunLogWriter ist.
Author
Owner

💭 Agent progress

Bei aktivierter TUI leitet errW über status.WatchLogWriter() die Ausgabe direkt an die TUI weiter.

Der Fix übergibt den Log-Writer an CloneBare. Dafür werden clone, Clone und CloneBare in gitutil/git.go um einen optionalen io.Writer erweitert. EnsureRepoRoot leitet den Writer an CloneBare durch. CloneSSH bleibt unverändert. Ein Test für Carriage-Return-Progress in tui_test.go wird ergänzt.

Ein Test mit bytes.Buffer und lokaler file://-Quelle prüft die Writer-Übergabe. Pull und runAuthenticated laufen über CLI-Pfade und bleiben unverändert. Der Agent-Pfad nutzt bereits runGitAuth mit Log-Writer. Die API-Änderung setzt progress als letzten Parameter in Clone und CloneBare.

Aufrufe in root.go werden angepasst, damit nil an den neuen Writer-Parameter übergeben wird. Für EnsureRepoRoot wird ein Test mit einer lokalen file://-Remote-Quelle geprüft. Dazu muss die Implementierung von Forge.CloneURL analysiert werden.

💭 **Agent progress** Bei aktivierter TUI leitet `errW` über `status.WatchLogWriter()` die Ausgabe direkt an die TUI weiter. Der Fix übergibt den Log-Writer an `CloneBare`. Dafür werden `clone`, `Clone` und `CloneBare` in `gitutil/git.go` um einen optionalen `io.Writer` erweitert. `EnsureRepoRoot` leitet den Writer an `CloneBare` durch. `CloneSSH` bleibt unverändert. Ein Test für Carriage-Return-Progress in `tui_test.go` wird ergänzt. Ein Test mit `bytes.Buffer` und lokaler `file://`-Quelle prüft die Writer-Übergabe. `Pull` und `runAuthenticated` laufen über CLI-Pfade und bleiben unverändert. Der Agent-Pfad nutzt bereits `runGitAuth` mit Log-Writer. Die API-Änderung setzt `progress` als letzten Parameter in `Clone` und `CloneBare`. Aufrufe in `root.go` werden angepasst, damit `nil` an den neuen Writer-Parameter übergeben wird. Für `EnsureRepoRoot` wird ein Test mit einer lokalen `file://`-Remote-Quelle geprüft. Dazu muss die Implementierung von `Forge.CloneURL` analysiert werden.
Author
Owner

💭 Agent progress

Die Aufrufe in root.go müssen aktualisiert werden, um den Progress-Parameter als nil zu übergeben.

Ich plane Tests für EnsureRepoRoot mit einem lokalen Bare-Remote und gefilterter Log-Ausgabe. Ich prüfe, ob CloneURL per URL-Override angepasst werden kann.

💭 **Agent progress** Die Aufrufe in root.go müssen aktualisiert werden, um den Progress-Parameter als nil zu übergeben. Ich plane Tests für EnsureRepoRoot mit einem lokalen Bare-Remote und gefilterter Log-Ausgabe. Ich prüfe, ob CloneURL per URL-Override angepasst werden kann.
Author
Owner

💭 Agent progress

Ich teste den Bare-Clone lokal mit einer lokalen Git-URL.

Ich schreibe einen Go-Test für EnsureRepoRoot, der den Bare-Clone-Output in einem Buffer erfasst und auf die Progress-Meldungen prüft.

Die Git-Progress landet standardmäßig auf stderr. Ich leite sie in den Buffer um. Nun implementiere ich die Lösung.
Ich setze den Fix um: Git-Clone-Progress optional über einen Writer leiten und in EnsureRepoRoot an die TUI anbinden.

💭 **Agent progress** Ich teste den Bare-Clone lokal mit einer lokalen Git-URL. Ich schreibe einen Go-Test für `EnsureRepoRoot`, der den Bare-Clone-Output in einem Buffer erfasst und auf die Progress-Meldungen prüft. Die Git-Progress landet standardmäßig auf stderr. Ich leite sie in den Buffer um. Nun implementiere ich die Lösung. Ich setze den Fix um: Git-Clone-Progress optional über einen Writer leiten und in `EnsureRepoRoot` an die TUI anbinden.
Author
Owner

💭 Agent progress

Tests werden ergänzt. Ein Gitflow-Test prüft EnsureRepoRoot-Clone mit Log. Das TUI-Test wird um eine Git-ähnliche CR-Progress-Sequenz erweitert.

💭 **Agent progress** Tests werden ergänzt. Ein Gitflow-Test prüft EnsureRepoRoot-Clone mit Log. Das TUI-Test wird um eine Git-ähnliche CR-Progress-Sequenz erweitert.
Author
Owner

💭 Agent progress

Ich prüfe, ob strings bereits in tui_test.go importiert ist.

💭 **Agent progress** Ich prüfe, ob `strings` bereits in `tui_test.go` importiert ist.
Author
Owner

💭 Agent progress

Der Test ist fehlgeschlagen, weil ResolveRepoRootFor den aktuellen Arbeitsverzeichnis als Git-Repository erkannt hat.

Ich muss in ein temporäres Verzeichnis wechseln, wie es TestResolvRootForBareCache bereits tut.
Der Test schlägt fehl, weil das aktuelle Worktree-Repo gefunden wird — ich isoliere den Test in ein temporäres Verzeichnis.

💭 **Agent progress** Der Test ist fehlgeschlagen, weil ResolveRepoRootFor den aktuellen Arbeitsverzeichnis als Git-Repository erkannt hat. Ich muss in ein temporäres Verzeichnis wechseln, wie es TestResolvRootForBareCache bereits tut. Der Test schlägt fehl, weil das aktuelle Worktree-Repo gefunden wird — ich isoliere den Test in ein temporäres Verzeichnis.
Author
Owner

💭 Agent progress

Ein eindeutiger Owner/Repo-Name wird benötigt, um eine Übereinstimmung mit dem aktuellen Arbeitsverzeichnis zu vermeiden. Ein Wechsel in das leere cacheRoot-Verzeichnis löst das Problem, da dort kein Git-Repository mehr existiert.

Die Tests werden erneut ausgeführt.

💭 **Agent progress** Ein eindeutiger Owner/Repo-Name wird benötigt, um eine Übereinstimmung mit dem aktuellen Arbeitsverzeichnis zu vermeiden. Ein Wechsel in das leere cacheRoot-Verzeichnis löst das Problem, da dort kein Git-Repository mehr existiert. Die Tests werden erneut ausgeführt.
Author
Owner

💭 Agent progress

Der Test bestätigt die Korrektur. Der Clone-Progress wird korrekt erfasst.

Die Assertion wurde auf „Cloning into bare repository“ umgestellt. Bei einem kleinen lokalen Clone erscheint „Receiving objects“ möglicherweise nicht.

💭 **Agent progress** Der Test bestätigt die Korrektur. Der Clone-Progress wird korrekt erfasst. Die Assertion wurde auf „Cloning into bare repository“ umgestellt. Bei einem kleinen lokalen Clone erscheint „Receiving objects“ möglicherweise nicht.
Author
Owner

💭 Agent progress

Die Tests werden jetzt ausgeführt. Änderungen werden inkrementell committet.

💭 **Agent progress** Die Tests werden jetzt ausgeführt. Änderungen werden inkrementell committet.
Author
Owner

💭 Agent progress

Alle Tests bestanden. Ich werde nun schrittweise committen und pushen.

Die Änderungen werden in drei kleine Commits aufgeteilt: gitutil mit optionaler Progress-Ausgabe, Agent mit TUI-Log-Writer für Bare-Clones und Tests für die Log-Routung.
Alle Tests sind grün. Ich committe und pushe die Änderungen in logischen Schritten.

💭 **Agent progress** Alle Tests bestanden. Ich werde nun schrittweise committen und pushen. Die Änderungen werden in drei kleine Commits aufgeteilt: gitutil mit optionaler Progress-Ausgabe, Agent mit TUI-Log-Writer für Bare-Clones und Tests für die Log-Routung. Alle Tests sind grün. Ich committe und pushe die Änderungen in logischen Schritten.
Author
Owner

💭 Agent progress

Ich werde zwei Commits machen. Der erste betrifft die Kern-API-Änderung in gitutil und cmd/root.go.

Der zweite Commit richtet den Bare-Clone-Progress in die TUI-Log-Route um. Der dritte Commit fügt Tests für den Log-Routing und den CR-Progress hinzu.

💭 **Agent progress** Ich werde zwei Commits machen. Der erste betrifft die Kern-API-Änderung in gitutil und cmd/root.go. Der zweite Commit richtet den Bare-Clone-Progress in die TUI-Log-Route um. Der dritte Commit fügt Tests für den Log-Routing und den CR-Progress hinzu.
fix(gitutil): route git clone progress through optional writer
Some checks failed
CI / test (pull_request) Has been cancelled
CI / race (pull_request) Has been cancelled
8bea3e05c5
Allow Clone and CloneBare to capture stdout/stderr when a progress
writer is provided; CLI callers keep terminal output via nil.

Co-authored-by: Cursor <cursoragent@cursor.com>
Author
Owner

💭 Agent progress

Der erste Commit wurde gepusht. Nun folgen Agent-Änderungen und Tests.

💭 **Agent progress** Der erste Commit wurde gepusht. Nun folgen Agent-Änderungen und Tests.
fix(agent): pass watch log writer to bare repo clone
Some checks failed
CI / test (pull_request) Has been cancelled
CI / race (pull_request) Has been cancelled
3f6f79eed5
EnsureRepoRoot now forwards the TUI/err writer to git clone --bare so
progress stays inside the agent dashboard instead of the terminal.

Co-authored-by: Cursor <cursoragent@cursor.com>
Author
Owner

💭 Agent progress

Die Tests werden nun committet.

💭 **Agent progress** Die Tests werden nun committet.
test(agent): cover bare clone log routing and CR progress
All checks were successful
CI / test (pull_request) Successful in 34s
CI / race (pull_request) Successful in 34s
0b67515ebf
Verify EnsureRepoRoot captures git clone output in the log writer and
that carriage-return progress lines collapse to a single TUI log line.

Co-authored-by: Cursor <cursoragent@cursor.com>
frank changed title from WIP: #50 TUI: Git-Clone-Progress von bare-Repos zerstört Layout to fix(agent): route bare git clone progress into TUI log panel 2026-07-13 01:39:54 +02:00
Author
Owner

forge agent finished implementation

  • Commit: test(agent): cover bare clone log routing and CR progress
  • Pull request: #51
  • Next: waiting for CI / babysitting fixes if needed
internal/agent/gitflow_test.go | 24 ++++++++++++++++++++++++
 internal/agent/tui_test.go     | 28 ++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)
Agent output (tail)
## Zusammenfassung
Git-Clone-Progress von bare-Repos landet nicht mehr direkt auf dem Terminal und zerstört damit nicht mehr das TUI-Layout.
**Änderungen:**
1. **`internal/gitutil/git.go`** – `Clone`/`CloneBare` nehmen einen optionalen `progress io.Writer`. Ist er gesetzt, gehen stdout/stderr dorthin; bei `nil` bleibt das bisherige Terminal-Verhalten.
2. **`internal/agent/gitflow.go`** – `EnsureRepoRoot` reicht den vorhandenen `log`-Writer an `CloneBare` weiter (wie schon bei `FetchOrigin` und anderen Git-Aufrufen).
3. **Tests** – `TestEnsureRepoRootCloneUsesLogWriter` prüft die Weiterleitung; `TestRunLogWriterGitCloneProgress` prüft CR-basierten Git-Progress im TUI-Log.
**Commits (3, gepusht):**
- `fix(gitutil): route git clone progress through optional writer`
- `fix(agent): pass watch log writer to bare repo clone`
- `test(agent): cover bare clone log routing and CR progress`
PR_TITLE: fix(agent): route bare git clone progress into TUI log panel
PR_BODY:
## Summary
- Add optional progress writer to `gitutil.Clone` / `CloneBare`; CLI callers pass `nil` and keep terminal output.
- Forward the watch/TUI log writer from `EnsureRepoRoot` to bare clone so first-time cache clones stay inside the dashboard log.
- Existing `RunLogWriter` CR handling already collapses `Receiving objects: xx%` lines; added regression tests.
## Test plan
- [x] `go test ./...`
- [ ] Delete bare cache for a repo, run `forge agent watch --tui`, confirm clone progress appears in the log panel without corrupting the footer
- [ ] Run `forge agent watch --no-tui` and confirm git progress still prints to stderr
✅ **forge agent finished implementation** - Commit: `test(agent): cover bare clone log routing and CR progress` - Pull request: https://repository.hildebrandt.io/frank/forgecli/pulls/51 - Next: waiting for CI / babysitting fixes if needed ``` internal/agent/gitflow_test.go | 24 ++++++++++++++++++++++++ internal/agent/tui_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) ``` <details><summary>Agent output (tail)</summary> ``` ## Zusammenfassung Git-Clone-Progress von bare-Repos landet nicht mehr direkt auf dem Terminal und zerstört damit nicht mehr das TUI-Layout. **Änderungen:** 1. **`internal/gitutil/git.go`** – `Clone`/`CloneBare` nehmen einen optionalen `progress io.Writer`. Ist er gesetzt, gehen stdout/stderr dorthin; bei `nil` bleibt das bisherige Terminal-Verhalten. 2. **`internal/agent/gitflow.go`** – `EnsureRepoRoot` reicht den vorhandenen `log`-Writer an `CloneBare` weiter (wie schon bei `FetchOrigin` und anderen Git-Aufrufen). 3. **Tests** – `TestEnsureRepoRootCloneUsesLogWriter` prüft die Weiterleitung; `TestRunLogWriterGitCloneProgress` prüft CR-basierten Git-Progress im TUI-Log. **Commits (3, gepusht):** - `fix(gitutil): route git clone progress through optional writer` - `fix(agent): pass watch log writer to bare repo clone` - `test(agent): cover bare clone log routing and CR progress` PR_TITLE: fix(agent): route bare git clone progress into TUI log panel PR_BODY: ## Summary - Add optional progress writer to `gitutil.Clone` / `CloneBare`; CLI callers pass `nil` and keep terminal output. - Forward the watch/TUI log writer from `EnsureRepoRoot` to bare clone so first-time cache clones stay inside the dashboard log. - Existing `RunLogWriter` CR handling already collapses `Receiving objects: xx%` lines; added regression tests. ## Test plan - [x] `go test ./...` - [ ] Delete bare cache for a repo, run `forge agent watch --tui`, confirm clone progress appears in the log panel without corrupting the footer - [ ] Run `forge agent watch --no-tui` and confirm git progress still prints to stderr ``` </details>
Author
Owner
🟢 **CI green** (attempt 1/3) https://repository.hildebrandt.io/frank/forgecli/actions/runs/115
Author
Owner

💭 Agent progress

Die Implementierung ist abgeschlossen. Ich erstelle nun die Zusammenfassung mit den geforderten Markern.

Zusammenfassung

Git-Clone-Progress von bare-Repos landet nicht mehr direkt auf dem Terminal und zerstört damit nicht mehr das TUI-Layout.
Änderungen:

  1. internal/gitutil/git.goClone/CloneBare nehmen einen optionalen progress io.Writer. Ist er gesetzt, gehen stdout/stderr dorthin; bei nil bleibt das bisherige Terminal-Verhalten.
  2. internal/agent/gitflow.goEnsureRepoRoot reicht den vorhandenen log-Writer an CloneBare weiter (wie schon bei FetchOrigin und anderen Git-Aufrufen).
  3. TestsTestEnsureRepoRootCloneUsesLogWriter prüft die Weiterleitung; TestRunLogWriterGitCloneProgress prüft CR-basierten Git-Progress im TUI-Log.
    Commits (3, gepusht):
  • fix(gitutil): route git clone progress through optional writer
  • fix(agent): pass watch log writer to bare repo clone
  • test(agent): cover bare clone log routing and CR progress

Summary

  • Add optional progress writer to gitutil.Clone / CloneBare; CLI callers pass nil and keep terminal output.
  • Forward the watch/TUI log writer from EnsureRepoRoot to bare clone so first-time cache clones stay inside the dashboard log.
  • Existing RunLogWriter CR handling already collapses Receiving objects: xx% lines; added regression tests.

Test plan

  • go test ./...
  • Delete bare cache for a repo, run forge agent watch --tui, confirm clone progress appears in the log panel without corrupting the footer
  • Run forge agent watch --no-tui and confirm git progress still prints to stderr
💭 **Agent progress** Die Implementierung ist abgeschlossen. Ich erstelle nun die Zusammenfassung mit den geforderten Markern. ## Zusammenfassung Git-Clone-Progress von bare-Repos landet nicht mehr direkt auf dem Terminal und zerstört damit nicht mehr das TUI-Layout. **Änderungen:** 1. **`internal/gitutil/git.go`** – `Clone`/`CloneBare` nehmen einen optionalen `progress io.Writer`. Ist er gesetzt, gehen stdout/stderr dorthin; bei `nil` bleibt das bisherige Terminal-Verhalten. 2. **`internal/agent/gitflow.go`** – `EnsureRepoRoot` reicht den vorhandenen `log`-Writer an `CloneBare` weiter (wie schon bei `FetchOrigin` und anderen Git-Aufrufen). 3. **Tests** – `TestEnsureRepoRootCloneUsesLogWriter` prüft die Weiterleitung; `TestRunLogWriterGitCloneProgress` prüft CR-basierten Git-Progress im TUI-Log. **Commits (3, gepusht):** - `fix(gitutil): route git clone progress through optional writer` - `fix(agent): pass watch log writer to bare repo clone` - `test(agent): cover bare clone log routing and CR progress` ## Summary - Add optional progress writer to `gitutil.Clone` / `CloneBare`; CLI callers pass `nil` and keep terminal output. - Forward the watch/TUI log writer from `EnsureRepoRoot` to bare clone so first-time cache clones stay inside the dashboard log. - Existing `RunLogWriter` CR handling already collapses `Receiving objects: xx%` lines; added regression tests. ## Test plan - [x] `go test ./...` - [ ] Delete bare cache for a repo, run `forge agent watch --tui`, confirm clone progress appears in the log panel without corrupting the footer - [ ] Run `forge agent watch --no-tui` and confirm git progress still prints to stderr
frank merged commit dfbe42a330 into main 2026-07-13 01:40:40 +02:00
frank deleted branch agent/issue-50-tui-git-clone-progress-von-bare-repos-ze 2026-07-13 01:40:40 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frank/forgecli!51
No description provided.