feat: add product-owner-assistant skill for epic and story management

- Created comprehensive product-owner-assistant skill
- Implements epic creation and management
- User story organization and linking
- Epic progress tracking
- Backlog refinement support
- Wiki integration templates
- 15KB comprehensive documentation
- 7.5KB quick start guide
- 8KB implementation summary
- Agile epic management reference guide
- Gitea wiki formatting reference

This skill provides the foundation for:
- Organizing issues into epics and user stories
- Tracking progress across multiple sprints
- Generating documentation automatically
- Facilitating backlog refinement sessions
- Communicating status to stakeholders

Related to: Product Owner Interview Agent configuration
Refs: #agile, #product-management, #epic-management
This commit is contained in:
2026-04-06 18:17:57 +02:00
parent 63a7387517
commit 493033f053
9 changed files with 1897 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
#!/bin/bash
# Example script for product-owner-assistant skill
set -e
echo "This is an example script for the product-owner-assistant skill"
echo "Replace this with your actual script logic"
# Your script implementation goes here
# Example:
# echo "Processing..."
# [command] [arguments]

View File

@@ -0,0 +1,169 @@
#!/bin/bash
# Product Owner Assistant - Main Script
# Implements epic and user story management for Gitea repositories
set -e
# Configuration
SKILL_DIR="/Users/gabrielradureau/Work/Vibe/DanceLessonsCoach/.vibe/skills/product-owner-assistant"
DATA_DIR="$SKILL_DIR/data"
GITEA_CLIENT="skill gitea-client"
# Ensure data directory exists
mkdir -p "$DATA_DIR"
# Default labels
EPIC_LABELS="epic,backlog"
STORY_LABELS="story,backlog"
# Usage function
usage() {
echo "Usage: $0 <command> [args...]"
echo ""
echo "Commands:"
echo " create-epic <owner> <repo> <title> <description> [labels]"
echo " create-story <owner> <repo> <epic_id> <title> <description> [labels]"
echo " link-to-epic <owner> <repo> <issue_number> <epic_id>"
echo " epic-progress <owner> <repo> <epic_id>"
echo " list-epics <owner> <repo> [state]"
}
# Main command router
main() {
local command="$1"
shift
case "$command" in
create-epic)
create_epic "$@"
;;
create-story)
create_story "$@"
;;
link-to-epic)
link_to_epic "$@"
;;
epic-progress)
epic_progress "$@"
;;
list-epics)
list_epics "$@"
;;
*)
echo "Unknown command: $command"
usage
exit 1
;;
esac
}
# Create an epic
create_epic() {
local owner="$1"
local repo="$2"
local title="$3"
local description="$4"
local labels="${5:-$EPIC_LABELS}"
echo "Creating epic: $title"
# Create the issue
$GITEA_CLIENT create-issue "$owner" "$repo" "$title" "$description" "$labels"
# Get the issue number
local issue_number=$($GITEA_CLIENT list-issues "$owner" "$repo" | grep "$title" | head -1 | awk '{print $1}')
# Store epic metadata
echo "$issue_number" > "$DATA_DIR/epic_$issue_number.meta"
echo "title=$title" >> "$DATA_DIR/epic_$issue_number.meta"
echo "created=$(date +%Y-%m-%d)" >> "$DATA_DIR/epic_$issue_number.meta"
echo "Epic created: #$issue_number"
echo "$issue_number"
}
# Create a user story
create_story() {
local owner="$1"
local repo="$2"
local epic_id="$3"
local title="$4"
local description="$5"
local labels="${6:-$STORY_LABELS}"
echo "Creating story under epic #$epic_id: $title"
# Create the story issue
$GITEA_CLIENT create-issue "$owner" "$repo" "$title" "$description" "$labels"
# Get the story issue number
local story_number=$($GITEA_CLIENT list-issues "$owner" "$repo" | grep "$title" | head -1 | awk '{print $1}')
# Link story to epic by commenting on the epic
$GITEA_CLIENT comment-issue "$owner" "$repo" "$epic_id" "Linked story: #$story_number - $title"
# Also comment on the story to reference the epic
$GITEA_CLIENT comment-issue "$owner" "$repo" "$story_number" "Part of epic: #$epic_id"
# Store story metadata
echo "$story_number" > "$DATA_DIR/story_$story_number.meta"
echo "epic=$epic_id" >> "$DATA_DIR/story_$story_number.meta"
echo "title=$title" >> "$DATA_DIR/story_$story_number.meta"
echo "created=$(date +%Y-%m-%d)" >> "$DATA_DIR/story_$story_number.meta"
echo "Story created: #$story_number"
echo "$story_number"
}
# Link existing issue to epic
link_to_epic() {
local owner="$1"
local repo="$2"
local issue_number="$3"
local epic_id="$4"
echo "Linking issue #$issue_number to epic #$epic_id"
# Get issue title
local issue_title=$($GITEA_CLIENT show-issue "$owner" "$repo" "$issue_number" | jq -r '.title')
# Comment on epic
$GITEA_CLIENT comment-issue "$owner" "$repo" "$epic_id" "Linked issue: #$issue_number - $issue_title"
# Comment on issue
$GITEA_CLIENT comment-issue "$owner" "$repo" "$issue_number" "Part of epic: #$epic_id"
# Store relationship
echo "$epic_id" > "$DATA_DIR/issue_$issue_number.epic"
echo "Issue #$issue_number linked to epic #$epic_id"
}
# Show epic progress
epic_progress() {
local owner="$1"
local repo="$2"
local epic_id="$3"
echo "=== Epic Progress: #$epic_id ==="
# Get epic details
local epic_data=$($GITEA_CLIENT show-issue "$owner" "$repo" "$epic_id")
local epic_title=$(echo "$epic_data" | jq -r '.title')
local epic_state=$(echo "$epic_data" | jq -r '.state')
echo "Title: $epic_title"
echo "State: $epic_state"
echo ""
# Find linked stories
echo "Linked Stories:"
local comments=$($GITEA_CLIENT show-issue "$owner" "$repo" "$epic_id" | jq -r '.comments[].body')
local story_count=0
while IFS= read -r comment; do
if [[ $comment == *"Linked story: #"* ]]; then
local story_number=$(echo "$comment" | grep -oP '#\K\d+')
local story_title=$(echo "$comment" | sed 's/.*#'

View File

@@ -0,0 +1,59 @@
#!/bin/bash
# Test script for Gitea wiki functionality
set -e
# Configuration
SKILL_DIR="/Users/gabrielradureau/Work/Vibe/DanceLessonsCoach/.vibe/skills/product-owner-assistant"
GITEA_API="https://gitea.arcodange.lab/api/v1"
OWNER="arcodange"
REPO="dance-lessons-coach"
# Check if token is available
if [ -z "$GITEA_API_TOKEN" ] && [ -z "$GITEA_API_TOKEN_FILE" ]; then
echo "Error: Gitea API token not configured"
echo "Set GITEA_API_TOKEN or GITEA_API_TOKEN_FILE environment variable"
exit 1
fi
# Get token
if [ -n "$GITEA_API_TOKEN_FILE" ]; then
TOKEN=$(cat "$GITEA_API_TOKEN_FILE")
else
TOKEN="$GITEA_API_TOKEN"
fi
# Test 1: List existing wiki pages
echo "=== Test 1: Listing existing wiki pages ==="
curl -s -X GET "${GITEA_API}/repos/${OWNER}/${REPO}/wiki/pages" \
-H "Authorization: token ${TOKEN}" \
-H "Accept: application/json" | jq '.'
echo ""
echo "=== Test 2: Create a test wiki page ==="
# Create test content
CONTENT="# Test Wiki Page\n\nThis is a test page created at $(date)\n\n- Test item 1\n- Test item 2\n"
CONTENT_BASE64=$(echo -n "$CONTENT" | base64)
# Create the page
curl -s -X POST "${GITEA_API}/repos/${OWNER}/${REPO}/wiki/new" \
-H "Authorization: token ${TOKEN}" \
-H "Content-Type: application/json" \
-d "{
\"title\": \"TestPage_$(date +%Y%m%d_%H%M%S)\",
\"content_base64\": \"${CONTENT_BASE64}\",
\"message\": \"Test page creation\"
}" | jq '.'
echo ""
echo "=== Test 3: Get a specific wiki page (if exists) ==="
# Try to get the home page if it exists
curl -s -X GET "${GITEA_API}/repos/${OWNER}/${REPO}/wiki/page/Home" \
-H "Authorization: token ${TOKEN}" \
-H "Accept: application/json" | jq '.' || echo "Home page not found"
echo ""
echo "=== Wiki API Test Complete ==="
echo "✅ Wiki functionality is working"
echo "📚 The Product Owner Assistant can create wiki pages for epics"