From 19097919b78ab619d6a57e6f2aded0deb9be4668 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Sun, 14 Jun 2026 10:23:39 +0200 Subject: [PATCH 1/2] fix: stop token-optimizer self-targeting the AIC monitoring family --- .../workflows/agentic-token-optimizer.lock.yml | 4 ++-- .github/workflows/agentic-token-optimizer.md | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/.github/workflows/agentic-token-optimizer.lock.yml b/.github/workflows/agentic-token-optimizer.lock.yml index 271a28c..52a80a0 100644 --- a/.github/workflows/agentic-token-optimizer.lock.yml +++ b/.github/workflows/agentic-token-optimizer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"e009d71c6eb0591ce1f625ba383dbd69607201b4f576a1c538743d9c54ca4e85","body_hash":"bb12c2bd3380154692c6a5565cdf1a79ac74506fb91cfb9c1fe0c78f7da4cf89","compiler_version":"v0.79.6","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.60"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"9815f6e466afea9c0bc3b5d0d0de787018b8a4e978b4609bdcc7206d9eacdeb7","body_hash":"99dcb31603a6f117fdba242e0a9363ae648a7df031eb8c9ce10b258ea7c18f1d","compiler_version":"v0.79.6","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.60"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"df4cb1c069e1874edd31b4311f1884172cec0e10","version":"v6.0.3"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"5c2fe865bb4dc46e1450f6ee0d0541d759aea73a","version":"v0.79.6"},{"repo":"github/gh-aw/actions/setup-cli","sha":"9c481b8bc46dce8b92fce8ffc51781e5c330d37c","version":"v0.79.6"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.2","digest":"sha256:f88e5b17b6b7a600117bc121114d6ce2155c88c983c0c939c5df884f730fa1d6","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.2@sha256:f88e5b17b6b7a600117bc121114d6ce2155c88c983c0c939c5df884f730fa1d6"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.2","digest":"sha256:ee39841d980878ebbb87592903b06d31a1af500c71525c9616f7e8e2a27041a4","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.2@sha256:ee39841d980878ebbb87592903b06d31a1af500c71525c9616f7e8e2a27041a4"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.2","digest":"sha256:02f3ec08f32dc26c5427920c6a2e2f3036238fce44802f2f11ef49ed8621b5d0","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.2@sha256:02f3ec08f32dc26c5427920c6a2e2f3036238fce44802f2f11ef49ed8621b5d0"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.2","digest":"sha256:2e3a717e5f19a654cd9a2263beb52012b56bcb68562ec5ae2e42f9d156b49591","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.2@sha256:2e3a717e5f19a654cd9a2263beb52012b56bcb68562ec5ae2e42f9d156b49591"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.25","digest":"sha256:c10331ad17668ef89f38f5e356678788a40b0cd5fef96e8f92e1d9c1de47cbaa","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.25@sha256:c10331ad17668ef89f38f5e356678788a40b0cd5fef96e8f92e1d9c1de47cbaa"},{"image":"ghcr.io/github/github-mcp-server:v1.1.2","digest":"sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c","pinned_image":"ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c"}]} # ___ _ _ # / _ \ | | (_) @@ -429,7 +429,7 @@ jobs: - env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} name: Download recent agentic workflow logs - run: "set -euo pipefail\nmkdir -p /tmp/gh-aw/token-audit\nPARTS_DIR=/tmp/gh-aw/token-audit/log-parts\nmkdir -p \"$PARTS_DIR\"\n\necho \"📥 Downloading agentic workflow logs (last 7 days)...\"\n\nFOUND_WORKFLOW=0\nfor workflow in .github/workflows/*.md; do\n [ -f \"$workflow\" ] || continue\n\n WORKFLOW_ID=$(sed -n 's/^tracker-id:[[:space:]]*//p' \"$workflow\" | head -n 1 | tr -d '\\r' | sed 's/[[:space:]]*$//')\n [ -n \"$WORKFLOW_ID\" ] || continue\n\n FOUND_WORKFLOW=1\n SAFE_WORKFLOW_ID=$(printf '%s' \"$WORKFLOW_ID\" | tr -cs 'A-Za-z0-9._-' '_')\n PART_FILE=\"$PARTS_DIR/$SAFE_WORKFLOW_ID.json\"\n PART_EXIT=0\n gh aw logs \"$WORKFLOW_ID\" \\\n --start-date -7d \\\n --json \\\n -c 50 \\\n > \"$PART_FILE\" || PART_EXIT=$?\n\n if ! jq -e . \"$PART_FILE\" >/dev/null 2>&1; then\n echo \"⚠️ $WORKFLOW_ID: invalid log JSON (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n continue\n fi\n\n COUNT=$(jq '(.runs // []) | length' \"$PART_FILE\")\n if [ \"$COUNT\" -gt 0 ]; then\n echo \"✅ $WORKFLOW_ID: downloaded $COUNT runs (exit code $PART_EXIT)\"\n else\n echo \"⚠️ $WORKFLOW_ID: no log data (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n fi\ndone\n\nif [ \"$FOUND_WORKFLOW\" -eq 1 ] && ls \"$PARTS_DIR\"/*.json >/dev/null 2>&1; then\n jq -s '\n (map(.runs // []) | add // [] | unique_by(.run_id)) as $runs |\n {\n summary: {\n total_runs: ($runs | length),\n total_tokens: ($runs | map(.token_usage // 0) | add // 0),\n total_aic: ($runs | map(.aic // 0) | add // 0)\n },\n runs: $runs\n }\n ' \"$PARTS_DIR\"/*.json > /tmp/gh-aw/token-audit/all-runs.json\n TOTAL=$(jq '.runs | length' /tmp/gh-aw/token-audit/all-runs.json)\n echo \"✅ Downloaded $TOTAL agentic workflow runs (last 7 days)\"\nelse\n if [ \"$FOUND_WORKFLOW\" -eq 0 ]; then\n echo \"⚠️ No agentic workflow sources found under .github/workflows\"\n fi\n echo '{\"runs\":[],\"summary\":{}}' > /tmp/gh-aw/token-audit/all-runs.json\nfi\n" + run: "set -euo pipefail\nmkdir -p /tmp/gh-aw/token-audit\nPARTS_DIR=/tmp/gh-aw/token-audit/log-parts\nmkdir -p \"$PARTS_DIR\"\n\necho \"📥 Downloading agentic workflow logs (last 7 days)...\"\n\nFOUND_WORKFLOW=0\nfor workflow in .github/workflows/*.md; do\n [ -f \"$workflow\" ] || continue\n\n WORKFLOW_ID=$(sed -n 's/^tracker-id:[[:space:]]*//p' \"$workflow\" | head -n 1 | tr -d '\\r' | sed 's/[[:space:]]*$//')\n [ -n \"$WORKFLOW_ID\" ] || continue\n\n FOUND_WORKFLOW=1\n SAFE_WORKFLOW_ID=$(printf '%s' \"$WORKFLOW_ID\" | tr -cs 'A-Za-z0-9._-' '_')\n PART_FILE=\"$PARTS_DIR/$SAFE_WORKFLOW_ID.json\"\n PART_EXIT=0\n gh aw logs \"$WORKFLOW_ID\" \\\n --start-date -7d \\\n --json \\\n -c 50 \\\n > \"$PART_FILE\" || PART_EXIT=$?\n\n if ! jq -e . \"$PART_FILE\" >/dev/null 2>&1; then\n echo \"⚠️ $WORKFLOW_ID: invalid log JSON (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n continue\n fi\n\n COUNT=$(jq '(.runs // []) | length' \"$PART_FILE\")\n if [ \"$COUNT\" -gt 0 ]; then\n echo \"✅ $WORKFLOW_ID: downloaded $COUNT runs (exit code $PART_EXIT)\"\n else\n echo \"⚠️ $WORKFLOW_ID: no log data (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n fi\ndone\n\nif [ \"$FOUND_WORKFLOW\" -eq 1 ] && ls \"$PARTS_DIR\"/*.json >/dev/null 2>&1; then\n jq -s '\n (map(.runs // []) | add // [] | unique_by(.run_id)) as $runs |\n {\n summary: {\n total_runs: ($runs | length),\n total_tokens: ($runs | map(.token_usage // 0) | add // 0),\n total_aic: ($runs | map(.aic // 0) | add // 0)\n },\n runs: $runs\n }\n ' \"$PARTS_DIR\"/*.json > /tmp/gh-aw/token-audit/all-runs.json\n TOTAL=$(jq '.runs | length' /tmp/gh-aw/token-audit/all-runs.json)\n echo \"✅ Downloaded $TOTAL agentic workflow runs (last 7 days)\"\nelse\n if [ \"$FOUND_WORKFLOW\" -eq 0 ]; then\n echo \"⚠️ No agentic workflow sources found under .github/workflows\"\n fi\n echo '{\"runs\":[],\"summary\":{}}' > /tmp/gh-aw/token-audit/all-runs.json\nfi\n\nBEFORE_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)\njq '\n .runs |= map(select(\n (.workflow_path // \"\") != \".github/workflows/agentic-token-optimizer.lock.yml\"\n and (.workflow_path // \"\") != \".github/workflows/agentic-token-audit.lock.yml\"\n and (.workflow_name // \"\") != \"Agentic Workflow AIC Usage Optimizer\"\n and (.workflow_name // \"\") != \"Daily Agentic Workflow AIC Usage Audit\"\n ))\n' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/all-runs.filtered.json\nmv /tmp/gh-aw/token-audit/all-runs.filtered.json /tmp/gh-aw/token-audit/all-runs.json\nAFTER_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)\necho \"🚫 Excluded AIC monitoring family from candidate pool: $((BEFORE_COUNT - AFTER_COUNT)) run(s) removed\"\n" - name: Aggregate top workflows by AIC usage run: "set -euo pipefail\nmkdir -p /tmp/gh-aw/token-audit\n\njq '{\n generated_at: (now | todateiso8601),\n window_days: 7,\n top_workflows: (\n [.runs[]\n | select(.status == \"completed\")\n | select((.aic // 0) > 0)\n | {\n workflow_name: .workflow_name,\n ai_credits: (.aic // 0),\n tokens: (.token_usage // 0),\n turns: (.turns // 0),\n action_minutes: (.action_minutes // 0)\n }\n ]\n | group_by(.workflow_name)\n | map({\n workflow_name: .[0].workflow_name,\n run_count: length,\n total_ai_credits: (map(.ai_credits) | add),\n avg_ai_credits: ((map(.ai_credits) | add) / length),\n total_tokens: (map(.tokens) | add),\n avg_tokens: ((map(.tokens) | add) / length),\n total_turns: (map(.turns) | add),\n total_action_minutes: (map(.action_minutes) | add)\n })\n | sort_by(.total_ai_credits)\n | reverse\n | .[:10]\n )\n}' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/top-workflows.json\n\necho \"✅ Generated top workflow summary at /tmp/gh-aw/token-audit/top-workflows.json\"\njq '.top_workflows' /tmp/gh-aw/token-audit/top-workflows.json\n" - name: Load optimization history diff --git a/.github/workflows/agentic-token-optimizer.md b/.github/workflows/agentic-token-optimizer.md index 6ed1a65..1e37a4c 100644 --- a/.github/workflows/agentic-token-optimizer.md +++ b/.github/workflows/agentic-token-optimizer.md @@ -95,6 +95,19 @@ steps: echo '{"runs":[],"summary":{}}' > /tmp/gh-aw/token-audit/all-runs.json fi + BEFORE_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json) + jq ' + .runs |= map(select( + (.workflow_path // "") != ".github/workflows/agentic-token-optimizer.lock.yml" + and (.workflow_path // "") != ".github/workflows/agentic-token-audit.lock.yml" + and (.workflow_name // "") != "Agentic Workflow AIC Usage Optimizer" + and (.workflow_name // "") != "Daily Agentic Workflow AIC Usage Audit" + )) + ' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/all-runs.filtered.json + mv /tmp/gh-aw/token-audit/all-runs.filtered.json /tmp/gh-aw/token-audit/all-runs.json + AFTER_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json) + echo "🚫 Excluded AIC monitoring family from candidate pool: $((BEFORE_COUNT - AFTER_COUNT)) run(s) removed" + - name: Aggregate top workflows by AIC usage run: | set -euo pipefail @@ -199,7 +212,7 @@ Treat missing numeric fields (`aic`, `token_usage`, `turns`, `action_minutes`) a - Start from `top-workflows.json`. - Exclude workflows optimized in the last 14 days (use `optimization-log.json`). -- Exclude workflows with "Token" in the name to avoid self-targeting. +- Exclude the AIC monitoring family — the `agentic-token-optimizer` and `agentic-token-audit` workflows (display names "Agentic Workflow AIC Usage Optimizer" and "Daily Agentic Workflow AIC Usage Audit") — to avoid self-targeting. These workflows are pre-filtered from `all-runs.json` and `top-workflows.json`, but never select them even if a stale snapshot still lists them. - Choose the highest AI-credit-spend workflow that remains. - If no snapshot/history exists, derive candidates directly from `all-runs.json`. From a0c57d6ba95d07e5b880922f4071606b81c765b9 Mon Sep 17 00:00:00 2001 From: Mara Nikola Kiefer Date: Sun, 14 Jun 2026 10:37:38 +0200 Subject: [PATCH 2/2] recalculate summary after filtering out the optimizer/audit workflows --- .../agentic-token-optimizer.lock.yml | 4 ++-- .github/workflows/agentic-token-optimizer.md | 21 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/.github/workflows/agentic-token-optimizer.lock.yml b/.github/workflows/agentic-token-optimizer.lock.yml index 52a80a0..2b7d354 100644 --- a/.github/workflows/agentic-token-optimizer.lock.yml +++ b/.github/workflows/agentic-token-optimizer.lock.yml @@ -1,4 +1,4 @@ -# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"9815f6e466afea9c0bc3b5d0d0de787018b8a4e978b4609bdcc7206d9eacdeb7","body_hash":"99dcb31603a6f117fdba242e0a9363ae648a7df031eb8c9ce10b258ea7c18f1d","compiler_version":"v0.79.6","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.60"}} +# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"aa8594e41e14f38d9a45d5ad71c8f923cfb9a77d380fb059a2531c43d199547f","body_hash":"99dcb31603a6f117fdba242e0a9363ae648a7df031eb8c9ce10b258ea7c18f1d","compiler_version":"v0.79.6","strict":true,"agent_id":"copilot","engine_versions":{"copilot":"1.0.60"}} # gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"df4cb1c069e1874edd31b4311f1884172cec0e10","version":"v6.0.3"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"5c2fe865bb4dc46e1450f6ee0d0541d759aea73a","version":"v0.79.6"},{"repo":"github/gh-aw/actions/setup-cli","sha":"9c481b8bc46dce8b92fce8ffc51781e5c330d37c","version":"v0.79.6"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.27.2","digest":"sha256:f88e5b17b6b7a600117bc121114d6ce2155c88c983c0c939c5df884f730fa1d6","pinned_image":"ghcr.io/github/gh-aw-firewall/agent:0.27.2@sha256:f88e5b17b6b7a600117bc121114d6ce2155c88c983c0c939c5df884f730fa1d6"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.2","digest":"sha256:ee39841d980878ebbb87592903b06d31a1af500c71525c9616f7e8e2a27041a4","pinned_image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.27.2@sha256:ee39841d980878ebbb87592903b06d31a1af500c71525c9616f7e8e2a27041a4"},{"image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.2","digest":"sha256:02f3ec08f32dc26c5427920c6a2e2f3036238fce44802f2f11ef49ed8621b5d0","pinned_image":"ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.2@sha256:02f3ec08f32dc26c5427920c6a2e2f3036238fce44802f2f11ef49ed8621b5d0"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.27.2","digest":"sha256:2e3a717e5f19a654cd9a2263beb52012b56bcb68562ec5ae2e42f9d156b49591","pinned_image":"ghcr.io/github/gh-aw-firewall/squid:0.27.2@sha256:2e3a717e5f19a654cd9a2263beb52012b56bcb68562ec5ae2e42f9d156b49591"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.25","digest":"sha256:c10331ad17668ef89f38f5e356678788a40b0cd5fef96e8f92e1d9c1de47cbaa","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.25@sha256:c10331ad17668ef89f38f5e356678788a40b0cd5fef96e8f92e1d9c1de47cbaa"},{"image":"ghcr.io/github/github-mcp-server:v1.1.2","digest":"sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c","pinned_image":"ghcr.io/github/github-mcp-server:v1.1.2@sha256:30197479d8036c7811892bc07e06f9a05c9ef3cdd79bc59f256d50647f95788c"}]} # ___ _ _ # / _ \ | | (_) @@ -429,7 +429,7 @@ jobs: - env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} name: Download recent agentic workflow logs - run: "set -euo pipefail\nmkdir -p /tmp/gh-aw/token-audit\nPARTS_DIR=/tmp/gh-aw/token-audit/log-parts\nmkdir -p \"$PARTS_DIR\"\n\necho \"📥 Downloading agentic workflow logs (last 7 days)...\"\n\nFOUND_WORKFLOW=0\nfor workflow in .github/workflows/*.md; do\n [ -f \"$workflow\" ] || continue\n\n WORKFLOW_ID=$(sed -n 's/^tracker-id:[[:space:]]*//p' \"$workflow\" | head -n 1 | tr -d '\\r' | sed 's/[[:space:]]*$//')\n [ -n \"$WORKFLOW_ID\" ] || continue\n\n FOUND_WORKFLOW=1\n SAFE_WORKFLOW_ID=$(printf '%s' \"$WORKFLOW_ID\" | tr -cs 'A-Za-z0-9._-' '_')\n PART_FILE=\"$PARTS_DIR/$SAFE_WORKFLOW_ID.json\"\n PART_EXIT=0\n gh aw logs \"$WORKFLOW_ID\" \\\n --start-date -7d \\\n --json \\\n -c 50 \\\n > \"$PART_FILE\" || PART_EXIT=$?\n\n if ! jq -e . \"$PART_FILE\" >/dev/null 2>&1; then\n echo \"⚠️ $WORKFLOW_ID: invalid log JSON (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n continue\n fi\n\n COUNT=$(jq '(.runs // []) | length' \"$PART_FILE\")\n if [ \"$COUNT\" -gt 0 ]; then\n echo \"✅ $WORKFLOW_ID: downloaded $COUNT runs (exit code $PART_EXIT)\"\n else\n echo \"⚠️ $WORKFLOW_ID: no log data (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n fi\ndone\n\nif [ \"$FOUND_WORKFLOW\" -eq 1 ] && ls \"$PARTS_DIR\"/*.json >/dev/null 2>&1; then\n jq -s '\n (map(.runs // []) | add // [] | unique_by(.run_id)) as $runs |\n {\n summary: {\n total_runs: ($runs | length),\n total_tokens: ($runs | map(.token_usage // 0) | add // 0),\n total_aic: ($runs | map(.aic // 0) | add // 0)\n },\n runs: $runs\n }\n ' \"$PARTS_DIR\"/*.json > /tmp/gh-aw/token-audit/all-runs.json\n TOTAL=$(jq '.runs | length' /tmp/gh-aw/token-audit/all-runs.json)\n echo \"✅ Downloaded $TOTAL agentic workflow runs (last 7 days)\"\nelse\n if [ \"$FOUND_WORKFLOW\" -eq 0 ]; then\n echo \"⚠️ No agentic workflow sources found under .github/workflows\"\n fi\n echo '{\"runs\":[],\"summary\":{}}' > /tmp/gh-aw/token-audit/all-runs.json\nfi\n\nBEFORE_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)\njq '\n .runs |= map(select(\n (.workflow_path // \"\") != \".github/workflows/agentic-token-optimizer.lock.yml\"\n and (.workflow_path // \"\") != \".github/workflows/agentic-token-audit.lock.yml\"\n and (.workflow_name // \"\") != \"Agentic Workflow AIC Usage Optimizer\"\n and (.workflow_name // \"\") != \"Daily Agentic Workflow AIC Usage Audit\"\n ))\n' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/all-runs.filtered.json\nmv /tmp/gh-aw/token-audit/all-runs.filtered.json /tmp/gh-aw/token-audit/all-runs.json\nAFTER_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)\necho \"🚫 Excluded AIC monitoring family from candidate pool: $((BEFORE_COUNT - AFTER_COUNT)) run(s) removed\"\n" + run: "set -euo pipefail\nmkdir -p /tmp/gh-aw/token-audit\nPARTS_DIR=/tmp/gh-aw/token-audit/log-parts\nmkdir -p \"$PARTS_DIR\"\n\necho \"📥 Downloading agentic workflow logs (last 7 days)...\"\n\nFOUND_WORKFLOW=0\nfor workflow in .github/workflows/*.md; do\n [ -f \"$workflow\" ] || continue\n\n WORKFLOW_ID=$(sed -n 's/^tracker-id:[[:space:]]*//p' \"$workflow\" | head -n 1 | tr -d '\\r' | sed 's/[[:space:]]*$//')\n [ -n \"$WORKFLOW_ID\" ] || continue\n\n FOUND_WORKFLOW=1\n SAFE_WORKFLOW_ID=$(printf '%s' \"$WORKFLOW_ID\" | tr -cs 'A-Za-z0-9._-' '_')\n PART_FILE=\"$PARTS_DIR/$SAFE_WORKFLOW_ID.json\"\n PART_EXIT=0\n gh aw logs \"$WORKFLOW_ID\" \\\n --start-date -7d \\\n --json \\\n -c 50 \\\n > \"$PART_FILE\" || PART_EXIT=$?\n\n if ! jq -e . \"$PART_FILE\" >/dev/null 2>&1; then\n echo \"⚠️ $WORKFLOW_ID: invalid log JSON (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n continue\n fi\n\n COUNT=$(jq '(.runs // []) | length' \"$PART_FILE\")\n if [ \"$COUNT\" -gt 0 ]; then\n echo \"✅ $WORKFLOW_ID: downloaded $COUNT runs (exit code $PART_EXIT)\"\n else\n echo \"⚠️ $WORKFLOW_ID: no log data (exit code $PART_EXIT)\"\n rm -f \"$PART_FILE\"\n fi\ndone\n\nif [ \"$FOUND_WORKFLOW\" -eq 1 ] && ls \"$PARTS_DIR\"/*.json >/dev/null 2>&1; then\n jq -s '\n (map(.runs // []) | add // [] | unique_by(.run_id)) as $runs |\n {\n summary: {\n total_runs: ($runs | length),\n total_tokens: ($runs | map(.token_usage // 0) | add // 0),\n total_aic: ($runs | map(.aic // 0) | add // 0)\n },\n runs: $runs\n }\n ' \"$PARTS_DIR\"/*.json > /tmp/gh-aw/token-audit/all-runs.json\n TOTAL=$(jq '.runs | length' /tmp/gh-aw/token-audit/all-runs.json)\n echo \"✅ Downloaded $TOTAL agentic workflow runs (last 7 days)\"\nelse\n if [ \"$FOUND_WORKFLOW\" -eq 0 ]; then\n echo \"⚠️ No agentic workflow sources found under .github/workflows\"\n fi\n echo '{\"runs\":[],\"summary\":{}}' > /tmp/gh-aw/token-audit/all-runs.json\nfi\n\nBEFORE_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)\njq '\n (.runs // [])\n | map(select(\n (.workflow_path // \"\") != \".github/workflows/agentic-token-optimizer.lock.yml\"\n and (.workflow_path // \"\") != \".github/workflows/agentic-token-audit.lock.yml\"\n and (.workflow_name // \"\") != \"Agentic Workflow AIC Usage Optimizer\"\n and (.workflow_name // \"\") != \"Daily Agentic Workflow AIC Usage Audit\"\n )) as $runs\n | {\n summary: {\n total_runs: ($runs | length),\n total_tokens: ($runs | map(.token_usage // 0) | add // 0),\n total_aic: ($runs | map(.aic // 0) | add // 0)\n },\n runs: $runs\n }\n' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/all-runs.filtered.json\nmv /tmp/gh-aw/token-audit/all-runs.filtered.json /tmp/gh-aw/token-audit/all-runs.json\nAFTER_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)\necho \"🚫 Excluded AIC monitoring family from candidate pool: $((BEFORE_COUNT - AFTER_COUNT)) run(s) removed\"\n" - name: Aggregate top workflows by AIC usage run: "set -euo pipefail\nmkdir -p /tmp/gh-aw/token-audit\n\njq '{\n generated_at: (now | todateiso8601),\n window_days: 7,\n top_workflows: (\n [.runs[]\n | select(.status == \"completed\")\n | select((.aic // 0) > 0)\n | {\n workflow_name: .workflow_name,\n ai_credits: (.aic // 0),\n tokens: (.token_usage // 0),\n turns: (.turns // 0),\n action_minutes: (.action_minutes // 0)\n }\n ]\n | group_by(.workflow_name)\n | map({\n workflow_name: .[0].workflow_name,\n run_count: length,\n total_ai_credits: (map(.ai_credits) | add),\n avg_ai_credits: ((map(.ai_credits) | add) / length),\n total_tokens: (map(.tokens) | add),\n avg_tokens: ((map(.tokens) | add) / length),\n total_turns: (map(.turns) | add),\n total_action_minutes: (map(.action_minutes) | add)\n })\n | sort_by(.total_ai_credits)\n | reverse\n | .[:10]\n )\n}' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/top-workflows.json\n\necho \"✅ Generated top workflow summary at /tmp/gh-aw/token-audit/top-workflows.json\"\njq '.top_workflows' /tmp/gh-aw/token-audit/top-workflows.json\n" - name: Load optimization history diff --git a/.github/workflows/agentic-token-optimizer.md b/.github/workflows/agentic-token-optimizer.md index 1e37a4c..684a223 100644 --- a/.github/workflows/agentic-token-optimizer.md +++ b/.github/workflows/agentic-token-optimizer.md @@ -97,12 +97,21 @@ steps: BEFORE_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json) jq ' - .runs |= map(select( - (.workflow_path // "") != ".github/workflows/agentic-token-optimizer.lock.yml" - and (.workflow_path // "") != ".github/workflows/agentic-token-audit.lock.yml" - and (.workflow_name // "") != "Agentic Workflow AIC Usage Optimizer" - and (.workflow_name // "") != "Daily Agentic Workflow AIC Usage Audit" - )) + (.runs // []) + | map(select( + (.workflow_path // "") != ".github/workflows/agentic-token-optimizer.lock.yml" + and (.workflow_path // "") != ".github/workflows/agentic-token-audit.lock.yml" + and (.workflow_name // "") != "Agentic Workflow AIC Usage Optimizer" + and (.workflow_name // "") != "Daily Agentic Workflow AIC Usage Audit" + )) as $runs + | { + summary: { + total_runs: ($runs | length), + total_tokens: ($runs | map(.token_usage // 0) | add // 0), + total_aic: ($runs | map(.aic // 0) | add // 0) + }, + runs: $runs + } ' /tmp/gh-aw/token-audit/all-runs.json > /tmp/gh-aw/token-audit/all-runs.filtered.json mv /tmp/gh-aw/token-audit/all-runs.filtered.json /tmp/gh-aw/token-audit/all-runs.json AFTER_COUNT=$(jq '(.runs // []) | length' /tmp/gh-aw/token-audit/all-runs.json)