Skip to content

Release/1.6.2 - #108

Merged
ganeshmshetty merged 12 commits into
mainfrom
release/1.6.2
Sep 20, 2026
Merged

ganeshmshetty merged 12 commits into
mainfrom
release/1.6.2

Conversation

@ganeshmshetty

Copy link
Copy Markdown
Owner

prep for v1.7.0 release

Hold native file output and interactive preview out of v1.6.2 by reverting the feature merge, and bump to 1.6.2 (build 14).

Keeps main's work since 1.6.1 (rich pasteboard flavors, Define in Dictionary, inline-result polish, Actions list rework, hold-to-trigger and keyboard-selection fixes) while removing the file-output surface and its tests/docs.
Add an UpdateChannel setting surfaced in Settings › About that switches Sparkle's feed to a rolling `beta` pre-release and allows the `beta` channel, re-arming the update cycle on change. Extend the release pipeline to detect pre-release tags, generate a beta appcast, and mirror artifacts to the rolling beta release, and add Support links to About.
Give the shared popup card chrome a lit top rim, a gradient hairline for the classic theme, and a contact+ambient shadow pair instead of one soft blur. The result card's diff/pin controls now rest hidden and fade in on hover, staying visible while diff or pin is active; back and close remain persistent.
The card/palette ambient shadow (radius 18, y 10) spread ~28pt down and ~26pt to the sides, but the panel reserved only a 16pt transparent ring, so the window frame hard-clipped it on every side (a straight seam, worst along the bottom).

Soften the ambient shadow (radius 12, y 4) and derive popupShadowInset from the shadow geometry with a measured blur-tail factor (y + 2 * radius = 28pt) so the ring can never drift out of sync again. Update the positioner/resize tests that assumed the old inset.
The secondary-click signal was read from live `pendingClickIntent`
state at perform time, so it could leak across runs and disagree
with the delivery snapshot:

- The right-click that opened a group's scoped palette was inherited
  by a later keyboard run (Return, a ⌘-digit, the Run badge), which
  then delivered as a secondary click.
- The palette's own secondary signal, `replace` (⇧⏎ and the ⇧⏎ footer
  badge), never reaches the mouse monitor, so a keyboard secondary run
  of a `.paste` primary pasted instead of copying.

Resolve the intent once, synchronously, and thread it explicitly
through `onWillPerformAction`/`onRunLoadingAction` into both the
perform context and the delivery snapshot, so the two always agree.
`enterSearch` resets `pendingClickIntent` so the opening right-click
of a scoped palette cannot bleed into a later run.

Adds a regression test for the explicit-intent snapshot and updates
the popup docs and debt notes.
`TextField(option.label, text:)` / `SecureField(...)` reuse the label
as the field title, which on the rounded-border macOS style leaves the
field without a placeholder when the value is empty. Pass the label as
the prompt and hide the label instead so the editor shows which option
the empty field belongs to.
Consume the published OpenSelection 0.2.1 tag and update the PowerPoint
assertion to the new script, which reads `selection of active window`
instead of the app-level `selection` that throws -1728.

Also gitignore the local `openselection/` checkout used while developing
the package so it cannot be committed as a nested repository.
Extend the inbound URL scheme beyond extension installs with a read/write
settings surface other apps can drive, built on the existing settings
snapshot machinery rather than a bespoke contract.

Routes (`Sources/Core/Integration/OpenClipDeepLink.swift`):
- `openclip://settings` — read the curated settings, replied via callback
- `openclip://set?<key>=<value>` — write, replying with applied/skipped
- `openclip://command/<name>` — open-settings, pause, resume,
  reset-appearance
- `openclip://install` is unchanged

The surface is gated: off by default behind Preferences → Integrations,
with a first-use approval prompt that disables the scheme when declined.
Only power, appearance, and an AI on/off switch are exposed; secrets, the
extension store, update channel, and hotkeys are not reachable.

`SettingsBridge` reads/writes the erased catalog keys (unwrapping the box
format and normalizing bare tokens vs JSON fragments); `DeepLinkRouter`
owns the trust gate, dispatch, side effects, the extension-install flow,
and a distributed change broadcast so a client can refresh without polling.

Adds parser and bridge tests (`DeepLinkTests`,
`IntegrationSettingsBridgeTests`) and documents the contract in
`docs/developer-guide/integration-api.md`.
- Open browser-sourced URLs through the browser's own scripting
  (BrowserTabOpener) so a private/incognito window gets a tab in the window
  you're in, falling back to LaunchServices and then the default handler.
- Fade popup content out at the bottom edge instead of painting a material band.
- Draw inset row separators in the Actions list.
- Deleting a custom action now takes it out of its groups and clears its alias.
- Bump KeyboardShortcuts to 3.1.0 and OpenSelection to 0.2.2 (Name(initial:),
  selection-window API).
The settings, command, and write routes no longer require the user to
enable settings control or approve the first request; they run
unconditionally. Removes the enabled/approved setting keys, the consent
prompt, the failure-reply path, and the Integrations preferences tab
(which existed only to host the toggle). Replaces the Droppy wording in
comments, tests, and docs with generic "control panel".
@coderabbitai

