Commit Graph

7442 Commits

Author SHA1 Message Date
Daniel
cf45ff5ae3 🧑‍💻 Add kernel API /api/filetree/setSort https://github.com/siyuan-note/siyuan/issues/15776
Signed-off-by: Daniel <845765@qq.com>
2026-05-12 16:50:34 +08:00
Daniel
dfb331e589 🎨 Clear all cached data when open the user guide
Signed-off-by: Daniel <845765@qq.com>
2026-05-12 00:14:15 +08:00
Daniel
fe8f96da48 🎨 Supports returning a list of files from data snapshots via filename search https://github.com/siyuan-note/siyuan/issues/17258
Signed-off-by: Daniel <845765@qq.com>
2026-05-11 20:24:34 +08:00
Daniel
4b1c10ee94 🎨 Supports returning a list of files from data snapshots via filename search https://github.com/siyuan-note/siyuan/issues/17258
Signed-off-by: Daniel <845765@qq.com>
2026-05-11 20:03:16 +08:00
Jeffrey Chen
6ee1b8d989 Improve export file (#17647)
* 🎨 Improve export file

* 🎨 Improve export file
2026-05-11 12:57:52 +08:00
Jeffrey Chen
c20212594d ♻️ Extract IsMobileContainer and replace the mobile ternary judgment (#17661) 2026-05-11 00:03:33 +08:00
Daniel
971bfb4786 🔨 Update build scripts
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 23:38:44 +08:00
Jeffrey Chen
ff9d839c00 🔒 Escape package name, version, keywords and funding https://github.com/siyuan-note/siyuan/security/advisories/GHSA-27qc-m5gf-jv5r (#17660) 2026-05-10 23:32:19 +08:00
Daniel
74cdf2ca9f 🔒 https://github.com/siyuan-note/siyuan/security/advisories/GHSA-gmmv-4cc5-wr9r
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 20:09:48 +08:00
Daniel
58da3744e1 🎨 Improve text
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 19:59:40 +08:00
Daniel
038dc6e183 🎨 Improve wal queue
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 19:32:03 +08:00
Qiaochu Hu
3071ad22d4 🔒 Use parameterized queries in putStat to prevent SQL injection (#17658)
The putStat function in kernel/sql/stat.go was building SQL queries
via string concatenation instead of using parameterized queries.
While currently only called with hardcoded internal values, this is
a defense-in-depth improvement that prevents future SQL injection
if the function is ever called with user-controlled input.

The execStmtTx helper already supports variadic args, so this is
a straightforward change to use ? placeholders.

Co-authored-by: Test User <test@example.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 19:24:21 +08:00
Qiaochu Hu
890d2c5a67 🔒 Fix path traversal vulnerability in /repo/diff/ endpoint (#17657)
The /repo/diff/ endpoint used the URL path parameter directly in
filepath.Join without validation, allowing an authenticated admin
user to read arbitrary files via path traversal sequences.

This fix:
- Cleans the path with filepath.Clean
- Rejects paths containing ".."
- Validates the final path with IsSubPath to ensure it stays within
  {TempDir}/repo/diff/

Co-authored-by: Test User <test@example.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 19:20:31 +08:00
Qiaochu Hu
b763d787d1 🔒 Fix path traversal vulnerability in /export/temp/ endpoint (#17656)
The /export/temp/ endpoint used c.Request.URL.Path directly in
filepath.Join without any validation, allowing path traversal via
sequences like /export/temp/../../ to access files outside the
intended temp directory.

This fix:
- Constrains file access to {TempDir}/export/temp/ base directory
- Cleans the relative path with filepath.Clean
- Rejects paths containing ".."
- Validates the final path with IsSubPath check

Co-authored-by: Test User <test@example.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-10 19:01:32 +08:00
Daniel
06065475cd 🎨 Improve text https://github.com/siyuan-note/siyuan/issues/14414
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 15:36:29 +08:00
Daniel
87eee0db67 Shorthands on HarmonyOS https://github.com/siyuan-note/siyuan/issues/17654
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 13:46:42 +08:00
Daniel
9f00ad2db9 Shorthands on HarmonyOS https://github.com/siyuan-note/siyuan/issues/17654
Signed-off-by: Daniel <845765@qq.com>
2026-05-10 13:41:37 +08:00
Daniel
c548950b77 Shorthands on mobile https://github.com/siyuan-note/siyuan/issues/14414
Signed-off-by: Daniel <845765@qq.com>
2026-05-09 20:35:38 +08:00
Yingyi / 颖逸
c59b8ec7f7 🎨 Harden RPC handling and improve error reporting in kernel plugin (#17655)
* perf(kernel-plugin): strengthen RPC, sandbox, and form parsing

Validate and harden plugin RPC and request handling: ensure RPC API call first argument is a string; treat missing method using HasValue(); return InvalidParams for malformed params; bail out early when kernel is incompatible or missing. Fix sandbox promise invocation to return after reporting errors to avoid continuing on nil/invalid values. Change RequestForm files to []*RequestFile, allocate pointer entries, properly open/read/close uploaded files, and clone request headers before modifying them. These changes prevent nil derefs, resource leaks, and improve error reporting.

* perf(kernel-plugin): Skip empty Content-Type; use safe type assertions

Avoid setting an empty Content-Type header in the proxy when gin.Context.ContentType() is empty. Replace unsafe type assertions with comma-ok checks when converting request and file body bytes to Data objects to prevent panics on unexpected types or nil pointers. Also comment out assignments of c.Request.Context().Err() in plugin request handlers to avoid overwriting other error state on context cancellation. Affected files: kernel/api/network.go, kernel/plugin/plugin.go, kernel/plugin/sandbox.go.
2026-05-09 19:38:54 +08:00
Daniel
38be2cd887 Shorthands on mobile https://github.com/siyuan-note/siyuan/issues/14414
Signed-off-by: Daniel <845765@qq.com>
2026-05-09 18:33:19 +08:00
Yingyi / 颖逸
e564ce7b1f Support kernel plugin system (#17487)
* ♻️ Add/update indirect Go dependencies in kernel

Update kernel/go.mod and kernel/go.sum to add multiple indirect modules and checksum entries. Notable additions include github.com/fastschema/qjs, github.com/filecoin-project/go-jsonrpc, github.com/ipfs/go-log/v2, go.opencensus.io, go.uber.org/{atomic,multierr,zap}, golang.org/x/xerrors and github.com/golang/groupcache among many transitive entries. Changes ensure transitive dependencies are pinned and go.sum checksums are present (likely produced by `go mod tidy`) to make builds reproducible.

* refactor: export bazaar.GetCurrentBackend for kernel plugin platform matching

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* build: promote qjs to direct dependency for kernel plugin system

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(plugin): add KernelPlugin struct with QJS runtime lifecycle and state machine

Introduces plugin/plugin.go with KernelPlugin owning an isolated QuickJS
runtime, a mutex-serialized call path, RPC method registration/dispatch,
Promise awaiting, JSON round-trip result conversion, and WebSocket tracking.
Adds sandbox_stub.go as a temporary no-op stub for injectSandboxGlobals.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(plugin): add PluginManager singleton for kernel plugin discovery and lifecycle

* feat(plugin): add sandbox injection scaffold with siyuan.log

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(plugin): implement siyuan.storage CRUD scoped to petal storage directory

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(plugin): implement siyuan.fetch with browser-like Response interface

* feat(plugin): implement siyuan.socket with browser-compatible WebSocket API

- Add sync import for mutex-protected WebSocket connection tracking
- Implement __siyuan_socket Go function that creates browser-compatible WebSocket objects
- Support send() method with queueing for messages sent before connection opens
- Support close() method for closing the WebSocket connection
- Track connection state via readyState property (0=CONNECTING, 1=OPEN, 3=CLOSED)
- Connect to kernel WebSocket endpoint with automatic auth token injection
- Run WebSocket I/O in background goroutine with proper cleanup
- Wire up siyuan.socket JS API

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(plugin): implement siyuan.rpc.register for JSON-RPC method registration

* feat(plugin): add JSON-RPC 2.0 handler for kernel plugin method dispatch

* feat(plugin): register /api/plugin/rpc/:name and /ws/plugin/rpc/:name routes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(plugin): wire kernel plugin manager start/stop into main lifecycle

* feat(plugin): hook SetPetalEnabled to start/stop kernel plugins on enable/disable

* test(plugin): add unit tests for kernel plugin state machine and eligibility

* test(plugin): add comprehensive unit tests for manager, sandbox, and RPC handlers

* refactor(plugin): Export IsTargetSupported and update usages

Rename isTargetSupported to exported IsTargetSupported and adjust its comment. Replace local calls with bazaar.IsTargetSupported in kernel/bazaar and kernel/plugin/manager, removing the duplicated isKernelEligible helper. Update tests to import bazaar, call the new function, and change expectations to reflect that nil/empty kernel slices are treated as supported (i.e. supported on all platforms).

* refactor(plugin): initialize PluginManager in main and update related usages

* refactor(plugin): update JWT handling and plugin initialization for kernel plugins

* refactor(plugin): enhance plugin initialization and improve sandbox global injections

* refactor(kernel-plugin): Refactor plugin RPC registration and sandbox integration

- Removed deprecated tests and refactored existing tests for clarity and efficiency.
- Updated RPC method registration to use `bind` and `unbind` methods for better clarity.
- Enhanced the `injectSandboxGlobals` function to include additional properties for the plugin.
- Improved error handling in RPC methods and ensured proper state management for plugins.
- Added benchmarks for map to JS conversion performance.
- Cleaned up unused imports and organized code structure for better readability.

* refactor(plugin): enhance concurrency handling and improve WebSocket integration

* refactor(kernel-plugin): enhance RPC method handling and improve function registration

* feat(kernel-plugin): add RPC method info retrieval and enhance plugin management

* refactor(plugin): add plugin management endpoints and enhance plugin info retrieval

* refactor(kernel-plugin): enhance RPC method handling and improve plugin info retrieval

* refactor(kernel-plugin): improve error handling and response structures in RPC methods

* refactor(kernel-plugin): improve error handling in RPC methods and enhance WebSocket closure management

* fix(kernel-plugin): initialize sockets and socketMus maps in NewKernelPlugin

* feat(kernel-plugin): add wsWrite helper and fix PushNotification omitempty

Add wsWrite method on KernelPlugin that acquires the per-connection write
mutex before sending a text frame, returning nil for untracked connections.
Fix PushNotification's Params field to use omitempty for JSON-RPC 2.0 §4.2
compliance. Add rpc_test.go with newTestWsPair helper and tests for wsWrite.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(kernel-plugin): add BroadcastNotification and per-connection write mutex

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(kernel-plugin): expose siyuan.rpc.broadcast in plugin sandbox

Add rpc.broadcast(method, params) binding in injectRpc so JS plugins
can push JSON-RPC 2.0 notifications to all connected server clients.
Fix deadlock by introducing a dedicated socketsMu RWMutex for the
sockets map, decoupling socket tracking from the main plugin mutex
that is held during Start()/Eval().

* fix(kernel-plugin): double-unlock in send handler and document PushNotification write-safety

Remove spurious mu.Unlock() inside the nil-conn branch of injectSocket's
CONNECTING-state send handler; the outer unconditional unlock is sufficient,
so the inner one causes a panic under concurrent load.

Document that PushNotification bypasses per-connection write serialization
and must not be called concurrently with BroadcastNotification/wsWrite on
the same connection without external locking.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* style(kernel-plugin): align struct field declarations in KernelPlugin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(kernel-plugin): omit params field from JsonRpcRequest when nil (JSON-RPC 2.0 §4.1)

Per spec, params MAY be omitted; add omitempty so marshaled requests
with no parameters do not emit "params":null.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(kernel-plugin): change JsonRpcRequest.Params to *json.RawMessage

A pointer correctly models the three-way distinction:
- nil      → params key absent (omitted from marshal output via omitempty)
- non-nil → params present (null, array, or object)

The previous []byte omitempty omitted the key only for nil/empty slices
and could not distinguish absent from explicit null on the wire.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(kernel-plugin): unify method naming conventions and improve JSON-RPC request handling

* fix(kernel-plugin): improve WebSocket message handling and ensure thread safety with mutexes

* fix(kernel-plugin): enhance WebSocket handling and improve error management in storage methods

* fix(kernel-plugin): rename JsonRpcRequestRaw to JsonRpcInboundRequest and update related methods

* fix(kernel-plugin): improve plugin management and error handling in kernel plugin methods

* fix(kernel-plugin): rename kernel field to kernels and update related references

* feat(kernel-plugin): implement logging and improve concurrency handling in plugin manager and storage methods

* feat(kernel-plugin): enhance RPC parameter handling and add JSON array parsing support

* refactor(kernel-plugin): refactor RPC handling and improve logging functionality

* refactor(kernel-plugin): streamline loggerWrapper function and improve error handling in injectFetch

* refactor(kernel-plugin): optimize injectFetch function and enhance error handling

* feat(kernel-plugin): add onLoaded hook and enhance plugin lifecycle management

* feat(kernel-plugin): add ObjectFreeze and ObjectSeal functions to enhance API security

* feat(kernel-plugin): add InitJwtKey function to generate JWT signing key

* refactor(kernel-plugin): enhance error handling and logging in plugin lifecycle methods

* feat(kernel-plugin): improve WebSocket error handling and add concurrency support in BroadcastNotification

* feat(kernel-plugin): enhance error handling in storage and fetch methods with panic recovery

* feat(kernel-plugin): enhance PluginManager concurrency and error handling with sync.Map and atomic operations

* feat(kernel-plugin): refactor PluginState to use atomic operations for improved concurrency

* feat(kernel-plugin): add PluginStateLoaded and update state management in plugin lifecycle

* refactor(kernel-plugin): update logging level in loadPetals and refactor loggerWrapper return values

* feat(kernel-plugin): simplify invokeHook and enhance error handling in Object methods

* feat(kernel-plugin): remove obsolete test files for plugin functionality

* refactor(kernel-plugin): implement loggerWrapper and rpcParamsToJsValue functions for improved logging and RPC parameter handling

* feat(kernel-plugin): introduce Worker for serializing plugin tasks and enhance context management

* refactor(worker): enhance task execution with callback support and graceful shutdown

- Introduced a callback mechanism in the Task struct to handle results and errors.
- Updated the Run method to accept a callback, allowing immediate handling of task results.
- Added a RunSync method for synchronous task execution with result retrieval.
- Implemented atomic closure state management to prevent task submission after closure.
- Enhanced the Close method to ensure graceful shutdown and wait for the worker to finish processing.

* feat(kernel-plugin): refactor storage and RPC methods to use PromiseRun for better error handling

* feat(kernel-plugin): enhance plugin event handling with lifecycle and RPC event subscriptions

* refactor(kernel-plugin): replace PromiseRun with worker.Run for improved error handling in event and storage methods

* chore(kernel-plugin): add goja dependency, drop qjs

* chore(kernel-plugin): delete KernelPluginLogger (qjs stdout/stderr only)

* refactor(kernel-plugin): replace qjs runtime with goja in plugin.go

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(kernel-plugin): add sandbox utility tests (pre-rewrite)

* refactor(kernel-plugin): rewrite sandbox utility functions for goja

Replace goValueToJsValue, getJsContextValue, dispatchEvent with goja
implementations; add convertJsonNumbers helper; stub ObjectFreeze and
ObjectSeal as no-ops; delete dead qjs-only helpers (invokeRpcMethod,
PromiseAwait, rpcParamsToJsValue, parseJsonArrayStringToJsValueArray,
parseJsonStringToJsValue, loggerWrapper, ObjectSetDataMethods).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(kernel-plugin): rewrite sandbox.go inject functions for goja

Replace all qjs-based inject functions (injectGlobalContext, injectPlugin,
injectLogger, injectEvent, injectStorage, injectFetch, injectSocket, injectRpc)
with goja equivalents. Add ObjectSetDataMethods and loggerWrapper helpers.
Remove all remaining qjs dead code; ObjectFreeze/ObjectSeal now call
Object.freeze/seal via goja AssertFunction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test(kernel-plugin): add plugin lifecycle and RPC integration tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(kernel-plugin): go mod tidy after qjs removal

Remove fastschema/qjs from go.mod and go.sum, add go-sourcemap as
indirect (transitive dep of dop251/goja), mark go-sourcemap indirect.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>

* fix(kernel-plugin): fix invokeHook early-return on subscribe failure, safe await extraction, and goja value cross-goroutine access in socket methods

* refactor(kernel-plugin): replace goValueToJsValue with goValueToJsValueSafely in sandbox functions and tests

* feat(plugin): enhance plugin management and error handling

- Added GetLoadedPlugin method to retrieve loaded plugin info by name.
- Introduced file path for kernel.js in KernelPlugin struct.
- Updated Eval method to use the new file path for script execution.
- Improved error handling in injectGlobalContext and other injection functions using recover.
- Refactored task execution in Worker to use clearer types for task executors and callbacks.
- Enhanced storage methods to ensure proper error handling and logging.
- Updated loggerWrapper to handle errors more gracefully.
- Ensured consistent use of error handling patterns across various plugin methods.

* refactor(worker): enhance task execution with goja runtime integration

- Updated TaskExecutor and TaskCallback signatures to accept *goja.Runtime.
- Modified Worker to start processing tasks with an event loop.
- Improved error handling in task execution to catch panics from both executor and callback.
- Renamed Close method to Stop for clarity on worker shutdown behavior.

* refactor(kernel-plugin): streamline worker implementation and update context handling in plugin methods

* refactor(kernel-plugin): update event handler to use byte slices and improve event dispatching

* refactor(worker): simplify RunSync method by removing unnecessary select statement

* refactor(kernel-plugin): enhance plugin lifecycle management and improve RPC method binding

* refactor(kernel-plugin): improve error logging in data methods for better debugging

* refactor(kernel-plugin): add version field to plugin data structures and update related methods

* refactor(kernel-plugin): replace JsonRpcInboundRequest with JsonRpcRequest and update related methods

* refactor(kernel-plugin): enhance plugin lifecycle hooks and improve RPC method invocation

* feat(kernel-plugin): improve error handling and response processing in fetch and socket methods

* refactor(kernel-plugin): update invokeFunction to handle promise results correctly

* refactor(kernel-plugin): streamline event handling and remove unused JSON marshaling functions

* refactor(kernel-plugin): improve error handling in start method and add event publishing for lifecycle states

* refactor(kernel-plugin): move logging to separate function and execute in goroutines for improved performance

* feat(kernel-plugin): add unique ID generation for start and stop events

* refactor(kernel-plugin): enhance error handling and concurrency in storage operations

Co-authored-by: Copilot <copilot@github.com>

* fix(kernel-plugin): remove unexpected resolve in fetch function

* feat(kernel-plugin): enhance JSON-RPC request handling with optional parameters and improved error reporting

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): rename await to async in dispatchEvent function for clarity

Co-authored-by: Copilot <copilot@github.com>

* fix(kernel-plugin): improve error handling in RPC method execution and hook invocation

* feat(kernel-plugin): implement custom JSON marshaling for JsonRpcRequest to handle optional parameters

* feat(kernel-plugin): add error codes for plugin state and improve error handling in RPC responses

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): clean up context usage and improve error logging for RPC methods

* feat(kernel-plugin): add buffer method to object for asynchronous data processing

* fix(kernel-plugin): Fixed the problem of blocking when plug-in life cycle function is not bound

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): implement public and private web server handlers and enhance request handling

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): enhance server request handling and introduce server handler invocation

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): enhance response handling and add jsValueToBytes conversion utility

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): comment out public web server route in router

* feat(kernel-plugin): add WebSocket and EventSource proxy handlers and update sandbox integration

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): implement HTTP proxy handler with response header forwarding

