Skip to content

Releases: chuk-development/chuk_chat

Chuk Chat v1.0.106

Choose a tag to compare

@github-actions github-actions released this 22 Jun 14:44

New Features

  • M3E morph spinner as a unified streaming loading indicator (4ed2a1e)
  • Diff view for notes/artifact updates in chat (de3dd33)
  • Android: prompt to disable battery optimization for streaming (cf4c240)

Bug Fixes

  • Tool loop: never lose the answer in the fact-check pass; stop hiding content as reasoning (8747887)
  • Merge consecutive tool-call rounds into one block (5159678)
  • Move diff into the tool card + add word-level intra-line highlighting (6a4f5a5)
  • Diff: VS Code style + correct intra-line word diff (cb06a51)
  • Diff: VS Code hunk view + drop redundant notes args (8c4eaca)

Performance

  • Send: cache system prompt in memory, drop per-send Supabase fetch (aaadb6b)
  • Net/UI: reuse pinned WS client + coalesce streaming UI updates (04d33a1)
  • Net: pre-warm chat socket to cut first-response latency (8ba9be0)
  • Chat: O(1) cache lookup on chat open, kill mobile loading flash (8818363)

Refactors

  • Net: remove legacy /v1/ai/chat/ws path, force a single multiplex socket (f16e159)
  • UI: fold final-pass reasoning into the one tool bar (83118bd)

Styling

  • Diff: flat transparent header, drop blue tint (8dd3cd2)

Dependencies

  • Upgrade resolvable packages to latest within the SDK ceiling (5aea4a5)

Maintenance

  • Bump version to 1.0.106 (e5ca782)

Full changelog: v1.0.105...v1.0.106 (commit range v1.0.105..v1.0.106)

Chuk Chat v1.0.105

Choose a tag to compare

@github-actions github-actions released this 12 Jun 22:02

Performance

  • Faster replies on weak mobile networks. During a multi-step turn (e.g. a question with an attached image plus a web search), large content — especially images — was re-uploaded in full on every step, which could stall the response for a minute or more on a poor connection. Tool results and images are now uploaded once and referenced thereafter, cutting repeated megabyte uploads to a tiny reference. (4270a84)
  • Tougher reconnection on flaky connections. A dropped streaming connection mid-turn now retries several times with backoff instead of giving up after one attempt. (aadaca7)

Bug Fixes

  • The model's second reasoning block no longer disappears. After a tool call (like a web search), the model's follow-up reasoning before the final answer was silently dropped; it now shows as its own card. (aadaca7)
  • Onboarding tour shows once per user, not once per device. (644827b)

Maintenance

  • Windows: silence experimental/coroutine STL1011 error on VS 2026. (8fbd7c5)
  • Windows: set CMAKE_POLICY_VERSION_MINIMUM=3.5 for the pdfium build. (7724198)
  • Update session/dev notes. (17ab589)

Full changelog: v1.0.104...v1.0.105

Chuk Chat v1.0.104

Choose a tag to compare

@github-actions github-actions released this 12 Jun 14:28

Chuk Chat v1.0.104

New Features

  • Notifications: clearer Android notifications — title shows the chat name, expandable body with full preview, brand-blue icon/title tint + LED, and auto-dismiss when tapped (c07cab2)
  • Brand: wordmark rendered from a frozen SVG instead of text, extended with the "Private and Secure. Always." slogan (eaf17f0, 4d46ed1)
  • Artifacts: unified Open + Download across sent files and artifacts; HTML now renders via the browser on slim Linux (Repair button dropped) (92f65ce, ed37b5e)
  • Chat: merged the reasoning toggle and model selector into a single pill on desktop (2e4ad76); right-click / long-press to delete an image from a chat (d301c25); "Image deleted" state for 404'd image tiles + pending-image placeholder (16b6d60)
  • Images: single generate_image tool with model selector (537f141); generating grid + loader clarity with faster display (d6f9d2d); pending placeholder + persisted metadata (99a281c); per-model privacy warning for no-retention generators (2429cfe); show which generator model produced each image (af3baba)
  • Prompt/Tools: search_chats always available with generalized prior-chat triggering (d8649b5, 328a8bb); self-verification pass before tool-grounded answers (9a6a37b)
  • Auth: stamp client platform into metadata on password change (8345226)

