mixdog 0.7.8 → 0.7.11
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/CHANGELOG.md +40 -0
- package/README.md +13 -10
- package/package.json +1 -1
- package/scripts/openai-oauth-catalog-smoke.mjs +53 -0
- package/setup/config-merge.mjs +0 -1
- package/setup/install.mjs +574 -384
- package/setup/mixdog-cli.mjs +30 -3
- package/setup/setup-server.mjs +11 -31
- package/setup/setup.html +3 -3
- package/setup/tui.mjs +35 -316
- package/src/agent/orchestrator/config.mjs +0 -1
- package/src/agent/orchestrator/providers/anthropic-oauth.mjs +2 -5
- package/src/agent/orchestrator/providers/anthropic.mjs +243 -86
- package/src/agent/orchestrator/providers/gemini.mjs +386 -31
- package/src/agent/orchestrator/providers/grok-oauth.mjs +2 -5
- package/src/agent/orchestrator/providers/model-catalog.mjs +146 -13
- package/src/agent/orchestrator/providers/openai-compat-stream.mjs +366 -0
- package/src/agent/orchestrator/providers/openai-compat.mjs +74 -30
- package/src/agent/orchestrator/providers/openai-oauth-ws.mjs +2 -1
- package/src/agent/orchestrator/providers/openai-oauth.mjs +59 -13
- package/src/agent/orchestrator/session/manager.mjs +18 -4
- package/src/agent/orchestrator/stall-policy.mjs +6 -0
- package/src/shared/config.mjs +1 -1
- package/src/shared/llm/cost.mjs +2 -2
- package/src/shared/open-url.mjs +37 -0
- package/src/shared/seed.mjs +20 -3
- package/src/shared/user-data-guard.mjs +3 -1
- package/setup/wizard.mjs +0 -696
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes are tracked per release, starting at 0.7.1.
|
|
4
4
|
|
|
5
|
+
## 0.7.10 — 2026-06-18
|
|
6
|
+
|
|
7
|
+
- Replace the interactive setup wizard with a non-interactive install. `npx
|
|
8
|
+
mixdog` now relies on the seeded default config (presets, role→preset
|
|
9
|
+
mapping, search) instead of asking. It detects Claude (anthropic-oauth) and
|
|
10
|
+
Codex (openai-oauth) logins and offers an inline browser login for each when
|
|
11
|
+
missing; Grok Build (grok-oauth) is detect-only — its xAI flow shows a paste
|
|
12
|
+
code, so the official `grok` CLI owns login and mixdog reads
|
|
13
|
+
~/.grok/auth.json. Per-feature setup (Discord, voice, webhooks, address,
|
|
14
|
+
provider API keys) now lives in the `/setup` UI.
|
|
15
|
+
- The final GitHub-star step stars the repo directly when a local GitHub
|
|
16
|
+
credential is available (`GH_TOKEN`/`GITHUB_TOKEN`, else the authenticated
|
|
17
|
+
`gh` CLI), and falls back to opening the repo in the browser otherwise.
|
|
18
|
+
- Trim `setup/tui.mjs` to the widgets the installer actually uses (confirm,
|
|
19
|
+
spinner, outro), dropping the wizard-only prompts and arrow-key back
|
|
20
|
+
navigation.
|
|
21
|
+
- Fix browser auto-open on Windows during OAuth login: the old `start "<url>"`
|
|
22
|
+
form made cmd treat the URL as a window title, so nothing opened. A shared
|
|
23
|
+
opener (`src/shared/open-url.mjs`) now uses `rundll32
|
|
24
|
+
url.dll,FileProtocolHandler`, which is shell-free and safe for `&`-laden URLs.
|
|
25
|
+
- Fix a first-install seeding race that could leave `user-workflow.json`
|
|
26
|
+
(role→preset mapping) unseeded depending on boot order, degrading bridge
|
|
27
|
+
roles. All default files are now seeded together by `ensureDataSeeds`.
|
|
28
|
+
|
|
29
|
+
## 0.7.9 — 2026-06-18
|
|
30
|
+
|
|
31
|
+
- Polish the setup wizard UI: clack-style menus, checkboxes, a connected
|
|
32
|
+
left rail, intro/outro, and progress/spinners. Internal backup/seed info
|
|
33
|
+
logs are kept off-screen during install so the wizard stays clean.
|
|
34
|
+
- Add clickable (OSC 8) links next to each credential prompt pointing to
|
|
35
|
+
where to get it (Discord developer portal, ngrok dashboard, and each
|
|
36
|
+
provider/search API-key page).
|
|
37
|
+
- Discord step now asks "Connect Discord now?" (yes/no) before requesting a
|
|
38
|
+
token. The address step asks a single plain question and stores only how
|
|
39
|
+
you want to be addressed (no separate display name).
|
|
40
|
+
- Friendlier, English-only prompts that no longer expose internal config
|
|
41
|
+
keys.
|
|
42
|
+
- The wizard ends on a Step 9/9 "all set" screen with an optional
|
|
43
|
+
one-keystroke GitHub star.
|
|
44
|
+
|
|
5
45
|
## 0.7.8 — 2026-06-18
|
|
6
46
|
|
|
7
47
|
- Add `mixdog install --demo`: runs the real setup-wizard UI (menus,
|
package/README.md
CHANGED
|
@@ -51,18 +51,21 @@ as JSON you can diff.
|
|
|
51
51
|
**From npm (terminal):**
|
|
52
52
|
|
|
53
53
|
```bash
|
|
54
|
-
|
|
55
|
-
mixdog
|
|
56
|
-
mixdog
|
|
57
|
-
npm i -g mixdog # then launch Claude Code with mixdog pre-loaded:
|
|
58
|
-
mixdog # no args → same setup wizard as `npx mixdog`
|
|
59
|
-
mixdog --version # other args (e.g. `setup`) → claude --dangerously-load-development-channels plugin:mixdog@trib-plugin …
|
|
60
|
-
mixdog --dangerously-skip-permissions # extra Claude flags pass through
|
|
54
|
+
npm i -g mixdog # install the `mixdog` command
|
|
55
|
+
mixdog # launch Claude Code — the first run walks you through setup (Claude·Codex·Grok login + plugin registration), then opens it
|
|
56
|
+
mixdog --dangerously-skip-permissions # launch with full permissions
|
|
61
57
|
```
|
|
62
58
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
`npm i -g mixdog` adds the `mixdog` command to your PATH; `mixdog` then launches
|
|
60
|
+
Claude Code with mixdog pre-loaded. The first `mixdog` run walks you through
|
|
61
|
+
setup (logins + plugin registration) and launches the moment it finishes — no
|
|
62
|
+
second run needed. Any extra Claude flags (e.g. `--dangerously-skip-permissions`)
|
|
63
|
+
pass straight through; the `claude` CLI must be on your PATH. (If `mixdog` isn't
|
|
64
|
+
recognized right after install, open a new terminal and run it again.)
|
|
65
|
+
|
|
66
|
+
Other entry points: `npx mixdog` (one-off, no global install — leaves no
|
|
67
|
+
persistent `mixdog` command); `mixdog install` / `--dry-run` / `--demo` (run
|
|
68
|
+
setup only, or preview the steps without writing).
|
|
66
69
|
|
|
67
70
|
**Inside Claude Code (slash commands):**
|
|
68
71
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mixdog",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.11",
|
|
4
4
|
"description": "Claude Code all-in-one bridge plugin: role-based bridge workers, continuous memory, and syntax-aware code editing.",
|
|
5
5
|
"author": "mixdog contributors <dev@tribgames.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { mkdtempSync, rmSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
|
|
6
|
+
const tmpData = mkdtempSync(join(tmpdir(), 'mixdog-openai-oauth-catalog-'));
|
|
7
|
+
process.env.CLAUDE_PLUGIN_DATA = tmpData;
|
|
8
|
+
|
|
9
|
+
globalThis.fetch = async (url) => {
|
|
10
|
+
const text = String(url);
|
|
11
|
+
if (text.includes('model_prices_and_context_window')) {
|
|
12
|
+
return {
|
|
13
|
+
ok: true,
|
|
14
|
+
json: async () => ({
|
|
15
|
+
'openai/gpt-5.5': {
|
|
16
|
+
litellm_provider: 'openai',
|
|
17
|
+
max_input_tokens: 1050000,
|
|
18
|
+
max_output_tokens: 128000,
|
|
19
|
+
input_cost_per_token: 1e-6,
|
|
20
|
+
output_cost_per_token: 2e-6,
|
|
21
|
+
supports_prompt_caching: true,
|
|
22
|
+
},
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
if (text.includes('models.dev')) {
|
|
27
|
+
return { ok: true, json: async () => ({}) };
|
|
28
|
+
}
|
|
29
|
+
throw new Error(`unexpected fetch: ${text}`);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const { enrichModels } = await import('../src/agent/orchestrator/providers/model-catalog.mjs');
|
|
34
|
+
const [model] = await enrichModels([{
|
|
35
|
+
id: 'gpt-5.5',
|
|
36
|
+
provider: 'openai-oauth',
|
|
37
|
+
contextWindow: 272000,
|
|
38
|
+
outputTokens: 32768,
|
|
39
|
+
serviceTiers: [{ id: 'priority', name: 'Fast', description: '1.5x speed' }],
|
|
40
|
+
additionalSpeedTiers: ['fast'],
|
|
41
|
+
}]);
|
|
42
|
+
|
|
43
|
+
assert.equal(model.contextWindow, 272000);
|
|
44
|
+
assert.equal(model.outputTokens, 32768);
|
|
45
|
+
assert.deepEqual(model.serviceTiers, [{ id: 'priority', name: 'Fast', description: '1.5x speed' }]);
|
|
46
|
+
assert.deepEqual(model.additionalSpeedTiers, ['fast']);
|
|
47
|
+
assert.equal(model.inputCostPerM, 1);
|
|
48
|
+
assert.equal(model.outputCostPerM, 2);
|
|
49
|
+
|
|
50
|
+
console.log('openai-oauth catalog smoke: ok');
|
|
51
|
+
} finally {
|
|
52
|
+
rmSync(tmpData, { recursive: true, force: true });
|
|
53
|
+
}
|