Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive

- uses: actions/cache@v4
- uses: actions/cache@v5
with:
path: Library
key: Library-${{ hashFiles('Assets/**', 'Packages/**', 'ProjectSettings/**') }}
Expand Down
95 changes: 0 additions & 95 deletions .github/workflows/claude-code-review.yml

This file was deleted.

6 changes: 3 additions & 3 deletions .github/workflows/create-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,11 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
submodules: recursive

- uses: actions/setup-node@v4
- uses: actions/setup-node@v6
with:
node-version: 20

Expand All @@ -40,7 +40,7 @@ jobs:
VERSION: ${{ github.ref_name }}

- name: Create release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
if: "!contains(github.event.head_commit.message, '--no-release')"
with:
generate_release_notes: true
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/opencode.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: opencode

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]

jobs:
opencode:
runs-on: ubuntu-latest

if: |
contains(github.event.comment.body, ' /oc') ||
startsWith(github.event.comment.body, '/oc') ||
contains(github.event.comment.body, ' /opencode') ||
startsWith(github.event.comment.body, '/opencode')

timeout-minutes: 10

permissions:
id-token: write
contents: read
pull-requests: read
issues: read

steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Run opencode
uses: anomalyco/opencode/github@latest
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
with:
model: opencode-go/deepseek-v4-flash
prompt: |
If you are asked for a code review, use the @code-reviewer subagent.
Follow the instructions about how to structure and post your review.
4 changes: 2 additions & 2 deletions .github/workflows/tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
tag:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6

- name: Check version change
id: check
Expand All @@ -35,7 +35,7 @@ jobs:

- name: Trigger workflow
if: steps.check.outputs.changed == 'true'
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
script: |
github.rest.actions.createWorkflowDispatch({
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,5 @@ crashlytics-build.properties
Talo Settings.asset*

.DS_Store

mono_crash*.json
79 changes: 79 additions & 0 deletions .opencode/agents/code-reviewer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
description: Review code for quality, bugs and security
mode: subagent
model: opencode-go/deepseek-v4-flash
temperature: 0.1
permission:
edit: deny
bash: deny
---

You are a pragmatic code reviewer. Review this pull request and provide feedback using the guidance below.

# Process

1. Fetch the current PR: `gh pr view --json number --jq .number` will show the current PR number.
2. Fetch the repo details: `gh repo view --json nameWithOwner --jq .nameWithOwner` will show the owner and repo.
3. Follow the review workflow steps.

## Categories to check

1. Code quality and best practices
2. Potential bugs
3. Performance
4. Security
5. Backwards compatibility

## Issue categories

- If an issue spans multiple categories, list it only once.
- Prioritize by severity: 🔴 Critical → 🟡 Major → 🔵 Minor.
- Focus only on changes introduced in this PR.

## Review workflow steps

1. **Analysis Phase**: Review the PR diff and identify potential issues
2. **Validation Phase**: For each issue you find, verify it by:
- Re-reading the relevant code carefully
- Checking if your suggested fix is actually different from the current code
- Checking if existing tests demonstrate the code handles this case
3. **Draft Phase**: Write your review only after validating all issues
4. **Quality Check**: Before posting, remove any issues where:
- Your "before" and "after" code snippets are identical
- You're uncertain or use phrases like "appears", "might", "should verify"
- The issue is theoretical without clear impact
5. **Post Phase**: Only post the review if you have concrete, validated feedback

## Edge case policy

Only flag edge cases that meet ALL of these criteria:

1. Realistic: Could happen in normal usage or common error scenarios.
2. Impactful: Would cause bugs, security issues, or data problems (not just "it's not perfect").
3. Actionable: Can be fixed with reasonable effort in this PR's scope.

Ignore theoretical issues that require multiple unlikely conditions or malicious input patterns.
Use the "would this bother a pragmatic senior developer?" test.

# Things to avoid

1. Running tests just to check output: these kinds of errors will be caught by CI.
2. Reading all the files in the repo without a good reason.

# Feedback style

- Provide specific code examples or line references showing the issue.
- Suggest fixes with code snippets where helpful.
- Be pragmatic, don't force criticism.

# Posting your review

Post your review using this command, which will edit your last comment if one exists, or create a new one:

```bash
gh pr comment ${INSERT_PR_NUMBER} --repo ${INSERT_REPO} --edit-last --create-if-none --body "<review>"
```

- Only post your review when it is ready.
- Do not post multiple comments.
- Ensure the markdown you generate is well-formatted, easy to read and renders correctly on GitHub.
7 changes: 7 additions & 0 deletions .opencode/commands/review-pr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
name: review-pr
description: Review the current pull request
agent: code-reviewer
---

Use the @code-reviewer agent to review the current pull request.
2 changes: 1 addition & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,4 @@
"request": "attach"
}
]
}
}
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
"dotnet.defaultSolution": "unity.slnx",
"editor.tabSize": 4,
"editor.indentSize": "tabSize"
}
}
4 changes: 1 addition & 3 deletions CLAUDE.md → AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# AGENTS.md

## Project Overview

Expand Down
2 changes: 1 addition & 1 deletion Assets/Talo Game Services/Talo/Runtime/APIs/BaseAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace TaloGameServices
public class BaseAPI
{
// automatically updated with a pre-commit hook
private const string ClientVersion = "0.56.0";
private const string ClientVersion = "0.57.0";

protected string baseUrl;

Expand Down
30 changes: 27 additions & 3 deletions Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -94,15 +94,15 @@ public async Task<Player> Identify(string service, string identifier)
}
}

public async Task<Player> IdentifySteam(string ticket, string identity = "")
public async Task<Player> IdentifySteam(string ticket, string identityClient = "")
{
if (string.IsNullOrEmpty(identity))
if (string.IsNullOrEmpty(identityClient))
{
await Identify("steam", ticket);
}
else
{
await Identify("steam", $"{identity}:{ticket}");
await Identify("steam", $"{identityClient}:{ticket}");
}

return Talo.CurrentPlayer;
Expand All @@ -114,6 +114,30 @@ public async Task<Player> IdentifyGooglePlayGames(string authCode)
return Talo.CurrentPlayer;
}

public async Task<Player> IdentifyGameCenter(
string publicKeyUrl,
byte[] signature,
byte[] salt,
ulong timestamp,
string playerId
)
{
var payload = new PlayersGameCenterIdentifier
{
publicKeyUrl = publicKeyUrl,
signature = Convert.ToBase64String(signature),
salt = Convert.ToBase64String(salt),
timestamp = timestamp,
playerId = playerId,
bundleId = Application.identifier
};

var identifier = Uri.EscapeDataString(JsonUtility.ToJson(payload));

await Identify("game_center", identifier);
return Talo.CurrentPlayer;
}

protected override async Task ExecuteDebouncedOperation(DebouncedOperation operation)
{
switch (operation)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
namespace TaloGameServices
{
[System.Serializable]
public class PlayersGameCenterIdentifier
{
public string publicKeyUrl;
public string signature; // base64 encoded
public string salt; // base64 encoded
public ulong timestamp;
public string playerId;
public string bundleId;
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading