Commit graph

2637 commits

Author SHA1 Message Date
iliya
c6ddfb9e78 feat: implement task comments functionality
- Added a new Contributor License Agreement (CLA) document to clarify contribution terms.
- Updated the license from MIT to GNU Affero General Public License v3.0 (AGPL-3.0).
- Introduced task comments feature, allowing users to add comments to tasks with validation for input length and content.
- Enhanced the TeamDataService to handle adding comments and sending notifications to task owners.
- Updated UI components to display comments and allow users to submit comments via a text area.
- Integrated task comments into the task detail dialog for better user interaction.

These changes aim to improve task management and enhance collaboration within teams.
2026-02-22 20:05:03 +02:00
iliya
7e94bc7603 fix: resolve review bugs and lint errors
- teams.ts: add type validation in handleCreateConfig for displayName/description/color
- CreateTaskDialog: scope draft keys per team to prevent cross-team leakage
- agentBlocks.ts: replace stateful singleton regex with factory function
- teams.test.ts: add missing channel assertions and use os.tmpdir()
- SendMessageDialog: move setState out of useEffect to render phase
- TeamMemberLogsFinder: remove unused projectId destructuring
- MentionableTextarea: add eslint-disable description
- useMentionDetection: replace deprecated wordWrap with overflowWrap
2026-02-22 18:58:35 +02:00
iliya
a262dcc979 Merge remote-tracking branch 'origin/main' into agent_teams_features 2026-02-22 18:45:16 +02:00
iliya
e662c58d32 feat: enhance team configuration and member detection
- Added validation for team configuration updates to ensure name, description, and color are strings.
- Improved member detection logic to avoid false positives by ensuring only one known member name is matched.
- Refactored post-launch configuration updates to combine session history and project path updates, preventing race conditions.
- Updated UI components to streamline state management for collapsible sections.

These changes aim to improve data integrity and user experience in team management functionalities.
2026-02-22 18:41:08 +02:00
iliya
49cf6405a2 feat: add task management enhancements with start task functionality
- Introduced TEAM_START_TASK IPC channel to facilitate starting tasks and notifying agents.
- Updated task creation to include an option for immediate start, enhancing user experience.
- Enhanced task notifications with detailed instructions for agents upon task assignment.
- Improved team member logs handling and metadata extraction for better task tracking.

These changes aim to streamline task management and improve team collaboration efficiency.
2026-02-22 18:32:30 +02:00
iliya
0867966d17 feat: enhance team member management with color coding and improved prompts
- Added member color assignment using a new utility function for better visual representation in the UI.
- Updated team member prompts to encourage brief introductions, aligning with project guidelines.
- Introduced a draft persistence mechanism for message and task creation dialogs to enhance user experience.
- Refactored team configuration handling to support new member structures and improve data integrity.

