@makefinks/daemon 0.9.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +60 -14
  2. package/package.json +4 -2
  3. package/src/ai/copilot-client.ts +775 -0
  4. package/src/ai/daemon-ai.ts +32 -234
  5. package/src/ai/model-config.ts +55 -14
  6. package/src/ai/providers/capabilities.ts +16 -0
  7. package/src/ai/providers/copilot-provider.ts +632 -0
  8. package/src/ai/providers/openrouter-provider.ts +217 -0
  9. package/src/ai/providers/registry.ts +14 -0
  10. package/src/ai/providers/types.ts +31 -0
  11. package/src/ai/system-prompt.ts +16 -0
  12. package/src/ai/tools/subagents.ts +1 -1
  13. package/src/ai/tools/tool-registry.ts +22 -1
  14. package/src/ai/tools/write-file.ts +51 -0
  15. package/src/app/components/AppOverlays.tsx +9 -1
  16. package/src/app/components/ConversationPane.tsx +8 -2
  17. package/src/components/ModelMenu.tsx +202 -140
  18. package/src/components/OnboardingOverlay.tsx +147 -1
  19. package/src/components/SettingsMenu.tsx +27 -1
  20. package/src/components/TokenUsageDisplay.tsx +5 -3
  21. package/src/components/tool-layouts/layouts/index.ts +1 -0
  22. package/src/components/tool-layouts/layouts/write-file.tsx +117 -0
  23. package/src/hooks/daemon-event-handlers.ts +61 -14
  24. package/src/hooks/keyboard-handlers.ts +109 -28
  25. package/src/hooks/use-app-callbacks.ts +141 -43
  26. package/src/hooks/use-app-context-builder.ts +5 -0
  27. package/src/hooks/use-app-controller.ts +31 -2
  28. package/src/hooks/use-app-copilot-models-loader.ts +45 -0
  29. package/src/hooks/use-app-display-state.ts +24 -2
  30. package/src/hooks/use-app-model.ts +103 -17
  31. package/src/hooks/use-app-preferences-bootstrap.ts +54 -10
  32. package/src/hooks/use-bootstrap-controller.ts +5 -0
  33. package/src/hooks/use-daemon-events.ts +8 -2
  34. package/src/hooks/use-daemon-keyboard.ts +19 -6
  35. package/src/hooks/use-daemon-runtime-controller.ts +4 -0
  36. package/src/hooks/use-menu-keyboard.ts +6 -1
  37. package/src/state/app-context.tsx +6 -0
  38. package/src/types/index.ts +24 -1
  39. package/src/utils/copilot-models.ts +77 -0
  40. package/src/utils/preferences.ts +3 -0
package/README.md CHANGED
@@ -14,12 +14,11 @@ but can also interact with and **control** your system through the terminal with
14
14
  DAEMON requires Bun at runtime, but global installation is currently documented via npm because some Bun global setups can fail on native `sqlite3` bindings pulled in by the optional memory feature.
15
15
 
16
16
  ```bash
17
- # npm (recommended)
18
- # Note: you may see deprecation warnings from transitive dependencies.
17
+ # Install via npm
19
18
  npm i -g @makefinks/daemon
20
19
 
21
- # additional installs (macOS)
22
- brew install sox # For Audio Input / Output
20
+ # Additional installs (Audio)
21
+ brew install sox
23
22
  ```
24
23
 
25
24
  Then run with:
@@ -27,7 +26,9 @@ Then run with:
27
26
  daemon
