Skip to content

Releases: LocalKinAI/kinclaw-mac

v0.4.1 — spawn_done bubble was being dropped silently

07 May 03:32

Choose a tag to compare

Patch follow-up to v0.4.0.

The detached-spawn flow looked broken from the user's seat: pilot dispatched researcher, researcher actually completed and the kernel correctly delivered both the SSE event and the synthetic history injection, but no report bubble ever appeared in the chat surface. User saw the empty wait, asked pilot, pilot said "应该已经显示了" — UX disaster.

Root cause

`UI/SpotlightContentView.swift::handleLocalEvent` had a stale-index guard at the top:

```swift
guard messages.indices.contains(assistantIndex) else { return }
```

Correct for mid-turn events (`text_delta` / `tool_call` need an active assistant bubble to write into). But `spawn_done` arrives 3-5 minutes AFTER the turn that dispatched the spawn has ended — that's the whole point of detach mode. At delivery time, `assistantIndex` is stale, the guard fires, the event is silently dropped.

Fix

`spawnDone` now handled at the TOP of `handleLocalEvent`, BEFORE the stale-index guard. It appends a fresh standalone bubble (doesn't need any active `assistantIndex`) and returns.

Pairs with

  • kinclaw v1.12.1 — kernel-side plumbing was already correct; this was purely a Mac-side UI miss.

v0.4.0 — Cowork delivers deep research end-to-end

07 May 02:29

Choose a tag to compare

Headline: Pairs with kinclaw v1.12.0 to make the deep-research workflow actually usable from Cowork tab. First successful end-to-end turn on 2026-05-06 produced a 241-line markdown report on 因信称义 with 11 working citations including 2 from local Guyon + Teresa-of-Avila corpora.

Highlights

Detached spawn UI

spawn_done SSE event handler renders the child agent's report as a "🔬 <soul> (job xxx) finished in Ns" assistant bubble inline in the chat surface. No re-prompt needed.

Source-of-truth soul handling

Supervisor priority flipped: dev repo's ~/Documents/Workspace/kinclaw/souls/ wins over ~/.localkin/souls/. Pairs with kinclaw 1.12's install.sh change which actively rm -rfs the legacy family-dir copy. Edit a soul, make kill && make run, effect is live.

KINCLAW_SOUL_DIRS + SEARXNG_ENDPOINT env injection

KinClawSupervisor now sets both env vars when spawning the kinclaw helper subprocess so .app-launched helpers see what shell-launched helpers see. SearXNG endpoint reads from Settings UI (@AppStorage kinclaw.backend.searxng) → process env override → hardcoded localhost:8080 default.

"New session" really means new

startNewSession() now POSTs /api/session/reset to kinclaw in Cowork mode. Previously only cleared client-side UI, server kept the prior turn's tape, mid-task tool-call loops bled into "你好".

TodoChecklistView decode fix

TodoItem.activeForm is now Optional with computed-property fallback to content. Pairs with kinclaw 1.12's optional-activeForm change. Without this Swift fix, Chinese todos (no continuous-tense form) degraded to generic blue tool-call pills.

Pairs with

  • kinclaw v1.12.0 — detached spawn, session reset endpoint, SearXNG, soul cleanup

See CHANGELOG.md for the full breakdown.