centaurus-cli 2.9.4 → 2.9.6

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.
Files changed (98) hide show
  1. package/dist/cli-adapter.d.ts +29 -4
  2. package/dist/cli-adapter.d.ts.map +1 -1
  3. package/dist/cli-adapter.js +700 -121
  4. package/dist/cli-adapter.js.map +1 -1
  5. package/dist/config/slash-commands.d.ts.map +1 -1
  6. package/dist/config/slash-commands.js +7 -0
  7. package/dist/config/slash-commands.js.map +1 -1
  8. package/dist/context/context-manager.d.ts +10 -0
  9. package/dist/context/context-manager.d.ts.map +1 -1
  10. package/dist/context/context-manager.js +17 -0
  11. package/dist/context/context-manager.js.map +1 -1
  12. package/dist/context/handlers/docker-handler.d.ts +7 -1
  13. package/dist/context/handlers/docker-handler.d.ts.map +1 -1
  14. package/dist/context/handlers/docker-handler.js +89 -16
  15. package/dist/context/handlers/docker-handler.js.map +1 -1
  16. package/dist/context/handlers/ssh-handler.d.ts +47 -1
  17. package/dist/context/handlers/ssh-handler.d.ts.map +1 -1
  18. package/dist/context/handlers/ssh-handler.js +546 -73
  19. package/dist/context/handlers/ssh-handler.js.map +1 -1
  20. package/dist/context/handlers/wsl-handler.d.ts +5 -1
  21. package/dist/context/handlers/wsl-handler.d.ts.map +1 -1
  22. package/dist/context/handlers/wsl-handler.js +24 -6
  23. package/dist/context/handlers/wsl-handler.js.map +1 -1
  24. package/dist/context/subshell-handler.d.ts +8 -2
  25. package/dist/context/subshell-handler.d.ts.map +1 -1
  26. package/dist/index.js +12 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/services/checkpoint-manager.d.ts +162 -0
  29. package/dist/services/checkpoint-manager.d.ts.map +1 -0
  30. package/dist/services/checkpoint-manager.js +926 -0
  31. package/dist/services/checkpoint-manager.js.map +1 -0
  32. package/dist/services/local-chat-storage.d.ts +3 -1
  33. package/dist/services/local-chat-storage.d.ts.map +1 -1
  34. package/dist/services/local-chat-storage.js +8 -3
  35. package/dist/services/local-chat-storage.js.map +1 -1
  36. package/dist/tools/background-command.d.ts.map +1 -1
  37. package/dist/tools/background-command.js +132 -24
  38. package/dist/tools/background-command.js.map +1 -1
  39. package/dist/tools/command.d.ts.map +1 -1
  40. package/dist/tools/command.js +106 -42
  41. package/dist/tools/command.js.map +1 -1
  42. package/dist/tools/create-image.d.ts.map +1 -1
  43. package/dist/tools/create-image.js +43 -18
  44. package/dist/tools/create-image.js.map +1 -1
  45. package/dist/tools/file-ops.d.ts.map +1 -1
  46. package/dist/tools/file-ops.js +12 -12
  47. package/dist/tools/file-ops.js.map +1 -1
  48. package/dist/tools/get-diff.d.ts +9 -45
  49. package/dist/tools/get-diff.d.ts.map +1 -1
  50. package/dist/tools/get-diff.js +288 -171
  51. package/dist/tools/get-diff.js.map +1 -1
  52. package/dist/tools/grep-search.d.ts +1 -1
  53. package/dist/tools/grep-search.d.ts.map +1 -1
  54. package/dist/tools/grep-search.js +80 -1
  55. package/dist/tools/grep-search.js.map +1 -1
  56. package/dist/tools/types.d.ts +3 -0
  57. package/dist/tools/types.d.ts.map +1 -1
  58. package/dist/ui/components/App.d.ts +8 -0
  59. package/dist/ui/components/App.d.ts.map +1 -1
  60. package/dist/ui/components/App.js +256 -66
  61. package/dist/ui/components/App.js.map +1 -1
  62. package/dist/ui/components/Breadcrumbs.d.ts.map +1 -1
  63. package/dist/ui/components/Breadcrumbs.js +22 -2
  64. package/dist/ui/components/Breadcrumbs.js.map +1 -1
  65. package/dist/ui/components/ConfirmPrompt.d.ts +2 -0
  66. package/dist/ui/components/ConfirmPrompt.d.ts.map +1 -1
  67. package/dist/ui/components/ConfirmPrompt.js +8 -3
  68. package/dist/ui/components/ConfirmPrompt.js.map +1 -1
  69. package/dist/ui/components/InputBox.d.ts +6 -0
  70. package/dist/ui/components/InputBox.d.ts.map +1 -1
  71. package/dist/ui/components/InputBox.js +188 -23
  72. package/dist/ui/components/InputBox.js.map +1 -1
  73. package/dist/ui/components/InteractiveShell.d.ts +2 -0
  74. package/dist/ui/components/InteractiveShell.d.ts.map +1 -1
  75. package/dist/ui/components/InteractiveShell.js +88 -26
  76. package/dist/ui/components/InteractiveShell.js.map +1 -1
  77. package/dist/ui/components/KeyboardHelp.d.ts.map +1 -1
  78. package/dist/ui/components/KeyboardHelp.js +14 -6
  79. package/dist/ui/components/KeyboardHelp.js.map +1 -1
  80. package/dist/ui/components/ToolExecutionMessage.d.ts.map +1 -1
  81. package/dist/ui/components/ToolExecutionMessage.js +35 -16
  82. package/dist/ui/components/ToolExecutionMessage.js.map +1 -1
  83. package/dist/utils/ansi-encoder.d.ts +5 -0
  84. package/dist/utils/ansi-encoder.d.ts.map +1 -1
  85. package/dist/utils/ansi-encoder.js +12 -5
  86. package/dist/utils/ansi-encoder.js.map +1 -1
  87. package/dist/utils/editor-utils.d.ts +14 -0
  88. package/dist/utils/editor-utils.d.ts.map +1 -1
  89. package/dist/utils/editor-utils.js +172 -0
  90. package/dist/utils/editor-utils.js.map +1 -1
  91. package/dist/utils/input-classifier.d.ts.map +1 -1
  92. package/dist/utils/input-classifier.js +2 -1
  93. package/dist/utils/input-classifier.js.map +1 -1
  94. package/dist/utils/terminal-output.d.ts +3 -1
  95. package/dist/utils/terminal-output.d.ts.map +1 -1
  96. package/dist/utils/terminal-output.js +235 -195
  97. package/dist/utils/terminal-output.js.map +1 -1
  98. package/package.json +3 -1
