Skip to content

Commit 0492a1b

Browse files
committed
Rename Cline to Task
1 parent 0725b32 commit 0492a1b

25 files changed

+199
-227
lines changed

src/core/assistant-message/presentAssistantMessage.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import { checkpointSave } from "../checkpoints"
3131

3232
import { formatResponse } from "../prompts/responses"
3333
import { validateToolUse } from "../tools/validateToolUse"
34-
import { Cline } from "../Cline"
34+
import { Task } from "../task/Task"
3535

3636
/**
3737
* Processes and presents assistant message content to the user interface.
@@ -50,7 +50,7 @@ import { Cline } from "../Cline"
5050
* as it becomes available.
5151
*/
5252

53-
export async function presentAssistantMessage(cline: Cline) {
53+
export async function presentAssistantMessage(cline: Task) {
5454
if (cline.abort) {
5555
throw new Error(`[Cline#presentAssistantMessage] task ${cline.taskId}.${cline.instanceId} aborted`)
5656
}

src/core/checkpoints/index.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import pWaitFor from "p-wait-for"
22
import * as vscode from "vscode"
33

4-
import { Cline } from "../Cline"
4+
import { Task } from "../task/Task"
55

66
import { getWorkspacePath } from "../../utils/path"
77

@@ -13,7 +13,7 @@ import { DIFF_VIEW_URI_SCHEME } from "../../integrations/editor/DiffViewProvider
1313
import { telemetryService } from "../../services/telemetry/TelemetryService"
1414
import { CheckpointServiceOptions, RepoPerTaskCheckpointService } from "../../services/checkpoints"
1515

16-
export function getCheckpointService(cline: Cline) {
16+
export function getCheckpointService(cline: Task) {
1717
if (!cline.enableCheckpoints) {
1818
return undefined
1919
}
@@ -124,7 +124,7 @@ export function getCheckpointService(cline: Cline) {
124124
}
125125

126126
async function getInitializedCheckpointService(
127-
cline: Cline,
127+
cline: Task,
128128
{ interval = 250, timeout = 15_000 }: { interval?: number; timeout?: number } = {},
129129
) {
130130
const service = getCheckpointService(cline)
@@ -148,7 +148,7 @@ async function getInitializedCheckpointService(
148148
}
149149
}
150150

151-
export async function checkpointSave(cline: Cline) {
151+
export async function checkpointSave(cline: Task) {
152152
const service = getCheckpointService(cline)
153153

154154
if (!service) {
@@ -177,7 +177,7 @@ export type CheckpointRestoreOptions = {
177177
mode: "preview" | "restore"
178178
}
179179

180-
export async function checkpointRestore(cline: Cline, { ts, commitHash, mode }: CheckpointRestoreOptions) {
180+
export async function checkpointRestore(cline: Task, { ts, commitHash, mode }: CheckpointRestoreOptions) {
181181
const service = await getInitializedCheckpointService(cline)
182182

183183
if (!service) {
@@ -245,10 +245,7 @@ export type CheckpointDiffOptions = {
245245
mode: "full" | "checkpoint"
246246
}
247247

248-
export async function checkpointDiff(
249-
cline: Cline,
250-
{ ts, previousCommitHash, commitHash, mode }: CheckpointDiffOptions,
251-
) {
248+
export async function checkpointDiff(cline: Task, { ts, previousCommitHash, commitHash, mode }: CheckpointDiffOptions) {
252249
const service = await getInitializedCheckpointService(cline)
253250

254251
if (!service) {

src/core/environment/__tests__/getEnvironmentDetails.test.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { ApiHandler } from "../../../api/index"
1616
import { ClineProvider } from "../../webview/ClineProvider"
1717
import { RooIgnoreController } from "../../ignore/RooIgnoreController"
1818
import { formatResponse } from "../../prompts/responses"
19-
import { Cline } from "../../Cline"
19+
import { Task } from "../../task/Task"
2020

2121
jest.mock("vscode", () => ({
2222
window: {
@@ -56,7 +56,7 @@ describe("getEnvironmentDetails", () => {
5656
cleanCompletedProcessQueue?: jest.Mock
5757
}
5858

59-
let mockCline: Partial<Cline>
59+
let mockCline: Partial<Task>
6060
let mockProvider: any
6161
let mockState: any
6262

@@ -134,7 +134,7 @@ describe("getEnvironmentDetails", () => {
134134
})
135135

136136
it("should return basic environment details", async () => {
137-
const result = await getEnvironmentDetails(mockCline as Cline)
137+
const result = await getEnvironmentDetails(mockCline as Task)
138138

139139
expect(result).toContain("<environment_details>")
140140
expect(result).toContain("</environment_details>")
@@ -157,7 +157,7 @@ describe("getEnvironmentDetails", () => {
157157
})
158158

159159
it("should include file details when includeFileDetails is true", async () => {
160-
const result = await getEnvironmentDetails(mockCline as Cline, true)
160+
const result = await getEnvironmentDetails(mockCline as Task, true)
161161
expect(result).toContain("# Current Workspace Directory")
162162
expect(result).toContain("Files")
163163

@@ -173,14 +173,14 @@ describe("getEnvironmentDetails", () => {
173173
})
174174

175175
it("should not include file details when includeFileDetails is false", async () => {
176-
await getEnvironmentDetails(mockCline as Cline, false)
176+
await getEnvironmentDetails(mockCline as Task, false)
177177
expect(listFiles).not.toHaveBeenCalled()
178178
expect(formatResponse.formatFilesList).not.toHaveBeenCalled()
179179
})
180180

181181
it("should handle desktop directory specially", async () => {
182182
;(arePathsEqual as jest.Mock).mockReturnValue(true)
183-
const result = await getEnvironmentDetails(mockCline as Cline, true)
183+
const result = await getEnvironmentDetails(mockCline as Task, true)
184184
expect(result).toContain("Desktop files not shown automatically")
185185
expect(listFiles).not.toHaveBeenCalled()
186186
})
@@ -191,7 +191,7 @@ describe("getEnvironmentDetails", () => {
191191
"modified2.ts",
192192
])
193193

194-
const result = await getEnvironmentDetails(mockCline as Cline)
194+
const result = await getEnvironmentDetails(mockCline as Task)
195195

196196
expect(result).toContain("# Recently Modified Files")
197197
expect(result).toContain("modified1.ts")
@@ -208,14 +208,14 @@ describe("getEnvironmentDetails", () => {
208208
;(TerminalRegistry.getTerminals as jest.Mock).mockReturnValue([mockActiveTerminal])
209209
;(TerminalRegistry.getUnretrievedOutput as jest.Mock).mockReturnValue("Test output")
210210

211-
const result = await getEnvironmentDetails(mockCline as Cline)
211+
const result = await getEnvironmentDetails(mockCline as Task)
212212

213213
expect(result).toContain("# Actively Running Terminals")
214214
expect(result).toContain("Original command: `npm test`")
215215
expect(result).toContain("Test output")
216216

217217
mockCline.didEditFile = true
218-
await getEnvironmentDetails(mockCline as Cline)
218+
await getEnvironmentDetails(mockCline as Task)
219219
expect(delay).toHaveBeenCalledWith(300)
220220

221221
expect(pWaitFor).toHaveBeenCalled()
@@ -237,7 +237,7 @@ describe("getEnvironmentDetails", () => {
237237
active ? [] : [mockInactiveTerminal],
238238
)
239239

240-
const result = await getEnvironmentDetails(mockCline as Cline)
240+
const result = await getEnvironmentDetails(mockCline as Task)
241241

242242
expect(result).toContain("# Inactive Terminals with Completed Process Output")
243243
expect(result).toContain("Terminal terminal-2")
@@ -261,7 +261,7 @@ describe("getEnvironmentDetails", () => {
261261
return null
262262
})
263263

264-
const result = await getEnvironmentDetails(mockCline as Cline)
264+
const result = await getEnvironmentDetails(mockCline as Task)
265265

266266
expect(result).toContain("NOTE: You are currently in '💻 Code' mode, which does not allow write operations")
267267
})
@@ -270,7 +270,7 @@ describe("getEnvironmentDetails", () => {
270270
mockState.experiments = { [EXPERIMENT_IDS.POWER_STEERING]: true }
271271
;(experiments.isEnabled as jest.Mock).mockReturnValue(true)
272272

273-
const result = await getEnvironmentDetails(mockCline as Cline)
273+
const result = await getEnvironmentDetails(mockCline as Task)
274274

275275
expect(result).toContain("<role>You are a code assistant</role>")
276276
expect(result).toContain("<custom_instructions>Custom instructions</custom_instructions>")
@@ -280,7 +280,7 @@ describe("getEnvironmentDetails", () => {
280280
// Mock provider to return null.
281281
mockCline.providerRef!.deref = jest.fn().mockReturnValue(null)
282282

283-
const result = await getEnvironmentDetails(mockCline as Cline)
283+
const result = await getEnvironmentDetails(mockCline as Task)
284284

285285
// Verify the function still returns a result.
286286
expect(result).toContain("<environment_details>")
@@ -291,7 +291,7 @@ describe("getEnvironmentDetails", () => {
291291
getState: jest.fn().mockResolvedValue(null),
292292
})
293293

294-
const result2 = await getEnvironmentDetails(mockCline as Cline)
294+
const result2 = await getEnvironmentDetails(mockCline as Task)
295295

296296
// Verify the function still returns a result.
297297
expect(result2).toContain("<environment_details>")
@@ -311,6 +311,6 @@ describe("getEnvironmentDetails", () => {
311311
;(TerminalRegistry.getBackgroundTerminals as jest.Mock).mockReturnValue([])
312312
;(mockCline.fileContextTracker!.getAndClearRecentlyModifiedFiles as jest.Mock).mockReturnValue([])
313313

314-
await expect(getEnvironmentDetails(mockCline as Cline)).resolves.not.toThrow()
314+
await expect(getEnvironmentDetails(mockCline as Task)).resolves.not.toThrow()
315315
})
316316
})

src/core/environment/getEnvironmentDetails.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ import { Terminal } from "../../integrations/terminal/Terminal"
1515
import { arePathsEqual } from "../../utils/path"
1616
import { formatResponse } from "../prompts/responses"
1717

18-
import { Cline } from "../Cline"
18+
import { Task } from "../task/Task"
1919

20-
export async function getEnvironmentDetails(cline: Cline, includeFileDetails: boolean = false) {
20+
export async function getEnvironmentDetails(cline: Task, includeFileDetails: boolean = false) {
2121
let details = ""
2222

2323
const clineProvider = cline.providerRef.deref()

src/core/Cline.ts renamed to src/core/task/Task.ts

Lines changed: 48 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,72 +9,72 @@ import pWaitFor from "p-wait-for"
99
import { serializeError } from "serialize-error"
1010

1111
// schemas
12-
import { TokenUsage, ToolUsage, ToolName } from "../schemas"
12+
import { TokenUsage, ToolUsage, ToolName } from "../../schemas"
1313

1414
// api
15-
import { ApiHandler, buildApiHandler } from "../api"
16-
import { ApiStream } from "../api/transform/stream"
15+
import { ApiHandler, buildApiHandler } from "../../api"
16+
import { ApiStream } from "../../api/transform/stream"
1717

1818
// shared
19-
import { ApiConfiguration } from "../shared/api"
20-
import { findLastIndex } from "../shared/array"
21-
import { combineApiRequests } from "../shared/combineApiRequests"
22-
import { combineCommandSequences } from "../shared/combineCommandSequences"
19+
import { ApiConfiguration } from "../../shared/api"
20+
import { findLastIndex } from "../../shared/array"
21+
import { combineApiRequests } from "../../shared/combineApiRequests"
22+
import { combineCommandSequences } from "../../shared/combineCommandSequences"
2323
import {
2424
ClineApiReqCancelReason,
2525
ClineApiReqInfo,
2626
ClineAsk,
2727
ClineMessage,
2828
ClineSay,
2929
ToolProgressStatus,
30-
} from "../shared/ExtensionMessage"
31-
import { getApiMetrics } from "../shared/getApiMetrics"
32-
import { HistoryItem } from "../shared/HistoryItem"
33-
import { ClineAskResponse } from "../shared/WebviewMessage"
34-
import { defaultModeSlug } from "../shared/modes"
35-
import { DiffStrategy } from "../shared/tools"
30+
} from "../../shared/ExtensionMessage"
31+
import { getApiMetrics } from "../../shared/getApiMetrics"
32+
import { HistoryItem } from "../../shared/HistoryItem"
33+
import { ClineAskResponse } from "../../shared/WebviewMessage"
34+
import { defaultModeSlug } from "../../shared/modes"
35+
import { DiffStrategy } from "../../shared/tools"
3636

3737
// services
38-
import { UrlContentFetcher } from "../services/browser/UrlContentFetcher"
39-
import { BrowserSession } from "../services/browser/BrowserSession"
40-
import { McpHub } from "../services/mcp/McpHub"
41-
import { McpServerManager } from "../services/mcp/McpServerManager"
42-
import { telemetryService } from "../services/telemetry/TelemetryService"
43-
import { RepoPerTaskCheckpointService } from "../services/checkpoints"
38+
import { UrlContentFetcher } from "../../services/browser/UrlContentFetcher"
39+
import { BrowserSession } from "../../services/browser/BrowserSession"
40+
import { McpHub } from "../../services/mcp/McpHub"
41+
import { McpServerManager } from "../../services/mcp/McpServerManager"
42+
import { telemetryService } from "../../services/telemetry/TelemetryService"
43+
import { RepoPerTaskCheckpointService } from "../../services/checkpoints"
4444

4545
// integrations
46-
import { DiffViewProvider } from "../integrations/editor/DiffViewProvider"
47-
import { findToolName, formatContentBlockToMarkdown } from "../integrations/misc/export-markdown"
48-
import { RooTerminalProcess } from "../integrations/terminal/types"
49-
import { TerminalRegistry } from "../integrations/terminal/TerminalRegistry"
46+
import { DiffViewProvider } from "../../integrations/editor/DiffViewProvider"
47+
import { findToolName, formatContentBlockToMarkdown } from "../../integrations/misc/export-markdown"
48+
import { RooTerminalProcess } from "../../integrations/terminal/types"
49+
import { TerminalRegistry } from "../../integrations/terminal/TerminalRegistry"
5050

5151
// utils
52-
import { calculateApiCostAnthropic } from "../utils/cost"
53-
import { getWorkspacePath } from "../utils/path"
52+
import { calculateApiCostAnthropic } from "../../utils/cost"
53+
import { getWorkspacePath } from "../../utils/path"
5454

5555
// prompts
56-
import { formatResponse } from "./prompts/responses"
57-
import { SYSTEM_PROMPT } from "./prompts/system"
56+
import { formatResponse } from "../prompts/responses"
57+
import { SYSTEM_PROMPT } from "../prompts/system"
5858

5959
// core modules
60-
import { ToolRepetitionDetector } from "./tools/ToolRepetitionDetector"
61-
import { FileContextTracker } from "./context-tracking/FileContextTracker"
62-
import { RooIgnoreController } from "./ignore/RooIgnoreController"
63-
import { type AssistantMessageContent, parseAssistantMessage, presentAssistantMessage } from "./assistant-message"
64-
import { truncateConversationIfNeeded } from "./sliding-window"
65-
import { ClineProvider } from "./webview/ClineProvider"
66-
import { MultiSearchReplaceDiffStrategy } from "./diff/strategies/multi-search-replace"
67-
import { readApiMessages, saveApiMessages, readTaskMessages, saveTaskMessages, taskMetadata } from "./task-persistence"
68-
import { getEnvironmentDetails } from "./environment/getEnvironmentDetails"
60+
import { ToolRepetitionDetector } from "../tools/ToolRepetitionDetector"
61+
import { FileContextTracker } from "../context-tracking/FileContextTracker"
62+
import { RooIgnoreController } from "../ignore/RooIgnoreController"
63+
import { type AssistantMessageContent, parseAssistantMessage, presentAssistantMessage } from "../assistant-message"
64+
import { truncateConversationIfNeeded } from "../sliding-window"
65+
import { ClineProvider } from "../webview/ClineProvider"
66+
import { MultiSearchReplaceDiffStrategy } from "../diff/strategies/multi-search-replace"
67+
import { readApiMessages, saveApiMessages, readTaskMessages, saveTaskMessages, taskMetadata } from "../task-persistence"
68+
import { getEnvironmentDetails } from "../environment/getEnvironmentDetails"
6969
import {
7070
type CheckpointDiffOptions,
7171
type CheckpointRestoreOptions,
7272
getCheckpointService,
7373
checkpointSave,
7474
checkpointRestore,
7575
checkpointDiff,
76-
} from "./checkpoints"
77-
import { processUserContentMentions } from "./mentions/processUserContentMentions"
76+
} from "../checkpoints"
77+
import { processUserContentMentions } from "../mentions/processUserContentMentions"
7878

7979
export type ClineEvents = {
8080
message: [{ action: "created" | "updated"; message: ClineMessage }]
@@ -90,7 +90,7 @@ export type ClineEvents = {
9090
taskToolFailed: [taskId: string, tool: ToolName, error: string]
9191
}
9292

93-
export type ClineOptions = {
93+
export type TaskOptions = {
9494
provider: ClineProvider
9595
apiConfiguration: ApiConfiguration
9696
customInstructions?: string
@@ -103,18 +103,18 @@ export type ClineOptions = {
103103
historyItem?: HistoryItem
104104
experiments?: Record<string, boolean>
105105
startTask?: boolean
106-
rootTask?: Cline
107-
parentTask?: Cline
106+
rootTask?: Task
107+
parentTask?: Task
108108
taskNumber?: number
109-
onCreated?: (cline: Cline) => void
109+
onCreated?: (cline: Task) => void
110110
}
111111

112-
export class Cline extends EventEmitter<ClineEvents> {
112+
export class Task extends EventEmitter<ClineEvents> {
113113
readonly taskId: string
114114
readonly instanceId: string
115115

116-
readonly rootTask: Cline | undefined = undefined
117-
readonly parentTask: Cline | undefined = undefined
116+
readonly rootTask: Task | undefined = undefined
117+
readonly parentTask: Task | undefined = undefined
118118
readonly taskNumber: number
119119
readonly workspacePath: string
120120

@@ -201,7 +201,7 @@ export class Cline extends EventEmitter<ClineEvents> {
201201
parentTask,
202202
taskNumber = -1,
203203
onCreated,
204-
}: ClineOptions) {
204+
}: TaskOptions) {
205205
super()
206206

207207
if (startTask && !task && !images && !historyItem) {
@@ -264,8 +264,8 @@ export class Cline extends EventEmitter<ClineEvents> {
264264
}
265265
}
266266

267-
static create(options: ClineOptions): [Cline, Promise<void>] {
268-
const instance = new Cline({ ...options, startTask: false })
267+
static create(options: TaskOptions): [Task, Promise<void>] {
268+
const instance = new Task({ ...options, startTask: false })
269269
const { images, task, historyItem } = options
270270
let promise
271271

0 commit comments

Comments
 (0)