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 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
- npx mixdog # register plugin + run the setup wizard
55
- mixdog install # same install + wizard (explicit subcommand)
56
- mixdog install --dry-run # preview install steps (no writes, prompts, or installs)
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
- With no arguments, or with `install` (optional `--dry-run`), `mixdog` runs the
64
- install flow. Any other arguments start Claude Code with mixdog pre-loaded; the
65
- `claude` CLI must be on your PATH.
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.8",
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
+ }
@@ -25,7 +25,6 @@ const AGENT_PROVIDER_ENV = Object.freeze({
25
25
  gemini: 'GEMINI_API_KEY',
26
26
  deepseek: 'DEEPSEEK_API_KEY',
27
27
  xai: 'XAI_API_KEY',
28
- nvidia: 'NVIDIA_API_KEY',
29
28
  });
30
29
 
31
30
  function envSecretPresent(account) {