mixdog 1.0.6 → 1.0.8
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.
- package/README.md +158 -105
- package/package.json +11 -4
- package/src/defaults/skills/setup/references/actions.md +26 -6
- package/src/defaults/skills/setup/references/surfaces.md +8 -3
- package/src/runtime/agent/orchestrator/runtime-core/builtin-features.mjs +16 -7
- package/src/runtime/agent/orchestrator/runtime-core/config-helpers.mjs +6 -2
- package/src/runtime/agent/orchestrator/session/manager/session-record.mjs +0 -3
- package/src/runtime/agent/orchestrator/session/store-summary-index.mjs +0 -2
- package/src/runtime/agent/orchestrator/session/store-summary-reader.mjs +24 -2
- package/src/runtime/agent/orchestrator/session/store-transcript-cache.mjs +25 -0
- package/src/runtime/agent/orchestrator/session/store-transcript-worker.mjs +14 -1
- package/src/runtime/agent/orchestrator/tools/builtin/runtime-capabilities.mjs +3 -45
- package/src/runtime/channels/lib/config.mjs +0 -1
- package/src/runtime/channels/lib/owned-runtime/config-reload.mjs +1 -1
- package/src/runtime/channels/lib/scheduler.mjs +15 -56
- package/src/runtime/channels/lib/worker-main.mjs +2 -9
- package/src/runtime/shared/config.mjs +66 -1
- package/src/runtime/shared/llm/usage-ledger-quota.mjs +13 -2
- package/src/runtime/shared/path-executable.mjs +58 -0
- package/src/session-runtime/boot/apis.mjs +6 -2
- package/src/session-runtime/boot/begin.mjs +0 -2
- package/src/session-runtime/boot/providers.mjs +3 -0
- package/src/session-runtime/boot/tools.mjs +0 -1
- package/src/session-runtime/config-lifecycle.mjs +11 -0
- package/src/session-runtime/internal-tool-executor.mjs +0 -2
- package/src/session-runtime/runtime-feature-gates.mjs +2 -3
- package/src/session-runtime/schedule-session-run.mjs +0 -1
- package/src/session-runtime/services/channel-admin.mjs +8 -26
- package/src/session-runtime/settings-compaction-api.mjs +5 -1
- package/src/session-runtime/settings-system-api.mjs +2 -20
- package/src/session-runtime/setup-tool/executor.mjs +61 -3
- package/src/session-runtime/setup-tool/extended-actions.mjs +31 -6
- package/src/session-runtime/setup-tool/settings-contract.mjs +27 -3
- package/src/session-runtime/setup-tool/tool-defs.mjs +35 -5
- package/src/session-runtime/webhook-session-run.mjs +0 -2
- package/src/session-runtime/workflow-agents-api/agent-editor.mjs +13 -3
- package/src/standalone/daemon-stored-session-views.mjs +4 -0
- package/src/standalone/session-protocol.mjs +0 -1
- package/src/standalone/session-service/session-calls/session-views.mjs +10 -4
- package/src/standalone/session-service/stored-reader.mjs +20 -2
- package/src/standalone/session-service/viewers.mjs +3 -3
- package/src/standalone/session-service.mjs +3 -1
- package/src/tui/App.jsx +6 -1
- package/src/tui/app/create-app-pickers.mjs +1 -0
- package/src/tui/app/doctor.mjs +6 -14
- package/src/tui/app/maintenance-pickers/auto-clear-picker.mjs +8 -3
- package/src/tui/app/settings-picker/settings-rows.mjs +5 -1
- package/src/tui/app/use-ui-open-request.mjs +13 -3
- package/src/tui/dist/index.mjs +41 -9
- package/src/tui/session/session-api/settings.mjs +0 -6
package/README.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/tribgames/mixdog/main/apps/desktop/build/mixdog.png" alt="" width="96">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
<h1 align="center">Mixdog</h1>
|
|
2
6
|
|
|
3
7
|
<p align="center">
|
|
4
|
-
<b>Same model. Same
|
|
5
|
-
Free, open-source coding agent for Windows
|
|
8
|
+
<b>Same model. Same performance. 63% fewer tokens.</b><br>
|
|
9
|
+
Free, open-source desktop coding agent for Windows.
|
|
6
10
|
</p>
|
|
7
11
|
|
|
8
12
|
<p align="center">
|
|
@@ -12,38 +16,66 @@
|
|
|
12
16
|
</p>
|
|
13
17
|
|
|
14
18
|
<p align="center">
|
|
15
|
-
<
|
|
19
|
+
<a href="https://github.com/tribgames/mixdog/releases/latest"><img src="https://img.shields.io/github/v/release/tribgames/mixdog?label=release" alt="Latest release"></a>
|
|
20
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache--2.0-blue" alt="Apache-2.0 license"></a>
|
|
21
|
+
<img src="https://img.shields.io/badge/platform-Windows%20x64-0078D4" alt="Windows x64">
|
|
16
22
|
</p>
|
|
17
23
|
|
|
18
24
|
<p align="center">
|
|
19
|
-
<
|
|
20
|
-
<
|
|
21
|
-
<img src="https://img.shields.io/badge/node-%5E22.19.0%20%7C%7C%20%3E%3D24.0.0-brightgreen" alt="Node.js ^22.19.0 || >=24.0.0">
|
|
25
|
+
<sub>The installer is not code-signed yet. If Windows SmartScreen appears,
|
|
26
|
+
choose <b>More info → Run anyway</b>.</sub>
|
|
22
27
|
</p>
|
|
23
28
|
|
|
24
29
|
<p align="center">
|
|
25
30
|
<img src="https://raw.githubusercontent.com/tribgames/mixdog/main/docs/assets/desktop.png" alt="Mixdog Desktop" width="860">
|
|
26
31
|
</p>
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Terminal-Bench 2.1 — same model, same 89 tasks, same official verifier.
|
|
31
|
-
Only the harness changes.
|
|
33
|
+
<a name="benchmarks"></a>
|
|
34
|
+
## Same performance, 63% fewer tokens
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
Mixdog and Codex CLI ran Terminal-Bench 2.1 on the same model, GPT-5.6 Sol
|
|
37
|
+
xhigh. Both passed the same share of tasks. Mixdog used 63% fewer tokens.
|
|
34
38
|
|
|
35
39
|
| | Mixdog | Codex CLI | |
|
|
36
40
|
| --- | --- | --- | --- |
|
|
37
41
|
| **Total tokens** (incl. cached input) | **156.5M** | 421.4M | **63% fewer** |
|
|
38
|
-
| Success rate | **86.5%** (385/445) | 86.1% (383/445) |
|
|
39
|
-
| Pass@5 | **96.6%** | 95.5% | |
|
|
42
|
+
| Success rate | **86.5%** (385/445) | 86.1% (383/445) | matched |
|
|
40
43
|
| Priced cost per trial | **$0.476** | $0.782 | 39% lower |
|
|
44
|
+
| Median first request | **4.7k** | 14.4k | 67% smaller |
|
|
41
45
|
| Median final context | **18.5k** | 34.3k | 46% smaller |
|
|
42
46
|
| Wall time per trial | **415s** | 437s | matched |
|
|
43
47
|
|
|
44
48
|

