Skip to content

Releases: tunaformac/TunaKit

TunaKit 1.22.0

Choose a tag to compare

@mikker mikker released this 04 Sep 07:36
Immutable release. Only release title and notes can be modified.
f601e00
  • Added catalog item interaction callbacks for provider analytics when results appear, are
    activated, disappear, or are successfully pasted.
  • Added CatalogAsyncPreviewProviding.cachesAsyncPreview so providers can opt out of Tuna's
    in-memory preview cache when their content contract prohibits caching.
  • Added CatalogInitialGlobalScope and CatalogDeclaration.initialGlobalScope so extensions can
    keep newly discovered sources out of global search by default.
  • Added CatalogItemPreview.init(animatedImageData:). Selected grid items and detail previews now
    play supported animated image formats while other results remain on their first frame.
  • Documented PasteboardDataProviding and PasteboardDataRepresentation as supported public API
    for copying non-text pasteboard flavors.

TunaKit 1.21.0

Choose a tag to compare

@mikker mikker released this 28 Aug 21:24
Immutable release. Only release title and notes can be modified.
d9a795a
  • Breaking: CatalogDeclaration requires presentation:.source,
    .browseRoot(contents:), .liveSearch, .snapshot, or .hidden. The <id>.search naming convention no
    longer pairs catalogs; declare a browse root explicitly. A root's contents must be a .source or
    .snapshot catalog of the same extension and may be claimed by one root only.
    CatalogDefinition gains a matching presentation (default .source).
  • Added optional CatalogDeclaration.description / CatalogDefinition.description, shown under the
    catalog's name in Settings → Sources.
  • BrowseCatalogItem.catalogIcon (also on the deferred and scoped-search variants) and
    CatalogIconColor.nsColor are public, so hosts can reuse a root's symbol and tint.
  • Added ActionResult.cancelled for user-cancelled actions that should finish quietly without
    entering command history.

TunaKit 1.20.0

Choose a tag to compare

@mikker mikker released this 20 Aug 22:35
Immutable release. Only release title and notes can be modified.
797c231
  • Added independent CatalogItem.searchKeys matching and match-evidence metadata for result rows.
  • Added the dynamicSearchCatalogEntry type so provider-backed roots default to Search while
    retaining Browse.
  • Expanded theme preview controls and result presentation support.

TunaKit 1.19.0

Choose a tag to compare

@mikker mikker released this 18 Aug 10:49
Immutable release. Only release title and notes can be modified.
f978b93
  • Add on-demand catalog Quick Look
  • Prepare Tuna 0.91 release
  • Replace dictation label with timer
  • Remove dictation recording limit

TunaKit 1.18.0

Choose a tag to compare

@mikker mikker released this 14 Aug 13:01
Immutable release. Only release title and notes can be modified.
bcaf8dc
  • Breaking: replaced the ambiguous explicitTextValue() and textValueFallback() helpers
    with purpose-specific primary-content, text-input, automation, copy, and display representations.
    TextValueProviding content is preserved exactly instead of being trimmed during extraction.
  • Breaking: SolverResultItem.textValue now returns the unformatted result. Use
    displayTextValue() or copyTextRepresentation() when locale-aware formatting is wanted.
  • Added shared catalog-scan feedback and navigation-affordance symbols for themes.
  • SearchObjectRole now conforms to Hashable for stable role-based SwiftUI identity.
  • Corrected playTransition visibility to match its non-overridable extension implementation.

TunaKit 1.17.0

Choose a tag to compare

@mikker mikker released this 05 Aug 10:13
Immutable release. Only release title and notes can be modified.
5dbb046
  • Breaking: Runnable.run(), RunnableWithInput.run(with:), and catalog action callbacks are
    now async. Action callbacks are main-actor isolated.
  • Breaking: RunnableWithInput now requires acceptsInput; the separate
    ShortcutAcceptsInput marker protocol was removed.
  • Breaking: Runnable and CommandItem now declare executionPolicy and
    headlessEligibility, separating post-command presentation from whether a command may safely run
    without the launcher interface.
  • Breaking: removed the parallel AsyncRunnable, AsyncCommandItem, and
    AsyncActionProviding APIs, along with runnable presentation hints and result-shape flags. Use
    the unified async APIs and return the actual ActionResult instead.
  • Breaking: removed action initializers that accepted Void callbacks, the title-derived
    CommandItem initializer, DefaultActionIdentifier, ThemePreviewViewModel, and the
    ScoreResult.catalogIdentifier compatibility spelling. Actions must return an honest result;
    command IDs and result provenance are explicit.
  • Breaking: CatalogAction and PredicateAwareAction initializers no longer accept
    type: .action; action instances always use .action. The raw
    supportedSubjectTypeIdentifiers and allowedTargetTypeIdentifiers properties were removed;
    use their typed TypeID counterparts.
  • AppLog now exposes stable entry identities and change notifications for live diagnostic views;
    release builds retain a bounded in-memory history of warnings and errors.

