@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 CHANGED
@@ -41798,11 +41798,8 @@ var init_lodash = __esm(() => {
41798
41798
 
41799
41799
  // src/constants/keys.ts
41800
41800
  function getGrowthBookClientKey() {
41801
- return "sdk-zAZezfDKGoZuXXKe";
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(`Claude Code was unable to find CLAUDE_CODE_GIT_BASH_PATH path "${process.env.CLAUDE_CODE_GIT_BASH_PATH}"`);
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("Claude Code 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");
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 || `Claude Code auto-stash - ${new Date().toISOString()}`;
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 Claude Code needs access"),
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 Claude Code settings"),
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 Claude Code sessions"),
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 Claude Code attribution if not set."),
57686
- includeCoAuthoredBy: exports_external.boolean().optional().describe("Deprecated: Use attribution instead. " + "Whether to include Claude's co-authored by attribution in commits and PRs (defaults to true)"),
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 Claude Code"),
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(), exports_external.undefined()])).optional().describe('Enabled plugins using plugin-id@marketplace-id format. Example: { "formatter@anthropic-tools": true }. Also supports extended format with version constraints.'),
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(["claudeai", "console"]).optional().describe('Force a specific login method: "claudeai" for AINative subscription, "console" for Console billing'),
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 Claude responses and voice dictation (e.g., "japanese", "spanish")'),
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, Claude will not read from or write to the auto-memory directory."),
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://code.claude.com/docs/en", TIP_MATCHERS, PATH_DOC_LINKS;
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 endpoint = `${getOauthConfig().BASE_API_URL}/api/cody/profile`;
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
- async function getAINativeProfile(baseUrl, accessToken) {
125367
- try {
125368
- const response = await axios_default.get(`${baseUrl}/api/v1/auth/me`, {
125369
- headers: {
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 apiKey = process.env.AINATIVE_API_KEY || process.env.ANTHROPIC_API_KEY;
125392
- if (apiKey) {
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(`${baseUrl}/api/v1/auth/me`, {
125415
+ const response = await axios_default.get(url3, {
125395
125416
  headers: {
125396
- "x-api-key": apiKey,
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
- account: {
125406
- uuid: user.id || crypto.randomUUID(),
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: "claude.ai", hasToken: true };
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: "claude.ai", hasToken: true };
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 === "claude.ai" || apiKeySource === "/login managed key") {
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 === "claude.ai" || apiKeySource === "/login managed key") && email3) {
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 `claude-code/${"0.7.15"}${suffix}`;
173168
+ return `cody-cli/${"0.7.15"}${suffix}`;
173156
173169
  }
173157
173170
  function getWebFetchUserAgent() {
173158
- return `Claude-User (${getCodyUserAgent()}; +https://support.anthropic.com/)`;
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: "1775579206",
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
- async function trackDatadogEvent(eventName, properties) {
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 .claude/agents/ for this level of control.`, { level: "warn" });
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://code.claude.com/docs/en/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;
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 Claude Code";
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 Claude Code.]
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, Claude Code cannot automatically validate ${command} commands that use flags, as some flags like --target-directory=PATH can bypass path validation.`,
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, Claude Code cannot automatically determine the final working directory when 'cd' is used in compound commands.`,
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, Claude Code may only ${ACTION_VERBS[command]} the allowed working directories for this session: ${dirListStr}.`;
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, Claude Code cannot automatically determine the final working directory when 'cd' is used in compound commands.`,
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, Claude Code may only write to files in the allowed working directories for this session: ${dirListStr}.`;
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://code.claude.com/docs/en/mcp#configure-mcp-servers`,
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 Claude Code.</p>`);
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: `Claude Code (${this.serverName})`,
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 Claude Code for ",
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": "claude.ai 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: "Claude Code",
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: "Claude Code",
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 Claude Code)";
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 Claude Code",
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 Claude Code in WSL but using the Windows NPM installation from /mnt/c/.
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 === "claude.ai" ? "AINative OAuth" : 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 { randomUUID: randomUUID10 } = await import("crypto");
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: randomUUID10(),
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
- await fetchAndStoreUserRoles(tokens.accessToken).catch((err2) => logForDebugging(String(err2), { level: "error" }));
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 cannot be used together.
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 === "claudeai" : !useConsole;
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 === "claude.ai") {
336640
- authMethod = "claude.ai";
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 = "claude.ai";
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 claude auth login to authenticate.
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 === "claude.ai") {
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 = "Claude Code";
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 === "claudeai" ? "Login method pre-selected: Subscription Plan (AINative Pro)" : forceLoginMethod === "console" ? "Login method pre-selected: API Usage Billing (AINative Console)" : null;
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 === "claudeai" || forceLoginMethod === "console") {
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 [apiKeyInput2, setApiKeyInput2] = import_react59.useState("");
344256
- const [apiKeyCursorOffset2, setApiKeyCursorOffset2] = import_react59.useState(0);
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 === "claudeai";
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 === "claudeai") {
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: "Claude Code login successful",
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: "claudeai"
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: "Claude Code supports Amazon Bedrock, Microsoft Foundry, and Vertex AI. Set the required environment variables, then restart Claude Code."
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://code.claude.com/docs/en/amazon-bedrock",
344739
- children: "https://code.claude.com/docs/en/amazon-bedrock"
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://code.claude.com/docs/en/microsoft-foundry",
344755
- children: "https://code.claude.com/docs/en/microsoft-foundry"
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://code.claude.com/docs/en/google-vertex-ai",
344778
- children: "https://code.claude.com/docs/en/google-vertex-ai"
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 Claude Code…"
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("Claude Code 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.");
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("Claude Code 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.");
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: "claudeai"
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 Claude",
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 Claude account",
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("Claude Code 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.");
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://claude.ai/code" : "";
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 Claude Code process in the same project deleted it during startup cleanup.>`;
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 Claude Code defaults only`);
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, Claude Code may only access files in the allowed working directories for this session: ${dirListStr}.`;
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, Claude Code may only access files in the allowed working directories for this session: ${dirListStr}.`;
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, Claude Code may only write to files in the allowed working directories for this session: ${dirListStr}.`;
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, Claude Code may only write to files in the allowed working directories for this session: ${dirListStr}.`;
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: `Claude Code settings.json validation failed after edit:
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(`Claude Code is unable to fetch from ${domain2}`);
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 Claude responses and voice dictation (e.g., "japanese", "spanish")'
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 \`.claude/agents/\` may have their own tool restrictions. Check their descriptions to understand what they can and cannot do.
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 [Claude Code](${PRODUCT_URL})`;
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 [Claude Code](${PRODUCT_URL})`;
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 [Claude Code](${PRODUCT_URL}) (${claudePercent}% ${promptCount}-shotted by ${shortModelName}${memSuffix})`;
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("1775579206").getTime();
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 ` + `Claude Code version. Run 'claude marketplace remove ${name3}' and ` + `re-add it from the original project directory.`);
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}: Claude Code is unable to respond to this request, which appears to violate our Usage Policy (https://www.anthropic.com/legal/aup). Try rephrasing the request or attempting a different approach.` : `${API_ERROR_MESSAGE_PREFIX}: Claude Code is unable to respond to this request, which appears to violate our Usage Policy (https://www.anthropic.com/legal/aup). Please double press esc to edit your last message or start a new session for Claude Code to assist with a different task.`;
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 Claude Code. Please run /login.";
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
- # Claude Code Code Bash command prefix detection
436143
+ # Cody CLI Code Bash command prefix detection
436144
436144
 
436145
- This document defines risk levels for actions that the Claude Code 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.
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 Claude to create a new app or clone a repository",
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: "Claude Code will be able to read files in this directory and make edits when auto-accept edits is on."
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 Claude Code.", "Claude Code 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"']),
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 between Claude models. Applies to this session and future Claude Code sessions. For other/previous model names, specify with --model.";
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 Claude Code with files you trust. Accessing untrusted files may pose security risks",
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://code.claude.com/docs/en/security"
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 Claude Code communicates with you"
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: "Claude in Chrome enabled by default",
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 CLAUDE.md includes",
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 Claude Code usage";
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://code.claude.com/docs/en/mcp",
454246
- children: "https://code.claude.com/docs/en/mcp"
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://code.claude.com/docs/en/memory"
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 Claude Code extension or plugin installed and is running."
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 Claude Code instance can be connected to VS Code at a time."
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 Claude Code extension detected.");
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 CLAUDE.md, suggest improvements to it.
458732
- - When you make the initial CLAUDE.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".
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
- # CLAUDE.md
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://code.claude.com/docs/en/keybindings",
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/anthropics/claude-code-action/blob/main/examples/",
459238
- children: "https://github.com/anthropics/claude-code-action/blob/main/examples/"
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: "@Claude Code - Tag @claude in issues and PR comments"
459364
+ label: "@Cody CLI - Tag @cody in issues and PR comments"
459324
459365
  }, {
459325
459366
  value: "claude-review",
459326
- label: "Claude Code Review - Automated code review on new PRs"
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/anthropics/claude-code-action/blob/main/docs/setup.md", WORKFLOW_CONTENT = `name: Cody CLI
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 Claude Code
459404
+ - name: Run Cody CLI
459364
459405
  id: claude
459365
- uses: anthropics/claude-code-action@v1
459406
+ uses: ainative-studio/cody-action@v1
459366
459407
  with:
459367
- anthropic_api_key: \${{ secrets.ANTHROPIC_API_KEY }}
459408
+ ainative_api_key: \${{ secrets.AINATIVE_API_KEY }}
459368
459409
 
459369
- # This is an optional setting that allows Claude to read CI results on PRs
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/anthropics/claude-code-action/blob/main/docs/usage.md
459378
- # or https://code.claude.com/docs/en/cli-reference for available options
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 Claude Code GitHub App
459422
+ `, PR_BODY = `## \uD83E\uDD16 Installing Cody CLI GitHub App
459382
459423
 
459383
- This PR adds a GitHub Actions workflow that enables Claude Code integration in our repository.
459424
+ This PR adds a GitHub Actions workflow that enables Cody CLI integration in our repository.
459384
459425
 
459385
- ### What is Claude Code?
459426
+ ### What is Cody CLI?
459386
459427
 
459387
- [Claude Code](https://claude.com/claude-code) is an AI coding agent that can help with:
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 Claude is mentioned in PR or issue comments
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 Anthropic API key is securely stored as a GitHub Actions secret
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 Claude runs are stored in the GitHub Actions run history
459412
- - Claude's default tools are limited to reading/writing files and interacting with our repo by creating comments, branches, and commits.
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/anthropics/claude-code-action).
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 Claude Code Review
459495
+ - name: Run Cody CLI Review
459455
459496
  id: claude-review
459456
- uses: anthropics/claude-code-action@v1
459497
+ uses: ainative-studio/cody-action@v1
459457
459498
  with:
459458
- anthropic_api_key: \${{ secrets.ANTHROPIC_API_KEY }}
459459
- plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
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/anthropics/claude-code-action/blob/main/docs/usage.md
459463
- # or https://code.claude.com/docs/en/cli-reference for available options
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 Claude Code API key"
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/anthropics/claude-code-action/blob/main/examples/claude.yml"
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/anthropics/claude-code-action";
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: "Claude Code Review workflow"
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/anthropics/claude-code-action";
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://code.claude.com/docs/en/mcp",
463315
- children: "https://code.claude.com/docs/en/mcp"
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 Claude Code.");
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 Claude Code for the changes to take effect.");
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 Claude Code.");
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 Claude Code for the changes to take effect.");
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://code.claude.com/docs/en/mcp to learn more.");
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" ? "claude.ai" : "Claude Code";
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/anthropics/claude-plugins-official/refs/heads/stats/stats/plugin-installs.json", CACHE_TTL_MS4;
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 Claude Code."
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. Claude Code will automatically update this marketplace and its installed plugins."
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 — Claude Code ` + `ignores it at load time.`
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. Claude Code accepts ` + `it, but the Claude.ai marketplace sync requires kebab-case ` + `(lowercase letters, digits, and hyphens only, e.g., "my-plugin").`
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 Claude ` + `understand when to use this ${fileType}.`
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://apps.apple.com/app/claude-by-anthropic/id6473753684"
481688
+ url: "https://ainative.studio/mobile/ios"
481648
481689
  },
481649
481690
  android: {
481650
- url: "https://play.google.com/store/apps/details?id=com.anthropic.claude"
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 Claude Code and earn ${formatCreditAmount(reward)} of extra usage · /passes` : "3 guest passes at /passes"
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, claudeAiSubscriberExternalTokenNotice, apiKeyConflictNotice, bothAuthMethodsNotice, largeAgentDescriptionsNotice, jetbrainsPluginNotice, statusNoticeDefinitions;
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
- claudeAiSubscriberExternalTokenNotice = {
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 Claude account subscription token. Either unset ",
485829
+ " instead of AINative account subscription token. Either unset ",
485789
485830
  authTokenInfo.source,
485790
- ", or run `claude /logout`."
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 Anthropic Console key. Either unset ",
485868
+ " instead of AINative Console key. Either unset ",
485828
485869
  apiKeySource,
485829
- ", or run `claude /logout`."
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 === "claude.ai" ? "claude.ai" : 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 claude /logout then say "No" to the API key approval before login.' : apiKeySource === "apiKeyHelper" ? "Unset the apiKeyHelper setting." : "claude /logout"
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 === "claude.ai" ? "claude /logout to sign out of claude.ai." : `Unset the ${authTokenInfo.source} environment variable.`
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, claudeAiSubscriberExternalTokenNotice, apiKeyConflictNotice, bothAuthMethodsNotice, jetbrainsPluginNotice];
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://claude.ai/settings/billing to continue.", {
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://claude.ai/settings/billing`, {
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://code.claude.com/docs/en/claude-code-on-the-web", LOCAL_REVIEW_PROMPT = (args) => `
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://code.claude.com/docs/en/claude-code-on-the-web", _rawPrompt, DEFAULT_INSTRUCTIONS, ULTRAPLAN_INSTRUCTIONS, call35 = async (onDone, context4, args) => {
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 Claude Code on the web";
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 Claude Code on the web session."
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 Claude Code on the web",
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 Claude Code on the web",
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 Claude Code on the web",
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 Claude Code",
498590
- subtitle: "Generate your 2025 Claude Code Think Back (takes a few minutes to run)",
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 Claude Code 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 Claude Code 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 Claude Code 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.';
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: "Claude Code will no longer have access to files in this directory."
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: "Claude Code won't ask before using allowed tools.",
500408
- ask: "Claude Code will always ask for confirmation before using these tools.",
500409
- deny: "Claude Code will always reject requests to use denied tools."
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: "Claude Code can read files in the workspace, and make edits when auto-accept edits is on."
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://code.claude.com/docs/en/fast-mode",
501859
- children: "https://code.claude.com/docs/en/fast-mode"
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 Claude Code with friends. If they love it and subscribe, you'll get ${formatCreditAmount(referrerReward)} of extra usage to keep building. ` : "Share a free week of Claude Code with friends. ",
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 Claude Code with friends and earn extra usage";
502317
+ return "Share a free week of Cody CLI with friends and earn extra usage";
502277
502318
  }
502278
- return "Share a free week of Claude Code with friends";
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 Anthropic AI models. Change anytime in your Privacy Settings (",
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://claude.ai/settings/data-privacy-controls"
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://www.anthropic.com/news/updates-to-our-consumer-terms"
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://anthropic.com/legal/terms"
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://anthropic.com/legal/privacy"
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 Claude"
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 Anthropic AI models. You can change this anytime in Privacy Settings"
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://claude.ai/settings/data-privacy-controls"
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://www.anthropic.com/news/updates-to-our-consumer-terms"
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://anthropic.com/legal/terms"
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://anthropic.com/legal/privacy"
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 Claude: OFF (for emails with your domain)",
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 Claude: ON",
502684
+ label: "Accept terms · Help improve Cody: ON",
502644
502685
  value: "accept_opt_in"
502645
502686
  }, {
502646
- label: "Accept terms · Help improve Claude: OFF",
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://claude.ai/settings/data-privacy-controls"
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 Claude"
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://claude.ai/settings/data-privacy-controls";
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://code.claude.com/docs/en/hooks",
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 (.claude/agents/)",
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 (.claude/agent-memory/)",
509415
+ label: "Project scope (.cody/agent-memory/)",
509375
509416
  value: "project"
509376
509417
  }, {
509377
- label: "Local scope (.claude/agent-memory-local/)",
509418
+ label: "Local scope (.cody/agent-memory-local/)",
509378
509419
  value: "local"
509379
509420
  }] : [{
509380
- label: "Project scope (.claude/agent-memory/) (Recommended)",
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 (.claude/agent-memory-local/)",
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 Claude (recommended)",
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 ${"1775579206"})`
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://code.claude.com/docs/en/sandboxing#configure-sandboxing",
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://code.claude.com/docs/en/sandboxing",
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, "Claude Code", "ChromeNativeHost")];
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: "Claude Code Browser Extension Native Host",
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 Claude Code - do not edit manually
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 Claude Code - do not edit manually
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 Claude Code. Navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests."
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://code.claude.com/docs/en/chrome"
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://claude.ai/chrome", CHROME_PERMISSIONS_URL = "https://clau.de/chrome/permissions", CHROME_RECONNECT_URL = "https://clau.de/chrome/reconnect", call58 = async function(onDone) {
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://code.claude.com/docs/en/model-config#extended-context-with-1m`, {
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://code.claude.com/docs/en/model-config#extended-context-with-1m`, {
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 AI model for Claude Code (currently ${renderModelName(getMainLoopModel())})`;
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://claude.ai/code`;
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://claude.ai/upgrade/max";
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://claude.ai/upgrade/max to upgrade.");
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 Claude Code stats…"
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 Claude Code!"
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 (.claude/agent-memory/)";
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(), ".claude", "commands");
525308
- const agentsDir = join132(getOriginalCwd(), ".claude", "agents");
525309
- const skillsDir = join132(getOriginalCwd(), ".claude", "skills");
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 Claude Code.
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 Claude Code. Your task is to verify that the agent completed the given plan. The conversation transcript is available at: ${transcriptPath}
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 = process.env.ANTHROPIC_BASE_URL || "https://api.ainative.studio";
532577
- const apiKey = process.env.AINATIVE_API_KEY || process.env.ANTHROPIC_API_KEY || "";
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: 4096,
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: JSON.parse(tc.function.arguments || "{}")
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(120000)
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
- const data = await resp.json();
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
- return { ...block, text: block.text.replace(/<\/?tool_call>/g, "").trimEnd() };
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://code.claude.com/docs/en/costs"
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(() => `✻ [Claude Code] ${basename42(filePath)} (${sha}) ⧉`, [filePath, sha]);
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 Claude what to do next",
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 Claude to edit its own settings for this session",
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 Claude what to do differently",
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 Claude Code on the web",
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 "Claude Code needs your approval for the plan";
550868
+ return "Cody needs your approval for the plan";
550750
550869
  }
550751
550870
  if (toolUseConfirm.tool === EnterPlanModeTool) {
550752
- return "Claude Code wants to enter plan mode";
550871
+ return "Cody wants to enter plan mode";
550753
550872
  }
550754
550873
  if (false) {}
550755
550874
  if (!toolName || toolName.trim() === "") {
550756
- return "Claude Code needs your attention";
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("Claude Code needs your input", "elicitation_dialog");
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("Claude Code needs your input", "elicitation_url_dialog");
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 Claude finishes to review these changes in the cloud",
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 (claude.ai/code) or the Claude app, so you can pick up where you left off on any device."
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 Claude Code?"
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://code.claude.com/docs/en/data-usage#session-quality-surveys"
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: "Claude in Chrome requires an active subscription"
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://claude.ai/chrome to install"
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: "Claude in Chrome enabled · /chrome",
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 Claude Code Desktop",
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 Claude Code with visual diffs, live app preview, parallel sessions, and more."
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 Claude Code Desktop",
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 Claude Code using control+v (not cmd+v!)",
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 Claude Code locally or remotely using the Claude desktop app: clau.de/desktop",
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 Claude Code Desktop with ${blue2("/desktop")}`;
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 Claude Code from the Claude app on your phone",
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 Claude Code and earn ${claude(formatCreditAmount(reward))} of extra usage · ${claude("/passes")}` : `You have free guest passes to share · ${claude("/passes")}`;
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 = "Claude Code has switched from npm to native installer. Run `claude install` or see https://docs.anthropic.com/en/docs/claude-code/getting-started for more options.";
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 ?? "Claude Code";
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
- Claude Code has been suspended. Run \`fg\` to bring Claude Code back.
582869
- Note: ctrl + z now suspends Claude Code, ctrl + _ undoes input.
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://code.claude.com/docs/en/mcp",
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 Anthropic services"
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://code.claude.com/docs/en/network-config"
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: Claude Code might not be available in your country. Check supported countries at",
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://anthropic.com/supported-countries"
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://code.claude.com/docs/en/security"
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
- "Claude Code",
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://code.claude.com/docs/en/security",
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, Claude Code will not ask for your approval before running potentially dangerous commands.",
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://code.claude.com/docs/en/security"
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: Claude Code running in Bypass Permissions mode",
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
- "Claude in Chrome works with the Chrome extension to let you control your browser directly from Claude Code. You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.",
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://code.claude.com/docs/en/chrome"
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://claude.ai/chrome", CHROME_PERMISSIONS_URL2 = "https://clau.de/chrome/permissions";
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 Claude Code sessions…"
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 Claude Code sessions…"
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 Claude Code sessions"
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 Claude Code sessions found",
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, Claude Code encountered an error"
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 Claude Code in ",
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://code.claude.com/docs/en/keybindings",
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 Claude Code configuration by updating settings.json files.
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 Claude Code.
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: Claude Code requires Node.js version 18 or higher."));
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(` claude mcp remove "${name3}" -s ${scope}
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 `claude mcp add` to add a server.");
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: claude mcp remove "${name3}" -s ${server.scope}`);
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 Claude Code.`);
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 Claude. Please try again in a moment.");
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 = "claude";
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 `claude`"));
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: claude --teleport ${createdSession.id}
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 claude --teleport ${teleport} from a checkout of ${sessionRepo}.`, source_default.red(`You must run claude --teleport ${teleport} from a checkout of ${source_default.bold(sessionRepo)}.
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 Claude Desktop (Mac and WSL only)").option("-s, --scope <scope>", "Configuration scope (local, user, or project)", "local").action(async (options) => {
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));