All skills
aktsmm avatar

/azure-update-customer-pptx

@e5e7253
by yamapanaktsmm/agent-skills26 stars
4

Build a customer-facing Azure Update PowerPoint from Azure Updates MCP results, including customer classification, Japan region stamps, UPDATE Points, speaker notes, and Verify-Pptx gate checks. Use when creating or updating an Azure Update / Azure アップデート customer deck, bootstrapping a new Azure Update PPTX workspace, reviewing Deploy Region support, or re-applying manifest JSON to an existing deck.

Use this Skill: https://skilld.dev/gh/aktsmm/agent-skills/azure-update-customer-pptx

This session only. Nothing lands on disk.

agentsfinalize.agent.md

≈1.7k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Finalize Agent

役割

PowerPoint COM で編集完了後、最終検証を行い、対象ファイルが PowerPoint で開いていることを確認して完了レポートを出力します。

⚠️ 注意: 現在のワークフローは COM ベースで直接編集・保存するため、unpack/repack は使用しません。

入力

  • 完成済み PowerPoint: {日付フォルダ}/{config.output.fileNamePattern}(例: {顧客名}-{システム名}向け_AzureUpdate_YYYYMMDD.pptx)
  • 分類結果: {日付フォルダ}/manifest/classification.json

出力

  • 検証済み PowerPoint(同ファイル)
  • 同名 PDF(同じ日付フォルダ)
  • 完了レポート(コンソール出力)

Permissions

  • ✅ run_in_terminal(PowerShell スクリプト実行、PowerPoint 起動)
  • ✅ read_file(JSON 読み込み)
  • ❌ runSubagent(Orchestrator 専用)

Done Criteria

  • scripts/Verify-Pptx.ps1 が exit 0 で完了
  • 表紙(P1)の日付が正しいフォーマット(YYYY/MM/DD(曜日))
  • ファイルサイズが妥当(1MB〜10MB 程度)
  • scripts/Export-PptxToPdf.ps1 で同名 PDF を出力し、0 byte でないことを確認した
  • scripts/Test-PptxDistribution.ps1 が exact PPTX/PDF pair で exit 0(Python engineはPDF本文抽出・顧客安全も必須)
  • 対象 PowerPoint ファイルが開かれていることを COM で確認した
  • 完了レポート(Weekly/Appendix 件数、ファイルパス)が出力された
  • 🔴 exit code をそのまま報告(偽装禁止)

📁 ログ・一時ファイルの出力先(必須)

スクリプト出力をファイルに保存する場合は {日付フォルダ}/logs/ に出力すること。


処理手順

0. 入力ファイル検証(🔴 Fail Fast)

処理前に以下を確認し、不足があれば即座にエラー報告する:

  • 出力 PPTX ファイルが存在する
  • ファイルサイズが 0 でない(1MB〜10MB が妥当)
  • classification.json が {日付フォルダ}/manifest/ に存在する

1. 最終検証

{日付フォルダ}/manifest/verify_status.json が存在し、以下を満たす場合は重複検証をスキップしてよい:

  • schemaVersion = 2
  • results 内に pptxPath が今回の出力ファイルと一致する entry がちょうど1件ある
  • 該当entryの state = passed かつ passed = true
  • outputHash が現在のPPTX SHA-256と一致する
  • generatedAt が PPTX の最終更新時刻以降、または同一セッション内の Enrich/Run-CustomerPptxPipeline 直後

スキップした場合も、報告には「verify_status.json により検証済み」と明記する。強制再検証が必要な場合は Verify-Pptx.ps1 を実行する。

scripts/Verify-Pptx.ps1 を実行して品質チェック:

& "$BasePath\scripts\Verify-Pptx.ps1" -PptxPath $outputPath
if ($LASTEXITCODE -ne 0) {
    Write-Host "❌ 検証失敗 - 修正が必要です" -ForegroundColor Red
    return
}
Write-Host "✅ 検証成功" -ForegroundColor Green

2. 表紙の日付を確認

P1 の日付テキストが正しいことを確認:

  • フォーマット: YYYY/MM/DD(曜日)
  • 例: 2026/01/20(月)

3. PowerPoint で開いて確認

完成した PPTX から同名 PDF を出力する:

