Skip to content

feat: add beta CTAs to changelog UI#97

Closed
arnestrickmann wants to merge 692 commits into
Davidknp:mainfrom
arnestrickmann:feat/changelog-beta-cta
Closed

feat: add beta CTAs to changelog UI#97
arnestrickmann wants to merge 692 commits into
Davidknp:mainfrom
arnestrickmann:feat/changelog-beta-cta

Conversation

@arnestrickmann

Copy link
Copy Markdown
Collaborator

Summary

  • add a "Test the v1 Beta" CTA to the collapsed sidebar changelog card
  • add a subtle beta download banner at the top of the expanded changelog modal
  • centralize the main emdash website URL in shared URLs

Testing

  • pnpm run format
  • pnpm run lint
  • pnpm run type-check
  • pnpm exec vitest run

arnestrickmann and others added 30 commits March 20, 2026 10:11
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
rabanspiegel and others added 29 commits April 8, 2026 15:56
…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.