Skip to content

Commit 5d5b411

Browse files
authored
Merge branch 'v1.0-dev' into fix/modal-overlay-click-through
2 parents fdaac4b + 26be625 commit 5d5b411

3 files changed

Lines changed: 22 additions & 137 deletions

File tree

Lines changed: 8 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
name: "Claude (label: claudius-review)"
2+
name: "Claude review (label: claudius-review)"
33

44
"on":
55
pull_request:
@@ -18,101 +18,18 @@ jobs:
1818
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'claudius-review'))
1919
)
2020
runs-on: ubuntu-latest
21-
timeout-minutes: 30
21+
timeout-minutes: 40
2222
permissions:
2323
contents: read
24-
issues: write # needed for gh pr edit --remove-label
24+
issues: write
2525
pull-requests: write
2626
id-token: write
2727
env:
28-
CLAUDE_MODEL: ${{ vars.CLAUDE_MODEL || 'opus' }}
29-
REPORT_DIR: ${{ github.workspace }}/review-report
28+
ANTHROPIC_MODEL: ${{ vars.CLAUDE_MODEL || 'opus' }}
3029
steps:
31-
- name: Check for OAuth token
32-
env:
33-
HAS_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK != '' }}
34-
run: |
35-
if [ "$HAS_TOKEN" != "true" ]; then
36-
echo "::error::CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK secret not configured. Configure the CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK secret in your repository or organization settings."
37-
exit 1
38-
fi
39-
40-
- name: Checkout repository
41-
uses: actions/checkout@v6
30+
- name: Claudius Review
31+
uses: lklimek/claudius-review-action@main
4232
with:
43-
# We can diff so we need history
44-
fetch-depth: 0
45-
46-
- name: Configure git to use HTTPS instead of SSH
47-
run: git config --global url."https://github.com/".insteadOf "git@github.com:"
48-
49-
- name: Create review report directory
50-
run: mkdir -p "$REPORT_DIR"
51-
52-
- name: Run Claude Code Review
53-
id: claude-review
54-
uses: anthropics/claude-code-action@v1
55-
env:
56-
GH_TOKEN: ${{ github.token }}
57-
with:
58-
use_sticky_comment: true
5933
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN_LKLIMEK }}
60-
plugin_marketplaces: "https://github.com/lklimek/agents.git"
61-
plugins: |
62-
claudius@lklimek
63-
claudash@lklimek
64-
show_full_output: true
65-
trigger_phrase: ""
66-
prompt: |
67-
You are reviewing PR #${{ github.event.pull_request.number }} in ${{ github.repository }}.
68-
Base branch: ${{ github.event.pull_request.base.ref }}
69-
Head branch: ${{ github.event.pull_request.head.ref }}
70-
PR title: ${{ github.event.pull_request.title }}
71-
72-
MemCan is NOT available in CI — skip memcan:recall, memcan:lessons-learned, and all mcp__plugin_memcan_brain__* tools.
73-
When spawning agents, instruct them to not use memcan tools.
74-
75-
Use MCP tools (mcp__plugin_claudius_github__*) for GitHub operations. If an MCP call fails, fall back to gh CLI.
76-
77-
Sub-agents have no conversation history —
78-
pass all relevant PR context explicitly when spawning them.
79-
Write all PR comments in Claudius persona — witty, confident, subtly snarky,
80-
but always respectful and genuinely helpful, as if advising a trusted colleague.
81-
82-
Follow this review flow in order. Steps 1 and 2 MUST use the Skill tool —
83-
do NOT skip them or perform their work manually.
84-
85-
1. Invoke Skill(skill="claudius:check-pr-comments") to check previous review comments.
86-
For each thread that IS fixed but NOT yet resolved, reply describing the fix
87-
and resolve the thread.
88-
2. Invoke Skill(skill="claudius:grumpy-review") to perform a fresh code review.
89-
This spawns parallel specialist agents and produces a consolidated report.
90-
Do NOT review the code yourself — the skill handles the full pipeline.
91-
Generate HTML format instead of markdown (use --format html in the render step).
92-
Write the final report.json and report.html to $REPORT_DIR.
93-
3. Post only MEDIUM severity and higher findings as new inline PR comments.
94-
4. If no unresolved comments remain after the full flow, approve the PR.
95-
claude_args: |
96-
--agent claudius:claudius
97-
--model ${{ env.CLAUDE_MODEL }}
98-
--max-turns 150
99-
--allowedTools "mcp__plugin_claudius_github,Read,Write,Edit,Glob,Grep,Agent,Skill,Task,TaskCreate,TaskUpdate,TaskList,TaskGet,TaskOutput,SendMessage,Bash(gh pr *),Bash(gh api *),Bash(git diff *),Bash(git log *),Bash(git fetch *),Bash(git branch *),Bash(git rev-parse *),Bash(git show *),Bash(git pull *),Bash(git checkout *),Bash(git status),Bash(git status *),Bash(git remote *),Bash(git merge-base *),Bash(echo *),Bash(ls *),Bash(jq *),Bash(mkdir *),Bash(mktemp *),Bash(pwd *),Bash(*gh-resolve-review-threads.sh *),Bash(*gh-fetch-review-comments.sh *),Bash(*gh-fetch-reviews.sh *),Bash(*gh-list-review-threads.sh *),Bash(*gh-request-reviewer.sh *),Bash(*gh-post-review.sh *),Bash(*gh-pr-base-sha.sh *),Bash(*consolidate_reports.py *),Bash(*validate_report.py *),Bash(*generate_review_report.py *)"
100-
101-
- name: Upload review report
102-
if: '!cancelled()'
103-
uses: actions/upload-artifact@v4
104-
with:
105-
name: claude-review-report-pr-${{ github.event.pull_request.number }}
106-
path: |
107-
${{ env.REPORT_DIR }}/report.json
108-
${{ env.REPORT_DIR }}/report.html
109-
retention-days: 14
110-
if-no-files-found: ignore
111-
112-
- name: Remove claudius-review label
113-
if: success()
114-
env:
115-
GH_TOKEN: ${{ github.token }}
116-
run: |
117-
gh pr edit "${{ github.event.pull_request.number }}" \
118-
--remove-label "claudius-review" 2>/dev/null || true
34+
memcan_url: ${{ vars.MEMCAN_URL }}
35+
memcan_api_key: ${{ secrets.MEMCAN_API_KEY }}

