Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
8482 commits
Select commit Hold shift + click to select a range
c8b372d
chore(deps): update pyarrow to version 23.0.1 and add override deps (…
BenjaminX Apr 14, 2026
fc389a5
refactor: replace bare dict with typed annotations in core tools modu…
dataCenter430 Apr 14, 2026
ed40172
refactor: replace bare dict with typed annotations in app_config/exte…
dataCenter430 Apr 14, 2026
974d2f1
refactor: replace bare dict with typed annotations in llm_generator a…
dataCenter430 Apr 14, 2026
fbedb60
refactor: replace bare dict with typed annotations in core rag module…
dataCenter430 Apr 14, 2026
711fe6b
refactor: convert plugin permission if/elif to match/case (#30001) (#…
aether-png Apr 14, 2026
f7c6270
refactor: use sessionmaker in tool_label_manager.py (#34895)
HeYin-OS Apr 14, 2026
62bb830
refactor: convert InvokeFrom if/elif to match/case (#35143)
aether-png Apr 14, 2026
173e0d6
test: migrate clean_dataset integration tests to SQLAlchemy 2.0 APIs …
bohdansolovie Apr 14, 2026
a951cc9
test: migrate document indexing task tests to SQLAlchemy 2.0 select A…
bohdansolovie Apr 14, 2026
d7ad2ba
chore: clarify tracing error copy to direct users to the Tracing tab …
iamjoel Apr 14, 2026
9a47bb2
fix: doc modal hidden by config modal (#35157)
iamjoel Apr 14, 2026
bd7a9b5
refactor: replace bare dict with dict[str, Any] in model provider ser…
wdeveloper16 Apr 14, 2026
736880e
feat: support configurable redis key prefix (#35139)
Blackoutta Apr 14, 2026
d4783e8
chore: url in tool description support clicking jump directly (#35163)
iamjoel Apr 14, 2026
e1bbe57
refactor(web): re-design button api (#35166)
lyzno1 Apr 14, 2026
e5fd313
test: migrate task integration tests to SQLAlchemy 2.0 query APIs (#3…
bohdansolovie Apr 14, 2026
a3042e6
test: migrate clean_notion_document integration tests to SQLAlchemy 2…
bohdansolovie Apr 14, 2026
648dde5
ci: Fix path in coverage markdown rendering step (#35136)
asukaminato0721 Apr 14, 2026
ebf7411
refactor(web): replace Button destructive boolean with tone semantic …
lyzno1 Apr 14, 2026
381c518
test: migrate conversation read timestamp SQL test to Testcontainers …
bohdansolovie Apr 14, 2026
2c58b42
refactor(web): migrate confirm dialogs to base/ui/alert-dialog (#35127)
CodingOnStar Apr 14, 2026
62f42b3
refactor: replace bare dict with dict[str, Any] in RAG and service un…
wdeveloper16 Apr 14, 2026
2fd5b76
refactor: replace bare dict with dict[str, Any] in enterprise telemet…
wdeveloper16 Apr 14, 2026
1bcc7f7
refactor: replace bare dict with dict[str, Any] in models, providers,…
wdeveloper16 Apr 14, 2026
50a6892
refactor: replace bare dict with dict[str, Any] in controller and cor…
wdeveloper16 Apr 14, 2026
6876cd7
test: migrate web site controller tests to Testcontainers (#32454) (#…
bohdansolovie Apr 14, 2026
a2ea7ca
refactor(api): migrate workspace account marshal_with responses to Ba…
ai-hpc Apr 14, 2026
ef062fb
refactor(api): migrate console extension endpoint from api.model to B…
ai-hpc Apr 14, 2026
f63d7c4
test: remove document service status mock tests superseded by testcon…
jamesrayammons Apr 14, 2026
e78558b
refactor(api): migrate dataset hit-testing response model to BaseMode…
ai-hpc Apr 14, 2026
ef28a63
refactor(api): add null safety to extractor_processor and firecrawl (…
tmimmanuel Apr 14, 2026
149b9d4
refactor: replace bare dict with dict[str, Any] in services unit test…
wdeveloper16 Apr 14, 2026
e527b7c
refactor(api): migrate console installed-app list response to BaseMod…
ai-hpc Apr 14, 2026
b1df52b
refactor(api): migrate console workflow app-log responses to BaseMode…
ai-hpc Apr 14, 2026
9c90c1c
refactor: replace bare dict with dict[str, Any] in services and hosti…
wdeveloper16 Apr 14, 2026
7e7b27f
refactor: replace bare dict with dict[str, Any] in response converter…
wdeveloper16 Apr 14, 2026
ef396ac
refactor(api): migrate workspace current response from marshal_with t…
ai-hpc Apr 14, 2026
f66a3c4
refactor(api): migrate console recommended-app response to BaseModel …
ai-hpc Apr 14, 2026
800954f
refactor(api): migrate service conversation-variable responses to Bas…
ai-hpc Apr 14, 2026
1c3cba2
refactor(api): migrate console message responses from marshal_with to…
ai-hpc Apr 14, 2026
b65a5fc
refactor(api): migrate service api workflow responses from marshal_wi…
ai-hpc Apr 14, 2026
b1722c8
refactor(api): migrate console conversation variables response model …
ai-hpc Apr 14, 2026
25c388d
refactor(api): migrate console workflow-trigger responses to BaseMode…
ai-hpc Apr 14, 2026
693080a
test: migrate dataset service dataset mock tests to testcontainers (#…
jamesrayammons Apr 14, 2026
7de92c5
test: migrate schedule service mock tests to testcontainers (#35196)
jamesrayammons Apr 14, 2026
b77801e
test: remove legacy code executor integration test (#35224)
jamesrayammons Apr 15, 2026
5bc0f95
test: remove legacy python3 code executor integration test (#35223)
jamesrayammons Apr 15, 2026
7a880ae
fix: import DSL and copy app not work (#35239)
hjlarry Apr 15, 2026
76af80e
fix: open restore version panel raise 500 (#35240)
hjlarry Apr 15, 2026
3bccdd6
test: migrate Service API site controller tests to Testcontainers (#3…
Eruis2579 Apr 15, 2026
50a5551
refactor(ui): decouple CSS dependencies and improve test quality (#35…
lyzno1 Apr 15, 2026
79332c0
fix: Change 'commit' to 'flush' to prevent subsequent transaction fai…
zyssyz123 Apr 15, 2026
5542329
fix(dataset): fix dataset list overlay issue (#35244)
WTW0313 Apr 15, 2026
98897a5
test: migrate webhook service additional mock tests to testcontainers…
jamesrayammons Apr 15, 2026
9fd1966
feat: tidb endpoint (#35158)
zyssyz123 Apr 15, 2026
fb17339
feat(web): unify create_app tracking and persist external attribution…
CodingOnStar Apr 15, 2026
e3c2116
fix: remove enable for get (#35245)
zyssyz123 Apr 15, 2026
fd71c56
test: remove legacy storage key loader integration test (#35225)
jamesrayammons Apr 15, 2026
2f33867
test: remove legacy trigger provider permissions test (#35227)
jamesrayammons Apr 15, 2026
e5bd181
test: remove legacy jinja2 code executor integration test (#35222)
jamesrayammons Apr 15, 2026
425457c
test: remove legacy workflow draft variable api test (#35226)
jamesrayammons Apr 15, 2026
dbceb30
refactor(api): migrate console tag responses from marshal_with to Bas…
ai-hpc Apr 15, 2026
af7d5e6
feat(ui): scaffold @langgenius/dify-ui and migrate design tokens (#35…
lyzno1 Apr 15, 2026
e6b8cbe
fix(web): include dify-ui workspace package in docker install filter …
lyzno1 Apr 15, 2026
5380938
refactor(web): align Switch API with Base UI naming convention (#35269)
lyzno1 Apr 15, 2026
e6b5923
test(types): replace Account/Tenant status string literals with enum …
xr843 Apr 15, 2026
cf4d7af
chore(api): prune redundant direct dependency declarations (#35272)
WH-2099 Apr 15, 2026
53a22aa
feat: collaboration (#30781)
hjlarry Apr 16, 2026
8baa864
fix: add miss celery queue (#35282)
fatelei Apr 16, 2026
665978a
chore(i18n): sync translations with en-US (#35283)
github-actions[bot] Apr 16, 2026
987b5f4
chore(deps): bump langsmith from 0.7.30 to 0.7.31 in /api (#35288)
dependabot[bot] Apr 16, 2026
d42d08a
chore(deps): bump hono from 4.12.12 to 4.12.14 (#35287)
dependabot[bot] Apr 16, 2026
731414a
chore(deps): bump pypdf from 6.10.0 to 6.10.1 in /api (#35273)
dependabot[bot] Apr 16, 2026
9fa5077
test: migrate duplicate and vector index task integration tests to SQ…
bohdansolovie Apr 16, 2026
70556d9
chore(deps): upgrade vite-plus to 0.1.18 (#35300)
lyzno1 Apr 16, 2026
5956dd7
refactor(api): add BaseModel conversation variable schemas (#35296)
ai-hpc Apr 16, 2026
25df902
refactor(api): add BaseModel workflow field schemas (#35297)
ai-hpc Apr 16, 2026
883d757
chore(deps): bump dompurify from 3.3.3 to 3.4.0 (#35286)
dependabot[bot] Apr 16, 2026
b08665e
refactor(web): redesign Select component and migrate WorkplaceSelecto…
lyzno1 Apr 16, 2026
b665eaa
refactor(api): migrate console conversation responses to BaseModel (#…
ai-hpc Apr 16, 2026
c661d5c
refactor(web): migrate base/popoversto ui/dropdown-menu and ui/select…
CodingOnStar Apr 16, 2026
c3eff6a
fix(web): set app card dropdown menu to non-modal (#35302)
lyzno1 Apr 16, 2026
0fea760
fix: http node key value type dropdown (#35304)
hjlarry Apr 16, 2026
54e51be
fix: apply score threshold after reranking in hybrid search (#35263)
aayushbaluni Apr 16, 2026
a1f9905
refactor(web): unify Base UI component props to namespace types (#35306)
lyzno1 Apr 16, 2026
7f4fe4d
test: migrate clean notion task tests to SQLAlchemy 2.0 APIs (#35159)
jimcody1995 Apr 16, 2026
e8af6a6
test: migrate conversation service mock tests to testcontainers (#35198)
jamesrayammons Apr 16, 2026
3193e8a
chore: reorg imports (#35308)
wylswz Apr 16, 2026
3445469
perf(web): optimize first-screen rendering performance (#35313)
lyzno1 Apr 16, 2026
e507675
fix(web): add destructive hover background to menu item components (#…
lyzno1 Apr 16, 2026
abb84f1
chore: enable noUncheckedIndexedAccess (#35178)
hyoban Apr 16, 2026
c966e28
refactor(web): align UI component APIs with shadcn v4 best practices …
lyzno1 Apr 16, 2026
4289cb2
chore: workspace level typecheck (#35329)
hyoban Apr 16, 2026
40e040c
chore: workspace lint (#35331)
hyoban Apr 16, 2026
6ca0669
chore: auto fix for tailwind rules (#35332)
hyoban Apr 16, 2026
b565a51
refactor(web): quality closure pass on base UI primitives (#35333)
lyzno1 Apr 16, 2026
a5ce170
feat(web): add tracking for app preview events in AppCard component (…
CodingOnStar Apr 17, 2026
37714cb
chore(deps): bump authlib from 1.6.9 to 1.6.11 in /api (#35341)
dependabot[bot] Apr 17, 2026
ed14f58
chore(deps): bump mako from 1.3.10 to 1.3.11 in /api (#35340)
dependabot[bot] Apr 17, 2026
7396230
chore(deps): bump pypdf from 6.10.1 to 6.10.2 in /api (#35339)
dependabot[bot] Apr 17, 2026
f07f9ee
chore(api): migrate event handlers to use Session(db.engine) (#35234)
jerryzai Apr 17, 2026
13a9359
refactor(api): migrate console mcp-server responses to BaseModel (#35…
ai-hpc Apr 17, 2026
dc3f992
docs(web): add Storybook stories for overlay and select primitives (#…
lyzno1 Apr 17, 2026
af21dc7
refactor(api): migrate dataset document response schemas to BaseModel…
ai-hpc Apr 17, 2026
4d79b4a
fix(web): stop Splash after useUserProfile errors (#35326)
shaun0927 Apr 17, 2026
af8ffa0
refactor: use sessionmaker in api_tools_manage_service.py (#34892)
HeYin-OS Apr 17, 2026
b6c7581
refactor(web): replace portal component with DropdownMenu in various …
CodingOnStar Apr 17, 2026
de15e5b
fix: scope plugin inner API end-user lookup by tenant (#35325)
shaun0927 Apr 17, 2026
f5e9b02
test: add API seeding infrastructure and app creation E2E scenarios (…
Jingyi-Dify Apr 17, 2026
90d638f
refactor: migrate DocumentSegmentSummary to TypeBase (#34862)
sxxtony Apr 17, 2026
90e281c
test: migrate dataset service document mock tests to testcontainers (…
jamesrayammons Apr 17, 2026
0c41d0b
fix: guard against KeyError in update_prompt_message_tool loop (#35150)
kuishou68 Apr 17, 2026
eaddd4a
fix(web): stabilize workflow node panel operator dropdown trigger (#3…
CodingOnStar Apr 17, 2026
a74e128
fix: move remote credential validation outside DB session to prevent …
zyssyz123 Apr 17, 2026
881a9a1
refactor(api): move trace providers (#35144)
wylswz Apr 17, 2026
e70e4fa
chore(api): migrate file factory builders and account commands to use…
jerryzai Apr 17, 2026
0020aa8
refactor(api): type pipeline template retrieval dicts with TypedDict …
YB0y Apr 17, 2026
bd25240
fix: raise chat settings select dropdown above dialog (#35357)
hyl64 Apr 17, 2026
f56ce9d
fix: guard chat file preview rendering when mime type is missing (#35…
hyl64 Apr 17, 2026
dfcc0f8
refactor(dify-ui): finish primitive migration from web/base/ui to @la…
lyzno1 Apr 17, 2026
b9c300d
chore(api): migrate mail task and OAuth data source to use Session(db…
jerryzai Apr 17, 2026
9612269
fix(web): keep workflow panel operator anchor mounted during menu clo…
lyzno1 Apr 17, 2026
f980d5d
feat: copy nodes cross apps (#33273)
hjlarry Apr 17, 2026
9ce7464
ci: Add conditional comment creation for diff (#35179)
asukaminato0721 Apr 17, 2026
560195f
feat(explore): implement banner impression tracking and refactor trac…
CodingOnStar Apr 17, 2026
3c7d673
test: browser mode for dify ui (#35365)
hyoban Apr 17, 2026
ae9c424
feat(dify-ui): Meter primitive and billing adoption (#35380)
lyzno1 Apr 18, 2026
3e876e1
chore(api): adapt Graphon 0.2.2 upgrade (#35377)
WH-2099 Apr 18, 2026
0c8acd4
chore(web): drop delay={0} from tooltip triggers and retype DocName (…
lyzno1 Apr 18, 2026
25dd79f
fix(web): remove dynamic import from Goto Anything to restore cmd+k (…
lyzno1 Apr 18, 2026
f8a4205
chore: Replace 'db' with 'sa' for SQLAlchemy compatibility (#35373)
asukaminato0721 Apr 19, 2026
059d605
ci: Update pyrefly dependency version to 0.61.1 (#35391)
asukaminato0721 Apr 19, 2026
b351ab0
fix(web): prevent infinite render loop on /apps page (#35393)
lyzno1 Apr 20, 2026
26e50bb
refactor(web): convert file-local Step enum to as-const in website cr…
jeanibarz Apr 20, 2026
ba5d8c1
fix: complete assigned variable reference descriptions (#35406)
hjlarry Apr 20, 2026
3627c1e
refactor: remove file upload migration tip (#35409)
hjlarry Apr 20, 2026
d814446
chore: improve conversation opener (#35403)
hjlarry Apr 20, 2026
ceec00e
fix: accept icon type in app icon updates (#35360)
hyl64 Apr 20, 2026
97bb338
fix: prevent double /v1 in MCP server URL causing 404 authorization f…
dev-miro26 Apr 20, 2026
c7641bb
refactor(web): unify app-shell bootstrap on TanStack Query + Next.js …
lyzno1 Apr 20, 2026
8f070f2
refactor(api): flatten nested conditionals and clean up token helpers…
bitcompass Apr 20, 2026
8c8ad02
chore: migrate workflow node title tooltip (#35418)
hjlarry Apr 20, 2026
1a7e463
feat(amplitude): integrate AmplitudeProvider and refactor initializat…
CodingOnStar Apr 20, 2026
0d921cd
fix: handle numpy scalar types in safe_json_value (#35389)
avasis-ai Apr 20, 2026
4f03b71
docs(frontend): align docs and comments (#35364)
lyzno1 Apr 20, 2026
39dc636
fix: missing icon from iconify set (#35420)
hyoban Apr 20, 2026
3cd6ef4
chore: export dsl add loading (#35427)
iamjoel Apr 20, 2026
e561788
fix(auth): enforce phase-bound change-email token flow (GHSA-4q3w-q5m…
zyssyz123 Apr 20, 2026
db60e64
chore(deps): bump json-repair from 0.59.2 to 0.59.4 in /api in the py…
dependabot[bot] Apr 20, 2026
21e5962
chore(deps-dev): bump xinference-client from 2.4.0 to 2.5.0 in /api i…
dependabot[bot] Apr 20, 2026
de123a8
chore(deps): bump google-cloud-aiplatform from 1.147.0 to 1.148.1 in …
dependabot[bot] Apr 20, 2026
ba8e068
chore(deps): bump the storage group in /api with 3 updates (#35398)
dependabot[bot] Apr 20, 2026
5cae61e
ci: [codex] Remove anti-slop GitHub Actions workflow (#35432)
laipz8200 Apr 20, 2026
df389eb
chore(deps): bump the github-actions-dependencies group across 1 dire…
dependabot[bot] Apr 20, 2026
a633387
chore: fix oxlint warnings (unused variables and imports) (#35249)
sicnuyudidi Apr 20, 2026
da00de6
fix: increase maximum PostgreSQL connections to 200 (#35439)
Mutantpenguin Apr 21, 2026
d583b1b
refactor(web): continue replacing PortalToFollowElem with Popover com…
CodingOnStar Apr 21, 2026
c2a5962
feat(dify-ui): add PreviewCard primitive (#35434)
lyzno1 Apr 21, 2026
77d6c10
fix(workflow): cache provider configurations during graph init (#35447)
laipz8200 Apr 21, 2026
77f8f2b
refactor(api): tighten core rag typing batch 1 (#35210)
tmimmanuel Apr 21, 2026
dc83e8a
chore: resolve oxlint warnings across web and SDK (#34540)
agenthaulk Apr 21, 2026
051ba99
refactor(billing): use Infotip for UsageInfo help icon, migrate stora…
lyzno1 Apr 21, 2026
3b24d8d
fix: webscaper sometime not work (#35450)
hjlarry Apr 21, 2026
0b60bf6
refactor: replace deprecated Iterator with Generator in contextmanage…
iAbhi001 Apr 21, 2026
48d23cd
feat: support slash variable filtering in prompt editor (#35460)
iamjoel Apr 21, 2026
73f9a9e
chore(deps): bump base ui to 1.4.1 (#35459)
lyzno1 Apr 21, 2026
5e5113e
chore(deps-dev): bump the dev group in /api with 6 updates (#35402)
dependabot[bot] Apr 21, 2026
0fec9af
chore(deps): bump vite-plus to 0.1.19 (#35462)
lyzno1 Apr 21, 2026
44a91e3
fix(plugin): persist tenant plugin auto-upgrade strategy changes (#35…
zyssyz123 Apr 21, 2026
d65a6b4
refactor: migrate from PortalToFollowElem to Popover component across…
CodingOnStar Apr 21, 2026
2e1b11b
chore: port 2 api as deprecated (#35261)
asukaminato0721 Apr 21, 2026
33eebe8
chore(deps): bump lxml from 6.0.2 to 6.1.0 in /api (#35470)
dependabot[bot] Apr 22, 2026
712e522
fix: bump pyrefly version (#33702)
JiwaniZakir Apr 22, 2026
ba924fc
chore: migrate type-check from tsc to tsgo across all workspaces (#35…
lyzno1 Apr 22, 2026
8b15334
chore: update 3 api (#35481)
asukaminato0721 Apr 22, 2026
491061b
fix(web): keep Add model dialog footer visible when form overflows (#…
crazywoola Apr 22, 2026
afec528
feat: improve follow-up settings (#35442)
hjlarry Apr 22, 2026
4c908c8
refactor: migrate base/select to dify-ui/select (#35487)
CodingOnStar Apr 22, 2026
4b6803b
chore(i18n): sync translations with en-US (#35492)
github-actions[bot] Apr 22, 2026
2a3deee
refactor: enhance node handle components with opacity transitions and…
CodingOnStar Apr 22, 2026
f746c7b
fix(plugin): handle file input reset and improve local installer clos…
CodingOnStar Apr 23, 2026
61c0948
chore: add script to generate openapi v2 json and add in README #3547…
asukaminato0721 Apr 23, 2026
b59ecea
test(auth): add sign-in smoke test and core validation (#35501)
Jingyi-Dify Apr 23, 2026
5b2c5da
test(e2e): add publish app happy path scenario (#35503)
Jingyi-Dify Apr 23, 2026
91a1df9
fix(web): restore "Copied" feedback state on copy buttons (#35513)
lyzno1 Apr 23, 2026
c9503fd
fix(web): three small UX fixes on /datasets and /plugins (#35514)
lyzno1 Apr 23, 2026
6b4736b
fix: improve collaboration (#35309)
hjlarry Apr 23, 2026
1c5d62d
test(e2e): add app detail navigation and redirect scenarios (#35502)
Jingyi-Dify Apr 23, 2026
38e831c
fix: improve note node (#35461)
hjlarry Apr 23, 2026
0c8dec3
fix: update node handle opacity and pointer events behavior in compon…
CodingOnStar Apr 23, 2026
ed8d3f3
refactor(api): fix pyright errors in jieba, milvus, couchbase, oracle…
tmimmanuel Apr 23, 2026
38fc2a6
feat: support key up and down to select variable item (#35527)
iamjoel Apr 24, 2026
48e13f6
fix: sync 35528 (#35539)
wylswz Apr 24, 2026
ec450eb
chore(dify-ui): update tooltip and infotip migration (#35543)
lyzno1 Apr 24, 2026
be4c828
feat: add service api of HITL (#32826)
hjlarry Apr 24, 2026
5e336c4
feat: marketplace and oauth fixes (#35509)
RockChinQ Apr 24, 2026
9bd5c2f
fix: app icon could not only change background (#35537)
hjlarry Apr 24, 2026
2d09c47
fix: suggest questions more max_tokens (#35533)
hjlarry Apr 24, 2026
791fc58
test(dify-ui): disable base ui animations globally (#35467)
lyzno1 Apr 24, 2026
7bcedcb
fix: right click node not display the node detail panel (#35554)
hjlarry Apr 24, 2026
0baefa6
chore(i18n): sync translations with en-US (#35552)
github-actions[bot] Apr 24, 2026
c3aebb8
chore: fix use select style api in orm (#35531)
asukaminato0721 Apr 24, 2026
7002512
feat: refactor modals to use Dialog component and add tests for ApiKe…
CodingOnStar Apr 24, 2026
ce50c6c
chore: port 2 api (#35542)
asukaminato0721 Apr 24, 2026
e6ef774
docs: fix Kubernetes deployment wording (#35547)
MukundaKatta Apr 24, 2026
f00512d
test: add P0 workflow run, publish, and share scenarios (#35559)
Jingyi-Dify Apr 25, 2026
7b5c0b5
fix(api): declare flask dependency (#35568)
WH-2099 Apr 25, 2026
ef7ff33
refactor: port ChildChunk (#30920)
asukaminato0721 Apr 26, 2026
8b346e6
chore(deps): bump gitpython from 3.1.45 to 3.1.47 in /api (#35570)
dependabot[bot] Apr 26, 2026
7efc887
refactor: port MessageAnnotation (#31005)
asukaminato0721 Apr 26, 2026
d6dee43
chore(ci): migrate runners to depot
goocarlos Apr 26, 2026
2364814
chore(ci): move image builds to depot (#35575)
goocarlos Apr 26, 2026
b1b977e
refactor: quota v3 integration (#35436)
hj24 Apr 27, 2026
3e826c0
chore(deps): bump anthropics/claude-code-action from 1.0.101 to 1.0.1…
dependabot[bot] Apr 27, 2026
2d6eaf6
chore(deps-dev): bump the dev group in /api with 5 updates (#35581)
dependabot[bot] Apr 27, 2026
2326fb7
chore(deps): bump psycopg2-binary from 2.9.11 to 2.9.12 in /api in th…
dependabot[bot] Apr 27, 2026
295fb6e
chore(deps): bump the opentelemetry group in /api with 7 updates (#35…
dependabot[bot] Apr 27, 2026
859756c
chore(deps-dev): bump xinference-client from 2.5.0 to 2.7.0 in /api i…
dependabot[bot] Apr 27, 2026
2677d90
chore(deps): bump the storage group across 1 directory with 3 updates…
dependabot[bot] Apr 27, 2026
3db107e
chore(ci): increase tsslint heap limit (#35591)
lyzno1 Apr 27, 2026
818a71d
refactor(web): migrate simple overlay tooltips (#35588)
lyzno1 Apr 27, 2026
6c089ca
fix(web): migrate variable type selector overlay (#35590)
hjlarry Apr 27, 2026
4036515
fix: improve variable picker text width allocation (#35587)
hjlarry Apr 27, 2026
3a28868
ci: upgrade web test runners (#35593)
lyzno1 Apr 27, 2026
89bf75e
fix: enhance file uploader with billing support and update translatio…
WTW0313 Apr 27, 2026
6b5d6da
fix: school name can not input (#35597)
iamjoel Apr 27, 2026
cc4d6db
chore: update dependency catalog (#35594)
lyzno1 Apr 27, 2026
65a08ed
chore(i18n): sync translations with en-US (#35595)
github-actions[bot] Apr 27, 2026
949f930
fix: keep cleanup tasks resilient to billing API failures (#35600)
zyssyz123 Apr 27, 2026
b6aa5a7
fix: download and upload package before invoking upgrade in auto-upgr…
BenjaminX Apr 27, 2026
1065a48
refactor: move SegmentAttachmentBinding and UploadFile to TypeBase (#…
asukaminato0721 Apr 27, 2026
2d6babe
test: add Baidu OBS storage unit tests (#34330)
jimmyzhuu Apr 28, 2026
cbb4cc5
fix: show full checklist message tooltip instead of truncated (#35613)
hjlarry Apr 28, 2026
282561a
fix: align auto update time picker to the right (#35621)
hjlarry Apr 28, 2026
0c280ef
fix(test): register baidu_obs mock as pytest plugin (#35618)
lin-snow Apr 28, 2026
3e4849d
fix: align object value remove button of chat variable (#35616)
hjlarry Apr 28, 2026
5a7a955
fix: prioritize URL conversation_id over localStorage in embedded cha…
treekimm Apr 28, 2026
8c7393e
refactor(web): improve a11y and design-system consistency for date/ti…
lyzno1 Apr 28, 2026
28a26f2
refactor: improve scrollbar handling in plugin and model selector UI …
lyzno1 Apr 28, 2026
e2becd6
test: cover shared workflow app run (#35634)
lyzno1 Apr 28, 2026
b8dea56
fix(ci): wait for mysql to accept queries before db migration (#35631)
lin-snow Apr 28, 2026
1d3498f
fix(web): filter model selector by model name (#35624)
WTW0313 Apr 28, 2026
d2e1da2
chore: port one api (#35609)
asukaminato0721 Apr 28, 2026
38eb04d
fix: hit-testing response failed because of Pydantic check. (#35640)
FFXN Apr 28, 2026
d095603
chore: correction of ru translation (#35645)
knyazz Apr 29, 2026
0536549
fix: flaky WordExtractor close test in CI (#35652)
kenwoodjw Apr 29, 2026
16d408d
fix: refresh MCP tool metadata after updates and align App DSL test s…
hyl64 Apr 29, 2026
d23cefe
fix: improve workflow as tool overlays (#35661)
hjlarry Apr 29, 2026
6fafeec
chore: bump version to 1.14.0 (#35662)
wylswz Apr 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
168 changes: 168 additions & 0 deletions .agents/skills/backend-code-review/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
---
name: backend-code-review
description: Review backend code for quality, security, maintainability, and best practices based on established checklist rules. Use when the user requests a review, analysis, or improvement of backend files (e.g., `.py`) under the `api/` directory. Do NOT use for frontend files (e.g., `.tsx`, `.ts`, `.js`). Supports pending-change review, code snippets review, and file-focused review.
---

# Backend Code Review

## When to use this skill

Use this skill whenever the user asks to **review, analyze, or improve** backend code (e.g., `.py`) under the `api/` directory. Supports the following review modes:

- **Pending-change review**: when the user asks to review current changes (inspect staged/working-tree files slated for commit to get the changes).
- **Code snippets review**: when the user pastes code snippets (e.g., a function/class/module excerpt) into the chat and asks for a review.
- **File-focused review**: when the user points to specific files and asks for a review of those files (one file or a small, explicit set of files, e.g., `api/...`, `api/app.py`).

Do NOT use this skill when:

- The request is about frontend code or UI (e.g., `.tsx`, `.ts`, `.js`, `web/`).
- The user is not asking for a review/analysis/improvement of backend code.
- The scope is not under `api/` (unless the user explicitly asks to review backend-related changes outside `api/`).

## How to use this skill

Follow these steps when using this skill:

1. **Identify the review mode** (pending-change vs snippet vs file-focused) based on the user’s input. Keep the scope tight: review only what the user provided or explicitly referenced.
2. Follow the rules defined in **Checklist** to perform the review. If no Checklist rule matches, apply **General Review Rules** as a fallback to perform the best-effort review.
3. Compose the final output strictly follow the **Required Output Format**.

Notes when using this skill:
- Always include actionable fixes or suggestions (including possible code snippets).
- Use best-effort `File:Line` references when a file path and line numbers are available; otherwise, use the most specific identifier you can.

## Checklist

- db schema design: if the review scope includes code/files under `api/models/` or `api/migrations/`, follow [references/db-schema-rule.md](references/db-schema-rule.md) to perform the review
- architecture: if the review scope involves controller/service/core-domain/libs/model layering, dependency direction, or moving responsibilities across modules, follow [references/architecture-rule.md](references/architecture-rule.md) to perform the review
- repositories abstraction: if the review scope contains table/model operations (e.g., `select(...)`, `session.execute(...)`, joins, CRUD) and is not under `api/repositories`, `api/core/repositories`, or `api/extensions/*/repositories/`, follow [references/repositories-rule.md](references/repositories-rule.md) to perform the review
- sqlalchemy patterns: if the review scope involves SQLAlchemy session/query usage, db transaction/crud usage, or raw SQL usage, follow [references/sqlalchemy-rule.md](references/sqlalchemy-rule.md) to perform the review

## General Review Rules

### 1. Security Review

Check for:
- SQL injection vulnerabilities
- Server-Side Request Forgery (SSRF)
- Command injection
- Insecure deserialization
- Hardcoded secrets/credentials
- Improper authentication/authorization
- Insecure direct object references

### 2. Performance Review

Check for:
- N+1 queries
- Missing database indexes
- Memory leaks
- Blocking operations in async code
- Missing caching opportunities

### 3. Code Quality Review

Check for:
- Code forward compatibility
- Code duplication (DRY violations)
- Functions doing too much (SRP violations)
- Deep nesting / complex conditionals
- Magic numbers/strings
- Poor naming
- Missing error handling
- Incomplete type coverage

### 4. Testing Review

Check for:
- Missing test coverage for new code
- Tests that don't test behavior
- Flaky test patterns
- Missing edge cases

## Required Output Format

When this skill invoked, the response must exactly follow one of the two templates:

### Template A (any findings)

```markdown
# Code Review Summary

Found <X> critical issues need to be fixed:

## 🔴 Critical (Must Fix)

### 1. <brief description of the issue>

FilePath: <path> line <line>
<relevant code snippet or pointer>

#### Explanation

<detailed explanation and references of the issue>

#### Suggested Fix

1. <brief description of suggested fix>
2. <code example> (optional, omit if not applicable)

---
... (repeat for each critical issue) ...

Found <Y> suggestions for improvement:

## 🟡 Suggestions (Should Consider)

### 1. <brief description of the suggestion>

FilePath: <path> line <line>
<relevant code snippet or pointer>

#### Explanation

<detailed explanation and references of the suggestion>

#### Suggested Fix

1. <brief description of suggested fix>
2. <code example> (optional, omit if not applicable)

---
... (repeat for each suggestion) ...

Found <Z> optional nits:

## 🟢 Nits (Optional)
### 1. <brief description of the nit>

FilePath: <path> line <line>
<relevant code snippet or pointer>

#### Explanation

<explanation and references of the optional nit>

#### Suggested Fix

- <minor suggestions>

---
... (repeat for each nits) ...

## ✅ What's Good

- <Positive feedback on good patterns>
```

- If there are no critical issues or suggestions or option nits or good points, just omit that section.
- If the issue number is more than 10, summarize as "Found 10+ critical issues/suggestions/optional nits" and only output the first 10 items.
- Don't compress the blank lines between sections; keep them as-is for readability.
- If there is any issue requires code changes, append a brief follow-up question to ask whether the user wants to apply the fix(es) after the structured output. For example: "Would you like me to use the Suggested fix(es) to address these issues?"

### Template B (no issues)

```markdown
## Code Review Summary
✅ No issues found.
```
91 changes: 91 additions & 0 deletions .agents/skills/backend-code-review/references/architecture-rule.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Rule Catalog — Architecture

## Scope
- Covers: controller/service/core-domain/libs/model layering, dependency direction, responsibility placement, observability-friendly flow.

## Rules

### Keep business logic out of controllers
- Category: maintainability
- Severity: critical
- Description: Controllers should parse input, call services, and return serialized responses. Business decisions inside controllers make behavior hard to reuse and test.
- Suggested fix: Move domain/business logic into the service or core/domain layer. Keep controller handlers thin and orchestration-focused.
- Example:
- Bad:
```python
@bp.post("/apps/<app_id>/publish")
def publish_app(app_id: str):
payload = request.get_json() or {}
if payload.get("force") and current_user.role != "admin":
raise ValueError("only admin can force publish")
app = App.query.get(app_id)
app.status = "published"
db.session.commit()
return {"result": "ok"}
```
- Good:
```python
@bp.post("/apps/<app_id>/publish")
def publish_app(app_id: str):
payload = PublishRequest.model_validate(request.get_json() or {})
app_service.publish_app(app_id=app_id, force=payload.force, actor_id=current_user.id)
return {"result": "ok"}
```

### Preserve layer dependency direction
- Category: best practices
- Severity: critical
- Description: Controllers may depend on services, and services may depend on core/domain abstractions. Reversing this direction (for example, core importing controller/web modules) creates cycles and leaks transport concerns into domain code.
- Suggested fix: Extract shared contracts into core/domain or service-level modules and make upper layers depend on lower, not the reverse.
- Example:
- Bad:
```python
# core/policy/publish_policy.py
from controllers.console.app import request_context

def can_publish() -> bool:
return request_context.current_user.is_admin
```
- Good:
```python
# core/policy/publish_policy.py
def can_publish(role: str) -> bool:
return role == "admin"

# service layer adapts web/user context to domain input
allowed = can_publish(role=current_user.role)
```

### Keep libs business-agnostic
- Category: maintainability
- Severity: critical
- Description: Modules under `api/libs/` should remain reusable, business-agnostic building blocks. They must not encode product/domain-specific rules, workflow orchestration, or business decisions.
- Suggested fix:
- If business logic appears in `api/libs/`, extract it into the appropriate `services/` or `core/` module and keep `libs` focused on generic, cross-cutting helpers.
- Keep `libs` dependencies clean: avoid importing service/controller/domain-specific modules into `api/libs/`.
- Example:
- Bad:
```python
# api/libs/conversation_filter.py
from services.conversation_service import ConversationService

def should_archive_conversation(conversation, tenant_id: str) -> bool:
# Domain policy and service dependency are leaking into libs.
service = ConversationService()
if service.has_paid_plan(tenant_id):
return conversation.idle_days > 90
return conversation.idle_days > 30
```
- Good:
```python
# api/libs/datetime_utils.py (business-agnostic helper)
def older_than_days(idle_days: int, threshold_days: int) -> bool:
return idle_days > threshold_days

# services/conversation_service.py (business logic stays in service/core)
from libs.datetime_utils import older_than_days

def should_archive_conversation(conversation, tenant_id: str) -> bool:
threshold_days = 90 if has_paid_plan(tenant_id) else 30
return older_than_days(conversation.idle_days, threshold_days)
```
Loading