Learning Cline
Creates unique taskId for each conversation
Initializes API handlers for AI providers
Manages terminal interactions through TerminalManager
Handles web content with UrlContentFetcher
Controls browser automation via BrowserSession
Core execution :
private async initiateTaskLoop(userContent: UserContent): Promise<void> {
while (!this.abort) {
const didEndLoop = await this.recursivelyMakeClineRequests(nextUserContent)
if (didEndLoop) break
// ... loop continues
}
}
private async recursivelyMakeClineRequests(userContent: UserContent): Promise<boolean> {
// 1. Process user content
// 2. Call AI API
// 3. Handle tool executions
// 4. Update conversation history
}
Execution Flow:
User initiates task
System gathers environment context
Sends request to AI model
Parses model response for tools/text
Executes approved tools
Updates conversation state
Repeats until completion
Task completed logic:
case "attempt_completion": {
await this.say("completion_result", result, undefined, false);
const { response } = await this.ask("completion_result", "", false);
if (response === "yesButtonClicked") {
pushToolResult(""); // Signals completion
return true; // This breaks the recursive loop
}
}
Final Completion Handling (in recursivelyMakeClineRequests):
if (didEndLoop) {
// This triggers actual completion
await this.providerRef.deref()?.updateTaskHistory({
id: this.taskId,
status: "completed" // <-- Final status change
});
await this.say("task_completed", "Task completed");
return true;
}
High overview of task completion :
sequenceDiagram
participant AI Model
participant Cline Class
participant ClineProvider
participant Webview
AI Model->>Cline Class: Generates <attempt_completion>
Cline Class->>ClineProvider: updateTaskHistory(status: "completed")
ClineProvider->>Webview: State update with completed status
Webview->>Webview: Render task_completed message
Webview->>User: Shows "Task Completed" banner