Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat: downloads pane in footer with pull job tracking#1165

Merged
thinmintdev merged 5 commits into
mainfrom
feat/downloads-pane
Jul 8, 2026
Merged

feat: downloads pane in footer with pull job tracking#1165
thinmintdev merged 5 commits into
mainfrom
feat/downloads-pane

Conversation

@thinmintdev

@thinmintdev thinmintdev commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a Downloads tab to the footer pane for tracking model download progress, with history of completed/failed/cancelled pulls.

Backend

  • GET /api/models/pulls — merged list of active (in-memory) + terminal (persisted) jobs
  • DELETE /api/models/pulls/{model_id} — clear terminal jobs (409 if active)
  • list_persisted_jobs() helper to read persisted JSON job snapshots
  • hal0:pull-started custom event dispatched from usePullJob for auto-expand

Frontend

  • Two-tab footer: Journal | Downloads
  • Downloads pane with row-per-job: HF repo link, progress bar, speed, destination path
  • Per-row actions: cancel (running), retry (failed), clear (terminal)
  • usePullsList hook with 2s polling (gated on footer visibility)
  • Empty state with link to models page
  • Footer auto-expands when a pull starts

Design

  • Spec: docs/superpowers/specs/2026-07-08-downloads-pane-design.md

…e actions

- Add downloads tab to footer pane (journal | downloads tabs)
- Auto-expand footer + switch to downloads on hal0:pull-started event
- Download rows with state indicators (running/queued/completed/failed/cancelled)
- Progress bar with speed/ETA for running downloads
- Cancel/retry/clear actions per download state
- Empty state with link to models page
- usePullsList hook: polls GET /api/models/pulls every 2s
- useClearPullJob hook: DELETE /api/models/pulls/{id}
- New endpoints: pulls, pullsDelete
- CSS: foot-tabs, foot-tab, foot-downloads, foot-dl-row, foot-dl-state, foot-dl-bar, foot-dl-empty
- Animated spinner for running state
- Backend: GET /api/models/pulls, DELETE /api/models/pulls/{id} routes
- Backend: PullJob registry model with state tracking
…_persisted_jobs(), pull-started event

- Added GET /api/models/pulls endpoint: returns all pull jobs (active in-memory +
  persisted terminal from disk). Dedup: in-memory wins over disk. Entry shape
  includes model_id, job_id, state, bytes_downloaded, bytes_total, speed_bps,
  eta_s, hf_repo (from model registry), dest_path, error, started_at, finished_at.
- Added DELETE /api/models/pulls/{model_id} endpoint: clears terminal pull
  jobs from memory + disk. Returns 409 if job is still active.
- Added list_persisted_jobs() helper to src/hal0/registry/pull.py: reads all
  .json files from _pull_jobs_dir() and returns a list of dicts.
- Added usePullsList and useClearPullJob hooks in useModels.ts.
- In usePullJob, dispatch hal0:pull-started custom event when start() succeeds
  (before SSE stream), so the downloads pane can react.
- Added modelPulls and modelPullDelete to the endpoints catalogue.
- All existing tests pass, frontend builds cleanly.
- PullJob interface: snake_case fields match API response (job_id, hf_repo,
  dest_path, bytes_downloaded, bytes_total, started_at, finished_at)
- chrome.jsx: fix field references, compute pct client-side, add
  calculating… fallback when speed is 0, fix clear uses model_id
- Backend: filter persisted jobs to terminal states only, DELETE returns 204
- Review fixes: all critical spec review issues resolved
Move the documents list out of the two-column grid so it spans the
full container width, matching the other full-width sections
(operations, danger zone).  The four tool cards above it (reflect,
recall, directives, mental models) stay in a 2×2 grid with equal
heights via flex:1.

- Restructure MemToolsPanel: left column = reflect + recall,
  right column = directives + mental models
- Documents rendered as a full-width sibling below the grid
- Add .mt-col > .mt-card { flex: 1 } for equal card heights
- Add margin-top spacing for the now-sibling documents card
@thinmintdev thinmintdev force-pushed the feat/downloads-pane branch from ff27024 to 15286ec Compare July 8, 2026 06:12
@thinmintdev thinmintdev merged commit 16c90fc into main Jul 8, 2026
@thinmintdev thinmintdev deleted the feat/downloads-pane branch July 8, 2026 06:13
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