olly-desktop 1.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- olly_desktop-1.2.1/.gitignore +45 -0
- olly_desktop-1.2.1/.pypiignore +17 -0
- olly_desktop-1.2.1/CHANGELOG.md +6 -0
- olly_desktop-1.2.1/LICENSE +21 -0
- olly_desktop-1.2.1/PKG-INFO +330 -0
- olly_desktop-1.2.1/PUBLISHING.md +37 -0
- olly_desktop-1.2.1/README.md +271 -0
- olly_desktop-1.2.1/build.bat +30 -0
- olly_desktop-1.2.1/build.sh +23 -0
- olly_desktop-1.2.1/config.py +88 -0
- olly_desktop-1.2.1/core/__init__.py +1 -0
- olly_desktop-1.2.1/core/agent.py +198 -0
- olly_desktop-1.2.1/core/agent_tools.py +548 -0
- olly_desktop-1.2.1/core/capture_context.py +47 -0
- olly_desktop-1.2.1/core/chat_store.py +154 -0
- olly_desktop-1.2.1/core/file_watcher.py +91 -0
- olly_desktop-1.2.1/core/image_utils.py +235 -0
- olly_desktop-1.2.1/core/log.py +44 -0
- olly_desktop-1.2.1/core/mcp_manager.py +309 -0
- olly_desktop-1.2.1/core/ollama_client.py +587 -0
- olly_desktop-1.2.1/core/ollama_setup.py +235 -0
- olly_desktop-1.2.1/core/paths.py +46 -0
- olly_desktop-1.2.1/core/platform.py +144 -0
- olly_desktop-1.2.1/core/rag_store.py +327 -0
- olly_desktop-1.2.1/core/settings.py +233 -0
- olly_desktop-1.2.1/core/startup.py +126 -0
- olly_desktop-1.2.1/core/text_capture.py +206 -0
- olly_desktop-1.2.1/core/text_inject.py +56 -0
- olly_desktop-1.2.1/core/window_utils/__init__.py +30 -0
- olly_desktop-1.2.1/core/window_utils/unix.py +197 -0
- olly_desktop-1.2.1/core/window_utils/win32.py +127 -0
- olly_desktop-1.2.1/docs/install-notes.md +28 -0
- olly_desktop-1.2.1/installer.iss +112 -0
- olly_desktop-1.2.1/launch.bat +41 -0
- olly_desktop-1.2.1/launch.sh +34 -0
- olly_desktop-1.2.1/launch.vbs +2 -0
- olly_desktop-1.2.1/main.py +297 -0
- olly_desktop-1.2.1/packaging/linux/ai-assistant.desktop +7 -0
- olly_desktop-1.2.1/pyproject.toml +78 -0
- olly_desktop-1.2.1/pytest.ini +5 -0
- olly_desktop-1.2.1/requirements-build.txt +2 -0
- olly_desktop-1.2.1/requirements-dev.txt +3 -0
- olly_desktop-1.2.1/requirements-windows.txt +2 -0
- olly_desktop-1.2.1/requirements.txt +19 -0
- olly_desktop-1.2.1/ui/__init__.py +1 -0
- olly_desktop-1.2.1/ui/ai_popup.py +1415 -0
- olly_desktop-1.2.1/ui/floating_button.py +254 -0
- olly_desktop-1.2.1/ui/markdown_render.py +65 -0
- olly_desktop-1.2.1/ui/onboarding_wizard.py +358 -0
- olly_desktop-1.2.1/ui/settings_dialog.py +675 -0
- olly_desktop-1.2.1/ui/styles/__init__.py +76 -0
- olly_desktop-1.2.1/ui/styles/base.py +72 -0
- olly_desktop-1.2.1/ui/styles/linux.py +200 -0
- olly_desktop-1.2.1/ui/styles/macos.py +250 -0
- olly_desktop-1.2.1/ui/styles/theme_detect.py +71 -0
- olly_desktop-1.2.1/ui/styles/windows.py +206 -0
- olly_desktop-1.2.1/ui/toast.py +49 -0
- olly_desktop-1.2.1/ui/tool_confirm.py +72 -0
- olly_desktop-1.2.1/ui/tray_icon.py +25 -0
- olly_desktop-1.2.1/utils/__init__.py +1 -0
- olly_desktop-1.2.1/utils/hotkey_manager.py +97 -0
- olly_desktop-1.2.1/utils/hotkey_validate.py +16 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Virtual environment
|
|
2
|
+
venv/
|
|
3
|
+
.venv/
|
|
4
|
+
env/
|
|
5
|
+
|
|
6
|
+
# Python cache
|
|
7
|
+
__pycache__/
|
|
8
|
+
*.py[cod]
|
|
9
|
+
*.pyo
|
|
10
|
+
*.pyd
|
|
11
|
+
*.pyc
|
|
12
|
+
.pytest_cache/
|
|
13
|
+
|
|
14
|
+
# PyInstaller / build output
|
|
15
|
+
build/
|
|
16
|
+
dist/
|
|
17
|
+
*.spec.bak
|
|
18
|
+
*.egg-info/
|
|
19
|
+
main.build/
|
|
20
|
+
main.dist/
|
|
21
|
+
main.onefile-build/
|
|
22
|
+
installer_output/
|
|
23
|
+
|
|
24
|
+
# Built binaries (local dev)
|
|
25
|
+
OllamaSetup.exe
|
|
26
|
+
AIAssistant.exe
|
|
27
|
+
AIAssistantSetup.exe
|
|
28
|
+
|
|
29
|
+
# IDE
|
|
30
|
+
.vscode/
|
|
31
|
+
.idea/
|
|
32
|
+
|
|
33
|
+
# OS
|
|
34
|
+
.DS_Store
|
|
35
|
+
Thumbs.db
|
|
36
|
+
|
|
37
|
+
# Logs
|
|
38
|
+
*.log
|
|
39
|
+
|
|
40
|
+
# ChromaDB / RAG data
|
|
41
|
+
chroma_db/
|
|
42
|
+
*.db
|
|
43
|
+
|
|
44
|
+
# Secrets
|
|
45
|
+
.env
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Build artifacts — never ship these
|
|
2
|
+
main.build/
|
|
3
|
+
main.dist/
|
|
4
|
+
main.onefile-build/
|
|
5
|
+
installer_output/
|
|
6
|
+
*.spec
|
|
7
|
+
*.dmg
|
|
8
|
+
*.exe
|
|
9
|
+
|
|
10
|
+
# Dev/test
|
|
11
|
+
tests/
|
|
12
|
+
.github/
|
|
13
|
+
.pytest_cache/
|
|
14
|
+
__pycache__/
|
|
15
|
+
*.pyc
|
|
16
|
+
|
|
17
|
+
# Large assets not needed at runtime
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tp-0604
|
|
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.
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: olly-desktop
|
|
3
|
+
Version: 1.2.1
|
|
4
|
+
Summary: Local-first AI assistant with agent mode, RAG, and MCP support
|
|
5
|
+
Project-URL: Homepage, https://github.com/tp-0604/ai-assistant
|
|
6
|
+
Project-URL: Repository, https://github.com/tp-0604/ai-assistant
|
|
7
|
+
Project-URL: Bug Tracker, https://github.com/tp-0604/ai-assistant/issues
|
|
8
|
+
License: MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2026 tp-0604
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
License-File: LICENSE
|
|
30
|
+
Keywords: agent,ai,assistant,llm,mcp,ollama,rag
|
|
31
|
+
Classifier: Development Status :: 4 - Beta
|
|
32
|
+
Classifier: Environment :: MacOS X
|
|
33
|
+
Classifier: Environment :: Win32 (MS Windows)
|
|
34
|
+
Classifier: Environment :: X11 Applications :: Qt
|
|
35
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
36
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
37
|
+
Classifier: Programming Language :: Python :: 3
|
|
38
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
39
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
40
|
+
Classifier: Topic :: Desktop Environment
|
|
41
|
+
Requires-Python: >=3.11
|
|
42
|
+
Requires-Dist: chromadb>=0.4.22
|
|
43
|
+
Requires-Dist: mcp<2.0.0,>=1.9.0
|
|
44
|
+
Requires-Dist: mss>=9.0.0
|
|
45
|
+
Requires-Dist: pillow>=10.2.0
|
|
46
|
+
Requires-Dist: pynput>=1.7.6
|
|
47
|
+
Requires-Dist: pypdf>=4.0.0
|
|
48
|
+
Requires-Dist: pyperclip>=1.8.2
|
|
49
|
+
Requires-Dist: pyqt6>=6.6.0
|
|
50
|
+
Requires-Dist: pytesseract>=0.3.10
|
|
51
|
+
Requires-Dist: python-docx>=1.1.0
|
|
52
|
+
Requires-Dist: pywinauto>=0.6.8; sys_platform == 'win32'
|
|
53
|
+
Requires-Dist: requests>=2.31.0
|
|
54
|
+
Requires-Dist: watchdog>=4.0.0
|
|
55
|
+
Provides-Extra: dev
|
|
56
|
+
Requires-Dist: pyinstaller>=6.0.0; extra == 'dev'
|
|
57
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
58
|
+
Description-Content-Type: text/markdown
|
|
59
|
+
|
|
60
|
+
# ✦ AI Assistant
|
|
61
|
+
|
|
62
|
+
A **cross-platform desktop AI assistant** that lives in your system tray and works on whatever you are already doing — selected text, screenshots, clipboard images, and your own documents. It runs through **[Ollama](https://ollama.com)** so models stay **local by default**, with optional support for remote or cloud Ollama endpoints when you choose.
|
|
63
|
+
|
|
64
|
+

|
|
65
|
+

|
|
66
|
+

|
|
67
|
+

|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## What makes this different
|
|
72
|
+
|
|
73
|
+
Most AI tools today are **browser tabs, IDE plugins, or single-platform utilities** tied to one vendor’s cloud. This project is built around a different idea: **bring a capable assistant to the OS layer**, without replacing your apps or sending everything to a SaaS backend.
|
|
74
|
+
|
|
75
|
+
| | Typical cloud assistants (ChatGPT, Copilot, Gemini) | Ollama WebUI / chat apps | **This project** |
|
|
76
|
+
|---|-----------------------------------------------------|--------------------------|------------------|
|
|
77
|
+
| **Where it runs** | Vendor cloud | Local server in a browser tab | Native desktop app (Windows, macOS, Linux) |
|
|
78
|
+
| **How you invoke it** | Switch app, paste, type | Open browser, paste | **Selection action bar** at the cursor, global hotkey, tray |
|
|
79
|
+
| **Context from your work** | Manual copy-paste | Manual copy-paste | Captures selection, **target window**, screenshots |
|
|
80
|
+
| **Your files** | Upload per chat / enterprise connectors | Manual upload or plugins | **Folder RAG** — index a directory, ask from the action bar |
|
|
81
|
+
| **Model choice** | Vendor models only | Any Ollama model | Any Ollama model + quality presets + vision model picker |
|
|
82
|
+
| **Privacy posture** | Data leaves device by default | Stays local if Ollama is local | **Local-first**; you control URL, capture, and offline mode |
|
|
83
|
+
| **Insert back into apps** | Copy manually | Copy manually | **Insert last reply** hotkey into the foreground app |
|
|
84
|
+
|
|
85
|
+
### Novel behaviors this project incorporates
|
|
86
|
+
|
|
87
|
+
**1. Selection action bar (not a radial menu, not a sidebar)**
|
|
88
|
+
After you select text, a compact toolbar appears near the cursor with one-click intents: Explain, Summarize, Translate, Ask, Screen, and Ask my files. Other tools usually make you open a separate window and paste — here the intent is chosen in context.
|
|
89
|
+
|
|
90
|
+
**2. Foreground-aware capture**
|
|
91
|
+
Before the assistant takes focus, it remembers which window and cursor position you were using. Screen capture targets **that** window — not the assistant’s own popup. That avoids the common “screenshot captured my chat window” failure mode.
|
|
92
|
+
|
|
93
|
+
**3. System-wide workflow, not app-specific**
|
|
94
|
+
Works in browsers, editors, PDF readers, terminals, and more via OS-level selection and hotkeys — not only inside one host application.
|
|
95
|
+
|
|
96
|
+
**4. Local RAG on a folder you own**
|
|
97
|
+
Point at a watch folder (Documents, a project directory, etc.). Files are chunked and embedded with Ollama; **Ask my files** pulls relevant passages into the prompt. No per-file upload dance each session.
|
|
98
|
+
|
|
99
|
+
**5. Vision from the desktop**
|
|
100
|
+
Paste images, capture a window, or use the Screen action for LeetCode-style problems, UI mockups, or diagrams — with configurable vision timeouts and image sizing for slow or cloud vision models.
|
|
101
|
+
|
|
102
|
+
**6. Native UI per platform**
|
|
103
|
+
PyQt6 with dedicated styling for Windows (Segoe), macOS (translucent / SF Pro), and Linux (GNOME-inspired) — not a generic Electron shell.
|
|
104
|
+
|
|
105
|
+
**7. Power-user controls others often hide**
|
|
106
|
+
Quality presets, custom model names, thinking-mode toggle for Qwen3/cloud models, remote Ollama URL detection with adjusted timeouts, chat export, recent chats, tone chips (Shorter / Simpler / Formal), and insert-reply hotkey.
|
|
107
|
+
|
|
108
|
+
### What others do that this project does not (by design)
|
|
109
|
+
|
|
110
|
+
- **No bundled proprietary model** — you install and choose models via Ollama.
|
|
111
|
+
- **No multi-user cloud sync** — chats live in your app data directory on your machine.
|
|
112
|
+
- **No IDE-only scope** — it is a general desktop assistant, not a code-editor extension.
|
|
113
|
+
- **No always-on cloud** — when Ollama runs locally, inference stays on your PC; cloud use is opt-in via your Ollama URL and model choice.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Features
|
|
118
|
+
|
|
119
|
+
- **Selection action bar** — Explain, Summarize, Translate, Ask, Screen, Ask my files
|
|
120
|
+
- **Global hotkey** — open assistant with current selection (Alt+S on Windows/Linux, ⌥S on macOS)
|
|
121
|
+
- **Insert reply** — paste the last AI response into any app (Ctrl+Shift+V / ⌘⇧V)
|
|
122
|
+
- **Vision** — paste images, screenshot button, window/screen capture from the action bar
|
|
123
|
+
- **RAG** — index a configurable folder with Chroma + Ollama embeddings
|
|
124
|
+
- **Chat** — streaming, recent chats, export, tone chips, safe markdown code rendering
|
|
125
|
+
- **Settings UI** — tabbed: general, AI & models, hotkeys, files, advanced
|
|
126
|
+
- **First-run wizard** — Ollama setup and model download with progress
|
|
127
|
+
- **Tray integration** — launch at login, new chat, settings, paste screenshot, quit
|
|
128
|
+
- **Platform UI** — Windows, macOS (liquid glass), Linux (GNOME-inspired)
|
|
129
|
+
|
|
130
|
+
### Agent mode (beta)
|
|
131
|
+
|
|
132
|
+
Opt in via **Settings → AI & models → Enable tools (beta)**. When enabled and your model supports Ollama tool calling (e.g. qwen3, llama3.2), the assistant can run a short read-only tool loop before answering:
|
|
133
|
+
|
|
134
|
+
- **Search indexed files** — RAG over your watch folder
|
|
135
|
+
- **List / read files** — only inside the configured watch folder (path-scoped; no arbitrary disk access)
|
|
136
|
+
- **Read clipboard** — current text clipboard
|
|
137
|
+
- **Capture screen** — OCR text from the foreground window (respects the screen-capture setting)
|
|
138
|
+
|
|
139
|
+
Read-only tools use the same local-first rules as chat (including offline-only mode). Requires a tool-capable Ollama model; without one, chat falls back to plain streaming.
|
|
140
|
+
|
|
141
|
+
### Desktop actions (beta)
|
|
142
|
+
|
|
143
|
+
With **Enable tools** and **Allow desktop actions** both on in Settings, the AI can — each behind an **Allow / Deny** dialog — write text files **inside the watch folder only** (`.txt`, `.md`, `.csv`, `.json`, `.log`), paste text where you click after a 3-second countdown, open `http`/`https` links in your browser, and open documents from the watch folder.
|
|
144
|
+
|
|
145
|
+
Constraints: text insertion is unavailable on **Wayland**; on **macOS** it needs the same Accessibility permission as hotkeys. The assistant never runs programs, presses arbitrary keys, or moves the mouse.
|
|
146
|
+
|
|
147
|
+
### MCP servers (beta)
|
|
148
|
+
|
|
149
|
+
Configure **stdio** MCP servers in **Settings → Advanced → MCP servers**. When agent mode and MCP are enabled, tools from connected servers are advertised to the model automatically. Anything the server does **not** mark with a read-only hint triggers an **Allow / Deny** dialog that shows the exact arguments before execution.
|
|
150
|
+
|
|
151
|
+
- **Disabled in offline-only mode** — MCP servers are third-party programs that may use the network.
|
|
152
|
+
- **Trust on first connect** — you must explicitly trust a server before it is started.
|
|
153
|
+
- **Requires the server's runtime** — e.g. Node.js for `npx @modelcontextprotocol/server-filesystem …`.
|
|
154
|
+
|
|
155
|
+
**Example:** add a filesystem server scoped to a notes folder (`npx -y @modelcontextprotocol/server-filesystem ~/Notes`). Ask the agent to find action items from meeting notes; it can search and read files in that folder, then summarize. If it needs to write `todo.md`, a non-read-only MCP tool shows the confirmation dialog first.
|
|
156
|
+
|
|
157
|
+
SSE/HTTP MCP transport and image tool results are not in this release.
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## Privacy & data
|
|
162
|
+
|
|
163
|
+
| Default | Your choice |
|
|
164
|
+
|---------|-------------|
|
|
165
|
+
| Ollama at `127.0.0.1` | Point to a remote or cloud Ollama URL in Settings |
|
|
166
|
+
| Chats stored under app data on your PC | Export or delete via the chat menu |
|
|
167
|
+
| Screen capture can be disabled | Toggle in Settings → Advanced |
|
|
168
|
+
| Images stripped from saved chat JSON | Raw prompts with base64 are not persisted |
|
|
169
|
+
|
|
170
|
+
When Ollama runs locally, prompts and model output stay on your machine. If you use a cloud model (for example `qwen3-vl:235b-cloud`), inference goes to that endpoint — configure it explicitly in **Settings → AI & models**.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Installation
|
|
175
|
+
|
|
176
|
+
### Recommended — pip (all platforms, no signing warnings)
|
|
177
|
+
|
|
178
|
+
Requires Python 3.11+ and [Ollama](https://ollama.com) running locally.
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
pip install olly-desktop
|
|
182
|
+
olly
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
For an isolated install (recommended if you use Python for other things):
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
python -m venv ~/.venvs/olly-desktop
|
|
189
|
+
source ~/.venvs/olly-desktop/bin/activate # Windows: .venvs\olly-desktop\Scripts\activate
|
|
190
|
+
pip install olly-desktop
|
|
191
|
+
olly
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Binary installers (optional)
|
|
195
|
+
|
|
196
|
+
Pre-built `.dmg` (macOS) and `.exe` (Windows) installers are attached to each
|
|
197
|
+
[GitHub release](https://github.com/tp-0604/ai-assistant/releases).
|
|
198
|
+
|
|
199
|
+
> **Note:** The binaries are unsigned. macOS will block the `.dmg` at first launch —
|
|
200
|
+
> see [Installation notes](docs/install-notes.md) for the one-time workaround.
|
|
201
|
+
> The pip install above has no such restriction.
|
|
202
|
+
|
|
203
|
+
| Platform | File | Notes |
|
|
204
|
+
|----------|------|-------|
|
|
205
|
+
| Windows | `AIAssistantSetup.exe` | Recommended installer |
|
|
206
|
+
| Windows | `AIAssistant.exe` | Portable build |
|
|
207
|
+
| macOS | `AIAssistant.dmg` | Drag to Applications |
|
|
208
|
+
| Linux | `AIAssistant-linux-x64.tar.gz` | Extract and run `AIAssistant/AIAssistant` |
|
|
209
|
+
|
|
210
|
+
### Platform notes
|
|
211
|
+
|
|
212
|
+
| OS | Permissions / limits |
|
|
213
|
+
|----|----------------------|
|
|
214
|
+
| **Windows** | Antivirus may flag global hooks once — add an exclusion if prompted |
|
|
215
|
+
| **macOS** | Grant **Accessibility** for hotkeys and text capture |
|
|
216
|
+
| **Linux X11** | Best support for global hotkeys and selection capture |
|
|
217
|
+
| **Linux Wayland** | Global hotkeys, selection capture, and agent text insertion may be unavailable — use the tray menu |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## From source
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
git clone https://github.com/tp-0604/ai-assistant.git
|
|
225
|
+
cd ai-assistant
|
|
226
|
+
python -m venv venv
|
|
227
|
+
source venv/bin/activate # Windows: venv\Scripts\activate
|
|
228
|
+
pip install -r requirements.txt
|
|
229
|
+
# Windows only:
|
|
230
|
+
pip install -r requirements-windows.txt
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Install [Ollama](https://ollama.com), then:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# macOS / Linux
|
|
237
|
+
./launch.sh
|
|
238
|
+
# or
|
|
239
|
+
python main.py
|
|
240
|
+
|
|
241
|
+
# Windows
|
|
242
|
+
launch.bat
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## Usage
|
|
248
|
+
|
|
249
|
+
| Action | How |
|
|
250
|
+
|--------|-----|
|
|
251
|
+
| Selection bar | Select text (drag, or double-click a word if enabled in Settings) |
|
|
252
|
+
| Open assistant | **Alt+S** (Windows/Linux) · **⌥S** (macOS) |
|
|
253
|
+
| Paste image | **Ctrl+V** / **⌘V** in chat input |
|
|
254
|
+
| Insert last reply | **Ctrl+Shift+V** / **⌘⇧V** |
|
|
255
|
+
| Settings | Tray → Settings, or ⋮ in popup |
|
|
256
|
+
| Ask my files | Selection bar → **Files** (enable RAG and pick a folder in Settings) |
|
|
257
|
+
| Screenshot | Tray → Paste screenshot, or Screen in the action bar |
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Settings
|
|
262
|
+
|
|
263
|
+
Stored in the app data directory — editable via **Settings**:
|
|
264
|
+
|
|
265
|
+
| OS | Location |
|
|
266
|
+
|----|----------|
|
|
267
|
+
| Windows | `%APPDATA%\AIAssistant\` |
|
|
268
|
+
| macOS | `~/Library/Application Support/AIAssistant/` |
|
|
269
|
+
| Linux | `~/.local/share/AIAssistant/` |
|
|
270
|
+
|
|
271
|
+
| Option | Description |
|
|
272
|
+
|--------|-------------|
|
|
273
|
+
| Quality preset | Speed / Balanced / Quality models |
|
|
274
|
+
| AI & models | LLM, vision model, thinking mode, timeouts, Ollama URL |
|
|
275
|
+
| Hotkeys | Global open and insert-reply shortcuts |
|
|
276
|
+
| Ask my files | RAG folder, enable/disable indexing |
|
|
277
|
+
| Theme | Follow system / Dark / Light |
|
|
278
|
+
| Advanced | Screen capture, image limits, system prompt, offline-only |
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Build & release
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# Windows
|
|
286
|
+
build.bat
|
|
287
|
+
|
|
288
|
+
# macOS
|
|
289
|
+
./build.sh mac
|
|
290
|
+
|
|
291
|
+
# Linux
|
|
292
|
+
./build.sh linux
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
Push a version tag to build all platforms and publish to GitHub Releases:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
git tag v1.2.0
|
|
299
|
+
git push origin v1.2.0
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
CI (`.github/workflows/build.yml`) runs tests, builds Windows/macOS/Linux artifacts, and uploads them to one release page.
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Project structure
|
|
307
|
+
|
|
308
|
+
```
|
|
309
|
+
ai-assistant/
|
|
310
|
+
├── main.py # Entry point, tray, services
|
|
311
|
+
├── core/ # Ollama client, settings, RAG, capture, platform
|
|
312
|
+
├── ui/ # Popup, action bar, settings, onboarding, markdown
|
|
313
|
+
├── ui/styles/ # windows.py, macos.py, linux.py
|
|
314
|
+
├── utils/ # Global hotkeys
|
|
315
|
+
├── packaging/ # Linux desktop file
|
|
316
|
+
├── AI_Assistant.*.spec # PyInstaller specs per OS
|
|
317
|
+
└── tests/
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## Optional: OCR
|
|
323
|
+
|
|
324
|
+
Install [Tesseract](https://github.com/tesseract-ocr/tesseract) for text extraction from images when no vision model is available.
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## License
|
|
329
|
+
|
|
330
|
+
MIT
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Publishing setup
|
|
2
|
+
|
|
3
|
+
## PyPI trusted publishing (one-time)
|
|
4
|
+
|
|
5
|
+
1. Create an account at [pypi.org](https://pypi.org) if you don't have one.
|
|
6
|
+
2. Go to pypi.org → Account settings → Publishing → Add a new publisher.
|
|
7
|
+
3. Fill in:
|
|
8
|
+
- PyPI project name: `olly-desktop`
|
|
9
|
+
- GitHub owner: `tp-0604`
|
|
10
|
+
- Repository: `ai-assistant`
|
|
11
|
+
- Workflow: `publish.yml`
|
|
12
|
+
- Environment: `pypi`
|
|
13
|
+
4. The PyPI project `olly-desktop` must already exist (create it under your account if needed).
|
|
14
|
+
|
|
15
|
+
## Releasing
|
|
16
|
+
|
|
17
|
+
1. Bump the version in `pyproject.toml`.
|
|
18
|
+
2. Update `CHANGELOG.md` (one line per notable change).
|
|
19
|
+
3. Push a tag: `git tag v1.2.1 && git push origin v1.2.1`
|
|
20
|
+
4. Go to GitHub → Releases → Draft a new release → choose the tag → **Publish** (not just save as draft).
|
|
21
|
+
5. The `publish.yml` workflow fires and pushes `olly-desktop` to PyPI.
|
|
22
|
+
6. The existing `build.yml` workflow fires and attaches the binary installers.
|
|
23
|
+
|
|
24
|
+
## Testing the package locally before releasing
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
pip install -e . # editable install from source
|
|
28
|
+
olly # console script
|
|
29
|
+
pip install dist/*.whl # or install the built wheel directly
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
After publish:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install olly-desktop
|
|
36
|
+
olly
|
|
37
|
+
```
|