Uncaught BridgeAPIError with Custom UI on local server

I am trying to update my forge app to use the new runtime before support for the sandbox runtime (which I’m currently using) is discontinued. The app has been running for several years but has not been updated recently. Now when I launch the browser, the page doesn’t load, giving me this error in the console:
Uncaught BridgeAPIError: Unable to establish a connection with the Custom UI bridge.
When I launch the forge tunnel I get the following warning but no errors:

export 'properties' (imported as 'properties') was not found in '@forge/api' (possible exports: ExternalEndpointNotAllowedError, FUNCTION_ERR, FetchError, FilterConditions, HttpError, InvalidWorkspaceRequestedError, NeedsAuthenticationError, NotAllowedError, ProductEndpointNotAllowedError, ProxyRequestError, RequestProductNotAllowedError, SortOrder, WhereConditions, __esModule, __fetchProduct, __getRuntime, __requestAtlassianAsApp, __requestAtlassianAsUser, asApp, asUser, assumeTrustedRoute, authorize, bindInvocationContext, createRequestStargateAsApp, default, fetch, getAppContext, invokeRemote, isExpectedError, isForgePlatformError, isHostedCodeError, privacy, requestBitbucket, requestConfluence, requestJira, route, routeFromAbsolute, startsWith, storage, webTrigger)

I am using the nodejs20.x runtime. I have upgraded all the Forge packages and vite to the latest versions. I am running node v20.15.1 and using vite to build my site. Here is my manifest:

modules:
  macro:
    - key: jira-report
      resource: main
      resolver:
        function: resolver
      title: Skillsoft Jira Report
      description:
        Retrieves tickets from a JQL query and lets you filter them, group
        them by category, sort them, and get totals for story points.
      config:
        function: config-function-key
  function:
    - key: resolver
      handler: index.handler
    - key: config-function-key
      handler: index.config
resources:
  - key: main
    path: static/jira-report/build
    tunnel:
      port: 8080
app:
  id: ari:cloud:ecosystem::app/xxxxxxxxxxxxxxxxxxxxxxxxxxxx
  runtime:
    name: nodejs20.x
permissions:
  content:
    styles:
      - unsafe-inline
  scopes:
    - read:jira-work
    - write:jira-work
    - read:confluence-props
    - write:confluence-props
  external:
    images:
      - 'skillsoft-reporting.atlassian.net'
      - 'skillsoftdev.atlassian.net'

Please help! I don’t want my app to crash for my users when the runtime goes away on Friday.