chore: import upstream snapshot with attribution
Changesets / Create Version PR (push) Waiting to run
Code Quality / Oxlint + Oxfmt (push) Waiting to run
Code Quality / Template Sync (push) Waiting to run
Code Quality / Build Changed Packages (push) Waiting to run
Code Quality / Test Changed Packages (push) Waiting to run
Deploy Expo Example / Deploy Production (push) Waiting to run
Deploy Ink Example / Deploy Production (push) Waiting to run
Python Tests / pytest (assistant-stream, 3.10) (push) Waiting to run
Python Tests / pytest (assistant-stream, 3.12) (push) Waiting to run
Python Tests / pytest (assistant-ui-sync-server-api, 3.10) (push) Waiting to run
Python Tests / pytest (assistant-ui-sync-server-api, 3.12) (push) Waiting to run
Deploy Shadcn Registry / Deploy Production (push) Waiting to run
Template Metrics / LOC + Bundle Size (push) Waiting to run

This commit is contained in:
wehub-resource-sync
2026-07-13 13:40:13 +08:00
commit e30e75b5d4
3893 changed files with 533074 additions and 0 deletions
+8
View File
@@ -0,0 +1,8 @@
# Changesets
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-google-adk": patch
---
fix: clarify invalid ADK proxy request body errors
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ag-ui": patch
---
feat: auto-cancel pending client-side tool calls on send, edit, and reload (opt out with autoCancelPendingToolCalls: false)
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
fix: preserve direct file parts in AI SDK message creation
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
fix: preserve image media types when creating AI SDK messages
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
docs: move the resumable streams cross-links into jsdoc so the api-reference generator preserves them
@@ -0,0 +1,5 @@
---
"@assistant-ui/react": patch
---
feat: render prop support for AssistantModalPrimitive Trigger, Anchor, and Content
@@ -0,0 +1,5 @@
---
"@assistant-ui/core": patch
---
feat: surface the upload failure reason on failed attachment status
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/mcp-docs-server": patch
---
perf: cache the docs and examples file listings
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
feat: expose chat runtime resume errors
+5
View File
@@ -0,0 +1,5 @@
---
"assistant-ui": patch
---
fix: clarify MCP install config parse errors
@@ -0,0 +1,5 @@
---
"assistant-ui": patch
---
cli: register the `with-resumable-stream` example so `npx assistant-ui create -e with-resumable-stream` resolves instead of failing with "Unknown example".
+7
View File
@@ -0,0 +1,7 @@
---
"assistant-ui": patch
---
fix: strip every workspace path alias when materializing a template
the create flow removed monorepo tsconfig aliases by a fixed key list, so newer keys such as @/components/ui/base/* survived into scaffolded projects as dangling entries; any entry whose target points into packages/ui/ is now stripped as well.
@@ -0,0 +1,5 @@
---
"assistant-ui": patch
---
fix: clarify assistant-ui update package.json parse errors
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/cloud-ai-sdk": patch
---
feat: widen AI SDK peer range to allow v7 alongside v6 (ai@^6 || ^7, @ai-sdk/react@^3 || ^4)
+5
View File
@@ -0,0 +1,5 @@
---
"assistant-cloud": patch
---
feat: expose CloudAPIError with the HTTP status on failed requests
@@ -0,0 +1,5 @@
---
"@assistant-ui/core": patch
---
fix(core): log the swallowed CloudFileAttachmentAdapter upload error instead of discarding it
@@ -0,0 +1,5 @@
---
"@assistant-ui/core": patch
---
fix(core): CloudFileAttachmentAdapter now fails uploads that return an HTTP error status instead of attaching a dead link
@@ -0,0 +1,5 @@
---
"assistant-cloud": patch
---
fix: handle empty successful Cloud API responses
+6
View File
@@ -0,0 +1,6 @@
---
"@assistant-ui/core": patch
"@assistant-ui/react": patch
---
fix: preserve user attachments in Cloud history
+5
View File
@@ -0,0 +1,5 @@
---
"assistant-cloud": patch
---
fix: await auth headers when initializing Assistant Cloud auth
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react": patch
---
feat: add compact mode to ComposerPrimitive.Root
@@ -0,0 +1,5 @@
---
"@assistant-ui/core": patch
---
fix: restore composer text and attachments when an attachment upload fails during send
+16
View File
@@ -0,0 +1,16 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.0.1/schema.json",
"changelog": [
"@assistant-ui/x-changelog",
{
"repo": "assistant-ui/assistant-ui"
}
],
"access": "public",
"privatePackages": {
"version": false
},
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"onlyUpdatePeerDependentsWhenOutOfRange": true
}
}
@@ -0,0 +1,6 @@
---
"@assistant-ui/react-data-stream": patch
"assistant-stream": patch
---
feat: detect data stream protocol from response headers
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-devtools": patch
---
fix: resolve the tailwind cli entry explicitly so pnpm install completes on windows
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ink": patch
---
feat: track hunkIndex on parsed diff lines
+5
View File
@@ -0,0 +1,5 @@
---
"assistant-ui": patch
---
fix(cli): doctor now detects duplicate assistant-ui packages in pnpm node_modules layouts
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/x-generative-compiler": patch
---
fix: recognize exported same-file toolkit fragments in toolkit spreads
+4
View File
@@ -0,0 +1,4 @@
---
"@assistant-ui/react-data-stream": patch
---
fix: include current assistant message in toLanguageModelMessages to properly send frontend tool results
@@ -0,0 +1,5 @@
---
"assistant-stream": patch
---
fix: accept the AI SDK v5+ `delta` text chunks, `source-url`, flat `file`, and bare lifecycle chunks in UIMessageStreamDecoder
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
feat: export a FrontendTools type for typing uploaded frontend tool definitions.
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-native": patch
---
fix(react-native): show composer scrollbar at max height
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-generative-ui": patch
---
fix: serialize a model-provided $key as the JSX key attribute
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-generative-ui": patch
---
fix: expose stable generative UI keys in the present schema
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-data-stream": patch
---
feat: detect UI message stream protocol from response headers
@@ -0,0 +1,6 @@
---
"@assistant-ui/react-langgraph": patch
"@assistant-ui/react-langchain": patch
---
fix: emit url source blocks for http(s) file attachment data instead of mislabeling it base64
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-langgraph": patch
---
fix: serialize runs in useLangGraphRuntime so a frontend tool result resume never overlaps the run that emitted the tool call. isRunning stays true across the seam, cancel stops the whole turn and drops the queued resume, and a run that aborts or errors drops the sends queued behind it.
@@ -0,0 +1,5 @@
---
"@assistant-ui/core": patch
---
fix: ignore malformed local thread storage
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react": patch
---
fix: add MCP App host request error context
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-mcp": patch
---
fix: ignore malformed persisted MCP custom servers
@@ -0,0 +1,5 @@
---
"@assistant-ui/mcp-docs-server": patch
---
feat: return structuredContent from the docs, examples, and search tools
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/mcp-docs-server": patch
---
feat: surface doc title and excerpt on assistantUIDocs responses
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-mcp": patch
---
fix: clarify MCP OAuth callback failures
+9
View File
@@ -0,0 +1,9 @@
---
"@assistant-ui/core": patch
"@assistant-ui/react": patch
"@assistant-ui/react-ai-sdk": patch
"@assistant-ui/react-ink": patch
"@assistant-ui/react-native": patch
---
feat: support prefixed MCP toolkit tool names
@@ -0,0 +1,8 @@
---
"@assistant-ui/core": patch
"@assistant-ui/react": patch
"@assistant-ui/react-native": patch
"@assistant-ui/react-ink": patch
---
feat: support disabled MCP toolkit entries
+9
View File
@@ -0,0 +1,9 @@
---
"@assistant-ui/core": patch
"@assistant-ui/react": patch
"@assistant-ui/react-ai-sdk": patch
"@assistant-ui/react-ink": patch
"@assistant-ui/react-native": patch
---
feat: support disabled MCP toolkit tools
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
feat: add MCP toolkit entry names to connection and tool-listing errors
+38
View File
@@ -0,0 +1,38 @@
---
"@assistant-ui/agent-launcher": patch
"assistant-stream": patch
"assistant-ui": patch
"@assistant-ui/cloud-ai-sdk": patch
"assistant-cloud": patch
"@assistant-ui/core": patch
"@assistant-ui/eve": patch
"heat-graph": patch
"@assistant-ui/mcp-docs-server": patch
"@assistant-ui/metro": patch
"@assistant-ui/next": patch
"@assistant-ui/react-a2a": patch
"@assistant-ui/react-data-stream": patch
"@assistant-ui/react-devtools": patch
"@assistant-ui/react-google-adk": patch
"@assistant-ui/react-hook-form": patch
"@assistant-ui/react-ink-markdown": patch
"@assistant-ui/react-ink": patch
"@assistant-ui/react-langchain": patch
"@assistant-ui/react-langgraph": patch
"@assistant-ui/react-lexical": patch
"@assistant-ui/react-markdown": patch
"@assistant-ui/react-mcp": patch
"@assistant-ui/react-native": patch
"@assistant-ui/react-o11y": patch
"@assistant-ui/react-opencode": patch
"@assistant-ui/react-pi": patch
"@assistant-ui/react": patch
"safe-content-frame": patch
"@assistant-ui/tap": patch
"tw-shimmer": patch
"@assistant-ui/vite": patch
"@assistant-ui/x-buildutils": patch
"@assistant-ui/x-generative-compiler": patch
---
chore: update dependencies
@@ -0,0 +1,12 @@
---
"@assistant-ui/core": patch
"@assistant-ui/react": patch
"@assistant-ui/react-ai-sdk": patch
---
feat: preserve providerMetadata on text, reasoning, and tool-call message parts
The AI SDK message converter already kept `providerMetadata` on source parts but
dropped it on text, reasoning, and tool-call parts (where the AI SDK surfaces it
as `callProviderMetadata`). Provider- or app-scoped metadata such as agent
attribution now survives the conversion to assistant-ui messages.
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
refactor: use addToolOutput instead of the deprecated addToolResult for tool results
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
fix: guard converters against missing parts and mediaType on non-spec payloads
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
feat: upgrade to AI SDK v7 (ai@^7, @ai-sdk/react@^4, @ai-sdk/mcp@^2); pin the previous release to stay on v6
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-data-stream": patch
---
feat: widen @ai-sdk/provider range to allow the v7 line alongside v6 (^3 || ^4)
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-langgraph": patch
---
fix: drop a frontend tool result for a call that was already answered instead of releasing it as a resume run. A slow frontend tool resolving after a new turn auto-cancelled its dangling call no longer sends a second tool message to the graph.
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-langgraph": patch
---
fix: preserve attachments on the user message state in useLangGraphRuntime
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-mcp": patch
---
fix: ignore malformed persisted MCP auth state
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-mcp": patch
---
feat: expose MCP resource listing on connected servers
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-native": patch
---
fix: forward ThreadPrimitive.Messages refs to the underlying FlatList
@@ -0,0 +1,5 @@
---
"@assistant-ui/react": patch
---
feat: support opt-in quote regions for the selection toolbar
+6
View File
@@ -0,0 +1,6 @@
---
"@assistant-ui/core": patch
"@assistant-ui/react-ai-sdk": patch
---
fix: make the default attachment adapter work without FileReader (Node, react-ink, SSR) by sharing a single getFileDataURL from @assistant-ui/core/internal, whose base64 fallback chunks large inputs and works on runtimes without Buffer
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/mcp-docs-server": patch
---
feat: expose playground template tools through the MCP docs server
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ag-ui": patch
---
feat: steer-away cancels pending client-side tool calls
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ink": patch
---
refactor: move useTextBuffer beside TextInput
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ink": patch
---
fix: preserve the TextInput cursor when a controlled owner corrects an edit
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ink": patch
---
feat: add standalone TextInput primitive
+5
View File
@@ -0,0 +1,5 @@
---
"@assistant-ui/core": patch
---
fix: include thread ids in thread list runtime errors
+6
View File
@@ -0,0 +1,6 @@
---
"@assistant-ui/x-buildutils": patch
"@assistant-ui/metro": patch
---
chore: update TypeScript to 7
@@ -0,0 +1,5 @@
---
"@assistant-ui/react-ai-sdk": patch
---
fix: validate frontend tool schemas before conversion
+41
View File
@@ -0,0 +1,41 @@
---
"@assistant-ui/agent-launcher": patch
"assistant-stream": patch
"assistant-ui": patch
"@assistant-ui/cloud-ai-sdk": patch
"assistant-cloud": patch
"@assistant-ui/core": patch
"@assistant-ui/eve": patch
"@assistant-ui/gorp": patch
"heat-graph": patch
"@assistant-ui/mcp-docs-server": patch
"@assistant-ui/metro": patch
"@assistant-ui/next": patch
"@assistant-ui/react-a2a": patch
"@assistant-ui/react-ag-ui": patch
"@assistant-ui/react-ai-sdk": patch
"@assistant-ui/react-devtools": patch
"@assistant-ui/react-generative-ui": patch
"@assistant-ui/react-google-adk": patch
"@assistant-ui/react-ink-markdown": patch
"@assistant-ui/react-ink": patch
"@assistant-ui/react-langchain": patch
"@assistant-ui/react-langgraph": patch
"@assistant-ui/react-lexical": patch
"@assistant-ui/react-markdown": patch
"@assistant-ui/react-mcp": patch
"@assistant-ui/react-native": patch
"@assistant-ui/react-o11y": patch
"@assistant-ui/react-opencode": patch
"@assistant-ui/react-pi": patch
"@assistant-ui/react-streamdown": patch
"@assistant-ui/react": patch
"safe-content-frame": patch
"@assistant-ui/store": patch
"@assistant-ui/tap": patch
"@assistant-ui/vite": patch
"@assistant-ui/x-buildutils": patch
"@assistant-ui/x-generative-compiler": patch
---
chore: update dependencies
+5
View File
@@ -0,0 +1,5 @@
---
description: "GitButler CI review flow: implement, PR, monitor CI, address reviews, merge"
---
Invoke the `butflow` skill.
+60
View File
@@ -0,0 +1,60 @@
---
name: butflow
description: Use when the user asks for butflow mode, wants GitButler-driven implementation flow, or asks to implement a change through PR creation, CI monitoring, review-thread resolution, and merge in the assistant-ui monorepo.
---
# Butflow
Implement the change, open a PR through GitButler, monitor CI and reviews, address feedback, and merge when allowed. Multiple agents may run concurrently, so keep one branch per change group and avoid mixing unrelated work.
## Flow
1. Run `but pull`.
2. Implement the requested change.
3. Validate with the repo-appropriate lint/build/test commands. For assistant-ui, default to `pnpm lint` and `pnpm build` unless the task clearly warrants narrower checks.
4. Create a GitButler branch with `but branch new <branch-name>`.
5. Stage only the intended files into that branch with `but stage <file-or-hunk> <branch>`. If a stage id is ambiguous, run `but status -j` and use the longer id or file path.
6. Commit with `but commit <branch> --only -m "<message>"`.
7. Push with `but push <branch>`.
8. Open the PR with `gh pr create --title "<title>" --body "<body>"` or another non-interactive form such as `--fill`.
9. Schedule a 2-minute recurring monitor using the environment's native automation mechanism. In Claude Code, use the available `schedule` or `loop` skill.
10. Monitor checks and review threads until the merge gate is satisfied, then merge with `gh pr merge <n> --squash --admin`.
Add a patch changeset only if a published package changed. Private packages such as `@assistant-ui/docs` and `@assistant-ui/shadcn-registry` are exempt.
## Monitor Cycle
Run:
```bash
gh pr checks <n>
gh pr view <n> --json reviews
gh api graphql -f query='query { repository(owner:"assistant-ui",name:"assistant-ui") { pullRequest(number:<n>) { reviewThreads(first:100) { nodes { id isResolved isOutdated comments(first:50) { nodes { databaseId body author { login } } } } } } } }'
```
In review threads, `id` is the GraphQL node id for resolving the thread. `databaseId` on each comment is the REST integer for replies.
## Addressing Threads
Every unresolved thread must get a reply and be resolved.
- Valid: fix in a follow-up commit, reply with the fix SHA, then resolve.
- Invalid: reply with a short rationale, then resolve.
- Outdated: if `isOutdated: true`, reply that the diff moved, then resolve.
Use judgment on bot nits. Common-sense suggestions that duplicate what a competent agent already knows are usually reply-and-resolve. Scope creep from long bot-feedback loops is a signal to cut and merge.
Do not add comments or changeset prose that only exist to acknowledge review feedback. Test: would you write it if no reviewer had flagged the code? If no, drop it.
```bash
gh api /repos/assistant-ui/assistant-ui/pulls/<n>/comments/<databaseId>/replies -f body='...'
gh api graphql -f query='mutation($id:ID!){resolveReviewThread(input:{threadId:$id}){thread{isResolved}}}' -f id=<threadId>
```
## Merge Gate
- All non-cubic CI checks pass.
- Every review thread is resolved.
- No non-cubic reviewer has a current `CHANGES_REQUESTED` state. Address and wait for re-approval instead of dismissing.
Cubic is optional; do not wait for it if the other gates are clear.
@@ -0,0 +1,4 @@
interface:
display_name: "Butflow"
short_description: "GitButler PR, CI, review, and merge flow"
default_prompt: "Use $butflow to implement this change, open a PR, monitor CI and reviews, and merge when ready."
@@ -0,0 +1,78 @@
---
name: trusted-publishing
description: Configure npm trusted publishing (OIDC) and lock down publishing access for a newly added publishable package in the assistant-ui monorepo. Use whenever a new public package is created under packages/* (a new package.json with `"private": false` / a new name on npm), when a release fails a package with an npm trusted-publishing / OIDC authorization error, or when the user asks to set up OIDC / trusted publishing / disallow tokens for a package.
---
# trusted-publishing
Every public package in this monorepo publishes to npm through **trusted publishing (OIDC)** from the `npm-publish.yaml` GitHub Actions workflow — there are no long-lived npm tokens. Trusted publishing is configured **per package name** on the npm registry. Adding a new package to `packages/*` does **not** automatically grant it OIDC publish rights: until you configure it, the release run fails that package's publish with an OIDC authorization error from npm.
So: whenever you add a new publishable package (or notice one missing its config), set up trusted publishing **and** harden its publishing access before the first release.
## When this applies
The release workflow only scans `packages/*` and publishes each package there whose `package.json` is not `"private": true`. So a new package under `packages/` needs this setup unless you mark it `"private": true` (as `@assistant-ui/ui` and `@assistant-ui/x-changelog` are). Anything outside `packages/` is never published regardless — e.g. `@assistant-ui/docs` and `@assistant-ui/shadcn-registry` live under `apps/`, so they're excluded by location.
## The config values (identical for every package in this repo)
| Field | Value |
|---|---|
| Publisher | GitHub Actions |
| Organization or user | `assistant-ui` |
| Repository | `assistant-ui` |
| Workflow filename | `npm-publish.yaml` |
| Environment name | `npm Publish` |
| Allowed actions | ✅ Allow `npm publish` **and** ✅ Allow `npm stage publish` |
These match the publish job in `.github/workflows/npm-publish.yaml`, which already runs in the `npm Publish` environment with `id-token: write`. No workflow change is needed per package — only the npm-side config below.
## Do it via CLI (preferred)
Requires **npm ≥ 11.10.0** (`npm trust` was added then; the repo's pinned npm is fine — check `npm --version`). Both commands need an **interactive 2FA OTP** and cannot be driven by an automation token, so they can't run unattended. Have the user run them — they can use the `! <command>` prompt prefix so output lands in this session.
Replace `<PKG>` with the published name (e.g. `@assistant-ui/react`, or an unscoped name like `assistant-stream`).
```bash
# 1. Create the trusted-publisher relationship (OIDC)
npm trust github <PKG> \
--repository assistant-ui/assistant-ui \
--file npm-publish.yaml \
--environment "npm Publish" \
--allow-publish \
--allow-stage-publish
# 2. Lock publishing access: require 2FA, disallow tokens (the "recommended" option)
npm access set mfa=publish <PKG>
```
`mfa=publish` is npm's "**Require two-factor authentication and disallow tokens (recommended)**" setting — it forbids token-based publishes while leaving OIDC trusted publishing working. (`mfa=automation` is the weaker "allow tokens with bypass 2FA" option; don't use it.)
> **Brand-new package?** `npm access set mfa=publish` (and the website's Publishing-access toggle) only work once the package exists on the registry — for a name that has never published, run step 1 (`npm trust`) now and apply this mfa lockdown right after the first release. Step 1 works pre-publish; see [Brand-new package names](#brand-new-package-names-first-publish-chicken-and-egg) below.
Verify afterward:
```bash
npm trust list <PKG> # shows the GitHub Actions trust entry
npm access get status <PKG> # only works post-first-publish; skip for a brand-new name
```
## Or via the website
If the CLI path is blocked (older npm, auth issues), configure both in the npm UI:
- **Trusted publishing:** npmjs.com → Packages → `<PKG>`**Settings → Trusted publishing** → fill in the table above (allowed actions: tick **both** `npm publish` and `npm stage publish`) → Save.
- **Publishing access:** same Settings page → **Publishing access** → select **"Require two-factor authentication and disallow tokens (recommended)"**.
## Brand-new package names (first-publish chicken-and-egg)
The npm **website** only lets you edit a package's settings once the package already exists on the registry — so for a brand-new name, configure with **`npm trust` first** (it can establish the trust relationship without publishing a placeholder version), and then let the `npm Publish` workflow ship the initial version via OIDC. If you hit trouble publishing the very first version through OIDC, the fallback is a one-time manual publish, then configure on the website, then all subsequent releases flow through the workflow. Don't introduce a long-lived `NPM_TOKEN` to work around it.
Lock down publishing access (`npm access set mfa=publish`, or the website's Publishing-access toggle) **after** that first version exists — it can't be set on a name that hasn't published yet.
## Checklist for a new package
1. `package.json` has `"private": false` and the correct public `name`.
2. Run the two `npm trust` / `npm access` commands above (or the website equivalents).
3. `npm trust list <PKG>` shows the GitHub Actions entry; `npm access get status` confirms mfa.
4. Add a `patch` changeset (per `AGENTS.md`) that **names the new package explicitly** in its frontmatter — changesets only releases packages listed in a changeset entry, so a brand-new package won't ship unless it's named. Nothing else in the workflow needs editing.
5. Ship the first version as a **stable semver** (no `-` pre-release suffix like `0.1.0-alpha.0`). `npm-publish.yaml` calls `setFailed` on prerelease versions and fails the **entire** release run, not just that package.
+121
View File
@@ -0,0 +1,121 @@
---
name: update-deps
description: Update dependencies across the assistant-ui monorepo (npm via pnpm + taze, Expo SDK-pinned packages, Python packages via uv, and GitHub Actions). Use when the user asks to bump, upgrade, or update dependencies (root, packages, examples, templates, python/*, .github/workflows/*), refresh the pnpm lockfile or uv.lock files, repin GitHub Actions, or run the dependency-update workflow before a release.
---
# update-deps
Update every package's dependencies across the monorepo (packages, apps, examples, templates, `python/*`, and `.github/workflows/*`), regenerate lockfiles, and create a `chore: update dependencies` changeset for the JS side.
## JS / TS (pnpm workspaces)
Preview what would change without writing anything:
```bash
pnpm deps:check
```
Run the full update (writes package.json files, reinstalls, dedupes, generates the changeset):
```bash
pnpm deps:update
```
Both are defined in the root `package.json`. `deps:update` performs, in order:
1. `npx taze major -f -w -r` — bump every dependency (incl. major) recursively.
2. `cd examples/with-expo && npx expo install --fix`**required**: taze does not know about Expo's SDK compatibility matrix and will bump `expo-*` / `react-native-*` / `react` / `react-dom` to versions that crash at runtime. `expo install --fix` re-pins them to the versions sanctioned by the current `expo` SDK. Do not skip this step, and do not commit Expo-related bumps without it.
3. Wipe every `node_modules` and `pnpm-lock.yaml`, then `pnpm install` + `pnpm dedupe`.
4. `bash scripts/generate-deps-changeset.sh` — write a patch changeset for each published package whose `package.json` changed.
### Expo notes
- If you bump the `expo` major in `examples/with-expo` (e.g. SDK 55 → 56), `expo install --fix` will rewrite the matching `react`, `react-dom`, `react-native`, `react-native-*`, and `expo-*` versions. Eyeball the diff in `examples/with-expo/package.json` to confirm everything snapped to the expected SDK line.
- If you intentionally want to hold Expo back, run `pnpm deps:update`, then `git checkout examples/with-expo/package.json` and re-run `pnpm install` + the changeset script manually.
### Workflow
1. From a clean working tree on a feature branch, run `pnpm deps:update`. It takes several minutes (lockfile is regenerated from scratch).
2. `git status` to confirm the changeset file appeared under `.changeset/` and that only `package.json` / `pnpm-lock.yaml` files changed.
3. Validate before committing:
```bash
pnpm build
pnpm lint
pnpm test
```
4. If a package breaks on a major bump, pin that one dep back in the offending `package.json` and re-run `pnpm install`; the changeset script does **not** need to re-run.
5. Commit as `chore: update dependencies` and push.
### Notes
- Do **not** hand-edit the generated changeset's bump levels — `generate-deps-changeset.sh` correctly emits `patch` for every published package whose `package.json` changed and skips private packages (`@assistant-ui/docs`, `@assistant-ui/shadcn-registry`, etc.). Per `AGENTS.md`, dependency updates are always patch.
- The script detects changes via `git diff HEAD`, so run it with the package.json edits still unstaged (or staged — it checks both). Don't commit before it runs.
- `pnpm-lock.yaml` will have a huge diff; that's expected since step 3 deletes it.
- Node `>=24` and `pnpm@11.3.0` are required (see root `package.json` `engines` / `packageManager`).
## Python (uv)
Python packages live under `python/` and each has its own `pyproject.toml` + `uv.lock`. They are **not** touched by `pnpm deps:update`.
Packages:
- `python/assistant-stream`
- `python/assistant-ui-sync-server-api`
- `python/assistant-transport-backend`
- `python/assistant-transport-backend-langgraph`
- `python/state-test`
- `python/assistant-stream-hello-world` (no lockfile — example)
For each package with a `uv.lock`, upgrade with:
```bash
cd python/<package>
uv lock --upgrade
uv sync
uv run pytest # if tests exist
```
Or in one pass from the repo root:
```bash
for d in python/*/uv.lock; do
(cd "$(dirname "$d")" && uv lock --upgrade && uv sync)
done
```
Notes:
- Python bumps do **not** require a changeset — Python packages are versioned manually in their `pyproject.toml` and published via `.github/workflows/pypi-publish.yaml`, independent of the JS changesets pipeline.
- Bumping a published Python package's own version (e.g. `assistant-stream`) is a separate release decision; `uv lock --upgrade` only touches transitive deps.
- Commit Python and JS dep updates separately if the diff is large, or as one `chore: update dependencies` commit if both are clean.
## GitHub Actions
Workflows under `.github/workflows/*.{yml,yaml}` use a mix of styles:
- **SHA-pinned** (preferred for security — supply-chain hardening):
`uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6`
- **Tag-pinned** (still in some files):
`uses: actions/checkout@v6`
There is **no Dependabot config** (`.github/dependabot.yml` does not exist), so these don't update themselves. `pnpm deps:update` does not touch them either.
To refresh both styles in one shot, use [`ratchet`](https://github.com/sethvargo/ratchet) (or `pinact`):
```bash
# pin any remaining tag refs to SHAs (one-time per file)
ratchet pin .github/workflows/*.yml .github/workflows/*.yaml
# bump every SHA-pinned action to the latest release SHA for its major
ratchet update .github/workflows/*.yml .github/workflows/*.yaml
```
Both leave the `# v6`-style comment intact so reviewers can read the human version. If `ratchet` isn't available, fall back to manually checking each `uses:` against the action's releases page and updating the SHA + comment together.
After updating, sanity-check on a branch by pushing and watching the affected workflows actually run (most are PR-triggered: `code-quality`, `autofix`, `changeset`, `changeset-semver-check`, `expo`, `devtools-frame`, `registry`). Release workflows (`npm-publish`, `pypi-publish`, `traction`) can't be tested without a release tag — eyeball those diffs extra carefully.
Notes:
- GH Actions updates do not need a changeset (they don't ship in any npm package).
- Commit as `chore: update github actions` (or roll into `chore: update dependencies` if landing alongside the JS/Python bumps).
- If a major bump changes inputs/outputs, check the action's release notes — `ratchet` will happily move you from `v4` to `v6` without warning about breaking changes.
+26
View File
@@ -0,0 +1,26 @@
{
"name": "assistant-ui Development",
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
"features": {
"ghcr.io/devcontainers/features/git:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers-contrib/features/pnpm:2": {}
},
"customizations": {
"vscode": {
"extensions": [
"oxc.oxc-vscode",
"ms-vscode.vscode-typescript-next",
"bradlc.vscode-tailwindcss",
"anthropics.claude-code"
],
"settings": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "oxc.oxc-vscode"
}
}
},
"forwardPorts": [3000, 3001],
"postCreateCommand": "pnpm install && npm install -g @anthropic-ai/claude-code",
"remoteUser": "node"
}
+3
View File
@@ -0,0 +1,3 @@
* text=auto eol=lf
pnpm-lock.yaml linguist-generated
+7
View File
@@ -0,0 +1,7 @@
# CI and repository policy changes require maintainer review.
/.github/CODEOWNERS @Yonom @okisdev
/.github/actions/ @assistant-ui/maintainers
/.github/workflows/ @assistant-ui/maintainers
# Public API surface snapshots require maintainer review.
/api-surface/ @Yonom @okisdev
+108
View File
@@ -0,0 +1,108 @@
name: Bug report
description: Report an issue to help us improve assistant-ui
labels: ["bug"]
body:
- type: checkboxes
attributes:
label: Checklist
description: Please confirm before submitting.
options:
- label: I have searched existing issues and this is not a duplicate
required: true
- label: This is a reproducible bug, not a usage question (use [Discord](https://discord.gg/S9dwgCNEFs) for questions)
required: true
- type: textarea
attributes:
label: Environment info
description: Run `npx assistant-ui info` in your project and paste the output here.
placeholder: |
Environment:
OS: macOS 15.3 (arm64)
Node.js: v22.14.0
Package Manager: pnpm 10.32.1
Framework: Next.js 15.3.1
Packages:
@assistant-ui/react 0.12.15
...
validations:
required: true
- type: dropdown
attributes:
label: Affected area(s)
multiple: true
options:
- Runtime / Core
- Thread Management
- Streaming (assistant-stream)
- Attachments / Files
- Cloud (assistant-cloud)
- React / UI Components
- React Native
- Store / Tap
- Content Rendering (Markdown, Syntax Highlighting)
- Rich Text / Composer (Lexical)
- Provider Adapters
- Performance
- CLI / Scaffolding
- DevTools / Observability
- Documentation
- Unsure
- type: dropdown
attributes:
label: Runtime adapter in use
description: Which runtime hook are you using?
options:
- useLocalRuntime
- useExternalStoreRuntime
- useCloudRuntime
- useAISDKRuntime / useChatRuntime
- useLangGraphRuntime
- useAgUiRuntime
- useA2ARuntime
- useAdkRuntime (Google ADK)
- useDataStreamRuntime
- useAssistantTransportRuntime
- Other / Custom
- Not applicable
- Unsure
- type: textarea
attributes:
label: Steps to reproduce
description: Minimal steps or a link to a reproduction repo.
placeholder: |
1. Set up runtime with `useXxxRuntime(...)`
2. Send a message with ...
3. Observe ...
validations:
required: true
- type: textarea
attributes:
label: Expected vs actual behavior
placeholder: |
Expected: ...
Actual: ...
validations:
required: true
- type: input
attributes:
label: Browser (if applicable)
placeholder: "e.g. Chrome 131, Firefox 135, Safari 18"
- type: textarea
attributes:
label: Code snippet or error log
render: tsx
description: Relevant code, stack traces, or console output. Please remove any secrets.
- type: textarea
attributes:
label: Additional context
description: Screenshots, related issues, or anything else that might help.
+8
View File
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Question or help
url: https://discord.gg/S9dwgCNEFs
about: Ask questions and get help from the community on Discord.
- name: Documentation
url: https://www.assistant-ui.com/docs
about: Check the docs — your question might already be answered.
@@ -0,0 +1,48 @@
name: Feature request
description: Suggest an improvement or new capability for assistant-ui
labels: ["enhancement"]
body:
- type: textarea
attributes:
label: Problem statement
description: What problem are you trying to solve?
placeholder: I'm trying to ... but currently ...
validations:
required: true
- type: textarea
attributes:
label: Proposed solution
description: If you have an idea for an API, component, or behavior change, describe it here.
- type: dropdown
attributes:
label: Area
options:
- Runtime / Core
- Thread Management
- Streaming (assistant-stream)
- Attachments / Files
- Cloud (assistant-cloud)
- React / UI Components
- React Native
- Store / Tap
- Content Rendering (Markdown, Syntax Highlighting)
- Rich Text / Composer (Lexical)
- Provider Adapters
- Performance
- CLI / Scaffolding
- DevTools / Observability
- Documentation
- Unsure
- type: textarea
attributes:
label: Alternatives considered
description: Other approaches or workarounds you've tried.
- type: textarea
attributes:
label: Additional context
description: Any extra details, links, mockups, or examples.
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 7.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" fill="none" viewBox="0 0 224 39"><path fill="#666" d="M35.512 14.185c-5.541-2.124-.97-10.255-8.59-10.049-9.313.252-23.906 14.92-22.415 24.45.74 4.718 4.42 2.737 6.149 3.425 1.147.454 2.505 2.504 3.972 2.83-6.491 3.738-14.83.179-14.624-7.833C.3 15.208 17.32-1.91 29.454.173c6.775 1.165 7.617 8.38 6.057 14.012"/><path fill="#666" d="m9 20.981 5.368 5.073c3.42 3.077 12.499 8.448 16.613 4.806 4.85-4.293-5.408-19.12-10.13-21.486l4.146-1.867c6.46 4.728 16.28 20.097 8.28 26.788-5.162 4.316-13.483.66-18.374-2.554C11.177 29.29 5.792 25.779 9 20.977zm5.633-19.253c-1.737.046-3.095 2.312-4.37 2.71-1.134.354-2.702-.614-4.408.666-1.847 1.385-1.216 7.998-4.759 9.645C-1.084 8.332.273.683 8.15.027c.608-.05 7.37.399 6.483 1.697z"/><path fill="#666" d="M27.607 20.981c2.908 4.825-2.363 10.338-6.752 5.94zM51.3 29.93H42V8.63h8.28q3.96 0 6.06 1.4 2.1 1.39 2.1 4.39 0 1.32-.54 2.29-.54.98-1.58 1.55-1.03.57-2.5.69v-.06q2.67.18 4.09 1.54 1.43 1.37 1.43 3.62 0 2.97-2.09 4.43-2.08 1.45-5.95 1.45m-4.74-9.18v5.46h4.53q1.65 0 2.66-.68 1-.67 1-2.02t-1-2.06q-1.01-.7-2.66-.7zm0-8.4v5.1h3.6q1.68 0 2.68-.66 1.01-.66 1.01-1.89 0-1.32-.97-1.94-.98-.61-2.72-.61zm20.49 17.58h-4.5V13.85h4.26l.15 4.68-.33-.09q.39-2.43 1.38-3.51t2.73-1.08h1.47v3.72h-1.47q-1.26 0-2.07.33t-1.22 1.05q-.4.72-.4 1.95zm14.34.36q-2.46 0-4.29-1.04-1.83-1.03-2.85-2.92t-1.02-4.44 1.02-4.43q1.02-1.87 2.85-2.92t4.29-1.05 4.29 1.05 2.85 2.92q1.02 1.88 1.02 4.43t-1.02 4.44-2.85 2.92q-1.83 1.04-4.29 1.04m0-3.45q1.68 0 2.61-1.31.93-1.3.93-3.64T84 18.24q-.93-1.3-2.61-1.3t-2.61 1.3q-.93 1.31-.93 3.65t.93 3.64q.93 1.31 2.61 1.31m18.15 3.09h-4.35l-4.77-16.08h4.53l2.76 10.89 2.97-10.89h3.66l2.97 10.89 2.79-10.89h4.53l-4.77 16.08h-4.38l-2.97-10.05zm23.73.36q-2.49 0-4.17-.71-1.68-.7-2.57-1.92-.88-1.21-1-2.8l4.56-.15q.21 1.14.96 1.77t2.22.63q1.2 0 1.87-.39.68-.39.68-1.2 0-.51-.24-.86-.24-.34-.95-.6-.7-.25-2.08-.46-2.55-.45-3.99-1.05t-2.04-1.56-.6-2.34q0-2.31 1.78-3.74 1.79-1.42 5.36-1.42 2.28 0 3.82.72 1.55.72 2.4 1.96.86 1.25 1.07 2.84l-4.53.18q-.09-.78-.47-1.34-.37-.55-.94-.87-.57-.31-1.38-.31-1.2 0-1.85.49-.64.5-.64 1.31 0 .6.28.97.29.38.95.62t1.77.39q2.58.36 4.09 1 1.52.65 2.18 1.61t.66 2.37q0 1.56-.9 2.64t-2.51 1.65q-1.6.57-3.79.57m17.19 0q-2.46 0-4.28-1.04-1.81-1.03-2.82-2.92-1-1.89-1-4.44t1-4.43q1.01-1.87 2.81-2.92t4.26-1.05q2.4 0 4.17 1.05t2.74 3q.98 1.95.98 4.65v.9h-11.31q.09 1.92 1.03 2.85.95.93 2.51.93 1.14 0 1.9-.48.77-.48 1.1-1.47l4.53.27q-.63 2.4-2.67 3.75t-4.95 1.35m-3.45-9.96h6.69q-.09-1.77-.98-2.64-.88-.87-2.29-.87t-2.33.91q-.91.92-1.09 2.6m18.57 9.6h-4.5V13.85h4.26l.15 4.68-.33-.09q.39-2.43 1.38-3.51t2.73-1.08h1.47v3.72h-1.47q-1.26 0-2.07.33t-1.22 1.05q-.4.72-.4 1.95zm23.67.48q-2.7 0-4.67-.99-1.96-.99-3.04-2.84-1.08-1.84-1.08-4.33V8.6h4.56v13.65q0 2.07 1.09 3.19 1.1 1.13 3.14 1.13t3.12-1.13q1.08-1.12 1.08-3.19V8.6h4.56v13.65q0 2.49-1.07 4.33-1.06 1.85-3.04 2.84t-4.65.99m19.38-.12q-2.49 0-4.17-.71-1.68-.7-2.57-1.92-.88-1.21-1-2.8l4.56-.15q.21 1.14.96 1.77t2.22.63q1.2 0 1.87-.39.68-.39.68-1.2 0-.51-.24-.86-.24-.34-.95-.6-.7-.25-2.08-.46-2.55-.45-3.99-1.05t-2.04-1.56-.6-2.34q0-2.31 1.78-3.74 1.79-1.42 5.36-1.42 2.28 0 3.82.72 1.55.72 2.4 1.96.86 1.25 1.07 2.84l-4.53.18q-.09-.78-.47-1.34-.37-.55-.94-.87-.57-.31-1.38-.31-1.2 0-1.85.49-.64.5-.64 1.31 0 .6.28.97.29.38.95.62t1.77.39q2.58.36 4.09 1 1.52.65 2.18 1.61t.66 2.37q0 1.56-.9 2.64t-2.51 1.65q-1.6.57-3.79.57m17.19 0q-2.46 0-4.28-1.04-1.81-1.03-2.82-2.92-1-1.89-1-4.44t1-4.43q1.01-1.87 2.81-2.92t4.26-1.05q2.4 0 4.17 1.05t2.74 3q.98 1.95.98 4.65v.9h-11.31q.09 1.92 1.03 2.85.95.93 2.51.93 1.14 0 1.9-.48.77-.48 1.1-1.47l4.53.27q-.63 2.4-2.67 3.75t-4.95 1.35m-3.45-9.96h6.69q-.09-1.77-.98-2.64-.88-.87-2.29-.87t-2.33.91q-.91.92-1.09 2.6"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 0 309 93"><g fill="#666"><path fill-rule="evenodd" d="M31.527 4.343 12.677 15.12A22.55 22.55 0 0 0 1.343 34.693v23.164a22.55 22.55 0 0 0 10.733 19.21l19.256 11.83a22.55 22.55 0 0 0 23.374.151l20.083-12.01a22.55 22.55 0 0 0 10.988-19.362v-21.51a22.55 22.55 0 0 0-10.973-19.362L54.3 4.554a22.55 22.55 0 0 0-22.773-.211m12.687 17.151-7.651 4.42a12.03 12.03 0 0 0-5.998 10.417v9.861a12.03 12.03 0 0 0 5.682 10.207l7.862 4.885a12.03 12.03 0 0 0 12.567.075l8.237-4.975a12.03 12.03 0 0 0 5.817-10.297v-9.065a12.03 12.03 0 0 0-5.817-10.296l-8.463-5.111a12.03 12.03 0 0 0-12.236-.12" clip-rule="evenodd"/><path d="M120.18 70.71h-7.63q-5.53 0-8.54-2.94T101 59.3V37.11q0-5.53 3.01-8.47t8.54-2.94h7.63q5.46 0 8.51 2.98 3.04 2.97 3.04 8.43v3.29q0 1.54-1.54 1.54h-5.88q-1.47 0-1.47-1.54v-2.87q0-2.24-.95-3.18-.94-.95-3.18-.95h-4.76q-2.17 0-3.11.95-.95.94-.95 3.18v21.35q0 2.24.95 3.19.94.94 3.11.94h4.76q2.24 0 3.18-.94.95-.95.95-3.19v-2.87q0-1.54 1.47-1.54h5.88q1.54 0 1.54 1.54v3.29q0 5.46-3.04 8.44-3.05 2.97-8.51 2.97m35.56 0h-6.23q-5.53 0-8.54-2.94t-3.01-8.47V46.42q0-5.53 3.01-8.47t8.54-2.94h6.23q5.46 0 8.51 2.98 3.04 2.97 3.04 8.43V59.3q0 5.46-3.04 8.44-3.05 2.97-8.51 2.97m-4.9-7.63h3.57q2.24 0 3.19-.91.94-.91.94-3.15V46.7q0-2.24-.94-3.15-.95-.91-3.19-.91h-3.57q-2.24 0-3.15.91t-.91 3.15v12.32q0 2.24.91 3.15t3.15.91m30.87 7.63h-5.95q-1.47 0-1.47-1.47V36.48q0-1.47 1.47-1.47h5.95q1.47 0 1.47 1.47v2.38h.28q.77-1.89 2.73-2.87t4.13-.98h2.52q1.4 0 1.4 1.47v4.83q0 .84-.32 1.16-.31.31-1.08.24h-4.83q-4.83 0-4.83 5.46v21.07q0 1.47-1.47 1.47m43.33 0h-15.47q-5.53 0-8.54-2.94t-3.01-8.47V46.42q0-5.53 3.01-8.47t8.54-2.94h5.53q5.53 0 8.54 2.94t3.01 8.47v8.89q0 1.47-1.47 1.47h-17.57q-.84 0-.84.77v1.54q0 2.17.95 3.12.94.94 3.18.94h14.14q1.47 0 1.47 1.54v4.62q0 .77-.31 1.09-.32.31-1.16.31m-17.43-19.88h9.52q.77 0 .77-.77V46.7q0-2.24-.91-3.15t-3.15-.91h-2.94q-2.24 0-3.15.91t-.91 3.15v3.36q0 .77.77.77m24.15-15.82h6.16q1.4 0 1.68 1.47l6.02 26.32h.49l5.88-26.32q.28-1.47 1.75-1.47h6.16q1.47 0 1.05 1.47l-8.82 32.69q-.28 1.54-1.89 1.54h-8.89q-1.47 0-1.89-1.54l-8.75-32.69q-.42-1.47 1.05-1.47m34.65-6.02V22.9q0-1.4 1.4-1.4h6.09q1.4 0 1.4 1.33v6.16q0 1.4-1.4 1.4h-6.09q-1.4 0-1.4-1.4m0 40.25V36.48q0-1.47 1.4-1.47h6.02q1.47 0 1.47 1.47v32.76q0 .91-.31 1.19-.32.28-1.09.28h-6.02q-1.47 0-1.47-1.47m15.26 0v-2.31q0-2.38 1.33-4.06l14.84-19.95v-.28h-14.07q-1.47 0-1.47-1.54v-4.62q0-1.47 1.47-1.47h22.82q1.47 0 1.47 1.47v4.2q0 2.24-1.12 3.64L293.22 62.8v.28h14.14q1.47 0 1.47 1.54v4.62q0 1.47-1.47 1.47h-24.22q-1.47 0-1.47-1.47"/></g></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 0 3179 713"><path fill="#666" d="M874.8 143.68h102.18v425.23H874.8zm482.12 220.26V568.9h-102.18V384.13c0-34.88-23.86-55.06-54.45-55.06s-55.68 22.03-55.68 51.39V568.9h-102.17V246.47h96.05v25.7c22.03-20.19 53.84-33.65 93-33.65 75.87 0 125.42 51.4 125.42 125.43Zm41.62 44.66c0-94.83 72.81-169.48 171.32-169.48 91.16 0 145 59.96 157.85 107.07l-90.55 36.1c-7.96-30.59-30.6-52.62-64.85-52.62-39.77 0-70.98 29.98-70.98 78.32s31.21 78.32 70.98 78.32c34.87 0 58.74-22.03 66.69-51.39l90.55 36.1c-12.85 45.28-67.3 105.85-159.08 105.85-97.89 0-171.93-72.81-171.93-168.26Zm352.41-.61c0-96.67 73.42-168.87 176.21-168.87s176.82 72.2 176.82 168.87-73.42 168.87-176.82 168.87-176.21-72.81-176.21-168.87m250.24-.61c0-45.89-28.76-77.71-73.42-77.71s-74.04 31.82-74.04 78.32 29.37 78.32 74.04 78.32 73.42-32.43 73.42-78.92Zm461.95-43.44V568.9h-102.18V384.13c0-34.88-23.86-55.06-54.45-55.06s-55.68 22.03-55.68 51.39V568.9h-102.17V246.47h96.05v25.7c22.03-20.19 53.84-33.65 93-33.65 75.87 0 125.42 51.4 125.42 125.43Zm362.23-117.47-114.41 322.44h-119.31l-114.41-322.44h105.24l68.52 222.1 69.14-222.1h105.24Zm0 161.52c0-96.67 73.42-168.87 176.21-168.87s176.82 72.2 176.82 168.87-73.42 168.87-176.82 168.87-176.21-72.81-176.21-168.87m250.24-.61c0-45.89-28.76-77.71-73.42-77.71s-74.04 31.82-74.04 78.32 29.37 78.32 74.04 78.32 73.42-32.43 73.42-78.92ZM356.04 0C159.41 0 0 159.41 0 356.04s159.41 356.04 356.04 356.04 356.04-159.41 356.04-356.04S552.68 0 356.04 0m-165 424.56h-32.16V287.52h32.16zm140.27 68.76h-62.76V218.77h62.76zm175.19 73.52h-98.1V145.25h98.1z"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" fill="none" viewBox="0 0 219 48"><path fill="#666" fill-rule="evenodd" d="m39.873 24.108-4.215 4.261-4.087-4.132-8.504 8.598L27.1 36.91l-4.016 4.06 4.397 4.445 16.734-16.918z" clip-rule="evenodd"/><path fill="#666" fill-rule="evenodd" d="m6.624 23.774-4.687 4.739L18.67 45.43l4.412-4.461-4.031-4.076 4.016-4.06-8.556-8.649-3.74 3.782zM27.353 2.93l-3.939 3.982 4.092 4.137-4.49 4.538 8.556 8.65 4.214-4.26 4.087 4.131 4.214-4.26z" clip-rule="evenodd"/><path fill="#666" fill-rule="evenodd" d="M19.077 2.528 2.343 19.446l4.28 4.328 3.741-3.782 4.147 4.193 8.505-8.598-4.092-4.136 4.49-4.539z" clip-rule="evenodd"/><path fill="#999" fill-rule="evenodd" d="m23.068 32.834-4.016 4.06 4.03 4.075 4.017-4.06zm12.718-12.857-4.215 4.26 4.087 4.132 4.215-4.26zm-25.421.015-3.74 3.782 4.147 4.193 3.74-3.782zM23.414 6.913l-4.49 4.538 4.092 4.137 4.49-4.538z" clip-rule="evenodd"/><path fill="#aaa" fill-rule="evenodd" d="M18.8 11.35c-2.341-2.368-2.341-6.207 0-8.574a5.95 5.95 0 0 1 8.48 0c2.343 2.367 2.343 6.206 0 8.573a5.95 5.95 0 0 1-8.48 0m25.436 17.186a5.95 5.95 0 0 1-8.48 0c-2.342-2.368-2.342-6.206 0-8.574a5.95 5.95 0 0 1 8.48 0c2.342 2.368 2.342 6.206 0 8.574M18.802 45.678c-2.341-2.367-2.341-6.206 0-8.573a5.95 5.95 0 0 1 8.48 0c2.343 2.367 2.343 6.206 0 8.573a5.95 5.95 0 0 1-8.48 0M1.85 28.48c-2.343-2.367-2.343-6.206 0-8.573a5.95 5.95 0 0 1 8.48 0c2.341 2.367 2.341 6.206 0 8.573a5.95 5.95 0 0 1-8.48 0" clip-rule="evenodd"/><path fill="#666" fill-rule="evenodd" d="M76.282 29.994h-3.187a.705.705 0 0 1-.698-.705h-.001v-11.16c0-.388.312-.705.697-.705h3.21c.2 0 .363-.165.363-.367v-3.11a.366.366 0 0 0-.364-.367H64.366a.366.366 0 0 0-.364.367v3.11c0 .202.163.367.364.367h3.383c.383 0 .697.317.697.705V29.31a.7.7 0 0 1-.696.684h-3.375a.37.37 0 0 0-.363.368v3.109c0 .203.165.368.365.368h4.335c.032.009.064.02.098.02h3.221c.035 0 .066-.011.098-.02h4.153a.365.365 0 0 0 .363-.368V30.36a.366.366 0 0 0-.364-.367M96.769 13.58h-12.63a.366.366 0 0 0-.364.367v3.11c0 .202.161.367.362.367h3.718c.383 0 .697.317.697.705v15.362c0 .202.164.368.365.368h3.22a.367.367 0 0 0 .365-.369V18.13c0-.39.313-.706.697-.706h3.57a.367.367 0 0 0 .365-.367v-3.11a.37.37 0 0 0-.365-.367m18.676 0h-10.987a.375.375 0 0 0-.369.373v19.532c0 .207.165.375.369.375h10.987a.375.375 0 0 0 .371-.375V30.39a.37.37 0 0 0-.37-.375h-6.706a.705.705 0 0 1-.703-.711V26.09c0-.392.315-.711.705-.711h6.144a.375.375 0 0 0 .37-.375V22.2a.373.373 0 0 0-.37-.375h-6.145a.705.705 0 0 1-.704-.71v-2.98c0-.392.315-.711.705-.711h6.705a.375.375 0 0 0 .369-.375v-3.096a.373.373 0 0 0-.37-.375m16.794 8.706c-.563.516-1.301.78-2.195.78h-1.594a.705.705 0 0 1-.7-.708v-4.225a.705.705 0 0 1 .7-.705h1.594c.893 0 1.632.267 2.196.795.567.532.855 1.213.855 2.023 0 .831-.288 1.518-.857 2.04m1.637 4.559a.705.705 0 0 1 .24-.959 6 6 0 0 0 2.107-2.146 6.9 6.9 0 0 0 .91-3.495 6.75 6.75 0 0 0-.839-3.261 6.45 6.45 0 0 0-2.4-2.468c-1.038-.621-2.255-.934-3.617-.934h-6.109a.37.37 0 0 0-.366.369v19.54c0 .204.165.37.366.37h3.217a.367.367 0 0 0 .366-.37v-5.902a.705.705 0 0 1 .7-.707h.95c.261 0 .5.144.62.378l3.315 6.404a.36.36 0 0 0 .324.198h3.643a.37.37 0 0 0 .315-.555zm20.523-.179a.7.7 0 0 1-.574.297H150.8a.705.705 0 0 1-.665-.939l1.512-4.269a.7.7 0 0 1 .665-.468c.301 0 .562.183.663.468l1.512 4.269a.7.7 0 0 1-.089.642m6.621 7.195c.125 0 .236-.06.306-.163a.36.36 0 0 0 .038-.345l-7.731-19.539a.38.38 0 0 0-.345-.234h-1.98a.36.36 0 0 0-.344.234l-7.731 19.54a.36.36 0 0 0 .038.345.36.36 0 0 0 .306.162h3.522a.375.375 0 0 0 .348-.246l.969-2.7a.705.705 0 0 1 .663-.465h6.495a.705.705 0 0 1 .664.471l.942 2.691a.375.375 0 0 0 .35.25zm10.681-8.083c0-.333.269-.606.599-.606h2.656c.797 0 1.452.234 1.947.693a2.25 2.25 0 0 1 .753 1.715 2.36 2.36 0 0 1-.735 1.756c-.488.471-1.147.71-1.965.71h-2.62a.64.64 0 0 1-.635-.642zm0-7.74c0-.337.27-.612.603-.612h1.749c.774 0 1.395.203 1.844.603q.57.51.664 1.292a2.2 2.2 0 0 1-.661 1.875c-.47.439-1.101.661-1.877.661h-1.723a.6.6 0 0 1-.599-.606zm-3.558 15.824h7.57c1.304 0 2.438-.277 3.37-.818a5.55 5.55 0 0 0 2.12-2.13 5.76 5.76 0 0 0 .724-2.805c0-1.139-.276-2.154-.82-3.015a5.55 5.55 0 0 0-2.216-1.994.21.21 0 0 1-.11-.159l-.01-.09.079-.088c1.152-.998 1.737-2.289 1.737-3.843 0-.966-.223-1.865-.664-2.672-.44-.802-1.118-1.452-2.016-1.935-.903-.486-2.024-.732-3.33-.732h-6.423a.405.405 0 0 0-.402.405v19.481c0 .217.175.396.391.396m31.154-.001a.375.375 0 0 0 .37-.376V30.39a.375.375 0 0 0-.37-.375h-5.714a.705.705 0 0 1-.703-.711V13.953a.375.375 0 0 0-.371-.375H189.3a.375.375 0 0 0-.371.375v19.532c0 .206.167.374.37.374zm18.696-3.846h-6.707a.705.705 0 0 1-.702-.711v-3.218a.705.705 0 0 1 .702-.71h6.147a.37.37 0 0 0 .369-.373V22.2a.37.37 0 0 0-.369-.372h-6.147a.705.705 0 0 1-.702-.711v-2.982a.705.705 0 0 1 .702-.71h6.707a.37.37 0 0 0 .369-.372V13.95a.37.37 0 0 0-.37-.372h-10.989a.37.37 0 0 0-.369.372v19.535a.37.37 0 0 0 .37.372h10.989a.37.37 0 0 0 .369-.372v-3.1a.37.37 0 0 0-.37-.373" clip-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.3 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" fill="none" viewBox="0 0 130 22"><path fill="#666" d="M5 12.3a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9M10.9.7a4.5 4.5 0 0 1 4.4 5.4c-.3 1.4-.6 3 .2 4.2l1.3 1.9.3.2.3-.2 1.3-1.9c.8-1.2.5-2.7.2-4.1a4.5 4.5 0 1 1 8.8.1c-.3 1.3-.6 2.7 0 3.9l1.3 2v.1a4.5 4.5 0 1 1-4.3 3.4c.3-1.3.6-2.7 0-3.9l-1.2-2h-.2L22 11.5c-.8 1.2-.5 2.8-.2 4.2a4.5 4.5 0 1 1-8.8.3q.5-2-.4-3.8l-.9-1.3q-.9-1.2-2.4-1.6A4.5 4.5 0 0 1 10.9.6M56.6 17v-6.9q0-1-.7-1.7t-1.7-.7q-1.3 0-2.1 1T51 11v6h-2.8V5.6h2.9v2.2q.6-1 1.6-1.8 1-.6 2.5-.7 1.2 0 2.3.7T59 7.8q.6-1.2 1.7-1.8a5 5 0 0 1 2.5-.7q2 0 3.1 1.2 1.3 1.2 1.3 3.2V17h-3v-6.6q0-1.4-.6-2t-1.7-.7q-1.2 0-2.1.9t-.9 2.3V17zm18.6.3q-1.5 0-3-.7a6 6 0 0 1-2-2.2q-.7-1.5-.7-3 0-1.8.7-3.2a6 6 0 0 1 5-3q1.4 0 2.6.7t1.8 1.6V5.6h3V17h-3v-2q-.6 1.2-1.8 1.8-1.2.5-2.6.5M76 15q1.6 0 2.6-1t1-2.7-1-2.7-2.6-1-2.6 1-1 2.7 1 2.7 2.6 1m14 2.3a7 7 0 0 1-4.1-1q-1.5-1.2-1.6-3L87 13q0 1 .8 1.6t2.2.7a3 3 0 0 0 1.7-.5q.7-.4.7-1a1 1 0 0 0-.6-1l-1.4-.6-3.8-.9q-.8-.3-1.4-.9t-.6-1.7q0-1.6 1.4-2.6t3.8-1 3.6 1A3 3 0 0 1 95 8.6l-2.8.1q0-.6-.6-1.2T89.8 7q-1 0-1.7.4t-.6 1 .6 1l1.5.4 3.7.9q.8.3 1.5 1 .5.6.5 1.7 0 1.8-1.4 2.8-1.5 1-4 1m12.6 0q-1.9 0-3-1a4 4 0 0 1-1.2-2.8V7.7h-2.5V5.5h2.5V2.2h2.9v3.4h3.7v2.2h-3.7V13q0 1 .4 1.4.5.5 1.3.5l1-.2.9-.6.4 2.4q-.3.3-1.1.5-.7.2-1.6.2m4.3-.3V5.6h2.9V8q.5-1.2 1.5-2a4 4 0 0 1 4.2-.4l-.3 2.8-.9-.4-1-.2-1 .2q-.7.2-1.2.6t-1 1.2q-.3.7-.3 2V17zm14.7.3q-1.6 0-3-.7a6 6 0 0 1-2-2.2q-.8-1.5-.8-3 0-1.8.7-3.2a6 6 0 0 1 5-3q1.5 0 2.6.7t1.9 1.6V5.5h2.9V17h-3v-2q-.6 1.2-1.8 1.8-1.1.5-2.5.5m.7-2.3q1.6 0 2.6-1t1-2.7-1-2.7-2.6-1-2.6 1-1 2.7 1 2.7 2.6 1"/></svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 0 164 37"><path fill="#666" d="M14.42 2.582c-2.267 1.207-4.118 2.22-4.107 2.242.01.036 8.141 4.306 8.259 4.337.047.016 8.21-4.938 8.21-4.98 0-.047-8.093-3.815-8.178-3.81-.032.005-1.921.998-4.183 2.21m59.629-.543-2.907 1.61-.016 1.311-.01 1.312h-4.482v5.017h4.476l.021 5.733c.016 6.114.016 6.015.283 7.175.688 2.99 2.673 4.97 5.623 5.613 1.665.36 3.996.277 5.874-.204.395-.104 1.67-.523 1.745-.575.021-.02-1.595-4.86-1.643-4.907-.027-.026-.235.031-.491.136-1.84.768-3.66.648-4.615-.308-.363-.366-.688-1.004-.79-1.558-.064-.345-.074-1.374-.08-5.759v-5.346l3.324-.01 3.319-.016.016-2.498.01-2.493h-6.615V3.345c0-2.31-.016-2.927-.064-2.922-.038.005-1.377.732-2.977 1.615m70.439.005-2.951 1.626v26.067h5.976l.01-5.3.016-5.304 4.674 5.289 4.668 5.289 3.558.015 3.559.01v-.5l-5.522-5.959c-3.036-3.271-5.516-5.978-5.506-6.015.006-.031 2.204-2.466 4.882-5.403 4.071-4.468 4.866-5.362 4.866-5.488v-.15h-7.144l-4.017 4.693-4.018 4.698-.016-7.599c-.005-4.175-.026-7.593-.053-7.593-.021 0-1.366.732-2.982 1.625M23.048 7.52l-4.349 2.707-.032 2.948c-.016 1.62-.037 6.02-.042 9.772l-.006 6.826 4.375 2.466a736 736 0 0 0 4.402 2.462c.016 0 .026-2.232.026-4.955v-4.954l-4.375-2.32c-2.406-1.28-4.374-2.336-4.374-2.352s1.974-1.113 4.39-2.44l4.386-2.41.016-5.23c.005-2.88-.005-5.232-.027-5.227-.026 0-2 1.218-4.39 2.707m30.169-1.95c-.987.085-2.491.372-3.387.654-.46.146-1.356.528-1.804.763-2.118 1.129-3.393 2.827-3.697 4.918-.09.632-.037 1.902.107 2.508.256 1.082.715 1.934 1.467 2.713a7.2 7.2 0 0 0 1.873 1.41c1.995 1.025 3.547 1.401 7.122 1.715 2.95.261 4.06.92 4.06 2.404 0 .261-.032.527-.09.684-.465 1.349-2.412 2.268-4.53 2.138-2.465-.152-5.522-1.25-7.219-2.592a7 7 0 0 1-.56-.502c-.133-.146-.17-.167-.23-.11-.037.037-.703.972-1.488 2.08l-1.419 2.012.427.397c2.177 2.038 4.743 3.235 7.773 3.627.934.12 3.153.194 4.023.13 3.243-.24 5.602-1.16 7.234-2.832q2.312-2.361 1.942-5.874c-.117-1.15-.565-2.357-1.179-3.161-.341-.455-1.051-1.119-1.547-1.443-1.66-1.097-3.708-1.636-7.33-1.923-1.66-.136-2.535-.313-3.335-.69-1.771-.83-1.755-2.937.032-3.726 1.232-.543 3.33-.674 5.196-.313 1.286.245 2.364.747 3.41 1.583.389.313.394.313.48.204.048-.058.779-.904 1.627-1.882.843-.977 1.542-1.797 1.542-1.818.005-.068-.843-.727-1.409-1.092a11.5 11.5 0 0 0-3.617-1.563c-1.2-.298-2.15-.402-3.793-.423a49 49 0 0 0-1.68.005m75.09.021c-4.47.413-8.024 2.587-9.811 6.004-.805 1.537-1.227 3.058-1.398 5.017-.08.915-.037 2.755.086 3.611.768 5.467 4.444 9.14 10.051 10.03 2.086.334 4.444.234 6.263-.257 1.062-.287 2.246-.8 3.132-1.348.736-.46 2.401-1.777 2.401-1.902 0-.027-.56-.586-1.238-1.234-.683-.648-1.574-1.5-1.974-1.886l-.731-.7-.192.15c-.667.534-.976.738-1.547 1.015-.742.36-1.11.48-1.921.627-1.798.33-3.788.063-5.148-.695-1.937-1.072-3.062-2.906-3.254-5.315-.272-3.36 1.392-6.161 4.294-7.238 1.163-.428 2.7-.554 3.9-.314 1.158.236 2.364.79 3.228 1.5.133.11.256.199.272.199.064 0 3.697-3.773 3.697-3.836 0-.037-.165-.22-.373-.402-1.862-1.673-3.799-2.603-6.162-2.948-.715-.104-2.785-.151-3.575-.078m-30.601.11c-5.832.548-9.828 4.19-10.687 9.725a16.6 16.6 0 0 0 .075 5.608c.88 4.672 3.815 7.849 8.301 8.983 1.852.465 4.018.56 5.57.24 1.601-.329 3.004-.935 4.194-1.813.672-.491 1.387-1.29 1.707-1.897.096-.178.128-.209.139-.13.016.125.282 3.203.282 3.27 0 .027 1.174.048 2.801.048h2.801V6.219h-5.708v.115c0 .125-.155 2.744-.176 2.968-.011.11-.048.073-.273-.261-.352-.523-1.221-1.359-1.835-1.766-1.264-.847-2.838-1.411-4.396-1.573-.587-.063-2.14-.063-2.795 0m3.531 5.252c1.483.22 2.945 1.013 3.868 2.095.406.47.72.92.918 1.307 1.456 2.817 1.04 6.402-.992 8.623-1.276 1.395-2.983 2.106-5.09 2.111-2.091.005-3.804-.638-5.116-1.928-1.355-1.328-2.05-3.1-2.05-5.242 0-3.533 2.055-6.177 5.357-6.898.934-.204 2.044-.23 3.105-.068M5.72 17.93a2785 2785 0 0 0-4.312 2.619c-.016.015 1.409.81 3.164 1.766 1.755.961 3.756 2.054 4.45 2.43l1.259.69L14.41 22.8c2.273-1.448 4.135-2.65 4.145-2.676.01-.036-2.32-1.343-8.045-4.51l-.507-.282zm27.053 4.296-4.39 2.67v4.934c0 2.712.02 4.923.042 4.912.027-.005 2.006-1.165 4.402-2.57l4.358-2.556v-5.033a628 628 0 0 0-.01-5.033c-.01 0-1.99 1.202-4.402 2.676M1.227 26.694v4.954l4.353 2.347a567 567 0 0 0 4.402 2.367c.027.01.043-2.137.037-4.954l-.016-4.975-4.348-2.346c-2.39-1.291-4.364-2.347-4.385-2.347-.027 0-.043 2.226-.043 4.954"/></svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" fill="none" viewBox="0 0 200 57"><path fill="#666" d="M157.076 36.609V8.354h3.934l.609 3.767c1.33-1.994 3.934-4.1 8.255-4.1 3.934 0 7.313 1.773 8.92 5.375 1.717-3.048 4.764-5.374 9.806-5.374 5.873 0 10.692 3.213 10.692 11.523V36.61h-4.542V19.822c0-4.93-2.438-7.645-6.704-7.645-4.709 0-7.59 3.324-7.59 8.532v15.9h-4.543V19.822c0-4.93-2.493-7.645-6.814-7.645-4.654 0-7.48 3.656-7.48 8.753v15.68z"/><path fill="#666" d="M139.069 36.941c-6.205 0-10.416-3.102-10.416-8.255 0-5.65 3.934-8.808 11.358-8.808h8.31v-1.94c0-3.822-2.604-5.872-7.036-5.872-4.155 0-6.648 1.884-7.202 4.764h-4.543c.665-5.54 5.152-8.808 11.966-8.808 7.203 0 11.358 3.6 11.358 10.193V30.57c0 1.496.554 1.884 1.828 1.884h5.945v4.155h-6.998c-3.601 0-5.097-1.662-5.097-4.266v-.11c-1.662 2.548-4.598 4.708-9.473 4.708m.332-3.878c5.651 0 8.92-3.269 8.92-7.978V23.7h-8.754c-4.044 0-6.315 1.496-6.315 4.71 0 2.991 2.382 4.653 6.149 4.653m-24.233 3.547V8.355h3.934l.609 4.266c1.33-2.161 3.49-4.266 8.532-4.266h1.274v4.432h-2.271c-5.928 0-7.535 4.93-7.535 9.418V36.61zM97.295 48.022c-7.202 0-12.244-3.38-12.964-9.585h4.654c.775 3.546 3.933 5.54 8.642 5.54 5.928 0 9.142-2.77 9.142-8.92v-2.991c-1.884 2.604-4.931 4.875-9.696 4.875-7.811 0-13.573-5.263-13.573-14.46 0-8.642 5.762-14.46 13.573-14.46 4.765 0 7.978 1.94 9.696 4.654l.609-4.321h3.934v26.87c0 8.144-4.322 12.798-14.017 12.798m.222-15.125c5.54 0 9.307-4.266 9.307-10.305 0-6.205-3.767-10.526-9.307-10.526-5.596 0-9.363 4.266-9.363 10.415 0 6.15 3.767 10.416 9.363 10.416"/><path fill="#666" fill-rule="evenodd" d="M26.467.431a3.08 3.08 0 0 1 3.075.005L54.367 13.48l.028.014.01.007.021.013a3.29 3.29 0 0 1 1.572 2.813v2.751c0 1.133-.58 2.218-1.56 2.808l-.03.018-.009.005-.03.016-1.834.935 1.846.996.023.012.01.006.017.012A3.3 3.3 0 0 1 56 26.697v3.437c0 1.132-.578 2.213-1.558 2.804l.002.002-.022.014-.016.01-.025.012-.002-.002-1.737.913 1.732.91.025.013.01.007.024.014A3.28 3.28 0 0 1 56 37.643v2.063c0 1.133-.579 2.218-1.56 2.808l-.023.014-.009.007-.025.01-24.85 13.06-.113.061-.005-.004a3 3 0 0 1-.645.246l-.005.012-.047.102h-.716c-.527 0-1.06-.138-1.542-.42L1.626 42.558l-.025-.014-.01-.004-.022-.014A3.29 3.29 0 0 1 0 39.711V16.328c0-1.133.579-2.216 1.56-2.806l.023-.016.009-.004.025-.014zm1.381 2.229a.5.5 0 0 0-.113.052l-.027.015-.007.003-.025.013-24.802 13.03a.67.67 0 0 0-.283.56v23.382c0 .249.13.46.294.564L27.667 53.3l.002.003.023.011.007.005.025.013a.51.51 0 0 0 .53.007l.022-.016.037-.018L53.11 40.272a.67.67 0 0 0 .287-.557V37.65a.67.67 0 0 0-.285-.56l-3.28-1.723L29.527 46.04l-.002-.002a3.08 3.08 0 0 1-3.062.002L7.384 36.312l-.031-.016-.012-.007-.027-.018a2.3 2.3 0 0 1-1.105-1.966v-.516c0-.792.405-1.543 1.09-1.96l.022-.015.014-.009.027-.013 6.868-3.612-6.857-3.62-.025-.012-.016-.01-.022-.015a2.3 2.3 0 0 1-1.1-1.963v-.517c0-.791.405-1.542 1.09-1.96l.034-.021.013-.01.036-.015 19.094-9.579a3.07 3.07 0 0 1 3.069.014L49.75 21.366l3.379-1.73a.67.67 0 0 0 .276-.55v-2.75a.68.68 0 0 0-.292-.567L28.33 2.75l-.028-.013-.01-.007-.026-.016a.53.53 0 0 0-.27-.075h-.033l-.116.02ZM8.802 33.975v.127l18.852 9.62h.004l.03.015.006.004.03.019c.178.108.379.1.534.006l.025-.013.007-.005.027-.013 18.716-9.837-7.921-4.162-9.597 4.911-.002-.002a3.07 3.07 0 0 1-3.062-.014l-9.425-4.979zm19.472-9.941a.52.52 0 0 0-.528-.01l-.022.017-.016.009-.03.013-7.846 4.122 7.837 4.139.041.02.023.014a.5.5 0 0 0 .527.005l.028-.019.01-.006.033-.014 7.961-4.076-7.961-4.183-.003-.002-.025-.011-.004-.002zm13.68 4.246 7.88 4.141 3.292-1.73a.67.67 0 0 0 .277-.55v-3.437c0-.25-.13-.463-.295-.567l-3.394-1.831zM28.27 12.74a.51.51 0 0 0-.53-.01l.002.003-.032.02-.018.01-.034.013-18.852 9.459v.127l8.227 4.345 9.432-4.957a3.07 3.07 0 0 1 1.537-.41c.54.001 1.068.148 1.531.415l9.597 5.04 7.8-3.99-18.613-10.038-.002-.002-.02-.011-.005-.003z" clip-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="20" fill-rule="evenodd" clip-rule="evenodd" viewBox="0 0 2952 592"><g fill="#666"><path d="M291.5 4.5a33.7 33.7 0 0 1 11 1.5c93.33 41 186.67 82 280 123a30 30 0 0 1 2.5 4.5q1.005 161.5 0 323c-2.46 9.131-8.3 14.965-17.5 17.5A34503 34503 0 0 1 295 587.5 24719 24719 0 0 1 12.5 469q-5.822-4.392-7.5-11.5-1-162 0-324l2-4a35144 35144 0 0 1 284.5-125m272 235a5686 5686 0 0 1 0 213 10199 10199 0 0 1-179 74.5c59.8-95.777 119.47-191.611 179-287.5m-330 4a2293 2293 0 0 0 50 22 43.2 43.2 0 0 1 .5 16 51403 51403 0 0 1-246 176 83 83 0 0 1-11.5-5 561 561 0 0 1-.5-58 85298 85298 0 0 1 207.5-151m50 64a8010 8010 0 0 1 0 253 32889 32889 0 0 1-222-93.5 38522 38522 0 0 0 222-159.5"/><path d="M292.5 25.5a39.9 39.9 0 0 1 14 4.5 39680 39680 0 0 1 243 107 42686 42686 0 0 0-253 111 21215 21215 0 0 1-256-111 106681 106681 0 0 0 252-111.5m596 50h75c.17 36.002 0 72.002-.5 108a838 838 0 0 1-2.5 34q2.835.305 4.5-2c15.06-21.794 35.9-34.294 62.5-37.5 28.82-3.904 55.49 1.763 80 17 21.17 18.17 32.33 41.337 33.5 69.5.5 63.666.67 127.332.5 191h-75c.17-54.668 0-109.334-.5-164-.41-43.09-21.57-60.257-63.5-51.5-18.34 7.01-29.5 20.177-33.5 39.5a201.2 201.2 0 0 0-5 42c-.5 44.665-.67 89.332-.5 134h-75zm624 0h75v380h-75zm179 0q22.65-3.284 42 8.5c5.12 4.74 8.29 10.573 9.5 17.5q1.005 10 0 20c-1 8.834-5.16 15.668-12.5 20.5-15.13 7.038-30.8 8.371-47 4-15.6-5.851-22.94-17.185-22-34q.03-30.893 30-36.5m-1666 77q-.499 108.254 1 216-.09.814-1 1a5893 5893 0 0 1 0-217"/><path d="M25.5 152.5a23074 23074 0 0 1 186 81.5 35133 35133 0 0 1-185 134.5 11663 11663 0 0 1-1-216m537 0h3c.17 15.67 0 31.337-.5 47l-214.5 343a1880 1880 0 0 0-45 19 938 938 0 0 1-.5-75 47420 47420 0 0 0 201-308 6746 6746 0 0 1 56.5-26m749 25c26.53-2.476 52.19 1.024 77 10.5 31.88 15.226 52.05 40.06 60.5 74.5a173 173 0 0 1 4 34c.5 13.663.67 27.329.5 41h-176q2.85 67.555 70.5 67a200 200 0 0 0 50.5-6.5 490 490 0 0 0 39-14.5c.17 19.336 0 38.67-.5 58q-33.375 16.158-70.5 18.5c-36.4 4.441-71.07-1.226-104-17-33.65-20.425-53.49-50.258-59.5-89.5-5.49-36.652-1.82-72.319 11-107q29.715-61.246 97.5-69m17 53c27.12-.04 44.28 12.96 51.5 39a166 166 0 0 1 2.5 18h-104c.98-15.107 5.81-28.774 14.5-41 9.88-9.86 21.71-15.193 35.5-16m587-53c31.63-2.713 62.3 1.454 92 12.5 4.68 1.672 9.01 3.839 13 6.5a1382 1382 0 0 1-22 56.5 810 810 0 0 0-43-13c-14.54-3.633-28.87-2.966-43 2-15.21 6.88-25.04 18.38-29.5 34.5-7.61 29.436-7.27 58.769 1 88 7.52 19.679 21.69 31.179 42.5 34.5 16.63 1.263 32.97-.404 49-5 12.93-4.821 25.27-10.654 37-17.5.17 21.336 0 42.669-.5 64-17.57 11.078-36.73 17.578-57.5 19.5-102.05 9.666-153.38-36.667-154-139-.31-24.967 3.86-49.133 12.5-72.5 16.34-36.601 44.17-59.101 83.5-67.5 6.47-1.187 12.81-2.354 19-3.5m256 0c34.93-3.963 67.26 3.204 97 21.5 28.21 20.889 45.37 48.723 51.5 83.5 7.09 39.841 2.43 78.174-14 115q-26.76 49.722-82.5 60.5a235.4 235.4 0 0 1-60 1c-47.05-8.441-79.22-34.941-96.5-79.5-13.18-42.891-12.52-85.558 2-128 20.04-44.203 54.21-68.869 102.5-74m16 60q47.55.145 55.5 47 8.505 44.84-6 88-14.4 28.336-46.5 28c-27.35-.255-44.52-13.588-51.5-40q-10.215-46.428 3-92c8.71-19.93 23.88-30.264 45.5-31m336-60c25.75-2.821 50.08 1.679 73 13.5 25.45 16.718 38.62 40.551 39.5 71.5.5 64.332.67 128.666.5 193h-75c.17-55.668 0-111.334-.5-167-1.78-41.439-22.95-57.606-63.5-48.5-17.82 5.824-28.65 17.991-32.5 36.5a159 159 0 0 0-5 28c-.5 50.332-.67 100.666-.5 151h-76v-273c19.34-.167 38.67 0 58 .5a786 786 0 0 1 9.5 32.5c.39.928 1.05 1.595 2 2q26.85-34.558 70.5-40m283 0c26.55-2.612 52.22.888 77 10.5 31.89 15.234 52.06 40.067 60.5 74.5 2.27 9.875 3.6 19.875 4 30 .5 14.996.67 29.996.5 45h-176q3.495 66.876 70.5 67a200 200 0 0 0 50.5-6.5 490 490 0 0 0 39-14.5c.17 19.336 0 38.67-.5 58-18.78 9.258-38.61 15.091-59.5 17.5a303.4 303.4 0 0 1-76-2c-51.54-11.208-83.71-42.375-96.5-93.5q-10.755-55.28 6-109 27.6-67.938 100.5-77m17 53c25.46-.537 42.29 11.129 50.5 35a100.6 100.6 0 0 1 3.5 22h-104c.77-19.037 8.11-34.87 22-47.5 8.66-5.498 18-8.665 28-9.5m-1159-48h76v273h-76zm-1358 266a8376 8376 0 0 1-1-183 7723 7723 0 0 1 168-72.5 61878 61878 0 0 0-167 255.5"/><path d="M305.5 265.5a8376 8376 0 0 0 1 183q-.425 1.184-1.5 2a5711 5711 0 0 1 .5-185"/></g></svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

+78
View File
@@ -0,0 +1,78 @@
# Simplify Review
You are a code simplification specialist. Your job is to analyze a PR diff for simplification opportunities, then return a structured summary of findings. You do NOT post any GitHub comments — just return your findings to the caller.
## Phase 1: Get Context
1. Run `gh pr diff <PR_NUMBER>` to get the full diff (replace `<PR_NUMBER>` with the PR number from your prompt)
2. Read `AGENTS.md` and `CLAUDE.md` for project conventions
3. Store the diff text for analysis
## Phase 2: Analyze for Simplification
Review the changed code for three categories. For each, search the codebase for context — read surrounding files, check for existing patterns, and verify your findings against the actual code.
### Code Reuse
For each change:
1. **Search for existing utilities and helpers** that could replace newly written code. Look for similar patterns elsewhere in the codebase — common locations are utility directories, shared modules, and files adjacent to the changed ones.
2. **Flag any new function that duplicates existing functionality.** Suggest the existing function to use instead.
3. **Flag any inline logic that could use an existing utility** — hand-rolled string manipulation, manual path handling, custom environment checks, ad-hoc type guards, and similar patterns are common candidates.
This is a monorepo. Search across `packages/*/src/` for existing utilities.
### Code Quality
Review the same changes for hacky patterns:
1. **Redundant state**: state that duplicates existing state, cached values that could be derived, observers/effects that could be direct calls
2. **Parameter sprawl**: adding new parameters to a function instead of generalizing or restructuring existing ones
3. **Copy-paste with slight variation**: near-duplicate code blocks that should be unified with a shared abstraction
4. **Leaky abstractions**: exposing internal details that should be encapsulated, or breaking existing abstraction boundaries
5. **Unclear naming**: vague variable/function names that obscure intent — look for names that don't clearly convey purpose or type
6. **Stringly-typed code**: using raw strings where constants, enums (string unions), or branded types already exist in the codebase
7. **Unnecessary JSX nesting**: wrapper Boxes/elements that add no layout value — check if inner component props (flexShrink, alignItems, etc.) already provide the needed behavior
8. **Project convention deviations**: check AGENTS.md and CLAUDE.md for project conventions. Do not flag issues that oxlint/oxfmt already enforce (formatting, Tailwind class order).
### Efficiency
Review the same changes for efficiency:
1. **Unnecessary work**: redundant computations, repeated file reads, duplicate network/API calls, N+1 patterns
2. **Missed concurrency**: independent operations run sequentially when they could run in parallel
3. **Hot-path bloat**: new blocking work added to startup or per-request/per-render hot paths
4. **Unnecessary existence checks**: pre-checking file/resource existence before operating (TOCTOU anti-pattern) — operate directly and handle the error
5. **Memory**: unbounded data structures, missing cleanup, event listener leaks
6. **Overly broad operations**: reading entire files when only a portion is needed, loading all items when filtering for one
7. **Missing subscription cleanup**: `subscribe()` without corresponding `unsubscribe` in effect or cleanup patterns
## Phase 3: Filter
For each finding:
- **Keep** if it's genuinely worth changing — a real improvement, not nitpicking
- **Filter out** if it's a false positive, too minor, or stylistic preference already handled by the linter
Maintain balance — do not suggest over-simplification that would:
- Create overly clever solutions harder to understand
- Combine too many concerns into single functions
- Remove helpful abstractions that improve organization
- Prioritize "fewer lines" over readability
## Return Format
Return your findings in this format:
```
### Reuse (N issues)
- `file:line` — description of what exists and what it could replace
### Quality (N issues)
- `file:line` — description of the pattern and suggested fix
### Efficiency (N issues)
- `file:line` — description of the inefficiency and improvement
```
If a category has no issues, omit it. If no issues found at all, return: "No simplification opportunities found. Code looks clean."

Some files were not shown because too many files have changed in this diff Show More