name: office-process
description: |
  Excel, Word, PowerPoint, PDF ファイルの読み取り・編集・変換・文書生成。
  売上集計、議事録作成、スライド内容の抽出、PDF 読み取りなどに適する。
  選ぶべき場合: 入力または出力が Office/PDF 形式のファイル
  選ぶべきでない場合: CSV/JSONなどのプレーンデータ処理、Web調査が主目的
triggers:
  keywords: ["Excel", "エクセル", "スプレッドシート", "PowerPoint", "パワポ", "スライド", "Word", "ワード", "文書作成", "PDF", "pdf", "xlsx", "pptx", "docx", "xls", "集計", "売上", "議事録", "報告書", "表計算"]
max_movements: 999
initial_movement: process

movements:
  - name: process
    edit: true
    persona: document-specialist
    instruction: |
      ## 最初のステップ: ファイルの把握と前処理

      加工に着手する前に、まずファイルを確認し前処理を行う:
      1. Glob でワークスペース全体のファイル一覧を確認する（`**/*.xlsx`, `**/*.docx`, `**/*.pptx`, `**/*.pdf`。input/ だけでなくルート直下も含む）
      2. ファイル種別ごとの読み取り戦略は ReadToolDoc({ name: "ReadPdf" }) などで確認

      ## ファイルサイズに応じた前処理

      **Excel (.xlsx)**:
      - 小〜中規模 → ReadExcel で直接読む
      - 巨大・複数シート → SplitExcelSheets でシート別ファイル + manifest を生成し、必要なシートだけ Read する

      **Word (.docx)**:
      - 短〜中規模 → ReadDocx で直接読む
      - 長文・章構成あり → SplitDocxSections で見出し単位に分割し、関連セクションだけ Read する

      **PowerPoint (.pptx)**:
      - ReadPPTX で各スライドのテキスト・表・スピーカーノートを取得

      **PDF**:
      - まず ReadPdf で読み取りを試みる
      - テキストが抽出できた場合 → そのまま加工に進む
      - 全ページが空テキスト（スキャン PDF）の場合 → PdfToImages でページ画像化し、ReadImage で内容を確認する（ReadImage は VLM 対応 worker でのみ利用可能）

      ## Office ファイルの加工方針

      Excel (.xlsx) の編集:
      - python3 + openpyxl で編集できる（Bash で `python3 -c "..."` または `python3 << 'EOF'`）
      - 元ファイルを直接上書き保存してよい。必要なら output/ にコピーも置く
      - 「書き込みツールがない」と判断して ASK しないこと

      Word / PowerPoint / PDF の生成:
      - python3 + python-docx / python-pptx / reportlab 等で生成できる場合は Bash で実行
      - 困難な場合は Markdown で代替し、変換は後工程に委ねる旨を明記する

      テキスト系の成果物:
      - Write で output/ にファイルを書き出す
      - 出力形式やファイル名が未指定でも ASK せず、妥当なデフォルトで進める

      テキストで回答するだけでは不十分。必ずファイルを生成・編集すること。
      前のステップから指摘事項がある場合は、それに対応すること。
      「これまでのレビュー指摘」「現在の変更状況」「変更差分」の付録がある場合は、そこに書かれた不足点から優先的に解消すること。
      指摘事項は「問題点」「期待する修正」「合格基準」まで含めて渡される。各項目を漏れなく解消すること。

      ## 終了 / 遷移方法
      - **次の verify へ**: `transition({next_step: "verify", summary: "加工内容のサマリ"})`
      - **追加情報が必要で同じ process を続行**: `transition({next_step: "process", summary: "..."})`
      - **対象が特定できずユーザー確認が必要**: `complete({status: "needs_user_input", missing_info: "...", why_no_default: "..."})`
      - **読み取り不能・対応外フォーマット等の技術的失敗**: `complete({status: "aborted", abort_reason: "..."})`
    allowed_tools: [Read, Write, Bash, Glob, Grep, ReadExcel, ReadDocx, ReadPdf, ReadPPTX, SplitExcelSheets, SplitDocxSections, PdfToImages, ReadImage, WebSearch, WebFetch, DownloadFile, SQLite, TranscribeAudio, SearchKnowledge, ListNamespaces, ListDocuments, ReadToolDoc, 'mcp__*']
    default_next: verify
    rules:
      - condition: output/ に成果物を書き出した（または既存ファイルを編集した）
        next: verify
      - condition: 追加情報が必要
        next: process

  - name: verify
    edit: false
    persona: reviewer
    instruction: |
      output/ の成果物を確認する。

      確認手順:
      1. まず Glob で output/ 内のファイル一覧を確認する（既存 Office ファイルの編集の場合はそのファイルも対象）
      2. 成果物が1つもなければ「修正が必要」と判断し process に差し戻す
      3. 成果物があれば適切なツール（ReadPdf / ReadExcel / ReadDocx / ReadPPTX / Read 等）で内容を確認し、指示通りか・品質は十分かをチェックする
      4. 不足や誤りがあれば、`transition({next_step: "process", summary: ...})` で差し戻す。summary は次の形式で書く:
         [判定] needs_fix
         ## 問題点
         - [ファイル名:行番号またはシート名・スライド番号など] 何が問題か
         ## 期待する修正
         - 何をどう直すべきか
         ## 合格基準
         - 再レビューで何を確認するか
         ## 次にやること
         - process で最初に着手すべき具体的な修正
      5. summary は抽象論で終えず、変更ファイル・不足点・期待する修正内容を必ず含める
      6. 外部仕様や一次情報の確認が必要でも ASK しないこと。process は WebSearch / WebFetch を使えるので、確認すべき論点と修正方針を summary に具体的に書いて差し戻すこと

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

      ## 合格時のユーザーへの返答（complete ツール）
      output/ の内容で合格と判断したら、`complete({status: "success", result: ...})` を呼ぶ。
      result はそのままユーザーに表示される最終回答。output/ のファイルを適切なツールで読み、その内容をベースに整形する。
      - 「output/xxx.xlsx を確認してください」のようなファイル参照ではなく、内容そのものを回答として返すこと
      - 【厳守】「✅ 完了」「成果物を作成しました」「確認しました」等のステータス表示・メタ説明・内部作業の報告は一切書かない。1行目からいきなり本題の内容を書き始めること
      - 成果物の内容を会話調で分かりやすく伝える
      - 表・リスト・見出しなど Markdown 書式を活用して読みやすくする
      - 長大な成果物の場合は要点を構造化して提示し、詳細は省略してよい
      - 補足や注意点があれば末尾に添える

      ## 終了方法のまとめ
      - 合格: `complete({status: "success", result: "ユーザー向け最終回答"})`
      - 修正必要: `transition({next_step: "process", summary: "差し戻し指摘"})` (上記形式で)
      - 技術的失敗: `complete({status: "aborted", abort_reason: "..."})`
    allowed_tools: [Read, Glob, Grep, ReadPdf, ReadImage, ReadExcel, ReadDocx, ReadPPTX, ReadToolDoc]
    default_next: COMPLETE
    rules:
      - condition: 成果物がない、または内容に不足・誤りがある
        next: process
