Changeset 0.19.0.1 (#82)

This commit is contained in:
2026-02-28 23:46:23 +00:00
parent 091ce2af6a
commit 748f49bedd
30 changed files with 3873 additions and 151 deletions

View File

@@ -47,7 +47,7 @@ Three Docker images support different deployment scenarios:
6. **Channels as Execution Context**: Channels are the universal container for conversation state — messages, tool activity, notes, and artifacts all hang off a channel. Today channels are single-user direct chats. The architecture anticipates multi-participant channels (team members, anonymous visitors, AI personas) for workflow execution, without requiring changes to the message tree, tool framework, or streaming infrastructure.
## Workflow Architecture (Future — v0.21.0+)
## Workflow Architecture (Future — v0.25.0+)
The platform's existing primitives (teams, personas, channels, tools, notes)
compose into a workflow engine where the channel is the execution context
@@ -235,7 +235,33 @@ scope='team' → owner_id=team.id → Team-admin-managed, visible to team
scope='personal' → owner_id=user.id → User-managed, visible to owner
```
Used by: `provider_configs`, `personas`, `model_catalog` (visibility column adds `enabled`/`disabled`/`team` states on top).
Used by: `provider_configs`, `personas`, `model_catalog` (visibility column adds `enabled`/`disabled`/`team` states on top), `projects`.
## Projects (v0.19.0)
Projects are organizational containers that group channels, knowledge bases,
and notes. They follow the same scope model as other resources.
**KB Resolution Chain:**
```
Persona KBs → Project KBs → Channel KBs → Personal KBs
```
When a channel belongs to a project, all KBs bound to that project are
automatically included in both the system prompt hint (`BuildKBHint`) and
tool-time search (`kbsearch`). This means adding a KB to a project makes it
available to every channel in that project without per-channel configuration.
**Channel Association:** Channels have an optional `project_id` FK.
The `project_channels` junction table maintains ordered membership with a
UNIQUE constraint on `channel_id` (a channel can only belong to one project).
`AddChannel` performs an atomic move: single transaction deletes from the
old project, inserts into the new one, and updates the denormalized FK.
**Store Pattern:** `ProjectStore` interface with Postgres and SQLite
implementations following the same conventions as other stores (see
Store Layer Pattern above). Access checks via `UserCanAccess` enforce
owner-or-team-member visibility.
## Schema Migration
@@ -276,6 +302,7 @@ src/
│ ├── attachments.js # File upload, paste-to-file, lightbox
│ ├── notes.js # Notes panel CRUD + graph + daily notes
│ ├── note-graph.js # Canvas force-directed graph visualization
│ ├── projects-ui.js # Project sidebar, context menu, drag-and-drop
│ ├── knowledge.js # Knowledge base UI
│ ├── memory-ui.js # Memory settings tab + admin review panel
│ └── __tests__/ # Node.js test suite (node --test)

1151
docs/DESIGN-0.19.0.md Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -70,9 +70,9 @@ v0.18.0 Memory ✅ (user + persona scopes, review pipeline)
v0.18.1 Side Panel Architecture ✅ (single-slot, ctx.ui primitives, mermaid refactor)
v0.19.0 Projects / Workspaces + Notifications
v0.19.0 Projects / Workspaces ✅ (project groups, KB resolution, drag-drop sidebar)
v0.20.0 @mention Routing + Multi-model
v0.20.0 Notifications + @mention Routing + Multi-model
v0.21.0 Extension Surfaces + Modes (depends on CM6 from v0.17.2)
@@ -496,37 +496,52 @@ collaboration (v0.23.0) where multiple panels need simultaneous visibility.
---
## v0.19.0 — Projects / Workspaces + Notifications
## v0.19.0 — Projects / Workspaces
Organizational containers that group related conversations, KBs, and
notes into a single workspace with shared access controls. Plus the
notification infrastructure that makes collaboration real-time.
notes into a single workspace with shared access controls.
Depends on: user groups (v0.16.0), knowledge bases (v0.14.0).
**Data Model**
- [ ] `projects` table: `id`, `name`, `description`, `scope` (personal, team, global), `owner_id`, `team_id`, `settings` (JSONB), `created_at`, `updated_at`
- [ ] `project_resources` table: `project_id`, `resource_type` (channel, knowledge_base, note), `resource_id`, `added_at`
- [ ] Projects use the same grant model (v0.16.0): team_only / global / groups
- [x] `projects` table: `id`, `name`, `description`, `color`, `icon`, `scope` (personal/team/global), `owner_id`, `team_id`, `is_archived`, `settings` (JSONB)
- [x] `project_channels` junction: ordered membership with UNIQUE `channel_id`, denormalized FK on `channels.project_id`
- [x] `project_knowledge_bases` junction: with `auto_search` flag
- [x] `project_notes` junction
- [x] `resource_grants` CHECK extended to include `'project'`
**Features**
- [ ] Channels can belong to a project (optional `project_id` FK)
- [ ] KBs can belong to a project → auto-linked to all channels in the project
- [ ] Notes can belong to a project → visible to all project members
- [ ] Project-level Persona default: all new channels in the project start with this Persona
- [ ] Project sidebar section: grouped view of conversations with folder-like nesting
- [x] Channels can belong to a project (optional `project_id` FK)
- [x] KBs can belong to a project → auto-linked to all channels in the project (BuildKBHint + kbsearch)
- [x] Notes can belong to a project → auto-associated when created from project channel
- [x] KB resolution chain: Persona → Project → Channel → Personal
- [x] Project sidebar section: collapsible groups above time-based Recent section
**UI**
- [ ] Sidebar: projects as collapsible groups above/integrated with chat history
- [ ] Project creation dialog (name, description, default Persona, default KBs)
- [ ] Drag channels/notes into projects
- [ ] Folders within projects (lightweight — just a `path` column on project_resources)
- [ ] Project settings: manage resources, access, defaults
- [x] Sidebar: projects as collapsible groups with color dots, counts, options menu
- [x] Right-click context menu: move chat to project / remove / create-and-assign
- [x] Drag-and-drop channels between project groups and Recent
- [x] New Project button in split dropdown
- [x] Channel list `project_id` filter (`?project_id=uuid` or `?project_id=none`)
- [x] Collapse state persisted in localStorage
**Enterprise Use**
- [ ] Team admins create projects for their teams
- [ ] Project templates: pre-configured with specific Personas, KBs, and settings
- [ ] Cross-team projects via group grants
**Deferred to later versions:**
- Project creation dialog (name, description, default Persona, default KBs) — using prompt() for now
- Project detail panel (KB + note management within a project)
- Project-level Persona default
- Folders within projects
- Project templates
- Admin-level team/global project management
- Notifications (moved to v0.20.0)
---
## v0.20.0 — Notifications + @mention Routing + Multi-model
Notification infrastructure that makes collaboration real-time, plus
the channel schema already supports multiple models — this adds routing.
_(Notifications shifted from v0.19.0; @mention routing shifted from v0.17.0)_
**Notifications**
- [ ] `notifications` table: `id`, `user_id`, `type`, `title`, `body`, `resource_type`, `resource_id`, `is_read`, `created_at`
@@ -540,14 +555,7 @@ Depends on: user groups (v0.16.0), knowledge bases (v0.14.0).
- [ ] Admin settings: enable/disable email, SMTP config, default notification preferences
- [ ] User preferences: per-type toggles (in-app, email, off)
---
## v0.20.0 — @mention Routing + Multi-model
The channel schema already supports multiple models. This adds routing.
_(Shifted from v0.17.0 — no content changes)_
**@mention Routing**
- [ ] @mention parsing in messages (users and AI models)
- [ ] Resolve mentions against `channel_models`
- [ ] Multi-model channels: fire completions per mentioned model