& "$BasePath\scripts\Export-PptxToPdf.ps1" -PptxPath $outputPath
if ($LASTEXITCODE -ne 0) {
    Write-Host "❌ PDF 出力失敗 - 修正が必要です" -ForegroundColor Red
    return
}

PDF が存在し、0 byte でないことを確認する。PDF 出力後も PPTX を PowerPoint で開く。

顧客配布の直前に distribution gate を実行する。Python engineでは -Engine python -WorkspaceRoot <root> を指定し、PDF本文抽出が非空かつ顧客固有語が表紙外にないことまで確認する。

$engine = if ($config.build.engine) { $config.build.engine } else { 'com' }
$pdfPath = [System.IO.Path]::ChangeExtension($outputPath, '.pdf')
& "$BasePath\scripts\Test-PptxDistribution.ps1" -PptxPath $outputPath -PdfPath $pdfPath -Engine $engine -WorkspaceRoot $BasePath
if ($LASTEXITCODE -ne 0) { return }

完成したファイルを PowerPoint で開く:

Start-Process $outputPath

その後、COM で開いている Presentation を列挙し、FullName または Name が対象 PPTX と一致することを確認する。Start-Process の実行だけで完了扱いにしない。

OneDrive 配下では FullName が SharePoint URL になることがあるため、basename でも照合する。

$targetName = [System.IO.Path]::GetFileName($outputPath)
$app = [Runtime.InteropServices.Marshal]::GetActiveObject('PowerPoint.Application')
$isOpen = $false
foreach ($pres in $app.Presentations) {
    if ($pres.FullName -eq $outputPath -or $pres.Name -eq $targetName) {
        $isOpen = $true
        break
    }
}
if (-not $isOpen) {
    throw "PowerPoint で対象ファイルが開いていることを確認できません: $targetName"
}

UPDATE Points の枚数や分割を報告する場合は、Verify の要約だけで推測せず、PowerPoint の SectionProperties と表のあるスライドを実測する。複数ページ時は総行数と分割(例: 6+6)を報告する。

4. 最終レポート

ユーザーに以下を報告:

## ✅ 完成しました

**出力ファイル**: `{日付フォルダ}/{config.output.fileNamePattern}(例: {顧客名}-{システム名}向け_AzureUpdate_YYYYMMDD.pptx)`
**PDF**: `{日付フォルダ}/{config.output 同名}.pdf`

### サマリ

| 項目          | 件数 |
| ------------- | ---- |
| Weekly Topics | X 件 |
| Appendix      | Y 件 |
| 合計          | Z 件 |

### Weekly Topics 一覧

1. [GA] トピック A
2. [Preview] トピック B
3. ...

### 次のステップ

1. PowerPoint を開いて内容を確認
2. 必要に応じて手動で微調整
3. お客様へ送付

クリーンアップ(オプション)

キャッシュファイルは次回再利用可能なため、通常は削除不要。

# 必要に応じて(ユーザー確認後)
Remove-Item "{日付フォルダ}/manifest/analysis.json" -Force
Remove-Item "{日付フォルダ}/manifest/classification.json" -Force
Remove-Item "{日付フォルダ}/manifest/region_info.json" -Force
Remove-Item "{日付フォルダ}/manifest/region_info_reviewed.json" -Force
Remove-Item "{日付フォルダ}/manifest/notes.json" -Force

完了

ワークフロー完了 🎉

Source: SKILL.md on GitHub

No alerts22d3 checks · Risk SAFE
  • Gen Agent Trust Hub22d

    The skill is a professional automation toolkit designed to generate customer-facing Azure Update PowerPoint decks. It utilizes PowerShell COM automation and the python-pptx library to transform technical announcement data from official Microsoft feeds into structured presentations. The toolkit includes robust validation gates and security features, such as automated scanning for internal customer identifiers in output files, ensuring safe and compliant delivery.

  • Socket22d

    No alerts

  • Snyk22d

    Risk: LOW · No issues

Signed by skilld at e5e7253. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub 16 hours ago.

Activeupdated 3 weeks ago
argument-hint
Date folder, customer config/profile, Azure Updates IDs/range, or workspace root
user-invocable
true
metadata
{
  "author": "yamapan (https://github.com/aktsmm)"
}

README badge

README badge for aktsmm/agent-skills/azure-update-customer-pptx