(id toolspkg.ToolID, err error)
| 4668 | } |
| 4669 | |
| 4670 | func nativeAutonomyToolError(id toolspkg.ToolID, err error) error { |
| 4671 | if err == nil { |
| 4672 | return nil |
| 4673 | } |
| 4674 | if reason, ok := taskpkg.AutonomyReasonOf(err); ok { |
| 4675 | code, toolReason, cause := autonomyToolErrorCodeAndReason(reason) |
| 4676 | return toolspkg.NewToolError( |
| 4677 | code, |
| 4678 | id, |
| 4679 | taskpkg.RedactClaimTokens(err.Error()), |
| 4680 | fmt.Errorf("%w: %w", cause, err), |
| 4681 | toolReason, |
| 4682 | ) |
| 4683 | } |
| 4684 | switch { |
| 4685 | case errors.Is(err, taskpkg.ErrValidation), |
| 4686 | errors.Is(err, taskpkg.ErrInvalidScopeBinding), |
| 4687 | errors.Is(err, taskpkg.ErrImmutableField): |
| 4688 | return toolspkg.NewToolError( |
| 4689 | toolspkg.ErrorCodeInvalidInput, |
| 4690 | id, |
| 4691 | taskpkg.RedactClaimTokens(err.Error()), |
| 4692 | fmt.Errorf("%w: %w", toolspkg.ErrToolInvalidInput, err), |
| 4693 | toolspkg.ReasonSchemaInvalid, |
| 4694 | ) |
| 4695 | case errors.Is(err, taskpkg.ErrActiveRunLease): |
| 4696 | return toolspkg.NewToolError( |
| 4697 | toolspkg.ErrorCodeConflict, |
| 4698 | id, |
| 4699 | taskpkg.RedactClaimTokens(err.Error()), |
| 4700 | fmt.Errorf("%w: %w", toolspkg.ErrToolConflict, err), |
| 4701 | toolspkg.ReasonAutonomyLeaseAlreadyHeld, |
| 4702 | ) |
| 4703 | case errors.Is(err, taskpkg.ErrPermissionDenied): |
| 4704 | return toolspkg.NewToolError( |
| 4705 | toolspkg.ErrorCodeDenied, |
| 4706 | id, |
| 4707 | taskpkg.RedactClaimTokens(err.Error()), |
| 4708 | fmt.Errorf("%w: %w", toolspkg.ErrToolDenied, err), |
| 4709 | toolspkg.ReasonSessionDenied, |
| 4710 | ) |
| 4711 | case errors.Is(err, taskpkg.ErrInvalidClaimToken), |
| 4712 | errors.Is(err, taskpkg.ErrLeaseExpired): |
| 4713 | return toolspkg.NewToolError( |
| 4714 | toolspkg.ErrorCodeConflict, |
| 4715 | id, |
| 4716 | taskpkg.RedactClaimTokens(err.Error()), |
| 4717 | fmt.Errorf("%w: %w", toolspkg.ErrToolConflict, err), |
| 4718 | toolspkg.ReasonAutonomyLeaseExpired, |
| 4719 | ) |
| 4720 | case errors.Is(err, taskpkg.ErrInvalidStatusTransition), |
| 4721 | errors.Is(err, taskpkg.ErrConflict), |
| 4722 | errors.Is(err, taskpkg.ErrHallucinatedTaskRefs): |
| 4723 | return toolspkg.NewToolError( |
| 4724 | toolspkg.ErrorCodeConflict, |
| 4725 | id, |
| 4726 | taskpkg.RedactClaimTokens(err.Error()), |
| 4727 | fmt.Errorf("%w: %w", toolspkg.ErrToolConflict, err), |
no test coverage detected