Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .eslintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
"plugin:import/typescript"
],
"parser": "@typescript-eslint/parser",
"rules": {
"@typescript-eslint/no-empty-function": "warn",
"@typescript-eslint/no-inferrable-types": "warn"
},
"overrides": [
{
"files": ["**/*.test.ts", "**/*.test.tsx", "tests/**/*.ts"],
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: CI

on:
pull_request:
branches:
- main

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'

- name: Install dependencies
run: npm ci

- name: Lint
run: npm run lint

- name: Build
run: npm run package

- name: Test
run: npm test
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,22 @@ A modern Electron-based agent manager for working across multiple repositories s
- Non-disruptive updates - install on next restart
- Toast notifications for update status

![Copilot Chat](img/agent-chat.png)

### 💬 Copilot Chat
- Integrated GitHub Copilot chat powered by `@github/copilot-sdk`
- Multiple conversations with automatic naming from first message
- Streamed responses displayed in real-time
- Conversations persisted to disk and restored on restart
- Manage conversations in the right pane — create, switch, rename, and delete
- Each conversation gets its own isolated AI context

## Installation

### Prerequisites
- Node.js 18+
- npm 9+
- GitHub CLI (`gh`) authenticated via `gh auth login` (required for Copilot Chat)

### Setup

Expand All @@ -63,6 +74,8 @@ npm start
4. **Open Files**: Click any file to view it with syntax highlighting
5. **Switch Views**: Click agents or files in the left pane to switch between them
6. **Close Items**: Right-click on agents or files for context menu options
7. **Chat with Copilot**: Click "Copilot Chat" in the left pane to start a conversation
8. **Manage Conversations**: Use the right pane to create new conversations, switch between them, or right-click to rename/delete

### Keyboard Shortcuts
- `Ctrl+Tab` - Next agent
Expand All @@ -81,6 +94,7 @@ npm start
- **xterm.js** - Terminal emulator
- **node-pty** - Pseudo-terminal for full shell support
- **Monaco Editor** - Code editor with syntax highlighting
- **@github/copilot-sdk** - GitHub Copilot chat integration
- **Electron Forge** - Build and packaging toolchain

## Project Structure
Expand All @@ -95,9 +109,13 @@ src/
├── main/
│ ├── services/
│ │ ├── AgentService.ts # PTY management
│ │ ├── CopilotService.ts # Copilot SDK integration
│ │ ├── ConversationService.ts # Chat conversation persistence
│ │ └── FileService.ts # File system operations
│ └── ipc/
│ ├── agent.ts # Agent IPC handlers
│ ├── copilot.ts # Copilot chat IPC handlers
│ ├── conversation.ts # Conversation CRUD IPC handlers
│ └── files.ts # File IPC handlers
└── renderer/
├── App.tsx # Main React component
Expand Down Expand Up @@ -132,6 +150,8 @@ npm run make

- Agent resize may have slight delay during rapid window resizing
- Some complex TUI applications may have minor rendering differences compared to native terminals
- Copilot Chat requires `gh` CLI authentication — run `gh auth login` before using
- Restored chat conversations display previous messages but the AI does not retain context from prior sessions

## License

Expand Down
Binary file added img/agent-chat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading