Skip to content

v0.42.0

Choose a tag to compare

@inkeep-internal-ci inkeep-internal-ci released this 29 Jul 13:21

Minor Changes

  • Report a bug now keeps a history of your reports so a send that fails (or a dialog you closed) no longer means starting over. Each report you generate is saved with its last-known state, and you can find it again from a new "Bug report history" command in the palette or from a "Previous reports" section in the Report a bug dialog. From the list you can retry sending an existing report without regenerating it, reveal its file in Finder, or delete it. Retry re-sends the exact bundle you already made, so a report that failed the first time can reach the team on the next try, and the history survives closing the dialog and restarting the app.

    Reports are also cleaned up automatically. Once a report is confirmed sent, its (potentially large) zip is reclaimed from disk while a lightweight record of the send is kept, and unsent reports are bounded so old bundles do not pile up. The most recent report you have not sent is never removed. Everything stays on your Mac, redaction is unchanged, and reports are only ever sent when you choose to send them.

  • Frontmatter schemas now accept draft-06, 2019-09, and 2020-12 in addition to draft-07.

    Any of four dialects, validated against its own rules. A schema file declaring draft-06, draft-07, 2019-09, or 2020-12 is compiled against that dialect, so $defs, prefixItems, dependentRequired, and the rest behave as their spec says rather than being ignored. Each URI is accepted in http or https form, with or without the trailing #. Previously anything but draft-07 was skipped entirely with a configuration problem telling you to downgrade — a 2020-12 schema, which has been the current dialect since 2020, got you no validation at all.

    An absent $schema still means draft-07, and that is still what gets scaffolded. Creating a schema from Settings ▸ Plugins ▸ Frontmatter schemas writes the draft-07 skeleton as before: it is the most broadly supported dialect among external tools, and the friendly subset the Fields editor writes is spelled identically in all four. Nothing about an existing project changes.

    format keeps asserting on every dialect. From 2019-09 on, the spec demotes format to an annotation validators may ignore. OK asserts it everywhere instead, so raising a schema's $schema line never silently switches off format checks it already had. This is deliberately stricter than the spec.

    Dialects older than draft-06 are still skipped, now with a configuration problem that names what is supported instead of demanding draft-07.

    Fixed: editing a schema that declares $id silently stopped it validating. The validator instance outlives any one schema and registers each compiled schema under its $id, so recompiling an edited file whose $id was unchanged was refused — and because compile failures are swallowed by design, the governed documents just quietly stopped reporting violations until the process restarted. The stale registration is now dropped before recompiling. This bug predates dialect support and affected draft-07 schemas equally, but $id alongside $defs is idiomatic in 2019-09 and 2020-12, so it would have been far easier to hit.

    The no-code Fields editor and the property panel needed no changes: both were already dialect-agnostic, reading only the friendly subset (type, enum, items.enum, pattern, format, description, required) and preserving every other keyword verbatim. A 2020-12 schema opens in Fields and round-trips with its $defs, $id, unevaluatedProperties, and prefixItems intact — prefixItems is not modeled, so it appears in the existing "advanced rules" note alongside allOf.

Patch Changes

  • Fix microphone access for CLI tools run in the OpenKnowledge terminal on macOS.

    Any tool that asked for the microphone from a shell launched inside the app
    failed silently. No permission dialog appeared, OpenKnowledge never showed up
    under System Settings → Privacy & Security → Microphone, and from the tool's
    side recording simply captured silence with no error — so there was no way to
    grant access and no signal that anything was wrong.

    macOS attributes a permission request to the responsible process — the
    top-level app that started the chain — not to the process that actually asked.
    A tool running in the terminal therefore requests the microphone as
    OpenKnowledge. Under Hardened Runtime the app must carry
    com.apple.security.device.audio-input to be eligible to prompt at all; the
    app was missing it, so macOS denied every request without ever showing a
    dialog. The entitlement is now declared on the main app bundle, matching how
    VS Code, Zed, Ghostty, and Cursor ship the same capability.

    The consent dialog's text is now declared by the app as well. It previously
    fell through to Electron's stock string ("This app needs access to the
    microphone"), which described the wrong thing — the app records no audio of
    its own. It now reads "A program running in OpenKnowledge's terminal wants to
    use the microphone," so the permission being granted is accurate at the moment
    it is granted. Granting it covers any tool run in the terminal; macOS shows the
    recording indicator whenever the microphone is live, and access stays
    revocable in System Settings.

    The entitlement is deliberately scoped to the main app bundle and not to
    helper processes, and the camera equivalent is not included.

  • Harden tooltip coverage by exercising the real tooltip primitives in component tests and preventing mocks that hide provider or event-composition regressions.

  • Add Back and Forward navigation to Open Knowledge Desktop's expanded
    sidebar, collapsed title bar, View menu, command palette, and platform
    shortcuts. Opening files, folders, assets, or skill files now adds an entry to
    the navigation history, while history traversal reuses the active tab.

    Move file-tree actions beside the project root, improve shortcut hints and
    navigation grouping, and fix Cmd/Ctrl+Shift+N so New folder no longer opens
    the New file dialog.

  • Stop the slash menu from silently replacing an adjacent image or component on insert.

    Picking a slash-menu item used to delete the typed /trigger in one editor transaction and run the item's insert in a second. Under load, a transaction fired during the delete (for example the collaboration layer reacting to it) could move the selection onto a neighboring selectable block, and the insert would then overwrite that block instead of inserting at the caret: the user typed /image, pressed Enter, and a previous image vanished with no error and no useful undo trail. The trigger delete and the item insert now land as one transaction, so nothing can divert the insert onto existing content. The other insertion menus (# tags, [[ wiki links, @ mentions in the Ask AI composer) already inserted atomically and are now guarded by a lint rule and regression tests so none of them can regress to the split form.