Skip to content

v0.9.1

Choose a tag to compare

@inkeep-internal-ci inkeep-internal-ci released this 03 Jun 22:11
90edc45

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 bundle reliably 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.contentDivergence gains currentState ({kind:"inline", content}, or {kind:"truncated", byteLength, hint} over a 50 KB soft cap) plus a coarse divergenceType. The Site A gate is extracted to a shared predicate and extended to version({ action: "rollback" }). Divergence is now rate-measurable via the ok.agent_write.gate_fired_total / ok.agent_write.content_divergence_total counters (bounded {handler} label). Adds a production-Electron agent-patch-divergence-probe smoke 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, a ok start CLI, 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 existing runClean + 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 (new ok:server-reclaimed bridge 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-URI src or a long
    descriptive alt exceeded 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 mcp when its launching host dies so stale agent-presence icons clear

    The ok mcp global 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 mcp process 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 fresh ok mcp process with its own id, so ghost icons accumulated one per run.

    ok mcp now exits promptly when its host is gone via two signals: an active stdin end handler (clean disconnect) and a parent-death watch that polls process.ppid and 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.