OpenKnowledge
Changelog

v0.58.6

Released Aug 19, 2026.

Patch Changes

  • An ACP agent whose credentials expire mid-conversation now returns the transcript to the sign-in surface with the reauthentication buttons the initial connection advertised, instead of parking the failed turn behind the opaque "Your message didn't reach X" card that had no path back. The prompt-catch on the server treated every non-cancel rejection as a generic prompt failure, so an auth-required rejection coming back from session/prompt never reached the same sign-in machinery session/new's auth-required branch already had — mirroring that branch closes the gap, and the auth-error classifier now recognizes both the ACP standard -32000 shape and the Claude Agent SDK's -32603 + data.errorKind === "authentication_failed" shape it emits for mid-turn OAuth expiry. The still-live agent process stays alive across the sign-in, so authenticate runs on the same connection the initial handshake set up.
  • A failed ACP prompt now offers an "Edit and resend" action that pulls the message text back into the composer, so the reader doesn't have to retype it to try again after changing a setting (a smaller context window, a different model, an added attachment). The card previously offered no action at all — the reasoning was that "sending it again IS the retry," but the composer had already cleared and the message text was only visible in the transcript row above the notice. Only the most-recent prompt failure carries the button (mirroring the Retry button's one-card discipline), and the transcript keeps the failed attempt as history. Text-only for now — attachments still need to be re-picked.
  • Clean up OpenKnowledge Desktop state and updater caches during uninstall on macOS, Windows, and Linux.
  • Make ok open and ok <file> use platform-native launchers on macOS, Windows, and Linux, and report launcher failures instead of exiting successfully.
  • OpenKnowledge now presents accurate platform guidance throughout the app and docs. Download links route through the platform picker, terminal copy only appears where the built-in terminal is available, keyboard hints work across operating systems, and new projects ignore common macOS, Windows, and Linux metadata files.
  • Your home directory is no longer treated as a project by any entry point. Setting one up there ran git init in your home, wrote config.yml into ~/.ok/ (OpenKnowledge's own user-global directory), and landed project MCP config and skills on your editors' user-global paths, since at home every editor's project config path IS its global config. The refusal now lives in the two scaffold writers every path goes through, ensureProjectGit and initContent, so it covers ok init, ok share publish --project-dir, the desktop's Open Folder confirm, the desktop ok-init IPC, and POST /api/local-op/ok-init. Picking your home folder in the desktop is refused before the setup dialog opens, which also covers reopening a home "project" left behind by the old bug. And ok deinit refuses to run in your home directory, where it used to queue your entire user-global store for removal: global.yml, skills/, auth.yml, secrets.yml.
  • Publish an accurate npm README and searchable package metadata, with release-time checks for the README and licensing files.
  • The right-side rail no longer paints an empty phantom column between the editor and the agents chat panel. Both the terminal-right column and the agents column are permanent members of the resizable group (a workaround for a react-resizable-panels layout-cache bug), so a proportional-layout tick could hand a hidden column non-zero flexGrow in the paint window between its defaultSize={0} and the next reclaimHiddenRailColumn clamp — visible as a large empty gap that made the chat panel look like it had drifted off to the side. Two changes close it. The hidden panel now sets maxSize="0px" alongside its defaultSize={0} — RRP's own layout validator applies Math.min(maxSize, size) last (after the collapsible halfway snap), so the outer data-panel flex item is hard-clamped to zero share every redistribution pass and never wins the transient share the reclaim microtask was chasing. The preceding drag handle gets display: none so its 1px separator bar and tab-stop drop out of the flow while hidden. The panel stays registered with the group (its width state stays coherent for the next toggle-visible) and re-inflates from persisted width when it comes back.

View v0.58.6 on GitHub