Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
a3aa856
workflows
dsyme Aug 12, 2025
8b008c9
merge
dsyme Aug 12, 2025
7cf5221
update agentics
dsyme Aug 12, 2025
8f727dd
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 12, 2025
6c58ad1
Revise caution note in README (#674)
idan Aug 12, 2025
6cc1749
remove dead agents
dsyme Aug 12, 2025
7ff4644
merge main
dsyme Aug 13, 2025
38b875e
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 13, 2025
89c0995
merge main
dsyme Aug 13, 2025
891d8dc
Fix output reference in scout agent workflow and clarify report struc…
pelikhan Aug 13, 2025
96f53eb
Rename "Deep Research Scout Agent" to "Scout The Researcher" and upda…
pelikhan Aug 14, 2025
b51b866
Add reaction step to workflow and update permissions for ai-reaction
pelikhan Aug 14, 2025
bf091b4
Refine analysis instructions in Scout The Researcher workflow to clar…
pelikhan Aug 14, 2025
11d82b8
Update concurrency group format in workflow files for consistency
pelikhan Aug 14, 2025
0da0ae5
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
a17638b
Merge branch 'main' of https://github.com/githubnext/gh-aw-internal
dsyme Aug 14, 2025
8f13dd2
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
c20069e
make compileMerge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
839d598
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
ce3907e
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
f86b028
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
1b24871
updates from ext
dsyme Aug 14, 2025
9f10c2c
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 14, 2025
2230797
Remove Add/Remove reaction action from workflow
pelikhan Aug 14, 2025
b288317
Add agentic workflow activity overview to daily team status workflow …
Copilot Aug 14, 2025
d421586
Add travel agent workflow for converting issues to copilot instructio…
Copilot Aug 14, 2025
ddbfe79
Refine agentic workflow report generation to include an overview tabl…
pelikhan Aug 14, 2025
203b6c1
Add log download step to agent standup workflow and update documentation
pelikhan Aug 14, 2025
171cf1d
Add GH_TOKEN environment variable for downloading logs in agent stand…
pelikhan Aug 14, 2025
c089b37
Add security guidelines for AW (#711)
Mossaka Aug 14, 2025
e6bbd75
Fix GH_TOKEN reference in agent standup workflow and add caching for …
pelikhan Aug 14, 2025
573c68d
Merge branch 'main' of https://github.com/githubnext/gh-aw-internal
pelikhan Aug 14, 2025
a040202
read access to gh-aw to do integration
pelikhan Aug 14, 2025
3cdb3b3
merge main
dsyme Aug 14, 2025
3b4bedb
Implement CI Failure Doctor workflow with secure expression handling …
Copilot Aug 14, 2025
460a741
merge main
dsyme Aug 15, 2025
83e770f
merge main
dsyme Aug 15, 2025
49b18f1
merge ext
dsyme Aug 15, 2025
0196909
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
ea9d175
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
f5c5caa
fix CI
dsyme Aug 15, 2025
32709a8
update instructions
dsyme Aug 15, 2025
672db89
don't trigger agent standup on every pr (#793)
pelikhan Aug 15, 2025
38e7aec
Move aw_info.json generation to /tmp directory to prevent accidental …
Copilot Aug 15, 2025
256164a
Refactor action workflow assessor: update permissions, enhance cachin…
pelikhan Aug 15, 2025
27c460d
Update documentation to clarify that Astro Starlight should not be su…
pelikhan Aug 15, 2025
5cffc7f
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
63514c9
merge upstream
dsyme Aug 15, 2025
9374acc
Add phase for searching existing issues in CI Failure Doctor workflow…
pelikhan Aug 15, 2025
9283000
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
b71331b
update
dsyme Aug 15, 2025
9488d2e
Merge branch 'main' of https://github.com/githubnext/gh-aw-internal
dsyme Aug 15, 2025
ad10359
stop time test
dsyme Aug 15, 2025
5cc40ee
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
00d5a45
update
dsyme Aug 15, 2025
bcda036
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
ec84af4
utc
dsyme Aug 15, 2025
ad6b3b7
issue labeller blog sample
pelikhan Aug 15, 2025
703eace
remove 'reopened' type from issue labeller workflow
pelikhan Aug 15, 2025
e01c6bf
Merge branch 'main' of https://github.com/githubnext/gh-aw
dsyme Aug 15, 2025
9e01740
fix CI
dsyme Aug 15, 2025
e5506c1
Merge branch 'main' of https://github.com/githubnext/gh-aw-internal
dsyme Aug 15, 2025
22138e2
Implement Tech Debt Collector agentic workflow for automated code qua…
Copilot Aug 16, 2025
7037a52
🧳 Implement Agent Menu workflow for automated agentic workflow docume…
Copilot Aug 16, 2025
b38bf3e
Enhance Agent Menu documentation with detailed workflow analysis step…
pelikhan Aug 16, 2025
2957d4e
Refactor Agent Menu workflow documentation to streamline steps and en…
pelikhan Aug 16, 2025
c3be9f9
🧳 Update Agent Menu Documentation (#817)
github-actions[bot] Aug 16, 2025
5bbc2a9
Refactor documentation for agent workflows to improve clarity and upd…
pelikhan Aug 17, 2025
25f18ec
Merge branch 'main' of https://github.com/githubnext/gh-aw-internal
pelikhan Aug 17, 2025
0969c3d
🧳 Update Agent Menu Documentation (#823)
github-actions[bot] Aug 17, 2025
a20d72e
Update travel agent workflow to include create_issue tool and enhance…
pelikhan Aug 17, 2025
4da20ce
Merge branch 'main' of https://github.com/githubnext/gh-aw-internal
pelikhan Aug 17, 2025
cf6849c
🧳 Update Agent Menu Documentation (#826)
github-actions[bot] Aug 17, 2025
9d39e52
Add comprehensive tests for main function execution
github-actions[bot] Aug 18, 2025
4368147
Add comprehensive tests for file watching and compilation functions
github-actions[bot] Aug 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@
"permissions": {
"contents": "read"
}
},
"githubnext/gh-aw": {
"permissions": {
"contents": "read"
}
}
}
}
Expand Down
39 changes: 39 additions & 0 deletions .github/actions/check-team-member/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: "Check if actor is team member"
description: "Checks if the current GitHub actor is a member of the repository's organization/team"
outputs:
is_team_member:
description: "Boolean indicating if the actor is a team member (true/false)"
runs:
using: "composite"
steps:
- name: Check team membership
uses: actions/github-script@v7
with:
script: |
const actor = context.actor;
const { owner, repo } = context.repo;

// Check if the actor has repository access (admin, maintain permissions)
try {
console.log(`Checking if user '${actor}' is admin or maintainer of ${owner}/${repo}`);

const repoPermission = await github.rest.repos.getCollaboratorPermissionLevel({
owner: owner,
repo: repo,
username: actor
});

const permission = repoPermission.data.permission;
console.log(`Repository permission level: ${permission}`);

if (permission === 'admin' || permission === 'maintain') {
console.log(`User has ${permission} access to repository`);
core.setOutput('is_team_member', 'true');
return;
}
} catch (repoError) {
console.log(`Repository permission check failed: ${repoError.message}`);
}

core.setOutput('is_team_member', 'false');

90 changes: 90 additions & 0 deletions .github/actions/compute-text/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: "Compute current body text"
description: "Computes the current body text based on the GitHub event context"
outputs:
text:
description: "The computed current body text based on event type"
runs:
using: "composite"
steps:
- name: Compute current body text
id: compute-text
uses: actions/github-script@v7
with:
script: |
let text = '';

const actor = context.actor;
const { owner, repo } = context.repo;

// Check if the actor has repository access (admin, maintain permissions)
try {
const repoPermission = await github.rest.repos.getCollaboratorPermissionLevel({
owner: owner,
repo: repo,
username: actor
});

const permission = repoPermission.data.permission;
console.log(`Repository permission level: ${permission}`);

if (permission !== 'admin' && permission !== 'maintain') {
return;
}
} catch (repoError) {
console.log(`Repository permission check failed: ${repoError.message}`);
core.setOutput('text', '');
return;
}

// Determine current body text based on event context
switch (context.eventName) {
case 'issues':
// For issues: title + body
if (context.payload.issue) {
const title = context.payload.issue.title || '';
const body = context.payload.issue.body || '';
text = `${title}\n\n${body}`;
}
break;

case 'pull_request':
// For pull requests: title + body
if (context.payload.pull_request) {
const title = context.payload.pull_request.title || '';
const body = context.payload.pull_request.body || '';
text = `${title}\n\n${body}`;
}
break;

case 'issue_comment':
// For issue comments: comment body
if (context.payload.comment) {
text = context.payload.comment.body || '';
}
break;

case 'pull_request_review_comment':
// For PR review comments: comment body
if (context.payload.comment) {
text = context.payload.comment.body || '';
}
break;

case 'pull_request_review':
// For PR reviews: review body
if (context.payload.review) {
text = context.payload.review.body || '';
}
break;

default:
// Default: empty text
text = '';
break;
}

// display in logs
console.log(`text: ${text}`);

// Set the text as output
core.setOutput('text', text);
130 changes: 130 additions & 0 deletions .github/actions/reaction/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
name: "Add/Remove reaction on triggering item"
description: "Adds or removes a reaction on the issue/PR/comment that triggered the workflow"
inputs:
github-token:
description: "Token with issues/pull-requests write (GITHUB_TOKEN is fine)"
required: true
mode:
description: "'add' or 'remove'"
required: true
reaction:
description: "One of +1, -1, laugh, confused, heart, hooray, rocket, eyes"
required: false
default: "eyes"
reaction-id:
description: "Optional reaction id to remove (if known)"
required: false
outputs:
reaction-id:
description: "ID of the reaction that was added (for later removal)"
runs:
using: "composite"
steps:
- name: Compute reactions API endpoint for the triggering payload
id: ctx
shell: bash
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_EVENT_PATH: ${{ github.event_path }}
GITHUB_REPOSITORY: ${{ github.repository }}
run: |
set -euo pipefail
owner="${GITHUB_REPOSITORY%%/*}"
repo="${GITHUB_REPOSITORY##*/}"
ev="$GITHUB_EVENT_PATH"

case "$GITHUB_EVENT_NAME" in
issues)
number=$(jq -r '.issue.number' "$ev")
endpoint="/repos/$owner/$repo/issues/$number/reactions"
;;
issue_comment)
cid=$(jq -r '.comment.id' "$ev")
endpoint="/repos/$owner/$repo/issues/comments/$cid/reactions"
;;
pull_request|pull_request_target)
number=$(jq -r '.pull_request.number' "$ev")
# PRs are "issues" for the reactions endpoint
endpoint="/repos/$owner/$repo/issues/$number/reactions"
;;
pull_request_review_comment)
cid=$(jq -r '.comment.id' "$ev")
endpoint="/repos/$owner/$repo/pulls/comments/$cid/reactions"
;;
*)
echo "Unsupported event: $GITHUB_EVENT_NAME" >&2
exit 1
;;
esac

