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
49 changes: 49 additions & 0 deletions .github/workflows/pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ permissions:
jobs:
build:
runs-on: ubuntu-latest
outputs:
skip: ${{ steps.check.outputs.skip }}
version: ${{ steps.pkg.outputs.version }}
steps:
- name: Checkout
uses: actions/checkout@v4
Expand Down Expand Up @@ -69,19 +72,44 @@ jobs:
if: steps.check.outputs.skip != 'true'
run: python -m build --wheel

- name: Build Linux wheelhouse
if: steps.check.outputs.skip != 'true'
run: |
VERSION="${{ steps.pkg.outputs.version }}"
WHEEL="dist/cptr-${VERSION}-py3-none-any.whl"
mkdir -p wheelhouse
python -m pip download --dest wheelhouse "${WHEEL}[all]"
tar -czf "cptr-${VERSION}-linux-wheelhouse.tar.gz" -C wheelhouse .

- name: Generate checksums
if: steps.check.outputs.skip != 'true'
run: |
sha256sum dist/*.whl cptr-*-linux-wheelhouse.tar.gz > SHA256SUMS

- name: Upload dist artifacts
if: steps.check.outputs.skip != 'true'
uses: actions/upload-artifact@v4
with:
name: dist
path: dist/

- name: Upload release artifacts
if: steps.check.outputs.skip != 'true'
uses: actions/upload-artifact@v4
with:
name: release-assets
path: |
dist/*.whl
cptr-*-linux-wheelhouse.tar.gz
SHA256SUMS

publish:
needs: build
if: needs.build.outputs.skip != 'true'
runs-on: ubuntu-latest
environment: pypi
permissions:
contents: write
id-token: write
steps:
- name: Download dist artifacts
Expand All @@ -90,7 +118,28 @@ jobs:
name: dist
path: dist/

- name: Download release artifacts
uses: actions/download-artifact@v4
with:
name: release-assets
path: release-assets/

- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
# No API token needed - uses OIDC trusted publishing.
# Configure at: https://pypi.org/manage/project/cptr/settings/publishing/

- name: Upload GitHub release artifacts
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION: ${{ needs.build.outputs.version }}
run: |
for attempt in {1..12}; do
if gh release view "v${VERSION}" >/dev/null 2>&1; then
gh release upload "v${VERSION}" release-assets/* --clobber
exit 0
fi
sleep 10
done
echo "GitHub release v${VERSION} was not found" >&2
exit 1
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,26 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.7.6] - 2026-07-06

### Added

- 🔔 **Notification targets.** Send chat alerts to a webhook or one of your messaging bots, choose when alerts are sent, and test each destination from Settings.
- 🤖 **Cline agent support.** Add Cline as a coding agent and use it from chat alongside Codex, Claude Code, Cursor, Grok, and OpenCode.
- 📦 **Offline install guide.** Added setup steps for installing Computer in places without internet access after download.

### Changed

- 🧭 **Easier workspace start.** Recent workspaces are easier to find, scan, and reopen from the home screen.
- 🪟 **Better split tabs.** Drag tabs to the left, right, top, or bottom to make split panes, and move tabs between panes without losing them.
- 🌍 **More complete labels.** Updated labels for new notification and agent settings across supported languages.

### Fixed

- 📎 **Cleaner dragging.** Dragging tabs no longer wakes up file upload areas or chat attachments by mistake.
- 💬 **Messaging bot setup.** Slack, WhatsApp, and Signal bots can now be created from the same admin flow as Telegram and Discord.
- ✅ **More reliable chat endings.** Chats now settle more consistently at the end of a run, which keeps final status and alerts in sync.

## [0.7.5] - 2026-07-02

### Added
Expand Down
36 changes: 34 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ Bring your own API key (OpenAI, Anthropic, Ollama, or any OpenAI-compatible endp

Connect a coding agent as a native backend and use the subscription you already pay for. No separate API key needed.

**Codex** · **Claude Code** · **Cursor** · **Grok** · **OpenCode**
**Codex** · **Claude Code** · **Cursor** · **Grok** · **OpenCode** · **Cline**

Add an agent profile from Settings, pick your models, and it shows up in the model selector like any other provider. Conversations run inside your workspace with full tool access and resume where you left off.

Expand All @@ -121,7 +121,7 @@ Open WebUI Computer exposes an OpenAI-compatible API (`/v1/chat/completions`). A
|---|---|
| 🎙️ **Voice memos** | Record audio, auto-transcribe to markdown. |
| 💬 **Message queue** | Queue follow-up messages while the AI is responding. |
| 🔔 **Notifications** | Browser notifications and webhooks (Slack, Discord, Teams) when tasks finish. |
| 🔔 **Notifications** | Browser notifications plus named webhook or bot targets for chat events. |
| 📊 **Usage** | Token counts and timing on every response. |
| 📄 **System prompts** | Per-model, per-workspace, or global. Template variables included. |
| 📋 **Audit logging** | Structured audit trail of all API mutations with automatic redaction of sensitive data. |
Expand Down Expand Up @@ -170,6 +170,38 @@ If you bind-mount a host directory to `/data`, make sure that directory is writa

The `:dev` image is also available and tracks the `main` branch.

## Air-gapped installation

Open WebUI Computer does not need internet access after it is installed. The Python wheel includes the built frontend assets, and the Docker image is self-contained.

On a connected machine:

```bash
pip download --dest wheelhouse 'cptr[all]'
docker pull ghcr.io/open-webui/computer:latest
docker save ghcr.io/open-webui/computer:latest -o cptr-image.tar
```

Transfer the artifacts, then install or run offline:

```bash
python -m venv .venv
. .venv/bin/activate
pip install --no-index --find-links ./wheelhouse 'cptr[all]'
cptr run --host 0.0.0.0

docker load -i cptr-image.tar
docker run --rm -it \
--network=none \
-p 8000:8000 \
-v cptr-data:/data \
-v "$PWD:/workspace" \
-w /workspace \
ghcr.io/open-webui/computer:latest
```

Core local features run from local assets. External services such as hosted model APIs, web search providers, messaging adapters, Git remotes, and MCP/OpenAPI servers still require reachable endpoints.

## Security model

Open WebUI Computer is designed as **your computer, served to you**. Once authenticated, a user has full access to the host filesystem and shell, equivalent to an SSH session. There is no path sandboxing and no per-user isolation.
Expand Down
2 changes: 2 additions & 0 deletions cptr/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
git_router,
images_router,
memory_router,
notifications_router,
proxy_router,
search_router,
skills_router,
Expand Down Expand Up @@ -267,6 +268,7 @@ async def get_config():
app.include_router(git_router)
app.include_router(images_router)
app.include_router(memory_router)
app.include_router(notifications_router)
app.include_router(proxy_router)
app.include_router(search_router)
app.include_router(skills_router)
Expand Down
Loading
Loading