* refactor(kernel-plugin): refactor siyuan.client.* methods

* feat(kernel-plugin): add support for EventSource with SSE handling and response header forwarding

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): add SSE support using r3labs/sse library for EventSource handling

* feat(kernel-plugin): enhance SSE client with onclose event handling

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): implement SSE event handling and error management in server-sent events

* feat(kernel-plugin): refactor SSE handling and introduce request handler utility functions

Co-authored-by: Copilot <copilot@github.com>

* feat(kernel-plugin): enhance WebSocket message handling with buffered amount tracking and cleanup

Co-authored-by: Copilot <copilot@github.com>

* perf(kernel-plugin): improve WebSocket message handling with channel-based message sending and error management

Co-Authored-By: Copilot <copilot@github.com>

* refactor(kernel-plugin): remove invokeServerHandler

Co-Authored-By: Copilot <copilot@github.com>

* feat(kernel-plugin): implement WebSocket message handling with improved structure and error management

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): Refactor code structure for improved readability and maintainability

* refactor(kernel-plugin): streamline HTTP client creation and enhance event source state management

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): enhance WebSocket and SSE handling with improved closure management and error handling

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): optimize WebSocket handling by restructuring state management and improving closure logic

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): simplify header setting and improve null checks in WebSocket and SSE handling

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): update WebSocket request handling to improve error management and consistency

