Commit Graph
18781 Commits
Author SHA1 Message Date
gchust 3a65a37e8f fix(ui-layout): resolve next merge conflicts with develop 2026-10-07 19:26:32 +08:00
nocobase[bot] b6e6ddfe32 Merge branch 'main' into next 2026-10-07 11:13:47 +00:00
gchust 503cacdad8 fix(client-v2): keep empty JS action items accessible in the UI editor (#10573) 2026-10-07 19:13:09 +08:00
nocobase[bot] 6ed6173868 Merge branch 'main' into next 2026-10-07 08:35:40 +00:00
gchust 9f94035af0 fix(ui-layout): preserve popup template settings in the new client (#10574) 2026-10-07 16:35:02 +08:00
nocobase[bot] 751392ac4d Merge branch 'next' into develop 2026-10-06 06:17:46 +00:00
nocobase[bot] 534cae2f69 Merge branch 'main' into next 2026-10-06 06:17:09 +00:00
nocobase[bot] f0ac470721 docs: update changelogs 2026-10-06 06:16:28 +00:00
nocobase[bot] b23e28a91a Merge branch 'next' into develop 2026-10-06 06:11:10 +00:00
nocobase[bot] 16a05f6255 Merge branch 'main' into next 2026-10-06 06:09:06 +00:00
nocobase[bot] 3c38adf7b7 chore(versions): 😊 publish v2.2.21 v2.2.21 2026-10-06 06:08:01 +00:00
xilesun b11c3d0323 Merge branch 'next' into develop
One conflict, in yarn.lock: hono's resolved version. develop had drifted
to 4.13.9, next carries 4.13.13 from #10569. Both clear CVE-2026-93981
(fixed in 4.13.7); took next's so the branches stay aligned. The entry
header is identical on both sides (hono@^4.11.4), only the resolution
differed.

The lockfile was merged as text; yarn install was deliberately not
re-run, for the reason recorded in the previous merge.

Validated: 4617 blocks, 6020 patterns, 10263 dependency refs, 0
unresolvable, 0 duplicates.
2026-10-06 12:07:08 +08:00
nocobase[bot] 5aff7563d0 Merge branch 'main' into next 2026-10-06 04:04:47 +00:00
YANG QIA d5d7de6d8d fix(deps): upgrade nodemailer, hono and moment (#10569)
Closes 8 of the 18 findings in the 2026-10-05 scan.

nodemailer ^9.1.1 -> ~10.0.9 (resolves 10.0.14). Six advisories, three
of them high: GHSA-prgh-xp8r-p3m5, GHSA-v53p-9fqp-m79j (quadratic
backtracking in the addressparser free-text fallback),
GHSA-6vj9-mwq6-2f5v, GHSA-8vvx-rff5-p5rq, GHSA-g57g-f23g-4646 (quoted
local-part producing a malformed envelope recipient, patched in 10.0.9).
Every advisory range is of the form `>= 9.1.0, < 10.0.x`, so 9.x has no
backport and the major bump is the only route. 10.0.9 is the lowest
release covering all six.

Pinned with `~` rather than `^` to stay within 10.0.x. Not pinned
exactly at 10.0.9, because the patches after it are ones we want:
10.0.11 restores the CommonJS entry point and the @types/nodemailer
declaration layout, and 10.0.12 settles every send on a connection
error and backs off pool requeues -- this code uses `pool: true`.

10.0.0 carries one breaking change, "Node.js 20 or newer is required".
This repo requires node >= 22 and builds on node:22-bookworm, so it does
not apply. The v7/v8/v9 breaking changes listed in the changelog are
already in effect at 9.1.1. 10.0.0 also explicitly keeps a transporter
assignable to the plain Transporter type, which is how the three call
sites use it; verified by type-checking the exact usage (createTransport
with a pool config, Map<string, Transporter>, sendMail, close) against
both 10.0.9 and 10.0.14, and by loading it at runtime.

hono and moment needed no manifest change: their existing ranges
(^4.11.4, ^2.29.1/^2.30.1) already admit the patched releases, the
lockfile was just pinned to stale resolutions. Refreshing them moves
hono 4.13.5 -> 4.13.13 (CVE-2026-93981, hono/jsx XSS before 4.13.7) and
moment 2.29.4/2.30.1 -> 2.31.0 (CVE-2026-17495, path traversal via a
crafted non-string locale). The two moment entries now resolve to the
same version and are merged.

The lockfile was edited as text rather than regenerated: pro-plugins is
not part of this repository but participates in workspace resolution, so
a plain yarn install drops entries it owns. Validated at 4615 blocks,
6018 patterns, 10262 dependency refs, 0 unresolvable, 0 duplicates, no
out-of-order entries, and verified by installing against it.

Not addressed, no upstream fix exists:
- braces 3.0.3 (GHSA-vfj7-8cjw-p6xm) -- latest is 3.0.3 and the advisory
  records no patched version; reached only via micromatch/chokidar.
- basic-ftp 5.3.1 (CVE-2026-102990) -- get-uri 8.0.1, the latest, still
  depends on basic-ftp ^5.3.1; reached via pm2 -> proxy-agent ->
  pac-proxy-agent -> get-uri, and the parser is only exercised by
  Client.list() against an FTP server.
- mariadb 2.5.6 -- connector v3 is incompatible with sequelize 6.
2026-10-06 12:03:42 +08:00
nocobase[bot] 99eb541dce Merge branch 'next' into develop 2026-10-05 12:57:46 +00:00
nocobase[bot] b94ca5cf65 Merge branch 'main' into next 2026-10-05 12:57:09 +00:00
gchustandClaude Opus 5.5 5b47bec116 fix(client-v2): keep empty cardless JS blocks accessible in the UI editor (#10563)
* fix(client-v2): keep empty cardless JS blocks accessible in the UI editor

* refactor(client-v2): pass JS block editor min height as a prop

The model's reactive render wrapper already re-renders on UI editor
toggles, so the extra observer wrapper is unnecessary. Use the theme's
controlHeightLG token instead of a hard-coded value.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 20:56:30 +08:00
gchustandClaude Opus 5.5 3b950c6585 Merge branch 'next' into develop
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 22:37:27 +11:00
nocobase[bot] 7f791de20a Merge branch 'main' into next 2026-10-05 11:14:05 +00:00
gchust 1c47410e6b fix(plugin-ui-templates): hide template collection from block choices (#10561) 2026-10-05 19:13:27 +08:00
nocobase[bot] 68fa52702d chore(versions): 😊 publish v2.4.0-alpha.9 v2.4.0-alpha.9 2026-09-30 15:50:55 +00:00
nocobase[bot] 16510e27bc docs: update changelogs 2026-09-30 14:01:10 +00:00
nocobase[bot] ab3322f30b Merge branch 'main' into next 2026-09-30 13:51:31 +00:00
nocobase[bot] 68b8d4a3b6 chore(versions): 😊 publish v2.2.20 v2.2.20 2026-09-30 13:50:08 +00:00
xilesun 5943bbade9 Merge branch 'next' into develop
One conflict, in yarn.lock: form-data's entry. develop had
`^4.0.0, ^4.0.6`, next had `^4.0.0, ^4.0.5, ^4.0.6`. Took next's, which
is the union -- both resolve to the same 4.0.6, and ^4.0.5 is required
by a package on main.

Also dropped the orphaned @nocobase/utils@3.0.0-alpha.4 entry. It was
already dangling on develop before this merge: it declares a dependency
on @budibase/handlebars-helpers@0.14.0, which no longer has a block
(develop only carries 0.14.3), while nothing in the tree requires
@nocobase/utils@3.0.0-alpha.4 itself -- zero consumers inside the
lockfile and no workspace package.json declares it. Removing it takes
the lockfile from 1 unresolvable reference to 0.

The lockfile was merged as text; yarn install was deliberately not
re-run. Re-running it during conflict resolution is what re-resolved the
whole file on 2026-09-24 in f9f77620be, drifting 42 packages and pulling
axios to a version whose type signature broke the sdk build.

Validated: 4625 blocks, 6034 patterns, 10288 dependency refs, 0
unresolvable, 0 duplicates.
2026-09-30 20:04:02 +08:00
nocobase[bot] f921698fd4 Merge branch 'main' into next 2026-09-30 10:41:54 +00:00
YANG QIA 81abd94088 fix(deps): upgrade axios to 1.20.0 (#10566)
* fix(deps): upgrade axios to 1.20.0

main resolves axios@^1.7.0 to 1.7.7 and axios@^1.7.8 to 1.7.9, which
carry 30 known advisories between them -- SSRF, credential leakage,
prototype pollution and DoS -- and has done so for over two months.
^1.7.0 is the entry the nine workspaces declare, so it is what
@nocobase/sdk and every APIClient request actually run on.

develop meanwhile fails its declaration build:

  APIClient.ts:175 - error TS2322: Type 'Promise<AxiosResponseResult<T, R, D, any>>'
  is not assignable to type 'Promise<R>'

Both have one cause. develop drifted to axios 1.20.0 on 2026-09-24 in
f9f77620be, a next -> develop sync where yarn install was re-run to
resolve a lockfile conflict, re-resolving the whole file to whatever was
latest on npm. 1.20.0 carries no advisories, so the drift accidentally
fixed the security problem, but axios 1.19.0 had changed request() from
three generics returning Promise<R> to four returning
Promise<AxiosResponseResult<T, R, D, P>>, and the declared type stopped
matching.

Fixing it here and letting it flow main -> next -> develop closes the
advisories on the release branch, the type build on develop, and the
divergence between them.

Merge the four 1.x ranges into one entry at 1.20.0. form-data@^4.0.6
joins the existing ^4.0.0/^4.0.5 entry, which already resolves to 4.0.6.
axios@^0.18.1 is untouched; 0.x cannot merge into a 1.x entry.

APIClient gets one assertion. AxiosResponseResult<T, R, D, P> is a
conditional type that is R whenever R is not the default, but TypeScript
cannot prove that for an unbound generic. The assertion is accurate,
emits no runtime code and is not `as any`. Widening request()'s own
signature to mirror axios would leak axios internals into the public SDK
surface and affect every caller, so it is not done.

axios 1.8.0 is the only release in this range flagged BREAKING, for
allowAbsoluteUrls, and it does not reach us. The default when unset is
true (lib/core/Axios.js), which makes buildFullPath's second clause
always false and reduces it to 1.7.7's exact condition. The flag does
not appear anywhere in this repository. server-request.ts, the
SSRF-guarding wrapper, is unaffected for three independent reasons: it
passes no baseURL so the first clause short-circuits in both versions,
its whitelist check reads config.url before any combination, and
redirects are validated per hop via beforeRedirect, which never reaches
buildFullPath.

The lockfile was edited as text rather than regenerated: pro-plugins is
not in this repository but participates in workspace resolution, so a
plain yarn install drops entries it owns -- one here deleted
axios@^1.4.0, which dingtalk-stream needs. Validated at 4619 blocks,
6022 patterns, 10277 dependency refs, 0 unresolvable, 0 duplicates, and
verified by installing against it (axios resolves to 1.20.0) and by
type-checking APIClient.ts, which passes with the assertion and
reproduces the exact CI error without it.

* fix(plugin-file-manager): narrow content-type header to string

axios 1.20.0 widened the type of lowercase response header keys. In
1.7.7 only the capitalised forms were listed:

  type CommonResponseHeadersList = 'Server' | 'Content-Type' | ...

so headers['content-type'] fell through to the RawAxiosHeaders index
signature and inferred string. 1.20.0 adds the lowercase forms:

  type CommonResponseHeaderKey = CommonResponseHeadersList | Lowercase<CommonResponseHeadersList>

so it now infers AxiosHeaderValue, which includes number and cannot be
assigned to contentType?: string.

This file did not fail the repo's own build because that build does not
reach it, but the same pattern breaks plugin-action-export-pro in the
pro-plugins build. Reproduced locally against axios 1.20.0.
2026-09-30 18:41:07 +08:00
nocobase[bot] 81c93dfaa1 Merge branch 'next' into develop 2026-09-30 09:03:10 +00:00
nocobase[bot] 0607ed1db6 Merge branch 'main' into next 2026-09-30 09:02:30 +00:00
Jiannx d0789a5aef fix(plugin-kanban): prevent action bar layout flicker (#10553)
* fix(plugin-ai): prevent shortcut layout shift while loading

* fix(plugin-kanban): avoid measured action bar layout shift

* fix(plugin-ai): reuse employee repository for shortcuts
2026-09-30 17:01:48 +08:00
nocobase[bot] a91b2f03f4 Merge branch 'next' into develop 2026-09-30 00:42:11 +00:00
nocobase[bot] 01779af537 chore(versions): 😊 publish v2.3.0-beta.13 v2.3.0-beta.13 2026-09-30 00:41:05 +00:00
nocobase[bot] 3a3612e793 Merge branch 'next' into develop 2026-09-29 14:28:28 +00:00
nocobase[bot] 58f40268fe Merge branch 'main' into next 2026-09-29 14:27:40 +00:00
Zeke ZhangandClaude Opus 5.5 7af646f5fe fix(client-v2): show popup parent record variable in quick create popups of unsaved forms (#10554)
* fix(client-v2): show popup parent record variable in quick create popups of unsaved forms

When a record select field opens its quick create popup from a form whose
record has no primary key yet (e.g. the approver's interface configured in
the workflow canvas), neither associationName nor sourceId was passed, so the
"Current popup parent record" variable was hidden and could not be configured.

Pass a meta-only sourceAssociationName in that case and let createPopupMeta
build the parent record meta from it. Runtime resolution still relies on
sourceId, and block resource binding in the popup is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(client-v2): retain popup configuration mode

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 10:26:59 -04:00
nocobase[bot] 60a6c3f8bd Merge branch 'next' into develop 2026-09-29 12:51:08 +00:00
nocobase[bot] 014fc9a1cd Merge branch 'main' into next 2026-09-29 12:50:30 +00:00
DrolandClaude Opus 5.5 8e5732887e feat(plugin-ai): expose referenced knowledge base documents in chat responses (#10560)
* feat(plugin-ai): expose referenced knowledge base documents in chat responses

- retrievePrompt now returns { prompt, documents } with the matched knowledge base documents
- move knowledge base retrieval out of getSystemPrompt into buildChatContext
- stream a new knowledge_base_references event for pre-retrieved and tool-retrieved documents
- persist deduplicated references to the last AI message metadata when the stream ends

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(plugin-ai): emit pre-retrieved knowledge base references before stream end

Send the pre-retrieved documents right before stream_end with the last AI message id
instead of right after stream_start. Tool-retrieved documents are still emitted in real time.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(plugin-ai): include extname in knowledge base references

Let the frontend build the download filename as title + extname,
the same way the knowledge base document list does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* revert(plugin-ai): emit pre-retrieved knowledge base references after stream start

Restore sending the pre-retrieved documents right after stream_start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(plugin-ai): drop messageId from tool knowledge base reference events

References are persisted on the last AI message of the turn, which can differ from the
message that issued the tool call, so the tool event no longer carries a messageId.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 08:49:53 -04:00
nocobase[bot] 882a86b188 Merge branch 'next' into develop 2026-09-29 06:53:56 +00:00
nocobase[bot] 9ea99c43d0 Merge branch 'main' into next 2026-09-29 06:53:16 +00:00
YANG QIA adbadacd8f fix(deps): close js-yaml and uuid advisories from the latest scan (#10555)
The scan was run against an image built before #10542 (it reports
pdfjs-dist 5.6.205, which came from the old `^5.3.31`), so pdfjs-dist is
already resolved. js-yaml and uuid were not.

js-yaml (CVE-2026-84375, fixed in 3.15.2 / 4.3.2) needed no new override:
every range in the tree (`^3.13.1`, `^4.1.0`, `^4.1.1`) already admits a
patched version, the lockfile was just pinned to stale resolutions.
Refreshing them moves `^3.13.1` to 3.15.2 and `^4.x` to 4.3.2.

pm2 is the one exception — 7.0.4 still pins js-yaml 4.3.1 exactly. The
root `**/pm2/js-yaml` override already covered this repo, but the image
installs the create-nocobase-app template, whose own `resolutions` did
not carry it, so the fix never reached the published image. Add it there.

uuid (CVE-2026-41907, fixed in 11.1.1 / 12.0.1 / 13.0.1 / 14.x) cannot be
fixed at the source. Refreshing the lockfile moves `^11`, `^13` and `^14`
to patched releases, but `^8`, `^9` and `^10` are capped below every fix
and the upstreams have no path forward — sequelize 6.37.8, exceljs 4.4.0
and koa-proxies 0.12.4 all still depend on uuid `^8`/`^9`. Pin `**/uuid`
to 11.1.1: it is patched, it is the last line shipping a CommonJS build,
and it satisfies `^8` through `^11` consumers. uuid's breaking changes
between v11 and v14 are environmental (CommonJS removal, global crypto,
dropped Node versions), not API changes, so the langchain packages asking
for `^13`/`^14` keep every symbol they import.

request must stay on uuid 3.x: it does `require('uuid/v4')`, a subpath
the v7+ exports map no longer exposes, so `**/uuid` alone breaks both
request and its dependent cos-nodejs-sdk-v5 with ERR_PACKAGE_PATH_NOT_
EXPORTED, taking Tencent COS storage down with it.

`**/temp-write/uuid` has to accompany it. temp-write itself is fine on
v11 — it calls `uuid.v4()`, which still exists — but it declares the same
`uuid@^3.3.2` spec as request, and a yarn v1 lockfile is keyed by
`name@range`, so one spec cannot resolve to two versions. Dropping the
temp-write entry silently collapses `uuid@^3.3.2` onto 11.1.1 and takes
the request guard with it. The two are only effective as a pair.

Both are dev-only — request comes from cos-nodejs-sdk-v5 and temp-write
from lerna — and a production install of the template contains neither.

Also bump @budibase/handlebars-helpers 0.14.0 -> 0.14.3, which moved to
uuid `^11.1.1` upstream. Its helper set is unchanged (176 helpers, no
additions or removals).

mariadb is left alone: the 2.x line ended at 2.5.6 with no backport, the
advisories are first fixed in 3.2.4, and connector v3 is incompatible
with sequelize 6.
2026-09-29 14:52:41 +08:00
nocobase[bot] 68f60c32e3 Merge branch 'next' into develop 2026-09-29 04:29:20 +00:00
nocobase[bot] e513569f27 Merge branch 'main' into next 2026-09-29 04:28:47 +00:00
nocobase[bot] 024a08cbbb docs: update changelogs 2026-09-29 04:28:07 +00:00
nocobase[bot] 40c194c2e5 Merge branch 'next' into develop 2026-09-29 04:22:06 +00:00
nocobase[bot] a2bca0a1ed Merge branch 'main' into next 2026-09-29 04:20:01 +00:00
nocobase[bot] 6bd485268d chore(versions): 😊 publish v2.2.19 v2.2.19 2026-09-29 04:18:54 +00:00
nocobase[bot] bddad64dd8 Merge branch 'next' into develop 2026-09-29 03:32:17 +00:00
nocobase[bot] 4f142ad496 Merge branch 'main' into next 2026-09-29 03:31:40 +00:00
DrolandClaude Opus 5.5 5cb7cd21db feat(plugin-ai): support OpenCode request headers and align DeepSeek V4.1-Flash capabilities (#10551)
* feat(plugin-ai): inject OpenCode request headers into LLM providers

- Add requestContext (sessionId) to LLM providers, passed from AI employee
  conversations, workflow LLM nodes and test flight
- Add LLMProvider.getDefaultHeaders(): returns a custom User-Agent and
  x-opencode-session when baseURL targets opencode.ai, otherwise empty
- Merge the default headers into every provider's model client and
  model listing requests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(plugin-ai): pass session context to web search and AI translate requests

- subAgentWebSearch passes the conversation sessionId to the LLM
  provider, falling back to a generated id, so OpenCode requests carry
  x-opencode-session
- Localization AI translate task uses its task id as the session

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(plugin-ai): align DeepSeek capabilities with V4.1-Flash

- Add supportsImageInput and send image attachments to Flash models
  (deepseek-flash, deepseek-v4-flash, deepseek-v4-flash-vision-exp,
  deepseek-v4.1-flash); V4-Pro silently drops images
- Disable web search for Flash models: V4.1-Flash ignores the built-in
  web_search tool and answers from stale knowledge; keep it for V4-Pro
- Register deepseek-flash as a default model

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 23:31:01 -04:00