Skip to content

v0.69.0

Choose a tag to compare

@inkeep-internal-ci inkeep-internal-ci released this 09 Sep 13:46

Minor Changes

  • The success responses of /api/agent-write, /api/agent-write-md, /api/agent-patch, /api/frontmatter-patch, /api/rollback and /api/lint/fix remove the deprecated singular warning field. Write and rollback advisories use the plural warnings array; every advisory the singular carried was already present in warnings on the same response, so a caller that reads the plural sees no change.

    For /api/lint/fix, a durable fix whose post-write re-lint throws or loses a lint source that succeeded before the fix returns diagnosticsArePreFix: true and reLintFailure: { reason, message }, where reason is the closed discriminant re-lint-threw or source-went-blind and message is the prose explanation. The reported diagnostics and their errorCount/warningCount are the pre-fix set and may overstate what remains. fixedCount is 0 because the post-fix count could not be determined, not because nothing was fixed. Treat the fix as applied and re-run lint to confirm. Configuration and plugin warnings remain in warnings; the endpoint no longer emits a Re-lint after fix failed: entry.

    The MCP lint text renderer is the reader this change migrates. The editor's Problems panel calls the same endpoint for Fix all, discards the response body and re-audits the project when the sweep settles, so it never read the singular field and does not read the new flag.

    The MCP lint renderer recognizes the boolean, the typed reLintFailure, and legacy prefixed entries in either warnings or singular warning as pre-fix signals. It emits diagnosticsArePreFix: true for any of these signals and puts a trimmed, non-empty explanation in reLintFailure.message with the discriminant in reLintFailure.reason, preferring the typed server failure over legacy entries; a legacy entry normalizes to reason: 're-lint-threw'. The flag can be present without reLintFailure when no non-empty message is available. Both the structured warnings array and the human warning block exclude legacy prefixed entries and retain ordinary warnings.

    The reverse pairing is the one that degrades, and it is reachable because ok mcp attaches to whatever server is already running rather than pinning one. An ok mcp published before this release, pointed at a server from this release or later, reads only the removed singular field, so it loses the pre-fix header and reports the pre-fix diagnostics as remaining work. Upgrade both together.

    Restart the server and MCP client after upgrading to load both updated components. ok stop declines while an editor window or agent is still connected, so close them first or run ok stop --force, then ok start. Run it from anywhere inside the project; ok stop anchors to the enclosing project root. From outside, name the target with ok stop <path>, or ok stop all to stop every running server. If the desktop app is hosting the server, quit and reopen it.

Patch Changes

  • Stop the crash prompt firing for deaths that were not crashes.

    Three bounds on the crash reporter:

    • A minidump written inside the 30-second teardown that follows a recorded update handoff no longer arms a report invitation. The process was already committed to quitting so the installer could replace it, and a fault on the way out is not something the user can act on. A dump past that window still prompts, because an install can be in flight for up to 30 minutes and a fault inside it is the app failing on its own. Only a dump this app can positively claim is shadowed; one it cannot parse still prompts, as it does elsewhere in the crash reporter.
    • A death the app can date to more than a week ago no longer prompts. The death is dated by the latest evidence the app was alive — the newest crash dump or the previous session's last heartbeat, whichever is later, ignoring a heartbeat that postdates the launch reading it — so an old dump left on disk can neither make a recent death look stale nor become the subject of the report. Before this, a sentinel prompted the same at twelve seconds and twelve days old, and an un-acknowledged dump re-armed the same prompt on every launch indefinitely. A session that left no heartbeat and no dump cannot be dated, so it is exempt and still prompts: sentinels written before 0.35 carry no heartbeat, and their boot time answers when the session started rather than when it died.
    • An armed invitation nobody answered within 24 hours is dropped undelivered instead of waiting for the lifetime of the process. The bound is per process, not per crash: a relaunch offers the same crash again, because a new launch is a new chance to ask and a session that never showed the prompt should not silently lose it.

    The report note now carries when the crash happened and how long ago whenever the app can date the death itself — never by borrowing a crash dump the same report says was not the cause — so a stale report is legible without decoding the boot id.

    The relative-time wording it uses is now shared with ok ps, which changes that command's STARTED column in two visible ways: an age under a minute reads 30s ago rather than 30s, so no cell reads as a bare duration, and a start time that postdates now reads 0s ago rather than a negative duration. A stamp the command cannot parse still renders as the table's .

Downloads

Platform Architecture Download
macOS Apple Silicon OpenKnowledge-arm64.dmg
Windows x64 OpenKnowledge-Setup-x64.exe
Windows arm64 OpenKnowledge-Setup-arm64.exe
Debian / Ubuntu x64 OpenKnowledge-amd64.deb
Debian / Ubuntu arm64 OpenKnowledge-arm64.deb
Fedora / RHEL x64 OpenKnowledge-x86_64.rpm
Fedora / RHEL arm64 OpenKnowledge-aarch64.rpm