echo "endpoint=$endpoint" >> "$GITHUB_OUTPUT"

- name: Add reaction
if: ${{ inputs.mode == 'add' }}
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
ENDPOINT: ${{ steps.ctx.outputs.endpoint }}
REACTION: ${{ inputs.reaction }}
run: |
set -euo pipefail
# Create (or fetch existing) reaction
# The API returns the reaction object (201 on create, 200 if it already existed)
resp=$(gh api \
-H "Accept: application/vnd.github+json" \
-X POST "$ENDPOINT" \
-f content="$REACTION" \
|| true)

# If a concurrent create happened, fall back to listing to find our reaction
if [ -z "${resp:-}" ] || [ "$resp" = "null" ]; then
resp=$(gh api -H "Accept: application/vnd.github+json" "$ENDPOINT")
rid=$(echo "$resp" | jq -r --arg r "$REACTION" \
'.[] | select(.content==$r and .user.login=="github-actions[bot]") | .id' | head -n1)
else
rid=$(echo "$resp" | jq -r '.id')
if [ "$rid" = "null" ] || [ -z "$rid" ]; then
# fallback to list, just in case
list=$(gh api -H "Accept: application/vnd.github+json" "$ENDPOINT")
rid=$(echo "$list" | jq -r --arg r "$REACTION" \
'.[] | select(.content==$r and .user.login=="github-actions[bot]") | .id' | head -n1)
fi
fi

