snow-ai 0.6.23 → 0.6.24

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
@@ -1425,9 +1425,9 @@ var require_react_development = __commonJS({
1425
1425
  var dispatcher = resolveDispatcher();
1426
1426
  return dispatcher.useState(initialState);
1427
1427
  }
1428
- function useReducer8(reducer3, initialArg, init) {
1428
+ function useReducer8(reducer2, initialArg, init) {
1429
1429
  var dispatcher = resolveDispatcher();
1430
- return dispatcher.useReducer(reducer3, initialArg, init);
1430
+ return dispatcher.useReducer(reducer2, initialArg, init);
1431
1431
  }
1432
1432
  function useRef16(initialValue) {
1433
1433
  var dispatcher = resolveDispatcher();
@@ -14919,7 +14919,7 @@ var require_react_reconciler_development = __commonJS({
14919
14919
  function basicStateReducer(state, action) {
14920
14920
  return typeof action === "function" ? action(state) : action;
14921
14921
  }
14922
- function mountReducer(reducer3, initialArg, init) {
14922
+ function mountReducer(reducer2, initialArg, init) {
14923
14923
  var hook = mountWorkInProgressHook();
14924
14924
  var initialState;
14925
14925
  if (init !== void 0) {
@@ -14933,20 +14933,20 @@ var require_react_reconciler_development = __commonJS({
14933
14933
  interleaved: null,
14934
14934
  lanes: NoLanes,
14935
14935
  dispatch: null,
14936
- lastRenderedReducer: reducer3,
14936
+ lastRenderedReducer: reducer2,
14937
14937
  lastRenderedState: initialState
14938
14938
  };
14939
14939
  hook.queue = queue;
14940
14940
  var dispatch = queue.dispatch = dispatchReducerAction.bind(null, currentlyRenderingFiber$1, queue);
14941
14941
  return [hook.memoizedState, dispatch];
14942
14942
  }
14943
- function updateReducer(reducer3, initialArg, init) {
14943
+ function updateReducer(reducer2, initialArg, init) {
14944
14944
  var hook = updateWorkInProgressHook();
14945
14945
  var queue = hook.queue;
14946
14946
  if (queue === null) {
14947
14947
  throw new Error("Should have a queue. This is likely a bug in React. Please file an issue.");
14948
14948
  }
14949
- queue.lastRenderedReducer = reducer3;
14949
+ queue.lastRenderedReducer = reducer2;
14950
14950
  var current2 = currentHook;
14951
14951
  var baseQueue = current2.baseQueue;
14952
14952
  var pendingQueue = queue.pending;
@@ -15008,7 +15008,7 @@ var require_react_reconciler_development = __commonJS({
15008
15008
  newState = update.eagerState;
15009
15009
  } else {
15010
15010
  var action = update.action;
15011
- newState = reducer3(newState, action);
15011
+ newState = reducer2(newState, action);
15012
15012
  }
15013
15013
  }
15014
15014
  update = update.next;
@@ -15041,13 +15041,13 @@ var require_react_reconciler_development = __commonJS({
15041
15041
  var dispatch = queue.dispatch;
15042
15042
  return [hook.memoizedState, dispatch];
15043
15043
  }
15044
- function rerenderReducer(reducer3, initialArg, init) {
15044
+ function rerenderReducer(reducer2, initialArg, init) {
15045
15045
  var hook = updateWorkInProgressHook();
15046
15046
  var queue = hook.queue;
15047
15047
  if (queue === null) {
15048
15048
  throw new Error("Should have a queue. This is likely a bug in React. Please file an issue.");
15049
15049
  }
15050
- queue.lastRenderedReducer = reducer3;
15050
+ queue.lastRenderedReducer = reducer2;
15051
15051
  var dispatch = queue.dispatch;
15052
15052
  var lastRenderPhaseUpdate = queue.pending;
15053
15053
  var newState = hook.memoizedState;
@@ -15057,7 +15057,7 @@ var require_react_reconciler_development = __commonJS({
15057
15057
  var update = firstRenderPhaseUpdate;
15058
15058
  do {
15059
15059
  var action = update.action;
15060
- newState = reducer3(newState, action);
15060
+ newState = reducer2(newState, action);
15061
15061
  update = update.next;
15062
15062
  } while (update !== firstRenderPhaseUpdate);
15063
15063
  if (!objectIs(newState, hook.memoizedState)) {
@@ -15737,13 +15737,13 @@ var require_react_reconciler_development = __commonJS({
15737
15737
  ReactCurrentDispatcher$1.current = prevDispatcher;
15738
15738
  }
15739
15739
  },
15740
- useReducer: function(reducer3, initialArg, init) {
15740
+ useReducer: function(reducer2, initialArg, init) {
15741
15741
  currentHookNameInDev = "useReducer";
15742
15742
  mountHookTypesDev();
15743
15743
  var prevDispatcher = ReactCurrentDispatcher$1.current;
15744
15744
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
15745
15745
  try {
15746
- return mountReducer(reducer3, initialArg, init);
15746
+ return mountReducer(reducer2, initialArg, init);
15747
15747
  } finally {
15748
15748
  ReactCurrentDispatcher$1.current = prevDispatcher;
15749
15749
  }
@@ -15841,13 +15841,13 @@ var require_react_reconciler_development = __commonJS({
15841
15841
  ReactCurrentDispatcher$1.current = prevDispatcher;
15842
15842
  }
15843
15843
  },
15844
- useReducer: function(reducer3, initialArg, init) {
15844
+ useReducer: function(reducer2, initialArg, init) {
15845
15845
  currentHookNameInDev = "useReducer";
15846
15846
  updateHookTypesDev();
15847
15847
  var prevDispatcher = ReactCurrentDispatcher$1.current;
15848
15848
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
15849
15849
  try {
15850
- return mountReducer(reducer3, initialArg, init);
15850
+ return mountReducer(reducer2, initialArg, init);
15851
15851
  } finally {
15852
15852
  ReactCurrentDispatcher$1.current = prevDispatcher;
15853
15853
  }
@@ -15945,13 +15945,13 @@ var require_react_reconciler_development = __commonJS({
15945
15945
  ReactCurrentDispatcher$1.current = prevDispatcher;
15946
15946
  }
15947
15947
  },
15948
- useReducer: function(reducer3, initialArg, init) {
15948
+ useReducer: function(reducer2, initialArg, init) {
15949
15949
  currentHookNameInDev = "useReducer";
15950
15950
  updateHookTypesDev();
15951
15951
  var prevDispatcher = ReactCurrentDispatcher$1.current;
15952
15952
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
15953
15953
  try {
15954
- return updateReducer(reducer3, initialArg, init);
15954
+ return updateReducer(reducer2, initialArg, init);
15955
15955
  } finally {
15956
15956
  ReactCurrentDispatcher$1.current = prevDispatcher;
15957
15957
  }
@@ -16049,13 +16049,13 @@ var require_react_reconciler_development = __commonJS({
16049
16049
  ReactCurrentDispatcher$1.current = prevDispatcher;
16050
16050
  }
16051
16051
  },
16052
- useReducer: function(reducer3, initialArg, init) {
16052
+ useReducer: function(reducer2, initialArg, init) {
16053
16053
  currentHookNameInDev = "useReducer";
16054
16054
  updateHookTypesDev();
16055
16055
  var prevDispatcher = ReactCurrentDispatcher$1.current;
16056
16056
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnRerenderInDEV;
16057
16057
  try {
16058
- return rerenderReducer(reducer3, initialArg, init);
16058
+ return rerenderReducer(reducer2, initialArg, init);
16059
16059
  } finally {
16060
16060
  ReactCurrentDispatcher$1.current = prevDispatcher;
16061
16061
  }
@@ -16161,14 +16161,14 @@ var require_react_reconciler_development = __commonJS({
16161
16161
  ReactCurrentDispatcher$1.current = prevDispatcher;
16162
16162
  }
16163
16163
  },
16164
- useReducer: function(reducer3, initialArg, init) {
16164
+ useReducer: function(reducer2, initialArg, init) {
16165
16165
  currentHookNameInDev = "useReducer";
16166
16166
  warnInvalidHookAccess();
16167
16167
  mountHookTypesDev();
16168
16168
  var prevDispatcher = ReactCurrentDispatcher$1.current;
16169
16169
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnMountInDEV;
16170
16170
  try {
16171
- return mountReducer(reducer3, initialArg, init);
16171
+ return mountReducer(reducer2, initialArg, init);
16172
16172
  } finally {
16173
16173
  ReactCurrentDispatcher$1.current = prevDispatcher;
16174
16174
  }
@@ -16282,14 +16282,14 @@ var require_react_reconciler_development = __commonJS({
16282
16282
  ReactCurrentDispatcher$1.current = prevDispatcher;
16283
16283
  }
16284
16284
  },
16285
- useReducer: function(reducer3, initialArg, init) {
16285
+ useReducer: function(reducer2, initialArg, init) {
16286
16286
  currentHookNameInDev = "useReducer";
16287
16287
  warnInvalidHookAccess();
16288
16288
  updateHookTypesDev();
16289
16289
  var prevDispatcher = ReactCurrentDispatcher$1.current;
16290
16290
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16291
16291
  try {
16292
- return updateReducer(reducer3, initialArg, init);
16292
+ return updateReducer(reducer2, initialArg, init);
16293
16293
  } finally {
16294
16294
  ReactCurrentDispatcher$1.current = prevDispatcher;
16295
16295
  }
@@ -16403,14 +16403,14 @@ var require_react_reconciler_development = __commonJS({
16403
16403
  ReactCurrentDispatcher$1.current = prevDispatcher;
16404
16404
  }
16405
16405
  },
16406
- useReducer: function(reducer3, initialArg, init) {
16406
+ useReducer: function(reducer2, initialArg, init) {
16407
16407
  currentHookNameInDev = "useReducer";
16408
16408
  warnInvalidHookAccess();
16409
16409
  updateHookTypesDev();
16410
16410
  var prevDispatcher = ReactCurrentDispatcher$1.current;
16411
16411
  ReactCurrentDispatcher$1.current = InvalidNestedHooksDispatcherOnUpdateInDEV;
16412
16412
  try {
16413
- return rerenderReducer(reducer3, initialArg, init);
16413
+ return rerenderReducer(reducer2, initialArg, init);
16414
16414
  } finally {
16415
16415
  ReactCurrentDispatcher$1.current = prevDispatcher;
16416
16416
  }
@@ -80445,182 +80445,25 @@ var init_spinner2 = __esm({
80445
80445
  });
80446
80446
 
80447
80447
  // node_modules/@inkjs/ui/build/components/text-input/use-text-input-state.js
80448
- var import_react39, reducer2, useTextInputState;
80448
+ var import_react39;
80449
80449
  var init_use_text_input_state = __esm({
80450
80450
  "node_modules/@inkjs/ui/build/components/text-input/use-text-input-state.js"() {
80451
80451
  import_react39 = __toESM(require_react(), 1);
80452
- reducer2 = (state, action) => {
80453
- switch (action.type) {
80454
- case "move-cursor-left": {
80455
- return {
80456
- ...state,
80457
- cursorOffset: Math.max(0, state.cursorOffset - 1)
80458
- };
80459
- }
80460
- case "move-cursor-right": {
80461
- return {
80462
- ...state,
80463
- cursorOffset: Math.min(state.value.length, state.cursorOffset + 1)
80464
- };
80465
- }
80466
- case "insert": {
80467
- return {
80468
- ...state,
80469
- previousValue: state.value,
80470
- value: state.value.slice(0, state.cursorOffset) + action.text + state.value.slice(state.cursorOffset),
80471
- cursorOffset: state.cursorOffset + action.text.length
80472
- };
80473
- }
80474
- case "delete": {
80475
- const newCursorOffset = Math.max(0, state.cursorOffset - 1);
80476
- return {
80477
- ...state,
80478
- previousValue: state.value,
80479
- value: state.value.slice(0, newCursorOffset) + state.value.slice(newCursorOffset + 1),
80480
- cursorOffset: newCursorOffset
80481
- };
80482
- }
80483
- }
80484
- };
80485
- useTextInputState = ({ defaultValue = "", suggestions, onChange, onSubmit }) => {
80486
- const [state, dispatch] = (0, import_react39.useReducer)(reducer2, {
80487
- previousValue: defaultValue,
80488
- value: defaultValue,
80489
- cursorOffset: defaultValue.length
80490
- });
80491
- const suggestion = (0, import_react39.useMemo)(() => {
80492
- var _a21;
80493
- if (state.value.length === 0) {
80494
- return;
80495
- }
80496
- return (_a21 = suggestions == null ? void 0 : suggestions.find((suggestion2) => suggestion2.startsWith(state.value))) == null ? void 0 : _a21.replace(state.value, "");
80497
- }, [state.value, suggestions]);
80498
- const moveCursorLeft = (0, import_react39.useCallback)(() => {
80499
- dispatch({
80500
- type: "move-cursor-left"
80501
- });
80502
- }, []);
80503
- const moveCursorRight = (0, import_react39.useCallback)(() => {
80504
- dispatch({
80505
- type: "move-cursor-right"
80506
- });
80507
- }, []);
80508
- const insert = (0, import_react39.useCallback)((text3) => {
80509
- dispatch({
80510
- type: "insert",
80511
- text: text3
80512
- });
80513
- }, []);
80514
- const deleteCharacter = (0, import_react39.useCallback)(() => {
80515
- dispatch({
80516
- type: "delete"
80517
- });
80518
- }, []);
80519
- const submit = (0, import_react39.useCallback)(() => {
80520
- if (suggestion) {
80521
- insert(suggestion);
80522
- onSubmit == null ? void 0 : onSubmit(state.value + suggestion);
80523
- return;
80524
- }
80525
- onSubmit == null ? void 0 : onSubmit(state.value);
80526
- }, [state.value, suggestion, insert, onSubmit]);
80527
- (0, import_react39.useEffect)(() => {
80528
- if (state.value !== state.previousValue) {
80529
- onChange == null ? void 0 : onChange(state.value);
80530
- }
80531
- }, [state.previousValue, state.value, onChange]);
80532
- return {
80533
- ...state,
80534
- suggestion,
80535
- moveCursorLeft,
80536
- moveCursorRight,
80537
- insert,
80538
- delete: deleteCharacter,
80539
- submit
80540
- };
80541
- };
80542
80452
  }
80543
80453
  });
80544
80454
 
80545
80455
  // node_modules/@inkjs/ui/build/components/text-input/use-text-input.js
80546
- var import_react40, cursor, useTextInput;
80456
+ var import_react40, cursor;
80547
80457
  var init_use_text_input = __esm({
80548
80458
  async "node_modules/@inkjs/ui/build/components/text-input/use-text-input.js"() {
80549
80459
  import_react40 = __toESM(require_react(), 1);
80550
80460
  await init_build2();
80551
80461
  init_source();
80552
80462
  cursor = source_default.inverse(" ");
80553
- useTextInput = ({ isDisabled = false, state, placeholder = "" }) => {
80554
- const renderedPlaceholder = (0, import_react40.useMemo)(() => {
80555
- if (isDisabled) {
80556
- return placeholder ? source_default.dim(placeholder) : "";
80557
- }
80558
- return placeholder && placeholder.length > 0 ? source_default.inverse(placeholder[0]) + source_default.dim(placeholder.slice(1)) : cursor;
80559
- }, [isDisabled, placeholder]);
80560
- const renderedValue = (0, import_react40.useMemo)(() => {
80561
- if (isDisabled) {
80562
- return state.value;
80563
- }
80564
- let index = 0;
80565
- let result2 = state.value.length > 0 ? "" : cursor;
80566
- for (const char of state.value) {
80567
- result2 += index === state.cursorOffset ? source_default.inverse(char) : char;
80568
- index++;
80569
- }
80570
- if (state.suggestion) {
80571
- if (state.cursorOffset === state.value.length) {
80572
- result2 += source_default.inverse(state.suggestion[0]) + source_default.dim(state.suggestion.slice(1));
80573
- } else {
80574
- result2 += source_default.dim(state.suggestion);
80575
- }
80576
- return result2;
80577
- }
80578
- if (state.value.length > 0 && state.cursorOffset === state.value.length) {
80579
- result2 += cursor;
80580
- }
80581
- return result2;
80582
- }, [isDisabled, state.value, state.cursorOffset, state.suggestion]);
80583
- use_input_default((input2, key) => {
80584
- if (key.upArrow || key.downArrow || key.ctrl && input2 === "c" || key.tab || key.shift && key.tab) {
80585
- return;
80586
- }
80587
- if (key.return) {
80588
- state.submit();
80589
- return;
80590
- }
80591
- if (key.leftArrow) {
80592
- state.moveCursorLeft();
80593
- } else if (key.rightArrow) {
80594
- state.moveCursorRight();
80595
- } else if (key.backspace || key.delete) {
80596
- state.delete();
80597
- } else {
80598
- state.insert(input2);
80599
- }
80600
- }, { isActive: !isDisabled });
80601
- return {
80602
- inputValue: state.value.length > 0 ? renderedValue : renderedPlaceholder
80603
- };
80604
- };
80605
80463
  }
80606
80464
  });
80607
80465
 
80608
80466
  // node_modules/@inkjs/ui/build/components/text-input/text-input.js
80609
- function TextInput({ isDisabled = false, defaultValue, placeholder = "", suggestions, onChange, onSubmit }) {
80610
- const state = useTextInputState({
80611
- defaultValue,
80612
- suggestions,
80613
- onChange,
80614
- onSubmit
80615
- });
80616
- const { inputValue } = useTextInput({
80617
- isDisabled,
80618
- placeholder,
80619
- state
80620
- });
80621
- const { styles: styles6 } = useComponentTheme("TextInput");
80622
- return import_react41.default.createElement(Text, { ...styles6.value() }, inputValue);
80623
- }
80624
80467
  var import_react41;
80625
80468
  var init_text_input = __esm({
80626
80469
  async "node_modules/@inkjs/ui/build/components/text-input/text-input.js"() {
@@ -89172,7 +89015,7 @@ var init_Menu = __esm({
89172
89015
  });
89173
89016
 
89174
89017
  // node_modules/ink-text-input/build/index.js
89175
- function TextInput2({ value: originalValue, placeholder = "", focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit }) {
89018
+ function TextInput({ value: originalValue, placeholder = "", focus = true, mask, highlightPastedText = false, showCursor = true, onChange, onSubmit }) {
89176
89019
  const [state, setState] = (0, import_react61.useState)({
89177
89020
  cursorOffset: (originalValue || "").length,
89178
89021
  cursorWidth: 0
@@ -89264,7 +89107,7 @@ var init_build5 = __esm({
89264
89107
  import_react61 = __toESM(require_react(), 1);
89265
89108
  await init_build2();
89266
89109
  init_source();
89267
- build_default2 = TextInput2;
89110
+ build_default2 = TextInput;
89268
89111
  }
89269
89112
  });
89270
89113
 
@@ -256715,7 +256558,7 @@ var init_map = __esm({
256715
256558
 
256716
256559
  // node_modules/underscore/modules/_createReduce.js
256717
256560
  function createReduce(dir) {
256718
- var reducer3 = function(obj2, iteratee2, memo7, initial2) {
256561
+ var reducer2 = function(obj2, iteratee2, memo7, initial2) {
256719
256562
  var _keys = !isArrayLike_default(obj2) && keys(obj2), length = (_keys || obj2).length, index = dir > 0 ? 0 : length - 1;
256720
256563
  if (!initial2) {
256721
256564
  memo7 = obj2[_keys ? _keys[index] : index];
@@ -256729,7 +256572,7 @@ function createReduce(dir) {
256729
256572
  };
256730
256573
  return function(obj2, iteratee2, memo7, context2) {
256731
256574
  var initial2 = arguments.length >= 3;
256732
- return reducer3(obj2, optimizeCb(iteratee2, context2, 4), memo7, initial2);
256575
+ return reducer2(obj2, optimizeCb(iteratee2, context2, 4), memo7, initial2);
256733
256576
  };
256734
256577
  }
256735
256578
  var init_createReduce = __esm({
@@ -323846,17 +323689,17 @@ var init_pdf = __esm({
323846
323689
  });
323847
323690
  var reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError("reduce", $TypeError);
323848
323691
  $2({ target: "Iterator", proto: true, real: true, forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError }, {
323849
- reduce: function reduce(reducer3) {
323692
+ reduce: function reduce(reducer2) {
323850
323693
  anObject(this);
323851
323694
  try {
323852
- aCallable(reducer3);
323695
+ aCallable(reducer2);
323853
323696
  } catch (error) {
323854
323697
  iteratorClose(this, "throw", error);
323855
323698
  }
323856
323699
  var noInitial = arguments.length < 2;
323857
323700
  var accumulator = noInitial ? void 0 : arguments[1];
323858
323701
  if (reduceWithoutClosingOnEarlyError) {
323859
- return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer3] : [reducer3, accumulator]);
323702
+ return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer2] : [reducer2, accumulator]);
323860
323703
  }
323861
323704
  var record = getIteratorDirect(this);
323862
323705
  var counter = 0;
@@ -323865,7 +323708,7 @@ var init_pdf = __esm({
323865
323708
  noInitial = false;
323866
323709
  accumulator = value;
323867
323710
  } else {
323868
- accumulator = reducer3(accumulator, value, counter);
323711
+ accumulator = reducer2(accumulator, value, counter);
323869
323712
  }
323870
323713
  counter++;
323871
323714
  }, { IS_RECORD: true });
@@ -443968,16 +443811,25 @@ function toggleSensitiveCommand(id) {
443968
443811
  }
443969
443812
  function patternToRegex(pattern) {
443970
443813
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
443971
- return new RegExp(`^${escaped}`, "i");
443814
+ return new RegExp(`(^|[;&|\\n])\\s*${escaped}`, "i");
443815
+ }
443816
+ function splitCommand(command) {
443817
+ const cleanCommand = command.trim().replace(/\s+/g, " ");
443818
+ const parts = cleanCommand.split(/\s*(?:;|&&|\|\||\||\n)\s*/);
443819
+ return parts.filter((part) => part.trim().length > 0);
443972
443820
  }
443973
443821
  function isSensitiveCommand(command) {
443974
443822
  const config3 = loadSensitiveCommands();
443975
443823
  const enabledCommands = config3.commands.filter((cmd) => cmd.enabled);
443976
- const cleanCommand = command.trim().replace(/\s+/g, " ");
443977
- for (const cmd of enabledCommands) {
443978
- const regex2 = patternToRegex(cmd.pattern);
443979
- if (regex2.test(cleanCommand)) {
443980
- return { isSensitive: true, matchedCommand: cmd };
443824
+ const commandParts = splitCommand(command);
443825
+ for (const part of commandParts) {
443826
+ const trimmedPart = part.trim();
443827
+ for (const cmd of enabledCommands) {
443828
+ const regex2 = patternToRegex(cmd.pattern);
443829
+ if (regex2.test(`
443830
+ ${trimmedPart}`) || regex2.test(trimmedPart)) {
443831
+ return { isSensitive: true, matchedCommand: cmd };
443832
+ }
443981
443833
  }
443982
443834
  }
443983
443835
  return { isSensitive: false };
@@ -444001,185 +443853,213 @@ var init_sensitiveCommandManager = __esm({
444001
443853
  PRESET_SENSITIVE_COMMANDS = [
444002
443854
  {
444003
443855
  id: "rm",
444004
- pattern: "*rm*",
443856
+ pattern: "rm ",
444005
443857
  description: "Delete files or directories (rm, rm -rf, etc.)",
444006
443858
  enabled: true,
444007
443859
  isPreset: true
444008
443860
  },
444009
443861
  {
444010
443862
  id: "rmdir",
444011
- pattern: "*rmdir*",
443863
+ pattern: "rmdir ",
444012
443864
  description: "Remove directories",
444013
443865
  enabled: true,
444014
443866
  isPreset: true
444015
443867
  },
444016
443868
  {
444017
443869
  id: "unlink",
444018
- pattern: "*unlink*",
443870
+ pattern: "unlink ",
444019
443871
  description: "Delete files using unlink command",
444020
443872
  enabled: true,
444021
443873
  isPreset: true
444022
443874
  },
444023
443875
  {
444024
443876
  id: "mv-to-trash",
444025
- pattern: "*mv * /tmp*",
443877
+ pattern: "mv * /tmp",
444026
443878
  description: "Move files to trash/tmp (potential data loss)",
444027
- enabled: true,
443879
+ enabled: false,
444028
443880
  isPreset: true
444029
443881
  },
444030
443882
  {
444031
443883
  id: "chmod",
444032
- pattern: "*chmod*",
443884
+ pattern: "chmod ",
444033
443885
  description: "Change file permissions",
444034
- enabled: true,
443886
+ enabled: false,
444035
443887
  isPreset: true
444036
443888
  },
444037
443889
  {
444038
443890
  id: "chown",
444039
- pattern: "*chown*",
443891
+ pattern: "chown ",
444040
443892
  description: "Change file ownership",
444041
- enabled: true,
443893
+ enabled: false,
444042
443894
  isPreset: true
444043
443895
  },
444044
443896
  {
444045
443897
  id: "dd",
444046
- pattern: "*dd*",
443898
+ pattern: "dd ",
444047
443899
  description: "Low-level data copy (disk operations)",
444048
443900
  enabled: true,
444049
443901
  isPreset: true
444050
443902
  },
444051
443903
  {
444052
443904
  id: "mkfs",
444053
- pattern: "*mkfs*",
443905
+ pattern: "mkfs",
444054
443906
  description: "Format filesystem",
444055
443907
  enabled: true,
444056
443908
  isPreset: true
444057
443909
  },
444058
443910
  {
444059
443911
  id: "fdisk",
444060
- pattern: "*fdisk*",
443912
+ pattern: "fdisk ",
444061
443913
  description: "Disk partition manipulation",
444062
443914
  enabled: true,
444063
443915
  isPreset: true
444064
443916
  },
444065
443917
  {
444066
443918
  id: "killall",
444067
- pattern: "*killall*",
443919
+ pattern: "killall ",
444068
443920
  description: "Kill all processes by name",
444069
- enabled: true,
443921
+ enabled: false,
444070
443922
  isPreset: true
444071
443923
  },
444072
443924
  {
444073
443925
  id: "pkill",
444074
- pattern: "*pkill*",
443926
+ pattern: "pkill ",
444075
443927
  description: "Kill processes by pattern",
444076
- enabled: true,
443928
+ enabled: false,
444077
443929
  isPreset: true
444078
443930
  },
444079
443931
  {
444080
443932
  id: "reboot",
444081
- pattern: "*reboot*",
443933
+ pattern: "reboot",
444082
443934
  description: "Reboot the system",
444083
443935
  enabled: true,
444084
443936
  isPreset: true
444085
443937
  },
444086
443938
  {
444087
443939
  id: "shutdown",
444088
- pattern: "*shutdown*",
443940
+ pattern: "shutdown ",
444089
443941
  description: "Shutdown the system",
444090
443942
  enabled: true,
444091
443943
  isPreset: true
444092
443944
  },
444093
443945
  {
444094
443946
  id: "sudo",
444095
- pattern: "*sudo*",
443947
+ pattern: "sudo ",
444096
443948
  description: "Execute commands with superuser privileges",
444097
- enabled: true,
443949
+ enabled: false,
444098
443950
  isPreset: true
444099
443951
  },
444100
443952
  {
444101
443953
  id: "su",
444102
- pattern: "*su*",
443954
+ pattern: "su ",
444103
443955
  description: "Switch user",
444104
- enabled: true,
443956
+ enabled: false,
444105
443957
  isPreset: true
444106
443958
  },
444107
443959
  {
444108
443960
  id: "curl-post",
444109
- pattern: "*curl*-X POST*",
443961
+ pattern: "curl*-X POST",
444110
443962
  description: "HTTP POST requests (potential data transmission)",
444111
443963
  enabled: false,
444112
443964
  isPreset: true
444113
443965
  },
444114
443966
  {
444115
443967
  id: "wget",
444116
- pattern: "*wget*",
443968
+ pattern: "wget ",
444117
443969
  description: "Download files from internet",
444118
443970
  enabled: false,
444119
443971
  isPreset: true
444120
443972
  },
444121
443973
  {
444122
443974
  id: "git-push",
444123
- pattern: "git push*",
443975
+ pattern: "git push",
444124
443976
  description: "Push code to remote repository",
444125
443977
  enabled: false,
444126
443978
  isPreset: true
444127
443979
  },
444128
443980
  {
444129
443981
  id: "git-force-push",
444130
- pattern: "*git push*--force*",
443982
+ pattern: "git push*--force",
444131
443983
  description: "Force push to remote repository (destructive)",
444132
443984
  enabled: true,
444133
443985
  isPreset: true
444134
443986
  },
443987
+ {
443988
+ id: "git-force-push-short",
443989
+ pattern: "git push*-f ",
443990
+ description: "Force push to remote repository with -f flag (destructive)",
443991
+ enabled: true,
443992
+ isPreset: true
443993
+ },
444135
443994
  {
444136
443995
  id: "git-reset-hard",
444137
- pattern: "*git reset*--hard*",
443996
+ pattern: "git reset*--hard",
444138
443997
  description: "Hard reset git repository (destructive)",
444139
443998
  enabled: true,
444140
443999
  isPreset: true
444141
444000
  },
444142
444001
  {
444143
444002
  id: "git-clean",
444144
- pattern: "*git clean*",
444003
+ pattern: "git clean*-f",
444145
444004
  description: "Remove untracked files from git repository",
444146
444005
  enabled: true,
444147
444006
  isPreset: true
444148
444007
  },
444149
444008
  {
444150
444009
  id: "git-revert",
444151
- pattern: "*git revert*",
444010
+ pattern: "git revert",
444152
444011
  description: "Revert git commits",
444153
- enabled: true,
444012
+ enabled: false,
444154
444013
  isPreset: true
444155
444014
  },
444156
444015
  {
444157
444016
  id: "git-reset",
444158
- pattern: "*git reset*",
444017
+ pattern: "git reset ",
444159
444018
  description: "Reset git repository state",
444160
- enabled: true,
444019
+ enabled: false,
444161
444020
  isPreset: true
444162
444021
  },
444163
444022
  {
444164
444023
  id: "npm-publish",
444165
- pattern: "*npm publish*",
444024
+ pattern: "npm publish",
444166
444025
  description: "Publish package to npm registry",
444167
444026
  enabled: true,
444168
444027
  isPreset: true
444169
444028
  },
444170
444029
  {
444171
444030
  id: "docker-rm",
444172
- pattern: "*docker rm*",
444031
+ pattern: "docker rm",
444173
444032
  description: "Remove Docker containers",
444174
444033
  enabled: false,
444175
444034
  isPreset: true
444176
444035
  },
444177
444036
  {
444178
444037
  id: "docker-rmi",
444179
- pattern: "*docker rmi*",
444038
+ pattern: "docker rmi",
444180
444039
  description: "Remove Docker images",
444181
444040
  enabled: false,
444182
444041
  isPreset: true
444042
+ },
444043
+ {
444044
+ id: "powershell-remove-item",
444045
+ pattern: "Remove-Item ",
444046
+ description: "PowerShell delete files or directories",
444047
+ enabled: true,
444048
+ isPreset: true
444049
+ },
444050
+ {
444051
+ id: "powershell-remove-item-recurse",
444052
+ pattern: "Remove-Item*-Recurse",
444053
+ description: "PowerShell recursive delete (destructive)",
444054
+ enabled: true,
444055
+ isPreset: true
444056
+ },
444057
+ {
444058
+ id: "format-volume",
444059
+ pattern: "Format-Volume",
444060
+ description: "Format disk volume (destructive)",
444061
+ enabled: true,
444062
+ isPreset: true
444183
444063
  }
444184
444064
  ];
444185
444065
  }
@@ -558899,6 +558779,22 @@ function CodebaseSearchStatus({ status }) {
558899
558779
  ))
558900
558780
  );
558901
558781
  }
558782
+ if (!status.isSearching) {
558783
+ return import_react117.default.createElement(
558784
+ Box_default,
558785
+ { flexDirection: "column", paddingLeft: 1 },
558786
+ import_react117.default.createElement(
558787
+ Box_default,
558788
+ { flexDirection: "row", gap: 1 },
558789
+ import_react117.default.createElement(Text, { color: "green" }, "\u2714 Search Complete")
558790
+ ),
558791
+ import_react117.default.createElement(
558792
+ Box_default,
558793
+ { flexDirection: "column", paddingLeft: 2 },
558794
+ import_react117.default.createElement(Text, { color: "cyan", dimColor: true }, "No relevant results found")
558795
+ )
558796
+ );
558797
+ }
558902
558798
  return null;
558903
558799
  }
558904
558800
  var import_react117;
@@ -558986,7 +558882,7 @@ var init_CustomCommandConfigPanel = __esm({
558986
558882
  "use strict";
558987
558883
  import_react119 = __toESM(require_react(), 1);
558988
558884
  await init_build2();
558989
- await init_build4();
558885
+ await init_build5();
558990
558886
  init_ThemeContext();
558991
558887
  init_I18nContext();
558992
558888
  init_custom();
@@ -559002,7 +558898,19 @@ var init_CustomCommandConfigPanel = __esm({
559002
558898
  const [errorMessage, setErrorMessage] = (0, import_react119.useState)("");
559003
558899
  use_input_default((input2, key) => {
559004
558900
  if (key.escape) {
559005
- handleCancel();
558901
+ if (step === "confirm") {
558902
+ setStep("location");
558903
+ } else if (step === "location") {
558904
+ setStep("type");
558905
+ } else if (step === "type") {
558906
+ setStep("description");
558907
+ } else if (step === "description") {
558908
+ setStep("command");
558909
+ } else if (step === "command") {
558910
+ setStep("name");
558911
+ } else if (step === "name") {
558912
+ handleCancel();
558913
+ }
559006
558914
  return;
559007
558915
  }
559008
558916
  if (step === "type") {
@@ -559025,10 +558933,10 @@ var init_CustomCommandConfigPanel = __esm({
559025
558933
  if (input2.toLowerCase() === "y") {
559026
558934
  handleConfirm();
559027
558935
  } else if (input2.toLowerCase() === "n") {
559028
- handleCancel();
558936
+ setStep("location");
559029
558937
  }
559030
558938
  }
559031
- }, { isActive: step === "type" || step === "location" || step === "confirm" });
558939
+ }, { isActive: true });
559032
558940
  const handleNameSubmit = (0, import_react119.useCallback)((value) => {
559033
558941
  if (value.trim()) {
559034
558942
  const trimmedName = value.trim();
@@ -559094,7 +559002,7 @@ var init_CustomCommandConfigPanel = __esm({
559094
559002
  { marginBottom: 1 },
559095
559003
  import_react119.default.createElement(Text, { color: theme14.colors.text }, t.customCommand.nameLabel)
559096
559004
  ),
559097
- import_react119.default.createElement(TextInput, { placeholder: t.customCommand.namePlaceholder, onSubmit: handleNameSubmit }),
559005
+ import_react119.default.createElement(build_default2, { placeholder: t.customCommand.namePlaceholder, value: commandName, onChange: setCommandName, onSubmit: handleNameSubmit }),
559098
559006
  errorMessage && import_react119.default.createElement(
559099
559007
  Box_default,
559100
559008
  { marginTop: 1 },
@@ -559125,7 +559033,7 @@ var init_CustomCommandConfigPanel = __esm({
559125
559033
  { marginBottom: 1 },
559126
559034
  import_react119.default.createElement(Text, { color: theme14.colors.text }, t.customCommand.commandLabel)
559127
559035
  ),
559128
- import_react119.default.createElement(TextInput, { placeholder: t.customCommand.commandPlaceholder, onSubmit: handleCommandSubmit }),
559036
+ import_react119.default.createElement(build_default2, { placeholder: t.customCommand.commandPlaceholder, value: commandText, onChange: setCommandText, onSubmit: handleCommandSubmit }),
559129
559037
  import_react119.default.createElement(
559130
559038
  Box_default,
559131
559039
  { marginTop: 1 },
@@ -559167,7 +559075,7 @@ var init_CustomCommandConfigPanel = __esm({
559167
559075
  { marginBottom: 1 },
559168
559076
  import_react119.default.createElement(Text, { dimColor: true }, t.customCommand.descriptionHint)
559169
559077
  ),
559170
- import_react119.default.createElement(TextInput, { placeholder: t.customCommand.descriptionPlaceholder, onSubmit: handleDescriptionSubmit }),
559078
+ import_react119.default.createElement(build_default2, { placeholder: t.customCommand.descriptionPlaceholder, value: commandDescription, onChange: setCommandDescription, onSubmit: handleDescriptionSubmit }),
559171
559079
  import_react119.default.createElement(
559172
559080
  Box_default,
559173
559081
  { marginTop: 1 },
@@ -559422,7 +559330,7 @@ var init_SkillsCreationPanel = __esm({
559422
559330
  import_react120 = __toESM(require_react(), 1);
559423
559331
  await init_build2();
559424
559332
  await init_build3();
559425
- await init_build4();
559333
+ await init_build5();
559426
559334
  init_ThemeContext();
559427
559335
  init_I18nContext();
559428
559336
  init_skills();
@@ -559547,10 +559455,31 @@ var init_SkillsCreationPanel = __esm({
559547
559455
  }
559548
559456
  };
559549
559457
  }, [step, requirement, projectRoot, t.skillsCreation.errorGeneration]);
559550
- const keyHandlingActive = step === "mode" || step === "location" || step === "confirm" || step === "ai-location" || step === "ai-generating" || step === "ai-preview" || step === "ai-error";
559551
559458
  use_input_default((input2, key) => {
559552
559459
  if (key.escape) {
559553
- handleCancel();
559460
+ if (step === "confirm") {
559461
+ setStep("location");
559462
+ } else if (step === "location") {
559463
+ setStep("description");
559464
+ } else if (step === "description") {
559465
+ setStep("name");
559466
+ } else if (step === "name") {
559467
+ setStep("mode");
559468
+ } else if (step === "ai-edit-name") {
559469
+ setStep("ai-preview");
559470
+ } else if (step === "ai-preview") {
559471
+ setStep("ai-location");
559472
+ } else if (step === "ai-location") {
559473
+ setStep("ai-requirement");
559474
+ } else if (step === "ai-requirement") {
559475
+ setStep("mode");
559476
+ } else if (step === "ai-error") {
559477
+ setStep("ai-location");
559478
+ } else if (step === "ai-generating") {
559479
+ handleCancel();
559480
+ } else if (step === "mode") {
559481
+ handleCancel();
559482
+ }
559554
559483
  return;
559555
559484
  }
559556
559485
  if (step === "mode") {
@@ -559582,7 +559511,7 @@ var init_SkillsCreationPanel = __esm({
559582
559511
  if (input2.toLowerCase() === "y") {
559583
559512
  handleConfirmManual();
559584
559513
  } else if (input2.toLowerCase() === "n") {
559585
- handleCancel();
559514
+ setStep("location");
559586
559515
  }
559587
559516
  return;
559588
559517
  }
@@ -559614,7 +559543,7 @@ var init_SkillsCreationPanel = __esm({
559614
559543
  setStep("ai-generating");
559615
559544
  }
559616
559545
  }
559617
- }, { isActive: keyHandlingActive });
559546
+ }, { isActive: true });
559618
559547
  return import_react120.default.createElement(
559619
559548
  Box_default,
559620
559549
  { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: theme14.colors.border },
@@ -559676,7 +559605,7 @@ var init_SkillsCreationPanel = __esm({
559676
559605
  { marginBottom: 1 },
559677
559606
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.nameHint)
559678
559607
  ),
559679
- import_react120.default.createElement(TextInput, { placeholder: t.skillsCreation.namePlaceholder, onSubmit: handleNameSubmit }),
559608
+ import_react120.default.createElement(build_default2, { placeholder: t.skillsCreation.namePlaceholder, value: skillName, onChange: setSkillName, onSubmit: handleNameSubmit }),
559680
559609
  errorMessage && import_react120.default.createElement(
559681
559610
  Box_default,
559682
559611
  { marginTop: 1 },
@@ -559712,7 +559641,7 @@ var init_SkillsCreationPanel = __esm({
559712
559641
  { marginBottom: 1 },
559713
559642
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.descriptionHint)
559714
559643
  ),
559715
- import_react120.default.createElement(TextInput, { placeholder: t.skillsCreation.descriptionPlaceholder, onSubmit: handleDescriptionSubmit }),
559644
+ import_react120.default.createElement(build_default2, { placeholder: t.skillsCreation.descriptionPlaceholder, value: description, onChange: setDescription, onSubmit: handleDescriptionSubmit }),
559716
559645
  import_react120.default.createElement(
559717
559646
  Box_default,
559718
559647
  { marginTop: 1 },
@@ -559872,7 +559801,7 @@ var init_SkillsCreationPanel = __esm({
559872
559801
  { marginBottom: 1 },
559873
559802
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.requirementHint)
559874
559803
  ),
559875
- import_react120.default.createElement(TextInput, { placeholder: t.skillsCreation.requirementPlaceholder, onSubmit: handleRequirementSubmit }),
559804
+ import_react120.default.createElement(build_default2, { placeholder: t.skillsCreation.requirementPlaceholder, value: requirement, onChange: setRequirement, onSubmit: handleRequirementSubmit }),
559876
559805
  import_react120.default.createElement(
559877
559806
  Box_default,
559878
559807
  { marginTop: 1 },
@@ -560127,7 +560056,7 @@ var init_SkillsCreationPanel = __esm({
560127
560056
  { marginBottom: 1 },
560128
560057
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.editNameHint)
560129
560058
  ),
560130
- import_react120.default.createElement(TextInput, { placeholder: t.skillsCreation.editNamePlaceholder, onSubmit: handleEditNameSubmit }),
560059
+ import_react120.default.createElement(build_default2, { placeholder: t.skillsCreation.editNamePlaceholder, value: skillName, onChange: setSkillName, onSubmit: handleEditNameSubmit }),
560131
560060
  errorMessage && import_react120.default.createElement(
560132
560061
  Box_default,
560133
560062
  { marginTop: 1 },
@@ -560168,7 +560097,11 @@ var init_RoleCreationPanel = __esm({
560168
560097
  const keyHandlingActive = step === "location" || step === "confirm";
560169
560098
  use_input_default((input2, key) => {
560170
560099
  if (key.escape) {
560171
- handleCancel();
560100
+ if (step === "confirm") {
560101
+ setStep("location");
560102
+ } else {
560103
+ handleCancel();
560104
+ }
560172
560105
  return;
560173
560106
  }
560174
560107
  if (step === "location") {
@@ -560185,7 +560118,7 @@ var init_RoleCreationPanel = __esm({
560185
560118
  if (input2.toLowerCase() === "y") {
560186
560119
  handleConfirm();
560187
560120
  } else if (input2.toLowerCase() === "n") {
560188
- handleCancel();
560121
+ setStep("location");
560189
560122
  }
560190
560123
  }
560191
560124
  }, { isActive: keyHandlingActive });
@@ -561417,15 +561350,11 @@ function WorkingDirectoryPanel({ onClose }) {
561417
561350
  }
561418
561351
  return;
561419
561352
  }
561420
- if (key.escape) {
561421
- if (confirmDelete) {
561353
+ if (confirmDelete) {
561354
+ if (key.escape) {
561422
561355
  setConfirmDelete(false);
561423
561356
  return;
561424
561357
  }
561425
- onClose();
561426
- return;
561427
- }
561428
- if (confirmDelete) {
561429
561358
  if (input2.toLowerCase() === "y") {
561430
561359
  const pathsToDelete = Array.from(markedDirs);
561431
561360
  removeWorkingDirectories(pathsToDelete).then(() => {
@@ -561444,6 +561373,10 @@ function WorkingDirectoryPanel({ onClose }) {
561444
561373
  }
561445
561374
  return;
561446
561375
  }
561376
+ if (key.escape) {
561377
+ onClose();
561378
+ return;
561379
+ }
561447
561380
  if (key.upArrow) {
561448
561381
  setSelectedIndex((prev) => Math.max(0, prev - 1));
561449
561382
  return;
@@ -568910,30 +568843,17 @@ var init_codebaseIndexAgent = __esm({
568910
568843
  this.progressCallback = progressCallback;
568911
568844
  }
568912
568845
  try {
568913
- const patterns = Array.from(_CodebaseIndexAgent.CODE_EXTENSIONS).map((ext) => path50.join(this.projectRoot, "**", `*${ext}`));
568914
- this.fileWatcher = esm_default.watch(patterns, {
568915
- ignored: [
568916
- "**/node_modules/**",
568917
- "**/.git/**",
568918
- "**/.snow/**",
568919
- "**/dist/**",
568920
- "**/build/**",
568921
- "**/out/**",
568922
- "**/coverage/**",
568923
- "**/.next/**",
568924
- "**/.nuxt/**",
568925
- "**/.cache/**",
568926
- "**/*.min.js",
568927
- "**/*.min.css",
568928
- "**/*.map",
568929
- "**/package-lock.json",
568930
- "**/yarn.lock",
568931
- "**/pnpm-lock.yaml"
568932
- ],
568846
+ this.fileWatcher = esm_default.watch(this.projectRoot, {
568847
+ ignored: (filePath) => {
568848
+ const relativePath = path50.relative(this.projectRoot, filePath);
568849
+ if (!relativePath || relativePath === ".") {
568850
+ return false;
568851
+ }
568852
+ return this.ignoreFilter.ignores(relativePath);
568853
+ },
568933
568854
  ignoreInitial: true,
568934
- persistent: true,
568935
- depth: 20
568936
- // Removed awaitWriteFinish - using debounce instead to reduce polling overhead
568855
+ // Don't trigger events for initial scan
568856
+ persistent: true
568937
568857
  });
568938
568858
  this.fileWatcher.on("add", (filePath) => {
568939
568859
  const ext = path50.extname(filePath);
@@ -570701,16 +570621,13 @@ function usePanelState() {
570701
570621
  return true;
570702
570622
  }
570703
570623
  if (showCustomCommandConfig) {
570704
- setShowCustomCommandConfig(false);
570705
- return true;
570624
+ return false;
570706
570625
  }
570707
570626
  if (showSkillsCreation) {
570708
- setShowSkillsCreation(false);
570709
- return true;
570627
+ return false;
570710
570628
  }
570711
570629
  if (showRoleCreation) {
570712
- setShowRoleCreation(false);
570713
- return true;
570630
+ return false;
570714
570631
  }
570715
570632
  if (showRoleDeletion) {
570716
570633
  setShowRoleDeletion(false);
@@ -570721,8 +570638,7 @@ function usePanelState() {
570721
570638
  return true;
570722
570639
  }
570723
570640
  if (showWorkingDirPanel) {
570724
- setShowWorkingDirPanel(false);
570725
- return true;
570641
+ return false;
570726
570642
  }
570727
570643
  if (showReviewCommitPanel) {
570728
570644
  setShowReviewCommitPanel(false);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snow-ai",
3
- "version": "0.6.23",
3
+ "version": "0.6.24",
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.6.23",
3
+ "version": "0.6.24",
4
4
  "description": "Agentic coding in your terminal",
5
5
  "license": "MIT",
6
6
  "bin": {