diff --git a/.changeset/ask-ai-terminal-cli-brand-icons.md b/.changeset/ask-ai-terminal-cli-brand-icons.md deleted file mode 100644 index 1a9a8535f..000000000 --- a/.changeset/ask-ai-terminal-cli-brand-icons.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-app": patch ---- - -The "Ask AI" composer's agent picker now shows each terminal CLI's own brand icon (Claude, Codex, Cursor, OpenCode) instead of a generic terminal glyph, matching the "Open with AI" menus. OpenCode is terminal-only, so this is the first place its brand mark appears in the picker — both the dropdown row and the primary "Ask OpenCode (CLI)" button. diff --git a/.changeset/claude-terminal-mcp-preapprove.md b/.changeset/claude-terminal-mcp-preapprove.md deleted file mode 100644 index 5972d62f2..000000000 --- a/.changeset/claude-terminal-mcp-preapprove.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-desktop": patch ---- - -Launching Claude Code from the docked terminal ("Open in Claude") no longer shows the one-time "New MCP server found in this project" trust prompt for Open Knowledge's own MCP server. The pre-approval applies only to OK's own server: a foreign or modified `open-knowledge` entry in a shared or cloned project still shows Claude Code's trust prompt, and the check runs per launch so it reflects the project's current state. Codex and Cursor launches are unchanged. diff --git a/.changeset/desktop-instance-label.md b/.changeset/desktop-instance-label.md deleted file mode 100644 index d60b7da19..000000000 --- a/.changeset/desktop-instance-label.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-desktop": patch ---- - -Parallel desktop instances now carry their instance name in the macOS menu-bar app name (`OpenKnowledge (work)`) and editor window titles, so multiple instances running side by side are distinguishable. The label is derived from the launch's per-instance `userData` directory — set by the parallel-instance launcher (`--user-data-dir ~/.ok/instances/`) or dev `OK_INSTANCE` — so it requires no extra flags and is a no-op for the default install. diff --git a/.changeset/desktop-instance-launcher.md b/.changeset/desktop-instance-launcher.md deleted file mode 100644 index 85c154b72..000000000 --- a/.changeset/desktop-instance-launcher.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-desktop": patch ---- - -Add `bun run --filter=@inkeep/open-knowledge-desktop instances` to launch multiple isolated desktop instances in parallel from the packaged app. Each `=` gets its own `--user-data-dir` (own single-instance lock + storage), opens its project, and is launched detached via `open -n` so it survives the launching process — the path that works for agent/automated launches, where dev-mode windows don't. Launches are staggered to avoid a boot race. Script: `packages/desktop/scripts/launch-instances.mjs`. diff --git a/.changeset/graph-external-link-os-browser.md b/.changeset/graph-external-link-os-browser.md deleted file mode 100644 index 8d1c0ef97..000000000 --- a/.changeset/graph-external-link-os-browser.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-app": patch ---- - -External URL nodes in the graph now open in your default OS browser on the desktop app, instead of a new in-app Open Knowledge window. Clicking an external node (or its "Open link" button in the graph side panel) routes through the desktop bridge's `openExternal`, so the link lands in your system browser the same way external links already open elsewhere in the editor. On the web build the behavior is unchanged (a new browser tab). Previously these three graph call sites used a raw `window.open`, which Electron turns into a new BrowserWindow rather than handing off to the OS. diff --git a/.changeset/graph-fullscreen-header-alignment.md b/.changeset/graph-fullscreen-header-alignment.md deleted file mode 100644 index 5d5ee8b46..000000000 --- a/.changeset/graph-fullscreen-header-alignment.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@inkeep/open-knowledge-app": patch ---- - -Fix the fullscreen graph overlay's header on macOS desktop. The "GRAPH" title row now vertically aligns with the window's traffic lights: the overlay is `fixed inset-0` so it starts at the raw window top, 8px above where the normal editor chrome row sits (inside `SidebarInset`'s `m-2`), so its header reproduces that 8px inset and matches the chrome row's height — landing the title on the same midline the traffic lights are tuned to. The header continues to reserve the traffic-light footprint so the title never overlaps the buttons. - -Window dragging works again in fullscreen graph mode, and the Explore/Orphans/Hubs tabs are reliably clickable. The overlay paints over the editor's `-webkit-app-region: drag` chrome; previously those drag regions showed through and silently converted clicks on the mode tabs into window drags. The header is now scoped like the editor header — the header row is the drag region and the controls cluster opts back out with `no-drag` — so the window stays draggable by the header while the tabs and buttons receive clicks. diff --git a/.changeset/json-code-viewer-highlighting.md b/.changeset/json-code-viewer-highlighting.md deleted file mode 100644 index a9d5cacc0..000000000 --- a/.changeset/json-code-viewer-highlighting.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-app": patch ---- - -Fix: JSON files now render with syntax highlighting in the read-only code viewer. The extension-to-language table mapped `jsonc` to the JSON grammar but omitted plain `json`, so opening a `.json` file (for example `config.json`, `package.json`, or `.mcp.json`) resolved to no language and CodeMirror fell back to unhighlighted plaintext. Adding the `json` entry routes these files to the JSON grammar that was already available. The media-kind dispatch is unaffected — `.json` already resolved as a text asset through the sidebar text set, which is checked before the code-language set. diff --git a/.changeset/list-delete-and-numbered-list-behavior.md b/.changeset/list-delete-and-numbered-list-behavior.md deleted file mode 100644 index 7505f04f4..000000000 --- a/.changeset/list-delete-and-numbered-list-behavior.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@inkeep/open-knowledge-core": patch ---- - -Lists now follow GFM-style delete and creation behavior. Backspace on the empty line left after exiting a list (or on an empty nested item) merges back into the list instead of spawning a stray empty bullet or toggling the bullet on and off. Typing an ordered marker like `1. ` directly below a bullet list now starts a real numbered list rather than being absorbed into the bullet list as an empty item. - -The unified `list` node (one node type for bullet and ordered, distinguished by the `ordered` attr) had two mismatches: the list keymap was bound to the upstream `bulletList`/`orderedList` wrapper names instead of `list`, so its Backspace/Delete handling never fired; and the list-creation input rules joined any adjacent list of the same node type regardless of kind. Both are now pointed at this schema. diff --git a/.changeset/opencode-editor-integration.md b/.changeset/opencode-editor-integration.md deleted file mode 100644 index 566ef077a..000000000 --- a/.changeset/opencode-editor-integration.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Add OpenCode as a supported agent. `ok init` — and the desktop first-launch consent dialog plus the create-project dialog — now writes an `open-knowledge` MCP server entry to `opencode.json` (project-local, and `~/.config/opencode/opencode.json` for a global install), using OpenCode's `mcp` config shape and the same resilient launcher every other editor gets. OpenCode reads the Open Knowledge skill from the shared `.agents/skills/` directory it already scans, so no extra skill copy is written. - -OpenCode is also wired into the Ask AI composer and Open-in-Agent menus as a terminal CLI: it appears as "OpenCode (CLI)" in the Terminal section and launches `opencode ''` in the docked terminal. (It's terminal-only — no URL scheme — so it's deliberately absent from the GUI deep-link Desktop section.) - -Adds an OpenCode integration page and brand logo to the docs site. diff --git a/.changeset/pre.json b/.changeset/pre.json index 26e204d0c..1f5f507ef 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,14 +2,14 @@ "mode": "pre", "tag": "beta", "initialVersions": { - "@inkeep/open-knowledge-docs": "0.0.1", - "@inkeep/open-knowledge-app": "0.19.0", - "@inkeep/open-knowledge": "0.19.0", - "@inkeep/open-knowledge-core": "0.19.0", - "@inkeep/open-knowledge-desktop": "0.19.0", - "@inkeep/md-conformance": "0.0.9", + "@inkeep/open-knowledge-docs": "0.0.2", + "@inkeep/open-knowledge-app": "0.19.1", + "@inkeep/open-knowledge": "0.19.1", + "@inkeep/open-knowledge-core": "0.19.1", + "@inkeep/open-knowledge-desktop": "0.19.1", + "@inkeep/md-conformance": "0.0.10", "@inkeep/open-knowledge-plugin": "0.3.1", - "@inkeep/open-knowledge-server": "0.19.0" + "@inkeep/open-knowledge-server": "0.19.1" }, "changesets": [] } diff --git a/.changeset/rename-openknowledge.md b/.changeset/rename-openknowledge.md deleted file mode 100644 index 12243ba6b..000000000 --- a/.changeset/rename-openknowledge.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Rename the product brand from "Open Knowledge" to "OpenKnowledge" (one word) across the desktop app, CLI output, MCP/skill copy, and docs. - -The macOS app, its helper bundle, the DMG artifact, and the userData directory are renamed. A one-time, identity-verified migration runs on the first launch of a renamed build: it relocates an existing user's app state (recent projects, window restore, auto-update cache) from `~/Library/Application Support/Open Knowledge/` to `.../OpenKnowledge/`, but only after verifying the legacy directory is ours (its `state.json` parses as our schema), so another vendor's identically-named directory is never touched. It copies, verifies, then removes the legacy directory; any failure degrades to a clean first run. - -Technical identifiers are unchanged: the npm package `@inkeep/open-knowledge`, the macOS appId `com.inkeep.open-knowledge`, the `openknowledge://` deep-link scheme, the `openknowledge.ai` domain, and the `open-knowledge` MCP server name. "Open Knowledge Format" (Google's external standard) is also preserved. diff --git a/.changeset/serialize-boundary-whitespace-fidelity.md b/.changeset/serialize-boundary-whitespace-fidelity.md deleted file mode 100644 index 97e50448e..000000000 --- a/.changeset/serialize-boundary-whitespace-fidelity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-core": patch ---- - -Fix markdown serializer boundary-whitespace defects on the WYSIWYG-to-source path. An insignificant trailing space or tab at a block edge now serializes to a literal character instead of a visible ` ` / ` ` character reference, so source mode no longer shows the escape where a space was typed (a leading tab, or a leading run of four or more spaces, still encodes, since it would otherwise trigger an indented code block on re-parse and turn the paragraph into a code block). Strikethrough (`~~`) and highlight (`==`) marks authored with boundary whitespace now char-ref-encode that whitespace so the mark survives re-parse instead of silently dropping. Emphasis and strong already behaved correctly and are unchanged. diff --git a/.changeset/task-checkbox-disabled-after-editable.md b/.changeset/task-checkbox-disabled-after-editable.md deleted file mode 100644 index c55c24e15..000000000 --- a/.changeset/task-checkbox-disabled-after-editable.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-core": patch ---- - -Task-list checkboxes now stay clickable when an editor transitions from read-only to editable. The list-item NodeView set the checkbox's `disabled` state once at creation from `editor.isEditable`, but a `setEditable()` flip updates the view's editable flag without a document change, so ProseMirror never re-renders the NodeView and the stale `disabled` was never cleared. A checkbox created while the editor was read-only (for example, content loaded before the editor goes live) stayed permanently uncheckable. The NodeView now keeps `disabled` in sync with editability via the editor's `update` event (which `setEditable()` emits) and on every NodeView update. diff --git a/.changeset/terminal-composer-instruction-threaded.md b/.changeset/terminal-composer-instruction-threaded.md deleted file mode 100644 index c90cb09af..000000000 --- a/.changeset/terminal-composer-instruction-threaded.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge-app": patch ---- - -Fix the bottom "Ask AI" composer dropping the typed instruction when launching a Terminal CLI. A composer dispatch carries its instruction (and `@`-mentions / selection) in `input.compose`, but the docked-terminal launcher only checked the top-level `input.instruction` the toolbar popover uses — so every composer-typed message fell through to the bare "load OK, then stop" prompt and the agent never saw what the user asked. The terminal launcher now routes compose-scope dispatches through the same prompt assembler as the deep-link handoff, so the instruction threads through to the launched CLI exactly as it does to a Claude/Codex/Cursor deep link. diff --git a/.changeset/terminal-mouse-mode-wheel-scroll.md b/.changeset/terminal-mouse-mode-wheel-scroll.md deleted file mode 100644 index c34b60e4e..000000000 --- a/.changeset/terminal-mouse-mode-wheel-scroll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Fix jumpy, inconsistent mouse-wheel scrolling inside full-screen terminal apps that capture the mouse (the `claude` TUI, `vim`, `less`, `top`). In mouse-tracking mode xterm.js forwards one mouse-wheel report per OS wheel event with no accumulation, so the high-frequency event stream from trackpad momentum and free-spin/fast-scroll wheels floods the app — scrolling that lurches and can run away ("rocket scroll"). The terminal now accumulates fractional rows of travel and emits one wheel report per whole row of distance crossed, so scroll tracks the actual distance moved regardless of how many events deliver it: gentle drags and fast flicks over the same distance scroll the same amount, with no dead zone and a per-event clamp that absorbs momentum spikes. Normal scrollback (no mouse-capturing app) additionally gets smooth scrolling. Desktop only. diff --git a/.changeset/terminal-scroll-tuning.md b/.changeset/terminal-scroll-tuning.md deleted file mode 100644 index 82972922b..000000000 --- a/.changeset/terminal-scroll-tuning.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Tune embedded-terminal wheel scrolling to feel closer to a native terminal (e.g. Ghostty). The smooth mouse-tracking scroll added previously was correct but sluggish: macOS bakes velocity acceleration into wheel deltas, and the per-event clamp was clipping the accelerated fast-flick range. The mouse-mode accumulator now uses a modest base sensitivity with a higher per-event cap so OS acceleration carries through — fast flicks travel far while slow drags stay gentle — and normal scrollback gets a faster per-notch travel. Desktop only. diff --git a/bun.lock b/bun.lock index 81cf99a20..13997ba3b 100644 --- a/bun.lock +++ b/bun.lock @@ -19,7 +19,7 @@ }, "docs": { "name": "@inkeep/open-knowledge-docs", - "version": "0.0.1", + "version": "0.0.2", "dependencies": { "@codemirror/commands": "^6.10.3", "@codemirror/lang-markdown": "^6.5.0", @@ -68,7 +68,7 @@ }, "packages/app": { "name": "@inkeep/open-knowledge-app", - "version": "0.19.0", + "version": "0.19.1", "dependencies": { "@codemirror/autocomplete": "^6.20.1", "@codemirror/commands": "^6.10.3", @@ -212,7 +212,7 @@ }, "packages/cli": { "name": "@inkeep/open-knowledge", - "version": "0.19.0", + "version": "0.19.1", "bin": { "open-knowledge": "dist/cli.mjs", "ok": "dist/cli.mjs", @@ -254,7 +254,7 @@ }, "packages/core": { "name": "@inkeep/open-knowledge-core", - "version": "0.19.0", + "version": "0.19.1", "dependencies": { "@handlewithcare/remark-prosemirror": "0.1.5", "@opentelemetry/api": "^1.9.0", @@ -330,7 +330,7 @@ }, "packages/desktop": { "name": "@inkeep/open-knowledge-desktop", - "version": "0.19.0", + "version": "0.19.1", "dependencies": { "@inkeep/open-knowledge": "workspace:*", "@inkeep/open-knowledge-core": "workspace:*", @@ -364,7 +364,7 @@ }, "packages/server": { "name": "@inkeep/open-knowledge-server", - "version": "0.19.0", + "version": "0.19.1", "dependencies": { "@hocuspocus/server": "4.0.0-rc.1", "@inkeep/open-knowledge-core": "workspace:*", diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md new file mode 100644 index 000000000..e822e0e57 --- /dev/null +++ b/docs/CHANGELOG.md @@ -0,0 +1,10 @@ +# @inkeep/open-knowledge-docs + +## 0.0.2 + +### Patch Changes + +- Updated dependencies [9252046] +- Updated dependencies [c74100b] +- Updated dependencies [e832737] + - @inkeep/open-knowledge-core@0.19.1 diff --git a/docs/package.json b/docs/package.json index 81528e722..0087aa124 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-docs", - "version": "0.0.1", + "version": "0.0.2", "license": "GPL-3.0-or-later", "private": true, "packageManager": "bun@1.3.13", diff --git a/packages/app/package.json b/packages/app/package.json index bb4e988e7..10f54238b 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-app", - "version": "0.19.0", + "version": "0.19.1", "license": "GPL-3.0-or-later", "private": true, "type": "module", diff --git a/packages/cli/package.json b/packages/cli/package.json index 683c84a47..6337c977f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge", - "version": "0.19.0", + "version": "0.19.1", "license": "GPL-3.0-or-later", "private": false, "type": "module", diff --git a/packages/core/package.json b/packages/core/package.json index 601469543..5d60b66f2 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-core", - "version": "0.19.0", + "version": "0.19.1", "license": "GPL-3.0-or-later", "private": true, "type": "module", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index cad30ae9a..6e51e34aa 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@inkeep/open-knowledge-desktop", "productName": "OpenKnowledge", - "version": "0.19.0", + "version": "0.19.1", "license": "GPL-3.0-or-later", "private": true, "type": "module", diff --git a/packages/server/assets/skills/discovery/SKILL.md b/packages/server/assets/skills/discovery/SKILL.md index d3761ff8b..a902862fd 100644 --- a/packages/server/assets/skills/discovery/SKILL.md +++ b/packages/server/assets/skills/discovery/SKILL.md @@ -3,7 +3,7 @@ name: open-knowledge-discovery description: "Read when the user asks what OpenKnowledge is, wants to install it on a repository, wants to share an OpenKnowledge project with collaborators, or asks how `ok init` / `ok install-skill` / OK Desktop set up a project. Do NOT load to perform OpenKnowledge reads/writes — the runtime guidance for editing markdown inside an initialized OK project ships as a separate project-local skill at `.claude/skills/open-knowledge/` whenever `ok init` runs. If the user appears to be editing markdown inside a `.ok/` project and this is the only OK skill loaded, advise them to re-run `ok init` to install the project-local skill." compatibility: "Any agent host — no MCP server required. Pure discovery + install guidance." metadata: - version: "0.19.0" + version: "0.19.1" author: "Inkeep" repository: "https://github.com/inkeep/open-knowledge" --- diff --git a/packages/server/assets/skills/project/SKILL.md b/packages/server/assets/skills/project/SKILL.md index f6dee7c81..3b93bb79a 100644 --- a/packages/server/assets/skills/project/SKILL.md +++ b/packages/server/assets/skills/project/SKILL.md @@ -3,7 +3,7 @@ name: open-knowledge description: "MUST invoke before reading or editing any `.md` / `.mdx` file, and before any `mcp__open-knowledge__*` tool call (`exec`, `search`, `write`, `edit`, and the rest). This skill is installed into the repository by `ok init`, so its presence alone means this is an OpenKnowledge project — its runtime contract governs every markdown file here, with no need to probe for a `.ok/` directory. Authoritative agent-runtime contract for working inside this OpenKnowledge project." compatibility: "Claude Code, Claude Desktop, Claude Cowork, Claude.ai web. Requires OpenKnowledge MCP server + code execution." metadata: - version: "0.19.0" + version: "0.19.1" author: "Inkeep" repository: "https://github.com/inkeep/open-knowledge" --- diff --git a/packages/server/package.json b/packages/server/package.json index 672034953..c6a1f4e3c 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-server", - "version": "0.19.0", + "version": "0.19.1", "license": "GPL-3.0-or-later", "private": true, "type": "module",