if [ -z "${rid:-}" ]; then
echo "Warning: could not determine reaction id; cleanup will list/filter." >&2
fi

echo "reaction-id=${rid:-}" >> "$GITHUB_OUTPUT"

- name: Remove reaction
if: ${{ inputs.mode == 'remove' }}
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
ENDPOINT: ${{ steps.ctx.outputs.endpoint }}
REACTION: ${{ inputs.reaction }}
REACTION_ID_IN: ${{ inputs.reaction-id }}
run: |
set -euo pipefail

delete_by_id () {
local rid="$1"
if [ -n "$rid" ] && [ "$rid" != "null" ]; then
gh api -H "Accept: application/vnd.github+json" -X DELETE "/reactions/$rid" || true
fi
}

if [ -n "$REACTION_ID_IN" ]; then
# Fast path: we were given the id from the add step
delete_by_id "$REACTION_ID_IN"
exit 0
fi

# Fallback: list reactions on the same subject, and delete the bot's matching reaction(s)
list=$(gh api -H "Accept: application/vnd.github+json" "$ENDPOINT" || echo "[]")
echo "$list" | jq -r --arg r "$REACTION" '
.[] | select(.content==$r and .user.login=="github-actions[bot]") | .id
' | while read -r rid; do
delete_by_id "$rid"
done
Loading