Skip to content

0.8.0

Choose a tag to compare

@github-actions github-actions released this 13 Sep 16:12
· 3174 commits to master since this release
**v0.8.0** (2026-09-13) — minor release on the `0.x` line.

Project entities and plan management, marketplace expansion
(Claude/Codex/Cursor), browser extension one-click install, and
MessageList scroll pinning. Promotes the v0.8.0-beta.3 line to stable:
the Electron 36/44 packaging path has now shipped several times without
regressions and the new project-entity, marketplace, and browser-bridge
surfaces have been validated against the master test suites.

**Highlights**

- **Projects (plan 525 / 530)**
  - First-class project entity: `projects` table with multi-path `paths`
    JSON, `project_bots` join table, global plans directory per project,
    and a project service that owns create / read / update / delete
    (`feat(memory-state): add project entity columns and project_bots
    table`, `feat(memory-state): add project service with global plans
    directories`, `feat(memory-state): migrate project_path_aliases
    into projects.paths`).
  - Plans builtin plugin exposes three plan MCP tools so the agent can
    read / write / list plans per project
    (`feat(plugin-core): add plans builtin plugin with three plan MCP
    tools`).
  - Multi-path project UI: create-project dialog with avatar picker,
    sidebar groups multi-path canvases, project picker uses an opaque
    `DropdownMenu`, projects page reaches the user on first launch
    (`feat(ui): multi-path create-project dialog with avatar picker`,
    `feat(ui): merge multi-path project canvases and group listings`,
    `feat(ui): projects page + create dialog edit mode`,
    `fix(ui): route projects view on first launch`,
    `fix(ui): use DropdownMenu for project picker so the menu has an
    opaque background`).
  - Worker permission injection honors multi-path project roots so the
    agent treats every project folder as a writable root in addition
    to the cwd
    (`feat(agents): inject multi-path project roots into worker
    permissions`).
  - Project IPC surface (`projects:register / projects:list /
    projects:get / projects:update / projects:delete /
    projects:resolveAdditionalRoots`) is the single renderer entry
    point for project state
    (`feat(electron): expose projects entity IPC for renderer`).

- **Path safety hardening (plan 525 phase 6)**
  - Three-link chain closed: L1 IPC handler rejects relative paths,
    NUL bytes, UNC device namespace (`\\?\` / `\\.\`), UNC remote
    shares, `..` segments and entries over `MAX_PROJECT_PATH_LENGTH`
    (`fix(electron): harden project path safety across IPC, service
    and worker boundary (525 p6)`).
  - L1 service: `createProject` / `updateProject` run every input
    through `normalizeProjectPathEntries` (realpath + posix + win32
    drive-letter lowercasing) so the DB only ever holds canonical
    paths.
  - L2 router: `mergeAdditionalRootsIntoPermissionRules` normalizes
    every existing + incoming root via `safeNormalize` and dedupes on
    the lowercased normalized key, collapsing symlink / case variants.
  - L3 db-bridge: drops the local `normalizeForMatch` and reuses
    `memoryState.normalizePath` so the query side matches the storage
    side exactly. Tests: 8 new path-safety cases on each side.

- **Marketplace & plugin formats (plan 528 / 529 / 531)**
  - Marketplace URLs fallback / mirror support and dynamic tab
    population so a single marketplace can surface Claude Code,
    Codex, and Cursor plugins alongside duya-official
    (`feat(marketplace): add urls fallback / mirror support (plan
    528)`, `feat(marketplace): seed claude-plugins-official alongside
    duya-official + dynamic tabs (plan 529)`,
    `feat(marketplace): seed Codex + Cursor official marketplaces; fix
    Cursor adapter`).
  - Plugin format adapter layer recognizes Claude / Codex / Cursor
    plugin layouts and dedupes catalog entries by id
    (`feat(plugin-core): add plugin format adapter layer (plan 531)`,
    `fix(marketplace): accept Claude Code plugin-source shapes in
    marketplace.json`,
    `fix(plugins): consume Claude/Codex/Cursor plugin layouts + fix
    marketplace dedup`,
    `fix(plugins): dedupe plugin catalog entries by id`).
  - Skills self-config split into references with a tightened
    description for cleaner previews
    (`refactor(skills): split self-config into references + tighten
    description`).

- **Browser bridge one-click install (plan 532)**
  - `feat(electron): one-click DUYA Browser Bridge install via HKCU
    registry` writes the per-user NativeMessaging entry so the
    browser extension registers without manual edits.
  - `fix(browser): return readable text from parallel_fetch` ensures
    parallel research returns a string the agent can quote.

- **Chat & UI**
  - `fix(ui): pin MessageList scroll to bottom on session switch and
    freeze on user message` removes the old scroll jumps.
  - `refactor(ui): remove home gateway dashboard, keep settings
    bridge section` and `refactor(ui): drop unused NewThreadDropdown
    component` simplify the renderer surface.
  - `fix(tool): preserve caller-supplied ids in TodoTool` keeps
    orchestrator-supplied todo ids intact across reloads.

- **Database**
  - `fix(memory-state): make migration 0011 applicable on fresh
    databases` so the project entity migration no longer errors on a
    clean install.

**Breaking changes**

None.

**Pre-release verification**

- `npm run typecheck:all` — the new errors emitted by the Electron 44
  PRs (`src/components/browser/ExtensionInstallPrompt.tsx`,
  `src/components/settings/BrowserExtensionSection.tsx`,
  `src/components/chat/MessageList.test.tsx`, and the pre-existing
  `src/App.tsx` `ViewType` widen) are localized to i18n-key widening
  and ViewType union completion, all tracked for follow-up; they do
  not affect runtime. Agent / cli / conductor / voice workspaces
  typecheck clean.
- `npx vitest run electron/memory-state/__tests__/projectService.test.ts
  electron/ipc/__tests__/project-entity-handlers.test.ts
  electron/agents/server/__tests__/router-project-roots.test.ts`
  — 44 tests green (16 + 20 + 8), covering the path-safety chain.
- `npm run electron:pack:win` — pending (this run).