Skip to content

Releases: copse-dev/copse-releases

v0.1.0-beta.8

v0.1.0-beta.8 Pre-release
Pre-release

Choose a tag to compare

@copse-release-bot copse-release-bot released this 29 Aug 11:25

Built from copse-dev/agent-pane@3e124ba (tag v0.1.0-beta.8).

Copse 0.1.0-beta.8 — beta channel.

  • Requires macOS 26 or newer.

  • Download the arm64 build for Apple Silicon or the x64 build for Intel.

  • Updates are served from the beta feed. Beta installations update from this feed and may advance to a newer stable release.

  • Releases are forward-fix only; downgrade is not a supported rollback.

  • This beta advances the permanent public update channel from beta.7 to beta.8
    so the signed, architecture-specific updater can be validated end to end
    before the source repository opens.

  • macOS release images now use Copse's generated icon for both the application
    bundle and the mounted DMG volume. Release CI generates the .icns on its
    clean runner, fails if macOS cannot compile it, then mounts the finished DMG
    and verifies the icon bytes and Finder custom-icon flag before publishing.

  • macOS downloads are now architecture-specific instead of carrying both Apple
    Silicon and Intel payloads. The beta.6 candidate DMGs and ZIPs are about 180
    MiB each (down from 343–353 MiB), and the installed app is about 640 MiB
    (down from roughly 1.3 GiB). Release CI strips build-only dependencies and
    source maps, removes opposite-architecture native modules, validates a
    combined architecture-aware update feed, and fails if a download exceeds
    230 MiB or an installed app exceeds 750 MiB.

  • The optional local transformer/ONNX runtime is no longer bundled into every
    macOS installer. Copse's heuristic PII redaction remains active; contextual
    transformer redaction will return once it has an explicit on-demand install
    path instead of making every client carry the model runtime.

  • The macOS packaged-runtime smoke test now waits for its PTY helper to exit
    before reporting success. This prevents a completed smoke test from leaving
    the unit-test worker alive until CI's fail-closed timeout.

  • Release checksum manifests now contain paths relative to the downloaded
    artifact directory. A plain shasum -a 256 --check SHA256SUMS therefore
    verifies an Actions artifact or GitHub Release download without recreating
    the CI runner's internal release/ directory first.

  • macOS release packaging now installs and verifies the native keyring module
    for both Apple Silicon and Intel bundles. This fixes the Intel build opening
    a startup-error dialog before the release smoke test could run, and the
    release verifier now has an explicit timeout instead of waiting indefinitely.

  • External command hooks now fail closed when a blocking hook crashes, times
    out, cannot start, or returns an invalid response. External hooks remain off
    by default, and Settings → Sources explains both the blocking behavior and
    the global switch that disables an incompatible hook set. Imported Cursor
    hooks may explicitly set failClosed: false, and Copse-native hooks may set
    onFailure: "open", when compatibility requires the older fail-open behavior.

  • Copse no longer offers to save an API key as unencrypted base64 merely because
    the operating-system keyring is unavailable. Plaintext secret persistence is
    now off by default; exceptional Linux or headless environments must start
    Copse with COPSE_ALLOW_PLAINTEXT_SECRETS=1 and still approve each plaintext
    save individually. Environment-only provider keys remain unwritten.

  • Stored API keys are now encrypted with a cipher Copse owns rather than
    Electron's safeStorage: a random data key kept as one item in the OS
    keyring (macOS Keychain, Windows Credential Manager, Linux Secret Service)
    and AES-256-GCM over the key itself. Existing keys keep working and are
    rewritten in the new format the first time one is read — the first rewrite
    sweeps every other stored secret with it, so a profile finishes migrating in
    one go rather than leaving keys nobody happens to read in the old format.
    Nothing needs re-entering. This removes the last dependency on Chromium
    internals for reading secrets, which is what lets a future non-Electron Copse
    shell open the same profile.

  • Settings → Providers: Test key now tests the key you already have saved
    when the field is empty, instead of answering "Enter a key first" over a key
    that is set. The field is write-only — a saved key is never read back into it
    — so previously the button could only ever check a key mid-typing, never the
    one actually in use. The stored secret stays in the main process; the
    renderer only asks for it to be tested.

  • Clicking an image or video chip in the empty-thread (centered) composer now
    opens the same attachment preview modal used after send. Text chips already
    did; media chips only expanded from the transcript or roadmap, so a new
    thread — where the composer is the only place the attachment exists — had no
    way to inspect what was attached before sending.

  • Experimental: next-step tab complete. When a turn ends and one next step is
    clearly what the user would send next ("Run the tests to verify the fix"),
    a separate small-tasks model call names it and the composer offers it as
    placeholder text with a Tab keycap — Tab inserts it, typing ignores it, and
    most turns deliberately offer nothing. Off by default; enable it under
    Settings > Experimental > "Next-step tab complete".

  • Asking Copse to prototype something now gets you a prototype you can look at.
    The MCP-UI canvas has always been able to render a self-contained HTML
    document as a live sandboxed artefact, but nothing pointed the model at it, so
    "mock up a pricing page" was answered in prose or with a file you had to open
    yourself. Three changes close that gap, all inside the copse.mcp-ui-canvas
    plugin's single flag. A conditional turn-start hook recognises a prototype
    request — an action verb and a prototype noun together, with review and
    explain questions vetoed — and, only when that turn actually offers the
    bundled render_html_artefact tool, tells the model to write the document to
    a real workspace file and render it. Writing that file no longer stops at the
    approval panel: creating a path that does not exist yet overwrites nothing, so
    it applies directly, the same reasoning that already exempted mkdir. An
    existing file is untouched by this — it still stages when the worktree holds
    work Copse did not do, when the file changed under it, or when diffs are
    already waiting for review, and a new file never jumps that queue either. And
    re-rendering an artefact whose tab is already open now refreshes that tab in
    place instead of stacking a near-identical one beside it, so iterating on a
    prototype updates the canvas you are looking at rather than leaving you to
    close the previous six.

  • Semantic search no longer reports "Indexing failed" on a large repository
    that is merely slow to index, and no longer starts indexing one it was
    supposed to refuse. Two faults compounded. The guard that declines to
    semantically index an oversized workspace sized it from a file listing
    captured through a subprocess pipe with an 8 MiB ceiling, and anything past
    that ceiling was dropped without a trace — a 124,597-path checkout measured
    as 61,735 paths, comfortably under the 100,000 cap, so the guard waved it
    through and the indexer walked the whole tree. The wait that followed could
    then only end badly: gortex track --wait is passed a --wait-timeout it
    does not honour (a 5-second request returned after 55 seconds), so rather
    than the indexer stepping back on its own, Copse killed it at its own
    ceiling and logged the kill as a failure — once when the workspace opened,
    and again on every burst of file changes. A listing that overflowed its
    capture limit is now treated as no evidence of size at all, so the workspace
    is skipped with the reason shown in the footer; and a wait that outlasts its
    budget is reported as still indexing in the background, which is what is
    actually happening, instead of as an error. Text and regex search were
    unaffected throughout and remain so.

  • Per-chat reasoning effort now lives inside the composer's model picker,
    alongside an ACP agent's own Mode and thinking-effort selectors, instead of
    sitting as a separate dropdown in the footer strip. Every per-chat knob that
    belongs to the chosen model is now in one menu, and the footer keeps one
    control where it had two. The behaviour is unchanged: the effort applies to
    this chat only, offers just the levels the selected model accepts, reads as
    Default when the model's own saved level applies, and disappears for models
    with no reasoning control.

  • A shell in a popped-out Terminal now shows its output. Typing worked and the
    command really ran, but every byte it produced was delivered to the main
    window, which had no tab for that session and dropped it — so the pop-out sat
    there looking dead. Terminal sessions were always tracked per window; only the
    destination for their output was not, and it went to whichever window the app
    started with. A shell's output now goes to the window that opened it, and to
    no other: unlike the diff queue, which is shared workspace state, terminal
    output stays private to its own window. Closing a pop-out also shuts down the
    shells it opened, rather than leaving them running with nothing attached. The
    unsandboxed-terminal permission prompt follows the same window, so it no
    longer appears on the (possibly hidden) main window while the pop-out waits.

  • Changes popped out into its own window now shows the same thing the docked
    pane does. The Proposed section was missing entirely from the pop-out: the
    main process pushed the proposed-diff queue to the main window only, and a
    pop-out deliberately does not run the agent loop, so nothing in the detached
    window was listening either. Two windows side by side disagreed about what the
    agent had proposed, and the one you popped out to revi...

