



























@@ -1,12 +1,9 @@
11// Lazy-load pi-coding-agent model metadata so we can infer context windows when
22// the agent reports a model id. This includes custom models.json entries.
334-import path from "node:path";
5-import { isHelpOrVersionInvocation } from "../cli/argv.js";
64import { getRuntimeConfig } from "../config/config.js";
75import type { OpenClawConfig } from "../config/types.openclaw.js";
86import { computeBackoff, type BackoffPolicy } from "../infra/backoff.js";
9-import { consumeRootOptionToken, FLAG_TERMINATOR } from "../infra/cli-root-options.js";
107import { normalizeLowercaseStringOrEmpty } from "../shared/string-coerce.js";
118import { resolveDefaultAgentDir } from "./agent-scope.js";
129import { lookupCachedContextTokens, MODEL_CONTEXT_TOKEN_CACHE } from "./context-cache.js";
@@ -108,82 +105,6 @@ function loadModelsConfigRuntime() {
108105return CONTEXT_WINDOW_RUNTIME_STATE.modelsConfigRuntimeLoader.load();
109106}
110107111-function isLikelyOpenClawCliProcess(argv: string[] = process.argv): boolean {
112-const entryBasename = normalizeLowercaseStringOrEmpty(path.basename(argv[1] ?? ""));
113-return (
114-entryBasename === "openclaw" ||
115-entryBasename === "openclaw.mjs" ||
116-entryBasename === "entry.js" ||
117-entryBasename === "entry.mjs"
118-);
119-}
120-121-function getCommandPathFromArgv(argv: string[]): string[] {
122-const args = argv.slice(2);
123-const tokens: string[] = [];
124-for (let i = 0; i < args.length; i += 1) {
125-const arg = args[i];
126-if (!arg || arg === FLAG_TERMINATOR) {
127-break;
128-}
129-const consumed = consumeRootOptionToken(args, i);
130-if (consumed > 0) {
131-i += consumed - 1;
132-continue;
133-}
134-if (arg.startsWith("-")) {
135-continue;
136-}
137-tokens.push(arg);
138-if (tokens.length >= 2) {
139-break;
140-}
141-}
142-return tokens;
143-}
144-145-const SKIP_EAGER_WARMUP_PRIMARY_COMMANDS = new Set([
146-"agent",
147-"backup",
148-"browser",
149-"completion",
150-"config",
151-"directory",
152-"doctor",
153-"gateway",
154-"health",
155-"hooks",
156-"logs",
157-"memory",
158-"message",
159-"models",
160-"pairing",
161-"plugins",
162-"secrets",
163-"sessions",
164-"status",
165-"update",
166-"webhooks",
167-]);
168-169-export function shouldEagerWarmContextWindowCache(argv: string[] = process.argv): boolean {
170-// Keep this gate tied to the real OpenClaw CLI entrypoints.
171-//
172-// This module can also land inside shared dist chunks that are imported from
173-// plugin-sdk/library surfaces during smoke tests and plugin loading. If we do
174-// eager warmup for those generic Node script imports, merely importing the
175-// built plugin-sdk can call ensureOpenClawModelsJson(), which cascades into
176-// plugin discovery and breaks dist/source singleton assumptions.
177-if (!isLikelyOpenClawCliProcess(argv)) {
178-return false;
179-}
180-if (isHelpOrVersionInvocation(argv)) {
181-return false;
182-}
183-const [primary] = getCommandPathFromArgv(argv);
184-return Boolean(primary) && !SKIP_EAGER_WARMUP_PRIMARY_COMMANDS.has(primary);
185-}
186-187108function primeConfiguredContextWindows(): OpenClawConfig | undefined {
188109if (CONTEXT_WINDOW_RUNTIME_STATE.configuredConfig) {
189110applyConfiguredContextWindows({
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。