Browse Source

Refactor ClineMessage

Saoud Rizwan 1 year ago
parent
commit
d67523596b

+ 5 - 5
src/core/Cline.ts

@@ -25,7 +25,7 @@ import {
 	ClaudeApiReqCancelReason,
 	ClaudeApiReqCancelReason,
 	ClaudeApiReqInfo,
 	ClaudeApiReqInfo,
 	ClaudeAsk,
 	ClaudeAsk,
-	ClaudeMessage,
+	ClineMessage,
 	ClaudeSay,
 	ClaudeSay,
 	ClaudeSayTool,
 	ClaudeSayTool,
 } from "../shared/ExtensionMessage"
 } from "../shared/ExtensionMessage"
@@ -60,7 +60,7 @@ export class Cline {
 	customInstructions?: string
 	customInstructions?: string
 	alwaysAllowReadOnly: boolean
 	alwaysAllowReadOnly: boolean
 	apiConversationHistory: Anthropic.MessageParam[] = []
 	apiConversationHistory: Anthropic.MessageParam[] = []
-	claudeMessages: ClaudeMessage[] = []
+	claudeMessages: ClineMessage[] = []
 	private askResponse?: ClaudeAskResponse
 	private askResponse?: ClaudeAskResponse
 	private askResponseText?: string
 	private askResponseText?: string
 	private askResponseImages?: string[]
 	private askResponseImages?: string[]
@@ -150,7 +150,7 @@ export class Cline {
 		}
 		}
 	}
 	}
 
 