@@ -1,6 +1,6 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Box, Text, useInput } from 'ink';
3
- export const ConfirmPrompt = React.memo(({ message, onYes, onNo, onFeedback, showFeedbackOption = false }) => {
3
+ export const ConfirmPrompt = React.memo(({ message, onYes, onNo, onFeedback, showFeedbackOption = false, warningMessage }) => {
4
4
  const [selected, setSelected] = useState('yes');
5
5
  useInput((input, key) => {
6
6
  if (key.upArrow || key.downArrow) {
@@ -45,7 +45,11 @@ export const ConfirmPrompt = React.memo(({ message, onYes, onNo, onFeedback, sho
45
45
  return;
46
46
  }
47
47
  });
48
- return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: "#ffaa00", paddingX: 1, paddingY: 1 },
48
+ return (React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: warningMessage ? "#ff6600" : "#ffaa00", paddingX: 1, paddingY: 1 },
49
+ warningMessage && (React.createElement(Box, { marginBottom: 1, borderStyle: "single", borderColor: "#ff3366", paddingX: 1 },
50
+ React.createElement(Text, { color: "#ff3366", bold: true },
51
+ "\u26A0\uFE0F ",
52
+ warningMessage))),
49
53
  React.createElement(Box, { marginBottom: 1 },
50
54
  React.createElement(Text, { color: "#ffaa00", bold: true }, message)),
51
55
  React.createElement(Box, { flexDirection: "column" },
@@ -64,6 +68,7 @@ export const ConfirmPrompt = React.memo(({ message, onYes, onNo, onFeedback, sho
64
68
  }, (prevProps, nextProps) => {
65
69
  // Only re-render if message or showFeedbackOption changes
66
70
  return prevProps.message === nextProps.message &&
67
- prevProps.showFeedbackOption === nextProps.showFeedbackOption;
71
+ prevProps.showFeedbackOption === nextProps.showFeedbackOption &&
72
+ prevProps.warningMessage === nextProps.warningMessage;
68
73
  });
69
74
  //# sourceMappingURL=ConfirmPrompt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmPrompt.js","sourceRoot":"","sources":["../../../src/ui/components/ConfirmPrompt.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfirmPrompt.js","sourceRoot":"","sources":["../../../src/ui/components/ConfirmPrompt.tsx"],"names":[],"mappings":"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"}
@@ -30,6 +30,12 @@ interface InputBoxProps {
30
30
  subAgentCount?: number;
31
31
  aiAutoSuggestEnabled?: boolean;
32
32
  sessionCommands?: string[];
33
+ getCheckpoints?: () => Array<{
34
+ id: string;
35
+ prompt: string;
36
+ timestamp: Date;
37
+ }>;
38
+ onSetInputSetup?: (callback: (value: string) => void) => void;
33
39
  }
34
40
  export declare const InputBox: React.FC<InputBoxProps>;
35
41
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAWzD,OAAO,EAAyC,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAM5G,UAAU,aAAa;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,eAAe,EAAE,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AA+CD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAqnE3C,CAAC"}
1
+ {"version":3,"file":"InputBox.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAWzD,OAAO,EAAyC,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAM5G,UAAU,aAAa;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,eAAe,EAAE,CAAC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IACpE,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAC9E,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;CAC/D;AA+CD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAkyE3C,CAAC"}
@@ -52,7 +52,7 @@ const getVisualLines = (text, width) => {
52
52
  });
53
53
  return visualLines;
54
54
  };
55
- export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...', autoAcceptMode, model, planMode = false, commandMode = false, backgroundMode = false, currentWorkingDirectory, commandHistory = [], onToggleAutoAccept, onToggleCommandMode, onToggleBackgroundMode, isActive = true, subshellContext, subshellContextStack, currentTokens = 0, maxTokens = 1000000, contextLimitReached = false, isShellRunning = false, backgroundTaskCount = 0, initialValue = '', onValueChange, onSetAutoModeSetup, sessionQuotaExhausted = false, sessionQuotaTimeRemaining = '', subAgentCount = 0, aiAutoSuggestEnabled = false, sessionCommands = [] }) => {
55
+ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...', autoAcceptMode, model, planMode = false, commandMode = false, backgroundMode = false, currentWorkingDirectory, commandHistory = [], onToggleAutoAccept, onToggleCommandMode, onToggleBackgroundMode, isActive = true, subshellContext, subshellContextStack, currentTokens = 0, maxTokens = 1000000, contextLimitReached = false, isShellRunning = false, backgroundTaskCount = 0, initialValue = '', onValueChange, onSetAutoModeSetup, sessionQuotaExhausted = false, sessionQuotaTimeRemaining = '', subAgentCount = 0, aiAutoSuggestEnabled = false, sessionCommands = [], getCheckpoints, onSetInputSetup }) => {
56
56
  // Use initialValue for first mount, but manage state internally after that
57
57
  const [value, setValueInternal] = useState(initialValue);
58
58
  const [cursorOffset, setCursorOffset] = useState(0);
@@ -152,7 +152,24 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
152
152
  useEffect(() => {
153
153
  CommandHistoryManager.getInstance().load();
154
154
  }, []);
155
+ // Register setInput callback for external control (e.g., for revert functionality)
156
+ useEffect(() => {
157
+ if (onSetInputSetup) {
158
+ onSetInputSetup((newValue) => {
159
+ setValue(newValue);
160
+ setCursorOffset(newValue.length);
161
+ });
162
+ }
163
+ }, [onSetInputSetup, setValue, setCursorOffset]);
155
164
  // Register setIsAutoMode callback for external control (e.g., after background task starts)
165
+ useEffect(() => {
166
+ if (onSetInputSetup) {
167
+ onSetInputSetup((newValue) => {
168
+ setValue(newValue);
169
+ setCursorOffset(newValue.length);
170
+ });
171
+ }
172
+ }, [onSetInputSetup, setValue, setCursorOffset]);
156
173
  useEffect(() => {
157
174
  if (onSetAutoModeSetup) {
158
175
  onSetAutoModeSetup((enabled) => {
@@ -238,7 +255,7 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
238
255
  else {
239
256
  setAutocompleteSuggestion(null);
240
257
  }
241
- }, [value, commandMode, isAutoMode, detectedIntent, currentDir, currentEnvironment]);
258
+ }, [value, commandMode, isAutoMode, detectedIntent, aiAutoSuggestEnabled, currentDir, currentEnvironment]);
242
259
  // AI Autocomplete Logic (5-second debounce)
243
260
  useEffect(() => {
244
261
  // Clear AI suggestion when value changes
@@ -557,6 +574,13 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
557
574
  setCursorOffset(newValue.length);
558
575
  setSlashAutocompleteVisible(false);
559
576
  }
577
+ else if (value.startsWith('/revert ')) {
578
+ // We're selecting a checkpoint from /revert dropdown
579
+ const newValue = `/revert ${selected.name}`;
580
+ setValue(newValue);
581
+ setCursorOffset(newValue.length);
582
+ setSlashAutocompleteVisible(false);
583
+ }
560
584
  else if (value.startsWith('/models ') || value.startsWith('/model ')) {
561
585
  // We're selecting a models subcommand
562
586
  const prefix = value.startsWith('/models ') ? '/models ' : '/model ';
@@ -758,6 +782,34 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
758
782
  setSlashAutocompleteVisible(false);
759
783
  }
760
784
  }
785
+ else if (selected.name === 'revert') {
786
+ // For revert, show checkpoints immediately
787
+ const checkpoints = getCheckpoints ? getCheckpoints() : [];
788
+ if (checkpoints.length === 0) {
789
+ setSlashAutocompleteCommands([{
790
+ name: '(no checkpoints)',
791
+ description: 'Ask AI a question first to create a checkpoint'
792
+ }]);
793
+ setSlashAutocompleteSelectedIndex(0);
794
+ setSlashAutocompleteScrollOffset(0);
795
+ // Keep autocomplete visible
796
+ }
797
+ else {
798
+ const checkpointCommands = checkpoints
799
+ .slice(0, 10)
800
+ .map(cp => {
801
+ const truncatedPrompt = cp.prompt.length > 50 ? cp.prompt.slice(0, 50) + '...' : cp.prompt;
802
+ return {
803
+ name: cp.id,
804
+ description: truncatedPrompt
805
+ };
806
+ });
807
+ setSlashAutocompleteCommands(checkpointCommands);
808
+ setSlashAutocompleteSelectedIndex(0);
809
+ setSlashAutocompleteScrollOffset(0);
810
+ // Keep autocomplete visible
811
+ }
812
+ }
761
813
  else {
762
814
  setSlashAutocompleteVisible(false);
763
815
  }
@@ -844,7 +896,10 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
844
896
  }
845
897
  // Alt+V: Paste image from clipboard
846
898
  // Detect Alt+V on Windows/Linux (key.meta is often Alt on Windows in Ink)
847
- const isAltV = (key.meta && input === 'v') || (input === '√'); // '√' is Alt+V on some systems
899
+ // On Mac, we want to support Cmd+V explicitly as requested ("make alt key combinations work with cmd key")
900
+ // Note: Cmd+V is often captured by the terminal for text paste, but if it gets through, we handle it.
901
+ // Option+V on Mac often sends '√', which we also support.
902
+ const isAltV = (key.meta && input === 'v') || (input === '√');
848
903
  if (isAltV && !commandMode) {
849
904
  // Check clipboard for images asynchronously
850
905
  (async () => {
@@ -872,15 +927,13 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
872
927
  })();
873
928
  return;
874
929
  }
875
- // DELETE WORD BACKWARDS - Check this FIRST before standard backspace/delete
876
- // Triggers on any of these conditions:
877
- // 1. Ctrl+W (char code 23) - Standard Unix terminal shortcut
878
- // 2. Meta/Alt + Backspace/Delete - Mac alternative
879
- // 3. Ctrl + Delete - Works on all platforms (Ctrl+Backspace doesn't work on Windows/Ink)
880
- // 4. Windows Ctrl+Del sends char code 127
930
+ // DELETE WORD BACKWARDS
931
+ // 1. Ctrl+W
932
+ // 2. Cmd+Backspace (Mac) - often mapped to delete line, but here we treat key.meta as modifier
933
+ // 3. Alt+Backspace (Windows/Linux)
881
934
  const isDeleteWord = inputCharCode === 23 || // Ctrl+W
882
- (key.meta && (key.backspace || key.delete)) || // Meta/Alt + Backspace/Delete
883
- (key.ctrl && key.delete) || // Ctrl+Delete (NOTE: Ctrl+Backspace not detectable on Windows/Ink)
935
+ (key.meta && (key.backspace || key.delete)) || // Cmd+Backspace (Mac) or Alt+Backspace (Win)
936
+ (key.ctrl && key.delete) || // Ctrl+Delete
884
937
  (isWindows && inputCharCode === 127); // Windows: Ctrl+Del sends char 127
885
938
  if (isDeleteWord) {
886
939
  pushToUndoStack();
@@ -995,6 +1048,42 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
995
1048
  setSlashAutocompleteVisible(false);
996
1049
  }
997
1050
  }
1051
+ else if (newValue.startsWith('/revert ')) {
1052
+ // Checkpoint autocomplete for /revert command
1053
+ const partialId = newValue.slice(8).toLowerCase(); // Remove "/revert "
1054
+ const checkpoints = getCheckpoints ? getCheckpoints() : [];
1055
+ if (checkpoints.length === 0) {
1056
+ // No checkpoints yet - show informative message
1057
+ setSlashAutocompleteCommands([{
1058
+ name: '(no checkpoints)',
1059
+ description: 'Ask AI a question first to create a checkpoint'
1060
+ }]);
1061
+ setSlashAutocompleteVisible(true);
1062
+ setSlashAutocompleteSelectedIndex(0);
1063
+ setSlashAutocompleteScrollOffset(0);
1064
+ }
1065
+ else {
1066
+ const matchingCheckpoints = checkpoints
1067
+ .filter(cp => cp.id.toLowerCase().includes(partialId) || cp.prompt.toLowerCase().includes(partialId))
1068
+ .slice(0, 10)
1069
+ .map(cp => {
1070
+ const truncatedPrompt = cp.prompt.length > 50 ? cp.prompt.slice(0, 50) + '...' : cp.prompt;
1071
+ return {
1072
+ name: cp.id,
1073
+ description: truncatedPrompt
1074
+ };
1075
+ });
1076
+ if (matchingCheckpoints.length > 0) {
1077
+ setSlashAutocompleteCommands(matchingCheckpoints);
1078
+ setSlashAutocompleteVisible(true);
1079
+ setSlashAutocompleteSelectedIndex(0);
1080
+ setSlashAutocompleteScrollOffset(0);
1081
+ }
1082
+ else {
1083
+ setSlashAutocompleteVisible(false);
1084
+ }
1085
+ }
1086
+ }
998
1087
  else if (newValue.match(/^\/workflow\s+(run|view|delete)\s+/) ||
999
1088
  newValue.match(/^\/wf\s+(run|view|delete)\s+/)) {
1000
1089
  // Workflow name autocomplete (when user types "/workflow run " or similar)
@@ -1452,8 +1541,18 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1452
1541
  return;
1453
1542
  }
1454
1543
  if (key.leftArrow) {
1455
- if (key.ctrl || key.meta) {
1456
- // Ctrl+Left / Meta+Left (Option+Left): Move word backwards
1544
+ if (isMac && key.meta) {
1545
+ // Mac: Cmd+Left -> Start of line (Home)
1546
+ setCursorOffset(0);
1547
+ return;
1548
+ }
1549
+ if (key.ctrl || (!isMac && key.meta)) {
1550
+ // Ctrl+Left (All) or Alt+Left (Win/Linux): Move word backwards
1551
+ // Note: On Mac, Option+Left is the standard for word back, but Ink doesn't expose 'alt'.
1552
+ // Users can use Ctrl+Left or rely on terminal mapping Option to Meta which effectively makes it key.meta
1553
+ // BUT if key.meta is Cmd on Mac, we map that to Home.
1554
+ // So standard Mac "Option+Left" might not work unless it sends Esc sequence or mapped to Ctrl.
1555
+ // We allow Ctrl+Left for Mac users.
1457
1556
  let newOffset = cursorOffset;
1458
1557
  if (newOffset > 0) {
1459
1558
  // Skip whitespace backwards
@@ -1466,8 +1565,10 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1466
1565
  }
1467
1566
  setCursorOffset(newOffset);
1468
1567
  }
1568
+ return;
1469
1569
  }
1470
- else if (cursorOffset > 0) {
1570
+ // Standard Left Arrow
1571
+ if (cursorOffset > 0) {
1471
1572
  setCursorOffset(cursorOffset - 1);
1472
1573
  }
1473
1574
  return;
@@ -1475,10 +1576,16 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1475
1576
  if (key.rightArrow) {
1476
1577
  // Autocomplete Logic (Only at end of line)
1477
1578
  // AI suggestion takes priority over passive suggestion
1579
+ // Autocomplete Logic
1478
1580
  const effectiveSuggestion = aiAutocompleteSuggestion || autocompleteSuggestion;
1479
1581
  if (effectiveSuggestion && cursorOffset === value.length) {
1480
- if (key.ctrl) {
1481
- // Ctrl+Right: Accept FULL suggestion
1582
+ if (key.ctrl || (isMac && key.meta)) {
1583
+ // Ctrl+Right (Win) or Cmd+Right (Mac): Accept FULL suggestion
1584
+ // (Wait, Cmd+Right is usually End of Line on Mac. We should prioritize Navigation over Autocomplete?
1585
+ // Actually, if we are at end of line, End of Line does nothing. So we can use it for accept full?)
1586
+ // Convention: Right Arrow accepts word. Ctrl+Right accepts full?
1587
+ // On Mac, Cmd+Right is End. If at End, it's a no-op for nav.
1588
+ // Let's allow Cmd+Right to accept full IF at end.
1482
1589
  setValue(effectiveSuggestion);
1483
1590
  setCursorOffset(effectiveSuggestion.length);
1484
1591
  setAutocompleteSuggestion(null);
@@ -1488,17 +1595,16 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1488
1595
  else {
1489
1596
  // Right: Accept NEXT WORD
1490
1597
  const remaining = effectiveSuggestion.slice(value.length);
1491
- // Match next chunk of non-whitespace (including preceding whitespace)
1598
+ // Match next chunk of non-whitespace
1492
1599
  const match = remaining.match(/^(\s*\S+)/);
1493
1600
  if (match) {
1494
1601
  const toAdd = match[0];
1495
1602
  const newValue = value + toAdd;
1496
1603
  setValue(newValue);
1497
1604
  setCursorOffset(newValue.length);
1498
- return;
1605
+ return; // Done
1499
1606
  }
1500
1607
  else if (remaining.length > 0) {
1501
- // Fallback: if only whitespace remains or regex fails, take it all
1502
1608
  const newValue = value + remaining;
1503
1609
  setValue(newValue);
1504
1610
  setCursorOffset(newValue.length);
@@ -1506,6 +1612,29 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1506
1612
  }
1507
1613
  }
1508
1614
  }
1615
+ // Navigation Logic
1616
+ if (isMac && key.meta) {
1617
+ // Cmd+Right -> End of line
1618
+ setCursorOffset(value.length);
1619
+ return;
1620
+ }
1621
+ if ((!isMac && key.meta) || key.ctrl) {
1622
+ // Alt+Right (Win) or Ctrl+Right: Word Forward
1623
+ // (Note: Ink uses key.meta for Alt on Windows)
1624
+ let newOffset = cursorOffset;
1625
+ if (newOffset < value.length) {
1626
+ // Skip whitespace forwards
1627
+ while (newOffset < value.length && /\s/.test(value[newOffset])) {
1628
+ newOffset++;
1629
+ }
1630
+ // Skip non-whitespace forwards
1631
+ while (newOffset < value.length && !/\s/.test(value[newOffset])) {
1632
+ newOffset++;
1633
+ }
1634
+ setCursorOffset(newOffset);
1635
+ }
1636
+ return;
1637
+ }
1509
1638
  // Navigation Logic (if not completing)
1510
1639
  if (key.ctrl || key.meta) {
1511
1640
  // Ctrl+Right / Meta+Right (Option+Right): Move word forwards
@@ -1665,6 +1794,42 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1665
1794
  setSlashAutocompleteVisible(false);
1666
1795
  }
1667
1796
  }
1797
+ else if (newValue.startsWith('/revert ')) {
1798
+ // Checkpoint autocomplete for /revert command (on backspace)
1799
+ const partialId = newValue.slice(8).toLowerCase(); // Remove "/revert "
1800
+ const checkpoints = getCheckpoints ? getCheckpoints() : [];
1801
+ if (checkpoints.length === 0) {
1802
+ // No checkpoints yet - show informative message
1803
+ setSlashAutocompleteCommands([{
1804
+ name: '(no checkpoints)',
1805
+ description: 'Ask AI a question first to create a checkpoint'
1806
+ }]);
1807
+ setSlashAutocompleteVisible(true);
1808
+ setSlashAutocompleteSelectedIndex(0);
1809
+ setSlashAutocompleteScrollOffset(0);
1810
+ }
1811
+ else {
1812
+ const matchingCheckpoints = checkpoints
1813
+ .filter(cp => cp.id.toLowerCase().includes(partialId) || cp.prompt.toLowerCase().includes(partialId))
1814
+ .slice(0, 10)
1815
+ .map(cp => {
1816
+ const truncatedPrompt = cp.prompt.length > 50 ? cp.prompt.slice(0, 50) + '...' : cp.prompt;
1817
+ return {
1818
+ name: cp.id,
1819
+ description: truncatedPrompt
1820
+ };
1821
+ });
1822
+ if (matchingCheckpoints.length > 0) {
1823
+ setSlashAutocompleteCommands(matchingCheckpoints);
1824
+ setSlashAutocompleteVisible(true);
1825
+ setSlashAutocompleteSelectedIndex(0);
1826
+ setSlashAutocompleteScrollOffset(0);
1827
+ }
1828
+ else {
1829
+ setSlashAutocompleteVisible(false);
1830
+ }
1831
+ }
1832
+ }
1668
1833
  else if (newValue.match(/^\/workflow\s+(run|view|delete)\s+/) ||
1669
1834
  newValue.match(/^\/wf\s+(run|view|delete)\s+/)) {
1670
1835
  // Workflow name autocomplete (when user types "/workflow run " or similar)
@@ -1984,7 +2149,7 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
1984
2149
  React.createElement(Text, { color: "#666666" }, "CWD: "),
1985
2150
  React.createElement(Text, { color: "#00ccff", bold: true }, currentDir)),
1986
2151
  React.createElement(Box, null,
1987
- model && !commandMode && (React.createElement(Box, { marginRight: 1 },
2152
+ model && !commandMode && !backgroundMode && (React.createElement(Box, { marginRight: 1 },
1988
2153
  React.createElement(Text, { color: "#666666" }, "Model: "),
1989
2154
  React.createElement(Text, { color: "#00ccff" }, model))),
1990
2155
  React.createElement(Box, null,
@@ -2007,7 +2172,7 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
2007
2172
  React.createElement(Text, { color: "#666666" }, "> "),
2008
2173
  renderInput()),
2009
2174
  React.createElement(Box, { marginY: 1, justifyContent: "space-between", width: "100%" },
2010
- React.createElement(Text, { color: "#666666", dimColor: true }, isAutoMode ? ('Ctrl+D to switch modes • Ctrl+T to auto-approve') : backgroundMode ? ('Ctrl+D to switch modes • Commands run in background') : commandMode ? ('Ctrl+D to switch modes • Tab for autocomplete') : ('Ctrl+D to switch modes • Ctrl+T to auto-approve • Shift+Enter for new line')),
2175
+ React.createElement(Text, { color: "#666666", dimColor: true }, isAutoMode ? ('Ctrl+D to switch modes • Ctrl+T to auto-approve') : backgroundMode ? ('Ctrl+D to switch modes • Commands run in background') : commandMode ? ('Ctrl+D to switch modes • Tab for autocomplete') : ('Ctrl+D to switch modes • Ctrl+T to auto-approve')),
2011
2176
  React.createElement(Box, { gap: 1 },
2012
2177
  subAgentCount > 0 && (React.createElement(Text, { color: "#00ccff", bold: true },
2013
2178
  "[sub-agent: ",
@@ -2018,8 +2183,8 @@ export const InputBox = React.memo(({ onSubmit, placeholder = 'Ask anything...',
2018
2183
  backgroundTaskCount,
2019
2184
  "]")),
2020
2185
  !commandMode && !backgroundMode && planMode && (React.createElement(Text, { color: "#ffaa00", bold: true }, "[PLANNING]")),
2021
- !commandMode && autoAcceptMode ? (React.createElement(Text, { color: "#00cc66", bold: true }, "[AUTO-ACCEPT: ON]")) : !commandMode ? (React.createElement(Text, { color: "#666666", dimColor: true }, "[AUTO-ACCEPT: OFF]")) : null,
2022
- !commandMode && (React.createElement(Box, { marginLeft: 1 },
2186
+ !commandMode && !backgroundMode && autoAcceptMode ? (React.createElement(Text, { color: "#00cc66", bold: true }, "[AUTO-ACCEPT: ON]")) : !commandMode && !backgroundMode ? (React.createElement(Text, { color: "#666666", dimColor: true }, "[AUTO-ACCEPT: OFF]")) : null,
2187
+ !commandMode && !backgroundMode && (React.createElement(Box, { marginLeft: 1 },
2023
2188
  React.createElement(ContextWindowIndicator, { currentTokens: currentTokens, maxTokens: maxTokens }))))),
2024
2189
  slashAutocompleteVisible && slashMaxVisibleItems > 0 && (React.createElement(SlashCommandAutocomplete, { commands: slashAutocompleteCommands, selectedIndex: slashAutocompleteSelectedIndex, maxVisibleItems: slashMaxVisibleItems, scrollOffset: slashAutocompleteScrollOffset })),
2025
2190
  fileTagAutocompleteVisible && (React.createElement(FileTagAutocomplete, { files: fileTagSuggestions, selectedIndex: fileTagSelectedIndex }))));