OpenKnowledge

v0.37.2

Released Jul 22, 2026. Part of the OpenKnowledge changelog.

Patch Changes

  • Comment annotations (%%…%% and <!-- … -->) now stay with copied content inside OpenKnowledge and never appear in content pasted into other apps. Copying or cutting in the WYSIWYG editor scrubs comments from every public clipboard flavor (plain text, rich HTML in all serializer tiers, table cells) and carries them on a private OpenKnowledge clipboard flavor, so pasting back into OpenKnowledge restores the annotation instead of silently dropping it or leaking it as visible text.

  • Allow overriding the per-step server-shutdown timeout via OK_DESTROY_STEP_TIMEOUT_MS

    Each server teardown step is capped (default 5s) so a stuck step can't hang exit. That cap is now overridable with the OK_DESTROY_STEP_TIMEOUT_MS environment variable (milliseconds), which gives slower or heavily loaded environments headroom without changing the default. Normal usage is unaffected.

  • Feat: share links now work with GitHub Enterprise Server remotes (PRD-7351). The construct side threads the origin host into the share URL, and the receive pipeline carries the host as part of the repo identity end to end — so a GHES owner/repo share never resolves to a same-named github.com clone. Because a decoded deep link is untrusted input, a share pointing at a non-github.com host is gated: it proceeds silently only for a host the recipient is already authenticated to, otherwise the app prompts to open the link in a browser instead. The web splash renders enterprise shares with the host shown prominently.

  • Consolidate the server's inline link recognizers (backlink index, rename rewriting, link suggestions, referenced-asset scanning) onto one shared grammar, so a link that counts for backlinks can no longer be silently missed by rename rewriting or the asset sidebar. The backlink/rename grammar is the canonical one; the asset scanner picks up small correctness fixes from the alignment: links with parenthesized titles ([doc](file.pdf (title))) and titles containing the other quote character ([doc](file.pdf "it's here")) now count as asset references, malformed mismatched-quote titles no longer do, and wiki-link targets are trimmed before resolution.

  • Mermaid WYSIWYG polish. The Edit Mermaid source dialog's preview is now a full WYSIWYG canvas — click popovers, double-click label editing, and connect gestures rewrite the dialog draft live, with Save persisting and Cancel discarding as usual. Diagram popovers behave like part of the diagram: they anchor at the exact box you clicked (participants render two), flip below the node instead of clipping at the block edge, follow the diagram when it pans or zooms, and close when you interact anywhere else. Inline label editing now feels like a plain textbox — the canvas holds re-renders while you type, so the caret never jumps and Escape reliably reverts.

  • Add WebSocket-lifecycle and MCP-tool observability to the server (all opt-in via OpenTelemetry, zero overhead when disabled):

    • New observable gauges: ok.ws.connections.active (live collab connections, labeled kind ∈ {websocket, direct}), ok.sessions.active, and ok.sessions.limit — a session-cap stall now shows up as active pinned at the limit instead of undiagnosable 503s.
    • The traceparent the browser already appends to the collab WebSocket URL is now extracted server-side, so the sync.handshake span parents to the user's browser trace instead of starting a disconnected root.
    • Every MCP tool invocation now gets a mcp.tool.<name> span plus an ok.mcp.tool.duration histogram and ok.mcp.tool.errors counter (bounded tool-name labels), instrumented once at the dispatch spine — including the HTTP MCP endpoint, which previously had no per-tool instrumentation at all.

View v0.37.2 on GitHub