Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
9fc9c8f
chore: avoid duplicate shadcn skill exposure
Calcium-Ion Jun 23, 2026
2f23a66
fix: support SMTP STARTTLS mode and NTLM auth (#5426)
bensonfx Jun 24, 2026
cf6ae6f
fix: preserve SMTP PLAIN auth TLS guard
Calcium-Ion Jun 24, 2026
993d67e
chore(deps): bump github.com/ClickHouse/ch-go from 0.58.2 to 0.65.0 (…
dependabot[bot] Jun 24, 2026
72b3f34
chore: update agent skills and project config
Calcium-Ion Jun 24, 2026
64eafc9
fix: date-fns-tz classic theme build error (#5676)
seefs001 Jun 24, 2026
acb52d0
chore(deps): update clickhouse-go and orb dependencies
Calcium-Ion Jun 24, 2026
5377192
feat: add system task runner (#5680)
Calcium-Ion Jun 24, 2026
2cbdfa0
feat: add system instance info panel (#5716)
Calcium-Ion Jun 24, 2026
f4473d9
fix(web): replace default markdown renderer and expand syntax support…
QuentinHsu Jun 24, 2026
de0d6ac
fix(web): sync channel card selection state (#5700)
yyhhyyyyyy Jun 24, 2026
0b2cf43
fix(web): hide wallet entry in profile dropdown when wallet module di…
feitianbubu Jun 24, 2026
5d94328
feat(system-settings): add user token limit configuration section (#5…
RedwindA Jun 24, 2026
d2dcbc3
feat: add channel async polling delay toggle
Calcium-Ion Jun 24, 2026
5814ca9
fix: add token limit save label translations
Calcium-Ion Jun 24, 2026
ad35ab1
feat: enhance i18n-translate skill
Calcium-Ion Jun 24, 2026
48da37a
feat: add date-fns and date-fns-tz dependencies
Calcium-Ion Jun 24, 2026
69b0f0b
feat: add date-fns and date-fns-tz paths to build configuration
Calcium-Ion Jun 24, 2026
0bf4278
chore(deps): bump dompurify from 3.4.5 to 3.4.11 in /web/default (#5718)
dependabot[bot] Jun 24, 2026
c12e5db
fix(ci): install classic workspace dependencies for releases (#5719)
seefs001 Jun 24, 2026
b191f47
fix: use neutral drawing task labels
Calcium-Ion Jun 24, 2026
9ba251c
perf(web): streamline table actions and destructive dialogs (#5645)
QuentinHsu Jun 25, 2026
7939674
fix: add Waffo goods info and webhook SDK update (#5704)
zhongyuanzhao-alt Jun 25, 2026
3245b2b
fix(model-pricing): refresh tiered expression editor when switching m…
feitianbubu Jun 26, 2026
3507434
chore(deps): sync bun.lock for dompurify 3.4.11 (#5738)
feitianbubu Jun 26, 2026
c0e42bf
fix(theme): 切换前端主题后重置到首页,避免路由 404 (#5612)
zhangzhichaolove Jun 26, 2026
d10fc76
fix(task): attribute async task usage log to the initiating node (#5684)
feitianbubu Jun 26, 2026
6c35e1e
chore: update i18n skill
Calcium-Ion Jun 27, 2026
4aee5f7
feat: better admin permissions (#5755)
Calcium-Ion Jun 27, 2026
df44a75
fix: adapt ClickHouse log LIKE filters
Calcium-Ion Jun 27, 2026
966af88
feat(playground): improve Playground chat experience and Markdown ren…
QuentinHsu Jun 27, 2026
df5ba9f
fix(auth): align password validation copy (#5759)
QuentinHsu Jun 27, 2026
0b48ad8
fix(web): render custom HTML and Markdown content consistently (#5760)
QuentinHsu Jun 27, 2026
b727a62
chore: sync upstream
shudonglin Jun 27, 2026
6bd2437
fix(security): pin patched frontend transitive dependencies
shudonglin Jun 27, 2026
626dadb
fix(web): secure rich content rendering
Calcium-Ion Jun 27, 2026
efacfc1
Merge remote-tracking branch 'upstream/main' into fix/security-qualit…
shudonglin Jun 27, 2026
12f74c4
fix(web): harden iframe sandboxing
shudonglin Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 62 additions & 4 deletions .agents/skills/i18n-translate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,46 @@ name: i18n-translate
description: >-
Complete and maintain frontend i18n translations for this project. Covers
finding missing translation keys, detecting untranslated entries, and adding
translations for all supported locales (en, zh, fr, ja, ru, vi). Use when the
user asks to add translations, fix i18n, complete missing translations, or
when new UI text needs to be internationalized.
translations for all supported locales (en, zh, fr, ja, ru, vi). Use for any
task involving frontend locale files, missing translation keys, untranslated
UI text, `t(...)` keys, `useTranslation()`, static i18n keys, button/label/
toast/dialog/placeholder/validation copy, or adding/fixing even a single
i18n key. Use when review findings mention missing i18n, when new UI text
needs translation, or when the user asks to add translations, fix i18n, or
complete missing translations. Always load and follow this skill before
translating, adding locale keys, or editing frontend i18n files.
---

# Frontend i18n Translation Workflow

## Mandatory Preflight

- Read this entire `SKILL.md` before any frontend i18n work, including one-key fixes.
- Before editing locale files, confirm the source text comes from a `t(...)` key, `en.json`, existing UI copy, or an explicitly requested new UI string.
- Use the user conversation only to understand the task target. Do not copy conversation text, review wording, or task descriptions directly into locale values.
- Before translating each key, re-think the intended UI copy from the code and locale context instead of treating the surrounding chat as the translation source.

### Hard Constraint: Locale Writes Go Through the Script

- You MUST NOT edit `web/default/src/i18n/locales/*.json` directly with text-editing tools (StrReplace, Write, search-and-replace, manual JSON edits, etc.). This applies even to a single key.
- ALL locale writes MUST go through the `add-missing-keys.mjs` script, followed by `bun run i18n:sync`. The script is the only sanctioned way to add or change locale values.
- Why this is mandatory, not optional:
- Hand-editing reliably drops one or more of the six locales (`en`, `zh`, `fr`, `ja`, `ru`, `vi`), leaving keys missing in some languages.
- Hand-editing breaks the required alphabetical key order and introduces JSON syntax errors (trailing commas, mismatched quotes).
- The script writes all six files atomically with consistent sorting, so the locale set stays in sync by construction.
- The script does not do the translation for you. You still must reason out each locale's copy and populate the script's `newKeys` object; the script only handles insertion, sorting, and writing. Do not skip the script just because the thinking happens regardless.

## Scope Checklist

Before editing files, treat the task as covered by this skill if it involves:

- `i18n`, translation, locale files, language packs, missing keys, or untranslated text
- `t('...')`, `useTranslation()`, `static-keys.ts`, or `locales/*.json`
- UI copy in buttons, labels, toasts, dialogs, placeholders, validation messages, descriptions, or table/empty states
- A review finding about missing i18n keys

Do not skip this workflow because the fix is "just one key".

## Overview

- Locale files: `web/default/src/i18n/locales/{en,zh,fr,ja,ru,vi}.json`
Expand All @@ -18,6 +51,16 @@ description: >-
- Sync script: `bun run i18n:sync` (from `web/default/`)
- All `t()` calls must have corresponding keys in every locale file

## Small Fix Path

For a single known missing key (still script-only, no direct JSON edits):

1. Confirm the exact key at the call site and verify it is absent from all locale files.
2. Add the key via `add-missing-keys.mjs`, populating its `newKeys` object for every supported locale: `en`, `zh`, `fr`, `ja`, `ru`, `vi`. Even one key goes through the script; do not hand-edit the JSON.
3. The script preserves the flat `"translation"` object and keeps keys alphabetically sorted automatically.
4. Run a targeted search for the key in code and locale files.
5. Run `bun run i18n:sync` to normalize file order. This step is mandatory, not optional.

## Workflow

### Step 1: Run sync and read report
Expand Down Expand Up @@ -153,7 +196,7 @@ for (const locale of locales) {

### Step 4: Add translations

Create `web/default/scripts/add-missing-keys.mjs` with this structure:
This script is the ONLY sanctioned way to write locale values. You MUST NOT bypass it by hand-filling the JSON files. Create `web/default/scripts/add-missing-keys.mjs` with this exact structure:

```javascript
import fs from 'node:fs/promises'
Expand Down Expand Up @@ -224,6 +267,20 @@ Delete temporary scripts after completion.

## Translation Guidelines

### Source Text Rules

- Reconsider every key's UI meaning before translating: component location, user action, placeholder variables, button/label/toast/dialog/validation context, and whether the copy is a noun, command, status, or full sentence.
- Prefer the English key or `en` value as the source text. Use the call site only to clarify meaning, tone, and constraints.
- Do not copy chat messages, review comments, issue descriptions, or task wording as translation text.
- If the source text is unclear, inspect the code and locale files first. Ask the user for exact source copy only when the intended UI text remains ambiguous.

### Length and Layout Awareness

- Consider whether translated text may overflow the UI before choosing final wording, especially for buttons, table headers, menu items, labels, toasts, dialog titles, tabs, badges, and empty states.
- For languages that often expand relative to English, especially French, Russian, and Vietnamese, prefer natural but compact wording.
- Do not sacrifice meaning just to shorten text. When the call site has limited space, choose the shortest clear translation that preserves the UI intent.
- For interpolated variables, counts, model names, provider names, quotas, and dates, consider the longest realistic rendered text, not only the translation string itself.

| Language | Code | Notes |
|----------|------|-------|
| English | en | Base locale, key = value |
Expand Down Expand Up @@ -252,3 +309,4 @@ Delete temporary scripts after completion.
4. Always run `bun run i18n:sync` as the final step
5. Delete temporary scripts after completion
6. The `{{variable}}` placeholders in keys must be preserved in all translations
7. NEVER edit `locales/*.json` directly. Any non-script write to a locale file (StrReplace, Write, manual JSON edit) is non-compliant, including single-key fixes.
10 changes: 5 additions & 5 deletions .agents/skills/shadcn-ui/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ Vendored: [`vendor/shadcn/mcp.md`](./vendor/shadcn/mcp.md). Live docs: [MCP Serv

1. **Project detection** — Applies when `components.json` exists (here: `web/default/components.json`).
2. **Context injection** — Use `shadcn info --json` as ground truth for imports and APIs.
3. **Pattern enforcement** — Follow rules in [`vendor/shadcn/SKILL.md`](./vendor/shadcn/SKILL.md) and [`vendor/shadcn/rules/`](./vendor/shadcn/rules/).
4. **Component discovery** — `shadcn docs`, `shadcn search`, MCP, or registries — see vendored SKILL + MCP doc.
3. **Pattern enforcement** — Use [`vendor/shadcn/rules/`](./vendor/shadcn/rules/) for concrete markup checks; the complete official workflow reference is listed below for deeper CLI, registry, and preset questions.
4. **Component discovery** — `shadcn docs`, `shadcn search`, MCP, or registries — see the official workflow reference and MCP doc when deeper context is needed.

---

Expand All @@ -88,11 +88,11 @@ Vendored: [`vendor/shadcn/mcp.md`](./vendor/shadcn/mcp.md). Live docs: [MCP Serv

## Vendored upstream bundle (deep rules)

Snapshot from [shadcn-ui/ui `skills/shadcn`](https://github.com/shadcn-ui/ui/tree/main/skills/shadcn); revision note in [`vendor/shadcn/UPSTREAM.txt`](./vendor/shadcn/UPSTREAM.txt).
Snapshot from [shadcn-ui/ui `skills/shadcn`](https://github.com/shadcn-ui/ui/tree/main/skills/shadcn); revision note in [`vendor/shadcn/UPSTREAM.txt`](./vendor/shadcn/UPSTREAM.txt). The upstream workflow is stored as a reference file, with its original skill frontmatter removed, so the vendored copy is not discovered as a second local skill.

| Doc | Path |
| --- | --- |
| Full official skill body | [`vendor/shadcn/SKILL.md`](./vendor/shadcn/SKILL.md) |
| Official shadcn/ui workflow reference | [`vendor/shadcn/official-shadcn-ui-workflow.md`](./vendor/shadcn/official-shadcn-ui-workflow.md) |
| CLI reference | [`vendor/shadcn/cli.md`](./vendor/shadcn/cli.md) |
| Theming / customization | [`vendor/shadcn/customization.md`](./vendor/shadcn/customization.md) |
| MCP | [`vendor/shadcn/mcp.md`](./vendor/shadcn/mcp.md) |
Expand All @@ -102,4 +102,4 @@ Snapshot from [shadcn-ui/ui `skills/shadcn`](https://github.com/shadcn-ui/ui/tre
| Styling | [`vendor/shadcn/rules/styling.md`](./vendor/shadcn/rules/styling.md) |
| Base vs Radix | [`vendor/shadcn/rules/base-vs-radix.md`](./vendor/shadcn/rules/base-vs-radix.md) |

**Workflow:** Prefer this **root** `SKILL.md` for repo paths (`web/default`, Bun). Read **`vendor/shadcn/SKILL.md`** for the complete upstream workflow, patterns, and CLI quick reference. Use **`vendor/shadcn/rules/*.md`** when validating concrete markup.
**Workflow:** Prefer this **root** `SKILL.md` for repo paths (`web/default`, Bun). Read **`vendor/shadcn/official-shadcn-ui-workflow.md`** only when you need the complete official component, registry, or preset workflow. Use **`vendor/shadcn/rules/*.md`** when validating concrete markup.
1 change: 1 addition & 0 deletions .agents/skills/shadcn-ui/vendor/shadcn/UPSTREAM.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
Source: https://github.com/shadcn-ui/ui/tree/56161142f1b83f612462772d18883807b5f0d601/skills/shadcn
Branch: main
Fetched: 2026-04-29
Local file note: upstream SKILL.md is stored as official-shadcn-ui-workflow.md with its original frontmatter removed to avoid exposing the vendored copy as a separate local skill.
4 changes: 2 additions & 2 deletions .agents/skills/shadcn-ui/vendor/shadcn/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ npx shadcn@latest add button --diff globals.css

#### Smart Merge from Upstream

See [Updating Components in SKILL.md](./SKILL.md#updating-components) for the full workflow.
See [Updating Components in official-shadcn-ui-workflow.md](./official-shadcn-ui-workflow.md#updating-components) for the full workflow.

### `search` — Search registries

Expand Down Expand Up @@ -270,7 +270,7 @@ Three ways to specify a preset via `--preset`:
Ask the user first: **overwrite**, **merge**, or **skip** existing components?

- **Overwrite / Re-install** → `npx shadcn@latest apply --preset <code>`. Overwrites all detected component files with the new preset styles. Use when the user hasn't customized components.
- **Merge** → `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` to get the list of installed components and use the [smart merge workflow](./SKILL.md#updating-components) to update them one by one, preserving local changes. Use when the user has customized components.
- **Merge** → `npx shadcn@latest init --preset <code> --force --no-reinstall`, then run `npx shadcn@latest info` to get the list of installed components and use the [smart merge workflow](./official-shadcn-ui-workflow.md#updating-components) to update them one by one, preserving local changes. Use when the user has customized components.
- **Skip** → `npx shadcn@latest init --preset <code> --force --no-reinstall`. Only updates config and CSS variables, leaves existing components as-is.

Always run preset commands inside the user's project directory. `apply` only works in an existing project with a `components.json` file. The CLI automatically preserves the current base (`base` vs `radix`) from `components.json`. If you must use a scratch/temp directory (e.g. for `--dry-run` comparisons), pass `--base <current-base>` explicitly — preset codes do not encode the base.
2 changes: 1 addition & 1 deletion .agents/skills/shadcn-ui/vendor/shadcn/customization.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,4 +206,4 @@ npx shadcn@latest add button --dry-run # see all affected files
npx shadcn@latest add button --diff button.tsx # see the diff for a specific file
```

See [Updating Components in SKILL.md](./SKILL.md#updating-components) for the full smart merge workflow.
See [Updating Components in official-shadcn-ui-workflow.md](./official-shadcn-ui-workflow.md#updating-components) for the full smart merge workflow.
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
---
name: shadcn
description: Manages shadcn components and projects — adding, searching, fixing, debugging, styling, and composing UI. Provides project context, component docs, and usage examples. Applies when working with shadcn/ui, component registries, presets, --preset codes, or any project with a components.json file. Also triggers for "shadcn init", "create an app with --preset", or "switch to --preset".
user-invocable: false
allowed-tools: Bash(npx shadcn@latest *), Bash(pnpm dlx shadcn@latest *), Bash(bunx --bun shadcn@latest *)
---
# Official shadcn/ui Workflow Reference

Vendored from the upstream shadcn/ui skill. The original skill frontmatter is intentionally removed so this file stays a reference document instead of being discovered as a separate local skill.

# shadcn/ui

Expand Down
31 changes: 31 additions & 0 deletions .agents/skills/vercel-react-best-practices/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
name: vercel-react-best-practices
description: React and Next.js performance optimization guidelines from Vercel Engineering. Use when writing, reviewing, or refactoring React/Next.js code involving components, Next.js pages, Server Components, Server Actions, data fetching, bundle size, rendering behavior, or performance improvements.
---

# Vercel React Best Practices

Use this skill for React and Next.js performance work. The full Vercel guide is stored in `references/full-guide.md`; do not read the whole file by default.

## Workflow

1. Identify the relevant performance area from the task or code under review.
2. Search `references/full-guide.md` for the matching section or rule heading.
3. Read only the relevant section before changing or reviewing code.
4. Prioritize higher-impact categories before lower-impact micro-optimizations.

## Priority Order

1. Eliminating waterfalls: sequential async work, API route chains, missing `Promise.all`, Suspense boundaries.
2. Bundle size optimization: barrel imports, heavy client modules, dynamic imports, deferred third-party libraries.
3. Server-side performance: Server Actions auth, RSC serialization, per-request deduplication, cross-request caching, `after()`.
4. Client-side data fetching: SWR deduplication, global listeners, passive scroll listeners, localStorage schema.
5. Re-render optimization: derived state, effect dependencies, memo boundaries, functional state updates, transitions, refs.
6. Rendering performance: hydration mismatches, long lists, static JSX, SVG precision, resource hints, script loading.
7. JavaScript performance: repeated lookups, array passes, storage reads, layout thrashing, sort/min-max choices.
8. Advanced patterns: one-time initialization, stable callback refs, effect events.

## Reference

- Full compiled guide: `references/full-guide.md`
- Original project: https://github.com/vercel-labs/agent-skills/tree/main/skills/react-best-practices
6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
CI: ""
run: |
cd web
bun install --frozen-lockfile
bun install --filter ./classic --frozen-lockfile
cd classic
VITE_REACT_APP_VERSION=$VERSION bun run build
cd ../..
Expand Down Expand Up @@ -103,7 +103,7 @@ jobs:
CI: ""
run: |
cd web
bun install --frozen-lockfile
bun install --filter ./classic --frozen-lockfile
cd classic
VITE_REACT_APP_VERSION=$VERSION bun run build
cd ../..
Expand Down Expand Up @@ -160,7 +160,7 @@ jobs:
CI: ""
run: |
cd web
bun install --frozen-lockfile
bun install --filter ./classic --frozen-lockfile
cd classic
VITE_REACT_APP_VERSION=$VERSION bun run build
cd ../..
Expand Down
Loading
Loading