Nightly Build / build (push) Successful in 7m39s
Reopening the app closed every project tab: the copilot's tab bar lived in
RAM, so a reload dropped it and each conversation had to be found again from
its project board.
The set of open tabs is now a column on the session row, `chat_sessions.is_open`
(additive, `ensure_column`), restored by `GET /api/sessions/open` and written by
`PUT /api/sessions/{id}/open`. Not localStorage: that store is per-origin, so on
a shared laptop one member's tabs would greet the next, whereas the owner table
sits in their own encrypted file and follows them to another device. Which tab
is *selected* stays in sessionStorage — that one is genuinely per window, and a
shared value would have two windows fighting over it.
`is_open` defaults to 0 and `chat_sessions::create` never sets it: every `/new`
leaves its predecessor behind and every system-agent pass mints a row, so the
opposite default would restore a bar full of conversations nobody opened. Only
the copilot writes the column, at the moment it opens the tab. A reset moves the
flag rather than copying it — `POST /api/sessions` now returns the new id and
`new_session` carries it, and the old row is closed as the new one opens, or the
source would restore twice and a later close would clear the stale row.
Closing a tab clears the flag and nothing else: the conversation is kept and
comes back with its history when the project is reopened.
64 lines
4.3 KiB
Markdown
64 lines
4.3 KiB
Markdown
# Projects
|
|
|
|
A **project** is a shared workspace: a folder on the server plus its own chat with the assistant. Members of the group can work on the same files — directly, or by asking the assistant in the project chat — without giving anyone access to their private home folder.
|
|
|
|
Examples: a household budget, a holiday plan, a shared recipe collection, a small work document base.
|
|
|
|
## Creating a project
|
|
|
|
1. Open **Projects** in the sidebar.
|
|
2. Click **New Project**, give it a name and an optional description, save.
|
|
|
|
You become the project's owner. Only you can delete the project; everything else (editing the description, sharing) can also be done by members you grant read & write access.
|
|
|
|
## The project page
|
|
|
|
Opening a project shows its page, with two tabs (the current tab is part of the address, so you can bookmark or share the link):
|
|
|
|
- **Files** — the project's file explorer (see below).
|
|
- **Sharing** — who can access the project.
|
|
|
|
The header also has an **Open chat** button: it opens the project's conversation with the assistant. The assistant already knows the project folder and works directly inside it — creating documents, searching, summarizing. Each member has their **own private** conversation about the project; only the files are shared.
|
|
|
|
The conversation opens as a **tab** in the chat panel, next to the General one. Those tabs stay open: they survive a page reload, and because they are saved to your account rather than to the browser, you find the same ones when you sign in from another device. Closing a tab only removes it from the bar — the conversation itself is kept, and reopening the project brings it back with its history. The General tab is always there and cannot be closed.
|
|
|
|
## The Files tab
|
|
|
|
A file explorer rooted at the project folder:
|
|
|
|
- The **breadcrumb** on top shows where you are, relative to the project root (`/`, then `/folder`, `/folder/subfolder`). Click any segment to jump back.
|
|
- Files and folders are listed as a table: icon, name, creation date, last-modified date, size.
|
|
- Click a **file** to open it in the file viewer (Markdown rendered, images, PDFs, text…).
|
|
- Click a **folder** to navigate into it.
|
|
- The listing **updates by itself**: if another member or the assistant creates, renames or deletes a file while you're looking at a folder, the change appears within a second — no refresh needed.
|
|
|
|
For **Markdown** files (`.md`), if you have write access the viewer has two tabs:
|
|
|
|
- **View** — the rendered document (the default).
|
|
- **Edit** — edit the Markdown source directly. Switch back to View any time to preview your changes; **Save** writes the file, **Cancel** discards.
|
|
|
|
Because the same file may be edited at the same time by another member, another of your tabs, or the assistant, saving is protected against silent overwrites: if the file changed on the server *after* you started editing, you'll see a banner — **Reload remote** (discard your edits and take the newer version), **Copy mine, then reload** (copy your edits to the clipboard, then take the remote version), or **Overwrite** (force your version). So no one's work is ever lost without you choosing.
|
|
|
|
If you have write access you can also, from the toolbar or each row:
|
|
|
|
- **New folder** — create a subfolder in the current location.
|
|
- **Upload** — send files from your device into the current folder (or just drag & drop them onto the list).
|
|
- **Rename** and **Delete** — from the icons on each row. Deleting a folder removes everything inside it, after a confirmation.
|
|
|
|
Read-only members see the same explorer and can open every file, but the write actions are hidden (and refused by the server anyway).
|
|
|
|
## The Sharing tab
|
|
|
|
Lists every member with their access level. The owner and any read & write member can:
|
|
|
|
- **Add a member** — pick a person and their access: *Read* (browse and open files only) or *Read & write* (can also create, edit, delete and share).
|
|
- **Change access** or **remove** a member (the owner can't be removed).
|
|
|
|
Access changes apply immediately — no need for the other person to log out.
|
|
|
|
## Notes
|
|
|
|
- A private project is simply a project with one member (you). Share it later whenever you want.
|
|
- Renaming a project does not move its folder, so links and the assistant's context keep working.
|
|
- Deleting a project removes its folder for everyone — there is no undo.
|