mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-13 10:49:41 +02:00
Merge #550: keep Respawn and Ralph visible in Session Options for Claude sessions
This commit is contained in:
@@ -151,6 +151,13 @@ function isExternalCliRunMode(mode) {
|
||||
return EXTERNAL_CLI_MODES.has(mode) || registryCliById(mode)?.kind === 'agent';
|
||||
}
|
||||
|
||||
// Does this session lack the Claude-only features (Respawn, Ralph)? The registry's
|
||||
// `capabilities.external`, the flag the server's isExternalCliMode() reads. Not
|
||||
// isExternalCliRunMode(): that picks a launch path, and claude is `kind: 'agent'` too.
|
||||
function isExternalCliSession(mode) {
|
||||
return registryCliById(mode)?.external ?? isExternalCliRunMode(mode);
|
||||
}
|
||||
|
||||
Object.assign(CodemanApp.prototype, {
|
||||
/**
|
||||
* Build envOverrides payload from case + global settings.
|
||||
@@ -2477,7 +2484,7 @@ Object.assign(CodemanApp.prototype, {
|
||||
if (detachToggle) detachToggle.checked = this.hasTabDetachOverride(sessionId);
|
||||
|
||||
// Reset to an appropriate tab — Summary for external CLIs (Respawn/Ralph are Claude-only)
|
||||
const isAltMode = isExternalCliRunMode(session.mode);
|
||||
const isAltMode = isExternalCliSession(session.mode);
|
||||
this.switchOptionsTab(isAltMode ? 'summary' : 'respawn');
|
||||
|
||||
// Update respawn status display and buttons
|
||||
|
||||
@@ -3226,12 +3226,18 @@ Object.assign(CodemanApp.prototype, {
|
||||
/** Keep the launch surfaces in sync with Settings mutations without a reload. */
|
||||
_syncCliLaunchCatalog() {
|
||||
if (!Array.isArray(this._cliList) || this._cliList.length === 0) return;
|
||||
// /api/clis rows carry no capabilities, so keep the served catalog's `external`
|
||||
// (isExternalCliSession() reads it). A new custom CLI has none and falls back to `kind`.
|
||||
const previous = new Map(
|
||||
(Array.isArray(window.__codemanCliCatalog) ? window.__codemanCliCatalog : []).map((cli) => [cli.id, cli])
|
||||
);
|
||||
window.__codemanCliCatalog = this._cliList.map((cli) => ({
|
||||
id: cli.id,
|
||||
label: cli.label,
|
||||
shortBadge: cli.shortBadge,
|
||||
order: cli.order,
|
||||
kind: cli.kind,
|
||||
external: previous.get(cli.id)?.external,
|
||||
enabled: cli.enabled,
|
||||
available: cli.kind === 'shell' || (cli.enabled && cli.installed),
|
||||
}));
|
||||
|
||||
@@ -312,7 +312,9 @@ export function registerCliRegistryRoutes(app: FastifyInstance): void {
|
||||
// admin/settings surface; every SPAWN-time caller elsewhere uses
|
||||
// enabledClis() instead). Deliberately excludes launch/env/capabilities/
|
||||
// overlays/discovery — the same rule every other catalogue-export surface in
|
||||
// this codebase follows.
|
||||
// this codebase follows, with one deliberate exception: the page catalog
|
||||
// (`window.__codemanCliCatalog`, server.ts) carries `capabilities.external`,
|
||||
// which Session Options reads to keep Claude's Respawn and Ralph tabs.
|
||||
//
|
||||
// NOT gated on cliManagementEnabled: reading the list is cheap and is not
|
||||
// the risky part. The Settings UI section simply never fetches this while
|
||||
|
||||
@@ -1713,6 +1713,7 @@ export class WebServer extends EventEmitter {
|
||||
shortBadge: entry.shortBadge,
|
||||
order: entry.order,
|
||||
kind: entry.kind,
|
||||
external: entry.capabilities.external,
|
||||
enabled,
|
||||
available: enabled && installed,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user