|
|
45
49
|
|
|
46
|
-
|
|
50
|
+
- **The official leaderboard protocol.** All 89 tasks, five trials each — 445
|
|
51
|
+
trials per side — with unmodified task timeouts and resources, scored by the
|
|
52
|
+
official Harbor verifier.
|
|
53
|
+
- **Same conditions on both sides.** Same model and reasoning level, the same
|
|
54
|
+
kind of subscription sign-in, fast mode off, no retries of task failures or
|
|
55
|
+
agent timeouts.
|
|
56
|
+
- **Everything is published.** Verdicts, verifier output, and usage snapshots
|
|
57
|
+
for both sides, plus the scripts that recompute every number, are in
|
|
58
|
+
[`benchmarks/terminal-bench-2.1/`](benchmarks/terminal-bench-2.1/).
|
|
59
|
+
|
|
60
|
+
### Across the 89 tasks
|
|
61
|
+
|
|
62
|
+
Mixdog used fewer tokens on 87 of the 89 tasks. The median task used 68% fewer.
|
|
63
|
+
|
|
64
|
+
| Token change | Tasks |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| 75% fewer or better | 24 |
|
|
67
|
+
| 50–75% fewer | 42 |
|
|
68
|
+
| 25–50% fewer | 19 |
|
|
69
|
+
| 0–25% fewer | 2 |
|
|
70
|
+
| More tokens | 2 |
|
|
71
|
+
|
|
72
|
+
Pass counts were equal on 60 tasks; Mixdog passed more trials on 14 and Codex
|
|
73
|
+
CLI on 15. Mixdog used more tokens on `mteb-leaderboard` (6.8×) and
|
|
74
|
+
`crack-7z-hash` (1.4×). Every task is listed in
|
|
75
|
+
[`results.md`](benchmarks/terminal-bench-2.1/results.md).
|
|
76
|
+
|
|
77
|
+
<details>
|
|
78
|
+
<summary><b>Claude Opus 5 — Mixdog vs Claude Code</b> (single pass, 89 trials each)</summary>
|
|
47
79
|
|
|
48
80
|
| | Mixdog | Claude Code | |
|
|
49
81
|
| --- | --- | --- | --- |
|
|
@@ -54,48 +86,114 @@ Only the harness changes.
|
|
|
54
86
|
|
|
55
87
|