Read more

v0.1.0-beta.7

v0.1.0-beta.7 Pre-release
Pre-release

Choose a tag to compare

@copse-release-bot copse-release-bot released this 29 Aug 02:54

Existing beta.6 users: install beta.7 manually once. Beta.6 points at the old private update feed and cannot discover this release; automatic updates use this public repository from beta.7 onward.

Built from copse-dev/agent-pane@609953f (tag v0.1.0-beta.7).

Copse 0.1.0-beta.7 — beta channel.

  • Requires macOS 26 or newer.

  • Download the arm64 build for Apple Silicon or the x64 build for Intel.

  • Updates are served from the beta feed. Beta installations update from this feed and may advance to a newer stable release.

  • Releases are forward-fix only; downgrade is not a supported rollback.

  • macOS release images now use Copse's generated icon for both the application
    bundle and the mounted DMG volume. Release CI generates the .icns on its
    clean runner, fails if macOS cannot compile it, then mounts the finished DMG
    and verifies the icon bytes and Finder custom-icon flag before publishing.

  • macOS downloads are now architecture-specific instead of carrying both Apple
    Silicon and Intel payloads. The beta.6 candidate DMGs and ZIPs are about 180
    MiB each (down from 343–353 MiB), and the installed app is about 640 MiB
    (down from roughly 1.3 GiB). Release CI strips build-only dependencies and
    source maps, removes opposite-architecture native modules, validates a
    combined architecture-aware update feed, and fails if a download exceeds
    230 MiB or an installed app exceeds 750 MiB.

  • The optional local transformer/ONNX runtime is no longer bundled into every
    macOS installer. Copse's heuristic PII redaction remains active; contextual
    transformer redaction will return once it has an explicit on-demand install
    path instead of making every client carry the model runtime.

  • The macOS packaged-runtime smoke test now waits for its PTY helper to exit
    before reporting success. This prevents a completed smoke test from leaving
    the unit-test worker alive until CI's fail-closed timeout.

  • Release checksum manifests now contain paths relative to the downloaded
    artifact directory. A plain shasum -a 256 --check SHA256SUMS therefore
    verifies an Actions artifact or GitHub Release download without recreating
    the CI runner's internal release/ directory first.

  • macOS release packaging now installs and verifies the native keyring module
    for both Apple Silicon and Intel bundles. This fixes the Intel build opening
    a startup-error dialog before the release smoke test could run, and the
    release verifier now has an explicit timeout instead of waiting indefinitely.

  • External command hooks now fail closed when a blocking hook crashes, times
    out, cannot start, or returns an invalid response. External hooks remain off
    by default, and Settings → Sources explains both the blocking behavior and
    the global switch that disables an incompatible hook set. Imported Cursor
    hooks may explicitly set failClosed: false, and Copse-native hooks may set
    onFailure: "open", when compatibility requires the older fail-open behavior.

  • Copse no longer offers to save an API key as unencrypted base64 merely because
    the operating-system keyring is unavailable. Plaintext secret persistence is
    now off by default; exceptional Linux or headless environments must start
    Copse with COPSE_ALLOW_PLAINTEXT_SECRETS=1 and still approve each plaintext
    save individually. Environment-only provider keys remain unwritten.

  • Stored API keys are now encrypted with a cipher Copse owns rather than
    Electron's safeStorage: a random data key kept as one item in the OS
    keyring (macOS Keychain, Windows Credential Manager, Linux Secret Service)
    and AES-256-GCM over the key itself. Existing keys keep working and are
    rewritten in the new format the first time one is read — the first rewrite
    sweeps every other stored secret with it, so a profile finishes migrating in
    one go rather than leaving keys nobody happens to read in the old format.
    Nothing needs re-entering. This removes the last dependency on Chromium
    internals for reading secrets, which is what lets a future non-Electron Copse
    shell open the same profile.

  • Settings → Providers: Test key now tests the key you already have saved
    when the field is empty, instead of answering "Enter a key first" over a key
    that is set. The field is write-only — a saved key is never read back into it
    — so previously the button could only ever check a key mid-typing, never the
    one actually in use. The stored secret stays in the main process; the
    renderer only asks for it to be tested.

  • Clicking an image or video chip in the empty-thread (centered) composer now
    opens the same attachment preview modal used after send. Text chips already
    did; media chips only expanded from the transcript or roadmap, so a new
    thread — where the composer is the only place the attachment exists — had no
    way to inspect what was attached before sending.

  • Experimental: next-step tab complete. When a turn ends and one next step is
    clearly what the user would send next ("Run the tests to verify the fix"),
    a separate small-tasks model call names it and the composer offers it as
    placeholder text with a Tab keycap — Tab inserts it, typing ignores it, and
    most turns deliberately offer nothing. Off by default; enable it under
    Settings > Experimental > "Next-step tab complete".

  • Asking Copse to prototype something now gets you a prototype you can look at.
    The MCP-UI canvas has always been able to render a self-contained HTML
    document as a live sandboxed artefact, but nothing pointed the model at it, so
    "mock up a pricing page" was answered in prose or with a file you had to open
    yourself. Three changes close that gap, all inside the copse.mcp-ui-canvas
    plugin's single flag. A conditional turn-start hook recognises a prototype
    request — an action verb and a prototype noun together, with review and
    explain questions vetoed — and, only when that turn actually offers the
    bundled render_html_artefact tool, tells the model to write the document to
    a real workspace file and render it. Writing that file no longer stops at the
    approval panel: creating a path that does not exist yet overwrites nothing, so
    it applies directly, the same reasoning that already exempted mkdir. An
    existing file is untouched by this — it still stages when the worktree holds
    work Copse did not do, when the file changed under it, or when diffs are
    already waiting for review, and a new file never jumps that queue either. And
    re-rendering an artefact whose tab is already open now refreshes that tab in
    place instead of stacking a near-identical one beside it, so iterating on a
    prototype updates the canvas you are looking at rather than leaving you to
    close the previous six.

  • Semantic search no longer reports "Indexing failed" on a large repository
    that is merely slow to index, and no longer starts indexing one it was
    supposed to refuse. Two faults compounded. The guard that declines to
    semantically index an oversized workspace sized it from a file listing
    captured through a subprocess pipe with an 8 MiB ceiling, and anything past
    that ceiling was dropped without a trace — a 124,597-path checkout measured
    as 61,735 paths, comfortably under the 100,000 cap, so the guard waved it
    through and the indexer walked the whole tree. The wait that followed could
    then only end badly: gortex track --wait is passed a --wait-timeout it
    does not honour (a 5-second request returned after 55 seconds), so rather
    than the indexer stepping back on its own, Copse killed it at its own
    ceiling and logged the kill as a failure — once when the workspace opened,
    and again on every burst of file changes. A listing that overflowed its
    capture limit is now treated as no evidence of size at all, so the workspace
    is skipped with the reason shown in the footer; and a wait that outlasts its
    budget is reported as still indexing in the background, which is what is
    actually happening, instead of as an error. Text and regex search were
    unaffected throughout and remain so.

  • Per-chat reasoning effort now lives inside the composer's model picker,
    alongside an ACP agent's own Mode and thinking-effort selectors, instead of
    sitting as a separate dropdown in the footer strip. Every per-chat knob that
    belongs to the chosen model is now in one menu, and the footer keeps one
    control where it had two. The behaviour is unchanged: the effort applies to
    this chat only, offers just the levels the selected model accepts, reads as
    Default when the model's own saved level applies, and disappears for models
    with no reasoning control.

  • A shell in a popped-out Terminal now shows its output. Typing worked and the
    command really ran, but every byte it produced was delivered to the main
    window, which had no tab for that session and dropped it — so the pop-out sat
    there looking dead. Terminal sessions were always tracked per window; only the
    destination for their output was not, and it went to whichever window the app
    started with. A shell's output now goes to the window that opened it, and to
    no other: unlike the diff queue, which is shared workspace state, terminal
    output stays private to its own window. Closing a pop-out also shuts down the
    shells it opened, rather than leaving them running with nothing attached. The
    unsandboxed-terminal permission prompt follows the same window, so it no
    longer appears on the (possibly hidden) main window while the pop-out waits.

  • Changes popped out into its own window now shows the same thing the docked
    pane does. The Proposed section was missing entirely from the pop-out: the
    main process pushed the proposed-diff queue to the main window only, and a
    pop-out deliberately does not run the agent loop, so nothing in the detached
    window was listening either. Two windows side by side disagreed about what the
    agent had proposed, and the one you popped out t...

Read more