Skip to content

Commit b61785f

Browse files
committed
wip
1 parent 8f22104 commit b61785f

File tree

7 files changed

+42
-6
lines changed

7 files changed

+42
-6
lines changed

src/core/task/Task.ts

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,10 +481,35 @@ export class Task extends EventEmitter<ClineEvents> {
481481
}
482482

483483
public async condenseContext(): Promise<void> {
484-
const { messages } = await summarizeConversation(this.apiConversationHistory, this.api)
485-
if (messages !== this.apiConversationHistory) {
486-
this.overwriteApiConversationHistory(messages)
484+
const {
485+
messages,
486+
summary,
487+
cost,
488+
newContextTokens = 0,
489+
} = await summarizeConversation(this.apiConversationHistory, this.api)
490+
if (!summary) {
491+
return
487492
}
493+
const lastMessageContent = this.apiConversationHistory.at(-1)?.content
494+
await this.overwriteApiConversationHistory(messages)
495+
const { contextTokens } = this.getTokenUsage()
496+
const lastContent =
497+
typeof lastMessageContent === "string"
498+
? [{ type: "text" as const, text: lastMessageContent }]
499+
: lastMessageContent
500+
const lastMessageTokens = lastContent ? await this.api.countTokens(lastContent) : 0
501+
const prevContextTokens = contextTokens + lastMessageTokens
502+
const contextCondense: ContextCondense = { summary, cost, newContextTokens, prevContextTokens }
503+
await this.say(
504+
"condense_context",
505+
undefined /* text */,
506+
undefined /* images */,
507+
false /* partial */,
508+
undefined /* checkpoint */,
509+
undefined /* progressStatus */,
510+
undefined /* options */,
511+
contextCondense,
512+
)
488513
}
489514

490515
async say(

src/core/webview/ClineProvider.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,6 +1123,7 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
11231123
task = await this.initClineWithHistoryItem(historyItem)
11241124
}
11251125
await task.condenseContext()
1126+
await this.postMessageToWebview({ type: "condenseTaskContextResponse" })
11261127
}
11271128

11281129
// this function deletes a task from task hidtory, and deletes it's checkpoints and delete the task folder

src/core/webview/webviewMessageHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
195195
case "showTaskWithId":
196196
provider.showTaskWithId(message.text!)
197197
break
198-
case "condenseTaskContext":
198+
case "condenseTaskContextRequest":
199199
provider.condenseTaskContext(message.text!)
200200
break
201201
case "deleteTaskWithId":

src/shared/ExtensionMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export interface ExtensionMessage {
6969
| "setHistoryPreviewCollapsed"
7070
| "commandExecutionStatus"
7171
| "vsCodeSetting"
72+
| "condenseTaskContextResponse"
7273
text?: string
7374
action?:
7475
| "chatButtonClicked"

src/shared/WebviewMessage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export interface WebviewMessage {
130130
| "searchFiles"
131131
| "toggleApiConfigPin"
132132
| "setHistoryPreviewCollapsed"
133-
| "condenseTaskContext"
133+
| "condenseTaskContextRequest"
134134
text?: string
135135
disabled?: boolean
136136
askResponse?: ClineAskResponse

webview-ui/src/components/chat/ChatView.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
131131
const lastTtsRef = useRef<string>("")
132132
const [wasStreaming, setWasStreaming] = useState<boolean>(false)
133133
const [showCheckpointWarning, setShowCheckpointWarning] = useState<boolean>(false)
134+
const [isCondensing, setIsCondensing] = useState<boolean>(false)
134135

135136
// UI layout depends on the last 2 messages
136137
// (since it relies on the content of these messages, we are deep comparing. i.e. the button state after hitting button sets enableButtons to false, and this effect otherwise would have to true again even if messages didn't change
@@ -581,12 +582,20 @@ const ChatViewComponent: React.ForwardRefRenderFunction<ChatViewRef, ChatViewPro
581582
handleSecondaryButtonClick(message.text ?? "", message.images ?? [])
582583
break
583584
}
585+
break
586+
case "condenseTaskContextResponse":
587+
if (isCondensing) {
588+
setSendingDisabled(false)
589+
}
590+
setIsCondensing(false)
591+
break
584592
}
585593
// textAreaRef.current is not explicitly required here since React
586594
// guarantees that ref will be stable across re-renders, and we're
587595
// not using its value but its reference.
588596
},
589597
[
598+
isCondensing,
590599
isHidden,
591600
sendingDisabled,
592601
enableButtons,

webview-ui/src/components/chat/TaskActions.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export const TaskActions = ({ item }: { item: HistoryItem | undefined }) => {
2828
variant="ghost"
2929
size="sm"
3030
title={t("chat:task.condenseContext")}
31-
onClick={() => vscode.postMessage({ type: "condenseTaskContext", text: item?.id })}>
31+
onClick={() => vscode.postMessage({ type: "condenseTaskContextRequest", text: item?.id })}>
3232
<span className="codicon codicon-file-zip" />
3333
</Button>
3434
<Button

0 commit comments

Comments
 (0)