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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .agents/skills/uloop-compile/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ Returns JSON:
- `ErrorCount`: number or null
- `WarningCount`: number or null
- `Message`: string

## Troubleshooting

If compile times out or Unity stops responding to uloop while the Editor looks idle, check whether Unity is showing **API Update Required** / **Script Updating Consent**. Ask the user to choose Go Ahead or No — never auto-dismiss that modal. Interactive Editors have no public uloop/Unity API to suppress it.
4 changes: 4 additions & 0 deletions .claude/skills/uloop-compile/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ Returns JSON:
- `ErrorCount`: number or null
- `WarningCount`: number or null
- `Message`: string

## Troubleshooting

If compile times out or Unity stops responding to uloop while the Editor looks idle, check whether Unity is showing **API Update Required** / **Script Updating Consent**. Ask the user to choose Go Ahead or No — never auto-dismiss that modal. Interactive Editors have no public uloop/Unity API to suppress it.
4 changes: 4 additions & 0 deletions Packages/src/Editor/FirstPartyTools/Compile/Skill/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,7 @@ Returns JSON:
- `ErrorCount`: number or null
- `WarningCount`: number or null
- `Message`: string

## Troubleshooting

If compile times out or Unity stops responding to uloop while the Editor looks idle, check whether Unity is showing **API Update Required** / **Script Updating Consent**. Ask the user to choose Go Ahead or No — never auto-dismiss that modal. Interactive Editors have no public uloop/Unity API to suppress it.
6 changes: 6 additions & 0 deletions cli/common/errors/error_editor_unresponsive.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ package clierrors

import "github.com/hatayama/unity-cli-loop/common/unityipc"

// ApiUpdateConsentModalNextAction is shared recovery guidance when the Editor main
// thread may be blocked by Unity's API Update / Script Updating Consent modal.
// Interactive Editors have no public suppress path.
const ApiUpdateConsentModalNextAction = "The Editor may be showing an API Update / Script Updating Consent modal; check the Unity window and ask the user what to choose — never auto-dismiss it."

func connectionAttemptCause(err *unityipc.ConnectionAttemptError) string {
if err == nil {
return ""
Expand All @@ -24,6 +29,7 @@ func unityEditorUnresponsiveError(err *unityipc.EditorUnresponsiveError, context
Command: context.Command,
NextActions: []string{
"Check Unity for a modal dialog or long editor operation that is blocking the Editor main thread.",
ApiUpdateConsentModalNextAction,
"Run `uloop focus-window` if Unity is hidden behind another window.",
"Close the modal dialog or wait for the Editor operation to finish, then retry the command.",
},
Expand Down
3 changes: 3 additions & 0 deletions cli/common/errors/error_envelope_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ func TestClassifyEditorUnresponsiveError(t *testing.T) {
if !strings.Contains(joinedActions, "modal dialog") {
t.Fatalf("next actions should mention modal dialog: %#v", cliErr.NextActions)
}
if !strings.Contains(joinedActions, "API Update") || !strings.Contains(joinedActions, "never auto-dismiss") {
t.Fatalf("next actions should mention API Update consent guidance: %#v", cliErr.NextActions)
}
if !strings.Contains(joinedActions, "uloop focus-window") {
t.Fatalf("next actions should mention focus-window: %#v", cliErr.NextActions)
}
Expand Down
2 changes: 1 addition & 1 deletion cli/dispatcher/shared-inputs-stamp.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"schemaVersion": 1,
"sharedInputsHash": "8b248a96bc8a1cbc8312c7f77da08d9ef8903680"
"sharedInputsHash": "fbbc3c34d301331c513155ea2bab2a33a4b5de97"
}
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,7 @@ func TestCompileWaitTimeoutError(t *testing.T) {
expectedActions := []string{
"Run a light command such as `uloop get-logs --max-count 1` to check whether Unity is responsive before treating this as a freeze.",
"Unity-side compile continues after this timeout; retry `uloop compile` — the result remains retrievable for about 10 more minutes without `uloop launch -r`.",
clierrors.ApiUpdateConsentModalNextAction,
"Only if Unity does not respond to any command, restart it with `uloop launch -r`.",
}
if len(cliErr.NextActions) != len(expectedActions) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ func compileWaitTimeoutError(projectRoot string) clierrors.CLIError {
NextActions: []string{
"Run a light command such as `uloop get-logs --max-count 1` to check whether Unity is responsive before treating this as a freeze.",
"Unity-side compile continues after this timeout; retry `uloop compile` — the result remains retrievable for about 10 more minutes without `uloop launch -r`.",
clierrors.ApiUpdateConsentModalNextAction,
"Only if Unity does not respond to any command, restart it with `uloop launch -r`.",
},
}
Expand Down
2 changes: 1 addition & 1 deletion cli/project-runner/shared-inputs-stamp.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"schemaVersion": 1,
"sharedInputsHash": "8c336555a69a3cf485147e5669ce8bb4d3fe2982"
"sharedInputsHash": "581697442cd42c4467c8a80ab3bce98f403890c6"
}