You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+14-3Lines changed: 14 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -39,12 +39,19 @@ npm start
39
39
npm run typecheck
40
40
```
41
41
42
+
5. Run the full quality gate:
43
+
44
+
```bash
45
+
npm test
46
+
```
47
+
42
48
## Common Commands
43
49
44
50
```bash
45
51
make help
46
52
make setup
47
53
make dev
54
+
make lint
48
55
make test
49
56
make package
50
57
make install
@@ -57,6 +64,7 @@ If you prefer npm directly:
57
64
```bash
58
65
npm run setup
59
66
npm run dev
67
+
npm run lint
60
68
npm run test
61
69
npm run package:mac
62
70
npm run make:mac
@@ -86,10 +94,11 @@ After bootstrap, the repo-level wrappers [scripts/nodew](/Users/karansingh/proje
86
94
87
95
## Testing
88
96
89
-
Robin currently has a strong smoke-test workflow rather than a full automated test suite.
97
+
Robin now has a baseline automated quality gate plus a manual desktop smoke pass.
90
98
91
99
1. Run `npm install`
92
100
2. Run `npm run test`
101
+
This executes ESLint, `tsc --noEmit`, the Node-based unit tests under [test](/Users/karansingh/projects/robin/test), and Prettier checks.
93
102
3. Run `npm run dev`
94
103
4. Verify manually:
95
104
- Tray icon appears
@@ -167,6 +176,7 @@ Robin uses the standard Electron architecture with a **main process** (Node.js)
167
176
### Local-first persistence
168
177
169
178
All data is stored as JSON files in Electron's `userData` directory:
179
+
170
180
-`settings.json` — app config, provider preferences, model selections
171
181
-`threads.json` — full conversation history with messages and attachments
172
182
-`todos.json` — todo items with ordering
@@ -176,8 +186,8 @@ API keys are encrypted at rest using Electron's `safeStorage` API (macOS Keychai
176
186
### Multi-provider abstraction
177
187
178
188
Robin supports multiple AI providers through a uniform streaming interface:
189
+
179
190
-**OpenAI** — GPT models with mode support (chat/responses)
180
-
-**Anthropic** — Claude models
181
191
-**Google** — Gemini models with native image support
182
192
-**Perplexity** — Search-grounded answers with citations
183
193
-**OpenRouter** — Proxy to any model via user-provided model IDs
@@ -188,6 +198,7 @@ Each provider implements `streamReply()` with delta callbacks. The `ProviderServ
188
198
### Context management
189
199
190
200
Before sending messages to any provider, Robin optimises the payload:
201
+
191
202
1.**Image stripping** — only the most recent user message retains image attachments. Older images remain in the thread for display but are excluded from API calls to avoid payload bloat.
192
203
2.**Context truncation** — if total message content exceeds ~100K characters (~25K tokens), the oldest messages are dropped while preserving at least the last 4 messages (2 turns).
193
204
3.**Model-agnostic threads** — threads store raw messages without model metadata. The model selection is applied at call time, so you can switch providers mid-conversation.
@@ -198,6 +209,6 @@ The sidebar uses a 2x2 navigation grid (Chats, Todos, Notes, Calendar) that swit
198
209
199
210
## Next Steps
200
211
201
-
- Add real renderer/main-process automated tests
212
+
- Add Electron-level integration tests for IPC and window lifecycle
202
213
- Add a richer settings surface for provider management
0 commit comments