OpenKnowledge
Changelog

v0.69.0

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

  • The calendar's month grid now receives its intended layout classes. react-day-picker v9 renamed the table slot to month_grid, so the w-full border-collapse this component had been passing under the old key was silently dropped for the whole v9 line. The classes now reach the grid, and they are merged with the library's own defaults rather than replacing them, matching the other slots in the same object.

    The class list on the grid gains exactly w-full border-collapse. rdp-month_grid is not added by this change: v9 merges classNames over getDefaultClassNames() per key, so a slot keeps its default for any key the object does not override, and table was never one of its keys. Both added utilities are no-ops in this layout, so nothing should move visually. Tailwind's preflight already sets border-collapse: collapse on every table, and the grid is a flex item of the flex w-full flex-col month slot, so it already stretched to full width. The class list on the element still changes, which is why this carries a note rather than passing silently.

  • The published TypeScript declarations (dist/index.d.mts) are now bundled from the declarations that @inkeep/open-knowledge-core and @inkeep/open-knowledge-server emit for themselves, rather than re-emitted from those packages' sources inside the CLI's own build.

    Nothing about the declared API changes: the file exports the same 107 symbols, keeps the same any and unknown counts, and stays self-contained with no imports from sibling @inkeep/* packages. The only consumer-visible difference is three additional import statements for Node built-ins (node:fs, node:fs/promises, node:stream) that no exported type references. The published tarball still excludes dist/**/*.map.

    The published file is now type-checked as a standalone declaration file on every run of the repo's check lane, and the same check compares its exported-symbol set, its any/unknown counts and its freedom from @inkeep/* specifiers against the captured 5.9.3 baseline. A dropped export, a sibling type that degraded to any, or an unresolvable sibling import fails the build instead of shipping.

View v0.69.0 on GitHub