|
|
|
@@ -1,4 +1,4 @@
|
|
|
|
# PRD: NeuralDesk — MVP Implementation
|
|
|
|
# PRD: Adiuva — MVP Implementation
|
|
|
|
|
|
|
|
|
|
|
|
> **Status:** APPROVED / READY FOR DEV
|
|
|
|
> **Status:** APPROVED / READY FOR DEV
|
|
|
|
> **Version:** 1.0 (MVP)
|
|
|
|
> **Version:** 1.0 (MVP)
|
|
|
|
@@ -10,7 +10,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
## Introduction
|
|
|
|
## Introduction
|
|
|
|
|
|
|
|
|
|
|
|
NeuralDesk is a local-first desktop workspace acting as a "Digital Executive Secretary." It centralizes notes, tasks, and project context into a local SQLite database and exposes a multi-agent AI layer (via GitHub Copilot SDK) that proactively surfaces insights and drafts actions. Data never leaves the machine, making it safe for enterprise environments.
|
|
|
|
Adiuva is a local-first desktop workspace acting as a "Digital Executive Secretary." It centralizes notes, tasks, and project context into a local SQLite database and exposes a multi-agent AI layer (via GitHub Copilot SDK) that proactively surfaces insights and drafts actions. Data never leaves the machine, making it safe for enterprise environments.
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
@@ -29,7 +29,7 @@ NeuralDesk is a local-first desktop workspace acting as a "Digital Executive Sec
|
|
|
|
|
|
|
|
|
|
|
|
### Shared Shell
|
|
|
|
### Shared Shell
|
|
|
|
- **Left sidebar:** 240px, `#fafafa` background, border-right `#e5e5e5`.
|
|
|
|
- **Left sidebar:** 240px, `#fafafa` background, border-right `#e5e5e5`.
|
|
|
|
- Top: NeuralDesk logo/wordmark.
|
|
|
|
- Top: Adiuva logo/wordmark.
|
|
|
|
- Nav items: Home (house icon), Timeline (chart-gantt icon), Tasks (clipboard-check icon), Projects (folder-kanban icon). Active item gets `#f5f5f5` accent + no extra border.
|
|
|
|
- Nav items: Home (house icon), Timeline (chart-gantt icon), Tasks (clipboard-check icon), Projects (folder-kanban icon). Active item gets `#f5f5f5` accent + no extra border.
|
|
|
|
- Bottom: Collapse button (panel-left icon).
|
|
|
|
- Bottom: Collapse button (panel-left icon).
|
|
|
|
- **Right edge:** Vertical rotated label "keep scrolling for AI / next section" + chevron-down. This is the visual affordance for the Fluid Curtain pull-down gesture.
|
|
|
|
- **Right edge:** Vertical rotated label "keep scrolling for AI / next section" + chevron-down. This is the visual affordance for the Fluid Curtain pull-down gesture.
|
|
|
|
@@ -159,7 +159,7 @@ export const notes = sqliteTable('notes', {
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
- [ ] `better-sqlite3` (or `@electric-sql/pglite` alternative) installed in main process.
|
|
|
|
- [ ] `better-sqlite3` (or `@electric-sql/pglite` alternative) installed in main process.
|
|
|
|
- [ ] Drizzle schema file defines all 5 tables (clients, projects, tasks, checkpoints, notes).
|
|
|
|
- [ ] Drizzle schema file defines all 5 tables (clients, projects, tasks, checkpoints, notes).
|
|
|
|
- [ ] Migration runs on app start; DB file created at `~/.neuraldesk/data.db` (or `app.getPath('userData')`).
|
|
|
|
- [ ] Migration runs on app start; DB file created at `~/.adiuva/data.db` (or `app.getPath('userData')`).
|
|
|
|
- [ ] Drizzle Studio accessible in dev mode (`drizzle-kit studio`).
|
|
|
|
- [ ] Drizzle Studio accessible in dev mode (`drizzle-kit studio`).
|
|
|
|
- [ ] TypeScript types inferred from schema (no manual type duplication).
|
|
|
|
- [ ] TypeScript types inferred from schema (no manual type duplication).
|
|
|
|
|
|
|
|
|
|
|
|
@@ -338,7 +338,7 @@ export const notes = sqliteTable('notes', {
|
|
|
|
**Description:** As a developer, I need notes and project content embedded into LanceDB so that semantic search is possible across all projects.
|
|
|
|
**Description:** As a developer, I need notes and project content embedded into LanceDB so that semantic search is possible across all projects.
|
|
|
|
|
|
|
|
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
**Acceptance Criteria:**
|
|
|
|
- [ ] LanceDB initialized in main process, storing vectors at `~/.neuraldesk/vectors/`.
|
|
|
|
- [ ] LanceDB initialized in main process, storing vectors at `~/.adiuva/vectors/`.
|
|
|
|
- [ ] On note save (create or update), content is embedded via GitHub Copilot SDK embeddings endpoint and stored in LanceDB with `{noteId, projectId, content}` metadata.
|
|
|
|
- [ ] On note save (create or update), content is embedded via GitHub Copilot SDK embeddings endpoint and stored in LanceDB with `{noteId, projectId, content}` metadata.
|
|
|
|
- [ ] Existing notes are indexed on first startup (migration script).
|
|
|
|
- [ ] Existing notes are indexed on first startup (migration script).
|
|
|
|
- [ ] Embedding errors logged but do not block the save operation.
|
|
|
|
- [ ] Embedding errors logged but do not block the save operation.
|
|
|
|
@@ -384,7 +384,7 @@ export const notes = sqliteTable('notes', {
|
|
|
|
|
|
|
|
|
|
|
|
## Functional Requirements
|
|
|
|
## Functional Requirements
|
|
|
|
|
|
|
|
|
|
|
|
- **FR-01:** All data stored locally in SQLite at `app.getPath('userData')/neuraldesk.db`.
|
|
|
|
- **FR-01:** All data stored locally in SQLite at `app.getPath('userData')/adiuva.db`.
|
|
|
|
- **FR-02:** App functions fully offline; AI features degrade gracefully when network is unavailable.
|
|
|
|
- **FR-02:** App functions fully offline; AI features degrade gracefully when network is unavailable.
|
|
|
|
- **FR-03:** Client tree supports unlimited nesting depth but UI only needs to display 3 levels (Client → Sub-Client → Project).
|
|
|
|
- **FR-03:** Client tree supports unlimited nesting depth but UI only needs to display 3 levels (Client → Sub-Client → Project).
|
|
|
|
- **FR-04:** Tasks table has a nullable `projectId`; global Tasks view shows all tasks regardless.
|
|
|
|
- **FR-04:** Tasks table has a nullable `projectId`; global Tasks view shows all tasks regardless.
|
|
|
|
|