* refactor(kernel-plugin): improve WebSocket error handling by adding close message management

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): Refactor WebSocket handling to use gws library

- Replaced gorilla/websocket with lxzan/gws for WebSocket connections.
- Introduced gwsEventHandler to manage WebSocket events with customizable callbacks.
- Updated KernelPlugin to track gws connections and handle message broadcasting.
- Refactored RPC WebSocket handling to accommodate new gws structure.
- Simplified message sending and connection management logic.
- Added utility function to check for undefined JavaScript values.

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): integrate gws library for improved WebSocket handling and error management

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): remove unnecessary error handling in WebSocket request processing

* refactor(kernel-plugin): enhance error logging in WebSocket message handling

Co-Authored-By: Copilot <copilot@github.com>

* refactor(kernel-plugin): replace gwsEventHandler with WsEventHandler and improve WebSocket management

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): integrate chanx for improved event handling in SSE

* refactor(kernel-plugin): update handleHttpRequest signature to include gin.Context for improved request handling

Co-authored-by: Copilot <copilot@github.com>

* refactor(kernel-plugin): optimize WebSocket connection management with context and sync mechanisms

* refactor(kernel-plugin): improve error handling and context management in WebSocket and HTTP request handling

* refactor(kernel-plugin): enhance WebSocket management with context handling and improved error reporting

