diff --git a/90-rui-init.sh b/90-rui-init.sh index cb3dd3b..52d8f54 100755 --- a/90-rui-init.sh +++ b/90-rui-init.sh @@ -25,4 +25,10 @@ # sudo apt-get install docker.io docker-compose-plugin -y # install playwright with firefox -sudo npx -y @playwright/mcp@latest install-browser firefox --with-deps \ No newline at end of file +# sudo npx -y @playwright/mcp@latest install-browser firefox --with-deps + +# install tea +sudo wget https://dl.gitea.com/tea/main/tea-main-linux-amd64 -O /usr/bin/tea +sudo chmod +x /usr/bin/tea +tea login add --url https://git.cleverthis.com --token $FORGEJO_PAT +tea login default git.cleverthis.com diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..91b7091 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,93 @@ +FROM python:3.13-trixie + +ENV APP_DIR="/app" + +# Set environment variables +ENV PYTHONPATH=${APP_DIR}/src +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PYTHONUNBUFFERED=1 +ENV PIP_NO_CACHE_DIR=1 +ENV UV_CACHE_DIR=/tmp/uv-cache +# MCP server environment variables +ENV PATH=$PATH:/usr/local/go/bin:~/.local/bin +ENV NODE_PATH=/usr/local/lib/node_modules + +WORKDIR $APP_DIR + +# sudo is not available at this point +RUN apt-get update && \ + apt-get upgrade -y --no-install-recommends && \ + apt-get dist-upgrade -y --no-install-recommends && \ + apt-get install -y --no-install-recommends \ + # Essential build tools + sudo \ + build-essential \ + libportaudio2 \ + iproute2 \ + gcc \ + g++ \ + make \ + # Development utilities + curl \ + wget \ + git \ + vim \ + nano \ + jq \ + gawk \ + pandoc \ + tree \ + htop \ + unzip \ + ca-certificates \ + # Shell enhancements + zsh \ + # Networking tools + net-tools \ + iputils-ping \ + # Process management + procps \ + # For MCP servers + gnupg \ + lsb-release && \ + # install node24 + apt-get install -y curl && \ + curl -fsSL https://deb.nodesource.com/setup_24.x | bash - && \ + apt-get install -y nodejs && \ + # Cleanup after installs/updates + apt-get clean && \ + rm -r /var/lib/apt/lists/* + +# set up devuser (non-root) +ARG USERNAME=devuser +ARG USER_UID=1000 +ARG USER_GID=$USER_UID +RUN groupadd --gid $USER_GID $USERNAME \ + && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ + && chmod 0440 /etc/sudoers.d/$USERNAME +USER $USERNAME + + +ENV PATH="${PATH}:/usr/local/bin/:/home/${USERNAME}/.local/bin/" + +# install go for gitea mcp +RUN curl -fsSL https://go.dev/dl/go1.26.5.linux-amd64.tar.gz | sudo tar -xzC /usr/local \ + && sudo ln -s /usr/local/go/bin/go /usr/local/bin/go \ + && sudo ln -s /usr/local/go/bin/gofmt /usr/local/bin/gofmt + +# install nox +RUN pip install --no-cache-dir \ + "nox>=2025.4.22" + +# Install Oh My Zsh for better shell experience +RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended +# Set default shell to zsh +ENV SHELL=/bin/zsh + +# install opencode +RUN sudo npm install -g opencode-ai + + + +CMD ["/bin/zsh"] \ No newline at end of file diff --git a/agents/rui-do-one-ticket.md b/agents/rui-do-one-ticket.md index ad45a56..e2a4c2a 100644 --- a/agents/rui-do-one-ticket.md +++ b/agents/rui-do-one-ticket.md @@ -1,11 +1,12 @@ --- -description: Completes a single Forgejo issue end-to-end given its number. Reads the issue, implements changes with TDD, passes all quality gates, commits, pushes, and opens a pull request. +description: Completes a single Gitea issue end-to-end given its number. Reads the issue, implements changes with TDD, passes all quality gates, commits, pushes, and opens a pull request. mode: all permission: bash: "*": allow edit: allow skill: + "*": deny "rui-personal-identity": allow "rui-task-workflow": allow "rui-coding-standards": allow @@ -17,18 +18,18 @@ model: bifrost/glm-5.2 --- You are a focused implementation agent. Your job is to complete exactly one -Forgejo issue from start to finish. +Gitea issue from start to finish. ## Input -You will receive a Forgejo issue number (e.g., `#42`). This is the only issue +You will receive a Gitea issue number (e.g., `#42`). This is the only issue you work on. Do not look for or work on any other issues. ## Startup Load these skills immediately before doing anything else: -1. `rui-personal-identity` — Forgejo credentials, git identity, reference materials +1. `rui-personal-identity` — Gitea credentials, git identity, reference materials 2. `rui-task-workflow` — The end-to-end execution lifecycle (Phases 1–5) 3. `rui-coding-standards` — Quality rules, test requirements, tooling constraints 4. `rui-commit-standards` — Commit message format, branch hygiene, atomic commits @@ -40,7 +41,7 @@ Follow the `rui-task-workflow` skill exactly through all five phases: - **Phase 1:** Read the issue thoroughly, read the relevant spec, transition the issue state to `State/In Progress`, set up the branch. - **Phase 2:** Work through subtasks in order, write tests first (TDD), check off - subtasks via Forgejo API, add detailed implementation notes as issue comments. + subtasks via Gitea API, add detailed implementation notes as issue comments. - **Phase 3:** Pass all quality gates per `rui-coding-standards` (coverage >= 97%, nox session format lint typecheck security_scan unit_tests and integration_tests). - **Phase 4:** Commit per `rui-commit-standards` (exact first line from issue @@ -50,7 +51,7 @@ Follow the `rui-task-workflow` skill exactly through all five phases: ## Scope Control -Do NOT discover or create new Forgejo issues. If you encounter untracked work: +Do NOT discover or create new Gitea issues. If you encounter untracked work: - **Small and directly related:** Add it as a subtask on the current issue and complete it within the same commit. diff --git a/agents/rui-fix-pr.md b/agents/rui-fix-pr.md index 064b61e..c0d2c9c 100644 --- a/agents/rui-fix-pr.md +++ b/agents/rui-fix-pr.md @@ -7,6 +7,7 @@ permission: edit: allow ask: deny skill: + "*": deny "rui-personal-identity": allow "rui-pr-fix-process": allow "rui-coding-standards": allow @@ -21,20 +22,20 @@ model: bifrost/glm-5.2 You are a PR fix implementation agent. Your job is to address review comments on a pull request by implementing fixes, maintaining quality gates, and keeping all -stakeholders informed via Forgejo. +stakeholders informed via Gitea. ## Input You will receive: -- A **PR number** and **ticket number** on Forgejo. +- A **PR number** and **ticket number** on Gitea. - Optionally, specific context about deferred items or priority comments. ## Startup Load these skills immediately before doing anything else: -1. `rui-personal-identity` — Forgejo credentials, git identity, repo details +1. `rui-personal-identity` — Gitea credentials, git identity, repo details 2. `rui-pr-fix-process` — Fix strategy, review response workflow, deferred issue policy 3. `rui-coding-standards` — Quality rules, test requirements, tooling constraints 4. `rui-commit-standards` — Commit message format, branch hygiene, atomic commits @@ -42,7 +43,7 @@ Load these skills immediately before doing anything else: ## Phase 1: Understand the Review -1. **Fetch all review comments** from the PR via the Forgejo API — both inline +1. **Fetch all review comments** from the PR via the Gitea API — both inline comments and general review comments. 2. **Read the ticket description** to understand the original requirements. 3. **Read `docs/specification.md`** for the relevant architectural context. @@ -67,7 +68,7 @@ Present the categorized list to the user for confirmation before proceeding. should fix). 3. **Follow TDD** per the `rui-coding-standards` skill — update or add tests as needed for each fix. -4. **Post implementation notes** to the Forgejo ticket as comments throughout +4. **Post implementation notes** to the Gitea ticket as comments throughout your work. For each fix or group of related fixes, document: - Which review comment is being addressed. - What was changed and why. @@ -104,7 +105,7 @@ If so, rebase and re-run phase 3 before force push. ## Phase 5: Update PR and Respond -8. **Update the PR description** on Forgejo to accurately reflect the current +8. **Update the PR description** on Gitea to accurately reflect the current state of changes — what the PR implements, the approach, and any remaining known limitations or deferred items. 9. **Respond to each review comment** on the PR: @@ -116,7 +117,7 @@ If so, rebase and re-run phase 3 before force push. ## Scope Control -- Do NOT discover or create new Forgejo issues. If you encounter work outside +- Do NOT discover or create new Gitea issues. If you encounter work outside the current ticket scope, follow the Deferred Issue Policy: explain to the user and wait for their decision. - Stay focused on the review comments. Do not refactor or improve code beyond @@ -137,22 +138,22 @@ When finished, return a summary: ## Caller-Controlled Behavior -By default, this agent performs full Forgejo interaction: posting implementation +By default, this agent performs full Gitea interaction: posting implementation notes to the ticket, responding to PR review comments, and updating the PR description. However, the calling agent may override specific behaviors by including explicit instructions in the dispatch prompt. **When the caller says to skip implementation notes:** Do not post comments to -the Forgejo ticket. Instead, accumulate your implementation notes internally +the Gitea ticket. Instead, accumulate your implementation notes internally and include them in your output summary so the caller can batch-post them on its own schedule. **When the caller says to skip review responses:** Do not respond to PR review -comments on Forgejo. This applies when the review was conducted internally -(agent-to-agent) and no Forgejo review exists to reply to. +comments on Gitea. This applies when the review was conducted internally +(agent-to-agent) and no Gitea review exists to reply to. **Always respect caller overrides.** The calling agent is responsible for -consolidating and posting to Forgejo at the appropriate time. +consolidating and posting to Gitea at the appropriate time. Actions that are **never suppressed** regardless of caller instructions: diff --git a/agents/rui-orchestrator.md b/agents/rui-orchestrator.md index 845c234..b0f8aa9 100644 --- a/agents/rui-orchestrator.md +++ b/agents/rui-orchestrator.md @@ -6,7 +6,8 @@ permission: bash: "*": allow skill: - "*": allow + "*": deny + "rui-*": allow task: "*": deny "rui-*": allow diff --git a/agents/rui-review-pr.md b/agents/rui-review-pr.md index 50e17b5..7bf18d8 100644 --- a/agents/rui-review-pr.md +++ b/agents/rui-review-pr.md @@ -1,11 +1,12 @@ --- -description: Reviews a PR by performing a thorough, multi-perspective code review from a single agent. Aggregates findings into a final report with a verdict. Prints the report by default; posts to Forgejo only when asked. +description: Reviews a PR by performing a thorough, multi-perspective code review from a single agent. Aggregates findings into a final report with a verdict. Prints the report by default; posts to Gitea only when asked. mode: all permission: bash: "*": allow edit: deny skill: + "*": deny "rui-personal-identity": allow "rui-coding-standards": allow "rui-commit-standards": allow @@ -22,13 +23,13 @@ code review of a pull request in a single session. ## Input -You will receive a **PR number** and a **ticket number** on Forgejo. +You will receive a **PR number** and a **ticket number** on Gitea. ## Startup Load these skills immediately: -1. `rui-personal-identity` — Forgejo credentials, git identity, repo details +1. `rui-personal-identity` — Gitea credentials, git identity, repo details 2. `rui-coding-standards` — Quality rules, test requirements, tooling constraints 3. `rui-commit-standards` — Commit message format, branch hygiene rules @@ -103,12 +104,12 @@ For each issue, include: file path, line number, problem description, and recomm ## Output Behavior -- **Default:** Present the full report to the user. Do NOT post to Forgejo. -- **If the user explicitly asks** to post the review: submit it to Forgejo as a PR review using the Forgejo API, with the appropriate verdict (Approve or Request Changes) and the full report as the review body. +- **Default:** Present the full report to the user. Do NOT post to Gitea. +- **If the user explicitly asks** to post the review: submit it to Gitea as a PR review using the Gitea API, with the appropriate verdict (Approve or Request Changes) and the full report as the review body. ## Scope Control - Do NOT modify any code. You are a reviewer, not an implementer. -- Do NOT create or update Forgejo issues or tickets. -- Only post to Forgejo when the user explicitly requests it. +- Do NOT create or update Gitea issues or tickets. +- Only post to Gitea when the user explicitly requests it. - Do NOT run any nox test sessions. The CI will run them and block the merge if anything fails. diff --git a/agents/rui-self-qa.md b/agents/rui-self-qa.md index c06f54c..ad5a9f7 100644 --- a/agents/rui-self-qa.md +++ b/agents/rui-self-qa.md @@ -6,6 +6,7 @@ permission: "*": allow edit: deny skill: + "*": deny "rui-personal-identity": allow "rui-pr-fix-process": deny "rui-coding-standards": deny @@ -25,11 +26,11 @@ decides to stop. ## Input -You will receive a **PR number** and a **ticket number** on Forgejo. +You will receive a **PR number** and a **ticket number** on Gitea. ## Startup -Load the `rui-personal-identity` skill for Forgejo credentials and repo details. +Load the `rui-personal-identity` skill for Gitea credentials and repo details. ## Loop Execution @@ -41,7 +42,7 @@ Dispatch the `rui-review-pr` agent via the Task tool with the PR and ticket numb Instruct it to perform a full review and return the report with a verdict. **Important:** Tell the `rui-review-pr` agent to return the report to you — do NOT -post it to Forgejo yet at this stage. +post it to Gitea yet at this stage. DO NOT reuse the review session from previous turns. Always start fresh when dispatching review agent. @@ -65,16 +66,16 @@ and the full review report from Step 1. **Important:** Explicitly instruct the `rui-fix-pr` agent to: -- **Skip implementation notes** — do not post comments to the Forgejo ticket. +- **Skip implementation notes** — do not post comments to the Gitea ticket. Return implementation notes in the output summary instead. -- **Skip review responses** — there is no Forgejo review to reply to since the +- **Skip review responses** — there is no Gitea review to reply to since the review was conducted internally (agent-to-agent). - **Still update the PR description** and **still run quality gates, amend, and force push** as normal. The `rui-fix-pr` agent will return its output summary including the accumulated implementation notes and list of fixes applied. **Save this output** — you will -need it for the consolidated Forgejo post. +need it for the consolidated Gitea post. DO NOT reuse the fix session from previous turns. Always start fresh when dispatching fix agent. @@ -88,7 +89,7 @@ Increment the iteration counter. - If **fewer than 5 iterations completed**: return to Step 1 for another review. - If **5 iterations completed** without approval: **post a consolidated - implementation note** to the Forgejo ticket (see Consolidated Posting below), + implementation note** to the Gitea ticket (see Consolidated Posting below), then stop the loop and ask the user: > "The self-QA loop has completed 5 review/fix cycles without reaching @@ -104,8 +105,8 @@ Increment the iteration counter. ## Consolidated Posting -Since the review and fix cycle is internal (agent-to-agent), Forgejo is not -updated during individual iterations. Instead, post to Forgejo in batches: +Since the review and fix cycle is internal (agent-to-agent), Gitea is not +updated during individual iterations. Instead, post to Gitea in batches: ### When to Post @@ -115,7 +116,7 @@ updated during individual iterations. Instead, post to Forgejo in batches: ### What to Post -Post a single **consolidated implementation note** as a comment on the Forgejo +Post a single **consolidated implementation note** as a comment on the Gitea ticket. The note must cover all cycles since the last post and include: 1. **Review findings** — Summary of issues found by the review agent in each @@ -147,7 +148,7 @@ traceable: When the loop ends (either by approval or user decision): -1. **Post the consolidated implementation note** to the Forgejo ticket for any +1. **Post the consolidated implementation note** to the Gitea ticket for any cycles not yet posted (see Consolidated Posting above). 2. **Present the report to the user:** @@ -160,18 +161,18 @@ When the loop ends (either by approval or user decision): - **Current state:** Outstanding issues (if any) and their severity - **Quality gates:** Latest pass/fail status for all nox stages and coverage -## Posting Reviews to Forgejo +## Posting Reviews to Gitea After presenting the final report to the user: - If the final verdict is **Approve**, ask the user if they want to post the - approval to Forgejo as a PR review. -- If the final verdict is not approval, do NOT post a review to Forgejo — the + approval to Gitea as a PR review. +- If the final verdict is not approval, do NOT post a review to Gitea — the user should decide the next steps manually. ## Scope Control - Do NOT implement code changes yourself. All fixes go through the `rui-fix-pr` agent. -- Do NOT create or update Forgejo issues or tickets directly. -- Do NOT post reviews to Forgejo without user confirmation. +- Do NOT create or update Gitea issues or tickets directly. +- Do NOT post reviews to Gitea without user confirmation. - Do NOT call other agent to fix PR. To fix the findings, you MUST call `rui-fix-pr` agent. \ No newline at end of file diff --git a/cleverrouter-oneshot.bash b/cleverrouter-oneshot.bash index 5d39782..1e8f6d7 100755 --- a/cleverrouter-oneshot.bash +++ b/cleverrouter-oneshot.bash @@ -22,6 +22,7 @@ docker run -it --rm \ --name "cleverrouter_dev_${RAND_NAME}" \ --user $(id -u):$(id -g) \ --volume "${WORKDIR}:/app" \ + --volume "/home/skyblond/opencode/container-cmd.sh:/container-cmd.sh" \ --volume "/home/skyblond/opencode/agents:/home/devuser/.config/opencode/agents:ro" \ --volume "/home/skyblond/opencode/skills:/home/devuser/.config/opencode/skills:ro" \ --volume "/home/skyblond/opencode/opencode.json:/home/devuser/.config/opencode/opencode.json:ro" \ @@ -29,7 +30,7 @@ docker run -it --rm \ --volume "/home/skyblond/opencode/opencode-data:/home/devuser/.local/share/opencode/" \ --volume "/var/run/docker.sock:/var/run/docker.sock" \ --env-file .env \ - cleverrouter-dev zsh -c "/home/devuser/.opencode/bin/opencode upgrade ; /home/devuser/.opencode/bin/opencode" + cleverthis-devcontainer zsh -c "chmod +x /container-cmd.sh && /container-cmd.sh" # anthropic/claude-opus-4.6 # openrouter/anthropic/claude-opus-4.6 diff --git a/container-cmd.sh b/container-cmd.sh new file mode 100755 index 0000000..091a048 --- /dev/null +++ b/container-cmd.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# upgrade opencode +sudo npm install -g opencode-ai + +# # Add Docker's official GPG key: +# sudo apt update +# sudo apt install ca-certificates curl +# sudo install -m 0755 -d /etc/apt/keyrings +# sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +# sudo chmod a+r /etc/apt/keyrings/docker.asc + +# # Add the repository to Apt sources: +# sudo tee /etc/apt/sources.list.d/docker.sources < bool: are expected to be pre-lowered by the caller. Args: - issue: A Forgejo issue dict (must have "title" and optionally "body"). + issue: A Gitea issue dict (must have "title" and optionally "body"). keywords: Lowercased keyword strings to search for. mode: "and" (all keywords must match) or "or" (any keyword matches). """ @@ -201,7 +201,7 @@ def format_compact(data: dict) -> str: def main() -> None: parser = argparse.ArgumentParser( - description="Search Forgejo issues and pull requests by keyword.", + description="Search Gitea issues and pull requests by keyword.", formatter_class=argparse.RawDescriptionHelpFormatter, epilog="""\ examples: @@ -225,9 +225,9 @@ examples: parser.add_argument( "--server", required=True, - help="Forgejo server URL (e.g. https://git.example.com)", + help="Gitea server URL (e.g. https://git.example.com)", ) - parser.add_argument("--token", required=True, help="Forgejo API token") + parser.add_argument("--token", required=True, help="Gitea API token") parser.add_argument("--repo", required=True, help="Repository in owner/repo format") parser.add_argument( "--match-mode", diff --git a/skills/rui-personal-identity/SKILL.md b/skills/rui-personal-identity/SKILL.md index 49da093..8c07bef 100644 --- a/skills/rui-personal-identity/SKILL.md +++ b/skills/rui-personal-identity/SKILL.md @@ -1,13 +1,13 @@ --- name: rui-personal-identity -description: User's personal identity, including Forgejo server details, git credentials, authentication setup, and general reference materials for the project. +description: User's personal identity, including Gitea server details, git credentials, authentication setup, and general reference materials for the project. --- ## Role -Acting as **Rui Hu** (Forgejo username: `hurui200320`). +Acting as **Rui Hu** (Gitea username: `hurui200320`). -## Forgejo Setup +## Gitea Setup - **Server:** `git.cleverthis.com` - **Repository:** Ask user. @@ -15,6 +15,8 @@ Acting as **Rui Hu** (Forgejo username: `hurui200320`). > Note: recently the company switched to Gitea, but forgejo is based on gitea, > so the skill and other document will use forgejo and gitea interchangeably +Using cli tool `tea` for interaction with gitea server. + ## Git Identity For all git commits, use: @@ -30,7 +32,7 @@ git config user.email "rui.hu@cleverthis.com" ## Authentication When accessing the remote server (push, pull, clone), use **HTTPS** (not SSH) and -authenticate using the Forgejo API key in the environment variable `$FORGEJO_PAT`. +authenticate using the Gitea API key in the environment variable `$FORGEJO_PAT`. ``` https://$FORGEJO_PAT@git.cleverthis.com//.git diff --git a/skills/rui-pr-fix-process/SKILL.md b/skills/rui-pr-fix-process/SKILL.md index 18ec85c..19e7c33 100644 --- a/skills/rui-pr-fix-process/SKILL.md +++ b/skills/rui-pr-fix-process/SKILL.md @@ -5,7 +5,7 @@ description: Workflow for fixing a PR based on review comments. Covers reading r ## Reading Review Comments -1. **Fetch all review comments** from the PR on Forgejo, including inline comments and +1. **Fetch all review comments** from the PR on Gitea, including inline comments and general review comments. 2. **Categorize each comment** by type: - **Must fix** — Functional bugs, spec violations, correctness issues, test gaps. @@ -35,7 +35,7 @@ While fixing the issue, ensure your changes don't break the requirements from ti ## Implementation Notes -As you make changes, **post detailed implementation notes** to the Forgejo ticket as +As you make changes, **post detailed implementation notes** to the Gitea ticket as comments. For each fix or group of related fixes, document: - What review comment is being addressed. @@ -49,7 +49,7 @@ AI agent can understand what was done and why. ## PR Description Update -After completing all fixes, **update the PR description** on Forgejo to reflect the +After completing all fixes, **update the PR description** on Gitea to reflect the current state of the changes. The PR description should accurately describe: - What the PR implements (updated to include any scope changes from fixes). @@ -58,7 +58,7 @@ current state of the changes. The PR description should accurately describe: ## Review Response -After fixing, **respond to the PR review** on Forgejo: +After fixing, **respond to the PR review** on Gitea: - For each addressed comment: post a reply confirming the fix, briefly describing what was changed. @@ -72,7 +72,7 @@ After fixing, **respond to the PR review** on Forgejo: If a review comment points to work that is outside the scope of the current ticket: -1. **Do NOT create a new Forgejo ticket automatically.** Ever. +1. **Do NOT create a new Gitea ticket automatically.** Ever. 2. **Explain the situation to the user** — describe the issue, why it is out of scope, and recommend whether it needs a new ticket. 3. **Wait for the user's decision** before taking any action on deferred items. @@ -87,7 +87,7 @@ After all fixes are applied: integration tests, coverage >= 97%). 2. **Amend the commit** with any quality gate fixes. 3. **Force push** the branch. -4. **Respond to review comments** on Forgejo. +4. **Respond to review comments** on Gitea. 5. **Verify CI checks pass** on the PR after pushing. If quality gates fail, fix the failures and repeat the cycle. The branch must be fully diff --git a/skills/rui-search-issues/SKILL.md b/skills/rui-search-issues/SKILL.md index 0a0d814..d609992 100644 --- a/skills/rui-search-issues/SKILL.md +++ b/skills/rui-search-issues/SKILL.md @@ -1,16 +1,16 @@ --- name: rui-search-issues -description: Search Forgejo issues and pull requests by keyword with local matching, filtering, and pagination. Use this when you need to find specific tickets in a large repository. +description: Search Gitea issues and pull requests by keyword with local matching, filtering, and pagination. Use this when you need to find specific tickets in a large repository. --- ## Overview -Search the Forgejo issue tracker using local keyword matching. Issues are +Search the Gitea issue tracker using local keyword matching. Issues are fetched page by page from the API and matched client-side against title and body text. This avoids the unreliable server-side search and gives precise substring matching with AND/OR logic. -**Prerequisites:** Load the `rui-personal-identity` skill first to get the Forgejo +**Prerequisites:** Load the `rui-personal-identity` skill first to get the Gitea server URL, API token, and repository name needed for the required options. ## Script location @@ -31,8 +31,8 @@ python3 /external/opencode/scripts/search-issues.py KEYWORD [KEYWORD ...] \ | Argument | Description | |------------|----------------------------------------------------------| | `KEYWORD` | One or more search keywords. Each is matched as a case-insensitive substring against issue title and body. Use shell quotes for multi-word keywords (e.g. `"foo bar"`). | -| `--server` | Forgejo server URL (e.g. `https://git.example.com`) | -| `--token` | Forgejo API token for authentication | +| `--server` | Gitea server URL (e.g. `https://git.example.com`) | +| `--token` | Gitea API token for authentication | | `--repo` | Repository in `owner/repo` format | ### Optional arguments @@ -135,7 +135,7 @@ characters, whitespace collapsed). ## How it works 1. **Server-side filtering** — The `--state`, `--type`, `--labels`, - `--milestone`, and `--assignee` filters are passed to the Forgejo API to + `--milestone`, and `--assignee` filters are passed to the Gitea API to narrow the issue set before any local matching. 2. **Page-by-page fetch** — Issues are fetched 50 per page from the filtered set. No server-side text search (`q` parameter) is used. @@ -177,7 +177,7 @@ Since the script will scan all issues page by page, a large repo may take a long Thus, when initializing the tool call, you may specify a longer timeout like 10 minutes (600000ms). Also, there might be multiple agents trying to search through the issues at the same time, -thus, a lot of request will be sent at the same time. The forgejo server may overload +thus, a lot of request will be sent at the same time. The Gitea server may overload and failed to response the request, causing the script to crash. When this happens, sleep for several seconds and then retry the search. diff --git a/skills/rui-task-discovery/SKILL.md b/skills/rui-task-discovery/SKILL.md index 36e396a..6a8b8f4 100644 --- a/skills/rui-task-discovery/SKILL.md +++ b/skills/rui-task-discovery/SKILL.md @@ -1,14 +1,14 @@ --- name: rui-task-discovery -description: Rules for finding, filtering, and prioritizing work from the Forgejo issue tracker. Covers assignee filtering, state label requirements, priority ordering, and blocked issue handling. +description: Rules for finding, filtering, and prioritizing work from the Gitea issue tracker. Covers assignee filtering, state label requirements, priority ordering, and blocked issue handling. --- ## Finding Your Tasks -Query the Forgejo issue tracker for issues assigned to you. Your tasks are **open issues** +Query the Gitea issue tracker for issues assigned to you. Your tasks are **open issues** (not closed) where: -- The **assignee** matches your Forgejo username. +- The **assignee** matches your Gitea username. - The issue has a `State/Verified` or `State/In Progress` label. - Do **not** work on `State/Unverified` issues. diff --git a/skills/rui-task-workflow/SKILL.md b/skills/rui-task-workflow/SKILL.md index 0635fe8..e5d89a1 100644 --- a/skills/rui-task-workflow/SKILL.md +++ b/skills/rui-task-workflow/SKILL.md @@ -1,16 +1,16 @@ --- name: rui-task-workflow -description: End-to-end task execution lifecycle for Forgejo issues. Covers preparation, implementation with TDD, quality gates, commit/push, pull request creation, issue state transitions, and discovering new work. +description: End-to-end task execution lifecycle for Gitea issues. Covers preparation, implementation with TDD, quality gates, commit/push, pull request creation, issue state transitions, and discovering new work. --- ## Phase 1: Preparation -1. **Read the issue thoroughly.** Open the Forgejo issue and read the Metadata, Subtasks, +1. **Read the issue thoroughly.** Open the Gitea issue and read the Metadata, Subtasks, Definition of Done, and any comments. Understand the full scope. 2. **Read the specification.** Review the relevant parts of `docs/specification.md` to understand the architectural context and ensure your implementation aligns with the spec. 3. **Transition the issue state.** Update the issue's label from `State/Verified` to - `State/In Progress` via the Forgejo API. If the issue is `State/Paused`, check that the + `State/In Progress` via the Gitea API. If the issue is `State/Paused`, check that the blocker is resolved first, remove the `Blocked` label, then transition to `State/In Progress`. 4. **Set up the branch.** Use the branch name from the issue's Metadata > Branch field. @@ -19,13 +19,13 @@ description: End-to-end task execution lifecycle for Forgejo issues. Covers prep ## Phase 2: Implementation 5. **Work through the subtasks in order.** Complete each subtask listed in the issue body. - As you complete each one, update the issue body via the Forgejo API to check it off + As you complete each one, update the issue body via the Gitea API to check it off (`- [x]`). 6. **Write tests alongside code.** Follow TDD as described in the `rui-coding-standards` skill. 7. **Handle obsolete tests.** See the `rui-coding-standards` skill for the policy on updating vs. fixing tests during redesign. -8. **Add implementation notes as Forgejo issue comments.** Throughout your work, generously - and exhaustively append detailed comments to the Forgejo issue documenting: +8. **Add implementation notes as Gitea issue comments.** Throughout your work, generously + and exhaustively append detailed comments to the Gitea issue documenting: - Design decisions made and their rationale. - Discoveries, assumptions, and open questions. - Implementation details (module ownership, patterns used, risk mitigations). @@ -56,14 +56,14 @@ description: End-to-end task execution lifecycle for Forgejo issues. Covers prep ## Phase 5: Pull Request and Issue Closure -13. **Open a Pull Request** from the feature branch to `master` on Forgejo. The PR must +13. **Open a Pull Request** from the feature branch to `master` on Gitea. The PR must include: - A detailed description explaining the changes, motivation, and approach. - A closing keyword referencing the issue (e.g., `Closes #`). - The same milestone as the issue. - A `Type/` label matching the issue type. - - The linked issue added as a Forgejo dependency on the PR. -14. **Transition the issue** to `State/In Review` via the Forgejo API. + - The linked issue added as a Gitea dependency on the PR. +14. **Transition the issue** to `State/In Review` via the Gitea API. 15. **Wait for all required checks to pass** on the pull request. 16. **If any checks fail**, fix them, amend the appropriate commit on the branch, force push, and repeat from step 15. **If checks pass**, do a final review of the PR ensuring it @@ -76,7 +76,7 @@ If during implementation you discover work that needs to be done but is not trac - **Small and directly related:** Add it as a new subtask on the current issue and complete it within the same commit. -- **Separate unit of work:** Create a new Forgejo issue following the format in +- **Separate unit of work:** Create a new Gitea issue following the format in `CONTRIBUTING.md` "Creating Issues". Assign appropriate labels and milestone, and link it to a parent Epic (mandatory — orphan issues are not permitted per the ticket type hierarchy). If it requires multiple commits, create it as an Epic with child issues. Note