Utkrista and moonsmp#53
Conversation
|
@Coder-soft is attempting to deploy a commit to the yamura3's projects Team on Vercel. A member of the Team first needs to authorize it. |
📝 WalkthroughWalkthroughThis PR updates the OpenCode CI/CD workflow configuration to switch API providers and expand trigger conditions, replaces one partner entry in the partnership grid, adjusts the grid layout, and adds a new team member to the roster. ChangesSite Content and CI Updates
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment Warning |
Greptile SummaryThis PR adds a new team member (Utkrista) to the Contact page, replaces the "Decour SMP" partnership with "Moon SMP", and upgrades the opencode CI workflow to trigger automatically on pull requests with a new API key and model.
Confidence Score: 3/5Two image URLs sourced from Discord's external proxy may break over time, causing missing partner logo and team member avatar on the live site. Both the Moon SMP partner logo and the Utkrista team avatar point to images-ext-1.discordapp.net proxy URLs. Discord's external image proxy is not a stable CDN — these links can expire or become unavailable without warning, which would silently break the Partnership and Contact pages in production. The CI workflow changes look correct and the content additions are otherwise straightforward. src/components/Partnership.tsx and src/pages/Contact.tsx both use ephemeral Discord proxy image URLs that should be replaced with direct CDN links or self-hosted assets.
|
| Filename | Overview |
|---|---|
| .github/workflows/opencode.yml | Adds a pull_request trigger so the opencode action runs automatically on new/updated PRs; renames secrets key from KILO_API_KEY to OPENCODE_API_KEY and switches the model. Logic is correct — the expression-based if condition handles both event types safely. |
| src/components/Partnership.tsx | Replaces Decour SMP with Moon SMP partner entry and tightens the grid layout; the new logo uses an ephemeral Discord external proxy URL that may break over time. |
| src/pages/Contact.tsx | Adds Utkrista as a new team member with role and socials; the avatar URL uses an ephemeral Discord image proxy that can expire and produce a broken image. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[PR Event or Comment] --> B{Workflow trigger}
B -->|pull_request| C[Run opencode action]
B -->|comment with /oc or /opencode| C
C --> D[opencode/minimax-m2.5-free via OPENCODE_API_KEY]
E[Partnership.tsx] --> F[Moon SMP logo - Discord proxy URL - may expire]
G[Contact.tsx] --> H[Utkrista avatar - Discord proxy URL - may expire]
Reviews (1): Last reviewed commit: "Add Utkrista to staff and Moon SMP to pa..." | Re-trigger Greptile
| url: "https://dsc.gg/decoursmp", | ||
| name: 'Moon SMP', | ||
| description: 'Moon SMP is a Grind Based PvP and economy server making it fun and challenging.', | ||
| logo: 'https://images-ext-1.discordapp.net/external/p9bRAl2A-0LjGwG3zVUKV2dCq55_QIvrUE_lmBaAr5A/%3Fsize%3D4096/https/cdn.discordapp.com/icons/1063123986537525298/61c13fc9f21bf93eb15a93774a15d4a2.png?format=webp&quality=lossless&width=192&height=192', |
There was a problem hiding this comment.
Ephemeral Discord proxy URL for partner logo
The Moon SMP logo uses an images-ext-1.discordapp.net external proxy URL. Discord's external image proxy links are not guaranteed to be stable — they can expire or become inaccessible over time, leaving a broken image on the partnerships page. The direct CDN URL embedded inside the proxy path (cdn.discordapp.com/icons/1063123986537525298/61c13fc9f21bf93eb15a93774a15d4a2.png) is more reliable, or the image should be downloaded and served from the project's own assets.
| { | ||
| name: "Utkrista", | ||
| role: "Team Member - Resource Manager", |
There was a problem hiding this comment.
Ephemeral Discord proxy URL for team member avatar
Utkrista's avatar uses an images-ext-1.discordapp.net external proxy URL, the same pattern as the Moon SMP logo. These Discord proxy links can expire or become inaccessible, causing the avatar to break on the Contact/Team page. Prefer the direct cdn.discordapp.com/avatars/893688296130105375/b2419c4ac0b5591c7ec8324467c404e6.png URL or host the image in the project's own assets alongside the other team member assets.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/opencode.yml:
- Line 32: Replace the floating action ref "anomalyco/opencode/github@latest"
with a pinned release tag or commit SHA (e.g., a specific vX.Y.Z tag or full
commit hash) to ensure reproducible CI runs, and update the OpenCode model value
from "opencode/minimax-m2.5-free" to a valid model returned by the API such as
"opencode/minimax-m2.5" (or "opencode/minimax-m2.7") so the workflow's model key
matches the available MiniMax model IDs.
In `@src/pages/Contact.tsx`:
- Around line 89-98: The Discord user ID in the team member object for name
"Utkrista" is inconsistent between the avatar URL (contains user ID
893688296130105375) and the socials.discord link (contains user ID
1298482806430629959); verify the correct Discord user ID for this user and
update either the avatar string or the socials.discord URL so both use the same
{USER_ID} and follow the expected formats (avatar:
.../avatars/{USER_ID}/{AVATAR_HASH}..., profile:
https://discordapp.com/users/{USER_ID}), ensuring the properties name, avatar
and socials.discord within that "Utkrista" object remain consistent.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: d9184b5f-90dc-40d1-b8e8-60119add15b3
📒 Files selected for processing (3)
.github/workflows/opencode.ymlsrc/components/Partnership.tsxsrc/pages/Contact.tsx
| @@ -28,6 +31,6 @@ jobs: | |||
| - name: Run opencode | |||
| uses: anomalyco/opencode/github@latest | |||
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
opencode github action available models minimax provider list
💡 Result:
OpenCode GitHub Action (anomalyco/opencode) does not appear to expose a single, static “available models for the MiniMax provider” list in its docs. Instead, OpenCode’s model support is driven by its internal/Models.dev registry; the model IDs you can use depend on what OpenCode has registered for the MiniMax provider at runtime. What we can confirm from current, cited sources: 1) Model ID format OpenCode expects the model string in the form provider_id/model_id [1]. 2) MiniMax model IDs that are used successfully with the OpenCode GitHub Action A public example workflow using the GitHub Action with MiniMax specifies the model as minimax/MiniMax-M2.7 [2]. 3) MiniMax models referenced in OpenCode docs (examples, not exhaustive) OpenCode’s “Models” documentation lists Minimax M2.1 as an example model (not stated as exhaustive) [1]. 4) Evidence that MiniMax provider model availability can lag or be incomplete An OpenCode GitHub Action issue shows that using minimax/MiniMax-M2.1 caused ProviderModelNotFoundError (suggestions empty), indicating that, at least at that time, OpenCode’s registry did not recognize that modelID for the MiniMax provider in the GitHub Action context [3]. Another issue notes that when a MiniMax model wasn’t on a model list, it was later merged/available [4]. 5) How to get the complete, authoritative list (recommended) OpenCode provides an endpoint to fetch the full list of available models and metadata: https://opencode.ai/zen/v1/models [5]. This is the closest thing to an up-to-date “provider -> models” list you can rely on, since the docs explicitly say the list is not necessarily exhaustive [1]. Practical answer to your “provider list” request - MiniMax provider ID (as used in OpenCode model IDs): minimax [2]. - MiniMax model IDs you can try today (from sources above): minimax/MiniMax-M2.7 [2], and minimax/MiniMax-M2.1 [1] (but note the provider-model registry can be temporarily out of sync, as shown in [3]). If you want, paste the output of https://opencode.ai/zen/v1/models filtered for providerId=miniMax (or share the raw JSON), and I can extract the exact MiniMax model IDs for 2026-06-02 from it.
Citations:
- 1: https://opencode.ai/docs/models/
- 2: https://github.com/rdar-lab/self-hosted-minimax-github-agent
- 3: ProviderModelNotFoundError: minimax/MiniMax-M2.1 anomalyco/opencode#6691
- 4: [FEATURE]: Minimax M2.7 access via Minimax coding plan anomalyco/opencode#18068
- 5: https://opencode.ai/docs/zen/
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Show relevant workflow lines (around 32 and 36)
echo "=== .github/workflows/opencode.yml (around 25-45) ==="
nl -ba .github/workflows/opencode.yml | sed -n '20,50p'
echo
echo "=== Fetch OpenCode models endpoint and search for minimax-m2.5-free ==="
# Fetch and search; be resilient to minor JSON shape differences
curl -fsSL 'https://opencode.ai/zen/v1/models' | python3 - <<'PY'
import json,sys
data=json.load(sys.stdin)
def walk(obj):
if isinstance(obj, dict):
for k,v in obj.items():
yield (k,v)
yield from walk(v)
elif isinstance(obj, list):
for i,v in enumerate(obj):
yield (i,v)
yield from walk(v)
text_matches=[]
needle_substrings=[
"minimax-m2.5-free",
"Minimax-M2.5-Free",
"minimax/m2.5",
"M2.5-free",
"m2.5-free",
"opencode/minimax-m2.5-free",
]
# Convert whole JSON to string for robust substring checks
s=json.dumps(data)
for n in needle_substrings:
if n in s:
text_matches.append(n)
print("Substrings found in models JSON:", text_matches)
# If the JSON includes modelId fields, attempt to enumerate them
model_ids=set()
def collect(obj):
if isinstance(obj, dict):
for k,v in obj.items():
if k.lower() in ("modelid","model_id","id","model","modelId".lower()):
if isinstance(v,str):
model_ids.add(v)
collect(v)
elif isinstance(obj, list):
for v in obj:
collect(v)
collect(data)
# Print only those model ids containing minimax-m2.5-free / minimax
hits=sorted([mid for mid in model_ids if ("minimax" in mid.lower())])
print("Minimax-like model IDs discovered (showing up to 50):")
for mid in hits[:50]:
print(" -", mid)
print()
target_exact="minimax-m2.5-free"
exact_hits=[mid for mid in model_ids if mid==target_exact or mid.lower()==target_exact]
print("Exact modelId matches for 'minimax-m2.5-free':", exact_hits)
# Also check provider/model composite formats if present
composites=[mid for mid in model_ids if "minimax" in mid.lower() and "/" in mid]
print("Composite IDs containing '/' and 'minimax' (up to 50):")
for mid in composites[:50]:
print(" -", mid)
PYRepository: creatorcluster/renderdragon.org
Length of output: 190
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== .github/workflows/opencode.yml (around 25-50) ==="
awk 'NR>=25 && NR<=50 {printf "%d\t%s\n", NR, $0}' .github/workflows/opencode.yml
echo
echo "=== Fetch OpenCode models endpoint and search for minimax-m2.5-free + minimax/m2.5 ==="
curl -fsSL 'https://opencode.ai/zen/v1/models' | python3 - <<'PY'
import json,sys
data=json.load(sys.stdin)
s=json.dumps(data)
needles=[
"opencode/minimax-m2.5-free",
"minimax-m2.5-free",
"Minimax-M2.5-Free",
"m2.5-free",
"M2.5-free",
"minimax-m2.5",
"minimax/m2.5",
"minimax/MiniMax-M2.5",
"minimax/MiniMax-M2.5-Free",
]
found=[n for n in needles if n in s]
print("Needle substrings found in models JSON:", found)
model_ids=set()
def collect(obj):
if isinstance(obj, dict):
for k,v in obj.items():
lk=k.lower()
if lk in ("modelid","model_id","modelid".lower(),"modelid".lower()):
if isinstance(v,str):
model_ids.add(v)
# sometimes model id is under "id" or "modelId"
if lk in ("modelid","model_id","modelid".lower(),"modelid".lower(),"modelid".lower(),"id","modelid"):
pass
if lk in ("modelid","model_id","modelid".lower()):
pass
# generic capture of likely id fields
if lk in ("modelid","model_id","model","id","modelId"):
if isinstance(v,str) and ("minimax" in v.lower() or "opencode" in v.lower()):
model_ids.add(v)
collect(v)
elif isinstance(obj, list):
for v in obj:
collect(v)
collect(data)
hits=[mid for mid in model_ids if "minimax" in mid.lower() and "m2.5" in mid.lower()]
print("\nMinimax-like model IDs discovered with 'm2.5' in them:")
for mid in sorted(hits)[:200]:
print(" -", mid)
print("Total minimax 'm2.5' hits:", len(hits))
# If providerId/modelId pairs exist, try to filter by providerId
def extract_pairs(obj):
pairs=[]
if isinstance(obj, dict):
provider=None
model=None
for k,v in obj.items():
lk=k.lower()
if lk in ("providerid","provider_id","provider"):
if isinstance(v,str): provider=v
if lk in ("modelid","model_id","modelid","model","id","modelId"):
if isinstance(v,str): model=v
if provider and model and "minimax" in provider.lower() and "minimax" in model.lower():
pairs.append((provider, model))
for v in obj.values():
pairs.extend(extract_pairs(v))
elif isinstance(obj, list):
for v in obj:
pairs.extend(extract_pairs(v))
return pairs
pairs=extract_pairs(data)
# Deduplicate
pairs=sorted(set(pairs))
print("\nProvider/model pairs found (showing minimax provider only, up to 100):")
for p in pairs[:100]:
print(" -", p[0], "/", p[1])
print("Total pairs:", len(pairs))
PYRepository: creatorcluster/renderdragon.org
Length of output: 1359
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "=== Request headers + first bytes from https://opencode.ai/zen/v1/models ==="
curl -sS -i --max-time 20 'https://opencode.ai/zen/v1/models' | head -n 40
echo
echo "=== Attempt to extract any model IDs containing 'minimax' from the raw response (no JSON parsing) ==="
curl -sS --max-time 20 'https://opencode.ai/zen/v1/models' | python3 - <<'PY'
import sys, re
s=sys.stdin.read()
# Print substrings around minimax
for m in re.finditer(r'(?i)[a-z0-9_-]{0,40}minimax[a-z0-9/_-]{0,80}', s):
print(m.group(0))
PYRepository: creatorcluster/renderdragon.org
Length of output: 4248
Pin the OpenCode action ref and fix the MiniMax model ID
anomalyco/opencode/github@latestis a floating tag—pin to a release tag or commit SHA for reproducibility.model: opencode/minimax-m2.5-freedoesn’t match the models currently returned byhttps://opencode.ai/zen/v1/models(MiniMax models includeminimax-m2.5andminimax-m2.7, but notminimax-m2.5-free). Updatemodel:accordingly.
🧰 Tools
🪛 zizmor (1.25.2)
[error] 32-32: unpinned action reference (unpinned-uses): action is not pinned to a hash (required by blanket policy)
(unpinned-uses)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.github/workflows/opencode.yml at line 32, Replace the floating action ref
"anomalyco/opencode/github@latest" with a pinned release tag or commit SHA
(e.g., a specific vX.Y.Z tag or full commit hash) to ensure reproducible CI
runs, and update the OpenCode model value from "opencode/minimax-m2.5-free" to a
valid model returned by the API such as "opencode/minimax-m2.5" (or
"opencode/minimax-m2.7") so the workflow's model key matches the available
MiniMax model IDs.
| { | ||
| name: "Utkrista", | ||
| role: "Team Member - Resource Manager", | ||
| avatar: | ||
| "https://images-ext-1.discordapp.net/external/9x3KDeC4d_wC4I9pT-XOYA6bY7VpDR8KK0w2sNEujZg/%3Fsize%3D1024/https/cdn.discordapp.com/avatars/893688296130105375/b2419c4ac0b5591c7ec8324467c404e6.png?format=webp&quality=lossless&width=537&height=537", | ||
| socials: { | ||
| website: "https://utkrista.tech/launcher/", | ||
| discord: "https://discordapp.com/users/1298482806430629959", | ||
| }, | ||
| }, |
There was a problem hiding this comment.
Discord user ID mismatch detected.
The avatar URL contains Discord user ID 893688296130105375 (Line 92-93), but the Discord profile link references a different user ID 1298482806430629959 (Line 96). This mismatch indicates either the avatar or the Discord link is incorrect, which could lead to privacy concerns or broken functionality.
Please verify which Discord user ID is correct and update the corresponding URL.
🔍 Expected format for verification
The avatar URL format:
https://.../avatars/{USER_ID}/{AVATAR_HASH}...
The Discord profile URL format:
https://discordapp.com/users/{USER_ID}
Both {USER_ID} values should match for the same user.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@src/pages/Contact.tsx` around lines 89 - 98, The Discord user ID in the team
member object for name "Utkrista" is inconsistent between the avatar URL
(contains user ID 893688296130105375) and the socials.discord link (contains
user ID 1298482806430629959); verify the correct Discord user ID for this user
and update either the avatar string or the socials.discord URL so both use the
same {USER_ID} and follow the expected formats (avatar:
.../avatars/{USER_ID}/{AVATAR_HASH}..., profile:
https://discordapp.com/users/{USER_ID}), ensuring the properties name, avatar
and socials.discord within that "Utkrista" object remain consistent.
Summary by CodeRabbit