@ainative/cody-cli 0.7.31 → 0.7.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +612 -493
- package/package.json +11 -4
- package/.ainative/CRITICAL_FILE_PLACEMENT_RULES.md +0 -139
- package/.ainative/git-rules.md +0 -150
- package/.ainative/settings.json +0 -132
- package/.claude/RAILWAY_DEPLOYMENT_GUIDE.md +0 -118
- package/.claude/mcp.json.example +0 -31
- package/.claude/projects/-Users-aideveloper-Desktop-cody-cli/memory/MEMORY.md +0 -4
- package/.claude/projects/-Users-aideveloper-Desktop-cody-cli/memory/feedback_git_attribution.md +0 -11
- package/.claude/projects/-Users-aideveloper-Desktop-cody-cli/memory/feedback_testing_standards.md +0 -11
- package/.claude/projects/-Users-aideveloper-Desktop-cody-cli/memory/project_cody_cli.md +0 -11
- package/.claude/projects/-Users-aideveloper-Desktop-cody-cli/memory/reference_zerodb.md +0 -12
- package/.claude/settings.json +0 -30
- package/.claude/settings.local.json +0 -6
- package/.cody/mcp.json +0 -14
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: "1777195198",
|
|
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("1777195198").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;
|
|
@@ -485709,7 +485750,7 @@ import { relative as relative24 } from "path";
|
|
|
485709
485750
|
function getActiveNotices(context4) {
|
|
485710
485751
|
return statusNoticeDefinitions.filter((notice) => notice.isActive(context4));
|
|
485711
485752
|
}
|
|
485712
|
-
var jsx_dev_runtime260, largeMemoryFilesNotice,
|
|
485753
|
+
var jsx_dev_runtime260, largeMemoryFilesNotice, ainativeSubscriberExternalTokenNotice, apiKeyConflictNotice, bothAuthMethodsNotice, largeAgentDescriptionsNotice, jetbrainsPluginNotice, statusNoticeDefinitions;
|
|
485713
485754
|
var init_statusNoticeDefinitions = __esm(() => {
|
|
485714
485755
|
init_ink2();
|
|
485715
485756
|
init_claudemd();
|
|
@@ -485763,7 +485804,7 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485763
485804
|
}, undefined, false, undefined, this);
|
|
485764
485805
|
}
|
|
485765
485806
|
};
|
|
485766
|
-
|
|
485807
|
+
ainativeSubscriberExternalTokenNotice = {
|
|
485767
485808
|
id: "claude-ai-external-token",
|
|
485768
485809
|
type: "warning",
|
|
485769
485810
|
isActive: () => {
|
|
@@ -485785,9 +485826,9 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485785
485826
|
children: [
|
|
485786
485827
|
"Auth conflict: Using ",
|
|
485787
485828
|
authTokenInfo.source,
|
|
485788
|
-
" instead of
|
|
485829
|
+
" instead of AINative account subscription token. Either unset ",
|
|
485789
485830
|
authTokenInfo.source,
|
|
485790
|
-
", or run `
|
|
485831
|
+
", or run `cody /logout`."
|
|
485791
485832
|
]
|
|
485792
485833
|
}, undefined, true, undefined, this)
|
|
485793
485834
|
]
|
|
@@ -485824,9 +485865,9 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485824
485865
|
children: [
|
|
485825
485866
|
"Auth conflict: Using ",
|
|
485826
485867
|
apiKeySource,
|
|
485827
|
-
" instead of
|
|
485868
|
+
" instead of AINative Console key. Either unset ",
|
|
485828
485869
|
apiKeySource,
|
|
485829
|
-
", or run `
|
|
485870
|
+
", or run `cody /logout`."
|
|
485830
485871
|
]
|
|
485831
485872
|
}, undefined, true, undefined, this)
|
|
485832
485873
|
]
|
|
@@ -485884,10 +485925,10 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485884
485925
|
children: [
|
|
485885
485926
|
"· Trying to use",
|
|
485886
485927
|
" ",
|
|
485887
|
-
authTokenInfo.source === "
|
|
485928
|
+
authTokenInfo.source === "ainative" ? "AINative OAuth" : authTokenInfo.source,
|
|
485888
485929
|
"?",
|
|
485889
485930
|
" ",
|
|
485890
|
-
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"
|
|
485891
485932
|
]
|
|
485892
485933
|
}, undefined, true, undefined, this),
|
|
485893
485934
|
/* @__PURE__ */ jsx_dev_runtime260.jsxDEV(ThemedText, {
|
|
@@ -485897,7 +485938,7 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485897
485938
|
apiKeySource,
|
|
485898
485939
|
"?",
|
|
485899
485940
|
" ",
|
|
485900
|
-
authTokenInfo.source === "
|
|
485941
|
+
authTokenInfo.source === "ainative" ? "cody /logout to sign out of AINative." : `Unset the ${authTokenInfo.source} environment variable.`
|
|
485901
485942
|
]
|
|
485902
485943
|
}, undefined, true, undefined, this)
|
|
485903
485944
|
]
|
|
@@ -485986,7 +486027,7 @@ var init_statusNoticeDefinitions = __esm(() => {
|
|
|
485986
486027
|
}, undefined, true, undefined, this);
|
|
485987
486028
|
}
|
|
485988
486029
|
};
|
|
485989
|
-
statusNoticeDefinitions = [largeMemoryFilesNotice, largeAgentDescriptionsNotice,
|
|
486030
|
+
statusNoticeDefinitions = [largeMemoryFilesNotice, largeAgentDescriptionsNotice, ainativeSubscriberExternalTokenNotice, apiKeyConflictNotice, bothAuthMethodsNotice, jetbrainsPluginNotice];
|
|
485990
486031
|
});
|
|
485991
486032
|
|
|
485992
486033
|
// src/components/StatusNotices.tsx
|
|
@@ -491722,13 +491763,13 @@ async function launchAndDone(args, context4, onDone, billingNote, signal) {
|
|
|
491722
491763
|
var jsx_dev_runtime272, call31 = async (onDone, context4, args) => {
|
|
491723
491764
|
const gate = await checkOverageGate();
|
|
491724
491765
|
if (gate.kind === "not-enabled") {
|
|
491725
|
-
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.", {
|
|
491726
491767
|
display: "system"
|
|
491727
491768
|
});
|
|
491728
491769
|
return null;
|
|
491729
491770
|
}
|
|
491730
491771
|
if (gate.kind === "low-balance") {
|
|
491731
|
-
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`, {
|
|
491732
491773
|
display: "system"
|
|
491733
491774
|
});
|
|
491734
491775
|
return null;
|
|
@@ -491755,7 +491796,7 @@ var init_ultrareviewCommand = __esm(() => {
|
|
|
491755
491796
|
});
|
|
491756
491797
|
|
|
491757
491798
|
// src/commands/review.ts
|
|
491758
|
-
var CCR_TERMS_URL = "https://
|
|
491799
|
+
var CCR_TERMS_URL = "https://docs.ainative.studio/cody-cli/web-sessions", LOCAL_REVIEW_PROMPT = (args) => `
|
|
491759
491800
|
You are an expert code reviewer. Follow these steps:
|
|
491760
491801
|
|
|
491761
491802
|
1. If no PR number is provided in the args, run \`gh pr list\` to show open PRs
|
|
@@ -492976,7 +493017,7 @@ ${reasons}`,
|
|
|
492976
493017
|
} : prev);
|
|
492977
493018
|
}
|
|
492978
493019
|
}
|
|
492979
|
-
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) => {
|
|
492980
493021
|
const blurb = args.trim();
|
|
492981
493022
|
if (!blurb) {
|
|
492982
493023
|
const msg = await launchUltraplan2({
|
|
@@ -495319,7 +495360,7 @@ var init_mappers = __esm(() => {
|
|
|
495319
495360
|
// src/components/tasks/RemoteSessionDetailDialog.tsx
|
|
495320
495361
|
function formatToolUseSummary(name3, input) {
|
|
495321
495362
|
if (name3 === EXIT_PLAN_MODE_V2_TOOL_NAME) {
|
|
495322
|
-
return "Review the plan in
|
|
495363
|
+
return "Review the plan in Cody CLI on the web";
|
|
495323
495364
|
}
|
|
495324
495365
|
if (!input || typeof input !== "object")
|
|
495325
495366
|
return name3;
|
|
@@ -495433,7 +495474,7 @@ function UltraplanSessionDetail(t0) {
|
|
|
495433
495474
|
if ($3[12] === Symbol.for("react.memo_cache_sentinel")) {
|
|
495434
495475
|
t72 = /* @__PURE__ */ jsx_dev_runtime284.jsxDEV(ThemedText, {
|
|
495435
495476
|
dimColor: true,
|
|
495436
|
-
children: "This will terminate the
|
|
495477
|
+
children: "This will terminate the Cody CLI on the web session."
|
|
495437
495478
|
}, undefined, false, undefined, this);
|
|
495438
495479
|
$3[12] = t72;
|
|
495439
495480
|
} else {
|
|
@@ -495644,7 +495685,7 @@ function UltraplanSessionDetail(t0) {
|
|
|
495644
495685
|
let t19;
|
|
495645
495686
|
if ($3[47] === Symbol.for("react.memo_cache_sentinel")) {
|
|
495646
495687
|
t19 = {
|
|
495647
|
-
label: "Review in
|
|
495688
|
+
label: "Review in Cody CLI on the web",
|
|
495648
495689
|
value: "open"
|
|
495649
495690
|
};
|
|
495650
495691
|
$3[47] = t19;
|
|
@@ -495976,13 +496017,13 @@ function ReviewSessionDetail(t0) {
|
|
|
495976
496017
|
let t3;
|
|
495977
496018
|
if ($3[11] !== completed || $3[12] !== onKill || $3[13] !== running) {
|
|
495978
496019
|
t3 = completed ? [{
|
|
495979
|
-
label: "Open in
|
|
496020
|
+
label: "Open in Cody CLI on the web",
|
|
495980
496021
|
value: "open"
|
|
495981
496022
|
}, {
|
|
495982
496023
|
label: "Dismiss",
|
|
495983
496024
|
value: "dismiss"
|
|
495984
496025
|
}] : [{
|
|
495985
|
-
label: "Open in
|
|
496026
|
+
label: "Open in Cody CLI on the web",
|
|
495986
496027
|
value: "open"
|
|
495987
496028
|
}, ...onKill && running ? [{
|
|
495988
496029
|
label: "Stop ultrareview",
|
|
@@ -498586,8 +498627,8 @@ function ThinkbackMenu(t0) {
|
|
|
498586
498627
|
let t7;
|
|
498587
498628
|
if ($3[16] !== handleCancel || $3[17] !== t6) {
|
|
498588
498629
|
t7 = /* @__PURE__ */ jsx_dev_runtime290.jsxDEV(Dialog, {
|
|
498589
|
-
title: "Think Back on 2025 with
|
|
498590
|
-
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)",
|
|
498591
498632
|
onCancel: handleCancel,
|
|
498592
498633
|
color: "claude",
|
|
498593
498634
|
children: t6
|
|
@@ -498796,7 +498837,7 @@ async function call40(onDone) {
|
|
|
498796
498837
|
onDone
|
|
498797
498838
|
}, undefined, false, undefined, this);
|
|
498798
498839
|
}
|
|
498799
|
-
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.';
|
|
498800
498841
|
var init_thinkback = __esm(() => {
|
|
498801
498842
|
init_execa();
|
|
498802
498843
|
init_select();
|
|
@@ -499723,7 +499764,7 @@ function RemoveWorkspaceDirectory(t0) {
|
|
|
499723
499764
|
let t4;
|
|
499724
499765
|
if ($3[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
499725
499766
|
t4 = /* @__PURE__ */ jsx_dev_runtime295.jsxDEV(ThemedText, {
|
|
499726
|
-
children: "
|
|
499767
|
+
children: "Cody will no longer have access to files in this directory."
|
|
499727
499768
|
}, undefined, false, undefined, this);
|
|
499728
499769
|
$3[10] = t4;
|
|
499729
499770
|
} else {
|
|
@@ -500404,9 +500445,9 @@ function PermissionRulesTab(t0) {
|
|
|
500404
500445
|
let t8;
|
|
500405
500446
|
if ($3[10] === Symbol.for("react.memo_cache_sentinel")) {
|
|
500406
500447
|
t8 = {
|
|
500407
|
-
allow: "
|
|
500408
|
-
ask: "
|
|
500409
|
-
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."
|
|
500410
500451
|
};
|
|
500411
500452
|
$3[10] = t8;
|
|
500412
500453
|
} else {
|
|
@@ -501169,7 +501210,7 @@ function PermissionRuleList(t0) {
|
|
|
501169
501210
|
let t28;
|
|
501170
501211
|
if ($3[89] === Symbol.for("react.memo_cache_sentinel")) {
|
|
501171
501212
|
t28 = /* @__PURE__ */ jsx_dev_runtime297.jsxDEV(ThemedText, {
|
|
501172
|
-
children: "
|
|
501213
|
+
children: "Cody can read files in the workspace, and make edits when auto-accept edits is on."
|
|
501173
501214
|
}, undefined, false, undefined, this);
|
|
501174
501215
|
$3[89] = t28;
|
|
501175
501216
|
} else {
|
|
@@ -501855,8 +501896,8 @@ function FastModePicker(t0) {
|
|
|
501855
501896
|
"Learn more:",
|
|
501856
501897
|
" ",
|
|
501857
501898
|
/* @__PURE__ */ jsx_dev_runtime301.jsxDEV(Link, {
|
|
501858
|
-
url: "https://
|
|
501859
|
-
children: "https://
|
|
501899
|
+
url: "https://docs.ainative.studio/cody-cli/fast-mode",
|
|
501900
|
+
children: "https://docs.ainative.studio/cody-cli/fast-mode"
|
|
501860
501901
|
}, undefined, false, undefined, this)
|
|
501861
501902
|
]
|
|
501862
501903
|
}, undefined, true, undefined, this);
|
|
@@ -502189,7 +502230,7 @@ function Passes({
|
|
|
502189
502230
|
children: /* @__PURE__ */ jsx_dev_runtime302.jsxDEV(ThemedText, {
|
|
502190
502231
|
dimColor: true,
|
|
502191
502232
|
children: [
|
|
502192
|
-
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. ",
|
|
502193
502234
|
/* @__PURE__ */ jsx_dev_runtime302.jsxDEV(Link, {
|
|
502194
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",
|
|
502195
502236
|
children: "Terms apply."
|
|
@@ -502273,9 +502314,9 @@ var init_passes2 = __esm(() => {
|
|
|
502273
502314
|
get description() {
|
|
502274
502315
|
const reward = getCachedReferrerReward();
|
|
502275
502316
|
if (reward) {
|
|
502276
|
-
return "Share a free week of
|
|
502317
|
+
return "Share a free week of Cody CLI with friends and earn extra usage";
|
|
502277
502318
|
}
|
|
502278
|
-
return "Share a free week of
|
|
502319
|
+
return "Share a free week of Cody CLI with friends";
|
|
502279
502320
|
},
|
|
502280
502321
|
get isHidden() {
|
|
502281
502322
|
const { eligible: eligible2, hasCache } = checkCachedPassesEligibility();
|
|
@@ -502345,9 +502386,9 @@ function GracePeriodContentBody() {
|
|
|
502345
502386
|
t3,
|
|
502346
502387
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502347
502388
|
children: [
|
|
502348
|
-
"— 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 (",
|
|
502349
502390
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502350
|
-
url: "https://
|
|
502391
|
+
url: "https://ainative.studio/settings/privacy"
|
|
502351
502392
|
}, undefined, false, undefined, this),
|
|
502352
502393
|
")."
|
|
502353
502394
|
]
|
|
@@ -502392,7 +502433,7 @@ function GracePeriodContentBody() {
|
|
|
502392
502433
|
let t6;
|
|
502393
502434
|
if ($3[6] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502394
502435
|
t6 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502395
|
-
url: "https://
|
|
502436
|
+
url: "https://ainative.studio/news/terms-update"
|
|
502396
502437
|
}, undefined, false, undefined, this);
|
|
502397
502438
|
$3[6] = t6;
|
|
502398
502439
|
} else {
|
|
@@ -502401,7 +502442,7 @@ function GracePeriodContentBody() {
|
|
|
502401
502442
|
let t7;
|
|
502402
502443
|
if ($3[7] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502403
502444
|
t7 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502404
|
-
url: "https://
|
|
502445
|
+
url: "https://ainative.studio/legal/terms"
|
|
502405
502446
|
}, undefined, false, undefined, this);
|
|
502406
502447
|
$3[7] = t7;
|
|
502407
502448
|
} else {
|
|
@@ -502421,7 +502462,7 @@ function GracePeriodContentBody() {
|
|
|
502421
502462
|
t7,
|
|
502422
502463
|
") and Privacy Policy (",
|
|
502423
502464
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502424
|
-
url: "https://
|
|
502465
|
+
url: "https://ainative.studio/legal/privacy"
|
|
502425
502466
|
}, undefined, false, undefined, this),
|
|
502426
502467
|
")"
|
|
502427
502468
|
]
|
|
@@ -502461,13 +502502,13 @@ function PostGracePeriodContentBody() {
|
|
|
502461
502502
|
children: [
|
|
502462
502503
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502463
502504
|
bold: true,
|
|
502464
|
-
children: "Help improve
|
|
502505
|
+
children: "Help improve Cody"
|
|
502465
502506
|
}, undefined, false, undefined, this),
|
|
502466
502507
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502467
|
-
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"
|
|
502468
502509
|
}, undefined, false, undefined, this),
|
|
502469
502510
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502470
|
-
url: "https://
|
|
502511
|
+
url: "https://ainative.studio/settings/privacy"
|
|
502471
502512
|
}, undefined, false, undefined, this)
|
|
502472
502513
|
]
|
|
502473
502514
|
}, undefined, true, undefined, this);
|
|
@@ -502504,7 +502545,7 @@ function PostGracePeriodContentBody() {
|
|
|
502504
502545
|
let t4;
|
|
502505
502546
|
if ($3[4] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502506
502547
|
t4 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502507
|
-
url: "https://
|
|
502548
|
+
url: "https://ainative.studio/news/terms-update"
|
|
502508
502549
|
}, undefined, false, undefined, this);
|
|
502509
502550
|
$3[4] = t4;
|
|
502510
502551
|
} else {
|
|
@@ -502513,7 +502554,7 @@ function PostGracePeriodContentBody() {
|
|
|
502513
502554
|
let t5;
|
|
502514
502555
|
if ($3[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
502515
502556
|
t5 = /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502516
|
-
url: "https://
|
|
502557
|
+
url: "https://ainative.studio/legal/terms"
|
|
502517
502558
|
}, undefined, false, undefined, this);
|
|
502518
502559
|
$3[5] = t5;
|
|
502519
502560
|
} else {
|
|
@@ -502533,7 +502574,7 @@ function PostGracePeriodContentBody() {
|
|
|
502533
502574
|
t5,
|
|
502534
502575
|
") and Privacy Policy (",
|
|
502535
502576
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502536
|
-
url: "https://
|
|
502577
|
+
url: "https://ainative.studio/legal/privacy"
|
|
502537
502578
|
}, undefined, false, undefined, this),
|
|
502538
502579
|
")"
|
|
502539
502580
|
]
|
|
@@ -502637,13 +502678,13 @@ function GroveDialog(t0) {
|
|
|
502637
502678
|
let t4;
|
|
502638
502679
|
if ($3[8] !== groveConfig?.domain_excluded) {
|
|
502639
502680
|
t4 = groveConfig?.domain_excluded ? [{
|
|
502640
|
-
label: "Accept terms · Help improve
|
|
502681
|
+
label: "Accept terms · Help improve Cody: OFF (for emails with your domain)",
|
|
502641
502682
|
value: "accept_opt_out"
|
|
502642
502683
|
}] : [{
|
|
502643
|
-
label: "Accept terms · Help improve
|
|
502684
|
+
label: "Accept terms · Help improve Cody: ON",
|
|
502644
502685
|
value: "accept_opt_in"
|
|
502645
502686
|
}, {
|
|
502646
|
-
label: "Accept terms · Help improve
|
|
502687
|
+
label: "Accept terms · Help improve Cody: OFF",
|
|
502647
502688
|
value: "accept_opt_out"
|
|
502648
502689
|
}];
|
|
502649
502690
|
$3[8] = groveConfig?.domain_excluded;
|
|
@@ -502921,7 +502962,7 @@ function PrivacySettingsDialog(t0) {
|
|
|
502921
502962
|
"Review and manage your privacy settings at",
|
|
502922
502963
|
" ",
|
|
502923
502964
|
/* @__PURE__ */ jsx_dev_runtime304.jsxDEV(Link, {
|
|
502924
|
-
url: "https://
|
|
502965
|
+
url: "https://ainative.studio/settings/privacy"
|
|
502925
502966
|
}, undefined, false, undefined, this)
|
|
502926
502967
|
]
|
|
502927
502968
|
}, undefined, true, undefined, this);
|
|
@@ -502935,7 +502976,7 @@ function PrivacySettingsDialog(t0) {
|
|
|
502935
502976
|
width: 44,
|
|
502936
502977
|
children: /* @__PURE__ */ jsx_dev_runtime304.jsxDEV(ThemedText, {
|
|
502937
502978
|
bold: true,
|
|
502938
|
-
children: "Help improve
|
|
502979
|
+
children: "Help improve Cody"
|
|
502939
502980
|
}, undefined, false, undefined, this)
|
|
502940
502981
|
}, undefined, false, undefined, this);
|
|
502941
502982
|
$3[10] = t6;
|
|
@@ -503063,7 +503104,7 @@ async function call46(onDone) {
|
|
|
503063
503104
|
location: "settings"
|
|
503064
503105
|
}, undefined, false, undefined, this);
|
|
503065
503106
|
}
|
|
503066
|
-
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";
|
|
503067
503108
|
var init_privacy_settings = __esm(() => {
|
|
503068
503109
|
init_Grove();
|
|
503069
503110
|
init_analytics();
|
|
@@ -503516,7 +503557,7 @@ function SelectEventMode(t0) {
|
|
|
503516
503557
|
" This menu is read-only. To add or modify hooks, edit settings.json directly or ask Claude.",
|
|
503517
503558
|
" ",
|
|
503518
503559
|
/* @__PURE__ */ jsx_dev_runtime306.jsxDEV(Link, {
|
|
503519
|
-
url: "https://
|
|
503560
|
+
url: "https://docs.ainative.studio/cody-cli/hooks",
|
|
503520
503561
|
children: "Learn more"
|
|
503521
503562
|
}, undefined, false, undefined, this)
|
|
503522
503563
|
]
|
|
@@ -509244,7 +509285,7 @@ function LocationStep() {
|
|
|
509244
509285
|
let t0;
|
|
509245
509286
|
if ($3[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
509246
509287
|
t0 = {
|
|
509247
|
-
label: "Project (.
|
|
509288
|
+
label: "Project (.cody/agents/)",
|
|
509248
509289
|
value: "projectSettings"
|
|
509249
509290
|
};
|
|
509250
509291
|
$3[0] = t0;
|
|
@@ -509371,13 +509412,13 @@ function MemoryStep() {
|
|
|
509371
509412
|
label: "None (no persistent memory)",
|
|
509372
509413
|
value: "none"
|
|
509373
509414
|
}, {
|
|
509374
|
-
label: "Project scope (.
|
|
509415
|
+
label: "Project scope (.cody/agent-memory/)",
|
|
509375
509416
|
value: "project"
|
|
509376
509417
|
}, {
|
|
509377
|
-
label: "Local scope (.
|
|
509418
|
+
label: "Local scope (.cody/agent-memory-local/)",
|
|
509378
509419
|
value: "local"
|
|
509379
509420
|
}] : [{
|
|
509380
|
-
label: "Project scope (.
|
|
509421
|
+
label: "Project scope (.cody/agent-memory/) (Recommended)",
|
|
509381
509422
|
value: "project"
|
|
509382
509423
|
}, {
|
|
509383
509424
|
label: "None (no persistent memory)",
|
|
@@ -509386,7 +509427,7 @@ function MemoryStep() {
|
|
|
509386
509427
|
label: "User scope (~/.cody/agent-memory/)",
|
|
509387
509428
|
value: "user"
|
|
509388
509429
|
}, {
|
|
509389
|
-
label: "Local scope (.
|
|
509430
|
+
label: "Local scope (.cody/agent-memory-local/)",
|
|
509390
509431
|
value: "local"
|
|
509391
509432
|
}];
|
|
509392
509433
|
$3[1] = isUserScope;
|
|
@@ -509495,7 +509536,7 @@ function MethodStep() {
|
|
|
509495
509536
|
let t0;
|
|
509496
509537
|
if ($3[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
509497
509538
|
t0 = [{
|
|
509498
|
-
label: "Generate with
|
|
509539
|
+
label: "Generate with Cody (recommended)",
|
|
509499
509540
|
value: "generate"
|
|
509500
509541
|
}, {
|
|
509501
509542
|
label: "Manual configuration",
|
|
@@ -512008,7 +512049,7 @@ var init_bridge_kick = __esm(() => {
|
|
|
512008
512049
|
var call56 = async () => {
|
|
512009
512050
|
return {
|
|
512010
512051
|
type: "text",
|
|
512011
|
-
value: `${"0.7.15"} (built ${"
|
|
512052
|
+
value: `${"0.7.15"} (built ${"1777195198"})`
|
|
512012
512053
|
};
|
|
512013
512054
|
}, version6, version_default;
|
|
512014
512055
|
var init_version = __esm(() => {
|
|
@@ -512757,7 +512798,7 @@ function OverridesSelect(t0) {
|
|
|
512757
512798
|
"Learn more:",
|
|
512758
512799
|
" ",
|
|
512759
512800
|
/* @__PURE__ */ jsx_dev_runtime340.jsxDEV(Link, {
|
|
512760
|
-
url: "https://
|
|
512801
|
+
url: "https://docs.ainative.studio/cody-cli/sandboxing#configure-sandboxing",
|
|
512761
512802
|
children: "code.claude.com/docs/en/sandboxing#configure-sandboxing"
|
|
512762
512803
|
}, undefined, false, undefined, this)
|
|
512763
512804
|
]
|
|
@@ -513128,7 +513169,7 @@ function SandboxModeTab(t0) {
|
|
|
513128
513169
|
"Learn more:",
|
|
513129
513170
|
" ",
|
|
513130
513171
|
/* @__PURE__ */ jsx_dev_runtime341.jsxDEV(Link, {
|
|
513131
|
-
url: "https://
|
|
513172
|
+
url: "https://docs.ainative.studio/cody-cli/sandboxing",
|
|
513132
513173
|
children: "code.claude.com/docs/en/sandboxing"
|
|
513133
513174
|
}, undefined, false, undefined, this)
|
|
513134
513175
|
]
|
|
@@ -513419,7 +513460,7 @@ function getNativeMessagingHostsDirs() {
|
|
|
513419
513460
|
if (platform6 === "windows") {
|
|
513420
513461
|
const home = homedir31();
|
|
513421
513462
|
const appData = process.env.APPDATA || join122(home, "AppData", "Local");
|
|
513422
|
-
return [join122(appData, "
|
|
513463
|
+
return [join122(appData, "Cody CLI", "ChromeNativeHost")];
|
|
513423
513464
|
}
|
|
513424
513465
|
return getAllNativeMessagingHostsDirs().map(({ path: path26 }) => path26);
|
|
513425
513466
|
}
|
|
@@ -513430,7 +513471,7 @@ async function installChromeNativeHostManifest(manifestBinaryPath) {
|
|
|
513430
513471
|
}
|
|
513431
513472
|
const manifest = {
|
|
513432
513473
|
name: NATIVE_HOST_IDENTIFIER,
|
|
513433
|
-
description: "
|
|
513474
|
+
description: "Cody CLI Browser Extension Native Host",
|
|
513434
513475
|
path: manifestBinaryPath,
|
|
513435
513476
|
type: "stdio",
|
|
513436
513477
|
allowed_origins: [
|
|
@@ -513498,11 +513539,11 @@ async function createWrapperScript(command7) {
|
|
|
513498
513539
|
const wrapperPath = platform6 === "windows" ? join122(chromeDir, "chrome-native-host.bat") : join122(chromeDir, "chrome-native-host");
|
|
513499
513540
|
const scriptContent = platform6 === "windows" ? `@echo off
|
|
513500
513541
|
REM Chrome native host wrapper script
|
|
513501
|
-
REM Generated by
|
|
513542
|
+
REM Generated by Cody CLI - do not edit manually
|
|
513502
513543
|
${command7}
|
|
513503
513544
|
` : `#!/bin/sh
|
|
513504
513545
|
# Chrome native host wrapper script
|
|
513505
|
-
# Generated by
|
|
513546
|
+
# Generated by Cody CLI - do not edit manually
|
|
513506
513547
|
exec ${command7}
|
|
513507
513548
|
`;
|
|
513508
513549
|
const existingContent = await readFile48(wrapperPath, "utf-8").catch(() => null);
|
|
@@ -513755,7 +513796,7 @@ function ClaudeInChromeMenu(t0) {
|
|
|
513755
513796
|
let t6;
|
|
513756
513797
|
if ($3[20] === Symbol.for("react.memo_cache_sentinel")) {
|
|
513757
513798
|
t6 = /* @__PURE__ */ jsx_dev_runtime343.jsxDEV(ThemedText, {
|
|
513758
|
-
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."
|
|
513759
513800
|
}, undefined, false, undefined, this);
|
|
513760
513801
|
$3[20] = t6;
|
|
513761
513802
|
} else {
|
|
@@ -513870,7 +513911,7 @@ function ClaudeInChromeMenu(t0) {
|
|
|
513870
513911
|
if ($3[33] === Symbol.for("react.memo_cache_sentinel")) {
|
|
513871
513912
|
t10 = /* @__PURE__ */ jsx_dev_runtime343.jsxDEV(ThemedText, {
|
|
513872
513913
|
dimColor: true,
|
|
513873
|
-
children: "Learn more: https://
|
|
513914
|
+
children: "Learn more: https://docs.ainative.studio/cody-cli/chrome"
|
|
513874
513915
|
}, undefined, false, undefined, this);
|
|
513875
513916
|
$3[33] = t10;
|
|
513876
513917
|
} else {
|
|
@@ -513927,7 +513968,7 @@ function _temp271(c6) {
|
|
|
513927
513968
|
function _temp159(s) {
|
|
513928
513969
|
return s.mcp.clients;
|
|
513929
513970
|
}
|
|
513930
|
-
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) {
|
|
513931
513972
|
const isExtensionInstalled = await isChromeExtensionInstalled();
|
|
513932
513973
|
const config4 = getGlobalConfig();
|
|
513933
513974
|
const isSubscriber = isActiveSubscriber();
|
|
@@ -515044,13 +515085,13 @@ function SetModelAndClose({
|
|
|
515044
515085
|
return;
|
|
515045
515086
|
}
|
|
515046
515087
|
if (model && isOpus1mUnavailable(model)) {
|
|
515047
|
-
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`, {
|
|
515048
515089
|
display: "system"
|
|
515049
515090
|
});
|
|
515050
515091
|
return;
|
|
515051
515092
|
}
|
|
515052
515093
|
if (model && isSonnet1mUnavailable(model)) {
|
|
515053
|
-
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`, {
|
|
515054
515095
|
display: "system"
|
|
515055
515096
|
});
|
|
515056
515097
|
return;
|
|
@@ -515211,7 +515252,7 @@ var init_model3 = __esm(() => {
|
|
|
515211
515252
|
type: "local-jsx",
|
|
515212
515253
|
name: "model",
|
|
515213
515254
|
get description() {
|
|
515214
|
-
return `Set the
|
|
515255
|
+
return `Set the model for Cody CLI (currently ${renderModelName(getMainLoopModel())})`;
|
|
515215
515256
|
},
|
|
515216
515257
|
argumentHint: "[model]",
|
|
515217
515258
|
get immediate() {
|
|
@@ -515993,7 +516034,7 @@ function _temp161(env5) {
|
|
|
515993
516034
|
value: env5.environment_id
|
|
515994
516035
|
};
|
|
515995
516036
|
}
|
|
515996
|
-
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`;
|
|
515997
516038
|
var init_RemoteEnvironmentDialog = __esm(() => {
|
|
515998
516039
|
init_source();
|
|
515999
516040
|
init_figures();
|
|
@@ -516069,7 +516110,7 @@ async function call67(onDone, context4) {
|
|
|
516069
516110
|
return null;
|
|
516070
516111
|
}
|
|
516071
516112
|
}
|
|
516072
|
-
const url3 = "https://
|
|
516113
|
+
const url3 = "https://ainative.studio/upgrade";
|
|
516073
516114
|
await openBrowser(url3);
|
|
516074
516115
|
return /* @__PURE__ */ jsx_dev_runtime354.jsxDEV(Login, {
|
|
516075
516116
|
startingMessage: "Starting new login following /upgrade. Exit with Ctrl-C to use existing account.",
|
|
@@ -516080,7 +516121,7 @@ async function call67(onDone, context4) {
|
|
|
516080
516121
|
}, undefined, false, undefined, this);
|
|
516081
516122
|
} catch (error43) {
|
|
516082
516123
|
logError2(error43);
|
|
516083
|
-
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.");
|
|
516084
516125
|
}
|
|
516085
516126
|
return null;
|
|
516086
516127
|
}
|
|
@@ -518069,7 +518110,7 @@ function Stats2(t0) {
|
|
|
518069
518110
|
children: [
|
|
518070
518111
|
/* @__PURE__ */ jsx_dev_runtime357.jsxDEV(Spinner, {}, undefined, false, undefined, this),
|
|
518071
518112
|
/* @__PURE__ */ jsx_dev_runtime357.jsxDEV(ThemedText, {
|
|
518072
|
-
children: " Loading your
|
|
518113
|
+
children: " Loading your Cody CLI stats…"
|
|
518073
518114
|
}, undefined, false, undefined, this)
|
|
518074
518115
|
]
|
|
518075
518116
|
}, undefined, true, undefined, this);
|
|
@@ -518230,7 +518271,7 @@ function StatsContent(t0) {
|
|
|
518230
518271
|
marginTop: 1,
|
|
518231
518272
|
children: /* @__PURE__ */ jsx_dev_runtime357.jsxDEV(ThemedText, {
|
|
518232
518273
|
color: "warning",
|
|
518233
|
-
children: "No stats available yet. Start using
|
|
518274
|
+
children: "No stats available yet. Start using Cody CLI!"
|
|
518234
518275
|
}, undefined, false, undefined, this)
|
|
518235
518276
|
}, undefined, false, undefined, this);
|
|
518236
518277
|
$3[15] = t72;
|
|
@@ -525195,7 +525236,7 @@ function getMemoryScopeDisplay(memory2) {
|
|
|
525195
525236
|
case "user":
|
|
525196
525237
|
return `User (${join131(getMemoryBaseDir(), "agent-memory")}/)`;
|
|
525197
525238
|
case "project":
|
|
525198
|
-
return "Project (.
|
|
525239
|
+
return "Project (.cody/agent-memory/)";
|
|
525199
525240
|
case "local":
|
|
525200
525241
|
return `Local (${getLocalAgentMemoryDir("...")})`;
|
|
525201
525242
|
default:
|
|
@@ -525304,9 +525345,9 @@ function isClaudeConfigFilePath(filePath) {
|
|
|
525304
525345
|
if (isClaudeSettingsPath(filePath)) {
|
|
525305
525346
|
return true;
|
|
525306
525347
|
}
|
|
525307
|
-
const commandsDir = join132(getOriginalCwd(), ".
|
|
525308
|
-
const agentsDir = join132(getOriginalCwd(), ".
|
|
525309
|
-
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");
|
|
525310
525351
|
return pathInWorkingPath(filePath, commandsDir) || pathInWorkingPath(filePath, agentsDir) || pathInWorkingPath(filePath, skillsDir);
|
|
525311
525352
|
}
|
|
525312
525353
|
function isSessionPlanFile(absolutePath) {
|
|
@@ -526867,7 +526908,7 @@ async function execPromptHook(hook, hookName, hookEvent, jsonInput, signal, tool
|
|
|
526867
526908
|
const response = await queryModelWithoutStreaming({
|
|
526868
526909
|
messages: messagesToQuery,
|
|
526869
526910
|
systemPrompt: asSystemPrompt([
|
|
526870
|
-
`You are evaluating a hook in
|
|
526911
|
+
`You are evaluating a hook in Cody CLI.
|
|
526871
526912
|
|
|
526872
526913
|
Your response must be a JSON object matching one of the following schemas:
|
|
526873
526914
|
1. If the condition is met, return: {"ok": true}
|
|
@@ -527033,7 +527074,7 @@ async function execAgentHook(hook, hookName, hookEvent, jsonInput, signal, toolU
|
|
|
527033
527074
|
structuredOutputTool
|
|
527034
527075
|
];
|
|
527035
527076
|
const systemPrompt = asSystemPrompt([
|
|
527036
|
-
`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}
|
|
527037
527078
|
You can read this file to analyze the conversation history if needed.
|
|
527038
527079
|
|
|
527039
527080
|
Use the available tools to inspect the codebase and verify the condition.
|
|
@@ -532572,9 +532613,9 @@ function stripExcessMediaItems(messages, limit) {
|
|
|
532572
532613
|
};
|
|
532573
532614
|
});
|
|
532574
532615
|
}
|
|
532575
|
-
async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
532576
|
-
const baseUrl =
|
|
532577
|
-
const apiKey =
|
|
532616
|
+
async function* ainativeBypass(messages, systemPrompt, model, toolSchemas, signal) {
|
|
532617
|
+
const baseUrl = getBaseURLForModel(model);
|
|
532618
|
+
const apiKey = getApiKeyForModel(model);
|
|
532578
532619
|
const chatMessages = [];
|
|
532579
532620
|
const sysText = systemPrompt.join(`
|
|
532580
532621
|
`);
|
|
@@ -532632,9 +532673,18 @@ async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
|
532632
532673
|
description: String(t.description ?? "").slice(0, 300),
|
|
532633
532674
|
input_schema: simplifySchema(t.input_schema ?? {})
|
|
532634
532675
|
}));
|
|
532676
|
+
const safeParseArgs = (raw) => {
|
|
532677
|
+
if (!raw)
|
|
532678
|
+
return {};
|
|
532679
|
+
try {
|
|
532680
|
+
return JSON.parse(raw);
|
|
532681
|
+
} catch {
|
|
532682
|
+
return {};
|
|
532683
|
+
}
|
|
532684
|
+
};
|
|
532635
532685
|
const anthropicBody = {
|
|
532636
532686
|
model,
|
|
532637
|
-
max_tokens:
|
|
532687
|
+
max_tokens: getMaxOutputTokensForModel(model),
|
|
532638
532688
|
messages: chatMessages.filter((m2) => m2.role !== "system").map((m2) => ({
|
|
532639
532689
|
role: m2.role === "tool" ? "user" : m2.role,
|
|
532640
532690
|
content: m2.role === "tool" ? [{ type: "tool_result", tool_use_id: m2.tool_call_id, content: m2.content }] : m2.tool_calls ? [
|
|
@@ -532643,7 +532693,7 @@ async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
|
532643
532693
|
type: "tool_use",
|
|
532644
532694
|
id: tc.id,
|
|
532645
532695
|
name: tc.function.name,
|
|
532646
|
-
input:
|
|
532696
|
+
input: safeParseArgs(tc.function.arguments)
|
|
532647
532697
|
}))
|
|
532648
532698
|
] : m2.content
|
|
532649
532699
|
})),
|
|
@@ -532662,16 +532712,26 @@ async function* ainativeBypass(messages, systemPrompt, model, toolSchemas) {
|
|
|
532662
532712
|
"anthropic-version": "2023-06-01"
|
|
532663
532713
|
},
|
|
532664
532714
|
body: JSON.stringify(anthropicBody),
|
|
532665
|
-
signal: AbortSignal.timeout(
|
|
532715
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(600000)]) : AbortSignal.timeout(600000)
|
|
532666
532716
|
});
|
|
532667
532717
|
if (!resp.ok) {
|
|
532668
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
|
+
}
|
|
532669
532722
|
throw new Error(`AINative API error: ${resp.status} ${errText}`);
|
|
532670
532723
|
}
|
|
532671
|
-
|
|
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
|
+
}
|
|
532672
532731
|
const cleanedContent = (data.content || [{ type: "text", text: "" }]).map((block) => {
|
|
532673
532732
|
if (block.type === "text" && typeof block.text === "string") {
|
|
532674
|
-
|
|
532733
|
+
const text2 = block.text.replace(/<tool_call>[\s\S]*?<\/tool_call>/g, "").replace(/<\/?tool_call>/g, "").trimEnd();
|
|
532734
|
+
return { ...block, text: text2 };
|
|
532675
532735
|
}
|
|
532676
532736
|
return block;
|
|
532677
532737
|
});
|
|
@@ -532838,7 +532898,7 @@ async function* queryModel(messages, systemPrompt, thinkingConfig, tools, signal
|
|
|
532838
532898
|
})));
|
|
532839
532899
|
if (isAINativeProvider()) {
|
|
532840
532900
|
try {
|
|
532841
|
-
yield* ainativeBypass(messages, systemPrompt, options.model, toolSchemas);
|
|
532901
|
+
yield* ainativeBypass(messages, systemPrompt, options.model, toolSchemas, signal);
|
|
532842
532902
|
return;
|
|
532843
532903
|
} catch (e) {
|
|
532844
532904
|
logForDebugging(`AINative bypass error: ${e}`, { level: "error" });
|
|
@@ -534008,6 +534068,7 @@ function getMaxOutputTokensForModel(model) {
|
|
|
534008
534068
|
var MAX_NON_STREAMING_TOKENS = 64000;
|
|
534009
534069
|
var init_claude = __esm(() => {
|
|
534010
534070
|
init_providers();
|
|
534071
|
+
init_routing();
|
|
534011
534072
|
init_system();
|
|
534012
534073
|
init_Tool();
|
|
534013
534074
|
init_api3();
|
|
@@ -534133,6 +534194,63 @@ async function sideQuery(opts) {
|
|
|
534133
534194
|
}
|
|
534134
534195
|
const normalizedModel = normalizeModelStringForAPI(model);
|
|
534135
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
|
+
}
|
|
534136
534254
|
const response = await client4.beta.messages.create({
|
|
534137
534255
|
model: normalizedModel,
|
|
534138
534256
|
max_tokens,
|
|
@@ -534174,6 +534292,7 @@ var init_sideQuery = __esm(() => {
|
|
|
534174
534292
|
init_betas2();
|
|
534175
534293
|
init_fingerprint();
|
|
534176
534294
|
init_model();
|
|
534295
|
+
init_routing();
|
|
534177
534296
|
});
|
|
534178
534297
|
|
|
534179
534298
|
// src/utils/claudeInChrome/mcpServer.ts
|
|
@@ -537951,7 +538070,7 @@ function CostThresholdDialog(t0) {
|
|
|
537951
538070
|
children: "Learn more about how to monitor your spending:"
|
|
537952
538071
|
}, undefined, false, undefined, this),
|
|
537953
538072
|
/* @__PURE__ */ jsx_dev_runtime363.jsxDEV(Link, {
|
|
537954
|
-
url: "https://
|
|
538073
|
+
url: "https://docs.ainative.studio/cody-cli/costs"
|
|
537955
538074
|
}, undefined, false, undefined, this)
|
|
537956
538075
|
]
|
|
537957
538076
|
}, undefined, true, undefined, this);
|
|
@@ -544535,7 +544654,7 @@ function useDiffInIDE({
|
|
|
544535
544654
|
const isUnmounted = import_react209.useRef(false);
|
|
544536
544655
|
const [hasError, setHasError] = import_react209.useState(false);
|
|
544537
544656
|
const sha = import_react209.useMemo(() => randomUUID35().slice(0, 6), []);
|
|
544538
|
-
const tabName = import_react209.useMemo(() => `✻ [
|
|
544657
|
+
const tabName = import_react209.useMemo(() => `✻ [Cody CLI] ${basename42(filePath)} (${sha}) ⧉`, [filePath, sha]);
|
|
544539
544658
|
const shouldShowDiffInIDE = hasAccessToIDEExtensionDiffFeature(toolUseContext.options.mcpClients) && getGlobalConfig().diffTool === "auto" && !filePath.endsWith(".ipynb");
|
|
544540
544659
|
const ideName = getConnectedIdeName(toolUseContext.options.mcpClients) ?? "IDE";
|
|
544541
544660
|
async function showDiff() {
|
|
@@ -544966,7 +545085,7 @@ function getFilePermissionOptions({
|
|
|
544966
545085
|
type: "input",
|
|
544967
545086
|
label: "Yes",
|
|
544968
545087
|
value: "yes",
|
|
544969
|
-
placeholder: "and tell
|
|
545088
|
+
placeholder: "and tell Cody what to do next",
|
|
544970
545089
|
onChange: onAcceptFeedbackChange,
|
|
544971
545090
|
allowEmptySubmitToCancel: true,
|
|
544972
545091
|
option: {
|
|
@@ -544987,7 +545106,7 @@ function getFilePermissionOptions({
|
|
|
544987
545106
|
const inGlobalClaudeFolder = isInGlobalClaudeFolder(filePath);
|
|
544988
545107
|
if ((inClaudeFolder || inGlobalClaudeFolder) && operationType !== "read") {
|
|
544989
545108
|
options.push({
|
|
544990
|
-
label: "Yes, and allow
|
|
545109
|
+
label: "Yes, and allow Cody to edit its own settings for this session",
|
|
544991
545110
|
value: "yes-claude-folder",
|
|
544992
545111
|
option: {
|
|
544993
545112
|
type: "accept-session",
|
|
@@ -545069,7 +545188,7 @@ function getFilePermissionOptions({
|
|
|
545069
545188
|
type: "input",
|
|
545070
545189
|
label: "No",
|
|
545071
545190
|
value: "no",
|
|
545072
|
-
placeholder: "and tell
|
|
545191
|
+
placeholder: "and tell Cody what to do differently",
|
|
545073
545192
|
onChange: onRejectFeedbackChange,
|
|
545074
545193
|
allowEmptySubmitToCancel: true,
|
|
545075
545194
|
option: {
|
|
@@ -547477,7 +547596,7 @@ function buildPlanApprovalOptions({
|
|
|
547477
547596
|
});
|
|
547478
547597
|
if (showUltraplan) {
|
|
547479
547598
|
options.push({
|
|
547480
|
-
label: "No, refine with Ultraplan on
|
|
547599
|
+
label: "No, refine with Ultraplan on Cody CLI on the web",
|
|
547481
547600
|
value: "ultraplan"
|
|
547482
547601
|
});
|
|
547483
547602
|
}
|
|
@@ -550746,14 +550865,14 @@ function permissionComponentForTool(tool) {
|
|
|
550746
550865
|
function getNotificationMessage(toolUseConfirm) {
|
|
550747
550866
|
const toolName = toolUseConfirm.tool.userFacingName(toolUseConfirm.input);
|
|
550748
550867
|
if (toolUseConfirm.tool === ExitPlanModeV2Tool) {
|
|
550749
|
-
return "
|
|
550868
|
+
return "Cody needs your approval for the plan";
|
|
550750
550869
|
}
|
|
550751
550870
|
if (toolUseConfirm.tool === EnterPlanModeTool) {
|
|
550752
|
-
return "
|
|
550871
|
+
return "Cody wants to enter plan mode";
|
|
550753
550872
|
}
|
|
550754
550873
|
if (false) {}
|
|
550755
550874
|
if (!toolName || toolName.trim() === "") {
|
|
550756
|
-
return "
|
|
550875
|
+
return "Cody needs your attention";
|
|
550757
550876
|
}
|
|
550758
550877
|
return `Claude needs your permission to use ${toolName}`;
|
|
550759
550878
|
}
|
|
@@ -551321,7 +551440,7 @@ function ElicitationFormDialog({
|
|
|
551321
551440
|
const currentFieldIsText = currentField !== undefined && isTextField(currentField.schema) && !isEnumSchema(currentField.schema);
|
|
551322
551441
|
const isEditingTextField = currentFieldIsText && !focusedButton;
|
|
551323
551442
|
useRegisterOverlay("elicitation");
|
|
551324
|
-
useNotifyAfterTimeout("
|
|
551443
|
+
useNotifyAfterTimeout("Cody needs your input", "elicitation_dialog");
|
|
551325
551444
|
const syncTextInput = import_react219.useCallback((fieldIndex) => {
|
|
551326
551445
|
if (fieldIndex === undefined) {
|
|
551327
551446
|
setTextInputValue("");
|
|
@@ -552172,7 +552291,7 @@ function ElicitationURLDialog({
|
|
|
552172
552291
|
const phaseRef = import_react219.useRef("prompt");
|
|
552173
552292
|
const [focusedButton, setFocusedButton] = import_react219.useState("accept");
|
|
552174
552293
|
const showCancel = waitingState?.showCancel ?? false;
|
|
552175
|
-
useNotifyAfterTimeout("
|
|
552294
|
+
useNotifyAfterTimeout("Cody needs your input", "elicitation_url_dialog");
|
|
552176
552295
|
useRegisterOverlay("elicitation-url");
|
|
552177
552296
|
phaseRef.current = phase;
|
|
552178
552297
|
const onWaitingDismissRef = import_react219.useRef(onWaitingDismiss);
|
|
@@ -564565,7 +564684,7 @@ function PromptInput({
|
|
|
564565
564684
|
if (isUltrareviewEnabled() && ultrareviewTriggers.length) {
|
|
564566
564685
|
addNotification({
|
|
564567
564686
|
key: "ultrareview-active",
|
|
564568
|
-
text: "Run /ultrareview after
|
|
564687
|
+
text: "Run /ultrareview after Cody finishes to review these changes in the cloud",
|
|
564569
564688
|
priority: "immediate",
|
|
564570
564689
|
timeoutMs: 5000
|
|
564571
564690
|
});
|
|
@@ -573052,7 +573171,7 @@ function RemoteCallout({
|
|
|
573052
573171
|
flexDirection: "column",
|
|
573053
573172
|
children: [
|
|
573054
573173
|
/* @__PURE__ */ jsx_dev_runtime444.jsxDEV(ThemedText, {
|
|
573055
|
-
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."
|
|
573056
573175
|
}, undefined, false, undefined, this),
|
|
573057
573176
|
/* @__PURE__ */ jsx_dev_runtime444.jsxDEV(ThemedText, {
|
|
573058
573177
|
children: " "
|
|
@@ -573938,7 +574057,7 @@ function TranscriptSharePrompt(t0) {
|
|
|
573938
574057
|
}, undefined, true, undefined, this),
|
|
573939
574058
|
/* @__PURE__ */ jsx_dev_runtime445.jsxDEV(ThemedText, {
|
|
573940
574059
|
bold: true,
|
|
573941
|
-
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?"
|
|
573942
574061
|
}, undefined, false, undefined, this)
|
|
573943
574062
|
]
|
|
573944
574063
|
}, undefined, true, undefined, this);
|
|
@@ -573952,7 +574071,7 @@ function TranscriptSharePrompt(t0) {
|
|
|
573952
574071
|
marginLeft: 2,
|
|
573953
574072
|
children: /* @__PURE__ */ jsx_dev_runtime445.jsxDEV(ThemedText, {
|
|
573954
574073
|
dimColor: true,
|
|
573955
|
-
children: "Learn more: https://
|
|
574074
|
+
children: "Learn more: https://docs.ainative.studio/cody-cli/data-usage#session-quality-surveys"
|
|
573956
574075
|
}, undefined, false, undefined, this)
|
|
573957
574076
|
}, undefined, false, undefined, this);
|
|
573958
574077
|
$3[7] = t4;
|
|
@@ -574368,7 +574487,7 @@ async function _temp203() {
|
|
|
574368
574487
|
key: "chrome-requires-subscription",
|
|
574369
574488
|
jsx: /* @__PURE__ */ jsx_dev_runtime447.jsxDEV(ThemedText, {
|
|
574370
574489
|
color: "error",
|
|
574371
|
-
children: "
|
|
574490
|
+
children: "Cody in Chrome requires an active subscription"
|
|
574372
574491
|
}, undefined, false, undefined, this),
|
|
574373
574492
|
priority: "immediate",
|
|
574374
574493
|
timeoutMs: 5000
|
|
@@ -574380,7 +574499,7 @@ async function _temp203() {
|
|
|
574380
574499
|
key: "chrome-extension-not-detected",
|
|
574381
574500
|
jsx: /* @__PURE__ */ jsx_dev_runtime447.jsxDEV(ThemedText, {
|
|
574382
574501
|
color: "warning",
|
|
574383
|
-
children: "Chrome extension not detected · https://
|
|
574502
|
+
children: "Chrome extension not detected · https://ainative.studio/chrome to install"
|
|
574384
574503
|
}, undefined, false, undefined, this),
|
|
574385
574504
|
priority: "immediate",
|
|
574386
574505
|
timeoutMs: 3000
|
|
@@ -574389,7 +574508,7 @@ async function _temp203() {
|
|
|
574389
574508
|
if (chromeFlag === undefined) {
|
|
574390
574509
|
return {
|
|
574391
574510
|
key: "claude-in-chrome-default-enabled",
|
|
574392
|
-
text: "
|
|
574511
|
+
text: "Cody in Chrome enabled · /chrome",
|
|
574393
574512
|
priority: "low"
|
|
574394
574513
|
};
|
|
574395
574514
|
}
|
|
@@ -574881,7 +575000,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
574881
575000
|
let t3;
|
|
574882
575001
|
if ($3[5] === Symbol.for("react.memo_cache_sentinel")) {
|
|
574883
575002
|
t3 = {
|
|
574884
|
-
label: "Open in
|
|
575003
|
+
label: "Open in Cody CLI Desktop",
|
|
574885
575004
|
value: "try"
|
|
574886
575005
|
};
|
|
574887
575006
|
$3[5] = t3;
|
|
@@ -574914,7 +575033,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
574914
575033
|
t6 = /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(ThemedBox_default, {
|
|
574915
575034
|
marginBottom: 1,
|
|
574916
575035
|
children: /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(ThemedText, {
|
|
574917
|
-
children: "Same
|
|
575036
|
+
children: "Same Cody CLI with visual diffs, live app preview, parallel sessions, and more."
|
|
574918
575037
|
}, undefined, false, undefined, this)
|
|
574919
575038
|
}, undefined, false, undefined, this);
|
|
574920
575039
|
$3[8] = t6;
|
|
@@ -574932,7 +575051,7 @@ function DesktopUpsellStartup(t0) {
|
|
|
574932
575051
|
let t8;
|
|
574933
575052
|
if ($3[11] !== handleSelect || $3[12] !== t7) {
|
|
574934
575053
|
t8 = /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(PermissionDialog, {
|
|
574935
|
-
title: "Try
|
|
575054
|
+
title: "Try Cody CLI Desktop",
|
|
574936
575055
|
children: /* @__PURE__ */ jsx_dev_runtime449.jsxDEV(ThemedBox_default, {
|
|
574937
575056
|
flexDirection: "column",
|
|
574938
575057
|
paddingX: 2,
|
|
@@ -575300,7 +575419,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575300
575419
|
},
|
|
575301
575420
|
{
|
|
575302
575421
|
id: "paste-images-mac",
|
|
575303
|
-
content: async () => "Paste images into
|
|
575422
|
+
content: async () => "Paste images into Cody CLI using control+v (not cmd+v!)",
|
|
575304
575423
|
cooldownSessions: 10,
|
|
575305
575424
|
isRelevant: async () => getPlatform() === "macos"
|
|
575306
575425
|
},
|
|
@@ -575369,7 +575488,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575369
575488
|
},
|
|
575370
575489
|
{
|
|
575371
575490
|
id: "desktop-app",
|
|
575372
|
-
content: async () => "Run
|
|
575491
|
+
content: async () => "Run Cody CLI locally or remotely using the Claude desktop app: clau.de/desktop",
|
|
575373
575492
|
cooldownSessions: 15,
|
|
575374
575493
|
isRelevant: async () => getPlatform() !== "linux"
|
|
575375
575494
|
},
|
|
@@ -575377,7 +575496,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575377
575496
|
id: "desktop-shortcut",
|
|
575378
575497
|
content: async (ctx) => {
|
|
575379
575498
|
const blue2 = color("suggestion", ctx.theme);
|
|
575380
|
-
return `Continue your session in
|
|
575499
|
+
return `Continue your session in Cody CLI Desktop with ${blue2("/desktop")}`;
|
|
575381
575500
|
},
|
|
575382
575501
|
cooldownSessions: 15,
|
|
575383
575502
|
isRelevant: async () => {
|
|
@@ -575394,7 +575513,7 @@ var init_tipRegistry = __esm(() => {
|
|
|
575394
575513
|
},
|
|
575395
575514
|
{
|
|
575396
575515
|
id: "mobile-app",
|
|
575397
|
-
content: async () => "/mobile to use
|
|
575516
|
+
content: async () => "/mobile to use Cody CLI from the Claude app on your phone",
|
|
575398
575517
|
cooldownSessions: 15,
|
|
575399
575518
|
isRelevant: async () => true
|
|
575400
575519
|
},
|
|
@@ -575497,7 +575616,7 @@ ${blue2(`/plugin install vercel@${OFFICIAL_MARKETPLACE_NAME}`)}`;
|
|
|
575497
575616
|
content: async (ctx) => {
|
|
575498
575617
|
const claude = color("claude", ctx.theme);
|
|
575499
575618
|
const reward = getCachedReferrerReward();
|
|
575500
|
-
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")}`;
|
|
575501
575620
|
},
|
|
575502
575621
|
cooldownSessions: 3,
|
|
575503
575622
|
isRelevant: async () => {
|
|
@@ -578937,7 +579056,7 @@ async function _temp291() {
|
|
|
578937
579056
|
priority: "high"
|
|
578938
579057
|
};
|
|
578939
579058
|
}
|
|
578940
|
-
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.";
|
|
578941
579060
|
var init_useNpmDeprecationNotification = __esm(() => {
|
|
578942
579061
|
init_doctorDiagnostic();
|
|
578943
579062
|
init_envUtils();
|
|
@@ -580983,7 +581102,7 @@ function REPL({
|
|
|
580983
581102
|
const [haikuTitle, setHaikuTitle] = import_react317.useState();
|
|
580984
581103
|
const haikuTitleAttemptedRef = import_react317.useRef((initialMessages?.length ?? 0) > 0);
|
|
580985
581104
|
const agentTitle = mainThreadAgentDefinition?.agentType;
|
|
580986
|
-
const terminalTitle = sessionTitle ?? agentTitle ?? haikuTitle ?? "
|
|
581105
|
+
const terminalTitle = sessionTitle ?? agentTitle ?? haikuTitle ?? "Cody CLI";
|
|
580987
581106
|
const isWaitingForApproval = toolUseConfirmQueue.length > 0 || promptQueue.length > 0 || pendingWorkerRequest || pendingSandboxRequest;
|
|
580988
581107
|
const isShowingLocalJSXCommand = toolJSX?.isLocalJSXCommand === true && toolJSX?.jsx != null;
|
|
580989
581108
|
const titleIsAnimating = isLoading && !isWaitingForApproval && !isShowingLocalJSXCommand;
|
|
@@ -582865,8 +582984,8 @@ ${fileList}`);
|
|
|
582865
582984
|
import_react317.useEffect(() => {
|
|
582866
582985
|
const handleSuspend = () => {
|
|
582867
582986
|
process.stdout.write(`
|
|
582868
|
-
|
|
582869
|
-
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.
|
|
582870
582989
|
`);
|
|
582871
582990
|
};
|
|
582872
582991
|
const handleResume = () => {
|
|
@@ -584233,7 +584352,7 @@ function MCPServerDialogCopy() {
|
|
|
584233
584352
|
"MCP servers may execute code or access system resources. All tool calls require approval. Learn more in the",
|
|
584234
584353
|
" ",
|
|
584235
584354
|
/* @__PURE__ */ jsx_dev_runtime468.jsxDEV(Link, {
|
|
584236
|
-
url: "https://
|
|
584355
|
+
url: "https://docs.ainative.studio/cody-cli/mcp",
|
|
584237
584356
|
children: "MCP documentation"
|
|
584238
584357
|
}, undefined, false, undefined, this),
|
|
584239
584358
|
"."
|
|
@@ -584870,7 +584989,7 @@ function PreflightStep(t0) {
|
|
|
584870
584989
|
children: [
|
|
584871
584990
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584872
584991
|
color: "error",
|
|
584873
|
-
children: "Unable to connect to
|
|
584992
|
+
children: "Unable to connect to AINative services"
|
|
584874
584993
|
}, undefined, false, undefined, this),
|
|
584875
584994
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584876
584995
|
color: "error",
|
|
@@ -584885,7 +585004,7 @@ function PreflightStep(t0) {
|
|
|
584885
585004
|
}, undefined, false, undefined, this),
|
|
584886
585005
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584887
585006
|
color: "suggestion",
|
|
584888
|
-
children: "See https://
|
|
585007
|
+
children: "See https://docs.ainative.studio/cody-cli/network-config"
|
|
584889
585008
|
}, undefined, false, undefined, this)
|
|
584890
585009
|
]
|
|
584891
585010
|
}, undefined, true, undefined, this) : /* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedBox_default, {
|
|
@@ -584897,11 +585016,11 @@ function PreflightStep(t0) {
|
|
|
584897
585016
|
}, undefined, false, undefined, this),
|
|
584898
585017
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584899
585018
|
children: [
|
|
584900
|
-
"Note:
|
|
585019
|
+
"Note: Cody CLI might not be available in your country. Check supported countries at",
|
|
584901
585020
|
" ",
|
|
584902
585021
|
/* @__PURE__ */ jsx_dev_runtime472.jsxDEV(ThemedText, {
|
|
584903
585022
|
color: "suggestion",
|
|
584904
|
-
children: "https://
|
|
585023
|
+
children: "https://ainative.studio/supported-countries"
|
|
584905
585024
|
}, undefined, false, undefined, this)
|
|
584906
585025
|
]
|
|
584907
585026
|
}, undefined, true, undefined, this)
|
|
@@ -585419,7 +585538,7 @@ function Onboarding({
|
|
|
585419
585538
|
"For more details see:",
|
|
585420
585539
|
/* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Newline, {}, undefined, false, undefined, this),
|
|
585421
585540
|
/* @__PURE__ */ jsx_dev_runtime477.jsxDEV(Link, {
|
|
585422
|
-
url: "https://
|
|
585541
|
+
url: "https://docs.ainative.studio/cody-cli/security"
|
|
585423
585542
|
}, undefined, false, undefined, this)
|
|
585424
585543
|
]
|
|
585425
585544
|
}, undefined, true, undefined, this)
|
|
@@ -585984,7 +586103,7 @@ function TrustDialog(t0) {
|
|
|
585984
586103
|
}, undefined, true, undefined, this);
|
|
585985
586104
|
t18 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
|
|
585986
586105
|
children: [
|
|
585987
|
-
"
|
|
586106
|
+
"Cody CLI",
|
|
585988
586107
|
"'",
|
|
585989
586108
|
"ll be able to read, edit, and execute files here."
|
|
585990
586109
|
]
|
|
@@ -586002,7 +586121,7 @@ function TrustDialog(t0) {
|
|
|
586002
586121
|
t19 = /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(ThemedText, {
|
|
586003
586122
|
dimColor: true,
|
|
586004
586123
|
children: /* @__PURE__ */ jsx_dev_runtime478.jsxDEV(Link, {
|
|
586005
|
-
url: "https://
|
|
586124
|
+
url: "https://docs.ainative.studio/cody-cli/security",
|
|
586006
586125
|
children: "Security guide"
|
|
586007
586126
|
}, undefined, false, undefined, this)
|
|
586008
586127
|
}, undefined, false, undefined, this);
|
|
@@ -586178,7 +586297,7 @@ function BypassPermissionsModeDialog(t0) {
|
|
|
586178
586297
|
children: [
|
|
586179
586298
|
/* @__PURE__ */ jsx_dev_runtime479.jsxDEV(ThemedText, {
|
|
586180
586299
|
children: [
|
|
586181
|
-
"In Bypass Permissions mode,
|
|
586300
|
+
"In Bypass Permissions mode, Cody CLI will not ask for your approval before running potentially dangerous commands.",
|
|
586182
586301
|
/* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Newline, {}, undefined, false, undefined, this),
|
|
586183
586302
|
"This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."
|
|
586184
586303
|
]
|
|
@@ -586187,7 +586306,7 @@ function BypassPermissionsModeDialog(t0) {
|
|
|
586187
586306
|
children: "By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."
|
|
586188
586307
|
}, undefined, false, undefined, this),
|
|
586189
586308
|
/* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Link, {
|
|
586190
|
-
url: "https://
|
|
586309
|
+
url: "https://docs.ainative.studio/cody-cli/security"
|
|
586191
586310
|
}, undefined, false, undefined, this)
|
|
586192
586311
|
]
|
|
586193
586312
|
}, undefined, true, undefined, this);
|
|
@@ -586211,7 +586330,7 @@ function BypassPermissionsModeDialog(t0) {
|
|
|
586211
586330
|
let t5;
|
|
586212
586331
|
if ($3[5] !== onChange) {
|
|
586213
586332
|
t5 = /* @__PURE__ */ jsx_dev_runtime479.jsxDEV(Dialog, {
|
|
586214
|
-
title: "WARNING:
|
|
586333
|
+
title: "WARNING: Cody CLI running in Bypass Permissions mode",
|
|
586215
586334
|
color: "error",
|
|
586216
586335
|
onCancel: handleEscape,
|
|
586217
586336
|
children: [
|
|
@@ -586310,7 +586429,7 @@ function ClaudeInChromeOnboarding(t0) {
|
|
|
586310
586429
|
if ($3[6] !== t4) {
|
|
586311
586430
|
t5 = /* @__PURE__ */ jsx_dev_runtime480.jsxDEV(ThemedText, {
|
|
586312
586431
|
children: [
|
|
586313
|
-
"
|
|
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.",
|
|
586314
586433
|
t4
|
|
586315
586434
|
]
|
|
586316
586435
|
}, undefined, true, undefined, this);
|
|
@@ -586373,7 +586492,7 @@ function ClaudeInChromeOnboarding(t0) {
|
|
|
586373
586492
|
" ",
|
|
586374
586493
|
"or visit ",
|
|
586375
586494
|
/* @__PURE__ */ jsx_dev_runtime480.jsxDEV(Link, {
|
|
586376
|
-
url: "https://
|
|
586495
|
+
url: "https://docs.ainative.studio/cody-cli/chrome"
|
|
586377
586496
|
}, undefined, false, undefined, this)
|
|
586378
586497
|
]
|
|
586379
586498
|
}, undefined, true, undefined, this);
|
|
@@ -586420,7 +586539,7 @@ function _temp306(current) {
|
|
|
586420
586539
|
hasCompletedClaudeInChromeOnboarding: true
|
|
586421
586540
|
};
|
|
586422
586541
|
}
|
|
586423
|
-
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";
|
|
586424
586543
|
var init_ClaudeInChromeOnboarding = __esm(() => {
|
|
586425
586544
|
init_analytics();
|
|
586426
586545
|
init_ink2();
|
|
@@ -586941,13 +587060,13 @@ function ResumeTask({
|
|
|
586941
587060
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(Spinner, {}, undefined, false, undefined, this),
|
|
586942
587061
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586943
587062
|
bold: true,
|
|
586944
|
-
children: "Loading
|
|
587063
|
+
children: "Loading Cody CLI sessions…"
|
|
586945
587064
|
}, undefined, false, undefined, this)
|
|
586946
587065
|
]
|
|
586947
587066
|
}, undefined, true, undefined, this),
|
|
586948
587067
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586949
587068
|
dimColor: true,
|
|
586950
|
-
children: retrying ? "Retrying…" : "Fetching your
|
|
587069
|
+
children: retrying ? "Retrying…" : "Fetching your Cody CLI sessions…"
|
|
586951
587070
|
}, undefined, false, undefined, this)
|
|
586952
587071
|
]
|
|
586953
587072
|
}, undefined, true, undefined, this);
|
|
@@ -586960,7 +587079,7 @@ function ResumeTask({
|
|
|
586960
587079
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586961
587080
|
bold: true,
|
|
586962
587081
|
color: "error",
|
|
586963
|
-
children: "Error loading
|
|
587082
|
+
children: "Error loading Cody CLI sessions"
|
|
586964
587083
|
}, undefined, false, undefined, this),
|
|
586965
587084
|
renderErrorSpecificGuidance(loadErrorType),
|
|
586966
587085
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
@@ -586991,7 +587110,7 @@ function ResumeTask({
|
|
|
586991
587110
|
/* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586992
587111
|
bold: true,
|
|
586993
587112
|
children: [
|
|
586994
|
-
"No
|
|
587113
|
+
"No Cody CLI sessions found",
|
|
586995
587114
|
currentRepo && /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
586996
587115
|
children: [
|
|
586997
587116
|
" for ",
|
|
@@ -587190,7 +587309,7 @@ function renderErrorSpecificGuidance(errorType) {
|
|
|
587190
587309
|
flexDirection: "row",
|
|
587191
587310
|
children: /* @__PURE__ */ jsx_dev_runtime483.jsxDEV(ThemedText, {
|
|
587192
587311
|
dimColor: true,
|
|
587193
|
-
children: "Sorry,
|
|
587312
|
+
children: "Sorry, Cody CLI encountered an error"
|
|
587194
587313
|
}, undefined, false, undefined, this)
|
|
587195
587314
|
}, undefined, false, undefined, this);
|
|
587196
587315
|
}
|
|
@@ -587510,7 +587629,7 @@ function TeleportRepoMismatchDialog(t0) {
|
|
|
587510
587629
|
}, undefined, false, undefined, this),
|
|
587511
587630
|
/* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
|
|
587512
587631
|
children: [
|
|
587513
|
-
"Open
|
|
587632
|
+
"Open Cody CLI in ",
|
|
587514
587633
|
/* @__PURE__ */ jsx_dev_runtime485.jsxDEV(ThemedText, {
|
|
587515
587634
|
bold: true,
|
|
587516
587635
|
children: targetRepo
|
|
@@ -588743,7 +588862,7 @@ var init_keybindings3 = __esm(() => {
|
|
|
588743
588862
|
init_bundledSkills();
|
|
588744
588863
|
FILE_FORMAT_EXAMPLE = {
|
|
588745
588864
|
$schema: "https://www.schemastore.org/claude-code-keybindings.json",
|
|
588746
|
-
$docs: "https://
|
|
588865
|
+
$docs: "https://docs.ainative.studio/cody-cli/keybindings",
|
|
588747
588866
|
bindings: [
|
|
588748
588867
|
{
|
|
588749
588868
|
context: "Chat",
|
|
@@ -589932,7 +590051,7 @@ var init_updateConfig = __esm(() => {
|
|
|
589932
590051
|
init_bundledSkills();
|
|
589933
590052
|
UPDATE_CONFIG_PROMPT = `# Update Config Skill
|
|
589934
590053
|
|
|
589935
|
-
Modify
|
|
590054
|
+
Modify Cody CLI configuration by updating settings.json files.
|
|
589936
590055
|
|
|
589937
590056
|
## When Hooks Are Required (Not Memory)
|
|
589938
590057
|
|
|
@@ -590232,7 +590351,7 @@ function cliOk(msg) {
|
|
|
590232
590351
|
|
|
590233
590352
|
// src/commands/mcp/addCommand.ts
|
|
590234
590353
|
function registerMcpAddCommand(mcp2) {
|
|
590235
|
-
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.
|
|
590236
590355
|
|
|
590237
590356
|
` + `Examples:
|
|
590238
590357
|
` + ` # Add HTTP server:
|
|
@@ -591264,7 +591383,7 @@ async function setup(cwd2, permissionMode, allowDangerouslySkipPermissions, work
|
|
|
591264
591383
|
logForDiagnosticsNoPII("info", "setup_started");
|
|
591265
591384
|
const nodeVersion = process.version.match(/^v(\d+)\./)?.[1];
|
|
591266
591385
|
if (!nodeVersion || parseInt(nodeVersion) < 18) {
|
|
591267
|
-
console.error(source_default.bold.red("Error:
|
|
591386
|
+
console.error(source_default.bold.red("Error: Cody CLI requires Node.js version 18 or higher."));
|
|
591268
591387
|
process.exit(1);
|
|
591269
591388
|
}
|
|
591270
591389
|
if (customSessionId) {
|
|
@@ -601317,7 +601436,7 @@ async function mcpRemoveHandler(name3, options) {
|
|
|
601317
601436
|
To remove from a specific scope, use:
|
|
601318
601437
|
`);
|
|
601319
601438
|
scopes.forEach((scope) => {
|
|
601320
|
-
process.stderr.write(`
|
|
601439
|
+
process.stderr.write(` cody mcp remove "${name3}" -s ${scope}
|
|
601321
601440
|
`);
|
|
601322
601441
|
});
|
|
601323
601442
|
cliError();
|
|
@@ -601332,7 +601451,7 @@ async function mcpListHandler() {
|
|
|
601332
601451
|
servers: configs
|
|
601333
601452
|
} = await getAllMcpConfigs();
|
|
601334
601453
|
if (Object.keys(configs).length === 0) {
|
|
601335
|
-
console.log("No MCP servers configured. Use `
|
|
601454
|
+
console.log("No MCP servers configured. Use `cody mcp add` to add a server.");
|
|
601336
601455
|
} else {
|
|
601337
601456
|
console.log(`Checking MCP server health...
|
|
601338
601457
|
`);
|
|
@@ -601430,7 +601549,7 @@ async function mcpGetHandler(name3) {
|
|
|
601430
601549
|
}
|
|
601431
601550
|
}
|
|
601432
601551
|
console.log(`
|
|
601433
|
-
To remove this server, run:
|
|
601552
|
+
To remove this server, run: cody mcp remove "${name3}" -s ${server.scope}`);
|
|
601434
601553
|
await gracefulShutdown(0);
|
|
601435
601554
|
}
|
|
601436
601555
|
async function mcpAddJsonHandler(name3, json2, options) {
|
|
@@ -601501,7 +601620,7 @@ async function mcpResetChoicesHandler() {
|
|
|
601501
601620
|
enableAllProjectMcpServers: false
|
|
601502
601621
|
}));
|
|
601503
601622
|
cliOk(`All project-scoped (.mcp.json) server approvals and rejections have been reset.
|
|
601504
|
-
You will be prompted for approval next time you start
|
|
601623
|
+
You will be prompted for approval next time you start Cody CLI.`);
|
|
601505
601624
|
}
|
|
601506
601625
|
var jsx_dev_runtime490;
|
|
601507
601626
|
var init_mcp5 = __esm(() => {
|
|
@@ -602149,7 +602268,7 @@ function Install({
|
|
|
602149
602268
|
const result = await installLatest(channelOrVersion, force);
|
|
602150
602269
|
logForDebugging(`Install: installLatest returned version=${result.latestVersion}, wasUpdated=${result.wasUpdated}, lockFailed=${result.lockFailed}`);
|
|
602151
602270
|
if (result.lockFailed) {
|
|
602152
|
-
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.");
|
|
602153
602272
|
}
|
|
602154
602273
|
if (!result.latestVersion) {
|
|
602155
602274
|
logForDebugging("Install: Failed to retrieve version information during install", {
|
|
@@ -603280,7 +603399,7 @@ async function run() {
|
|
|
603280
603399
|
await init();
|
|
603281
603400
|
profileCheckpoint("preAction_after_init");
|
|
603282
603401
|
if (!isEnvTruthy(process.env.CLAUDE_CODE_DISABLE_TERMINAL_TITLE)) {
|
|
603283
|
-
process.title = "
|
|
603402
|
+
process.title = "cody";
|
|
603284
603403
|
}
|
|
603285
603404
|
const {
|
|
603286
603405
|
initSinks: initSinks2
|
|
@@ -603331,7 +603450,7 @@ async function run() {
|
|
|
603331
603450
|
}
|
|
603332
603451
|
if (prompt === "code") {
|
|
603333
603452
|
logEvent("tengu_code_prompt_ignored", {});
|
|
603334
|
-
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`"));
|
|
603335
603454
|
prompt = undefined;
|
|
603336
603455
|
}
|
|
603337
603456
|
if (prompt && typeof prompt === "string" && !/\s/.test(prompt) && prompt.length > 0) {
|
|
@@ -604698,7 +604817,7 @@ Usage: cody --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
604698
604817
|
`);
|
|
604699
604818
|
process.stdout.write(`View: ${getRemoteSessionUrl(createdSession.id)}?m=0
|
|
604700
604819
|
`);
|
|
604701
|
-
process.stdout.write(`Resume with:
|
|
604820
|
+
process.stdout.write(`Resume with: cody --teleport ${createdSession.id}
|
|
604702
604821
|
`);
|
|
604703
604822
|
await gracefulShutdown(0);
|
|
604704
604823
|
process.exit(0);
|
|
@@ -604782,7 +604901,7 @@ Usage: cody --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
604782
604901
|
await gracefulShutdown(0);
|
|
604783
604902
|
}
|
|
604784
604903
|
} else {
|
|
604785
|
-
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)}.
|
|
604786
604905
|
`));
|
|
604787
604906
|
}
|
|
604788
604907
|
}
|
|
@@ -605003,7 +605122,7 @@ Usage: cody --remote "your task description"`, () => gracefulShutdown(1));
|
|
|
605003
605122
|
} = await Promise.resolve().then(() => (init_mcp5(), exports_mcp3));
|
|
605004
605123
|
await mcpAddJsonHandler2(name3, json2, options);
|
|
605005
605124
|
});
|
|
605006
|
-
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) => {
|
|
605007
605126
|
const {
|
|
605008
605127
|
mcpAddFromDesktopHandler: mcpAddFromDesktopHandler2
|
|
605009
605128
|
} = await Promise.resolve().then(() => (init_mcp5(), exports_mcp3));
|