Clineコードリーディング
メイン処理の src/core/Cline.ts
を読む
一旦GPTに聞きながら雑にシーケンスをまとめる
initiateTaskLoopをキックするのはaskじゃなさそうだな
initiateTaskLoopを呼び出すのは
Cline.startTask()
or Cline.resumeTaskFromHistory()
いずれもconstructorから呼び出される
Clineクラスがインスタンス化されるのは基本的には
src/core/webview/ClineProvider.ts
の initClineWithTask
or initClineWithHistoryItem
いずれも setWebviewMessageListener
で使われる
listenerあたりはvscode extensionの仕様っぽいし、今回はあんまり深く突っ込んでも感あるのでこの辺にしておく
askメソッドの使用用途だけもうちょい深ぼる
ask()は開発したコードをaccept/rejectしてもらったり、コマンドの実行可否を問い合わせてるあれか
こんな感じかな
LLMへリクエストする際のPromptの作り方を見る
userContentにloadContextでcontextを付与する
userContentは最初はUserからの指示だけど、再帰的に投げる時にどうなるかは後で調べる
loadContext
- メンションがあればメンションに応じて必要な情報をcontextに含める
- URLの内容
- フォルダやファイルの内容
- 発生しているproblemの内容
- 環境情報
- 今見ているファイル
- タブで開いているファイル
- ターミナルに出ている内容
- working directoryの配下のファイル構成
userContentをApiConversationHistoryに追加
attemptApiRequest
基本的にはsystem prompt + apiConversationHistoryがLLMへ送信されるpromptだな
historyがデカすぎてcontextwindowの上限を超える場合は、半分に削られる( truncateHalfConversation
)
社内広報アプリ作って、っていう指示をした時のapiからのresponse例
(requestはいろんな情報含んでるので割愛)
事前に要件定義や画面一覧、技術要件などは作成して渡している
MarkdownText<thinking>
Based on the provided documentation, I need to develop the top page (トップページ) according to the requirements. Let me analyze the key points:
From screens.yaml:
The top page should display article list and recommended articles
Components needed: article list, recommended articles section, sidebar
File path should be app/page.tsx
Required APIs: GET /api/articles and GET /api/articles/recommended
From technical_requirements.yaml:
Using Next.js with TypeScript
Styling with Tailwind CSS and shadcn/ui
Need to implement responsive design
Base screen size: 1920x1080
From api_spec.yaml:
Need to mock two API endpoints:
/api/workspaces/{workspace_id}/articles (for article list)
/api/workspaces/{workspace_id}/articles/recommended (for recommended articles)
First, I'll check if the page.tsx already exists and its current content.
</thinking>
<read_file>
<path>app/page.tsx</path>
</read_file>
parseAssistantMessage
で最後の <read_file>~</read_file>
のタグを検知して、次の処理を行う
実際にツールごとの処理を行っているのは
presentAssistantMessage