Bug Fixes

  • Chat rendering: fold tool-loop chain-of-thought out of the answer body (2876cf0); merge tool-call rounds split by junk-only text blocks (1061498); strip bare < lines and trailing dangling < runs leaked in multi-pass turns (1358c7f, 1de7661); strip echoed <previous_tool_results> scaffolding from display (a7230f3)
  • Chat UX: reliably start at the bottom when opening an existing chat (6de5699); restore double-click word selection on desktop (b026b7e)
  • Media: thumbnails no longer wait for a scroll away-and-back to load (cbc1d0a)
  • Titles: resolve the real provider for the title model instead of an empty slug (9baac4b)
  • Model UI: strip lab prefix in the compact selector and fix provider pill width (6060197)
  • Recovery: make old-chat recovery reachable and robust (3d0d547)

Diagnostics

  • TTFT logging and collapsed duplicate debug log lines (4572542)

Dependencies

  • Upgrade dependencies to latest resolvable versions (7807053)

Full changelog: v1.0.103...v1.0.104

Chuk Chat v1.0.103

Choose a tag to compare

@github-actions github-actions released this 03 Jun 22:14

What's Changed in v1.0.103

New Features

  • 6-digit email codes replace magic links — signup confirmation and password reset now use a 6-digit code entered directly in the app instead of an email link. Works identically on web, desktop and mobile (links previously broke across devices and on certain platforms). Confirming a signup code now signs you straight in — no second login. (02601a7)

Refactors

  • Removed the now-unused password-recovery link handling path; recovery is driven entirely by the new code flow. (95a153b)

Maintenance

  • Bump version to 1.0.103. (821f717)

Full changelog: v1.0.102...v1.0.103

Chuk Chat v1.0.102

Choose a tag to compare

@github-actions github-actions released this 03 Jun 19:15

What's Changed in v1.0.102

Improvements

  • Material You now themes the whole app — when Material You is enabled, the system dynamic palette drives the entire colour scheme (accent, background and icon/foreground), not just the accent. The surface ladder and containers are re-derived from it, so a wallpaper or system-accent change re-tints the whole app. While Material You is active, the accent, icon and background pickers are replaced by a note since the system owns those colours (77cdf93).

Full changelog: v1.0.101...v1.0.102

Chuk Chat v1.0.101

Choose a tag to compare

@github-actions github-actions released this 03 Jun 13:34

What's Changed in v1.0.101

New Features

  • Material You / dynamic colour — the app now adapts to your system accent colour on Android 12+ and supported desktops (c43b237).
  • Generated images render at their real size — AI-generated images now display at their true aspect ratio (full bubble width, height capped) instead of being cropped into a fixed box, matching web-fetched images. A placeholder reserves space and shows a spinner, then smoothly resizes to the final image when it loads (6088052).
  • Queued-message indicator — sending a message while the AI is still streaming now shows a clear "queued" indicator (adbe97d).

Bug Fixes

  • Stray < above tool calls — finalized text blocks containing a lone < (a leaked Kimi K2.x tool-call token) are now stripped at render time, so the stray < line above tool-call bars no longer appears on mobile or in already-cached chats (20c2fc0).
  • Web (Docker) build — copy vendor/ before flutter pub get so the web image builds reliably (007cd14).

Privacy

  • Debug copy excludes the system prompt — the "copy debug" action no longer places the resolved system prompt on the clipboard, so sensitive or injected prompt scaffolding can't leak (6088052).

Maintenance

  • Bump version to 1.0.101 (d11e4da).

Full changelog: v1.0.100...v1.0.101

Chuk Chat v1.0.100

Choose a tag to compare

@github-actions github-actions released this 31 May 23:27

Bug Fixes

  • Chat streaming: Strip Kimi K2.x tool-call special tokens (<|tool_calls_section_begin|>) and dangling < fragments from displayed text. After the v2 WebSocket multiplex switch (v1.0.96), each tool-call round leaked a stray < into the content stream, rendering as spurious < lines above every tool-call bar (and breaking answer de-duplication). e63491b
  • Vendor: Track markdraw tools/ directory — a bare .gitignore was swallowing it and breaking CI builds. 6d64ec4

Maintenance

  • CI: Pin macOS + ARM64 Flutter to 3.41.4. eac95f7

Full changelog: v1.0.99...v1.0.100
Commit range: v1.0.99..v1.0.100 (2cac60e..a2070ce)

Chuk Chat v1.0.99

Choose a tag to compare

@github-actions github-actions released this 30 May 03:41

