Merge #550: keep Respawn and Ralph visible in Session Options for Claude sessions

This commit is contained in:
Codeman maintainer
2026-10-09 04:46:45 +02:00
6 changed files with 64 additions and 5 deletions
+37 -1
View File
@@ -453,7 +453,15 @@ describe('Codex quick start settings', () => {
const src = readFileSync(resolve(import.meta.dirname, `../src/web/public/${file}`), 'utf8');
vm.runInContext(src, context, { filename: file });
}
return { app: new (CodemanApp as any)(), welcomeCliActions, tunnelBtn, runModeCliOptions, modeBtns, menu };
return {
app: new (CodemanApp as any)(),
welcomeCliActions,
tunnelBtn,
runModeCliOptions,
modeBtns,
menu,
context,
};
}
const ALL_OFF = {
@@ -651,6 +659,34 @@ describe('Codex quick start settings', () => {
expect(src).not.toContain('data-mode="codex"');
});
it('keeps Claude-only session options for claude even though it is a registry agent', () => {
const catalog = CATALOG.map((cli) => ({ ...cli, external: cli.id !== 'claude' && cli.id !== 'shell' }));
const { context } = loadUi(undefined, catalog);
expect(context.isExternalCliSession('claude')).toBe(false);
expect(context.isExternalCliSession('shell')).toBe(false);
expect(context.isExternalCliSession('codex')).toBe(true);
expect(context.isExternalCliSession('custom-agent')).toBe(true);
});
it('keeps the served external flag when App Settings resyncs the catalog from /api/clis', () => {
const catalog = CATALOG.map((cli) => ({ ...cli, external: cli.id !== 'claude' && cli.id !== 'shell' }));
const { app, context } = loadUi(undefined, catalog);
// /api/clis rows: no capabilities, so no `external`.
app._cliList = CATALOG.map((cli) => ({ ...cli, installed: true }));
app.runMode = 'claude';
app._syncCliLaunchCatalog();
expect(context.isExternalCliSession('claude')).toBe(false);
expect(context.isExternalCliSession('codex')).toBe(true);
});
it('gates Session Options on isExternalCliSession, not the launch-path check', () => {
const src = readFileSync(resolve(import.meta.dirname, '../src/web/public/session-ui.js'), 'utf8');
const open = src.slice(src.indexOf('\n openSessionOptions('));
const body = open.slice(0, open.indexOf('\n },'));
expect(body).toContain('isExternalCliSession(session.mode)');
expect(body).not.toContain('isExternalCliRunMode(');
});
it('shows everything when the flags were never injected', () => {
// A cached page from a build without the injection, or a solo popup. Hiding
// every run button on a doubt would leave a working install nothing to click.