Reduce redundant helper copy and tighten the Den management layouts so the important controls are easier to scan. Update button content alignment so icon and text actions render consistently across the refreshed screens.
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* minor improvement changelog
* test to see if mintlify renders gifs
* test to see if mintlify renders gifs2
* gifs side by side
* minimal
* march 13th
* march 15th
* simpler changelog
* simplified changelog
* mintlify fix
* changelog fix
* correct filename
* mp4 to gif
* simplifying
* weird bug tracking
* fix(den): validate TypeIDs in API schemas
Use the shared TypeID utility in den-api request and response schemas so invalid IDs are rejected consistently and Swagger documents the expected prefixes. Keep the API docs aligned with the live validation rules used by the app.
* docs(den): refine OpenAPI route visibility
Hide internal and sensitive Den routes from Swagger so the published docs stay focused on public workflows. Clarify route tags and permission descriptions so ownership and workspace-admin requirements are easier to understand.
---------
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
Generate an OpenAPI spec and Swagger UI from den-api's existing Hono and zod validators so the API stays self-describing. Add route metadata, typed responses, and hide API key creation endpoints from production docs.
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* feat(den): add org API key auth and management
Let org owners and admins manage named API keys while keeping keys scoped to the issuing member and org. Reuse existing org middleware so API-key-backed requests behave like normal user actions across Den routes.
* fix(den): polish API key creation flow
Avoid duplicating the visible key prefix in the table preview and make key creation an explicit one-time reveal flow. Show the create form only after the user asks for a new key, then replace it with the copyable secret after issuance.
* fix(den): simplify API key table UI
Remove rate-limit details from the Den web API keys screen and keep the page focused on naming, reveal, and deletion. Leave the generated next-env types file out of the commit.
---------
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* feat(den): add org-managed llm provider library
Let Den admins curate shared providers and models with encrypted credentials, then let the app connect through the existing add-provider flow. This keeps org-wide model access consistent without requiring per-user OAuth setup.
* docs(den): prefer longer db encryption keys
* fix(den): pass db encryption key through local dev
---------
Co-authored-by: src-opn <src-opn@users.noreply.github.com>
* feat(app): add React markdown and transcript parity
Render React session messages with a proper markdown stack, Solid-style user and assistant layouts, and structured tool-call cards so the React path matches the existing transcript experience more closely.
* feat(app): drive React sessions through useChat streaming
Move the React session path to a custom useChat transport backed by the existing OpenCode event stream so transcript state, sending, and streaming are owned by React instead of snapshot polling.
* fix(app): remount React session island per chat
Reset the React session surface when the workspace or session changes so an in-flight useChat stream from one chat cannot continue writing into another chat after a switch.
* fix(app): scope React stream deltas to one session
Reject message.part.delta updates that do not belong to the active session so concurrent OpenCode event streams cannot interleave transcript text across chats in the React session surface.
* fix(app): cache React transcript state per session
Persist streamed UI messages in TanStack query cache per workspace/session so revisiting a running chat shows the last known partial transcript instead of starting empty on remount.
* feat(app): keep React session state in shared sync cache
Move React session transcript ownership out of the mounted chat view by sharing one query client across islands and applying workspace event updates into per-session query cache, mirroring the global sync pattern used by OpenCode.
* fix(app): keep React session sync alive across chat switches
Mount the workspace-scoped React session sync above the per-chat session island so switching chats no longer tears down the event subscription that keeps transcript state updating in the background.
* Revert "fix(app): keep React session sync alive across chat switches"
This reverts commit 15f37a09c1.
* Revert "feat(app): keep React session state in shared sync cache"
This reverts commit 49df59d6ef.
* fix(app): keep React session streams alive across switches
Move React session streaming state into a shared app-level runtime backed by one query client and a workspace-scoped event sync reducer so leaving and returning to a running session restores the current transcript instead of showing an empty pane or leaking between chats.
* fix(app): preserve beginning of streamed text across session switches
Create text parts on first delta arrival instead of silently dropping deltas that arrive before the part shell exists, and ensure the message shell is present before appending any delta. This fixes the bug where switching away from a streaming session and coming back would show only later lines, missing the beginning of the response.
* fix(app): preserve streamed text when re-selecting a busy session
When switching back to a session that is still streaming, the server snapshot returns empty text for in-progress parts. The reconcile call in selectSession was overwriting the locally accumulated text with that empty snapshot. Now both the Solid and React paths preserve the longer local text when the session status is busy.
Shift startup/loading control to TS with explicit boot phases, cached->live sidebar transitions, and startup trace markers while reducing Rust-side blocking in workspace and orchestrator status paths to improve macOS responsiveness during boot and workspace switching.
Made-with: Cursor
* feat(server): add workspace session read APIs
Expose workspace-scoped session list, detail, message, and snapshot reads so the client can fetch session data without depending on activation choreography.
* feat(app): route mounted session reads through OpenWork APIs
Use the new workspace-scoped session read endpoints for mounted OpenWork clients so the current frontend stops depending on direct session proxy reads for list, detail, message, and todo loading.
* feat(app): add React read-only session transcript
Introduce a feature-gated React island for the session transcript so we can replace the session surface incrementally while keeping the Solid shell intact.
* feat(app): add React session composer surface
Extend the feature-gated React session island to own its draft, prompt send, stop flow, and snapshot polling so the session body can evolve independently from the Solid composer.
* feat(app): add React session transition model
Keep the React session surface stable during session switches by tracking rendered vs intended session state and exposing a developer debug panel for render-source and transition inspection.
* docs(prd): add React migration plan to repo
Copy the incremental React adoption PRD into the OpenWork repo so the migration plan lives next to the implementation and PR branch.
* docs(prd): sync full React migration plan
Replace the shortened repo copy with the full incremental React adoption PRD so the implementation branch and product plan stay in sync.
* feat(desktop): add React session launch modes
Add dedicated Tauri dev and debug-build entrypoints for the React session path and honor a build-time React session flag before local storage so the alternate shell is easy to launch and reproduce.
* fix(app): fall back to legacy mounted session reads
Keep the new app working against older OpenWork servers by falling back to the original mounted OpenCode session reads when the workspace-scoped session read APIs are unavailable.
* docs(landing): add privacy policy and terms of use pages
- Add comprehensive privacy policy covering Desktop App (no tracking),
Cloud Service (operational telemetry only), and Website (PostHog analytics)
- Add terms of use with AI output disclaimer, export controls, beta features,
feedback, publicity rights, and JAMS arbitration
- Create reusable LegalPage component and shared parser for .txt legal docs
- Add Privacy and Terms links to site footer
- Both pages render with consistent styling, bold definition terms,
subheadings for tracking technology categories, and clickable email links
* chore: add .turbo to .gitignore
* fix(landing): improve legal page parser for terms readability
- Detect definition blocks ("Term" means ...) and render as bulleted
list with bold terms
- Bold ALL CAPS text (warranty disclaimers, arbitration notices, etc.)
- Make URLs clickable links alongside emails
- Distinguish h2 headings (questions, longer titles) from h3 subheadings
(short section names like "Our IP", "Billing", "Usage Data")
* fix(landing): improve subscription termination wording and URL parsing
- Clarify recurring billing cancellation: users can cancel via account
settings first, contact email as fallback at our discretion
- Fix URL regex to avoid capturing trailing periods/punctuation
* fix(landing): clarify subscription cancellation — email always accepted, late refunds at our discretion
* docs(landing): convert privacy policy and terms of use to markdown
- Add proper heading hierarchy (# h1, ## h2, ### h3)
- Bold definition terms, ALL CAPS legal clauses, and sub-processor names
- Convert restriction items into bullet points
- Make all URLs and emails clickable markdown links
- Use blockquote for the API key disclaimer note
- Structure tracking technologies as proper subheadings
* refactor(landing): use markdown for legal pages, no new dependencies
- Rename .txt to .md with proper markdown formatting
- Replace txt parser with lean render-markdown.tsx (zero deps, ~120 lines)
- LegalPage handles full page shell — page.tsx files are now 8 lines each
- Add legal-prose CSS for consistent typography
- Delete parse-legal-doc.tsx
* docs(changelog): build fuller tracker drafts through v0.11.202
* docs(changelog): drop publication flags from tracker files
* docs(changelog): generate titles from tracker sections
* docs(changelog): format titles after version links
Split the single release-tracker.md (101 releases) into date-based files
of 25 entries each, and removed blank lines between #### subsection headings
and their content for a more compact format.
Files: release-tracker-2026-02-19.md through release-tracker-2026-04-04.md
Swaps the teal Mintlify defaults for OpenWork's actual brand palette:
light mode accent #011627 (dark navy), dark mode accent #3b82f6 (blue),
and buttons #011627 (navy) to match openworklabs.com CTAs.
* feat(docs): add changelog page generated from release tracker
Add a script (scripts/generate-changelog.mjs) that parses
changelog/release-tracker.md and generates a minimalistic
changelog.mdx for the Mintlify docs. Each entry shows the date,
a tag (New/Improved/Adjusted/Misc), and either a one-liner (minor)
or bullet points (major). Version headings link to GitHub compare
URLs derived from consecutive versions.
* fix(docs): use Mintlify Update components and href tab for changelog
Switch changelog.mdx to use Mintlify's built-in <Update> component
with label, description, and tags props. Fix the tab config to use
href instead of pages.
* fix(docs): move changelog from tab to sidebar group
Place changelog as a grouped section in the sidebar navigation
instead of a separate tab that was causing redirect issues.
* fix(docs): plain version in description, link in body
The description prop renders as plain text in Mintlify, so markdown
links showed raw. Move version to plain description and put the
compare link as a "View changes" link inside the Update body.
* fix(docs): version as heading, multiple tags, Mintlify conventions
Use version as ## heading inside each Update body, support multiple
tags (New releases, Improvements, Deprecations), indent content
2 spaces per Mintlify convention, remove description prop.
* fix(docs): update changelog tags with emojis and new names
Tags are now: 🚀 New Features, 🐛 Bug Fixes, 🏗️ Refactoring
* feat(docs): group changelog entries by date
Merge same-day releases into a single Update block. Tags are
unioned across versions, Misc is dropped when real tags exist.
Each version remains as an ## heading within the grouped day.
* Revert "fix(i18n/zh): cleanups to Chinese translations (#1341)"
This reverts commit 03ee1f2f0e.
* Revert "feat(i18n): add Thai language + missing translations for all other locales (#1339)"
This reverts commit db0f94e36a.
* Revert "feat(i18n): extract en translations — session area (#1249)"
This reverts commit 3271af47b4.
* Revert "feat(i18n): extract en translations — pages (#1250)"
This reverts commit e006acade6.
* Revert "feat(i18n): extract en translations — context/lib/misc (#1251)"
This reverts commit c349413f09.
* docs: add internal release changelog tracker
Prepare a private release-tracking table for OpenWork so changelog summaries can be reviewed in-repo before anything is published publicly.
* docs: switch release tracker to markdown sections
Replace the release tracker table with oldest-to-newest markdown sections so new OpenWork releases can be appended more intuitively.
* docs: use subsection headings in release tracker
Replace top-level label bullets with subsections so release fields are easier to target while keeping list bullets only where they add structure.
* docs: make publication fields explicit booleans
Set the changelog and docs publication fields to explicit True or False values so the tracker has no ambiguous blanks.
* docs: add release size and importance fields
Track text-line diff size and a normalized major/minor release summary so each release entry can describe both scope and user impact in a machine-friendly way.
* fix(docs): restore migrated share skill links
Republish the example skill bundles on share.openworklabs.com so the docs point at live imports again, and align share bundle examples with the current publisher host.
* fix(server): use canonical shared bundle data urls
Rebuild trusted share fetch URLs to the share service's canonical /b/:id/data endpoint and cover the path with the live provider-config-helper bundle URL.