Open15

Clineコードリーディング

ipeblbipeblb

メイン処理の src/core/Cline.ts を読む

ipeblbipeblb

initiateTaskLoopをキックするのはaskじゃなさそうだな

ipeblbipeblb

initiateTaskLoopを呼び出すのは
Cline.startTask() or Cline.resumeTaskFromHistory()
いずれもconstructorから呼び出される

ipeblbipeblb

Clineクラスがインスタンス化されるのは基本的には
src/core/webview/ClineProvider.tsinitClineWithTask or initClineWithHistoryItem
いずれも setWebviewMessageListener で使われる

ipeblbipeblb

listenerあたりはvscode extensionの仕様っぽいし、今回はあんまり深く突っ込んでも感あるのでこの辺にしておく
askメソッドの使用用途だけもうちょい深ぼる

ipeblbipeblb

ask()は開発したコードをaccept/rejectしてもらったり、コマンドの実行可否を問い合わせてるあれか

ipeblbipeblb

LLMへリクエストする際のPromptの作り方を見る

ipeblbipeblb

userContentにloadContextでcontextを付与する
userContentは最初はUserからの指示だけど、再帰的に投げる時にどうなるかは後で調べる

loadContext

  • メンションがあればメンションに応じて必要な情報をcontextに含める
    • URLの内容
    • フォルダやファイルの内容
    • 発生しているproblemの内容
  • 環境情報
    • 今見ているファイル
    • タブで開いているファイル
    • ターミナルに出ている内容
    • working directoryの配下のファイル構成
ipeblbipeblb

attemptApiRequest

基本的にはsystem prompt + apiConversationHistoryがLLMへ送信されるpromptだな
historyがデカすぎてcontextwindowの上限を超える場合は、半分に削られる( truncateHalfConversation )

ipeblbipeblb

社内広報アプリ作って、っていう指示をした時の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>
ipeblbipeblb

parseAssistantMessage で最後の <read_file>~</read_file> のタグを検知して、次の処理を行う
実際にツールごとの処理を行っているのは
presentAssistantMessage