kazahana v3.4.0
What's New / 新機能・変更点
English
This release brings full client-side support for Bluesky's group chat feature, which the official client launched in v1.124.0 (released 2026-06-10). All four implementation phases from the cross-platform handoff are now complete on Desktop.
✨ New Features
Receiving and viewing groups (Phase 1)
groupConvorendering — Group name, member count, lock status, and a group default avatar appear alongside existing 1:1 DMs in the conversation list. Last-message previews distinguish betweenMessageView/DeletedMessageView/SystemMessageView.- System message timeline — A new
SystemMessage.tsxrenders all 12 system message variants (member join / leave / added / removed, lock / unlock / permanent lock, group edit, join link create / edit / enable / disable). Member DIDs resolve againstconvo.members, with a short DID fallback when unresolved. - Group join link card — A new
JoinLinkEmbed.tsxrenderschat.bsky.embed.joinLink#viewwith separate states for active / disabled / invalid. acceptConvo/leaveConvo— Implemented via new hooks. Leave confirmation copy switches to "Leave this group?" for group convos.listConvoRequests— Unified incoming + outgoing requests view replaces the previouslistConvos status:requestflow.- Lock-aware composer — Locked groups hide the message input and display a notice.
locked-permanentlyshows distinct copy.
Joining via invite link (Phase 2)
- In-app routing of
bsky.app/chat/<code>— A newresolveInAppRoute()helper rewrites Bluesky invite URLs that appear in post rich-text facets, OGP cards, and chat message links into the internal/chat/:coderoute. JoinLinkViewpreview screen — Mounted at/chat/:code. CallsgetJoinLinkPreviewsand displays group name, member count, owner, join CTA, and a live status banner.requestJoinflow — Onstatus: joinedthe user is taken directly into the new conversation; onstatus: pendinga "request sent" banner appears. Six errors (ConvoLocked,FollowRequired,InvalidCode,LinkDisabled,MemberLimitReached,UserKicked) are mapped to localized messages.withdrawJoinRequest— Pending requests can be withdrawn from the preview screen.
Owner operations (Phase 3)
- New group creation modal — Group name (≤50 graphemes) plus member selection (≤49, powered by
searchActorsTypeahead). SevencreateGrouperror conditions are localized. - Group settings screen —
/messages/:convoId/settingscovers name edit, paginated member list, member add/remove, lock toggle, and leave. Owner role is resolved fromconvo.membersGroupConvoMember.role. - Invite link management — Create / edit (
joinRule+requireApproval) / enable / disable / copy / open-in-browser, all integrated into the settings screen. - Join request approval screen —
/messages/:convoId/requestslists join requests with approve / reject actions; opening the screen auto-marks requests as read viaupdateJoinRequestsRead. - Send-join-link hook —
useSendJoinLinkMessageis available; the chat picker UI is not yet implemented, so sharing is currently done by pasting the invite URL as plain text (still resolves in-app). - Entry points — A stacked "New group" FAB appears in the messages screen; the empty DM list state also offers a "New group" button.
Privacy preferences (Phase 4, new in this release)
allowGroupInvitessetting UI — A new Chat section in the Settings screen lets you choose who can invite you to group chats: Everyone / People you follow / No one.chat.bsky.actor.declarationpersistence — Reads and writes theselfdeclaration record on your PDS, preserving any existingallowIncomingvalue (defaulting it to"all"when no record exists so the lexicon's required field is satisfied).
🌐 i18n (11 languages)
- Five new keys for the Chat privacy section (
settings.chatPrivacy,settings.allowGroupInvites,settings.allowGroupInvitesOption.{all,following,none},settings.allowGroupInvitesHint,settings.allowGroupInvitesError) across de / en / es / fr / id / ja / ko / pt / ru / zh-CN / zh-TW. Earlier phases also addedmessages.joinLink.*keys in ja / en.
🔧 Maintenance
@atproto/apiupgraded from^0.20.11to^0.20.14to pull in the full set ofchat.bsky.group.*codegen,chat.bsky.embed.joinLink,groupConvo, andsystemMessageViewtypes.- CI/CD — The macOS Tauri build matrix was removed from
.github/workflows/release.yml. GitHub Actions now builds Windows binaries only; macOS users should install the Mac App Store version (Catalyst build fromkazahana-ios).
📚 References
- HANDOFF_kazahana-group-chat.md — Cross-platform implementation handoff
- Bluesky social-app v1.124.0 release
- atproto PR #4854 — group chat lexicons
- chat.bsky lexicons (atproto/main)
日本語
このリリースで、Bluesky 公式 v1.124.0(2026-06-10 リリース)で正式公開されたグループチャット機能のクライアント側対応が完了しました。クロスプラットフォーム HANDOFF に定義された 4 つの実装フェーズすべてが Desktop で完走しています。
✨ 新機能
受信・表示(Phase 1)
groupConvo表示 — 会話一覧で既存の 1:1 DM と並べてグループ名・メンバー数・ロック状態アイコン・グループ用デフォルトアバターを表示。lastMessage のMessageView/DeletedMessageView/SystemMessageViewをそれぞれ別プレビューで描画します。- システムメッセージのタイムライン描画 — 新規
SystemMessage.tsxで 12 種すべて(メンバー追加 / 削除 / 参加 / 退出 / ロック / アンロック / 永続ロック / グループ名編集 / 招待リンク作成・編集・有効化・無効化)に対応。メンバー DID はconvo.membersから解決し、未解決時は短縮 DID を表示します。 - グループ招待リンクカード — 新規
JoinLinkEmbed.tsxがchat.bsky.embed.joinLink#viewを描画。有効 / 無効化済み / 不正の 3 状態を区別表示します。 acceptConvo/leaveConvo— 新規フック追加。退出確認ダイアログは group 時に「グループから退出しますか?」へ自動切替されます。listConvoRequests— incoming + outgoing 統合の参加リクエスト一覧。旧listConvos status:request方式は廃止しました。- ロック対応の入力欄 — ロック中のグループはメッセージ入力欄を非表示にし「このグループはロックされています」を表示。
locked-permanentlyは別文言で区別します。
招待リンクからの参加(Phase 2)
bsky.app/chat/<code>の in-app 解決 — 新規resolveInAppRoute()ヘルパーで、投稿のリッチテキスト facet・OGP リンクカード・チャットメッセージ内のリンクに含まれる Bluesky 招待 URL を内部ルート/chat/:codeへ書き換えます。JoinLinkViewプレビュー画面 —/chat/:codeに紐付け。getJoinLinkPreviewsを呼んでグループ名・メンバー数・オーナー・参加 CTA・状態バナーを表示します。requestJoinフロー —status: joined時は新しい会話画面へ自動遷移、pending時は「申請を送信しました」バナーを表示。エラー 6 種(ConvoLocked/FollowRequired/InvalidCode/LinkDisabled/MemberLimitReached/UserKicked)はローカライズ文言にマッピング済みです。withdrawJoinRequest— 保留中の参加申請をプレビュー画面から取り下げ可能。
owner 操作(Phase 3)
- 新規グループ作成モーダル — グループ名(≤50 grapheme)+ メンバー選択(≤49 名、
searchActorsTypeaheadベース)。createGroupの 7 種エラーをローカライズ表示します。 - グループ設定画面 —
/messages/:convoId/settingsでグループ名編集・メンバー一覧(ページング)・追加・削除・ロック切替・退出を一元化。owner 判定はconvo.members内のGroupConvoMember.roleで行います。 - 招待リンク管理 — 作成 / 編集(
joinRule+requireApproval)/ 有効化 / 無効化 / コピー / ブラウザで開く、すべて設定画面に統合。 - 参加申請承認画面 —
/messages/:convoId/requestsでlistJoinRequestsの一覧表示と承認・拒否操作。画面オープン時にupdateJoinRequestsReadで自動既読化します。 - 招待リンク embed 送信フック —
useSendJoinLinkMessage追加。チャット選択ピッカー UI は未実装ですが、当面は招待 URL を通常テキストとして貼ることで in-app 解決経由で参加 UI に到達できます。 - エントリーポイント — メッセージ画面の FAB に「新規グループ」ボタンを追加(既存 DM 用 FAB の上に積層)。DM リスト空状態にも併設。
プライバシー設定(Phase 4・本リリースの新規実装)
allowGroupInvites設定 UI — 設定画面に「チャット」セクションを新設し、グループ招待を受け取る相手を 全員 / フォロー中の人のみ / 誰からも受け取らない から選択できます。chat.bsky.actor.declarationへの永続化 — ユーザーの PDS 上のself宣言レコードを読み書きします。既存のallowIncoming値は保持し、未登録時は lexicon 必須フィールドを満たすため自動的に"all"を補完します。
🌐 多言語対応(11 言語)
- チャットプライバシーセクション用の新規キー 5 種(
settings.chatPrivacy/settings.allowGroupInvites/settings.allowGroupInvitesOption.{all,following,none}/settings.allowGroupInvitesHint/settings.allowGroupInvitesError)を全 11 言語(de / en / es / fr / id / ja / ko / pt / ru / zh-CN / zh-TW)に追加。先行する Phase でmessages.joinLink.*キーも ja / en に追加済みです。
🔧 メンテナンス
@atproto/apiを^0.20.11→^0.20.14にアップデート。chat.bsky.group.*17 endpoint の codegen、chat.bsky.embed.joinLink、groupConvo、systemMessageView等の新規型をすべて取り込み。- CI/CD —
.github/workflows/release.ymlから macOS Tauri ビルドマトリクスを撤去。今後 GitHub Actions は Windows バイナリのみをビルドします。macOS 利用者は Mac App Store 版(kazahana-iosCatalyst ビルド)をご利用ください。