@kenkaiiii/ggcoder 4.3.150 → 4.3.151
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/ui/App.d.ts +64 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +344 -88
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/AssistantMessage.d.ts +1 -1
- package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
- package/dist/ui/components/AssistantMessage.js +9 -1
- package/dist/ui/components/AssistantMessage.js.map +1 -1
- package/dist/ui/components/StreamingArea.d.ts.map +1 -1
- package/dist/ui/components/StreamingArea.js +7 -3
- package/dist/ui/components/StreamingArea.js.map +1 -1
- package/dist/ui/render.d.ts +57 -0
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +103 -25
- package/dist/ui/render.js.map +1 -1
- package/dist/utils/plan-steps.d.ts +22 -0
- package/dist/utils/plan-steps.d.ts.map +1 -1
- package/dist/utils/plan-steps.js +32 -0
- package/dist/utils/plan-steps.js.map +1 -1
- package/package.json +3 -3
package/dist/ui/render.js
CHANGED
|
@@ -12,19 +12,59 @@ function ThemeProvider({ initial, children, }) {
|
|
|
12
12
|
const setTheme = React.useCallback((name) => setThemeName(name), []);
|
|
13
13
|
return React.createElement(SetThemeContext.Provider, { value: setTheme }, React.createElement(ThemeContext.Provider, { value: theme }, children));
|
|
14
14
|
}
|
|
15
|
+
const INK_OPTIONS = {
|
|
16
|
+
// Enable kitty keyboard protocol so terminals that support it can
|
|
17
|
+
// distinguish Shift+Enter from Enter (needed for multiline input).
|
|
18
|
+
// Terminals without support gracefully ignore this.
|
|
19
|
+
kittyKeyboard: {
|
|
20
|
+
mode: "enabled",
|
|
21
|
+
flags: ["disambiguateEscapeCodes"],
|
|
22
|
+
},
|
|
23
|
+
// Ink's built-in exitOnCtrlC checks for the raw \x03 byte, but with
|
|
24
|
+
// kitty keyboard protocol Ctrl+C arrives as \x1b[99;5u so the check
|
|
25
|
+
// never matches. Worse, useInput skips calling our handler when
|
|
26
|
+
// exitOnCtrlC is true. Disable it so our InputArea handles Ctrl+C.
|
|
27
|
+
exitOnCtrlC: false,
|
|
28
|
+
};
|
|
15
29
|
export async function renderApp(config) {
|
|
16
30
|
const themeSetting = config.theme ?? "auto";
|
|
17
31
|
const resolvedTheme = themeSetting === "auto" ? await detectTheme() : themeSetting;
|
|
18
32
|
// Clear screen + scrollback so old commands don't appear above the TUI
|
|
19
33
|
process.stdout.write("\x1b[2J\x1b[3J\x1b[H");
|
|
20
|
-
|
|
21
|
-
|
|
34
|
+
// Runtime state lives in this closure so unmount/remount doesn't lose
|
|
35
|
+
// the user's runtime model/provider/thinking choices.
|
|
36
|
+
const runtimeState = {
|
|
22
37
|
model: config.model,
|
|
38
|
+
provider: config.provider,
|
|
39
|
+
thinking: config.thinking,
|
|
40
|
+
};
|
|
41
|
+
const onRuntimeStateChange = (updates) => {
|
|
42
|
+
Object.assign(runtimeState, updates);
|
|
43
|
+
};
|
|
44
|
+
// Session state — App mirrors its React state here via useEffects, so
|
|
45
|
+
// remounts (overlay close, plan reject) can re-seed from the snapshot
|
|
46
|
+
// without losing the conversation.
|
|
47
|
+
const sessionStore = {
|
|
48
|
+
messages: config.messages,
|
|
49
|
+
history: config.initialHistory ?? [{ kind: "banner", id: "banner" }],
|
|
50
|
+
approvedPlanPath: undefined,
|
|
51
|
+
planSteps: [],
|
|
52
|
+
sessionPath: config.sessionPath,
|
|
53
|
+
sessionTitle: undefined,
|
|
54
|
+
sessionTitleGenerated: false,
|
|
55
|
+
overlay: config.initialOverlay ?? null,
|
|
56
|
+
planAutoExpand: false,
|
|
57
|
+
pendingAction: undefined,
|
|
58
|
+
};
|
|
59
|
+
const ref = { instance: null };
|
|
60
|
+
const buildElement = () => React.createElement(ThemeProvider, { initial: resolvedTheme }, React.createElement(TerminalSizeProvider, null, React.createElement(AnimationProvider, null, React.createElement(App, {
|
|
61
|
+
provider: runtimeState.provider,
|
|
62
|
+
model: runtimeState.model,
|
|
23
63
|
tools: config.tools,
|
|
24
64
|
webSearch: config.webSearch,
|
|
25
|
-
messages:
|
|
65
|
+
messages: sessionStore.messages,
|
|
26
66
|
maxTokens: config.maxTokens,
|
|
27
|
-
thinking:
|
|
67
|
+
thinking: runtimeState.thinking,
|
|
28
68
|
apiKey: config.apiKey,
|
|
29
69
|
baseUrl: config.baseUrl,
|
|
30
70
|
accountId: config.accountId,
|
|
@@ -35,9 +75,9 @@ export async function renderApp(config) {
|
|
|
35
75
|
onSlashCommand: config.onSlashCommand,
|
|
36
76
|
loggedInProviders: config.loggedInProviders,
|
|
37
77
|
credentialsByProvider: config.credentialsByProvider,
|
|
38
|
-
initialHistory:
|
|
78
|
+
initialHistory: sessionStore.history,
|
|
39
79
|
sessionsDir: config.sessionsDir,
|
|
40
|
-
sessionPath:
|
|
80
|
+
sessionPath: sessionStore.sessionPath,
|
|
41
81
|
processManager: config.processManager,
|
|
42
82
|
settingsFile: config.settingsFile,
|
|
43
83
|
mcpManager: config.mcpManager,
|
|
@@ -48,24 +88,62 @@ export async function renderApp(config) {
|
|
|
48
88
|
skills: config.skills,
|
|
49
89
|
initialOverlay: config.initialOverlay,
|
|
50
90
|
rebuildToolsForCwd: config.rebuildToolsForCwd,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
91
|
+
resetUI,
|
|
92
|
+
onRuntimeStateChange,
|
|
93
|
+
sessionStore,
|
|
94
|
+
}))));
|
|
95
|
+
// Nuke-and-rebuild for every path that clears the screen. Patching Ink's
|
|
96
|
+
// internal frame tracking (log-update reset, lastOutput cleared,
|
|
97
|
+
// fullStaticOutput dropped) looks correct for one frame but the live area
|
|
98
|
+
// drifts on subsequent streaming responses — Ink's cursor math depends on
|
|
99
|
+
// terminal-state assumptions that ANSI clearing breaks. The only RELIABLE
|
|
100
|
+
// reset is to tear down the React tree entirely and render a fresh Ink
|
|
101
|
+
// instance. gg-boss arrived at the same conclusion (orchestrator-app.tsx).
|
|
102
|
+
function resetUI(options) {
|
|
103
|
+
const old = ref.instance;
|
|
104
|
+
if (!old)
|
|
105
|
+
return;
|
|
106
|
+
if (options?.wipeSession) {
|
|
107
|
+
// Wipe everything session-scoped FIRST. Other options below can then
|
|
108
|
+
// re-seed specific fields (e.g. plan accept wipes the chat then sets
|
|
109
|
+
// approvedPlanPath + planSteps for the implementation phase).
|
|
110
|
+
sessionStore.history = [{ kind: "banner", id: "banner" }];
|
|
111
|
+
sessionStore.approvedPlanPath = undefined;
|
|
112
|
+
sessionStore.planSteps = [];
|
|
113
|
+
sessionStore.sessionTitle = undefined;
|
|
114
|
+
sessionStore.sessionTitleGenerated = false;
|
|
115
|
+
}
|
|
116
|
+
if (options?.messages)
|
|
117
|
+
sessionStore.messages = options.messages;
|
|
118
|
+
if (options?.history)
|
|
119
|
+
sessionStore.history = options.history;
|
|
120
|
+
if (options?.approvedPlanPath !== undefined) {
|
|
121
|
+
sessionStore.approvedPlanPath = options.approvedPlanPath;
|
|
122
|
+
}
|
|
123
|
+
if (options?.planSteps !== undefined)
|
|
124
|
+
sessionStore.planSteps = options.planSteps;
|
|
125
|
+
if (options?.sessionPath !== undefined)
|
|
126
|
+
sessionStore.sessionPath = options.sessionPath;
|
|
127
|
+
if (options?.pendingAction)
|
|
128
|
+
sessionStore.pendingAction = options.pendingAction;
|
|
129
|
+
process.stdout.write("\x1b[2J\x1b[3J\x1b[H");
|
|
130
|
+
old.unmount();
|
|
131
|
+
ref.instance = render(buildElement(), INK_OPTIONS);
|
|
132
|
+
}
|
|
133
|
+
ref.instance = render(buildElement(), INK_OPTIONS);
|
|
134
|
+
// Loop: when /clear remounts, the OLD instance's waitUntilExit resolves
|
|
135
|
+
// (because unmount() resolves it). We then need to wait on the NEW
|
|
136
|
+
// instance. If exit was final (no replacement), ref.instance is nulled
|
|
137
|
+
// by unmount and the loop ends.
|
|
138
|
+
while (true) {
|
|
139
|
+
const current = ref.instance;
|
|
140
|
+
if (!current)
|
|
141
|
+
return;
|
|
142
|
+
await current.waitUntilExit();
|
|
143
|
+
if (ref.instance === current) {
|
|
144
|
+
ref.instance = null;
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
70
148
|
}
|
|
71
149
|
//# sourceMappingURL=render.js.map
|
package/dist/ui/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/ui/render.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,28 @@ export declare function extractPlanSteps(planContent: string): PlanStep[];
|
|
|
30
30
|
* not meant to be shown to the user.
|
|
31
31
|
*/
|
|
32
32
|
export declare function stripDoneMarkers(text: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Segment of an assistant turn's text after [DONE:N] markers are split
|
|
35
|
+
* out for inline rendering. Used by the chat to render "✓ Step N: <desc>"
|
|
36
|
+
* markers in the same temporal order the agent emitted them, instead of
|
|
37
|
+
* stripping markers to invisible whitespace.
|
|
38
|
+
*/
|
|
39
|
+
export type DisplaySegment = {
|
|
40
|
+
kind: "text";
|
|
41
|
+
text: string;
|
|
42
|
+
} | {
|
|
43
|
+
kind: "done";
|
|
44
|
+
stepNum: number;
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Split text on [DONE:N] markers, returning an array of segments. Empty/
|
|
49
|
+
* whitespace-only text segments are dropped. Step description is looked
|
|
50
|
+
* up in `steps` (falls back to "" so the renderer can show just the step
|
|
51
|
+
* number when the plan is no longer in scope, e.g. after onComplete
|
|
52
|
+
* cleared planSteps).
|
|
53
|
+
*/
|
|
54
|
+
export declare function segmentDisplayText(text: string, steps: PlanStep[]): DisplaySegment[];
|
|
33
55
|
/**
|
|
34
56
|
* Scan text for [DONE:n] markers and return the set of completed step numbers.
|
|
35
57
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-steps.d.ts","sourceRoot":"","sources":["../../src/utils/plan-steps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CA0BhE;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAUxF"}
|
|
1
|
+
{"version":3,"file":"plan-steps.d.ts","sourceRoot":"","sources":["../../src/utils/plan-steps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CA0BhE;AAkBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAwBpF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAUxF"}
|
package/dist/utils/plan-steps.js
CHANGED
|
@@ -63,6 +63,38 @@ function extractStepsSection(planContent) {
|
|
|
63
63
|
export function stripDoneMarkers(text) {
|
|
64
64
|
return text.replace(/\s*\[DONE:\d+\]\s*/gi, " ").replace(/ +/g, " ");
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Split text on [DONE:N] markers, returning an array of segments. Empty/
|
|
68
|
+
* whitespace-only text segments are dropped. Step description is looked
|
|
69
|
+
* up in `steps` (falls back to "" so the renderer can show just the step
|
|
70
|
+
* number when the plan is no longer in scope, e.g. after onComplete
|
|
71
|
+
* cleared planSteps).
|
|
72
|
+
*/
|
|
73
|
+
export function segmentDisplayText(text, steps) {
|
|
74
|
+
const segments = [];
|
|
75
|
+
const pattern = /\[DONE:(\d+)\]/gi;
|
|
76
|
+
let lastIdx = 0;
|
|
77
|
+
for (const match of text.matchAll(pattern)) {
|
|
78
|
+
const matchIdx = match.index ?? 0;
|
|
79
|
+
const before = text.slice(lastIdx, matchIdx);
|
|
80
|
+
if (before.trim()) {
|
|
81
|
+
segments.push({ kind: "text", text: before });
|
|
82
|
+
}
|
|
83
|
+
const stepNum = parseInt(match[1], 10);
|
|
84
|
+
const step = steps.find((s) => s.step === stepNum);
|
|
85
|
+
segments.push({
|
|
86
|
+
kind: "done",
|
|
87
|
+
stepNum,
|
|
88
|
+
description: step?.text ?? "",
|
|
89
|
+
});
|
|
90
|
+
lastIdx = matchIdx + match[0].length;
|
|
91
|
+
}
|
|
92
|
+
const after = text.slice(lastIdx);
|
|
93
|
+
if (after.trim()) {
|
|
94
|
+
segments.push({ kind: "text", text: after });
|
|
95
|
+
}
|
|
96
|
+
return segments;
|
|
97
|
+
}
|
|
66
98
|
/**
|
|
67
99
|
* Scan text for [DONE:n] markers and return the set of completed step numbers.
|
|
68
100
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-steps.js","sourceRoot":"","sources":["../../src/utils/plan-steps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plan-steps.js","sourceRoot":"","sources":["../../src/utils/plan-steps.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kenkaiiii/ggcoder",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.151",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "CLI coding agent with OAuth authentication for Anthropic and OpenAI",
|
|
6
6
|
"license": "MIT",
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"string-width": "^8.2.0",
|
|
79
79
|
"wrap-ansi": "^10.0.0",
|
|
80
80
|
"zod": "^4.4.3",
|
|
81
|
-
"@kenkaiiii/gg-agent": "4.3.
|
|
82
|
-
"@kenkaiiii/gg-ai": "4.3.
|
|
81
|
+
"@kenkaiiii/gg-agent": "4.3.151",
|
|
82
|
+
"@kenkaiiii/gg-ai": "4.3.151",
|
|
83
83
|
"@kenkaiiii/ggcoder-eyes": "0.1.2",
|
|
84
84
|
"@kenkaiiii/gg-pixel": "4.3.94"
|
|
85
85
|
},
|