coderabbitai Bot commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Review Change StackReview Change Stack

Note

Currently processing new changes in this PR. This may take a few minutes, please wait...

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Advanced

Run ID: 8aa80d54-973d-4d5c-b78d-9aeb38abd05a

📥 Commits

Reviewing files that changed from the base of the PR and between b1891a2 and ade060d.

⛔ Files ignored due to path filters (1)
  • OpenClip.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved is excluded by !**/Package.resolved
📒 Files selected for processing (67)
  • .github/workflows/release.yml
  • .gitignore
  • CHANGELOG.md
  • OpenClip.xcodeproj/project.pbxproj
  • Sources/Core/Actions/ActionCoordinator.swift
  • Sources/Core/Actions/ActionResult.swift
  • Sources/Core/Actions/ActionResultDelivery.swift
  • Sources/Core/Actions/CustomAction.swift
  • Sources/Core/Extensions/ScriptAction.swift
  • Sources/Core/Extensions/ShellProcessRunner.swift
  • Sources/Core/Integration/OpenClipDeepLink.swift
  • Sources/Core/Integration/SettingsBridge.swift
  • Sources/Core/Selection/Constants.swift
  • Sources/Core/Settings/SettingKey.swift
  • Sources/Core/Settings/SettingsCatalog.swift
  • Sources/OpenClip/AppDelegate.swift
  • Sources/OpenClip/Platform/AppUpdateManager.swift
  • Sources/OpenClip/Platform/BrowserTabOpener.swift
  • Sources/OpenClip/Platform/DeepLinkRouter.swift
  • Sources/OpenClip/Platform/Effects/ActionResultHandler.swift
  • Sources/OpenClip/Platform/HotkeyManager.swift
  • Sources/OpenClip/Platform/PaletteRowShortcuts.swift
  • Sources/OpenClip/Platform/Runtimes/OpenClipJSHost.swift
  • Sources/OpenClip/Resources/Localizable.xcstrings
  • Sources/OpenClip/Settings/IntegrationSettings.swift
  • Sources/OpenClip/UI/Popup/GroupSubActionBarView.swift
  • Sources/OpenClip/UI/Popup/PopupMetrics.swift
  • Sources/OpenClip/UI/Popup/PopupModeStore.swift
  • Sources/OpenClip/UI/Popup/PopupSearchView.swift
  • Sources/OpenClip/UI/Popup/PopupThemeModel.swift
  • Sources/OpenClip/UI/Popup/PopupView.swift
  • Sources/OpenClip/UI/Popup/PopupWindowController.swift
  • Sources/OpenClip/UI/Popup/ResultCardView.swift
  • Sources/OpenClip/UI/Popup/SubBarPanelController.swift
  • Sources/OpenClip/UI/Preferences/AboutTabView.swift
  • Sources/OpenClip/UI/Preferences/ActionsOutlineView.swift
  • Sources/OpenClip/UI/Preferences/DynamicActionConfigView.swift
  • Sources/OpenClip/UI/Preferences/GeneralTabView.swift
  • Sources/OpenClip/UI/Preferences/SettingsRowLabel.swift
  • Tests/OpenClipTests/ActionGroupIntegrationTests.swift
  • Tests/OpenClipTests/ActionResultDeliveryTests.swift
  • Tests/OpenClipTests/AppUpdateManagerTests.swift
  • Tests/OpenClipTests/DeepLinkTests.swift
  • Tests/OpenClipTests/FileOutputTests.swift
  • Tests/OpenClipTests/GroupSubActionBarViewTests.swift
  • Tests/OpenClipTests/IntegrationSettingsBridgeTests.swift
  • Tests/OpenClipTests/MacSelectionMonitorTests.swift
  • Tests/OpenClipTests/PopupPanelTests.swift
  • Tests/OpenClipTests/PopupPositionerTests.swift
  • Tests/OpenClipTests/ResultCardResizeTests.swift
  • Tests/OpenClipTests/SearchPaletteResizeTests.swift
  • Tests/OpenClipTests/SelectionRetrievalCoordinatorTests.swift
  • Tests/OpenClipTests/SubBarPanelControllerTests.swift
  • docs/architecture/known-debt.md
  • docs/architecture/popup-window.md
  • docs/developer-guide/integration-api.md
  • docs/developer-guide/package-format.md
  • docs/index.md
  • docs/runtimes/javascript.md
  • docs/runtimes/zsh-python.md
  • docs/user-guide/preferences.md
  • project.yml
  • scripts/release_update.sh
  • scripts/translations/fr.json
  • scripts/translations/ja.json
  • scripts/translations/zh-Hans.json
  • scripts/translations/zh-Hant.json
 _____________________________________________________________________________________________________________
< Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. >
 -------------------------------------------------------------------------------------------------------------
  \
   \   (\__/)
       (•ㅅ•)
       /   づ
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ganeshmshetty
ganeshmshetty merged commit 7a8b710 into main Sep 20, 2026
1 of 3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant