Skip to content

feat(ui): added grouping chat sessions into ui#5267

Open
54x1 wants to merge 5 commits into
odysseus-dev:devfrom
54x1:dev
Open

feat(ui): added grouping chat sessions into ui#5267
54x1 wants to merge 5 commits into
odysseus-dev:devfrom
54x1:dev

Conversation

@54x1

@54x1 54x1 commented Jul 6, 2026

Copy link
Copy Markdown

Summary

Added a database-backed project system that lets users organize chat sessions into named project groups. Introduces a new Project SQLAlchemy model with owner-scoped isolation, kebab-case slug generation, and idempotent migration logic. A new routes/project_routes.py module exposes full REST API endpoints: list, create, update, delete, session assignment/removal, and project detail lookups that return associated sessions. The project router is registered in app.py and the migration runs on startup.

Target branch

  • This PR targets dev, not main. All PRs land in dev; main is curated by the maintainer at each release. If your PR is on main by accident, click "Edit" on this PR and change the base.

Linked Issue

Fixes #5265

Type of Change

  • Bug fix (non-breaking — fixes a confirmed issue)
  • New feature (non-breaking — adds new behaviour)
  • Breaking change (changes or removes existing behaviour)
  • Refactor / cleanup (behaviour unchanged)
  • Documentation only
  • CI / tooling / configuration

Checklist

  • I searched open issues and open PRs — this is not a duplicate.
  • This PR targets dev
  • My changes are limited to the scope described above — no unrelated refactors or whitespace changes mixed in.
  • I actually ran the app (docker compose up or uvicorn app:app) and verified the change works end-to-end. Type-checks and unit tests are not enough.

How to Test

  1. Start the app (docker compose up or uvicorn app:app:app).
  2. Send GET /api/projects/ — should return an empty [] on a fresh database.
  3. Send POST /api/projects/ with body {"name": "My App", "description": "Testing"} — should return a project object with an id, name, and a kebab-case slug ("my-app").
  4. Send GET /api/projects/ — should now include the newly created project.
  5. Send PATCH /api/projects/<id> with {"name": "Renamed App"} — verify the project name updated.
  6. Send POST /api/projects/<id>/assign with {"session_id": "<some-session-id>"} — verify the session is now linked to the project.
  7. Send GET /api/projects/<id> — verify session_count increased and the session appears in the sessions list.
  8. Send POST /api/projects/<id>/assign with {"session_id": "<some-session-id>", "project_id": null} — verify the session is removed from the project.
  9. Send DELETE /api/projects/<id> — verify the project is deleted.
  10. Send GET /api/projects/ — verify the deleted project no longer appears.

WebUI
Click arrow and add to new folder

Visual / UI changes — REQUIRED if you touched anything that renders

Anything that changes what the UI looks like — buttons, icons, padding, colors, fonts, spacing, layout, CSS, HTML, SVG, or any static/js/ module that draws to the DOM — needs all of the following. PRs that change rendering without these WILL be closed.

  • Screenshot or short clip of the change in the running app, attached below. Mobile screenshot too if the change affects mobile.
  • Style match: the change uses Odysseus's existing visual language. Specifically:
    • Reuse existing CSS variables (--red, --fg, --bg, --card, --border, etc.) — do not introduce new color values, font sizes, or spacing units.
    • Reuse existing button/input/card/border classes. Don't invent parallel styling.
    • No Unicode emoji in UI or code. Use inline SVG (matching the monochrome icon style already in static/index.html) or plain text.
    • Monospaced font (Fira Code) for primary UI text. Don't override.
    • Dark theme is the default; any light-mode work must be wired through the existing theme system, not hard-coded.
  • No new component patterns. If a similar widget already exists in the app, extend it instead of writing a parallel one.
  • I am not an LLM agent submitting a bulk PR. If you are, please open an issue describing the problem first — bulk auto-generated PRs that don't match the project's visual style are closed on sight, even when the underlying fix is correct.

Screenshots / clips

image image

@github-actions github-actions Bot added the ready for review Description complete — ready for maintainer review label Jul 6, 2026
@54x1 54x1 changed the title added group chat sessions into named project group folders fix: added group chat sessions into named project group folders Jul 6, 2026
@54x1 54x1 changed the title fix: added group chat sessions into named project group folders Fix (Chat Session): added group chat sessions into named project group folders Jul 6, 2026
@54x1 54x1 changed the title Fix (Chat Session): added group chat sessions into named project group folders fix(Chat Session): added group chat sessions into named project group folders Jul 6, 2026
@54x1 54x1 changed the title fix(Chat Session): added group chat sessions into named project group folders fix(ui): added group chat sessions into named project group folders Jul 6, 2026
@54x1 54x1 changed the title fix(ui): added group chat sessions into named project group folders fix(ui): added grouping chat sessions into ui Jul 6, 2026
@54x1 54x1 changed the title fix(ui): added grouping chat sessions into ui feat(ui): added grouping chat sessions into ui Jul 6, 2026
@54x1

54x1 commented Jul 6, 2026

Copy link
Copy Markdown
Author
image

54x1 and others added 3 commits July 7, 2026 00:34
- Shows a '+' button on project folder headers to create a new chat
  directly inside that project folder
- Button appears on hover, styled in project accent color
- Reuses existing ody-pending-folder sessionStorage flow for folder
  assignment on session creation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready for review Description complete — ready for maintainer review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

add group chat sessions into named project groups UI thing

1 participant