snow-ai 0.7.26 → 0.7.27

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/bundle/cli.mjs CHANGED
@@ -33860,7 +33860,7 @@ var init_cursor_helpers = __esm({
33860
33860
  });
33861
33861
 
33862
33862
  // source/vendor/ink/src/log-update.ts
33863
- var visibleLineCount, create, logUpdate, log_update_default;
33863
+ var visibleLineCount, isStreamWriteError, writeSafely, create, logUpdate, log_update_default;
33864
33864
  var init_log_update = __esm({
33865
33865
  "source/vendor/ink/src/log-update.ts"() {
33866
33866
  "use strict";
@@ -33868,6 +33868,26 @@ var init_log_update = __esm({
33868
33868
  init_cli_cursor();
33869
33869
  init_cursor_helpers();
33870
33870
  visibleLineCount = (lines, str2) => str2.endsWith("\n") ? lines.length - 1 : lines.length;
33871
+ isStreamWriteError = (error40) => {
33872
+ if (!(error40 instanceof Error)) {
33873
+ return false;
33874
+ }
33875
+ const code = error40.code;
33876
+ return code === "ERR_STREAM_DESTROYED" || code === "ERR_STREAM_WRITE_AFTER_END" || error40.message.includes("stream was destroyed") || error40.message.includes("write after end");
33877
+ };
33878
+ writeSafely = (stream, data) => {
33879
+ if (stream.destroyed || stream.writableEnded) {
33880
+ return false;
33881
+ }
33882
+ try {
33883
+ return stream.write(data);
33884
+ } catch (error40) {
33885
+ if (isStreamWriteError(error40)) {
33886
+ return false;
33887
+ }
33888
+ throw error40;
33889
+ }
33890
+ };
33871
33891
  create = (stream, { showCursor = false } = {}) => {
33872
33892
  let previousLineCount = 0;
33873
33893
  let previousOutput = "";
@@ -33894,7 +33914,8 @@ var init_log_update = __esm({
33894
33914
  const lines = output2.split("\n");
33895
33915
  const visibleCount = visibleLineCount(lines, output2);
33896
33916
  if (output2 === previousOutput && cursorChanged) {
33897
- stream.write(
33917
+ writeSafely(
33918
+ stream,
33898
33919
  buildCursorOnlySequence({
33899
33920
  cursorWasShown,
33900
33921
  previousLineCount,
@@ -33911,7 +33932,8 @@ var init_log_update = __esm({
33911
33932
  previousCursorPosition
33912
33933
  );
33913
33934
  const cursorSuffix = buildCursorSuffix(visibleCount, activeCursor);
33914
- stream.write(
33935
+ writeSafely(
33936
+ stream,
33915
33937
  returnPrefix + base_exports.eraseLines(previousLineCount) + output2 + cursorSuffix
33916
33938
  );
33917
33939
  previousLineCount = lines.length;
@@ -33925,7 +33947,7 @@ var init_log_update = __esm({
33925
33947
  previousLineCount,
33926
33948
  previousCursorPosition
33927
33949
  );
33928
- stream.write(prefix + base_exports.eraseLines(previousLineCount));
33950
+ writeSafely(stream, prefix + base_exports.eraseLines(previousLineCount));
33929
33951
  previousOutput = "";
33930
33952
  previousLineCount = 0;
33931
33953
  previousCursorPosition = void 0;
@@ -35007,27 +35029,27 @@ var init_ink = __esm({
35007
35029
  if (hasStaticOutput) {
35008
35030
  this.fullStaticOutput += staticOutput;
35009
35031
  }
35010
- this.options.stdout.write(this.fullStaticOutput + output2);
35032
+ writeSafely(this.options.stdout, this.fullStaticOutput + output2);
35011
35033
  return;
35012
35034
  }
35013
35035
  if (is_in_ci_default) {
35014
35036
  if (hasStaticOutput) {
35015
- this.options.stdout.write(staticOutput);
35037
+ writeSafely(this.options.stdout, staticOutput);
35016
35038
  }
35017
35039
  this.lastOutput = output2;
35018
35040
  return;
35019
35041
  }
35020
35042
  if (outputHeight >= this.options.stdout.rows) {
35021
35043
  if (hasStaticOutput) {
35022
- this.options.stdout.write(staticOutput);
35044
+ writeSafely(this.options.stdout, staticOutput);
35023
35045
  }
35024
- this.options.stdout.write(base_exports.clearTerminal + output2);
35046
+ writeSafely(this.options.stdout, base_exports.clearTerminal + output2);
35025
35047
  this.lastOutput = output2;
35026
35048
  return;
35027
35049
  }
35028
35050
  if (hasStaticOutput) {
35029
35051
  this.log.clear();
35030
- this.options.stdout.write(staticOutput);
35052
+ writeSafely(this.options.stdout, staticOutput);
35031
35053
  this.log(output2);
35032
35054
  }
35033
35055
  if (!hasStaticOutput) {
@@ -35061,15 +35083,18 @@ var init_ink = __esm({
35061
35083
  return;
35062
35084
  }
35063
35085
  if (this.options.debug) {
35064
- this.options.stdout.write(data + this.fullStaticOutput + this.lastOutput);
35086
+ writeSafely(
35087
+ this.options.stdout,
35088
+ data + this.fullStaticOutput + this.lastOutput
35089
+ );
35065
35090
  return;
35066
35091
  }
35067
35092
  if (is_in_ci_default) {
35068
- this.options.stdout.write(data);
35093
+ writeSafely(this.options.stdout, data);
35069
35094
  return;
35070
35095
  }
35071
35096
  this.log.clear();
35072
- this.options.stdout.write(data);
35097
+ writeSafely(this.options.stdout, data);
35073
35098
  this.log(this.lastOutput);
35074
35099
  }
35075
35100
  writeToStderr(data) {
@@ -35077,16 +35102,16 @@ var init_ink = __esm({
35077
35102
  return;
35078
35103
  }
35079
35104
  if (this.options.debug) {
35080
- this.options.stderr.write(data);
35081
- this.options.stdout.write(this.fullStaticOutput + this.lastOutput);
35105
+ writeSafely(this.options.stderr, data);
35106
+ writeSafely(this.options.stdout, this.fullStaticOutput + this.lastOutput);
35082
35107
  return;
35083
35108
  }
35084
35109
  if (is_in_ci_default) {
35085
- this.options.stderr.write(data);
35110
+ writeSafely(this.options.stderr, data);
35086
35111
  return;
35087
35112
  }
35088
35113
  this.log.clear();
35089
- this.options.stderr.write(data);
35114
+ writeSafely(this.options.stderr, data);
35090
35115
  this.log(this.lastOutput);
35091
35116
  }
35092
35117
  // eslint-disable-next-line @typescript-eslint/ban-types
@@ -35104,7 +35129,7 @@ var init_ink = __esm({
35104
35129
  this.unsubscribeResize();
35105
35130
  }
35106
35131
  if (is_in_ci_default) {
35107
- this.options.stdout.write(this.lastOutput + "\n");
35132
+ writeSafely(this.options.stdout, this.lastOutput + "\n");
35108
35133
  } else if (!this.options.debug) {
35109
35134
  this.log.done();
35110
35135
  }
@@ -368801,7 +368826,7 @@ var init_search_utils = __esm({
368801
368826
  });
368802
368827
 
368803
368828
  // dist/mcp/utils/aceCodeSearch/constants.utils.js
368804
- var INDEX_CACHE_DURATION, BATCH_SIZE, BINARY_EXTENSIONS, GREP_EXCLUDE_DIRS, RECENT_FILE_THRESHOLD, MAX_FILE_STAT_CACHE_SIZE, ACE_IDLE_CLEANUP_MS, MAX_INDEXED_FILES, MAX_SYMBOLS_PER_FILE, MAX_FZF_SYMBOL_NAMES, LARGE_FILE_THRESHOLD, FILE_READ_CHUNK_SIZE, TEXT_SEARCH_TIMEOUT_MS, MAX_CONCURRENT_FILE_READS, MAX_REGEX_COMPLEXITY_SCORE, MAX_CONTENT_CACHE_BYTES, MEMORY_PRESSURE_THRESHOLD_BYTES, MEMORY_CHECK_INTERVAL_MS;
368829
+ var INDEX_CACHE_DURATION, BATCH_SIZE, BINARY_EXTENSIONS, GREP_EXCLUDE_DIRS, RECENT_FILE_THRESHOLD, MAX_FILE_STAT_CACHE_SIZE, ACE_IDLE_CLEANUP_MS, MAX_INDEXED_FILES, MAX_SYMBOLS_PER_FILE, MAX_FZF_SYMBOL_NAMES, MAX_FILE_OUTLINE_SYMBOLS, MAX_FILE_OUTLINE_PAYLOAD_CHARS, LARGE_FILE_THRESHOLD, FILE_READ_CHUNK_SIZE, TEXT_SEARCH_TIMEOUT_MS, MAX_CONCURRENT_FILE_READS, MAX_REGEX_COMPLEXITY_SCORE, MAX_CONTENT_CACHE_BYTES, MEMORY_PRESSURE_THRESHOLD_BYTES, MEMORY_CHECK_INTERVAL_MS;
368805
368830
  var init_constants_utils = __esm({
368806
368831
  "dist/mcp/utils/aceCodeSearch/constants.utils.js"() {
368807
368832
  "use strict";
@@ -368857,6 +368882,8 @@ var init_constants_utils = __esm({
368857
368882
  MAX_INDEXED_FILES = 2e3;
368858
368883
  MAX_SYMBOLS_PER_FILE = 100;
368859
368884
  MAX_FZF_SYMBOL_NAMES = 3e4;
368885
+ MAX_FILE_OUTLINE_SYMBOLS = 200;
368886
+ MAX_FILE_OUTLINE_PAYLOAD_CHARS = 12e4;
368860
368887
  LARGE_FILE_THRESHOLD = 1024 * 1024;
368861
368888
  FILE_READ_CHUNK_SIZE = 512 * 1024;
368862
368889
  TEXT_SEARCH_TIMEOUT_MS = 3e4;
@@ -370100,6 +370127,23 @@ var init_aceCodeSearch = __esm({
370100
370127
  return 0;
370101
370128
  });
370102
370129
  }
370130
+ estimateFileOutlinePayloadChars(symbols2) {
370131
+ return JSON.stringify(symbols2).length;
370132
+ }
370133
+ constrainFileOutlinePayload(symbols2, includeContext) {
370134
+ if (this.estimateFileOutlinePayloadChars(symbols2) <= MAX_FILE_OUTLINE_PAYLOAD_CHARS) {
370135
+ return symbols2;
370136
+ }
370137
+ let constrained = includeContext ? symbols2.map((symbol2) => ({ ...symbol2, context: void 0 })) : symbols2;
370138
+ if (this.estimateFileOutlinePayloadChars(constrained) <= MAX_FILE_OUTLINE_PAYLOAD_CHARS) {
370139
+ return constrained;
370140
+ }
370141
+ constrained = constrained.map((symbol2) => ({
370142
+ ...symbol2,
370143
+ signature: void 0
370144
+ }));
370145
+ return constrained;
370146
+ }
370103
370147
  /**
370104
370148
  * Get code outline for a file (all symbols in the file)
370105
370149
  * Supports both local files and remote SSH files (ssh://user@host:port/path)
@@ -370118,7 +370162,13 @@ var init_aceCodeSearch = __esm({
370118
370162
  effectivePath = path27.resolve(this.basePath, filePath);
370119
370163
  content = await fs26.readFile(effectivePath, "utf-8");
370120
370164
  }
370121
- let symbols2 = await parseFileSymbols(effectivePath, content, this.basePath);
370165
+ const maxResults = (options3 == null ? void 0 : options3.maxResults) && options3.maxResults > 0 ? Math.min(options3.maxResults, MAX_FILE_OUTLINE_SYMBOLS) : MAX_FILE_OUTLINE_SYMBOLS;
370166
+ const includeContext = (options3 == null ? void 0 : options3.includeContext) !== false;
370167
+ let symbols2 = await parseFileSymbols(effectivePath, content, this.basePath, {
370168
+ includeContext,
370169
+ includeSignature: includeContext,
370170
+ maxSymbols: maxResults
370171
+ });
370122
370172
  if ((options3 == null ? void 0 : options3.symbolTypes) && options3.symbolTypes.length > 0) {
370123
370173
  symbols2 = symbols2.filter((s) => options3.symbolTypes.includes(s.type));
370124
370174
  }
@@ -370137,13 +370187,11 @@ var init_aceCodeSearch = __esm({
370137
370187
  return 1;
370138
370188
  return 0;
370139
370189
  });
370140
- if ((options3 == null ? void 0 : options3.maxResults) && options3.maxResults > 0) {
370141
- symbols2 = symbols2.slice(0, options3.maxResults);
370142
- }
370143
- if ((options3 == null ? void 0 : options3.includeContext) === false) {
370190
+ symbols2 = symbols2.slice(0, maxResults);
370191
+ if (!includeContext) {
370144
370192
  symbols2 = symbols2.map((s) => ({ ...s, context: void 0 }));
370145
370193
  }
370146
- return symbols2;
370194
+ return this.constrainFileOutlinePayload(symbols2, includeContext);
370147
370195
  } catch (error40) {
370148
370196
  throw new Error(`Failed to get outline for ${filePath}: ${error40 instanceof Error ? error40.message : "Unknown error"}`);
370149
370197
  }
@@ -370324,7 +370372,7 @@ EXAMPLES:
370324
370372
  // shared
370325
370373
  maxResults: {
370326
370374
  type: "number",
370327
- description: "Optional max results. Defaults: find_references=100, semantic_search=50, text_search=100, file_outline=unlimited."
370375
+ description: "Optional max results. Defaults: find_references=100, semantic_search=50, text_search=100, file_outline=200 (hard cap)."
370328
370376
  }
370329
370377
  },
370330
370378
  required: ["action"]
@@ -457228,7 +457276,7 @@ async function readSkillFile(skillPath) {
457228
457276
  function normalizeSkillId(skillId) {
457229
457277
  return skillId.replace(/\\/g, "/").replace(/^\.\/+/, "");
457230
457278
  }
457231
- async function loadSkillsFromDirectory(skills, baseSkillsDir, location) {
457279
+ async function loadSkillsFromDirectory(skills, baseSkillsDir, location, source2 = "snow") {
457232
457280
  if (!existsSync27(baseSkillsDir)) {
457233
457281
  return;
457234
457282
  }
@@ -457273,6 +457321,7 @@ async function loadSkillsFromDirectory(skills, baseSkillsDir, location) {
457273
457321
  name: skillData.metadata.name || fallbackName,
457274
457322
  description: skillData.metadata.description || "",
457275
457323
  location,
457324
+ source: source2,
457276
457325
  path: skillDir,
457277
457326
  content: skillData.content,
457278
457327
  allowedTools: skillData.metadata.allowedTools
@@ -457285,11 +457334,18 @@ async function loadSkillsFromDirectory(skills, baseSkillsDir, location) {
457285
457334
  }
457286
457335
  async function loadAvailableSkills(projectRoot) {
457287
457336
  const skills = /* @__PURE__ */ new Map();
457288
- const globalSkillsDir = join28(homedir15(), ".snow", "skills");
457289
- const projectSkillsDir = projectRoot ? join28(projectRoot, ".snow", "skills") : null;
457290
- await loadSkillsFromDirectory(skills, globalSkillsDir, "global");
457291
- if (projectSkillsDir) {
457292
- await loadSkillsFromDirectory(skills, projectSkillsDir, "project");
457337
+ const home = homedir15();
457338
+ const globalAgentsSkillsDir = join28(home, ".agents", "skills");
457339
+ const globalSnowSkillsDir = join28(home, ".snow", "skills");
457340
+ const projectAgentsSkillsDir = projectRoot ? join28(projectRoot, ".agents", "skills") : null;
457341
+ const projectSnowSkillsDir = projectRoot ? join28(projectRoot, ".snow", "skills") : null;
457342
+ await loadSkillsFromDirectory(skills, globalAgentsSkillsDir, "global", "agents");
457343
+ await loadSkillsFromDirectory(skills, globalSnowSkillsDir, "global", "snow");
457344
+ if (projectAgentsSkillsDir) {
457345
+ await loadSkillsFromDirectory(skills, projectAgentsSkillsDir, "project", "agents");
457346
+ }
457347
+ if (projectSnowSkillsDir) {
457348
+ await loadSkillsFromDirectory(skills, projectSnowSkillsDir, "project", "snow");
457293
457349
  }
457294
457350
  return skills;
457295
457351
  }
@@ -462152,6 +462208,7 @@ var init_HybridCodeSearchService = __esm({
462152
462208
  "use strict";
462153
462209
  init_aceCodeSearch();
462154
462210
  init_LSPManager();
462211
+ init_constants_utils();
462155
462212
  HybridCodeSearchService = class {
462156
462213
  constructor(basePath = process.cwd()) {
462157
462214
  Object.defineProperty(this, "lspManager", {
@@ -462266,7 +462323,12 @@ var init_HybridCodeSearchService = __esm({
462266
462323
  });
462267
462324
  const symbols2 = await Promise.race([lspPromise, timeoutPromise]);
462268
462325
  if (symbols2 && symbols2.length > 0) {
462269
- return this.convertLSPSymbolsToCodeSymbols(symbols2, filePath);
462326
+ let codeSymbols = this.convertLSPSymbolsToCodeSymbols(symbols2, filePath);
462327
+ if ((options3 == null ? void 0 : options3.symbolTypes) && options3.symbolTypes.length > 0) {
462328
+ codeSymbols = codeSymbols.filter((symbol2) => options3.symbolTypes.includes(symbol2.type));
462329
+ }
462330
+ const maxResults = (options3 == null ? void 0 : options3.maxResults) && options3.maxResults > 0 ? Math.min(options3.maxResults, MAX_FILE_OUTLINE_SYMBOLS) : MAX_FILE_OUTLINE_SYMBOLS;
462331
+ return codeSymbols.slice(0, maxResults);
462270
462332
  }
462271
462333
  } catch (error40) {
462272
462334
  }
@@ -473293,16 +473355,23 @@ ${cleanedBody}
473293
473355
  `;
473294
473356
  }
473295
473357
  function checkSkillExists(skillName, location, projectRoot) {
473296
- const skillDir = getSkillDirectory(skillName, location, projectRoot);
473297
- return existsSync33(skillDir);
473358
+ const snowDir = getSkillDirectory(skillName, location, projectRoot);
473359
+ if (existsSync33(snowDir)) {
473360
+ return true;
473361
+ }
473362
+ const agentsDir = getSkillDirectoryForRoot(skillName, location, ".agents", projectRoot);
473363
+ return existsSync33(agentsDir);
473298
473364
  }
473299
473365
  function getSkillDirectory(skillName, location, projectRoot) {
473366
+ return getSkillDirectoryForRoot(skillName, location, ".snow", projectRoot);
473367
+ }
473368
+ function getSkillDirectoryForRoot(skillName, location, rootDirName, projectRoot) {
473300
473369
  const segments = skillName.split("/").filter(Boolean);
473301
473370
  if (location === "global") {
473302
- return join36(homedir22(), ".snow", "skills", ...segments);
473371
+ return join36(homedir22(), rootDirName, "skills", ...segments);
473303
473372
  }
473304
473373
  const root2 = projectRoot || process.cwd();
473305
- return join36(root2, ".snow", "skills", ...segments);
473374
+ return join36(root2, rootDirName, "skills", ...segments);
473306
473375
  }
473307
473376
  function generateSkillTemplate(metadata) {
473308
473377
  return `---
@@ -573372,6 +573441,7 @@ function sortStatusLineItems(items) {
573372
573441
  function useStatusLineHookItems(context2) {
573373
573442
  const contextRef = import_react120.default.useRef(context2);
573374
573443
  const [hookDefinitions, setHookDefinitions] = import_react120.default.useState(BUILTIN_STATUSLINE_HOOKS);
573444
+ const [externalHookIds, setExternalHookIds] = import_react120.default.useState(() => /* @__PURE__ */ new Set());
573375
573445
  const [itemsByHookId, setItemsByHookId] = import_react120.default.useState({});
573376
573446
  import_react120.default.useEffect(() => {
573377
573447
  contextRef.current = context2;
@@ -573382,6 +573452,7 @@ function useStatusLineHookItems(context2) {
573382
573452
  const externalHooks = await loadExternalStatusLineHooks();
573383
573453
  if (!disposed) {
573384
573454
  setHookDefinitions(mergeStatusLineHooks(externalHooks));
573455
+ setExternalHookIds(new Set(externalHooks.map((hook) => hook.id)));
573385
573456
  }
573386
573457
  };
573387
573458
  void loadHooks();
@@ -573446,7 +573517,8 @@ function useStatusLineHookItems(context2) {
573446
573517
  }
573447
573518
  };
573448
573519
  }, [hookDefinitions]);
573449
- return import_react120.default.useMemo(() => sortStatusLineItems(Object.values(itemsByHookId).flat()), [itemsByHookId]);
573520
+ const items = import_react120.default.useMemo(() => sortStatusLineItems(Object.values(itemsByHookId).flat()), [itemsByHookId]);
573521
+ return import_react120.default.useMemo(() => ({ items, externalHookIds }), [items, externalHookIds]);
573450
573522
  }
573451
573523
  var import_react120, DEFAULT_STATUSLINE_HOOK_REFRESH_INTERVAL_MS, SUPPORTED_STATUSLINE_HOOK_EXTENSIONS, BUILTIN_STATUSLINE_HOOKS;
573452
573524
  var init_useStatusLineHooks = __esm({
@@ -573464,6 +573536,33 @@ var init_useStatusLineHooks = __esm({
573464
573536
  }
573465
573537
  });
573466
573538
 
573539
+ // dist/ui/components/common/statusline/builtinIds.js
573540
+ var BUILTIN_STATUSLINE_IDS, BUILTIN_STATUSLINE_ID_VALUES;
573541
+ var init_builtinIds = __esm({
573542
+ "dist/ui/components/common/statusline/builtinIds.js"() {
573543
+ "use strict";
573544
+ BUILTIN_STATUSLINE_IDS = {
573545
+ profile: "builtin.profile",
573546
+ modeYolo: "builtin.mode-yolo",
573547
+ modePlan: "builtin.mode-plan",
573548
+ modeHunt: "builtin.mode-hunt",
573549
+ modeTeam: "builtin.mode-team",
573550
+ toolSearch: "builtin.tool-search",
573551
+ hybridCompress: "builtin.hybrid-compress",
573552
+ ideConnection: "builtin.ide-connection",
573553
+ backendConnection: "builtin.backend-connection",
573554
+ codebaseIndexing: "builtin.codebase-indexing",
573555
+ watcher: "builtin.watcher",
573556
+ fileUpdate: "builtin.file-update",
573557
+ copyStatus: "builtin.copy-status",
573558
+ compressBlock: "builtin.compress-block",
573559
+ memory: "builtin.memory",
573560
+ gitBranch: "builtin.git-branch"
573561
+ };
573562
+ BUILTIN_STATUSLINE_ID_VALUES = new Set(Object.values(BUILTIN_STATUSLINE_IDS));
573563
+ }
573564
+ });
573565
+
573467
573566
  // dist/ui/components/common/StatusLine.js
573468
573567
  import { execFile as execFile3 } from "node:child_process";
573469
573568
  import { promisify as promisify4 } from "node:util";
@@ -573626,7 +573725,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573626
573725
  return loadProfile(profileName);
573627
573726
  }, [currentProfileName]);
573628
573727
  const statusLineHookContext = import_react121.default.useMemo(() => {
573629
- var _a20, _b14, _c6, _d4, _e2, _f, _g, _h, _i;
573728
+ var _a20, _b14, _c6, _d4, _e2, _f, _g, _h, _i, _j, _k, _l;
573630
573729
  const cfg = profileConfig == null ? void 0 : profileConfig.snowcfg;
573631
573730
  return {
573632
573731
  cwd: process.cwd(),
@@ -573679,14 +573778,16 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573679
573778
  maxTokens: cfg == null ? void 0 : cfg.maxTokens,
573680
573779
  anthropicBeta: cfg == null ? void 0 : cfg.anthropicBeta,
573681
573780
  anthropicCacheTTL: cfg == null ? void 0 : cfg.anthropicCacheTTL,
573682
- thinkingEnabled: ((_b14 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _b14.type) === "enabled",
573683
- thinkingType: (_c6 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _c6.type,
573684
- thinkingBudgetTokens: (_d4 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _d4.budget_tokens,
573685
- thinkingEffort: (_e2 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _e2.effort,
573686
- geminiThinkingEnabled: (_f = cfg == null ? void 0 : cfg.geminiThinking) == null ? void 0 : _f.enabled,
573687
- geminiThinkingLevel: (_g = cfg == null ? void 0 : cfg.geminiThinking) == null ? void 0 : _g.thinkingLevel,
573688
- responsesReasoningEnabled: (_h = cfg == null ? void 0 : cfg.responsesReasoning) == null ? void 0 : _h.enabled,
573689
- responsesReasoningEffort: (_i = cfg == null ? void 0 : cfg.responsesReasoning) == null ? void 0 : _i.effort,
573781
+ thinkingEnabled: ((_b14 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _b14.type) === "enabled" || ((_c6 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _c6.type) === "adaptive",
573782
+ thinkingType: (_d4 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _d4.type,
573783
+ thinkingBudgetTokens: (_e2 = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _e2.budget_tokens,
573784
+ thinkingEffort: (_f = cfg == null ? void 0 : cfg.thinking) == null ? void 0 : _f.effort,
573785
+ geminiThinkingEnabled: (_g = cfg == null ? void 0 : cfg.geminiThinking) == null ? void 0 : _g.enabled,
573786
+ geminiThinkingLevel: (_h = cfg == null ? void 0 : cfg.geminiThinking) == null ? void 0 : _h.thinkingLevel,
573787
+ responsesReasoningEnabled: (_i = cfg == null ? void 0 : cfg.responsesReasoning) == null ? void 0 : _i.enabled,
573788
+ responsesReasoningEffort: (_j = cfg == null ? void 0 : cfg.responsesReasoning) == null ? void 0 : _j.effort,
573789
+ chatThinkingEnabled: (_k = cfg == null ? void 0 : cfg.chatThinking) == null ? void 0 : _k.enabled,
573790
+ chatReasoningEffort: (_l = cfg == null ? void 0 : cfg.chatThinking) == null ? void 0 : _l.reasoning_effort,
573690
573791
  responsesFastMode: cfg == null ? void 0 : cfg.responsesFastMode,
573691
573792
  responsesVerbosity: cfg == null ? void 0 : cfg.responsesVerbosity,
573692
573793
  anthropicSpeed: cfg == null ? void 0 : cfg.anthropicSpeed,
@@ -573731,7 +573832,8 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573731
573832
  watcherEnabled,
573732
573833
  yoloMode
573733
573834
  ]);
573734
- const statusLineHookItems = useStatusLineHookItems(statusLineHookContext);
573835
+ const { items: statusLineHookItems, externalHookIds } = useStatusLineHookItems(statusLineHookContext);
573836
+ const isBuiltinOverridden = import_react121.default.useCallback((id) => externalHookIds.has(id), [externalHookIds]);
573735
573837
  const simpleMemoryStatusText = `\u26C1 ${formattedMemoryUsage}`;
573736
573838
  const detailedMemoryStatusText = `\u26C1 ${t.chatScreen.memoryUsageLabel} ${formattedMemoryUsage}`;
573737
573839
  const renderContextUsage = () => {
@@ -573811,7 +573913,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573811
573913
  }
573812
573914
  if (simpleMode) {
573813
573915
  const statusItems = [];
573814
- if (currentProfileName) {
573916
+ if (currentProfileName && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.profile)) {
573815
573917
  statusItems.push({
573816
573918
  text: `\xA7 ${currentProfileName}`,
573817
573919
  color: theme14.colors.menuInfo
@@ -573823,31 +573925,31 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573823
573925
  color: item.color || theme14.colors.menuSecondary
573824
573926
  });
573825
573927
  }
573826
- if (yoloMode) {
573928
+ if (yoloMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modeYolo)) {
573827
573929
  statusItems.push({ text: "\u29F4 YOLO", color: theme14.colors.warning });
573828
573930
  }
573829
- if (planMode) {
573931
+ if (planMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modePlan)) {
573830
573932
  statusItems.push({ text: "\u2690 Plan", color: "#60A5FA" });
573831
573933
  }
573832
- if (vulnerabilityHuntingMode) {
573934
+ if (vulnerabilityHuntingMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modeHunt)) {
573833
573935
  statusItems.push({ text: "\u2368 Vuln Hunt", color: "#de409aff" });
573834
573936
  }
573835
- if (!toolSearchDisabled) {
573937
+ if (!toolSearchDisabled && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.toolSearch)) {
573836
573938
  statusItems.push({
573837
573939
  text: "\u267E\uFE0E ToolSearch ON",
573838
573940
  color: theme14.colors.menuInfo
573839
573941
  });
573840
573942
  }
573841
- if (teamMode) {
573943
+ if (teamMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modeTeam)) {
573842
573944
  statusItems.push({ text: "\u2691 Team", color: "#10B981" });
573843
573945
  }
573844
- if (hybridCompressEnabled) {
573946
+ if (hybridCompressEnabled && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.hybridCompress)) {
573845
573947
  statusItems.push({
573846
573948
  text: "\u21CC Hybrid Compress",
573847
573949
  color: theme14.colors.menuInfo
573848
573950
  });
573849
573951
  }
573850
- if (vscodeConnectionStatus && vscodeConnectionStatus !== "disconnected") {
573952
+ if (vscodeConnectionStatus && vscodeConnectionStatus !== "disconnected" && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.ideConnection)) {
573851
573953
  if (vscodeConnectionStatus === "connecting") {
573852
573954
  statusItems.push({ text: "\u25D0 IDE", color: "yellow" });
573853
573955
  } else if (vscodeConnectionStatus === "connected") {
@@ -573856,7 +573958,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573856
573958
  statusItems.push({ text: "\u25CB IDE", color: "gray" });
573857
573959
  }
573858
573960
  }
573859
- if (connectionStatus && connectionStatus !== "disconnected") {
573961
+ if (connectionStatus && connectionStatus !== "disconnected" && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.backendConnection)) {
573860
573962
  if (connectionStatus === "connecting") {
573861
573963
  statusItems.push({ text: "\u25D0 Backend", color: "yellow" });
573862
573964
  } else if (connectionStatus === "reconnecting") {
@@ -573866,7 +573968,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573866
573968
  statusItems.push({ text: instanceLabel, color: "green" });
573867
573969
  }
573868
573970
  }
573869
- if ((codebaseIndexing || (codebaseProgress == null ? void 0 : codebaseProgress.error)) && codebaseProgress) {
573971
+ if ((codebaseIndexing || (codebaseProgress == null ? void 0 : codebaseProgress.error)) && codebaseProgress && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.codebaseIndexing)) {
573870
573972
  if (codebaseProgress.error) {
573871
573973
  statusItems.push({
573872
573974
  text: codebaseProgress.error,
@@ -573879,34 +573981,36 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573879
573981
  });
573880
573982
  }
573881
573983
  }
573882
- if (!codebaseIndexing && watcherEnabled) {
573984
+ if (!codebaseIndexing && watcherEnabled && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.watcher)) {
573883
573985
  statusItems.push({
573884
573986
  text: `\u2609 ${t.chatScreen.statusWatcherActiveShort || "\u76D1\u89C6"}`,
573885
573987
  color: "green"
573886
573988
  });
573887
573989
  }
573888
- if (fileUpdateNotification) {
573990
+ if (fileUpdateNotification && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.fileUpdate)) {
573889
573991
  statusItems.push({
573890
573992
  text: `\u26C1 ${t.chatScreen.statusFileUpdatedShort || "\u5DF2\u66F4\u65B0"}`,
573891
573993
  color: "yellow"
573892
573994
  });
573893
573995
  }
573894
- if (copyStatusMessage) {
573996
+ if (copyStatusMessage && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.copyStatus)) {
573895
573997
  statusItems.push({
573896
573998
  text: copyStatusMessage.text,
573897
573999
  color: copyStatusMessage.isError ? theme14.colors.error : theme14.colors.success
573898
574000
  });
573899
574001
  }
573900
- if (compressBlockToast) {
574002
+ if (compressBlockToast && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.compressBlock)) {
573901
574003
  statusItems.push({
573902
574004
  text: compressBlockToast,
573903
574005
  color: theme14.colors.warning
573904
574006
  });
573905
574007
  }
573906
- statusItems.push({
573907
- text: simpleMemoryStatusText,
573908
- color: theme14.colors.menuSecondary
573909
- });
574008
+ if (!isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.memory)) {
574009
+ statusItems.push({
574010
+ text: simpleMemoryStatusText,
574011
+ color: theme14.colors.menuSecondary
574012
+ });
574013
+ }
573910
574014
  return import_react121.default.createElement(
573911
574015
  Box_default,
573912
574016
  { flexDirection: "column", paddingX: 1, marginTop: 1 },
@@ -573927,7 +574031,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573927
574031
  Box_default,
573928
574032
  { flexDirection: "column", paddingX: 1 },
573929
574033
  contextUsage && import_react121.default.createElement(Box_default, null, renderContextUsage()),
573930
- currentProfileName && import_react121.default.createElement(
574034
+ currentProfileName && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.profile) && import_react121.default.createElement(
573931
574035
  Box_default,
573932
574036
  null,
573933
574037
  import_react121.default.createElement(
@@ -573949,42 +574053,42 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
573949
574053
  { key: item.id },
573950
574054
  import_react121.default.createElement(Text, { color: item.color || theme14.colors.menuSecondary, dimColor: true }, item.detailedText || item.text)
573951
574055
  )),
573952
- import_react121.default.createElement(
574056
+ !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.memory) && import_react121.default.createElement(
573953
574057
  Box_default,
573954
574058
  null,
573955
574059
  import_react121.default.createElement(Text, { color: theme14.colors.menuSecondary, dimColor: true }, detailedMemoryStatusText)
573956
574060
  ),
573957
- yoloMode && import_react121.default.createElement(
574061
+ yoloMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modeYolo) && import_react121.default.createElement(
573958
574062
  Box_default,
573959
574063
  null,
573960
574064
  import_react121.default.createElement(Text, { color: theme14.colors.warning, dimColor: true }, t.chatScreen.yoloModeActive)
573961
574065
  ),
573962
- planMode && import_react121.default.createElement(
574066
+ planMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modePlan) && import_react121.default.createElement(
573963
574067
  Box_default,
573964
574068
  null,
573965
574069
  import_react121.default.createElement(Text, { color: "#60A5FA", dimColor: true }, t.chatScreen.planModeActive)
573966
574070
  ),
573967
- vulnerabilityHuntingMode && import_react121.default.createElement(
574071
+ vulnerabilityHuntingMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modeHunt) && import_react121.default.createElement(
573968
574072
  Box_default,
573969
574073
  null,
573970
574074
  import_react121.default.createElement(Text, { color: "#EF4444", dimColor: true }, t.chatScreen.vulnerabilityHuntingModeActive)
573971
574075
  ),
573972
- !toolSearchDisabled && import_react121.default.createElement(
574076
+ !toolSearchDisabled && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.toolSearch) && import_react121.default.createElement(
573973
574077
  Box_default,
573974
574078
  null,
573975
574079
  import_react121.default.createElement(Text, { color: theme14.colors.menuInfo, dimColor: true }, t.chatScreen.toolSearchEnabled)
573976
574080
  ),
573977
- teamMode && import_react121.default.createElement(
574081
+ teamMode && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.modeTeam) && import_react121.default.createElement(
573978
574082
  Box_default,
573979
574083
  null,
573980
574084
  import_react121.default.createElement(Text, { color: "#10B981", dimColor: true }, t.chatScreen.teamModeActive)
573981
574085
  ),
573982
- hybridCompressEnabled && import_react121.default.createElement(
574086
+ hybridCompressEnabled && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.hybridCompress) && import_react121.default.createElement(
573983
574087
  Box_default,
573984
574088
  null,
573985
574089
  import_react121.default.createElement(Text, { color: theme14.colors.menuInfo, dimColor: true }, t.chatScreen.hybridCompressEnabled)
573986
574090
  ),
573987
- vscodeConnectionStatus && (vscodeConnectionStatus === "connecting" || vscodeConnectionStatus === "connected" || vscodeConnectionStatus === "error") && import_react121.default.createElement(
574091
+ vscodeConnectionStatus && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.ideConnection) && (vscodeConnectionStatus === "connecting" || vscodeConnectionStatus === "connected" || vscodeConnectionStatus === "error") && import_react121.default.createElement(
573988
574092
  Box_default,
573989
574093
  null,
573990
574094
  import_react121.default.createElement(Text, { color: vscodeConnectionStatus === "connecting" ? "yellow" : vscodeConnectionStatus === "error" ? "gray" : "green", dimColor: true }, vscodeConnectionStatus === "connecting" ? import_react121.default.createElement(
@@ -574007,7 +574111,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
574007
574111
  (editorContext == null ? void 0 : editorContext.selectedText) && t.chatScreen.ideSelectedText.replace("{count}", editorContext.selectedText.length.toString())
574008
574112
  ))
574009
574113
  ),
574010
- connectionStatus && (connectionStatus === "connecting" || connectionStatus === "connected" || connectionStatus === "reconnecting") && import_react121.default.createElement(
574114
+ connectionStatus && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.backendConnection) && (connectionStatus === "connecting" || connectionStatus === "connected" || connectionStatus === "reconnecting") && import_react121.default.createElement(
574011
574115
  Box_default,
574012
574116
  null,
574013
574117
  import_react121.default.createElement(Text, { color: connectionStatus === "connecting" || connectionStatus === "reconnecting" ? "yellow" : "green", dimColor: true }, connectionStatus === "connecting" ? import_react121.default.createElement(
@@ -574027,7 +574131,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
574027
574131
  connectionInstanceName && ` (${connectionInstanceName})`
574028
574132
  ))
574029
574133
  ),
574030
- (codebaseIndexing || (codebaseProgress == null ? void 0 : codebaseProgress.error)) && codebaseProgress && import_react121.default.createElement(Box_default, null, codebaseProgress.error ? import_react121.default.createElement(Text, { color: "red", dimColor: true }, codebaseProgress.error) : import_react121.default.createElement(
574134
+ (codebaseIndexing || (codebaseProgress == null ? void 0 : codebaseProgress.error)) && codebaseProgress && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.codebaseIndexing) && import_react121.default.createElement(Box_default, null, codebaseProgress.error ? import_react121.default.createElement(Text, { color: "red", dimColor: true }, codebaseProgress.error) : import_react121.default.createElement(
574031
574135
  Text,
574032
574136
  { color: "cyan", dimColor: true },
574033
574137
  import_react121.default.createElement(build_default, { type: "dots" }),
@@ -574035,7 +574139,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
574035
574139
  t.chatScreen.codebaseIndexing.replace("{processed}", codebaseProgress.processedFiles.toString()).replace("{total}", codebaseProgress.totalFiles.toString()),
574036
574140
  codebaseProgress.totalChunks > 0 && ` (${t.chatScreen.codebaseProgress.replace("{chunks}", codebaseProgress.totalChunks.toString())})`
574037
574141
  )),
574038
- !codebaseIndexing && watcherEnabled && import_react121.default.createElement(
574142
+ !codebaseIndexing && watcherEnabled && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.watcher) && import_react121.default.createElement(
574039
574143
  Box_default,
574040
574144
  null,
574041
574145
  import_react121.default.createElement(
@@ -574045,7 +574149,7 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
574045
574149
  t.chatScreen.statusWatcherActive
574046
574150
  )
574047
574151
  ),
574048
- fileUpdateNotification && import_react121.default.createElement(
574152
+ fileUpdateNotification && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.fileUpdate) && import_react121.default.createElement(
574049
574153
  Box_default,
574050
574154
  null,
574051
574155
  import_react121.default.createElement(
@@ -574056,12 +574160,12 @@ function StatusLine({ yoloMode = false, planMode = false, vulnerabilityHuntingMo
574056
574160
  t.chatScreen.statusFileUpdated.replace("{file}", fileUpdateNotification.file)
574057
574161
  )
574058
574162
  ),
574059
- copyStatusMessage && import_react121.default.createElement(
574163
+ copyStatusMessage && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.copyStatus) && import_react121.default.createElement(
574060
574164
  Box_default,
574061
574165
  null,
574062
574166
  import_react121.default.createElement(Text, { color: copyStatusMessage.isError ? theme14.colors.error : theme14.colors.success, dimColor: true }, copyStatusMessage.text)
574063
574167
  ),
574064
- compressBlockToast && import_react121.default.createElement(
574168
+ compressBlockToast && !isBuiltinOverridden(BUILTIN_STATUSLINE_IDS.compressBlock) && import_react121.default.createElement(
574065
574169
  Box_default,
574066
574170
  null,
574067
574171
  import_react121.default.createElement(Text, { color: theme14.colors.warning, dimColor: true }, compressBlockToast)
@@ -574081,6 +574185,7 @@ var init_StatusLine = __esm({
574081
574185
  init_messageFormatter();
574082
574186
  init_configManager();
574083
574187
  init_useStatusLineHooks();
574188
+ init_builtinIds();
574084
574189
  MEMORY_REFRESH_INTERVAL_MS = 5e3;
574085
574190
  PROCESS_MEMORY_COMMAND_TIMEOUT_MS = 1500;
574086
574191
  execFileAsync3 = promisify4(execFile3);
@@ -606663,7 +606768,7 @@ var require_package3 = __commonJS({
606663
606768
  "package.json"(exports2, module2) {
606664
606769
  module2.exports = {
606665
606770
  name: "snow-ai",
606666
- version: "0.7.26",
606771
+ version: "0.7.27",
606667
606772
  description: "Agentic coding in your terminal",
606668
606773
  license: "MIT",
606669
606774
  bin: {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snow-ai",
3
- "version": "0.7.26",
3
+ "version": "0.7.27",
4
4
  "description": "Agentic coding in your terminal",
5
5
  "license": "MIT",
6
6
  "bin": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snow-ai",
3
- "version": "0.7.26",
3
+ "version": "0.7.27",
4
4
  "description": "Agentic coding in your terminal",
5
5
  "license": "MIT",
6
6
  "bin": {