5e32f16fa3
fix(mobile): harden shared intake and upload flows
2026-05-05 12:58:59 -07:00
ec724b7130
test(mobile): cover release-critical companion flows
2026-05-05 12:56:35 -07:00
3d02deb14c
fix(mobile): harden auth session bootstrap
2026-05-05 12:50:57 -07:00
f9903fec7c
fix(mobile): harden touch accessibility
2026-05-05 10:29:54 -07:00
6bbbac8c6f
refactor(mobile): use theme colors consistently
2026-05-05 10:18:55 -07:00
efa20979fc
test(platform): verify client propagation
2026-05-05 09:33:10 -07:00
saravanakumardb1
bb6d77b1a4
refactor(mobile): DRY getAccessToken into shared auth-helpers.ts
...
Extract the duplicated getAccessToken() function from platform.ts,
billing-client.ts, and platform-api.ts into a single auth-helpers.ts.
All three now import from the shared module.
2026-04-13 11:06:22 -07:00
saravanakumardb1
4813c850a3
feat(web,mobile): add @bytelyst/billing-client and platform-client
...
Web:
- New lib/billing-client.ts: factory wrapper using shared getAccessToken.
- Add @bytelyst/billing-client to web deps.
Mobile:
- New lib/billing-client.ts: factory wrapper using MMKV token storage.
- New lib/platform-api.ts: typed platform-client wrapper for settings,
sessions, and profile management.
- Add @bytelyst/billing-client and @bytelyst/platform-client to deps.
2026-04-13 10:30:02 -07:00
saravanakumardb1
ddb5bfb49a
chore(deps): use wildcard (*) for @bytelyst/* internal packages
...
All @bytelyst/* packages are internal to the ByteLyst ecosystem and
published to the private Gitea registry. Using "*" eliminates version
bump noise — always resolves to latest available.
2026-04-13 01:05:35 -07:00
saravanakumardb1
e5f287c7ea
feat(web): add intake URL bar, share dialog, intake API client — dashboard + enhanced sharing UI
2026-04-06 20:35:02 -07:00
saravanakumardb1
599d68e116
feat(sharing): add collaborative shares, export-text, deep-link helper — note-collaborators module (11 new tests)
2026-04-06 20:31:31 -07:00
saravanakumardb1
192c7baf2f
fix: align web+mobile types with backend (categories, output types, field names, durationMs telemetry)
2026-04-06 16:24:31 -07:00
saravanakumardb1
6095f1d985
feat(smart-actions): add prompt-result screen, capture sub-routes, Cmd+Shift+A shortcut, telemetry events (G16-G19)
2026-04-06 13:43:47 -07:00
saravanakumardb1
406153eeda
test(mobile): add note-prompts API client and prompt-store tests (G14)
2026-04-06 13:36:00 -07:00
saravanakumardb1
4bb2d84152
test(mobile): add API config unit tests
2026-04-06 11:18:29 -07:00
saravanakumardb1
0aad04f91a
fix(mobile): align PromptCategory with backend, add tone param, remove dead import
...
- note-prompts.ts: fix PromptCategory ('analysis' → 'analyze', remove nonexistent 'vision'/'custom')
- note-prompts.ts: add CopilotTone type and optional tone param to copilotTransform
- capture.tsx: remove unused copilotTransform import (copilot requires real noteId)
2026-04-06 10:47:38 -07:00
saravanakumardb1
3260b7ea0a
feat(smart-actions): F1-F4 inline editor AI, F15-F19 mobile capture modes, F25-F27 scheduler/webhooks/approval
...
F1-F4: Inline editor AI
- Backend: expand CopilotAction with fix-rewrite, change-tone, continue, explain
- Backend: add tone parameter to copilot route for change-tone action
- Web: copilot-client adds CopilotTone type and tone parameter
- Web: NoteEditor toolbar gains AI row with Fix & Rewrite, Change Tone dropdown,
Continue Writing (appends at cursor), Explain (inline popover)
F15-F19: Mobile capture enhancements
- Backend: POST /note-prompts/url-extract endpoint (fetch, strip HTML, LLM summarize)
- Mobile API: extractFromUrl() and copilotTransform() client functions
- Mobile: capture tab rewritten with 6 capture modes grid (text, photo, voice,
URL, scan, paste) — URL extract + clipboard paste fully wired, camera/voice/scan
surface native permission prompts (require expo-av/expo-image-picker)
- expo-clipboard added as dependency
F25-F27: Scheduled actions, webhook triggers, approval-gated actions
- New scheduler.ts module with PromptScheduleDoc + PromptWebhookDoc types
- Schedule CRUD: GET/POST/PATCH/DELETE /prompt-schedules
- Webhook CRUD: GET/POST/PATCH/DELETE /prompt-webhooks
- POST /prompt-webhooks/:id/trigger — execute template against note
- Scheduler loop (60s tick) with cron next-run calculation
- Diagnostics endpoint: GET /prompt-schedules/diagnostics
- Cosmos containers: note_prompt_schedules, note_prompt_webhooks
- PromptTemplateDoc gains requiresApproval field (F27)
- Runner produces approvalState: proposed|applied based on template flag
- Create/Update schemas accept requiresApproval boolean
2026-04-06 10:25:34 -07:00
saravanakumardb1
37d7284730
feat(mobile): add Smart Actions — API client, prompt store, note detail integration
...
Phase 4 of Smart Actions Roadmap:
- Create mobile/src/api/note-prompts.ts: typed API client
- listPromptTemplates, runPrompt, suggestTags, getReadingTime
- Create mobile/src/store/prompt-store.ts: Zustand store
- fetchTemplates, runPrompt, clearResult, clearError
- Enhance note detail screen (mobile/src/app/note/[id].tsx):
- Collapsible Smart Actions section with toggle
- Reading time display on expand
- Suggest tags button with inline tag display
- Prompt template list (top 6) with one-tap execution
- ActivityIndicator during prompt execution
- Inline result card with model/token info and dismiss
- Mobile typecheck passes
2026-04-06 08:23:55 -07:00
370e96fa45
test(mobile): settings smoke test; docs: capture points to blob-upload
...
- settings.test.tsx mirrors auth/home import smoke pattern
- Capture screen comment: future uploads via api/blob-upload
Made-with: Cursor
2026-03-31 01:51:07 -07:00
6620e5dabb
fix(mobile): auth-gated hydrates and telemetry flush on background
...
- Run notes/workspace/inbox hydrate, broadcast/survey polling, and offline
queue flush timers only when hasBootstrapped && isAuthenticated
- Split effects: kill switch, bootstrap, initPlatform, global AppState flush
- Avoid pre-auth 401s from parallel API hydrates
Made-with: Cursor
2026-03-31 01:51:05 -07:00
e920d724e4
fix(mobile): export flushTelemetry for background buffer flush
...
Expose telemetryClient.flush() from platform.ts for AppState wiring.
Made-with: Cursor
2026-03-31 01:51:03 -07:00
saravanakumardb1
db2874174b
feat(mobile): blob upload abstraction via shared blobClient (Block F)
...
- Create mobile/src/api/blob-upload.ts with uploadNoteAttachment() and uploadNoteImage()
- All mobile uploads route through shared blobClient from lib/platform.ts
- No duplicate SAS logic or raw fetch paths
- Update MOBILE_DELEGATION_ROADMAP to mark Block F complete
2026-03-31 01:32:30 -07:00
saravanakumardb1
83f4953870
fix(mobile): add missing accessibilityLabels across all screens
...
- settings.tsx: labels on sign-out, feedback type chips, submit button
- capture.tsx: labels on workspace selection chips
- index.tsx: labels on workspace filter chips, note card pressables
- search.tsx: labels on search input, result row pressables
- note/[id].tsx: labels on edit, save, cancel buttons
2026-03-31 00:55:05 -07:00
saravanakumardb1
a4124949d1
fix(mobile): auto-dismiss queue status banner when queue is empty
...
- Skip flush call and clear lastFlushed when getNoteQueueSize() is 0
- Prevents stale 'Flushed on last attempt: N' persisting after queue drains
2026-03-31 00:52:24 -07:00
saravanakumardb1
c96c7855c6
fix(mobile): add error handling to store hydrate methods
...
- notes-store: wrap hydrate() and openNote() in try/catch to prevent isLoading stuck true
- inbox-store: wrap hydrate() in try/catch to prevent isLoading stuck true on API failure
- openNote falls back to cached list note when detail fetch fails
2026-03-31 00:51:16 -07:00
saravanakumardb1
9d3ac06234
fix(mobile): use dynamic platform in feedback, add null coercion, add Content-Type on flush
...
- settings.tsx: replace hardcoded platform: 'ios' with APP_PLATFORM from app-metadata
- feedback-client.ts: add ?? '' null coercion on getAuthToken (matches broadcast/survey pattern)
- offline-queue.ts: add Content-Type: application/json header on flush requests
2026-03-31 00:49:40 -07:00
saravanakumardb1
5a0175fa66
feat(mobile): add Block H — Vitest RN mock aliases + component smoke tests
...
- Create __mocks__/ with react-native, expo-router, expo-constants, expo-status-bar, react-native-mmkv, @testing-library/react-native
- Update vitest.config.ts with resolve aliases for all native modules
- Add AuthScreen smoke test (3 tests)
- Add HomeScreen smoke test (2 tests)
- Add @types/react-test-renderer dev dependency
- Total: 32 passing tests (27 store + 5 component)
2026-03-31 00:42:49 -07:00
saravanakumardb1
e4683ad695
fix(mobile): complete block G metadata and accessibility
2026-03-31 00:23:57 -07:00
saravanakumardb1
5d8216066a
feat(mobile): wire offline queue enqueue and flush
2026-03-31 00:17:41 -07:00
saravanakumardb1
746cba74ff
feat(mobile): add settings tab with feedback client
2026-03-31 00:10:50 -07:00
saravanakumardb1
48896ab879
feat(mobile): integrate broadcast and survey clients
2026-03-31 00:03:20 -07:00
saravanakumardb1
acdedbcb9a
feat(mobile): add kill switch gate in root layout
2026-03-30 23:58:03 -07:00
saravanakumardb1
ae0a481504
feat(mobile): complete block A auth session flow
2026-03-30 23:56:18 -07:00
saravanakumardb1
33f9379f4a
feat(docker): migrate NoteLett to Gitea registry-backed Docker pattern
...
- Convert all @bytelyst/* file: refs to semver ^0.1.0 (backend, web, mobile)
- Remove sibling common-plat workspace references from pnpm-workspace.yaml
- Add .npmrc and .npmrc.docker for local Gitea registry
- Rewrite backend/web Dockerfiles: pnpm + BuildKit secret mount + corp proxy
- Fix backend tsconfig.json: remove explicit lib to resolve fetch Response types
- Verified: host-side pnpm install, backend tests (86 pass), backend+web Docker builds
2026-03-23 20:11:12 -07:00
saravanakumardb1
90dd2d3bd5
feat(repo): migrate notelett workspace to pnpm
2026-03-22 15:50:54 -07:00
saravanakumardb1
304d2ae865
feat: wire feature flag checks into web Sidebar and upgrade mobile flag client
2026-03-21 20:34:16 -07:00
saravanakumardb1
dbe3988284
chore: Remove unused deps — auth-client from web, platform-client + react-native-platform-sdk from mobile
2026-03-21 00:08:17 -07:00
saravanakumardb1
0b5c224075
fix(mobile): Fix diagnostics-client API — use DiagnosticsClient.getInstance()
...
@bytelyst/diagnostics-client exports DiagnosticsClient class with
singleton getInstance(config), not a createDiagnosticsClient factory.
Fixed import and initialization with correct config shape.
2026-03-20 23:13:44 -07:00
saravanakumardb1
c2d641433f
refactor(mobile): Phase 9B — Add @bytelyst/diagnostics-client
...
- Add diagnostics-client dependency to mobile/package.json
- Wire diagnosticsClient in mobile/src/lib/platform.ts
Part of Mobile DRY Refactoring Roadmap Phase 9B.
2026-03-20 22:50:09 -07:00
saravanakumardb1
dd62d3bf5c
test(web+mobile): Playwright E2E scaffold + 23 mobile store tests [C4, B7]
...
- web: playwright.config.ts + e2e/navigation.spec.ts (7 navigation tests, scaffolded)
- web: exclude e2e/ from tsconfig (playwright not yet installed as dep)
- mobile: notes-store.test.ts (7 tests: hydrate, openNote, saveDraft, updateNote)
- mobile: workspace-store.test.ts (5 tests: hydrate, preserve/reset active, set/clear)
- mobile: inbox-store.test.ts (5 tests: hydrate, approve, reject, unknown id guards)
- mobile: auth-store.test.ts (6 tests: bootstrap, signIn, signOut, failure paths)
- Total: 76 backend, 14 web, 23 mobile = 113 tests
2026-03-19 08:51:36 -07:00
saravanakumardb1
f8a4c18f27
feat(mobile): wire review note input to inbox approve/reject
...
- note-agent-actions API: updateApprovalState now accepts optional reviewNote
- inbox-store: approve/reject actions pass reviewNote through to backend
- Inbox screen: TextInput for review note above approval cards
- Review note cleared after successful approve/reject
Verification: mobile typecheck passes.
2026-03-10 19:41:39 -07:00
saravanakumardb1
878c644dd8
feat(platform): wire shared platform packages into mobile + refactor web blob-client (DRY)
...
Phase 1 — Platform SDK integration:
- Mobile: added @bytelyst/telemetry-client, feature-flag-client, kill-switch-client, blob-client deps
- Mobile: created src/lib/platform.ts — centralized platform init (telemetry, flags, kill-switch, blob)
- Mobile: wired initPlatform() into root layout startup
- Web: refactored blob-client.ts to use shared @bytelyst/blob-client (eliminates hand-rolled SAS fetch code)
- Web: added @bytelyst/blob-client dep
DRY: Both web and mobile now use the same @bytelyst/blob-client package for blob operations.
Verification: web typecheck + mobile typecheck pass.
2026-03-10 19:29:00 -07:00
saravanakumardb1
e1fde25afd
feat(identity): lock NoteLett product identity across all surfaces
...
- productId: notelett
- displayName: NoteLett
- domain: notelett.app
- iOS bundle: com.bytelyst.notelett
- Android bundle: com.notelett.app
- backend port: 4016
- token namespace: --nl-* (CSS), NoteLettTheme (native)
Rippled through:
- shared/product.json (canonical source)
- backend package.json, config, cosmos-init, all 10 test files
- web package.json, landing page, notes-client test
- mobile app.json, package.json, auth screen
- docs: PRD, ROADMAP, architecture review, foundations, web/mobile roadmaps
- registered in learning_ai_common_plat/products/notelett/
Verification: backend typecheck + 18 tests, web typecheck + 6 tests, mobile typecheck — all pass.
2026-03-10 18:47:01 -07:00
saravanakumardb1
7d23793728
feat(notes): support mobile all-workspace view
2026-03-10 17:09:16 -07:00
saravanakumardb1
7a8009454f
fix(notes): guard mobile review actions
2026-03-10 16:59:40 -07:00
saravanakumardb1
8e577993c0
feat(notes): add mobile workspace selection
2026-03-10 16:54:17 -07:00
saravanakumardb1
5458090523
fix(notes): align active surface copy
2026-03-10 16:36:10 -07:00
saravanakumardb1
2a93b5ba40
fix(notes): align mobile note detail state
2026-03-10 16:29:06 -07:00
saravanakumardb1
8f14698a42
feat(notes): wire mobile inbox review flow
2026-03-10 16:02:08 -07:00
saravanakumardb1
5995b6c725
feat(notes): wire backend-backed note workspace slice
2026-03-10 15:53:57 -07:00