v0.9.1
0.9.1
Stable promotion of beta v0.9.1-beta.8.
Aggregated changes since previous stable:
0.9.1-beta.0
(release body unavailable for v0.9.1-beta.0)
0.9.1-beta.1
(release body unavailable for v0.9.1-beta.1)
0.9.1-beta.2
Patch Changes
- Make the local telemetry file sink flush spans on span end (SimpleSpanProcessor) so
ok diagnose bundlereliably captures spans — previously a batch-timer vs shutdown-timeout race could drop them under load. Also make project template enumeration order deterministic across filesystems by sorting the directory walk, so which templates fall inside the scan cap is stable run to run.- @inkeep/open-knowledge-core@0.9.1-beta.0
0.9.1-beta.3
Patch Changes
- Drop the redundant hover tooltip from the editor toolbar's labeled actions. The "Open with AI" and "Share" buttons already show their name as visible text, so the tooltip that repeated that same text on hover was noise. Icon-only toolbar controls (the sync-status cloud, settings, help) keep their tooltips, since the tooltip is the only place their name appears.
0.9.1-beta.4
Patch Changes
- Agent-write content-divergence warnings now carry the converged document inline so an agent recovers without a second read.
structuredContent.contentDivergencegainscurrentState({kind:"inline", content}, or{kind:"truncated", byteLength, hint}over a 50 KB soft cap) plus a coarsedivergenceType. The Site A gate is extracted to a shared predicate and extended toversion({ action: "rollback" }). Divergence is now rate-measurable via theok.agent_write.gate_fired_total/ok.agent_write.content_divergence_totalcounters (bounded{handler}label). Adds a production-Electronagent-patch-divergence-probesmoke test as permanent regression coverage.
0.9.1-beta.5
Patch Changes
- Fix the sync popover's "Set identity" button forcing a re-authentication. The auth modal now probes sign-in status on open: an already-signed-in user is taken straight to the git Name/Email fields (pre-filled from their GitHub profile) instead of through the GitHub device flow. It only falls back to sign-in when the user is genuinely not authenticated, and then still lands on the identity fields so the git identity actually gets set.
0.9.1-beta.6
Patch Changes
-
feat(desktop): dev sessions auto-reclaim a stale foreign server (dev-only)
When a desktop dev session (
electron-vite dev/bun run dev—!app.isPackaged)
opens a project whose contentDir already has a live Open Knowledge server it did
not spawn — a leftover from a prior packaged-app run, aok startCLI, or another
instance — it previously attached to that server. Devs then ran their editor
against a stale server + core build instead of their working tree, with no signal
anything was wrong.The dev attach path now terminates that foreign server and spawns a fresh
own-build server in its place (reusing the same SIGTERM → grace → SIGKILL ladder
as the user-initiated restart, then falling through the existingrunClean+ spawn
path). It is gated strictly to dev: packaged builds still attach to a live server,
which is the intended shared-server behavior. A server this session spawned itself
is never reclaimed (pid guard), and if termination fails (e.g. EPERM, cross-user
server) the session falls back to attaching rather than leaving the project
window-less.Because no user action initiated the teardown, the freshly-spawned window surfaces
an act-then-inform notice (newok:server-reclaimedbridge event) naming the
side effect: connected agents (Claude Code, Codex, Cursor) just lost their Open
Knowledge MCP connection and should restart the agent — or toggle its Open
Knowledge MCP server off and on — to reconnect.No effect on published/packaged behavior.
0.9.1-beta.7
Patch Changes
-
fix(open-knowledge): render self-closing
<img>/<video>/<audio>tags of any length (PRD-6910)The markdown autolink/HTML guard recognized self-closing canonical media tags
(<img />,<video />,<audio />) only when the entire tag fit inside a fixed
256-character lookahead window. A valid tag with a data-URIsrcor a long
descriptivealtexceeded that window and silently fell through to literal text
instead of rendering as a media node — the symptom reported in PRD-6910.The guard now recognizes the self-closing
/>form via a precomputed>-offset
index (bounded by the tag's own first>and the next blank line) rather than a
fixed window, so canonical media tags render regardless of total length. Bare
HTML-void forms (<img src="x">, no slash) still parse as text, unchanged. The
check is O(log n) per tag, reintroducing none of the O(n²)/ReDoS risk the
original window guarded against.
0.9.1-beta.8
Patch Changes
-
fix(mcp): exit
ok mcpwhen its launching host dies so stale agent-presence icons clearThe
ok mcpglobal stdio server opens a per-project keepalive WebSocket on the first tool call. That socket plus its reconnect timer keep the Node event loop alive, which silently disabled the only host-disconnect exit path the server had: the passive "stdin EOF then the event loop drains then the process exits" behavior never fires once a keepalive is open, and there was no active handler watching for the host going away.As a result, when the launching host process ended (for example a Claude Desktop per-turn agent harness finishing its run), the
ok mcpprocess did not exit. It was reparented to launchd, kept its keepalive WebSocket open, and the server's presence heartbeat kept refreshing the entry past both the client 5s TTL and the server 20s eviction, so the agent's presence icon never cleared. Each new run spawned a freshok mcpprocess with its own id, so ghost icons accumulated one per run.ok mcpnow exits promptly when its host is gone via two signals: an activestdinend handler (clean disconnect) and a parent-death watch that pollsprocess.ppidand shuts down when the process is reparented (covers the case where a wrapper holds stdin open so no EOF arrives). Once the process exits, the existing keepalive-close to grace-timer to presence-clear path removes the entry. Live, idle agents are unaffected because their host process is still alive.