diff --git a/.changeset/opencode-v1-14-51-to-v1-15-4.md b/.changeset/opencode-v1-14-51-to-v1-15-4.md index 0bf0046e62..8e2e5886da 100644 --- a/.changeset/opencode-v1-14-51-to-v1-15-4.md +++ b/.changeset/opencode-v1-14-51-to-v1-15-4.md @@ -5,45 +5,30 @@ Changes from opencode v1.14.51 to v1.15.4 upstream: -## Core - -### Improvements - -- Added an Effect-based core event system for more complete event delivery across sessions and integrations. -- Clarified how to recover when the npm package is installed without its native binary. -- Reduced unnecessary prompting around shell, task, and todo flows. - -### Bugfixes - -- Ignored invalid exports in custom tool modules instead of failing tool loading. -- Ignored project instruction lookup errors so sessions keep loading when project instruction discovery fails. -- Fixed versioned event projector lookups so event replay uses the right handlers. -- Avoid duplicate consecutive entries in prompt history. -- Show full config validation errors during TUI startup instead of a generic failure. -- Fixed npm installs so the CLI can recover and fetch the right native binary on more setups. -- Fixed multiline `@` mentions in prompts. -- Preserved custom tool metadata from Zod schemas. -- Preserved custom tool argument descriptions in generated schemas. -- Fixed file watching in repos where `.git` is a symlink. (@kagura-agent) -- Fixed sync events not reaching project-scoped subscribers in injected instances. -- Reduced wasted work when reading very large files after output truncation. -- Fixed project-scoped bus events so file watcher and update notifications reach the right instance. -- Fixed custom LSP servers not sending refresh events after they initialize. -- Hid background subagent task instructions unless experimental background mode is enabled. - -## TUI - -### Improvements - -- Added a collapsed thinking view that can be expanded inline. -- Added pinned sessions with quick-switch slots in the session picker. -- Newly pinned sessions now stay at the end of the pinned list instead of jumping to the top. -- Made Markdown H1 headings easier to distinguish. - -### Bugfixes - -- Fixed thinking mode defaults so reasoning starts collapsed consistently. -- Limited session quick-switching to pinned sessions. -- Fixed Markdown table rendering in chat output. -- Fixed `opencode run --agent` resolving project-local agents. -- Fixed async commands losing the active instance context, which could break agent generation and GitHub-driven runs. +- Core Improvements: Added an Effect-based core event system for more complete event delivery across sessions and integrations. +- Core Improvements: Clarified how to recover when the npm package is installed without its native binary. +- Core Improvements: Reduced unnecessary prompting around shell, task, and todo flows. +- Core Bugfixes: Ignored invalid exports in custom tool modules instead of failing tool loading. +- Core Bugfixes: Ignored project instruction lookup errors so sessions keep loading when project instruction discovery fails. +- Core Bugfixes: Fixed versioned event projector lookups so event replay uses the right handlers. +- Core Bugfixes: Avoid duplicate consecutive entries in prompt history. +- Core Bugfixes: Show full config validation errors during TUI startup instead of a generic failure. +- Core Bugfixes: Fixed npm installs so the CLI can recover and fetch the right native binary on more setups. +- Core Bugfixes: Fixed multiline `@` mentions in prompts. +- Core Bugfixes: Preserved custom tool metadata from Zod schemas. +- Core Bugfixes: Preserved custom tool argument descriptions in generated schemas. +- Core Bugfixes: Fixed file watching in repos where `.git` is a symlink. (@kagura-agent) +- Core Bugfixes: Fixed sync events not reaching project-scoped subscribers in injected instances. +- Core Bugfixes: Reduced wasted work when reading very large files after output truncation. +- Core Bugfixes: Fixed project-scoped bus events so file watcher and update notifications reach the right instance. +- Core Bugfixes: Fixed custom LSP servers not sending refresh events after they initialize. +- Core Bugfixes: Hid background subagent task instructions unless experimental background mode is enabled. +- TUI Improvements: Added a collapsed thinking view that can be expanded inline. +- TUI Improvements: Added pinned sessions with quick-switch slots in the session picker. +- TUI Improvements: Newly pinned sessions now stay at the end of the pinned list instead of jumping to the top. +- TUI Improvements: Made Markdown H1 headings easier to distinguish. +- TUI Bugfixes: Fixed thinking mode defaults so reasoning starts collapsed consistently. +- TUI Bugfixes: Limited session quick-switching to pinned sessions. +- TUI Bugfixes: Fixed Markdown table rendering in chat output. +- TUI Bugfixes: Fixed `opencode run --agent` resolving project-local agents. +- TUI Bugfixes: Fixed async commands losing the active instance context, which could break agent generation and GitHub-driven runs. diff --git a/script/upstream/README.md b/script/upstream/README.md index edf9e0fc96..c06b2d3a73 100644 --- a/script/upstream/README.md +++ b/script/upstream/README.md @@ -69,7 +69,7 @@ After merging upstream opencode releases, use `opencode-changesets.ts` to turn t bun script/upstream/opencode-changesets.ts 1.17.0 1.17.7 ``` -The script fetches releases from `anomalyco/opencode`, selects published releases in the semver range `(from, to]`, and writes one `.changeset/opencode-vX-Y-Z-to-vX-Y-Z.md` file for the whole range. It merges notes from every release into shared `##` sections and `###` categories, so all `Core` bugfixes in the range appear under one `## Core` / `### Bugfixes` block. It defaults to patch changesets for the fixed release group, `@kilocode/cli` and `kilo-code`. Generated notes omit contributor thank-you blocks and the upstream `Desktop` and `SDK` sections by default because Kilo does not ship the opencode desktop app and SDK release notes are not user-facing for Kilo. +The script fetches releases from `anomalyco/opencode`, selects published releases in the semver range `(from, to]`, and writes one `.changeset/opencode-vX-Y-Z-to-vX-Y-Z.md` file for the whole range. It merges notes from every release into shared `##` sections and `###` categories, then folds those headings into each bullet (for example, `Core Bugfixes: ...`) so Changesets can embed the notes cleanly in package changelogs. It defaults to patch changesets for the fixed release group, `@kilocode/cli` and `kilo-code`. Generated notes omit contributor thank-you blocks and the upstream `Desktop` and `SDK` sections by default because Kilo does not ship the opencode desktop app and SDK release notes are not user-facing for Kilo. Preview without writing files: diff --git a/script/upstream/opencode-changesets.test.ts b/script/upstream/opencode-changesets.test.ts index 54e6738395..f4e53cf9ad 100644 --- a/script/upstream/opencode-changesets.test.ts +++ b/script/upstream/opencode-changesets.test.ts @@ -40,9 +40,7 @@ describe("opencode changesets", () => { Changes from opencode v1.2.1 to v1.2.2 upstream: -## Core - -- Fix issue +- Core: Fix issue `) }) @@ -86,9 +84,7 @@ Changes from opencode v1.2.1 to v1.2.2 upstream: Changes from opencode v1.2.1 to v1.2.2 upstream: -## Core - -- Keep this +- Core: Keep this `) }) @@ -142,23 +138,11 @@ Changes from opencode v1.2.1 to v1.2.2 upstream: Changes from opencode v1.2.0 to v1.2.2 upstream: -## Core - -### Bugfixes - -- Fix first -- Fix second - -### Improvements - -- Improve core - -## TUI - -### Improvements - -- Improve first -- Improve second +- Core Bugfixes: Fix first +- Core Bugfixes: Fix second +- Core Improvements: Improve core +- TUI Improvements: Improve first +- TUI Improvements: Improve second `) }) }) diff --git a/script/upstream/opencode-changesets.ts b/script/upstream/opencode-changesets.ts index 8bd79aa8bb..7da5ec50af 100644 --- a/script/upstream/opencode-changesets.ts +++ b/script/upstream/opencode-changesets.ts @@ -157,18 +157,17 @@ function render(groups: Group) { const lines: string[] = [] for (const [section, cats] of groups) { - const entries = [...cats.values()].flat() - if (entries.length === 0) continue - - lines.push(`## ${section}`, "") for (const [category, items] of cats) { if (items.length === 0) continue - if (category) lines.push(`### ${category}`, "") - lines.push(...items, "") + const prefix = [section, category].filter(Boolean).join(" ") + for (const item of items) { + const text = item.replace(/^\s*[-*]\s+/, "").trim() + lines.push(`- ${prefix}: ${text}`) + } } } - return lines.join("\n").trim() + return lines.join("\n") } function isRelease(input: unknown): input is Release {