Open
Conversation
Reverse reducer output before passing to inverted FlatList so messages display in correct chronological order (oldest at top, newest at bottom). Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Public share is read-only, so interactive option buttons should not be displayed. Thread readOnly prop through MessageView to MarkdownView and skip rendering option blocks when hideOptions is set. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Pass owner data through ConsentRequiredError so the sharer info card displays reliably on the consent screen - Sort messages by createdAt instead of relying on reducer insertion order, fixing title-change events always appearing at the top - Add floating style variant for OwnerCard on consent screen (rounded corners, no bottom border) Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
gitStatusSync only searched own sessions, never sharedSessions. Fix getLiveSessionForProject to also look up shared sessions, and include sharedSessions keys in all invalidateForSessions calls. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Add isShared field to sessions API (computed from direct shares and public links) and display a share icon in the session list status row, so users can see which sessions they've shared with others. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Show agent description as subtitle and collapse with minimal mode. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace full-width dividers with inset dividers across all session lists (SessionsList, ActiveSessionsGroup, ActiveSessionsGroupCompact) - Add pull-to-refresh to InboxView (all states: loading, empty, content) - Add pull-to-refresh to SessionsList via refreshSessions - Add sync.refreshInbox() method for parallel feed/friends refresh - Adjust UserCard and FeedItemCard icon spacing Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
将好友操作按性质拆分为正向操作和破坏性操作两组: - 正向操作(申请好友、接受请求)放在资料卡片下方突出位置 - 破坏性操作(移除好友、拒绝请求、取消请求)沉底显示 - GitHub 链接和共享会话居中展示 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Shared users couldn't see tool permission approval buttons because: 1. Server API didn't return agentState for shared sessions 2. Client hardcoded agentState to null on initial load 3. Storage layer only checked owned sessions for agentState 4. Real-time agentState updates didn't trigger message reprocessing Fix: return agentState from server, decrypt on client, add sharedSessions fallback in reducer lookup, and reprocess messages when agentState updates arrive for shared sessions. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- 新增 useSharedSessionListViewData hook,将共享会话按活跃/日期分组 - SessionsList 添加 chip 样式 filter tab,有共享会话时显示 - 切换 tab 时自动切换数据源,共享会话清空时自动回到全部 - 新增 common.all 翻译键(10 种语言) Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
当用户权限为 view 或 edit 时,快速操作内所有菜单项都不可见, 此时隐藏整个「快速操作」区域,避免空标题显示。 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
减少屏幕外视图的内存占用,优化长列表切换 tab 时的性能。 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
在 SessionsList 和 ActiveSessionsGroup 中,当会话有 ownerProfile 时 显示分享者的头像,而非通用的分享图标,方便用户识别分享来源。 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
…ission mode 三个 storage 函数(updateSessionDraft, updateSessionPermissionMode, updateSessionModelMode)只在 state.sessions 中查找会话,但共享会话 存储在 state.sharedSessions 中,导致操作静默失败。 现在三个函数都会同时检查两个存储,并更新对应的存储。 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
共享会话未注册到 projectManager,导致 useSessionProjectGitStatus 查找失败。同一项目多个共享会话中,只有被 gitStatusSync 选中 执行 fetch 的那个会话有数据(通过 sessionGitStatus 直接存储), 其他会话无法通过 projectManager 获取共享的 git status。 修复:在 applySharedSessions/addSharedSession 时注册到 projectManager, 并在 applySessions 的 updateSessions 调用中包含共享会话。 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
在共享会话中,用户消息气泡上方显示发送者名称,方便区分不同用户发送的消息。 - 服务端:SessionMessage 新增 sentBy/sentByName 字段,创建消息时存储发送者快照 - 服务端:API 响应和 socket 广播包含发送者信息 - 客户端:消息管道全链路传递 sentBy/sentByName(解密→归一化→reducer→Message) - 客户端:共享会话的 user-text 消息上方显示发送者名(当前用户显示"你",连续同一发送者只显示一次) Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
…LI improvements Add session sharing section to READMEs and changes-from-happy docs, update DooTask with in-app task/project creation, add CLI self-upgrade and version commands, and include recent bug fixes for sharing, DooTask, and performance. Update Version 6 date to 2026-03-04 and regenerate in-app changelog.json. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
隐藏非活跃会话时,"Shared with me" 区域不再被整体过滤掉。 共享会话中的非活跃会话仍会被隐藏,且当无活跃共享会话时不显示空标题。 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Server: add POST/GET/DELETE /v1/connect/dootask endpoints with encrypted storage - Client: sync profile to server on login, delete on disconnect - Client: restore profile from server on startup if missing locally - Client: refresh DooTask token on app foreground (throttled to 1h) Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Support macOS LaunchAgent (user-level) and Linux systemd user service for daemon auto-start on login. No sudo required. - `happy daemon enable` installs and starts the service - `happy daemon disable` stops and removes the service - `install`/`uninstall` kept as aliases for backward compatibility - Pre-flight check: requires `happy auth login` before enabling Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
The reducer skipped applying answers from completedRequests when permission.date was already set by tool results. Since tool results never carry answers, this caused them to show as "-" after reopening. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Replace Socket.IO RPC with POST /v1/sessions/spawn for session creation, unifying the API style with message sending. Server proxies the request to the daemon via invokeUserRpc, keeping E2E encryption intact. - Server: new POST /v1/sessions/spawn route with machine ownership check - App: new machineSpawnHTTP method on ApiSocket (35s client timeout) - App: machineSpawnNewSession now calls HTTP instead of Socket RPC Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Add "shared by me" section to user profile page, complementing the existing "shared with me" section. Users can now see both directions of sharing with a friend. - Add GET /v1/sessions/shared-by-me?withUserId=X server endpoint - Add fetchSessionsSharedByMe() client API function - Display two separate ItemGroups on user profile: "shared with you" and "you shared" (hidden when empty) - Add translations for all 10 languages Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
…ing git button Add a Pressable between the left icon group and right icon group that captures taps on the empty middle area and focuses the text input. Previously, GitStatusButton's flex:1 made its hit area extend across the entire empty space. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Move GitHub link from ItemGroup to icon in profile card top-right corner - Move destructive actions (remove friend, cancel request) to header right ellipsis menu with ActionSheet on iOS and ActionMenuModal on Android/Web, preparing for future menu items - Fix hooks ordering to ensure all hooks run before early returns Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Load cached data from MMKV immediately on mount, then silently refresh from the API and update the cache. This avoids a blank state when revisiting a friend's profile. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Extract data loading into reusable callback, add RefreshControl to ItemList so users can pull down to refresh profile and shared sessions. Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
…cture - Use "prerequisite" and "execution order only" in dependsOn description to reduce data-flow inference by AI models - Move data-passing guidance from parameter description to system prompt (WHAT vs HOW separation per MCP best practices) - Restructure orchestrator prompt as numbered workflow list for better instruction adherence across Claude/Codex/Gemini - Add CRITICAL prefix and "Normal flow" pattern to strengthen anti-polling directive
Thread the seq field from raw messages through normalization, reducer, and output types so it is available on every Message variant. Use seq as a secondary sort key when createdAt timestamps are identical, and rebuild the merge map with new messages first to preserve insertion order.
Add real-time polling for active orchestrator runs using the pend API with long-polling, backed by an MMKV-persisted run state cache with stale-while-revalidate semantics. Refactor MCPToolView to cache runId/taskId→title mappings from orchestrator_submit results, allowing pend/cancel/send_message tool views to display human-readable titles instead of raw IDs. Convert formatMCPSubtitle to a useMCPSubtitle hook to support reactive cache lookups and side-effect-based title caching.
…i18n web modals - Remove empty optionItemRecommended/optionItemDestructive border styles - Destructive confirmation takes priority over old-option confirmation (single dialog) - Replace hardcoded 'Cancel'/'OK' in WebAlertModal and WebPromptModal with t() calls
… messages Add batch orchestrator activity API endpoint and integrate it into the session list to display running task count badges. Also show a loading indicator on orchestrator_submit tool messages when dispatched tasks are still in progress. - Server: add GET /v1/orchestrator/activity/batch for bulk activity fetch - Client: fetch batch activity alongside session list load - UI: add task count badge to session list items (SessionsList + ActiveSessionsGroup) - UI: show ActivityIndicator on completed orchestrator_submit messages
…inner flex-start - Add optionsInner wrapper with alignSelf flex-start + maxWidth 100% so options size to content but don't overflow screen - Stretch agentMessageContainer when message contains options to prevent container collapse when no text content - Use flexShrink instead of flex on optionText to avoid zero-width collapse on mobile - Remove empty optionItemRecommended/optionItemDestructive border styles - Deduplicate destructive confirm: skip old-option dialog for destructive
…enforce minimum interval
…y index for precise spinner matching Server activity endpoints and ephemeral events now return a per-run map of active task IDs instead of a single running count. On the app side, each orchestrator_submit tool message extracts its own runId from the tool result and only shows a spinner when that specific run is still active — eliminating false spinners when unrelated orchestrator runs are in progress.
…licker Extract a scrollButtonVisibilityController that delays showing the button by 300ms while hiding immediately, preventing brief flashes during fast scrolling or content layout shifts.
…ference Replace the explicit `recommended` badge on options with implicit ordering — the first option is now treated as the best choice. This simplifies the prompt contract, removes UI badge code + styles, and drops the `optionRecommended` i18n key from all locales.
…l with hint
Condense the 5-step orchestrator workflow instruction to 3 steps.
Change submit response `next` field from `{ tool: 'orchestrator_pend' }`
to `{ hint: 'Wait for <orchestrator-callback>...' }` so the AI waits
for the callback instead of proactively polling.
… no recipients When emitEphemeral returns 0 deliveries for a run-terminal event, write a feed post so the user is aware the orchestrator callback was not delivered (e.g. session disconnected).
…meout Log structured warnings when executions are detected as stale in dispatching state or timed out while running, aiding diagnosis of scheduler recovery actions.
…lt formats
parseToolResult in MCPToolView and orchestratorRunId only handled array and
string formats, missing the {content: [{type:'text', text}]} MCP standard
format. Extract a shared parseMcpResult utility that covers all five shapes
and replace the three duplicated parsers.
Gateway's sessions.list filters out global sessions by default; pass includeGlobal: true so the machine detail page shows all session types.
Server: - Add `badge` and `meta` fields to UserFeedItem schema + migration - Add `notice` kind to FeedBody discriminated union - Add PATCH /v1/feed/:id/read endpoint to clear badge - Add CORS support for PATCH method - Propagate badge/meta through feedPost, feedGet, and socket events - Orchestrator: post notice with rich content and meta.links when callback has no session-scoped recipients App: - Add notice case to FeedItemCard with badge dot and navigation - Add notice detail page at /inbox/notice/[id] with mark-as-read - Render meta.links as generic navigation buttons in detail page - Add useFeedHasBadge hook and markFeedItemRead to Zustand storage - Include feed badge in useInboxHasContent inbox dot calculation - Add i18n keys for noticeDetail/noticeNotFound (11 languages)
…en card layout - Add prompt field to server task query and API response - Add prompt and outputText to app-side type definitions - Display prompt and full AI output on task detail page - Replace nested card-in-card pattern with flat section labels - Add i18n keys for prompt and full output across all 10 languages
…json Projects lacking a sessions-index.json file (or missing originalPath in it) were silently skipped, hiding all their sessions. Derive a best-effort path from the project directory name instead of skipping.
Use machine's displayName instead of raw hostname in EmptyMessages, falling back to session host when no custom name is set. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace simple truthy check with hasResultContent() helper that properly handles empty strings, empty arrays, empty objects, and null/undefined, preventing false positive "has result" display for tools that return empty-ish values. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ear deadlock After /clear, the CLI returns without ever triggering thinking=true, leaving awaitingTurnStart permanently stuck as true. This caused all subsequent messages to be queued as pending, and using "Send Now" would abort the newly dispatched message. Fix by clearing awaitingTurnStart when a thinking=false heartbeat arrives, and treating the awaitingTurnStart→cleared transition as turnEnded so pending messages are auto-dispatched. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…erminal and machine-status Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
JSON.stringify(new Error(...)) returns {} because Error properties are
non-enumerable. Handle Error instances explicitly in logToFile to output
the message and stack trace.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…options - Add composite ModelMode pattern for Claude reasoning effort (low/medium/high/max) - Wire reasoning effort through message pipeline: app → CLI → Claude Code --effort flag - Add Fast Mode toggle for Opus 4.6 (only supported model), fix lightning icon persisting when switching to non-Opus models - Add Opus 4.6 (1M) and Sonnet 4.6 (1M) as selectable model options, mapping to Claude Code CLI's [1m] suffix convention - Fix getMaxContextSize to handle Claude composite modes and -fast suffix - Default context remains 200K; 1M is opt-in Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.