@ainative/cody-cli 0.7.30 → 0.7.32
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/.cody/mcp.json +3 -5
- package/dist/cli.js +632 -498
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -41798,11 +41798,8 @@ var init_lodash = __esm(() => {
|
|
|
41798
41798
|
|
|
41799
41799
|
// src/constants/keys.ts
|
|
41800
41800
|
function getGrowthBookClientKey() {
|
|
41801
|
-
return "sdk-
|
|
41801
|
+
return "sdk-ainative-external";
|
|
41802
41802
|
}
|
|
41803
|
-
var init_keys2 = __esm(() => {
|
|
41804
|
-
init_envUtils();
|
|
41805
|
-
});
|
|
41806
41803
|
|
|
41807
41804
|
// src/constants/oauth.ts
|
|
41808
41805
|
var exports_oauth = {};
|
|
@@ -50974,7 +50971,7 @@ var init_windowsPaths = __esm(() => {
|
|
|
50974
50971
|
if (checkPathExists(process.env.CLAUDE_CODE_GIT_BASH_PATH)) {
|
|
50975
50972
|
return process.env.CLAUDE_CODE_GIT_BASH_PATH;
|
|
50976
50973
|
}
|
|
50977
|
-
console.error(`
|
|
50974
|
+
console.error(`Cody CLI was unable to find CLAUDE_CODE_GIT_BASH_PATH path "${process.env.CLAUDE_CODE_GIT_BASH_PATH}"`);
|
|
50978
50975
|
process.exit(1);
|
|
50979
50976
|
}
|
|
50980
50977
|
const gitPath = findExecutable("git");
|
|
@@ -50984,7 +50981,7 @@ var init_windowsPaths = __esm(() => {
|
|
|
50984
50981
|
return bashPath;
|
|
50985
50982
|
}
|
|
50986
50983
|
}
|
|
50987
|
-
console.error("
|
|
50984
|
+
console.error("Cody CLI on Windows requires git-bash (https://git-scm.com/downloads/win). If installed but not in PATH, set environment variable pointing to your bash.exe, similar to: CLAUDE_CODE_GIT_BASH_PATH=C:\\Program Files\\Git\\bin\\bash.exe");
|
|
50988
50985
|
process.exit(1);
|
|
50989
50986
|
});
|
|
50990
50987
|
windowsPathToPosixPath = memoizeWithLRU((windowsPath) => {
|
|
@@ -53164,7 +53161,7 @@ var GIT_ROOT_NOT_FOUND, findGitRootImpl, findGitRoot, resolveCanonicalRoot, find
|
|
|
53164
53161
|
return getWorktreeCountFromFs();
|
|
53165
53162
|
}, stashToCleanState = async (message) => {
|
|
53166
53163
|
try {
|
|
53167
|
-
const stashMessage = message || `
|
|
53164
|
+
const stashMessage = message || `Cody CLI auto-stash - ${new Date().toISOString()}`;
|
|
53168
53165
|
const { untracked } = await getFileStatus();
|
|
53169
53166
|
if (untracked.length > 0) {
|
|
53170
53167
|
const { code: addCode } = await execFileNoThrow(gitExe(), ["add", ...untracked], { preserveOutputOnError: false });
|
|
@@ -57615,7 +57612,7 @@ var init_types3 = __esm(() => {
|
|
|
57615
57612
|
allow: exports_external.array(PermissionRuleSchema()).optional().describe("List of permission rules for allowed operations"),
|
|
57616
57613
|
deny: exports_external.array(PermissionRuleSchema()).optional().describe("List of permission rules for denied operations"),
|
|
57617
57614
|
ask: exports_external.array(PermissionRuleSchema()).optional().describe("List of permission rules that should always prompt for confirmation"),
|
|
57618
|
-
defaultMode: exports_external.enum(EXTERNAL_PERMISSION_MODES).optional().describe("Default permission mode when
|
|
57615
|
+
defaultMode: exports_external.enum(EXTERNAL_PERMISSION_MODES).optional().describe("Default permission mode when Cody CLI needs access"),
|
|
57619
57616
|
disableBypassPermissionsMode: exports_external.enum(["disable"]).optional().describe("Disable the ability to bypass permission prompts"),
|
|
57620
57617
|
...{},
|
|
57621
57618
|
additionalDirectories: exports_external.array(exports_external.string()).optional().describe("Additional directories to include in the permission scope")
|
|
@@ -57660,7 +57657,7 @@ var init_types3 = __esm(() => {
|
|
|
57660
57657
|
"mcp"
|
|
57661
57658
|
];
|
|
57662
57659
|
SettingsSchema = lazySchema(() => exports_external.object({
|
|
57663
|
-
$schema: exports_external.literal(CLAUDE_CODE_SETTINGS_SCHEMA_URL).optional().describe("JSON Schema reference for
|
|
57660
|
+
$schema: exports_external.literal(CLAUDE_CODE_SETTINGS_SCHEMA_URL).optional().describe("JSON Schema reference for Cody CLI settings"),
|
|
57664
57661
|
apiKeyHelper: exports_external.string().optional().describe("Path to a script that outputs authentication values"),
|
|
57665
57662
|
awsCredentialExport: exports_external.string().optional().describe("Path to a script that exports AWS credentials"),
|
|
57666
57663
|
awsAuthRefresh: exports_external.string().optional().describe("Path to a script that refreshes AWS authentication"),
|
|
@@ -57678,15 +57675,15 @@ var init_types3 = __esm(() => {
|
|
|
57678
57675
|
}).optional().describe("Custom file suggestion configuration for @ mentions"),
|
|
57679
57676
|
respectGitignore: exports_external.boolean().optional().describe("Whether file picker should respect .gitignore files (default: true). " + "Note: .ignore files are always respected."),
|
|
57680
57677
|
cleanupPeriodDays: exports_external.number().nonnegative().int().optional().describe("Number of days to retain chat transcripts (default: 30). Setting to 0 disables session persistence entirely: no transcripts are written and existing transcripts are deleted at startup."),
|
|
57681
|
-
env: EnvironmentVariablesSchema().optional().describe("Environment variables to set for
|
|
57678
|
+
env: EnvironmentVariablesSchema().optional().describe("Environment variables to set for Cody CLI sessions"),
|
|
57682
57679
|
attribution: exports_external.object({
|
|
57683
57680
|
commit: exports_external.string().optional().describe("Attribution text for git commits, including any trailers. " + "Empty string hides attribution."),
|
|
57684
57681
|
pr: exports_external.string().optional().describe("Attribution text for pull request descriptions. " + "Empty string hides attribution.")
|
|
57685
|
-
}).optional().describe("Customize attribution text for commits and PRs. " + "Each field defaults to the standard
|
|
57686
|
-
includeCoAuthoredBy: exports_external.boolean().optional().describe("Deprecated: Use attribution instead. " + "Whether to include
|
|
57682
|
+
}).optional().describe("Customize attribution text for commits and PRs. " + "Each field defaults to the standard Cody CLI attribution if not set."),
|
|
57683
|
+
includeCoAuthoredBy: exports_external.boolean().optional().describe("Deprecated: Use attribution instead. " + "Whether to include Cody's co-authored by attribution in commits and PRs (defaults to true)"),
|
|
57687
57684
|
includeGitInstructions: exports_external.boolean().optional().describe("Include built-in commit and PR workflow instructions in Cody's system prompt (default: true)"),
|
|
57688
57685
|
permissions: PermissionsSchema().optional().describe("Tool usage permissions configuration"),
|
|
57689
|
-
model: exports_external.string().optional().describe("Override the default model used by
|
|
57686
|
+
model: exports_external.string().optional().describe("Override the default model used by Cody CLI"),
|
|
57690
57687
|
availableModels: exports_external.array(exports_external.string()).optional().describe("Allowlist of models that users can select. " + 'Accepts family aliases ("opus" allows any opus version), ' + 'version prefixes ("opus-4-5" allows only that version), ' + "and full model IDs. " + "If undefined, all models are available. If empty array, only the default model is available. " + "Typically set in managed settings by enterprise administrators."),
|
|
57691
57688
|
modelOverrides: exports_external.record(exports_external.string(), exports_external.string()).optional().describe('Override mapping from Anthropic model ID (e.g. "claude-opus-4-6") to provider-specific ' + "model ID (e.g. a Bedrock inference profile ARN). Typically set in managed settings by " + "enterprise administrators."),
|
|
57692
57689
|
enableAllProjectMcpServers: exports_external.boolean().optional().describe("Whether to automatically approve all MCP servers in the project"),
|
|
@@ -57712,7 +57709,7 @@ var init_types3 = __esm(() => {
|
|
|
57712
57709
|
command: exports_external.string(),
|
|
57713
57710
|
padding: exports_external.number().optional()
|
|
57714
57711
|
}).optional().describe("Custom status line display configuration"),
|
|
57715
|
-
enabledPlugins: exports_external.record(exports_external.string(), exports_external.union([exports_external.array(exports_external.string()), exports_external.boolean()
|
|
57712
|
+
enabledPlugins: exports_external.record(exports_external.string(), exports_external.union([exports_external.array(exports_external.string()), exports_external.boolean()])).optional().describe('Enabled plugins using plugin-id@marketplace-id format. Example: { "formatter@anthropic-tools": true }. Also supports extended format with version constraints.'),
|
|
57716
57713
|
extraKnownMarketplaces: exports_external.record(exports_external.string(), ExtraKnownMarketplaceSchema()).check((ctx) => {
|
|
57717
57714
|
for (const [key, entry] of Object.entries(ctx.value)) {
|
|
57718
57715
|
if (entry.source.source === "settings" && entry.source.name !== key) {
|
|
@@ -57727,11 +57724,11 @@ var init_types3 = __esm(() => {
|
|
|
57727
57724
|
}).optional().describe("Additional marketplaces to make available for this repository. Typically used in repository .claude/settings.json to ensure team members have required plugin sources."),
|
|
57728
57725
|
strictKnownMarketplaces: exports_external.array(MarketplaceSourceSchema()).optional().describe("Enterprise strict list of allowed marketplace sources. When set in managed settings, " + "ONLY these exact sources can be added as marketplaces. The check happens BEFORE " + "downloading, so blocked sources never touch the filesystem. " + "Note: this is a policy gate only — it does NOT register marketplaces. " + "To pre-register allowed marketplaces for users, also set extraKnownMarketplaces."),
|
|
57729
57726
|
blockedMarketplaces: exports_external.array(MarketplaceSourceSchema()).optional().describe("Enterprise blocklist of marketplace sources. When set in managed settings, " + "these exact sources are blocked from being added as marketplaces. The check happens BEFORE " + "downloading, so blocked sources never touch the filesystem."),
|
|
57730
|
-
forceLoginMethod: exports_external.enum(["
|
|
57727
|
+
forceLoginMethod: exports_external.enum(["ainative", "console"]).optional().describe('Force a specific login method: "ainative" for AINative subscription, "console" for Console billing'),
|
|
57731
57728
|
forceLoginOrgUUID: exports_external.string().optional().describe("Organization UUID to use for OAuth login"),
|
|
57732
57729
|
otelHeadersHelper: exports_external.string().optional().describe("Path to a script that outputs OpenTelemetry headers"),
|
|
57733
57730
|
outputStyle: exports_external.string().optional().describe("Controls the output style for assistant responses"),
|
|
57734
|
-
language: exports_external.string().optional().describe('Preferred language for
|
|
57731
|
+
language: exports_external.string().optional().describe('Preferred language for Cody responses and voice dictation (e.g., "japanese", "spanish")'),
|
|
57735
57732
|
skipWebFetchPreflight: exports_external.boolean().optional().describe("Skip the WebFetch blocklist check for enterprise environments with restrictive security policies"),
|
|
57736
57733
|
sandbox: SandboxSettingsSchema().optional(),
|
|
57737
57734
|
feedbackSurveyRate: exports_external.number().min(0).max(1).optional().describe("Probability (0–1) that the session quality survey appears when eligible. 0.05 is a reasonable starting point."),
|
|
@@ -57787,7 +57784,7 @@ var init_types3 = __esm(() => {
|
|
|
57787
57784
|
})).optional().describe("Teams/Enterprise allowlist of channel plugins. When set, " + "replaces the default Anthropic allowlist — admins decide which " + "plugins may push inbound messages. Undefined falls back to the default. " + "Requires channelsEnabled: true."),
|
|
57788
57785
|
...{},
|
|
57789
57786
|
prefersReducedMotion: exports_external.boolean().optional().describe("Reduce or disable animations for accessibility (spinner shimmer, flash effects, etc.)"),
|
|
57790
|
-
autoMemoryEnabled: exports_external.boolean().optional().describe("Enable auto-memory for this project. When false,
|
|
57787
|
+
autoMemoryEnabled: exports_external.boolean().optional().describe("Enable auto-memory for this project. When false, Cody will not read from or write to the auto-memory directory."),
|
|
57791
57788
|
autoMemoryDirectory: exports_external.string().optional().describe("Custom directory path for auto-memory storage. Supports ~/ prefix for home directory expansion. Ignored if set in projectSettings (checked-in .claude/settings.json) for security. When unset, defaults to ~/.claude/projects/<sanitized-cwd>/memory/."),
|
|
57792
57789
|
autoDreamEnabled: exports_external.boolean().optional().describe("Enable background memory consolidation (auto-dream). When set, overrides the server-side default."),
|
|
57793
57790
|
showThinkingSummaries: exports_external.boolean().optional().describe("Show thinking summaries in the transcript view (ctrl+o). Default: false."),
|
|
@@ -57835,7 +57832,7 @@ function getValidationTip(context) {
|
|
|
57835
57832
|
}
|
|
57836
57833
|
return tip;
|
|
57837
57834
|
}
|
|
57838
|
-
var DOCUMENTATION_BASE = "https://
|
|
57835
|
+
var DOCUMENTATION_BASE = "https://docs.ainative.studio/cody-cli", TIP_MATCHERS, PATH_DOC_LINKS;
|
|
57839
57836
|
var init_validationTips = __esm(() => {
|
|
57840
57837
|
TIP_MATCHERS = [
|
|
57841
57838
|
{
|
|
@@ -125319,6 +125316,11 @@ var init_mockRateLimits = __esm(() => {
|
|
|
125319
125316
|
});
|
|
125320
125317
|
|
|
125321
125318
|
// src/services/oauth/getOauthProfile.ts
|
|
125319
|
+
function toUuidOrNew(value) {
|
|
125320
|
+
if (value && UUID_REGEX.test(value))
|
|
125321
|
+
return value;
|
|
125322
|
+
return crypto.randomUUID();
|
|
125323
|
+
}
|
|
125322
125324
|
async function getOauthProfileFromApiKey() {
|
|
125323
125325
|
const config2 = getGlobalConfig();
|
|
125324
125326
|
const accountUuid = config2.oauthAccount?.accountUuid;
|
|
@@ -125326,7 +125328,12 @@ async function getOauthProfileFromApiKey() {
|
|
|
125326
125328
|
if (!accountUuid || !apiKey) {
|
|
125327
125329
|
return;
|
|
125328
125330
|
}
|
|
125329
|
-
const
|
|
125331
|
+
const baseUrl = getOauthConfig().BASE_API_URL;
|
|
125332
|
+
const isAINative = baseUrl.includes("ainative.studio");
|
|
125333
|
+
if (isAINative) {
|
|
125334
|
+
return getAINativeProfile(baseUrl, undefined, apiKey);
|
|
125335
|
+
}
|
|
125336
|
+
const endpoint = `${baseUrl}/api/cody/profile`;
|
|
125330
125337
|
try {
|
|
125331
125338
|
const response = await axios_default.get(endpoint, {
|
|
125332
125339
|
headers: {
|
|
@@ -125363,37 +125370,51 @@ async function getOauthProfileFromOauthToken(accessToken) {
|
|
|
125363
125370
|
logError2(error41);
|
|
125364
125371
|
}
|
|
125365
125372
|
}
|
|
125366
|
-
|
|
125367
|
-
|
|
125368
|
-
|
|
125369
|
-
|
|
125373
|
+
function mapAINativeUser(user) {
|
|
125374
|
+
return {
|
|
125375
|
+
account: {
|
|
125376
|
+
uuid: toUuidOrNew(user.id),
|
|
125377
|
+
email: user.email || "",
|
|
125378
|
+
display_name: user.name || undefined,
|
|
125379
|
+
created_at: user.createdAt || new Date().toISOString()
|
|
125380
|
+
},
|
|
125381
|
+
organization: {
|
|
125382
|
+
uuid: toUuidOrNew(user.organizationId),
|
|
125383
|
+
name: user.organization || ""
|
|
125384
|
+
}
|
|
125385
|
+
};
|
|
125386
|
+
}
|
|
125387
|
+
async function getAINativeProfile(baseUrl, accessToken, apiKey) {
|
|
125388
|
+
const url3 = `${baseUrl}/api/v1/auth/me`;
|
|
125389
|
+
const buildHeaders2 = (mode) => {
|
|
125390
|
+
if (mode === "bearer" && accessToken) {
|
|
125391
|
+
return {
|
|
125370
125392
|
Authorization: `Bearer ${accessToken}`,
|
|
125371
125393
|
"Content-Type": "application/json"
|
|
125372
|
-
}
|
|
125394
|
+
};
|
|
125395
|
+
}
|
|
125396
|
+
const headers = { "Content-Type": "application/json" };
|
|
125397
|
+
if (apiKey)
|
|
125398
|
+
headers["x-api-key"] = apiKey;
|
|
125399
|
+
return headers;
|
|
125400
|
+
};
|
|
125401
|
+
const firstMode = accessToken ? "bearer" : "apikey";
|
|
125402
|
+
try {
|
|
125403
|
+
const response = await axios_default.get(url3, {
|
|
125404
|
+
headers: buildHeaders2(firstMode),
|
|
125373
125405
|
timeout: 1e4
|
|
125374
125406
|
});
|
|
125375
125407
|
const user = response.data?.data;
|
|
125376
125408
|
if (!user)
|
|
125377
125409
|
return;
|
|
125378
|
-
return
|
|
125379
|
-
account: {
|
|
125380
|
-
uuid: user.id || crypto.randomUUID(),
|
|
125381
|
-
email: user.email || "",
|
|
125382
|
-
display_name: user.name || undefined,
|
|
125383
|
-
created_at: user.createdAt || new Date().toISOString()
|
|
125384
|
-
},
|
|
125385
|
-
organization: {
|
|
125386
|
-
uuid: user.organizationId || crypto.randomUUID(),
|
|
125387
|
-
name: user.organization || ""
|
|
125388
|
-
}
|
|
125389
|
-
};
|
|
125410
|
+
return mapAINativeUser(user);
|
|
125390
125411
|
} catch (error41) {
|
|
125391
|
-
const
|
|
125392
|
-
if (
|
|
125412
|
+
const fallbackKey = apiKey || process.env.AINATIVE_API_KEY || process.env.ANTHROPIC_API_KEY;
|
|
125413
|
+
if (firstMode === "bearer" && fallbackKey) {
|
|
125393
125414
|
try {
|
|
125394
|
-
const response = await axios_default.get(
|
|
125415
|
+
const response = await axios_default.get(url3, {
|
|
125395
125416
|
headers: {
|
|
125396
|
-
"x-api-key":
|
|
125417
|
+
"x-api-key": fallbackKey,
|
|
125397
125418
|
"Content-Type": "application/json"
|
|
125398
125419
|
},
|
|
125399
125420
|
timeout: 1e4
|
|
@@ -125401,19 +125422,9 @@ async function getAINativeProfile(baseUrl, accessToken) {
|
|
|
125401
125422
|
const user = response.data?.data;
|
|
125402
125423
|
if (!user)
|
|
125403
125424
|
return;
|
|
125404
|
-
return
|
|
125405
|
-
|
|
125406
|
-
|
|
125407
|
-
email: user.email || "",
|
|
125408
|
-
display_name: user.name || undefined,
|
|
125409
|
-
created_at: user.createdAt || new Date().toISOString()
|
|
125410
|
-
},
|
|
125411
|
-
organization: {
|
|
125412
|
-
uuid: user.organizationId || crypto.randomUUID(),
|
|
125413
|
-
name: user.organization || ""
|
|
125414
|
-
}
|
|
125415
|
-
};
|
|
125416
|
-
} catch {
|
|
125425
|
+
return mapAINativeUser(user);
|
|
125426
|
+
} catch (innerError) {
|
|
125427
|
+
logError2(innerError);
|
|
125417
125428
|
logError2(error41);
|
|
125418
125429
|
}
|
|
125419
125430
|
} else {
|
|
@@ -125421,12 +125432,14 @@ async function getAINativeProfile(baseUrl, accessToken) {
|
|
|
125421
125432
|
}
|
|
125422
125433
|
}
|
|
125423
125434
|
}
|
|
125435
|
+
var UUID_REGEX;
|
|
125424
125436
|
var init_getOauthProfile = __esm(() => {
|
|
125425
125437
|
init_axios2();
|
|
125426
125438
|
init_oauth();
|
|
125427
125439
|
init_auth2();
|
|
125428
125440
|
init_config2();
|
|
125429
125441
|
init_log3();
|
|
125442
|
+
UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
125430
125443
|
});
|
|
125431
125444
|
|
|
125432
125445
|
// src/services/oauth/client.ts
|
|
@@ -171946,11 +171959,11 @@ function getAuthTokenSource() {
|
|
|
171946
171959
|
}
|
|
171947
171960
|
const oauthTokens = getClaudeAIOAuthTokens();
|
|
171948
171961
|
if (shouldUseClaudeAIAuth(oauthTokens?.scopes) && oauthTokens?.accessToken) {
|
|
171949
|
-
return { source: "
|
|
171962
|
+
return { source: "ainative", hasToken: true };
|
|
171950
171963
|
}
|
|
171951
171964
|
const baseUrl = process.env.ANTHROPIC_BASE_URL || "";
|
|
171952
171965
|
if (baseUrl.includes("ainative.studio") && oauthTokens?.accessToken) {
|
|
171953
|
-
return { source: "
|
|
171966
|
+
return { source: "ainative", hasToken: true };
|
|
171954
171967
|
}
|
|
171955
171968
|
return { source: "none", hasToken: false };
|
|
171956
171969
|
}
|
|
@@ -172933,14 +172946,14 @@ function getAccountInformation() {
|
|
|
172933
172946
|
if (apiKey) {
|
|
172934
172947
|
accountInfo.apiKeySource = apiKeySource;
|
|
172935
172948
|
}
|
|
172936
|
-
if (authTokenSource === "
|
|
172949
|
+
if (authTokenSource === "ainative" || apiKeySource === "/login managed key") {
|
|
172937
172950
|
const orgName = getOauthAccountInfo()?.organizationName;
|
|
172938
172951
|
if (orgName) {
|
|
172939
172952
|
accountInfo.organization = orgName;
|
|
172940
172953
|
}
|
|
172941
172954
|
}
|
|
172942
172955
|
const email3 = getOauthAccountInfo()?.emailAddress;
|
|
172943
|
-
if ((authTokenSource === "
|
|
172956
|
+
if ((authTokenSource === "ainative" || apiKeySource === "/login managed key") && email3) {
|
|
172944
172957
|
accountInfo.email = email3;
|
|
172945
172958
|
}
|
|
172946
172959
|
return accountInfo;
|
|
@@ -173152,10 +173165,10 @@ function getMCPUserAgent() {
|
|
|
173152
173165
|
parts.push(`client-app/${process.env.CLAUDE_AGENT_SDK_CLIENT_APP}`);
|
|
173153
173166
|
}
|
|
173154
173167
|
const suffix = parts.length > 0 ? ` (${parts.join(", ")})` : "";
|
|
173155
|
-
return `
|
|
173168
|
+
return `cody-cli/${"0.7.15"}${suffix}`;
|
|
173156
173169
|
}
|
|
173157
173170
|
function getWebFetchUserAgent() {
|
|
173158
|
-
return `
|
|
173171
|
+
return `Cody-User (${getCodyUserAgent()}; +https://ainative.studio)`;
|
|
173159
173172
|
}
|
|
173160
173173
|
function getAuthHeaders2() {
|
|
173161
173174
|
if (isClaudeAISubscriber()) {
|
|
@@ -181024,7 +181037,7 @@ var init_metadata = __esm(() => {
|
|
|
181024
181037
|
isClaudeAiAuth: isClaudeAISubscriber(),
|
|
181025
181038
|
version: "0.7.15",
|
|
181026
181039
|
versionBase: getVersionBase(),
|
|
181027
|
-
buildTime: "
|
|
181040
|
+
buildTime: "1777195093",
|
|
181028
181041
|
deploymentEnvironment: env4.detectDeploymentEnvironment(),
|
|
181029
181042
|
...isEnvTruthy(process.env.GITHUB_ACTIONS) && {
|
|
181030
181043
|
githubEventName: process.env.GITHUB_EVENT_NAME,
|
|
@@ -182191,7 +182204,6 @@ var init_growthbook = __esm(() => {
|
|
|
182191
182204
|
init_esm();
|
|
182192
182205
|
init_lodash();
|
|
182193
182206
|
init_state();
|
|
182194
|
-
init_keys2();
|
|
182195
182207
|
init_config2();
|
|
182196
182208
|
init_debug();
|
|
182197
182209
|
init_errors();
|
|
@@ -183211,9 +183223,6 @@ var init_config2 = __esm(() => {
|
|
|
183211
183223
|
|
|
183212
183224
|
// src/services/analytics/datadog.ts
|
|
183213
183225
|
import { createHash as createHash5 } from "crypto";
|
|
183214
|
-
function camelToSnakeCase(str) {
|
|
183215
|
-
return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);
|
|
183216
|
-
}
|
|
183217
183226
|
async function flushLogs() {
|
|
183218
183227
|
if (logBatch.length === 0)
|
|
183219
183228
|
return;
|
|
@@ -183231,14 +183240,6 @@ async function flushLogs() {
|
|
|
183231
183240
|
logError2(error43);
|
|
183232
183241
|
}
|
|
183233
183242
|
}
|
|
183234
|
-
function scheduleFlush() {
|
|
183235
|
-
if (flushTimer)
|
|
183236
|
-
return;
|
|
183237
|
-
flushTimer = setTimeout(() => {
|
|
183238
|
-
flushTimer = null;
|
|
183239
|
-
flushLogs();
|
|
183240
|
-
}, getFlushIntervalMs()).unref();
|
|
183241
|
-
}
|
|
183242
183243
|
async function shutdownDatadog() {
|
|
183243
183244
|
if (flushTimer) {
|
|
183244
183245
|
clearTimeout(flushTimer);
|
|
@@ -183246,87 +183247,7 @@ async function shutdownDatadog() {
|
|
|
183246
183247
|
}
|
|
183247
183248
|
await flushLogs();
|
|
183248
183249
|
}
|
|
183249
|
-
|
|
183250
|
-
if (true) {
|
|
183251
|
-
return;
|
|
183252
|
-
}
|
|
183253
|
-
if (getAPIProvider() !== "firstParty") {
|
|
183254
|
-
return;
|
|
183255
|
-
}
|
|
183256
|
-
let initialized = datadogInitialized;
|
|
183257
|
-
if (initialized === null) {
|
|
183258
|
-
initialized = await initializeDatadog();
|
|
183259
|
-
}
|
|
183260
|
-
if (!initialized || !DATADOG_ALLOWED_EVENTS.has(eventName)) {
|
|
183261
|
-
return;
|
|
183262
|
-
}
|
|
183263
|
-
try {
|
|
183264
|
-
const metadata = await getEventMetadata({
|
|
183265
|
-
model: properties.model,
|
|
183266
|
-
betas: properties.betas
|
|
183267
|
-
});
|
|
183268
|
-
const { envContext, ...restMetadata } = metadata;
|
|
183269
|
-
const allData = {
|
|
183270
|
-
...restMetadata,
|
|
183271
|
-
...envContext,
|
|
183272
|
-
...properties,
|
|
183273
|
-
userBucket: getUserBucket()
|
|
183274
|
-
};
|
|
183275
|
-
if (typeof allData.toolName === "string" && allData.toolName.startsWith("mcp__")) {
|
|
183276
|
-
allData.toolName = "mcp";
|
|
183277
|
-
}
|
|
183278
|
-
if (typeof allData.model === "string") {
|
|
183279
|
-
const shortName = getCanonicalName(allData.model.replace(/\[1m]$/i, ""));
|
|
183280
|
-
allData.model = shortName in MODEL_COSTS ? shortName : "other";
|
|
183281
|
-
}
|
|
183282
|
-
if (typeof allData.version === "string") {
|
|
183283
|
-
allData.version = allData.version.replace(/^(\d+\.\d+\.\d+-dev\.\d{8})\.t\d+\.sha[a-f0-9]+$/, "$1");
|
|
183284
|
-
}
|
|
183285
|
-
if (allData.status !== undefined && allData.status !== null) {
|
|
183286
|
-
const statusCode = String(allData.status);
|
|
183287
|
-
allData.http_status = statusCode;
|
|
183288
|
-
const firstDigit = statusCode.charAt(0);
|
|
183289
|
-
if (firstDigit >= "1" && firstDigit <= "5") {
|
|
183290
|
-
allData.http_status_range = `${firstDigit}xx`;
|
|
183291
|
-
}
|
|
183292
|
-
delete allData.status;
|
|
183293
|
-
}
|
|
183294
|
-
const allDataRecord = allData;
|
|
183295
|
-
const tags = [
|
|
183296
|
-
`event:${eventName}`,
|
|
183297
|
-
...TAG_FIELDS.filter((field) => allDataRecord[field] !== undefined && allDataRecord[field] !== null).map((field) => `${camelToSnakeCase(field)}:${allDataRecord[field]}`)
|
|
183298
|
-
];
|
|
183299
|
-
const log2 = {
|
|
183300
|
-
ddsource: "nodejs",
|
|
183301
|
-
ddtags: tags.join(","),
|
|
183302
|
-
message: eventName,
|
|
183303
|
-
service: "claude-code",
|
|
183304
|
-
hostname: "claude-code",
|
|
183305
|
-
env: "external"
|
|
183306
|
-
};
|
|
183307
|
-
for (const [key, value] of Object.entries(allData)) {
|
|
183308
|
-
if (value !== undefined && value !== null) {
|
|
183309
|
-
log2[camelToSnakeCase(key)] = value;
|
|
183310
|
-
}
|
|
183311
|
-
}
|
|
183312
|
-
logBatch.push(log2);
|
|
183313
|
-
if (logBatch.length >= MAX_BATCH_SIZE) {
|
|
183314
|
-
if (flushTimer) {
|
|
183315
|
-
clearTimeout(flushTimer);
|
|
183316
|
-
flushTimer = null;
|
|
183317
|
-
}
|
|
183318
|
-
flushLogs();
|
|
183319
|
-
} else {
|
|
183320
|
-
scheduleFlush();
|
|
183321
|
-
}
|
|
183322
|
-
} catch (error43) {
|
|
183323
|
-
logError2(error43);
|
|
183324
|
-
}
|
|
183325
|
-
}
|
|
183326
|
-
function getFlushIntervalMs() {
|
|
183327
|
-
return parseInt(process.env.CLAUDE_CODE_DATADOG_FLUSH_INTERVAL_MS || "", 10) || DEFAULT_FLUSH_INTERVAL_MS;
|
|
183328
|
-
}
|
|
183329
|
-
var DATADOG_LOGS_ENDPOINT = "https://http-intake.logs.us5.datadoghq.com/api/v2/logs", DATADOG_CLIENT_TOKEN = "pubbbf48e6d78dae54bceaa4acf463299bf", DEFAULT_FLUSH_INTERVAL_MS = 15000, MAX_BATCH_SIZE = 100, NETWORK_TIMEOUT_MS = 5000, DATADOG_ALLOWED_EVENTS, TAG_FIELDS, logBatch, flushTimer = null, datadogInitialized = null, initializeDatadog, NUM_USER_BUCKETS = 30, getUserBucket;
|
|
183250
|
+
var DATADOG_LOGS_ENDPOINT = "https://http-intake.logs.us5.datadoghq.com/api/v2/logs", DATADOG_CLIENT_TOKEN = "pubbbf48e6d78dae54bceaa4acf463299bf", NETWORK_TIMEOUT_MS = 5000, DATADOG_ALLOWED_EVENTS, logBatch, flushTimer = null, datadogInitialized = null, initializeDatadog, NUM_USER_BUCKETS = 30, getUserBucket;
|
|
183330
183251
|
var init_datadog = __esm(() => {
|
|
183331
183252
|
init_axios2();
|
|
183332
183253
|
init_memoize();
|
|
@@ -183383,24 +183304,6 @@ var init_datadog = __esm(() => {
|
|
|
183383
183304
|
"tengu_team_mem_sync_started",
|
|
183384
183305
|
"tengu_team_mem_entries_capped"
|
|
183385
183306
|
]);
|
|
183386
|
-
TAG_FIELDS = [
|
|
183387
|
-
"arch",
|
|
183388
|
-
"clientType",
|
|
183389
|
-
"errorType",
|
|
183390
|
-
"http_status_range",
|
|
183391
|
-
"http_status",
|
|
183392
|
-
"kairosActive",
|
|
183393
|
-
"model",
|
|
183394
|
-
"platform",
|
|
183395
|
-
"provider",
|
|
183396
|
-
"skillMode",
|
|
183397
|
-
"subscriptionType",
|
|
183398
|
-
"toolName",
|
|
183399
|
-
"userBucket",
|
|
183400
|
-
"userType",
|
|
183401
|
-
"version",
|
|
183402
|
-
"versionBase"
|
|
183403
|
-
];
|
|
183404
183307
|
logBatch = [];
|
|
183405
183308
|
initializeDatadog = memoize_default(async () => {
|
|
183406
183309
|
if (isAnalyticsDisabled()) {
|
|
@@ -183424,50 +183327,28 @@ var init_datadog = __esm(() => {
|
|
|
183424
183327
|
});
|
|
183425
183328
|
|
|
183426
183329
|
// src/services/analytics/sink.ts
|
|
183427
|
-
function shouldTrackDatadog() {
|
|
183428
|
-
if (isSinkKilled("datadog")) {
|
|
183429
|
-
return false;
|
|
183430
|
-
}
|
|
183431
|
-
if (isDatadogGateEnabled !== undefined) {
|
|
183432
|
-
return isDatadogGateEnabled;
|
|
183433
|
-
}
|
|
183434
|
-
try {
|
|
183435
|
-
return checkStatsigFeatureGate_CACHED_MAY_BE_STALE(DATADOG_GATE_NAME);
|
|
183436
|
-
} catch {
|
|
183437
|
-
return false;
|
|
183438
|
-
}
|
|
183439
|
-
}
|
|
183440
183330
|
function logEventImpl(eventName, metadata) {
|
|
183441
183331
|
const sampleResult = shouldSampleEvent(eventName);
|
|
183442
183332
|
if (sampleResult === 0) {
|
|
183443
183333
|
return;
|
|
183444
183334
|
}
|
|
183445
183335
|
const metadataWithSampleRate = sampleResult !== null ? { ...metadata, sample_rate: sampleResult } : metadata;
|
|
183446
|
-
if (shouldTrackDatadog()) {
|
|
183447
|
-
trackDatadogEvent(eventName, stripProtoFields(metadataWithSampleRate));
|
|
183448
|
-
}
|
|
183449
183336
|
logEventTo1P(eventName, metadataWithSampleRate);
|
|
183450
183337
|
}
|
|
183451
183338
|
function logEventAsyncImpl(eventName, metadata) {
|
|
183452
183339
|
logEventImpl(eventName, metadata);
|
|
183453
183340
|
return Promise.resolve();
|
|
183454
183341
|
}
|
|
183455
|
-
function initializeAnalyticsGates() {
|
|
183456
|
-
isDatadogGateEnabled = checkStatsigFeatureGate_CACHED_MAY_BE_STALE(DATADOG_GATE_NAME);
|
|
183457
|
-
}
|
|
183342
|
+
function initializeAnalyticsGates() {}
|
|
183458
183343
|
function initializeAnalyticsSink() {
|
|
183459
183344
|
attachAnalyticsSink({
|
|
183460
183345
|
logEvent: logEventImpl,
|
|
183461
183346
|
logEventAsync: logEventAsyncImpl
|
|
183462
183347
|
});
|
|
183463
183348
|
}
|
|
183464
|
-
var DATADOG_GATE_NAME = "tengu_log_datadog_events", isDatadogGateEnabled = undefined;
|
|
183465
183349
|
var init_sink = __esm(() => {
|
|
183466
|
-
init_datadog();
|
|
183467
183350
|
init_firstPartyEventLogger();
|
|
183468
|
-
init_growthbook();
|
|
183469
183351
|
init_analytics();
|
|
183470
|
-
init_sinkKillswitch();
|
|
183471
183352
|
});
|
|
183472
183353
|
|
|
183473
183354
|
// src/constants/system.ts
|
|
@@ -183518,6 +183399,50 @@ var init_system = __esm(() => {
|
|
|
183518
183399
|
CLI_SYSPROMPT_PREFIXES = new Set(CLI_SYSPROMPT_PREFIX_VALUES);
|
|
183519
183400
|
});
|
|
183520
183401
|
|
|
183402
|
+
// src/utils/model/routing.ts
|
|
183403
|
+
function isClaudeModel(model) {
|
|
183404
|
+
const lower = model.toLowerCase();
|
|
183405
|
+
return CLAUDE_MODEL_PATTERNS.some((p) => lower.includes(p));
|
|
183406
|
+
}
|
|
183407
|
+
function hasDirectAnthropicKey() {
|
|
183408
|
+
return Boolean(process.env.ANTHROPIC_API_KEY);
|
|
183409
|
+
}
|
|
183410
|
+
function getBaseURLForModel(model) {
|
|
183411
|
+
if (isAINativeProvider()) {
|
|
183412
|
+
if (isClaudeModel(model) && hasDirectAnthropicKey()) {
|
|
183413
|
+
return "https://api.anthropic.com";
|
|
183414
|
+
}
|
|
183415
|
+
return "https://api.ainative.studio";
|
|
183416
|
+
}
|
|
183417
|
+
return process.env.ANTHROPIC_BASE_URL || "https://api.ainative.studio";
|
|
183418
|
+
}
|
|
183419
|
+
function getApiKeyForModel(model) {
|
|
183420
|
+
if (isAINativeProvider()) {
|
|
183421
|
+
if (isClaudeModel(model) && hasDirectAnthropicKey()) {
|
|
183422
|
+
return process.env.ANTHROPIC_API_KEY;
|
|
183423
|
+
}
|
|
183424
|
+
const key2 = process.env.AINATIVE_API_KEY || process.env.ANTHROPIC_API_KEY;
|
|
183425
|
+
if (!key2) {
|
|
183426
|
+
throw new Error("No API key found. Set AINATIVE_API_KEY or log in with `cody login`.");
|
|
183427
|
+
}
|
|
183428
|
+
return key2;
|
|
183429
|
+
}
|
|
183430
|
+
const key = process.env.AINATIVE_API_KEY || process.env.ANTHROPIC_API_KEY;
|
|
183431
|
+
if (!key) {
|
|
183432
|
+
throw new Error("No API key found. Set AINATIVE_API_KEY or log in with `cody login`.");
|
|
183433
|
+
}
|
|
183434
|
+
return key;
|
|
183435
|
+
}
|
|
183436
|
+
var CLAUDE_MODEL_PATTERNS;
|
|
183437
|
+
var init_routing = __esm(() => {
|
|
183438
|
+
init_model();
|
|
183439
|
+
CLAUDE_MODEL_PATTERNS = [
|
|
183440
|
+
"claude-",
|
|
183441
|
+
"claude_",
|
|
183442
|
+
"claude/"
|
|
183443
|
+
];
|
|
183444
|
+
});
|
|
183445
|
+
|
|
183521
183446
|
// src/Tool.ts
|
|
183522
183447
|
function filterToolProgressMessages(progressMessagesForMessage) {
|
|
183523
183448
|
return progressMessagesForMessage.filter((msg) => msg.data?.type !== "hook_progress");
|
|
@@ -233428,7 +233353,7 @@ async function loadAgentFromFile(filePath, pluginName, namespace, sourceName, pl
|
|
|
233428
233353
|
}
|
|
233429
233354
|
for (const field of ["permissionMode", "hooks", "mcpServers"]) {
|
|
233430
233355
|
if (frontmatter[field] !== undefined) {
|
|
233431
|
-
logForDebugging(`Plugin agent file ${filePath} sets ${field}, which is ignored for plugin agents. Use .
|
|
233356
|
+
logForDebugging(`Plugin agent file ${filePath} sets ${field}, which is ignored for plugin agents. Use .cody/agents/ for this level of control.`, { level: "warn" });
|
|
233432
233357
|
}
|
|
233433
233358
|
}
|
|
233434
233359
|
const maxTurnsRaw = frontmatter.maxTurns;
|
|
@@ -233746,7 +233671,7 @@ function getFeedbackGuideline() {
|
|
|
233746
233671
|
}
|
|
233747
233672
|
return "- When you cannot find an answer or the feature doesn't exist, direct the user to use /feedback to report a feature request or bug";
|
|
233748
233673
|
}
|
|
233749
|
-
var CLAUDE_CODE_DOCS_MAP_URL = "https://
|
|
233674
|
+
var CLAUDE_CODE_DOCS_MAP_URL = "https://docs.ainative.studio/cody-cli/claude_code_docs_map.md", CDP_DOCS_MAP_URL = "https://platform.claude.com/llms.txt", CLAUDE_CODE_GUIDE_AGENT_TYPE = "claude-code-guide", CLAUDE_CODE_GUIDE_AGENT;
|
|
233750
233675
|
var init_claudeCodeGuideAgent = __esm(() => {
|
|
233751
233676
|
init_prompt2();
|
|
233752
233677
|
init_prompt();
|
|
@@ -250193,7 +250118,7 @@ function getWarningUpsellText(rateLimitType) {
|
|
|
250193
250118
|
return null;
|
|
250194
250119
|
}
|
|
250195
250120
|
if (subscriptionType === "pro" || subscriptionType === "max") {
|
|
250196
|
-
return "/upgrade to keep using
|
|
250121
|
+
return "/upgrade to keep using Cody CLI";
|
|
250197
250122
|
}
|
|
250198
250123
|
}
|
|
250199
250124
|
if (rateLimitType === "overage") {
|
|
@@ -250787,7 +250712,7 @@ function logSuggestionSuppressed(reason, suggestion, promptId, source) {
|
|
|
250787
250712
|
...false
|
|
250788
250713
|
});
|
|
250789
250714
|
}
|
|
250790
|
-
var currentAbortController = null, MAX_PARENT_UNCACHED_TOKENS = 1e4, SUGGESTION_PROMPT = `[SUGGESTION MODE: Suggest what the user might naturally type next into
|
|
250715
|
+
var currentAbortController = null, MAX_PARENT_UNCACHED_TOKENS = 1e4, SUGGESTION_PROMPT = `[SUGGESTION MODE: Suggest what the user might naturally type next into Cody CLI.]
|
|
250791
250716
|
|
|
250792
250717
|
FIRST: Look at the user's recent messages and original request.
|
|
250793
250718
|
|
|
@@ -253991,7 +253916,7 @@ function validateCommandPaths(command, args, cwd2, toolPermissionContext, compou
|
|
|
253991
253916
|
if (validator && !validator(args)) {
|
|
253992
253917
|
return {
|
|
253993
253918
|
behavior: "ask",
|
|
253994
|
-
message: `${command} with flags requires manual approval to ensure path safety. For security,
|
|
253919
|
+
message: `${command} with flags requires manual approval to ensure path safety. For security, Cody CLI cannot automatically validate ${command} commands that use flags, as some flags like --target-directory=PATH can bypass path validation.`,
|
|
253995
253920
|
decisionReason: {
|
|
253996
253921
|
type: "other",
|
|
253997
253922
|
reason: `${command} command with flags requires manual approval`
|
|
@@ -254001,7 +253926,7 @@ function validateCommandPaths(command, args, cwd2, toolPermissionContext, compou
|
|
|
254001
253926
|
if (compoundCommandHasCd && operationType !== "read") {
|
|
254002
253927
|
return {
|
|
254003
253928
|
behavior: "ask",
|
|
254004
|
-
message: `Commands that change directories and perform write operations require explicit approval to ensure paths are evaluated correctly. For security,
|
|
253929
|
+
message: `Commands that change directories and perform write operations require explicit approval to ensure paths are evaluated correctly. For security, Cody CLI cannot automatically determine the final working directory when 'cd' is used in compound commands.`,
|
|
254005
253930
|
decisionReason: {
|
|
254006
253931
|
type: "other",
|
|
254007
253932
|
reason: "Compound command contains cd with write operation - manual approval required to prevent path resolution bypass"
|
|
@@ -254013,7 +253938,7 @@ function validateCommandPaths(command, args, cwd2, toolPermissionContext, compou
|
|
|
254013
253938
|
if (!allowed) {
|
|
254014
253939
|
const workingDirs = Array.from(allWorkingDirectories(toolPermissionContext));
|
|
254015
253940
|
const dirListStr = formatDirectoryList(workingDirs);
|
|
254016
|
-
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${command} in '${resolvedPath}' was blocked. For security,
|
|
253941
|
+
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${command} in '${resolvedPath}' was blocked. For security, Cody CLI may only ${ACTION_VERBS[command]} the allowed working directories for this session: ${dirListStr}.`;
|
|
254017
253942
|
if (decisionReason?.type === "rule") {
|
|
254018
253943
|
return {
|
|
254019
253944
|
behavior: "deny",
|
|
@@ -254138,7 +254063,7 @@ function validateOutputRedirections(redirections, cwd2, toolPermissionContext, c
|
|
|
254138
254063
|
if (compoundCommandHasCd && redirections.length > 0) {
|
|
254139
254064
|
return {
|
|
254140
254065
|
behavior: "ask",
|
|
254141
|
-
message: `Commands that change directories and write via output redirection require explicit approval to ensure paths are evaluated correctly. For security,
|
|
254066
|
+
message: `Commands that change directories and write via output redirection require explicit approval to ensure paths are evaluated correctly. For security, Cody CLI cannot automatically determine the final working directory when 'cd' is used in compound commands.`,
|
|
254142
254067
|
decisionReason: {
|
|
254143
254068
|
type: "other",
|
|
254144
254069
|
reason: "Compound command contains cd with output redirection - manual approval required to prevent path resolution bypass"
|
|
@@ -254153,7 +254078,7 @@ function validateOutputRedirections(redirections, cwd2, toolPermissionContext, c
|
|
|
254153
254078
|
if (!allowed) {
|
|
254154
254079
|
const workingDirs = Array.from(allWorkingDirectories(toolPermissionContext));
|
|
254155
254080
|
const dirListStr = formatDirectoryList(workingDirs);
|
|
254156
|
-
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : decisionReason?.type === "rule" ? `Output redirection to '${resolvedPath}' was blocked by a deny rule.` : `Output redirection to '${resolvedPath}' was blocked. For security,
|
|
254081
|
+
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : decisionReason?.type === "rule" ? `Output redirection to '${resolvedPath}' was blocked by a deny rule.` : `Output redirection to '${resolvedPath}' was blocked. For security, Cody CLI may only write to files in the allowed working directories for this session: ${dirListStr}.`;
|
|
254157
254082
|
if (decisionReason?.type === "rule") {
|
|
254158
254083
|
return {
|
|
254159
254084
|
behavior: "deny",
|
|
@@ -273908,7 +273833,7 @@ function parseMcpConfig(params) {
|
|
|
273908
273833
|
...filePath && { file: filePath },
|
|
273909
273834
|
path: `mcpServers.${name3}`,
|
|
273910
273835
|
message: `Windows requires 'cmd /c' wrapper to execute npx`,
|
|
273911
|
-
suggestion: `Change command to "cmd" with args ["/c", "npx", ...]. See: https://
|
|
273836
|
+
suggestion: `Change command to "cmd" with args ["/c", "npx", ...]. See: https://docs.ainative.studio/cody-cli/mcp#configure-mcp-servers`,
|
|
273912
273837
|
mcpErrorMetadata: {
|
|
273913
273838
|
scope,
|
|
273914
273839
|
serverName: name3,
|
|
@@ -275416,7 +275341,7 @@ async function performMCPOAuthFlow(serverName, serverConfig, onAuthorizationUrl,
|
|
|
275416
275341
|
}
|
|
275417
275342
|
if (code) {
|
|
275418
275343
|
res.writeHead(200, { "Content-Type": "text/html" });
|
|
275419
|
-
res.end(`<h1>Authentication Successful</h1><p>You can close this window. Return to
|
|
275344
|
+
res.end(`<h1>Authentication Successful</h1><p>You can close this window. Return to Cody CLI.</p>`);
|
|
275420
275345
|
cleanup();
|
|
275421
275346
|
resolveOnce(code);
|
|
275422
275347
|
}
|
|
@@ -275582,7 +275507,7 @@ class ClaudeAuthProvider {
|
|
|
275582
275507
|
}
|
|
275583
275508
|
get clientMetadata() {
|
|
275584
275509
|
const metadata = {
|
|
275585
|
-
client_name: `
|
|
275510
|
+
client_name: `Cody CLI (${this.serverName})`,
|
|
275586
275511
|
redirect_uris: [this.redirectUri],
|
|
275587
275512
|
grant_types: ["authorization_code", "refresh_token"],
|
|
275588
275513
|
response_types: ["code"],
|
|
@@ -278159,7 +278084,7 @@ function IdeOnboardingDialog(t0) {
|
|
|
278159
278084
|
t5,
|
|
278160
278085
|
/* @__PURE__ */ jsx_dev_runtime37.jsxDEV(ThemedText, {
|
|
278161
278086
|
children: [
|
|
278162
|
-
"Welcome to
|
|
278087
|
+
"Welcome to Cody CLI for ",
|
|
278163
278088
|
ideName
|
|
278164
278089
|
]
|
|
278165
278090
|
}, undefined, true, undefined, this)
|
|
@@ -283502,7 +283427,7 @@ function handleRemoteAuthFailure(name3, serverRef, transportType) {
|
|
|
283502
283427
|
const label = {
|
|
283503
283428
|
sse: "SSE",
|
|
283504
283429
|
http: "HTTP",
|
|
283505
|
-
"claudeai-proxy": "
|
|
283430
|
+
"claudeai-proxy": "AINative proxy"
|
|
283506
283431
|
};
|
|
283507
283432
|
logMCPDebug(name3, `Authentication required for ${label[transportType]} server`);
|
|
283508
283433
|
setMcpAuthCacheEntry(name3);
|
|
@@ -284288,7 +284213,7 @@ async function setupSdkMcpClients(sdkMcpConfigs, sendMcpMessage) {
|
|
|
284288
284213
|
const transport = new SdkControlClientTransport(name3, sendMcpMessage);
|
|
284289
284214
|
const client4 = new Client({
|
|
284290
284215
|
name: "claude-code",
|
|
284291
|
-
title: "
|
|
284216
|
+
title: "Cody CLI",
|
|
284292
284217
|
version: "0.7.15",
|
|
284293
284218
|
description: "Anthropic's agentic coding tool",
|
|
284294
284219
|
websiteUrl: PRODUCT_URL
|
|
@@ -284642,7 +284567,7 @@ var init_client8 = __esm(() => {
|
|
|
284642
284567
|
}
|
|
284643
284568
|
const client4 = new Client({
|
|
284644
284569
|
name: "claude-code",
|
|
284645
|
-
title: "
|
|
284570
|
+
title: "Cody CLI",
|
|
284646
284571
|
version: "0.7.15",
|
|
284647
284572
|
description: "Anthropic's agentic coding tool",
|
|
284648
284573
|
websiteUrl: PRODUCT_URL
|
|
@@ -285433,7 +285358,7 @@ function hookSourceDescriptionDisplayString(source) {
|
|
|
285433
285358
|
case "sessionHook":
|
|
285434
285359
|
return "Session hooks (in-memory, temporary)";
|
|
285435
285360
|
case "builtinHook":
|
|
285436
|
-
return "Built-in hooks (registered internally by
|
|
285361
|
+
return "Built-in hooks (registered internally by Cody CLI)";
|
|
285437
285362
|
default:
|
|
285438
285363
|
return source;
|
|
285439
285364
|
}
|
|
@@ -292994,7 +292919,7 @@ function ManagedSettingsSecurityDialog(t0) {
|
|
|
292994
292919
|
label: "Yes, I trust these settings",
|
|
292995
292920
|
value: "accept"
|
|
292996
292921
|
}, {
|
|
292997
|
-
label: "No, exit
|
|
292922
|
+
label: "No, exit Cody CLI",
|
|
292998
292923
|
value: "exit"
|
|
292999
292924
|
}];
|
|
293000
292925
|
$3[11] = t15;
|
|
@@ -333884,7 +333809,7 @@ async function installGlobalPackage(specificVersion) {
|
|
|
333884
333809
|
console.error(`
|
|
333885
333810
|
Error: Windows NPM detected in WSL
|
|
333886
333811
|
|
|
333887
|
-
You're running
|
|
333812
|
+
You're running Cody CLI in WSL but using the Windows NPM installation from /mnt/c/.
|
|
333888
333813
|
This configuration is not supported for updates.
|
|
333889
333814
|
|
|
333890
333815
|
To fix this issue:
|
|
@@ -336266,7 +336191,7 @@ function buildAccountProperties() {
|
|
|
336266
336191
|
});
|
|
336267
336192
|
}
|
|
336268
336193
|
if (accountInfo.tokenSource) {
|
|
336269
|
-
const displaySource = isAINativeProvider() && accountInfo.tokenSource === "
|
|
336194
|
+
const displaySource = isAINativeProvider() && accountInfo.tokenSource === "ainative" ? "AINative OAuth" : accountInfo.tokenSource;
|
|
336270
336195
|
properties.push({
|
|
336271
336196
|
label: "Auth token",
|
|
336272
336197
|
value: displaySource
|
|
@@ -336469,9 +336394,14 @@ async function installOAuthTokens(tokens) {
|
|
|
336469
336394
|
organizationUuid: tokens.tokenAccount.organizationUuid
|
|
336470
336395
|
});
|
|
336471
336396
|
} else if (isAINative) {
|
|
336472
|
-
const {
|
|
336397
|
+
const { createHash: createHash15 } = await import("crypto");
|
|
336398
|
+
const existingUuid = getGlobalConfig().oauthAccount?.accountUuid;
|
|
336399
|
+
const stableUuid = existingUuid ?? (() => {
|
|
336400
|
+
const hash2 = createHash15("sha256").update(tokens.accessToken).digest("hex");
|
|
336401
|
+
return `${hash2.slice(0, 8)}-${hash2.slice(8, 12)}-4${hash2.slice(13, 16)}-${(parseInt(hash2[16], 16) & 3 | 8).toString(16)}${hash2.slice(17, 20)}-${hash2.slice(20, 32)}`;
|
|
336402
|
+
})();
|
|
336473
336403
|
storeOAuthAccountInfo({
|
|
336474
|
-
accountUuid:
|
|
336404
|
+
accountUuid: stableUuid,
|
|
336475
336405
|
emailAddress: "",
|
|
336476
336406
|
organizationUuid: undefined
|
|
336477
336407
|
});
|
|
@@ -336484,12 +336414,14 @@ async function installOAuthTokens(tokens) {
|
|
|
336484
336414
|
warning: storageResult.warning
|
|
336485
336415
|
});
|
|
336486
336416
|
}
|
|
336487
|
-
|
|
336417
|
+
if (!isAINative) {
|
|
336418
|
+
await fetchAndStoreUserRoles(tokens.accessToken).catch((err2) => logForDebugging(String(err2), { level: "error" }));
|
|
336419
|
+
}
|
|
336488
336420
|
if (isAINative) {
|
|
336489
336421
|
logForDebugging("[AINative] OAuth login — skipping API key creation, using env API key");
|
|
336490
336422
|
saveGlobalConfig((current) => ({
|
|
336491
336423
|
...current,
|
|
336492
|
-
ainativeSubscriptionCache: {
|
|
336424
|
+
ainativeSubscriptionCache: current.ainativeSubscriptionCache ?? {
|
|
336493
336425
|
planId: "free",
|
|
336494
336426
|
planName: "Free",
|
|
336495
336427
|
status: "active",
|
|
@@ -336497,7 +336429,7 @@ async function installOAuthTokens(tokens) {
|
|
|
336497
336429
|
price: 0,
|
|
336498
336430
|
fetchedAt: Date.now()
|
|
336499
336431
|
},
|
|
336500
|
-
ainativePlanCache: "AINative Free"
|
|
336432
|
+
ainativePlanCache: current.ainativePlanCache ?? "AINative Free"
|
|
336501
336433
|
}));
|
|
336502
336434
|
const envApiKey = process.env.ANTHROPIC_API_KEY || process.env.AINATIVE_API_KEY;
|
|
336503
336435
|
if (envApiKey) {
|
|
@@ -336540,12 +336472,12 @@ async function authLogin({
|
|
|
336540
336472
|
claudeai
|
|
336541
336473
|
}) {
|
|
336542
336474
|
if (useConsole && claudeai) {
|
|
336543
|
-
process.stderr.write(`Error: --console and --claudeai
|
|
336475
|
+
process.stderr.write(`Error: --console and --claudeai are mutually exclusive.
|
|
336544
336476
|
`);
|
|
336545
336477
|
process.exit(1);
|
|
336546
336478
|
}
|
|
336547
336479
|
const settings = getInitialSettings();
|
|
336548
|
-
const loginWithClaudeAi = settings.forceLoginMethod ? settings.forceLoginMethod === "
|
|
336480
|
+
const loginWithClaudeAi = settings.forceLoginMethod ? settings.forceLoginMethod === "ainative" : !useConsole;
|
|
336549
336481
|
const orgUUID = settings.forceLoginOrgUUID;
|
|
336550
336482
|
const envRefreshToken = process.env.CLAUDE_CODE_OAUTH_REFRESH_TOKEN;
|
|
336551
336483
|
if (envRefreshToken) {
|
|
@@ -336636,8 +336568,8 @@ async function authStatus(opts) {
|
|
|
336636
336568
|
let authMethod = "none";
|
|
336637
336569
|
if (using3P) {
|
|
336638
336570
|
authMethod = "third_party";
|
|
336639
|
-
} else if (authTokenSource === "
|
|
336640
|
-
authMethod = "
|
|
336571
|
+
} else if (authTokenSource === "ainative") {
|
|
336572
|
+
authMethod = "ainative";
|
|
336641
336573
|
} else if (authTokenSource === "apiKeyHelper") {
|
|
336642
336574
|
authMethod = "api_key_helper";
|
|
336643
336575
|
} else if (authTokenSource !== "none") {
|
|
@@ -336645,7 +336577,7 @@ async function authStatus(opts) {
|
|
|
336645
336577
|
} else if (apiKeySource === "ANTHROPIC_API_KEY" || hasApiKeyEnvVar) {
|
|
336646
336578
|
authMethod = "api_key";
|
|
336647
336579
|
} else if (apiKeySource === "/login managed key") {
|
|
336648
|
-
authMethod = "
|
|
336580
|
+
authMethod = "ainative";
|
|
336649
336581
|
}
|
|
336650
336582
|
if (opts.text) {
|
|
336651
336583
|
const properties = [
|
|
@@ -336672,7 +336604,7 @@ async function authStatus(opts) {
|
|
|
336672
336604
|
`);
|
|
336673
336605
|
}
|
|
336674
336606
|
if (!loggedIn) {
|
|
336675
|
-
process.stdout.write(`Not logged in. Run
|
|
336607
|
+
process.stdout.write(`Not logged in. Run cody auth login to authenticate.
|
|
336676
336608
|
`);
|
|
336677
336609
|
}
|
|
336678
336610
|
} else {
|
|
@@ -336686,7 +336618,7 @@ async function authStatus(opts) {
|
|
|
336686
336618
|
if (resolvedApiKeySource) {
|
|
336687
336619
|
output.apiKeySource = resolvedApiKeySource;
|
|
336688
336620
|
}
|
|
336689
|
-
if (authMethod === "
|
|
336621
|
+
if (authMethod === "ainative") {
|
|
336690
336622
|
output.email = oauthAccount?.emailAddress ?? null;
|
|
336691
336623
|
output.orgId = oauthAccount?.organizationUuid ?? null;
|
|
336692
336624
|
output.orgName = oauthAccount?.organizationName ?? null;
|
|
@@ -336833,7 +336765,7 @@ async function isAppleTerminalBellDisabled() {
|
|
|
336833
336765
|
return false;
|
|
336834
336766
|
}
|
|
336835
336767
|
}
|
|
336836
|
-
var DEFAULT_TITLE = "
|
|
336768
|
+
var DEFAULT_TITLE = "Cody CLI";
|
|
336837
336769
|
var init_notifier = __esm(() => {
|
|
336838
336770
|
init_config2();
|
|
336839
336771
|
init_env();
|
|
@@ -344234,7 +344166,7 @@ function ConsoleOAuthFlow({
|
|
|
344234
344166
|
const settings = getSettings_DEPRECATED() || {};
|
|
344235
344167
|
const forceLoginMethod = forceLoginMethodProp ?? settings.forceLoginMethod;
|
|
344236
344168
|
const orgUUID = settings.forceLoginOrgUUID;
|
|
344237
|
-
const forcedMethodMessage = forceLoginMethod === "
|
|
344169
|
+
const forcedMethodMessage = forceLoginMethod === "ainative" ? "Login method pre-selected: Subscription Plan (AINative Pro)" : forceLoginMethod === "console" ? "Login method pre-selected: API Usage Billing (AINative Console)" : null;
|
|
344238
344170
|
const terminal = useTerminalNotification();
|
|
344239
344171
|
const [oauthStatus, setOAuthStatus] = import_react59.useState(() => {
|
|
344240
344172
|
if (mode === "setup-token") {
|
|
@@ -344242,7 +344174,7 @@ function ConsoleOAuthFlow({
|
|
|
344242
344174
|
state: "ready_to_start"
|
|
344243
344175
|
};
|
|
344244
344176
|
}
|
|
344245
|
-
if (forceLoginMethod === "
|
|
344177
|
+
if (forceLoginMethod === "ainative" || forceLoginMethod === "console") {
|
|
344246
344178
|
return {
|
|
344247
344179
|
state: "ready_to_start"
|
|
344248
344180
|
};
|
|
@@ -344252,18 +344184,18 @@ function ConsoleOAuthFlow({
|
|
|
344252
344184
|
};
|
|
344253
344185
|
});
|
|
344254
344186
|
const [pastedCode, setPastedCode] = import_react59.useState("");
|
|
344255
|
-
const [
|
|
344256
|
-
const [
|
|
344187
|
+
const [apiKeyInput, setApiKeyInput] = import_react59.useState("");
|
|
344188
|
+
const [apiKeyCursorOffset, setApiKeyCursorOffset] = import_react59.useState(0);
|
|
344257
344189
|
const [cursorOffset, setCursorOffset] = import_react59.useState(0);
|
|
344258
344190
|
const [oauthService] = import_react59.useState(() => new OAuthService);
|
|
344259
344191
|
const [loginWithClaudeAi, setLoginWithClaudeAi] = import_react59.useState(() => {
|
|
344260
|
-
return mode === "setup-token" || forceLoginMethod === "
|
|
344192
|
+
return mode === "setup-token" || forceLoginMethod === "ainative";
|
|
344261
344193
|
});
|
|
344262
344194
|
const [showPastePrompt, setShowPastePrompt] = import_react59.useState(false);
|
|
344263
344195
|
const [urlCopied, setUrlCopied] = import_react59.useState(false);
|
|
344264
344196
|
const textInputColumns = useTerminalSize().columns - PASTE_HERE_MSG.length - 1;
|
|
344265
344197
|
import_react59.useEffect(() => {
|
|
344266
|
-
if (forceLoginMethod === "
|
|
344198
|
+
if (forceLoginMethod === "ainative") {
|
|
344267
344199
|
logEvent("tengu_oauth_claudeai_forced", {});
|
|
344268
344200
|
} else if (forceLoginMethod === "console") {
|
|
344269
344201
|
logEvent("tengu_oauth_console_forced", {});
|
|
@@ -344395,7 +344327,7 @@ function ConsoleOAuthFlow({
|
|
|
344395
344327
|
state: "success"
|
|
344396
344328
|
});
|
|
344397
344329
|
sendNotification({
|
|
344398
|
-
message: "
|
|
344330
|
+
message: "Cody CLI login successful",
|
|
344399
344331
|
notificationType: "auth_success"
|
|
344400
344332
|
}, terminal);
|
|
344401
344333
|
}
|
|
@@ -344531,7 +344463,11 @@ function ConsoleOAuthFlow({
|
|
|
344531
344463
|
textInputColumns,
|
|
344532
344464
|
handleSubmitCode,
|
|
344533
344465
|
setOAuthStatus,
|
|
344534
|
-
setLoginWithClaudeAi
|
|
344466
|
+
setLoginWithClaudeAi,
|
|
344467
|
+
apiKeyInput,
|
|
344468
|
+
setApiKeyInput,
|
|
344469
|
+
apiKeyCursorOffset,
|
|
344470
|
+
setApiKeyCursorOffset
|
|
344535
344471
|
}, undefined, false, undefined, this)
|
|
344536
344472
|
}, undefined, false, undefined, this)
|
|
344537
344473
|
]
|
|
@@ -344552,7 +344488,11 @@ function OAuthStatusMessage(t0) {
|
|
|
344552
344488
|
textInputColumns,
|
|
344553
344489
|
handleSubmitCode,
|
|
344554
344490
|
setOAuthStatus,
|
|
344555
|
-
setLoginWithClaudeAi
|
|
344491
|
+
setLoginWithClaudeAi,
|
|
344492
|
+
apiKeyInput,
|
|
344493
|
+
setApiKeyInput,
|
|
344494
|
+
apiKeyCursorOffset,
|
|
344495
|
+
setApiKeyCursorOffset
|
|
344556
344496
|
} = t0;
|
|
344557
344497
|
switch (oauthStatus.state) {
|
|
344558
344498
|
case "idle": {
|
|
@@ -344592,7 +344532,7 @@ function OAuthStatusMessage(t0) {
|
|
|
344592
344532
|
`
|
|
344593
344533
|
]
|
|
344594
344534
|
}, undefined, true, undefined, this),
|
|
344595
|
-
value: "
|
|
344535
|
+
value: "ainative"
|
|
344596
344536
|
};
|
|
344597
344537
|
$3[3] = t4;
|
|
344598
344538
|
} else {
|
|
@@ -344707,7 +344647,7 @@ function OAuthStatusMessage(t0) {
|
|
|
344707
344647
|
let t3;
|
|
344708
344648
|
if ($3[13] === Symbol.for("react.memo_cache_sentinel")) {
|
|
344709
344649
|
t2 = /* @__PURE__ */ jsx_dev_runtime71.jsxDEV(ThemedText, {
|
|
344710
|
-
children: "
|
|
344650
|
+
children: "Cody CLI supports Amazon Bedrock, Microsoft Foundry, and Vertex AI. Set the required environment variables, then restart Cody CLI."
|
|
344711
344651
|
}, undefined, false, undefined, this);
|
|
344712
344652
|
t3 = /* @__PURE__ */ jsx_dev_runtime71.jsxDEV(ThemedText, {
|
|
344713
344653
|
children: "If you are part of an enterprise organization, contact your administrator for setup instructions."
|
|
@@ -344735,8 +344675,8 @@ function OAuthStatusMessage(t0) {
|
|
|
344735
344675
|
"· Amazon Bedrock:",
|
|
344736
344676
|
" ",
|
|
344737
344677
|
/* @__PURE__ */ jsx_dev_runtime71.jsxDEV(Link, {
|
|
344738
|
-
url: "https://
|
|
344739
|
-
children: "https://
|
|
344678
|
+
url: "https://docs.ainative.studio/cody-cli/amazon-bedrock",
|
|
344679
|
+
children: "https://docs.ainative.studio/cody-cli/amazon-bedrock"
|
|
344740
344680
|
}, undefined, false, undefined, this)
|
|
344741
344681
|
]
|
|
344742
344682
|
}, undefined, true, undefined, this);
|
|
@@ -344751,8 +344691,8 @@ function OAuthStatusMessage(t0) {
|
|
|
344751
344691
|
"· Microsoft Foundry:",
|
|
344752
344692
|
" ",
|
|
344753
344693
|
/* @__PURE__ */ jsx_dev_runtime71.jsxDEV(Link, {
|
|
344754
|
-
url: "https://
|
|
344755
|
-
children: "https://
|
|
344694
|
+
url: "https://docs.ainative.studio/cody-cli/microsoft-foundry",
|
|
344695
|
+
children: "https://docs.ainative.studio/cody-cli/microsoft-foundry"
|
|
344756
344696
|
}, undefined, false, undefined, this)
|
|
344757
344697
|
]
|
|
344758
344698
|
}, undefined, true, undefined, this);
|
|
@@ -344774,8 +344714,8 @@ function OAuthStatusMessage(t0) {
|
|
|
344774
344714
|
"· Vertex AI:",
|
|
344775
344715
|
" ",
|
|
344776
344716
|
/* @__PURE__ */ jsx_dev_runtime71.jsxDEV(Link, {
|
|
344777
|
-
url: "https://
|
|
344778
|
-
children: "https://
|
|
344717
|
+
url: "https://docs.ainative.studio/cody-cli/google-vertex-ai",
|
|
344718
|
+
children: "https://docs.ainative.studio/cody-cli/google-vertex-ai"
|
|
344779
344719
|
}, undefined, false, undefined, this)
|
|
344780
344720
|
]
|
|
344781
344721
|
}, undefined, true, undefined, this)
|
|
@@ -345005,7 +344945,7 @@ function OAuthStatusMessage(t0) {
|
|
|
345005
344945
|
children: [
|
|
345006
344946
|
/* @__PURE__ */ jsx_dev_runtime71.jsxDEV(Spinner, {}, undefined, false, undefined, this),
|
|
345007
344947
|
/* @__PURE__ */ jsx_dev_runtime71.jsxDEV(ThemedText, {
|
|
345008
|
-
children: "Creating API key for
|
|
344948
|
+
children: "Creating API key for Cody CLI…"
|
|
345009
344949
|
}, undefined, false, undefined, this)
|
|
345010
344950
|
]
|
|
345011
344951
|
}, undefined, true, undefined, this)
|
|
@@ -345412,7 +345352,7 @@ async function axiosGetWithRetry(url3, config3) {
|
|
|
345412
345352
|
async function prepareApiRequest() {
|
|
345413
345353
|
const accessToken = getClaudeAIOAuthTokens()?.accessToken;
|
|
345414
345354
|
if (accessToken === undefined) {
|
|
345415
|
-
throw new Error("
|
|
345355
|
+
throw new Error("Cody CLI web sessions require authentication with a Claude.ai account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.");
|
|
345416
345356
|
}
|
|
345417
345357
|
const orgUUID = await getOrganizationUUID();
|
|
345418
345358
|
if (!orgUUID) {
|
|
@@ -357039,7 +356979,7 @@ NOTE: You just closed out 3+ tasks and none of them was a verification step. Bef
|
|
|
357039
356979
|
async function fetchEnvironments() {
|
|
357040
356980
|
const accessToken = getClaudeAIOAuthTokens()?.accessToken;
|
|
357041
356981
|
if (!accessToken) {
|
|
357042
|
-
throw new Error("
|
|
356982
|
+
throw new Error("Cody CLI web sessions require authentication with a Claude.ai account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.");
|
|
357043
356983
|
}
|
|
357044
356984
|
const orgUUID = await getOrganizationUUID();
|
|
357045
356985
|
if (!orgUUID) {
|
|
@@ -357487,7 +357427,7 @@ function TeleportError(t0) {
|
|
|
357487
357427
|
t92 = /* @__PURE__ */ jsx_dev_runtime117.jsxDEV(ConsoleOAuthFlow, {
|
|
357488
357428
|
onDone: handleLoginComplete,
|
|
357489
357429
|
mode: "login",
|
|
357490
|
-
forceLoginMethod: "
|
|
357430
|
+
forceLoginMethod: "ainative"
|
|
357491
357431
|
}, undefined, false, undefined, this);
|
|
357492
357432
|
$3[14] = handleLoginComplete;
|
|
357493
357433
|
$3[15] = t92;
|
|
@@ -357518,13 +357458,13 @@ function TeleportError(t0) {
|
|
|
357518
357458
|
let t10;
|
|
357519
357459
|
if ($3[17] === Symbol.for("react.memo_cache_sentinel")) {
|
|
357520
357460
|
t10 = /* @__PURE__ */ jsx_dev_runtime117.jsxDEV(Dialog, {
|
|
357521
|
-
title: "Log in to
|
|
357461
|
+
title: "Log in to AINative",
|
|
357522
357462
|
onCancel,
|
|
357523
357463
|
children: [
|
|
357524
357464
|
t9,
|
|
357525
357465
|
/* @__PURE__ */ jsx_dev_runtime117.jsxDEV(Select, {
|
|
357526
357466
|
options: [{
|
|
357527
|
-
label: "Login with
|
|
357467
|
+
label: "Login with AINative account",
|
|
357528
357468
|
value: "login"
|
|
357529
357469
|
}, {
|
|
357530
357470
|
label: "Exit",
|
|
@@ -361131,7 +361071,7 @@ async function teleportResumeCodeSession(sessionId, onProgress) {
|
|
|
361131
361071
|
logEvent("tengu_teleport_resume_error", {
|
|
361132
361072
|
error_type: "no_access_token"
|
|
361133
361073
|
});
|
|
361134
|
-
throw new Error("
|
|
361074
|
+
throw new Error("Cody CLI web sessions require authentication with an AINative account. API key authentication is not sufficient. Please run /login to authenticate, or check your authentication status with /status.");
|
|
361135
361075
|
}
|
|
361136
361076
|
const orgUUID = await getOrganizationUUID();
|
|
361137
361077
|
if (!orgUUID) {
|
|
@@ -361501,7 +361441,7 @@ async function teleportToRemote(options) {
|
|
|
361501
361441
|
});
|
|
361502
361442
|
if (!bundle.success) {
|
|
361503
361443
|
logError2(new Error(`Bundle upload failed: ${bundle.error}`));
|
|
361504
|
-
const setup = repoInfo ? ". Please setup GitHub on https://
|
|
361444
|
+
const setup = repoInfo ? ". Please setup GitHub on https://ainative.studio" : "";
|
|
361505
361445
|
let msg;
|
|
361506
361446
|
switch (bundle.failReason) {
|
|
361507
361447
|
case "empty_repo":
|
|
@@ -368101,7 +368041,7 @@ Output truncated (${sizeKB}KB total). Full output saved to: ${this.path}`;
|
|
|
368101
368041
|
} catch (err2) {
|
|
368102
368042
|
const code = err2 instanceof Error && "code" in err2 ? String(err2.code) : "unknown";
|
|
368103
368043
|
logForDebugging(`TaskOutput.#readStdoutFromFile: failed to read ${this.path} (${code}): ${err2}`);
|
|
368104
|
-
return `<bash output unavailable: output file ${this.path} could not be read (${code}). This usually means another
|
|
368044
|
+
return `<bash output unavailable: output file ${this.path} could not be read (${code}). This usually means another Cody CLI process in the same project deleted it during startup cleanup.>`;
|
|
368105
368045
|
}
|
|
368106
368046
|
}
|
|
368107
368047
|
getStderr() {
|
|
@@ -368497,7 +368437,7 @@ var LITERAL_BACKSLASH = "\\", SNAPSHOT_CREATION_TIMEOUT = 1e4, VCS_DIRECTORIES_T
|
|
|
368497
368437
|
logForDebugging(`Looking for shell config file: ${configFile}`);
|
|
368498
368438
|
const configFileExists = await pathExists(configFile);
|
|
368499
368439
|
if (!configFileExists) {
|
|
368500
|
-
logForDebugging(`Shell config file not found: ${configFile}, creating snapshot with
|
|
368440
|
+
logForDebugging(`Shell config file not found: ${configFile}, creating snapshot with Cody CLI defaults only`);
|
|
368501
368441
|
}
|
|
368502
368442
|
const timestamp = Date.now();
|
|
368503
368443
|
const randomId = Math.random().toString(36).substring(2, 8);
|
|
@@ -372787,7 +372727,7 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
|
|
|
372787
372727
|
const canonical = resolveToCanonical(cmd.name);
|
|
372788
372728
|
const workingDirs = Array.from(allWorkingDirectories(toolPermissionContext));
|
|
372789
372729
|
const dirListStr = formatDirectoryList2(workingDirs);
|
|
372790
|
-
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical} targeting '${resolvedPath}' was blocked. For security,
|
|
372730
|
+
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical} targeting '${resolvedPath}' was blocked. For security, Cody CLI may only access files in the allowed working directories for this session: ${dirListStr}.`;
|
|
372791
372731
|
if (decisionReason?.type === "rule") {
|
|
372792
372732
|
return {
|
|
372793
372733
|
behavior: "deny",
|
|
@@ -372858,7 +372798,7 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
|
|
|
372858
372798
|
const canonical = resolveToCanonical(cmd.name);
|
|
372859
372799
|
const workingDirs = Array.from(allWorkingDirectories(toolPermissionContext));
|
|
372860
372800
|
const dirListStr = formatDirectoryList2(workingDirs);
|
|
372861
|
-
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical} targeting '${resolvedPath}' was blocked. For security,
|
|
372801
|
+
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `${canonical} targeting '${resolvedPath}' was blocked. For security, Cody CLI may only access files in the allowed working directories for this session: ${dirListStr}.`;
|
|
372862
372802
|
if (decisionReason?.type === "rule") {
|
|
372863
372803
|
return {
|
|
372864
372804
|
behavior: "deny",
|
|
@@ -372919,7 +372859,7 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
|
|
|
372919
372859
|
if (!allowed) {
|
|
372920
372860
|
const workingDirs = Array.from(allWorkingDirectories(toolPermissionContext));
|
|
372921
372861
|
const dirListStr = formatDirectoryList2(workingDirs);
|
|
372922
|
-
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `Output redirection to '${resolvedPath}' was blocked. For security,
|
|
372862
|
+
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `Output redirection to '${resolvedPath}' was blocked. For security, Cody CLI may only write to files in the allowed working directories for this session: ${dirListStr}.`;
|
|
372923
372863
|
if (decisionReason?.type === "rule") {
|
|
372924
372864
|
return {
|
|
372925
372865
|
behavior: "deny",
|
|
@@ -372957,7 +372897,7 @@ function checkPathConstraintsForStatement(statement, toolPermissionContext, comp
|
|
|
372957
372897
|
if (!allowed) {
|
|
372958
372898
|
const workingDirs = Array.from(allWorkingDirectories(toolPermissionContext));
|
|
372959
372899
|
const dirListStr = formatDirectoryList2(workingDirs);
|
|
372960
|
-
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `Output redirection to '${resolvedPath}' was blocked. For security,
|
|
372900
|
+
const message = decisionReason?.type === "other" || decisionReason?.type === "safetyCheck" ? decisionReason.reason : `Output redirection to '${resolvedPath}' was blocked. For security, Cody CLI may only write to files in the allowed working directories for this session: ${dirListStr}.`;
|
|
372961
372901
|
if (decisionReason?.type === "rule") {
|
|
372962
372902
|
return {
|
|
372963
372903
|
behavior: "deny",
|
|
@@ -377481,7 +377421,7 @@ function validateInputForSettingsFileEdit(filePath, originalContent, getUpdatedC
|
|
|
377481
377421
|
if (!afterValidation.isValid) {
|
|
377482
377422
|
return {
|
|
377483
377423
|
result: false,
|
|
377484
|
-
message: `
|
|
377424
|
+
message: `Cody CLI settings.json validation failed after edit:
|
|
377485
377425
|
${afterValidation.error}
|
|
377486
377426
|
|
|
377487
377427
|
Full schema:
|
|
@@ -399759,7 +399699,7 @@ var init_utils11 = __esm(() => {
|
|
|
399759
399699
|
init_preapproved();
|
|
399760
399700
|
DomainBlockedError = class DomainBlockedError extends Error {
|
|
399761
399701
|
constructor(domain2) {
|
|
399762
|
-
super(`
|
|
399702
|
+
super(`Cody CLI is unable to fetch from ${domain2}`);
|
|
399763
399703
|
this.name = "DomainBlockedError";
|
|
399764
399704
|
}
|
|
399765
399705
|
};
|
|
@@ -404941,6 +404881,65 @@ function getOpusPlanOption() {
|
|
|
404941
404881
|
};
|
|
404942
404882
|
}
|
|
404943
404883
|
function getModelOptionsBase(fastMode = false) {
|
|
404884
|
+
if (isAINativeProvider()) {
|
|
404885
|
+
return [
|
|
404886
|
+
{
|
|
404887
|
+
value: null,
|
|
404888
|
+
label: "Default (recommended)",
|
|
404889
|
+
description: "qwen-coder-32b — best AINative code model"
|
|
404890
|
+
},
|
|
404891
|
+
{
|
|
404892
|
+
value: "qwen-coder-32b",
|
|
404893
|
+
label: "Qwen Coder 32B",
|
|
404894
|
+
description: "qwen-coder-32b — best for code tasks"
|
|
404895
|
+
},
|
|
404896
|
+
{
|
|
404897
|
+
value: "qwen-coder-7b",
|
|
404898
|
+
label: "Qwen Coder 7B",
|
|
404899
|
+
description: "qwen-coder-7b — fast, lightweight"
|
|
404900
|
+
},
|
|
404901
|
+
{
|
|
404902
|
+
value: "nouscoder-14b",
|
|
404903
|
+
label: "NousCoder 14B",
|
|
404904
|
+
description: "nouscoder-14b — instruction-tuned code model"
|
|
404905
|
+
},
|
|
404906
|
+
{
|
|
404907
|
+
value: "gemma-9b",
|
|
404908
|
+
label: "Gemma 9B",
|
|
404909
|
+
description: "gemma-9b — Google open model"
|
|
404910
|
+
},
|
|
404911
|
+
{
|
|
404912
|
+
value: "qwen-7b",
|
|
404913
|
+
label: "Qwen 7B",
|
|
404914
|
+
description: "qwen-7b — general purpose, fast"
|
|
404915
|
+
},
|
|
404916
|
+
{
|
|
404917
|
+
value: "gemma-2b",
|
|
404918
|
+
label: "Gemma 2B",
|
|
404919
|
+
description: "gemma-2b — ultra-lightweight Google model"
|
|
404920
|
+
},
|
|
404921
|
+
{
|
|
404922
|
+
value: "deepseek-r1-distill-qwen-7b",
|
|
404923
|
+
label: "DeepSeek R1 Distill Qwen 7B",
|
|
404924
|
+
description: "deepseek-r1-distill-qwen-7b — reasoning model"
|
|
404925
|
+
},
|
|
404926
|
+
{
|
|
404927
|
+
value: "deepseek-r1-distill-llama-8b",
|
|
404928
|
+
label: "DeepSeek R1 Distill Llama 8B",
|
|
404929
|
+
description: "deepseek-r1-distill-llama-8b — reasoning, Llama base"
|
|
404930
|
+
},
|
|
404931
|
+
{
|
|
404932
|
+
value: "claude-sonnet-4-5",
|
|
404933
|
+
label: "Claude Sonnet 4.5",
|
|
404934
|
+
description: "claude-sonnet-4-5 — via AINative gateway"
|
|
404935
|
+
},
|
|
404936
|
+
{
|
|
404937
|
+
value: "claude-haiku-4-5",
|
|
404938
|
+
label: "Claude Haiku 4.5",
|
|
404939
|
+
description: "claude-haiku-4-5-20251001 — fast, via AINative gateway"
|
|
404940
|
+
}
|
|
404941
|
+
];
|
|
404942
|
+
}
|
|
404944
404943
|
if (false) {}
|
|
404945
404944
|
if (isActiveSubscriber()) {
|
|
404946
404945
|
if (isMaxSubscriber() || isTeamPremiumSubscriber()) {
|
|
@@ -405132,6 +405131,7 @@ var init_modelOptions = __esm(() => {
|
|
|
405132
405131
|
init_model();
|
|
405133
405132
|
init_context();
|
|
405134
405133
|
init_config2();
|
|
405134
|
+
init_model();
|
|
405135
405135
|
MaxSonnet46Option = {
|
|
405136
405136
|
value: "sonnet",
|
|
405137
405137
|
label: "Sonnet",
|
|
@@ -405376,7 +405376,7 @@ var init_supportedSettings = __esm(() => {
|
|
|
405376
405376
|
language: {
|
|
405377
405377
|
source: "settings",
|
|
405378
405378
|
type: "string",
|
|
405379
|
-
description: 'Preferred language for
|
|
405379
|
+
description: 'Preferred language for Cody responses and voice dictation (e.g., "japanese", "spanish")'
|
|
405380
405380
|
},
|
|
405381
405381
|
teammateMode: {
|
|
405382
405382
|
source: "global",
|
|
@@ -406624,7 +406624,7 @@ When spawning teammates via the Agent tool, choose the \`subagent_type\` based o
|
|
|
406624
406624
|
|
|
406625
406625
|
- **Read-only agents** (e.g., Explore, Plan) cannot edit or write files. Only assign them research, search, or planning tasks. Never assign them implementation work.
|
|
406626
406626
|
- **Full-capability agents** (e.g., general-purpose) have access to all tools including file editing, writing, and bash. Use these for tasks that require making changes.
|
|
406627
|
-
- **Custom agents** defined in \`.
|
|
406627
|
+
- **Custom agents** defined in \`.cody/agents/\` may have their own tool restrictions. Check their descriptions to understand what they can and cannot do.
|
|
406628
406628
|
|
|
406629
406629
|
Always review the agent type descriptions and their available tools listed in the Agent tool prompt before selecting a \`subagent_type\` for a teammate.
|
|
406630
406630
|
|
|
@@ -412543,7 +412543,7 @@ function getAttributionTexts() {
|
|
|
412543
412543
|
const model = getMainLoopModel();
|
|
412544
412544
|
const isKnownPublicModel = getPublicModelDisplayName(model) !== null;
|
|
412545
412545
|
const modelName = isInternalModelRepoCached() || isKnownPublicModel ? getPublicModelName(model) : "Claude Opus 4.6";
|
|
412546
|
-
const defaultAttribution = `\uD83E\uDD16 Generated with [
|
|
412546
|
+
const defaultAttribution = `\uD83E\uDD16 Generated with [Cody CLI](${PRODUCT_URL})`;
|
|
412547
412547
|
const defaultCommit = `Co-Authored-By: ${modelName} <noreply@anthropic.com>`;
|
|
412548
412548
|
const settings = getInitialSettings();
|
|
412549
412549
|
if (settings.attribution) {
|
|
@@ -412670,7 +412670,7 @@ async function getEnhancedPRAttribution(getAppState) {
|
|
|
412670
412670
|
if (settings.includeCoAuthoredBy === false) {
|
|
412671
412671
|
return "";
|
|
412672
412672
|
}
|
|
412673
|
-
const defaultAttribution = `\uD83E\uDD16 Generated with [
|
|
412673
|
+
const defaultAttribution = `\uD83E\uDD16 Generated with [Cody CLI](${PRODUCT_URL})`;
|
|
412674
412674
|
const appState = getAppState();
|
|
412675
412675
|
logForDebugging(`PR Attribution: appState.attribution exists: ${!!appState.attribution}`);
|
|
412676
412676
|
if (appState.attribution) {
|
|
@@ -412693,7 +412693,7 @@ async function getEnhancedPRAttribution(getAppState) {
|
|
|
412693
412693
|
return defaultAttribution;
|
|
412694
412694
|
}
|
|
412695
412695
|
const memSuffix = memoryAccessCount > 0 ? `, ${memoryAccessCount} ${memoryAccessCount === 1 ? "memory" : "memories"} recalled` : "";
|
|
412696
|
-
const summary = `\uD83E\uDD16 Generated with [
|
|
412696
|
+
const summary = `\uD83E\uDD16 Generated with [Cody CLI](${PRODUCT_URL}) (${claudePercent}% ${promptCount}-shotted by ${shortModelName}${memSuffix})`;
|
|
412697
412697
|
if (false) {}
|
|
412698
412698
|
logForDebugging(`PR Attribution: returning summary: ${summary}`);
|
|
412699
412699
|
return summary;
|
|
@@ -419007,7 +419007,7 @@ function getAnthropicEnvMetadata() {
|
|
|
419007
419007
|
function getBuildAgeMinutes() {
|
|
419008
419008
|
if (false)
|
|
419009
419009
|
;
|
|
419010
|
-
const buildTime = new Date("
|
|
419010
|
+
const buildTime = new Date("1777195093").getTime();
|
|
419011
419011
|
if (isNaN(buildTime))
|
|
419012
419012
|
return;
|
|
419013
419013
|
return Math.floor((Date.now() - buildTime) / 60000);
|
|
@@ -428890,7 +428890,7 @@ var init_marketplaceManager = __esm(() => {
|
|
|
428890
428890
|
throw new Error(`Marketplace '${name3}' not found in configuration. Available marketplaces: ${Object.keys(config3).join(", ")}`);
|
|
428891
428891
|
}
|
|
428892
428892
|
if (isLocalMarketplaceSource(entry.source) && !isAbsolute24(entry.source.path)) {
|
|
428893
|
-
throw new Error(`Marketplace "${name3}" has a relative source path (${entry.source.path}) ` + `in known_marketplaces.json — this is stale state from an older ` + `
|
|
428893
|
+
throw new Error(`Marketplace "${name3}" has a relative source path (${entry.source.path}) ` + `in known_marketplaces.json — this is stale state from an older ` + `Cody CLI version. Run 'claude marketplace remove ${name3}' and ` + `re-add it from the original project directory.`);
|
|
428894
428894
|
}
|
|
428895
428895
|
try {
|
|
428896
428896
|
return await readCachedMarketplace(entry.installLocation);
|
|
@@ -435348,14 +435348,14 @@ function getErrorMessageIfRefusal(stopReason, model) {
|
|
|
435348
435348
|
return;
|
|
435349
435349
|
}
|
|
435350
435350
|
logEvent("tengu_refusal_api_response", {});
|
|
435351
|
-
const baseMessage = getIsNonInteractiveSession() ? `${API_ERROR_MESSAGE_PREFIX}:
|
|
435351
|
+
const baseMessage = getIsNonInteractiveSession() ? `${API_ERROR_MESSAGE_PREFIX}: Cody CLI is unable to respond to this request, which appears to violate our Usage Policy (https://ainative.studio/legal/aup). Try rephrasing the request or attempting a different approach.` : `${API_ERROR_MESSAGE_PREFIX}: Cody CLI is unable to respond to this request, which appears to violate our Usage Policy (https://ainative.studio/legal/aup). Please double press esc to edit your last message or start a new session for Cody CLI to assist with a different task.`;
|
|
435352
435352
|
const modelSuggestion = model !== "claude-sonnet-4-20250514" ? " If you are seeing this refusal repeatedly, try running /model claude-sonnet-4-20250514 to switch models." : "";
|
|
435353
435353
|
return createAssistantAPIErrorMessage({
|
|
435354
435354
|
content: baseMessage + modelSuggestion,
|
|
435355
435355
|
error: "invalid_request"
|
|
435356
435356
|
});
|
|
435357
435357
|
}
|
|
435358
|
-
var API_ERROR_MESSAGE_PREFIX = "API Error", PROMPT_TOO_LONG_ERROR_MESSAGE = "Prompt is too long", CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE = "Credit balance is too low", INVALID_API_KEY_ERROR_MESSAGE = "Not logged in · Please run /login", INVALID_API_KEY_ERROR_MESSAGE_EXTERNAL = "Invalid API key · Fix external API key", ORG_DISABLED_ERROR_MESSAGE_ENV_KEY_WITH_OAUTH = "Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your subscription instead", ORG_DISABLED_ERROR_MESSAGE_ENV_KEY = "Your ANTHROPIC_API_KEY belongs to a disabled organization · Update or unset the environment variable", TOKEN_REVOKED_ERROR_MESSAGE = "OAuth token revoked · Please run /login", CCR_AUTH_ERROR_MESSAGE = "Authentication error · This may be a temporary network issue, please try again", REPEATED_529_ERROR_MESSAGE = "Repeated 529 Overloaded errors", CUSTOM_OFF_SWITCH_MESSAGE = "Opus is experiencing high load, please use /model to switch to Sonnet", API_TIMEOUT_ERROR_MESSAGE = "Request timed out", OAUTH_ORG_NOT_ALLOWED_ERROR_MESSAGE = "Your account does not have access to
|
|
435358
|
+
var API_ERROR_MESSAGE_PREFIX = "API Error", PROMPT_TOO_LONG_ERROR_MESSAGE = "Prompt is too long", CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE = "Credit balance is too low", INVALID_API_KEY_ERROR_MESSAGE = "Not logged in · Please run /login", INVALID_API_KEY_ERROR_MESSAGE_EXTERNAL = "Invalid API key · Fix external API key", ORG_DISABLED_ERROR_MESSAGE_ENV_KEY_WITH_OAUTH = "Your ANTHROPIC_API_KEY belongs to a disabled organization · Unset the environment variable to use your subscription instead", ORG_DISABLED_ERROR_MESSAGE_ENV_KEY = "Your ANTHROPIC_API_KEY belongs to a disabled organization · Update or unset the environment variable", TOKEN_REVOKED_ERROR_MESSAGE = "OAuth token revoked · Please run /login", CCR_AUTH_ERROR_MESSAGE = "Authentication error · This may be a temporary network issue, please try again", REPEATED_529_ERROR_MESSAGE = "Repeated 529 Overloaded errors", CUSTOM_OFF_SWITCH_MESSAGE = "Opus is experiencing high load, please use /model to switch to Sonnet", API_TIMEOUT_ERROR_MESSAGE = "Request timed out", OAUTH_ORG_NOT_ALLOWED_ERROR_MESSAGE = "Your account does not have access to Cody CLI. Please run /login.";
|
|
435359
435359
|
var init_errors7 = __esm(() => {
|
|
435360
435360
|
init_sdk();
|
|
435361
435361
|
init_betas();
|
|
@@ -436140,9 +436140,9 @@ function reconstructCommand(kept, originalCmd) {
|
|
|
436140
436140
|
return result.trim() || originalCmd;
|
|
436141
436141
|
}
|
|
436142
436142
|
var ALLOWED_FILE_DESCRIPTORS, BASH_POLICY_SPEC = `<policy_spec>
|
|
436143
|
-
#
|
|
436143
|
+
# Cody CLI Code Bash command prefix detection
|
|
436144
436144
|
|
|
436145
|
-
This document defines risk levels for actions that the
|
|
436145
|
+
This document defines risk levels for actions that the Cody CLI agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed.
|
|
436146
436146
|
|
|
436147
436147
|
## Definitions
|
|
436148
436148
|
|
|
@@ -437816,7 +437816,7 @@ function getSteps() {
|
|
|
437816
437816
|
return [
|
|
437817
437817
|
{
|
|
437818
437818
|
key: "workspace",
|
|
437819
|
-
text: "Ask
|
|
437819
|
+
text: "Ask Cody to create a new app or clone a repository",
|
|
437820
437820
|
isComplete: false,
|
|
437821
437821
|
isCompletable: true,
|
|
437822
437822
|
isEnabled: isWorkspaceDirEmpty
|
|
@@ -441272,7 +441272,7 @@ function PermissionDescription() {
|
|
|
441272
441272
|
if ($3[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
441273
441273
|
t0 = /* @__PURE__ */ jsx_dev_runtime159.jsxDEV(ThemedText, {
|
|
441274
441274
|
dimColor: true,
|
|
441275
|
-
children: "
|
|
441275
|
+
children: "Cody will be able to read files in this directory and make edits when auto-accept edits is on."
|
|
441276
441276
|
}, undefined, false, undefined, this);
|
|
441277
441277
|
$3[0] = t0;
|
|
441278
441278
|
} else {
|
|
@@ -442867,7 +442867,7 @@ ${sanitizedDescription}
|
|
|
442867
442867
|
async function generateTitle(description, abortSignal) {
|
|
442868
442868
|
try {
|
|
442869
442869
|
const response = await queryHaiku({
|
|
442870
|
-
systemPrompt: asSystemPrompt(["Generate a concise, technical issue title (max 80 chars) for a public GitHub issue based on this bug report for
|
|
442870
|
+
systemPrompt: asSystemPrompt(["Generate a concise, technical issue title (max 80 chars) for a public GitHub issue based on this bug report for Cody CLI.", "Cody CLI is an agentic coding CLI based on the Anthropic API.", "The title should:", "- Include the type of issue [Bug] or [Feature Request] as the first thing in the title", "- Be concise, specific and descriptive of the actual problem", "- Use technical terminology appropriate for a software issue", '- For error messages, extract the key error (e.g., "Missing Tool Result Block" rather than the full message)', "- Be direct and clear for developers to understand the problem", '- If you cannot determine a clear issue, use "Bug Report: [brief description]"', "- Any LLM API errors are from the Anthropic API, not from any other model provider", "Your response will be directly used as the title of the Github issue, and as such should not contain any other commentary or explaination", 'Examples of good titles include: "[Bug] Auto-Compact triggers to soon", "[Bug] Anthropic API Error: Missing Tool Result Block", "[Bug] Error: Invalid Model Name for Opus"']),
|
|
442871
442871
|
userPrompt: description,
|
|
442872
442872
|
signal: abortSignal,
|
|
442873
442873
|
options: {
|
|
@@ -446944,7 +446944,7 @@ function ModelPicker(t0) {
|
|
|
446944
446944
|
} else {
|
|
446945
446945
|
t15 = $3[41];
|
|
446946
446946
|
}
|
|
446947
|
-
const t16 = headerText ?? "Switch
|
|
446947
|
+
const t16 = headerText ?? "Switch models. Applies to this session and future Cody CLI sessions. For other/previous model names, specify with --model.";
|
|
446948
446948
|
let t17;
|
|
446949
446949
|
if ($3[42] !== t16) {
|
|
446950
446950
|
t17 = /* @__PURE__ */ jsx_dev_runtime172.jsxDEV(ThemedText, {
|
|
@@ -447398,10 +447398,10 @@ function ClaudeMdExternalIncludesDialog(t0) {
|
|
|
447398
447398
|
t8 = /* @__PURE__ */ jsx_dev_runtime173.jsxDEV(ThemedText, {
|
|
447399
447399
|
dimColor: true,
|
|
447400
447400
|
children: [
|
|
447401
|
-
"Important: Only use
|
|
447401
|
+
"Important: Only use Cody CLI with files you trust. Accessing untrusted files may pose security risks",
|
|
447402
447402
|
" ",
|
|
447403
447403
|
/* @__PURE__ */ jsx_dev_runtime173.jsxDEV(Link, {
|
|
447404
|
-
url: "https://
|
|
447404
|
+
url: "https://docs.ainative.studio/cody-cli/security"
|
|
447405
447405
|
}, undefined, false, undefined, this),
|
|
447406
447406
|
" "
|
|
447407
447407
|
]
|
|
@@ -447684,7 +447684,7 @@ function OutputStylePicker(t0) {
|
|
|
447684
447684
|
marginTop: 1,
|
|
447685
447685
|
children: /* @__PURE__ */ jsx_dev_runtime175.jsxDEV(ThemedText, {
|
|
447686
447686
|
dimColor: true,
|
|
447687
|
-
children: "This changes how
|
|
447687
|
+
children: "This changes how Cody CLI communicates with you"
|
|
447688
447688
|
}, undefined, false, undefined, this)
|
|
447689
447689
|
}, undefined, false, undefined, this);
|
|
447690
447690
|
$3[5] = t7;
|
|
@@ -448919,7 +448919,7 @@ function Config({
|
|
|
448919
448919
|
}] : [],
|
|
448920
448920
|
{
|
|
448921
448921
|
id: "claudeInChromeDefaultEnabled",
|
|
448922
|
-
label: "
|
|
448922
|
+
label: "Cody in Chrome enabled by default",
|
|
448923
448923
|
value: globalConfig2.claudeInChromeDefaultEnabled ?? true,
|
|
448924
448924
|
type: "boolean",
|
|
448925
448925
|
onChange(enabled_5) {
|
|
@@ -448973,7 +448973,7 @@ function Config({
|
|
|
448973
448973
|
...[],
|
|
448974
448974
|
...shouldShowExternalIncludesToggle ? [{
|
|
448975
448975
|
id: "showExternalIncludesDialog",
|
|
448976
|
-
label: "External
|
|
448976
|
+
label: "External CODY.md includes",
|
|
448977
448977
|
value: (() => {
|
|
448978
448978
|
const projectConfig = getCurrentProjectConfig();
|
|
448979
448979
|
if (projectConfig.hasClaudeMdExternalIncludesApproved) {
|
|
@@ -452293,14 +452293,54 @@ var exports_cost = {};
|
|
|
452293
452293
|
__export(exports_cost, {
|
|
452294
452294
|
call: () => call17
|
|
452295
452295
|
});
|
|
452296
|
+
function formatPct(util6) {
|
|
452297
|
+
if (util6 == null)
|
|
452298
|
+
return "n/a";
|
|
452299
|
+
return `${Math.round(util6)}%`;
|
|
452300
|
+
}
|
|
452301
|
+
function formatResetTime2(iso) {
|
|
452302
|
+
if (!iso)
|
|
452303
|
+
return "";
|
|
452304
|
+
const resetsAt = new Date(iso).getTime();
|
|
452305
|
+
const now2 = Date.now();
|
|
452306
|
+
const diffMs = resetsAt - now2;
|
|
452307
|
+
if (diffMs <= 0)
|
|
452308
|
+
return " (resetting now)";
|
|
452309
|
+
const hours = Math.floor(diffMs / 3600000);
|
|
452310
|
+
const minutes = Math.floor(diffMs % 3600000 / 60000);
|
|
452311
|
+
if (hours > 24)
|
|
452312
|
+
return ` (resets in ${Math.floor(hours / 24)}d)`;
|
|
452313
|
+
if (hours > 0)
|
|
452314
|
+
return ` (resets in ${hours}h ${minutes}m)`;
|
|
452315
|
+
return ` (resets in ${minutes}m)`;
|
|
452316
|
+
}
|
|
452296
452317
|
var call17 = async () => {
|
|
452297
452318
|
if (isActiveSubscriber()) {
|
|
452298
452319
|
let value;
|
|
452299
452320
|
if (currentLimits.isUsingOverage) {
|
|
452300
|
-
value = "You are currently using overages to power your Cody CLI usage. We will automatically switch you back to your subscription rate limits when they reset";
|
|
452321
|
+
value = "You are currently using overages to power your Cody CLI usage. We will automatically switch you back to your subscription rate limits when they reset.";
|
|
452301
452322
|
} else {
|
|
452302
|
-
value = "You are currently using your subscription to power your
|
|
452323
|
+
value = "You are currently using your AINative subscription to power your Cody CLI usage.";
|
|
452303
452324
|
}
|
|
452325
|
+
try {
|
|
452326
|
+
const util6 = await fetchUtilization();
|
|
452327
|
+
if (util6 && (util6.five_hour || util6.seven_day)) {
|
|
452328
|
+
const lines = ["", "Usage windows:"];
|
|
452329
|
+
if (util6.five_hour) {
|
|
452330
|
+
lines.push(` 5-hour: ${formatPct(util6.five_hour.utilization)}${formatResetTime2(util6.five_hour.resets_at)}`);
|
|
452331
|
+
}
|
|
452332
|
+
if (util6.seven_day) {
|
|
452333
|
+
lines.push(` 7-day: ${formatPct(util6.seven_day.utilization)}${formatResetTime2(util6.seven_day.resets_at)}`);
|
|
452334
|
+
}
|
|
452335
|
+
if (util6.extra_usage?.is_enabled) {
|
|
452336
|
+
const used = util6.extra_usage.used_credits ?? 0;
|
|
452337
|
+
const limit = util6.extra_usage.monthly_limit ?? 0;
|
|
452338
|
+
lines.push(` Extra: ${used} / ${limit} credits used`);
|
|
452339
|
+
}
|
|
452340
|
+
value += lines.join(`
|
|
452341
|
+
`);
|
|
452342
|
+
}
|
|
452343
|
+
} catch {}
|
|
452304
452344
|
if (false) {}
|
|
452305
452345
|
return { type: "text", value };
|
|
452306
452346
|
}
|
|
@@ -452309,6 +452349,7 @@ var call17 = async () => {
|
|
|
452309
452349
|
var init_cost = __esm(() => {
|
|
452310
452350
|
init_cost_tracker();
|
|
452311
452351
|
init_claudeAiLimits();
|
|
452352
|
+
init_usage();
|
|
452312
452353
|
init_auth2();
|
|
452313
452354
|
});
|
|
452314
452355
|
|
|
@@ -454242,8 +454283,8 @@ function McpParsingWarnings() {
|
|
|
454242
454283
|
"For help configuring MCP servers, see:",
|
|
454243
454284
|
" ",
|
|
454244
454285
|
/* @__PURE__ */ jsx_dev_runtime193.jsxDEV(Link, {
|
|
454245
|
-
url: "https://
|
|
454246
|
-
children: "https://
|
|
454286
|
+
url: "https://docs.ainative.studio/cody-cli/mcp",
|
|
454287
|
+
children: "https://docs.ainative.studio/cody-cli/mcp"
|
|
454247
454288
|
}, undefined, false, undefined, this)
|
|
454248
454289
|
]
|
|
454249
454290
|
}, undefined, true, undefined, this)
|
|
@@ -456813,7 +456854,7 @@ ${editorHint}`, {
|
|
|
456813
456854
|
children: [
|
|
456814
456855
|
"Learn more: ",
|
|
456815
456856
|
/* @__PURE__ */ jsx_dev_runtime201.jsxDEV(Link, {
|
|
456816
|
-
url: "https://
|
|
456857
|
+
url: "https://docs.ainative.studio/cody-cli/memory"
|
|
456817
456858
|
}, undefined, false, undefined, this)
|
|
456818
456859
|
]
|
|
456819
456860
|
}, undefined, true, undefined, this)
|
|
@@ -458115,7 +458156,7 @@ function IDEScreen(t0) {
|
|
|
458115
458156
|
t5 = availableIDEs.length === 0 && /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(ThemedText, {
|
|
458116
458157
|
dimColor: true,
|
|
458117
458158
|
children: isSupportedJetBrainsTerminal() ? `No available IDEs detected. Please install the plugin and restart your IDE:
|
|
458118
|
-
https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected. Make sure your IDE has the
|
|
458159
|
+
https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected. Make sure your IDE has the Cody CLI extension or plugin installed and is running."
|
|
458119
458160
|
}, undefined, false, undefined, this);
|
|
458120
458161
|
$3[17] = availableIDEs.length;
|
|
458121
458162
|
$3[18] = t5;
|
|
@@ -458147,7 +458188,7 @@ https://docs.claude.com/s/claude-code-jetbrains` : "No available IDEs detected.
|
|
|
458147
458188
|
marginTop: 1,
|
|
458148
458189
|
children: /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(ThemedText, {
|
|
458149
458190
|
color: "warning",
|
|
458150
|
-
children: "Note: Only one
|
|
458191
|
+
children: "Note: Only one Cody CLI instance can be connected to VS Code at a time."
|
|
458151
458192
|
}, undefined, false, undefined, this)
|
|
458152
458193
|
}, undefined, false, undefined, this);
|
|
458153
458194
|
$3[24] = availableIDEs;
|
|
@@ -458491,7 +458532,7 @@ async function call22(onDone, context4, args) {
|
|
|
458491
458532
|
const detectedIDEs2 = await detectIDEs(true);
|
|
458492
458533
|
const availableIDEs2 = detectedIDEs2.filter((ide) => ide.isValid);
|
|
458493
458534
|
if (availableIDEs2.length === 0) {
|
|
458494
|
-
onDone("No IDEs with
|
|
458535
|
+
onDone("No IDEs with Cody CLI extension detected.");
|
|
458495
458536
|
return null;
|
|
458496
458537
|
}
|
|
458497
458538
|
return /* @__PURE__ */ jsx_dev_runtime208.jsxDEV(IDEOpenSelection, {
|
|
@@ -458728,8 +458769,8 @@ What to add:
|
|
|
458728
458769
|
2. High-level code architecture and structure so that future instances can be productive more quickly. Focus on the "big picture" architecture that requires reading multiple files to understand.
|
|
458729
458770
|
|
|
458730
458771
|
Usage notes:
|
|
458731
|
-
- If there's already a
|
|
458732
|
-
- When you make the initial
|
|
458772
|
+
- If there's already a CODY.md, suggest improvements to it.
|
|
458773
|
+
- When you make the initial CODY.md, do not repeat yourself and do not include obvious instructions like "Provide helpful error messages to users", "Write unit tests for all new utilities", "Never include sensitive information (API keys, tokens) in code or commits".
|
|
458733
458774
|
- Avoid listing every component or file structure that can be easily discovered.
|
|
458734
458775
|
- Don't include generic development practices.
|
|
458735
458776
|
- If there are Cursor rules (in .cursor/rules/ or .cursorrules) or Copilot rules (in .github/copilot-instructions.md), make sure to include the important parts.
|
|
@@ -458738,7 +458779,7 @@ Usage notes:
|
|
|
458738
458779
|
- Be sure to prefix the file with the following text:
|
|
458739
458780
|
|
|
458740
458781
|
\`\`\`
|
|
458741
|
-
#
|
|
458782
|
+
# CODY.md
|
|
458742
458783
|
|
|
458743
458784
|
This file provides guidance to Cody CLI (ainative.studio/code) when working with code in this repository.
|
|
458744
458785
|
\`\`\``, command3, init_default3;
|
|
@@ -459047,7 +459088,7 @@ function generateKeybindingsTemplate() {
|
|
|
459047
459088
|
const bindings = filterReservedShortcuts(DEFAULT_BINDINGS);
|
|
459048
459089
|
const config4 = {
|
|
459049
459090
|
$schema: "https://www.schemastore.org/cody-cli-keybindings.json",
|
|
459050
|
-
$docs: "https://
|
|
459091
|
+
$docs: "https://docs.ainative.studio/cody-cli/keybindings",
|
|
459051
459092
|
bindings
|
|
459052
459093
|
};
|
|
459053
459094
|
return jsonStringify(config4, null, 2) + `
|
|
@@ -459234,8 +459275,8 @@ function WorkflowMultiselectDialog(t0) {
|
|
|
459234
459275
|
"More workflow examples (issue triage, CI fixes, etc.) at:",
|
|
459235
459276
|
" ",
|
|
459236
459277
|
/* @__PURE__ */ jsx_dev_runtime209.jsxDEV(Link, {
|
|
459237
|
-
url: "https://github.com/
|
|
459238
|
-
children: "https://github.com/
|
|
459278
|
+
url: "https://github.com/ainative-studio/cody-action/blob/main/examples/",
|
|
459279
|
+
children: "https://github.com/ainative-studio/cody-action/blob/main/examples/"
|
|
459239
459280
|
}, undefined, false, undefined, this)
|
|
459240
459281
|
]
|
|
459241
459282
|
}, undefined, true, undefined, this)
|
|
@@ -459320,15 +459361,15 @@ var init_WorkflowMultiselectDialog = __esm(() => {
|
|
|
459320
459361
|
jsx_dev_runtime209 = __toESM(require_jsx_dev_runtime(), 1);
|
|
459321
459362
|
WORKFLOWS = [{
|
|
459322
459363
|
value: "claude",
|
|
459323
|
-
label: "@
|
|
459364
|
+
label: "@Cody CLI - Tag @cody in issues and PR comments"
|
|
459324
459365
|
}, {
|
|
459325
459366
|
value: "claude-review",
|
|
459326
|
-
label: "
|
|
459367
|
+
label: "Cody CLI Review - Automated code review on new PRs"
|
|
459327
459368
|
}];
|
|
459328
459369
|
});
|
|
459329
459370
|
|
|
459330
459371
|
// src/constants/github-app.ts
|
|
459331
|
-
var PR_TITLE = "Add Cody CLI GitHub Workflow", GITHUB_ACTION_SETUP_DOCS_URL = "https://github.com/
|
|
459372
|
+
var PR_TITLE = "Add Cody CLI GitHub Workflow", GITHUB_ACTION_SETUP_DOCS_URL = "https://github.com/ainative-studio/cody-action/blob/main/docs/setup.md", WORKFLOW_CONTENT = `name: Cody CLI
|
|
459332
459373
|
|
|
459333
459374
|
on:
|
|
459334
459375
|
issue_comment:
|
|
@@ -459360,13 +459401,13 @@ jobs:
|
|
|
459360
459401
|
with:
|
|
459361
459402
|
fetch-depth: 1
|
|
459362
459403
|
|
|
459363
|
-
- name: Run
|
|
459404
|
+
- name: Run Cody CLI
|
|
459364
459405
|
id: claude
|
|
459365
|
-
uses:
|
|
459406
|
+
uses: ainative-studio/cody-action@v1
|
|
459366
459407
|
with:
|
|
459367
|
-
|
|
459408
|
+
ainative_api_key: \${{ secrets.AINATIVE_API_KEY }}
|
|
459368
459409
|
|
|
459369
|
-
# This is an optional setting that allows
|
|
459410
|
+
# This is an optional setting that allows Cody to read CI results on PRs
|
|
459370
459411
|
additional_permissions: |
|
|
459371
459412
|
actions: read
|
|
459372
459413
|
|
|
@@ -459374,17 +459415,17 @@ jobs:
|
|
|
459374
459415
|
# prompt: 'Update the pull request description to include a summary of changes.'
|
|
459375
459416
|
|
|
459376
459417
|
# Optional: Add claude_args to customize behavior and configuration
|
|
459377
|
-
# See https://github.com/
|
|
459378
|
-
# or https://
|
|
459418
|
+
# See https://github.com/ainative-studio/cody-action/blob/main/docs/usage.md
|
|
459419
|
+
# or https://docs.ainative.studio/cody-cli/cli-reference for available options
|
|
459379
459420
|
# claude_args: '--allowed-tools Bash(gh pr:*)'
|
|
459380
459421
|
|
|
459381
|
-
`, PR_BODY = `## \uD83E\uDD16 Installing
|
|
459422
|
+
`, PR_BODY = `## \uD83E\uDD16 Installing Cody CLI GitHub App
|
|
459382
459423
|
|
|
459383
|
-
This PR adds a GitHub Actions workflow that enables
|
|
459424
|
+
This PR adds a GitHub Actions workflow that enables Cody CLI integration in our repository.
|
|
459384
459425
|
|
|
459385
|
-
### What is
|
|
459426
|
+
### What is Cody CLI?
|
|
459386
459427
|
|
|
459387
|
-
[
|
|
459428
|
+
[Cody CLI](https://ainative.studio/code) is an AI coding agent that can help with:
|
|
459388
459429
|
- Bug fixes and improvements
|
|
459389
459430
|
- Documentation updates
|
|
459390
459431
|
- Implementing new features
|
|
@@ -459401,22 +459442,22 @@ Once the workflow is triggered, Cody will analyze the comment and surrounding co
|
|
|
459401
459442
|
|
|
459402
459443
|
- **This workflow won't take effect until this PR is merged**
|
|
459403
459444
|
- **@claude mentions won't work until after the merge is complete**
|
|
459404
|
-
- The workflow runs automatically whenever
|
|
459445
|
+
- The workflow runs automatically whenever Cody is mentioned in PR or issue comments
|
|
459405
459446
|
- Cody gets access to the entire PR or issue context including files, diffs, and previous comments
|
|
459406
459447
|
|
|
459407
459448
|
### Security
|
|
459408
459449
|
|
|
459409
|
-
- Our
|
|
459450
|
+
- Our API key is securely stored as a GitHub Actions secret
|
|
459410
459451
|
- Only users with write access to the repository can trigger the workflow
|
|
459411
|
-
- All
|
|
459412
|
-
-
|
|
459452
|
+
- All Cody runs are stored in the GitHub Actions run history
|
|
459453
|
+
- Cody's default tools are limited to reading/writing files and interacting with our repo by creating comments, branches, and commits.
|
|
459413
459454
|
- We can add more allowed tools by adding them to the workflow file like:
|
|
459414
459455
|
|
|
459415
459456
|
\`\`\`
|
|
459416
459457
|
allowed_tools: Bash(npm install),Bash(npm run build),Bash(npm run lint),Bash(npm run test)
|
|
459417
459458
|
\`\`\`
|
|
459418
459459
|
|
|
459419
|
-
There's more information in the [Cody CLI action repo](https://github.com/
|
|
459460
|
+
There's more information in the [Cody CLI action repo](https://github.com/ainative-studio/cody-action).
|
|
459420
459461
|
|
|
459421
459462
|
After merging this PR, let's try mentioning @claude in a comment on any PR to get started!`, CODE_REVIEW_PLUGIN_WORKFLOW_CONTENT = `name: Cody CLI Review
|
|
459422
459463
|
|
|
@@ -459451,16 +459492,16 @@ jobs:
|
|
|
459451
459492
|
with:
|
|
459452
459493
|
fetch-depth: 1
|
|
459453
459494
|
|
|
459454
|
-
- name: Run
|
|
459495
|
+
- name: Run Cody CLI Review
|
|
459455
459496
|
id: claude-review
|
|
459456
|
-
uses:
|
|
459497
|
+
uses: ainative-studio/cody-action@v1
|
|
459457
459498
|
with:
|
|
459458
|
-
|
|
459459
|
-
plugin_marketplaces: 'https://github.com/
|
|
459499
|
+
ainative_api_key: \${{ secrets.AINATIVE_API_KEY }}
|
|
459500
|
+
plugin_marketplaces: 'https://github.com/ainative-studio/cody-plugins-official.git'
|
|
459460
459501
|
plugins: 'code-review@claude-code-plugins'
|
|
459461
459502
|
prompt: '/code-review:code-review \${{ github.repository }}/pull/\${{ github.event.pull_request.number }}'
|
|
459462
|
-
# See https://github.com/
|
|
459463
|
-
# or https://
|
|
459503
|
+
# See https://github.com/ainative-studio/cody-action/blob/main/docs/usage.md
|
|
459504
|
+
# or https://docs.ainative.studio/cody-cli/cli-reference for available options
|
|
459464
459505
|
|
|
459465
459506
|
`;
|
|
459466
459507
|
|
|
@@ -459620,7 +459661,7 @@ function ApiKeyStep(t0) {
|
|
|
459620
459661
|
children: /* @__PURE__ */ jsx_dev_runtime210.jsxDEV(ThemedText, {
|
|
459621
459662
|
children: [
|
|
459622
459663
|
selectedOption === "existing" ? color("success", theme)("> ") : " ",
|
|
459623
|
-
"Use your existing
|
|
459664
|
+
"Use your existing Cody CLI API key"
|
|
459624
459665
|
]
|
|
459625
459666
|
}, undefined, true, undefined, this)
|
|
459626
459667
|
}, undefined, false, undefined, this);
|
|
@@ -460723,7 +460764,7 @@ function ExistingWorkflowStep(t0) {
|
|
|
460723
460764
|
" ",
|
|
460724
460765
|
/* @__PURE__ */ jsx_dev_runtime216.jsxDEV(ThemedText, {
|
|
460725
460766
|
color: "claude",
|
|
460726
|
-
children: "https://github.com/
|
|
460767
|
+
children: "https://github.com/ainative-studio/cody-action/blob/main/examples/claude.yml"
|
|
460727
460768
|
}, undefined, false, undefined, this)
|
|
460728
460769
|
]
|
|
460729
460770
|
}, undefined, true, undefined, this)
|
|
@@ -461504,7 +461545,7 @@ async function createWorkflowFile(repoName, branchName, workflowPath, workflowCo
|
|
|
461504
461545
|
Need help? Common issues:
|
|
461505
461546
|
` + `· Permission denied → Run: gh auth refresh -h github.com -s repo,workflow
|
|
461506
461547
|
` + `· Not authorized → Ensure you have admin access to the repository
|
|
461507
|
-
` + "· For manual setup → Visit: https://github.com/
|
|
461548
|
+
` + "· For manual setup → Visit: https://github.com/ainative-studio/cody-action";
|
|
461508
461549
|
throw new Error(`Failed to create workflow file ${workflowPath}: ${createFileResult.stderr}${helpText}`);
|
|
461509
461550
|
}
|
|
461510
461551
|
}
|
|
@@ -461597,7 +461638,7 @@ async function setupGitHubActions(repoName, apiKeyOrOAuthToken, secretName, upda
|
|
|
461597
461638
|
workflows.push({
|
|
461598
461639
|
path: ".github/workflows/claude-code-review.yml",
|
|
461599
461640
|
content: CODE_REVIEW_PLUGIN_WORKFLOW_CONTENT,
|
|
461600
|
-
message: "
|
|
461641
|
+
message: "Cody CLI Review workflow"
|
|
461601
461642
|
});
|
|
461602
461643
|
}
|
|
461603
461644
|
for (const workflow of workflows) {
|
|
@@ -461626,7 +461667,7 @@ async function setupGitHubActions(repoName, apiKeyOrOAuthToken, secretName, upda
|
|
|
461626
461667
|
Need help? Common issues:
|
|
461627
461668
|
` + `· Permission denied → Run: gh auth refresh -h github.com -s repo
|
|
461628
461669
|
` + `· Not authorized → Ensure you have admin access to the repository
|
|
461629
|
-
` + "· For manual setup → Visit: https://github.com/
|
|
461670
|
+
` + "· For manual setup → Visit: https://github.com/ainative-studio/cody-action";
|
|
461630
461671
|
throw new Error(`Failed to set API key secret: ${setSecretResult.stderr || "Unknown error"}${helpText}`);
|
|
461631
461672
|
}
|
|
461632
461673
|
}
|
|
@@ -463311,8 +463352,8 @@ function MCPListPanel(t0) {
|
|
|
463311
463352
|
dimColor: true,
|
|
463312
463353
|
children: [
|
|
463313
463354
|
/* @__PURE__ */ jsx_dev_runtime223.jsxDEV(Link, {
|
|
463314
|
-
url: "https://
|
|
463315
|
-
children: "https://
|
|
463355
|
+
url: "https://docs.ainative.studio/cody-cli/mcp",
|
|
463356
|
+
children: "https://docs.ainative.studio/cody-cli/mcp"
|
|
463316
463357
|
}, undefined, false, undefined, this),
|
|
463317
463358
|
" ",
|
|
463318
463359
|
"for help"
|
|
@@ -464674,9 +464715,9 @@ function MCPRemoteServerMenu({
|
|
|
464674
464715
|
if (success2) {
|
|
464675
464716
|
onComplete?.(`Authentication successful. Connected to ${server.name}.`);
|
|
464676
464717
|
} else if (result.client.type === "needs-auth") {
|
|
464677
|
-
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart
|
|
464718
|
+
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart Cody CLI.");
|
|
464678
464719
|
} else {
|
|
464679
|
-
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart
|
|
464720
|
+
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart Cody CLI for the changes to take effect.");
|
|
464680
464721
|
}
|
|
464681
464722
|
} catch (err2) {
|
|
464682
464723
|
logEvent("tengu_claudeai_mcp_auth_completed", {
|
|
@@ -464838,10 +464879,10 @@ function MCPRemoteServerMenu({
|
|
|
464838
464879
|
const message = isEffectivelyAuthenticated ? `Authentication successful. Reconnected to ${server.name}.` : `Authentication successful. Connected to ${server.name}.`;
|
|
464839
464880
|
onComplete?.(message);
|
|
464840
464881
|
} else if (result_0.client.type === "needs-auth") {
|
|
464841
|
-
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart
|
|
464882
|
+
onComplete?.("Authentication successful, but server still requires authentication. You may need to manually restart Cody CLI.");
|
|
464842
464883
|
} else {
|
|
464843
464884
|
logMCPDebug(server.name, `Reconnection failed after authentication`);
|
|
464844
|
-
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart
|
|
464885
|
+
onComplete?.("Authentication successful, but server reconnection failed. You may need to manually restart Cody CLI for the changes to take effect.");
|
|
464845
464886
|
}
|
|
464846
464887
|
}
|
|
464847
464888
|
} catch (err_1) {
|
|
@@ -466438,7 +466479,7 @@ function MCPSettings(t0) {
|
|
|
466438
466479
|
return;
|
|
466439
466480
|
}
|
|
466440
466481
|
if (servers.length === 0 && agentMcpServers.length === 0) {
|
|
466441
|
-
onComplete("No MCP servers configured. Please run /doctor if this is unexpected. Otherwise, run `claude mcp --help` or visit https://
|
|
466482
|
+
onComplete("No MCP servers configured. Please run /doctor if this is unexpected. Otherwise, run `claude mcp --help` or visit https://docs.ainative.studio/cody-cli/mcp to learn more.");
|
|
466442
466483
|
}
|
|
466443
466484
|
};
|
|
466444
466485
|
t8 = [servers.length, filteredClients.length, agentMcpServers.length, onComplete];
|
|
@@ -466503,7 +466544,7 @@ function MCPSettings(t0) {
|
|
|
466503
466544
|
t9 = $3[25];
|
|
466504
466545
|
}
|
|
466505
466546
|
const serverTools_0 = t9;
|
|
466506
|
-
const defaultTab = viewState.server.transport === "claudeai-proxy" ? "
|
|
466547
|
+
const defaultTab = viewState.server.transport === "claudeai-proxy" ? "AINative" : "Cody CLI";
|
|
466507
466548
|
if (viewState.server.transport === "stdio") {
|
|
466508
466549
|
let t10;
|
|
466509
466550
|
if ($3[26] !== viewState.server) {
|
|
@@ -467337,7 +467378,7 @@ function formatInstallCount(count4) {
|
|
|
467337
467378
|
const formatted = m2.toFixed(1);
|
|
467338
467379
|
return formatted.endsWith(".0") ? `${formatted.slice(0, -2)}M` : `${formatted}M`;
|
|
467339
467380
|
}
|
|
467340
|
-
var INSTALL_COUNTS_CACHE_VERSION = 1, INSTALL_COUNTS_CACHE_FILENAME = "install-counts-cache.json", INSTALL_COUNTS_URL = "https://raw.githubusercontent.com/
|
|
467381
|
+
var INSTALL_COUNTS_CACHE_VERSION = 1, INSTALL_COUNTS_CACHE_FILENAME = "install-counts-cache.json", INSTALL_COUNTS_URL = "https://raw.githubusercontent.com/ainative-studio/cody-plugins-official/refs/heads/stats/stats/plugin-installs.json", CACHE_TTL_MS4;
|
|
467341
467382
|
var init_installCounts = __esm(() => {
|
|
467342
467383
|
init_axios2();
|
|
467343
467384
|
init_debug();
|
|
@@ -469803,7 +469844,7 @@ function EmptyStateMessage(t0) {
|
|
|
469803
469844
|
}, undefined, false, undefined, this),
|
|
469804
469845
|
/* @__PURE__ */ jsx_dev_runtime238.jsxDEV(ThemedText, {
|
|
469805
469846
|
dimColor: true,
|
|
469806
|
-
children: "Please install git and restart
|
|
469847
|
+
children: "Please install git and restart Cody CLI."
|
|
469807
469848
|
}, undefined, false, undefined, this)
|
|
469808
469849
|
]
|
|
469809
469850
|
}, undefined, true, undefined, this);
|
|
@@ -471309,7 +471350,7 @@ function ManageMarketplaces({
|
|
|
471309
471350
|
marginTop: 1,
|
|
471310
471351
|
children: /* @__PURE__ */ jsx_dev_runtime239.jsxDEV(ThemedText, {
|
|
471311
471352
|
dimColor: true,
|
|
471312
|
-
children: "Auto-update enabled.
|
|
471353
|
+
children: "Auto-update enabled. Cody CLI will automatically update this marketplace and its installed plugins."
|
|
471313
471354
|
}, undefined, false, undefined, this)
|
|
471314
471355
|
}, undefined, false, undefined, this),
|
|
471315
471356
|
/* @__PURE__ */ jsx_dev_runtime239.jsxDEV(ThemedBox_default, {
|
|
@@ -475076,7 +475117,7 @@ async function validatePluginManifest(filePath) {
|
|
|
475076
475117
|
delete stripped[key];
|
|
475077
475118
|
warnings.push({
|
|
475078
475119
|
path: key,
|
|
475079
|
-
message: `Field '${key}' belongs in the marketplace entry (marketplace.json), ` + `not plugin.json. It's harmless here but unused —
|
|
475120
|
+
message: `Field '${key}' belongs in the marketplace entry (marketplace.json), ` + `not plugin.json. It's harmless here but unused — Cody CLI ` + `ignores it at load time.`
|
|
475080
475121
|
});
|
|
475081
475122
|
}
|
|
475082
475123
|
toValidate = stripped;
|
|
@@ -475091,7 +475132,7 @@ async function validatePluginManifest(filePath) {
|
|
|
475091
475132
|
if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(manifest.name)) {
|
|
475092
475133
|
warnings.push({
|
|
475093
475134
|
path: "name",
|
|
475094
|
-
message: `Plugin name "${manifest.name}" is not kebab-case.
|
|
475135
|
+
message: `Plugin name "${manifest.name}" is not kebab-case. Cody CLI accepts ` + `it, but the AINative marketplace sync requires kebab-case ` + `(lowercase letters, digits, and hyphens only, e.g., "my-plugin").`
|
|
475095
475136
|
});
|
|
475096
475137
|
}
|
|
475097
475138
|
if (!manifest.version) {
|
|
@@ -475285,7 +475326,7 @@ function validateComponentFile(filePath, content, fileType) {
|
|
|
475285
475326
|
} else {
|
|
475286
475327
|
warnings.push({
|
|
475287
475328
|
path: "description",
|
|
475288
|
-
message: `No description in frontmatter. A description helps users and
|
|
475329
|
+
message: `No description in frontmatter. A description helps users and Cody ` + `understand when to use this ${fileType}.`
|
|
475289
475330
|
});
|
|
475290
475331
|
}
|
|
475291
475332
|
if (fm.name !== undefined && fm.name !== null && typeof fm.name !== "string") {
|
|
@@ -481644,10 +481685,10 @@ var init_mobile = __esm(() => {
|
|
|
481644
481685
|
jsx_dev_runtime245 = __toESM(require_jsx_dev_runtime(), 1);
|
|
481645
481686
|
PLATFORMS = {
|
|
481646
481687
|
ios: {
|
|
481647
|
-
url: "https://
|
|
481688
|
+
url: "https://ainative.studio/mobile/ios"
|
|
481648
481689
|
},
|
|
481649
481690
|
android: {
|
|
481650
|
-
url: "https://
|
|
481691
|
+
url: "https://ainative.studio/mobile/android"
|
|
481651
481692
|
}
|
|
481652
481693
|
};
|
|
481653
481694
|
});
|
|
@@ -483968,7 +484009,7 @@ function GuestPassesUpsell() {
|
|
|
483968
484009
|
}, undefined, false, undefined, this),
|
|
483969
484010
|
" ·",
|
|
483970
484011
|
" ",
|
|
483971
|
-
reward ? `Share
|
|
484012
|
+
reward ? `Share Cody CLI and earn ${formatCreditAmount(reward)} of extra usage · /passes` : "3 guest passes at /passes"
|
|
483972
484013
|
]
|
|
483973
484014
|
}, undefined, true, undefined, this);
|
|
483974
484015
|
$3[0] = t0;
|
|
@@ -484054,11 +484095,22 @@ function CondensedLogo() {
|
|
|
484054
484095
|
const truncatedCwd = truncatePath(cwd2, Math.max(cwdAvailableWidth, 10));
|
|
484055
484096
|
let t4;
|
|
484056
484097
|
if ($3[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
484057
|
-
t4 = /* @__PURE__ */ jsx_dev_runtime251.jsxDEV(
|
|
484058
|
-
|
|
484059
|
-
|
|
484060
|
-
children:
|
|
484061
|
-
|
|
484098
|
+
t4 = /* @__PURE__ */ jsx_dev_runtime251.jsxDEV(ThemedBox_default, {
|
|
484099
|
+
flexDirection: "column",
|
|
484100
|
+
alignItems: "center",
|
|
484101
|
+
children: [
|
|
484102
|
+
/* @__PURE__ */ jsx_dev_runtime251.jsxDEV(ThemedText, {
|
|
484103
|
+
color: "#A78BFA",
|
|
484104
|
+
bold: true,
|
|
484105
|
+
children: "◆"
|
|
484106
|
+
}, undefined, false, undefined, this),
|
|
484107
|
+
/* @__PURE__ */ jsx_dev_runtime251.jsxDEV(ThemedText, {
|
|
484108
|
+
color: "#A78BFA",
|
|
484109
|
+
bold: true,
|
|
484110
|
+
children: "CODY"
|
|
484111
|
+
}, undefined, false, undefined, this)
|
|
484112
|
+
]
|
|
484113
|
+
}, undefined, true, undefined, this);
|
|
484062
484114
|
$3[7] = t4;
|
|
484063
484115
|
} else {
|
|
484064
484116
|
t4 = $3[7];
|
|
@@ -485698,7 +485750,7 @@ import { relative as relative24 } from "path";
|
|
|
485698
485750
|
function getActiveNotices(context4) {
|
|
485699
485751
|
return statusNoticeDefinitions.filter((notice) => notice.isActive(context4));
|
|
485700
485752
|
}
|
|
485701
|
-
var jsx_dev_runtime260, largeMemoryFilesNotice,
|
|
485753
|
+
var jsx_dev_runtime260, largeMemoryFilesNotice, ainativeSubscriberExternalTokenNotice, apiKeyConflictNotice, bothAuthMethodsNotice, largeAgentDescriptionsNotice, jetbrainsPluginNotice, statusNoticeDefinitions;
|
|
485702
485754
|
var init_statusNoticeDefinitions = __esm(() => {
|
|
485703
485755
|
init_ink2();
|
|
485704
485756
|
init_claudemd();
|
|
@@ -485752,7 +485804,7 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485752
485804
|
}, undefined, false, undefined, this);
|
|
485753
485805
|
}
|
|
485754
485806
|
};
|
|
485755
|
-
|
|
485807
|
+
ainativeSubscriberExternalTokenNotice = {
|
|
485756
485808
|
id: "claude-ai-external-token",
|
|
485757
485809
|
type: "warning",
|
|
485758
485810
|
isActive: () => {
|
|
@@ -485774,9 +485826,9 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485774
485826
|
children: [
|
|
485775
485827
|
"Auth conflict: Using ",
|
|
485776
485828
|
authTokenInfo.source,
|
|
485777
|
-
" instead of
|
|
485829
|
+
" instead of AINative account subscription token. Either unset ",
|
|
485778
485830
|
authTokenInfo.source,
|
|
485779
|
-
", or run `
|
|
485831
|
+
", or run `cody /logout`."
|
|
485780
485832
|
]
|
|
485781
485833
|
}, undefined, true, undefined, this)
|
|
485782
485834
|
]
|
|
@@ -485813,9 +485865,9 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485813
485865
|
children: [
|
|
485814
485866
|
"Auth conflict: Using ",
|
|
485815
485867
|
apiKeySource,
|
|
485816
|
-
" instead of
|
|
485868
|
+
" instead of AINative Console key. Either unset ",
|
|
485817
485869
|
apiKeySource,
|
|
485818
|
-
", or run `
|
|
485870
|
+
", or run `cody /logout`."
|
|
485819
485871
|
]
|
|
485820
485872
|
}, undefined, true, undefined, this)
|
|
485821
485873
|
]
|
|
@@ -485873,10 +485925,10 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485873
485925
|
children: [
|
|
485874
485926
|
"· Trying to use",
|
|
485875
485927
|
" ",
|
|
485876
|
-
authTokenInfo.source === "
|
|
485928
|
+
authTokenInfo.source === "ainative" ? "AINative OAuth" : authTokenInfo.source,
|
|
485877
485929
|
"?",
|
|
485878
485930
|
" ",
|
|
485879
|
-
apiKeySource === "ANTHROPIC_API_KEY" ? 'Unset the ANTHROPIC_API_KEY environment variable, or
|
|
485931
|
+
apiKeySource === "ANTHROPIC_API_KEY" ? 'Unset the ANTHROPIC_API_KEY environment variable, or cody /logout then say "No" to the API key approval before login.' : apiKeySource === "apiKeyHelper" ? "Unset the apiKeyHelper setting." : "cody /logout"
|
|
485880
485932
|
]
|
|
485881
485933
|
}, undefined, true, undefined, this),
|
|
485882
485934
|
/* @__PURE__ */ jsx_dev_runtime260.jsxDEV(ThemedText, {
|
|
@@ -485886,7 +485938,7 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485886
485938
|
apiKeySource,
|
|
485887
485939
|
"?",
|
|
485888
485940
|
" ",
|
|
485889
|
-
authTokenInfo.source === "
|
|
485941
|
+
authTokenInfo.source === "ainative" ? "cody /logout to sign out of AINative." : `Unset the ${authTokenInfo.source} environment variable.`
|
|
485890
485942
|
]
|
|
485891
485943
|
}, undefined, true, undefined, this)
|
|
485892
485944
|
]
|
|
@@ -485975,7 +486027,7 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485975
486027
|
}, undefined, true, undefined, this);
|
|
485976
486028
|
}
|
|
485977
486029
|
};
|
|
485978
|
-
statusNoticeDefinitions = [largeMemoryFilesNotice, largeAgentDescriptionsNotice,
|
|
486030
|
+
statusNoticeDefinitions = [largeMemoryFilesNotice, largeAgentDescriptionsNotice, ainativeSubscriberExternalTokenNotice, apiKeyConflictNotice, bothAuthMethodsNotice, jetbrainsPluginNotice];
|
|
485979
486031
|
});
|
|
485980
486032
|
|
|
485981
486033
|
// src/components/StatusNotices.tsx
|
|
@@ -491711,13 +491763,13 @@ async function launchAndDone(args, context4, onDone, billingNote, signal) {
|
|
|
491711
491763
|
var jsx_dev_runtime272, call31 = async (onDone, context4, args) => {
|
|
491712
491764
|
const gate = await checkOverageGate();
|
|
491713
491765
|
if (gate.kind === "not-enabled") {
|
|
491714
|
-
onDone("Free ultrareviews used. Enable Extra Usage at https://
|
|
491766
|
+
onDone("Free ultrareviews used. Enable Extra Usage at https://ainative.studio/settings/billing to continue.", {
|
|
491715
491767
|
display: "system"
|
|
491716
491768
|
});
|
|
491717
491769
|
return null;
|
|
491718
491770
|
}
|
|
491719
491771
|
if (gate.kind === "low-balance") {
|
|
491720
|
-
onDone(`Balance too low to launch ultrareview ($${gate.available.toFixed(2)} available, $10 minimum). Top up at https://
|
|
491772
|
+
onDone(`Balance too low to launch ultrareview ($${gate.available.toFixed(2)} available, $10 minimum). Top up at https://ainative.studio/settings/billing`, {
|
|
491721
491773
|
display: "system"
|
|
491722
491774
|
});
|
|
491723
491775
|
return null;
|
|
@@ -491744,7 +491796,7 @@ var init_ultrareviewCommand = __esm(() => {
|
|
|
491744
491796
|
});
|
|
491745
491797
|
|
|
491746
491798
|
// src/commands/review.ts
|
|
491747
|
-
var CCR_TERMS_URL = "https://
|
|
491799
|
+
var CCR_TERMS_URL = "https://docs.ainative.studio/cody-cli/web-sessions", LOCAL_REVIEW_PROMPT = (args) => `
|
|
491748
491800
|
You are an expert code reviewer. Follow these steps:
|
|
491749
491801
|
|
|
491750
491802
|
1. If no PR number is provided in the args, run \`gh pr list\` to show open PRs
|
|
@@ -492965,7 +493017,7 @@ ${reasons}`,
|
|
|
492965
493017
|
} : prev);
|
|
492966
493018
|
}
|
|
492967
493019
|
}
|
|
492968
|
-
var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://
|
|
493020
|
+
var ULTRAPLAN_TIMEOUT_MS, CCR_TERMS_URL2 = "https://docs.ainative.studio/cody-cli/web-sessions", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call35 = async (onDone, context4, args) => {
|
|
492969
493021
|
const blurb = args.trim();
|
|
492970
493022
|
if (!blurb) {
|
|
492971
493023
|
const msg = await launchUltraplan2({
|
|
@@ -495308,7 +495360,7 @@ var init_mappers = __esm(() => {
|
|
|
495308
495360
|
// src/components/tasks/RemoteSessionDetailDialog.tsx
|
|
495309
495361
|
function formatToolUseSummary(name3, input) {
|
|
495310
495362
|
if (name3 === EXIT_PLAN_MODE_V2_TOOL_NAME) {
|
|
495311
|
-
return "Review the plan in
|
|
495363
|
+
return "Review the plan in Cody CLI on the web";
|
|
495312
495364
|
}
|
|
495313
495365
|
if (!input || typeof input !== "object")
|
|
495314
495366
|
return name3;
|
|
@@ -495422,7 +495474,7 @@ function UltraplanSessionDetail(t0) {
|
|
|
495422
495474
|
if ($3[12] === Symbol.for("react.memo_cache_sentinel")) {
|
|
495423
495475
|
t72 = /* @__PURE__ */ jsx_dev_runtime284.jsxDEV(ThemedText, {
|
|
495424
495476
|
dimColor: true,
|
|
495425
|
-
children: "This will terminate the
|
|
495477
|
+
children: "This will terminate the Cody CLI on the web session."
|
|
495426
495478
|
}, undefined, false, undefined, this);
|
|
495427
495479
|
$3[12] = t72;
|
|
495428
495480
|
} else {
|
|
@@ -495633,7 +495685,7 @@ function UltraplanSessionDetail(t0) {
|
|
|
495633
495685
|
let t19;
|
|
495634
495686
|
if ($3[47] === Symbol.for("react.memo_cache_sentinel")) {
|
|
495635
495687
|
t19 = {
|
|
495636
|
-
label: "Review in
|
|
495688
|
+
label: "Review in Cody CLI on the web",
|
|
495637
495689
|
value: "open"
|
|
495638
495690
|
};
|
|
495639
495691
|
$3[47] = t19;
|
|
@@ -495965,13 +496017,13 @@ function ReviewSessionDetail(t0) {
|
|
|
495965
496017
|
let t3;
|
|
495966
496018
|
if ($3[11] !== completed || $3[12] !== onKill || $3[13] !== running) {
|
|
495967
496019
|
t3 = completed ? [{
|
|
495968
|
-
label: "Open in
|
|
496020
|
+
label: "Open in Cody CLI on the web",
|
|
495969
496021
|
value: "open"
|
|
495970
496022
|
}, {
|
|
495971
496023
|
label: "Dismiss",
|
|
495972
496024
|
value: "dismiss"
|
|
495973
496025
|
}] : [{
|
|
495974
|
-
label: "Open in
|
|
496026
|
+
label: "Open in Cody CLI on the web",
|
|
495975
496027
|
value: "open"
|
|
495976
496028
|
}, ...onKill && running ? [{
|
|
495977
496029
|
label: "Stop ultrareview",
|
|
@@ -498575,8 +498627,8 @@ function ThinkbackMenu(t0) {
|
|
|
498575
498627
|
let t7;
|
|
498576
498628
|
if ($3[16] !== handleCancel || $3[17] !== t6) {
|
|
498577
498629
|
t7 = /* @__PURE__ */ jsx_dev_runtime290.jsxDEV(Dialog, {
|
|
498578
|
-
title: "Think Back on 2025 with
|
|
498579
|
-
subtitle: "Generate your 2025
|
|
498630
|
+
title: "Think Back on 2025 with Cody CLI",
|
|
498631
|
+
subtitle: "Generate your 2025 Cody CLI Think Back (takes a few minutes to run)",
|
|
498580
498632
|
onCancel: handleCancel,
|
|
498581
498633
|
color: "claude",
|
|
498582
498634
|
children: t6
|
|
@@ -498785,7 +498837,7 @@ async function call40(onDone) {
|
|
|
498785
498837
|
onDone
|
|
498786
498838
|
}, undefined, false, undefined, this);
|
|
498787
498839
|
}
|
|
498788
|
-
var import_compiler_runtime227, import_react165, jsx_dev_runtime290, OFFICIAL_MARKETPLACE_REPO = "anthropics/claude-plugins-official", SKILL_NAME = "thinkback", EDIT_PROMPT = 'Use the Skill tool to invoke the "thinkback" skill with mode=edit to modify my existing
|
|
498840
|
+
var import_compiler_runtime227, import_react165, jsx_dev_runtime290, OFFICIAL_MARKETPLACE_REPO = "anthropics/claude-plugins-official", SKILL_NAME = "thinkback", EDIT_PROMPT = 'Use the Skill tool to invoke the "thinkback" skill with mode=edit to modify my existing Cody CLI year in review animation. Ask me what I want to change. When the animation is ready, tell the user to run /think-back again to play it.', FIX_PROMPT = 'Use the Skill tool to invoke the "thinkback" skill with mode=fix to fix validation or rendering errors in my existing Cody CLI year in review animation. Run the validator, identify errors, and fix them. When the animation is ready, tell the user to run /think-back again to play it.', REGENERATE_PROMPT = 'Use the Skill tool to invoke the "thinkback" skill with mode=regenerate to create a completely new Cody CLI year in review animation from scratch. Delete the existing animation and start fresh. When the animation is ready, tell the user to run /think-back again to play it.';
|
|
498789
498841
|
var init_thinkback = __esm(() => {
|
|
498790
498842
|
init_execa();
|
|
498791
498843
|
init_select();
|
|
@@ -499712,7 +499764,7 @@ function RemoveWorkspaceDirectory(t0) {
|
|
|
499712
499764
|
let t4;
|
|
499713
499765
|
if ($3[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
499714
499766
|
t4 = /* @__PURE__ */ jsx_dev_runtime295.jsxDEV(ThemedText, {
|
|
499715
|
-
children: "
|
|
499767
|
+
children: "Cody will no longer have access to files in this directory."
|
|
499716
499768
|
}, undefined, false, undefined, this);
|
|
499717
499769
|
$3[10] = t4;
|
|
499718
499770
|
} else {
|
|
@@ -500393,9 +500445,9 @@ function PermissionRulesTab(t0) {
|
|
|
500393
500445
|
let t8;
|
|
500394
500446
|
if ($3[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
500395
500447
|
t8 = {
|
|
500396
|
-
allow: "
|
|
500397
|
-
ask: "
|
|
500398
|
-
deny: "
|
|
500448
|
+
allow: "Cody won't ask before using allowed tools.",
|
|
500449
|
+
ask: "Cody will always ask for confirmation before using these tools.",
|
|
500450
|
+
deny: "Cody will always reject requests to use denied tools."
|
|
500399
500451
|
};
|
|
500400
500452
|
$3[10] = t8;
|
|
500401
500453
|
} else {
|
|
@@ -501158,7 +501210,7 @@ function PermissionRuleList(t0) {
|
|
|
501158
501210
|
let t28;
|
|
501159
501211
|
if ($3[89] === Symbol.for("react.memo_cache_sentinel")) {
|
|
501160
501212
|
t28 = /* @__PURE__ */ jsx_dev_runtime297.jsxDEV(ThemedText, {
|
|
501161
|
-
children: "
|
|
501213
|
+
children: "Cody can read files in the workspace, and make edits when auto-accept edits is on."
|
|
501162
501214
|
}, undefined, false, undefined, this);
|
|
501163
501215
|
$3[89] = t28;
|
|
501164
501216
|
} else {
|
|
@@ -501844,8 +501896,8 @@ function FastModePicker(t0) {
|
|
|
501844
501896
|
"Learn more:",
|
|
501845
501897
|
" ",
|
|
501846
501898
|
/* @__PURE__ */ jsx_dev_runtime301.jsxDEV(Link, {
|
|
501847
|
-
url: "https://
|
|
501848
|
-
children: "https://
|
|
501899
|
+
url: "https://docs.ainative.studio/cody-cli/fast-mode",
|
|
501900
|
+
children: "https://docs.ainative.studio/cody-cli/fast-mode"
|
|
501849
501901
|
}, undefined, false, undefined, this)
|
|
501850
501902
|
]
|
|
501851
501903
|
}, undefined, true, undefined, this);
|
|
@@ -502178,7 +502230,7 @@ function Passes({
|
|
|
502178
502230
|
children: /* @__PURE__ */ jsx_dev_runtime302.jsxDEV(ThemedText, {
|
|
502179
502231
|
dimColor: true,
|
|
502180
502232
|
children: [
|
|
502181
|
-
referrerReward ? `Share a free week of
|
|
502233
|
+
referrerReward ? `Share a free week of Cody CLI with friends. If they love it and subscribe, you'll get ${formatCreditAmount(referrerReward)} of extra usage to keep building. ` : "Share a free week of Cody CLI with friends. ",
|
|
502182
502234
|
/* @__PURE__ */ jsx_dev_runtime302.jsxDEV(Link, {
|
|
502183
502235
|
url: referrerReward ? "https://support.claude.com/en/articles/13456702-claude-code-guest-passes" : "https://support.claude.com/en/articles/12875061-claude-code-guest-passes",
|
|
502184
502236
|
children: "Terms apply."
|
|
@@ -502262,9 +502314,9 @@ var init_passes2 = __esm(() => {
|
|
|
502262
502314
|
get description() {
|
|
502263
502315
|
const reward = getCachedReferrerReward();
|
|
502264
502316
|
if (reward) {
|
|
502265
|
-
return "Share a free week of
|
|
502317
|
+
return "Share a free week of Cody CLI with friends and earn extra usage";
|
|
502266
502318
|
}
|
|
502267
|
-
return "Share a free week of
|
|
502319
|
+
return "Share a free week of Cody CLI with friends";
|
|
502268
502320
|
},
|
|
502269
502321
|
get isHidden() {
|
|
502270
502322
|
const { eligible: eligible2, hasCache } = checkCachedPassesEligibility();
|
|
@@ -502334,9 +502386,9 @@ function GracePeriodContentBody() {
|
|
|
502334
502386
|
t3,
|
|
502335
502387
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502336
502388
|
children: [
|
|
502337
|
-
"— Allow the use of your chats and coding sessions to train and improve
|
|
502389
|
+
"— Allow the use of your chats and coding sessions to train and improve AINative AI models. Change anytime in your Privacy Settings (",
|
|
502338
502390
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502339
|
-
url: "https://
|
|
502391
|
+
url: "https://ainative.studio/settings/privacy"
|
|
502340
502392
|
}, undefined, false, undefined, this),
|
|
502341
502393
|
")."
|
|
502342
502394
|
]
|
|
@@ -502381,7 +502433,7 @@ function GracePeriodContentBody() {
|
|
|
502381
502433
|
let t6;
|
|
502382
502434
|
if ($3[6] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502383
502435
|
t6 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502384
|
-
url: "https://
|
|
502436
|
+
url: "https://ainative.studio/news/terms-update"
|
|
502385
502437
|
}, undefined, false, undefined, this);
|
|
502386
502438
|
$3[6] = t6;
|
|
502387
502439
|
} else {
|
|
@@ -502390,7 +502442,7 @@ function GracePeriodContentBody() {
|
|
|
502390
502442
|
let t7;
|
|
502391
502443
|
if ($3[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502392
502444
|
t7 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502393
|
-
url: "https://
|
|
502445
|
+
url: "https://ainative.studio/legal/terms"
|
|
502394
502446
|
}, undefined, false, undefined, this);
|
|
502395
502447
|
$3[7] = t7;
|
|
502396
502448
|
} else {
|
|
@@ -502410,7 +502462,7 @@ function GracePeriodContentBody() {
|
|
|
502410
502462
|
t7,
|
|
502411
502463
|
") and Privacy Policy (",
|
|
502412
502464
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502413
|
-
url: "https://
|
|
502465
|
+
url: "https://ainative.studio/legal/privacy"
|
|
502414
502466
|
}, undefined, false, undefined, this),
|
|
502415
502467
|
")"
|
|
502416
502468
|
]
|
|
@@ -502450,13 +502502,13 @@ function PostGracePeriodContentBody() {
|
|
|
502450
502502
|
children: [
|
|
502451
502503
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502452
502504
|
bold: true,
|
|
502453
|
-
children: "Help improve
|
|
502505
|
+
children: "Help improve Cody"
|
|
502454
502506
|
}, undefined, false, undefined, this),
|
|
502455
502507
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502456
|
-
children: "Allow the use of your chats and coding sessions to train and improve
|
|
502508
|
+
children: "Allow the use of your chats and coding sessions to train and improve AINative AI models. You can change this anytime in Privacy Settings"
|
|
502457
502509
|
}, undefined, false, undefined, this),
|
|
502458
502510
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502459
|
-
url: "https://
|
|
502511
|
+
url: "https://ainative.studio/settings/privacy"
|
|
502460
502512
|
}, undefined, false, undefined, this)
|
|
502461
502513
|
]
|
|
502462
502514
|
}, undefined, true, undefined, this);
|
|
@@ -502493,7 +502545,7 @@ function PostGracePeriodContentBody() {
|
|
|
502493
502545
|
let t4;
|
|
502494
502546
|
if ($3[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502495
502547
|
t4 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502496
|
-
url: "https://
|
|
502548
|
+
url: "https://ainative.studio/news/terms-update"
|
|
502497
502549
|
}, undefined, false, undefined, this);
|
|
502498
502550
|
$3[4] = t4;
|
|
502499
502551
|
} else {
|
|
@@ -502502,7 +502554,7 @@ function PostGracePeriodContentBody() {
|
|
|
502502
502554
|
let t5;
|
|
502503
502555
|
if ($3[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502504
502556
|
t5 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502505
|
-
url: "https://
|
|
502557
|
+
url: "https://ainative.studio/legal/terms"
|
|
502506
502558
|
}, undefined, false, undefined, this);
|
|
502507
502559
|
$3[5] = t5;
|
|
502508
502560
|
} else {
|
|
@@ -502522,7 +502574,7 @@ function PostGracePeriodContentBody() {
|
|
|
502522
502574
|
t5,
|
|
502523
502575
|
") and Privacy Policy (",
|
|
502524
502576
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502525
|
-
url: "https://
|
|
502577
|
+
url: "https://ainative.studio/legal/privacy"
|
|
502526
502578
|
}, undefined, false, undefined, this),
|
|
502527
502579
|
")"
|
|
502528
502580
|
]
|
|
@@ -502626,13 +502678,13 @@ function GroveDialog(t0) {
|
|
|
502626
502678
|
let t4;
|
|
502627
502679
|
if ($3[8] !== groveConfig?.domain_excluded) {
|
|
502628
502680
|
t4 = groveConfig?.domain_excluded ? [{
|
|
502629
|
-
label: "Accept terms · Help improve
|
|
502681
|
+
label: "Accept terms · Help improve Cody: OFF (for emails with your domain)",
|
|
502630
502682
|
value: "accept_opt_out"
|
|
502631
502683
|
}] : [{
|
|
502632
|
-
label: "Accept terms · Help improve
|
|
502684
|
+
label: "Accept terms · Help improve Cody: ON",
|
|
502633
502685
|
value: "accept_opt_in"
|
|
502634
502686
|
}, {
|
|
502635
|
-
label: "Accept terms · Help improve
|
|
502687
|
+
label: "Accept terms · Help improve Cody: OFF",
|
|
502636
502688
|
value: "accept_opt_out"
|
|
502637
502689
|
}];
|
|
502638
502690
|
$3[8] = groveConfig?.domain_excluded;
|
|
@@ -502910,7 +502962,7 @@ function PrivacySettingsDialog(t0) {
|
|
|
502910
502962
|
"Review and manage your privacy settings at",
|
|
502911
502963
|
" ",
|
|
502912
502964
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502913
|
-
url: "https://
|
|
502965
|
+
url: "https://ainative.studio/settings/privacy"
|
|
502914
502966
|
}, undefined, false, undefined, this)
|
|
502915
502967
|
]
|
|
502916
502968
|
}, undefined, true, undefined, this);
|
|
@@ -502924,7 +502976,7 @@ function PrivacySettingsDialog(t0) {
|
|
|
502924
502976
|
width: 44,
|
|
502925
502977
|
children: /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502926
502978
|
bold: true,
|
|
502927
|
-
children: "Help improve
|
|
502979
|
+
children: "Help improve Cody"
|
|
502928
502980
|
}, undefined, false, undefined, this)
|
|
502929
502981
|
}, undefined, false, undefined, this);
|
|
502930
502982
|
$3[10] = t6;
|
|
@@ -503052,7 +503104,7 @@ async function call46(onDone) {
|
|
|
503052
503104
|
location: "settings"
|
|
503053
503105
|
}, undefined, false, undefined, this);
|
|
503054
503106
|
}
|
|
503055
|
-
var jsx_dev_runtime305, FALLBACK_MESSAGE = "Review and manage your privacy settings at https://
|
|
503107
|
+
var jsx_dev_runtime305, FALLBACK_MESSAGE = "Review and manage your privacy settings at https://ainative.studio/settings/privacy";
|
|
503056
503108
|
var init_privacy_settings = __esm(() => {
|
|
503057
503109
|
init_Grove();
|
|
503058
503110
|
init_analytics();
|
|
@@ -503505,7 +503557,7 @@ function SelectEventMode(t0) {
|
|
|
503505
503557
|
" This menu is read-only. To add or modify hooks, edit settings.json directly or ask Claude.",
|
|
503506
503558
|
" ",
|
|
503507
503559
|
/* @__PURE__ */ jsx_dev_runtime306.jsxDEV(Link, {
|
|
503508
|
-
url: "https://
|
|
503560
|
+
url: "https://docs.ainative.studio/cody-cli/hooks",
|
|
503509
503561
|
children: "Learn more"
|
|
503510
503562
|
}, undefined, false, undefined, this)
|
|
503511
503563
|
]
|
|
@@ -509233,7 +509285,7 @@ function LocationStep() {
|
|
|
509233
509285
|
let t0;
|
|
509234
509286
|
if ($3[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
509235
509287
|
t0 = {
|
|
509236
|
-
label: "Project (.
|
|
509288
|
+
label: "Project (.cody/agents/)",
|
|
509237
509289
|
value: "projectSettings"
|
|
509238
509290
|
};
|
|
509239
509291
|
$3[0] = t0;
|
|
@@ -509360,13 +509412,13 @@ function MemoryStep() {
|
|
|
509360
509412
|
label: "None (no persistent memory)",
|
|
509361
509413
|
value: "none"
|
|
509362
509414
|
}, {
|
|
509363
|
-
label: "Project scope (.
|
|
509415
|
+
label: "Project scope (.cody/agent-memory/)",
|
|
509364
509416
|
value: "project"
|
|
509365
509417
|
}, {
|
|
509366
|
-
label: "Local scope (.
|
|
509418
|
+
label: "Local scope (.cody/agent-memory-local/)",
|
|
509367
509419
|
value: "local"
|
|
509368
509420
|
}] : [{
|
|
509369
|
-
label: "Project scope (.
|
|
509421
|
+
label: "Project scope (.cody/agent-memory/) (Recommended)",
|
|
509370
509422
|
value: "project"
|
|
509371
509423
|
}, {
|
|
509372
509424
|
label: "None (no persistent memory)",
|
|
@@ -509375,7 +509427,7 @@ function MemoryStep() {
|
|
|
509375
509427
|
label: "User scope (~/.cody/agent-memory/)",
|
|
509376
509428
|
value: "user"
|
|
509377
509429
|
}, {
|
|
509378
|
-
label: "Local scope (.
|
|
509430
|
+
label: "Local scope (.cody/agent-memory-local/)",
|
|
509379
509431
|
value: "local"
|
|
509380
509432
|
}];
|
|
509381
509433
|
$3[1] = isUserScope;
|
|
@@ -509484,7 +509536,7 @@ function MethodStep() {
|
|
|
509484
509536
|
let t0;
|
|
509485
509537
|
if ($3[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
509486
509538
|
t0 = [{
|
|
509487
|
-
label: "Generate with
|
|
509539
|
+
label: "Generate with Cody (recommended)",
|
|
509488
509540
|
value: "generate"
|
|
509489
509541
|
}, {
|
|
509490
509542
|
label: "Manual configuration",
|
|
@@ -511997,7 +512049,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
511997
512049
|
var call56 = async () => {
|
|
511998
512050
|
return {
|
|
511999
512051
|
type: "text",
|
|
512000
|
-
value: `${"0.7.15"} (built ${"
|
|
512052
|
+
value: `${"0.7.15"} (built ${"1777195093"})`
|
|
512001
512053
|
};
|
|
512002
512054
|
}, version6, version_default;
|
|
512003
512055
|
var init_version = __esm(() => {
|
|
@@ -512746,7 +512798,7 @@ function OverridesSelect(t0) {
|
|
|
512746
512798
|
"Learn more:",
|
|
512747
512799
|
" ",
|
|
512748
512800
|
/* @__PURE__ */ jsx_dev_runtime340.jsxDEV(Link, {
|
|
512749
|
-
url: "https://
|
|
512801
|
+
url: "https://docs.ainative.studio/cody-cli/sandboxing#configure-sandboxing",
|
|
512750
512802
|
children: "code.claude.com/docs/en/sandboxing#configure-sandboxing"
|
|
512751
512803
|
}, undefined, false, undefined, this)
|
|
512752
512804
|
]
|
|
@@ -513117,7 +513169,7 @@ function SandboxModeTab(t0) {
|
|
|
513117
513169
|
"Learn more:",
|
|
513118
513170
|
" ",
|
|
513119
513171
|
/* @__PURE__ */ jsx_dev_runtime341.jsxDEV(Link, {
|
|
513120
|
-
url: "https://
|
|
513172
|
+
url: "https://docs.ainative.studio/cody-cli/sandboxing",
|
|
513121
513173
|
children: "code.claude.com/docs/en/sandboxing"
|
|
513122
513174
|
}, undefined, false, undefined, this)
|
|
513123
513175
|
]
|
|
@@ -513408,7 +513460,7 @@ function getNativeMessagingHostsDirs() {
|
|
|
513408
513460
|
if (platform6 === "windows") {
|
|
513409
513461
|
const home = homedir31();
|
|
513410
513462
|
const appData = process.env.APPDATA || join122(home, "AppData", "Local");
|
|
513411
|
-
return [join122(appData, "
|
|
513463
|
+
return [join122(appData, "Cody CLI", "ChromeNativeHost")];
|
|
513412
513464
|
}
|
|
513413
513465
|
return getAllNativeMessagingHostsDirs().map(({ path: path26 }) => path26);
|
|
513414
513466
|
}
|
|
@@ -513419,7 +513471,7 @@ async function installChromeNativeHostManifest(manifestBinaryPath) {
|
|
|
513419
513471
|
}
|
|
513420
513472
|
const manifest = {
|
|
513421
513473
|
name: NATIVE_HOST_IDENTIFIER,
|
|
513422
|
-
description: "
|
|
513474
|
+
description: "Cody CLI Browser Extension Native Host",
|
|
513423
513475
|
path: manifestBinaryPath,
|
|
513424
513476
|
type: "stdio",
|
|
513425
513477
|
allowed_origins: [
|
|
@@ -513487,11 +513539,11 @@ async function createWrapperScript(command7) {
|
|
|
513487
513539
|
const wrapperPath = platform6 === "windows" ? join122(chromeDir, "chrome-native-host.bat") : join122(chromeDir, "chrome-native-host");
|
|
513488
513540
|
const scriptContent = platform6 === "windows" ? `@echo off
|
|
513489
513541
|
REM Chrome native host wrapper script
|
|
513490
|
-
REM Generated by
|
|
513542
|
+
REM Generated by Cody CLI - do not edit manually
|
|
513491
513543
|
${command7}
|
|
513492
513544
|
` : `#!/bin/sh
|
|
513493
513545
|
# Chrome native host wrapper script
|
|
513494
|
-
# Generated by
|
|
513546
|
+
# Generated by Cody CLI - do not edit manually
|
|
513495
513547
|
exec ${command7}
|
|
513496
513548
|
`;
|
|
513497
513549
|
const existingContent = await readFile48(wrapperPath, "utf-8").catch(() => null);
|
|
@@ -513744,7 +513796,7 @@ function ClaudeInChromeMenu(t0) {
|
|
|
513744
513796
|
let t6;
|
|
513745
513797
|
if ($3[20] === Symbol.for("react.memo_cache_sentinel")) {
|
|
513746
513798
|
t6 = /* @__PURE__ */ jsx_dev_runtime343.jsxDEV(ThemedText, {
|
|
513747
|
-
children: "Claude in Chrome works with the Chrome extension to let you control your browser directly from
|
|
513799
|
+
children: "Claude in Chrome works with the Chrome extension to let you control your browser directly from Cody CLI. Navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests."
|
|
513748
513800
|
}, undefined, false, undefined, this);
|
|
513749
513801
|
$3[20] = t6;
|
|
513750
513802
|
} else {
|
|
@@ -513859,7 +513911,7 @@ function ClaudeInChromeMenu(t0) {
|
|
|
513859
513911
|
if ($3[33] === Symbol.for("react.memo_cache_sentinel")) {
|
|
513860
513912
|
t10 = /* @__PURE__ */ jsx_dev_runtime343.jsxDEV(ThemedText, {
|
|
513861
513913
|
dimColor: true,
|
|
513862
|
-
children: "Learn more: https://
|
|
513914
|
+
children: "Learn more: https://docs.ainative.studio/cody-cli/chrome"
|
|
513863
513915
|
}, undefined, false, undefined, this);
|
|
513864
513916
|
$3[33] = t10;
|
|
513865
513917
|
} else {
|
|
@@ -513916,7 +513968,7 @@ function _temp271(c6) {
|
|
|
513916
513968
|
function _temp159(s) {
|
|
513917
513969
|
return s.mcp.clients;
|
|
513918
513970
|
}
|
|
513919
|
-
var import_compiler_runtime268, import_react186, jsx_dev_runtime343, CHROME_EXTENSION_URL = "https://
|
|
513971
|
+
var import_compiler_runtime268, import_react186, jsx_dev_runtime343, CHROME_EXTENSION_URL = "https://ainative.studio/chrome", CHROME_PERMISSIONS_URL = "https://clau.de/chrome/permissions", CHROME_RECONNECT_URL = "https://clau.de/chrome/reconnect", call58 = async function(onDone) {
|
|
513920
513972
|
const isExtensionInstalled = await isChromeExtensionInstalled();
|
|
513921
513973
|
const config4 = getGlobalConfig();
|
|
513922
513974
|
const isSubscriber = isActiveSubscriber();
|
|
@@ -515033,13 +515085,13 @@ function SetModelAndClose({
|
|
|
515033
515085
|
return;
|
|
515034
515086
|
}
|
|
515035
515087
|
if (model && isOpus1mUnavailable(model)) {
|
|
515036
|
-
onDone(`Opus 4.6 with 1M context is not available for your account. Learn more: https://
|
|
515088
|
+
onDone(`Opus 4.6 with 1M context is not available for your account. Learn more: https://docs.ainative.studio/cody-cli/model-config#extended-context-with-1m`, {
|
|
515037
515089
|
display: "system"
|
|
515038
515090
|
});
|
|
515039
515091
|
return;
|
|
515040
515092
|
}
|
|
515041
515093
|
if (model && isSonnet1mUnavailable(model)) {
|
|
515042
|
-
onDone(`Sonnet 4.6 with 1M context is not available for your account. Learn more: https://
|
|
515094
|
+
onDone(`Sonnet 4.6 with 1M context is not available for your account. Learn more: https://docs.ainative.studio/cody-cli/model-config#extended-context-with-1m`, {
|
|
515043
515095
|
display: "system"
|
|
515044
515096
|
});
|
|
515045
515097
|
return;
|
|
@@ -515200,7 +515252,7 @@ var init_model3 = __esm(() => {
|
|
|
515200
515252
|
type: "local-jsx",
|
|
515201
515253
|
name: "model",
|
|
515202
515254
|
get description() {
|
|
515203
|
-
return `Set the
|
|
515255
|
+
return `Set the model for Cody CLI (currently ${renderModelName(getMainLoopModel())})`;
|
|
515204
515256
|
},
|
|
515205
515257
|
argumentHint: "[model]",
|
|
515206
515258
|
get immediate() {
|
|
@@ -515982,7 +516034,7 @@ function _temp161(env5) {
|
|
|
515982
516034
|
value: env5.environment_id
|
|
515983
516035
|
};
|
|
515984
516036
|
}
|
|
515985
|
-
var import_compiler_runtime272, import_react190, jsx_dev_runtime352, DIALOG_TITLE = "Select Remote Environment", SETUP_HINT = `Configure environments at: https://
|
|
516037
|
+
var import_compiler_runtime272, import_react190, jsx_dev_runtime352, DIALOG_TITLE = "Select Remote Environment", SETUP_HINT = `Configure environments at: https://ainative.studio`;
|
|
515986
516038
|
var init_RemoteEnvironmentDialog = __esm(() => {
|
|
515987
516039
|
init_source();
|
|
515988
516040
|
init_figures();
|
|
@@ -516058,7 +516110,7 @@ async function call67(onDone, context4) {
|
|
|
516058
516110
|
return null;
|
|
516059
516111
|
}
|
|
516060
516112
|
}
|
|
516061
|
-
const url3 = "https://
|
|
516113
|
+
const url3 = "https://ainative.studio/upgrade";
|
|
516062
516114
|
await openBrowser(url3);
|
|
516063
516115
|
return /* @__PURE__ */ jsx_dev_runtime354.jsxDEV(Login, {
|
|
516064
516116
|
startingMessage: "Starting new login following /upgrade. Exit with Ctrl-C to use existing account.",
|
|
@@ -516069,7 +516121,7 @@ async function call67(onDone, context4) {
|
|
|
516069
516121
|
}, undefined, false, undefined, this);
|
|
516070
516122
|
} catch (error43) {
|
|
516071
516123
|
logError2(error43);
|
|
516072
|
-
setTimeout(onDone, 0, "Failed to open browser. Please visit https://
|
|
516124
|
+
setTimeout(onDone, 0, "Failed to open browser. Please visit https://ainative.studio/upgrade to upgrade.");
|
|
516073
516125
|
}
|
|
516074
516126
|
return null;
|
|
516075
516127
|
}
|
|
@@ -518058,7 +518110,7 @@ function Stats2(t0) {
|
|
|
518058
518110
|
children: [
|
|
518059
518111
|
/* @__PURE__ */ jsx_dev_runtime357.jsxDEV(Spinner, {}, undefined, false, undefined, this),
|
|
518060
518112
|
/* @__PURE__ */ jsx_dev_runtime357.jsxDEV(ThemedText, {
|
|
518061
|
-
children: " Loading your
|
|
518113
|
+
children: " Loading your Cody CLI stats…"
|
|
518062
518114
|
}, undefined, false, undefined, this)
|
|
518063
518115
|
]
|
|
518064
518116
|
}, undefined, true, undefined, this);
|
|
@@ -518219,7 +518271,7 @@ function StatsContent(t0) {
|
|
|
518219
518271
|
marginTop: 1,
|
|
518220
518272
|
children: /* @__PURE__ */ jsx_dev_runtime357.jsxDEV(ThemedText, {
|
|
518221
518273
|
color: "warning",
|
|
518222
|
-
children: "No stats available yet. Start using
|
|
518274
|
+
children: "No stats available yet. Start using Cody CLI!"
|
|
518223
518275
|
}, undefined, false, undefined, this)
|
|
518224
518276
|
}, undefined, false, undefined, this);
|
|
518225
518277
|
$3[15] = t72;
|
|
@@ -525184,7 +525236,7 @@ function getMemoryScopeDisplay(memory2) {
|
|
|
525184
525236
|
case "user":
|
|
525185
525237
|
return `User (${join131(getMemoryBaseDir(), "agent-memory")}/)`;
|
|
525186
525238
|
case "project":
|
|
525187
|
-
return "Project (.
|
|
525239
|
+
return "Project (.cody/agent-memory/)";
|
|
525188
525240
|
case "local":
|
|
525189
525241
|
return `Local (${getLocalAgentMemoryDir("...")})`;
|
|
525190
525242
|
default:
|
|
@@ -525293,9 +525345,9 @@ function isClaudeConfigFilePath(filePath) {
|
|
|
525293
525345
|
if (isClaudeSettingsPath(filePath)) {
|
|
525294
525346
|
return true;
|
|
525295
525347
|
}
|
|
525296
|
-
const commandsDir = join132(getOriginalCwd(), ".
|
|
525297
|
-
const agentsDir = join132(getOriginalCwd(), ".
|
|
525298
|
-
const skillsDir = join132(getOriginalCwd(), ".
|
|
525348
|
+
const commandsDir = join132(getOriginalCwd(), ".cody", "commands");
|
|
525349
|
+
const agentsDir = join132(getOriginalCwd(), ".cody", "agents");
|
|
525350
|
+
const skillsDir = join132(getOriginalCwd(), ".cody", "skills");
|
|
525299
525351
|
return pathInWorkingPath(filePath, commandsDir) || pathInWorkingPath(filePath, agentsDir) || pathInWorkingPath(filePath, skillsDir);
|
|
525300
525352
|
}
|
|
525301
525353
|
function isSessionPlanFile(absolutePath) {
|
|
@@ -526856,7 +526908,7 @@ async function execPromptHook(hook, hookName, hookEvent, jsonInput, signal, tool
|
|
|
526856
526908
|
const response = await queryModelWithoutStreaming({
|
|
526857
526909
|
messages: messagesToQuery,
|
|
526858
526910
|
systemPrompt: asSystemPrompt([
|
|
526859
|
-
`You are evaluating a hook in
|
|
526911
|
+
`You are evaluating a hook in Cody CLI.
|
|
526860
526912
|
|
|
526861
526913
|
Your response must be a JSON object matching one of the following schemas:
|
|
526862
526914
|
1. If the condition is met, return: {"ok": true}
|
|
@@ -527022,7 +527074,7 @@ async function execAgentHook(hook, hookName, hookEvent, jsonInput, signal, toolU
|
|
|
527022
527074
|
structuredOutputTool
|
|
527023
527075
|
];
|
|
527024
527076
|
const systemPrompt = asSystemPrompt([
|
|
527025
|
-
`You are verifying a stop condition in
|
|
527077
|
+
`You are verifying a stop condition in Cody CLI. Your task is to verify that the agent completed the given plan. The conversation transcript is available at: ${transcriptPath}
|
|
527026
527078
|
You can read this file to analyze the conversation history if needed.
|
|
527027
527079
|
|
|
527028
527080
|
Use the available tools to inspect the codebase and verify the condition.
|
|
@@ -532561,9 +532613,9 @@ function stripExcessMediaItems(messages, limit) {
|
|
|
532561
532613
|
};
|
|
532562
532614
|
});
|
|
532563
532615
|
}
|
|
532564
|
-
async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
532565
|
-
const baseUrl =
|
|
532566
|
-
const apiKey =
|
|
532616
|
+
async function* ainativeBypass(messages, systemPrompt, model, toolSchemas, signal) {
|
|
532617
|
+
const baseUrl = getBaseURLForModel(model);
|
|
532618
|
+
const apiKey = getApiKeyForModel(model);
|
|
532567
532619
|
const chatMessages = [];
|
|
532568
532620
|
const sysText = systemPrompt.join(`
|
|
532569
532621
|
`);
|
|
@@ -532621,9 +532673,18 @@ async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
|
532621
532673
|
description: String(t.description ?? "").slice(0, 300),
|
|
532622
532674
|
input_schema: simplifySchema(t.input_schema ?? {})
|
|
532623
532675
|
}));
|
|
532676
|
+
const safeParseArgs = (raw) => {
|
|
532677
|
+
if (!raw)
|
|
532678
|
+
return {};
|
|
532679
|
+
try {
|
|
532680
|
+
return JSON.parse(raw);
|
|
532681
|
+
} catch {
|
|
532682
|
+
return {};
|
|
532683
|
+
}
|
|
532684
|
+
};
|
|
532624
532685
|
const anthropicBody = {
|
|
532625
532686
|
model,
|
|
532626
|
-
max_tokens:
|
|
532687
|
+
max_tokens: getMaxOutputTokensForModel(model),
|
|
532627
532688
|
messages: chatMessages.filter((m2) => m2.role !== "system").map((m2) => ({
|
|
532628
532689
|
role: m2.role === "tool" ? "user" : m2.role,
|
|
532629
532690
|
content: m2.role === "tool" ? [{ type: "tool_result", tool_use_id: m2.tool_call_id, content: m2.content }] : m2.tool_calls ? [
|
|
@@ -532632,7 +532693,7 @@ async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
|
532632
532693
|
type: "tool_use",
|
|
532633
532694
|
id: tc.id,
|
|
532634
532695
|
name: tc.function.name,
|
|
532635
|
-
input:
|
|
532696
|
+
input: safeParseArgs(tc.function.arguments)
|
|
532636
532697
|
}))
|
|
532637
532698
|
] : m2.content
|
|
532638
532699
|
})),
|
|
@@ -532651,16 +532712,26 @@ async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
|
532651
532712
|
"anthropic-version": "2023-06-01"
|
|
532652
532713
|
},
|
|
532653
532714
|
body: JSON.stringify(anthropicBody),
|
|
532654
|
-
signal: AbortSignal.timeout(
|
|
532715
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(600000)]) : AbortSignal.timeout(600000)
|
|
532655
532716
|
});
|
|
532656
532717
|
if (!resp.ok) {
|
|
532657
532718
|
const errText = await resp.text().catch(() => "unknown error");
|
|
532719
|
+
if (resp.status === 401 && errText.includes("0.0.0.0")) {
|
|
532720
|
+
throw new Error(`AINative gateway error: the upstream LLM provider rejected the request. ` + `This is a backend configuration issue (model: ${model}). ` + `Try a different model with /model, or contact AINative support.`);
|
|
532721
|
+
}
|
|
532658
532722
|
throw new Error(`AINative API error: ${resp.status} ${errText}`);
|
|
532659
532723
|
}
|
|
532660
|
-
|
|
532724
|
+
let data;
|
|
532725
|
+
try {
|
|
532726
|
+
data = await resp.json();
|
|
532727
|
+
} catch {
|
|
532728
|
+
const raw = await resp.text().catch(() => "");
|
|
532729
|
+
throw new Error(`AINative API error: malformed JSON response (${raw.slice(0, 200)})`);
|
|
532730
|
+
}
|
|
532661
532731
|
const cleanedContent = (data.content || [{ type: "text", text: "" }]).map((block) => {
|
|
532662
532732
|
if (block.type === "text" && typeof block.text === "string") {
|
|
532663
|
-
|
|
532733
|
+
const text2 = block.text.replace(/<tool_call>[\s\S]*?<\/tool_call>/g, "").replace(/<\/?tool_call>/g, "").trimEnd();
|
|
532734
|
+
return { ...block, text: text2 };
|
|
532664
532735
|
}
|
|
532665
532736
|
return block;
|
|
532666
532737
|
});
|
|
@@ -532751,6 +532822,10 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
|
|
|
532751
532822
|
}
|
|
532752
532823
|
}
|
|
532753
532824
|
let useToolSearch = await isToolSearchEnabled(options.model, tools, options.getToolPermissionContext, options.agents, "query");
|
|
532825
|
+
if (useToolSearch && isAINativeProvider() && !isClaudeModelName(options.model)) {
|
|
532826
|
+
logForDebugging("[AINative] Disabling tool search for non-Claude model — MCP tools will be sent inline");
|
|
532827
|
+
useToolSearch = false;
|
|
532828
|
+
}
|
|
532754
532829
|
const deferredToolNames = new Set;
|
|
532755
532830
|
if (useToolSearch) {
|
|
532756
532831
|
for (const t of tools) {
|
|
@@ -532823,7 +532898,7 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
|
|
|
532823
532898
|
})));
|
|
532824
532899
|
if (isAINativeProvider()) {
|
|
532825
532900
|
try {
|
|
532826
|
-
yield* ainativeBypass(messages, systemPrompt, options.model, toolSchemas);
|
|
532901
|
+
yield* ainativeBypass(messages, systemPrompt, options.model, toolSchemas, signal);
|
|
532827
532902
|
return;
|
|
532828
532903
|
} catch (e) {
|
|
532829
532904
|
logForDebugging(`AINative bypass error: ${e}`, { level: "error" });
|
|
@@ -533993,6 +534068,7 @@ function getMaxOutputTokensForModel(model) {
|
|
|
533993
534068
|
var MAX_NON_STREAMING_TOKENS = 64000;
|
|
533994
534069
|
var init_claude = __esm(() => {
|
|
533995
534070
|
init_providers();
|
|
534071
|
+
init_routing();
|
|
533996
534072
|
init_system();
|
|
533997
534073
|
init_Tool();
|
|
533998
534074
|
init_api3();
|
|
@@ -534118,6 +534194,63 @@ async function sideQuery(opts) {
|
|
|
534118
534194
|
}
|
|
534119
534195
|
const normalizedModel = normalizeModelStringForAPI(model);
|
|
534120
534196
|
const start = Date.now();
|
|
534197
|
+
if (isAINativeProvider()) {
|
|
534198
|
+
const baseUrl = getBaseURLForModel(normalizedModel);
|
|
534199
|
+
const apiKey = getApiKeyForModel(normalizedModel);
|
|
534200
|
+
const body = {
|
|
534201
|
+
model: normalizedModel,
|
|
534202
|
+
max_tokens,
|
|
534203
|
+
messages,
|
|
534204
|
+
stream: false
|
|
534205
|
+
};
|
|
534206
|
+
if (systemBlocks.length > 0) {
|
|
534207
|
+
body.system = systemBlocks;
|
|
534208
|
+
}
|
|
534209
|
+
if (tools)
|
|
534210
|
+
body.tools = tools;
|
|
534211
|
+
if (tool_choice)
|
|
534212
|
+
body.tool_choice = tool_choice;
|
|
534213
|
+
if (temperature !== undefined)
|
|
534214
|
+
body.temperature = temperature;
|
|
534215
|
+
if (stop_sequences)
|
|
534216
|
+
body.stop_sequences = stop_sequences;
|
|
534217
|
+
const resp = await fetch(`${baseUrl}/v1/messages`, {
|
|
534218
|
+
method: "POST",
|
|
534219
|
+
headers: {
|
|
534220
|
+
"Content-Type": "application/json",
|
|
534221
|
+
"x-api-key": apiKey,
|
|
534222
|
+
"anthropic-version": "2023-06-01"
|
|
534223
|
+
},
|
|
534224
|
+
body: JSON.stringify(body),
|
|
534225
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(30000)]) : AbortSignal.timeout(30000)
|
|
534226
|
+
});
|
|
534227
|
+
if (!resp.ok) {
|
|
534228
|
+
const errText = await resp.text().catch(() => "unknown error");
|
|
534229
|
+
throw new Error(`AINative API error: ${resp.status} ${errText}`);
|
|
534230
|
+
}
|
|
534231
|
+
let data;
|
|
534232
|
+
try {
|
|
534233
|
+
data = await resp.json();
|
|
534234
|
+
} catch {
|
|
534235
|
+
const raw = await resp.text().catch(() => "");
|
|
534236
|
+
throw new Error(`AINative API error: malformed JSON response (${raw.slice(0, 200)})`);
|
|
534237
|
+
}
|
|
534238
|
+
const now3 = Date.now();
|
|
534239
|
+
const lastCompletion2 = getLastApiCompletionTimestamp();
|
|
534240
|
+
logEvent("tengu_api_success", {
|
|
534241
|
+
requestId: data.id ?? "",
|
|
534242
|
+
querySource: opts.querySource,
|
|
534243
|
+
model: normalizedModel,
|
|
534244
|
+
inputTokens: data.usage?.input_tokens ?? 0,
|
|
534245
|
+
outputTokens: data.usage?.output_tokens ?? 0,
|
|
534246
|
+
cachedInputTokens: data.usage?.cache_read_input_tokens ?? 0,
|
|
534247
|
+
uncachedInputTokens: data.usage?.cache_creation_input_tokens ?? 0,
|
|
534248
|
+
durationMsIncludingRetries: now3 - start,
|
|
534249
|
+
timeSinceLastApiCallMs: lastCompletion2 !== null ? now3 - lastCompletion2 : undefined
|
|
534250
|
+
});
|
|
534251
|
+
setLastApiCompletionTimestamp(now3);
|
|
534252
|
+
return data;
|
|
534253
|
+
}
|
|
534121
534254
|
const response = await client4.beta.messages.create({
|
|
534122
534255
|
model: normalizedModel,
|
|
534123
534256
|
max_tokens,
|
|
@@ -534159,6 +534292,7 @@ var init_sideQuery = __esm(() => {
|
|
|
534159
534292
|
init_betas2();
|
|
534160
534293
|
init_fingerprint();
|
|
534161
534294
|
init_model();
|
|
534295
|
+
init_routing();
|
|
534162
534296
|
});
|
|
534163
534297
|
|
|
534164
534298
|
// src/utils/claudeInChrome/mcpServer.ts
|
|
@@ -537936,7 +538070,7 @@ function CostThresholdDialog(t0) {
|
|
|
537936
538070
|
children: "Learn more about how to monitor your spending:"
|
|
537937
538071
|
}, undefined, false, undefined, this),
|
|
537938
538072
|
/* @__PURE__ */ jsx_dev_runtime363.jsxDEV(Link, {
|
|
537939
|
-
url: "https://
|
|
538073
|
+
url: "https://docs.ainative.studio/cody-cli/costs"
|
|
537940
538074
|
}, undefined, false, undefined, this)
|
|
537941
538075
|
]
|
|
537942
538076
|
}, undefined, true, undefined, this);
|
|
@@ -544520,7 +544654,7 @@ function useDiffInIDE({
|
|
|
544520
544654
|
const isUnmounted = import_react209.useRef(false);
|
|
544521
544655
|
const [hasError, setHasError] = import_react209.useState(false);
|
|
544522
544656
|
const sha = import_react209.useMemo(() => randomUUID35().slice(0, 6), []);
|
|
544523
|
-
const tabName = import_react209.useMemo(() => `✻ [
|
|
544657
|
+
const tabName = import_react209.useMemo(() => `✻ [Cody CLI] ${basename42(filePath)} (${sha}) ⧉`, [filePath, sha]);
|
|
544524
544658
|
const shouldShowDiffInIDE = hasAccessToIDEExtensionDiffFeature(toolUseContext.options.mcpClients) && getGlobalConfig().diffTool === "auto" && !filePath.endsWith(".ipynb");
|
|
544525
544659
|
const ideName = getConnectedIdeName(toolUseContext.options.mcpClients) ?? "IDE";
|
|
544526
544660
|
async function showDiff() {
|
|
@@ -544951,7 +545085,7 @@ function getFilePermissionOptions({
|
|
|
544951
545085
|
type: "input",
|
|
544952
545086
|
label: "Yes",
|
|
544953
545087
|
value: "yes",
|
|
544954
|
-
placeholder: "and tell
|
|
545088
|
+
placeholder: "and tell Cody what to do next",
|
|
544955
545089
|
onChange: onAcceptFeedbackChange,
|
|
544956
545090
|
allowEmptySubmitToCancel: true,
|
|
544957
545091
|
option: {
|
|
@@ -544972,7 +545106,7 @@ function getFilePermissionOptions({
|
|
|
544972
545106
|
const inGlobalClaudeFolder = isInGlobalClaudeFolder(filePath);
|
|
544973
545107
|
if ((inClaudeFolder || inGlobalClaudeFolder) && operationType !== "read") {
|
|
544974
545108
|
options.push({
|
|
544975
|
-
label: "Yes, and allow
|
|
545109
|
+
label: "Yes, and allow Cody to edit its own settings for this session",
|
|
544976
545110
|
value: "yes-claude-folder",
|
|
544977
545111
|
option: {
|
|
544978
545112
|
type: "accept-session",
|
|
@@ -545054,7 +545188,7 @@ function getFilePermissionOptions({
|
|
|
545054
545188
|
type: "input",
|
|
545055
545189
|
label: "No",
|
|
545056
545190
|
value: "no",
|
|
545057
|
-
placeholder: "and tell
|
|
545191
|
+
placeholder: "and tell Cody what to do differently",
|
|
545058
545192
|
onChange: onRejectFeedbackChange,
|
|
545059
545193
|
allowEmptySubmitToCancel: true,
|
|
545060
545194
|
option: {
|
|
@@ -547462,7 +547596,7 @@ function buildPlanApprovalOptions({
|
|
|
547462
547596
|
});
|
|
547463
547597
|
if (showUltraplan) {
|
|
547464
547598
|
options.push({
|
|
547465
|
-
label: "No, refine with Ultraplan on
|
|
547599
|
+
label: "No, refine with Ultraplan on Cody CLI on the web",
|
|
547466
547600
|
value: "ultraplan"
|
|
547467
547601
|
});
|
|
547468
547602
|
}
|
|
@@ -550731,14 +550865,14 @@ function permissionComponentForTool(tool) {
|
|
|
550731
550865
|
function getNotificationMessage(toolUseConfirm) {
|
|
550732
550866
|
const toolName = toolUseConfirm.tool.userFacingName(toolUseConfirm.input);
|
|
550733
550867
|
if (toolUseConfirm.tool === ExitPlanModeV2Tool) {
|
|
550734
|
-
return "
|
|
550868
|
+
return "Cody needs your approval for the plan";
|
|
550735
550869
|
}
|
|
550736
550870
|
if (toolUseConfirm.tool === EnterPlanModeTool) {
|
|
550737
|
-
return "
|
|
550871
|
+
return "Cody wants to enter plan mode";
|
|
550738
550872
|
}
|
|
550739
550873
|
if (false) {}
|
|
550740
550874
|
if (!toolName || toolName.trim() === "") {
|
|
550741
|
-
return "
|
|
550875
|
+
return "Cody needs your attention";
|
|
550742
550876
|
}
|
|
550743
550877
|
return `Claude needs your permission to use ${toolName}`;
|
|
550744
550878
|
}
|
|
@@ -551306,7 +551440,7 @@ function ElicitationFormDialog({
|
|
|
551306
551440
|
const currentFieldIsText = currentField !== undefined && isTextField(currentField.schema) && !isEnumSchema(currentField.schema);
|
|
551307
551441
|
const isEditingTextField = currentFieldIsText && !focusedButton;
|
|
551308
551442
|
useRegisterOverlay("elicitation");
|
|
551309
|
-
useNotifyAfterTimeout("
|
|
551443
|
+
useNotifyAfterTimeout("Cody needs your input", "elicitation_dialog");
|
|
551310
551444
|
const syncTextInput = import_react219.useCallback((fieldIndex) => {
|
|
551311
551445
|
if (fieldIndex === undefined) {
|
|
551312
551446
|
setTextInputValue("");
|
|
@@ -552157,7 +552291,7 @@ function ElicitationURLDialog({
|
|
|
552157
552291
|
const phaseRef = import_react219.useRef("prompt");
|
|
552158
552292
|
const [focusedButton, setFocusedButton] = import_react219.useState("accept");
|
|
552159
552293
|
const showCancel = waitingState?.showCancel ?? false;
|
|
552160
|
-
useNotifyAfterTimeout("
|
|
552294
|
+
useNotifyAfterTimeout("Cody needs your input", "elicitation_url_dialog");
|
|
552161
552295
|
useRegisterOverlay("elicitation-url");
|
|
552162
552296
|
phaseRef.current = phase;
|
|
552163
552297
|
const onWaitingDismissRef = import_react219.useRef(onWaitingDismiss);
|
|
@@ -564550,7 +564684,7 @@ function PromptInput({
|
|
|
564550
564684
|
if (isUltrareviewEnabled() && ultrareviewTriggers.length) {
|
|
564551
564685
|
addNotification({
|
|
564552
564686
|
key: "ultrareview-active",
|
|
564553
|
-
text: "Run /ultrareview after
|
|
564687
|
+
text: "Run /ultrareview after Cody finishes to review these changes in the cloud",
|
|
564554
564688
|
priority: "immediate",
|
|
564555
564689
|
timeoutMs: 5000
|
|
564556
564690
|
});
|
|
@@ -573037,7 +573171,7 @@ function RemoteCallout({
|
|
|
573037
573171
|
flexDirection: "column",
|
|
573038
573172
|
children: [
|
|
573039
573173
|
/* @__PURE__ */ jsx_dev_runtime444.jsxDEV(ThemedText, {
|
|
573040
|
-
children: "Remote Control lets you access this CLI session from the web (
|
|
573174
|
+
children: "Remote Control lets you access this CLI session from the web (ainative.studio) or the Claude app, so you can pick up where you left off on any device."
|
|
573041
573175
|
}, undefined, false, undefined, this),
|
|
573042
573176
|
/* @__PURE__ */ jsx_dev_runtime444.jsxDEV(ThemedText, {
|
|
573043
573177
|
children: " "
|
|
@@ -573923,7 +574057,7 @@ function TranscriptSharePrompt(t0) {
|
|
|
573923
574057
|
}, undefined, true, undefined, this),
|
|
573924
574058
|
/* @__PURE__ */ jsx_dev_runtime445.jsxDEV(ThemedText, {
|
|
573925
574059
|
bold: true,
|
|
573926
|
-
children: "Can Anthropic look at your session transcript to help us improve
|
|
574060
|
+
children: "Can Anthropic look at your session transcript to help us improve Cody CLI?"
|
|
573927
574061
|
}, undefined, false, undefined, this)
|
|
573928
574062
|
]
|
|
573929
574063
|
}, undefined, true, undefined, this);
|
|
@@ -573937,7 +574071,7 @@ function TranscriptSharePrompt(t0) {
|
|
|
573937
574071
|
marginLeft: 2,
|
|
573938
574072
|
children: /* @__PURE__ */ jsx_dev_runtime445.jsxDEV(ThemedText, {
|
|
573939
574073
|
dimColor: true,
|
|
573940
|
-
children: "Learn more: https://
|
|
574074
|
+
children: "Learn more: https://docs.ainative.studio/cody-cli/data-usage#session-quality-surveys"
|
|
573941
574075
|
}, undefined, false, undefined, this)
|
|
573942
574076
|
}, undefined, false, undefined, this);
|
|
573943
574077
|
$3[7] = t4;
|
|
@@ -574353,7 +574487,7 @@ async function _temp203() {
|
|
|
574353
574487
|
key: "chrome-requires-subscription",
|
|
574354
574488
|
jsx: /* @__PURE__ */ jsx_dev_runtime447.jsxDEV(ThemedText, {
|
|
574355
574489
|
color: "error",
|
|
574356
|
-
children: "
|
|
574490
|
+
children: "Cody in Chrome requires an active subscription"
|
|
574357
574491
|
}, undefined, false, undefined, this),
|
|
574358
574492
|
priority: "immediate",
|
|
574359
574493
|
timeoutMs: 5000
|
|
@@ -574365,7 +574499,7 @@ async function _temp203() {
|
|
|
574365
574499
|
key: "chrome-extension-not-detected",
|
|
574366
574500
|
jsx: /* @__PURE__ */ jsx_dev_runtime447.jsxDEV(ThemedText, {
|
|
574367
574501
|
color: "warning",
|
|
574368
|
-
children: "Chrome extension not detected · https://
|
|
574502
|
+
children: "Chrome extension not detected · https://ainative.studio/chrome to install"
|
|
574369
574503
|
}, undefined, false, undefined, this),
|
|
574370
574504
|
priority: "immediate",
|
|
574371
574505
|
timeoutMs: 3000
|
|
@@ -574374,7 +574508,7 @@ async function _temp203() {
|
|
|
574374
574508
|
if (chromeFlag === undefined) {
|
|
574375
574509
|
return {
|
|
574376
574510
|
key: "claude-in-chrome-default-enabled",
|
|
574377
|
-
text: "
|
|
574511
|
+
text: "Cody in Chrome enabled · /chrome",
|
|
574378
574512
|
priority: "low"
|
|
574379
574513
|
};
|
|
574380
574514
|
}
|
|
@@ -574866,7 +575000,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
574866
575000
|
let t3;
|
|
574867
575001
|
if ($3[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
574868
575002
|
t3 = {
|
|
574869
|
-
label: "Open in
|
|
575003
|
+
label: "Open in Cody CLI Desktop",
|
|
574870
575004
|
value: "try"
|
|
574871
575005
|
};
|
|
574872
575006
|
$3[5] = t3;
|
|
@@ -574899,7 +575033,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
574899
575033
|
t6 = /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(ThemedBox_default, {
|
|
574900
575034
|
marginBottom: 1,
|
|
574901
575035
|
children: /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(ThemedText, {
|
|
574902
|
-
children: "Same
|
|
575036
|
+
children: "Same Cody CLI with visual diffs, live app preview, parallel sessions, and more."
|
|
574903
575037
|
}, undefined, false, undefined, this)
|
|
574904
575038
|
}, undefined, false, undefined, this);
|
|
574905
575039
|
$3[8] = t6;
|
|
@@ -574917,7 +575051,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
574917
575051
|
let t8;
|
|
574918
575052
|
if ($3[11] !== handleSelect || $3[12] !== t7) {
|
|
574919
575053
|
t8 = /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(PermissionDialog, {
|
|
574920
|
-
title: "Try
|
|
575054
|
+
title: "Try Cody CLI Desktop",
|
|
574921
575055
|
children: /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(ThemedBox_default, {
|
|
574922
575056
|
flexDirection: "column",
|
|
574923
575057
|
paddingX: 2,
|
|
@@ -575285,7 +575419,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575285
575419
|
},
|
|
575286
575420
|
{
|
|
575287
575421
|
id: "paste-images-mac",
|
|
575288
|
-
content: async () => "Paste images into
|
|
575422
|
+
content: async () => "Paste images into Cody CLI using control+v (not cmd+v!)",
|
|
575289
575423
|
cooldownSessions: 10,
|
|
575290
575424
|
isRelevant: async () => getPlatform() === "macos"
|
|
575291
575425
|
},
|
|
@@ -575354,7 +575488,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575354
575488
|
},
|
|
575355
575489
|
{
|
|
575356
575490
|
id: "desktop-app",
|
|
575357
|
-
content: async () => "Run
|
|
575491
|
+
content: async () => "Run Cody CLI locally or remotely using the Claude desktop app: clau.de/desktop",
|
|
575358
575492
|
cooldownSessions: 15,
|
|
575359
575493
|
isRelevant: async () => getPlatform() !== "linux"
|
|
575360
575494
|
},
|
|
@@ -575362,7 +575496,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575362
575496
|
id: "desktop-shortcut",
|
|
575363
575497
|
content: async (ctx) => {
|
|
575364
575498
|
const blue2 = color("suggestion", ctx.theme);
|
|
575365
|
-
return `Continue your session in
|
|
575499
|
+
return `Continue your session in Cody CLI Desktop with ${blue2("/desktop")}`;
|
|
575366
575500
|
},
|
|
575367
575501
|
cooldownSessions: 15,
|
|
575368
575502
|
isRelevant: async () => {
|
|
@@ -575379,7 +575513,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575379
575513
|
},
|
|
575380
575514
|
{
|
|
575381
575515
|
id: "mobile-app",
|
|
575382
|
-
content: async () => "/mobile to use
|
|
575516
|
+
content: async () => "/mobile to use Cody CLI from the Claude app on your phone",
|
|
575383
575517
|
cooldownSessions: 15,
|
|
575384
575518
|
isRelevant: async () => true
|
|
575385
575519
|
},
|
|
@@ -575482,7 +575616,7 @@ ${blue2(`/plugin install vercel@${OFFICIAL_MARKETPLACE_NAME}`)}`;
|
|
|
575482
575616
|
content: async (ctx) => {
|
|
575483
575617
|
const claude = color("claude", ctx.theme);
|
|
575484
575618
|
const reward = getCachedReferrerReward();
|
|
575485
|
-
return reward ? `Share
|
|
575619
|
+
return reward ? `Share Cody CLI and earn ${claude(formatCreditAmount(reward))} of extra usage · ${claude("/passes")}` : `You have free guest passes to share · ${claude("/passes")}`;
|
|
575486
575620
|
},
|
|
575487
575621
|
cooldownSessions: 3,
|
|
575488
575622
|
isRelevant: async () => {
|
|
@@ -578922,7 +579056,7 @@ async function _temp291() {
|
|
|
578922
579056
|
priority: "high"
|
|
578923
579057
|
};
|
|
578924
579058
|
}
|
|
578925
|
-
var NPM_DEPRECATION_MESSAGE = "
|
|
579059
|
+
var NPM_DEPRECATION_MESSAGE = "Cody CLI has switched from npm to native installer. Run `cody install` or see https://docs.ainative.studio/cody-cli/getting-started for more options.";
|
|
578926
579060
|
var init_useNpmDeprecationNotification = __esm(() => {
|
|
578927
579061
|
init_doctorDiagnostic();
|
|
578928
579062
|
init_envUtils();
|
|
@@ -580968,7 +581102,7 @@ function REPL({
|
|
|
580968
581102
|
const [haikuTitle, setHaikuTitle] = import_react317.useState();
|
|
580969
581103
|
const haikuTitleAttemptedRef = import_react317.useRef((initialMessages?.length ?? 0) > 0);
|
|
580970
581104
|
const agentTitle = mainThreadAgentDefinition?.agentType;
|
|
580971
|
-
const terminalTitle = sessionTitle ?? agentTitle ?? haikuTitle ?? "
|
|
581105
|
+
const terminalTitle = sessionTitle ?? agentTitle ?? haikuTitle ?? "Cody CLI";
|
|
580972
581106
|
const isWaitingForApproval = toolUseConfirmQueue.length > 0 || promptQueue.length > 0 || pendingWorkerRequest || pendingSandboxRequest;
|
|
580973
581107
|
const isShowingLocalJSXCommand = toolJSX?.isLocalJSXCommand === true && toolJSX?.jsx != null;
|
|
580974
581108
|
const titleIsAnimating = isLoading && !isWaitingForApproval && !isShowingLocalJSXCommand;
|
|
@@ -582850,8 +582984,8 @@ ${fileList}`);
|
|
|
582850
582984
|
import_react317.useEffect(() => {
|
|
582851
582985
|
const handleSuspend = () => {
|
|
582852
582986
|
process.stdout.write(`
|
|
582853
|
-
|
|
582854
|
-
Note: ctrl + z now suspends
|
|
582987
|
+
Cody CLI has been suspended. Run \`fg\` to bring Cody CLI back.
|
|
582988
|
+
Note: ctrl + z now suspends Cody CLI, ctrl + _ undoes input.
|
|
582855
582989
|
`);
|
|
582856
582990
|
};
|
|
582857
582991
|
const handleResume = () => {
|
|
@@ -584218,7 +584352,7 @@ function MCPServerDialogCopy() {
|
|
|
584218
584352
|
"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the",
|
|
584219
584353
|
" ",
|
|
584220
584354
|
/* @__PURE__ */ jsx_dev_runtime468.jsxDEV(Link, {
|
|
584221
|
-
url: "https://
|
|
584355
|
+
url: "https://docs.ainative.studio/cody-cli/mcp",
|
|
584222
584356
|
children: "MCP documentation"
|
|
584223
584357
|
}, undefined, false, undefined, this),
|
|
584224
584358
|
"."
|
|
@@ -584855,7 +584989,7 @@ function PreflightStep(t0) {
|
|
|
584855
584989
|
children: [
|
|
584856
584990
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584857
584991
|
color: "error",
|
|
584858
|
-
children: "Unable to connect to
|
|
584992
|
+
children: "Unable to connect to AINative services"
|
|
584859
584993
|
}, undefined, false, undefined, this),
|
|
584860
584994
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584861
584995
|
color: "error",
|
|
@@ -584870,7 +585004,7 @@ function PreflightStep(t0) {
|
|
|
584870
585004
|
}, undefined, false, undefined, this),
|
|
584871
585005
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584872
585006
|
color: "suggestion",
|
|
584873
|
-
children: "See https://
|
|
585007
|
+
children: "See https://docs.ainative.studio/cody-cli/network-config"
|
|
584874
585008
|
}, undefined, false, undefined, this)
|
|
584875
585009
|
]
|
|
584876
585010
|
}, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedBox_default, {
|
|
@@ -584882,11 +585016,11 @@ function PreflightStep(t0) {
|
|
|
584882
585016
|
}, undefined, false, undefined, this),
|
|
584883
585017
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584884
585018
|
children: [
|
|
584885
|
-
"Note:
|
|
585019
|
+
"Note: Cody CLI might not be available in your country. Check supported countries at",
|
|
584886
585020
|
" ",
|
|
584887
585021
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584888
585022
|
color: "suggestion",
|
|
584889
|
-
children: "https://
|
|
585023
|
+
children: "https://ainative.studio/supported-countries"
|
|
584890
585024
|
}, undefined, false, undefined, this)
|
|
584891
585025
|
]
|
|
584892
585026
|
}, undefined, true, undefined, this)
|
|
@@ -585404,7 +585538,7 @@ function Onboarding({
|
|
|
585404
585538
|
"For more details see:",
|
|
585405
585539
|
/* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Newline, {}, undefined, false, undefined, this),
|
|
585406
585540
|
/* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Link, {
|
|
585407
|
-
url: "https://
|
|
585541
|
+
url: "https://docs.ainative.studio/cody-cli/security"
|
|
585408
585542
|
}, undefined, false, undefined, this)
|
|
585409
585543
|
]
|
|
585410
585544
|
}, undefined, true, undefined, this)
|
|
@@ -585969,7 +586103,7 @@ function TrustDialog(t0) {
|
|
|
585969
586103
|
}, undefined, true, undefined, this);
|
|
585970
586104
|
t18 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
|
|
585971
586105
|
children: [
|
|
585972
|
-
"
|
|
586106
|
+
"Cody CLI",
|
|
585973
586107
|
"'",
|
|
585974
586108
|
"ll be able to read, edit, and execute files here."
|
|
585975
586109
|
]
|
|
@@ -585987,7 +586121,7 @@ function TrustDialog(t0) {
|
|
|
585987
586121
|
t19 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
|
|
585988
586122
|
dimColor: true,
|
|
585989
586123
|
children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Link, {
|
|
585990
|
-
url: "https://
|
|
586124
|
+
url: "https://docs.ainative.studio/cody-cli/security",
|
|
585991
586125
|
children: "Security guide"
|
|
585992
586126
|
}, undefined, false, undefined, this)
|
|
585993
586127
|
}, undefined, false, undefined, this);
|
|
@@ -586163,7 +586297,7 @@ function BypassPermissionsModeDialog(t0) {
|
|
|
586163
586297
|
children: [
|
|
586164
586298
|
/* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
|
|
586165
586299
|
children: [
|
|
586166
|
-
"In Bypass Permissions mode,
|
|
586300
|
+
"In Bypass Permissions mode, Cody CLI will not ask for your approval before running potentially dangerous commands.",
|
|
586167
586301
|
/* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Newline, {}, undefined, false, undefined, this),
|
|
586168
586302
|
"This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."
|
|
586169
586303
|
]
|
|
@@ -586172,7 +586306,7 @@ function BypassPermissionsModeDialog(t0) {
|
|
|
586172
586306
|
children: "By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."
|
|
586173
586307
|
}, undefined, false, undefined, this),
|
|
586174
586308
|
/* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Link, {
|
|
586175
|
-
url: "https://
|
|
586309
|
+
url: "https://docs.ainative.studio/cody-cli/security"
|
|
586176
586310
|
}, undefined, false, undefined, this)
|
|
586177
586311
|
]
|
|
586178
586312
|
}, undefined, true, undefined, this);
|
|
@@ -586196,7 +586330,7 @@ function BypassPermissionsModeDialog(t0) {
|
|
|
586196
586330
|
let t5;
|
|
586197
586331
|
if ($3[5] !== onChange) {
|
|
586198
586332
|
t5 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Dialog, {
|
|
586199
|
-
title: "WARNING:
|
|
586333
|
+
title: "WARNING: Cody CLI running in Bypass Permissions mode",
|
|
586200
586334
|
color: "error",
|
|
586201
586335
|
onCancel: handleEscape,
|
|
586202
586336
|
children: [
|
|
@@ -586295,7 +586429,7 @@ function ClaudeInChromeOnboarding(t0) {
|
|
|
586295
586429
|
if ($3[6] !== t4) {
|
|
586296
586430
|
t5 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
|
|
586297
586431
|
children: [
|
|
586298
|
-
"
|
|
586432
|
+
"Cody in Chrome works with the Chrome extension to let you control your browser directly from Cody CLI. You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.",
|
|
586299
586433
|
t4
|
|
586300
586434
|
]
|
|
586301
586435
|
}, undefined, true, undefined, this);
|
|
@@ -586358,7 +586492,7 @@ function ClaudeInChromeOnboarding(t0) {
|
|
|
586358
586492
|
" ",
|
|
586359
586493
|
"or visit ",
|
|
586360
586494
|
/* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Link, {
|
|
586361
|
-
url: "https://
|
|
586495
|
+
url: "https://docs.ainative.studio/cody-cli/chrome"
|
|
586362
586496
|
}, undefined, false, undefined, this)
|
|
586363
586497
|
]
|
|
586364
586498
|
}, undefined, true, undefined, this);
|
|
@@ -586405,7 +586539,7 @@ function _temp306(current) {
|
|
|
586405
586539
|
hasCompletedClaudeInChromeOnboarding: true
|
|
586406
586540
|
};
|
|
586407
586541
|
}
|
|
586408
|
-
var import_compiler_runtime377, import_react325, jsx_dev_runtime480, CHROME_EXTENSION_URL2 = "https://
|
|
586542
|
+
var import_compiler_runtime377, import_react325, jsx_dev_runtime480, CHROME_EXTENSION_URL2 = "https://ainative.studio/chrome", CHROME_PERMISSIONS_URL2 = "https://clau.de/chrome/permissions";
|
|
586409
586543
|
var init_ClaudeInChromeOnboarding = __esm(() => {
|
|
586410
586544
|
init_analytics();
|
|
586411
586545
|
init_ink2();
|
|
@@ -586926,13 +587060,13 @@ function ResumeTask({
|
|
|
586926
587060
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Spinner, {}, undefined, false, undefined, this),
|
|
586927
587061
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586928
587062
|
bold: true,
|
|
586929
|
-
children: "Loading
|
|
587063
|
+
children: "Loading Cody CLI sessions…"
|
|
586930
587064
|
}, undefined, false, undefined, this)
|
|
586931
587065
|
]
|
|
586932
587066
|
}, undefined, true, undefined, this),
|
|
586933
587067
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586934
587068
|
dimColor: true,
|
|
586935
|
-
children: retrying ? "Retrying…" : "Fetching your
|
|
587069
|
+
children: retrying ? "Retrying…" : "Fetching your Cody CLI sessions…"
|
|
586936
587070
|
}, undefined, false, undefined, this)
|
|
586937
587071
|
]
|
|
586938
587072
|
}, undefined, true, undefined, this);
|
|
@@ -586945,7 +587079,7 @@ function ResumeTask({
|
|
|
586945
587079
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586946
587080
|
bold: true,
|
|
586947
587081
|
color: "error",
|
|
586948
|
-
children: "Error loading
|
|
587082
|
+
children: "Error loading Cody CLI sessions"
|
|
586949
587083
|
}, undefined, false, undefined, this),
|
|
586950
587084
|
renderErrorSpecificGuidance(loadErrorType),
|
|
586951
587085
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
@@ -586976,7 +587110,7 @@ function ResumeTask({
|
|
|
586976
587110
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586977
587111
|
bold: true,
|
|
586978
587112
|
children: [
|
|
586979
|
-
"No
|
|
587113
|
+
"No Cody CLI sessions found",
|
|
586980
587114
|
currentRepo && /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586981
587115
|
children: [
|
|
586982
587116
|
" for ",
|
|
@@ -587175,7 +587309,7 @@ function renderErrorSpecificGuidance(errorType) {
|
|
|
587175
587309
|
flexDirection: "row",
|
|
587176
587310
|
children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
587177
587311
|
dimColor: true,
|
|
587178
|
-
children: "Sorry,
|
|
587312
|
+
children: "Sorry, Cody CLI encountered an error"
|
|
587179
587313
|
}, undefined, false, undefined, this)
|
|
587180
587314
|
}, undefined, false, undefined, this);
|
|
587181
587315
|
}
|
|
@@ -587495,7 +587629,7 @@ function TeleportRepoMismatchDialog(t0) {
|
|
|
587495
587629
|
}, undefined, false, undefined, this),
|
|
587496
587630
|
/* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
|
|
587497
587631
|
children: [
|
|
587498
|
-
"Open
|
|
587632
|
+
"Open Cody CLI in ",
|
|
587499
587633
|
/* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
|
|
587500
587634
|
bold: true,
|
|
587501
587635
|
children: targetRepo
|
|
@@ -588728,7 +588862,7 @@ var init_keybindings3 = __esm(() => {
|
|
|
588728
588862
|
init_bundledSkills();
|
|
588729
588863
|
FILE_FORMAT_EXAMPLE = {
|
|
588730
588864
|
$schema: "https://www.schemastore.org/claude-code-keybindings.json",
|
|
588731
|
-
$docs: "https://
|
|
588865
|
+
$docs: "https://docs.ainative.studio/cody-cli/keybindings",
|
|
588732
588866
|
bindings: [
|
|
588733
588867
|
{
|
|
588734
588868
|
context: "Chat",
|
|
@@ -589917,7 +590051,7 @@ var init_updateConfig = __esm(() => {
|
|
|
589917
590051
|
init_bundledSkills();
|
|
589918
590052
|
UPDATE_CONFIG_PROMPT = `# Update Config Skill
|
|
589919
590053
|
|
|
589920
|
-
Modify
|
|
590054
|
+
Modify Cody CLI configuration by updating settings.json files.
|
|
589921
590055
|
|
|
589922
590056
|
## When Hooks Are Required (Not Memory)
|
|
589923
590057
|
|
|
@@ -590217,7 +590351,7 @@ function cliOk(msg) {
|
|
|
590217
590351
|
|
|
590218
590352
|
// src/commands/mcp/addCommand.ts
|
|
590219
590353
|
function registerMcpAddCommand(mcp2) {
|
|
590220
|
-
mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to
|
|
590354
|
+
mcp2.command("add <name> <commandOrUrl> [args...]").description(`Add an MCP server to Cody CLI.
|
|
590221
590355
|
|
|
590222
590356
|
` + `Examples:
|
|
590223
590357
|
` + ` # Add HTTP server:
|
|
@@ -591249,7 +591383,7 @@ async function setup(cwd2, permissionMode, allowDangerouslySkipPermissions, work
|
|
|
591249
591383
|
logForDiagnosticsNoPII("info", "setup_started");
|
|
591250
591384
|
const nodeVersion = process.version.match(/^v(\d+)\./)?.[1];
|
|
591251
591385
|
if (!nodeVersion || parseInt(nodeVersion) < 18) {
|
|
591252
|
-
console.error(source_default.bold.red("Error:
|
|
591386
|
+
console.error(source_default.bold.red("Error: Cody CLI requires Node.js version 18 or higher."));
|
|
591253
591387
|
process.exit(1);
|
|
591254
591388
|
}
|
|
591255
591389
|
if (customSessionId) {
|
|
@@ -601302,7 +601436,7 @@ async function mcpRemoveHandler(name3, options) {
|
|
|
601302
601436
|
To remove from a specific scope, use:
|
|
601303
601437
|
`);
|
|
601304
601438
|
scopes.forEach((scope) => {
|
|
601305
|
-
process.stderr.write(`
|
|
601439
|
+
process.stderr.write(` cody mcp remove "${name3}" -s ${scope}
|
|
601306
601440
|
`);
|
|
601307
601441
|
});
|
|
601308
601442
|
cliError();
|
|
@@ -601317,7 +601451,7 @@ async function mcpListHandler() {
|
|
|
601317
601451
|
servers: configs
|
|
601318
601452
|
} = await getAllMcpConfigs();
|
|
601319
601453
|
if (Object.keys(configs).length === 0) {
|
|
601320
|
-
console.log("No MCP servers configured. Use `
|
|
601454
|
+
console.log("No MCP servers configured. Use `cody mcp add` to add a server.");
|
|
601321
601455
|
} else {
|
|
601322
601456
|
console.log(`Checking MCP server health...
|
|
601323
601457
|
`);
|
|
@@ -601415,7 +601549,7 @@ async function mcpGetHandler(name3) {
|
|
|
601415
601549
|
}
|
|
601416
601550
|
}
|
|
601417
601551
|
console.log(`
|
|
601418
|
-
To remove this server, run:
|
|
601552
|
+
To remove this server, run: cody mcp remove "${name3}" -s ${server.scope}`);
|
|
601419
601553
|
await gracefulShutdown(0);
|
|
601420
601554
|
}
|
|
601421
601555
|
async function mcpAddJsonHandler(name3, json2, options) {
|
|
@@ -601486,7 +601620,7 @@ async function mcpResetChoicesHandler() {
|
|
|
601486
601620
|
enableAllProjectMcpServers: false
|
|
601487
601621
|
}));
|
|
601488
601622
|
cliOk(`All project-scoped (.mcp.json) server approvals and rejections have been reset.
|
|
601489
|
-
You will be prompted for approval next time you start
|
|
601623
|
+
You will be prompted for approval next time you start Cody CLI.`);
|
|
601490
601624
|
}
|
|
601491
601625
|
var jsx_dev_runtime490;
|
|
601492
601626
|
var init_mcp5 = __esm(() => {
|
|
@@ -602134,7 +602268,7 @@ function Install({
|
|
|
602134
602268
|
const result = await installLatest(channelOrVersion, force);
|
|
602135
602269
|
logForDebugging(`Install: installLatest returned version=${result.latestVersion}, wasUpdated=${result.wasUpdated}, lockFailed=${result.lockFailed}`);
|
|
602136
602270
|
if (result.lockFailed) {
|
|
602137
|
-
throw new Error("Could not install - another process is currently installing
|
|
602271
|
+
throw new Error("Could not install - another process is currently installing Cody. Please try again in a moment.");
|
|
602138
602272
|
}
|
|
602139
602273
|
if (!result.latestVersion) {
|
|
602140
602274
|
logForDebugging("Install: Failed to retrieve version information during install", {
|
|
@@ -603265,7 +603399,7 @@ async function run() {
|
|
|
603265
603399
|
await init();
|
|
603266
603400
|
profileCheckpoint("preAction_after_init");
|
|
603267
603401
|
if (!isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE)) {
|
|
603268
|
-
process.title = "
|
|
603402
|
+
process.title = "cody";
|
|
603269
603403
|
}
|
|
603270
603404
|
const {
|
|
603271
603405
|
initSinks: initSinks2
|
|
@@ -603316,7 +603450,7 @@ async function run() {
|
|
|
603316
603450
|
}
|
|
603317
603451
|
if (prompt === "code") {
|
|
603318
603452
|
logEvent("tengu_code_prompt_ignored", {});
|
|
603319
|
-
console.warn(source_default.yellow("Tip: You can launch Cody CLI with just `
|
|
603453
|
+
console.warn(source_default.yellow("Tip: You can launch Cody CLI with just `cody`"));
|
|
603320
603454
|
prompt = undefined;
|
|
603321
603455
|
}
|
|
603322
603456
|
if (prompt && typeof prompt === "string" && !/\s/.test(prompt) && prompt.length > 0) {
|
|
@@ -604683,7 +604817,7 @@ Usage: cody --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
604683
604817
|
`);
|
|
604684
604818
|
process.stdout.write(`View: ${getRemoteSessionUrl(createdSession.id)}?m=0
|
|
604685
604819
|
`);
|
|
604686
|
-
process.stdout.write(`Resume with:
|
|
604820
|
+
process.stdout.write(`Resume with: cody --teleport ${createdSession.id}
|
|
604687
604821
|
`);
|
|
604688
604822
|
await gracefulShutdown(0);
|
|
604689
604823
|
process.exit(0);
|
|
@@ -604767,7 +604901,7 @@ Usage: cody --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
604767
604901
|
await gracefulShutdown(0);
|
|
604768
604902
|
}
|
|
604769
604903
|
} else {
|
|
604770
|
-
throw new TeleportOperationError(`You must run
|
|
604904
|
+
throw new TeleportOperationError(`You must run cody --teleport ${teleport} from a checkout of ${sessionRepo}.`, source_default.red(`You must run cody --teleport ${teleport} from a checkout of ${source_default.bold(sessionRepo)}.
|
|
604771
604905
|
`));
|
|
604772
604906
|
}
|
|
604773
604907
|
}
|
|
@@ -604988,7 +605122,7 @@ Usage: cody --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
604988
605122
|
} = await Promise.resolve().then(() => (init_mcp5(), exports_mcp3));
|
|
604989
605123
|
await mcpAddJsonHandler2(name3, json2, options);
|
|
604990
605124
|
});
|
|
604991
|
-
mcp2.command("add-from-claude-desktop").description("Import MCP servers from
|
|
605125
|
+
mcp2.command("add-from-claude-desktop").description("Import MCP servers from desktop config (Mac and WSL only)").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").action(async (options) => {
|
|
604992
605126
|
const {
|
|
604993
605127
|
mcpAddFromDesktopHandler: mcpAddFromDesktopHandler2
|
|
604994
605128
|
} = await Promise.resolve().then(() => (init_mcp5(), exports_mcp3));
|