Commit graph

455 commits

Author SHA1 Message Date
iliya
dd42cf0069 fix(team): scan inbox for permission_request during provisioning
relayLeadInboxMessages only processes unread messages after
provisioningComplete, but CLI marks permission_request messages as
read after native delivery -- before our relay runs.

Move permission_request inbox scan BEFORE provisioningComplete check.
Scan ALL messages (including read=true), track processed IDs via
processedPermissionRequestIds Set on ProvisioningRun to prevent
re-emitting. Also look up both alive and provisioning runs so the
scan works during team bootstrap.
2026-03-27 23:35:52 +02:00
iliya
f2eabf3866 Merge branch 'worktree-fix-permission-request-ui' into dev 2026-03-27 20:09:09 +02:00
iliya
bdd0dc6f39 fix(team): add permission_request interception in stdout handler + diagnostic logging
- Parse raw user text for permission_request in handleStreamJsonMessage
  (covers case where permission_request arrives without <teammate-message> wrapper)
- Add [PERM-TRACE] logger.warn diagnostics to trace the exact flow:
  where permission_request is detected, whether it reaches handleTeammatePermissionRequest,
  and whether relay or stdout interception triggers
- These logs will help diagnose why ToolApprovalSheet may not appear
2026-03-27 20:09:01 +02:00
iliya
148823e284 Merge branch 'worktree-fix-permission-request-ui' into dev 2026-03-27 18:45:07 +02:00
iliya
ed1726c298 fix(team): intercept permission_request in native stdout delivery path
relayLeadInboxMessages only runs after provisioningComplete, but
teammate permission_request messages arrive during bootstrap (before
provisioning finishes). Claude Code delivers them natively via stdout
type:"user" messages, bypassing the relay entirely.

Add permission_request interception in handleNativeTeammateUserMessage
which processes stdout user messages at all times, including during
provisioning. This ensures ToolApprovalSheet appears immediately when
teammates need tool permission.
2026-03-27 18:44:58 +02:00
iliya
373f2aac9b Merge branch 'worktree-fix-permission-request-ui' into dev 2026-03-27 18:13:06 +02:00
iliya
8ea470b1ae fix(team): intercept permission_request regardless of native delivery status
When Claude Code runtime natively delivers permission_request to the
lead via stdout, the message was excluded from interception by the
nativeMatchedMessageIds filter. This caused the ToolApprovalSheet to
not appear for teammate requests.