* fix(kernel-plugin): streamline header export and enhance error handling in injectClient function

Co-authored-by: Copilot <copilot@github.com>

* perf(kernel-plugin): enhance httpProxy and esProxy functions with improved error handling and content management

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Copilot <copilot@github.com>
2026-05-09 11:26:37 +08:00
Daniel
8078e860bd 💥 https://github.com/siyuan-note/siyuan/issues/15727
Signed-off-by: Daniel <845765@qq.com>
2026-05-09 09:57:41 +08:00
Jeffrey Chen
78994cd8f5 ♻️ Reorder declarations in storage modules (#17483) 2026-05-08 23:45:11 +08:00
Daniel
9fb762c59a ⬆️ Upgrade lute
Signed-off-by: Daniel <845765@qq.com>
2026-05-08 22:53:38 +08:00
Daniel
91357d452e 🎨 https://github.com/siyuan-note/siyuan/pull/17482
Signed-off-by: Daniel <845765@qq.com>
2026-05-08 22:52:09 +08:00
Jeffrey Chen
3aaa96a0fe Improve LocalStorage related APIs (#17482)
* 🎨 Improve LocalStorage related APIs

* 🎨 Improve LocalStorage related APIs

---------

Co-authored-by: D <845765@qq.com>
2026-05-08 22:39:24 +08:00
Daniel
a6e4b12ea3 🎨 https://github.com/siyuan-note/siyuan/issues/17410
Signed-off-by: Daniel <845765@qq.com>
2026-05-08 22:23:05 +08:00
Daniel
fecd1bfe17 🎨 Add heading and list subtype filters to search https://github.com/siyuan-note/siyuan/pull/17597
Signed-off-by: Daniel <845765@qq.com>
2026-05-08 11:35:27 +08:00
Daniel
5b7dae2917 🔒 https://github.com/siyuan-note/siyuan/security/advisories/GHSA-fmh9-gpqh-g53g
Signed-off-by: Daniel <845765@qq.com>
2026-05-08 11:07:39 +08:00
ashur
8c181b998b Add heading and list subtype filters to search (#17597)
*  Add heading and list subtype filters to search

* 🎨 Search type dialog width extended

* 🎨 Improve search subtype filter clarity

- Rename isOpen to isHidden in the subtype toggle handler since classList.toggle returns whether the class is now present (i.e. hidden)
- Parenthesize the no-match 1=0 fallback in buildTypeFilter to honor its documented "outer parens" contract

* 🎨 Translate search subtype filter strings for all locales

* 🎨 Sync parent and subtype toggles in search filter dialog

* 🎨 Remove trailing period from searchSubTypeListTip

* 🎨 Use getDefaultSubType() for search subTypes default

* 🎨 Fix Ordered typo in searchSubTypeListTip
2026-05-08 11:07:12 +08:00
Daniel
29566a4479 🔒 https://github.com/siyuan-note/siyuan/security/advisories/GHSA-6r88-8v7q-q4p2
Signed-off-by: Daniel <845765@qq.com>
2026-05-08 10:57:22 +08:00
Daniel
c44fa43a9f 🌐 Add Thai language support https://github.com/siyuan-note/siyuan/issues/17639
Signed-off-by: Daniel <845765@qq.com>
2026-05-07 20:27:12 +08:00
Daniel
89991eb70b 🌐 Added Dutch language support https://github.com/siyuan-note/siyuan/issues/17638
Signed-off-by: Daniel <845765@qq.com>
2026-05-07 20:27:12 +08:00
Daniel
e8e0247e28 🌐 Add Bahasa Indonesian language support https://github.com/siyuan-note/siyuan/issues/17637
Signed-off-by: Daniel <845765@qq.com>
2026-05-07 20:27:11 +08:00
Daniel
e2c8bf5476 🌐 Add Hindi language support https://github.com/siyuan-note/siyuan/issues/17636
Signed-off-by: Daniel <845765@qq.com>
2026-05-07 13:25:27 +08:00
Daniel
1b34bcf4fa 💥 https://github.com/siyuan-note/siyuan/issues/15727
Signed-off-by: Daniel <845765@qq.com>
2026-05-07 12:05:47 +08:00
Daniel
ff5db3b09e 🎨 Supports switching between phone and desktop interfaces on mobile https://github.com/siyuan-note/siyuan/issues/13952
Signed-off-by: Daniel <845765@qq.com>
2026-05-07 00:09:40 +08:00
Daniel
7522d9040b 🎨 Improve export of heading levels in embedded blocks https://github.com/siyuan-note/siyuan/issues/17629 https://github.com/siyuan-note/siyuan/issues/17630
Signed-off-by: Daniel <845765@qq.com>
2026-05-06 16:33:56 +08:00
Daniel
ab46094672 🎨 Improve export of heading levels in embedded blocks https://github.com/siyuan-note/siyuan/issues/17629
Signed-off-by: Daniel <845765@qq.com>
2026-05-06 16:18:40 +08:00
Daniel
9d4c65c96b 🧑‍💻 Remove the notebook parameter from the API /api/history/rollbackDocHistory endpoint https://github.com/siyuan-note/siyuan/issues/17411
Signed-off-by: Daniel <845765@qq.com>
2026-05-06 14:36:55 +08:00
Daniel
2de2590e8c 🎨 https://github.com/siyuan-note/siyuan/issues/17614
Signed-off-by: Daniel <845765@qq.com>
2026-05-02 09:08:49 +08:00
Daniel
e406cb38db 🐛 Tabs automatically close after importing Markdown https://github.com/siyuan-note/siyuan/issues/17615
Signed-off-by: Daniel <845765@qq.com>
2026-05-01 13:31:44 +08:00
Daniel
73450fbf87 ⬆️ Upgrade lute
Signed-off-by: Daniel <845765@qq.com>
2026-04-30 12:28:36 +08:00
Daniel
d82036d6e9 🎨 https://github.com/siyuan-note/siyuan/issues/10749#issuecomment-4348873683
Signed-off-by: Daniel <845765@qq.com>
2026-04-30 10:07:05 +08:00
Daniel
addaa3bdac 🎨 Automatically adjust editor font weight based on font file https://github.com/siyuan-note/siyuan/issues/10313
Signed-off-by: Daniel <845765@qq.com>
2026-04-30 01:47:56 +08:00
Daniel
972b7088d9 🎨 Improve language conf files parsing
Signed-off-by: Daniel <845765@qq.com>
2026-04-30 00:11:21 +08:00
Daniel
a424b479bd 🎨 add WAL persistence for database index queue to improve data indexing stability https://github.com/siyuan-note/siyuan/issues/17610
Signed-off-by: Daniel <845765@qq.com>
2026-04-29 21:45:56 +08:00
Daniel
52b8a7cfed 🎨 add WAL persistence for database index queue to improve data indexing stability https://github.com/siyuan-note/siyuan/issues/17610
Signed-off-by: Daniel <845765@qq.com>
2026-04-29 21:45:55 +08:00
Daniel
9607428749 🎨 Show displayName for non-built-in icons in settings dropdown 2026-04-29 12:24:54 +08:00
Daniel
fbab86b421 🎨 Show default icon label (Default) for built-in icon in settings
Signed-off-by: Daniel <845765@qq.com>
2026-04-29 12:06:32 +08:00