snow-ai 0.6.22 → 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();
@@ -1449,7 +1449,7 @@ var require_react_development = __commonJS({
1449
1449
  var dispatcher = resolveDispatcher();
1450
1450
  return dispatcher.useCallback(callback, deps);
1451
1451
  }
1452
- function useMemo35(create3, deps) {
1452
+ function useMemo36(create3, deps) {
1453
1453
  var dispatcher = resolveDispatcher();
1454
1454
  return dispatcher.useMemo(create3, deps);
1455
1455
  }
@@ -2221,7 +2221,7 @@ var require_react_development = __commonJS({
2221
2221
  exports2.useImperativeHandle = useImperativeHandle2;
2222
2222
  exports2.useInsertionEffect = useInsertionEffect;
2223
2223
  exports2.useLayoutEffect = useLayoutEffect2;
2224
- exports2.useMemo = useMemo35;
2224
+ exports2.useMemo = useMemo36;
2225
2225
  exports2.useReducer = useReducer8;
2226
2226
  exports2.useRef = useRef16;
2227
2227
  exports2.useState = useState67;
@@ -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
  }
@@ -48069,11 +48069,9 @@ PLACEHOLDER_FOR_WORKFLOW_SECTION
48069
48069
  - Reduces cognitive load - AI doesn't need to remember everything
48070
48070
  - Enables recovery if conversation is interrupted
48071
48071
 
48072
- **Formatting rule - CRITICAL for sequential numbering:**
48073
- - TODO item content MUST start with a numeric prefix to mark execution order, e.g. "1. ...", "2. ...", "3. ..."
48072
+ **Formatting rule:**
48073
+ - TODO item content should be clear and actionable
48074
48074
  - **REQUIRED: Get existing TODOs first** - BEFORE calling todo-add, ALWAYS run todo-get (paired with an action tool in the same call) to inspect current items
48075
- - **Calculate next sequence number** - Extract the highest existing numeric prefix from todo-get results, then use max(existingPrefix)+1 for new items
48076
- - **Example workflow**: todo-get + filesystem-read("file.ts") \u2192 see existing "1. Read file", "2. Analyze code" \u2192 add new items starting with "3. ..."
48077
48075
 
48078
48076
  **WHEN TO USE (Default for most work):**
48079
48077
  - ANY task touching 2+ files
@@ -48087,8 +48085,8 @@ PLACEHOLDER_FOR_WORKFLOW_SECTION
48087
48085
  - Simple queries that don't change code
48088
48086
 
48089
48087
  **STANDARD WORKFLOW - Always Plan First:**
48090
- 1. **Receive task** \u2192 Run todo-get (paired with an action tool) to see current list and determine the next sequence number
48091
- 2. **Plan** \u2192 Create TODO with todo-add (batch add all steps at once, using the next available sequence number)
48088
+ 1. **Receive task** \u2192 Run todo-get (paired with an action tool) to see current list
48089
+ 2. **Plan** \u2192 Create TODO with todo-add (batch add all steps at once)
48092
48090
  3. **Execute** \u2192 Update progress with todo-update as each step is completed
48093
48091
  4. **Complete** \u2192 Clean up obsolete, incorrect, or superseded items with todo-delete
48094
48092
 
@@ -48106,10 +48104,10 @@ ALWAYS pair TODO tools with action tools in same call:
48106
48104
  **Examples:**
48107
48105
  \`\`\`
48108
48106
  User: "Fix authentication bug and add logging"
48109
- AI: todo-add(content=["1. Fix auth bug in auth.ts", "2. Add logging to login flow", "3. Test login with new logs"]) + filesystem-read("auth.ts")
48107
+ AI: todo-add(content=["Fix auth bug in auth.ts", "Add logging to login flow", "Test login with new logs"]) + filesystem-read("auth.ts")
48110
48108
 
48111
48109
  User: "Refactor utils module"
48112
- AI: todo-add(content=["1. Read utils module structure", "2. Identify refactor targets", "3. Extract common functions", "4. Update imports", "5. Run tests"]) + filesystem-read("utils/")
48110
+ AI: todo-add(content=["Read utils module structure", "Identify refactor targets", "Extract common functions", "Update imports", "Run tests"]) + filesystem-read("utils/")
48113
48111
  \`\`\`
48114
48112
 
48115
48113
 
@@ -80447,182 +80445,25 @@ var init_spinner2 = __esm({
80447
80445
  });
80448
80446
 
80449
80447
  // node_modules/@inkjs/ui/build/components/text-input/use-text-input-state.js
80450
- var import_react39, reducer2, useTextInputState;
80448
+ var import_react39;
80451
80449
  var init_use_text_input_state = __esm({
80452
80450
  "node_modules/@inkjs/ui/build/components/text-input/use-text-input-state.js"() {
80453
80451
  import_react39 = __toESM(require_react(), 1);
80454
- reducer2 = (state, action) => {
80455
- switch (action.type) {
80456
- case "move-cursor-left": {
80457
- return {
80458
- ...state,
80459
- cursorOffset: Math.max(0, state.cursorOffset - 1)
80460
- };
80461
- }
80462
- case "move-cursor-right": {
80463
- return {
80464
- ...state,
80465
- cursorOffset: Math.min(state.value.length, state.cursorOffset + 1)
80466
- };
80467
- }
80468
- case "insert": {
80469
- return {
80470
- ...state,
80471
- previousValue: state.value,
80472
- value: state.value.slice(0, state.cursorOffset) + action.text + state.value.slice(state.cursorOffset),
80473
- cursorOffset: state.cursorOffset + action.text.length
80474
- };
80475
- }
80476
- case "delete": {
80477
- const newCursorOffset = Math.max(0, state.cursorOffset - 1);
80478
- return {
80479
- ...state,
80480
- previousValue: state.value,
80481
- value: state.value.slice(0, newCursorOffset) + state.value.slice(newCursorOffset + 1),
80482
- cursorOffset: newCursorOffset
80483
- };
80484
- }
80485
- }
80486
- };
80487
- useTextInputState = ({ defaultValue = "", suggestions, onChange, onSubmit }) => {
80488
- const [state, dispatch] = (0, import_react39.useReducer)(reducer2, {
80489
- previousValue: defaultValue,
80490
- value: defaultValue,
80491
- cursorOffset: defaultValue.length
80492
- });
80493
- const suggestion = (0, import_react39.useMemo)(() => {
80494
- var _a21;
80495
- if (state.value.length === 0) {
80496
- return;
80497
- }
80498
- return (_a21 = suggestions == null ? void 0 : suggestions.find((suggestion2) => suggestion2.startsWith(state.value))) == null ? void 0 : _a21.replace(state.value, "");
80499
- }, [state.value, suggestions]);
80500
- const moveCursorLeft = (0, import_react39.useCallback)(() => {
80501
- dispatch({
80502
- type: "move-cursor-left"
80503
- });
80504
- }, []);
80505
- const moveCursorRight = (0, import_react39.useCallback)(() => {
80506
- dispatch({
80507
- type: "move-cursor-right"
80508
- });
80509
- }, []);
80510
- const insert = (0, import_react39.useCallback)((text3) => {
80511
- dispatch({
80512
- type: "insert",
80513
- text: text3
80514
- });
80515
- }, []);
80516
- const deleteCharacter = (0, import_react39.useCallback)(() => {
80517
- dispatch({
80518
- type: "delete"
80519
- });
80520
- }, []);
80521
- const submit = (0, import_react39.useCallback)(() => {
80522
- if (suggestion) {
80523
- insert(suggestion);
80524
- onSubmit == null ? void 0 : onSubmit(state.value + suggestion);
80525
- return;
80526
- }
80527
- onSubmit == null ? void 0 : onSubmit(state.value);
80528
- }, [state.value, suggestion, insert, onSubmit]);
80529
- (0, import_react39.useEffect)(() => {
80530
- if (state.value !== state.previousValue) {
80531
- onChange == null ? void 0 : onChange(state.value);
80532
- }
80533
- }, [state.previousValue, state.value, onChange]);
80534
- return {
80535
- ...state,
80536
- suggestion,
80537
- moveCursorLeft,
80538
- moveCursorRight,
80539
- insert,
80540
- delete: deleteCharacter,
80541
- submit
80542
- };
80543
- };
80544
80452
  }
80545
80453
  });
80546
80454
 
80547
80455
  // node_modules/@inkjs/ui/build/components/text-input/use-text-input.js
80548
- var import_react40, cursor, useTextInput;
80456
+ var import_react40, cursor;
80549
80457
  var init_use_text_input = __esm({
80550
80458
  async "node_modules/@inkjs/ui/build/components/text-input/use-text-input.js"() {
80551
80459
  import_react40 = __toESM(require_react(), 1);
80552
80460
  await init_build2();
80553
80461
  init_source();
80554
80462
  cursor = source_default.inverse(" ");
80555
- useTextInput = ({ isDisabled = false, state, placeholder = "" }) => {
80556
- const renderedPlaceholder = (0, import_react40.useMemo)(() => {
80557
- if (isDisabled) {
80558
- return placeholder ? source_default.dim(placeholder) : "";
80559
- }
80560
- return placeholder && placeholder.length > 0 ? source_default.inverse(placeholder[0]) + source_default.dim(placeholder.slice(1)) : cursor;
80561
- }, [isDisabled, placeholder]);
80562
- const renderedValue = (0, import_react40.useMemo)(() => {
80563
- if (isDisabled) {
80564
- return state.value;
80565
- }
80566
- let index = 0;
80567
- let result2 = state.value.length > 0 ? "" : cursor;
80568
- for (const char of state.value) {
80569
- result2 += index === state.cursorOffset ? source_default.inverse(char) : char;
80570
- index++;
80571
- }
80572
- if (state.suggestion) {
80573
- if (state.cursorOffset === state.value.length) {
80574
- result2 += source_default.inverse(state.suggestion[0]) + source_default.dim(state.suggestion.slice(1));
80575
- } else {
80576
- result2 += source_default.dim(state.suggestion);
80577
- }
80578
- return result2;
80579
- }
80580
- if (state.value.length > 0 && state.cursorOffset === state.value.length) {
80581
- result2 += cursor;
80582
- }
80583
- return result2;
80584
- }, [isDisabled, state.value, state.cursorOffset, state.suggestion]);
80585
- use_input_default((input2, key) => {
80586
- if (key.upArrow || key.downArrow || key.ctrl && input2 === "c" || key.tab || key.shift && key.tab) {
80587
- return;
80588
- }
80589
- if (key.return) {
80590
- state.submit();
80591
- return;
80592
- }
80593
- if (key.leftArrow) {
80594
- state.moveCursorLeft();
80595
- } else if (key.rightArrow) {
80596
- state.moveCursorRight();
80597
- } else if (key.backspace || key.delete) {
80598
- state.delete();
80599
- } else {
80600
- state.insert(input2);
80601
- }
80602
- }, { isActive: !isDisabled });
80603
- return {
80604
- inputValue: state.value.length > 0 ? renderedValue : renderedPlaceholder
80605
- };
80606
- };
80607
80463
  }
80608
80464
  });
80609
80465
 
80610
80466
  // node_modules/@inkjs/ui/build/components/text-input/text-input.js
80611
- function TextInput({ isDisabled = false, defaultValue, placeholder = "", suggestions, onChange, onSubmit }) {
80612
- const state = useTextInputState({
80613
- defaultValue,
80614
- suggestions,
80615
- onChange,
80616
- onSubmit
80617
- });
80618
- const { inputValue } = useTextInput({
80619
- isDisabled,
80620
- placeholder,
80621
- state
80622
- });
80623
- const { styles: styles6 } = useComponentTheme("TextInput");
80624
- return import_react41.default.createElement(Text, { ...styles6.value() }, inputValue);
80625
- }
80626
80467
  var import_react41;
80627
80468
  var init_text_input = __esm({
80628
80469
  async "node_modules/@inkjs/ui/build/components/text-input/text-input.js"() {
@@ -89174,7 +89015,7 @@ var init_Menu = __esm({
89174
89015
  });
89175
89016
 
89176
89017
  // node_modules/ink-text-input/build/index.js
89177
- 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 }) {
89178
89019
  const [state, setState] = (0, import_react61.useState)({
89179
89020
  cursorOffset: (originalValue || "").length,
89180
89021
  cursorWidth: 0
@@ -89266,7 +89107,7 @@ var init_build5 = __esm({
89266
89107
  import_react61 = __toESM(require_react(), 1);
89267
89108
  await init_build2();
89268
89109
  init_source();
89269
- build_default2 = TextInput2;
89110
+ build_default2 = TextInput;
89270
89111
  }
89271
89112
  });
89272
89113
 
@@ -256717,7 +256558,7 @@ var init_map = __esm({
256717
256558
 
256718
256559
  // node_modules/underscore/modules/_createReduce.js
256719
256560
  function createReduce(dir) {
256720
- var reducer3 = function(obj2, iteratee2, memo7, initial2) {
256561
+ var reducer2 = function(obj2, iteratee2, memo7, initial2) {
256721
256562
  var _keys = !isArrayLike_default(obj2) && keys(obj2), length = (_keys || obj2).length, index = dir > 0 ? 0 : length - 1;
256722
256563
  if (!initial2) {
256723
256564
  memo7 = obj2[_keys ? _keys[index] : index];
@@ -256731,7 +256572,7 @@ function createReduce(dir) {
256731
256572
  };
256732
256573
  return function(obj2, iteratee2, memo7, context2) {
256733
256574
  var initial2 = arguments.length >= 3;
256734
- return reducer3(obj2, optimizeCb(iteratee2, context2, 4), memo7, initial2);
256575
+ return reducer2(obj2, optimizeCb(iteratee2, context2, 4), memo7, initial2);
256735
256576
  };
256736
256577
  }
256737
256578
  var init_createReduce = __esm({
@@ -323848,17 +323689,17 @@ var init_pdf = __esm({
323848
323689
  });
323849
323690
  var reduceWithoutClosingOnEarlyError = !FAILS_ON_INITIAL_UNDEFINED && iteratorHelperWithoutClosingOnEarlyError("reduce", $TypeError);
323850
323691
  $2({ target: "Iterator", proto: true, real: true, forced: FAILS_ON_INITIAL_UNDEFINED || reduceWithoutClosingOnEarlyError }, {
323851
- reduce: function reduce(reducer3) {
323692
+ reduce: function reduce(reducer2) {
323852
323693
  anObject(this);
323853
323694
  try {
323854
- aCallable(reducer3);
323695
+ aCallable(reducer2);
323855
323696
  } catch (error) {
323856
323697
  iteratorClose(this, "throw", error);
323857
323698
  }
323858
323699
  var noInitial = arguments.length < 2;
323859
323700
  var accumulator = noInitial ? void 0 : arguments[1];
323860
323701
  if (reduceWithoutClosingOnEarlyError) {
323861
- return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer3] : [reducer3, accumulator]);
323702
+ return apply(reduceWithoutClosingOnEarlyError, this, noInitial ? [reducer2] : [reducer2, accumulator]);
323862
323703
  }
323863
323704
  var record = getIteratorDirect(this);
323864
323705
  var counter = 0;
@@ -323867,7 +323708,7 @@ var init_pdf = __esm({
323867
323708
  noInitial = false;
323868
323709
  accumulator = value;
323869
323710
  } else {
323870
- accumulator = reducer3(accumulator, value, counter);
323711
+ accumulator = reducer2(accumulator, value, counter);
323871
323712
  }
323872
323713
  counter++;
323873
323714
  }, { IS_RECORD: true });
@@ -363311,6 +363152,7 @@ var init_security_utils = __esm({
363311
363152
  var useTerminalExecutionState_exports = {};
363312
363153
  __export(useTerminalExecutionState_exports, {
363313
363154
  appendTerminalOutput: () => appendTerminalOutput,
363155
+ flushOutputBuffer: () => flushOutputBuffer,
363314
363156
  registerInputCallback: () => registerInputCallback,
363315
363157
  sendTerminalInput: () => sendTerminalInput,
363316
363158
  setTerminalExecutionState: () => setTerminalExecutionState,
@@ -363341,6 +363183,7 @@ function useTerminalExecutionState() {
363341
363183
  });
363342
363184
  }, []);
363343
363185
  const endExecution = (0, import_react65.useCallback)(() => {
363186
+ flushOutputBuffer();
363344
363187
  setState({
363345
363188
  isExecuting: false,
363346
363189
  command: null,
@@ -363369,13 +363212,33 @@ function setTerminalExecutionState(state) {
363369
363212
  globalSetState(state);
363370
363213
  }
363371
363214
  }
363215
+ function flushOutputBuffer() {
363216
+ if (outputFlushTimer) {
363217
+ clearTimeout(outputFlushTimer);
363218
+ outputFlushTimer = null;
363219
+ }
363220
+ if (outputBuffer.length === 0 || !globalSetState || !globalState) {
363221
+ return;
363222
+ }
363223
+ const linesToFlush = outputBuffer.splice(0, outputBuffer.length);
363224
+ globalSetState({
363225
+ ...globalState,
363226
+ output: [...globalState.output, ...linesToFlush]
363227
+ });
363228
+ }
363372
363229
  function appendTerminalOutput(line) {
363373
- if (globalSetState && globalState) {
363374
- globalSetState({
363375
- ...globalState,
363376
- output: [...globalState.output, line]
363377
- });
363230
+ if (!globalSetState || !globalState) {
363231
+ return;
363232
+ }
363233
+ outputBuffer.push(line);
363234
+ if (outputBuffer.length >= OUTPUT_BATCH_SIZE) {
363235
+ flushOutputBuffer();
363236
+ return;
363237
+ }
363238
+ if (outputFlushTimer) {
363239
+ clearTimeout(outputFlushTimer);
363378
363240
  }
363241
+ outputFlushTimer = setTimeout(flushOutputBuffer, OUTPUT_FLUSH_DELAY);
363379
363242
  }
363380
363243
  function setTerminalNeedsInput(needsInput, prompt) {
363381
363244
  if (globalSetState && globalState) {
@@ -363394,13 +363257,17 @@ function sendTerminalInput(input2) {
363394
363257
  globalInputCallback(input2);
363395
363258
  }
363396
363259
  }
363397
- var import_react65, globalSetState, globalState, globalInputCallback;
363260
+ var import_react65, globalSetState, globalState, outputBuffer, outputFlushTimer, OUTPUT_BATCH_SIZE, OUTPUT_FLUSH_DELAY, globalInputCallback;
363398
363261
  var init_useTerminalExecutionState = __esm({
363399
363262
  "dist/hooks/execution/useTerminalExecutionState.js"() {
363400
363263
  "use strict";
363401
363264
  import_react65 = __toESM(require_react(), 1);
363402
363265
  globalSetState = null;
363403
363266
  globalState = null;
363267
+ outputBuffer = [];
363268
+ outputFlushTimer = null;
363269
+ OUTPUT_BATCH_SIZE = 10;
363270
+ OUTPUT_FLUSH_DELAY = 50;
363404
363271
  globalInputCallback = null;
363405
363272
  }
363406
363273
  });
@@ -363918,6 +363785,7 @@ var init_bash = __esm({
363918
363785
  clearInterval(inputCheckInterval);
363919
363786
  registerInputCallback(null);
363920
363787
  setTerminalNeedsInput(false);
363788
+ flushOutputBuffer();
363921
363789
  if (backgroundProcessId) {
363922
363790
  const status = code2 === 0 ? "completed" : "failed";
363923
363791
  Promise.resolve().then(() => (init_useBackgroundProcesses(), useBackgroundProcesses_exports)).then(({ updateBackgroundProcessStatus: updateBackgroundProcessStatus2 }) => {
@@ -442522,8 +442390,8 @@ This ensures efficient workflow and prevents unnecessary wait times.`,
442522
442390
  },
442523
442391
  status: {
442524
442392
  type: "string",
442525
- enum: ["pending", "completed"],
442526
- description: 'New status - "pending" (not done) or "completed" (100% finished and verified)'
442393
+ enum: ["pending", "inProgress", "completed"],
442394
+ description: 'New status - "pending" (not started), "inProgress" (currently working on), or "completed" (100% finished and verified)'
442527
442395
  },
442528
442396
  content: {
442529
442397
  type: "string",
@@ -442540,12 +442408,6 @@ This ensures efficient workflow and prevents unnecessary wait times.`,
442540
442408
  PARALLEL CALLS ONLY: MUST pair with other tools (todo-add + filesystem-read/etc).
442541
442409
  NEVER call todo-add alone - always combine with an action tool.
442542
442410
 
442543
- SEQUENCE NUMBERING - CRITICAL:
442544
- - ALWAYS run todo-get FIRST (in the same parallel call) to check existing items before adding new ones
442545
- - Extract the highest numeric prefix from existing TODOs, then continue from max+1
442546
- - Example: If todo-get returns "1. Read file", "2. Analyze code", new items must start with "3. ..."
442547
- - This prevents duplicate numbering in continuous conversations
442548
-
442549
442411
  WHEN TO USE (Very common):
442550
442412
  - Start ANY multi-step task \u2192 Create TODO list immediately
442551
442413
  - User adds new requirements \u2192 Add tasks for new work
@@ -442553,10 +442415,7 @@ WHEN TO USE (Very common):
442553
442415
 
442554
442416
  SUPPORTS BATCH ADDING:
442555
442417
  - Single: content="Task description"
442556
- - Multiple: content=["Task 1", "Task 2", "Task 3"] (recommended for multi-step work)
442557
-
442558
- EXAMPLE (FIRST TIME): todo-add(content=["1. Read file", "2. Modify code"]) + filesystem-read("file.ts")
442559
- EXAMPLE (CONTINUING): todo-get + todo-add(content=["3. Test changes", "4. Run build"])`,
442418
+ - Multiple: content=["Task 1", "Task 2", "Task 3"] (recommended for multi-step work)`,
442560
442419
  inputSchema: {
442561
442420
  type: "object",
442562
442421
  properties: {
@@ -443952,16 +443811,25 @@ function toggleSensitiveCommand(id) {
443952
443811
  }
443953
443812
  function patternToRegex(pattern) {
443954
443813
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
443955
- 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);
443956
443820
  }
443957
443821
  function isSensitiveCommand(command) {
443958
443822
  const config3 = loadSensitiveCommands();
443959
443823
  const enabledCommands = config3.commands.filter((cmd) => cmd.enabled);
443960
- const cleanCommand = command.trim().replace(/\s+/g, " ");
443961
- for (const cmd of enabledCommands) {
443962
- const regex2 = patternToRegex(cmd.pattern);
443963
- if (regex2.test(cleanCommand)) {
443964
- 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
+ }
443965
443833
  }
443966
443834
  }
443967
443835
  return { isSensitive: false };
@@ -443985,185 +443853,213 @@ var init_sensitiveCommandManager = __esm({
443985
443853
  PRESET_SENSITIVE_COMMANDS = [
443986
443854
  {
443987
443855
  id: "rm",
443988
- pattern: "*rm*",
443856
+ pattern: "rm ",
443989
443857
  description: "Delete files or directories (rm, rm -rf, etc.)",
443990
443858
  enabled: true,
443991
443859
  isPreset: true
443992
443860
  },
443993
443861
  {
443994
443862
  id: "rmdir",
443995
- pattern: "*rmdir*",
443863
+ pattern: "rmdir ",
443996
443864
  description: "Remove directories",
443997
443865
  enabled: true,
443998
443866
  isPreset: true
443999
443867
  },
444000
443868
  {
444001
443869
  id: "unlink",
444002
- pattern: "*unlink*",
443870
+ pattern: "unlink ",
444003
443871
  description: "Delete files using unlink command",
444004
443872
  enabled: true,
444005
443873
  isPreset: true
444006
443874
  },
444007
443875
  {
444008
443876
  id: "mv-to-trash",
444009
- pattern: "*mv * /tmp*",
443877
+ pattern: "mv * /tmp",
444010
443878
  description: "Move files to trash/tmp (potential data loss)",
444011
- enabled: true,
443879
+ enabled: false,
444012
443880
  isPreset: true
444013
443881
  },
444014
443882
  {
444015
443883
  id: "chmod",
444016
- pattern: "*chmod*",
443884
+ pattern: "chmod ",
444017
443885
  description: "Change file permissions",
444018
- enabled: true,
443886
+ enabled: false,
444019
443887
  isPreset: true
444020
443888
  },
444021
443889
  {
444022
443890
  id: "chown",
444023
- pattern: "*chown*",
443891
+ pattern: "chown ",
444024
443892
  description: "Change file ownership",
444025
- enabled: true,
443893
+ enabled: false,
444026
443894
  isPreset: true
444027
443895
  },
444028
443896
  {
444029
443897
  id: "dd",
444030
- pattern: "*dd*",
443898
+ pattern: "dd ",
444031
443899
  description: "Low-level data copy (disk operations)",
444032
443900
  enabled: true,
444033
443901
  isPreset: true
444034
443902
  },
444035
443903
  {
444036
443904
  id: "mkfs",
444037
- pattern: "*mkfs*",
443905
+ pattern: "mkfs",
444038
443906
  description: "Format filesystem",
444039
443907
  enabled: true,
444040
443908
  isPreset: true
444041
443909
  },
444042
443910
  {
444043
443911
  id: "fdisk",
444044
- pattern: "*fdisk*",
443912
+ pattern: "fdisk ",
444045
443913
  description: "Disk partition manipulation",
444046
443914
  enabled: true,
444047
443915
  isPreset: true
444048
443916
  },
444049
443917
  {
444050
443918
  id: "killall",
444051
- pattern: "*killall*",
443919
+ pattern: "killall ",
444052
443920
  description: "Kill all processes by name",
444053
- enabled: true,
443921
+ enabled: false,
444054
443922
  isPreset: true
444055
443923
  },
444056
443924
  {
444057
443925
  id: "pkill",
444058
- pattern: "*pkill*",
443926
+ pattern: "pkill ",
444059
443927
  description: "Kill processes by pattern",
444060
- enabled: true,
443928
+ enabled: false,
444061
443929
  isPreset: true
444062
443930
  },
444063
443931
  {
444064
443932
  id: "reboot",
444065
- pattern: "*reboot*",
443933
+ pattern: "reboot",
444066
443934
  description: "Reboot the system",
444067
443935
  enabled: true,
444068
443936
  isPreset: true
444069
443937
  },
444070
443938
  {
444071
443939
  id: "shutdown",
444072
- pattern: "*shutdown*",
443940
+ pattern: "shutdown ",
444073
443941
  description: "Shutdown the system",
444074
443942
  enabled: true,
444075
443943
  isPreset: true
444076
443944
  },
444077
443945
  {
444078
443946
  id: "sudo",
444079
- pattern: "*sudo*",
443947
+ pattern: "sudo ",
444080
443948
  description: "Execute commands with superuser privileges",
444081
- enabled: true,
443949
+ enabled: false,
444082
443950
  isPreset: true
444083
443951
  },
444084
443952
  {
444085
443953
  id: "su",
444086
- pattern: "*su*",
443954
+ pattern: "su ",
444087
443955
  description: "Switch user",
444088
- enabled: true,
443956
+ enabled: false,
444089
443957
  isPreset: true
444090
443958
  },
444091
443959
  {
444092
443960
  id: "curl-post",
444093
- pattern: "*curl*-X POST*",
443961
+ pattern: "curl*-X POST",
444094
443962
  description: "HTTP POST requests (potential data transmission)",
444095
443963
  enabled: false,
444096
443964
  isPreset: true
444097
443965
  },
444098
443966
  {
444099
443967
  id: "wget",
444100
- pattern: "*wget*",
443968
+ pattern: "wget ",
444101
443969
  description: "Download files from internet",
444102
443970
  enabled: false,
444103
443971
  isPreset: true
444104
443972
  },
444105
443973
  {
444106
443974
  id: "git-push",
444107
- pattern: "git push*",
443975
+ pattern: "git push",
444108
443976
  description: "Push code to remote repository",
444109
443977
  enabled: false,
444110
443978
  isPreset: true
444111
443979
  },
444112
443980
  {
444113
443981
  id: "git-force-push",
444114
- pattern: "*git push*--force*",
443982
+ pattern: "git push*--force",
444115
443983
  description: "Force push to remote repository (destructive)",
444116
443984
  enabled: true,
444117
443985
  isPreset: true
444118
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
+ },
444119
443994
  {
444120
443995
  id: "git-reset-hard",
444121
- pattern: "*git reset*--hard*",
443996
+ pattern: "git reset*--hard",
444122
443997
  description: "Hard reset git repository (destructive)",
444123
443998
  enabled: true,
444124
443999
  isPreset: true
444125
444000
  },
444126
444001
  {
444127
444002
  id: "git-clean",
444128
- pattern: "*git clean*",
444003
+ pattern: "git clean*-f",
444129
444004
  description: "Remove untracked files from git repository",
444130
444005
  enabled: true,
444131
444006
  isPreset: true
444132
444007
  },
444133
444008
  {
444134
444009
  id: "git-revert",
444135
- pattern: "*git revert*",
444010
+ pattern: "git revert",
444136
444011
  description: "Revert git commits",
444137
- enabled: true,
444012
+ enabled: false,
444138
444013
  isPreset: true
444139
444014
  },
444140
444015
  {
444141
444016
  id: "git-reset",
444142
- pattern: "*git reset*",
444017
+ pattern: "git reset ",
444143
444018
  description: "Reset git repository state",
444144
- enabled: true,
444019
+ enabled: false,
444145
444020
  isPreset: true
444146
444021
  },
444147
444022
  {
444148
444023
  id: "npm-publish",
444149
- pattern: "*npm publish*",
444024
+ pattern: "npm publish",
444150
444025
  description: "Publish package to npm registry",
444151
444026
  enabled: true,
444152
444027
  isPreset: true
444153
444028
  },
444154
444029
  {
444155
444030
  id: "docker-rm",
444156
- pattern: "*docker rm*",
444031
+ pattern: "docker rm",
444157
444032
  description: "Remove Docker containers",
444158
444033
  enabled: false,
444159
444034
  isPreset: true
444160
444035
  },
444161
444036
  {
444162
444037
  id: "docker-rmi",
444163
- pattern: "*docker rmi*",
444038
+ pattern: "docker rmi",
444164
444039
  description: "Remove Docker images",
444165
444040
  enabled: false,
444166
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
444167
444063
  }
444168
444064
  ];
444169
444065
  }
@@ -556682,10 +556578,19 @@ function TodoTree({ todos }) {
556682
556578
  const completedCount = todos.reduce((acc, t2) => acc + (t2.status === "completed" ? 1 : 0), 0);
556683
556579
  const sortedTodos = (0, import_react104.useMemo)(() => {
556684
556580
  return todos.map((t2, originalIndex) => ({ t: t2, originalIndex })).slice().sort((a, b) => {
556685
- const aCompleted = a.t.status === "completed" ? 1 : 0;
556686
- const bCompleted = b.t.status === "completed" ? 1 : 0;
556687
- if (aCompleted !== bCompleted)
556688
- return aCompleted - bCompleted;
556581
+ const getPriority = (status) => {
556582
+ if (status === "inProgress")
556583
+ return 0;
556584
+ if (status === "pending")
556585
+ return 1;
556586
+ if (status === "completed")
556587
+ return 2;
556588
+ return 1;
556589
+ };
556590
+ const aPriority = getPriority(a.t.status);
556591
+ const bPriority = getPriority(b.t.status);
556592
+ if (aPriority !== bPriority)
556593
+ return aPriority - bPriority;
556689
556594
  return a.originalIndex - b.originalIndex;
556690
556595
  }).map(({ t: t2 }) => t2);
556691
556596
  }, [todos]);
@@ -556702,10 +556607,18 @@ function TodoTree({ todos }) {
556702
556607
  const visibleTodos = sortedTodos.slice(pageIndex * PAGE_SIZE2, pageIndex * PAGE_SIZE2 + PAGE_SIZE2);
556703
556608
  const hiddenCount = Math.max(0, sortedTodos.length - visibleTodos.length);
556704
556609
  const getStatusIcon = (status) => {
556705
- return status === "completed" ? "\u2713" : "\u25CB";
556610
+ if (status === "completed")
556611
+ return "\u2713";
556612
+ if (status === "inProgress")
556613
+ return "~";
556614
+ return "\u25CB";
556706
556615
  };
556707
556616
  const getStatusColor = (status) => {
556708
- return status === "completed" ? theme14.colors.success : theme14.colors.menuSecondary;
556617
+ if (status === "completed")
556618
+ return theme14.colors.success;
556619
+ if (status === "inProgress")
556620
+ return theme14.colors.warning;
556621
+ return theme14.colors.menuSecondary;
556709
556622
  };
556710
556623
  const renderTodoLine = (todo, index) => {
556711
556624
  const statusIcon = getStatusIcon(todo.status);
@@ -558094,11 +558007,7 @@ var init_AskUserQuestion = __esm({
558094
558007
 
558095
558008
  // dist/ui/components/bash/BashCommandConfirmation.js
558096
558009
  function sanitizePreviewLine(text3) {
558097
- const withoutOsc = text3.replace(/\x1B\][^\x07]*(?:\x07|\x1B\\)/g, "");
558098
- const withoutAnsi = withoutOsc.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, "");
558099
- const withoutControls = withoutAnsi.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, "");
558100
- const withoutTabs = withoutControls.replace(/\t/g, " ");
558101
- return withoutTabs.replace(/[\s\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+$/g, "").trim();
558010
+ return text3.replace(/\x1B\][^\x07]*(?:\x07|\x1B\\)/g, "").replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, "").replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, "").replace(/\t/g, " ").replace(/[\s\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+$/g, "").trim();
558102
558011
  }
558103
558012
  function truncateCommand2(text3, maxWidth = 100) {
558104
558013
  if (text3.length <= maxWidth) {
@@ -558267,13 +558176,16 @@ function BashCommandExecutionStatus({ command, timeout: timeout2 = 3e4, terminal
558267
558176
  }
558268
558177
  };
558269
558178
  }, []);
558270
- const omittedCount = Math.max(0, totalCommittedLineCountRef.current - maxOutputLines);
558271
- const visibleOutputLines = omittedCount > 0 ? displayOutputLines.slice(-(maxOutputLines - 1)) : displayOutputLines.slice(-maxOutputLines);
558272
- const rawProcessedOutput = omittedCount > 0 ? [...visibleOutputLines, `... (${omittedCount} lines omitted)`] : visibleOutputLines;
558273
- const processedOutput = [...rawProcessedOutput];
558274
- while (processedOutput.length < maxOutputLines) {
558275
- processedOutput.unshift("");
558276
- }
558179
+ const processedOutput = (0, import_react112.useMemo)(() => {
558180
+ const omittedCount = Math.max(0, totalCommittedLineCountRef.current - maxOutputLines);
558181
+ const visibleOutputLines = omittedCount > 0 ? displayOutputLines.slice(-(maxOutputLines - 1)) : displayOutputLines.slice(-maxOutputLines);
558182
+ const rawProcessedOutput = omittedCount > 0 ? [...visibleOutputLines, `... (${omittedCount} lines omitted)`] : visibleOutputLines;
558183
+ const output3 = [...rawProcessedOutput];
558184
+ while (output3.length < maxOutputLines) {
558185
+ output3.unshift("");
558186
+ }
558187
+ return output3;
558188
+ }, [displayOutputLines, maxOutputLines]);
558277
558189
  const handleInputSubmit = (value) => {
558278
558190
  sendTerminalInput(value);
558279
558191
  setInputValue("");
@@ -558297,7 +558209,7 @@ function BashCommandExecutionStatus({ command, timeout: timeout2 = 3e4, terminal
558297
558209
  { paddingLeft: 2 },
558298
558210
  import_react112.default.createElement(Text, { dimColor: true, wrap: "truncate" }, displayCommand)
558299
558211
  ),
558300
- import_react112.default.createElement(Box_default, { flexDirection: "column", paddingLeft: 2, marginTop: 1, height: maxOutputLines }, processedOutput.map((line, index) => import_react112.default.createElement(Text, { key: index, wrap: "truncate", dimColor: true }, truncateText2(sanitizePreviewLine(line), maxCommandWidth)))),
558212
+ import_react112.default.createElement(Box_default, { flexDirection: "column", paddingLeft: 2, marginTop: 1, height: maxOutputLines }, processedOutput.map((line, index) => import_react112.default.createElement(Text, { key: index, wrap: "truncate", dimColor: true }, truncateText2(line, maxCommandWidth)))),
558301
558213
  needsInput && import_react112.default.createElement(
558302
558214
  Box_default,
558303
558215
  { flexDirection: "column", marginTop: 1, paddingLeft: 2 },
@@ -558867,6 +558779,22 @@ function CodebaseSearchStatus({ status }) {
558867
558779
  ))
558868
558780
  );
558869
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
+ }
558870
558798
  return null;
558871
558799
  }
558872
558800
  var import_react117;
@@ -558954,7 +558882,7 @@ var init_CustomCommandConfigPanel = __esm({
558954
558882
  "use strict";
558955
558883
  import_react119 = __toESM(require_react(), 1);
558956
558884
  await init_build2();
558957
- await init_build4();
558885
+ await init_build5();
558958
558886
  init_ThemeContext();
558959
558887
  init_I18nContext();
558960
558888
  init_custom();
@@ -558970,7 +558898,19 @@ var init_CustomCommandConfigPanel = __esm({
558970
558898
  const [errorMessage, setErrorMessage] = (0, import_react119.useState)("");
558971
558899
  use_input_default((input2, key) => {
558972
558900
  if (key.escape) {
558973
- 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
+ }
558974
558914
  return;
558975
558915
  }
558976
558916
  if (step === "type") {
@@ -558993,10 +558933,10 @@ var init_CustomCommandConfigPanel = __esm({
558993
558933
  if (input2.toLowerCase() === "y") {
558994
558934
  handleConfirm();
558995
558935
  } else if (input2.toLowerCase() === "n") {
558996
- handleCancel();
558936
+ setStep("location");
558997
558937
  }
558998
558938
  }
558999
- }, { isActive: step === "type" || step === "location" || step === "confirm" });
558939
+ }, { isActive: true });
559000
558940
  const handleNameSubmit = (0, import_react119.useCallback)((value) => {
559001
558941
  if (value.trim()) {
559002
558942
  const trimmedName = value.trim();
@@ -559062,7 +559002,7 @@ var init_CustomCommandConfigPanel = __esm({
559062
559002
  { marginBottom: 1 },
559063
559003
  import_react119.default.createElement(Text, { color: theme14.colors.text }, t.customCommand.nameLabel)
559064
559004
  ),
559065
- 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 }),
559066
559006
  errorMessage && import_react119.default.createElement(
559067
559007
  Box_default,
559068
559008
  { marginTop: 1 },
@@ -559093,7 +559033,7 @@ var init_CustomCommandConfigPanel = __esm({
559093
559033
  { marginBottom: 1 },
559094
559034
  import_react119.default.createElement(Text, { color: theme14.colors.text }, t.customCommand.commandLabel)
559095
559035
  ),
559096
- 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 }),
559097
559037
  import_react119.default.createElement(
559098
559038
  Box_default,
559099
559039
  { marginTop: 1 },
@@ -559135,7 +559075,7 @@ var init_CustomCommandConfigPanel = __esm({
559135
559075
  { marginBottom: 1 },
559136
559076
  import_react119.default.createElement(Text, { dimColor: true }, t.customCommand.descriptionHint)
559137
559077
  ),
559138
- 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 }),
559139
559079
  import_react119.default.createElement(
559140
559080
  Box_default,
559141
559081
  { marginTop: 1 },
@@ -559390,7 +559330,7 @@ var init_SkillsCreationPanel = __esm({
559390
559330
  import_react120 = __toESM(require_react(), 1);
559391
559331
  await init_build2();
559392
559332
  await init_build3();
559393
- await init_build4();
559333
+ await init_build5();
559394
559334
  init_ThemeContext();
559395
559335
  init_I18nContext();
559396
559336
  init_skills();
@@ -559515,10 +559455,31 @@ var init_SkillsCreationPanel = __esm({
559515
559455
  }
559516
559456
  };
559517
559457
  }, [step, requirement, projectRoot, t.skillsCreation.errorGeneration]);
559518
- const keyHandlingActive = step === "mode" || step === "location" || step === "confirm" || step === "ai-location" || step === "ai-generating" || step === "ai-preview" || step === "ai-error";
559519
559458
  use_input_default((input2, key) => {
559520
559459
  if (key.escape) {
559521
- 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
+ }
559522
559483
  return;
559523
559484
  }
559524
559485
  if (step === "mode") {
@@ -559550,7 +559511,7 @@ var init_SkillsCreationPanel = __esm({
559550
559511
  if (input2.toLowerCase() === "y") {
559551
559512
  handleConfirmManual();
559552
559513
  } else if (input2.toLowerCase() === "n") {
559553
- handleCancel();
559514
+ setStep("location");
559554
559515
  }
559555
559516
  return;
559556
559517
  }
@@ -559582,7 +559543,7 @@ var init_SkillsCreationPanel = __esm({
559582
559543
  setStep("ai-generating");
559583
559544
  }
559584
559545
  }
559585
- }, { isActive: keyHandlingActive });
559546
+ }, { isActive: true });
559586
559547
  return import_react120.default.createElement(
559587
559548
  Box_default,
559588
559549
  { flexDirection: "column", padding: 1, borderStyle: "round", borderColor: theme14.colors.border },
@@ -559644,7 +559605,7 @@ var init_SkillsCreationPanel = __esm({
559644
559605
  { marginBottom: 1 },
559645
559606
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.nameHint)
559646
559607
  ),
559647
- 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 }),
559648
559609
  errorMessage && import_react120.default.createElement(
559649
559610
  Box_default,
559650
559611
  { marginTop: 1 },
@@ -559680,7 +559641,7 @@ var init_SkillsCreationPanel = __esm({
559680
559641
  { marginBottom: 1 },
559681
559642
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.descriptionHint)
559682
559643
  ),
559683
- 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 }),
559684
559645
  import_react120.default.createElement(
559685
559646
  Box_default,
559686
559647
  { marginTop: 1 },
@@ -559840,7 +559801,7 @@ var init_SkillsCreationPanel = __esm({
559840
559801
  { marginBottom: 1 },
559841
559802
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.requirementHint)
559842
559803
  ),
559843
- 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 }),
559844
559805
  import_react120.default.createElement(
559845
559806
  Box_default,
559846
559807
  { marginTop: 1 },
@@ -560095,7 +560056,7 @@ var init_SkillsCreationPanel = __esm({
560095
560056
  { marginBottom: 1 },
560096
560057
  import_react120.default.createElement(Text, { dimColor: true }, t.skillsCreation.editNameHint)
560097
560058
  ),
560098
- 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 }),
560099
560060
  errorMessage && import_react120.default.createElement(
560100
560061
  Box_default,
560101
560062
  { marginTop: 1 },
@@ -560136,7 +560097,11 @@ var init_RoleCreationPanel = __esm({
560136
560097
  const keyHandlingActive = step === "location" || step === "confirm";
560137
560098
  use_input_default((input2, key) => {
560138
560099
  if (key.escape) {
560139
- handleCancel();
560100
+ if (step === "confirm") {
560101
+ setStep("location");
560102
+ } else {
560103
+ handleCancel();
560104
+ }
560140
560105
  return;
560141
560106
  }
560142
560107
  if (step === "location") {
@@ -560153,7 +560118,7 @@ var init_RoleCreationPanel = __esm({
560153
560118
  if (input2.toLowerCase() === "y") {
560154
560119
  handleConfirm();
560155
560120
  } else if (input2.toLowerCase() === "n") {
560156
- handleCancel();
560121
+ setStep("location");
560157
560122
  }
560158
560123
  }
560159
560124
  }, { isActive: keyHandlingActive });
@@ -561385,15 +561350,11 @@ function WorkingDirectoryPanel({ onClose }) {
561385
561350
  }
561386
561351
  return;
561387
561352
  }
561388
- if (key.escape) {
561389
- if (confirmDelete) {
561353
+ if (confirmDelete) {
561354
+ if (key.escape) {
561390
561355
  setConfirmDelete(false);
561391
561356
  return;
561392
561357
  }
561393
- onClose();
561394
- return;
561395
- }
561396
- if (confirmDelete) {
561397
561358
  if (input2.toLowerCase() === "y") {
561398
561359
  const pathsToDelete = Array.from(markedDirs);
561399
561360
  removeWorkingDirectories(pathsToDelete).then(() => {
@@ -561412,6 +561373,10 @@ function WorkingDirectoryPanel({ onClose }) {
561412
561373
  }
561413
561374
  return;
561414
561375
  }
561376
+ if (key.escape) {
561377
+ onClose();
561378
+ return;
561379
+ }
561415
561380
  if (key.upArrow) {
561416
561381
  setSelectedIndex((prev) => Math.max(0, prev - 1));
561417
561382
  return;
@@ -564804,6 +564769,7 @@ function formatTodoContext(todos) {
564804
564769
  }
564805
564770
  const statusSymbol = {
564806
564771
  pending: "[ ]",
564772
+ inProgress: "[~]",
564807
564773
  completed: "[x]"
564808
564774
  };
564809
564775
  const lines = [
@@ -568877,30 +568843,17 @@ var init_codebaseIndexAgent = __esm({
568877
568843
  this.progressCallback = progressCallback;
568878
568844
  }
568879
568845
  try {
568880
- const patterns = Array.from(_CodebaseIndexAgent.CODE_EXTENSIONS).map((ext) => path50.join(this.projectRoot, "**", `*${ext}`));
568881
- this.fileWatcher = esm_default.watch(patterns, {
568882
- ignored: [
568883
- "**/node_modules/**",
568884
- "**/.git/**",
568885
- "**/.snow/**",
568886
- "**/dist/**",
568887
- "**/build/**",
568888
- "**/out/**",
568889
- "**/coverage/**",
568890
- "**/.next/**",
568891
- "**/.nuxt/**",
568892
- "**/.cache/**",
568893
- "**/*.min.js",
568894
- "**/*.min.css",
568895
- "**/*.map",
568896
- "**/package-lock.json",
568897
- "**/yarn.lock",
568898
- "**/pnpm-lock.yaml"
568899
- ],
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
+ },
568900
568854
  ignoreInitial: true,
568901
- persistent: true,
568902
- depth: 20
568903
- // Removed awaitWriteFinish - using debounce instead to reduce polling overhead
568855
+ // Don't trigger events for initial scan
568856
+ persistent: true
568904
568857
  });
568905
568858
  this.fileWatcher.on("add", (filePath) => {
568906
568859
  const ext = path50.extname(filePath);
@@ -570668,16 +570621,13 @@ function usePanelState() {
570668
570621
  return true;
570669
570622
  }
570670
570623
  if (showCustomCommandConfig) {
570671
- setShowCustomCommandConfig(false);
570672
- return true;
570624
+ return false;
570673
570625
  }
570674
570626
  if (showSkillsCreation) {
570675
- setShowSkillsCreation(false);
570676
- return true;
570627
+ return false;
570677
570628
  }
570678
570629
  if (showRoleCreation) {
570679
- setShowRoleCreation(false);
570680
- return true;
570630
+ return false;
570681
570631
  }
570682
570632
  if (showRoleDeletion) {
570683
570633
  setShowRoleDeletion(false);
@@ -570688,8 +570638,7 @@ function usePanelState() {
570688
570638
  return true;
570689
570639
  }
570690
570640
  if (showWorkingDirPanel) {
570691
- setShowWorkingDirPanel(false);
570692
- return true;
570641
+ return false;
570693
570642
  }
570694
570643
  if (showReviewCommitPanel) {
570695
570644
  setShowReviewCommitPanel(false);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "snow-ai",
3
- "version": "0.6.22",
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.22",
3
+ "version": "0.6.24",
4
4
  "description": "Agentic coding in your terminal",
5
5
  "license": "MIT",
6
6
  "bin": {