This update aims to streamline team interactions and improve the overall user experience in team management features.
2026-02-22 16:41:16 +02:00
Psypeal Gwai
258dc6d82f fix: prevent Ctrl+R page reload and show platform-aware shortcuts (#58)
Intercept Ctrl+R/Cmd+R in before-input-event to prevent Electron's default page reload. Replace hardcoded macOS shortcut symbols with platform-aware helpers that show Ctrl+ on Windows/Linux.
2026-02-22 06:05:44 -08:00
iliya
3ce0ba098a Merge upstream/main 2026-02-22 15:53:02 +02:00
Paul Holstein
114ea36df9 fix(report): guard against empty tool call IDs in session analyzer
Skip indexing and lookup when tool call/result IDs are missing to
prevent collisions on the empty-string key in toolCallIndex.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 08:49:19 -05:00
iliya
9b64576377 Merge remote-tracking branch 'upstream/main' into agent_teams_features 2026-02-22 15:46:58 +02:00
Paul Holstein
586cb00174 fix(report): address CodeRabbit review — pricing match, sidechain filter, UX guards
- getPricing: use tokenized order-insensitive matching so Claude 3 era
  models (e.g. "claude-3-opus-20240229") correctly match pricing key "opus-3"
- sessionAnalyzer: skip isSidechain messages in parentCost loop to prevent
  double-counting with processSubagentCost
- CostSection: disable row expansion when token stats are missing
- tabSlice: guard against undefined sessionId/projectId in openSessionReport

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 08:43:33 -05:00
iliya
8b5e1db527 feat: use agent teams 2026-02-22 15:41:18 +02:00
Psypeal Gwai
a7d7bacf3b fix: guard Notification.isSupported for standalone/Docker (#42)
Add typeof checks before calling Notification.isSupported() to prevent crashes in environments where the Notification API is unavailable.
2026-02-22 05:40:39 -08:00
Paul Holstein
4fda90bc3e feat(report): address PR feedback — threshold tooltips, cost clarity, progressive disclosure
- Add AssessmentBadge component with hover tooltips explaining thresholds
- Add Key Takeaways summary section surfacing top actionable findings
- Add cost attribution stacked bar and per-token calculation breakdowns
- Add clickable navigation from takeaways and tool errors to detail sections
- Add theme-aware assessment colors via CSS variables for light/dark mode
- Collapse lower-priority sections by default for progressive disclosure
- Replace all hardcoded color hex values with CSS variable references
- Fix missing Fragment key in CostSection model table
- Add defensive division-by-zero guard in stacked bar calculation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 08:29:08 -05:00
matt
9c04e90fdd
Merge pull request #57 from proxikal/fix/settings-http-server-status-ipc
fix: wrap HTTP_SERVER_GET_STATUS response in IpcResult envelope
2026-02-22 19:50:05 +09:00
KaustubhPatange
5932009c3b fix: lint issues 2026-02-22 16:14:05 +05:30
matt
94a6599acc
Merge pull request #55 from proxikal/fix/perf-regression-agent-configs-and-search-stat
fix: resolve performance regression in transcript loading and session search
2026-02-22 19:32:13 +09:00
matt
40a467666f
Merge pull request #56 from proxikal/feat/sidebar-auto-open-on-project-select
fix: auto-expand sidebar when a project is selected
2026-02-22 19:31:37 +09:00
matt
39916f47bc
Merge pull request #64 from matt1398/dependabot/npm_and_yarn/npm_and_yarn-c59ac7ae80
chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
2026-02-22 19:28:00 +09:00
KaustubhPatange
723760938e feat: add session cost in session header 2026-02-22 15:44:04 +05:30
KaustubhPatange
2bb95db596 feat: add tests for cost calculation 2026-02-22 14:49:30 +05:30
KaustubhPatange
a039fdd573 feat: add cost calculation metric 2026-02-22 14:39:20 +05:30
dependabot[bot]
2111272de8
chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
Bumps the npm_and_yarn group with 4 updates in the / directory: [happy-dom](https://github.com/capricorn86/happy-dom), @isaacs/brace-expansion, [ajv](https://github.com/ajv-validator/ajv) and [minimatch](https://github.com/isaacs/minimatch).


Updates `happy-dom` from 17.6.3 to 20.0.2
- [Release notes](https://github.com/capricorn86/happy-dom/releases)
- [Commits](https://github.com/capricorn86/happy-dom/compare/v17.6.3...v20.0.2)

Updates `@isaacs/brace-expansion` from 5.0.0 to 5.0.1

Updates `ajv` from 6.12.6 to 6.14.0
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0)

Updates `minimatch` from 3.1.2 to 3.1.3
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.3)

---
updated-dependencies:
- dependency-name: happy-dom
  dependency-version: 20.0.2
  dependency-type: direct:development
  dependency-group: npm_and_yarn
- dependency-name: "@isaacs/brace-expansion"
  dependency-version: 5.0.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ajv
  dependency-version: 6.14.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: minimatch
  dependency-version: 3.1.3
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 05:41:40 +00:00
matt
6f59ccdf38
Merge pull request #63 from matt1398/chore/issue-templates
Update issue templates
2026-02-22 14:31:58 +09:00
matt
3288831c7d
Update issue templates 2026-02-22 14:31:49 +09:00
Paul Holstein
1ad2eca8f0 fix: safe stringification of skill args to satisfy no-base-to-string lint rule
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 18:05:35 -05:00
Paul Holstein
820bb124d5 feat(report): add threshold-based assessment badges to all report sections
Add interpretive assessment layer to session reports. Every metric section
now shows color-coded severity badges (green/amber/red) computed from
configurable thresholds, replacing raw numbers with instant signal.

Includes centralized reportAssessments utility, model mismatch detection,
switch pattern recognition, and 44 new tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 18:01:43 -05:00
Paul Holstein
ab1ad071fe feat: add missing analysis sections to session report
Add 7 missing sections and fix 4 incomplete ones that the Python
analyzer generates but the TypeScript port was missing:

New sections: skillsInvoked, bashCommands, lifecycleTasks,
userQuestions, outOfScopeFindings, agentTree, subagentsList

Fixed: compaction (was just count, now has summaryCount + note),
serviceTiers removed (not available in parsed types),
compactionCount replaced with compaction object

Adds InsightsSection UI component and 8 new tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 17:10:20 -05:00
Paul Holstein
3f479dcf07 test(report): add session analyzer tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:56:26 -05:00
Paul Holstein
644d66eae1 feat(report): wire up toolbar button and report tab routing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:55:04 -05:00
Paul Holstein
d54e36f6fa feat(report): add session report tab and all section components
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:53:01 -05:00
Paul Holstein
0e3e20c990 feat(report): add 'report' tab type and openSessionReport store action
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:46:32 -05:00
Paul Holstein
465115ee5c feat(report): add session analyzer engine (TS port of analyze-session.py)
Port all analysis logic from the Python script to TypeScript, running
entirely in the renderer process. Produces a typed SessionReport from
a SessionDetail with: token/cost analysis, friction signals, idle gaps,
conversation tree metrics, test progression, and thrashing detection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:43:18 -05:00
Paul Holstein
e371ae793f feat(report): add session analysis report type definitions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:29:49 -05:00
Paul Holstein
feb0b66df8 docs: add session analysis report implementation plan
7 tasks with acceptance criteria covering types, analyzer engine,
tests, tab integration, UI components, routing, and polish.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:24:33 -05:00
Paul Holstein
29401916a8 docs: add session analysis report design document
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 16:20:03 -05:00
proxy
8d652c4d2e fix: wrap HTTP_SERVER_GET_STATUS response in IpcResult envelope
The HTTP_SERVER_GET_STATUS handler returned a raw { running, port } object
while all other HTTP server handlers (start, stop) return { success, data }.
invokeIpcWithResult() in the preload expects the IpcResult<T> envelope and
treats a missing success field as failure, throwing 'Unknown error'.

This caused an unhandled promise rejection every time the Settings page
opened, because GeneralSection calls api.httpServer.getStatus() on mount.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 16:01:14 -05:00
proxy
c69d2414d6 fix: auto-expand sidebar when a project is selected
When the sidebar is collapsed and the user clicks a project, the session
list was silently updated behind the hidden panel with no visual feedback,
leaving the user confused about why nothing appeared to change.

Fixed by setting sidebarCollapsed: false in both selectProject and
selectRepository at the moment of selection. Both entry points are covered:
- selectRepository: used by the dashboard project cards
- selectProject: used by the command palette and keyboard shortcuts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 15:56:40 -05:00
proxy
9e7d3b58a1 fix: resolve perf regression in transcript loading and session search
Two performance regressions introduced in recent PRs:

1. readAgentConfigs blocked transcript rendering (PR #50)
   The agent config IPC call was awaited on the critical path of
   fetchSessionDetail, preventing any transcript data from rendering
   until the filesystem read completed. On macOS this was especially
   noticeable due to security checks on first directory access.
   Fixed by making the call fire-and-forget: the transcript renders
   immediately and subagent color badges update asynchronously.
   Also set the project cache key optimistically before the async call
   to prevent duplicate in-flight requests on rapid navigation.

2. SessionSearcher stat()-called every session file on each search (PR #53)
   LocalFileSystemProvider.readdir() did not populate the optional
   mtimeMs field on FsDirent entries. The new SearchTextCache-based
   SessionSearcher fell back to an individual fsProvider.stat() call
   per session file when mtimeMs was missing, adding N extra filesystem
   round-trips on every search in local mode.
   Fixed by statting all entries concurrently inside readdir(), so
   mtimeMs is always populated and the stat fallback is never triggered.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 15:46:25 -05:00
matt
39d88e22a4
Merge pull request #50 from cesarafonseca/feat/subagent-type-color-badges
feat: color badges for subagent types with .claude/agents/ config support
2026-02-22 02:07:42 +09:00
matt
e2b24d078c
Merge pull request #53 from matt1398/feat/search-text-cache
feat: implement SearchTextCache and SearchTextExtractor for efficient…
2026-02-22 02:07:02 +09:00
matt
75dfcf2d50 feat: implement SearchTextCache and SearchTextExtractor for efficient text extraction and caching
- Added SearchTextCache for LRU caching of extracted search text with mtime invalidation.
- Introduced SearchTextExtractor for lightweight extraction of searchable text from session messages.
- Updated SessionSearcher to utilize the new extractor and cache for improved search performance.
- Added tests for SearchTextCache and SearchTextExtractor to ensure functionality and correctness.
2026-02-22 02:03:22 +09:00
Cesar Augusto Fonseca
f05bf9fac4 feat: color badges for subagent types with .claude/agents/ config support
Subagent badges now show distinct colors instead of generic gray.
Colors are resolved from the project's .claude/agents/*.md frontmatter
(color field), with deterministic hash-based fallback for unconfigured types.

New AgentConfigReader service reads agent definitions via IPC, cached
per project root to avoid redundant disk reads on session refreshes.

Team member colors remain unaffected (team branch has priority).
2026-02-21 13:52:59 -03:00
matt
05b7888c17
Merge pull request #51 from holstein13/feat/session-export
feat: add session export (Markdown, JSON, Plain Text)
2026-02-22 01:33:15 +09:00
Paul Holstein
d3b7d9dfeb feat: add session export (Markdown, JSON, Plain Text)
Add an export button to the TabBar header that lets users export
the current session as Markdown, JSON, or Plain Text. The button
appears between Search and Notifications, only for session tabs.

- sessionExporter.ts: formatters for all three formats + download trigger
- ExportDropdown.tsx: dropdown UI component with format selection
- TabBar.tsx: integration with conditional rendering for session tabs
- 51 new tests covering all formatters, edge cases, and download

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-21 11:18:52 -05:00
matt
f85c308672
Merge pull request #44 from KaustubhPatange/main
feat: search session globally across projects
2026-02-22 01:10:05 +09:00
matt
60b0364ab9
Merge pull request #45 from Psypeal/main
fix: correct context badge count to sum actual items instead of injection objects (#2)
2026-02-22 01:06:52 +09:00
matt
5f41cc95e9
Merge pull request #48 from cesarafonseca/fix/macos-traffic-light-title-spacing
fix: increase macOS traffic light content gap for better title spacing
2026-02-22 01:05:00 +09:00
Cesar Augusto Fonseca
b883e411f2 fix: increase macOS traffic light content gap for better title spacing 2026-02-21 12:11:55 -03:00
Psypeal
5a860d083b
Merge branch 'main' into main 2026-02-21 02:10:36 -08:00