v0.69.0
Minor Changes
The success responses of
/api/agent-write,/api/agent-write-md,/api/agent-patch,/api/frontmatter-patch,/api/rollbackand/api/lint/fixremove the deprecated singularwarningfield. Write and rollback advisories use the pluralwarningsarray; every advisory the singular carried was already present inwarningson 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 returnsdiagnosticsArePreFix: trueandreLintFailure: { reason, message }, wherereasonis the closed discriminantre-lint-threworsource-went-blindandmessageis the prose explanation. The reporteddiagnosticsand theirerrorCount/warningCountare the pre-fix set and may overstate what remains.fixedCountis 0 because the post-fix count could not be determined, not because nothing was fixed. Treat the fix as applied and re-runlintto confirm. Configuration and plugin warnings remain inwarnings; the endpoint no longer emits aRe-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
lintrenderer recognizes the boolean, the typedreLintFailure, and legacy prefixed entries in eitherwarningsor singularwarningas pre-fix signals. It emitsdiagnosticsArePreFix: truefor any of these signals and puts a trimmed, non-empty explanation inreLintFailure.messagewith the discriminant inreLintFailure.reason, preferring the typed server failure over legacy entries; a legacy entry normalizes toreason: 're-lint-threw'. The flag can be present withoutreLintFailurewhen no non-empty message is available. Both the structuredwarningsarray 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 mcpattaches to whatever server is already running rather than pinning one. Anok mcppublished 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 stopdeclines while an editor window or agent is still connected, so close them first or runok stop --force, thenok start. Run it from anywhere inside the project;ok stopanchors to the enclosing project root. From outside, name the target withok stop <path>, orok stop allto 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
tableslot tomonth_grid, so thew-full border-collapsethis 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_gridis not added by this change: v9 mergesclassNamesovergetDefaultClassNames()per key, so a slot keeps its default for any key the object does not override, andtablewas never one of its keys. Both added utilities are no-ops in this layout, so nothing should move visually. Tailwind's preflight already setsborder-collapse: collapseon everytable, and the grid is a flex item of theflex w-full flex-colmonth 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-coreand@inkeep/open-knowledge-serveremit 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
anyandunknowncounts, 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 excludesdist/**/*.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/unknowncounts and its freedom from@inkeep/*specifiers against the captured 5.9.3 baseline. A dropped export, a sibling type that degraded toany, or an unresolvable sibling import fails the build instead of shipping.