mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
Refactor ClineMessage
This commit is contained in:
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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[] {
|
export function combineApiRequests(messages: ClineMessage[]): ClineMessage[] {
|
||||||
const combinedApiRequests: ClaudeMessage[] = []
|
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") {
|
||||||
|
|||||||
@@ -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[] {
|
export function combineCommandSequences(messages: ClineMessage[]): ClineMessage[] {
|
||||||
const combinedCommands: ClaudeMessage[] = []
|
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++) {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user