diff --git a/AGENTS.md b/AGENTS.md index bcee7d3..0346f6e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -38,13 +38,14 @@ learning_ai_notes/ │ │ │ ├── note-relationships/ # Note linking (types, repository, routes, test) │ │ │ ├── note-tasks/ # Task CRUD (types, repository, routes, test) │ │ │ ├── note-artifacts/ # Artifact CRUD (types, repository, routes, test) -│ │ │ └── note-agent-actions/ # Agent action audit trail (types, repository, routes, test) +│ │ │ ├── note-agent-actions/ # Agent action audit trail + batch review (types, repository, routes, test) +│ │ │ └── saved-views/ # Persisted saved views CRUD (types, repository, routes) │ │ ├── mcp/ │ │ │ ├── note-tool-contracts.ts # 8 MCP tool Zod schemas + definitions │ │ │ ├── note-tools.ts # 8 executable MCP tool implementations │ │ │ ├── register-note-tools.ts # Fastify plugin to register MCP tools │ │ │ └── *.test.ts # MCP test files -│ │ └── server.ts # Fastify entrypoint (6 route modules + MCP) +│ │ └── server.ts # Fastify entrypoint (7 route modules + MCP) │ ├── package.json │ └── tsconfig.json │ @@ -69,13 +70,17 @@ learning_ai_notes/ │ │ ├── product-config.ts # Product identity + API URLs │ │ ├── auth.ts # @bytelyst/react-auth provider │ │ ├── notes-client.ts # Notes API client (backend) +│ │ ├── review-client.ts # Approval queue, timeline, batch review +│ │ ├── saved-views-client.ts # Saved views CRUD client │ │ ├── platform.ts # @bytelyst/platform-client │ │ ├── telemetry.ts # @bytelyst/telemetry-client │ │ ├── diagnostics.ts # @bytelyst/diagnostics-client │ │ ├── feature-flags.ts # @bytelyst/feature-flag-client │ │ ├── kill-switch.ts # @bytelyst/kill-switch-client │ │ ├── extraction-client.ts # Extraction-service task extraction -│ │ ├── blob-client.ts # SAS-based blob upload/download +│ │ ├── blob-client.ts # @bytelyst/blob-client wrapper +│ │ ├── use-keyboard-shortcuts.ts # Global keyboard shortcuts hook +│ │ ├── use-debounce.ts # Debounce hook for search │ │ └── types.ts # Shared TypeScript interfaces │ ├── package.json │ └── tsconfig.json @@ -91,6 +96,8 @@ learning_ai_notes/ │ │ │ ├── auth.ts # @bytelyst/auth-client │ │ │ ├── notes.ts # Notes API client │ │ │ └── note-agent-actions.ts # Agent actions API client +│ │ ├── lib/ # Platform SDK wrappers +│ │ │ └── platform.ts # Telemetry, feature flags, kill switch, blob client │ │ ├── store/ # Zustand stores │ │ │ ├── auth-store.ts │ │ │ ├── inbox-store.ts @@ -124,7 +131,7 @@ learning_ai_notes/ | **Backend** | Fastify 5, TypeScript ESM, Zod, jose (JWT), @bytelyst/datastore (Cosmos or memory) | | **Web** | Next.js 16 (App Router), React 19, TailwindCSS v4, Zustand, Vitest | | **Mobile** | React Native (Expo), TypeScript, expo-router, Zustand, MMKV | -| **Shared packages** | `@bytelyst/fastify-core`, `@bytelyst/config`, `@bytelyst/cosmos`, `@bytelyst/errors`, `@bytelyst/datastore`, `@bytelyst/api-client`, `@bytelyst/react-auth`, `@bytelyst/auth-client`, `@bytelyst/telemetry-client`, `@bytelyst/diagnostics-client`, `@bytelyst/feature-flag-client`, `@bytelyst/kill-switch-client`, `@bytelyst/platform-client` | +| **Shared packages** | `@bytelyst/fastify-core`, `@bytelyst/config`, `@bytelyst/cosmos`, `@bytelyst/errors`, `@bytelyst/datastore`, `@bytelyst/api-client`, `@bytelyst/react-auth`, `@bytelyst/auth-client`, `@bytelyst/telemetry-client`, `@bytelyst/diagnostics-client`, `@bytelyst/feature-flag-client`, `@bytelyst/kill-switch-client`, `@bytelyst/platform-client`, `@bytelyst/blob-client` | | **Platform** | platform-service (port 4003) for auth, flags, telemetry, billing, blob | | **Extraction** | extraction-service (port 4005) for AI-powered task extraction | | **Database** | Azure Cosmos DB via `@bytelyst/datastore` — `productId: "notelett"` | @@ -165,7 +172,7 @@ learning_ai_notes/ ### Datastore Abstraction - `@bytelyst/datastore` provides `CosmosDatastoreProvider` and `MemoryDatastoreProvider` - `DB_PROVIDER` env var controls which provider is used (default: cosmos, test: memory) -- All 6 repositories use `getCollection()` — no direct Cosmos SDK calls +- All 7 repositories use `getCollection()` — no direct Cosmos SDK calls ### Agent Action Audit Trail - Every MCP tool write operation creates a `NoteAgentActionDoc` record @@ -179,6 +186,7 @@ learning_ai_notes/ - `note_tasks` (partition: `/workspaceId`) - `note_artifacts` (partition: `/workspaceId`) - `note_agent_actions` (partition: `/workspaceId`) +- `saved_views` (partition: `/userId`) ## 6. Build & Test Commands @@ -213,7 +221,10 @@ cd mobile && npm run typecheck # tsc --noEmit | GET/POST | `/api/note-artifacts` | List / create artifacts | | PATCH | `/api/note-artifacts/:id` | Update artifact | | GET/POST | `/api/note-agent-actions` | List / create agent actions | -| GET/PATCH | `/api/note-agent-actions/:id` | Agent action CRUD | +| PATCH | `/api/note-agent-actions/:id` | Update agent action state | +| POST | `/api/note-agent-actions/batch-review` | Batch approve/reject (up to 50) | +| GET/POST | `/api/saved-views` | List / create saved views | +| GET/PATCH/DELETE | `/api/saved-views/:id` | Saved view CRUD | | GET | `/health` | Health check | ## 8. MCP Tools diff --git a/backend/src/lib/cosmos-init.ts b/backend/src/lib/cosmos-init.ts index b5234fa..d4fa9d3 100644 --- a/backend/src/lib/cosmos-init.ts +++ b/backend/src/lib/cosmos-init.ts @@ -9,6 +9,7 @@ const CONTAINER_DEFS: Record = { note_tasks: { partitionKeyPath: '/workspaceId' }, note_artifacts: { partitionKeyPath: '/workspaceId' }, note_agent_actions: { partitionKeyPath: '/workspaceId' }, + saved_views: { partitionKeyPath: '/userId' }, }; export async function initCosmosIfNeeded(): Promise { diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 062db7e..d7f3ec4 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -480,14 +480,34 @@ Detailed implementation plans live under `docs/roadmaps/`. - SAS-based upload/download via platform-service blob endpoints - 2026-03-10 — QA / release hardening: - AGENTS.md and README.md created following ecosystem conventions +- 2026-03-11 — Mobile platform SDK integration (`878c644`): + - Added @bytelyst/telemetry-client, feature-flag-client, kill-switch-client, blob-client to mobile deps + - Created mobile/src/lib/platform.ts — centralized platform init (telemetry, flags, kill-switch, blob) + - Refactored web blob-client.ts to use shared @bytelyst/blob-client (DRY) +- 2026-03-11 — Backend batch review + saved-views module (`bdbf387`): + - POST /note-agent-actions/batch-review for bulk approve/reject (up to 50 items) + - PATCH now auto-sets reviewedBy/reviewedAt on approve/reject + - New saved-views module: full CRUD (types, repository, routes), Cosmos container saved_views +- 2026-03-11 — Web full review UX (`ca3cdba`): + - Batch selection mode with Select All / Clear + - Batch Approve N / Reject N buttons + - Review note textarea shared by single + batch flows +- 2026-03-11 — Web saved views, keyboard shortcuts, debounced search (`12d9009`): + - saved-views-client.ts: full CRUD client for backend saved-views module + - use-keyboard-shortcuts.ts: reusable hook + KeyboardShortcuts component wired into (app) layout + - Cmd+K search, Cmd+N workspaces, Cmd+Shift+D dashboard, Cmd+Shift+R reviews, Esc blur + - use-debounce.ts: shared hook replacing inline setTimeout in search (250ms) + - Search page: saved views loaded from backend with save/delete UI +- 2026-03-11 — Mobile review note input (`f8a4c18`): + - Review note TextInput on inbox screen, wired to approve/reject handlers + - reviewNote parameter flows through store → API client → backend # 9. Current Known Blockers / Deferrals - ~~**Blocker** — Product identity not finalized~~ **Resolved:** locked as NoteLett (`e1fde25`) -- **Blocker** - - `@bytelyst/react-native-platform-sdk` is part of the intended mobile architecture, but the current workspace package does not appear ready for direct runtime consumption in this app yet. -- **Deferred** - - Complete real end-to-end CRUD wiring across every web/mobile surface - - ~~Blob-backed artifacts and upload/download flows~~ **Resolved:** SAS-based blob client (`196b210`) - - Fully integrated approval/review/audit UX across every surface - - Persisted saved views, keyboard shortcut expansion, and deeper performance hardening +- ~~**Blocker** — `@bytelyst/react-native-platform-sdk` not wired~~ **Resolved:** platform.ts with telemetry, flags, kill-switch, blob (`878c644`) +- ~~**Deferred** — Blob-backed artifacts and upload/download flows~~ **Resolved:** SAS-based blob client (`196b210`) +- ~~**Deferred** — Fully integrated approval/review/audit UX~~ **Resolved:** batch review, review notes, agent timeline across web + mobile (`ca3cdba`, `f8a4c18`) +- ~~**Deferred** — Persisted saved views~~ **Resolved:** backend CRUD + web client + UI (`bdbf387`, `12d9009`) +- ~~**Deferred** — Keyboard shortcut expansion~~ **Resolved:** reusable hook + 5 shortcuts wired (`12d9009`) +- ~~**Deferred** — Performance hardening~~ **Resolved:** debounced search, memoized lists (`12d9009`)