@triflux/core 10.50.1 → 10.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/hooks/agy-session-hook.mjs +11 -56
- package/hooks/codex-session-hook.mjs +11 -101
- package/hub/bridge.mjs +1 -79
- package/hub/cli-adapter-base.mjs +12 -90
- package/hub/codex-adapter.mjs +0 -1
- package/hub/codex-preflight.mjs +5 -28
- package/hub/index.mjs +3 -9
- package/hub/lib/cto-env.mjs +0 -23
- package/hub/lib/known-errors.json +2 -2
- package/hub/lib/process-utils.mjs +0 -123
- package/hub/lib/spawn-trace.mjs +3 -2
- package/hub/lib/timeout-defaults.mjs +0 -1
- package/hub/paths.mjs +0 -6
- package/hub/pipeline/index.mjs +0 -190
- package/hub/pipeline/transitions.mjs +0 -10
- package/hub/reflexion.mjs +1 -84
- package/hub/role-contract.mjs +0 -2
- package/hud/cli-policy.mjs +0 -26
- package/hud/colors.mjs +0 -13
- package/hud/constants.mjs +7 -153
- package/hud/context-monitor.mjs +3 -64
- package/hud/hud-qos-status.mjs +54 -264
- package/hud/providers/claude.mjs +4 -16
- package/hud/providers/gemini.mjs +83 -689
- package/hud/renderers.mjs +59 -367
- package/hud/terminal.mjs +1 -63
- package/hud/utils.mjs +2 -26
- package/package.json +1 -4
- package/scripts/lib/agent-route-policy.mjs +162 -14
- package/scripts/lib/claudemd-scanner.mjs +2 -199
- package/scripts/lib/cli-claude.mjs +0 -2
- package/scripts/lib/context.mjs +3 -19
- package/scripts/lib/env-probe.mjs +5 -64
- package/scripts/lib/gemini-profiles.mjs +2 -69
- package/scripts/lib/legacy-mcp-cleanup.mjs +14 -3
- package/scripts/lib/machine-profile.mjs +3 -17
- package/scripts/lib/mcp-filter.mjs +109 -53
- package/scripts/lib/mcp-health.mjs +2 -2
- package/scripts/lib/mcp-server-catalog.mjs +2 -2
- package/scripts/lib/psmux-info.mjs +25 -104
- package/scripts/lib/session-presence.mjs +1 -1
- package/scripts/lib/skill-template.mjs +0 -271
- package/hub/codex-compat.mjs +0 -12
- package/hub/dynamic-routing-engine.mjs +0 -511
- package/hub/fullcycle.mjs +0 -113
- package/hub/gemini-adapter.mjs +0 -174
- package/hub/intent.mjs +0 -321
- package/hub/lib/mcp-response-cache.mjs +0 -239
- package/hub/lib/path-utils.mjs +0 -165
- package/hub/lib/risk-tier.mjs +0 -53
- package/hub/lib/ssh-command.mjs +0 -231
- package/hub/lib/staged-file-detect.mjs +0 -43
- package/hub/lib/tfx-route-args.mjs +0 -353
- package/hub/lib/timeline-adapter.mjs +0 -190
- package/hub/pipeline/gates/confidence.mjs +0 -75
- package/hub/pipeline/gates/consensus.mjs +0 -106
- package/hub/pipeline/gates/index.mjs +0 -9
- package/hub/pipeline/gates/selfcheck.mjs +0 -120
- package/hub/quality/deslop.mjs +0 -274
- package/hub/research.mjs +0 -155
- package/hub/role-control-events.mjs +0 -113
- package/hub/routing/complexity.mjs +0 -269
- package/hub/routing/index.mjs +0 -122
- package/hub/routing/q-learning.mjs +0 -387
- package/hub/routing-snapshot.mjs +0 -261
- package/hub/token-mode.mjs +0 -228
- package/hud/mission-board.mjs +0 -56
- package/hud/providers/cto.mjs +0 -76
- package/mesh/index.mjs +0 -69
- package/mesh/mesh-budget.mjs +0 -137
- package/mesh/mesh-heartbeat.mjs +0 -100
- package/mesh/mesh-protocol.mjs +0 -96
- package/mesh/mesh-queue.mjs +0 -163
- package/mesh/mesh-registry.mjs +0 -78
- package/mesh/mesh-router.mjs +0 -77
- package/scripts/lib/agent-json.mjs +0 -27
- package/scripts/lib/async.mjs +0 -174
- package/scripts/lib/cli-agy.mjs +0 -85
- package/scripts/lib/cli-codex.mjs +0 -62
- package/scripts/lib/cli-gemini.mjs +0 -37
- package/scripts/lib/dynamic-route-cli.mjs +0 -107
- package/scripts/lib/env.mjs +0 -14
- package/scripts/lib/hub.mjs +0 -48
- package/scripts/lib/pid.mjs +0 -63
- package/scripts/lib/quota.mjs +0 -47
- package/scripts/lib/skill-state.mjs +0 -220
- package/scripts/lib/team.mjs +0 -75
- package/scripts/lib/timeout.mjs +0 -66
- package/scripts/lib/tmp.mjs +0 -26
- package/scripts/lib/toml.mjs +0 -132
package/hud/constants.mjs
CHANGED
|
@@ -6,13 +6,6 @@ import { join } from "node:path";
|
|
|
6
6
|
|
|
7
7
|
export const VERSION = "2.0";
|
|
8
8
|
|
|
9
|
-
export const QOS_PATH = join(
|
|
10
|
-
homedir(),
|
|
11
|
-
".claude",
|
|
12
|
-
"cache",
|
|
13
|
-
"tfx-hub",
|
|
14
|
-
"cli_qos_profile.json",
|
|
15
|
-
);
|
|
16
9
|
export const ACCOUNTS_CONFIG_PATH = join(
|
|
17
10
|
homedir(),
|
|
18
11
|
".claude",
|
|
@@ -38,21 +31,6 @@ export const CLAUDE_BAND_MARKER_DIR = join(
|
|
|
38
31
|
);
|
|
39
32
|
export const CLAUDE_BAND_MARKER_TTL_MS = 12 * 60 * 60 * 1000;
|
|
40
33
|
|
|
41
|
-
// tfx-multi 상태 (v2.2 HUD 통합)
|
|
42
|
-
export const TEAM_STATE_PATH = join(
|
|
43
|
-
homedir(),
|
|
44
|
-
".claude",
|
|
45
|
-
"cache",
|
|
46
|
-
"tfx-hub",
|
|
47
|
-
"team-state.json",
|
|
48
|
-
);
|
|
49
|
-
export const CTO_LAKE_CURRENT_RELATIVE_PATH = join(
|
|
50
|
-
".triflux",
|
|
51
|
-
"lake",
|
|
52
|
-
"current.md",
|
|
53
|
-
);
|
|
54
|
-
export const CTO_STATUS_STALE_MS = 60 * 60 * 1000; // 1시간
|
|
55
|
-
export const CTO_STATUS_LINE_MAX_CHARS = 140;
|
|
56
34
|
export const CONTEXT_MONITOR_CACHE_PATH = join(
|
|
57
35
|
homedir(),
|
|
58
36
|
".claude",
|
|
@@ -67,12 +45,6 @@ export const HUB_REQUEST_MONITOR_CACHE_PATH = join(
|
|
|
67
45
|
"tfx-hub",
|
|
68
46
|
"hub-request-context-monitor.json",
|
|
69
47
|
);
|
|
70
|
-
export const CONTEXT_MONITOR_LEGACY_PATH = join(
|
|
71
|
-
homedir(),
|
|
72
|
-
".omc",
|
|
73
|
-
"state",
|
|
74
|
-
"context-monitor.json",
|
|
75
|
-
);
|
|
76
48
|
export const CONTEXT_MONITOR_LOG_DIR = join(
|
|
77
49
|
homedir(),
|
|
78
50
|
".claude",
|
|
@@ -81,16 +53,6 @@ export const CONTEXT_MONITOR_LOG_DIR = join(
|
|
|
81
53
|
"logs",
|
|
82
54
|
);
|
|
83
55
|
|
|
84
|
-
// 원격 프로브 캐시 (tfx-remote)
|
|
85
|
-
export const REMOTE_ENV_CACHE_DIR = join(
|
|
86
|
-
homedir(),
|
|
87
|
-
".claude",
|
|
88
|
-
"cache",
|
|
89
|
-
"tfx-hub",
|
|
90
|
-
"remote-env",
|
|
91
|
-
);
|
|
92
|
-
export const REMOTE_ENV_CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24시간
|
|
93
|
-
|
|
94
56
|
// Claude OAuth Usage API (api.anthropic.com/api/oauth/usage)
|
|
95
57
|
export const CLAUDE_CREDENTIALS_PATH = join(
|
|
96
58
|
homedir(),
|
|
@@ -182,26 +144,11 @@ export const CODEX_REFRESH_LOCK_PATH = join(
|
|
|
182
144
|
"cache",
|
|
183
145
|
".codex-refresh-lock",
|
|
184
146
|
);
|
|
185
|
-
export const GEMINI_QUOTA_REFRESH_LOCK_PATH = join(
|
|
186
|
-
homedir(),
|
|
187
|
-
".claude",
|
|
188
|
-
"cache",
|
|
189
|
-
".gemini-quota-refresh-lock",
|
|
190
|
-
);
|
|
191
|
-
export const GEMINI_SESSION_REFRESH_LOCK_PATH = join(
|
|
192
|
-
homedir(),
|
|
193
|
-
".claude",
|
|
194
|
-
"cache",
|
|
195
|
-
".gemini-session-refresh-lock",
|
|
196
|
-
);
|
|
197
147
|
export const SPAWN_LOCK_TTL_MS = 30 * 1000; // 30초 spawn dedup
|
|
198
148
|
|
|
199
|
-
// Gemini 쿼터 API 관련
|
|
200
|
-
export const GEMINI_OAUTH_PATH = join(homedir(), ".gemini", "oauth_creds.json");
|
|
201
149
|
export const ANTIGRAVITY_OAUTH_PATHS = [
|
|
202
150
|
join(homedir(), ".gemini", "antigravity-cli", "oauth_creds.json"),
|
|
203
151
|
join(homedir(), ".gemini", "antigravity-cli", "credentials.json"),
|
|
204
|
-
GEMINI_OAUTH_PATH,
|
|
205
152
|
];
|
|
206
153
|
export const ANTIGRAVITY_KEYCHAIN_SERVICE = "gemini";
|
|
207
154
|
export const ANTIGRAVITY_KEYCHAIN_ACCOUNT = "antigravity";
|
|
@@ -211,122 +158,29 @@ export const ANTIGRAVITY_SETTINGS_PATH = join(
|
|
|
211
158
|
"antigravity-cli",
|
|
212
159
|
"settings.json",
|
|
213
160
|
);
|
|
214
|
-
|
|
215
|
-
// /usage 실측 (2026-05-22): Gemini 4개 모델이 동일 reset window 공유 (family-pool).
|
|
216
|
-
// Claude/GPT-OSS family는 Gemini와 별도 quota 윈도우.
|
|
217
|
-
export const ANTIGRAVITY_MODEL_ABBREV = {
|
|
218
|
-
// Gemini family — 통합 quota. 3.6+ Flash 는 세대 숫자 + 등급으로 구분한다.
|
|
219
|
-
"Gemini 3.8 Flash (High)": "8h",
|
|
220
|
-
"Gemini 3.8 Flash (Medium)": "8m",
|
|
221
|
-
"Gemini 3.8 Flash (Low)": "8l",
|
|
222
|
-
"Gemini 3.7 Flash (High)": "7h",
|
|
223
|
-
"Gemini 3.7 Flash (Medium)": "7m",
|
|
224
|
-
"Gemini 3.7 Flash (Low)": "7l",
|
|
225
|
-
"Gemini 3.6 Flash (High)": "6h",
|
|
226
|
-
"Gemini 3.6 Flash (Medium)": "6m",
|
|
227
|
-
"Gemini 3.6 Flash (Low)": "6l",
|
|
228
|
-
"Gemini 3.5 Flash (High)": "Fh",
|
|
229
|
-
"Gemini 3.5 Flash (Medium)": "Fm",
|
|
230
|
-
"Gemini 3.5 Flash (Low)": "Fl",
|
|
231
|
-
"Gemini 3.1 Pro (High)": "Ph",
|
|
232
|
-
"Gemini 3.1 Pro (Low)": "Pl",
|
|
233
|
-
"Gemini 3 Flash": "F3",
|
|
234
|
-
// Claude family — 각자 별도 quota
|
|
235
|
-
"Claude Sonnet 4.6 (Thinking)": "Cs",
|
|
236
|
-
"Claude Opus 4.6 (Thinking)": "Co",
|
|
237
|
-
// GPT-OSS family — 각자 별도 quota
|
|
238
|
-
"GPT-OSS 120B (Medium)": "Go",
|
|
239
|
-
};
|
|
240
|
-
export const GEMINI_QUOTA_CACHE_PATH = join(
|
|
241
|
-
homedir(),
|
|
242
|
-
".claude",
|
|
243
|
-
"cache",
|
|
244
|
-
"gemini-quota-cache.json",
|
|
245
|
-
);
|
|
246
|
-
export const GEMINI_PROJECT_CACHE_PATH = join(
|
|
247
|
-
homedir(),
|
|
248
|
-
".claude",
|
|
249
|
-
"cache",
|
|
250
|
-
"gemini-project-id.json",
|
|
251
|
-
);
|
|
252
|
-
export const GEMINI_SESSION_CACHE_PATH = join(
|
|
253
|
-
homedir(),
|
|
254
|
-
".claude",
|
|
255
|
-
"cache",
|
|
256
|
-
"gemini-session-cache.json",
|
|
257
|
-
);
|
|
258
|
-
export const TFX_PREFLIGHT_CACHE_PATH = join(
|
|
161
|
+
export const ANTIGRAVITY_QUOTA_CACHE_PATH = join(
|
|
259
162
|
homedir(),
|
|
260
163
|
".claude",
|
|
261
164
|
"cache",
|
|
262
|
-
"
|
|
165
|
+
"antigravity-quota-cache.json",
|
|
263
166
|
);
|
|
264
|
-
export const
|
|
265
|
-
export const GEMINI_RPM_TRACKER_PATH = join(
|
|
167
|
+
export const ANTIGRAVITY_REFRESH_LOCK_PATH = join(
|
|
266
168
|
homedir(),
|
|
267
169
|
".claude",
|
|
268
170
|
"cache",
|
|
269
|
-
"
|
|
270
|
-
);
|
|
271
|
-
// 이전 .omc/ 경로 fallback (기존 환경 호환)
|
|
272
|
-
export const LEGACY_GEMINI_QUOTA_CACHE = join(
|
|
273
|
-
homedir(),
|
|
274
|
-
".omc",
|
|
275
|
-
"state",
|
|
276
|
-
"gemini_quota_cache.json",
|
|
277
|
-
);
|
|
278
|
-
export const LEGACY_GEMINI_PROJECT_CACHE = join(
|
|
279
|
-
homedir(),
|
|
280
|
-
".omc",
|
|
281
|
-
"state",
|
|
282
|
-
"gemini_project_id.json",
|
|
283
|
-
);
|
|
284
|
-
export const LEGACY_GEMINI_SESSION_CACHE = join(
|
|
285
|
-
homedir(),
|
|
286
|
-
".omc",
|
|
287
|
-
"state",
|
|
288
|
-
"gemini_session_tokens_cache.json",
|
|
171
|
+
".antigravity-refresh-lock",
|
|
289
172
|
);
|
|
290
|
-
export const
|
|
291
|
-
|
|
292
|
-
".omc",
|
|
293
|
-
"state",
|
|
294
|
-
"gemini_rpm_tracker.json",
|
|
295
|
-
);
|
|
296
|
-
|
|
297
|
-
export const GEMINI_RPM_WINDOW_MS = 60 * 1000; // 60초 슬라이딩 윈도우
|
|
298
|
-
export const GEMINI_QUOTA_STALE_MS = 5 * 60 * 1000; // 5분
|
|
299
|
-
export const GEMINI_SESSION_STALE_MS = 30 * 1000; // 30초
|
|
300
|
-
export const GEMINI_API_TIMEOUT_MS = 3000; // 3초
|
|
301
|
-
|
|
173
|
+
export const ANTIGRAVITY_QUOTA_STALE_MS = 5 * 60 * 1000;
|
|
174
|
+
export const ANTIGRAVITY_REFRESH_FLAG = "--refresh-antigravity-quota";
|
|
302
175
|
export const ACCOUNT_LABEL_WIDTH = 10;
|
|
303
176
|
export const PROVIDER_PREFIX_WIDTH = 2;
|
|
304
|
-
export const PERCENT_CELL_WIDTH =
|
|
177
|
+
export const PERCENT_CELL_WIDTH = 4;
|
|
305
178
|
export const TIME_CELL_INNER_WIDTH = 6;
|
|
306
179
|
|
|
307
180
|
export const CLAUDE_REFRESH_FLAG = "--refresh-claude-usage";
|
|
308
181
|
export const CODEX_REFRESH_FLAG = "--refresh-codex-rate-limits";
|
|
309
|
-
export const GEMINI_REFRESH_FLAG = "--refresh-gemini-quota";
|
|
310
|
-
export const GEMINI_SESSION_REFRESH_FLAG = "--refresh-gemini-session";
|
|
311
182
|
|
|
312
183
|
// 모바일/Termux 컴팩트 모드 감지
|
|
313
184
|
export const HUD_CONFIG_PATH = join(homedir(), ".omc", "config", "hud.json");
|
|
314
185
|
export const COMPACT_COLS_THRESHOLD = 80;
|
|
315
186
|
export const MINIMAL_COLS_THRESHOLD = 60;
|
|
316
|
-
|
|
317
|
-
// rows 임계값 상수 (selectTier 에서 tier 결정에 사용)
|
|
318
|
-
export const ROWS_BUDGET_FULL = 40;
|
|
319
|
-
export const ROWS_BUDGET_LARGE = 35;
|
|
320
|
-
export const ROWS_BUDGET_MEDIUM = 28;
|
|
321
|
-
export const ROWS_BUDGET_SMALL = 22;
|
|
322
|
-
|
|
323
|
-
// Gemini Pro 풀 공유 그룹: 같은 remainingFraction을 공유하는 모델 ID들
|
|
324
|
-
export const GEMINI_PRO_POOL = new Set([
|
|
325
|
-
"gemini-2.5-pro",
|
|
326
|
-
"gemini-3-pro-preview",
|
|
327
|
-
"gemini-3.1-pro-preview",
|
|
328
|
-
]);
|
|
329
|
-
export const GEMINI_FLASH_POOL = new Set([
|
|
330
|
-
"gemini-2.5-flash",
|
|
331
|
-
"gemini-3-flash-preview",
|
|
332
|
-
]);
|
package/hud/context-monitor.mjs
CHANGED
|
@@ -4,60 +4,15 @@ import { dirname, join } from "node:path";
|
|
|
4
4
|
|
|
5
5
|
import {
|
|
6
6
|
CONTEXT_MONITOR_CACHE_PATH,
|
|
7
|
-
CONTEXT_MONITOR_LEGACY_PATH,
|
|
8
7
|
CONTEXT_MONITOR_LOG_DIR,
|
|
9
8
|
} from "./constants.mjs";
|
|
10
|
-
import { clampPercent, formatTokenCount
|
|
9
|
+
import { clampPercent, formatTokenCount } from "./utils.mjs";
|
|
11
10
|
|
|
12
11
|
const DEFAULT_CONTEXT_LIMIT = 200_000;
|
|
13
12
|
const MILLION_CONTEXT_LIMIT = 1_000_000;
|
|
14
13
|
const MAX_CAPTURE_BYTES = 256 * 1024;
|
|
15
14
|
const MAX_TOP_KEYS = 20;
|
|
16
15
|
|
|
17
|
-
// stdin 이 context_window_size 를 제공하지 않을 때 모델 ID 로 한도를 추정한다.
|
|
18
|
-
// Anthropic 공식 문서(2026-09-30 기준): Opus 4.6 이상, Sonnet 4.6/5/5.5,
|
|
19
|
-
// Fable 5/5.1 = 1M. Sonnet 4.5 / Haiku 4.5 = 200K이며 [1m]도 유지한다.
|
|
20
|
-
const MODEL_HINT_1M_PREFIXES = [
|
|
21
|
-
"claude-sonnet-4-6",
|
|
22
|
-
"claude-sonnet-5",
|
|
23
|
-
"claude-fable-5",
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
function normalizeModelId(modelId) {
|
|
27
|
-
if (!modelId) return "";
|
|
28
|
-
return String(modelId).toLowerCase();
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function isMillionContextOpusModel(modelId) {
|
|
32
|
-
const match = /^claude-opus-(\d+)(?:-(\d+))?(?:$|[-[\s])/u.exec(modelId);
|
|
33
|
-
if (!match) return false;
|
|
34
|
-
|
|
35
|
-
const major = Number(match[1]);
|
|
36
|
-
const minor = Number(match[2] || 0);
|
|
37
|
-
return major > 4 || (major === 4 && minor >= 6);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
function isMillionContextModel(modelId) {
|
|
41
|
-
const id = normalizeModelId(modelId);
|
|
42
|
-
if (!id) return false;
|
|
43
|
-
if (id.includes("[1m]")) return true;
|
|
44
|
-
if (isMillionContextOpusModel(id)) return true;
|
|
45
|
-
return MODEL_HINT_1M_PREFIXES.some((prefix) => id.startsWith(prefix));
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function resolveModelLimit(modelId) {
|
|
49
|
-
return isMillionContextModel(modelId)
|
|
50
|
-
? MILLION_CONTEXT_LIMIT
|
|
51
|
-
: DEFAULT_CONTEXT_LIMIT;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function shouldSuppressInfoOnlyContextStatus(modelId, contextLimit = 0) {
|
|
55
|
-
const explicitLimit = Number(contextLimit);
|
|
56
|
-
return explicitLimit > 0
|
|
57
|
-
? explicitLimit >= MILLION_CONTEXT_LIMIT
|
|
58
|
-
: isMillionContextModel(modelId);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
16
|
const WARNING_LEVELS = Object.freeze({
|
|
62
17
|
ok: { min: 0, message: "" },
|
|
63
18
|
info: { min: 60, message: "컨텍스트 절반 이상 사용" },
|
|
@@ -244,14 +199,6 @@ export function formatContextUsage(usedTokens, limitTokens, percent = null) {
|
|
|
244
199
|
return `${formatTokenCount(used)}/${formatTokenCount(limit)} (${pct}%)`;
|
|
245
200
|
}
|
|
246
201
|
|
|
247
|
-
export function readContextMonitorSnapshot() {
|
|
248
|
-
return readJsonMigrate(
|
|
249
|
-
CONTEXT_MONITOR_CACHE_PATH,
|
|
250
|
-
CONTEXT_MONITOR_LEGACY_PATH,
|
|
251
|
-
null,
|
|
252
|
-
);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
202
|
function getStdinContextUsage(stdin) {
|
|
256
203
|
const limitTokens = Number(stdin?.context_window?.context_window_size || 0);
|
|
257
204
|
const nativePercent = Number(stdin?.context_window?.used_percentage);
|
|
@@ -284,14 +231,7 @@ function getStdinContextUsage(stdin) {
|
|
|
284
231
|
return null;
|
|
285
232
|
}
|
|
286
233
|
|
|
287
|
-
export function
|
|
288
|
-
const explicit = Number(stdin?.context_window?.context_window_size || 0);
|
|
289
|
-
const modelHint = resolveModelLimit(stdin?.model?.id ?? stdin?.model);
|
|
290
|
-
return Math.max(explicit, modelHint);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
export function buildContextUsageView(stdin, snapshot = null) {
|
|
294
|
-
const modelId = stdin?.model?.id ?? stdin?.model;
|
|
234
|
+
export function buildContextUsageView(stdin) {
|
|
295
235
|
const stdinUsage = getStdinContextUsage(stdin);
|
|
296
236
|
if (!stdinUsage) {
|
|
297
237
|
return {
|
|
@@ -312,8 +252,7 @@ export function buildContextUsageView(stdin, snapshot = null) {
|
|
|
312
252
|
|
|
313
253
|
const warning = classifyContextThreshold(percent);
|
|
314
254
|
const showInfoOnlyStatus = !(
|
|
315
|
-
warning.level === "info" &&
|
|
316
|
-
shouldSuppressInfoOnlyContextStatus(modelId, stdinUsage.limitTokens)
|
|
255
|
+
warning.level === "info" && stdinUsage.limitTokens >= MILLION_CONTEXT_LIMIT
|
|
317
256
|
);
|
|
318
257
|
return {
|
|
319
258
|
usedTokens,
|