|
|
56
88
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
- **
|
|
79
|
-
|
|
89
|
+
One trial per task, so per-task differences sit within run-to-run variance.
|
|
90
|
+
|
|
91
|
+
</details>
|
|
92
|
+
|
|
93
|
+
<sub>Codex CLI 0.151.0. Mixdog ran single-model, single-session — no
|
|
94
|
+
sub-agents or helper models. Cost values both sides at the same API list
|
|
95
|
+
rates, not subscription charges. Results measure the pinned source revision.
|
|
96
|
+
The leaderboard is not accepting community submissions, so the runs are
|
|
97
|
+
published here instead.</sub>
|
|
98
|
+
|
|
99
|
+
## How it uses fewer tokens
|
|
100
|
+
|
|
101
|
+
- **A light start.** System instructions and tool descriptions are kept to
|
|
102
|
+
what the model needs.
|
|
103
|
+
*67% smaller first request — 4.7k tokens against 14.4k.*
|
|
104
|
+
- **Fewer round trips.** The agent picks the right tool first and runs
|
|
105
|
+
independent actions in one batch.
|
|
106
|
+
*33% fewer model requests — a median of 10 per trial against 16.*
|
|
107
|
+
- **Smaller requests.** Tools return only the part that was asked for, and
|
|
108
|
+
95% of terminal output is filtered before it reaches the model.
|
|
109
|
+
*46% less input per request — 24.3k tokens against 44.9k.*
|
|
110
|
+
- **Shorter output.** Less filler and repetition in replies.
|
|
111
|
+
*8% fewer output tokens.*
|
|
112
|
+
|
|
113
|
+
The benchmark ran one model in one session. In everyday use, more applies on
|
|
114
|
+
top of that:
|
|
115
|
+
|
|
116
|
+
- **Auto-clear.** After a long break, the conversation is compacted before
|
|
117
|
+
work resumes.
|
|
118
|
+
- **Light compaction.** Long sessions continue from a structured handoff
|
|
119
|
+
instead of the full history.
|
|
120
|
+
- **Database memory.** Past work is stored and searched, so the prompt does
|
|
121
|
+
not grow with the archive.
|
|
122
|
+
- **Code graph.** Query a project's structure instead of reading whole files.
|
|
123
|
+
- **Orchestration.** Hand routine work to cheaper models and keep the
|
|
124
|
+
expensive one for the steps that need it.
|
|
125
|
+
|
|
126
|
+
See [Context efficiency](docs/context-efficiency.md) for how each layer works.
|
|
127
|
+
|
|
128
|
+
## A model for each job
|
|
129
|
+
|
|
130
|
+
Not every step needs your most expensive model.
|
|
131
|
+
|
|
132
|
+
- **Mix models by role.** Let a strong model lead and plan while cheaper ones
|
|
133
|
+
search, edit, and review.
|
|
134
|
+
- **Dial delegation from Solo to Swarm.** The lead can do the work itself or
|
|
135
|
+
coordinate a team of agents working in parallel.
|
|
136
|
+
- **Workflows you can read.** Workflows and agents are plain Markdown
|
|
137
|
+
(`WORKFLOW.md`, `AGENT.md`) with visual editors in the app.
|
|
138
|
+
- **Every account in one place.** Claude, ChatGPT, and Grok subscriptions, API
|
|
139
|
+
keys, and local models side by side.
|
|
140
|
+
- **Run models on your own GPU.** The built-in Local Provider downloads and
|
|
141
|
+
runs models inside the app.
|
|
142
|
+
- **Know what it costs.** Usage by provider and model — input, output, cache
|
|
143
|
+
hits, and cost — plus quota windows and resets.
|
|
144
|
+
|
|
145
|
+
## Everything in one window
|
|
146
|
+
|
|
147
|
+
- **A full workspace.** Tabs and split panes, Monaco editor, terminals, file
|
|
148
|
+
explorer, and language servers that start when you open a file.
|
|
149
|
+
- **Git and GitHub built in.** Review changes, commit, and handle pull
|
|
150
|
+
requests, issues, Actions, and releases without leaving the app.
|
|
151
|
+
- **Code that stays clean.** The code graph maps a project's structure, and
|
|
152
|
+
Code Tidy formats, lints, and applies structural fixes.
|
|
153
|
+
- **Memory that lasts.** Mixdog remembers what matters across sessions and
|
|
154
|
+
searches past work on demand.
|
|
155
|
+
- **Extend it.** Add skills, MCP servers, and plugins from one Extensions view.
|
|
156
|
+
|
|
157
|
+
## It keeps working when you step away
|
|
158
|
+
|
|
159
|
+
- **Goals.** Set a Goal and the session keeps working toward it — pause and
|
|
160
|
+
resume whenever you like.
|
|
161
|
+
- **Schedules and webhooks.** Run a task on a timer or whenever a URL is
|
|
162
|
+
called.
|
|
163
|
+
- **Your phone is the remote.** Scan a QR code to continue the same live
|
|
164
|
+
session from your phone, end-to-end encrypted, with a notification when the
|
|
165
|
+
task finishes.
|
|
80
166
|
|
|
81
167
|
## Beyond code
|
|
82
168
|
|
|
83
|
-
- **
|
|
84
|
-
|
|
85
|
-
- **
|
|
86
|
-
import on Windows.
|
|
87
|
-
- **Computer Use (Windows)** — operate native apps with guarded input and an
|
|
169
|
+
- **Browser Use.** Operate real, signed-in web pages, with Chrome profile
|
|
170
|
+
import.
|
|
171
|
+
- **Computer Use.** Operate native Windows apps with guarded input and an
|
|
88
172
|
on-screen Stop control.
|
|
89
|
-
- **Documents
|
|
90
|
-
|
|
91
|
-
- **
|
|
92
|
-
terminal, or a paired browser on your computer or phone over end-to-end
|
|
93
|
-
encryption.
|
|
173
|
+
- **Documents.** Create and edit Word, Excel, PowerPoint, and PDF with
|
|
174
|
+
rendered previews.
|
|
175
|
+
- **Image and video Studio.** Generate and edit with a local gallery.
|
|
94
176
|
|
|
95
177
|
Browser Use and Computer Use are opt-in and ask for approval before their
|
|
96
|
-
first live call in each
|
|
178
|
+
first live call in each session.
|
|
179
|
+
|
|
180
|
+
## Get started
|
|
181
|
+
|
|
182
|
+
[Download the installer](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe)
|
|
183
|
+
and sign in. No config files, no YAML, no terminal.
|
|
184
|
+
|
|
185
|
+
- **One sign-in and you are working.** Use the ChatGPT, Claude, or Grok
|
|
186
|
+
subscription you already pay for, or paste an API key. Mixdog picks the
|
|
187
|
+
model for you.
|
|
188
|
+
- **Advanced setups, one switch each.** A team of agents, a model per role,
|
|
189
|
+
long-term memory, phone access — each is a toggle, not a config file.
|
|
190
|
+
- **You won't get lost.** A short tutorial gets you set up in five quick
|
|
191
|
+
steps.
|
|
192
|
+
- **Batteries included.** Git, Memory, Browser, and Office tools ship with the
|
|
193
|
+
app. Turn on what you need.
|
|
97
194
|
|
|
98
|
-
|
|
195
|
+
<details>
|
|
196
|
+
<summary><b>Supported providers</b></summary>
|
|
99
197
|
|
|
100
198
|
- Anthropic API keys and Claude account OAuth
|
|
101
199
|
- OpenAI API keys and ChatGPT/Codex account OAuth
|
|
@@ -108,40 +206,23 @@ first live call in each interactive session.
|
|
|
108
206
|
Cursor and Antigravity (Gemini) OAuth are off by default under
|
|
109
207
|
**Settings → Developer**; using them through OAuth risks account restrictions.
|
|
110
208
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
### Desktop (Windows)
|
|
114
|
-
|
|
115
|
-
[Download the installer](https://github.com/tribgames/mixdog/releases/latest/download/mixdog-desktop-win-x64.exe)
|
|
116
|
-
and follow onboarding.
|
|
209
|
+
</details>
|
|
117
210
|
|
|
118
|
-
|
|
211
|
+
<details>
|
|
212
|
+
<summary><b>Command line</b></summary>
|
|
119
213
|
|
|
120
|
-
Requires Node.js 22.19+ (22.x) or 24+.
|
|
214
|
+
Mixdog also runs in the terminal. Requires Node.js 22.19+ (22.x) or 24+.
|
|
121
215
|
|
|
122
216
|
```bash
|
|
123
217
|
npm install -g mixdog
|
|
124
218
|
mixdog
|
|
125
219
|
```
|
|
126
220
|
|
|
127
|
-
<details>
|
|
128
|
-
<summary><b>CLI options and headless exec</b></summary>
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
mixdog # start in the current project
|
|
132
|
-
mixdog --provider anthropic-oauth --model claude-haiku-4-5-20251001
|
|
133
|
-
mixdog --workflow default
|
|
134
|
-
mixdog --readonly # read-only tools
|
|
135
|
-
mixdog --remote # enable remote mode
|
|
136
|
-
mixdog --onboarding # run onboarding again
|
|
137
|
-
```
|
|
138
|
-
|
|
139
221
|
`mixdog exec` runs one non-interactive, single-model session without personal
|
|
140
222
|
memory, prior sessions, skills, MCP servers, or plugins:
|
|
141
223
|
|
|
142
224
|
```bash
|
|
143
225
|
mixdog exec --provider openai-oauth --model gpt-5.6-sol --effort xhigh "fix the failing test"
|
|
144
|
-
mixdog exec --provider openai-oauth --model gpt-5.6-sol --json "review the current diff"
|
|
145
226
|
```
|
|
146
227
|
|
|
147
228
|
Web search is off by default (`--web-search` enables it). This does not block
|
|
@@ -151,50 +232,22 @@ Run `mixdog --help` for the full reference.
|
|
|
151
232
|
|
|
152
233
|
</details>
|
|
153
234
|
|
|
154
|
-
<details>
|
|
155
|
-
<summary><b>TUI commands</b></summary>
|
|
156
|
-
|
|
157
|
-
```text
|
|
158
|
-
/clear start a fresh chat
|
|
159
|
-
/project switch the current project
|
|
160
|
-
/resume resume a saved chat
|
|
161
|
-
/inherit carry this conversation into a new session on the current model
|
|
162
|
-
/compact compact older conversation context
|
|
163
|
-
/goal start, inspect, pause, or resume a durable session Goal
|
|
164
|
-
/autoclear manage idle-time context compaction
|
|
165
|
-
/context inspect the current context surface
|
|
166
|
-
/usage show provider quota and balance
|
|
167
|
-
/providers configure provider authentication
|
|
168
|
-
/model choose the main provider and model
|
|
169
|
-
/websearch choose the web search route
|
|
170
|
-
/workflow choose the active workflow
|
|
171
|
-
/agents inspect agents and model overrides
|
|
172
|
-
/effort set reasoning effort
|
|
173
|
-
/fast toggle supported model fast mode
|
|
174
|
-
/OutputStyle choose the Lead response style
|
|
175
|
-
/theme change the TUI color theme
|
|
176
|
-
/memory inspect and edit core memory
|
|
177
|
-
/mcp manage MCP servers and tools
|
|
178
|
-
/skills choose a skill for the next request
|
|
179
|
-
/plugins manage local plugin integrations
|
|
180
|
-
/setting open runtime settings
|
|
181
|
-
/profile set your title, development experience, and response language
|
|
182
|
-
/update check for updates
|
|
183
|
-
/doctor diagnose installation health
|
|
184
|
-
/quit quit the TUI
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
</details>
|
|
188
|
-
|
|
189
235
|
## Docs
|
|
190
236
|
|
|
191
237
|
- [Context efficiency](docs/context-efficiency.md)
|
|
238
|
+
- [Benchmarks](benchmarks/terminal-bench-2.1/)
|
|
192
239
|
- [Code Tidy](docs/code-tidy.md)
|
|
193
240
|
- [Git & GitHub](docs/git-github-integration.md)
|
|
194
241
|
- [Language servers](docs/language-servers.md)
|
|
195
242
|
- [Office runtime](src/runtime/office/README.md)
|
|
196
243
|
- [Development, configuration, and testing](docs/development.md)
|
|
197
244
|
|
|
245
|
+
## Feedback
|
|
246
|
+
|
|
247
|
+
Found a bug or missing a feature?
|
|
248
|
+
[Open an issue](https://github.com/tribgames/mixdog/issues). If Mixdog saves
|
|
249
|
+
you tokens, a star helps others find it.
|
|
250
|
+
|
|
198
251
|
## License
|
|
199
252
|
|
|
200
253
|
Mixdog is licensed under [Apache-2.0](LICENSE).
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mixdog",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "Open-source coding agent that matches Codex on Terminal-Bench 2.1 with 63% fewer tokens.",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -14,10 +14,17 @@
|
|
|
14
14
|
},
|
|
15
15
|
"homepage": "https://github.com/tribgames/mixdog#readme",
|
|
16
16
|
"keywords": [
|
|
17
|
+
"ai",
|
|
17
18
|
"agent",
|
|
18
|
-
"cli",
|
|
19
|
-
"tui",
|
|
20
19
|
"coding-agent",
|
|
20
|
+
"llm",
|
|
21
|
+
"claude",
|
|
22
|
+
"codex",
|
|
23
|
+
"openai",
|
|
24
|
+
"token-efficiency",
|
|
25
|
+
"terminal-bench",
|
|
26
|
+
"desktop",
|
|
27
|
+
"cli",
|
|
21
28
|
"mcp"
|
|
22
29
|
],
|
|
23
30
|
"bin": {
|
|
@@ -6,8 +6,8 @@ Read this when choosing a `setup` mutation.
|
|
|
6
6
|
|
|
7
7
|
- `status` reads one domain: summary, model, agents, workflow, websearch,
|
|
8
8
|
output-style, profile, autoclear, compaction, memory, features, local-provider, shell,
|
|
9
|
-
providers, mcp, skills, plugins, update, onboarding, capabilities,
|
|
10
|
-
appearance, projects, connection, schedules, or webhooks.
|
|
9
|
+
providers, mcp, skills, plugins, update, onboarding, capabilities, developer,
|
|
10
|
+
desktop, appearance, projects, connection, schedules, or webhooks.
|
|
11
11
|
- `open` navigates to a supported UI surface. Read `surfaces.md` for targets and
|
|
12
12
|
UI-only settings.
|
|
13
13
|
|
|
@@ -41,7 +41,9 @@ Read this when choosing a `setup` mutation.
|
|
|
41
41
|
| Permanently delete confirmed, unchanged, unused model files | `delete_local_model` |
|
|
42
42
|
| TUI system shell | `set_system_shell` |
|
|
43
43
|
| Automatic updates | `set_auto_update` |
|
|
44
|
-
| Remove stored provider authentication | `forget_provider_auth` |
|
|
44
|
+
| Remove stored provider authentication (one OAuth account at a time) | `forget_provider_auth` |
|
|
45
|
+
| Select, rename, reorder, or auto-switch OAuth accounts | `set_provider_account` |
|
|
46
|
+
| Developer options such as risk-gated OAuth providers | `set_developer_option` |
|
|
45
47
|
| Add an MCP server | `add_mcp_server` |
|
|
46
48
|
| Edit or rename an MCP server | `save_mcp_server` |
|
|
47
49
|
| Remove an MCP server | `remove_mcp_server` |
|
|
@@ -53,6 +55,7 @@ Read this when choosing a `setup` mutation.
|
|
|
53
55
|
| Refresh a plugin checkout | `update_plugin` |
|
|
54
56
|
| Enable or disable a plugin | `set_plugin_enabled` |
|
|
55
57
|
| Remove a plugin | `remove_plugin` |
|
|
58
|
+
| Install or reconfigure the MCP server a plugin ships | `enable_plugin_mcp` |
|
|
56
59
|
| Available hosted models and their options; optionally native-search capable only | `list_models` |
|
|
57
60
|
| Agent orchestration, independent of workflow instructions | `set_orchestration_mode` |
|
|
58
61
|
| Safe MCP edit metadata, excluding raw connection/credential values | `get_mcp_server` |
|
|
@@ -65,7 +68,8 @@ Read this when choosing a `setup` mutation.
|
|
|
65
68
|
| Enable/disable a schedule/webhook | `set_automation_enabled` |
|
|
66
69
|
| Webhook listener enabled state, port, or domain | `set_webhook_config` |
|
|
67
70
|
| Desktop keep-awake, run in background after window close, usage pin, or Computer observe-only state | `set_desktop_settings` |
|
|
68
|
-
| Desktop theme, display language, side panels
|
|
71
|
+
| Desktop theme, display language, or side panels | `set_appearance` |
|
|
72
|
+
| Which activity rail items are pinned, in order (current list in `status desktop`) | `set_activity_rail_pins` |
|
|
69
73
|
| Register a Project and optionally set its display alias | `save_project` |
|
|
70
74
|
| Unregister a Project without deleting its files | `remove_project` |
|
|
71
75
|
| Revoke one linked device by its client id from `status connection`; re-pairing restores access | `revoke_linked_device` |
|
|
@@ -85,6 +89,8 @@ workflow` before changing the corresponding domain.
|
|
|
85
89
|
then supply only changed fields. Workflow/agent ids cannot be renamed through
|
|
86
90
|
a save; change their display name instead. User skills may be renamed with
|
|
87
91
|
`originalName` and `name`. Skill deletion is not exposed; disable it instead.
|
|
92
|
+
Built-in and plugin skills accept only `toolDependencies` edits (`null`
|
|
93
|
+
restores their declared dependencies).
|
|
88
94
|
- Changing orchestration does not rewrite workflow instructions or agents.
|
|
89
95
|
|
|
90
96
|
## Providers and authentication
|
|
@@ -100,14 +106,26 @@ values through chat.
|
|
|
100
106
|
and recovery. Its narrow status domain exposes installed models and progress;
|
|
101
107
|
the detail dialog lists installed models rather than the download catalog.
|
|
102
108
|
- Forgetting authentication is destructive and requires explicit approval.
|
|
109
|
+
It removes one OAuth account; a provider with several accounts requires
|
|
110
|
+
`accountId` from the account list in `status providers`.
|
|
111
|
+
- `set_provider_account` changes the selected account, automatic switching,
|
|
112
|
+
account order (every account id exactly once), or an account label. Sign-in
|
|
113
|
+
for a new account still happens in the Providers UI.
|
|
114
|
+
- `status developer` lists developer options. An option with a `warning` is
|
|
115
|
+
enabled only after the user explicitly accepts that warning, passed as
|
|
116
|
+
`riskAccepted:true`; never assume acceptance.
|
|
103
117
|
- Usage sign-in is completed on the Usage or Providers surface.
|
|
104
118
|
|
|
105
119
|
## Profile, session, and Memory
|
|
106
120
|
|
|
107
121
|
- Output style changes do not rewrite the current answer already in progress.
|
|
122
|
+
- Profile `language` and `experienceLevel` take ids listed by `status profile`;
|
|
123
|
+
unknown ids are rejected, and an empty `experienceLevel` clears it.
|
|
108
124
|
- Auto-clear supports global/provider idle durations, `minContextPercent`,
|
|
109
|
-
`reset`, and `resetProvider`. A
|
|
110
|
-
provider
|
|
125
|
+
`reset`, and `resetProvider`. A provider window overrides the global
|
|
126
|
+
duration; `provider: "default"` sets the fallback for providers without a
|
|
127
|
+
built-in window. A reset and a duration are mutually exclusive; provider
|
|
128
|
+
reset requires a provider.
|
|
111
129
|
- Compaction supports `enabled` and either `mainBufferTokens` or
|
|
112
130
|
`mainBufferPercent`. Changing representation replaces the previous budget.
|
|
113
131
|
- If no supported action exposes a requested Memory interval, report it as
|
|
@@ -154,6 +172,8 @@ the Browser Use / Computer Use installed and enabled markers are read with
|
|
|
154
172
|
- Environment/header maps are partial patches. Omitted keys are preserved;
|
|
155
173
|
`null` explicitly removes one key, including a stored credential.
|
|
156
174
|
- Plugin enablement moves its contributed skills and MCP integrations together.
|
|
175
|
+
- `enable_plugin_mcp` writes the MCP server a plugin ships and reconnects; it
|
|
176
|
+
fails for a plugin without an MCP script.
|
|
157
177
|
|
|
158
178
|
## Desktop, Projects, and automation
|
|
159
179
|
|
|
@@ -25,6 +25,9 @@ or requests a setting with no mutation action.
|
|
|
25
25
|
| `usage` | Provider usage sign-in |
|
|
26
26
|
| `doctor` | Runtime diagnostics |
|
|
27
27
|
| `context` | Context and compaction |
|
|
28
|
+
| `developer` | Developer options (TUI: Developer picker) |
|
|
29
|
+
| `voice` | Voice built-in (TUI: Settings hub) |
|
|
30
|
+
| `connection` | Web-app pairing; Desktop only, the TUI shows guidance |
|
|
28
31
|
|
|
29
32
|
An attached Desktop or TUI may navigate and return `opened:true`.
|
|
30
33
|
|
|
@@ -39,6 +42,7 @@ An attached Desktop or TUI may navigate and return `opened:true`.
|
|
|
39
42
|
- Settings → Connection: web-app pairing and linked devices.
|
|
40
43
|
- Settings → System: update, keep-awake, run in background after the window
|
|
41
44
|
closes, and Doctor.
|
|
45
|
+
- Settings → Developer options: risk-gated OAuth providers.
|
|
42
46
|
- Projects: Project registration, name, Project Memories, and Common Memory.
|
|
43
47
|
- Workflows: workflow packs, Main and Web Search defaults, and agent editing.
|
|
44
48
|
- Extensions → Plugin: Built-in cards and plugins.
|
|
@@ -50,13 +54,14 @@ the user to Desktop.
|
|
|
50
54
|
## Desktop-backed settings
|
|
51
55
|
|
|
52
56
|
Setup can read and change Desktop appearance, keep-awake, run in background,
|
|
53
|
-
usage pin, Computer observe-only, Browser/Computer/voice installation and
|
|
57
|
+
usage pin, activity rail pins, Computer observe-only, Browser/Computer/voice installation and
|
|
54
58
|
toggles, Projects, and linked-device revocation through the attached
|
|
55
59
|
Desktop. A receipt identifies `scope:desktop-host`; appearance is not applied
|
|
56
60
|
to the paired browser. No Desktop claimant means no confirmed change.
|
|
57
61
|
|
|
58
|
-
Computer observe-only
|
|
59
|
-
|
|
62
|
+
Computer observe-only, background Memory cycles (`set_recap_enabled`), and
|
|
63
|
+
Browser/Computer first-use approval have no settings control in either app;
|
|
64
|
+
setup is their only supported route. Usage pin is the pin toggle on the activity rail usage card.
|
|
60
65
|
|
|
61
66
|
Schedules/webhooks and workflow/agent/skill definitions use their runtime
|
|
62
67
|
actions directly. These do not require clicking their Desktop rails.
|
|
@@ -20,6 +20,7 @@ import { featureEnvOverride, memoryToolsEnabled, moduleEnabled } from './config-
|
|
|
20
20
|
import { readBridgeDiscovery } from '../../../bridge-discovery.mjs';
|
|
21
21
|
import { HEADLESS_MODEL_TOOL_NAMES, HEADLESS_TOOL_PROFILE, normalizeToolProfile } from './tool-profile.mjs';
|
|
22
22
|
import { DEFERRED_DEFAULT_LEAD_TOOLS } from './tool-catalog-data.mjs';
|
|
23
|
+
import { gitExecutablePresent } from '../../../shared/path-executable.mjs';
|
|
23
24
|
|
|
24
25
|
// Browser Use / Computer Use have no install marker: the desktop app publishes
|
|
25
26
|
// a loopback bridge discovery file while the feature is on. The same file
|
|
@@ -51,8 +52,13 @@ export function builtinFeatureActive(configLike, id) {
|
|
|
51
52
|
(builtinInstalled(configLike, 'memory') && memoryToolsEnabled(configLike, true))
|
|
52
53
|
);
|
|
53
54
|
}
|
|
55
|
+
// The Git extension (GitHub tools, git-requiring skills) is install-gated;
|
|
56
|
+
// the local `git` command tool is not — see localGitToolsActive.
|
|
54
57
|
if (id === 'git') {
|
|
55
|
-
return
|
|
58
|
+
return (
|
|
59
|
+
featureEnvOverride('MIXDOG_FEATURE_GIT') ??
|
|
60
|
+
(builtinInstalled(configLike, 'git') && moduleEnabled(configLike, 'git', true))
|
|
61
|
+
);
|
|
56
62
|
}
|
|
57
63
|
if (id === 'office') {
|
|
58
64
|
return (
|
|
@@ -99,14 +105,14 @@ export function builtinFeatureActive(configLike, id) {
|
|
|
99
105
|
* overrides), which the caller passes in. */
|
|
100
106
|
export function featureDisallowedToolsFor(
|
|
101
107
|
configLike,
|
|
102
|
-
{ browserAvailable = false, computerAvailable = false, toolProfile = 'interactive' } = {}
|
|
108
|
+
{ browserAvailable = false, computerAvailable = false, toolProfile = 'interactive', gitAvailable } = {}
|
|
103
109
|
) {
|
|
104
110
|
const browser = featureEnvOverride('MIXDOG_FEATURE_BROWSER') ?? browserAvailable === true;
|
|
105
111
|
const computer = featureEnvOverride('MIXDOG_FEATURE_COMPUTER') ?? computerAvailable === true;
|
|
106
112
|
const denied = [
|
|
107
113
|
...(builtinFeatureActive(configLike, 'webSearch') ? [] : ['web_search', 'web_fetch']),
|
|
108
114
|
...(builtinFeatureActive(configLike, 'memory') ? [] : ['memory', 'recall']),
|
|
109
|
-
...(localGitToolsActive(configLike,
|
|
115
|
+
...(localGitToolsActive(configLike, { gitAvailable }) ? [] : ['git']),
|
|
110
116
|
...(builtinFeatureActive(configLike, 'git') ? [] : ['github']),
|
|
111
117
|
...(browser ? [] : ['browser', 'browser_devtools']),
|
|
112
118
|
...(computer ? [] : ['computer']),
|
|
@@ -130,12 +136,15 @@ export function builtinInstalled(configLike, id) {
|
|
|
130
136
|
return configLike?.builtins?.[id]?.installed === true;
|
|
131
137
|
}
|
|
132
138
|
|
|
133
|
-
// The Git command tool
|
|
134
|
-
//
|
|
135
|
-
|
|
139
|
+
// The Git command tool ships with the runtime and activates by itself wherever
|
|
140
|
+
// a git executable is on PATH — no extension install, on any tool profile, so
|
|
141
|
+
// interactive and headless sessions share one surface. Without the executable
|
|
142
|
+
// the schema would only cost tokens. Feature overrides and explicit OFF
|
|
143
|
+
// preferences still apply.
|
|
144
|
+
export function localGitToolsActive(configLike, { gitAvailable } = {}) {
|
|
136
145
|
return (
|
|
137
146
|
featureEnvOverride('MIXDOG_FEATURE_GIT') ??
|
|
138
|
-
(moduleEnabled(configLike, 'git', true) && (
|
|
147
|
+
(moduleEnabled(configLike, 'git', true) && (gitAvailable ?? gitExecutablePresent()))
|
|
139
148
|
);
|
|
140
149
|
}
|
|
141
150
|
|
|
@@ -227,10 +227,14 @@ export function resolveAgentTerminalReapMs(config, provider) {
|
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
// Resolve the effective auto-clear idle window for a config + provider:
|
|
230
|
-
//
|
|
231
|
-
//
|
|
230
|
+
// a provider-specific override (autoClear.providerIdleMs[provider]) wins;
|
|
231
|
+
// else the global user-set idleMs (autoClear.idleMs); else the provider's
|
|
232
|
+
// built-in window, then providerIdleMs.default / the built-in 1h default.
|
|
232
233
|
export function resolveAutoClearIdleMs(config, provider) {
|
|
233
234
|
const raw = config?.autoClear && typeof config.autoClear === 'object' ? config.autoClear : {};
|
|
235
|
+
const key = clean(provider).toLowerCase();
|
|
236
|
+
const providerOverride = key && key !== 'default' ? normalizeAutoClearProviderIdleMs(raw.providerIdleMs)[key] : null;
|
|
237
|
+
if (providerOverride) return providerOverride;
|
|
234
238
|
const idleMs = Number(raw.idleMs);
|
|
235
239
|
if (Number.isFinite(idleMs) && idleMs > 0) return Math.max(60_000, Math.round(idleMs));
|
|
236
240
|
return autoClearIdleMsForProvider(provider, raw.providerIdleMs);
|
|
@@ -70,9 +70,6 @@ export function sessionOriginFields(opts, { profile, presetObj, providerCacheOpt
|
|
|
70
70
|
// scheduler/daily-standup, webhook/github-push, lead/worker.
|
|
71
71
|
sourceType: opts.sourceType || null,
|
|
72
72
|
sourceName: opts.sourceName || null,
|
|
73
|
-
// Automation delivery mode ('app' | 'channel' | 'both'): the desktop
|
|
74
|
-
// sidebar hides channel-only runner sessions from Automations.
|
|
75
|
-
sourceDelivery: opts.sourceDelivery || null,
|
|
76
73
|
// Provider-scoped unified cache key — one shard per provider,
|
|
77
74
|
// shared across all roles / sources (agent/maintenance/mcp/
|
|
78
75
|
// scheduler/webhook). Role or source-specific context must be
|
|
@@ -175,7 +175,6 @@ export function _sessionSummary(session) {
|
|
|
175
175
|
agent: session.agent || null,
|
|
176
176
|
sourceType: session.sourceType || null,
|
|
177
177
|
sourceName: session.sourceName || null,
|
|
178
|
-
sourceDelivery: session.sourceDelivery || null,
|
|
179
178
|
scopeKey: session.scopeKey || null,
|
|
180
179
|
parentSessionId: session.parentSessionId || null,
|
|
181
180
|
ownerSessionId: session.ownerSessionId || session.parentSessionId || null,
|
|
@@ -225,7 +224,6 @@ function _normalizeSummaryRow(row) {
|
|
|
225
224
|
agent: row.agent || null,
|
|
226
225
|
sourceType: row.sourceType || null,
|
|
227
226
|
sourceName: row.sourceName || null,
|
|
228
|
-
sourceDelivery: row.sourceDelivery || null,
|
|
229
227
|
scopeKey: row.scopeKey || null,
|
|
230
228
|
parentSessionId: row.parentSessionId || null,
|
|
231
229
|
ownerSessionId: row.ownerSessionId || row.parentSessionId || null,
|