What's Changed in v1.0.99

New Features

  • Per-entry cost breakdown (prompt / completion / cache) in usage details
  • Surface cache-read tokens in usage details
  • Realtime cross-device sync for active models
  • Tap-to-open images in the ImageViewer with natural aspect ratio
  • Optional hex colors for stroke and fill in technical drawings
  • Native markdraw editor replaces the WebView Excalidraw renderer
  • Auto-center scene on open + dedicated center-canvas button in the artifact panel
  • Roll back artifact versions on regenerate/resend
  • Repair missing artifact snapshots (repairVersionChain)
  • Per-chat send state — send in multiple chats in parallel (ChatRuntime + ChatRuntimeRegistry)
  • AI chat search now runs 100% locally — no Supabase pulls
  • Include prior tool calls + results in API history, with a settings toggle to opt out

Bug Fixes

  • Desktop chat: right-click copy + Ctrl+C on message selection
  • Artifact panel: read-only history view with a Repair button
  • Artifact card always shows the current live version, not a message-time snapshot
  • Timestamp-fallback rollback for snapshots without a message id
  • Excalidraw editor: immutable versions, no lossy round-trip clobber, hidden markdown panel
  • Excalidraw editor: clip markdraw overlays inside the artifact panel
  • Excalidraw editor: track canvas size via LayoutBuilder for the center button
  • Artifact diff: verbose multi-match error + prefer rewrite for Excalidraw
  • Artifact edits stay inside the current version; only AI bumps a new one
  • Chat streaming: pin background snapshot to first pass + preserve mid-stream content across chat switches
  • Message bubble: drop tool-bar baked-in bottom margin

Performance

  • Instant chat switch on cache hit — no spinner flash

Refactors

  • Derive isMessageOperationInProgress from runtime
  • Named vertical-rhythm constants in the message bubble; strip hidden block margins

Style

  • Sidebar hamburger uses the same hover treatment as rail rows / mini-rail icons
  • Equal gap above/below the tool-calls bar
  • Mobile sidebar search moves to the bottom, morphs in place

Maintenance & Dependencies

  • Vendor + patch markdraw for file_picker 11 compatibility
  • pub upgrade minor versions
  • Attribute copyright to Chuk Development

Commits

  • b0e774d feat(usage): per-entry cost breakdown (prompt/completion/cache)
  • e050558 feat(image-block): tap-to-open in ImageViewer + natural aspect ratio
  • 549b531 fix(chat-desktop): right-click copy + Ctrl+C on message selection
  • 7fc4362 chore(about): attribute copyright to Chuk Development
  • 5354667 feat(technical-drawing): optional hex colors for stroke and fill
  • f6104b2 feat(model-sync): realtime cross-device sync for active models
  • 390bf85 fix(artifact-panel): read-only history view + Repair button
  • 4cfba04 feat(artifact-storage): add repairVersionChain for missing snapshots
  • 0dc320c fix(artifact-card): always show current live version, not message-time snapshot
  • da65a20 fix(artifacts): timestamp-fallback rollback for snapshots without message_id
  • 525f780 feat(excalidraw-editor): auto-center scene on open
  • 99b418e fix(excalidraw-editor): track canvas size via LayoutBuilder for center button
  • 7c81d8c feat(excalidraw-editor): add center-canvas button to artifact panel
  • dfd6ff6 fix(excalidraw-editor): clip markdraw overlays inside the artifact panel
  • 9ebeb64 fix(excalidraw-editor): immutable versions, no lossy round-trip clobber, hide markdown panel
  • c285106 feat(artifacts): roll back artifact versions on regenerate/resend
  • d617fcb fix(artifact-diff): verbose multi-match error + prefer rewrite for excalidraw
  • 97c2dae fix(artifact-edits): keep user edits inside the current version, only AI bumps
  • 3632534 chore(deps): pub upgrade minor versions
  • 775423c chore(markdraw): vendor + patch for file_picker 11 compat
  • 6e69579 feat(excalidraw): replace WebView renderer with native markdraw editor
  • 0bc7d48 fix(chat-streaming): pin background snapshot to first pass + captured copy
  • beeaab4 feat(chat-runtime): make _isSending per-chat for multi-chat parallel sends
  • 1cc25ac refactor(chat-state): derive isMessageOperationInProgress from runtime
  • 675691a feat(chat-runtime): introduce ChatRuntime + ChatRuntimeRegistry
  • 0f2141a fix(chat-streaming): preserve mid-stream content across chat switches
  • 0d979f4 feat(settings): toggle for including tool results in API history
  • 1cb33d9 feat(usage): surface cache read tokens in usage details
  • c91e963 feat(history): include prior tool calls + results in API history
  • 2347d12 feat(chat-search): make AI chat search 100% local — no Supabase pulls
  • b017e90 refactor(message-bubble): named vertical-rhythm constants + strip hidden block margins
  • b8e4414 fix(message-bubble): drop tool-bar baked-in bottom margin
  • 3c1bbf4 style(sidebar): hamburger uses same ellipse hover as mini-rail icons
  • ce91f6b style(message-bubble): equal gap above/below tool-calls bar
  • fe6437a style(sidebar-mobile): search at bottom, morphs in place
  • 1ee870e style(sidebar): hamburger uses rounded-rectangle hover like rail rows
  • 028ed59 perf(chat): instant switch on cache hit, no spinner flash

