Skip to content

chore(deps): every dependency to latest, @tanstack/ai 1.0, chat plane on the library - #625

Draft
omridevk wants to merge 126 commits into
mainfrom
deps-latest
Draft

omridevk wants to merge 126 commits into
mainfrom
deps-latest

Conversation

@omridevk

Copy link
Copy Markdown
Contributor

Draft. Every dependency to its latest release (48h release-age window, @tanstack/* exempt), plus the @tanstack/ai 1.0 migration and the chat plane rebuilt on the library. Follow-up to #612.

In this branch now

  • Site (apps/site, examples): TanStack router/start 1.169 (useSession replaced by getCookie/setCookie), fumadocs, wrangler, mermaid 12 (ELK layout and the neo look are now the default: a visible diagram change), shadcn, radix and more.
  • e2e apps: solid-start 2.1 (the vite 7 split is gone; takes @solidjs/vite-plugin-nitro-2), SvelteKit 3, astro 7.4.2, whiteboard deps.
  • Packages and tooling: changesets v3 (release.yml now uses changesets/action v2 input names; main's workflow was silently ignoring the v1 inputs), fallow 3.36, turbo, bippy 0.7, pretext 1.0, rrweb 2.2, @pierre/diffs 1.6 and the rest.
  • Specs: docs/superpowers/specs/2026-10-29-approvals-deny-and-retry.md, 2026-10-30-conciv-ai-package.md, 2026-10-30-chat-plane-on-library.md.

Coming into this branch

  • vitest 5.0.5, with a local patch carrying only the vitest#11709 fix, and the exact-text locator fixes.
  • Stop race fix: the cancel watch no longer dies when the viewer disconnects.
  • @tanstack/ai 1.0 family. New @conciv/ai package, the only place that imports @tanstack/ai* (enforced by an oxlint rule). New @conciv/chat, which rebuilds the chat plane on the library's run: withPersistence, withLocks, withSandbox, library delivery, requestRunCancel, reconstructChat, discover_tools. Approvals use deny-and-retry. The chat tests become 2 files.
  • oxlint 1.90 / oxfmt 0.75 / eslint-plugin-playwright / eslint-plugin-solid.
  • minimumReleaseAgeExclude trimmed to @tanstack/*, and the unused jazz entries removed.

Held back

  • babel 8: babel-preset-solid and babel-dead-code-elimination need babel 7.
  • unplugin-solid 3: needs Solid 2.
  • @huggingface/transformers 4.3: its ORT wasm exceeds Cloudflare's 25 MiB limit.
  • @agentclientprotocol/sdk 2: ai-acp pins ~1.8.
  • TypeScript 7: rolldown-plugin-dts still erases the core value export.

Local dependency patches (approved)

  • vitest@5.0.5: the vitest#11709 fix.
  • @tanstack/ai-sandbox: workspace-less runs and the projection root.
  • @tanstack/ai-sandbox-local-process: stop kills the stopped run's CLI, SIGTERM then SIGKILL.
  • @tanstack/ai-code-mode: a callId on the code_mode:external_* events.

Before ready

Full gates (frozen install, check-catalog, test, typecheck, lint, format, fallow, changesets, the calm perf gate in Chromium and Firefox), plus the site and widget checked in a browser.

🤖 Generated with Claude Code

omridevk and others added 30 commits October 29, 2026 21:05
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Catalog moves every @tanstack/ai* package to 1.0 (ai, ai-client,
ai-code-mode, ai-persistence 1.0.1; the rest 1.0.0). minimumReleaseAgeExclude
collapses the per-package TanStack entries into one '@tanstack/*' pattern.
claude-agent-sdk 0.3.312, opencode sdk 1.19.4, modelcontextprotocol sdk
1.32.2. @agentclientprotocol/sdk stays on ~1.8.0, the range the bundled
@tanstack/ai-acp 1.0 is built against. The 0.x-keyed patchedDependencies
entries cannot apply to 1.0 and are dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TOOL_CALL_START drops the toolName alias (toolCallName only); a
TOOL_CALL_RESULT error is metadata.tanstack.state 'output-error' and success
carries no state. ApprovalRequestedEvent is gone, so the gate's
approval-requested chunk is typed as a plain CustomEvent. chat(),
useChat() and tool-bridge provisioning now require threadId; stories and
tests pass a stable one. A complete structured-output part carries data.
The queued-message helpers take the readonly queue the client now returns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bumps vitest, @vitest/browser-playwright and @vitest/coverage-v8 from
4.1.12 to 5.0.5. Patches vitest@5.0.5 with the unreleased upstream fix
vitest-dev/vitest#11709 (read cached server modules as utf-8), which
otherwise crashes error formatting with code.charCodeAt (#11682).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
TanStack router/start set to latest (react-start 1.169.4, react-router 1.170.46,
router-cli 1.167.46, router-plugin 1.168.48, solid-router 1.170.43, react-form 1.33.5,
redact 0.2.3). Start 1.169 removed the built-in useSession; the try pairing token and
dismissal flag move to Start's getCookie/setCookie helpers (token zod-validated as a uuid).
redact 0.2's vite plugin now owns the react-dom/server and use-sync-external-store aliases,
so the e2e app keeps only the static entries it does not cover.

Site: fumadocs-core/ui 16.17.8, fumadocs-mdx 15.4.10, radix-ui 1.8.1, shadcn 4.23.0,
tailwind-merge 3.7.0, takumi-js 2.18.2, wrangler 4.154.0, @cloudflare/vite-plugin 1.65.0,
lenis 1.3.27, geist 5.3.0, magic-move 4.5.0, mermaid 12.2.0 (also ui-kit-chat).
@huggingface/transformers held at 4.2.x: every 4.3 pulls onnxruntime-web 1.31 whose
asyncify wasm is 25.6 MiB, over the Workers 25 MiB asset limit, which fails prerender.
nextjs example: eslint 10.13.0, eslint-config-next 16.4.3.

mermaid 12 bundles elkjs; the extension-testkit host's UnoCSS pipeline scanned it from
node_modules and emitted an unparsable selector, so node_modules is excluded there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
e2e/solid-start: @solidjs/start 2.1.0, @solidjs/router 1.0.0, @solidjs/vite-plugin-nitro-2 0.3.2;
start 2.1 peers vite ^8 so the app now takes vite from the catalog.
e2e/svelte: @sveltejs/kit 3.1.0, adapter-auto 8.0.0, vite-plugin-svelte 7.3.1, svelte 5.57.3,
svelte-check 4.7.7. e2e/astro: astro 7.4.2 (engines follow astro's >=22.23.4).
whiteboard: @excalidraw/mermaid-to-excalidraw 3.0.0, @takumi-rs/core + helpers 2.18.2,
@libsql/client 0.18.0, cytoscape 3.34.4, drizzle-orm 0.45.4, drizzle-kit 0.31.11.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… vite exemption

SvelteKit 3 removed $lib: the app declares #lib in package.json imports and its tsconfig
extends $app/tsconfig. astro 7.4 auto-backgrounds astro dev when it detects an AI agent,
so the playwright webServer exited early; --ignore-lock keeps it a foreground one-off
server. solid-start no longer needs its own vite line, so check-catalog drops that
exemption and its test exercises the remaining whiteboard drizzle exemption.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… latest

turbo 2.11.10, @j178/prek 0.5.7, @arethetypeswrong/cli 0.18.5, fallow 3.36.0 (action pin
moved to the v3.36.0 commit), @changesets/cli 3.0.3, @changesets/changelog-github 1.0.1,
@changesets/parse 1.0.0, execa 10.2.1, js-yaml 5.5.0 (ships its own types, @types/js-yaml
dropped), minimatch 10.2.6, @ast-grep/napi 0.51.0, nypm 0.6.12, @tanstack/intent 0.5.6.

changesets 3: privatePackages.version defaults to false now, set it back to true so private
@conciv/* stay in the fixed group; 'changeset tag' is 'git-tag'; publish passes
--no-git-checks itself and rejects unknown flags; changesets/action v2 inputs renamed
(version-script, publish-script, commit-message, pr-title). intent 0.5 requires reference
files to be linked from SKILL.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…string, unplugin, chokidar)

babel-dead-code-elimination 2.0.0, babel-preset-solid 1.9.16, magic-string 1.4.5,
unplugin-solid 2.0.0, chokidar 6.0.0, unplugin 3.6.0, launch-editor 2.14.2.

Held: @babel/core and @babel/preset-typescript stay 7.29.7 (babel-dead-code-elimination 2
and babel-preset-solid still build on babel 7). unplugin-solid stays on 2.0.0 (3.0 needs
Solid 2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… rrweb 2.2, pretext 1.0)

@pierre/diffs 1.6.2: the third File/FileDiff constructor argument is now the owner render
callback instead of a container-managed boolean; the Solid wrappers pass a callback that
re-renders with the current props. @tanstack/solid-pacer 0.24.0. @tanstack/hotkeys 0.18.0 and
@tanstack/solid-hotkeys 0.17.0: RawHotkey is RawHotkeyChord and a parsed chord is already a
registerable chord. rrweb, @rrweb/types, @rrweb/rrweb-plugin-console-record, rrweb-player 2.2.0,
js-beautify 2.0.3, @chenglou/pretext 1.0.0, fonts, @zag-js/json-tree-utils and focus-visible
1.47.0, @floating-ui/dom 1.8.0, @chromatic-com/storybook 5.6.0, @testing-library/dom 10.4.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bippy 0.7 dropped getFiberStack, getNearestHostFiber, getTimings and getFallbackOwnerStack.
The react bridge walks the return chain itself, finds host and composite fibers with
traverseFiber (descending then ascending, as getNearestHostFiber did), and uses the renamed
getFallbackParentStack. The render tracker computes self time from actualDuration directly.
Lockfile for the whole lane.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…yncRender

syncRender returns the owner render callback the 1.6 File/FileDiff constructors take, so a
rerender the instance asks for renders the current payload from the one place that already
owns rendering, instead of an untracked props read inside each wrapper.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@chenglou/pretext 1.0 rejects a font string that is not a canvas font. A detached viewport
has no computed style, so the probe read an empty font and pretext threw; 0.0.8 measured that
with the canvas default instead. The estimator now returns no estimate until the viewport is in
the document, so metrics always come from real styles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… on 1.0

1.0 still declares the projection capability on every withSandbox run while
providing it only for a workspace, so each workspace-less turn ended in a
RUN_ERROR from the engine's provides check, and still builds the projection
root through resolveHarnessCwd. The local-process provider still forgets its
handles, so destroy(id) cannot kill the CLI it spawned. Both 0.x patches are
ported to the 1.0 dist; the stdin error-listener hunk is dropped because 1.0
ships it (src/handle.ts:918).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
rrweb 2.2 creates the replay iframe sandboxed and throws when the root is not in a document.
The saved-recording player mounted from a ref callback, before the dialog attached it, so the
replay never rendered. Both players now build through one whenConnected step, and the style
scope is read once connected so rrweb's injected styles are found in the right root. The live
tick feeds events through one helper and scrub steps come from a lookup, which keeps both
callbacks under the complexity gate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
toHaveTextContent is now strict equality: partial and RegExp checks move
to toMatchTextContent, or assert the full text where it is stable.
Locators match exactly by default: substring getByText calls pass
exact: false. packages/extensions/page sets its React JSX transform via
oxc. Failure screenshots and attachments now land in .vitest/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	pnpm-lock.yaml
# Conflicts:
#	pnpm-lock.yaml
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ack AI docs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ssion card

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…testkit subpaths

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	packages/ui-kit-chat/test/virtual-scroll-coverage.browser.test.tsx

Co-authored-by: omridevk <9701896+omridevk@users.noreply.github.com>
omridevk and others added 27 commits October 31, 2026 02:24
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…get the patches

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the @conciv/ai changeset

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…alm approval pause checks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pes resolve

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rowser suite

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lves, delivery split

An ask recorded outside a chat turn stores a one-time grant only that caller's retry consumes, and
permissionDecision tells the widget whether to post the retry message. MCP asks share admitCall.
settle survives a throwing end hook. Socket and SSE delivery move to delivery.ts. Run lifecycle
reaches open panes over the push channel, and an adopted native session keeps its derived title.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ovals

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Other e2e runs leave AGENTS.md and .conciv inside the app directories, so the clone
inherited them depending on task order. Copying git-tracked files replaces the skip list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
next dev --webpack only compiles instrumentation.ts when its watcher has
already reported the file by the time the server prepares. A scan that lags
by about 80ms leaves instrumentation.js unemitted, Next memoizes the miss,
and register() never runs for the process, so the engine never starts.
Emit the entry in the first server build, which Next awaits before prepare.

The packed spec gains a cell that delays the watcher's stat of
instrumentation.ts, and the engine timeout now reports whether
.next/dev/server/instrumentation.js exists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The server no longer broadcasts run lifecycle over the push channel. When a
run starts it publishes one session-level conciv.session-run {runId} event.
A client that did not start that run re-hydrates the transcript and tails the
run through joinRun on its live subscription, so content, lifecycle and
errors all come from the run log.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…transcript

Stop then refresh read the transcript between the run turning aborted and
its end hook advancing the import anchor, so the stopped prompt was imported
again as a second user message. A run now stays live until its end hook
finishes, and hydrate waits for settling runs before syncing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… works after a session switch

The panel route passes chat() into one long-lived ChatProvider, which captured
the first chat it saw. After New session the queue strip showed the new chat's
queue but Remove cancelled on the old chat, so the item still ran. The provider
now keys its scope on the chat it is given.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The user turn mapped only document parts to a card, so an image the user
sent rendered nothing in the thread. Images now take the same attachment
card, which falls back to the image tile.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
compact stored the raw thread length, but the widget gets the thread with a
run's assistant segments joined, so after any tool turn the marker pointed
past the end and the compact divider never drew.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r the complexity gate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
withPersistence throttles streaming snapshots to about once a second and does
not write the remainder on abort, so a stopped turn rehydrated short. The
conciv-turn middleware follows the streamed assistant text and, on abort,
rewrites that message in the library's message store. Stop now returns once
the run has settled, so the hydrate that follows reads the flushed text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mermaid rendered in its own lavender default. The diagram now uses mermaid's
base theme with themeVariables resolved from the --chat-* tokens at render
time, so light and dark both follow the widget scheme. No new tokens.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A CLI ask carries only provider and toolName beside its title, so the strip's
first-string-argument target read "claude-code". The strip now renders the
ask's title.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…atch

matchingItems sorted only by group, and the listbox kept a stale highlight
while the query narrowed, so /context + Enter ran /21st-ui-build. Matches now
rank exact name, name prefix, name contains, then description, and the
listbox highlights the first row whenever its collection changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ore its first chunk

The bar keyed busy off the stream's RUN_STARTED (sessionGenerating), which a
CLI adapter emits only once the CLI prints; the thread already keyed off the
server run lifecycle. The bar now also counts sessionRunning, so a compact run
shows RUNNING from start to end. The scripted harness gains a start gate to
hold a run before RUN_STARTED.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er the complexity gate

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants