From ada47f9c4a69393bbd35d5e14c58dbabea14ba9d Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Fri, 3 Jul 2026 21:41:57 +0100 Subject: [PATCH 01/27] add pr summary workflow --- .github/workflows/opencode.yml | 38 --------------------- .github/workflows/pr-summary.yml | 57 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 38 deletions(-) delete mode 100644 .github/workflows/opencode.yml create mode 100644 .github/workflows/pr-summary.yml diff --git a/.github/workflows/opencode.yml b/.github/workflows/opencode.yml deleted file mode 100644 index 5193aa14..00000000 --- a/.github/workflows/opencode.yml +++ /dev/null @@ -1,38 +0,0 @@ -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 diff --git a/.github/workflows/pr-summary.yml b/.github/workflows/pr-summary.yml new file mode 100644 index 00000000..79a181c9 --- /dev/null +++ b/.github/workflows/pr-summary.yml @@ -0,0 +1,57 @@ +name: Summarise + +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + summarise: + runs-on: ubuntu-latest + timeout-minutes: 10 + + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Get opencode version + id: version + run: | + VERSION=$(curl -sf https://api.github.com/repos/anomalyco/opencode/releases/latest | grep -o '"tag_name": *"[^"]*"' | cut -d'"' -f4) + echo "version=${VERSION:-latest}" >> "$GITHUB_OUTPUT" + + - name: Cache opencode + id: cache + uses: actions/cache@v5 + with: + path: ~/.opencode/bin + key: opencode-${{ runner.os }}-${{ runner.arch }}-${{ steps.version.outputs.version }} + + - name: Install opencode + if: steps.cache.outputs.cache-hit != 'true' + run: curl -fsSL https://opencode.ai/install | bash + + - name: Generate and apply summary + env: + OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.pull_request.number }} + MODEL: opencode-go/deepseek-v4-flash + run: | + set -euo pipefail + export PATH="$HOME/.opencode/bin:$PATH" + PROMPT="$(cat <<'EOF' + Summarise the changes in this pull request at a high level. + 1-5 paragraphs. Each paragraph must start with a bolded theme title of a few words on its own line (e.g. **Authentication overhaul**), followed by one bullet point for each individual point within that theme. + Separate paragraphs with a blank line. + Focus on substantive changes. Skip tests, fixtures, formatting and wiring unless they are the point of the PR. + Describe what changed and why, not how it works internally. + No preamble, no restating the title, no judgements. + EOF + )" + BODY="$(gh pr diff "$PR_NUMBER" | opencode run --model "$MODEL" "$PROMPT")" + gh pr edit "$PR_NUMBER" --body "$BODY" From 306c144b9bcf9ab363af76ef7905327a02d4a9c6 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Fri, 3 Jul 2026 21:42:37 +0100 Subject: [PATCH 02/27] remove the deprecated GetStat() function --- Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs index 6856f38c..a58ba34a 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs @@ -18,12 +18,6 @@ public async Task GetStats() return res.stats; } - [Obsolete("Use Find(string internalName) instead.")] - public async Task GetStat(string internalName) - { - return await Find(internalName); - } - public async Task Find(string internalName) { var uri = new Uri($"{baseUrl}/{internalName}"); From 7bbf077b02f7e9c31cde5e15b263164b90501d72 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Fri, 3 Jul 2026 21:56:36 +0100 Subject: [PATCH 03/27] remove the deprecated GetChannels(int page) signature --- Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs index a6391583..54a08a4c 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs @@ -147,12 +147,6 @@ public async Task GetChannels(GetChannelsOptions options return res; } - [Obsolete("Use GetChannels(GetChannelsOptions options) instead.")] - public async Task GetChannels(int page) - { - return await GetChannels(new GetChannelsOptions { page = page }); - } - public async Task GetSubscribedChannels(GetSubscribedChannelsOptions options = null) { Talo.IdentityCheck(); From dda54281f2768d1d9aeff7feceb1fc88ff7002f1 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 11:25:25 +0100 Subject: [PATCH 04/27] remove the deprecated CreatePrivate function --- .../Talo/Runtime/APIs/ChannelsAPI.cs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs index 54a08a4c..3f183f77 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs @@ -212,19 +212,6 @@ public async Task Create(string name, bool autoCleanup = false, params return await SendCreateChannelRequest(options); } - [Obsolete("Use Create(CreateChannelOptions options) instead.")] - public async Task CreatePrivate(string name, bool autoCleanup = false, params (string, string)[] propTuples) - { - var options = new CreateChannelOptions - { - name = name, - autoCleanup = autoCleanup, - props = propTuples, - isPrivate = true - }; - return await SendCreateChannelRequest(options); - } - public async Task Join(int channelId) { Talo.IdentityCheck(); From bfa8250d85717b50be90357b92a6bed638e1e2bc Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 11:30:46 +0100 Subject: [PATCH 05/27] remove the deprecated Create overload for channels --- .../Talo/Runtime/APIs/ChannelsAPI.cs | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs index 3f183f77..07ed6662 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs @@ -199,19 +199,6 @@ public async Task Create(CreateChannelOptions options) return await SendCreateChannelRequest(options); } - [Obsolete("Use Create(CreateChannelOptions options) instead.")] - public async Task Create(string name, bool autoCleanup = false, params (string, string)[] propTuples) - { - var options = new CreateChannelOptions - { - name = name, - autoCleanup = autoCleanup, - props = propTuples, - isPrivate = false - }; - return await SendCreateChannelRequest(options); - } - public async Task Join(int channelId) { Talo.IdentityCheck(); From f95e8cab977c9b56006a699f97b5a78540ebbe2a Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 11:35:31 +0100 Subject: [PATCH 06/27] remove the deprecated GetEntriesForCurrentPlayer() functions --- .../Talo/Runtime/APIs/LeaderboardsAPI.cs | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs index 9420c4c1..3541f0eb 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs @@ -85,17 +85,6 @@ public async Task GetEntries(string internalName, Ge return res; } - [Obsolete("Use GetEntries(string internalName, GetEntriesOptions options) with the aliasId or playerId option instead.")] - public async Task GetEntriesForCurrentPlayer(string internalName, GetEntriesOptions options = null) - { - Talo.IdentityCheck(); - - options ??= new GetEntriesOptions(); - options.aliasId = Talo.CurrentAlias.id; - - return await GetEntries(internalName, options); - } - [Obsolete("Use GetEntries(string internalName, GetEntriesOptions options) instead.")] public async Task GetEntries(string internalName, int page, int aliasId = -1, bool includeArchived = false) { @@ -107,19 +96,6 @@ public async Task GetEntries(string internalName, in }); } - [Obsolete("Use GetEntries(string internalName, GetEntriesOptions options) with the aliasId or playerId option instead.")] - public async Task GetEntriesForCurrentPlayer(string internalName, int page, bool includeArchived = false) - { - Talo.IdentityCheck(); - - return await GetEntries(internalName, new GetEntriesOptions - { - page = page, - aliasId = Talo.CurrentAlias.id, - includeArchived = includeArchived - }); - } - public async Task<(LeaderboardEntry, bool)> AddEntry(string internalName, float score, params (string, string)[] propTuples) { Talo.IdentityCheck(); From 832b60b38300c5223aaab44799a68544f2c7790a Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 11:45:05 +0100 Subject: [PATCH 07/27] remove the deprecated GetCacheEntriesForCurrentPlayer() function --- .../Talo/Runtime/APIs/LeaderboardsAPI.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs index 3541f0eb..eb3380d1 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs @@ -60,14 +60,6 @@ public List GetCachedEntries(string internalName, GetCachedEnt ); } - [Obsolete("Use GetCachedEntries(string internalName, GetCachedEntriesOptions options) with the aliasId or playerId option instead.")] - public List GetCachedEntriesForCurrentPlayer(string internalName) - { - Talo.IdentityCheck(); - - return _entriesManager.GetEntries(internalName).FindAll(e => e.playerAlias.id == Talo.CurrentAlias.id); - } - public async Task GetEntries(string internalName, GetEntriesOptions options = null) { options ??= new GetEntriesOptions(); From 4ccb0575e8ffabd9b2a51d1b491b2aa44fd0104a Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 11:49:13 +0100 Subject: [PATCH 08/27] remove the deprecated GetEntries overload --- .../Talo/Runtime/APIs/LeaderboardsAPI.cs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs index eb3380d1..39703076 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/LeaderboardsAPI.cs @@ -77,17 +77,6 @@ public async Task GetEntries(string internalName, Ge return res; } - [Obsolete("Use GetEntries(string internalName, GetEntriesOptions options) instead.")] - public async Task GetEntries(string internalName, int page, int aliasId = -1, bool includeArchived = false) - { - return await GetEntries(internalName, new GetEntriesOptions - { - page = page, - aliasId = aliasId, - includeArchived = includeArchived - }); - } - public async Task<(LeaderboardEntry, bool)> AddEntry(string internalName, float score, params (string, string)[] propTuples) { Talo.IdentityCheck(); From b0828b7871e8b1233118be09ad24e42caf773177 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 12:55:40 +0100 Subject: [PATCH 09/27] replace ChannelStoragePropError with RejectedProp --- .../Talo/Runtime/APIs/ChannelsAPI.cs | 2 +- .../Responses/ChannelStoragePropsSetResponse.cs | 10 +--------- .../Scripts/ChannelStorageDemoUIController.cs | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs index 07ed6662..196d3b42 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/ChannelsAPI.cs @@ -87,7 +87,7 @@ public class ChannelsAPI : BaseAPI public event Action OnChannelDeleted; public event Action OnChannelUpdated; public event Action OnChannelPropsRejected; - public event Action OnChannelStoragePropsFailedToSet; + public event Action OnChannelStoragePropsFailedToSet; public event Action OnChannelStoragePropsUpdated; private readonly ChannelStorageManager _storageManager = new (); diff --git a/Assets/Talo Game Services/Talo/Runtime/Responses/ChannelStoragePropsSetResponse.cs b/Assets/Talo Game Services/Talo/Runtime/Responses/ChannelStoragePropsSetResponse.cs index 25eaa6d2..e814a3d5 100644 --- a/Assets/Talo Game Services/Talo/Runtime/Responses/ChannelStoragePropsSetResponse.cs +++ b/Assets/Talo Game Services/Talo/Runtime/Responses/ChannelStoragePropsSetResponse.cs @@ -2,18 +2,10 @@ namespace TaloGameServices { - [Serializable] - public class ChannelStoragePropError - { - public string key; - public string error; - public string message; - } - [Serializable] public class ChannelStoragePropsSetResponse { public Channel channel; - public ChannelStoragePropError[] failedProps; + public RejectedProp[] failedProps; } } diff --git a/Assets/Talo Game Services/Talo/Samples/ChannelStorageDemo/Scripts/ChannelStorageDemoUIController.cs b/Assets/Talo Game Services/Talo/Samples/ChannelStorageDemo/Scripts/ChannelStorageDemoUIController.cs index abe713d9..914db7c7 100644 --- a/Assets/Talo Game Services/Talo/Samples/ChannelStorageDemo/Scripts/ChannelStorageDemoUIController.cs +++ b/Assets/Talo Game Services/Talo/Samples/ChannelStorageDemo/Scripts/ChannelStorageDemoUIController.cs @@ -139,7 +139,7 @@ private async void OnChannelStoragePropsUpdated(Channel channel, ChannelStorageP } } - private void OnChannelStoragePropsFailedToSet(Channel channel, ChannelStoragePropError[] errors) + private void OnChannelStoragePropsFailedToSet(Channel channel, RejectedProp[] errors) { foreach (var prop in errors) { From 7015d86723c07e62e9cf72b56e51604e01185541 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sat, 4 Jul 2026 13:14:50 +0100 Subject: [PATCH 10/27] return player alias from OnIdentified event --- .../Talo/Runtime/APIs/PlayersAPI.cs | 30 ++++++++----------- .../Scripts/GameUIController.cs | 4 +-- .../Scripts/GlobalUIController.cs | 2 +- .../Scripts/Players/IdentifyPlayer.cs | 4 +-- .../SavesDemo/Scripts/GlobalUIController.cs | 4 +-- 5 files changed, 20 insertions(+), 24 deletions(-) diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs index 89c50074..b6bbc2a1 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/PlayersAPI.cs @@ -16,7 +16,7 @@ public enum DebouncedOperation Update } - public event Action OnIdentified; + public event Action OnIdentified; public event Action OnIdentificationStarted; public event Action OnIdentificationFailed; public event Action OnIdentityCleared; @@ -43,10 +43,10 @@ private async void OnConnectionRestored() public void InvokeIdentifiedEvent() { - OnIdentified?.Invoke(Talo.CurrentPlayer); + OnIdentified?.Invoke(Talo.CurrentAlias); } - private async Task HandleIdentifySuccess(PlayerAlias alias, string socketToken = "") + private async Task HandleIdentifySuccess(PlayerAlias alias, string socketToken = "") { if (!Talo.IsOffline() && Talo.Socket.IsIdentified()) { @@ -61,10 +61,10 @@ private async Task HandleIdentifySuccess(PlayerAlias alias, string socke InvokeIdentifiedEvent(); - return alias.player; + return alias; } - public async Task Identify(string service, string identifier) + public async Task Identify(string service, string identifier) { OnIdentificationStarted?.Invoke(); @@ -92,27 +92,24 @@ public async Task Identify(string service, string identifier) } } - public async Task IdentifySteam(string ticket, string identityClient = "") + public async Task IdentifySteam(string ticket, string identityClient = "") { if (string.IsNullOrEmpty(identityClient)) { - await Identify("steam", ticket); + return await Identify("steam", ticket); } else { - await Identify("steam", $"{identityClient}:{ticket}"); + return await Identify("steam", $"{identityClient}:{ticket}"); } - - return Talo.CurrentPlayer; } - public async Task IdentifyGooglePlayGames(string authCode) + public async Task IdentifyGooglePlayGames(string authCode) { - await Identify("google_play_games", authCode); - return Talo.CurrentPlayer; + return await Identify("google_play_games", authCode); } - public async Task IdentifyGameCenter( + public async Task IdentifyGameCenter( string publicKeyUrl, byte[] signature, byte[] salt, @@ -132,8 +129,7 @@ string playerId var identifier = Uri.EscapeDataString(JsonUtility.ToJson(payload)); - await Identify("game_center", identifier); - return Talo.CurrentPlayer; + return await Identify("game_center", identifier); } protected override async Task ExecuteDebouncedOperation(DebouncedOperation operation) @@ -203,7 +199,7 @@ public async Task Find(string playerId) return res.player; } - private async Task IdentifyOffline(string service, string identifier) + private async Task IdentifyOffline(string service, string identifier) { PlayerAlias offlineAlias; try diff --git a/Assets/Talo Game Services/Talo/Samples/AuthenticationDemo/Scripts/GameUIController.cs b/Assets/Talo Game Services/Talo/Samples/AuthenticationDemo/Scripts/GameUIController.cs index 09f6eb1f..8d70daa2 100644 --- a/Assets/Talo Game Services/Talo/Samples/AuthenticationDemo/Scripts/GameUIController.cs +++ b/Assets/Talo Game Services/Talo/Samples/AuthenticationDemo/Scripts/GameUIController.cs @@ -19,9 +19,9 @@ private void OnDisable() Talo.Players.OnIdentified -= OnIdentified; } - private void OnIdentified(Player player) + private void OnIdentified(PlayerAlias alias) { - root.Q