feat: add beta CTAs to changelog UI#97
Closed
arnestrickmann wants to merge 692 commits into
Closed
Conversation
docs(skills): add skills.sh as a skill source
…vn-light-zu-2zs fix: always sync systemTheme with OS for instant theme switching
Commit 1b52cf4 accidentally changed `cwd` to `cwd: undefined` in both pty:start and pty:startDirect handlers when calling buildRemoteInitKeystrokes. This caused tmux sessions to start in the home directory instead of the workspace path, breaking all workspace provider tasks since March 10. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…pace-provider fix(pty): restore workspace cwd for SSH terminal sessions
Thread taskId from FileChangesPanel through the git IPC call chain so the main process can look up workspace instances and route git operations (status, diff, stage, revert, commit, push) through RemoteGitService. Previously, resolveRemoteProjectForWorktreePath only checked the projects table — workspace instances live in workspace_instances and were invisible. New resolveRemoteContext(worktreePath, taskId?) checks workspace_instances first, then falls back to project-based SSH matching. Fixes generalaction#1540 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ards - Add real brand SVG/PNG assets for all 41 MCP catalog providers in src/assets/images/mcp/ (ported from feature/sidebar-redesign branch) - Create mcpIcons.ts with file imports matching sidebar-redesign pattern: SVGs imported as raw strings, PNGs as URLs - Rewrite McpServerCard with: - McpIcon component: renders SVG (mono/multi-color), PNG, or letter fallback - Agent logo row: shows synced agent icons (Claude, Cursor, etc.) via AgentLogo - Transport badge (http/stdio) with Globe/Terminal icon - Docs link button on hover - Pass providers to McpServerCard from McpPage for agent icon resolution Icon coverage: - 34 SVG icons (Simple Icons CC0 + official brand assets) - 6 PNG icons (official favicons: Amplitude, Honeycomb, Exa, Jam, MotherDuck, Magic Patterns) - 1 letter fallback only (Dev Manager — generic dev tool)
- Add DeepWiki catalog entry (https://mcp.deepwiki.com/mcp, no auth) - Add official favicon PNG from deepwiki.com - Add icon mapping in mcpIcons.ts
The SVG parser was passing style attributes as strings to React elements, but React's style prop expects a CSSProperties object. Fixed by parsing CSS style declarations and converting kebab-case to camelCase.
The providers prop was checked as a truthy guard in the syncedProviders
condition, but since it was initialized as [] (always truthy in JS),
it never actually gated anything. The actual data comes from
server.providers, not the prop.
- Remove providers from McpServerCardProps interface
- Remove providers from component destructuring and condition
- Remove unused McpProvidersResponse import
- Remove providers={providers} from both callers in McpPage
- providers state in McpPage remains (used by openModal)
…tor-workspace-hard-timeout-5s1 refactor(workspace): replace hard timeout with warning for provisioning
…ace tasks When workspace-provisioned connections aren't in the ssh2 pool, fall back to the system SSH binary for git operations. Also use a composite cache key (taskPath::taskId) to prevent local project status from overwriting workspace remote status. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…pace-provider fix(git): route git operations through SSH for workspace provider tasks
…professionally-dlq feat(settings): add toggle to disable auto-close linked issues on PR creation
Remove backdrop-blur-sm from DialogOverlay that caused blurred content behind modals (e.g. skill detail modal on the skills page).
- Add Automations tab in sidebar (alongside Skills, MCP) - Full CRUD for automations: create, edit, delete, pause/resume - Schedule types: hourly, daily, weekly, monthly - Select project, coding agent, and prompt per automation - Run history tracking with logs modal - Scheduler service with 30s tick interval - JSON-file persistence in userData directory - IPC layer with full type safety - Search and filter automations - Manual trigger support New files: - src/shared/automations/types.ts - src/main/services/AutomationsService.ts - src/main/ipc/automationsIpc.ts - src/renderer/components/automations/AutomationsView.tsx - src/renderer/components/automations/AutomationCard.tsx - src/renderer/components/automations/AutomationModal.tsx - src/renderer/components/automations/RunLogsModal.tsx - src/renderer/components/automations/useAutomations.ts - src/renderer/components/automations/utils.ts
…d design - AutomationCard: agent logo icon (from agentConfig), GitHub/folder icon for project, framer-motion tap animation, border-t footer separator, matches SkillCard visual language - AutomationModal: agent select dropdown with logos, project select with GitHub/FolderGit2 icons and repo name, schedule config in bordered box - AutomationsView: info banner with Zap icon, rounded empty state icon container, consistent with SkillsView layout patterns - RunLogsModal: colored status labels, error preview, tabular-nums for duration, nicer empty state
The trigger flow was completely disconnected — clicking 'Run Now' or
the scheduler firing did nothing because no code ever called
handleCreateTask.
Now:
- Main process scheduler calls sendTriggerToRenderer() via
webContents.send('automation:trigger', automation) when a scheduled
automation is due
- automations:triggerNow IPC handler also sends the trigger event
for manual runs
- New global useAutomationTrigger() hook (mounted in Workspace.tsx)
listens for the event and calls handleCreateTask with the
automation's project, prompt, and agent
- Task gets created with autoApprove=true, proper worktree, and the
project is activated in the sidebar
- Toast notifications on success/failure
- Preload exposes onAutomationTrigger listener with proper cleanup
The task was created but the agent never started because: 1. activateProjectView() fired resetTaskTrigger which cleared the activeTask that createTaskMutation.onMutate had just set 2. Without an activeTask, ChatInterface never mounted, so the PTY never started and the prompt was never injected Fix: useAutomationTrigger now sets project-management states directly (setSelectedProject, setShowHomeView, etc.) WITHOUT firing resetTaskTrigger. This way: - The project view activates (sidebar shows it) - createTaskMutation.onMutate sets activeTask → ChatInterface mounts - ChatInterface auto-starts the agent CLI - useInitialPromptInjection sends the prompt once the PTY is ready - Agent runs fully autonomously with autoApprove=true
Problems fixed: - Double task creation: was caused by activateProjectView() resetting the active task via resetTaskTrigger, then handleCreateTask setting it again — race condition created duplicate optimistic tasks - View switching: user was forcefully navigated to the task view when an automation triggered, breaking their workflow New approach — fully background execution: 1. Save task directly via rpc.db.saveTask() (no mutation, no UI state) 2. Create worktree if enabled via worktreeCreate() 3. Start agent PTY directly via ptyStartDirect() with initialPrompt and autoApprove — no ChatInterface mount required 4. Invalidate query cache so task appears in sidebar 5. User stays on whatever view they were on, gets a toast notification Worktree option: - Added useWorktree field to Automation type and CreateAutomationInput - Toggle in AutomationModal with Switch component - GitBranch icon indicator on AutomationCard - Defaults to true (isolated branch per run)
handleSelectTask, handleNextTask, and handlePrevTask in useTaskManagement were missing setShowAutomationsView(false), so clicking a task in the sidebar while on the Automations page did nothing — the automations view stayed rendered on top.
- Add useRunningAutomations store tracking automation run phases - Show animated progress bar + phase text on AutomationCard while running - Add 'Running Now' section with count badge in AutomationsView - Live elapsed timer on running cards - Disable edit/delete/trigger actions during run - Phase tracking: preparing → creating worktree → saving task → starting agent → running - Error/done states with auto-cleanup timeouts
- Split running state into two layers:
1. Brief trigger feedback (useRunningAutomations) — auto-clears
after agent starts or on error. No stuck-forever risk.
2. Real task tracking (AutomationRunningTasks) — queries actual
tasks with metadata.automationId from the DB.
- AutomationRunningTasks component:
- Shows all tasks created by automations
- Live status via useTaskStatus (Working/Waiting/Done/Error)
- Stop button (kills PTY) for working tasks
- Delete button (full cleanup incl. worktree)
- Click task name to navigate to it
- AutomationCard trigger feedback:
- Subtle spinner + phase text during trigger (2-3s)
- Uses app's Spinner component, standard border-border
- Buttons disabled only during trigger
- Auto-clears — never gets stuck
- Add automationId to TaskMetadata type
…ge-blur fix: fix skills modal being a little blurred
…9p8b8 Fix docs build: update fumadocs-core import path
…ntic-settings-search feat: add semantic settings search
- Add lastActiveTime tracking to detect sleep gaps in automation scheduler - Skip tasks that were already due during sleep period - Add test coverage for sleep/resume scenarios - Fix IPC handler to properly await async task execution
- Track in-flight runs in a Set to prevent duplicate reconciliations - Reset triggerCallbacks during service reset to prevent stale handlers - Add automationId param to updateRunLog for proper state management - Create dispatchTriggers helper for consistent error handling - Fail runs immediately when trigger callback throws - Clear in-flight state when run finishes (success or failure) - Update IPC handlers to pass automationId to updateRunLog
…cheduled-tasks-during-sleep fix: handle scheduled tasks during system sleep/resume
- Remove authenticateGHCLI calls after OAuth flow - Pass tokens via GH_TOKEN/GITHUB_TOKEN env vars instead - Use getCliEnvironment() to scope gh invocations to Emdash's stored token - Make getStoredToken() public for CLI environment usage - Simplify logout to only clear keychain, not gh CLI state This removes the dependency on modifying the user's global gh login state, making the integration more secure and isolated.
- Remove direct dependency on gh binary for GitHub integration - Update service to use native API for GitHub operations
…ures - Use installed prop for cliInstalled state instead of hardcoding true - Add useEffect to sync cliInstalled when prop changes - Throw error when clearing keychain token fails
…ecouple-gh-cli refactor(github): decouple from gh CLI authentication
- Combine stdout and stderr for git commit/push/pull error handling (hooks often write failure details to stdout, not stderr) - Add --no-verify option to git commit via IPC and GitService - Add skip hooks checkbox UI in CommitArea - Extract friendlyGitError to shared lib - Use useErrorDetails hook for better error display in CommitArea and FileChangesPanel - Add type safety for GitHub API user response
- Add worktree path tracking in WorktreeService - Add getDefaultBranch method to GitHubService - Add worktree pool methods to WorktreePoolService - Add project IPC method for getting worktree path - Add tests for worktree path tracking
When a GitHub repo is empty (no commits), 'git remote show origin' returns '(unknown)' as the default branch. This caused issues when that value was used as an actual branch name. Now we filter out '(unknown)' so it falls back to 'main' or 'master'.
…mit-error-message improve: git commit error messages and add skip-hooks option
fix: remote file tree shows root contents when expanding subdirectories
…thub-repo-error-1712 Add worktree path tracking and GitHub branch support
Show the native OS badge on the app icon with the count of tasks that have unread activity. Controlled by a new "App badge" toggle in notification settings, off by default.
…ar-links-broken fix(gh cli): migrate legacy gh cli auth token into keychain
…x-cli feat(skills): add MiniMax-AI/cli as default skill tap
feat: Add app badge count for unread tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Testing