@lobehub/lobehub 2.0.0-next.352 → 2.0.0-next.354
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/add-provider-doc/SKILL.md +90 -0
- package/.agents/skills/add-setting-env/SKILL.md +106 -0
- package/.agents/skills/debug/SKILL.md +66 -0
- package/.agents/skills/desktop/SKILL.md +78 -0
- package/.agents/skills/desktop/references/feature-implementation.md +99 -0
- package/.agents/skills/desktop/references/local-tools.md +133 -0
- package/.agents/skills/desktop/references/menu-config.md +103 -0
- package/.agents/skills/desktop/references/window-management.md +143 -0
- package/.agents/skills/drizzle/SKILL.md +129 -0
- package/.agents/skills/drizzle/references/db-migrations.md +50 -0
- package/.agents/skills/hotkey/SKILL.md +90 -0
- package/{.cursor/rules/i18n.mdc → .agents/skills/i18n/SKILL.md} +14 -23
- package/.agents/skills/linear/SKILL.md +51 -0
- package/.agents/skills/microcopy/SKILL.md +83 -0
- package/.agents/skills/modal/SKILL.md +102 -0
- package/{.cursor/rules/project-structure.mdc → .agents/skills/project-overview/SKILL.md} +65 -37
- package/.agents/skills/react/SKILL.md +73 -0
- package/.agents/skills/react/references/layout-kit.md +100 -0
- package/.agents/skills/recent-data/SKILL.md +108 -0
- package/.agents/skills/testing/SKILL.md +89 -0
- package/.agents/skills/testing/references/agent-runtime-e2e.md +126 -0
- package/.agents/skills/testing/references/db-model-test.md +124 -0
- package/.agents/skills/testing/references/desktop-controller-test.md +124 -0
- package/.agents/skills/testing/references/electron-ipc-test.md +63 -0
- package/.agents/skills/testing/references/zustand-store-action-test.md +150 -0
- package/.agents/skills/typescript/SKILL.md +52 -0
- package/.agents/skills/zustand/SKILL.md +78 -0
- package/.agents/skills/zustand/references/action-patterns.md +125 -0
- package/.agents/skills/zustand/references/slice-organization.md +125 -0
- package/AGENTS.md +42 -55
- package/CHANGELOG.md +58 -0
- package/CLAUDE.md +57 -46
- package/GEMINI.md +47 -39
- package/changelog/v1.json +14 -0
- package/docs/development/database-schema.dbml +5 -0
- package/package.json +1 -1
- package/packages/database/migrations/0071_add_async_task_extend.sql +5 -0
- package/packages/database/migrations/meta/0071_snapshot.json +10720 -0
- package/packages/database/migrations/meta/_journal.json +7 -0
- package/packages/database/src/schemas/asyncTask.ts +12 -2
- package/src/features/FileViewer/Renderer/PDF/index.tsx +2 -3
- package/src/features/ShareModal/SharePdf/PdfPreview.tsx +1 -2
- package/src/libs/pdfjs/index.tsx +25 -0
- package/src/store/test-coverage.md +5 -5
- package/.cursor/rules/add-provider-doc.mdc +0 -183
- package/.cursor/rules/add-setting-env.mdc +0 -175
- package/.cursor/rules/cursor-rules.mdc +0 -28
- package/.cursor/rules/db-migrations.mdc +0 -46
- package/.cursor/rules/debug-usage.mdc +0 -86
- package/.cursor/rules/desktop-controller-tests.mdc +0 -189
- package/.cursor/rules/desktop-feature-implementation.mdc +0 -155
- package/.cursor/rules/desktop-local-tools-implement.mdc +0 -81
- package/.cursor/rules/desktop-menu-configuration.mdc +0 -209
- package/.cursor/rules/desktop-window-management.mdc +0 -301
- package/.cursor/rules/drizzle-schema-style-guide.mdc +0 -218
- package/.cursor/rules/hotkey.mdc +0 -162
- package/.cursor/rules/linear.mdc +0 -53
- package/.cursor/rules/microcopy-cn.mdc +0 -158
- package/.cursor/rules/microcopy-en.mdc +0 -148
- package/.cursor/rules/modal-imperative.mdc +0 -162
- package/.cursor/rules/packages/react-layout-kit.mdc +0 -122
- package/.cursor/rules/project-introduce.mdc +0 -36
- package/.cursor/rules/react.mdc +0 -169
- package/.cursor/rules/recent-data-usage.mdc +0 -139
- package/.cursor/rules/rules-index.mdc +0 -44
- package/.cursor/rules/testing-guide/agent-runtime-e2e.mdc +0 -285
- package/.cursor/rules/testing-guide/db-model-test.mdc +0 -455
- package/.cursor/rules/testing-guide/electron-ipc-test.mdc +0 -80
- package/.cursor/rules/testing-guide/testing-guide.mdc +0 -534
- package/.cursor/rules/testing-guide/zustand-store-action-test.mdc +0 -574
- package/.cursor/rules/typescript.mdc +0 -55
- package/.cursor/rules/zustand-action-patterns.mdc +0 -328
- package/.cursor/rules/zustand-slice-organization.mdc +0 -308
- package/src/libs/pdfjs/pdf.worker.ts +0 -1
- package/src/libs/pdfjs/worker.ts +0 -12
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/AGENTS.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/SKILL.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/advanced-event-handler-refs.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/advanced-use-latest.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-api-routes.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-defer-await.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-dependencies.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-parallel.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-suspense-boundaries.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-barrel-imports.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-conditional.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-defer-third-party.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-dynamic-imports.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-preload.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-event-listeners.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-localstorage-schema.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-passive-event-listeners.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-swr-dedup.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-batch-dom-css.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-cache-function-results.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-cache-property-access.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-cache-storage.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-combine-iterations.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-early-exit.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-hoist-regexp.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-index-maps.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-length-check-first.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-min-max-loop.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-set-map-lookups.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-tosorted-immutable.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-activity.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-conditional-render.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-content-visibility.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-hoist-jsx.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-svg-precision.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-defer-reads.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-dependencies.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-derived-state.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-functional-setstate.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-lazy-state-init.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-memo.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-transitions.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-after-nonblocking.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-cache-lru.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-cache-react.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-parallel-fetching.md +0 -0
- /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-serialization.md +0 -0
package/GEMINI.md
CHANGED
|
@@ -1,64 +1,72 @@
|
|
|
1
1
|
# GEMINI.md
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Guidelines for using Gemini CLI in this LobeChat repository.
|
|
4
4
|
|
|
5
5
|
## Tech Stack
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
- Next.js 16 + React 19 + TypeScript
|
|
8
|
+
- SPA inside Next.js with `react-router-dom`
|
|
9
|
+
- `@lobehub/ui`, antd for components; antd-style for CSS-in-JS
|
|
10
|
+
- react-i18next for i18n; zustand for state management
|
|
11
|
+
- SWR for data fetching; TRPC for type-safe backend
|
|
12
|
+
- Drizzle ORM with PostgreSQL; Vitest for testing
|
|
13
|
+
|
|
14
|
+
## Project Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
lobe-chat/
|
|
18
|
+
├── apps/desktop/ # Electron desktop app
|
|
19
|
+
├── packages/ # Shared packages (@lobechat/*)
|
|
20
|
+
│ ├── database/ # Database schemas, models, repositories
|
|
21
|
+
│ ├── agent-runtime/ # Agent runtime
|
|
22
|
+
│ └── ...
|
|
23
|
+
├── src/
|
|
24
|
+
│ ├── app/ # Next.js app router
|
|
25
|
+
│ ├── store/ # Zustand stores
|
|
26
|
+
│ ├── services/ # Client services
|
|
27
|
+
│ ├── server/ # Server services and routers
|
|
28
|
+
│ └── ...
|
|
29
|
+
└── e2e/ # E2E tests (Cucumber + Playwright)
|
|
30
|
+
```
|
|
12
31
|
|
|
13
32
|
## Development
|
|
14
33
|
|
|
15
34
|
### Git Workflow
|
|
16
35
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- PR titles starting with `✨ feat/` or `🐛 fix` will trigger the release workflow upon merge. Only use these prefixes for significant user-facing feature changes or bug fixes
|
|
36
|
+
- Use rebase for `git pull`
|
|
37
|
+
- Commit messages: prefix with gitmoji
|
|
38
|
+
- Branch format: `<type>/<feature-name>`
|
|
39
|
+
- PR titles with `✨ feat/` or `🐛 fix` trigger releases
|
|
22
40
|
|
|
23
41
|
### Package Management
|
|
24
42
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
- Use `bun` to run npm scripts
|
|
29
|
-
- Use `bunx` to run executable npm packages
|
|
30
|
-
|
|
31
|
-
### TypeScript Code Style Guide
|
|
32
|
-
|
|
33
|
-
see @.cursor/rules/typescript.mdc
|
|
43
|
+
- `pnpm` for dependency management
|
|
44
|
+
- `bun` to run npm scripts
|
|
45
|
+
- `bunx` for executable npm packages
|
|
34
46
|
|
|
35
47
|
### Testing
|
|
36
48
|
|
|
37
|
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
- packages(eg: database): `cd packages/database && bunx vitest run --silent='passed-only' '[file-path-pattern]'`
|
|
41
|
-
|
|
42
|
-
**Important**:
|
|
43
|
-
|
|
44
|
-
- wrap the file path in single quotes to avoid shell expansion
|
|
45
|
-
- Never run `bun run test` etc to run tests, this will run all tests and cost about 10mins
|
|
46
|
-
- If trying to fix the same test twice, but still failed, stop and ask for help.
|
|
49
|
+
```bash
|
|
50
|
+
# Run specific test (NEVER run `bun run test` - takes ~10 minutes)
|
|
51
|
+
bunx vitest run --silent='passed-only' '[file-path]'
|
|
47
52
|
|
|
48
|
-
|
|
53
|
+
# Database package
|
|
54
|
+
cd packages/database && bunx vitest run --silent='passed-only' '[file]'
|
|
55
|
+
```
|
|
49
56
|
|
|
50
|
-
-
|
|
57
|
+
- Tests must pass type check: `bun run type-check`
|
|
58
|
+
- After 2 failed fix attempts, stop and ask for help
|
|
51
59
|
|
|
52
60
|
### i18n
|
|
53
61
|
|
|
54
|
-
-
|
|
55
|
-
-
|
|
56
|
-
-
|
|
62
|
+
- Add keys to `src/locales/default/namespace.ts`
|
|
63
|
+
- For dev preview: translate `locales/zh-CN/` and `locales/en-US/`
|
|
64
|
+
- Don't run `pnpm i18n` - CI handles it
|
|
57
65
|
|
|
58
|
-
##
|
|
66
|
+
## Quality Checks
|
|
59
67
|
|
|
60
|
-
**MANDATORY**: After completing code changes,
|
|
68
|
+
**MANDATORY**: After completing code changes, run diagnostics on modified files to identify and fix any errors.
|
|
61
69
|
|
|
62
|
-
##
|
|
70
|
+
## Skills (Auto-loaded)
|
|
63
71
|
|
|
64
|
-
|
|
72
|
+
Skills are available in `.agents/skills/` directory. See CLAUDE.md for the full list.
|
package/changelog/v1.json
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"children": {
|
|
4
|
+
"improvements": [
|
|
5
|
+
"Migrate AI Rules to Claude Code Skills."
|
|
6
|
+
]
|
|
7
|
+
},
|
|
8
|
+
"date": "2026-01-23",
|
|
9
|
+
"version": "2.0.0-next.354"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"children": {},
|
|
13
|
+
"date": "2026-01-23",
|
|
14
|
+
"version": "2.0.0-next.353"
|
|
15
|
+
},
|
|
2
16
|
{
|
|
3
17
|
"children": {},
|
|
4
18
|
"date": "2026-01-23",
|
|
@@ -174,12 +174,17 @@ table async_tasks {
|
|
|
174
174
|
error jsonb
|
|
175
175
|
user_id text [not null]
|
|
176
176
|
duration integer
|
|
177
|
+
parent_id uuid
|
|
178
|
+
metadata jsonb [not null, default: '{}']
|
|
177
179
|
accessed_at "timestamp with time zone" [not null, default: `now()`]
|
|
178
180
|
created_at "timestamp with time zone" [not null, default: `now()`]
|
|
179
181
|
updated_at "timestamp with time zone" [not null, default: `now()`]
|
|
180
182
|
|
|
181
183
|
indexes {
|
|
182
184
|
user_id [name: 'async_tasks_user_id_idx']
|
|
185
|
+
parent_id [name: 'async_tasks_parent_id_idx']
|
|
186
|
+
(type, status) [name: 'async_tasks_type_status_idx']
|
|
187
|
+
metadata [name: 'async_tasks_metadata_idx']
|
|
183
188
|
}
|
|
184
189
|
}
|
|
185
190
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/lobehub",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.354",
|
|
4
4
|
"description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
ALTER TABLE "async_tasks" ADD COLUMN IF NOT EXISTS "parent_id" uuid;--> statement-breakpoint
|
|
2
|
+
ALTER TABLE "async_tasks" ADD COLUMN IF NOT EXISTS "metadata" jsonb DEFAULT '{}' NOT NULL;--> statement-breakpoint
|
|
3
|
+
CREATE INDEX IF NOT EXISTS "async_tasks_parent_id_idx" ON "async_tasks" USING btree ("parent_id");--> statement-breakpoint
|
|
4
|
+
CREATE INDEX IF NOT EXISTS "async_tasks_type_status_idx" ON "async_tasks" USING btree ("type","status");--> statement-breakpoint
|
|
5
|
+
CREATE INDEX IF NOT EXISTS "async_tasks_metadata_idx" ON "async_tasks" USING gin ("metadata");
|