openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
113 lines (112 loc) • 5.28 kB
JavaScript
import { a as createLazyRuntimeSurface, r as createLazyRuntimeModule } from "./lazy-runtime-CgCh8H_K.js";
import { t as CLAUDE_CLI_BACKEND_ID, u as CLAUDE_CLI_ROUTE_PROBE_MODEL_IDS } from "./cli-constants-Dsp5krT8.js";
import { t as resolveClaudeCatalogHomeDir } from "./session-catalog-home-DC4c4SgQ.js";
import { t as resolveClaudeTerminalExecutable } from "./session-catalog-executable-Cgwu2kGO.js";
import { a as CLAUDE_TERMINAL_START_COMMAND, i as CLAUDE_TERMINAL_RESUME_COMMAND, n as CLAUDE_SESSIONS_LIST_COMMAND, r as CLAUDE_SESSION_READ_COMMAND, t as CLAUDE_CLI_NODE_RUN_COMMAND } from "./session-catalog-shared-CiyzxK6Y.js";
import { statSync } from "node:fs";
import path from "node:path";
//#region extensions/anthropic/session-catalog-registration.ts
const CLAUDE_SESSIONS_CAPABILITY = "claude-sessions";
const loadClaudeSessionNodeCommands = createLazyRuntimeModule(() => import("./extensions/anthropic/session-catalog-node-commands.js"));
function isClaudeSessionCatalogEnabled(pluginConfig) {
if (!pluginConfig || typeof pluginConfig !== "object") return true;
const sessionCatalog = pluginConfig.sessionCatalog;
return !(sessionCatalog && typeof sessionCatalog === "object" && sessionCatalog.enabled === false);
}
function claudeProjectsAvailable(env) {
const homeDir = resolveClaudeCatalogHomeDir(env);
const configDir = env.CLAUDE_CONFIG_DIR?.trim();
try {
return statSync(path.join(configDir ? path.resolve(configDir) : path.join(homeDir, ".claude"), "projects")).isDirectory();
} catch {
return false;
}
}
function currentConfig(api) {
return api.runtime.config?.current?.() ?? api.config ?? {};
}
function registerClaudeSessionCatalog(api) {
const loadCatalogRuntime = createLazyRuntimeSurface(() => import("./extensions/anthropic/session-catalog.js"), (module) => module.createClaudeSessionCatalogRuntime(api));
api.registerSessionCatalog({
id: "claude",
label: "Claude Code",
supportsProcessHomeIsolation: true,
resolveCreateSession: ({ agentId }) => api.runtime.agent.resolveSessionCatalogCreateTarget({
config: currentConfig(api),
requestedAgentId: agentId,
provider: "anthropic",
modelIds: CLAUDE_CLI_ROUTE_PROBE_MODEL_IDS,
agentRuntime: CLAUDE_CLI_BACKEND_ID
}),
list: async (query) => await (await loadCatalogRuntime()).list(query),
read: async (request) => await (await loadCatalogRuntime()).read(request),
continueSession: async (request) => await (await loadCatalogRuntime()).continueSession(request),
startTerminalSession: async (request) => await (await loadCatalogRuntime()).startTerminalSession(request),
openTerminal: async (request) => await (await loadCatalogRuntime()).openTerminal(request),
checkUpstreamActivity: async (probes, policy) => await (await loadCatalogRuntime()).checkUpstreamActivity(probes, policy)
});
}
function createClaudeSessionNodeHostCommands() {
return [
{
command: CLAUDE_SESSIONS_LIST_COMMAND,
cap: CLAUDE_SESSIONS_CAPABILITY,
dangerous: false,
isAvailable: ({ env }) => claudeProjectsAvailable(env),
handle: async (paramsJSON) => await (await loadClaudeSessionNodeCommands()).listClaudeSessions(paramsJSON)
},
{
command: CLAUDE_SESSION_READ_COMMAND,
cap: CLAUDE_SESSIONS_CAPABILITY,
dangerous: false,
isAvailable: ({ env }) => claudeProjectsAvailable(env),
handle: async (paramsJSON) => await (await loadClaudeSessionNodeCommands()).readClaudeSession(paramsJSON)
},
{
command: CLAUDE_TERMINAL_RESUME_COMMAND,
cap: CLAUDE_SESSIONS_CAPABILITY,
dangerous: false,
duplex: true,
isAvailable: ({ env }) => claudeProjectsAvailable(env) && Boolean(resolveClaudeTerminalExecutable(env)),
handle: async (paramsJSON, io) => await (await loadClaudeSessionNodeCommands()).resumeClaudeSession(paramsJSON, io)
},
{
command: CLAUDE_TERMINAL_START_COMMAND,
cap: CLAUDE_SESSIONS_CAPABILITY,
dangerous: false,
duplex: true,
isAvailable: ({ env }) => Boolean(resolveClaudeTerminalExecutable(env)),
handle: async (paramsJSON, io) => await (await loadClaudeSessionNodeCommands()).startClaudeSession(paramsJSON, io)
}
];
}
function createClaudeSessionNodeInvokePolicies() {
return [{
commands: [
CLAUDE_SESSIONS_LIST_COMMAND,
CLAUDE_SESSION_READ_COMMAND,
CLAUDE_CLI_NODE_RUN_COMMAND,
CLAUDE_TERMINAL_RESUME_COMMAND,
CLAUDE_TERMINAL_START_COMMAND
],
defaultPlatforms: [
"macos",
"linux",
"windows"
],
handle: (context) => {
if (context.command === "anthropic.claude.terminal.start.v1") return context.client?.scopes?.includes("operator.admin") && context.config.gateway?.cliAgents?.enabled === true && context.config.gateway?.terminal?.enabled !== false ? { ok: true } : {
ok: false,
message: "Native terminal start requires operator.admin and enabled CLI agents and terminals"
};
return context.command === "anthropic.claude.terminal.resume.v1" ? { ok: true } : context.invokeNode();
}
}];
}
function registerClaudeSessionDiscovery(api) {
if (!isClaudeSessionCatalogEnabled(api.pluginConfig)) return;
registerClaudeSessionCatalog(api);
for (const command of createClaudeSessionNodeHostCommands()) api.registerNodeHostCommand(command);
}
//#endregion
export { registerClaudeSessionDiscovery as n, createClaudeSessionNodeInvokePolicies as t };