@kenkaiiii/ggcoder 5.16.0 → 5.18.0
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/README.md +2 -2
- package/dist/app-sidecar.js +303 -88
- package/dist/app-sidecar.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +24 -2
- package/dist/cli.js.map +1 -1
- package/dist/core/agent-session-review-coverage.test.d.ts +2 -0
- package/dist/core/agent-session-review-coverage.test.d.ts.map +1 -0
- package/dist/core/agent-session-review-coverage.test.js +57 -0
- package/dist/core/agent-session-review-coverage.test.js.map +1 -0
- package/dist/core/agent-session-tool-result-policy.test.d.ts +2 -0
- package/dist/core/agent-session-tool-result-policy.test.d.ts.map +1 -0
- package/dist/core/agent-session-tool-result-policy.test.js +12 -0
- package/dist/core/agent-session-tool-result-policy.test.js.map +1 -0
- package/dist/core/agent-session.d.ts +19 -12
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +185 -66
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-providers.js +1 -1
- package/dist/core/auth-providers.js.map +1 -1
- package/dist/core/compaction/compactor.test.js +2 -1
- package/dist/core/compaction/compactor.test.js.map +1 -1
- package/dist/core/event-bus.d.ts +2 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/ideal-review.d.ts +27 -0
- package/dist/core/ideal-review.d.ts.map +1 -1
- package/dist/core/ideal-review.js +64 -0
- package/dist/core/ideal-review.js.map +1 -1
- package/dist/core/ideal-review.test.js +34 -1
- package/dist/core/ideal-review.test.js.map +1 -1
- package/dist/core/lsp/client.d.ts +3 -0
- package/dist/core/lsp/client.d.ts.map +1 -1
- package/dist/core/lsp/client.js +20 -0
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/manager.d.ts +32 -9
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +89 -37
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/lsp/manager.test.js +56 -4
- package/dist/core/lsp/manager.test.js.map +1 -1
- package/dist/core/project-discovery.d.ts +4 -11
- package/dist/core/project-discovery.d.ts.map +1 -1
- package/dist/core/project-discovery.js +33 -30
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/project-discovery.test.js +148 -0
- package/dist/core/project-discovery.test.js.map +1 -1
- package/dist/core/run-lifecycle.d.ts +40 -0
- package/dist/core/run-lifecycle.d.ts.map +1 -0
- package/dist/core/run-lifecycle.js +95 -0
- package/dist/core/run-lifecycle.js.map +1 -0
- package/dist/core/run-lifecycle.test.d.ts +2 -0
- package/dist/core/run-lifecycle.test.d.ts.map +1 -0
- package/dist/core/run-lifecycle.test.js +64 -0
- package/dist/core/run-lifecycle.test.js.map +1 -0
- package/dist/core/session-compaction.d.ts +3 -0
- package/dist/core/session-compaction.d.ts.map +1 -1
- package/dist/core/session-compaction.js +14 -1
- package/dist/core/session-compaction.js.map +1 -1
- package/dist/core/session-compaction.test.js +5 -0
- package/dist/core/session-compaction.test.js.map +1 -1
- package/dist/core/session-manager.d.ts +33 -2
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +73 -2
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/session-manager.test.js +97 -2
- package/dist/core/session-manager.test.js.map +1 -1
- package/dist/core/session-preview.d.ts +11 -0
- package/dist/core/session-preview.d.ts.map +1 -0
- package/dist/core/session-preview.js +50 -0
- package/dist/core/session-preview.js.map +1 -0
- package/dist/core/subagent-manager.d.ts +42 -7
- package/dist/core/subagent-manager.d.ts.map +1 -1
- package/dist/core/subagent-manager.js +346 -30
- package/dist/core/subagent-manager.js.map +1 -1
- package/dist/core/subagent-manager.test.js +195 -3
- package/dist/core/subagent-manager.test.js.map +1 -1
- package/dist/core/subagent-store.d.ts +20 -0
- package/dist/core/subagent-store.d.ts.map +1 -0
- package/dist/core/subagent-store.js +177 -0
- package/dist/core/subagent-store.js.map +1 -0
- package/dist/core/subagent-store.test.d.ts +2 -0
- package/dist/core/subagent-store.test.d.ts.map +1 -0
- package/dist/core/subagent-store.test.js +94 -0
- package/dist/core/subagent-store.test.js.map +1 -0
- package/dist/modes/agent-home-mode.d.ts.map +1 -1
- package/dist/modes/agent-home-mode.js +10 -3
- package/dist/modes/agent-home-mode.js.map +1 -1
- package/dist/modes/serve-mode.d.ts.map +1 -1
- package/dist/modes/serve-mode.js +10 -3
- package/dist/modes/serve-mode.js.map +1 -1
- package/dist/modes/subagent-worker-mode.d.ts +2 -0
- package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
- package/dist/modes/subagent-worker-mode.js +13 -3
- package/dist/modes/subagent-worker-mode.js.map +1 -1
- package/dist/tools/subagent-shared.d.ts +8 -0
- package/dist/tools/subagent-shared.d.ts.map +1 -1
- package/dist/tools/subagent-shared.js.map +1 -1
- package/dist/tools/subagent.d.ts +3 -8
- package/dist/tools/subagent.d.ts.map +1 -1
- package/dist/tools/subagent.js +10 -8
- package/dist/tools/subagent.js.map +1 -1
- package/dist/tools/subagent.test.js +17 -1
- package/dist/tools/subagent.test.js.map +1 -1
- package/dist/tools/tasks.d.ts +1 -1
- package/dist/tools/web-fetch.d.ts +1 -1
- package/dist/ui/App.d.ts +7 -3
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +66 -83
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/components/Footer.d.ts +1 -0
- package/dist/ui/components/Footer.d.ts.map +1 -1
- package/dist/ui/components/Footer.js +3 -3
- package/dist/ui/components/Footer.js.map +1 -1
- package/dist/ui/components/Footer.test.d.ts +2 -0
- package/dist/ui/components/Footer.test.d.ts.map +1 -0
- package/dist/ui/components/Footer.test.js +16 -0
- package/dist/ui/components/Footer.test.js.map +1 -0
- package/dist/ui/components/SubAgentPanel.d.ts +2 -0
- package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
- package/dist/ui/components/SubAgentPanel.js +4 -2
- package/dist/ui/components/SubAgentPanel.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +8 -3
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +64 -8
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useSessionPersistence.d.ts +4 -2
- package/dist/ui/hooks/useSessionPersistence.d.ts.map +1 -1
- package/dist/ui/hooks/useSessionPersistence.js +10 -1
- package/dist/ui/hooks/useSessionPersistence.js.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.d.ts +3 -3
- package/dist/ui/hooks/useTerminalTitle.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalTitle.js +5 -9
- package/dist/ui/hooks/useTerminalTitle.js.map +1 -1
- package/dist/ui/login.d.ts.map +1 -1
- package/dist/ui/login.js +5 -1
- package/dist/ui/login.js.map +1 -1
- package/dist/ui/render.d.ts +7 -2
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +4 -4
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/render.test.js +10 -1
- package/dist/ui/render.test.js.map +1 -1
- package/dist/ui/terminal-history.js +6 -2
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/terminal-history.test.js +2 -2
- package/dist/ui/terminal-history.test.js.map +1 -1
- package/dist/ui/tui-history-parity.test.js +8 -1
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/dist/utils/git.d.ts +2 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +12 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/git.test.d.ts +2 -0
- package/dist/utils/git.test.d.ts.map +1 -0
- package/dist/utils/git.test.js +36 -0
- package/dist/utils/git.test.js.map +1 -0
- package/package.json +4 -4
- package/dist/utils/session-title.d.ts +0 -19
- package/dist/utils/session-title.d.ts.map +0 -1
- package/dist/utils/session-title.js +0 -82
- package/dist/utils/session-title.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent.test.js","sourceRoot":"","sources":["../../src/tools/subagent.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAEjE,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;AAG5D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAExF,MAAM,gBAAiB,SAAQ,YAAY;IAChC,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3B,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3B,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;CACnC;AAED,MAAM,GAAG,GAAoB;IAC3B,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,iBAAiB;IAC9B,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,YAAY,EAAE,mCAAmC;IACjD,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,SAAS,aAAa;IACpB,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,OAAmB,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,OAAmB,CAAC;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,QAAQ,
|
|
1
|
+
{"version":3,"file":"subagent.test.js","sourceRoot":"","sources":["../../src/tools/subagent.test.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/tasks.d.ts
CHANGED
|
@@ -21,8 +21,8 @@ declare const parameters: z.ZodObject<{
|
|
|
21
21
|
urls: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
22
|
max_length: z.ZodOptional<z.ZodNumber>;
|
|
23
23
|
format: z.ZodOptional<z.ZodEnum<{
|
|
24
|
-
text: "text";
|
|
25
24
|
html: "html";
|
|
25
|
+
text: "text";
|
|
26
26
|
markdown: "markdown";
|
|
27
27
|
}>>;
|
|
28
28
|
prefer_llms_txt: z.ZodOptional<z.ZodBoolean>;
|
package/dist/ui/App.d.ts
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { type Message, type Provider, type ThinkingLevel } from "@kenkaiiii/gg-ai";
|
|
2
2
|
import type { AgentTool } from "@kenkaiiii/gg-agent";
|
|
3
|
-
import type
|
|
3
|
+
import { type SubAgentManager } from "../core/subagent-manager.js";
|
|
4
4
|
import type { ProcessManager } from "../core/process-manager.js";
|
|
5
|
+
import { type TurnMetricPayload } from "../core/session-manager.js";
|
|
5
6
|
import type { Skill } from "../core/skills.js";
|
|
6
7
|
import type { CheckpointStore } from "../core/checkpoint-store.js";
|
|
7
8
|
import { type PlanStep } from "../utils/plan-steps.js";
|
|
8
9
|
import type { MCPClientManager } from "../core/mcp/index.js";
|
|
9
10
|
import type { AuthStorage } from "../core/auth-storage.js";
|
|
10
11
|
import type { TerminalHistoryPrinter } from "./terminal-history.js";
|
|
12
|
+
import { type ReviewCoverageTracker } from "../core/ideal-review.js";
|
|
13
|
+
import type { LspManager } from "../core/lsp/manager.js";
|
|
11
14
|
import { type DoneStatus } from "./layout-decisions.js";
|
|
12
15
|
import { type SessionStats } from "./session-summary.js";
|
|
13
16
|
import type { CompletedItem } from "./app-items.js";
|
|
@@ -47,6 +50,8 @@ export interface AppProps {
|
|
|
47
50
|
sessionId?: string;
|
|
48
51
|
processManager?: ProcessManager;
|
|
49
52
|
subAgentManager?: SubAgentManager;
|
|
53
|
+
lspManager?: LspManager;
|
|
54
|
+
reviewCoverageTracker?: ReviewCoverageTracker;
|
|
50
55
|
settingsFile?: string;
|
|
51
56
|
mcpManager?: MCPClientManager;
|
|
52
57
|
authStorage?: AuthStorage;
|
|
@@ -137,14 +142,13 @@ export interface AppProps {
|
|
|
137
142
|
sessionStore?: {
|
|
138
143
|
messages: Message[];
|
|
139
144
|
history: CompletedItem[];
|
|
145
|
+
turnMetrics?: TurnMetricPayload[];
|
|
140
146
|
liveItems?: CompletedItem[];
|
|
141
147
|
doneStatus?: DoneStatus | null;
|
|
142
148
|
approvedPlanPath?: string;
|
|
143
149
|
planSteps: PlanStep[];
|
|
144
150
|
sessionPath?: string;
|
|
145
151
|
sessionId?: string;
|
|
146
|
-
sessionTitle?: string;
|
|
147
|
-
sessionTitleGenerated: boolean;
|
|
148
152
|
overlay?: "model" | "skills" | "plan" | "theme" | null;
|
|
149
153
|
planAutoExpand?: boolean;
|
|
150
154
|
pendingAction?: {
|
package/dist/ui/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,aAAa,EAEnB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/App.js
CHANGED
|
@@ -12,6 +12,7 @@ import { useTaskBarStore, useTaskBarPolling, focusTaskBar, exitTaskBar, expandTa
|
|
|
12
12
|
import { playNotificationSound } from "../utils/sound.js";
|
|
13
13
|
import {} from "@kenkaiiii/gg-ai";
|
|
14
14
|
import { downscaleForPreview, extractMediaPaths } from "../utils/image.js";
|
|
15
|
+
import { buildSubAgentCompletionFollowUp, } from "../core/subagent-manager.js";
|
|
15
16
|
import { useAgentLoop } from "./hooks/useAgentLoop.js";
|
|
16
17
|
import { useTranscriptHistory } from "./hooks/useTranscriptHistory.js";
|
|
17
18
|
import { createWebSearchTool } from "../tools/web-search.js";
|
|
@@ -26,7 +27,6 @@ import { getAuthStorageKeys, getModel, getVideoByteLimit } from "../core/model-r
|
|
|
26
27
|
import { SessionManager } from "../core/session-manager.js";
|
|
27
28
|
import { log } from "../core/logger.js";
|
|
28
29
|
import { getPendingUpdate, startPeriodicUpdateCheck, stopPeriodicUpdateCheck, } from "../core/auto-update.js";
|
|
29
|
-
import { generateSessionTitle } from "../utils/session-title.js";
|
|
30
30
|
import { SettingsManager } from "../core/settings-manager.js";
|
|
31
31
|
import { PROMPT_COMMANDS, getPromptCommand } from "../core/prompt-commands.js";
|
|
32
32
|
import { isFirstTimeSetup, markSetupAudited, getAnnouncedLanguages, markLanguagesAnnounced, } from "../core/setup-history.js";
|
|
@@ -101,22 +101,14 @@ export function App(props) {
|
|
|
101
101
|
// measured further down; 0 means "not measured yet" and disables the
|
|
102
102
|
// oversized-item flush below.
|
|
103
103
|
const liveLayoutRef = useRef({ columns, liveAreaRows: 0 });
|
|
104
|
-
// Hoisted before terminal title hook so it can reference them
|
|
105
104
|
const [lastUserMessage, setLastUserMessage] = useState("");
|
|
106
105
|
// Bumped on every prompt submit; the fullscreen transcript scroll controller
|
|
107
106
|
// watches this to snap back to the bottom so the newest output is visible.
|
|
108
107
|
const [scrollResetToken, setScrollResetToken] = useState(0);
|
|
109
108
|
const [exitPending, setExitPending] = useState(false);
|
|
110
109
|
const [quittingSummary, setQuittingSummary] = useState(null);
|
|
111
|
-
//
|
|
112
|
-
// (hoisted here so the hook is always called in the same order)
|
|
110
|
+
// Native terminal title keeps the active project visible outside the app frame.
|
|
113
111
|
const [titleRunning, setTitleRunning] = useState(false);
|
|
114
|
-
const [sessionTitle, setSessionTitle] = useState(() => props.sessionStore?.sessionTitle);
|
|
115
|
-
const sessionTitleGeneratedRef = useRef(props.sessionStore?.sessionTitleGenerated ?? false);
|
|
116
|
-
useTerminalTitle({
|
|
117
|
-
isRunning: titleRunning,
|
|
118
|
-
sessionTitle,
|
|
119
|
-
});
|
|
120
112
|
// Completed transcript rows are kept as durable session data but are no longer
|
|
121
113
|
// rendered through Ink history. They are serialized once into real terminal
|
|
122
114
|
// scrollback via terminalHistoryPrinter, while Ink owns only live rows and
|
|
@@ -213,6 +205,7 @@ export function App(props) {
|
|
|
213
205
|
// Suppress "done" status when a plan overlay is about to open
|
|
214
206
|
const planOverlayPendingRef = useRef(false);
|
|
215
207
|
const [gitBranch, setGitBranch] = useState(null);
|
|
208
|
+
useTerminalTitle({ isRunning: titleRunning, cwd: displayedCwd, gitBranch });
|
|
216
209
|
const [currentModel, setCurrentModel] = useState(props.model);
|
|
217
210
|
const [currentProvider, setCurrentProvider] = useState(props.provider);
|
|
218
211
|
const currentProviderRef = useRef(props.provider);
|
|
@@ -247,6 +240,7 @@ export function App(props) {
|
|
|
247
240
|
const sessionManagerRef = useRef(props.sessionsDir ? new SessionManager(props.sessionsDir) : null);
|
|
248
241
|
const sessionPathRef = useRef(props.sessionStore?.sessionPath ?? props.sessionPath);
|
|
249
242
|
const persistedIndexRef = useRef(messagesRef.current.length);
|
|
243
|
+
const turnMetricsRef = useRef(props.sessionStore?.turnMetrics ?? []);
|
|
250
244
|
const sessionStatsRef = useRef(props.sessionStore?.sessionStats ??
|
|
251
245
|
createSessionStats({ sessionId: props.sessionStore?.sessionId ?? props.sessionId }));
|
|
252
246
|
const [idealReviewEnabled, setIdealReviewEnabled] = useState(props.sessionStore?.idealReviewEnabled ?? props.idealReviewEnabled ?? true);
|
|
@@ -382,10 +376,6 @@ export function App(props) {
|
|
|
382
376
|
if (sessionStore)
|
|
383
377
|
sessionStore.planSteps = planSteps;
|
|
384
378
|
}, [planSteps, sessionStore]);
|
|
385
|
-
useEffect(() => {
|
|
386
|
-
if (sessionStore)
|
|
387
|
-
sessionStore.sessionTitle = sessionTitle;
|
|
388
|
-
}, [sessionTitle, sessionStore]);
|
|
389
379
|
useEffect(() => {
|
|
390
380
|
if (sessionStore)
|
|
391
381
|
sessionStore.overlay = overlay;
|
|
@@ -410,9 +400,9 @@ export function App(props) {
|
|
|
410
400
|
.map((key) => props.credentialsByProvider?.[key])
|
|
411
401
|
.find((c) => c !== undefined);
|
|
412
402
|
const activeApiKey = currentCreds?.accessToken ?? props.apiKey;
|
|
413
|
-
const activeAccountId = currentCreds
|
|
414
|
-
const activeProjectId = currentCreds
|
|
415
|
-
const activeBaseUrl = currentProvider === "gemini" ? undefined :
|
|
403
|
+
const activeAccountId = currentCreds ? currentCreds.accountId : props.accountId;
|
|
404
|
+
const activeProjectId = currentCreds ? currentCreds.projectId : props.projectId;
|
|
405
|
+
const activeBaseUrl = currentProvider === "gemini" ? undefined : currentCreds ? currentCreds.baseUrl : props.baseUrl;
|
|
416
406
|
const contextWindowOptions = useMemo(() => ({ provider: currentProvider, accountId: activeAccountId }), [currentProvider, activeAccountId]);
|
|
417
407
|
// Load git branch — re-runs whenever the displayed cwd changes.
|
|
418
408
|
useEffect(() => {
|
|
@@ -544,16 +534,19 @@ export function App(props) {
|
|
|
544
534
|
useEffect(() => {
|
|
545
535
|
void applyLanguageDetectionRef.current("initial");
|
|
546
536
|
}, []);
|
|
537
|
+
const rebindSubagentsAfterCompaction = useCallback((sessionId) => props.subAgentManager?.rebindParentSession(sessionId) ?? Promise.resolve(), [props.subAgentManager]);
|
|
547
538
|
const { persistCompactedSession, persistNewMessages } = useSessionPersistence({
|
|
548
539
|
sessionManagerRef,
|
|
549
540
|
sessionPathRef,
|
|
550
541
|
sessionStatsRef,
|
|
551
542
|
persistedIndexRef,
|
|
552
543
|
messagesRef,
|
|
544
|
+
turnMetricsRef,
|
|
553
545
|
cwdRef,
|
|
554
546
|
currentProvider,
|
|
555
547
|
currentModel,
|
|
556
548
|
sessionStore,
|
|
549
|
+
onCompactedSession: rebindSubagentsAfterCompaction,
|
|
557
550
|
});
|
|
558
551
|
/**
|
|
559
552
|
* Run the language detector against the current cwd. If the detected set is a
|
|
@@ -657,6 +650,8 @@ export function App(props) {
|
|
|
657
650
|
projectId: activeProjectId,
|
|
658
651
|
resolveCredentials,
|
|
659
652
|
transformContext,
|
|
653
|
+
lspManager: props.lspManager,
|
|
654
|
+
reviewCoverageTracker: props.reviewCoverageTracker,
|
|
660
655
|
getIdealReviewMessage: (stats, touchedFiles) => {
|
|
661
656
|
if (!idealReviewEnabledRef.current)
|
|
662
657
|
return null;
|
|
@@ -714,56 +709,7 @@ export function App(props) {
|
|
|
714
709
|
// Rebuild system prompt to remove the completed plan from context
|
|
715
710
|
void replaceSystemPrompt({ clearApprovedPlan: true });
|
|
716
711
|
}
|
|
717
|
-
|
|
718
|
-
if (!sessionTitleGeneratedRef.current) {
|
|
719
|
-
sessionTitleGeneratedRef.current = true;
|
|
720
|
-
const msgs = messagesRef.current;
|
|
721
|
-
// Find the first user message and first assistant text
|
|
722
|
-
const userMsg = msgs.find((m) => m.role === "user");
|
|
723
|
-
const assistantMsg = msgs.find((m) => m.role === "assistant");
|
|
724
|
-
const userText = typeof userMsg?.content === "string"
|
|
725
|
-
? userMsg.content
|
|
726
|
-
: Array.isArray(userMsg?.content)
|
|
727
|
-
? userMsg.content
|
|
728
|
-
.filter((c) => c.type === "text")
|
|
729
|
-
.map((c) => c.text)
|
|
730
|
-
.join(" ")
|
|
731
|
-
: "";
|
|
732
|
-
const assistantText = typeof assistantMsg?.content === "string"
|
|
733
|
-
? assistantMsg.content
|
|
734
|
-
: Array.isArray(assistantMsg?.content)
|
|
735
|
-
? assistantMsg.content
|
|
736
|
-
.filter((c) => c.type === "text")
|
|
737
|
-
.map((c) => c.text)
|
|
738
|
-
.join(" ")
|
|
739
|
-
: "";
|
|
740
|
-
if (userText) {
|
|
741
|
-
generateSessionTitle({
|
|
742
|
-
provider: currentProvider,
|
|
743
|
-
userMessage: userText,
|
|
744
|
-
assistantPreview: assistantText.slice(0, 200),
|
|
745
|
-
apiKey: activeApiKey,
|
|
746
|
-
baseUrl: activeBaseUrl,
|
|
747
|
-
accountId: activeAccountId,
|
|
748
|
-
resolveCredentials,
|
|
749
|
-
}).then((title) => {
|
|
750
|
-
setSessionTitle(title);
|
|
751
|
-
log("INFO", "title", `Session title generated: ${title}`);
|
|
752
|
-
}, () => {
|
|
753
|
-
// Best-effort — silently ignore failures
|
|
754
|
-
});
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
}, [
|
|
758
|
-
persistNewMessages,
|
|
759
|
-
props.cwd,
|
|
760
|
-
props.skills,
|
|
761
|
-
currentProvider,
|
|
762
|
-
activeApiKey,
|
|
763
|
-
activeAccountId,
|
|
764
|
-
activeBaseUrl,
|
|
765
|
-
resolveCredentials,
|
|
766
|
-
]),
|
|
712
|
+
}, [persistNewMessages, props.cwd, props.skills]),
|
|
767
713
|
onTurnText: useCallback((text, thinking, thinkingMs) => {
|
|
768
714
|
const hadStreamedAssistantFlush = streamedAssistantFlushRef.current.flushedChars > 0;
|
|
769
715
|
const unflushedAssistantText = text.slice(streamedAssistantFlushRef.current.flushedChars);
|
|
@@ -1243,14 +1189,37 @@ export function App(props) {
|
|
|
1243
1189
|
return remaining;
|
|
1244
1190
|
});
|
|
1245
1191
|
}, [queueFlush]),
|
|
1246
|
-
onTurnEnd: useCallback((turn, stopReason, usage) => {
|
|
1192
|
+
onTurnEnd: useCallback((turn, stopReason, usage, timing) => {
|
|
1247
1193
|
recordTurnEnd(sessionStatsRef.current, usage);
|
|
1194
|
+
const metric = {
|
|
1195
|
+
version: 1,
|
|
1196
|
+
turn,
|
|
1197
|
+
provider: currentProvider,
|
|
1198
|
+
model: currentModel,
|
|
1199
|
+
stopReason,
|
|
1200
|
+
usage: { ...usage },
|
|
1201
|
+
timing: { ...timing },
|
|
1202
|
+
cost: {
|
|
1203
|
+
status: "unavailable",
|
|
1204
|
+
reason: "No authoritative effective-dated provider pricing is available",
|
|
1205
|
+
},
|
|
1206
|
+
};
|
|
1207
|
+
turnMetricsRef.current.push(metric);
|
|
1208
|
+
if (sessionStore)
|
|
1209
|
+
sessionStore.turnMetrics = [...turnMetricsRef.current];
|
|
1210
|
+
const metricSessionPath = sessionPathRef.current;
|
|
1211
|
+
const metricManager = sessionManagerRef.current;
|
|
1212
|
+
if (metricSessionPath && metricManager) {
|
|
1213
|
+
void metricManager.appendTurnMetric(metricSessionPath, metric);
|
|
1214
|
+
}
|
|
1248
1215
|
log("INFO", "turn", `Turn ${turn} ended`, {
|
|
1249
1216
|
stopReason,
|
|
1250
1217
|
inputTokens: String(usage.inputTokens),
|
|
1251
1218
|
outputTokens: String(usage.outputTokens),
|
|
1252
1219
|
...(usage.cacheRead != null && { cacheRead: String(usage.cacheRead) }),
|
|
1253
1220
|
...(usage.cacheWrite != null && { cacheWrite: String(usage.cacheWrite) }),
|
|
1221
|
+
providerDurationMs: String(timing.providerDurationMs),
|
|
1222
|
+
...(timing.ttftMs != null && { ttftMs: String(timing.ttftMs) }),
|
|
1254
1223
|
});
|
|
1255
1224
|
// Track actual token count for compaction decisions.
|
|
1256
1225
|
// Anthropic has separate input/output limits — only count input.
|
|
@@ -1268,7 +1237,7 @@ export function App(props) {
|
|
|
1268
1237
|
}
|
|
1269
1238
|
return remaining;
|
|
1270
1239
|
});
|
|
1271
|
-
}, [queueFlush]),
|
|
1240
|
+
}, [currentModel, currentProvider, queueFlush, sessionStore]),
|
|
1272
1241
|
onDone: useCallback((durationMs, toolsUsed, runStats) => {
|
|
1273
1242
|
log("INFO", "agent", `Agent done`, {
|
|
1274
1243
|
duration: `${durationMs}ms`,
|
|
@@ -1398,6 +1367,9 @@ export function App(props) {
|
|
|
1398
1367
|
// natural completion boundary regardless. The stuck-guard caps
|
|
1399
1368
|
// nudges per step so a genuinely blocked agent surfaces.
|
|
1400
1369
|
getFollowUpMessages: useCallback(() => {
|
|
1370
|
+
const childCompletionFollowUp = buildSubAgentCompletionFollowUp(props.subAgentManager);
|
|
1371
|
+
if (childCompletionFollowUp)
|
|
1372
|
+
return childCompletionFollowUp;
|
|
1401
1373
|
const steps = planStepsRef.current;
|
|
1402
1374
|
if (steps.length === 0 || !approvedPlanPathRef.current)
|
|
1403
1375
|
return null;
|
|
@@ -1421,7 +1393,7 @@ export function App(props) {
|
|
|
1421
1393
|
`or you genuinely need user input.`,
|
|
1422
1394
|
},
|
|
1423
1395
|
];
|
|
1424
|
-
}, []),
|
|
1396
|
+
}, [props.subAgentManager]),
|
|
1425
1397
|
onRetry: useCallback(() => {
|
|
1426
1398
|
// Roll back any pending progressive flushes from the aborted attempt.
|
|
1427
1399
|
// Without this, a stall retry regenerates the preamble and the old
|
|
@@ -1664,8 +1636,6 @@ export function App(props) {
|
|
|
1664
1636
|
persistedIndexRef.current = messagesRef.current.length;
|
|
1665
1637
|
})();
|
|
1666
1638
|
agentLoop.reset();
|
|
1667
|
-
setSessionTitle(undefined);
|
|
1668
|
-
sessionTitleGeneratedRef.current = false;
|
|
1669
1639
|
setLiveItems([{ kind: "info", text: "Session cleared.", id: getId() }]);
|
|
1670
1640
|
},
|
|
1671
1641
|
openThemeSelector: () => setOverlay("theme"),
|
|
@@ -2140,6 +2110,10 @@ export function App(props) {
|
|
|
2140
2110
|
try {
|
|
2141
2111
|
const session = await sm.create(taskCwd, currentProvider, currentModel);
|
|
2142
2112
|
newSessionPath = session.path;
|
|
2113
|
+
sessionStatsRef.current.sessionId = session.id;
|
|
2114
|
+
if (props.sessionStore)
|
|
2115
|
+
props.sessionStore.sessionId = session.id;
|
|
2116
|
+
await props.subAgentManager?.resetParentSession(session.id);
|
|
2143
2117
|
log("INFO", "tasks", "New session for task", { path: session.path });
|
|
2144
2118
|
}
|
|
2145
2119
|
catch {
|
|
@@ -2165,22 +2139,27 @@ export function App(props) {
|
|
|
2165
2139
|
agentLoop.reset();
|
|
2166
2140
|
persistedIndexRef.current = messagesRef.current.length;
|
|
2167
2141
|
const sm = sessionManagerRef.current;
|
|
2168
|
-
if (sm) {
|
|
2169
|
-
void sm.create(taskCwd, currentProvider, currentModel).then((session) => {
|
|
2170
|
-
sessionPathRef.current = session.path;
|
|
2171
|
-
log("INFO", "tasks", "New session for task", { path: session.path });
|
|
2172
|
-
});
|
|
2173
|
-
}
|
|
2174
2142
|
const taskItem = { kind: "task", title, id: getId() };
|
|
2175
2143
|
setLastUserMessage(title);
|
|
2176
2144
|
setDoneStatus(null);
|
|
2177
2145
|
setLiveItems([taskItem]);
|
|
2178
|
-
void
|
|
2179
|
-
|
|
2180
|
-
|
|
2146
|
+
void (async () => {
|
|
2147
|
+
try {
|
|
2148
|
+
if (sm) {
|
|
2149
|
+
const session = await sm.create(taskCwd, currentProvider, currentModel);
|
|
2150
|
+
sessionPathRef.current = session.path;
|
|
2151
|
+
sessionStatsRef.current.sessionId = session.id;
|
|
2152
|
+
await props.subAgentManager?.resetParentSession(session.id);
|
|
2153
|
+
log("INFO", "tasks", "New session for task", { path: session.path });
|
|
2154
|
+
}
|
|
2155
|
+
await agentLoop.run(fullPrompt);
|
|
2181
2156
|
}
|
|
2182
|
-
|
|
2183
|
-
|
|
2157
|
+
catch (err) {
|
|
2158
|
+
if (agentLoop.isRunning)
|
|
2159
|
+
agentLoop.reset();
|
|
2160
|
+
setLiveItems((prev) => [...prev, toErrorItem(err, getId())]);
|
|
2161
|
+
}
|
|
2162
|
+
})();
|
|
2184
2163
|
}, [agentLoop, currentModel, currentProvider, props]);
|
|
2185
2164
|
// Keep the ref in sync so stale closures (task picker, onDone run-all) can
|
|
2186
2165
|
// start a task without being recreated each render.
|
|
@@ -2549,6 +2528,10 @@ export function App(props) {
|
|
|
2549
2528
|
if (sm) {
|
|
2550
2529
|
const s = await sm.create(props.cwd, currentProvider, currentModel);
|
|
2551
2530
|
newSessionPath = s.path;
|
|
2531
|
+
sessionStatsRef.current.sessionId = s.id;
|
|
2532
|
+
if (props.sessionStore)
|
|
2533
|
+
props.sessionStore.sessionId = s.id;
|
|
2534
|
+
await props.subAgentManager?.resetParentSession(s.id);
|
|
2552
2535
|
}
|
|
2553
2536
|
if (props.resetUI && props.sessionStore) {
|
|
2554
2537
|
// Clear the overlay so the new mount lands on the chat,
|