Full Changelog: v1.0.98...v1.0.99

v1.0.98 — Reply-to-AI removed

Choose a tag to compare

@github-actions github-actions released this 22 May 16:14

Removed Features

  • eb192e7 feat(chat): remove reply-to-AI feature (swipe gesture + chip + quote render)

Reply-to-AI removed

The swipe-right-on-AI-bubble gesture, the reply icon button on AI blocks, the "replying to…" chip above the composer, and the quoted-reply preview that used to render inside user bubbles are all gone. The send pipeline no longer reads or writes replyContext.

ChatMessage.replyContext stays as a nullable field on the model so existing SQLite rows still deserialise — it's just ignored from the UI layer down. Legacy chats that previously contained reply context will no longer surface the quote anywhere.

Compare: v1.0.97...v1.0.98
Range: v1.0.97..v1.0.98 (1 commit, 639 lines deleted)

v1.0.97 — Garbled-text fix, single-stream-per-chat, Brave coercion

Choose a tag to compare

@github-actions github-actions released this 22 May 15:13

Bug Fixes

  • 61207a1 fix(chat): kill double-onComplete race; one chat stream per chatId
  • 28bc4ae fix(places): coerce brave place fields defensively, no String? cast

Garbled assistant text fix (most user-visible)

After the v2/ws multiplex landed in v1.0.96, multi-pass tool-loop chats were producing character-by-character interleaved garbled text in the assistant message. Root cause: StreamingManager processed DoneEvent and onClose as two unawaited handlers; both reached their await while isActive was still true, so both fired onComplete, both recursively launched the next tool-loop pass, and both wrote into the same message buffer. Fixed by flipping isActive = false BEFORE the await in every completion path.

One active chat stream per chatId

New MultiplexSession.chatForChat tracks the in-flight chat stream per chatId. Starting a new send for the same chat cancels the previous stream (server-side cancel frame + local controller close) before opening. Title generation now waits for the main response to be idle (5 min cap) before issuing its own chat call, and passes chatId: null so it never claims the per-chat slot.

Brave restaurants defensive coercion

search_restaurants was crashing with type 'List<dynamic>' is not a subtype of type 'String?' in type cast when a Brave POI returned a list-typed string field. Both the server (_to_str helper in routers/brave.py, deployed separately on api.chuk.chat) and the client (_asString helper in map_tools.dart) now flatten lists to comma-joined strings before they hit any String? cast.

Maintenance

  • be5848a fix(release): actually bump pubspec to 1.0.96 + drop dead mirror step
  • adc2b9d fix(ci): detect existing tag on origin, not local checkout

CI release pipeline repaired

v1.0.94 / v1.0.95 / v1.0.96 all initially shipped without binaries because the workflow's existing-tag check used a local git rev-parse against an actions/checkout-shallow clone (which never has tags). Switched to git ls-remote so the check actually consults origin; removed the dead Mirror to public repo step that targeted a now-defunct chuk_chat_releases repo and turned every run red even when publish succeeded. Note: pubspec.yaml was edited locally to 1.0.96 but never committed in the v2/ws PR (git add lib/ missed it), so the v1.0.96 workflow read 1.0.95 and uploaded the v1.0.96 binaries onto the v1.0.95 release. v1.0.97 is the first release where the version on pubspec, the tag, and the uploaded binaries all match.

Compare: v1.0.96...v1.0.97
Range: v1.0.96..v1.0.97 (4 commits)