UNPKG

@gguf/claw

Version:

Multi-channel AI gateway with extensible messaging integrations

300 lines (298 loc) 16 kB
import { Dt as theme, _ as defaultRuntime } from "./entry.js"; import "./auth-profiles-DFa1zzNy.js"; import "./exec-CBKBIMpA.js"; import "./agent-scope-RzK9Zcks.js"; import "./github-copilot-token-DuFIqfeC.js"; import "./pi-auth-json-BgkD6ovr.js"; import "./model-DY9t1aT6.js"; import "./pi-model-discovery-Do3xMEtM.js"; import "./frontmatter-D-YR-Ghi.js"; import "./skills-DJmGZazd.js"; import "./manifest-registry-DS2iK5AZ.js"; import "./config-B2kL1ciP.js"; import "./client-CDjZdZtI.js"; import "./call-DXhJGwEy.js"; import "./message-channel-CVHJDItx.js"; import "./pairing-token-Byh6drgn.js"; import "./subagent-registry-C7Edpn23.js"; import "./sessions-BD5dyLxb.js"; import "./tokens-D5RzuaYP.js"; import "./normalize-Db7Xtx2v.js"; import "./accounts-BpzwDfBB.js"; import "./bindings-KqaGKS1E.js"; import "./logging-CFvkxgcX.js"; import "./send-BFiRlO6V.js"; import "./plugins-RqhjLCb6.js"; import "./send-CWDtU8Gi.js"; import "./with-timeout-nVWy7PWz.js"; import "./deliver-CeVE1Jh-.js"; import "./diagnostic-774btyou.js"; import "./diagnostic-session-state-HO94DMou.js"; import "./accounts-B3D4iWUP.js"; import "./send-DCCBUsNn.js"; import "./image-ops-lDlFpoR2.js"; import "./pi-embedded-helpers-NVEtaJwl.js"; import "./sandbox-CO-R8v6J.js"; import "./common-DcSh1hZE.js"; import "./chrome-52ZF7gmE.js"; import "./tailscale-BzRVNhMW.js"; import "./auth-Dq2pFnjj.js"; import "./server-context-C1f7cijA.js"; import "./routes-BJmh1Ify.js"; import "./redact-C2s6sr73.js"; import "./errors-CFEPAPWc.js"; import "./fs-safe-3YwsxSr5.js"; import "./paths-CXKNzNjU.js"; import "./ssrf-Cv2DiHsm.js"; import "./store-e6fIrP17.js"; import "./ports-59j-bA53.js"; import "./trash-DVLJ0k6q.js"; import "./dock-BZuwgj1O.js"; import "./accounts-Jg3_1Y-r.js"; import "./paths-CXpciDEv.js"; import "./thinking-CJPPUYWd.js"; import "./models-config-5zJ39mUb.js"; import "./reply-prefix-DJOqzjBt.js"; import "./memory-cli-C3uas9sI.js"; import "./manager-D3ZmOwqt.js"; import "./gemini-auth-CdgAkz2K.js"; import "./sqlite-1-TCahE6.js"; import "./retry-BcjnIuo-.js"; import "./chunk-Z2NYDchs.js"; import "./markdown-tables-GCHx-nGT.js"; import "./fetch-guard-B5BAqVyD.js"; import "./local-roots-SkDT1Wv8.js"; import "./ir-DAwVi0a7.js"; import "./render-e7fENCYH.js"; import "./commands-registry-CRmMPJQ9.js"; import "./image-QGUQCdGh.js"; import "./tool-display-Cs1uRaRV.js"; import "./runner-D81xREgc.js"; import "./model-catalog-DLoDxnxL.js"; import "./session-utils-C3Oi9cXA.js"; import "./skill-commands-D2rmj6w8.js"; import "./workspace-dirs-BXftTDSV.js"; import "./pairing-store-CruPwgBw.js"; import "./fetch-vg2oFVIH.js"; import "./exec-approvals-BZA6z4HM.js"; import "./nodes-screen-x7YKy8Ay.js"; import "./session-cost-usage-CpxG9Mup.js"; import "./pi-tools.policy-DeRwGLEO.js"; import "./control-service-DGleRjGJ.js"; import "./stagger-CArN2YVJ.js"; import "./channel-selection-DoXlsBhe.js"; import "./send-C3RIrBTr.js"; import "./outbound-attachment-CdFWGHgJ.js"; import "./delivery-queue-DKdWlR61.js"; import "./send-0Nz3O9Jc.js"; import "./resolve-route-BONxzeyg.js"; import "./channel-activity-BYGpAtHP.js"; import "./tables-BrqD0SUa.js"; import "./proxy-DL3MD6-P.js"; import { t as formatDocsLink } from "./links-CW8Bx7rK.js"; import { n as runCommandWithRuntime, t as resolveOptionFromCommand } from "./cli-utils-CCaEbxAz.js"; import "./help-format-B0pWGnZs.js"; import "./progress-BAHiAaDW.js"; import "./replies-CuUAAFF2.js"; import "./onboard-helpers-CEx2tGVB.js"; import "./prompt-style-DwCXob2h.js"; import "./pairing-labels-DtxjElSq.js"; import "./note-D3Xn5qjj.js"; import "./clack-prompter-DOOcFy2t.js"; import "./table-Ca0mornk.js"; import "./shared-DpLvAirU.js"; import "./auth-token-B5F1NkdJ.js"; import "./logging-BGewRZy0.js"; import { c as githubCopilotLoginCommand } from "./provider-auth-helpers-CSWFmrj3.js"; import { C as modelsAliasesListCommand, S as modelsAliasesAddCommand, _ as modelsAuthOrderSetCommand, a as modelsStatusCommand, b as modelsAuthPasteTokenCommand, c as modelsImageFallbacksClearCommand, d as modelsFallbacksAddCommand, f as modelsFallbacksClearCommand, g as modelsAuthOrderGetCommand, h as modelsAuthOrderClearCommand, i as modelsScanCommand, l as modelsImageFallbacksListCommand, m as modelsFallbacksRemoveCommand, n as modelsSetImageCommand, o as modelsListCommand, p as modelsFallbacksListCommand, r as modelsSetCommand, s as modelsImageFallbacksAddCommand, u as modelsImageFallbacksRemoveCommand, v as modelsAuthAddCommand, w as modelsAliasesRemoveCommand, x as modelsAuthSetupTokenCommand, y as modelsAuthLoginCommand } from "./models-B1GTjQZB.js"; //#region src/cli/models-cli.ts function runModelsCommand(action) { return runCommandWithRuntime(defaultRuntime, action); } function registerModelsCli(program) { const models = program.command("models").description("Model discovery, scanning, and configuration").option("--status-json", "Output JSON (alias for `models status --json`)", false).option("--status-plain", "Plain output (alias for `models status --plain`)", false).option("--agent <id>", "Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)").addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/models", "docs.openclaw.ai/cli/models")}\n`); models.command("list").description("List models (configured by default)").option("--all", "Show full model catalog", false).option("--local", "Filter to local models", false).option("--provider <name>", "Filter by provider").option("--json", "Output JSON", false).option("--plain", "Plain line output", false).action(async (opts) => { await runModelsCommand(async () => { await modelsListCommand(opts, defaultRuntime); }); }); models.command("status").description("Show configured model state").option("--json", "Output JSON", false).option("--plain", "Plain output", false).option("--check", "Exit non-zero if auth is expiring/expired (1=expired/missing, 2=expiring)", false).option("--probe", "Probe configured provider auth (live)", false).option("--probe-provider <name>", "Only probe a single provider").option("--probe-profile <id>", "Only probe specific auth profile ids (repeat or comma-separated)", (value, previous) => { const next = Array.isArray(previous) ? previous : previous ? [previous] : []; next.push(value); return next; }).option("--probe-timeout <ms>", "Per-probe timeout in ms").option("--probe-concurrency <n>", "Concurrent probes").option("--probe-max-tokens <n>", "Probe max tokens (best-effort)").option("--agent <id>", "Agent id to inspect (overrides OPENCLAW_AGENT_DIR/PI_CODING_AGENT_DIR)").action(async (opts, command) => { const agent = resolveOptionFromCommand(command, "agent") ?? opts.agent; await runModelsCommand(async () => { await modelsStatusCommand({ json: Boolean(opts.json), plain: Boolean(opts.plain), check: Boolean(opts.check), probe: Boolean(opts.probe), probeProvider: opts.probeProvider, probeProfile: opts.probeProfile, probeTimeout: opts.probeTimeout, probeConcurrency: opts.probeConcurrency, probeMaxTokens: opts.probeMaxTokens, agent }, defaultRuntime); }); }); models.command("set").description("Set the default model").argument("<model>", "Model id or alias").action(async (model) => { await runModelsCommand(async () => { await modelsSetCommand(model, defaultRuntime); }); }); models.command("set-image").description("Set the image model").argument("<model>", "Model id or alias").action(async (model) => { await runModelsCommand(async () => { await modelsSetImageCommand(model, defaultRuntime); }); }); const aliases = models.command("aliases").description("Manage model aliases"); aliases.command("list").description("List model aliases").option("--json", "Output JSON", false).option("--plain", "Plain output", false).action(async (opts) => { await runModelsCommand(async () => { await modelsAliasesListCommand(opts, defaultRuntime); }); }); aliases.command("add").description("Add or update a model alias").argument("<alias>", "Alias name").argument("<model>", "Model id or alias").action(async (alias, model) => { await runModelsCommand(async () => { await modelsAliasesAddCommand(alias, model, defaultRuntime); }); }); aliases.command("remove").description("Remove a model alias").argument("<alias>", "Alias name").action(async (alias) => { await runModelsCommand(async () => { await modelsAliasesRemoveCommand(alias, defaultRuntime); }); }); const fallbacks = models.command("fallbacks").description("Manage model fallback list"); fallbacks.command("list").description("List fallback models").option("--json", "Output JSON", false).option("--plain", "Plain output", false).action(async (opts) => { await runModelsCommand(async () => { await modelsFallbacksListCommand(opts, defaultRuntime); }); }); fallbacks.command("add").description("Add a fallback model").argument("<model>", "Model id or alias").action(async (model) => { await runModelsCommand(async () => { await modelsFallbacksAddCommand(model, defaultRuntime); }); }); fallbacks.command("remove").description("Remove a fallback model").argument("<model>", "Model id or alias").action(async (model) => { await runModelsCommand(async () => { await modelsFallbacksRemoveCommand(model, defaultRuntime); }); }); fallbacks.command("clear").description("Clear all fallback models").action(async () => { await runModelsCommand(async () => { await modelsFallbacksClearCommand(defaultRuntime); }); }); const imageFallbacks = models.command("image-fallbacks").description("Manage image model fallback list"); imageFallbacks.command("list").description("List image fallback models").option("--json", "Output JSON", false).option("--plain", "Plain output", false).action(async (opts) => { await runModelsCommand(async () => { await modelsImageFallbacksListCommand(opts, defaultRuntime); }); }); imageFallbacks.command("add").description("Add an image fallback model").argument("<model>", "Model id or alias").action(async (model) => { await runModelsCommand(async () => { await modelsImageFallbacksAddCommand(model, defaultRuntime); }); }); imageFallbacks.command("remove").description("Remove an image fallback model").argument("<model>", "Model id or alias").action(async (model) => { await runModelsCommand(async () => { await modelsImageFallbacksRemoveCommand(model, defaultRuntime); }); }); imageFallbacks.command("clear").description("Clear all image fallback models").action(async () => { await runModelsCommand(async () => { await modelsImageFallbacksClearCommand(defaultRuntime); }); }); models.command("scan").description("Scan OpenRouter free models for tools + images").option("--min-params <b>", "Minimum parameter size (billions)").option("--max-age-days <days>", "Skip models older than N days").option("--provider <name>", "Filter by provider prefix").option("--max-candidates <n>", "Max fallback candidates", "6").option("--timeout <ms>", "Per-probe timeout in ms").option("--concurrency <n>", "Probe concurrency").option("--no-probe", "Skip live probes; list free candidates only").option("--yes", "Accept defaults without prompting", false).option("--no-input", "Disable prompts (use defaults)").option("--set-default", "Set agents.defaults.model to the first selection", false).option("--set-image", "Set agents.defaults.imageModel to the first image selection", false).option("--json", "Output JSON", false).action(async (opts) => { await runModelsCommand(async () => { await modelsScanCommand(opts, defaultRuntime); }); }); models.action(async (opts) => { await runModelsCommand(async () => { await modelsStatusCommand({ json: Boolean(opts?.statusJson), plain: Boolean(opts?.statusPlain), agent: opts?.agent }, defaultRuntime); }); }); const auth = models.command("auth").description("Manage model auth profiles"); auth.option("--agent <id>", "Agent id for auth order get/set/clear"); auth.action(() => { auth.help(); }); auth.command("add").description("Interactive auth helper (setup-token or paste token)").action(async () => { await runModelsCommand(async () => { await modelsAuthAddCommand({}, defaultRuntime); }); }); auth.command("login").description("Run a provider plugin auth flow (OAuth/API key)").option("--provider <id>", "Provider id registered by a plugin").option("--method <id>", "Provider auth method id").option("--set-default", "Apply the provider's default model recommendation", false).action(async (opts) => { await runModelsCommand(async () => { await modelsAuthLoginCommand({ provider: opts.provider, method: opts.method, setDefault: Boolean(opts.setDefault) }, defaultRuntime); }); }); auth.command("setup-token").description("Run a provider CLI to create/sync a token (TTY required)").option("--provider <name>", "Provider id (default: anthropic)").option("--yes", "Skip confirmation", false).action(async (opts) => { await runModelsCommand(async () => { await modelsAuthSetupTokenCommand({ provider: opts.provider, yes: Boolean(opts.yes) }, defaultRuntime); }); }); auth.command("paste-token").description("Paste a token into auth-profiles.json and update config").requiredOption("--provider <name>", "Provider id (e.g. anthropic)").option("--profile-id <id>", "Auth profile id (default: <provider>:manual)").option("--expires-in <duration>", "Optional expiry duration (e.g. 365d, 12h). Stored as absolute expiresAt.").action(async (opts) => { await runModelsCommand(async () => { await modelsAuthPasteTokenCommand({ provider: opts.provider, profileId: opts.profileId, expiresIn: opts.expiresIn }, defaultRuntime); }); }); auth.command("login-github-copilot").description("Login to GitHub Copilot via GitHub device flow (TTY required)").option("--profile-id <id>", "Auth profile id (default: github-copilot:github)").option("--yes", "Overwrite existing profile without prompting", false).action(async (opts) => { await runModelsCommand(async () => { await githubCopilotLoginCommand({ profileId: opts.profileId, yes: Boolean(opts.yes) }, defaultRuntime); }); }); const order = auth.command("order").description("Manage per-agent auth profile order overrides"); order.command("get").description("Show per-agent auth order override (from auth-profiles.json)").requiredOption("--provider <name>", "Provider id (e.g. anthropic)").option("--agent <id>", "Agent id (default: configured default agent)").option("--json", "Output JSON", false).action(async (opts, command) => { const agent = resolveOptionFromCommand(command, "agent") ?? opts.agent; await runModelsCommand(async () => { await modelsAuthOrderGetCommand({ provider: opts.provider, agent, json: Boolean(opts.json) }, defaultRuntime); }); }); order.command("set").description("Set per-agent auth order override (locks rotation to this list)").requiredOption("--provider <name>", "Provider id (e.g. anthropic)").option("--agent <id>", "Agent id (default: configured default agent)").argument("<profileIds...>", "Auth profile ids (e.g. anthropic:default)").action(async (profileIds, opts, command) => { const agent = resolveOptionFromCommand(command, "agent") ?? opts.agent; await runModelsCommand(async () => { await modelsAuthOrderSetCommand({ provider: opts.provider, agent, order: profileIds }, defaultRuntime); }); }); order.command("clear").description("Clear per-agent auth order override (fall back to config/round-robin)").requiredOption("--provider <name>", "Provider id (e.g. anthropic)").option("--agent <id>", "Agent id (default: configured default agent)").action(async (opts, command) => { const agent = resolveOptionFromCommand(command, "agent") ?? opts.agent; await runModelsCommand(async () => { await modelsAuthOrderClearCommand({ provider: opts.provider, agent }, defaultRuntime); }); }); } //#endregion export { registerModelsCli };