Commit graph

590 commits

Author SHA1 Message Date
iliya
7c9631c1b9 feat: enhance README and UI for team management and review processes
- Added "Flexible autonomy" feature to README, allowing users to configure agent control levels.
- Updated task creation description for clarity in README.
- Improved team detail view messaging to better inform users about draft teams and provisioning status.
- Enhanced review function to prevent duplicate approval comments and events, ensuring idempotency.
- Expanded expected IPC signals to include 'TEAM_DRAFT' for better error handling.
2026-03-21 14:01:24 +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
4d65bad24f fix: consistent diff stats between preview badge and DiffViewer
- Export computeDiffLineStats from DiffViewer — uses the same LCS/semantic
  diff algorithm so stats always match the rendered diff
- Remove custom computeDiffStats (set-based) that produced different counts
- Add quickStats from toolInput.content for Write tool — shows +N
  immediately before IPC completes (no need to expand first)
- diffStats (accurate, from IPC) replaces quickStats once available
2026-03-21 13:30:53 +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
e2ca78d1b2 feat: default Send Message recipient to team lead
When opening Send Message dialog without a specific recipient,
auto-select the lead member instead of showing empty "Select member".
2026-03-21 13:04:22 +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
087a8f4989 feat: replace Pencil icon with FileIcon in DiffViewer header
Use devicon-based FileIcon for file type recognition instead of
generic Pencil icon. Shows JS/TS/Python/etc logos in diff headers.
2026-03-21 12:48:03 +02:00
iliya
7daacdc6a5 feat: add file type icon to tool input preview
Reuse FileIcon from editor for Write/Edit/Read/NotebookEdit tools.
Shows devicon-based colorful icon next to the file path.
JSON/Bash tools keep syntax-highlighted preview as before.
2026-03-21 12:47:04 +02:00
iliya
afea718b0f feat: relative paths, persistent diff preview, change stats
- Show relative path in tool input preview when file is inside
  team's project directory (via shortenDisplayPath)
- Persist diff preview expanded state in localStorage — once opened,
  stays open across approvals
- Show +N / -N line stats in "Preview changes" toggle button
  (green for added, red for removed)
2026-03-21 12:43:49 +02:00
iliya
1f9f0b6390 feat: syntax highlighting in diff preview + fix Allow All button style
- DiffViewer: add syntaxHighlight prop — maps diff lines to
  highlighted HTML via highlightLines(), passed to DiffLineRow
- ToolApprovalDiffPreview: enable syntaxHighlight for file diffs
- Allow All button: proper border style matching Deny button sizing
2026-03-21 12:39:19 +02:00
iliya
d92ab08416 feat: show tool approval in Awaiting Replies + Allow All button
- PendingRepliesBlock: show "user — awaiting approval" entry when
  pendingApprovals exist, with amber pulse dot and ShieldQuestion icon
- ToolApprovalSheet: add grey "Allow all" button (separated by divider)
  right of Allow/Deny — enables autoAllowAll setting instantly
2026-03-21 12:31:51 +02:00
iliya
73661c80a4 feat: auto-allow all tools toggle + fix team color fallback
- Add autoAllowAll setting: overrides all individual auto-allow rules,
  instantly approves every tool call without user interaction
- Settings panel: "Auto-allow all tools" checkbox at top, individual
  checkboxes greyed out when all-allow is active
- Fix team color badge: use getTeamColorSet(teamName) as fallback
  instead of getMemberColorByName which uses a different palette
  and produced wrong colors (yellow instead of pink)
2026-03-21 12:25:06 +02:00
iliya
0ebfd85b47 fix: always show team color badge via deterministic fallback
Color resolution chain: approval.teamColor → teamSummary.color
→ getMemberColorByName(teamName). Third fallback guarantees
a color is always available — no more neutral grey badges.
Removed dead fallback branch since teamColor can never be null.
2026-03-21 12:19:05 +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
6d77e77200 fix: tool approval select z-index and syntax highlight colors
- SelectContent z-[60] to render above the z-[55] approval sheet
- Move fallback text color to parent div so hljs class colors take priority
  (inline style on each line was overriding .hljs-attr/.hljs-string classes)
