@kenkaiiii/ggcoder 4.2.72 → 4.2.74
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 +174 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/core/settings-manager.d.ts +1 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +14 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/modes/agent-home-mode.d.ts +21 -0
- package/dist/modes/agent-home-mode.d.ts.map +1 -0
- package/dist/modes/agent-home-mode.js +553 -0
- package/dist/modes/agent-home-mode.js.map +1 -0
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +25 -3
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/buddy/Buddy.d.ts +15 -0
- package/dist/ui/buddy/Buddy.d.ts.map +1 -0
- package/dist/ui/buddy/Buddy.js +118 -0
- package/dist/ui/buddy/Buddy.js.map +1 -0
- package/dist/ui/buddy/gacha.d.ts +8 -0
- package/dist/ui/buddy/gacha.d.ts.map +1 -0
- package/dist/ui/buddy/gacha.js +94 -0
- package/dist/ui/buddy/gacha.js.map +1 -0
- package/dist/ui/buddy/species.d.ts +52 -0
- package/dist/ui/buddy/species.d.ts.map +1 -0
- package/dist/ui/buddy/species.js +257 -0
- package/dist/ui/buddy/species.js.map +1 -0
- package/dist/ui/components/ActivityIndicator.d.ts +6 -1
- package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
- package/dist/ui/components/ActivityIndicator.js +52 -8
- package/dist/ui/components/ActivityIndicator.js.map +1 -1
- package/dist/ui/components/AnimationContext.d.ts +5 -0
- package/dist/ui/components/AnimationContext.d.ts.map +1 -1
- package/dist/ui/components/AnimationContext.js +8 -1
- package/dist/ui/components/AnimationContext.js.map +1 -1
- package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
- package/dist/ui/components/AssistantMessage.js +3 -2
- package/dist/ui/components/AssistantMessage.js.map +1 -1
- package/dist/ui/components/BackgroundTasksBar.js +2 -2
- package/dist/ui/components/BackgroundTasksBar.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +3 -1
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +23 -48
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/Markdown.d.ts +4 -0
- package/dist/ui/components/Markdown.d.ts.map +1 -1
- package/dist/ui/components/Markdown.js +109 -6
- package/dist/ui/components/Markdown.js.map +1 -1
- package/dist/ui/components/MessageResponse.d.ts +25 -0
- package/dist/ui/components/MessageResponse.d.ts.map +1 -0
- package/dist/ui/components/MessageResponse.js +42 -0
- package/dist/ui/components/MessageResponse.js.map +1 -0
- package/dist/ui/components/NoSelect.d.ts +20 -0
- package/dist/ui/components/NoSelect.d.ts.map +1 -0
- package/dist/ui/components/NoSelect.js +14 -0
- package/dist/ui/components/NoSelect.js.map +1 -0
- package/dist/ui/components/Ratchet.d.ts +20 -0
- package/dist/ui/components/Ratchet.d.ts.map +1 -0
- package/dist/ui/components/Ratchet.js +30 -0
- package/dist/ui/components/Ratchet.js.map +1 -0
- package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ServerToolExecution.js +5 -6
- package/dist/ui/components/ServerToolExecution.js.map +1 -1
- package/dist/ui/components/Spinner.d.ts +8 -2
- package/dist/ui/components/Spinner.d.ts.map +1 -1
- package/dist/ui/components/Spinner.js +51 -5
- package/dist/ui/components/Spinner.js.map +1 -1
- package/dist/ui/components/StreamingArea.d.ts.map +1 -1
- package/dist/ui/components/StreamingArea.js +4 -3
- package/dist/ui/components/StreamingArea.js.map +1 -1
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.js +4 -3
- package/dist/ui/components/SubAgentPanel.js.map +1 -1
- package/dist/ui/components/ToolExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolExecution.js +38 -12
- package/dist/ui/components/ToolExecution.js.map +1 -1
- package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
- package/dist/ui/components/ToolGroupExecution.js +21 -17
- package/dist/ui/components/ToolGroupExecution.js.map +1 -1
- package/dist/ui/components/ToolUseLoader.d.ts +19 -0
- package/dist/ui/components/ToolUseLoader.d.ts.map +1 -0
- package/dist/ui/components/ToolUseLoader.js +42 -0
- package/dist/ui/components/ToolUseLoader.js.map +1 -0
- package/dist/ui/constants/figures.d.ts +30 -0
- package/dist/ui/constants/figures.d.ts.map +1 -0
- package/dist/ui/constants/figures.js +41 -0
- package/dist/ui/constants/figures.js.map +1 -0
- package/dist/ui/hooks/useAgentLoop.d.ts +8 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +16 -0
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useBlink.d.ts +11 -0
- package/dist/ui/hooks/useBlink.d.ts.map +1 -0
- package/dist/ui/hooks/useBlink.js +19 -0
- package/dist/ui/hooks/useBlink.js.map +1 -0
- package/dist/ui/hooks/useMinDisplayTime.d.ts +11 -0
- package/dist/ui/hooks/useMinDisplayTime.d.ts.map +1 -0
- package/dist/ui/hooks/useMinDisplayTime.js +34 -0
- package/dist/ui/hooks/useMinDisplayTime.js.map +1 -0
- package/dist/ui/spinner-frames.d.ts +1 -0
- package/dist/ui/spinner-frames.d.ts.map +1 -1
- package/dist/ui/spinner-frames.js +15 -5
- package/dist/ui/spinner-frames.js.map +1 -1
- package/dist/ui/theme/dark.json +2 -1
- package/dist/ui/theme/light.json +2 -1
- package/dist/ui/theme/theme.d.ts +1 -0
- package/dist/ui/theme/theme.d.ts.map +1 -1
- package/dist/ui/utils/markdown-cache.d.ts +12 -0
- package/dist/ui/utils/markdown-cache.d.ts.map +1 -0
- package/dist/ui/utils/markdown-cache.js +43 -0
- package/dist/ui/utils/markdown-cache.js.map +1 -0
- package/dist/ui/utils/word-diff.d.ts +11 -0
- package/dist/ui/utils/word-diff.d.ts.map +1 -0
- package/dist/ui/utils/word-diff.js +23 -0
- package/dist/ui/utils/word-diff.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useState, useRef, useEffect } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Hold a value for at least `minMs` milliseconds before switching to the
|
|
4
|
+
* next value. Prevents rapid visual flicker when values change faster
|
|
5
|
+
* than a human can read (e.g. collapsed tool group hints).
|
|
6
|
+
*
|
|
7
|
+
* If the value changes again before the timer fires the timer restarts
|
|
8
|
+
* with the newest value, so the displayed value is never stale by more
|
|
9
|
+
* than one transition.
|
|
10
|
+
*/
|
|
11
|
+
export function useMinDisplayTime(value, minMs = 700) {
|
|
12
|
+
const [displayed, setDisplayed] = useState(value);
|
|
13
|
+
const timerRef = useRef(null);
|
|
14
|
+
const latestRef = useRef(value);
|
|
15
|
+
latestRef.current = value;
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
// First render — sync immediately
|
|
18
|
+
if (displayed === value)
|
|
19
|
+
return;
|
|
20
|
+
// Clear any pending timer
|
|
21
|
+
if (timerRef.current)
|
|
22
|
+
clearTimeout(timerRef.current);
|
|
23
|
+
timerRef.current = setTimeout(() => {
|
|
24
|
+
setDisplayed(latestRef.current);
|
|
25
|
+
timerRef.current = null;
|
|
26
|
+
}, minMs);
|
|
27
|
+
return () => {
|
|
28
|
+
if (timerRef.current)
|
|
29
|
+
clearTimeout(timerRef.current);
|
|
30
|
+
};
|
|
31
|
+
}, [value, minMs, displayed]);
|
|
32
|
+
return displayed;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=useMinDisplayTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMinDisplayTime.js","sourceRoot":"","sources":["../../../src/ui/hooks/useMinDisplayTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpD;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAI,KAAQ,EAAE,KAAK,GAAG,GAAG;IACxD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAuC,IAAI,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;IAE1B,SAAS,CAAC,GAAG,EAAE;QACb,kCAAkC;QAClC,IAAI,SAAS,KAAK,KAAK;YAAE,OAAO;QAEhC,0BAA0B;QAC1B,IAAI,QAAQ,CAAC,OAAO;YAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAErD,QAAQ,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,OAAO;gBAAE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9B,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner-frames.d.ts","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spinner-frames.d.ts","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,cAAc,UAAiC,CAAC;AAE7D,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAGpC,eAAO,MAAM,kBAAkB,WAAW,CAAC"}
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
-
// Sparkle character set —
|
|
2
|
-
//
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
// Sparkle character set — ping-pong cycle (forward then reverse)
|
|
2
|
+
// for a distinctive, playful feel. Ghostty gets a variant to avoid
|
|
3
|
+
// offset rendering of ✽.
|
|
4
|
+
function getSpinnerChars() {
|
|
5
|
+
if (process.env.TERM === "xterm-ghostty") {
|
|
6
|
+
return ["\u00B7", "\u2722", "\u2733", "\u2736", "\u273B", "*"];
|
|
7
|
+
}
|
|
8
|
+
return process.platform === "darwin"
|
|
9
|
+
? ["\u00B7", "\u2722", "\u2733", "\u2736", "\u273B", "\u273D"]
|
|
10
|
+
: ["\u00B7", "\u2722", "*", "\u2736", "\u273B", "\u273D"];
|
|
11
|
+
}
|
|
12
|
+
const chars = getSpinnerChars();
|
|
13
|
+
export const SPINNER_FRAMES = [...chars, ...chars.reverse()];
|
|
6
14
|
export const SPINNER_INTERVAL = 120;
|
|
15
|
+
// Reduced-motion: static filled circle with slow dim/undim cycle
|
|
16
|
+
export const REDUCED_MOTION_DOT = "\u25CF"; // ●
|
|
7
17
|
//# sourceMappingURL=spinner-frames.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spinner-frames.js","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,
|
|
1
|
+
{"version":3,"file":"spinner-frames.js","sourceRoot":"","sources":["../../src/ui/spinner-frames.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,mEAAmE;AACnE,yBAAyB;AACzB,SAAS,eAAe;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACzC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAClC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAC9D,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAEpC,iEAAiE;AACjE,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,CAAC,IAAI"}
|
package/dist/ui/theme/dark.json
CHANGED
package/dist/ui/theme/light.json
CHANGED
package/dist/ui/theme/theme.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAG1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAEvD;AAED,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAG1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAEvD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AAE5D,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Token } from "marked";
|
|
2
|
+
/** Simple LRU cache for parsed markdown tokens. */
|
|
3
|
+
declare class MarkdownLRUCache {
|
|
4
|
+
private cache;
|
|
5
|
+
get(body: string): Token[] | undefined;
|
|
6
|
+
set(body: string, tokens: Token[]): void;
|
|
7
|
+
private hash;
|
|
8
|
+
}
|
|
9
|
+
export declare const markdownTokenCache: MarkdownLRUCache;
|
|
10
|
+
export declare function containsMarkdownSyntax(text: string): boolean;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=markdown-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-cache.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIpC,mDAAmD;AACnD,cAAM,gBAAgB;IACpB,OAAO,CAAC,KAAK,CAA8B;IAE3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,SAAS;IAUtC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAYxC,OAAO,CAAC,IAAI;CAGb;AAED,eAAO,MAAM,kBAAkB,kBAAyB,CAAC;AASzD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
const MAX_SIZE = 500;
|
|
3
|
+
/** Simple LRU cache for parsed markdown tokens. */
|
|
4
|
+
class MarkdownLRUCache {
|
|
5
|
+
cache = new Map();
|
|
6
|
+
get(body) {
|
|
7
|
+
const key = this.hash(body);
|
|
8
|
+
const entry = this.cache.get(key);
|
|
9
|
+
if (!entry)
|
|
10
|
+
return undefined;
|
|
11
|
+
// Move to end (most recently used)
|
|
12
|
+
this.cache.delete(key);
|
|
13
|
+
this.cache.set(key, entry);
|
|
14
|
+
return entry;
|
|
15
|
+
}
|
|
16
|
+
set(body, tokens) {
|
|
17
|
+
const key = this.hash(body);
|
|
18
|
+
// Delete first to reset insertion order
|
|
19
|
+
this.cache.delete(key);
|
|
20
|
+
this.cache.set(key, tokens);
|
|
21
|
+
// Evict oldest if over capacity
|
|
22
|
+
if (this.cache.size > MAX_SIZE) {
|
|
23
|
+
const oldest = this.cache.keys().next().value;
|
|
24
|
+
this.cache.delete(oldest);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
hash(body) {
|
|
28
|
+
return createHash("sha256").update(body).digest("hex");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export const markdownTokenCache = new MarkdownLRUCache();
|
|
32
|
+
/**
|
|
33
|
+
* Check whether text contains markdown syntax worth parsing.
|
|
34
|
+
* If it doesn't, the caller can skip marked.lexer() entirely.
|
|
35
|
+
* Matches Claude Code's MD_SYNTAX_RE patterns.
|
|
36
|
+
*/
|
|
37
|
+
const MARKDOWN_SYNTAX_RE = /[#*`|[>\-_~]|\n\n|^\d+\. |\n\d+\. /m;
|
|
38
|
+
export function containsMarkdownSyntax(text) {
|
|
39
|
+
// Only check the first 500 chars for performance
|
|
40
|
+
const sample = text.length > 500 ? text.slice(0, 500) : text;
|
|
41
|
+
return MARKDOWN_SYNTAX_RE.test(sample);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=markdown-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-cache.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,mDAAmD;AACnD,MAAM,gBAAgB;IACZ,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE3C,GAAG,CAAC,IAAY;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,mCAAmC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,MAAe;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,wCAAwC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,iDAAiD;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface WordSegment {
|
|
2
|
+
text: string;
|
|
3
|
+
type: "added" | "removed" | "unchanged";
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Compute word-level diff between two strings.
|
|
7
|
+
* Uses diffWordsWithSpace (not diffWords) so that whitespace/indentation
|
|
8
|
+
* changes are visible — critical for code where indentation is meaningful.
|
|
9
|
+
*/
|
|
10
|
+
export declare function computeWordDiff(oldLine: string, newLine: string): WordSegment[];
|
|
11
|
+
//# sourceMappingURL=word-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"word-diff.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/word-diff.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;CACzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAe/E"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { diffWordsWithSpace } from "diff";
|
|
2
|
+
/**
|
|
3
|
+
* Compute word-level diff between two strings.
|
|
4
|
+
* Uses diffWordsWithSpace (not diffWords) so that whitespace/indentation
|
|
5
|
+
* changes are visible — critical for code where indentation is meaningful.
|
|
6
|
+
*/
|
|
7
|
+
export function computeWordDiff(oldLine, newLine) {
|
|
8
|
+
const changes = diffWordsWithSpace(oldLine, newLine);
|
|
9
|
+
const segments = [];
|
|
10
|
+
for (const change of changes) {
|
|
11
|
+
if (change.added) {
|
|
12
|
+
segments.push({ text: change.value, type: "added" });
|
|
13
|
+
}
|
|
14
|
+
else if (change.removed) {
|
|
15
|
+
segments.push({ text: change.value, type: "removed" });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
segments.push({ text: change.value, type: "unchanged" });
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return segments;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=word-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"word-diff.js","sourceRoot":"","sources":["../../../src/ui/utils/word-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAO1C;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,OAAe;IAC9D,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACzD,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenkaiiii/ggcoder",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.74",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI coding agent with OAuth authentication for Anthropic and OpenAI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,9 +37,10 @@
|
|
|
37
37
|
"sharp": "^0.34.5",
|
|
38
38
|
"string-width": "^8.2.0",
|
|
39
39
|
"wrap-ansi": "^10.0.0",
|
|
40
|
+
"@kenkaiiii/agent-home-sdk": "^0.3.8",
|
|
40
41
|
"zod": "^4.3.6",
|
|
41
|
-
"@kenkaiiii/gg-
|
|
42
|
-
"@kenkaiiii/gg-
|
|
42
|
+
"@kenkaiiii/gg-ai": "4.2.74",
|
|
43
|
+
"@kenkaiiii/gg-agent": "4.2.74"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
46
|
"@types/node": "^25.5.0",
|