.github/workflows/claude.yml

Lines changed: 0 additions & 41 deletions
This file was deleted.

src/ui/dashpay/profile_search.rs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::app::{AppAction, DesiredAppAction};
22
use crate::backend_task::dashpay::DashPayTask;
3+
use crate::backend_task::error::TaskError;
34
use crate::backend_task::{BackendTask, BackendTaskSuccessResult};
45
use crate::context::AppContext;
56
use crate::ui::components::dashpay_subscreen_chooser_panel::add_dashpay_subscreen_chooser_panel;
@@ -251,8 +252,9 @@ impl ProfileSearchScreen {
251252
}
252253

253254
pub fn display_message(&mut self, _message: &str, _message_type: MessageType) {
254-
// Banner display is handled globally by AppState; this is only for side-effects.
255-
self.loading = false;
255+
// Don't touch loading state here — display_message can be called for
256+
// unrelated task completions while we're waiting for search results.
257+
// Loading state is managed by search_profiles() and display_task_result().
256258
}
257259
}
258260

@@ -318,10 +320,9 @@ impl ScreenLike for ProfileSearchScreen {
318320
}
319321

320322
fn display_task_result(&mut self, result: BackendTaskSuccessResult) {
321-
self.loading = false;
322-
323323
match result {
324324
BackendTaskSuccessResult::DashPayProfileSearchResults(results) => {
325+
self.loading = false;
325326
self.search_results.clear();
326327

327328
// Convert backend results to UI results
@@ -366,8 +367,16 @@ impl ScreenLike for ProfileSearchScreen {
366367
// Message display is handled globally by AppState
367368
}
368369
_ => {
369-
// Ignore other results
370+
// Ignore other results — don't touch loading state for
371+
// results from unrelated tasks
370372
}
371373
}
372374
}
375+
376+
fn display_task_error(&mut self, _error: &TaskError) -> bool {
377+
// Clear loading state on error so the spinner stops.
378+
// Return false to let AppState show the default error banner.
379+
self.loading = false;
380+
false
381+
}
373382
}

0 commit comments

Comments
 (0)