forked from Rockachopa/Timmy-time-dashboard
[loop-cycle-31] fix: create missing kimi-loop.sh script (#1415)
fix: create missing kimi-loop.sh script with efficient Gitea filtering (#1415)
This commit is contained in:
74
scripts/kimi-loop.sh
Executable file
74
scripts/kimi-loop.sh
Executable file
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
# kimi-loop.sh — Efficient Gitea issue polling for Kimi agent
|
||||
#
|
||||
# Fetches only Kimi-assigned issues using proper query parameters,
|
||||
# avoiding the need to pull all unassigned tickets and filter in Python.
|
||||
#
|
||||
# Usage:
|
||||
# ./scripts/kimi-loop.sh
|
||||
#
|
||||
# Exit codes:
|
||||
# 0 — Found work for Kimi
|
||||
# 1 — No work available
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Configuration
|
||||
GITEA_API="${TIMMY_GITEA_API:-${GITEA_API:-http://143.198.27.163:3000/api/v1}}"
|
||||
REPO_SLUG="${REPO_SLUG:-rockachopa/Timmy-time-dashboard}"
|
||||
TOKEN_FILE="${HOME}/.hermes/gitea_token"
|
||||
WORKTREE_DIR="${HOME}/worktrees"
|
||||
|
||||
# Ensure token exists
|
||||
if [[ ! -f "$TOKEN_FILE" ]]; then
|
||||
echo "ERROR: Gitea token not found at $TOKEN_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TOKEN=$(cat "$TOKEN_FILE")
|
||||
|
||||
# Function to make authenticated Gitea API calls
|
||||
gitea_api() {
|
||||
local endpoint="$1"
|
||||
local method="${2:-GET}"
|
||||
|
||||
curl -s -X "$method" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
"$GITEA_API/repos/$REPO_SLUG/$endpoint"
|
||||
}
|
||||
|
||||
# Efficiently fetch only Kimi-assigned issues (fixes the filter bug)
|
||||
# Uses assignee parameter to filter server-side instead of pulling all issues
|
||||
get_kimi_issues() {
|
||||
gitea_api "issues?state=open&assignee=kimi&sort=created&order=asc&limit=10"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
echo "🤖 Kimi loop: Checking for assigned work..."
|
||||
|
||||
# Fetch Kimi's issues efficiently (server-side filtering)
|
||||
issues=$(get_kimi_issues)
|
||||
|
||||
# Count issues using jq
|
||||
count=$(echo "$issues" | jq '. | length')
|
||||
|
||||
if [[ "$count" -eq 0 ]]; then
|
||||
echo "📭 No issues assigned to Kimi. Idle."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📝 Found $count issue(s) assigned to Kimi:"
|
||||
echo "$issues" | jq -r '.[] | " #\(.number): \(.title)"'
|
||||
|
||||
# TODO: Process each issue (create worktree, run task, create PR)
|
||||
# For now, just report availability
|
||||
echo "✅ Kimi has work available."
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Handle script being sourced vs executed
|
||||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||||
main "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user