Changeset 0.21.6 (#92)

This commit is contained in:
2026-03-01 23:16:25 +00:00
parent aadba77887
commit 3423738286
17 changed files with 1210 additions and 74 deletions

View File

@@ -88,7 +88,7 @@ v0.21.1 Workspace ✅ v0.21.3 Surface Infra ✅
v0.21.2 Workspace ✅ v0.21.5 Editor Surface ✅
Indexing + Search (Development Mode)
│ │
v0.21.4 Git ✅ v0.21.6 Article Surface
v0.21.4 Git ✅ v0.21.6 Article Surface
Integration + Document Output
└───────┬──────────────┘
@@ -744,8 +744,8 @@ Pure UI architecture. No workspace dependency (parallel development).
- [x] REPL tab: toolbar (clear, copy, help)
- [x] CSS: mode selector + REPL styles
- [x] Documentation in EXTENSIONS.md §6 updated with implementation details
- [ ] Mobile: mode selector collapses to hamburger/bottom nav (deferred — functions via sidebar on mobile)
- [ ] Integration with extension loader (surfaces from manifest — deferred to extension loader update)
- [ ] Mobile: mode selector collapses to hamburger/bottom nav — moved to v0.22+
- [ ] Integration with extension loader (surfaces from manifest — moved to v0.22+)
### v0.21.4 — Git Integration ✅
@@ -767,10 +767,10 @@ Layer git operations onto workspaces.
- [x] 9 git API endpoints on /api/v1/workspaces/:id/git/*
- [x] 3 credential CRUD endpoints on /api/v1/git-credentials
- [x] Wired in main.go: GitOps creation, tool registration, route registration
- [ ] Workspace settings UI: git config section (deferred to frontend sprint)
- [ ] User Settings: git credentials management UI (deferred to frontend sprint)
- [ ] Workspace settings UI: git config section — moved to v0.22+
- [ ] User Settings: git credentials management UI — moved to v0.22+
- [ ] Integration tests: clone, commit, push/pull cycle (requires git binary in CI)
- [ ] `.gitignore` respect in workspace indexing (deferred to v0.21.5+)
- [ ] `.gitignore` respect in workspace indexing — moved to v0.22+
### v0.21.5 — Editor Surface (Development Mode) ✅
@@ -791,26 +791,64 @@ IDE-like experience. Browser-tier surface consuming workspace primitives.
- [x] Auto-registration: surface registers when channel/project has workspace binding
- [x] Workspace management UI: create, list, bind from project settings + chat context menu
- [x] GET /workspaces list endpoint, workspace_id in channel API (update, get, list)
- [ ] Git status indicators in file tree (visual indicators per-file) — deferred
- [ ] Drag-drop file reorder — deferred
- [ ] Ctrl+Shift+F workspace search — deferred
- [ ] Auto-save on tab/mode switch — deferred
- [x] Git status indicators in file tree (M/A/U badges + colors) — closed in v0.21.6
- [ ] Drag-drop file reorder — moved to v0.22+
- [x] Ctrl+Shift+F workspace search (maps to quick open) — closed in v0.21.6
- [x] Auto-save on tab/mode switch — closed in v0.21.6
### v0.21.6 — Article Surface + Document Output Pipeline
### v0.21.6 — Article Surface + Document Output Pipeline
Writing-focused surface. Document is artifact, conversation is secondary.
- [ ] Document output pipeline: write → workspace → export (markdown → HTML/PDF/DOCX via pandoc)
- [ ] Layout: outline (sidebar top), AI assistant (sidebar bottom), rich text editor (CM6 markdown, main)
- [ ] Outline: auto-generated from headings, click-to-scroll, drag to reorder
- [ ] AI assistant: lightweight chat with article-specific tools (suggest_outline, expand_section, check_citations)
- [ ] Rich text editor: CM6 noteEditor() with enhanced live preview, focus mode
- [ ] Export: download as markdown/HTML/PDF, copy to clipboard
- [x] Layout: outline (sidebar top), AI assistant (sidebar bottom), rich text editor (CM6 markdown, main)
- [x] Outline: auto-generated from headings, click-to-scroll (navigates CM6 cursor)
- [x] Rich text editor: CM6 codeEditor() markdown mode, line wrapping, centered content (720px max), textarea fallback
- [x] AI assistant: chat panel embedded in sidebar via Surfaces DOM borrowing
- [x] Export dropdown: Download Markdown, Download HTML (via marked.js + DOMPurify), Copy to clipboard
- [x] Document picker: lists .md/.mdx/.txt files from workspace, create new document inline
- [x] Focus mode: dims non-active lines in editor (CM6 opacity-based, toggle button)
- [x] Word count + reading time in status bar (~230 wpm)
- [x] Auto-save: debounced (2s) on content change, save on tab switch / surface deactivate
- [x] Live update on workspace.file.changed event (reloads if file unmodified)
- [x] Surface registration: registers as "Article" with file-text icon when workspace bound
- [x] article-mode.css: outline styling, export menu, focus mode, mobile responsive
- [x] (from v0.21.5 deferred) Git status indicators in editor file tree (M/A/U badges + colors)
- [x] (from v0.21.5 deferred) Auto-save on tab/mode switch in editor surface
- [x] (from v0.21.5 deferred) Ctrl+Shift+F workspace search (maps to quick open)
- [ ] Article-specific AI tools (suggest_outline, expand_section, check_citations) — moved to v0.22+
- [ ] Drag-to-reorder outline sections — moved to v0.22+
- [ ] PDF export via pandoc — moved to v0.22+
#### Bugfixes & DX (added post-initial)
- [x] Hash Router (`router.js`): URL-driven direct-to-surface navigation (#/chat, #/editor, #/article). Bookmarkable, back/forward works. Precursor to Go `html/template` server-rendered pages (v0.25.0) for public/workflow entry points.
- [x] `openDirect(wsId)` on EditorMode + ArticleMode: bypass check(), register directly with workspace ID
- [x] Workspace picker overlay: shown when navigating to surface without workspace, auto-selects if only one
- [x] `SEED_PROVIDERS` env var: auto-creates global providers on startup (dev/test only, idempotent)
- [x] Mode selector labels: icon + text, labels hide when sidebar collapsed
- [x] `chat.switched` / `chat.created` events: wired into selectChat(), newChat(), sendMessage()
- [x] `workspace_id` in channel API responses: added to list/get/create for both SQLite and Postgres
- [x] Frontend chat + project objects: now carry `workspace_id` for Router and surface check() optimization
---
## v0.22.0 — Smart Routing + Provider Extensions
### Deferred from v0.21.x
Items moved from earlier sub-releases for proper scoping:
- [ ] Mobile: mode selector collapses to hamburger/bottom nav
- [ ] Integration with extension loader (surfaces from manifest.json — requires extension loader update)
- [ ] Workspace settings UI: git config section in channel/project settings
- [ ] User Settings: git credentials management UI
- [ ] `.gitignore` respect in workspace indexing
- [ ] Drag-drop file reorder in editor file tree
- [ ] Article tools: suggest_outline, expand_section, check_citations (AI-powered)
- [ ] Drag-to-reorder outline sections in article mode
- [ ] PDF/DOCX export via pandoc in article mode
- [ ] Project-specific file uploads (full project-level upload architecture)
Depends on: model roles (v0.10.0), usage tracking (v0.10.0).
Rules-based routing engine — policy, not ML. Plus declarative provider
configuration to replace hardcoded provider-specific behavior.
@@ -919,6 +957,20 @@ _(Shifted from v0.22.0 — no content changes, dependency refs updated)_
- [ ] Stage transitions: triggered by AI (tool call), team member (button), or rule (form complete)
- [ ] On transition: swap active persona, notify assignment team, update channel metadata
**Go Template Pages (server-rendered entry points)**
Server-rendered HTML via Go `html/template` for pages that need SEO, OG tags,
pre-auth rendering, or standalone access outside the SPA shell. Same binary,
same auth middleware, same deployment — no second language runtime.
- [ ] Template engine: Go `html/template` with shared base layout, partials for nav/footer
- [ ] Route layer: `/w/:slug` for public workflow pages, `/p/:id` for shared project views
- [ ] Workflow landing page: branded intake form, persona avatar, description — rendered server-side
- [ ] Shared/embedded surface pages: `/s/editor/:wsId`, `/s/article/:wsId/:path` — server renders minimal shell, JS hydrates surface directly (replaces hash routing for public links)
- [ ] Template data: workflow metadata, branding, environment banner — injected server-side
- [ ] Auth gating: public pages skip auth, team pages require session, admin pages require role
- [ ] Precursor: hash router (v0.21.6) handles in-app navigation; Go templates handle external/public entry points
**AI Intake**
- [ ] Stage persona drives structured collection via system prompt
- [ ] Form template → persona system prompt injection ("collect these fields: ...")
@@ -1021,4 +1073,26 @@ based on need.
- Multi-tenant SaaS mode
- Plugin/extension marketplace
- Virtual scroll for long conversations
- ~~SQLite backend option (single-user / dev)~~ → v0.17.1
- ~~SQLite backend option (single-user / dev)~~ → v0.17.1
**Pane Architecture (Workspace Container)**
The main area to the right of the sidebar is a **workspace container** that holds 1+ panes.
Each pane is a self-contained unit (chat, editor, notes, preview, etc.) with its own lifecycle.
Panes compose side-by-side rather than replacing each other (current surface model).
- Default layout: Left nav + single Chat pane (what exists today, zero cognitive overhead)
- Power user: Left nav + Editor pane + Chat pane side by side. Or Editor + Notes. Or all three.
- Workflow mode: Left nav hidden. Team member gets Chat + History. Customer gets just Chat.
- User-resizable splits between panes, layout persists per-project or per-user preference
- The current surface system was a stepping stone — proved out the region/activate/deactivate lifecycle. Panes reuse that contract but drop the "only one active at a time" constraint.
- Sidebar tabs (Chats / Files) already decouple navigation from center content (v0.21.6)
**Surfaces as Extensions**
- Surfaces (future: panes) become first-class extension types alongside block renderers and tool bridges
- `Surfaces.register()` already defines the contract: name, regions, activate/deactivate callbacks — swap hardcoded JS modules for manifest + dynamically loaded bundles
- Admin-installable surfaces: upload or enable from extension registry, scoped to team or global
- Surface manifest in `manifest.json`: declares required regions, capabilities, dependencies
- Surface IDE: built-in surface for building surfaces — Go template editor for server-rendered shells, JS/CSS editor for client behavior, live preview in sandboxed region. Eats its own dog food.
- Surface marketplace: share custom surfaces across instances (presentation mode, kanban, form builder, dashboard, etc.)
- Project-bound surface/pane defaults: project config specifies which panes are available and default layout