azure devops utf8 file based requests_ja - tfsugjp/skills GitHub Wiki

Azure DevOps の UTF-8 ファイル経由リクエスト

English

概要

Azure DevOps の REST 書き込みで UTF-8 のリクエストファイルを使い、Windows の PowerShell やコマンドライン処理を通しても日本語などの非 ASCII 文字を保ちます。既存の MCP 優先順序は維持します。

追跡

種類 Issue
親 Issue #66
子 Issue #67
子 Issue #68
子 Issue #69

背景

JSON の直接指定や非 ASCII 文字のコマンド引数は、PowerShell の引用符処理やコンソールのエンコーディングで失敗することがあります。CLI の表示が文字化けしても保存データの破損とは限らないため、保存値を読み戻して確認します。

設計

  • Windows では構造化した JSON を ConvertTo-Json -InputObject で生成し、BOM なしの UTF-8 一時ファイルに保存します。PowerShell 7 の Invoke-RestMethod -InFile と API に合った Content-Type で送り、finally で削除します。認証情報はヘッダーに保持します。
  • Boards の JSON Patch 配列にも同じ方法を使います。説明文のリテラルな改行エスケープを送信前に検出し、標準の説明欄には Markdown を HTML リッチテキストに変換して登録し、保存形式を読み戻して確認します。Wiki は UTF-8 の Markdown ファイルを読み、JSON の content に格納します。更新時は ETag を使い、保存後に元の本文と比較します。Wiki CLI は --file-path と --encoding utf-8 を使います。Azure DevOps Wiki の Work Item 参照には #<id> を使い、本文中の AB#<id> を登録前と読み戻し時に拒否します。
  • GitHub issue の本文ファイルは登録前に検証し、コードフェンス外のリテラルな改行エスケープと本文全体を囲む誤ったコードフェンスを拒否します。登録後に本文を読み戻して元ファイルと比較します。
  • Linux/macOS の Bash 例は curl --data-binary でリクエストファイルを送ります。無関係な作業ツリーの変更を上書きせず、plugins/azure-devops-toolkit と .github/skills の複製を同期します。

実装

  1. Azure DevOps 基盤スキルに共通のファイル送信手順と PowerShell/Bash の例を追加します。
  2. Boards のリッチテキスト検証、Wiki の #<id> 形式、Windows 実行手順、Wiki の競合防止と読み戻しを含めて Boards・Wiki の書き込み手順を更新します。
  3. その他の REST スキルの JSON 直接指定を改め、CLI スキルに非 ASCII の Boards とファイル経由の Wiki 手順を追加します。GitHub issue の本文ファイル検証と読み戻しも追加します。

検証

  • 日本語、絵文字、引用符、バックスラッシュ、改行で JSON の往復変換とローカル HTTP 受信先への -InFile 送信を確認します。JSON Patch 配列、BOM なし UTF-8、Content-Type、Unicode 本文の一致を検証します。
  • 改行エスケープが文字列のまま残る例を issue・Work Item 登録前に拒否し、実改行を含む日本語・絵文字の本文と Boards の Markdown から HTML への変換を確認します。Wiki の Markdown から JSON 本文への変換をローカルで確認します。Azure DevOps への試験書き込みは行いません。
  • スキルと Marketplace の検証、git diff --check、複製ファイルの一致を確認します。公開後は Wiki ページと Home の言語切替リンクを確認します。
⚠️ **GitHub.com Fallback** ⚠️