2026-03-21 12:12:04 +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
ddc3567449 fix: sort imports in TaskFiltersPopover to satisfy lint 2026-03-20 14:42:57 +02:00
iliya
38507d7437 fix: handle ENOENT error gracefully in file reading functions
- Updated error handling in both registerUtilityRoutes and handleReadMentionedFile functions to return null for expected ENOENT errors, indicating that the file simply does not exist. This improves robustness in scenarios with stale or misdetected file references.
- Enhanced the isValidFileRef function to require either 3+ segments or a file extension to avoid false positives for npm scoped packages, ensuring more accurate file reference validation.
2026-03-20 14:26:47 +02:00
iliya
57221f4e57 feat: update development partitioning for persistent storage
- Changed the development partitioning strategy to use a fixed name ('persist:dev') instead of a per-PID approach. This allows renderer-side storage (localStorage, IndexedDB) to survive app restarts, improving data stability during development.
2026-03-20 14:20:14 +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
bec8a6184a fix: refine regex patterns and improve utility functions for mention handling
- Updated regex patterns in chipUtils and mentionLinkify to enhance boundary detection for mentions.
- Refactored taskChangeRequest to simplify earliest date calculation using array destructuring.
- Improved taskReferenceUtils by replacing character boundary checks with a more concise regex.
- Enhanced teamMessageFiltering to ensure boolean checks for message filtering conditions.
- Adjusted urlMatchUtils to refine URL matching regex for better accuracy.
- Updated crossTeam constants to include comments for regex patterns, improving code clarity.
- Removed unused CommentAttachmentPayload type from api.ts to clean up type definitions.
- Introduced McpInstallScope type for better type safety in mcp.ts.
- Enhanced extensionNormalizers to improve URL normalization and added tests for parseGitHubOwnerRepo function.
- Cleaned up pricing.ts by removing unnecessary eslint disable comments.
- Added tests for new functionality in chipUtils and crossTeam constants, ensuring robust coverage.
2026-03-19 13:35:51 +02:00
iliya
08f22121c6 feat: enhance error handling and notifications for API errors
- Implemented a new mechanism to detect and notify users of API errors within team communications, improving error visibility.
- Updated the ActivityItem and ThoughtBodyContent components to visually indicate API errors with distinct styling.
- Enhanced the TaskDetailDialog and KanbanTaskCard components to improve user experience by providing clearer feedback on task dependencies and statuses.
- Refactored the teams IPC module to include checks for API errors, ensuring timely notifications are sent to users.
2026-03-19 12:47:00 +02:00
iliya
8d97c53cb4 feat: add dependencies section to TaskDetailDialog for improved task management
- Implemented a new section in TaskDetailDialog to display tasks that are blocked by or blocking the current task, enhancing visibility of task dependencies.
- Added interactive buttons for each dependency, allowing users to quickly access related tasks.
- Updated review information display to streamline task review context, improving user experience.
2026-03-18 23:18:35 +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
729a756f29 fix: resolve CI failures across all platforms
- Fix TS error: use kanbanTaskState?.reviewer instead of task.reviewer
  (reviewer exists on KanbanTaskState, not TeamTask)
- Fix crossTeam tests: update assertions to match XML tag protocol format
  (CROSS_TEAM_PREFIX_TAG → CROSS_TEAM_TAG_NAME with XML attributes)
- Fix controller test: use 'bob' instead of 'alice' as commenter
  (alice is the lead = same as task owner, so no notification fires)
- Fix TeamMcpConfigBuilder test: use path.join() for cross-platform paths
  (forward slashes fail on Windows where path.join uses backslashes)
- Fix atomicWrite EPERM on Windows: add retry logic for rename operations
  (Windows CI antivirus can briefly hold files, causing EPERM on rename)
2026-03-16 19:56:06 +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