mixdog 0.7.7 → 0.7.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/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Notable changes are tracked per release, starting at 0.7.1.
|
|
4
4
|
|
|
5
|
+
## 0.7.8 — 2026-06-18
|
|
6
|
+
|
|
7
|
+
- Add `mixdog install --demo`: runs the real setup-wizard UI (menus,
|
|
8
|
+
checkboxes, progress) in an isolated temp sandbox that is auto-cleaned, so
|
|
9
|
+
you can try the install experience without writing anything to your real
|
|
10
|
+
config.
|
|
11
|
+
- Honor `CLAUDE_CONFIG_DIR` in the first-install seed helpers
|
|
12
|
+
(`disable-claude-builtins`, user-data backups) instead of hardcoding
|
|
13
|
+
`~/.claude` — fixes a latent path bug for anyone using `CLAUDE_CONFIG_DIR`
|
|
14
|
+
and makes the demo sandbox fully isolated.
|
|
15
|
+
|
|
5
16
|
## 0.7.7 — 2026-06-18
|
|
6
17
|
|
|
7
18
|
- Add in-app OAuth sign-in for the Codex (`openai-oauth`) and Claude
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mixdog",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.8",
|
|
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",
|
package/setup/install.mjs
CHANGED
|
@@ -19,9 +19,11 @@ import {
|
|
|
19
19
|
existsSync,
|
|
20
20
|
mkdirSync,
|
|
21
21
|
copyFileSync,
|
|
22
|
+
mkdtempSync,
|
|
23
|
+
rmSync,
|
|
22
24
|
} from 'node:fs';
|
|
23
25
|
import { join, dirname } from 'node:path';
|
|
24
|
-
import { homedir } from 'node:os';
|
|
26
|
+
import { homedir, tmpdir } from 'node:os';
|
|
25
27
|
import { realpathSync } from 'node:fs';
|
|
26
28
|
import { fileURLToPath } from 'node:url';
|
|
27
29
|
import { createInterface } from 'node:readline';
|
|
@@ -213,7 +215,51 @@ function logDryRunWizard() {
|
|
|
213
215
|
}
|
|
214
216
|
}
|
|
215
217
|
|
|
218
|
+
async function runInstallDemo() {
|
|
219
|
+
const tmpRoot = mkdtempSync(join(tmpdir(), 'mixdog-demo-'));
|
|
220
|
+
const configDir = join(tmpRoot, 'config');
|
|
221
|
+
const dataDir = join(tmpRoot, 'data');
|
|
222
|
+
process.env.CLAUDE_CONFIG_DIR = configDir;
|
|
223
|
+
process.env.CLAUDE_PLUGIN_DATA = dataDir;
|
|
224
|
+
mkdirSync(configDir, { recursive: true });
|
|
225
|
+
mkdirSync(dataDir, { recursive: true });
|
|
226
|
+
|
|
227
|
+
process.on('exit', () => {
|
|
228
|
+
try {
|
|
229
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
230
|
+
} catch {}
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
console.log('\n🎬 mixdog demo — real wizard UI, nothing saved (isolated temp, auto-cleaned).\n');
|
|
234
|
+
|
|
235
|
+
const claudePath = resolveClaudeExecutable();
|
|
236
|
+
if (claudePath) {
|
|
237
|
+
console.log(`[demo] Claude Code detected at ${claudePath}`);
|
|
238
|
+
} else {
|
|
239
|
+
console.log('[demo] Claude Code not detected');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
console.log('[demo] skipping plugin registration');
|
|
243
|
+
|
|
244
|
+
const { runSetupWizard } = await import('./wizard.mjs');
|
|
245
|
+
await runSetupWizard();
|
|
246
|
+
|
|
247
|
+
console.log('[demo] skipping runtime dependency install');
|
|
248
|
+
|
|
249
|
+
console.log('\n✓ Demo complete — nothing was saved to your real config.');
|
|
250
|
+
try {
|
|
251
|
+
rmSync(tmpRoot, { recursive: true, force: true });
|
|
252
|
+
} catch {}
|
|
253
|
+
}
|
|
254
|
+
|
|
216
255
|
export async function runInstall() {
|
|
256
|
+
const demo =
|
|
257
|
+
process.argv.includes('--demo') || process.env.MIXDOG_SETUP_DEMO === '1';
|
|
258
|
+
if (demo) {
|
|
259
|
+
await runInstallDemo();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
|
|
217
263
|
const dryRun =
|
|
218
264
|
process.argv.includes('--dry-run') || process.env.MIXDOG_SETUP_DRY_RUN === '1';
|
|
219
265
|
|
|
@@ -11,12 +11,15 @@ import { getBackupRoot } from './user-data-guard.mjs';
|
|
|
11
11
|
// behaviour can be restored. The createOnly gate in seed.mjs guarantees this
|
|
12
12
|
// runs exactly once, so we never reapply on later boots.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
function claudeConfigBaseDir() {
|
|
15
|
+
return process.env.CLAUDE_CONFIG_DIR || join(homedir(), '.claude');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Settings path is a parameter (defaulting to <CLAUDE_CONFIG_DIR or ~/.claude>/settings.json)
|
|
19
|
+
// so it can be redirected via MIXDOG_CLAUDE_SETTINGS_PATH for testing without a real homedir.
|
|
17
20
|
export function resolveClaudeSettingsPath() {
|
|
18
21
|
return process.env.MIXDOG_CLAUDE_SETTINGS_PATH
|
|
19
|
-
|| join(
|
|
22
|
+
|| join(claudeConfigBaseDir(), 'settings.json');
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
function readJsonOrNull(filePath) {
|
|
@@ -12,9 +12,13 @@ import { dirname, join, resolve } from 'path';
|
|
|
12
12
|
import { homedir } from 'os';
|
|
13
13
|
import { createHash } from 'crypto';
|
|
14
14
|
|
|
15
|
+
function claudeConfigBaseDir() {
|
|
16
|
+
return process.env.CLAUDE_CONFIG_DIR || join(homedir(), '.claude');
|
|
17
|
+
}
|
|
18
|
+
|
|
15
19
|
export function getBackupRoot() {
|
|
16
20
|
return process.env.MIXDOG_USER_DATA_BACKUP_ROOT
|
|
17
|
-
|| join(
|
|
21
|
+
|| join(claudeConfigBaseDir(), 'backups', 'mixdog-user-data');
|
|
18
22
|
}
|
|
19
23
|
const RECOVERY_NOTICE = 'RECOVERY-REQUIRED.txt';
|
|
20
24
|
|