diff --git a/.changeset/clipboard-opendepth-guard-generalized.md b/.changeset/clipboard-opendepth-guard-generalized.md deleted file mode 100644 index 60e2c067..00000000 --- a/.changeset/clipboard-opendepth-guard-generalized.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Copying text from inside quotes, lists, headings, and tables no longer includes the block's markdown syntax or fabricates structure on paste. Drag-highlighting text inside a blockquote, heading, bullet or task list item, code block, or footnote definition previously copied the block's markers (`> `, `# `, `- `, `- [ ] `, code fences, `[^1]: `) along with the text, and pasting into Open Knowledge or a markdown-aware app fabricated new structure — a bullet inside a table cell, an extra nesting level from a nested list item, a heading from a heading fragment. Rich-text (`text/html`) copies of partial selections likewise no longer carry the full block element into destinations like Docs, Notion, or Gmail. Whole-structure copies are unchanged: selecting an entire list, quote, or table still copies its full markdown, and copying the complete text of a single list item still copies it as that item. diff --git a/.changeset/html-paste-tight-lists.md b/.changeset/html-paste-tight-lists.md deleted file mode 100644 index 3fd48a24..00000000 --- a/.changeset/html-paste-tight-lists.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Pasting bullet lists from rich-text sources no longer inserts blank lines before nested sections - -Copying a tight bullet list from a rendered surface (Google Docs, Notion, Slack, ChatGPT, a web page) and pasting it into the editor used to synthesize blank lines between every item and before each nested sub-list, and swapped the bullet markers to `*`. The HTML-to-markdown conversion now normalizes the rich-editor DOM shape (paragraph-wrapped list items, nested sub-lists) back to a tight list, and mints the editor's canonical `-` bullet marker. List items that genuinely contain multiple blocks (two paragraphs, a paragraph plus a code block) still paste as loose lists so their blocks stay separate. diff --git a/.changeset/lint-config-wysiwyg-toggle.md b/.changeset/lint-config-wysiwyg-toggle.md deleted file mode 100644 index 78a0a3c3..00000000 --- a/.changeset/lint-config-wysiwyg-toggle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Opening a JSON markdownlint config file (`.markdownlint.json` / `.markdownlint.jsonc`) now offers a toggle between a **Source** view and a **Rules** view. Source is the raw, read-only file (comments, `extends`, and formatting intact); Rules is the same searchable rule browser as Settings — flip rules on or off and edit their options, with changes written back to the file through the format-preserving writer (comments, `extends`, and trailing commas are preserved). Rule editing targets the project's root config, so a nested or not-yet-created config opens in Source with the Rules option disabled and an explanation. Your Source/Rules choice is remembered per user, separately from the markdown editor's own mode. diff --git a/.changeset/prd-7492-persistence-staleness.md b/.changeset/prd-7492-persistence-staleness.md deleted file mode 100644 index dc50f77a..00000000 --- a/.changeset/prd-7492-persistence-staleness.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@inkeep/open-knowledge': patch ---- - -Add a persistence staleness watchdog that bounds how long CRDT edits can sit unflushed to disk. If a document's in-memory edits ever fail to reach the on-disk markdown (for example after a transient disk error, since the store debounce only re-arms on the next edit), the server now detects the stale file within minutes and re-runs the store through the normal persistence path instead of leaving disk outdated until the next edit. The watchdog never overwrites external edits: any on-disk state the persistence layer has not reconciled makes it stand down and log instead. Three new counters (`persistenceStalenessDetected`, `persistenceStalenessForcedStores`, `persistenceStalenessStoodDown`) surface these events alongside the existing persistence queue metrics; a sustained non-zero `persistenceStalenessStoodDown` rate is the alertable one (unflushed edits pinned in memory would be lost on a restart). diff --git a/.changeset/prd-7495-headfirst-link-preview.md b/.changeset/prd-7495-headfirst-link-preview.md deleted file mode 100644 index 86c8a042..00000000 --- a/.changeset/prd-7495-headfirst-link-preview.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Link previews now load for content-heavy pages like GitHub and Wikipedia: the fetcher streams to the end of instead of rejecting once the page body exceeds the 512 KB cap. diff --git a/.changeset/pre.json b/.changeset/pre.json index 7598760d..d2b45254 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,15 +2,15 @@ "mode": "pre", "tag": "beta", "initialVersions": { - "@inkeep/open-knowledge-docs": "0.0.30", - "@inkeep/open-knowledge-app": "0.35.6", - "@inkeep/open-knowledge": "0.35.6", - "@inkeep/open-knowledge-core": "0.35.6", - "@inkeep/open-knowledge-desktop": "0.35.6", - "@inkeep/md-conformance": "0.0.38", + "@inkeep/open-knowledge-docs": "0.0.31", + "@inkeep/open-knowledge-app": "0.36.0", + "@inkeep/open-knowledge": "0.36.0", + "@inkeep/open-knowledge-core": "0.36.0", + "@inkeep/open-knowledge-desktop": "0.36.0", + "@inkeep/md-conformance": "0.0.39", "@inkeep/open-knowledge-native-config": "0.0.0", "@inkeep/open-knowledge-plugin": "0.3.1", - "@inkeep/open-knowledge-server": "0.35.6" + "@inkeep/open-knowledge-server": "0.36.0" }, "changesets": [] } diff --git a/.changeset/raise-desktop-server-heap.md b/.changeset/raise-desktop-server-heap.md deleted file mode 100644 index e998911f..00000000 --- a/.changeset/raise-desktop-server-heap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Raise the packaged desktop server's V8 old-generation heap limit to 16 GiB. Large projects can now use more memory for collaboration, indexing, and related server work before V8 reports an out-of-memory error. diff --git a/.changeset/recycle-window-edit-loss.md b/.changeset/recycle-window-edit-loss.md deleted file mode 100644 index 51227a8f..00000000 --- a/.changeset/recycle-window-edit-loss.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Edits typed while the connection drops are no longer lost when the document recycles - -Typing right after the editor lost its server connection (for example after switching windows) could silently destroy that edit: a short debounce timer recycles idle disconnected documents, and it only checked for unsynced edits when it was armed, not when it fired. An edit typed inside that window rode into the teardown; if the server identity changed before the next sync (an app update relaunch does exactly this), the edit was gone permanently. The recycle now re-checks for unsynced edits at fire time and leaves dirty documents alone, and the server-restart recovery replays a preserved edit at content level so it also survives a server identity change instead of being parked as an unresolvable CRDT delta. diff --git a/.changeset/robust-git-repository-inspection.md b/.changeset/robust-git-repository-inspection.md deleted file mode 100644 index 6e6efc77..00000000 --- a/.changeset/robust-git-repository-inspection.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Local Git-backed workflows now inspect repositories consistently across the `ok` CLI, Desktop, and the collaboration server. This removes several places where each surface parsed `.git`, `HEAD`, refs, and remotes differently. - -- Linked worktrees now read `HEAD` from the worktree-specific Git directory while reading remotes, refs, and clone-wide excludes from the shared common Git directory. Folder validation, share-receive matching, branch display, and `ok config-sharing` therefore work the same in a linked worktree as in a primary checkout. -- Shadow-repository setup now recognizes the nearest enclosing repository when an OpenKnowledge project is rooted in a subdirectory, while still refusing to promote a repository rooted at the user's home directory. -- Branch and remote inspection now handles loose and packed refs, symbolic refs, SHA-1 and SHA-256 object IDs, relative or absolute worktree pointers, and quoted or commented remote configuration through one shared implementation. -- Missing refs, malformed metadata, stale worktree pointers, inaccessible Git files, and unsafe ref paths are classified separately so sync and branch-watching code can fail safely instead of treating every read problem as a missing branch. -- Branch-switch conflict checks now wait for both Git probes to finish before returning an invalid-target error, preventing a leftover child process from racing repository cleanup. - -No configuration or migration is required. diff --git a/.changeset/server-console-to-pino.md b/.changeset/server-console-to-pino.md deleted file mode 100644 index 4b65ab64..00000000 --- a/.changeset/server-console-to-pino.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Server-side diagnostics (file watcher, observer bridge, content filter, shadow repo, persistence, rename log, and the rest of the server package) now route through the structured pino logger instead of raw `console.*`. Warnings and errors still print in the `ok start` terminal, and every diagnostic now also lands in `.ok/local/logs/server-current.jsonl` — the file bug-report bundles collect — so watcher drop decisions, symlink-escape refusals, and bridge recovery paths are diagnosable from a bug report even when the server runs detached under the desktop app, where console output goes nowhere persistent. diff --git a/.changeset/settings-scope-badges-and-search.md b/.changeset/settings-scope-badges-and-search.md deleted file mode 100644 index 43c49def..00000000 --- a/.changeset/settings-scope-badges-and-search.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@inkeep/open-knowledge": minor ---- - -Settings now tells you where a plugin's changes are stored and lets you search across the whole dialog. - -Plugin panels carry a scope badge: markdownlint shows a "Project" badge (its rules are committed to config.yml and shared with your team) and Themes shows a "User" badge (personal to your device). Hover either badge for a one-line explanation of where the change is saved. - -A search box is pinned at the top of the settings sidebar. Type to find any section, any Preferences/Theme setting, or any markdownlint rule by name, id, or alias, then jump straight to it: a section result switches panels, a setting result scrolls to and briefly highlights the field, and a markdownlint rule result opens the markdownlint panel already filtered to that rule. markdownlint rules only appear in search while the plugin is enabled. The search box stays put while the section list scrolls beneath it. diff --git a/.changeset/shadow-repo-write-perf.md b/.changeset/shadow-repo-write-perf.md deleted file mode 100644 index 6f2d1c9e..00000000 --- a/.changeset/shadow-repo-write-perf.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Version-history recording is dramatically cheaper on large knowledge bases and slow (mounted/network) volumes. The background history snapshot now reuses a persistent git index so unchanged files are no longer re-read and re-hashed on every save cycle (up to ~11x faster tree builds on a 10k-file KB); switching git branches with many open documents batches its bookkeeping into a few git calls instead of four per document (a 100-document switch drops from ~15s to well under a second); and agent writes coalesce into the normal debounced history commit instead of forcing a full commit per write, while history reads still always reflect every completed write. diff --git a/.changeset/table-cell-copy-plain-text.md b/.changeset/table-cell-copy-plain-text.md deleted file mode 100644 index 2efc2db8..00000000 --- a/.changeset/table-cell-copy-plain-text.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@inkeep/open-knowledge": patch ---- - -Copying text from inside a table cell now copies just that text, not the whole Markdown table. Previously, drag-highlighting content in a table cell and copying it yielded the entire table — the `|` pipes and the `| -- |` delimiter row — because the selection's content included the enclosing table structure. A text selection confined to a single cell now serializes to only the cell's content, with its inline formatting (inline code, bold, links, etc.) preserved exactly as it would be when copying the same text from a paragraph, and the table structure dropped. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 62f1d902..18495de1 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,11 @@ # @inkeep/open-knowledge-docs +## 0.0.31 + +### Patch Changes + +- @inkeep/open-knowledge-core@0.36.0 + ## 0.0.30 ### Patch Changes diff --git a/docs/package.json b/docs/package.json index 78d69855..b092c187 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-docs", - "version": "0.0.30", + "version": "0.0.31", "license": "GPL-3.0-or-later", "private": true, "packageManager": "pnpm@10.33.0", diff --git a/packages/app/package.json b/packages/app/package.json index 8fbcda49..3a3cc60f 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-app", - "version": "0.35.6", + "version": "0.36.0", "license": "GPL-3.0-or-later", "private": true, "type": "module", diff --git a/packages/cli/package.json b/packages/cli/package.json index 68eb7832..df6ba0c0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge", - "version": "0.35.6", + "version": "0.36.0", "license": "GPL-3.0-or-later", "private": false, "type": "module", diff --git a/packages/core/package.json b/packages/core/package.json index 199d247d..b0b56698 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-core", - "version": "0.35.6", + "version": "0.36.0", "license": "GPL-3.0-or-later", "private": true, "type": "module", diff --git a/packages/desktop/package.json b/packages/desktop/package.json index 91c9a689..46fca430 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -1,7 +1,7 @@ { "name": "@inkeep/open-knowledge-desktop", "productName": "OpenKnowledge", - "version": "0.35.6", + "version": "0.36.0", "license": "GPL-3.0-or-later", "homepage": "https://openknowledge.ai", "author": { diff --git a/packages/server/assets/skills/discovery/SKILL.md b/packages/server/assets/skills/discovery/SKILL.md index 28a2e4d5..1f22bd3f 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 cowork` / 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.35.6" + version: "0.36.0" 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 f78e6ef3..26ff6cc1 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: "Authoritative agent-runtime contract for working inside an OpenKnowledge project — a markdown-CRDT knowledge base exposed over MCP. Use whenever reading, listing, searching, editing, or linting any `.md` or `.mdx` file in the project, and before any `mcp__open-knowledge__*` tool call (`exec`, `search`, `write`, `edit`, `lint`, and the rest). Installed by `ok init`, so its presence means this is an OpenKnowledge project and it governs every markdown file here. Covers the read/write tool surface, grounding and linking rules, folder/template conventions, the live browser preview, and the rule that OK's MCP tools — never native file tools — handle in-scope markdown." compatibility: "Claude Code, Claude Desktop, Claude Cowork, Claude.ai web. Requires OpenKnowledge MCP server + code execution." metadata: - version: "0.35.6" + version: "0.36.0" author: "Inkeep" repository: "https://github.com/inkeep/open-knowledge" --- diff --git a/packages/server/assets/skills/write-skill/SKILL.md b/packages/server/assets/skills/write-skill/SKILL.md index ac5ca13e..0786f105 100644 --- a/packages/server/assets/skills/write-skill/SKILL.md +++ b/packages/server/assets/skills/write-skill/SKILL.md @@ -3,7 +3,7 @@ name: open-knowledge-write-skill description: "Use when the user wants to create, author, write, or design a new Agent Skill (a SKILL.md) — for OpenKnowledge or for their editors — including requests like 'help me write a skill', 'make a skill that…', 'turn this workflow into a skill', or improving an existing skill's triggering and discipline. Also use when capturing reusable agent guidance that should live as an installable skill rather than a one-off prompt. Covers choosing scope (project vs global), the SKILL.md frontmatter contract, progressive-disclosure structure, evaluating the skill, and installing it into the user's editors." compatibility: "OpenKnowledge project recommended (uses the `write` / `edit` / `install` MCP verbs). Authoring + validation are pure file ops; live preview + eval want a running server (`ok start`)." metadata: - version: "0.35.6" + version: "0.36.0" author: "Inkeep" repository: "https://github.com/inkeep/open-knowledge" --- diff --git a/packages/server/package.json b/packages/server/package.json index aaa2143b..f29241b5 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@inkeep/open-knowledge-server", - "version": "0.35.6", + "version": "0.36.0", "license": "GPL-3.0-or-later", "private": true, "type": "module",