name: x-ai-digest
description: |
  X (Twitter) から AI 技術関連ツイートを収集・深掘りし、ダイジェスト記事（Markdown）を生成する。
  選ぶべき場合: 「AI技術ダイジェスト」「AIヘッドライン」の作成を指示されたとき
  選ぶべきでない場合: 一般的な SNS 調査、意見収集、ドキュメント処理
triggers:
  keywords:
    - AIダイジェスト
    - AI技術ダイジェスト
    - AIヘッドライン
    - ダイジェスト朝刊
    - ダイジェスト夕刊
max_movements: 999
initial_movement: collect
movements:
  - name: collect
    persona: researcher
    instruction: |
      X (Twitter) から AI 技術関連のツイートを収集し、深掘り調査を行う。

      ## 手順

      1. Task instruction に記載された検索クエリで XSearch を実行する
         - 各クエリの結果から24時間以内の投稿を抽出する
      2. Task instruction に記載された追跡アカウントを XUserPosts で確認する
      3. 収集した全候補から Task instruction の選定基準に従って 5〜10 件を選定する
         - 新機能・新サービス・新モデルのリリース情報を優先
         - 24h 外やノイズ投稿は除外
      4. 各候補について XPostDetail でスレッド文脈を確認する
         - リプライツリー・引用元・追記ポストを確認し、文脈を補完する
      5. ツイート内に URL がある場合は WebFetch で深掘りする
         - 論文（arXiv 等）→ Abstract・概要を取得
         - GitHub → README 概要を取得
         - 記事・ブログ → 要点を抽出
         - 取得できない場合はスキップ（深掘りなしでも記事は作成する）
      6. 収集結果を output/raw/ に書き出す

      ## ファイル命名規則
      output/raw/{source}-{slug}.txt
      例: xsearch-ai-llm.txt, xuser-huggingmodels.txt, detail-12345.txt

      ## 画像・スクリーンショットの収集（必須）
      ツイートに添付された画像（モデル比較グラフ、ベンチマーク結果、アーキテクチャ図、
      デモスクリーンショット等）は積極的に DownloadFile で output/images/ に保存する。
      - filename: "images/{slug}.png"
      - section: "output"
      深掘り先の記事・論文に含まれる図表も同様に収集すること。
      ビジュアル素材が記事の品質を大きく左右する。

      ## 原則
      - 【必須】モデルの内部知識だけで情報を書かないこと。必ず実際のツイートデータを収集する
      - 検索が一部失敗しても、取得できた分で続行する
      - verify 由来の指摘がある場合は、不足点を優先的に補完する

      ## 終了 / 遷移方法
      - **次の compose へ**: `transition({next_step: "compose"})`
      - **対象が曖昧で確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
      - **技術的失敗で打ち切り**: `complete({status: "aborted", abort_reason: "..."})`
    default_next: compose
    rules:
      - condition: 十分な情報を収集し output/raw/ に書き出した
        next: compose
  - name: compose
    persona: writer
    instruction: |
      output/raw/ の収集データから、articles JSON とヘッドライン記事 Markdown を生成する。

      ## 最初に確認
      Glob で output/raw/ のファイル一覧を確認する。ファイルがなければ collect に遷移すること。

      ## 手順

      1. output/raw/ の各ファイルを Read で読み込む
      2. output/x-ai-digest-articles.json を生成する
         形式:
         {"articles":[{"title":"タイトル","summary":"要約","comment":"一言コメント","url":"ツイートURL"}]}
      3. Bash で JST の日付を取得する: TZ=Asia/Tokyo date +%Y-%m-%d
      4. Task instruction で指定されたセッション種別（朝刊/夕刊）に従い、
         output/headline-YYYY-MM-DD-{session}.md を生成する
         - {session} は morning または evening

      ## ヘッドライン記事のフォーマット（厳守）

      - Docusaurus frontmatter 付き（sidebar_position: 100, title, description）
      - タイトル形式: MM/DD AIヘッドライン（朝刊|夕刊）
        - MM は必ずゼロ埋め2桁（02/25 ○、2/25 ×）
        - （朝刊）/（夕刊）は必ずつける
      - 各トピックは 概要・深掘り・ポイント の3セクション構成
      - 末尾に「まとめ」セクション（今日の注目ポイントをリスト形式で）
      - 最終行: *情報はYYYY年MM月DD日時点のものです。*

      ## 画像の活用（必須）
      output/images/ に画像が保存されている場合は、各トピックの該当箇所に埋め込む:
      `![説明](./images/ファイル名.png)`
      画像があるのにテキストだけの記事にしないこと。
      特にベンチマーク結果やモデル比較のグラフは、記事の説得力を大きく向上させる。

      ## verify 由来の指摘がある場合
      「これまでのレビュー指摘」がある場合は、指摘事項を漏れなく解消すること。

    default_next: verify
    rules:
      - condition: 2ファイル（articles JSON + headline MD）を書き出した
        next: verify
      - condition: 情報が不十分で追加収集が必要（output/raw/ が空を含む）
        next: collect
  - name: verify
    persona: supervisor
    instruction: |
      出力ファイルの存在とフォーマットを確認する。

      ## 確認手順

      1. Glob で output/ 内のファイル一覧を確認する
      2. output/x-ai-digest-articles.json を確認する
         - ファイルが存在すること
         - Read で内容を読み、articles 配列が存在すること
         - 各要素に title, summary, comment, url の4フィールドがあること
         - articles が1件以上あること
      3. output/headline-*.md を確認する
         - ファイルが存在すること
         - Read で内容を読み、以下をチェック:
           a. frontmatter に sidebar_position, title, description があること
           b. title が「MM/DD AIヘッドライン（朝刊）」または「MM/DD AIヘッドライン（夕刊）」形式であること
           c. MM がゼロ埋め2桁であること（01〜12）
           d. 各トピックに「概要」「深掘り」「ポイント」の3セクションがあること
           e. 末尾に「まとめ」セクションがあること
           f. headline MD の session（morning/evening）が Task instruction と一致すること
      4. output/images/ に画像があるのに headline MD に `![` が一つもない場合、
         画像埋め込み漏れとして compose に差し戻す

      ## チェックシート確認
      GetChecklist でチェックシートが存在する場合、全アイテムが完了（done/failed/skipped）していることを確認する。
      remaining が 0 でないまま完了してはならない。

      5. 不足があれば、`transition({next_step: "compose", summary: ...})` で差し戻す。summary は次の形式で書く:
         [判定] needs_fix
         ## 問題点
         - [ファイル名:項目] 何が問題か
         ## 期待する修正
         - 何をどう直すべきか
         ## 合格基準
         - 再レビューで何を確認するか
         ## 次にやること
         - compose で最初に着手すべき作業

      ## 合格時のユーザーへの返答（complete ツール）
      合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
      result はそのままユーザーに表示される最終回答。headline MD を Read で読み、記事の見出し一覧と各トピックの概要を整形する。
      - 【厳守】「完了しました」「確認しました」等のステータス表示やメタ説明は一切書かない
      - 1行目からいきなり記事の内容を書き始めること
      - 表・リスト・見出しなど Markdown 書式を活用して読みやすくする

      ## 終了方法のまとめ
      - 合格: `complete({status: "success", result: "ユーザー向け最終回答"})`
      - 修正必要: `transition({next_step: "compose", summary: "差し戻し指摘"})` (上記形式で)
      - 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
    default_next: COMPLETE
    rules:
      - condition: ファイルがない、またはフォーマットに不足がある
        next: compose