28
27
  ```
29
28
 
30
- > **Note:** DAEMON requires [Bun](https://bun.sh) at runtime. Install Bun first: `curl -fsSL https://bun.com/install | bash`
29
+ #### ⚠️ Important Notes
30
+ > 1. DAEMON requires [Bun](https://bun.sh) at runtime. Install Bun first: `curl -fsSL https://bun.com/install | bash`
31
+ > 2. Windows is currently **not** supported (Only by using WSL - with minor issues)
31
32
 
32
33
  See full installation details below for configuration and system dependencies.
33
34
 
@@ -40,12 +41,12 @@ listening to audio input, reasoning about questions, calling tools, and generati
40
41
  The avatar was deliberately designed to feel slightly ominous and alien-like playing into sci-fi depictions.
41
42
 
42
43
  ### 🧠 LLMs
43
- DAEMON can be powered by **any** model available on [OpenRouter](https://openrouter.ai/models).
44
- The TUI includes a model picker that can fetch and select models as they become available on OpenRouter.
45
- Models are sorted by average provider pricing and the picker includes information about their context window and caching support.
46
- Once a model is selected, the **selection of the inference provider** is possible. Open-source models can vary strongly between providers.
47
- > While all models on OpenRouter are supported, a curated list is included for the best experience.
48
- It is generally recommended to use Models that support caching due to being significantly cheaper in DAEMON
44
+ DAEMON supports two model backends:
45
+ - **OpenRouter** (API key based)
46
+ - **GitHub Copilot** (GitHub-authenticated via Copilot CLI / SDK) (Experimental!)
47
+
48
+ For OpenRouter, DAEMON can fetch and browse available models and route to a specific OpenRouter inference provider.
49
+ For GitHub Copilot, DAEMON can use your Copilot subscription and list available Copilot models when authenticated.
49
50
 
50
51
  ![Model Picker](img/model-picker.png)
51
52
 
@@ -86,14 +87,15 @@ DAEMON can persist user-specific facts across sessions using [mem0](https://gith
86
87
  | Terminal TUI | OpenTUI-powered interface with sci-fi styling and hotkey controls. |
87
88
  | Text + Voice | Supports text input and voice interaction with transcription and TTS. |
88
89
  | Animated Avatar | Sci-fi avatar reacts to listening, tool use, and response generation. |
89
- | Multi-Model Support | Works with all OpenRouter models and includes a curated default list. |
90
+ | Multi-Model Support | Works with OpenRouter and GitHub Copilot model backends. |
90
91
  | Session Persistence | Preferences and chat sessions stored locally on disk. |
91
92
  | Memory | Automatic persistance of user-specific facts with persistent recall using **mem0** |
92
- | Workspaces | On-disk workspaces for the agent to work in. |
93
+ | Workspaces | Session-scoped on-disk workspaces for the agent to work in. |
93
94
  | Web Search | Exa-based search and fetch for grounded, up-to-date info. |
94
95
  | Grounding | Text-fragment grounding with a dedicated UI. |
95
96
  | Bash Execution | Bash integration with approval scoping for potentially dangerous commands. |
96
97
  | JS Page Rendering | Optional Playwright renderer for SPA content. |
98
+ | MCP | Model Context Protocol tools |
97
99
 
98
100
  ## 📦 Install (npm)
99
101
 
@@ -114,12 +116,23 @@ daemon
114
116
 
115
117
  Configuration is done via environment variables (or the onboarding UI):
116
118
 
117
- - `OPENROUTER_API_KEY` (required) - response generation via OpenRouter models
119
+ - `OPENROUTER_API_KEY` (required only when OpenRouter is selected) - response generation via OpenRouter models
118
120
  - `EXA_API_KEY` (optional) - enables web search + fetch grounding via Exa
119
121
  - `OPENAI_API_KEY` (optional) - enables voice transcription + TTS
120
122
 
123
+ For Copilot, authenticate once with either GitHub CLI or Copilot CLI:
124
+
125
+ ```bash
126
+ gh auth login
127
+ # or
128
+ copilot login
129
+ ```
130
+
131
+ > ⚠️ GitHub Copilot authentication support is experimental.
132
+
121
133
  > Keys entered via the onboarding UI are stored locally in `~/.config/daemon/credentials.json` with restricted permissions (`0600`). For maximum security, use environment variables instead.
122
134
 
135
+
123
136
  ## 🛠️ System dependencies
124
137
 
125
138
  Voice input requires `sox` or other platform-specific audio libraries:
@@ -157,3 +170,36 @@ npm i -g playwright
157
170
  # 2) Install Chromium browser binaries
158
171
  npx playwright install chromium
159
172
  ```
173
+ ## 🔌 MCP server setup (Model Context Protocol)
174
+
175
+ DAEMON can load MCP tools from external servers and expose them to the agent at runtime.
176
+ MCP servers are configured via a local config file.
177
+
178
+ Default config path:
179
+
180
+ - macOS/Linux: `~/.config/daemon/config.json`
181
+
182
+ Example config:
183
+
184
+ ```json
185
+ {
186
+ "mcpServers": [
187
+ {
188
+ "id": "local-mcp",
189
+ "type": "http",
190
+ "url": "http://localhost:3333/mcp"
191
+ },
192
+ {
193
+ "type": "sse",
194
+ "url": "https://example.com/mcp/sse"
195
+ }
196
+ ]
197
+ }
198
+ ```
199
+
200
+ Notes:
201
+
202
+ - `type` must be `http` or `sse`.
203
+ - `url` is the MCP endpoint URL for the server.
204
+ - `id` is optional; if omitted, DAEMON derives one from the host.
205
+ - MCP server status and tools appear in the **Tools** menu once configured.
package/package.json CHANGED
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "module": "src/index.tsx",
30
30
  "type": "module",
31
- "version": "0.9.1",
31
+ "version": "0.11.0",
32
32
  "bin": {
33
33
  "daemon": "dist/cli.js"
34
34
  },
@@ -75,6 +75,7 @@
75
75
  "dependencies": {
76
76
  "@ai-sdk/mcp": "^1.0.14",
77
77
  "@ai-sdk/openai": "^3.0.0",
78
+ "@github/copilot-sdk": "^0.1.23",
78
79
  "@openrouter/ai-sdk-provider": "^2.1.0",
79
80
  "@opentui-ui/toast": "^0.0.3",
80
81
  "@opentui/core": "0.1.75",
@@ -84,7 +85,8 @@
84
85
  "mem0ai": "^2.2.1",
85
86
  "openai": "^6.16.0",
86
87
  "opentui-spinner": "^0.0.6",
87
- "react": "^19.2.3"
88
+ "react": "^19.2.3",
89
+ "zod-to-json-schema": "^3.25.1"
88
90
  },
89
91
  "optionalDependencies": {
90
92
  "@opentui/core-win32-x64": "0.1.75",