|
1 | 1 | // Lazy-load pi-coding-agent model metadata so we can infer context windows when |
2 | 2 | // the agent reports a model id. This includes custom models.json entries. |
3 | 3 |
|
4 | | -import path from "node:path"; |
5 | | -import { isHelpOrVersionInvocation } from "../cli/argv.js"; |
6 | 4 | import { getRuntimeConfig } from "../config/config.js"; |
7 | 5 | import type { OpenClawConfig } from "../config/types.openclaw.js"; |
8 | 6 | import { computeBackoff, type BackoffPolicy } from "../infra/backoff.js"; |
9 | | -import { consumeRootOptionToken, FLAG_TERMINATOR } from "../infra/cli-root-options.js"; |
10 | 7 | import { normalizeLowercaseStringOrEmpty } from "../shared/string-coerce.js"; |
11 | 8 | import { resolveDefaultAgentDir } from "./agent-scope.js"; |
12 | 9 | import { lookupCachedContextTokens, MODEL_CONTEXT_TOKEN_CACHE } from "./context-cache.js"; |
@@ -108,82 +105,6 @@ function loadModelsConfigRuntime() { |
108 | 105 | return CONTEXT_WINDOW_RUNTIME_STATE.modelsConfigRuntimeLoader.load(); |
109 | 106 | } |
110 | 107 |
|
111 | | -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 | | - |
187 | 108 | function primeConfiguredContextWindows(): OpenClawConfig | undefined { |
188 | 109 | if (CONTEXT_WINDOW_RUNTIME_STATE.configuredConfig) { |
189 | 110 | applyConfiguredContextWindows({ |
|
0 commit comments