Skip to content

spike: CopilotKit 1.74 / AG-UI 0.0.59 and Tauri 2.12 adoption review #67

Closed

Description

@bravew

Why

#61 moved CopilotKit 1.69 → 1.74, @ag-ui/* 0.0.58 → 0.0.59, and Tauri 2.11 → 2.12. The release notes were too thin for concrete issues. CopilotKit 1.74's "stop per-message state cloning and the virtual-scroll tug of war" (#7243) might let us remove local workarounds.

Scope (research only, timeboxed, no code changes)

  • Read the CopilotKit 1.70–1.74 notes against src/shared/providers/agui-provider.tsx and src-api/src/app/api/copilotkit.ts.
  • Read the Tauri 2.12 core and plugin notes against src-tauri/ and @tauri-apps/plugin-* usage.
  • Output: a comment listing follow-up issues to create, or "nothing to adopt", with reasons.

Plan: dev-doc/plan/2026-09-27-post-upgrade-sdk-feature-adoption.md (the section for this issue ID). The plan's parallel-agent protocol applies: one worktree and branch off main per issue, one PR that closes it, a regression test, only edited files formatted, and pnpm validate before the PR. Don't bump any dependency unless the issue says to.

Activity

  1. bravew commented on Sep 28, 2026

    @bravew
    OwnerAuthor

    Spike findings

    CopilotKit 1.74 — nothing to adopt. Upstream fix #7243 ("stop per-message state cloning and virtual-scroll tug of war") lives entirely inside @copilotkit/react-ui's CopilotChatMessageView/CopilotChatView. Neumar has no @copilotkit/react-ui dependency at all (package.json only lists @copilotkit/react-core and @copilotkit/shared) and no usage of those components — the chat UI is fully custom on useAgent() + a Zustand store. The cloneMessages/cloneFiles calls in thread-store.ts and the isRunning-tracking workaround in agui-provider.tsx are Neumar-authored defensive code, unrelated to the upstream bug class #7243 fixes.

    Side note (environment, not code): local node_modules resolved @copilotkit/react-core to 1.69.0 and @ag-ui/client to 0.0.58 despite package.json/lockfile correctly pinning 1.74.0/0.0.59 — a stale install from before PR #61, not a code issue. Re-running pnpm install --frozen-lockfile resolves it.

    Tauri 2.12 — one concrete follow-up, filed as #86. Cargo.lock still resolves tray-icon/muda to versions predating 2.12.0's fix for tray left-click being swallowed on macOS 27 (upstream tauri-apps/tauri#16035) — the transitive bump was never picked up after the Cargo.toml version bump. Other 2.12 items checked and ruled out: the new activation API doesn't match Neumar's existing custom NSApplication.activateIgnoringOtherApps use case; the exit() API doesn't replace plugin-process's relaunch() usage; the asset:// fixes are already active automatically via the core version bump, no lockfile gap there.

    No further follow-up issues from this spike.

  2. bravew commented on Sep 28, 2026

    @bravew
    OwnerAuthor

    Research only. No CopilotKit or Tauri code change comes out of this.

    CopilotKit 1.70–1.74 (@copilotkit/react-core is already ^1.74.0). 1.70–1.73 are React Native, Vue, BuiltInAgent, and inspector work. We use useAgent from react-core/v2 in src/shared/providers/agui-provider.tsx and do not render CopilotKit's message list. 1.74's "stop per-message state cloning and the virtual-scroll tug of war" (#7243) is inside that list. Our virtualized ChatPanel and the Zustand mirror are our own and do not duplicate that clone loop, so there is nothing to delete.

    The local workaround that stays: agui-provider.tsx does not copy agent.isRunning, because the client can leave it true after RUN_FINISHED. The 1.70–1.74 notes do not say that flag was fixed.

    AG-UI 0.0.59 is already the installed @ag-ui/client and @ag-ui/core. No caller in src-api/src/app/api/copilotkit.ts is waiting on a 0.0.59 API.

    Tauri 2.12 is already the tauri pin. The one fix that was not actually shipping is tray-icon 0.25 / muda 0.20 for the macOS 27 left-click menu (#16035). Cargo.lock was gitignored, so a local cargo update never reached other builds. That lock is now tracked in #102 and closes #86.

    The rest of the 2.12 notes do not map onto this app: Liquid Glass and appDirectoriesOverride are new opt-in APIs and we do not use window effects or a portable data root; the Android activity fixes do not apply to the desktop shell; exit without plugin-process is redundant because we already depend on that plugin. No further follow-up issues.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:frontendFrontend (src/)documentationImprovements or additions to documentation

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions