diff --git a/docs/src/content/docs/agent-factory-status.mdx b/docs/src/content/docs/agent-factory-status.mdx index d82cb6e1bd9..b7ed66068e2 100644 --- a/docs/src/content/docs/agent-factory-status.mdx +++ b/docs/src/content/docs/agent-factory-status.mdx @@ -62,6 +62,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Daily Code Metrics and Trend Tracking Agent](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-code-metrics.md) | claude | [![Daily Code Metrics and Trend Tracking Agent](https://github.com/github/gh-aw/actions/workflows/daily-code-metrics.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-code-metrics.lock.yml) | - | - | | [Daily Community Attribution Updater](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-community-attribution.md) | copilot | [![Daily Community Attribution Updater](https://github.com/github/gh-aw/actions/workflows/daily-community-attribution.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-community-attribution.lock.yml) | - | - | | [Daily Compiler Quality Check](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-compiler-quality.md) | copilot | [![Daily Compiler Quality Check](https://github.com/github/gh-aw/actions/workflows/daily-compiler-quality.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-compiler-quality.lock.yml) | - | - | +| [Daily Compiler Threat Spec Optimizer](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-compiler-threat-spec-optimizer.md) | copilot | [![Daily Compiler Threat Spec Optimizer](https://github.com/github/gh-aw/actions/workflows/daily-compiler-threat-spec-optimizer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-compiler-threat-spec-optimizer.lock.yml) | - | - | | [Daily Copilot PR Merged Report](https://github.com/github/gh-aw/blob/main/.github/workflows/copilot-pr-merged-report.md) | copilot | [![Daily Copilot PR Merged Report](https://github.com/github/gh-aw/actions/workflows/copilot-pr-merged-report.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/copilot-pr-merged-report.lock.yml) | `daily around 15:00 on weekdays` | - | | [Daily Copilot Token Usage Audit](https://github.com/github/gh-aw/blob/main/.github/workflows/copilot-token-audit.md) | copilot | [![Daily Copilot Token Usage Audit](https://github.com/github/gh-aw/actions/workflows/copilot-token-audit.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/copilot-token-audit.lock.yml) | `daily around 12:00 on weekdays` | - | | [Daily Documentation Healer](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-doc-healer.md) | claude | [![Daily Documentation Healer](https://github.com/github/gh-aw/actions/workflows/daily-doc-healer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-doc-healer.lock.yml) | - | - | @@ -91,6 +92,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Daily Semgrep Scan](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-semgrep-scan.md) | copilot | [![Daily Semgrep Scan](https://github.com/github/gh-aw/actions/workflows/daily-semgrep-scan.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-semgrep-scan.lock.yml) | - | - | | [Daily Sentrux Report](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-sentrux-report.md) | copilot | [![Daily Sentrux Report](https://github.com/github/gh-aw/actions/workflows/daily-sentrux-report.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-sentrux-report.lock.yml) | - | - | | [Daily Skill Optimizer Improvements](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-skill-optimizer.md) | copilot | [![Daily Skill Optimizer Improvements](https://github.com/github/gh-aw/actions/workflows/daily-skill-optimizer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-skill-optimizer.lock.yml) | - | - | +| [Daily SPDD Spec Planner](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-spdd-spec-planner.md) | copilot | [![Daily SPDD Spec Planner](https://github.com/github/gh-aw/actions/workflows/daily-spdd-spec-planner.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-spdd-spec-planner.lock.yml) | - | - | | [Daily Sub-Agent Optimizer](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-subagent-optimizer.md) | claude | [![Daily Sub-Agent Optimizer](https://github.com/github/gh-aw/actions/workflows/daily-subagent-optimizer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-subagent-optimizer.lock.yml) | - | - | | [Daily Syntax Error Quality Check](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-syntax-error-quality.md) | copilot | [![Daily Syntax Error Quality Check](https://github.com/github/gh-aw/actions/workflows/daily-syntax-error-quality.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-syntax-error-quality.lock.yml) | - | - | | [Daily Team Evolution Insights](https://github.com/github/gh-aw/blob/main/.github/workflows/daily-team-evolution-insights.md) | claude | [![Daily Team Evolution Insights](https://github.com/github/gh-aw/actions/workflows/daily-team-evolution-insights.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/daily-team-evolution-insights.lock.yml) | - | - | @@ -150,6 +152,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Package Specification Librarian](https://github.com/github/gh-aw/blob/main/.github/workflows/spec-librarian.md) | copilot | [![Package Specification Librarian](https://github.com/github/gh-aw/actions/workflows/spec-librarian.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/spec-librarian.lock.yml) | - | - | | [Plan Command](https://github.com/github/gh-aw/blob/main/.github/workflows/plan.md) | copilot | [![Plan Command](https://github.com/github/gh-aw/actions/workflows/plan.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/plan.lock.yml) | - | `/plan` | | [Poem Bot - A Creative Agentic Workflow](https://github.com/github/gh-aw/blob/main/.github/workflows/poem-bot.md) | copilot | [![Poem Bot - A Creative Agentic Workflow](https://github.com/github/gh-aw/actions/workflows/poem-bot.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/poem-bot.lock.yml) | - | `/poem` | +| [PR Code Quality Reviewer](https://github.com/github/gh-aw/blob/main/.github/workflows/pr-code-quality-reviewer.md) | copilot | [![PR Code Quality Reviewer](https://github.com/github/gh-aw/actions/workflows/pr-code-quality-reviewer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/pr-code-quality-reviewer.lock.yml) | - | `/review` | | [PR Nitpick Reviewer 🔍](https://github.com/github/gh-aw/blob/main/.github/workflows/pr-nitpick-reviewer.md) | copilot | [![PR Nitpick Reviewer 🔍](https://github.com/github/gh-aw/actions/workflows/pr-nitpick-reviewer.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/pr-nitpick-reviewer.lock.yml) | - | `/nit` | | [PR Triage Agent](https://github.com/github/gh-aw/blob/main/.github/workflows/pr-triage-agent.md) | copilot | [![PR Triage Agent](https://github.com/github/gh-aw/actions/workflows/pr-triage-agent.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/pr-triage-agent.lock.yml) | - | - | | [Python Data Visualization Generator](https://github.com/github/gh-aw/blob/main/.github/workflows/python-data-charts.md) | copilot | [![Python Data Visualization Generator](https://github.com/github/gh-aw/actions/workflows/python-data-charts.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/python-data-charts.lock.yml) | - | - | @@ -193,6 +196,7 @@ These are experimental agentic workflows used by the GitHub Next team to learn, | [Smoke Update Cross-Repo PR](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-update-cross-repo-pr.md) | copilot | [![Smoke Update Cross-Repo PR](https://github.com/github/gh-aw/actions/workflows/smoke-update-cross-repo-pr.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-update-cross-repo-pr.lock.yml) | - | - | | [Smoke Workflow Call](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-workflow-call.md) | copilot | [![Smoke Workflow Call](https://github.com/github/gh-aw/actions/workflows/smoke-workflow-call.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-workflow-call.lock.yml) | - | - | | [Smoke Workflow Call with Inputs](https://github.com/github/gh-aw/blob/main/.github/workflows/smoke-workflow-call-with-inputs.md) | copilot | [![Smoke Workflow Call with Inputs](https://github.com/github/gh-aw/actions/workflows/smoke-workflow-call-with-inputs.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/smoke-workflow-call-with-inputs.lock.yml) | - | - | +| [Stale PR Cleanup](https://github.com/github/gh-aw/blob/main/.github/workflows/stale-pr-cleanup.md) | copilot | [![Stale PR Cleanup](https://github.com/github/gh-aw/actions/workflows/stale-pr-cleanup.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/stale-pr-cleanup.lock.yml) | - | - | | [Stale Repository Identifier](https://github.com/github/gh-aw/blob/main/.github/workflows/stale-repo-identifier.md) | copilot | [![Stale Repository Identifier](https://github.com/github/gh-aw/actions/workflows/stale-repo-identifier.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/stale-repo-identifier.lock.yml) | - | - | | [Static Analysis Report](https://github.com/github/gh-aw/blob/main/.github/workflows/static-analysis-report.md) | claude | [![Static Analysis Report](https://github.com/github/gh-aw/actions/workflows/static-analysis-report.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/static-analysis-report.lock.yml) | - | - | | [Step Name Alignment](https://github.com/github/gh-aw/blob/main/.github/workflows/step-name-alignment.md) | claude | [![Step Name Alignment](https://github.com/github/gh-aw/actions/workflows/step-name-alignment.lock.yml/badge.svg)](https://github.com/github/gh-aw/actions/workflows/step-name-alignment.lock.yml) | `daily` | - | diff --git a/docs/src/content/docs/reference/safe-outputs.md b/docs/src/content/docs/reference/safe-outputs.md index f47dc7a41a5..17af5ea9f5d 100644 --- a/docs/src/content/docs/reference/safe-outputs.md +++ b/docs/src/content/docs/reference/safe-outputs.md @@ -115,6 +115,27 @@ See [Cross-Repository Operations](/gh-aw/reference/cross-repository/) for compre > [!TIP] > Use `footer: false` to omit the AI-generated footer while preserving workflow-id markers for searchability. See [Footer Control](/gh-aw/reference/footers/) for details. +#### `create_issue` tool field schema (`fields`) + +| Parameter | Type | Required | Description | Example | +|-----------|------|----------|-------------|---------| +| `fields` | `array` | No | Optional issue field updates to apply immediately after issue creation. | `[{"name":"Priority","value":"P1"}]` | +| `fields[].name` | `string` | Yes (when item exists) | Issue field display name. Match the repository field label (case-insensitive matching is supported). | `"Priority"` | +| `fields[].value` | `string \| number` | Yes (when item exists) | Field value. Use a number for numeric fields; otherwise use a string (single select, iteration title, date `YYYY-MM-DD`, text). | `"Sprint 42"` | + +```json +{ + "type": "create_issue", + "title": "Triage: flaky parser test", + "body": "Intermittent failure detected in CI.", + "fields": [ + { "name": "Priority", "value": "High" }, + { "name": "Iteration", "value": "Sprint 42" }, + { "name": "Story Points", "value": 3 } + ] +} +``` + #### Auto-Expiration The `expires` field auto-closes issues after a time period. Supports day-string format (`7d`, `2w`, `1m`, `1y`, `2h`) or `false` to disable expiration. Integer values (e.g., `expires: 7`) are also accepted as shorthand for days and can be migrated to string format with `gh aw fix --write`. Generates `agentics-maintenance.yml` workflow that runs at the minimum required frequency based on the shortest expiration time across all workflows: @@ -395,6 +416,7 @@ When using `target: "*"`, the agent must provide `issue_number` or `item_number` - `replace-island`: Updates a specific section marked with HTML comments Agent output format: `{"type": "update_issue", "issue_number": 123, "operation": "append", "body": "..."}`. The `operation` field is optional (defaults to `append`). +For issue field updates, use [`set_issue_field`](#set-issue-field-set-issue-field). ### Pull Request Updates (`update-pull-request:`) @@ -454,6 +476,107 @@ safe-outputs: Agent calls `set_issue_field` with `value`, and either `field_name` (preferred) or `field_node_id`. It can also pass `issue_number`; if omitted, the triggering issue is targeted. +#### `set_issue_field` tool schema + +| Parameter | Type | Required | Description | Example | +|-----------|------|----------|-------------|---------| +| `value` | `string` | Yes | Field value to set. For date fields use `YYYY-MM-DD`; for single-select use an existing option label. | `"High"` | +| `field_name` | `string` | Conditional* | Field display name used for automatic discovery. | `"Priority"` | +| `field_node_id` | `string` | Conditional* | GraphQL node ID of the field, used to skip name discovery. | `"PVTF_lADO..."` | +| `issue_number` | `number \| string` | No | Issue number to update. If omitted, uses the triggering issue. | `123` | +| `repo` | `string` | No | Optional `owner/repo` override when cross-repository updates are enabled. | `"owner/repo"` | + +\* Provide **at least one** of `field_name` or `field_node_id`. + +```json +{ + "type": "set_issue_field", + "issue_number": 123, + "field_name": "Priority", + "value": "High" +} +``` + +#### Issue field discovery mechanism + +When `field_name` is provided, the handler discovers available issue fields for the target repository and resolves the matching field automatically. + +1. Agent calls `set_issue_field` with `field_name`. +2. Handler fetches available issue fields and resolves the field by label. +3. If the field is unknown, the error includes available field names and guidance to use `field_node_id`. + +```json +{ + "type": "set_issue_field", + "field_name": "Urgency", + "value": "P0" +} +``` + +Example actionable error: + +```text +Issue field "Urgency" not found. Available fields: Priority, Iteration, Story Points. +Use a listed field_name or provide field_node_id to bypass discovery. +``` + +Retrying with explicit ID: + +```json +{ + "type": "set_issue_field", + "field_node_id": "PVTF_lADOExampleFieldId", + "value": "P0" +} +``` + +#### End-to-end triage workflow example (discovery + field updates) + +```yaml wrap +--- +on: + issues: + types: [opened, reopened] + +permissions: + contents: read + issues: write + +safe-outputs: + create-issue: + title-prefix: "[triage] " + labels: [triage] + allowed-fields: [Priority, Iteration, Story Points] + update-issue: + target: triggering + status: + body: + set-issue-field: + target: triggering + allowed-fields: [Priority, Iteration] +--- +``` + +```json +[ + { + "type": "update_issue", + "body": "Initial triage complete. Escalating for review.", + "operation": "append" + }, + { + "type": "set_issue_field", + "field_name": "Priority", + "value": "High" + }, + { + "type": "set_issue_field", + "field_name": "Iteration", + "value": "Sprint 42" + } +] +``` + ### Project Creation (`create-project:`) Creates new GitHub Projects V2 boards. Requires a write-capable PAT or GitHub App token ([project token authentication](/gh-aw/patterns/project-ops/#project-token-authentication)); default `GITHUB_TOKEN` lacks Projects v2 access. Supports optional view configuration to create custom project views at creation time.