@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.
Files changed (124) hide show
  1. package/.agents/skills/add-provider-doc/SKILL.md +90 -0
  2. package/.agents/skills/add-setting-env/SKILL.md +106 -0
  3. package/.agents/skills/debug/SKILL.md +66 -0
  4. package/.agents/skills/desktop/SKILL.md +78 -0
  5. package/.agents/skills/desktop/references/feature-implementation.md +99 -0
  6. package/.agents/skills/desktop/references/local-tools.md +133 -0
  7. package/.agents/skills/desktop/references/menu-config.md +103 -0
  8. package/.agents/skills/desktop/references/window-management.md +143 -0
  9. package/.agents/skills/drizzle/SKILL.md +129 -0
  10. package/.agents/skills/drizzle/references/db-migrations.md +50 -0
  11. package/.agents/skills/hotkey/SKILL.md +90 -0
  12. package/{.cursor/rules/i18n.mdc → .agents/skills/i18n/SKILL.md} +14 -23
  13. package/.agents/skills/linear/SKILL.md +51 -0
  14. package/.agents/skills/microcopy/SKILL.md +83 -0
  15. package/.agents/skills/modal/SKILL.md +102 -0
  16. package/{.cursor/rules/project-structure.mdc → .agents/skills/project-overview/SKILL.md} +65 -37
  17. package/.agents/skills/react/SKILL.md +73 -0
  18. package/.agents/skills/react/references/layout-kit.md +100 -0
  19. package/.agents/skills/recent-data/SKILL.md +108 -0
  20. package/.agents/skills/testing/SKILL.md +89 -0
  21. package/.agents/skills/testing/references/agent-runtime-e2e.md +126 -0
  22. package/.agents/skills/testing/references/db-model-test.md +124 -0
  23. package/.agents/skills/testing/references/desktop-controller-test.md +124 -0
  24. package/.agents/skills/testing/references/electron-ipc-test.md +63 -0
  25. package/.agents/skills/testing/references/zustand-store-action-test.md +150 -0
  26. package/.agents/skills/typescript/SKILL.md +52 -0
  27. package/.agents/skills/zustand/SKILL.md +78 -0
  28. package/.agents/skills/zustand/references/action-patterns.md +125 -0
  29. package/.agents/skills/zustand/references/slice-organization.md +125 -0
  30. package/AGENTS.md +42 -55
  31. package/CHANGELOG.md +58 -0
  32. package/CLAUDE.md +57 -46
  33. package/GEMINI.md +47 -39
  34. package/changelog/v1.json +14 -0
  35. package/docs/development/database-schema.dbml +5 -0
  36. package/package.json +1 -1
  37. package/packages/database/migrations/0071_add_async_task_extend.sql +5 -0
  38. package/packages/database/migrations/meta/0071_snapshot.json +10720 -0
  39. package/packages/database/migrations/meta/_journal.json +7 -0
  40. package/packages/database/src/schemas/asyncTask.ts +12 -2
  41. package/src/features/FileViewer/Renderer/PDF/index.tsx +2 -3
  42. package/src/features/ShareModal/SharePdf/PdfPreview.tsx +1 -2
  43. package/src/libs/pdfjs/index.tsx +25 -0
  44. package/src/store/test-coverage.md +5 -5
  45. package/.cursor/rules/add-provider-doc.mdc +0 -183
  46. package/.cursor/rules/add-setting-env.mdc +0 -175
  47. package/.cursor/rules/cursor-rules.mdc +0 -28
  48. package/.cursor/rules/db-migrations.mdc +0 -46
  49. package/.cursor/rules/debug-usage.mdc +0 -86
  50. package/.cursor/rules/desktop-controller-tests.mdc +0 -189
  51. package/.cursor/rules/desktop-feature-implementation.mdc +0 -155
  52. package/.cursor/rules/desktop-local-tools-implement.mdc +0 -81
  53. package/.cursor/rules/desktop-menu-configuration.mdc +0 -209
  54. package/.cursor/rules/desktop-window-management.mdc +0 -301
  55. package/.cursor/rules/drizzle-schema-style-guide.mdc +0 -218
  56. package/.cursor/rules/hotkey.mdc +0 -162
  57. package/.cursor/rules/linear.mdc +0 -53
  58. package/.cursor/rules/microcopy-cn.mdc +0 -158
  59. package/.cursor/rules/microcopy-en.mdc +0 -148
  60. package/.cursor/rules/modal-imperative.mdc +0 -162
  61. package/.cursor/rules/packages/react-layout-kit.mdc +0 -122
  62. package/.cursor/rules/project-introduce.mdc +0 -36
  63. package/.cursor/rules/react.mdc +0 -169
  64. package/.cursor/rules/recent-data-usage.mdc +0 -139
  65. package/.cursor/rules/rules-index.mdc +0 -44
  66. package/.cursor/rules/testing-guide/agent-runtime-e2e.mdc +0 -285
  67. package/.cursor/rules/testing-guide/db-model-test.mdc +0 -455
  68. package/.cursor/rules/testing-guide/electron-ipc-test.mdc +0 -80
  69. package/.cursor/rules/testing-guide/testing-guide.mdc +0 -534
  70. package/.cursor/rules/testing-guide/zustand-store-action-test.mdc +0 -574
  71. package/.cursor/rules/typescript.mdc +0 -55
  72. package/.cursor/rules/zustand-action-patterns.mdc +0 -328
  73. package/.cursor/rules/zustand-slice-organization.mdc +0 -308
  74. package/src/libs/pdfjs/pdf.worker.ts +0 -1
  75. package/src/libs/pdfjs/worker.ts +0 -12
  76. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/AGENTS.md +0 -0
  77. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/SKILL.md +0 -0
  78. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/advanced-event-handler-refs.md +0 -0
  79. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/advanced-use-latest.md +0 -0
  80. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-api-routes.md +0 -0
  81. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-defer-await.md +0 -0
  82. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-dependencies.md +0 -0
  83. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-parallel.md +0 -0
  84. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/async-suspense-boundaries.md +0 -0
  85. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-barrel-imports.md +0 -0
  86. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-conditional.md +0 -0
  87. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-defer-third-party.md +0 -0
  88. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-dynamic-imports.md +0 -0
  89. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/bundle-preload.md +0 -0
  90. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-event-listeners.md +0 -0
  91. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-localstorage-schema.md +0 -0
  92. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-passive-event-listeners.md +0 -0
  93. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/client-swr-dedup.md +0 -0
  94. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-batch-dom-css.md +0 -0
  95. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-cache-function-results.md +0 -0
  96. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-cache-property-access.md +0 -0
  97. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-cache-storage.md +0 -0
  98. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-combine-iterations.md +0 -0
  99. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-early-exit.md +0 -0
  100. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-hoist-regexp.md +0 -0
  101. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-index-maps.md +0 -0
  102. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-length-check-first.md +0 -0
  103. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-min-max-loop.md +0 -0
  104. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-set-map-lookups.md +0 -0
  105. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/js-tosorted-immutable.md +0 -0
  106. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-activity.md +0 -0
  107. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-animate-svg-wrapper.md +0 -0
  108. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-conditional-render.md +0 -0
  109. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-content-visibility.md +0 -0
  110. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-hoist-jsx.md +0 -0
  111. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-hydration-no-flicker.md +0 -0
  112. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rendering-svg-precision.md +0 -0
  113. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-defer-reads.md +0 -0
  114. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-dependencies.md +0 -0
  115. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-derived-state.md +0 -0
  116. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-functional-setstate.md +0 -0
  117. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-lazy-state-init.md +0 -0
  118. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-memo.md +0 -0
  119. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/rerender-transitions.md +0 -0
  120. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-after-nonblocking.md +0 -0
  121. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-cache-lru.md +0 -0
  122. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-cache-react.md +0 -0
  123. /package/.agents/{vercel-react-best-practices → skills/vercel-react-best-practices}/rules/server-parallel-fetching.md +0 -0
  124. /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
