@kenkaiiii/ggcoder 4.3.13 → 4.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -1
- package/dist/config.js.map +1 -1
- package/dist/core/settings-manager.d.ts +4 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +11 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +8 -1
- package/dist/tools/bash.js.map +1 -1
- package/dist/ui/App.d.ts +2 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +69 -57
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/ActivityIndicator.d.ts +3 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +4 -1
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/DiffFrame.d.ts +10 -0
- package/dist/ui/components/DiffFrame.d.ts.map +1 -0
- package/dist/ui/components/DiffFrame.js +13 -0
- package/dist/ui/components/DiffFrame.js.map +1 -0
- package/dist/ui/components/Footer.d.ts +2 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +4 -1
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +297 -8
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/Markdown.d.ts +1 -1
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +18 -213
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/components/Ratchet.d.ts.map +1 -1
- package/dist/ui/components/Ratchet.js +9 -2
- package/dist/ui/components/Ratchet.js.map +1 -1
- package/dist/ui/components/ThemeSelector.d.ts +9 -0
- package/dist/ui/components/ThemeSelector.d.ts.map +1 -0
- package/dist/ui/components/ThemeSelector.js +25 -0
- package/dist/ui/components/ThemeSelector.js.map +1 -0
- package/dist/ui/components/ToolExecution.d.ts +2 -0
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +34 -15
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts +3 -2
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +68 -51
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +1 -0
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useDoublePress.d.ts +8 -0
- package/dist/ui/hooks/useDoublePress.d.ts.map +1 -0
- package/dist/ui/hooks/useDoublePress.js +44 -0
- package/dist/ui/hooks/useDoublePress.js.map +1 -0
- package/dist/ui/live-item-flush.d.ts +4 -0
- package/dist/ui/live-item-flush.d.ts.map +1 -1
- package/dist/ui/live-item-flush.js +36 -0
- package/dist/ui/live-item-flush.js.map +1 -1
- package/dist/ui/render.d.ts +2 -1
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +9 -3
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/stores/create-store.d.ts +15 -0
- package/dist/ui/stores/create-store.d.ts.map +1 -0
- package/dist/ui/stores/create-store.js +30 -0
- package/dist/ui/stores/create-store.js.map +1 -0
- package/dist/ui/stores/index.d.ts +3 -0
- package/dist/ui/stores/index.d.ts.map +1 -0
- package/dist/ui/stores/index.js +3 -0
- package/dist/ui/stores/index.js.map +1 -0
- package/dist/ui/stores/taskbar-store.d.ts +19 -0
- package/dist/ui/stores/taskbar-store.d.ts.map +1 -0
- package/dist/ui/stores/taskbar-store.js +59 -0
- package/dist/ui/stores/taskbar-store.js.map +1 -0
- package/dist/ui/theme/dark-ansi.json +48 -0
- package/dist/ui/theme/dark-daltonized.json +48 -0
- package/dist/ui/theme/dark.json +22 -1
- package/dist/ui/theme/detect-theme.d.ts +12 -8
- package/dist/ui/theme/detect-theme.d.ts.map +1 -1
- package/dist/ui/theme/detect-theme.js +43 -18
- package/dist/ui/theme/detect-theme.js.map +1 -1
- package/dist/ui/theme/light-ansi.json +48 -0
- package/dist/ui/theme/light-daltonized.json +48 -0
- package/dist/ui/theme/light.json +44 -23
- package/dist/ui/theme/theme.d.ts +27 -1
- package/dist/ui/theme/theme.d.ts.map +1 -1
- package/dist/ui/theme/theme.js +24 -1
- package/dist/ui/theme/theme.js.map +1 -1
- package/dist/ui/utils/highlight.d.ts +1 -1
- package/dist/ui/utils/highlight.d.ts.map +1 -1
- package/dist/ui/utils/highlight.js +24 -4
- package/dist/ui/utils/highlight.js.map +1 -1
- package/dist/ui/utils/hyperlink.d.ts +11 -0
- package/dist/ui/utils/hyperlink.d.ts.map +1 -0
- package/dist/ui/utils/hyperlink.js +27 -0
- package/dist/ui/utils/hyperlink.js.map +1 -0
- package/dist/ui/utils/markdown-cache.d.ts +5 -6
- package/dist/ui/utils/markdown-cache.d.ts.map +1 -1
- package/dist/ui/utils/markdown-cache.js +5 -5
- package/dist/ui/utils/markdown-cache.js.map +1 -1
- package/dist/ui/utils/signal.d.ts +21 -0
- package/dist/ui/utils/signal.d.ts.map +1 -0
- package/dist/ui/utils/signal.js +30 -0
- package/dist/ui/utils/signal.js.map +1 -0
- package/dist/ui/utils/supports-hyperlinks.d.ts +6 -0
- package/dist/ui/utils/supports-hyperlinks.d.ts.map +1 -0
- package/dist/ui/utils/supports-hyperlinks.js +52 -0
- package/dist/ui/utils/supports-hyperlinks.js.map +1 -0
- package/dist/ui/utils/sync-output.d.ts +16 -0
- package/dist/ui/utils/sync-output.d.ts.map +1 -0
- package/dist/ui/utils/sync-output.js +70 -0
- package/dist/ui/utils/sync-output.js.map +1 -0
- package/dist/ui/utils/token-to-ansi.d.ts +9 -0
- package/dist/ui/utils/token-to-ansi.d.ts.map +1 -0
- package/dist/ui/utils/token-to-ansi.js +305 -0
- package/dist/ui/utils/token-to-ansi.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ActivityIndicator.js","sourceRoot":"","sources":["../../../src/ui/components/ActivityIndicator.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Reusable frame for diff content — dashed top/bottom borders, no left/right.
|
|
4
|
+
* Matches Claude Code's DiffFrame pattern.
|
|
5
|
+
*/
|
|
6
|
+
export declare function DiffFrame({ children, placeholder, }: {
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
placeholder?: boolean;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
//# sourceMappingURL=DiffFrame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffFrame.d.ts","sourceRoot":"","sources":["../../../src/ui/components/DiffFrame.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,2CAaA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Box, Text } from "ink";
|
|
4
|
+
import { useTheme } from "../theme/theme.js";
|
|
5
|
+
/**
|
|
6
|
+
* Reusable frame for diff content — dashed top/bottom borders, no left/right.
|
|
7
|
+
* Matches Claude Code's DiffFrame pattern.
|
|
8
|
+
*/
|
|
9
|
+
export function DiffFrame({ children, placeholder, }) {
|
|
10
|
+
const theme = useTheme();
|
|
11
|
+
return (_jsx(Box, { flexDirection: "column", borderColor: theme.subtle, borderStyle: "single", borderLeft: false, borderRight: false, children: placeholder ? _jsx(Text, { dimColor: true, children: "..." }) : children }));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=DiffFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffFrame.js","sourceRoot":"","sources":["../../../src/ui/components/DiffFrame.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,QAAQ,EACR,WAAW,GAIZ;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,KAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAE,KAAK,CAAC,MAAM,EACzB,WAAW,EAAC,QAAQ,EACpB,UAAU,EAAE,KAAK,EACjB,WAAW,EAAE,KAAK,YAEjB,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,0BAAW,CAAC,CAAC,CAAC,QAAQ,GAC/C,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -5,7 +5,8 @@ interface FooterProps {
|
|
|
5
5
|
gitBranch?: string | null;
|
|
6
6
|
thinkingEnabled?: boolean;
|
|
7
7
|
planMode?: boolean;
|
|
8
|
+
exitPending?: boolean;
|
|
8
9
|
}
|
|
9
|
-
export declare function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planMode, }: FooterProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planMode, exitPending, }: FooterProps): import("react/jsx-runtime").JSX.Element;
|
|
10
11
|
export {};
|
|
11
12
|
//# sourceMappingURL=Footer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Footer.d.ts","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+BD,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,QAAQ,EACR,GAAG,EACH,SAAS,EACT,eAAe,EACf,QAAQ,EACR,WAAW,GACZ,EAAE,WAAW,2CAoIb"}
|
|
@@ -33,7 +33,7 @@ function getContextColor(pct, theme) {
|
|
|
33
33
|
return theme.warning;
|
|
34
34
|
return theme.success;
|
|
35
35
|
}
|
|
36
|
-
export function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planMode, }) {
|
|
36
|
+
export function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planMode, exitPending, }) {
|
|
37
37
|
const theme = useTheme();
|
|
38
38
|
const { columns } = useTerminalSize();
|
|
39
39
|
// Show only the current directory name
|
|
@@ -83,6 +83,9 @@ export function Footer({ model, tokensIn, cwd, gitBranch, thinkingEnabled, planM
|
|
|
83
83
|
: displayPath;
|
|
84
84
|
// Shared right-side content
|
|
85
85
|
const rightContent = (_jsxs(_Fragment, { children: [_jsx(Text, { children: barChars }), _jsxs(Text, { color: contextColor, children: [" ", contextPct, "%"] }), sep, _jsx(Text, { color: theme.primary, bold: true, children: modelName }), sep, _jsx(Text, { color: planMode ? theme.planPrimary : theme.textDim, children: planText }), sep, _jsx(Text, { color: thinkingEnabled ? theme.accent : theme.textDim, children: thinkingText })] }));
|
|
86
|
+
if (exitPending) {
|
|
87
|
+
return (_jsx(Box, { paddingLeft: 1, paddingRight: 1, width: columns, children: _jsx(Text, { color: theme.warning, children: "Press Ctrl+C again to exit" }) }));
|
|
88
|
+
}
|
|
86
89
|
if (fitsOnOneLine) {
|
|
87
90
|
return (_jsxs(Box, { paddingLeft: 1, paddingRight: 1, width: columns, children: [_jsxs(Box, { flexGrow: 1, children: [_jsx(Text, { color: theme.textDim, children: truncPath }), gitBranch && (_jsxs(_Fragment, { children: [sep, _jsxs(Text, { color: theme.secondary, children: ["\u2387 ", gitBranch] })] }))] }), _jsx(Box, { flexShrink: 0, children: rightContent })] }));
|
|
88
91
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/ui/components/Footer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAmLhG,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAkDD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,QAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,GAAG,EACH,QAAa,GACd,EAAE,cAAc,2CAkvChB"}
|
|
@@ -7,6 +7,9 @@ import { useTerminalSize } from "../hooks/useTerminalSize.js";
|
|
|
7
7
|
import { extractImagePaths, readImageFile, getClipboardImage } from "../../utils/image.js";
|
|
8
8
|
import { SlashCommandMenu, filterCommands } from "./SlashCommandMenu.js";
|
|
9
9
|
import { log } from "../../core/logger.js";
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
import { readFileSync, writeFileSync, appendFileSync, mkdirSync, renameSync, unlinkSync, existsSync, } from "node:fs";
|
|
10
13
|
const MAX_VISIBLE_LINES = 5;
|
|
11
14
|
const PROMPT = "❯ ";
|
|
12
15
|
// SGR mouse sequence: ESC [ < button ; col ; row M/m
|
|
@@ -79,6 +82,100 @@ function getSelectionRange(anchor, cur) {
|
|
|
79
82
|
return null;
|
|
80
83
|
return [Math.min(anchor, cur), Math.max(anchor, cur)];
|
|
81
84
|
}
|
|
85
|
+
// ── Kill Ring (module-level, persists across renders) ─────
|
|
86
|
+
const KILL_RING_MAX = 10;
|
|
87
|
+
const killRing = [];
|
|
88
|
+
let killRingIndex = 0;
|
|
89
|
+
let lastActionWasKill = false;
|
|
90
|
+
let lastActionWasYank = false;
|
|
91
|
+
let lastYankStart = 0;
|
|
92
|
+
let lastYankLength = 0;
|
|
93
|
+
function pushKill(text, direction) {
|
|
94
|
+
if (!text)
|
|
95
|
+
return;
|
|
96
|
+
if (lastActionWasKill && killRing.length > 0) {
|
|
97
|
+
killRing[0] = direction === "append" ? killRing[0] + text : text + killRing[0];
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
killRing.unshift(text);
|
|
101
|
+
if (killRing.length > KILL_RING_MAX)
|
|
102
|
+
killRing.pop();
|
|
103
|
+
}
|
|
104
|
+
lastActionWasKill = true;
|
|
105
|
+
lastActionWasYank = false;
|
|
106
|
+
}
|
|
107
|
+
function yankText() {
|
|
108
|
+
return killRing[0] ?? "";
|
|
109
|
+
}
|
|
110
|
+
function recordYank(start, length) {
|
|
111
|
+
lastYankStart = start;
|
|
112
|
+
lastYankLength = length;
|
|
113
|
+
lastActionWasYank = true;
|
|
114
|
+
killRingIndex = 0;
|
|
115
|
+
}
|
|
116
|
+
function yankPop() {
|
|
117
|
+
if (!lastActionWasYank || killRing.length <= 1)
|
|
118
|
+
return null;
|
|
119
|
+
killRingIndex = (killRingIndex + 1) % killRing.length;
|
|
120
|
+
const text = killRing[killRingIndex];
|
|
121
|
+
const result = { text, start: lastYankStart, length: lastYankLength };
|
|
122
|
+
lastYankLength = text.length;
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
// ── Persistent Input History ─────────────────────────────
|
|
126
|
+
const HISTORY_FILE = join(homedir(), ".gg", "input-history.jsonl");
|
|
127
|
+
const MAX_HISTORY = 500;
|
|
128
|
+
// Compact when file has 50% more lines than the cap
|
|
129
|
+
const COMPACT_THRESHOLD = MAX_HISTORY + Math.floor(MAX_HISTORY * 0.5);
|
|
130
|
+
let lineCountEstimate = 0;
|
|
131
|
+
function loadHistory() {
|
|
132
|
+
try {
|
|
133
|
+
const data = readFileSync(HISTORY_FILE, "utf-8");
|
|
134
|
+
const lines = data.trim().split("\n").filter(Boolean);
|
|
135
|
+
lineCountEstimate = lines.length;
|
|
136
|
+
return lines.map((l) => JSON.parse(l)).slice(-MAX_HISTORY);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
function appendHistory(entry, history) {
|
|
143
|
+
// Skip consecutive duplicates
|
|
144
|
+
if (history.length > 0 && history[history.length - 1] === entry)
|
|
145
|
+
return;
|
|
146
|
+
try {
|
|
147
|
+
mkdirSync(join(homedir(), ".gg"), { recursive: true });
|
|
148
|
+
appendFileSync(HISTORY_FILE, JSON.stringify(entry) + "\n");
|
|
149
|
+
lineCountEstimate++;
|
|
150
|
+
if (lineCountEstimate > COMPACT_THRESHOLD) {
|
|
151
|
+
compactHistory();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Silently ignore write failures
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function compactHistory() {
|
|
159
|
+
const tempPath = `${HISTORY_FILE}.${process.pid}.${Date.now()}.tmp`;
|
|
160
|
+
try {
|
|
161
|
+
const data = readFileSync(HISTORY_FILE, "utf-8");
|
|
162
|
+
const lines = data.trim().split("\n").filter(Boolean);
|
|
163
|
+
const trimmed = lines.slice(-MAX_HISTORY);
|
|
164
|
+
writeFileSync(tempPath, trimmed.map((l) => l + "\n").join(""));
|
|
165
|
+
renameSync(tempPath, HISTORY_FILE);
|
|
166
|
+
lineCountEstimate = trimmed.length;
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Clean up temp file on failure
|
|
170
|
+
try {
|
|
171
|
+
if (existsSync(tempPath))
|
|
172
|
+
unlinkSync(tempPath);
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// Ignore cleanup errors
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
82
179
|
// Border (1 each side) + padding (1 each side) = 4 characters of overhead
|
|
83
180
|
const BOX_OVERHEAD = 4;
|
|
84
181
|
// Minimum content width to prevent zero/negative values that cause infinite
|
|
@@ -131,8 +228,31 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
131
228
|
cursorRef.current = cursor;
|
|
132
229
|
const [selectionAnchor, setSelectionAnchor] = useState(null);
|
|
133
230
|
const [images, setImages] = useState([]);
|
|
134
|
-
const historyRef = useRef(
|
|
231
|
+
const historyRef = useRef(loadHistory());
|
|
135
232
|
const historyIndexRef = useRef(-1);
|
|
233
|
+
const draftRef = useRef("");
|
|
234
|
+
// ── Ctrl+R history search state ──────────────────────────
|
|
235
|
+
const [searchMode, setSearchMode] = useState(false);
|
|
236
|
+
const [searchQuery, setSearchQuery] = useState("");
|
|
237
|
+
const [searchFailed, setSearchFailed] = useState(false);
|
|
238
|
+
const searchIndexRef = useRef(0);
|
|
239
|
+
const savedInputRef = useRef("");
|
|
240
|
+
const savedCursorRef = useRef(0);
|
|
241
|
+
const findNextMatch = (query, startFrom) => {
|
|
242
|
+
if (!query)
|
|
243
|
+
return;
|
|
244
|
+
for (let i = startFrom; i >= 0; i--) {
|
|
245
|
+
if (historyRef.current[i]?.toLowerCase().includes(query.toLowerCase())) {
|
|
246
|
+
searchIndexRef.current = i;
|
|
247
|
+
setValue(historyRef.current[i]);
|
|
248
|
+
const matchPos = historyRef.current[i].toLowerCase().lastIndexOf(query.toLowerCase());
|
|
249
|
+
setCursor(matchPos + query.length);
|
|
250
|
+
setSearchFailed(false);
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
setSearchFailed(true);
|
|
255
|
+
};
|
|
136
256
|
const lastEscRef = useRef(0);
|
|
137
257
|
const { columns } = useTerminalSize();
|
|
138
258
|
const [menuIndex, setMenuIndex] = useState(0);
|
|
@@ -452,6 +572,80 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
452
572
|
// Filter out stray mouse escape sequences so they don't get inserted as text
|
|
453
573
|
if (isMouseEscapeSequence(input))
|
|
454
574
|
return;
|
|
575
|
+
// Reset kill ring accumulation for non-kill keys
|
|
576
|
+
const isKillKey = key.ctrl && (input === "k" || input === "u" || input === "w");
|
|
577
|
+
if (!isKillKey)
|
|
578
|
+
lastActionWasKill = false;
|
|
579
|
+
const isYankKey = (key.ctrl && input === "y") || (key.meta && input === "y");
|
|
580
|
+
if (!isYankKey)
|
|
581
|
+
lastActionWasYank = false;
|
|
582
|
+
// Reset history navigation when any non-arrow key is pressed while browsing
|
|
583
|
+
if (historyIndexRef.current !== -1 && !key.upArrow && !key.downArrow) {
|
|
584
|
+
historyIndexRef.current = -1;
|
|
585
|
+
draftRef.current = "";
|
|
586
|
+
}
|
|
587
|
+
// ── Ctrl+R history search mode ───────────────────────
|
|
588
|
+
if (key.ctrl && input === "r" && !disabled) {
|
|
589
|
+
if (!searchMode) {
|
|
590
|
+
savedInputRef.current = value;
|
|
591
|
+
savedCursorRef.current = cursor;
|
|
592
|
+
setSearchMode(true);
|
|
593
|
+
setSearchQuery("");
|
|
594
|
+
setSearchFailed(false);
|
|
595
|
+
searchIndexRef.current = historyRef.current.length;
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
// Already searching — find next match
|
|
599
|
+
findNextMatch(searchQuery, searchIndexRef.current - 1);
|
|
600
|
+
}
|
|
601
|
+
return;
|
|
602
|
+
}
|
|
603
|
+
// When search mode is active, intercept all keystrokes
|
|
604
|
+
if (searchMode) {
|
|
605
|
+
if (key.escape || (key.ctrl && input === "g")) {
|
|
606
|
+
// Cancel — restore original
|
|
607
|
+
setSearchMode(false);
|
|
608
|
+
setValue(savedInputRef.current);
|
|
609
|
+
setCursor(savedCursorRef.current);
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
if (key.return) {
|
|
613
|
+
// Accept match and submit
|
|
614
|
+
setSearchMode(false);
|
|
615
|
+
return; // fall through to normal submit handling
|
|
616
|
+
}
|
|
617
|
+
if (key.backspace || key.delete) {
|
|
618
|
+
const newQuery = searchQuery.slice(0, -1);
|
|
619
|
+
setSearchQuery(newQuery);
|
|
620
|
+
if (!newQuery) {
|
|
621
|
+
setSearchMode(false);
|
|
622
|
+
setValue(savedInputRef.current);
|
|
623
|
+
setCursor(savedCursorRef.current);
|
|
624
|
+
}
|
|
625
|
+
else {
|
|
626
|
+
searchIndexRef.current = historyRef.current.length;
|
|
627
|
+
findNextMatch(newQuery, searchIndexRef.current - 1);
|
|
628
|
+
}
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
if (key.rightArrow ||
|
|
632
|
+
(key.ctrl && input === "f") ||
|
|
633
|
+
(key.ctrl && input === "a") ||
|
|
634
|
+
(key.ctrl && input === "e")) {
|
|
635
|
+
// Accept match, exit search, keep value
|
|
636
|
+
setSearchMode(false);
|
|
637
|
+
return;
|
|
638
|
+
}
|
|
639
|
+
// Regular character — append to search query
|
|
640
|
+
if (input.length === 1 && !key.ctrl && !key.meta) {
|
|
641
|
+
const newQuery = searchQuery + input;
|
|
642
|
+
setSearchQuery(newQuery);
|
|
643
|
+
searchIndexRef.current = historyRef.current.length;
|
|
644
|
+
findNextMatch(newQuery, searchIndexRef.current - 1);
|
|
645
|
+
return;
|
|
646
|
+
}
|
|
647
|
+
return; // absorb all other keys during search
|
|
648
|
+
}
|
|
455
649
|
// Ctrl+T toggles task overlay — works even while agent is running
|
|
456
650
|
if (key.ctrl && input === "t") {
|
|
457
651
|
onToggleTasks?.();
|
|
@@ -495,7 +689,10 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
495
689
|
const selected = filteredCommands[Math.min(menuIndex, filteredCommands.length - 1)];
|
|
496
690
|
const cmd = "/" + selected.name;
|
|
497
691
|
// Submit the command directly
|
|
498
|
-
historyRef.current
|
|
692
|
+
const hist = historyRef.current;
|
|
693
|
+
if (hist[hist.length - 1] !== cmd)
|
|
694
|
+
hist.push(cmd);
|
|
695
|
+
appendHistory(cmd, hist);
|
|
499
696
|
historyIndexRef.current = -1;
|
|
500
697
|
onSubmit(cmd, []);
|
|
501
698
|
clearInput();
|
|
@@ -503,8 +700,12 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
503
700
|
}
|
|
504
701
|
const trimmed = value.trim();
|
|
505
702
|
if (trimmed || images.length > 0) {
|
|
506
|
-
if (trimmed)
|
|
507
|
-
historyRef.current
|
|
703
|
+
if (trimmed) {
|
|
704
|
+
const hist = historyRef.current;
|
|
705
|
+
if (hist[hist.length - 1] !== trimmed)
|
|
706
|
+
hist.push(trimmed);
|
|
707
|
+
appendHistory(trimmed, hist);
|
|
708
|
+
}
|
|
508
709
|
historyIndexRef.current = -1;
|
|
509
710
|
// Compute paste info adjusted for trimming
|
|
510
711
|
const trimLeading = value.length - value.trimStart().length;
|
|
@@ -540,7 +741,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
540
741
|
if (key.ctrl && input === "d") {
|
|
541
742
|
process.exit(0);
|
|
542
743
|
}
|
|
543
|
-
// Ctrl+W —
|
|
744
|
+
// Ctrl+W — kill previous word → push to kill ring
|
|
544
745
|
if (key.ctrl && input === "w") {
|
|
545
746
|
const sel = deleteSelection();
|
|
546
747
|
if (sel) {
|
|
@@ -549,12 +750,55 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
549
750
|
}
|
|
550
751
|
else if (cursor > 0) {
|
|
551
752
|
const boundary = prevWordBoundary(value, cursor);
|
|
753
|
+
const killed = value.slice(boundary, cursor);
|
|
754
|
+
pushKill(killed, "prepend");
|
|
552
755
|
setValue((v) => v.slice(0, boundary) + v.slice(cursor));
|
|
553
756
|
setCursor(boundary);
|
|
554
757
|
}
|
|
555
758
|
setSelectionAnchor(null);
|
|
556
759
|
return;
|
|
557
760
|
}
|
|
761
|
+
// Ctrl+K — kill from cursor to end of line → push to kill ring
|
|
762
|
+
if (key.ctrl && input === "k") {
|
|
763
|
+
const killed = value.slice(cursor);
|
|
764
|
+
if (killed) {
|
|
765
|
+
pushKill(killed, "append");
|
|
766
|
+
setValue(value.slice(0, cursor));
|
|
767
|
+
}
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
// Ctrl+U — kill from cursor to start of line → push to kill ring
|
|
771
|
+
if (key.ctrl && input === "u") {
|
|
772
|
+
const killed = value.slice(0, cursor);
|
|
773
|
+
if (killed) {
|
|
774
|
+
pushKill(killed, "prepend");
|
|
775
|
+
setValue(value.slice(cursor));
|
|
776
|
+
setCursor(0);
|
|
777
|
+
}
|
|
778
|
+
return;
|
|
779
|
+
}
|
|
780
|
+
// Ctrl+Y — yank from kill ring
|
|
781
|
+
if (key.ctrl && input === "y") {
|
|
782
|
+
const text = yankText();
|
|
783
|
+
if (text) {
|
|
784
|
+
const start = cursor;
|
|
785
|
+
setValue(value.slice(0, cursor) + text + value.slice(cursor));
|
|
786
|
+
setCursor(cursor + text.length);
|
|
787
|
+
recordYank(start, text.length);
|
|
788
|
+
}
|
|
789
|
+
return;
|
|
790
|
+
}
|
|
791
|
+
// Alt+Y — yank-pop: cycle through kill ring after a yank
|
|
792
|
+
if (key.meta && input === "y") {
|
|
793
|
+
const pop = yankPop();
|
|
794
|
+
if (pop) {
|
|
795
|
+
const before = value.slice(0, pop.start);
|
|
796
|
+
const after = value.slice(pop.start + pop.length);
|
|
797
|
+
setValue(before + pop.text + after);
|
|
798
|
+
setCursor(pop.start + pop.text.length);
|
|
799
|
+
}
|
|
800
|
+
return;
|
|
801
|
+
}
|
|
558
802
|
// Home / End — Shift extends selection
|
|
559
803
|
if (key.ctrl && input === "a") {
|
|
560
804
|
if (key.shift) {
|
|
@@ -603,10 +847,32 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
603
847
|
setMenuIndex((i) => Math.max(0, i - 1));
|
|
604
848
|
return;
|
|
605
849
|
}
|
|
850
|
+
// If there's multi-line text, try moving cursor up first
|
|
851
|
+
if (value.includes("\n") && historyIndexRef.current === -1) {
|
|
852
|
+
const before = value.slice(0, cursor);
|
|
853
|
+
const lineStart = before.lastIndexOf("\n");
|
|
854
|
+
if (lineStart !== -1) {
|
|
855
|
+
// Move cursor to same column on previous line
|
|
856
|
+
const col = cursor - lineStart - 1;
|
|
857
|
+
const prevLineStart = before.lastIndexOf("\n", lineStart - 1);
|
|
858
|
+
const prevLineLen = lineStart - (prevLineStart + 1);
|
|
859
|
+
setCursor(prevLineStart + 1 + Math.min(col, prevLineLen));
|
|
860
|
+
setSelectionAnchor(null);
|
|
861
|
+
return;
|
|
862
|
+
}
|
|
863
|
+
// Cursor is on the first line — fall through to history
|
|
864
|
+
}
|
|
865
|
+
// Only navigate history when input is empty or already browsing history
|
|
866
|
+
if (value && historyIndexRef.current === -1)
|
|
867
|
+
return;
|
|
606
868
|
setSelectionAnchor(null);
|
|
607
869
|
const history = historyRef.current;
|
|
608
870
|
if (history.length === 0)
|
|
609
871
|
return;
|
|
872
|
+
// Save draft when first entering history mode
|
|
873
|
+
if (historyIndexRef.current === -1) {
|
|
874
|
+
draftRef.current = value;
|
|
875
|
+
}
|
|
610
876
|
const newIndex = historyIndexRef.current === -1
|
|
611
877
|
? history.length - 1
|
|
612
878
|
: Math.max(0, historyIndexRef.current - 1);
|
|
@@ -621,6 +887,28 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
621
887
|
setMenuIndex((i) => Math.min(filteredCommands.length - 1, i + 1));
|
|
622
888
|
return;
|
|
623
889
|
}
|
|
890
|
+
// If there's multi-line text, try moving cursor down first
|
|
891
|
+
if (value.includes("\n") && historyIndexRef.current === -1) {
|
|
892
|
+
const before = value.slice(0, cursor);
|
|
893
|
+
const after = value.slice(cursor);
|
|
894
|
+
const nextNewline = after.indexOf("\n");
|
|
895
|
+
if (nextNewline !== -1) {
|
|
896
|
+
// Move cursor to same column on next line
|
|
897
|
+
const lineStart = before.lastIndexOf("\n") + 1;
|
|
898
|
+
const col = cursor - lineStart;
|
|
899
|
+
const nextLineStart = cursor + nextNewline + 1;
|
|
900
|
+
const nextLineEnd = value.indexOf("\n", nextLineStart);
|
|
901
|
+
const nextLineLen = (nextLineEnd === -1 ? value.length : nextLineEnd) - nextLineStart;
|
|
902
|
+
setCursor(nextLineStart + Math.min(col, nextLineLen));
|
|
903
|
+
setSelectionAnchor(null);
|
|
904
|
+
return;
|
|
905
|
+
}
|
|
906
|
+
// Cursor is on the last line — fall through, but don't navigate history
|
|
907
|
+
// since we have actual content typed
|
|
908
|
+
if (onDownAtEnd)
|
|
909
|
+
onDownAtEnd();
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
624
912
|
setSelectionAnchor(null);
|
|
625
913
|
const history = historyRef.current;
|
|
626
914
|
if (historyIndexRef.current === -1) {
|
|
@@ -631,8 +919,9 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
631
919
|
const newIndex = historyIndexRef.current + 1;
|
|
632
920
|
if (newIndex >= history.length) {
|
|
633
921
|
historyIndexRef.current = -1;
|
|
634
|
-
setValue(
|
|
635
|
-
setCursor(
|
|
922
|
+
setValue(draftRef.current);
|
|
923
|
+
setCursor(draftRef.current.length);
|
|
924
|
+
draftRef.current = "";
|
|
636
925
|
}
|
|
637
926
|
else {
|
|
638
927
|
historyIndexRef.current = newIndex;
|
|
@@ -868,7 +1157,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
|
|
|
868
1157
|
else {
|
|
869
1158
|
cursorInDisplay = pasteOffset + indicator.length;
|
|
870
1159
|
}
|
|
871
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: disabled ? theme.textDim : theme.inputPrompt, bold: true, children: PROMPT }), _jsx(Text, { color: theme.text, children: displayStr.slice(0, cursorInDisplay) }), _jsx(Text, { color: theme.text, inverse: cursorVisible, children: cursorInDisplay < displayStr.length ? displayStr[cursorInDisplay] : " " }), cursorInDisplay + 1 < displayStr.length && (_jsx(Text, { color: theme.text, children: displayStr.slice(cursorInDisplay + 1) }))] }));
|
|
1160
|
+
return (_jsxs(Box, { children: [searchMode ? (_jsxs(Text, { color: searchFailed ? theme.error : theme.inputPrompt, bold: true, children: [searchFailed ? "(fail)" : "(i-search)", `'${searchQuery}': `] })) : (_jsx(Text, { color: disabled ? theme.textDim : theme.inputPrompt, bold: true, children: PROMPT })), _jsx(Text, { color: theme.text, children: displayStr.slice(0, cursorInDisplay) }), _jsx(Text, { color: theme.text, inverse: cursorVisible, children: cursorInDisplay < displayStr.length ? displayStr[cursorInDisplay] : " " }), cursorInDisplay + 1 < displayStr.length && (_jsx(Text, { color: theme.text, children: displayStr.slice(cursorInDisplay + 1) }))] }));
|
|
872
1161
|
}
|
|
873
1162
|
return displayLines.map((line, i) => {
|
|
874
1163
|
const showCursor = i === cursorDisplayLine;
|