Remove nativeMatchedMessageIds check from the permission_request
filter so interception works even for natively delivered messages.
2026-03-27 18:12:58 +02:00
iliya
085147ffc0 Merge branch 'worktree-fix-permission-request-ui' into dev 2026-03-27 17:56:08 +02:00
iliya
924bcd8b99 fix(team): render teammate permission requests in ToolApprovalSheet instead of raw JSON
When auto-approve is disabled, teammate tool requests arrived as
permission_request JSON via SendMessage and rendered as "Raw JSON"
with no way to approve/deny (#29).

- Intercept permission_request in lead inbox relay, convert to
  ToolApprovalRequest and show in existing ToolApprovalSheet
- Respond via teammate inbox (permission_response) + control_response
  via stdin as fallback
- Show teammate name in approval header (e.g. "bob — Bash")
- Compact noise label in Messages panel for permission_request/response
- Proper file locking, race condition protection, idempotency checks
2026-03-27 17:55:59 +02:00
iliya
507bf798eb improvement(task-change): improve task change presence tracking and related IPC handlers
- Added support for tracking task change presence with new IPC channels: TEAM_GET_TASK_CHANGE_PRESENCE and TEAM_SET_CHANGE_PRESENCE_TRACKING.
- Introduced JsonTaskChangePresenceRepository and TeamLogSourceTracker to manage task change presence data.
- Enhanced ChangeExtractorService to utilize task change presence services for improved task change detection.
- Updated TeamDataService to integrate task change presence tracking and resolve task change presence states.
- Modified UI components to reflect task change presence status in Kanban and task detail views.

This feature aims to provide real-time insights into task changes, enhancing user experience and task management capabilities.
2026-03-27 17:52:39 +02:00
iliya
e1413a32bd Guard renderer IPC sends during crash recovery 2026-03-27 17:07:40 +02:00
iliya
344bf41fe5 fix(updater): verify platform asset exists before showing update notification
HEAD-request the expected installer URL (DMG/EXE/AppImage) before
notifying the user about a new version. If CI hasn't finished
uploading the artifact for the current OS yet, the notification is
suppressed and retried on the next periodic check.
2026-03-26 00:50:12 +02:00
iliya
c7ee51884d Merge branch 'worktree-upstream-merge' into dev 2026-03-25 15:44:54 +02:00
iliya
bd90de8e81 fix(team): notify lead on task create with startImmediately
Extract sendUserTaskStartNotification as reusable private method.
When a task is created via UI directly in "In Progress" column
(startImmediately=true), the controller's maybeNotifyAssignedOwner
skips the lead. Now createTask sends the notification to the lead
with full description, prompt, and task_get instructions.
2026-03-25 15:03:44 +02:00
iliya
141d0e22d9 feat(team): implement startTaskByUser functionality
- Added a new IPC handler for starting tasks triggered by users, ensuring that the task owner is always notified.
- Introduced `startTaskByUser` method in `TeamDataService` to handle task initiation and notifications.
- Updated relevant components and API interfaces to support the new functionality, including changes in the UI to call `startTaskByUser` instead of the previous `startTask`.
- Documented agent block usage for internal instructions in CLAUDE.md.

This enhancement improves user interaction with task management by providing a clear mechanism for user-initiated task starts.
2026-03-25 14:47:27 +02:00
iliya
c21350713c perf: replace remark-based search with plain text indexOf
Manually ported from upstream 5c7f921e. Key changes:
- SessionSearcher: indexOf instead of remark AST, batch size 8→16
- conversationSlice: indexOf with MAX_SEARCH_MATCHES=500 cap
- Item-scoped store selectors (searchMatchItemIds Set) to skip re-renders
- Pre-filter in markdownTextSearch (skip parse if no raw match)
- SearchTextCache: 200→1000 entries
- ProjectScanner: 30s search project cache, batch 4→8
2026-03-25 14:32:37 +02:00
iliya
b87082a915 fix: requestId dedup to prevent ~2x cost overcounting + stale session detection
Manually ported from upstream:
- ef2e0868: deduplicate streaming JSONL entries by requestId
- 4f21f267: mark stale ongoing sessions as dead after 5min inactivity
2026-03-25 14:05:01 +02:00
iliya
aaa766b2ba perf: replace 8 filter passes with single-pass message categorization
Cherry-picked from upstream 9fa2590e
2026-03-25 13:59:03 +02:00
iliya
4946a65a7b feat: cherry-pick upstream CollapsibleOutputSection + TriggerMatcher regex cache
Cherry-picked from upstream:
- 516d0f6b: CollapsibleOutputSection with markdown preview toggle
- e51c1fd1: cache compiled regexes in TriggerMatcher (perf)
2026-03-25 13:58:38 +02:00
iliya
7324b5236d fix(team): update tool references from Task to Agent in provisioning messages
- Changed references in messages to use the **Agent** tool instead of the Task tool for spawning teammates.
- Added warnings for missing team_name to ensure agents are persistent rather than ephemeral.
- Updated documentation within the code to reflect the new requirements for spawning teammates.
2026-03-25 13:38:26 +02:00
iliya
b8aa2d9f14 fix(auth): enrich PTY env and invalidate status cache after login
- Use buildEnrichedEnv() in PtyTerminalService so login terminal gets
  full PATH (Homebrew, nvm, etc.) and USER for Keychain lookup
- Add cliInstaller:invalidateStatus IPC to clear cached auth status
  after successful login, preventing stale "not logged in" responses
- Show "Verifying authentication..." spinner instead of flashing
  the "Not logged in" banner between modal close and status refresh

Ref #27
2026-03-25 13:36:12 +02:00
iliya
60d80cde70 fix(auth): avoid setting CLAUDE_CONFIG_DIR when it matches default path
On macOS, the Claude CLI uses a Keychain namespace derived from the
presence of CLAUDE_CONFIG_DIR env var. Setting it to the default
~/.claude creates a different Keychain key than when the var is absent,
causing "not logged in" errors even after successful `claude auth login`.

Only set CLAUDE_CONFIG_DIR when the user has configured a custom path
that differs from the auto-detected default.

Fixes #27
2026-03-25 12:23:57 +02:00
iliya
896c749e76 fix: add recursive option to fs.rm for directory removal
fs.rm() without { recursive: true } throws ERR_FS_EISDIR on directories,
unlike the deprecated fs.rmdir() which handled empty dirs. Also fix
broken roadmap bullet in README.
2026-03-24 21:43:43 +02:00
iliya
08be8590da fix: electron 28→40 migration fixes
- Replace deprecated fs.rmdir with fs.rm (Node 22+ deprecation)
- Update electron-builder 25.1.8 → 26.8.1 (required for Electron 35+)
- Add macOS minimumSystemVersion 12.0 (Electron 38+ requirement)
- Update React 18 → 19 in README.md tech stack
2026-03-24 21:13:06 +02:00
iliya
3b65dc4e3b fix(lint): resolve import sort errors and update tech stack in CLAUDE.md
- ProjectScanner.ts, cliEnv.ts: fix simple-import-sort/imports order
- CLAUDE.md: update tech stack to Electron 40.x, React 19.x
2026-03-24 18:23:00 +02:00
iliya
94fc564bf5 feat: UI improvements, bug fixes, and protocol noise filtering
- Fix incorrect error message when attaching files to team lead while team is offline
- Kanban columns: color only on headers, body with 30% alpha tint per user preference
- Worktree projects now correctly detected on Dashboard via path-based detection
- Filter raw protocol messages (idle_notification, teammate-message) from lead thoughts
- Consistent text styles in Attachments section (From original message / From comments)
- Secondary sort for teams by lastActivity timestamp with alphabetical fallback
- Remove colored background from team cards, keep only left border
- Dynamic member color in Add Members dialog based on next available palette color
- Stylized @-mentions in task comments with colored MemberBadge
- Refactor CLI env resolution to shared utility
2026-03-24 17:47:15 +02:00
iliya
1718f9cf7c refactor(README): reorganize roadmap items for clarity and update language switcher flag icon
- Rearranged roadmap items in README.md for better organization, moving planning mode and visual workflow editor to the top.
- Updated the flag icon for English in LanguageSwitcher.vue from the US to the GB flag.
- Enhanced user environment setup in CliInstallerService.ts by adding user information retrieval.
- Improved timestamp handling in MemberLogsTab.tsx to better reflect recent activity.
- Adjusted button class names in ProvisioningProgressBlock.tsx for consistency.
2026-03-24 16:52:12 +02:00
iliya
0bc8bf1fe9 feat(landing): enhance base URL handling and improve image paths
- Introduced baseURL configuration to dynamically set asset paths in the landing components.
- Updated AppLogo and HeroSection components to use baseURL for logo image sources.
- Refactored ScreenshotsSection to utilize a publicPath function for consistent image path handling.
- Improved LanguageSwitcher to synchronize the i18n locale with the store on mount.
- Enhanced TaskCommentInput to handle file uploads more robustly, including validation for empty files and improved error handling.
- Adjusted MessageComposer to conditionally support attachments based on team status.
2026-03-23 17:51:09 +02:00
iliya
5cf9751b41 feat(attachments): update TypeScript configuration and enhance attachment handling
- Upgraded TypeScript target and library to ES2023 for improved language features.
- Enhanced TeamProvisioningService to better handle plain text attachments with UTF-8 validation.
- Improved TaskCommentInput to differentiate between image and non-image file previews, including a new FileIcon for non-image files.
- Refactored attachment handling in useAttachments and useComposerDraft hooks to simplify file processing.
- Added validation for empty files in attachmentUtils to improve user feedback on unsupported uploads.
2026-03-23 17:33:39 +02:00
iliya
b20b69066e feat(attachments): expand file support and enhance attachment handling
- Added support for additional attachment types: PDF and plain text.
- Updated the TeamProvisioningService to handle new attachment types with appropriate content blocks.
- Enhanced AttachmentDisplay and AttachmentPreview components to differentiate between image and non-image files.
- Modified DropZoneOverlay and SendMessageDialog to reflect changes in file handling and messaging.
- Improved user experience by allowing file previews for non-image attachments and updating error messages accordingly.
- Refactored attachment validation logic to categorize unsupported files and handle them gracefully.
2026-03-23 17:24:48 +02:00
iliya
ad1741f05e fix(team): enhance team member resolution and provisioning instructions
- Added logic to merge "lead" alias into "team-lead" to prevent phantom member entries in the inbox.
- Updated provisioning instructions to emphasize the importance of using the exact name for the team lead in messages, avoiding abbreviations.
- Modified default role for 'tom' from 'reviewer' to 'researcher' with updated workflow description.
- Improved UI in MemberDraftRow to indicate workflow status with a visual cue when expanded.
2026-03-23 15:37:23 +02:00
iliya
7b13a4c398 refactor: update README and enhance team UI components
- Changed image format for agent comments screenshot in README.
- Improved table of contents in README for better navigation.
- Refactored imports in IPC config and discovery services for consistency.
- Added shimmer effect for waiting members in CSS.
- Enhanced dashboard view to display active teams with online indicators.
- Updated team provisioning components to support message severity.
- Improved task detail dialog layout for related tasks and dependencies.
- Adjusted team model selector default value and refined member status handling.
- Fixed minor styling issues in messages panel and tab bar.

These changes aim to improve user experience and maintainability across the application.
2026-03-23 12:58:38 +02:00
iliya
2eac440fe2 fix(team): disable teammate DM relay through lead, read user.json directly
Teammates are independent Claude Code processes that read their own inbox
files via fs.watch. Relaying DMs through the lead caused three bugs:
lead responding instead of the teammate, duplicate messages from relay
loops, and teammates not responding to user due to conflicting prompts.

- Disable relayMemberInboxMessages for teammate DMs (teams.ts, index.ts)
- Add SendMessage(to="user") filter in captureSendMessages as safety net
- Generate deterministic messageId for inbox entries lacking one (sha256)
- Wrap notification instructions in agent block, italic task subject
- Style system comments in task view with blue background, hide avatar
- Update CLAUDE.md, research docs, and code comments with architecture
2026-03-23 12:57:16 +02:00
iliya
e005671123 feat: add Sentry error tracking and update docs
- Integrate @sentry/electron and @sentry/react for crash reporting
- Add Sentry Vite plugin for source maps
- Add error tracking to main process, renderer, and IPC layer
- Exclude source maps from packaged builds
- Update README with new screenshots
- Add Sentry opt-out toggle in settings
- Update release workflow with Sentry config
2026-03-22 17:03:15 +02:00
iliya
9e87746b81 fix(team): prohibit broadcast SendMessage to prevent phantom "*" participant
Add explicit constraint in lead prompt forbidding SendMessage with
recipient "*". The broadcast address is not supported by the runtime
and creates a phantom team member named "*" in the UI.
2026-03-22 14:18:46 +02:00
iliya
a9cdf20ca8 feat(updater): add auto-update UI with periodic checks and state guards
- Add green "Update app" / "Restart to update" button in header (TabBarActions)
- Enhance UpdateDialog: larger, dynamic buttons, scrollable release notes,
  version badge, "View on GitHub" link
- Add DashboardUpdateBanner: compact dismissible banner keyed by version
- Add periodic hourly update checks in UpdaterService with unref() timer
- Add dismissed version tracking in updateSlice (localStorage persistence)
- Add state transition guards in store listener: prevent periodic re-checks
  from resetting downloading/downloaded status back to available/checking
- Guard error events from overriding downloaded state (transient check failures)
2026-03-22 14:00:44 +02:00
iliya
be38447c97 fix(backup): detect resurrected teams with reused names
When a team was permanently deleted and a new team created with the
same name, the backup service still treated it as deleted. The old
registry entry blocked periodic backups, FileWatcher-triggered backups,
shutdown backups, and auto-restore on startup.

- discoverActiveTeams: re-activate deleted entries when valid config exists
- doBackupTeam: reset stale deleted manifest, always ensure identity marker
- doBackupTeam guard: allow resurrected teams through with config check
- doBackupTeamSync: reset deleted manifest to prevent status writeback
- reconcileResurrectedTeams: detect post-deletion backup data on init
- reconcileResurrectedTeamsSync: sync reconciliation before shutdown backup
2026-03-22 13:35:18 +02:00
iliya
60cf80f90a fix: resolve CLI binary dynamically for MCP diagnostics and extension installs
Use ClaudeBinaryResolver instead of null binary path in extension services
(McpHealthDiagnosticsService, PluginInstallService, McpInstallService).
Packaged Electron on macOS has minimal PATH — bare `claude` lookup fails
with ENOENT. Now all CLI calls resolve the binary via ClaudeBinaryResolver
which checks PATH, NVM, standard install dirs and login shell env.

- Add buildEnrichedEnv() helper for child process env (PATH, HOME, USERPROFILE)
- Add stale cache re-verification with 30s TTL in ClaudeBinaryResolver
- Guard execCli() against null binaryPath with explicit error
- Replace projectPath.startsWith('/') with path.isAbsolute() for Windows
- Extract CLI_NOT_FOUND_MARKER/MESSAGE constants for consistent error detection
- Show amber info banner instead of red error when CLI not installed
2026-03-22 13:10:11 +02:00
iliya
8616db00a0 refactor: update UI and functionality for team provisioning and progress indicators
- Revised the TeamProvisioningService to change event handling from 'Task' to 'Agent' for improved accuracy.
- Enhanced the StepProgressBar component to include error indicators and animations for better user feedback during provisioning.
- Updated the TeamProvisioningBanner to track and display the last active step in case of errors.
- Improved CSS styles for step indicators, adding new animations and error states.
- Refined the sidebar task item styling based on light/dark themes for better visual consistency.
- Adjusted the README to reflect changes in installation instructions and feature comparisons.
2026-03-21 17:43:29 +02:00
iliya
3fcab46882 refactor: enhance team provisioning progress updates
- Updated the TeamProvisioningService to advance the provisioning state to "assembling" when the first member spawn is detected.
- Improved the clarity of team setup progress tracking by refining the conditions for state transitions.
- Adjusted the README to include a new section on installation and a detailed comparison of features against other multi-agent orchestration tools.
2026-03-21 17:03:28 +02:00
iliya
6d441efa97 refactor: enhance team provisioning process and UI updates
- Updated provisioning states to include 'configuring', 'assembling', and 'finalizing' for better tracking of team setup progress.
- Refactored the provisioning progress block to utilize a new display step system, improving clarity in the UI.
- Adjusted the README to include a comprehensive table of contents and updated comparison metrics for multi-agent orchestration tools.
- Enhanced team management UI to reflect new provisioning states and improve user experience during team setup.
2026-03-21 16:47:20 +02:00
iliya
7bca2e73a6 refactor: update lead member detection and enhance team management UI
- Replaced instances of isLeadAgentType with isLeadMember for improved clarity in team member role checks.
- Updated README to include a new built-in review workflow feature for agent task reviews.
- Enhanced team detail and list views to accurately reflect current team members and their roles.
- Improved CSS for step progress indicators, adding new styles for a circular stepper.
- Refactored provisioning progress block to utilize a new StepProgressBar component for better visual representation of steps.
2026-03-21 16:05:56 +02:00
iliya
7dda73aa74 refactor: update task assignment message formatting and enhance UI elements
- Changed task assignment message to use italic formatting for task subject for better emphasis.
- Updated the task instruction message to utilize a wrapping function for improved readability.
- Enhanced splash screen background with an animated gradient for a more dynamic visual experience.
- Improved team detail view messaging to clarify provisioning status.
- Adjusted member list sorting logic to utilize a new lead member detection function.
2026-03-21 15:07:52 +02:00
iliya
020aaab1c6 feat: enable notification action buttons on Windows (not just macOS)
Electron's 'action' event fires on both macOS and Windows per docs.
Removed isMac guard — now Allow/Deny buttons appear on Windows too.
Linux excluded (libnotify doesn't fire the 'action' event).
2026-03-21 13:44:50 +02:00
iliya
95b282577f fix: notification click uses current window ref, dismiss on settings auto-allow
- Click handler reads this.mainWindowRef instead of captured closure ref,
  so window recreation is handled correctly
- reEvaluatePendingApprovals now calls dismissApprovalNotification when
  auto-allowing via settings change (was missing — stale notification stayed)
2026-03-21 13:40:02 +02:00
iliya
b3cc2f1421 fix: update mainWindowRef on window close/recreate, remove dead code
- Add teamProvisioningService.setMainWindow(null) in window close handler
- Add teamProvisioningService.setMainWindow(mainWindow) in window recreate
  Without this, notification click focused destroyed window instead of new one
- Remove unused dismissAllApprovalNotifications (cleanupRun uses per-requestId dismiss)
2026-03-21 13:37:12 +02:00
iliya
0d74619241 fix: OS notification lifecycle — dismiss on resolve, respect snooze
- Track notifications by requestId (Map instead of Set) so they can
  be dismissed individually when the approval is resolved
- Dismiss OS notification in respondToToolApproval (via UI or action)
- Dismiss OS notification on timeout auto-resolve
- Dismiss all OS notifications on cleanupRun (team stop/exit)
- Respect snoozedUntil — skip notification if user snoozed all
2026-03-21 13:34:03 +02:00
iliya
987ad96f4a feat: OS notification for tool approvals with Allow/Deny actions
When a tool needs approval and the app is not focused, show a native
OS notification with clear description (tool name + file/command).

On macOS: notification includes Allow and Deny action buttons that
respond directly without switching to the app.
On all platforms: clicking the notification focuses the app window.

New setting: notifyOnToolApproval (default: true) in notification
settings with ShieldQuestion icon toggle.
2026-03-21 13:27:39 +02:00
iliya
e837eb7db8 feat: implement draft team handling and metadata storage
- Added functionality to read draft team summaries from team.meta.json when config.json is missing.
- Introduced methods to save team-level metadata to team.meta.json during team creation.
- Updated UI components to handle draft teams, including launch and delete options.
- Enhanced error handling for draft teams in various components.
2026-03-21 12:48:18 +02:00
iliya
ab2c40d358 fix: populate team color/displayName in tool approval from config.json
syntheticRequest for team launch was missing color and displayName
fields — they only existed in TeamCreateRequest (create flow).
Now reads color and name from config.json when building
syntheticRequest, so ToolApprovalRequest always has team color.
2026-03-21 12:15:13 +02:00
iliya
a6fc7f82d3 feat: tool approval improvements — diff preview, error feedback, provisioning fix
- Add diff preview for Write/Edit tools: reads current file via new IPC
  (TEAM_TOOL_APPROVAL_READ_FILE), shows unified diff using existing DiffViewer
- Fix Allow button doing nothing: re-throw errors from store instead of
  silently swallowing, show error message in UI, add 10s safety timeout
- Fix "No active process" during provisioning: use getTrackedRunId() to
  find process in both provisioning and alive maps
- Add 5s stdin.write timeout to prevent hanging when process dies
- Add syntax highlighting for tool input preview (JSON, bash, etc.)
- Add team color/name badge from ToolApprovalRequest (works during provisioning)
- Conditionally show team badge only when user is on a different team page
- Format elapsed time as Xm Ys when over 60 seconds
- Replace native <select> with Radix UI Select in settings panel
2026-03-20 18:41:01 +02:00
iliya
6d066831eb feat: implement deduplication for concurrent server start calls
- Enhanced the HttpServer class to prevent multiple concurrent calls to the start() method by introducing a startingPromise that ensures subsequent calls await the same promise.
- Added a private doStart method to encapsulate the server startup logic.
- Updated documentation to reflect the new behavior of the start method.

- Adjusted the ActivityTimeline component to improve padding in the "No messages" state for better visual alignment.
2026-03-20 16:19:51 +02:00
iliya
01a1472e4c feat: enhance team provisioning process with pre-creation of configuration
- Updated the TeamProvisioningService to pre-create team configuration and member metadata before spawning the CLI, ensuring persistence even in case of failures.
- Modified return messages to reflect the new provisioning flow, indicating that the team configuration has been pre-created.
- Adjusted the steps in the provisioning process to streamline the creation and provisioning of teams, improving overall user experience.
2026-03-20 14:06:01 +02:00
iliya
f01defc32c feat: require task comment with results before task_complete, add task_get_comment MCP tool
Teammates must now post full results as a task comment (via task_add_comment)
before calling task_complete, then send a brief summary to the lead with
a pointer to the comment (first 8 chars of comment.id). This ensures results
are visible on the task board, not buried in ephemeral direct messages.

- Add task_get_comment MCP tool for fetching a single comment by id/prefix
- Add "save comment.id → use it in SendMessage" flow with concrete examples
- Update all teammate prompts: spawn, reconnect, assignment, briefing, task protocol
- Add task_get_comment to lead's MCP tools list with usage hint
- Optimize resolveTaskRef: fast-path for UUID (skip full dir scan)
2026-03-20 14:04:50 +02:00
iliya
ec547e0662 refactor: enhance task management protocols and UI components
- Updated task management guidelines to emphasize the importance of posting task comments before marking tasks as complete, ensuring visibility of results on the task board.
- Introduced a new notification system for team leads after task completion, summarizing key findings and linking to detailed comments.
- Improved UI components, including a new CLI checking spinner with a delayed hint and enhanced task filters to support unread/read task states.
- Refactored sidebar task item styles to visually indicate unread tasks and adjusted task sorting options to include 'unread' as a criterion.
- Enhanced settings tabs with tooltips for better user guidance and improved layout for advanced settings options.
2026-03-20 13:45:03 +02:00
iliya
1d15f5f4d9 fix: MCP server entrypoint not found in packaged builds
In packaged Electron apps process.cwd() does not point to the app
directory so the mcp-server bundle was never found. Additionally the
mcp-server dist was not included in the package at all.

Changes:
- Bundle mcp-server into a single self-contained ESM file (tsup
  noExternal + createRequire banner for CJS compat)
- Ship mcp-server/dist/index.js and package.json via extraResources
- Resolve entry via process.resourcesPath when app.isPackaged is true
- Build controller + mcp-server in prebuild so dist exists before
  electron-builder runs
- Add mcp-server/dist/index.js to CI verify steps on all platforms
- Improve error message to list checked paths for easier debugging
2026-03-20 13:21:51 +02:00
iliya
4bdfcbcb72 fix: posix PATH segments on Windows CI; sort imports for lint 2026-03-19 22:42:58 +02:00
iliya
731d15b722 fix: packaged app CLI login detection, PATH merge, IPC status cache 2026-03-19 22:41:52 +02:00
iliya
927c8b5c30 refactor: clean up legacy code and improve import statements in ApiKeyService and CliInstallerService
- Removed legacy comments and fields in ApiKeyService to streamline code.
- Updated import statements in CliInstallerService for better organization.
2026-03-19 19:10:32 +02:00
iliya
511abaa0f5 feat: enhance shell environment handling for CLI processes
- Added a pre-warming mechanism for the interactive shell environment at app startup to improve PATH resolution for CLI services.
- Introduced getCachedShellEnv function to retrieve the cached shell environment synchronously, aiding in non-blocking PATH enrichment.
- Updated buildChildEnv function to incorporate enriched PATH from the cached shell environment, ensuring reliable access to user-installed binaries.
- Refactored CLI process environment setup to utilize the binary path for more accurate environment configuration.
2026-03-19 18:51:44 +02:00
iliya
16f3fa51a3 refactor: clean up code and improve readability across multiple files
- Removed unnecessary eslint disable comments related to intentional mutations for clarity.
- Updated import statements for consistency and organization.
- Refactored regex patterns and utility functions in various components to enhance performance and maintainability.
- Improved error handling and notifications for API errors in the teams IPC module.
- Streamlined the handling of DOM mutations in the ChatHistory and other components for better readability.
- Enhanced type definitions and added utility functions to improve code structure and type safety.
2026-03-19 14:07:14 +02:00
iliya
33ba4bdeab feat: include comments in GlobalTask payload to restore notification functionality
- Updated TeamDataService to include lightweight comment metadata in the GlobalTask payload, addressing issues with task comment notifications in the renderer.
- Enhanced TeamProvisioningService with a stall watchdog to monitor CLI process responsiveness and emit warnings for extended periods of inactivity.
- Modified CreateTeamDialog and LaunchTeamDialog to ensure default values for selected model and effort are set correctly, improving user experience during team creation and launch.
2026-03-18 14:59:56 +02:00
iliya
0d0364cfd3 feat: introduce MEMBER_DELEGATE_DESCRIPTION for action mode protocols
- Added MEMBER_DELEGATE_DESCRIPTION constant to centralize the delegate instructions for action mode protocols, improving code maintainability.
- Updated buildActionModeProtocolText to utilize the new constant, enhancing clarity and reducing duplication.
- Enhanced messageStore and TeamProvisioningService to support filePath handling in attachments, improving metadata management.
- Updated type definitions to reflect the addition of MEMBER_DELEGATE_DESCRIPTION in the protocols interface.
2026-03-18 14:01:21 +02:00
iliya
a61178105b feat: add action mode protocol text builder for team members and leads
- Introduced `buildActionModeProtocolText` function to generate context-free action mode protocol text, enhancing clarity for both leads and members.
- Updated the `protocols` interface to include the new function, promoting code reuse across different components.
- Refactored existing logic in `actionModeInstructions.ts` and `TeamProvisioningService.ts` to utilize the new protocol text builder, improving maintainability and consistency.
- Enhanced type definitions to reflect the addition of the new protocol functionality.
2026-03-18 11:03:12 +02:00
iliya
71fcf88a48 feat: add process registration protocol text builder
- Introduced a new function `buildProcessProtocolText` to generate context-free protocol text for background process registration.
- Updated the `protocols` interface to include the new function, promoting code reuse across member and lead prompts.
- Integrated the new protocol text into the team provisioning service for improved operational instructions.
- Enhanced type definitions to reflect the addition of the new protocol functionality.
2026-03-18 09:36:16 +02:00
iliya
6ace707653 feat: add team launched notification and related configuration
- Introduced a new notification setting for when a team finishes launching, enhancing user awareness of team readiness.
- Updated the configuration interface and default settings to include the new notification option.
- Implemented logic to trigger the "team launched" notification within the team provisioning service.
- Enhanced validation to ensure the new setting accepts boolean values.
- Updated relevant UI components to allow users to toggle the new notification setting.
2026-03-17 15:13:37 +02:00
iliya
5ae1d4164a feat: enhance team operations documentation with additional task commands
- Added instructions for retrieving task details and listing all tasks to the team operations documentation.
- Improved clarity on task management processes within the team provisioning service.
2026-03-17 14:14:14 +02:00
iliya
72ae20bda7 feat: update review instructions and enhance team operations documentation
- Modified review request instructions to include an optional note parameter for better context during reviews.
- Added clarification flag instruction to team operations documentation, improving guidance for task management.
2026-03-17 14:10:08 +02:00
iliya
572cfab1a5 feat: enhance attachment handling and metadata management
- Added filePath to attachment metadata in various components to support file access.
- Updated saveTaskAttachmentFile and related functions to include file paths for stored attachments.
- Enhanced documentation and comments to clarify the importance of using MCP tools for task review operations.
- Improved UI components to display file paths where applicable, ensuring better user experience with attachments.
2026-03-17 13:53:29 +02:00
iliya
eacd7d82e1 feat: implement project scanning timeout and enhance metadata extraction
- Added scanProjectWithTimeout method to ProjectScanner to prevent long scans from blocking the entire batch.
- Introduced cleanup logic in metadata extraction functions to ensure proper resource management during timeouts.
- Updated logging to provide insights on scan durations and session statistics for better performance monitoring.
- Enhanced repository group fetching logic in DashboardView and DateGroupedSessions components to handle loading and error states more effectively.
2026-03-17 11:20:04 +02:00
iliya
51f8f3545c style: auto-fix import/export sorting and formatting
Ran pnpm lint:fix to resolve 220 auto-fixable lint issues.
All changes are import/export reordering — no logic changes.
2026-03-16 20:48:42 +02:00
iliya
7c6837eacd feat: add same-team native delivery dedup for lead inbox relay
3-layer dedup to prevent duplicate message delivery when CLI delivers
teammate messages both natively (<teammate-message>) and via inbox file:

Layer 1: Grace window — defer recent source-less messages (15s)
Layer 2: Fingerprint cache + one-to-one pairing — marks specific messageIds as read
Layer 3: Deduped retry timers — ensures delivery if native path fails
2026-03-16 19:17:14 +02:00
iliya
5686d60d99 feat: implement startReview functionality and enhance review state management
- Added startReview function to initiate the review process for tasks, allowing transition to the review column without requiring completed status.
- Updated getCurrentReviewState and getEffectiveReviewState functions to include 'review_started' event type for accurate review state tracking.
- Enhanced task history management by introducing a new TaskReviewStartedEvent type.
- Updated documentation and user instructions to reflect the new review process, emphasizing the importance of calling review_start before review actions.
- Improved test coverage for the new startReview functionality and its integration with existing review processes.
2026-03-16 19:08:12 +02:00
iliya
0f91698fa8 refactor: enhance task and review tools with slimTask integration
- Updated reviewTools to utilize slimTask for lightweight task representations, improving response efficiency.
- Enhanced taskTools to apply slimTaskForList for task listing, reducing data payloads.
- Introduced new slimTask and slimTaskForList functions in format utility for better task data management.
- Improved test coverage for slim task operations, ensuring accurate behavior in task handling and review processes.
2026-03-16 18:29:54 +02:00
iliya
15df012c4b refactor: streamline task handling and improve data formatting
- Updated taskTools to utilize slimTask for lightweight task summaries, reducing data bloat in responses.
- Introduced taskWriteResult function to handle task write operations more efficiently by stripping unnecessary fields.
- Enhanced jsonTextContent usage across task operations for consistent data formatting.
- Removed legacy member briefing bootstrap checks from TeamProvisioningService and related tests to simplify member spawn logic.
- Improved test coverage for task handling and member provisioning processes.
2026-03-16 18:07:22 +02:00
iliya
6798c4b9e7 feat: enhance team provisioning and message preview handling
- Updated TeamProvisioningService to include subagent type in spawn messages for clarity.
- Improved member registration checks to account for suffixed names, enhancing error handling.
- Refactored SubagentRecentMessagesPreview to strip agent-only blocks from messages, improving display clarity.
- Adjusted tests to reflect changes in message formatting and member provisioning logic.
2026-03-16 17:36:23 +02:00
iliya
cba10b8ad4 feat: enhance team provisioning with member spawn auditing and improved error handling
- Simplified member spawn event handling by removing redundant checks for missing parameters.
- Introduced a new audit function to verify registered members against expected members post-provisioning, flagging any discrepancies.
- Updated logging to provide clearer warnings for unregistered members after provisioning.
- Enhanced test cases to ensure accurate behavior of spawn handling and auditing processes.
2026-03-16 17:20:42 +02:00
iliya
48b485c637 feat: enhance message handling and UI components for task management
- Introduced stable messageId generation for reliable task creation and message tracking.
- Updated TeamAttachmentStore with a TODO for attachment cleanup on failed sends.
- Enhanced task notifications and UI components to improve user experience, including custom role rendering in RoleSelect and improved task detail displays.
- Refactored task change handling logic to support better visibility of changes across task states.
- Added support for displaying source message attachments in TaskDetailDialog.
- Improved overall code structure and documentation for better maintainability.
2026-03-16 16:48:28 +02:00
iliya
2131ad32d0 feat: add review status, all-tasks-completed and cross-team message notifications
- Detect review state transitions (kanbanColumn → review) in status change notifications
- Add "All tasks completed" notification when every task in a team reaches completed/deleted
- Add "Cross-team message" notification with separate toggle (source: cross_team in inbox)
- All three enabled by default with UI toggles in settings
2026-03-16 14:32:03 +02:00
iliya
48033ef701 feat: add task created notification type
New notification fires when agents create tasks, with toggle in settings.
Follows existing pattern: detect → fire → seed on initial load.
2026-03-16 14:01:16 +02:00
iliya
fadd4e04c5 feat: enhance task creation and message handling with exact messageId support
- Updated `lookupMessage` function to enforce exact messageId matching, rejecting ambiguous cases.
- Improved documentation for `task_create_from_message` to clarify its requirements and usage.
- Enhanced `buildAssignmentMessage` and related functions to include messageId in task notifications for better provenance tracking.
- Added tests to validate the integration of messageId in task creation and relay processes, ensuring accurate message handling.
2026-03-16 13:39:35 +02:00
iliya
baf0609595 feat: add message lookup functionality for task creation
- Introduced a new `lookupMessage` function to retrieve messages by their exact messageId from both sent messages and inbox files.
- Enhanced error handling for ambiguous messageId scenarios and missing messageId cases.
- Updated the `createTask` function to include `sourceMessageId` and `sourceMessage` fields, capturing the original message details during task creation.
- Added comprehensive tests for the `lookupMessage` functionality, ensuring accurate retrieval and validation of messages from different sources.
2026-03-16 10:46:25 +02:00
iliya
de205b13d7 fix: improve regex handling and preview limits in TeamMemberLogsFinder and MemberLogsTab
- Enhanced regex patterns in TeamMemberLogsFinder to allow for escaped sequences and increased character limits for text and content previews.
- Updated the MemberLogsTab component to prioritize recent previews over fallback mechanisms, ensuring more relevant message displays for lead users.
- Adjusted the length limit for returned previews to 1500 characters for better context in log summaries.
2026-03-15 22:17:53 +02:00
iliya
457dc13ef9 feat: enhance TeamMemberLogsFinder and MemberLogsTab for improved preview handling
- Added support for tracking and displaying recent thinking previews alongside output previews in TeamMemberLogsFinder.
- Updated the return structure of log summaries to include last thinking previews and recent previews for better context.
- Enhanced the MemberLogsTab component to utilize recent previews for lead users, improving the clarity and relevance of displayed messages.
- Implemented filtering logic for task-scoped recent previews, ensuring only relevant messages are shown based on task intervals.
2026-03-15 22:04:39 +02:00
iliya
b14cef5f09 refactor: remove remark-stringify and enhance task ID matching in TeamMemberLogsFinder
- Removed `remark-stringify` from the project to avoid ESM→CJS interop issues in Electron's main process.
- Updated the text formatting pipeline to use a custom plain-text compiler instead of `remark-stringify`.
- Enhanced task ID matching logic in `TeamMemberLogsFinder` to accommodate both full UUIDs and their short display forms, improving flexibility in task identification.
- Added comments to clarify the changes in task ID handling and regex construction.
2026-03-15 21:05:51 +02:00
iliya
a685ae3e6c feat: add remark-stringify for markdown processing and update logging in TeamMemberLogsFinder
- Added `remark-stringify` to the project for converting markdown to plain text.
- Updated the text formatting pipeline to include `remark-stringify` for improved markdown handling.
- Commented out performance logging in `TeamMemberLogsFinder` to reduce console output during execution.
- Enhanced the `getUnreadCount` and `getLegacyCutoff` functions in `commentReadStorage` to clarify legacy comment handling logic.
2026-03-15 20:18:28 +02:00
iliya
36e93abd42 feat: enhance review approval process and notification handling
- Added a `suppressTaskComment` flag to the `approveReview` function, allowing users to approve reviews without adding a comment to the task.
- Updated the `notifyNewInboxMessages` function to include additional debug logging for better tracking of inbox notifications.
- Adjusted notification settings in `ConfigManager` to enable notifications for lead inbox and change the status change behavior.
- Enhanced the `NotificationManager` to improve error handling and logging during notification display.
- Refactored `TeamDataService` to utilize the new `suppressTaskComment` feature during review approvals.
- Updated tests to validate the new approval process and notification behaviors.
2026-03-15 19:27:59 +02:00
iliya
0c0088c871 feat: add relay message ID support for improved message tracking
- Introduced `relayOfMessageId` to various message handling components, allowing for better tracking of relayed messages.
- Updated `buildMessage`, `TeamInboxReader`, `TeamInboxWriter`, and related services to accommodate the new relay ID.
- Enhanced filtering logic in `filterTeamMessages` to hide relay copies when the original message is visible, improving message clarity.
- Added tests to validate the functionality of relay message handling and ensure proper integration across services.
2026-03-15 18:10:37 +02:00
iliya
194bd1bf1e feat: enhance task messaging and member role detection
- Introduced a new function `quoteMarkdown` to format task comments with markdown quotes for better readability.
- Updated the `buildCommentNotificationMessage` to utilize `quoteMarkdown`, ensuring comments are displayed correctly.
- Refactored member role detection across multiple services to use `isLeadMember` for consistency and clarity in identifying team leads.
- Enhanced various components to improve handling of team member roles, ensuring accurate representation in UI and logic.
- Adjusted tests to reflect changes in comment formatting and member role checks, improving overall reliability.
2026-03-15 17:45:10 +02:00
iliya
2f73682ff1 merge: integrate dev branch into team-backup-service
Resolved conflicts:
- index.ts: kept dev's skills/extensions services + added backup init/hooks
- handlers.ts: kept dev's new params (mcp, skills) + added teamBackupService
- TeamProvisioningService.ts: kept dev's killTeamProcess/stopAllTeams impl
- pathDecoder.ts: kept dev's getTaskChangeSummariesBasePath + added app data paths
2026-03-15 15:57:02 +02:00
iliya
c30184052a feat: add TeamBackupService for team data persistence
- Auto-backup team files (config, tasks, inboxes, attachments, etc.)
  to app's own storage (Electron userData) every 3 minutes
- Sync backup on app shutdown (after SIGKILL, before cleanup)
- Auto-restore missing/corrupted teams on startup with identity guard
- Move attachments to app-owned storage (outside ~/.claude/)
- Add stopAllTeams() with SIGKILL for reliable shutdown
- Clean up app data when permanently deleting teams
- Generation-based shutdown isolation prevents async/sync races
2026-03-15 15:51:52 +02:00
iliya
f5efa17b1a feat: enhance notification handling and improve task comment protocols
- Added debug logging for test notification handling in the NotificationManager, improving traceability during notification operations.
- Implemented unescaping of literal newline sequences in task descriptions and comments across various components, ensuring proper formatting.
- Updated task comment handling logic to clarify awaiting replies from task responders, enhancing user awareness of task interactions.
- Refined UI components to improve user experience in settings and task management, including adjustments to the NotificationsSection and TeamDetailView.
2026-03-15 14:18:33 +02:00
iliya
cb6a41d899 feat: add test notification feature and update app identifiers
- Introduced a new IPC call for sending test notifications, allowing users to verify notification delivery.
- Updated app identifiers in package.json and notarization script to reflect the new application name.
- Enhanced notification handling in the NotificationManager to prevent garbage collection of active notifications.
- Updated UI components to include a test notification button in the settings, improving user experience.
2026-03-15 13:37:53 +02:00
iliya
2ca66d8632 feat: add task comment notification feature
- Introduced a new notification setting for task comments, allowing users to receive OS notifications when comments are added to tasks.
- Updated relevant interfaces and configuration files to include the new `notifyOnTaskComments` option.
- Enhanced notification handling logic to detect and notify users of new task comments, excluding comments made by the user themselves.
- Updated UI components to support the new notification setting, ensuring a seamless user experience.
2026-03-15 12:52:59 +02:00
iliya
217eafe6a2 feat: enhance team task management with reviewer resolution and UI improvements
- Added a new method in TeamDataService to extract the reviewer from task history events as a fallback when not present in the kanban state.
- Updated TeamDetailView to support adding multiple members at once, improving the member addition process.
- Enhanced TaskCommentInput to display a more user-friendly reply interface with expandable quotes and member badges.
- Improved TaskDetailDialog to show the reviewer information when a task is approved, enhancing task visibility.
- Introduced loading state handling in ChangeReviewDialog and ContinuousScrollView for better user experience during file loading.
2026-03-15 12:24:51 +02:00
iliya
cbd09199b3 feat: enhance task assignment messaging and improve action mode instructions
- Updated the task assignment message to emphasize the importance of starting tasks promptly, with improved formatting for clarity.
- Revised action mode instructions for the 'delegate' mode to provide clearer guidance on delegation responsibilities and expectations, including the creation of investigation tasks for ambiguous requests.
- Added new protocols in TeamProvisioningService to clarify ownership and task refinement processes during investigations, ensuring better task management and accountability.
2026-03-15 11:43:29 +02:00
iliya
f22a43854e refactor: remove task comment forwarding logic and clean up related code
- Deleted the TaskCommentForwarding module and its associated functions to simplify the codebase.
- Updated TeamDataService and TeamProvisioningService to remove references to task comment forwarding, ensuring a more straightforward implementation.
- Adjusted unit tests to reflect the removal of task comment forwarding functionality, enhancing clarity and maintainability.
2026-03-15 11:27:12 +02:00
iliya
96c9b00d92 feat: implement unconditionally dropping of CLI provisioner artifacts
- Added a new function to drop CLI provisioner members from the member map, ensuring these internal artifacts are never displayed to users.
- Updated the createCliProvisionerNameGuard function to unconditionally hide provisioner names, regardless of the presence of base members.
- Modified unit tests to reflect the new behavior of dropping provisioner names even when the base member is absent.
2026-03-15 11:18:49 +02:00
iliya
7502cc8e53 feat: deduplicate subagent snapshots and enhance chunk filtering by work intervals
- Implemented deduplication logic in TeamMemberLogsFinder to retain only the largest cumulative subagent snapshots per sessionId and memberName.
- Enhanced MemberLogsTab with a new function to filter chunks based on task work intervals, improving the relevance of displayed logs.
- Updated state management in MemberLogsTab to utilize the new filtering logic for both preview and detail chunks.
- Added unit tests to verify the new deduplication and filtering functionalities.
2026-03-15 10:48:35 +02:00
iliya
cb0a13bbf5 feat: enhance file content resolution caching and validation
- Introduced a validation fingerprint mechanism in FileContentResolver to ensure cached content is reused only when both disk content and snippets remain unchanged.
- Reduced cache TTL to 5 seconds for provisional entries to minimize stale data risks.
- Added utility functions for generating fingerprints based on disk content and snippet details.
- Updated cache handling logic to incorporate validation checks, improving efficiency and accuracy in content retrieval.
- Enhanced unit tests to cover new caching behavior and fingerprint validation scenarios.
2026-03-15 10:07:22 +02:00