@cnwenf/occ 2.1.311 → 2.1.313
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/dist/cli.js +175 -38
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
globalThis.MACRO={"VERSION":"2.1.
|
|
2
|
+
globalThis.MACRO={"VERSION":"2.1.313","BINARY_NAME":"occ","BUILD_TIME":"2026-08-26T18:15:46.386Z","FEEDBACK_CHANNEL":"","ISSUES_EXPLAINER":"","NATIVE_PACKAGE_URL":"","PACKAGE_URL":"@cnwenf/occ","VERSION_CHANGELOG":""};
|
|
3
3
|
// @bun
|
|
4
4
|
var __create = Object.create;
|
|
5
5
|
var __getProtoOf = Object.getPrototypeOf;
|
|
@@ -2010,7 +2010,6 @@ __export(exports_state, {
|
|
|
2010
2010
|
setScheduledTasksEnabled: () => setScheduledTasksEnabled,
|
|
2011
2011
|
setQuestionPreviewFormat: () => setQuestionPreviewFormat,
|
|
2012
2012
|
setPromptId: () => setPromptId,
|
|
2013
|
-
setPromptCache1hEligible: () => setPromptCache1hEligible,
|
|
2014
2013
|
setPromptCache1hAllowlist: () => setPromptCache1hAllowlist,
|
|
2015
2014
|
setProjectRoot: () => setProjectRoot,
|
|
2016
2015
|
setOriginalCwd: () => setOriginalCwd,
|
|
@@ -2131,7 +2130,6 @@ __export(exports_state, {
|
|
|
2131
2130
|
getRegisteredHooks: () => getRegisteredHooks,
|
|
2132
2131
|
getQuestionPreviewFormat: () => getQuestionPreviewFormat,
|
|
2133
2132
|
getPromptId: () => getPromptId,
|
|
2134
|
-
getPromptCache1hEligible: () => getPromptCache1hEligible,
|
|
2135
2133
|
getPromptCache1hAllowlist: () => getPromptCache1hAllowlist,
|
|
2136
2134
|
getProjectRoot: () => getProjectRoot,
|
|
2137
2135
|
getPrCounter: () => getPrCounter,
|
|
@@ -2320,7 +2318,6 @@ function getInitialState() {
|
|
|
2320
2318
|
hasDevChannels: false,
|
|
2321
2319
|
sessionProjectDir: null,
|
|
2322
2320
|
promptCache1hAllowlist: null,
|
|
2323
|
-
promptCache1hEligible: null,
|
|
2324
2321
|
afkModeHeaderLatched: null,
|
|
2325
2322
|
fastModeHeaderLatched: null,
|
|
2326
2323
|
cacheEditingHeaderLatched: null,
|
|
@@ -3143,12 +3140,6 @@ function getPromptCache1hAllowlist() {
|
|
|
3143
3140
|
function setPromptCache1hAllowlist(allowlist) {
|
|
3144
3141
|
STATE.promptCache1hAllowlist = allowlist;
|
|
3145
3142
|
}
|
|
3146
|
-
function getPromptCache1hEligible() {
|
|
3147
|
-
return STATE.promptCache1hEligible;
|
|
3148
|
-
}
|
|
3149
|
-
function setPromptCache1hEligible(eligible) {
|
|
3150
|
-
STATE.promptCache1hEligible = eligible;
|
|
3151
|
-
}
|
|
3152
3143
|
function getAfkModeHeaderLatched() {
|
|
3153
3144
|
return STATE.afkModeHeaderLatched;
|
|
3154
3145
|
}
|
|
@@ -59322,7 +59313,39 @@ function hasUnescapedEmptyParens(str) {
|
|
|
59322
59313
|
}
|
|
59323
59314
|
return false;
|
|
59324
59315
|
}
|
|
59325
|
-
function
|
|
59316
|
+
function isOperatorToken(token) {
|
|
59317
|
+
return OPERATOR_TOKEN_RE.test(token);
|
|
59318
|
+
}
|
|
59319
|
+
function hasUnescapedStar(str) {
|
|
59320
|
+
for (let i2 = 0;i2 < str.length; i2++) {
|
|
59321
|
+
if (str[i2] === "*" && !isEscaped(str, i2))
|
|
59322
|
+
return true;
|
|
59323
|
+
}
|
|
59324
|
+
return false;
|
|
59325
|
+
}
|
|
59326
|
+
function wildcardBeforeSubcommand(content) {
|
|
59327
|
+
if (content.endsWith(":*"))
|
|
59328
|
+
return;
|
|
59329
|
+
const tokens = content.trim().split(/\s+/).filter(Boolean);
|
|
59330
|
+
const first = tokens[0];
|
|
59331
|
+
if (tokens.length < 3 || first === undefined || hasUnescapedStar(first)) {
|
|
59332
|
+
return;
|
|
59333
|
+
}
|
|
59334
|
+
let sawWildcard = false;
|
|
59335
|
+
for (const token of tokens.slice(1)) {
|
|
59336
|
+
if (isOperatorToken(token))
|
|
59337
|
+
return;
|
|
59338
|
+
if (hasUnescapedStar(token)) {
|
|
59339
|
+
sawWildcard = true;
|
|
59340
|
+
continue;
|
|
59341
|
+
}
|
|
59342
|
+
if (token.startsWith("-"))
|
|
59343
|
+
continue;
|
|
59344
|
+
return sawWildcard ? first : undefined;
|
|
59345
|
+
}
|
|
59346
|
+
return;
|
|
59347
|
+
}
|
|
59348
|
+
function validatePermissionRule(rule, behavior) {
|
|
59326
59349
|
if (!rule || rule.trim() === "") {
|
|
59327
59350
|
return { valid: false, error: "Permission rule cannot be empty" };
|
|
59328
59351
|
}
|
|
@@ -59406,6 +59429,18 @@ function validatePermissionRule(rule) {
|
|
|
59406
59429
|
examples: ["Bash(npm:*)", "Bash(git:*)"]
|
|
59407
59430
|
};
|
|
59408
59431
|
}
|
|
59432
|
+
if (behavior === "allow") {
|
|
59433
|
+
const flaggedCommand = wildcardBeforeSubcommand(content);
|
|
59434
|
+
if (flaggedCommand !== undefined) {
|
|
59435
|
+
const isGit = flaggedCommand === "git";
|
|
59436
|
+
const gitNote = isGit ? " For git, options such as -c and --exec-path can run arbitrary commands." : "";
|
|
59437
|
+
const gitExample = isGit ? " (for example Bash(git status *))" : "";
|
|
59438
|
+
return {
|
|
59439
|
+
valid: true,
|
|
59440
|
+
warning: `${permissionRuleValueToString(parsed)} has a wildcard before the rest of the command, so it also matches any options inserted at that position and approves them without a prompt.${gitNote} Replace that * with the exact value you mean, or only use * after the subcommand${gitExample}.`
|
|
59441
|
+
};
|
|
59442
|
+
}
|
|
59443
|
+
}
|
|
59409
59444
|
}
|
|
59410
59445
|
if (isFilePatternTool(parsed.toolName) && parsed.ruleContent !== undefined) {
|
|
59411
59446
|
const content = parsed.ruleContent;
|
|
@@ -59445,13 +59480,14 @@ function validatePermissionRule(rule) {
|
|
|
59445
59480
|
}
|
|
59446
59481
|
return { valid: true };
|
|
59447
59482
|
}
|
|
59448
|
-
var PermissionRuleSchema;
|
|
59483
|
+
var OPERATOR_TOKEN_RE, PermissionRuleSchema;
|
|
59449
59484
|
var init_permissionValidation = __esm(() => {
|
|
59450
59485
|
init_v4();
|
|
59451
59486
|
init_mcpStringUtils();
|
|
59452
59487
|
init_permissionRuleParser();
|
|
59453
59488
|
init_stringUtils();
|
|
59454
59489
|
init_toolValidationConfig();
|
|
59490
|
+
OPERATOR_TOKEN_RE = /^(?:[|&;<>]|\d+[<>])/;
|
|
59455
59491
|
PermissionRuleSchema = lazySchema(() => exports_external.string().superRefine((val, ctx) => {
|
|
59456
59492
|
const result = validatePermissionRule(val);
|
|
59457
59493
|
if (!result.valid) {
|
|
@@ -59647,6 +59683,8 @@ var init_types2 = __esm(() => {
|
|
|
59647
59683
|
}).optional().describe("Override spinner tips. tips: array of tip strings. excludeDefault: if true, only show custom tips (default: false)."),
|
|
59648
59684
|
syntaxHighlightingDisabled: exports_external.boolean().optional().describe("Whether to disable syntax highlighting in diffs"),
|
|
59649
59685
|
terminalTitleFromRename: exports_external.boolean().optional().describe("Whether /rename updates the terminal tab title (defaults to true). Set to false to keep auto-generated topic titles."),
|
|
59686
|
+
promptCacheTtl: exports_external.enum(["5m", "1h"]).optional().catch(undefined).describe('Prompt cache TTL for the main conversation (interactive, -p and SDK turns, plus the helpers that run inline with it): "5m" or "1h". Unset = automatic: 1 hour on a Claude subscription within its usage limits, 5 minutes on an API key, Bedrock, Vertex or Foundry. 1-hour cache writes are billed at a higher rate; the cache stays warm across longer breaks. The CLAUDE_CODE_PROMPT_CACHE_TTL environment variable takes precedence.'),
|
|
59687
|
+
subagentPromptCacheTtl: exports_external.enum(["5m", "1h"]).optional().catch(undefined).describe('Prompt cache TTL for everything outside the main conversation \u2014 subagents, workflows, background and helper requests: "5m" or "1h". Unset = automatic (5 minutes unless ENABLE_PROMPT_CACHING_1H=1). The CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL environment variable takes precedence.'),
|
|
59650
59688
|
autoScrollEnabled: exports_external.boolean().optional().describe("Whether the conversation auto-scrolls to the bottom on new output in fullscreen mode (defaults to true). Set to false to keep the scroll position stable."),
|
|
59651
59689
|
tui: exports_external.enum(["default", "fullscreen"]).optional().describe('Terminal UI renderer. "fullscreen" uses the flicker-free alt-screen renderer with virtualized scrollback (equivalent to CLAUDE_CODE_NO_FLICKER=1). "default" uses the classic main-screen renderer.'),
|
|
59652
59690
|
axScreenReader: exports_external.boolean().optional().describe("Render screen-reader friendly output (flat text, no decorative borders or animations). Overridden by the CLAUDE_AX_SCREEN_READER env var and the --ax-screen-reader CLI flag."),
|
|
@@ -100362,6 +100400,7 @@ __export(exports_betas, {
|
|
|
100362
100400
|
PROMPT_CACHING_SCOPE_BETA_HEADER: () => PROMPT_CACHING_SCOPE_BETA_HEADER,
|
|
100363
100401
|
INTERLEAVED_THINKING_BETA_HEADER: () => INTERLEAVED_THINKING_BETA_HEADER,
|
|
100364
100402
|
FAST_MODE_BETA_HEADER: () => FAST_MODE_BETA_HEADER,
|
|
100403
|
+
EXTENDED_CACHE_TTL_BETA_HEADER: () => EXTENDED_CACHE_TTL_BETA_HEADER,
|
|
100365
100404
|
EFFORT_BETA_HEADER: () => EFFORT_BETA_HEADER,
|
|
100366
100405
|
CONTEXT_MANAGEMENT_BETA_HEADER: () => CONTEXT_MANAGEMENT_BETA_HEADER,
|
|
100367
100406
|
CONTEXT_1M_BETA_HEADER: () => CONTEXT_1M_BETA_HEADER,
|
|
@@ -100372,7 +100411,7 @@ __export(exports_betas, {
|
|
|
100372
100411
|
AFK_MODE_BETA_HEADER: () => AFK_MODE_BETA_HEADER,
|
|
100373
100412
|
ADVISOR_BETA_HEADER: () => ADVISOR_BETA_HEADER
|
|
100374
100413
|
});
|
|
100375
|
-
var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219", INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14", CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07", CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27", STRUCTURED_OUTPUTS_BETA_HEADER = "structured-outputs-2025-12-15", WEB_SEARCH_BETA_HEADER = "web-search-2025-03-05", TOOL_SEARCH_BETA_HEADER_1P = "advanced-tool-use-2025-11-20", TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19", EFFORT_BETA_HEADER = "effort-2025-11-24", TASK_BUDGETS_BETA_HEADER = "task-budgets-2026-03-13", PROMPT_CACHING_SCOPE_BETA_HEADER = "prompt-caching-scope-2026-01-05", FAST_MODE_BETA_HEADER = "fast-mode-2026-02-01", REDACT_THINKING_BETA_HEADER = "redact-thinking-2026-02-12", TOKEN_EFFICIENT_TOOLS_BETA_HEADER = "token-efficient-tools-2026-03-28", SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER, AFK_MODE_BETA_HEADER, CLI_INTERNAL_BETA_HEADER, ADVISOR_BETA_HEADER = "advisor-tool-2026-03-01", BEDROCK_EXTRA_PARAMS_HEADERS, VERTEX_COUNT_TOKENS_ALLOWED_BETAS, CACHE_EDITING_BETA_HEADER = "";
|
|
100414
|
+
var CLAUDE_CODE_20250219_BETA_HEADER = "claude-code-20250219", INTERLEAVED_THINKING_BETA_HEADER = "interleaved-thinking-2025-05-14", CONTEXT_1M_BETA_HEADER = "context-1m-2025-08-07", CONTEXT_MANAGEMENT_BETA_HEADER = "context-management-2025-06-27", STRUCTURED_OUTPUTS_BETA_HEADER = "structured-outputs-2025-12-15", WEB_SEARCH_BETA_HEADER = "web-search-2025-03-05", TOOL_SEARCH_BETA_HEADER_1P = "advanced-tool-use-2025-11-20", TOOL_SEARCH_BETA_HEADER_3P = "tool-search-tool-2025-10-19", EFFORT_BETA_HEADER = "effort-2025-11-24", TASK_BUDGETS_BETA_HEADER = "task-budgets-2026-03-13", PROMPT_CACHING_SCOPE_BETA_HEADER = "prompt-caching-scope-2026-01-05", EXTENDED_CACHE_TTL_BETA_HEADER = "extended-cache-ttl-2025-04-11", FAST_MODE_BETA_HEADER = "fast-mode-2026-02-01", REDACT_THINKING_BETA_HEADER = "redact-thinking-2026-02-12", TOKEN_EFFICIENT_TOOLS_BETA_HEADER = "token-efficient-tools-2026-03-28", SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER, AFK_MODE_BETA_HEADER, CLI_INTERNAL_BETA_HEADER, ADVISOR_BETA_HEADER = "advisor-tool-2026-03-01", BEDROCK_EXTRA_PARAMS_HEADERS, VERTEX_COUNT_TOKENS_ALLOWED_BETAS, CACHE_EDITING_BETA_HEADER = "";
|
|
100376
100415
|
var init_betas = __esm(() => {
|
|
100377
100416
|
init_featureFlags();
|
|
100378
100417
|
SUMMARIZE_CONNECTOR_TEXT_BETA_HEADER = feature("CONNECTOR_TEXT") ? "summarize-connector-text-2026-03-13" : "";
|
|
@@ -100850,13 +100889,28 @@ function formatPrice(price) {
|
|
|
100850
100889
|
function formatModelPricing(costs) {
|
|
100851
100890
|
return `${formatPrice(costs.inputTokens)}/${formatPrice(costs.outputTokens)} per Mtok`;
|
|
100852
100891
|
}
|
|
100853
|
-
|
|
100892
|
+
function getModelPricingString(model) {
|
|
100893
|
+
const shortName = getCanonicalName(model);
|
|
100894
|
+
const costs = MODEL_COSTS[shortName];
|
|
100895
|
+
if (!costs)
|
|
100896
|
+
return;
|
|
100897
|
+
return formatModelPricing(costs);
|
|
100898
|
+
}
|
|
100899
|
+
var COST_TIER_2_10, COST_TIER_3_15, COST_TIER_15_75, COST_TIER_5_25, COST_TIER_30_150, COST_TIER_10_50, COST_HAIKU_35, COST_HAIKU_45, DEFAULT_UNKNOWN_MODEL_COST, MODEL_COSTS;
|
|
100854
100900
|
var init_modelCost = __esm(() => {
|
|
100855
100901
|
init_analytics();
|
|
100856
100902
|
init_state();
|
|
100857
100903
|
init_fastMode();
|
|
100858
100904
|
init_configs();
|
|
100859
100905
|
init_model();
|
|
100906
|
+
COST_TIER_2_10 = {
|
|
100907
|
+
inputTokens: 2,
|
|
100908
|
+
outputTokens: 10,
|
|
100909
|
+
promptCacheWriteTokens: 2.5,
|
|
100910
|
+
promptCacheWrite1hTokens: 4,
|
|
100911
|
+
promptCacheReadTokens: 0.2,
|
|
100912
|
+
webSearchRequests: 0.01
|
|
100913
|
+
};
|
|
100860
100914
|
COST_TIER_3_15 = {
|
|
100861
100915
|
inputTokens: 3,
|
|
100862
100916
|
outputTokens: 15,
|
|
@@ -100922,6 +100976,7 @@ var init_modelCost = __esm(() => {
|
|
|
100922
100976
|
[firstPartyNameToCanonical(CLAUDE_SONNET_4_CONFIG.firstParty)]: COST_TIER_3_15,
|
|
100923
100977
|
[firstPartyNameToCanonical(CLAUDE_SONNET_4_5_CONFIG.firstParty)]: COST_TIER_3_15,
|
|
100924
100978
|
[firstPartyNameToCanonical(CLAUDE_SONNET_4_6_CONFIG.firstParty)]: COST_TIER_3_15,
|
|
100979
|
+
[firstPartyNameToCanonical(CLAUDE_SONNET_5_CONFIG.firstParty)]: COST_TIER_2_10,
|
|
100925
100980
|
[firstPartyNameToCanonical(CLAUDE_OPUS_4_CONFIG.firstParty)]: COST_TIER_15_75,
|
|
100926
100981
|
[firstPartyNameToCanonical(CLAUDE_OPUS_4_1_CONFIG.firstParty)]: COST_TIER_15_75,
|
|
100927
100982
|
[firstPartyNameToCanonical(CLAUDE_OPUS_4_5_CONFIG.firstParty)]: COST_TIER_5_25,
|
|
@@ -140249,6 +140304,10 @@ function shouldIncludeFirstPartyOnlyBetas() {
|
|
|
140249
140304
|
function shouldUseGlobalCacheScope() {
|
|
140250
140305
|
return getAPIProvider() === "firstParty" && !isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS);
|
|
140251
140306
|
}
|
|
140307
|
+
function shouldSendExtendedCacheTtlBeta() {
|
|
140308
|
+
const provider5 = getAPIProvider();
|
|
140309
|
+
return (provider5 === "firstParty" || provider5 === "bedrock" || provider5 === "vertex" || provider5 === "foundry") && !isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS);
|
|
140310
|
+
}
|
|
140252
140311
|
function getMergedBetas(model, options) {
|
|
140253
140312
|
const baseBetas = [...getModelBetas(model)];
|
|
140254
140313
|
if (options?.isAgenticQuery) {
|
|
@@ -385275,6 +385334,35 @@ function hasQuotedBracketCloserInConditional(command4) {
|
|
|
385275
385334
|
}
|
|
385276
385335
|
return false;
|
|
385277
385336
|
}
|
|
385337
|
+
function hasDanglingBooleanOperator(command4) {
|
|
385338
|
+
if (!command4.includes("&&") && !command4.includes("||"))
|
|
385339
|
+
return false;
|
|
385340
|
+
let inSingle = false;
|
|
385341
|
+
let inDouble = false;
|
|
385342
|
+
let lastBoolOpEnd = -1;
|
|
385343
|
+
for (let i6 = 0;i6 < command4.length; i6++) {
|
|
385344
|
+
const ch2 = command4[i6];
|
|
385345
|
+
if (ch2 === "\\" && !inSingle) {
|
|
385346
|
+
i6++;
|
|
385347
|
+
continue;
|
|
385348
|
+
}
|
|
385349
|
+
if (ch2 === "'" && !inDouble) {
|
|
385350
|
+
inSingle = !inSingle;
|
|
385351
|
+
continue;
|
|
385352
|
+
}
|
|
385353
|
+
if (ch2 === '"' && !inSingle) {
|
|
385354
|
+
inDouble = !inDouble;
|
|
385355
|
+
continue;
|
|
385356
|
+
}
|
|
385357
|
+
if (inSingle || inDouble)
|
|
385358
|
+
continue;
|
|
385359
|
+
if (ch2 === "&" && command4[i6 + 1] === "&" || ch2 === "|" && command4[i6 + 1] === "|") {
|
|
385360
|
+
lastBoolOpEnd = i6 + 2;
|
|
385361
|
+
i6++;
|
|
385362
|
+
}
|
|
385363
|
+
}
|
|
385364
|
+
return lastBoolOpEnd !== -1 && command4.slice(lastBoolOpEnd).trim() === "";
|
|
385365
|
+
}
|
|
385278
385366
|
async function bashToolHasPermission(input, context4, getCommandSubcommandPrefixFn = getCommandSubcommandPrefix) {
|
|
385279
385367
|
let appState = context4.getAppState();
|
|
385280
385368
|
{
|
|
@@ -385374,6 +385462,15 @@ async function bashToolHasPermission(input, context4, getCommandSubcommandPrefix
|
|
|
385374
385462
|
};
|
|
385375
385463
|
}
|
|
385376
385464
|
}
|
|
385465
|
+
{
|
|
385466
|
+
const mode = appState.toolPermissionContext.mode;
|
|
385467
|
+
if (mode !== "bypassPermissions" && hasDanglingBooleanOperator(input.command)) {
|
|
385468
|
+
return {
|
|
385469
|
+
behavior: "ask",
|
|
385470
|
+
message: "Malformed command with a dangling && or || operator requires confirmation."
|
|
385471
|
+
};
|
|
385472
|
+
}
|
|
385473
|
+
}
|
|
385377
385474
|
const injectionCheckDisabled = isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_COMMAND_INJECTION_CHECK);
|
|
385378
385475
|
const shadowEnabled = feature("TREE_SITTER_BASH_SHADOW") ? getFeatureValue_CACHED_MAY_BE_STALE("tengu_birch_trellis", true) : false;
|
|
385379
385476
|
let astRoot = injectionCheckDisabled ? null : feature("TREE_SITTER_BASH_SHADOW") && !shadowEnabled ? null : await parseCommandRaw(input.command);
|
|
@@ -579646,13 +579743,22 @@ function getDefaultOptionForUser(fastMode = false) {
|
|
|
579646
579743
|
description: getClaudeAiUserDefaultModelDescription(fastMode)
|
|
579647
579744
|
};
|
|
579648
579745
|
}
|
|
579649
|
-
const
|
|
579746
|
+
const defaultSetting = getDefaultMainLoopModelSetting();
|
|
579650
579747
|
return {
|
|
579651
579748
|
value: null,
|
|
579652
579749
|
label: "Default (recommended)",
|
|
579653
|
-
description: `Use the default model (currently ${renderDefaultModelSetting(
|
|
579750
|
+
description: `Use the default model (currently ${renderDefaultModelSetting(defaultSetting)})${getDefaultOptionSuffix(defaultSetting)}`
|
|
579654
579751
|
};
|
|
579655
579752
|
}
|
|
579753
|
+
function getDefaultOptionSuffix(setting) {
|
|
579754
|
+
if (resolveAnthropicDefaultModel() !== undefined) {
|
|
579755
|
+
return " \xB7 Set by ANTHROPIC_DEFAULT_MODEL";
|
|
579756
|
+
}
|
|
579757
|
+
if (getAPIProvider() !== "firstParty")
|
|
579758
|
+
return "";
|
|
579759
|
+
const pricing = getModelPricingString(parseUserSpecifiedModel(setting));
|
|
579760
|
+
return pricing === undefined ? "" : ` \xB7 ${pricing}`;
|
|
579761
|
+
}
|
|
579656
579762
|
function getOpus5PricingSuffix(fastMode) {
|
|
579657
579763
|
if (getAPIProvider() !== "firstParty")
|
|
579658
579764
|
return "";
|
|
@@ -579665,7 +579771,7 @@ function getSonnet5Option() {
|
|
|
579665
579771
|
return {
|
|
579666
579772
|
value: is3P ? getModelStrings2().sonnet5 : "sonnet",
|
|
579667
579773
|
label: "Sonnet",
|
|
579668
|
-
description: `Sonnet 5 \xB7 Efficient for routine tasks${is3P ? "" : ` \xB7 ${formatModelPricing(
|
|
579774
|
+
description: `Sonnet 5 \xB7 Efficient for routine tasks${is3P ? "" : ` \xB7 ${formatModelPricing(COST_TIER_2_10)}`}`,
|
|
579669
579775
|
descriptionForModel: "Sonnet 5 - efficient for routine tasks. Generally recommended for most coding tasks"
|
|
579670
579776
|
};
|
|
579671
579777
|
}
|
|
@@ -579763,7 +579869,7 @@ function getSonnet5_1MOption() {
|
|
|
579763
579869
|
return {
|
|
579764
579870
|
value: is3P ? getModelStrings2().sonnet5 + "[1m]" : "sonnet[1m]",
|
|
579765
579871
|
label: "Sonnet (1M context)",
|
|
579766
|
-
description: `Sonnet 5 for long sessions${is3P ? "" : ` \xB7 ${formatModelPricing(
|
|
579872
|
+
description: `Sonnet 5 for long sessions${is3P ? "" : ` \xB7 ${formatModelPricing(COST_TIER_2_10)}`}`,
|
|
579767
579873
|
descriptionForModel: "Sonnet 5 with 1M context window - for long sessions with large codebases"
|
|
579768
579874
|
};
|
|
579769
579875
|
}
|
|
@@ -579840,7 +579946,7 @@ function getMaxSonnet5_1MOption() {
|
|
|
579840
579946
|
return {
|
|
579841
579947
|
value: "sonnet[1m]",
|
|
579842
579948
|
label: "Sonnet (1M context)",
|
|
579843
|
-
description: `Sonnet 5 with 1M context${billingInfo}${is3P ? "" : ` \xB7 ${formatModelPricing(
|
|
579949
|
+
description: `Sonnet 5 with 1M context${billingInfo}${is3P ? "" : ` \xB7 ${formatModelPricing(COST_TIER_2_10)}`}`
|
|
579844
579950
|
};
|
|
579845
579951
|
}
|
|
579846
579952
|
function getMaxOpus5_1MOption(fastMode = false) {
|
|
@@ -631206,30 +631312,51 @@ function getCacheControl({
|
|
|
631206
631312
|
...scope === "global" && { scope }
|
|
631207
631313
|
};
|
|
631208
631314
|
}
|
|
631209
|
-
function
|
|
631315
|
+
function querySourceMatchesPatterns(querySource, patterns) {
|
|
631316
|
+
return querySource !== undefined && patterns.some((pattern) => pattern.endsWith("*") ? querySource.startsWith(pattern.slice(0, -1)) : querySource === pattern);
|
|
631317
|
+
}
|
|
631318
|
+
function isMainThreadQuerySource(querySource) {
|
|
631319
|
+
return querySourceMatchesPatterns(querySource, MAIN_THREAD_QUERY_SOURCES);
|
|
631320
|
+
}
|
|
631321
|
+
function parsePromptCacheTtlEnv(value) {
|
|
631322
|
+
return value === "5m" || value === "1h" ? value : undefined;
|
|
631323
|
+
}
|
|
631324
|
+
function resolvePromptCacheTtlOverride(querySource) {
|
|
631210
631325
|
if (isEnvTruthy(process.env.FORCE_PROMPT_CACHING_5M)) {
|
|
631211
|
-
return
|
|
631326
|
+
return { ttl: "5m", reason: "force_5m_env" };
|
|
631212
631327
|
}
|
|
631213
|
-
|
|
631214
|
-
|
|
631215
|
-
|
|
631216
|
-
|
|
631217
|
-
|
|
631328
|
+
const isMainThread = isMainThreadQuerySource(querySource);
|
|
631329
|
+
const envTtl = parsePromptCacheTtlEnv(isMainThread ? process.env.CLAUDE_CODE_PROMPT_CACHE_TTL : process.env.CLAUDE_CODE_SUBAGENT_PROMPT_CACHE_TTL);
|
|
631330
|
+
if (envTtl !== undefined)
|
|
631331
|
+
return { ttl: envTtl, reason: "env" };
|
|
631332
|
+
const settings = getInitialSettings();
|
|
631333
|
+
const settingTtl = isMainThread ? settings.promptCacheTtl : settings.subagentPromptCacheTtl;
|
|
631334
|
+
if (settingTtl !== undefined)
|
|
631335
|
+
return { ttl: settingTtl, reason: "setting" };
|
|
631336
|
+
if (isEnvTruthy(process.env.ENABLE_PROMPT_CACHING_1H) || getAPIProvider() === "bedrock" && isEnvTruthy(process.env.ENABLE_PROMPT_CACHING_1H_BEDROCK)) {
|
|
631337
|
+
return { ttl: "1h", reason: "enable_1h_env" };
|
|
631218
631338
|
}
|
|
631219
|
-
|
|
631220
|
-
|
|
631221
|
-
|
|
631222
|
-
|
|
631339
|
+
return;
|
|
631340
|
+
}
|
|
631341
|
+
function resolvePromptCacheTtl(querySource) {
|
|
631342
|
+
const override = resolvePromptCacheTtlOverride(querySource);
|
|
631343
|
+
if (override !== undefined)
|
|
631344
|
+
return override;
|
|
631345
|
+
if (!isClaudeAISubscriber() || currentLimits.isUsingOverage) {
|
|
631346
|
+
return { ttl: "5m", reason: "default" };
|
|
631223
631347
|
}
|
|
631224
|
-
if (!userEligible)
|
|
631225
|
-
return false;
|
|
631226
631348
|
let allowlist = getPromptCache1hAllowlist();
|
|
631227
631349
|
if (allowlist === null) {
|
|
631228
|
-
const config7 = getFeatureValue_CACHED_MAY_BE_STALE("tengu_prompt_cache_1h_config", {
|
|
631350
|
+
const config7 = getFeatureValue_CACHED_MAY_BE_STALE("tengu_prompt_cache_1h_config", {
|
|
631351
|
+
allowlist: [...MAIN_THREAD_QUERY_SOURCES]
|
|
631352
|
+
});
|
|
631229
631353
|
allowlist = config7.allowlist ?? [];
|
|
631230
631354
|
setPromptCache1hAllowlist(allowlist);
|
|
631231
631355
|
}
|
|
631232
|
-
return querySource
|
|
631356
|
+
return querySourceMatchesPatterns(querySource, allowlist) ? { ttl: "1h", reason: "subscriber" } : { ttl: "5m", reason: "default" };
|
|
631357
|
+
}
|
|
631358
|
+
function should1hCacheTTL(querySource) {
|
|
631359
|
+
return resolvePromptCacheTtl(querySource).ttl === "1h";
|
|
631233
631360
|
}
|
|
631234
631361
|
function configureEffortParams(effortValue, outputConfig, extraBodyParams, betas, model) {
|
|
631235
631362
|
if (!modelSupportsEffort(model) || "effort" in outputConfig) {
|
|
@@ -631592,6 +631719,9 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
|
|
|
631592
631719
|
queryCheckpoint("query_tool_schema_build_start");
|
|
631593
631720
|
const isAgenticQuery = options.querySource.startsWith("repl_main_thread") || options.querySource.startsWith("agent:") || options.querySource === "sdk" || options.querySource === "hook_agent" || options.querySource === "verification_agent";
|
|
631594
631721
|
const betas = getMergedBetas(options.model, { isAgenticQuery });
|
|
631722
|
+
if (should1hCacheTTL(options.querySource) && shouldSendExtendedCacheTtlBeta() && !betas.includes(EXTENDED_CACHE_TTL_BETA_HEADER)) {
|
|
631723
|
+
betas.push(EXTENDED_CACHE_TTL_BETA_HEADER);
|
|
631724
|
+
}
|
|
631595
631725
|
if (isAdvisorEnabled()) {
|
|
631596
631726
|
betas.push(ADVISOR_BETA_HEADER);
|
|
631597
631727
|
}
|
|
@@ -632961,7 +633091,7 @@ function getMaxOutputTokensForModel(model) {
|
|
|
632961
633091
|
const result = validateBoundedIntEnvVar("CLAUDE_CODE_MAX_OUTPUT_TOKENS", process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS, defaultTokens, maxOutputTokens.upperLimit);
|
|
632962
633092
|
return result.effective;
|
|
632963
633093
|
}
|
|
632964
|
-
var autoModeStateModule3, MAX_NON_STREAMING_TOKENS = 64000;
|
|
633094
|
+
var autoModeStateModule3, MAIN_THREAD_QUERY_SOURCES, MAX_NON_STREAMING_TOKENS = 64000;
|
|
632965
633095
|
var init_claude = __esm(() => {
|
|
632966
633096
|
init_providers();
|
|
632967
633097
|
init_system();
|
|
@@ -633004,6 +633134,7 @@ var init_claude = __esm(() => {
|
|
|
633004
633134
|
init_mcpInstructionsDelta();
|
|
633005
633135
|
init_modelCost();
|
|
633006
633136
|
init_queryProfiler();
|
|
633137
|
+
init_settings2();
|
|
633007
633138
|
init_thinking();
|
|
633008
633139
|
init_toolSearch();
|
|
633009
633140
|
init_apiLimits();
|
|
@@ -633030,6 +633161,12 @@ var init_claude = __esm(() => {
|
|
|
633030
633161
|
init_promptCacheBreakDetection();
|
|
633031
633162
|
init_withRetry();
|
|
633032
633163
|
autoModeStateModule3 = feature("TRANSCRIPT_CLASSIFIER") ? __toCommonJS(exports_autoModeState) : null;
|
|
633164
|
+
MAIN_THREAD_QUERY_SOURCES = [
|
|
633165
|
+
"repl_main_thread*",
|
|
633166
|
+
"sdk",
|
|
633167
|
+
"auto_mode",
|
|
633168
|
+
"memdir_relevance"
|
|
633169
|
+
];
|
|
633033
633170
|
});
|
|
633034
633171
|
|
|
633035
633172
|
// src/utils/shell/prefix.ts
|
|
@@ -635493,19 +635630,19 @@ async function initializeToolPermissionContext({
|
|
|
635493
635630
|
}
|
|
635494
635631
|
for (const rule of rulesFromDisk) {
|
|
635495
635632
|
const ruleStr = permissionRuleValueToString(rule.ruleValue);
|
|
635496
|
-
const result = validatePermissionRule(ruleStr);
|
|
635633
|
+
const result = validatePermissionRule(ruleStr, rule.ruleBehavior);
|
|
635497
635634
|
if (result.valid && result.warning) {
|
|
635498
635635
|
warnings.push(`Permission ${rule.ruleBehavior} rule (${formatPermissionSource(rule.source)}): ${result.warning}`);
|
|
635499
635636
|
}
|
|
635500
635637
|
}
|
|
635501
635638
|
for (const ruleStr of parsedAllowedToolsCli) {
|
|
635502
|
-
const result = validatePermissionRule(ruleStr);
|
|
635639
|
+
const result = validatePermissionRule(ruleStr, "allow");
|
|
635503
635640
|
if (result.valid && result.warning) {
|
|
635504
635641
|
warnings.push(`Permission allow rule (--allowed-tools): ${result.warning}`);
|
|
635505
635642
|
}
|
|
635506
635643
|
}
|
|
635507
635644
|
for (const ruleStr of parsedDisallowedToolsCli) {
|
|
635508
|
-
const result = validatePermissionRule(ruleStr);
|
|
635645
|
+
const result = validatePermissionRule(ruleStr, "deny");
|
|
635509
635646
|
if (result.valid && result.warning) {
|
|
635510
635647
|
warnings.push(`Permission deny rule (--disallowed-tools): ${result.warning}`);
|
|
635511
635648
|
}
|