- This document serves as a shared guideline for all team members when using Gemini CLI in this repository.
3
+ Guidelines for using Gemini CLI in this LobeChat repository.
4
4
 
5
5
  ## Tech Stack
6
6
 
7
- read @.cursor/rules/project-introduce.mdc
8
-
9
- ## Directory Structure
10
-
11
- read @.cursor/rules/project-structure.mdc
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
- - use rebase for git pull
18
- - git commit message should prefix with gitmoji
19
- - git branch name format template: <type>/<feature-name>
20
- - use .github/PULL_REQUEST_TEMPLATE.md to generate pull request description
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
- This repository adopts a monorepo structure.
26
-
27
- - Use `pnpm` as the primary package manager for dependency management
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
- - **Required Rule**: read `.cursor/rules/testing-guide/testing-guide.mdc` before writing tests
38
- - **Command**:
39
- - web: `bunx vitest run --silent='passed-only' '[file-path-pattern]'`
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
- ### Typecheck
53
+ # Database package
54
+ cd packages/database && bunx vitest run --silent='passed-only' '[file]'
55
+ ```
49
56
 
50
- - use `bun run type-check` to check type errors.
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
- - **Keys**: Add to `src/locales/default/namespace.ts`
55
- - **Dev**: Translate `locales/zh-CN/namespace.json` and `locales/en-US/namespace.json` locales file only for dev preview
56
- - DON'T run `pnpm i18n`, let CI auto handle it
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
- ## 🚨 Quality Checks
66
+ ## Quality Checks
59
67
 
60
- **MANDATORY**: After completing code changes, always run `mcp__vscode-mcp__get_diagnostics` on the modified files to identify any errors introduced by your changes and fix them.
68
+ **MANDATORY**: After completing code changes, run diagnostics on modified files to identify and fix any errors.
61
69
 
62
- ## Rules Index
70
+ ## Skills (Auto-loaded)
63
71
 
64
- Some useful project rules are listed in @.cursor/rules/rules-index.mdc
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.352",
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");