UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

79 lines (78 loc) 3.13 kB
//#region extensions/anthropic/cli-runtime-args.ts const PROTOCOL_FLAGS = /* @__PURE__ */ new Set([ "-p", "--print", "--verbose", "--include-partial-messages", "--dangerously-skip-permissions", "--allow-dangerously-skip-permissions" ]); const PROTOCOL_VALUE_FLAGS = /* @__PURE__ */ new Set([ "--output-format", "--input-format", "--permission-prompt-tool", "--permission-mode", "--model", "--session-id", "--resume", "-r", "--append-system-prompt-file", "--append-system-prompt", "--system-prompt-file", "--system-prompt" ]); const TOOL_FLAGS = /* @__PURE__ */ new Set([ "--tools", "--allowedTools", "--allowed-tools" ]); /** Keep prepared CLI arguments, replacing only transport and admission-owned policy. */ function prepareClaudeCliTransportArgs(context) { const args = []; const allowedTools = []; let tools; let settingSources = "user"; let excludeDynamicSections = false; for (let index = 0; index < context.args.length; index += 1) { const raw = context.args[index]; const equals = raw.indexOf("="); const flag = equals < 0 ? raw : raw.slice(0, equals); if (PROTOCOL_FLAGS.has(flag)) continue; if (flag === "--exclude-dynamic-system-prompt-sections") { excludeDynamicSections = true; continue; } if (!PROTOCOL_VALUE_FLAGS.has(flag) && !TOOL_FLAGS.has(flag) && flag !== "--setting-sources") { args.push(raw); continue; } const value = equals < 0 ? context.args[++index] : raw.slice(equals + 1); if (value === void 0) throw new Error(`Claude CLI cannot preserve ${flag} without its value.`); if (PROTOCOL_VALUE_FLAGS.has(flag)) continue; if (flag === "--setting-sources") { if (value !== "" && value !== "user") throw new Error("Claude CLI settings must be limited to user settings."); settingSources = value; continue; } const values = [value]; if (equals < 0) while (index + 1 < context.args.length && !context.args[index + 1]?.startsWith("-")) values.push(context.args[++index]); const names = values.flatMap((entry) => entry.split(",").map((name) => name.trim()).filter(Boolean)); if (flag === "--tools") tools = names; else allowedTools.push(...names.filter((name) => name.startsWith("mcp__openclaw__"))); } let approvedTools = [...new Set(allowedTools)]; if (context.toolAvailability) { tools = [...context.toolAvailability.native]; approvedTools = context.toolAvailability.openClaw.map((name) => `mcp__openclaw__${name}`).filter((name) => allowedTools.includes(name) || allowedTools.includes("mcp__openclaw__*")); } args.push("--print", "--input-format", "stream-json", "--output-format", "stream-json", "--verbose", "--include-partial-messages", "--permission-prompt-tool", "stdio", "--permission-mode", "default", "--setting-sources", settingSources, "--model", context.modelId); if (tools) args.push("--tools", tools.join(",")); if (approvedTools.length) args.push("--allowedTools", approvedTools.join(",")); if (context.sessionId) args.push(context.useResume ? "--resume" : "--session-id", context.sessionId); return { args, excludeDynamicSections }; } //#endregion export { prepareClaudeCliTransportArgs as t };