TunaKit 1.16.1

Choose a tag to compare

@mikker mikker released this 30 Jul 14:17
Immutable release. Only release title and notes can be modified.
1d72520
  • Fixed deferred browse entries without an explicit child presentation inheriting their catalog's
    presentation instead of forcing a list.

TunaKit 1.15.0

Choose a tag to compare

@mikker mikker released this 29 Jul 21:14
Immutable release. Only release title and notes can be modified.
e533d9e
  • Added reusable direct OAuth PKCE configuration, callback parsing, and authorization-code token
    exchange APIs. Extension connection declarations can opt in while existing brokered OAuth
    declarations continue to use the Tuna web broker unchanged.
  • Added per-hierarchy grid presentation configuration and preview-first grid items, including
    custom column counts, cell sizing, and spacing.
  • Added CatalogLoadingItem for host-rendered indeterminate loading states.
  • Added action target search scopes with optional on-demand loading or per-selection catalog
    refresh, allowing extensions to keep dynamic target collections lazy and current.
  • Fixed TextSnippetItem identity collisions between snippets sharing the same display title.

TunaKit 1.14.0

Choose a tag to compare

@mikker mikker released this 28 Jul 12:15
Immutable release. Only release title and notes can be modified.
2aa497e
  • Extension declaration validation now rejects default and preferred action references whose
    action IDs are absent from their declared action catalogs.

TunaKit 1.13.0

Choose a tag to compare

@mikker mikker released this 27 Jul 13:59
Immutable release. Only release title and notes can be modified.
fb3dd17
  • Breaking: catalogs are now two sibling kinds. Catalog vends objects and
    is a source: it feeds subject and target search, carries a search priority,
    and is listed in Sources. The new ActionCatalog vends
    actions: [CatalogAction] and is none of those things. It is not a refinement
    of Catalog, so a catalog that mixes items and actions can no longer be
    written. See ADR 0006.

  • Breaking: ExtensionDeclaration gains actionCatalogs: [ActionCatalogDeclaration].
    Action catalogs must be declared there, never in catalogs. catalogs now
    defaults to [], so an extension may contribute only actions. Both kinds share
    one identifier namespace.

  • Breaking: appActionEnrichments and defaultActionRankings must reference
    action catalogs. Naming a source catalog is a declaration error.

  • Breaking: app action enrichment is purely additive. Naming an action
    catalog for an app no longer removes it from anywhere else — it only orders it
    for that app. Where an action applies is decided solely by
    supportedSubjectTypes and subjectPredicate. Extensions that mirrored their
    actions through a search catalog to work around the old behavior should delete
    the mirroring.

  • Action catalogs have no scan lifecycle: no scan(), no reportScanFinished(),
    no retained-state release. They are built from an ActionCatalogDefinition,
    which carries only an identifier and a name — no enablement, advanced flag, or
    settings. A setting that configures a verb belongs in the extension's own
    settings.

  • Added ActionAvailabilityProviding, for an action that cannot run under
    current conditions — its app is not installed, a permission was refused, it has
    nothing to operate on. Unavailable actions are filtered wherever actions are
    matched to a subject. This replaces the scan-to-empty signal that action
    catalogs no longer have. It is read during search, so keep it cheap.

  • Added MainWindow.playTransition(_:duration:animations:finalState:completion:)
    and MainWindow.AnimationDirection. Themes that need their own show/hide
    animations can now add them to the content layer while TunaKit keeps owning
    the transition lifecycle: superseding an in-flight transition, the
    animationsEnabled bypass, and ordering the window out after a hide.
    playShowAnimations and playHideAnimations are wrappers over it and keep
    their signatures; playHideAnimations now orders the window out itself when
    the hide completes, so themes no longer have to.