Skip to content

Commit 60261a6

Browse files
committed
initial-commit
0 parents  commit 60261a6

File tree

211 files changed

+51834
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

211 files changed

+51834
-0
lines changed

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 FUN RUN, LLC
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

Package.swift

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// swift-tools-version: 5.9
2+
import PackageDescription
3+
4+
let package = Package(
5+
name: "Jules",
6+
platforms: [
7+
.macOS(.v13)
8+
],
9+
products: [
10+
.library(name: "JulesLib", targets: ["JulesLib"])
11+
],
12+
dependencies: [
13+
.package(url: "https://github.com/CodeEditApp/CodeEditLanguages.git", branch: "main"),
14+
.package(url: "https://github.com/ChimeHQ/SwiftTreeSitter.git", from: "0.8.0"),
15+
.package(url: "https://github.com/ra1028/DifferenceKit.git", from: "1.3.0"),
16+
.package(url: "https://github.com/sparkle-project/Sparkle.git", from: "2.0.0"),
17+
.package(url: "https://github.com/apple/swift-markdown.git", from: "0.5.0")
18+
],
19+
targets: [
20+
.target(
21+
name: "JulesLib",
22+
dependencies: [
23+
.product(name: "CodeEditLanguages", package: "CodeEditLanguages"),
24+
.product(name: "SwiftTreeSitter", package: "SwiftTreeSitter"),
25+
.product(name: "DifferenceKit", package: "DifferenceKit"),
26+
.product(name: "Markdown", package: "swift-markdown")
27+
],
28+
path: "jules",
29+
exclude: [
30+
"julesApp.swift",
31+
"Assets.xcassets",
32+
"Info.plist"
33+
]
34+
)
35+
]
36+
)

README.md

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# Jules for macOS
2+
3+
A native macOS menu bar application for interacting with the Jules AI coding assistant API.
4+
5+
## Features
6+
7+
- **Menu Bar Integration**: Quick access from your menu bar or centered floating panel
8+
- **Session Management**: Create, view, and manage coding sessions
9+
- **Real-time Updates**: Live polling for session status and activity updates
10+
- **Diff Viewing**: High-performance Metal-accelerated diff visualization
11+
- **Merge Conflict Resolution**: Visual merge conflict handling
12+
- **Offline Support**: Queue sessions when offline, sync when connectivity returns
13+
- **Keyboard Shortcuts**: Global hotkeys for quick access
14+
- **Auto-updates**: Built-in update mechanism via Sparkle
15+
16+
## Requirements
17+
18+
- macOS 13.0 or later
19+
- Xcode 15.0 or later (for building)
20+
- A Jules API key (obtain from [jules.google.com](https://jules.google.com))
21+
22+
## Building
23+
24+
1. Clone the repository:
25+
```bash
26+
git clone https://github.com/your-username/jules-osx.git
27+
cd jules-osx
28+
```
29+
30+
2. Open the project in Xcode:
31+
```bash
32+
open jules.xcodeproj
33+
```
34+
35+
3. Build and run (Cmd+R)
36+
37+
## Configuration
38+
39+
### API Key
40+
41+
Enter your Jules API key in the app's Settings to start using the application.
42+
43+
### Firebase/Gemini (Optional)
44+
45+
The app includes optional Firebase integration for AI-generated activity descriptions using Gemini. This feature is **disabled by default** and the app works perfectly without it.
46+
47+
To enable Firebase/Gemini:
48+
49+
1. Create a Firebase project at [console.firebase.google.com](https://console.firebase.google.com)
50+
2. Add a macOS app with your bundle ID
51+
3. Download `GoogleService-Info.plist` and replace the placeholder file in `jules/`
52+
4. Open `jules/AppDelegate.swift` and set:
53+
```swift
54+
let ENABLE_FIREBASE = true
55+
```
56+
57+
### Auto-Updates (Optional)
58+
59+
To enable auto-updates for your distribution:
60+
61+
1. Set up a Sparkle appcast feed
62+
2. Update `SPARKLE_APPCAST_URL` in `AppDelegate.swift`
63+
3. Configure your signing keys in the project settings
64+
65+
## Project Structure
66+
67+
```
68+
jules/
69+
├── AppDelegate.swift # App lifecycle, menu bar, hotkeys
70+
├── DataManager.swift # Core data management and API coordination
71+
├── APIService.swift # REST API client for Jules backend
72+
├── SessionRepository.swift # Session persistence (GRDB/SQLite)
73+
├── Flux/ # Metal-based diff rendering
74+
├── MergeConflictWindow/ # Merge conflict UI
75+
├── Canvas/ # Drawing/annotation features
76+
└── ...
77+
```
78+
79+
## Keyboard Shortcuts
80+
81+
Default shortcuts (configurable in Settings):
82+
83+
- **Control+Option+J**: Toggle Jules menu
84+
- **Control+Option+S**: Capture screenshot
85+
- **Control+Option+V**: Voice input (macOS 26.0+)
86+
87+
## Architecture
88+
89+
- **UI Framework**: SwiftUI with AppKit integration
90+
- **Database**: SQLite via GRDB
91+
- **Networking**: URLSession with offline queue support
92+
- **Graphics**: Metal for high-performance diff rendering
93+
- **Updates**: Sparkle framework
94+
95+
## Dependencies
96+
97+
- [GRDB](https://github.com/groue/GRDB.swift) - SQLite toolkit
98+
- [Sparkle](https://github.com/sparkle-project/Sparkle) - Auto-updates
99+
- [HotKey](https://github.com/soffes/HotKey) - Global keyboard shortcuts
100+
- [SwiftTreeSitter](https://github.com/ChimeHQ/SwiftTreeSitter) - Syntax parsing
101+
- [Lottie](https://github.com/airbnb/lottie-ios) - Animations
102+
- [Firebase iOS SDK](https://github.com/firebase/firebase-ios-sdk) - Optional AI features
103+
104+
## Contributing
105+
106+
Contributions are welcome! Please feel free to submit issues and pull requests.
107+
108+
## License
109+
110+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
111+
112+
## Trademarks
113+
114+
"Jules" name, logo, and branding are trademarks of Alphabet Inc. and are used with permission.

0 commit comments

Comments
 (0)