-	private async getSavedClaudeMessages(): Promise<ClaudeMessage[]> {
+	private async getSavedClaudeMessages(): Promise<ClineMessage[]> {
 		const filePath = path.join(await this.ensureTaskDirectoryExists(), GlobalFileNames.claudeMessages)
 		const filePath = path.join(await this.ensureTaskDirectoryExists(), GlobalFileNames.claudeMessages)
 		const fileExists = await fileExistsAtPath(filePath)
 		const fileExists = await fileExistsAtPath(filePath)
 		if (fileExists) {
 		if (fileExists) {
@@ -159,12 +159,12 @@ export class Cline {
 		return []
 		return []
 	}
 	}
 
 
-	private async addToClaudeMessages(message: ClaudeMessage) {
+	private async addToClaudeMessages(message: ClineMessage) {
 		this.claudeMessages.push(message)
 		this.claudeMessages.push(message)
 		await this.saveClaudeMessages()
 		await this.saveClaudeMessages()
 	}
 	}
 
 
-	private async overwriteClaudeMessages(newMessages: ClaudeMessage[]) {
+	private async overwriteClaudeMessages(newMessages: ClineMessage[]) {
 		this.claudeMessages = newMessages
 		this.claudeMessages = newMessages
 		await this.saveClaudeMessages()
 		await this.saveClaudeMessages()
 	}
 	}

+ 3 - 3
src/shared/ExtensionMessage.ts

@@ -22,7 +22,7 @@ export interface ExtensionMessage {
 	images?: string[]
 	images?: string[]
 	ollamaModels?: string[]
 	ollamaModels?: string[]
 	filePaths?: string[]
 	filePaths?: string[]
-	partialMessage?: ClaudeMessage
+	partialMessage?: ClineMessage
 	openRouterModels?: Record<string, ModelInfo>
 	openRouterModels?: Record<string, ModelInfo>
 }
 }
 
 
@@ -32,12 +32,12 @@ export interface ExtensionState {
 	customInstructions?: string
 	customInstructions?: string
 	alwaysAllowReadOnly?: boolean
 	alwaysAllowReadOnly?: boolean
 	uriScheme?: string
 	uriScheme?: string
-	claudeMessages: ClaudeMessage[]
+	claudeMessages: ClineMessage[]
 	taskHistory: HistoryItem[]
 	taskHistory: HistoryItem[]
 	shouldShowAnnouncement: boolean
 	shouldShowAnnouncement: boolean
 }
 }
 
 
-export interface ClaudeMessage {
+export interface ClineMessage {
 	ts: number
 	ts: number
 	type: "ask" | "say"
 	type: "ask" | "say"
 	ask?: ClaudeAsk
 	ask?: ClaudeAsk

+ 3 - 3
src/shared/combineApiRequests.ts

@@ -1,4 +1,4 @@
-import { ClaudeMessage } from "./ExtensionMessage"
+import { ClineMessage } from "./ExtensionMessage"
 
 
 /**
 /**
  * Combines API request start and finish messages in an array of ClaudeMessages.
  * Combines API request start and finish messages in an array of ClaudeMessages.
@@ -18,8 +18,8 @@ import { ClaudeMessage } from "./ExtensionMessage"
  * const result = combineApiRequests(messages);
  * const result = combineApiRequests(messages);
  * // Result: [{ type: "say", say: "api_req_started", text: '{"request":"GET /api/data","cost":0.005}', ts: 1000 }]
  * // Result: [{ type: "say", say: "api_req_started", text: '{"request":"GET /api/data","cost":0.005}', ts: 1000 }]
  */
  */
-export function combineApiRequests(messages: ClaudeMessage[]): ClaudeMessage[] {
-	const combinedApiRequests: ClaudeMessage[] = []
+export function combineApiRequests(messages: ClineMessage[]): ClineMessage[] {
+	const combinedApiRequests: ClineMessage[] = []
 
 
 	for (let i = 0; i < messages.length; i++) {
 	for (let i = 0; i < messages.length; i++) {
 		if (messages[i].type === "say" && messages[i].say === "api_req_started") {
 		if (messages[i].type === "say" && messages[i].say === "api_req_started") {

+ 3 - 3
src/shared/combineCommandSequences.ts

@@ -1,4 +1,4 @@
-import { ClaudeMessage } from "./ExtensionMessage"
+import { ClineMessage } from "./ExtensionMessage"
 
 
 /**
 /**
  * Combines sequences of command and command_output messages in an array of ClaudeMessages.
  * Combines sequences of command and command_output messages in an array of ClaudeMessages.
@@ -20,8 +20,8 @@ import { ClaudeMessage } from "./ExtensionMessage"
  * const result = simpleCombineCommandSequences(messages);
  * const result = simpleCombineCommandSequences(messages);
  * // Result: [{ type: 'ask', ask: 'command', text: 'ls\nfile1.txt\nfile2.txt', ts: 1625097600000 }]
  * // Result: [{ type: 'ask', ask: 'command', text: 'ls\nfile1.txt\nfile2.txt', ts: 1625097600000 }]
  */
  */
-export function combineCommandSequences(messages: ClaudeMessage[]): ClaudeMessage[] {
-	const combinedCommands: ClaudeMessage[] = []
+export function combineCommandSequences(messages: ClineMessage[]): ClineMessage[] {
+	const combinedCommands: ClineMessage[] = []
 
 
 	// First pass: combine commands with their outputs
 	// First pass: combine commands with their outputs
 	for (let i = 0; i < messages.length; i++) {
 	for (let i = 0; i < messages.length; i++) {

+ 4 - 4
src/shared/getApiMetrics.ts

@@ -1,4 +1,4 @@
-import { ClaudeMessage } from "./ExtensionMessage"
+import { ClineMessage } from "./ExtensionMessage"
 
 
 interface ApiMetrics {
 interface ApiMetrics {
 	totalTokensIn: number
 	totalTokensIn: number
@@ -9,13 +9,13 @@ interface ApiMetrics {
 }
 }
 
 
 /**
 /**
- * Calculates API metrics from an array of ClaudeMessages.
+ * Calculates API metrics from an array of ClineMessages.
  *
  *
  * This function processes 'api_req_started' messages that have been combined with their
  * This function processes 'api_req_started' messages that have been combined with their
  * corresponding 'api_req_finished' messages by the combineApiRequests function.
  * corresponding 'api_req_finished' messages by the combineApiRequests function.
  * It extracts and sums up the tokensIn, tokensOut, cacheWrites, cacheReads, and cost from these messages.
  * It extracts and sums up the tokensIn, tokensOut, cacheWrites, cacheReads, and cost from these messages.
  *
  *
- * @param messages - An array of ClaudeMessage objects to process.
+ * @param messages - An array of ClineMessage objects to process.
  * @returns An ApiMetrics object containing totalTokensIn, totalTokensOut, totalCacheWrites, totalCacheReads, and totalCost.
  * @returns An ApiMetrics object containing totalTokensIn, totalTokensOut, totalCacheWrites, totalCacheReads, and totalCost.
  *
  *
  * @example
  * @example
@@ -25,7 +25,7 @@ interface ApiMetrics {
  * const { totalTokensIn, totalTokensOut, totalCost } = getApiMetrics(messages);
  * const { totalTokensIn, totalTokensOut, totalCost } = getApiMetrics(messages);
  * // Result: { totalTokensIn: 10, totalTokensOut: 20, totalCost: 0.005 }
  * // Result: { totalTokensIn: 10, totalTokensOut: 20, totalCost: 0.005 }
  */
  */
-export function getApiMetrics(messages: ClaudeMessage[]): ApiMetrics {
+export function getApiMetrics(messages: ClineMessage[]): ApiMetrics {
 	const result: ApiMetrics = {
 	const result: ApiMetrics = {
 		totalTokensIn: 0,
 		totalTokensIn: 0,
 		totalTokensOut: 0,
 		totalTokensOut: 0,

+ 3 - 3
webview-ui/src/components/chat/ChatRow.tsx

@@ -1,7 +1,7 @@
 import { VSCodeBadge, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"
 import { VSCodeBadge, VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"
 import deepEqual from "fast-deep-equal"
 import deepEqual from "fast-deep-equal"
 import React, { memo, useEffect, useMemo, useRef } from "react"
 import React, { memo, useEffect, useMemo, useRef } from "react"
-import { ClaudeApiReqInfo, ClaudeMessage, ClaudeSayTool } from "../../../../src/shared/ExtensionMessage"
+import { ClaudeApiReqInfo, ClineMessage, ClaudeSayTool } from "../../../../src/shared/ExtensionMessage"
 import { COMMAND_OUTPUT_STRING } from "../../../../src/shared/combineCommandSequences"
 import { COMMAND_OUTPUT_STRING } from "../../../../src/shared/combineCommandSequences"
 import { vscode } from "../../utils/vscode"
 import { vscode } from "../../utils/vscode"
 import CodeAccordian, { removeLeadingNonAlphanumeric } from "../common/CodeAccordian"
 import CodeAccordian, { removeLeadingNonAlphanumeric } from "../common/CodeAccordian"
@@ -12,10 +12,10 @@ import { highlightMentions } from "./TaskHeader"
 import { useSize } from "react-use"
 import { useSize } from "react-use"
 
 
 interface ChatRowProps {
 interface ChatRowProps {
-	message: ClaudeMessage
+	message: ClineMessage
 	isExpanded: boolean
 	isExpanded: boolean
 	onToggleExpand: () => void
 	onToggleExpand: () => void
-	lastModifiedMessage?: ClaudeMessage
+	lastModifiedMessage?: ClineMessage
 	isLast: boolean
 	isLast: boolean
 	onHeightChange: (isTaller: boolean) => void
 	onHeightChange: (isTaller: boolean) => void
 }
 }

+ 2 - 2
webview-ui/src/components/chat/TaskHeader.tsx

@@ -1,7 +1,7 @@
 import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
 import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"
 import React, { memo, useEffect, useMemo, useRef, useState } from "react"
 import React, { memo, useEffect, useMemo, useRef, useState } from "react"
 import { useWindowSize } from "react-use"
 import { useWindowSize } from "react-use"
-import { ClaudeMessage } from "../../../../src/shared/ExtensionMessage"
+import { ClineMessage } from "../../../../src/shared/ExtensionMessage"
 import { useExtensionState } from "../../context/ExtensionStateContext"
 import { useExtensionState } from "../../context/ExtensionStateContext"
 import { vscode } from "../../utils/vscode"
 import { vscode } from "../../utils/vscode"
 import Thumbnails from "../common/Thumbnails"
 import Thumbnails from "../common/Thumbnails"
@@ -9,7 +9,7 @@ import { mentionRegexGlobal } from "../../../../src/shared/context-mentions"
 import { formatLargeNumber } from "../../utils/format"
 import { formatLargeNumber } from "../../utils/format"
 
 
 interface TaskHeaderProps {
 interface TaskHeaderProps {
-	task: ClaudeMessage
+	task: ClineMessage
 	tokensIn: number
 	tokensIn: number
 	tokensOut: number
 	tokensOut: number
 	doesModelSupportPromptCache: boolean
 	doesModelSupportPromptCache: boolean