dual-brain 0.3.16 → 0.3.17
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/bin/dual-brain.mjs +156 -23
- package/dist/src/auto-handoff.js +9 -4
- package/dist/src/auto-handoff.js.map +1 -1
- package/hooks/control-panel.mjs +71 -1
- package/package.json +1 -1
package/bin/dual-brain.mjs
CHANGED
|
@@ -38,6 +38,34 @@ function _claudeNewArgs(cwd) {
|
|
|
38
38
|
return args;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
function _codexResumeArgs(sessionId) {
|
|
42
|
+
return ['resume', sessionId];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function _sessionTool(session) {
|
|
46
|
+
return session?.tool === 'codex' ? 'codex' : 'claude';
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function _sessionLaunchArgs(session, cwd) {
|
|
50
|
+
return _sessionTool(session) === 'codex'
|
|
51
|
+
? _codexResumeArgs(session.id)
|
|
52
|
+
: _claudeResumeArgs(session.id, cwd);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function _sessionBrief(session, targetProvider = 'codex') {
|
|
56
|
+
const name = session?.smartName || session?.name || session?.prompts?.first || session?.firstPrompt || session?.id || 'previous session';
|
|
57
|
+
const tool = _sessionTool(session);
|
|
58
|
+
const parts = [
|
|
59
|
+
`Continue the ${tool} session "${String(name).replace(/\s+/g, ' ').slice(0, 120)}" in ${targetProvider}.`,
|
|
60
|
+
];
|
|
61
|
+
if (session?.id) parts.push(`Original session id: ${session.id}.`);
|
|
62
|
+
if (session?.project) parts.push(`Project: ${session.project}.`);
|
|
63
|
+
if (session?.lastActive) parts.push(`Last active: ${session.lastActive}.`);
|
|
64
|
+
if (session?.prompts?.last) parts.push(`Last prompt: ${String(session.prompts.last).replace(/\s+/g, ' ').slice(0, 500)}`);
|
|
65
|
+
else if (session?.prompts?.first) parts.push(`First prompt: ${String(session.prompts.first).replace(/\s+/g, ' ').slice(0, 500)}`);
|
|
66
|
+
return parts.join(' ');
|
|
67
|
+
}
|
|
68
|
+
|
|
41
69
|
// ─── Agent/skill registry cache (populated at startup) ───────────────────────
|
|
42
70
|
// These are set by _primeRegistryCache() so classifyInput can use them
|
|
43
71
|
// synchronously without async overhead on each keystroke.
|
|
@@ -1241,6 +1269,27 @@ async function cmdSwitch(args = []) {
|
|
|
1241
1269
|
await cmdHandoff(handoffArgs);
|
|
1242
1270
|
}
|
|
1243
1271
|
|
|
1272
|
+
async function cmdUpdate() {
|
|
1273
|
+
const cwd = process.cwd();
|
|
1274
|
+
console.log(' Updating Dual Brain...');
|
|
1275
|
+
const install = _spawnSyncTop('npm', ['install', '-g', 'dual-brain@latest'], {
|
|
1276
|
+
stdio: 'inherit',
|
|
1277
|
+
cwd,
|
|
1278
|
+
});
|
|
1279
|
+
if (install.status !== 0) {
|
|
1280
|
+
process.exitCode = install.status || 1;
|
|
1281
|
+
return;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
const refresh = _spawnSyncTop('dual-brain', ['install'], {
|
|
1285
|
+
stdio: 'inherit',
|
|
1286
|
+
cwd,
|
|
1287
|
+
});
|
|
1288
|
+
if (refresh.status !== 0) {
|
|
1289
|
+
process.exitCode = refresh.status || 1;
|
|
1290
|
+
}
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1244
1293
|
function cmdHot(providerArg) {
|
|
1245
1294
|
if (!providerArg) err('Usage: dual-brain hot <provider> (claude | openai)');
|
|
1246
1295
|
const provider = providerArg.toLowerCase();
|
|
@@ -1854,6 +1903,17 @@ async function welcomeScreen(rl, ask) {
|
|
|
1854
1903
|
if (existingSessions.length > 5) {
|
|
1855
1904
|
console.log(` ... and ${existingSessions.length - 5} more`);
|
|
1856
1905
|
}
|
|
1906
|
+
const meta = getSessionMeta(cwd);
|
|
1907
|
+
const now = new Date().toISOString();
|
|
1908
|
+
for (const sess of existingSessions) {
|
|
1909
|
+
meta[sess.id] = {
|
|
1910
|
+
...meta[sess.id],
|
|
1911
|
+
source: 'data-tools',
|
|
1912
|
+
importedAt: meta[sess.id]?.importedAt || now,
|
|
1913
|
+
createdAt: meta[sess.id]?.createdAt || now,
|
|
1914
|
+
};
|
|
1915
|
+
}
|
|
1916
|
+
saveSessionMeta(meta, cwd);
|
|
1857
1917
|
console.log('\n Sessions imported! They\'ll appear in your Recent list.\n');
|
|
1858
1918
|
await ask(' Press Enter to continue...');
|
|
1859
1919
|
// Fall through to auto-save
|
|
@@ -3158,7 +3218,9 @@ async function mainScreen(rl, ask) {
|
|
|
3158
3218
|
const shortcuts = [
|
|
3159
3219
|
[`Enter`, isReturning ? 'resume last session' : 'start working (or type a task)'],
|
|
3160
3220
|
[`n`, 'new session'],
|
|
3221
|
+
[`g`, isReturning ? 'continue in other provider' : 'switch provider'],
|
|
3161
3222
|
[`/`, 'search sessions'],
|
|
3223
|
+
[`i`, 'import sessions'],
|
|
3162
3224
|
[`s`, 'settings & profiles'],
|
|
3163
3225
|
[`d`, 'doctor — diagnose issues'],
|
|
3164
3226
|
[`a`, profile.automode ? 'auto mode (on)' : 'auto mode (off)'],
|
|
@@ -3262,7 +3324,7 @@ async function mainScreen(rl, ask) {
|
|
|
3262
3324
|
// Single-key commands only fire when buffer is empty
|
|
3263
3325
|
if (taskBuffer.length === 0) {
|
|
3264
3326
|
const lower = str.toLowerCase();
|
|
3265
|
-
const singleKeySet = new Set(['n', 's', 't', 'q', '/', 'i', '?', 'h', 'd']);
|
|
3327
|
+
const singleKeySet = new Set(['n', 'g', 's', 't', 'q', '/', 'i', '?', 'h', 'd', 'a']);
|
|
3266
3328
|
if (singleKeySet.has(lower)) {
|
|
3267
3329
|
cleanup();
|
|
3268
3330
|
process.stdout.write('\n');
|
|
@@ -3367,8 +3429,9 @@ async function mainScreen(rl, ask) {
|
|
|
3367
3429
|
const sess = results[num - 1];
|
|
3368
3430
|
const { spawnSync: sp2 } = await import('node:child_process');
|
|
3369
3431
|
const tool = sess.tool === 'codex' ? 'codex' : 'claude';
|
|
3370
|
-
|
|
3371
|
-
|
|
3432
|
+
const launchArgs = tool === 'codex' ? _codexResumeArgs(sess.id) : _claudeResumeArgs(sess.id, cwd);
|
|
3433
|
+
process.stdout.write(`\n Launching: ${tool} ${launchArgs.join(' ')}\n\n`);
|
|
3434
|
+
sp2(tool, launchArgs, { stdio: 'inherit' });
|
|
3372
3435
|
}
|
|
3373
3436
|
return { next: 'main' };
|
|
3374
3437
|
}
|
|
@@ -3510,8 +3573,10 @@ async function mainScreen(rl, ask) {
|
|
|
3510
3573
|
}
|
|
3511
3574
|
const sess = recentSessions[0];
|
|
3512
3575
|
const { spawnSync } = await import('node:child_process');
|
|
3513
|
-
|
|
3514
|
-
|
|
3576
|
+
const tool = _sessionTool(sess);
|
|
3577
|
+
const launchArgs = _sessionLaunchArgs(sess, cwd);
|
|
3578
|
+
process.stdout.write(`\n Launching: ${tool} ${launchArgs.join(' ')}\n\n`);
|
|
3579
|
+
spawnSync(tool, launchArgs, { stdio: 'inherit' });
|
|
3515
3580
|
saveTerminalState(cwd, getTerminalId(), sess.id, sess.tool || 'claude');
|
|
3516
3581
|
return { next: 'main' };
|
|
3517
3582
|
}
|
|
@@ -3529,13 +3594,19 @@ async function mainScreen(rl, ask) {
|
|
|
3529
3594
|
}
|
|
3530
3595
|
} catch {}
|
|
3531
3596
|
const { spawnSync } = await import('node:child_process');
|
|
3532
|
-
|
|
3533
|
-
|
|
3597
|
+
const tool = _sessionTool(sess);
|
|
3598
|
+
const launchArgs = _sessionLaunchArgs(sess, cwd);
|
|
3599
|
+
process.stdout.write(`\n Launching: ${tool} ${launchArgs.join(' ')}\n\n`);
|
|
3600
|
+
spawnSync(tool, launchArgs, { stdio: 'inherit' });
|
|
3534
3601
|
saveTerminalState(cwd, getTerminalId(), sess.id, sess.tool || 'claude');
|
|
3535
3602
|
return { next: 'main' };
|
|
3536
3603
|
}
|
|
3537
3604
|
|
|
3538
3605
|
if (choice === 'n') { return { next: 'new-session' }; }
|
|
3606
|
+
if (choice === 'g') {
|
|
3607
|
+
if (recentSessions.length === 0) return { next: 'new-session' };
|
|
3608
|
+
return { next: 'switch-provider', session: recentSessions[0] };
|
|
3609
|
+
}
|
|
3539
3610
|
if (choice === '?' || choice === 'h') { return { next: 'palette-help' }; }
|
|
3540
3611
|
if (choice === 'd') { return { next: 'diagnostics' }; }
|
|
3541
3612
|
|
|
@@ -3569,8 +3640,9 @@ async function mainScreen(rl, ask) {
|
|
|
3569
3640
|
const sess = results[num - 1];
|
|
3570
3641
|
const { spawnSync } = await import('node:child_process');
|
|
3571
3642
|
const tool = sess.tool === 'codex' ? 'codex' : 'claude';
|
|
3572
|
-
|
|
3573
|
-
|
|
3643
|
+
const launchArgs = tool === 'codex' ? _codexResumeArgs(sess.id) : _claudeResumeArgs(sess.id, cwd);
|
|
3644
|
+
process.stdout.write(`\n Launching: ${tool} ${launchArgs.join(' ')}\n\n`);
|
|
3645
|
+
spawnSync(tool, launchArgs, { stdio: 'inherit' });
|
|
3574
3646
|
}
|
|
3575
3647
|
return { next: 'main' };
|
|
3576
3648
|
}
|
|
@@ -3578,6 +3650,14 @@ async function mainScreen(rl, ask) {
|
|
|
3578
3650
|
if (choice === 's') { return { next: 'settings' }; }
|
|
3579
3651
|
if (choice === 't') { return { next: 'team' }; }
|
|
3580
3652
|
if (choice === 'i') { return { next: 'import-picker' }; }
|
|
3653
|
+
if (choice === 'a') {
|
|
3654
|
+
const prof = loadProfile(cwd);
|
|
3655
|
+
prof.automode = !(prof.automode ?? prof.settings?.automode ?? false);
|
|
3656
|
+
saveProfile(prof, { cwd });
|
|
3657
|
+
process.stdout.write(`\n Automode: ${prof.automode ? '\x1b[32mON\x1b[0m' : '\x1b[2mOFF\x1b[0m'}\n\n`);
|
|
3658
|
+
await ask(' Press Enter to continue...');
|
|
3659
|
+
return { next: 'main' };
|
|
3660
|
+
}
|
|
3581
3661
|
if (choice === 'q' || choice === 'exit') { return { next: 'exit' }; }
|
|
3582
3662
|
|
|
3583
3663
|
return { next: 'main' };
|
|
@@ -3596,6 +3676,30 @@ async function newSessionScreen(rl, ask) {
|
|
|
3596
3676
|
return { next: 'main' };
|
|
3597
3677
|
}
|
|
3598
3678
|
|
|
3679
|
+
// ─── Screen: switchProviderScreen ────────────────────────────────────────────
|
|
3680
|
+
|
|
3681
|
+
async function switchProviderScreen(rl, ask, ctx = {}) {
|
|
3682
|
+
const cwd = process.cwd();
|
|
3683
|
+
const session = ctx.session;
|
|
3684
|
+
if (!session) return { next: 'main' };
|
|
3685
|
+
|
|
3686
|
+
const currentTool = _sessionTool(session);
|
|
3687
|
+
const target = currentTool === 'codex' ? 'claude' : 'codex';
|
|
3688
|
+
const label = session.smartName || session.name || session.prompts?.first || session.id;
|
|
3689
|
+
const brief = _sessionBrief(session, target);
|
|
3690
|
+
|
|
3691
|
+
process.stdout.write('\n');
|
|
3692
|
+
process.stdout.write(` Continue in ${target === 'codex' ? 'Codex/GPT' : 'Claude'}\n`);
|
|
3693
|
+
process.stdout.write(` From: ${currentTool} · ${String(label || '').replace(/\s+/g, ' ').slice(0, 80)}\n\n`);
|
|
3694
|
+
process.stdout.write(` \x1b[36mEnter\x1b[0m switch now \x1b[36mb\x1b[0m back\n\n`);
|
|
3695
|
+
|
|
3696
|
+
const choice = (await ask(' Choice: ')).trim().toLowerCase();
|
|
3697
|
+
if (choice === 'b' || choice === 'q' || choice === 'n') return { next: 'main' };
|
|
3698
|
+
|
|
3699
|
+
await cmdSwitch([target, brief]);
|
|
3700
|
+
return { next: 'main' };
|
|
3701
|
+
}
|
|
3702
|
+
|
|
3599
3703
|
// ─── Screen: paletteHelpScreen ───────────────────────────────────────────────
|
|
3600
3704
|
|
|
3601
3705
|
async function paletteHelpScreen(rl, ask) {
|
|
@@ -3616,12 +3720,14 @@ async function paletteHelpScreen(rl, ask) {
|
|
|
3616
3720
|
sep,
|
|
3617
3721
|
row(`${CYAN}Enter${RESET} Resume last session`),
|
|
3618
3722
|
row(`${CYAN}n${RESET} New coding session`),
|
|
3723
|
+
row(`${CYAN}g${RESET} Continue selected work in other provider`),
|
|
3619
3724
|
row(`${CYAN}1-9${RESET} Resume session by number`),
|
|
3620
3725
|
row(`${CYAN}/${RESET} Search session history`),
|
|
3726
|
+
row(`${CYAN}i${RESET} Import/sync sessions`),
|
|
3621
3727
|
row(`${CYAN}s${RESET} Settings`),
|
|
3622
3728
|
row(`${CYAN}d${RESET} Doctor (repo diagnostics)`),
|
|
3623
3729
|
row(`${CYAN}t${RESET} Team`),
|
|
3624
|
-
row(`${CYAN}
|
|
3730
|
+
row(`${CYAN}a${RESET} Toggle auto mode`),
|
|
3625
3731
|
row(`${CYAN}q${RESET} Quit`),
|
|
3626
3732
|
row(`${CYAN}?${RESET} This help`),
|
|
3627
3733
|
sep,
|
|
@@ -5497,6 +5603,7 @@ async function replScreen(rl, ask) {
|
|
|
5497
5603
|
// ─── Screen: sessionDetailScreen ─────────────────────────────────────────────
|
|
5498
5604
|
|
|
5499
5605
|
async function sessionDetailScreen(rl, ask, ctx = {}) {
|
|
5606
|
+
const cwd = process.cwd();
|
|
5500
5607
|
const sess = ctx.session;
|
|
5501
5608
|
if (!sess) return { next: 'dashboard' };
|
|
5502
5609
|
|
|
@@ -5529,27 +5636,33 @@ async function sessionDetailScreen(rl, ask, ctx = {}) {
|
|
|
5529
5636
|
console.log('');
|
|
5530
5637
|
|
|
5531
5638
|
if (sess.isActive) {
|
|
5532
|
-
console.log(
|
|
5639
|
+
console.log(` [c] Continue this session (${_sessionTool(sess)})`);
|
|
5533
5640
|
} else {
|
|
5534
|
-
console.log(
|
|
5641
|
+
console.log(` [r] Resume this session (${_sessionTool(sess)})`);
|
|
5535
5642
|
}
|
|
5643
|
+
console.log(' [g] Continue in other provider');
|
|
5536
5644
|
console.log(' [b] Back to dashboard');
|
|
5537
5645
|
console.log('');
|
|
5538
5646
|
|
|
5539
5647
|
const choice = (await ask(' Choice: ')).trim().toLowerCase();
|
|
5540
5648
|
|
|
5541
5649
|
if (choice === 'c' || choice === 'r') {
|
|
5542
|
-
|
|
5650
|
+
const tool = _sessionTool(sess);
|
|
5651
|
+
const launchArgs = _sessionLaunchArgs(sess, cwd);
|
|
5652
|
+
console.log(`\n Launching: ${tool} ${launchArgs.join(' ')}\n`);
|
|
5543
5653
|
try {
|
|
5544
5654
|
const { spawnSync } = await import('node:child_process');
|
|
5545
|
-
spawnSync(
|
|
5655
|
+
spawnSync(tool, launchArgs, { stdio: 'inherit' });
|
|
5546
5656
|
} catch {
|
|
5547
|
-
console.log(
|
|
5548
|
-
console.log(` claude --resume ${sess.id}`);
|
|
5657
|
+
console.log(` Could not launch ${tool} CLI.`);
|
|
5549
5658
|
}
|
|
5550
5659
|
return { next: 'dashboard' };
|
|
5551
5660
|
}
|
|
5552
5661
|
|
|
5662
|
+
if (choice === 'g') {
|
|
5663
|
+
return { next: 'switch-provider', session: sess };
|
|
5664
|
+
}
|
|
5665
|
+
|
|
5553
5666
|
return { next: 'dashboard' };
|
|
5554
5667
|
}
|
|
5555
5668
|
|
|
@@ -5629,8 +5742,8 @@ async function sessionsScreen(rl, ask) {
|
|
|
5629
5742
|
process.stdout.write(formatRow(sessions[i], i === cursor) + '\n');
|
|
5630
5743
|
}
|
|
5631
5744
|
process.stdout.write(sep + '\n');
|
|
5632
|
-
process.stdout.write(makeBoxRow('↑↓ Navigate Enter Resume
|
|
5633
|
-
process.stdout.write(makeBoxRow('q Back', W) + '\n');
|
|
5745
|
+
process.stdout.write(makeBoxRow('↑↓ Navigate Enter Resume g Switch Provider', W) + '\n');
|
|
5746
|
+
process.stdout.write(makeBoxRow('x Archive r Rename q Back', W) + '\n');
|
|
5634
5747
|
process.stdout.write(bot + '\n');
|
|
5635
5748
|
}
|
|
5636
5749
|
|
|
@@ -5690,9 +5803,11 @@ async function sessionsScreen(rl, ask) {
|
|
|
5690
5803
|
const sess = sessions[cursor];
|
|
5691
5804
|
cleanup();
|
|
5692
5805
|
process.stdout.write('\n');
|
|
5693
|
-
|
|
5806
|
+
const tool = _sessionTool(sess);
|
|
5807
|
+
const launchArgs = _sessionLaunchArgs(sess, cwd);
|
|
5808
|
+
process.stdout.write(`\n Launching: ${tool} ${launchArgs.join(' ')}\n\n`);
|
|
5694
5809
|
const { spawnSync } = await import('node:child_process');
|
|
5695
|
-
spawnSync(
|
|
5810
|
+
spawnSync(tool, launchArgs, { stdio: 'inherit' });
|
|
5696
5811
|
saveTerminalState(cwd, getTerminalId(), sess.id, sess.tool || 'claude');
|
|
5697
5812
|
resolve({ next: 'main' });
|
|
5698
5813
|
return;
|
|
@@ -5714,6 +5829,15 @@ async function sessionsScreen(rl, ask) {
|
|
|
5714
5829
|
return;
|
|
5715
5830
|
}
|
|
5716
5831
|
|
|
5832
|
+
// g → continue highlighted session in the other provider
|
|
5833
|
+
if (str === 'g' || str === 'G') {
|
|
5834
|
+
const sess = sessions[cursor];
|
|
5835
|
+
cleanup();
|
|
5836
|
+
process.stdout.write('\n');
|
|
5837
|
+
resolve({ next: 'switch-provider', session: sess });
|
|
5838
|
+
return;
|
|
5839
|
+
}
|
|
5840
|
+
|
|
5717
5841
|
// r → rename highlighted session
|
|
5718
5842
|
if (str === 'r' || str === 'R') {
|
|
5719
5843
|
const sess = sessions[cursor];
|
|
@@ -5788,6 +5912,7 @@ async function sessionManageScreen(rl, ask, ctx = {}) {
|
|
|
5788
5912
|
{ key: 'p', label: pinLabel, section: '' },
|
|
5789
5913
|
{ key: 'c', label: 'Set category', section: '' },
|
|
5790
5914
|
{ key: 'o', label: 'Open (resume)', section: '' },
|
|
5915
|
+
{ key: 'g', label: 'Continue in other provider', section: '' },
|
|
5791
5916
|
{ key: 'b', label: 'Back', section: '' },
|
|
5792
5917
|
]));
|
|
5793
5918
|
console.log('');
|
|
@@ -5839,11 +5964,17 @@ async function sessionManageScreen(rl, ask, ctx = {}) {
|
|
|
5839
5964
|
|
|
5840
5965
|
if (choice === 'o') {
|
|
5841
5966
|
const { spawnSync } = await import('node:child_process');
|
|
5842
|
-
|
|
5843
|
-
|
|
5967
|
+
const tool = _sessionTool(sess);
|
|
5968
|
+
const launchArgs = _sessionLaunchArgs(sess, cwd);
|
|
5969
|
+
console.log(`\n Launching: ${tool} ${launchArgs.join(' ')}\n`);
|
|
5970
|
+
spawnSync(tool, launchArgs, { stdio: 'inherit' });
|
|
5844
5971
|
return { next: 'sessions' };
|
|
5845
5972
|
}
|
|
5846
5973
|
|
|
5974
|
+
if (choice === 'g') {
|
|
5975
|
+
return { next: 'switch-provider', session: sess };
|
|
5976
|
+
}
|
|
5977
|
+
|
|
5847
5978
|
if (choice === 'b' || choice === 'back') return { next: 'sessions' };
|
|
5848
5979
|
|
|
5849
5980
|
return { next: 'session-manage', session: sess };
|
|
@@ -6110,6 +6241,7 @@ const SCREENS = {
|
|
|
6110
6241
|
settings: settingsScreen,
|
|
6111
6242
|
team: teamScreen,
|
|
6112
6243
|
'import-picker': importPickerScreen,
|
|
6244
|
+
'switch-provider': switchProviderScreen,
|
|
6113
6245
|
'pr-triage': prTriageScreen,
|
|
6114
6246
|
subscriptions: subscriptionsScreen,
|
|
6115
6247
|
dashboard: dashboardScreen,
|
|
@@ -6874,6 +7006,7 @@ async function main() {
|
|
|
6874
7006
|
if (cmd === 'status') { await cmdStatus(args.slice(1)); return; }
|
|
6875
7007
|
if (cmd === 'handoff') { await cmdHandoff(args.slice(1)); return; }
|
|
6876
7008
|
if (cmd === 'switch') { await cmdSwitch(args.slice(1)); return; }
|
|
7009
|
+
if (cmd === 'update' || cmd === 'upgrade') { await cmdUpdate(); return; }
|
|
6877
7010
|
if (cmd === 'hot') { cmdHot(args[1]); return; }
|
|
6878
7011
|
if (cmd === 'cool') { cmdCool(args[1]); return; }
|
|
6879
7012
|
if (cmd === 'remember') { cmdRemember(args[1]); return; }
|
|
@@ -6938,7 +7071,7 @@ fi
|
|
|
6938
7071
|
// e.g. `dual-brain fix failing tests` → same as `dual-brain go "fix failing tests"`
|
|
6939
7072
|
const KNOWN_COMMANDS = new Set([
|
|
6940
7073
|
'init', 'install', 'uninstall', 'auth', 'go', 'do', 'plan', 'ship', 'think', 'review', 'pr', 'status', 'handoff', 'switch', 'hot', 'cool',
|
|
6941
|
-
'remember', 'forget', 'break-glass', 'specialists', 'search', 'shell-hook', 'watch',
|
|
7074
|
+
'remember', 'forget', 'break-glass', 'specialists', 'search', 'shell-hook', 'watch', 'update', 'upgrade',
|
|
6942
7075
|
'--help', '-h', '--version', '-v',
|
|
6943
7076
|
...Object.keys(loadSpecialistRegistry()),
|
|
6944
7077
|
]);
|
package/dist/src/auto-handoff.js
CHANGED
|
@@ -256,9 +256,11 @@ export function executeHandoff(opts) {
|
|
|
256
256
|
createdAt: new Date().toISOString(),
|
|
257
257
|
};
|
|
258
258
|
atomicWriteJson(contextFilePath, handoffData);
|
|
259
|
-
// Build
|
|
259
|
+
// Build a provider-specific starter command for display/API consumers.
|
|
260
260
|
const cli = PROVIDER_CLI[other] || other;
|
|
261
|
-
const command =
|
|
261
|
+
const command = cli === 'codex'
|
|
262
|
+
? [cli, prompt.slice(0, 4000)]
|
|
263
|
+
: [cli, prompt.slice(0, 4000)];
|
|
262
264
|
const autoLabel = auto ? ' (auto)' : '';
|
|
263
265
|
return {
|
|
264
266
|
success: true,
|
|
@@ -307,8 +309,11 @@ export function spawnHandoff(opts) {
|
|
|
307
309
|
: [prompt.slice(0, 4000)];
|
|
308
310
|
}
|
|
309
311
|
else {
|
|
310
|
-
// Claude
|
|
311
|
-
|
|
312
|
+
// Claude accepts an initial prompt as a positional argument in interactive mode.
|
|
313
|
+
// Use print mode only for non-TTY callers.
|
|
314
|
+
spawnArgs = process.stdin.isTTY
|
|
315
|
+
? [prompt.slice(0, 4000)]
|
|
316
|
+
: ['-p', prompt.slice(0, 4000), '--no-input'];
|
|
312
317
|
}
|
|
313
318
|
if (opts.interactive !== false) {
|
|
314
319
|
// Spawn with inherited stdio — user stays in same terminal
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../../src/auto-handoff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auto-handoff.js","sourceRoot":"","sources":["../../src/auto-handoff.ts"],"names":[],"mappings":"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"}
|
package/hooks/control-panel.mjs
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import readline from 'readline';
|
|
11
|
-
import { existsSync, readFileSync, readdirSync, statSync, renameSync, writeFileSync } from 'fs';
|
|
11
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, renameSync, writeFileSync } from 'fs';
|
|
12
12
|
import { dirname, join } from 'path';
|
|
13
13
|
import { fileURLToPath } from 'url';
|
|
14
14
|
import { spawnSync } from 'child_process';
|
|
@@ -368,6 +368,46 @@ function countRunning() {
|
|
|
368
368
|
return { claude, codex };
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
+
function otherProviderForSession(session) {
|
|
372
|
+
return session?.tool === 'codex' ? 'claude' : 'codex';
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
function sessionBrief(session, target) {
|
|
376
|
+
const prompt = session?.firstPrompt || session?.name || session?.id || 'previous session';
|
|
377
|
+
return [
|
|
378
|
+
`Continue the ${session?.tool || 'claude'} session in ${target}.`,
|
|
379
|
+
session?.id ? `Original session id: ${session.id}.` : '',
|
|
380
|
+
`Context: ${String(prompt).replace(/\s+/g, ' ').slice(0, 700)}`,
|
|
381
|
+
].filter(Boolean).join(' ');
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
function importVisibleSessions(sessions) {
|
|
385
|
+
const dir = join(CWD, '.dualbrain');
|
|
386
|
+
const file = join(dir, 'sessions.json');
|
|
387
|
+
mkdirSync(dir, { recursive: true });
|
|
388
|
+
let meta = {};
|
|
389
|
+
try { meta = JSON.parse(readFileSync(file, 'utf8')); } catch {}
|
|
390
|
+
const now = new Date().toISOString();
|
|
391
|
+
let count = 0;
|
|
392
|
+
for (const s of sessions) {
|
|
393
|
+
if (!s?.id) continue;
|
|
394
|
+
if (meta[s.id]?.source === 'data-tools') continue;
|
|
395
|
+
meta[s.id] = {
|
|
396
|
+
...(meta[s.id] || {}),
|
|
397
|
+
source: 'data-tools',
|
|
398
|
+
tool: s.tool || 'claude',
|
|
399
|
+
importedAt: now,
|
|
400
|
+
createdAt: meta[s.id]?.createdAt || now,
|
|
401
|
+
name: s.firstPrompt || s.id,
|
|
402
|
+
};
|
|
403
|
+
count++;
|
|
404
|
+
}
|
|
405
|
+
const tmp = file + '.tmp.' + process.pid;
|
|
406
|
+
writeFileSync(tmp, JSON.stringify(meta, null, 2) + '\n');
|
|
407
|
+
renameSync(tmp, file);
|
|
408
|
+
return count;
|
|
409
|
+
}
|
|
410
|
+
|
|
371
411
|
// ─── Provider Balance ─────────────────────────────────────────────────────
|
|
372
412
|
|
|
373
413
|
function loadProviderBalance() {
|
|
@@ -893,8 +933,10 @@ function renderReturningMenu(providers, sessions) {
|
|
|
893
933
|
// ── Sessions
|
|
894
934
|
lines.push(` ${dim('─── Sessions')}`);
|
|
895
935
|
lines.push(` ${bold('[c]')} Continue last session`);
|
|
936
|
+
lines.push(` ${bold('[g]')} Continue last in other provider`);
|
|
896
937
|
if (sessions.length > 0) lines.push(` ${bold('[1-9]')} Resume numbered above`);
|
|
897
938
|
lines.push(` ${bold('[n]')} New session`);
|
|
939
|
+
lines.push(` ${bold('[i]')} Import/sync sessions`);
|
|
898
940
|
lines.push(` ${bold('[w]')} Vibe workflow ${dim('(say what you want, we handle the rest)')}`);
|
|
899
941
|
|
|
900
942
|
// ── Settings
|
|
@@ -1075,6 +1117,23 @@ async function mainLoop() {
|
|
|
1075
1117
|
continue;
|
|
1076
1118
|
}
|
|
1077
1119
|
|
|
1120
|
+
if (choice === 'g') {
|
|
1121
|
+
if (sessions.length === 0) {
|
|
1122
|
+
console.log('');
|
|
1123
|
+
console.log(` ${yellow('No recent session to switch.')} Start a new session first.`);
|
|
1124
|
+
console.log('');
|
|
1125
|
+
continue;
|
|
1126
|
+
}
|
|
1127
|
+
const s = sessions[0];
|
|
1128
|
+
const target = otherProviderForSession(s);
|
|
1129
|
+
const brief = sessionBrief(s, target);
|
|
1130
|
+
console.log('');
|
|
1131
|
+
console.log(` Switching ${s.tool || 'claude'} session to ${target}...`);
|
|
1132
|
+
console.log('');
|
|
1133
|
+
spawnSync('dual-brain', ['switch', target, brief], { stdio: 'inherit', cwd: CWD });
|
|
1134
|
+
continue;
|
|
1135
|
+
}
|
|
1136
|
+
|
|
1078
1137
|
const num = parseInt(choice, 10);
|
|
1079
1138
|
if (num >= 1 && num <= 9 && sessions[num - 1]) {
|
|
1080
1139
|
const s = sessions[num - 1];
|
|
@@ -1102,6 +1161,17 @@ async function mainLoop() {
|
|
|
1102
1161
|
continue;
|
|
1103
1162
|
}
|
|
1104
1163
|
|
|
1164
|
+
if (choice === 'i') {
|
|
1165
|
+
const count = importVisibleSessions(sessions);
|
|
1166
|
+
console.log('');
|
|
1167
|
+
console.log(count > 0
|
|
1168
|
+
? ` ${green('Imported ' + count + ' session' + (count === 1 ? '' : 's') + '.')}`
|
|
1169
|
+
: ` ${dim('Sessions already synced.')}`);
|
|
1170
|
+
console.log('');
|
|
1171
|
+
await ask();
|
|
1172
|
+
continue;
|
|
1173
|
+
}
|
|
1174
|
+
|
|
1105
1175
|
if (choice === 'p') {
|
|
1106
1176
|
await showProfilePicker(rl);
|
|
1107
1177
|
continue;
|
package/package.json
CHANGED