From 1f997cc504296aa2731c8d95a8f82b727ec5df31 Mon Sep 17 00:00:00 2001 From: timmy Date: Fri, 7 Aug 2026 07:30:43 +0000 Subject: [PATCH] feat: discover and claim mobile work (#175) --- README.md | 9 +-- frontend/index.html | 118 +++++++++++++++++++++++++++++++- frontend/pick-work.js | 77 +++++++++++++++++++++ src/gitea_proxy.py | 114 ++++++++++++++++++++++++++++++ src/main.py | 41 ++++++++++- tests/test_gitea_work_search.py | 61 +++++++++++++++++ tests/test_issue_api.py | 76 ++++++++++++++++++++ tests/test_my_work.py | 95 +++++++++++++++++++++++++ 8 files changed, 585 insertions(+), 6 deletions(-) create mode 100644 frontend/pick-work.js diff --git a/README.md b/README.md index e5bae97..55f84ad 100644 --- a/README.md +++ b/README.md @@ -15,10 +15,11 @@ python3 -m pip install -r requirements.txt Point the dashboard at the Gitea server root (without `/api/v1`) and provide a token that can read dashboard data, update the authenticated user's notification -threads, create and self-assign issues, create issue comments, close assigned -issues, inspect/comment on assigned pull requests, merge assigned pull requests, and -submit pull-request reviews. Pull-request replies and mobile My Work issue and PR -comments use Gitea's issue-comment API; mobile issue capture requires issue +threads, create and self-assign issues, discover and claim open unassigned issues, +create issue comments, close assigned issues, inspect/comment on assigned pull +requests, merge assigned pull requests, and submit pull-request reviews. +Pull-request replies and mobile My Work issue and PR comments use Gitea's +issue-comment API; mobile issue capture requires issue creation and assignment permission. Closing an assigned issue, native Comment, Approve, and Request changes reviews, and assigned-PR merge require repository write permission. Native Comment, Approve, and Request changes reviews support diff --git a/frontend/index.html b/frontend/index.html index ae24f81..2534446 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -144,6 +144,17 @@ textarea { resize: vertical; min-height: 120px; } .issue-sheet-actions a { border:1px solid #60a5fa; border-radius:10px; font-weight:700; } .issue-retry { min-height:44px; width:100%; margin-top:10px; } .new-issue { min-height:44px; } +.find-work-action { min-height:44px; } +.my-work-actions { display:flex; flex-wrap:wrap; gap:8px; } +.find-work-sheet { position:fixed; inset:0; z-index:58; display:none; justify-content:flex-end; background:rgba(5,12,21,.72); backdrop-filter:blur(4px); } +.find-work-sheet.open { display:flex; } +.find-work-panel { width:min(560px,100%); height:100dvh; overflow:auto; display:grid; align-content:start; gap:12px; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); background:#0b1526; border-left:1px solid #2a496e; } +.find-work-header { display:flex; align-items:center; justify-content:space-between; gap:10px; } +.find-work-header button, .find-work-card button, .find-work-more { min-height:44px; } +.find-work-list { display:grid; gap:10px; } +.find-work-card { display:grid; gap:8px; padding:12px; border:1px solid #2a496e; border-radius:12px; background:#101f36; overflow-wrap:anywhere; } +.find-work-card button { width:100%; font-weight:700; } +@media(max-width:320px) { .find-work-panel { padding:12px; } .my-work-actions { width:100%; } .my-work-actions button { flex:1 1 100%; } } .create-issue-sheet { position:fixed; inset:0; z-index:57; display:none; justify-content:flex-end; background:rgba(5,12,21,.72); backdrop-filter:blur(4px); } .create-issue-sheet.open { display:flex; } .create-issue-panel { width:min(560px,100%); height:100dvh; overflow:auto; display:grid; align-content:start; gap:12px; padding:18px; padding-bottom:calc(18px + env(safe-area-inset-bottom)); background:#0b1526; border-left:1px solid #2a496e; } @@ -204,7 +215,10 @@ textarea { resize: vertical; min-height: 120px; }

My Work

Loading assigned work…
- +
+ + +
@@ -342,6 +356,19 @@ textarea { resize: vertical; min-height: 120px; }
+ +