Initial mVP setup with Gitea Action workflow
- README with usage instructions - Gitea Action to handle issues via SSH to VPS - Supports skill hints in issue body (skill: role-pa, etc) - Labels: urgent, research, writing, code, waiting
This commit is contained in:
74
.gitea/workflows/handle-issue.yaml
Normal file
74
.gitea/workflows/handle-issue.yaml
Normal file
@@ -0,0 +1,74 @@
|
||||
name: Handle Issue with mAi
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [opened, labeled]
|
||||
|
||||
jobs:
|
||||
handle-issue:
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
github.event.action == 'opened' ||
|
||||
(github.event.action == 'labeled' && github.event.label.name == 'urgent')
|
||||
|
||||
steps:
|
||||
- name: Process issue with mAi
|
||||
uses: appleboy/ssh-action@v1.0.3
|
||||
with:
|
||||
host: ${{ secrets.VPS_HOST }}
|
||||
username: ${{ secrets.VPS_USER }}
|
||||
key: ${{ secrets.VPS_SSH_KEY }}
|
||||
port: ${{ secrets.VPS_PORT }}
|
||||
script: |
|
||||
# Source environment
|
||||
source ~/.config/mai/gitea.env
|
||||
export PATH="$HOME/.nix-profile/bin:$HOME/.local/bin:$PATH"
|
||||
|
||||
# Issue details
|
||||
REPO="${{ github.repository }}"
|
||||
ISSUE_NUMBER="${{ github.event.issue.number }}"
|
||||
ISSUE_TITLE="${{ github.event.issue.title }}"
|
||||
|
||||
# Comment that we're starting
|
||||
curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"body":"🤖 mAi is on it..."}' \
|
||||
"$GITEA_URL/api/v1/repos/$REPO/issues/$ISSUE_NUMBER/comments"
|
||||
|
||||
# Add in-progress label
|
||||
curl -s -X POST -H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"labels":["in-progress"]}' \
|
||||
"$GITEA_URL/api/v1/repos/$REPO/issues/$ISSUE_NUMBER/labels" || true
|
||||
|
||||
# Get full issue body
|
||||
ISSUE_BODY=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_URL/api/v1/repos/$REPO/issues/$ISSUE_NUMBER" | jq -r '.body // ""')
|
||||
|
||||
# Extract skill hint if present
|
||||
SKILL=$(echo "$ISSUE_BODY" | grep -oP 'skill:\s*\K\S+' | head -1)
|
||||
SKILL_PROMPT=""
|
||||
if [ -n "$SKILL" ]; then
|
||||
SKILL_PROMPT="Use the /$SKILL skill. "
|
||||
fi
|
||||
|
||||
# Run Claude
|
||||
cd ~/dev
|
||||
claude -p "${SKILL_PROMPT}You are mAi, a personal AI assistant.
|
||||
|
||||
Work on this task: $REPO#$ISSUE_NUMBER
|
||||
Title: $ISSUE_TITLE
|
||||
|
||||
$ISSUE_BODY
|
||||
|
||||
Complete the task and post your results as a comment on the issue.
|
||||
Use the Gitea API: POST $GITEA_URL/api/v1/repos/$REPO/issues/$ISSUE_NUMBER/comments
|
||||
with body: {\"body\": \"your response here\"}
|
||||
|
||||
When done, remove the in-progress label and add 'done' label." \
|
||||
--dangerously-skip-permissions \
|
||||
2>&1 | tee -a ~/dev/mAI/worker/action.log
|
||||
|
||||
# Fallback: remove in-progress if still there
|
||||
curl -s -X DELETE -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$GITEA_URL/api/v1/repos/$REPO/issues/$ISSUE_NUMBER/labels/in-progress" || true
|
||||
51
README.md
51
README.md
@@ -1,3 +1,50 @@
|
||||
# mVP
|
||||
# mVP - m Vice President
|
||||
|
||||
m Vice President - Personal AI Assistant
|
||||
Your personal AI assistant. Create issues, mAi handles them.
|
||||
|
||||
## How It Works
|
||||
|
||||
1. **Create an issue** describing what you need
|
||||
2. **mAi picks it up** (via webhook or scheduled run)
|
||||
3. **Work gets done** - research, writing, code, whatever
|
||||
4. **Results posted** as comments or linked PRs
|
||||
|
||||
## Issue Format
|
||||
|
||||
Just describe what you need. Optionally add labels or skill hints:
|
||||
|
||||
```markdown
|
||||
Title: Research best practices for X
|
||||
|
||||
skill: role-researcher
|
||||
|
||||
Find and summarize the top 3 approaches to X...
|
||||
```
|
||||
|
||||
## Skills
|
||||
|
||||
Specify in issue body with `skill: <name>` or use labels:
|
||||
|
||||
| Skill | Use For |
|
||||
|-------|---------|
|
||||
| `role-pa` | Emails, scheduling, organization |
|
||||
| `role-researcher` | Deep research and analysis |
|
||||
| `role-coder` | Code and technical tasks |
|
||||
| `web` | Web research and fetching |
|
||||
| `analyze` | Data analysis |
|
||||
|
||||
## Labels
|
||||
|
||||
- `urgent` - Process first
|
||||
- `research` - Research task
|
||||
- `writing` - Writing/drafting
|
||||
- `code` - Programming
|
||||
- `waiting` - Skip for now (needs input)
|
||||
|
||||
## Examples
|
||||
|
||||
**Research:** "Compare cloud providers for small startup"
|
||||
|
||||
**Writing:** "Draft weekly update email for project X"
|
||||
|
||||
**Code:** "Create Python script to parse sales.csv"
|
||||
|
||||
Reference in New Issue
Block a user