Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
25f21c1
feat: add OCR and video analysis actions (#155)
AlanAAG Apr 14, 2026
fa0284e
improvement: use Gemini native video API as primary path in understan…
AlanAAG Apr 16, 2026
8050b7c
improvement:CI and readme update
zfoong Apr 16, 2026
6915894
fix(vlm): remove response_format json_object from byteplus, re-raise …
AlanAAG Apr 16, 2026
125cff4
fix(actions): split action_sets string into proper list in perform_oc…
AlanAAG Apr 16, 2026
247ee92
fix: wire independent VLM provider/model/key resolution and add avail…
AlanAAG Apr 16, 2026
f00ae32
refactor(vlm): unify multimodal, deduplicate OCR path, dynamic video …
AlanAAG Apr 17, 2026
3d08d8d
Issues #207, #191 , and the LLM provider to local LLM switching direc…
korivi-CraftOS Apr 20, 2026
5d3a331
bug/fix issue 210 and 208
zfoong Apr 20, 2026
91978c8
bug:fix attachment item alignment issue in chat panel
zfoong Apr 20, 2026
ef4e771
Md's no size limit Issued Fixed:
korivi-CraftOS Apr 20, 2026
a7f48f2
Merge branch 'V1.3.0' of https://github.com/CraftOS-dev/CraftBot into…
korivi-CraftOS Apr 20, 2026
93d99de
Readme: more languages support
zfoong Apr 20, 2026
506bca1
README:add more languages support
zfoong Apr 20, 2026
20d8e9a
Temporary disable ci script
zfoong Apr 20, 2026
8b59767
Add drag & drop and copy-paste file support directly into the chat te…
korivi-CraftOS Apr 21, 2026
eb65ead
memory improvement
zfoong Apr 21, 2026
866601e
merge(vlm): resolve conflicts with dev branch, unify VLM providers an…
AlanAAG Apr 21, 2026
6c0b2c2
chore: remove test files from PR
AlanAAG Apr 21, 2026
670e5f0
update test deletion and future annotations for tests, prepared for f…
AlanAAG Apr 21, 2026
fdf9171
fix: unify mime-type to image/jpeg in generate_multimodal
AlanAAG Apr 21, 2026
29ee8a5
chore(config): revert personal dev config changes from settings, mcp_…
AlanAAG Apr 21, 2026
9552308
chore(actions): remove unused execute alias from perform_ocr and unde…
AlanAAG Apr 21, 2026
5e0a957
refactor(vlm): merge _openai_describe_bytes_plain into _openai_descri…
AlanAAG Apr 21, 2026
c97536e
fix(decorators): restore correct position of from __future__ import a…
AlanAAG Apr 21, 2026
932faad
chore: restore from __future__ import annotations across all files (r…
AlanAAG Apr 21, 2026
76e8c29
chore: remove temporary restore script
AlanAAG Apr 21, 2026
31dc4a0
CI. & README improvements
korivi-CraftOS Apr 21, 2026
e5999d8
memory improvement
korivi-CraftOS Apr 21, 2026
bedb997
move memory setting into config
zfoong Apr 22, 2026
836daf4
Merge pull request #212 from CraftOS-dev/improvement/memory-update
korivi-CraftOS Apr 22, 2026
1841021
Merge pull request #211 from CraftOS-dev/fix/launch-readiness
korivi-CraftOS Apr 22, 2026
fa3ba13
squashed living-UI work
ahmad-ajmal Apr 21, 2026
8df2d0a
merge chat drag and drop
ahmad-ajmal Apr 21, 2026
21d2831
socket closes mid install
ahmad-ajmal Apr 21, 2026
b71dee2
add comment on understand_video.py explaining dual path execution ins…
AlanAAG Apr 22, 2026
2fdc2bf
release onboarding file path fix
ahmad-ajmal Apr 22, 2026
ecac851
add video to the action sets and define video in the DEFAULT_ST_DESCR…
AlanAAG Apr 22, 2026
2448bf6
modify import from google.generativeai to the new supported google.genai
AlanAAG Apr 22, 2026
bbb97f9
Testing updater flow
ahmad-ajmal Apr 22, 2026
10e3efa
update: spawn external updater script instead of in-process git+restart
ahmad-ajmal Apr 22, 2026
f95f24b
Merge pull request #220 from CraftOS-dev/feature/living-UI
ahmad-ajmal Apr 22, 2026
76c1f47
Merge pull request #196 from CraftOS-dev/feature/ocr-video-actions
ahmad-ajmal Apr 22, 2026
bf74095
Living UI: Backend installation issue fixed, onboarding redirection i…
korivi-CraftOS Apr 23, 2026
5d45c12
Add mutly install piplren in the leving UI "Installing..." and col…
korivi-CraftOS Apr 23, 2026
67ffac9
Living UI Dome multi-install issue fixed.
korivi-CraftOS Apr 23, 2026
0a53666
marketplace apps consistent key issue fixed.
korivi-CraftOS Apr 23, 2026
396a7b3
living-ui , navigate improvements
korivi-CraftOS Apr 23, 2026
ba42604
UI-LayOut Improments!
korivi-CraftOS Apr 23, 2026
263a1bf
WebSocket loop processes issue
korivi-CraftOS Apr 23, 2026
e868bce
chat: optimistic bubbles + send resilience
ahmad-ajmal Apr 23, 2026
5b35843
Ctx calls issue fixed.
korivi-CraftOS Apr 23, 2026
bd54cc4
Merge branch 'V1.3.0' of https://github.com/CraftOS-dev/CraftBot into…
korivi-CraftOS Apr 23, 2026
846af5e
The py issue has been fixed in the marketplace!
korivi-CraftOS Apr 23, 2026
3fb0493
minor living UI button group button
zfoong Apr 23, 2026
0880d41
Update living UI setting and nav bar
zfoong Apr 23, 2026
63bc317
Add draggable to chat panel in living UI in mobile mode
zfoong Apr 24, 2026
40a43d6
Living UI ui update
zfoong Apr 24, 2026
61c2d6f
Add border to craftbot pet
zfoong Apr 24, 2026
0de4a2f
bug:GUI mode context leaked
zfoong Apr 24, 2026
e34e199
Added start history and disable GUI info in README
zfoong Apr 24, 2026
a1c8dbe
UI adjustment and chat panel resizing fix
zfoong Apr 24, 2026
96fe417
minor living UI button group button
zfoong Apr 23, 2026
e5a3865
Update living UI setting and nav bar
zfoong Apr 23, 2026
b64b954
Add draggable to chat panel in living UI in mobile mode
zfoong Apr 24, 2026
5ac509d
Living UI ui update
zfoong Apr 24, 2026
8fed3fa
Add border to craftbot pet
zfoong Apr 24, 2026
6b8c7f0
UI adjustment and chat panel resizing fix
zfoong Apr 24, 2026
172fd2e
fix: unblock agent on Python 3.14
ahmad-ajmal Apr 24, 2026
9d9e655
Minor UI update and fix, fix living UI not recognize command issue
zfoong Apr 24, 2026
3aa7fa8
merging incoming changes
zfoong Apr 24, 2026
0249827
Add a resize handle in chat panel in living UI
zfoong Apr 24, 2026
2a2fc0f
Merge pull request #223 from CraftOS-dev/improvement/living-ui-ui
ahmad-ajmal Apr 24, 2026
dc70de2
Update readme with living UI info
zfoong Apr 24, 2026
9d4cf1c
Update readme with living UI info
zfoong Apr 24, 2026
fb49133
Update readme with living UI info: minor fix
zfoong Apr 24, 2026
9e098d2
Merge pull request #225 from CraftOS-dev/V1.3.0
zfoong Apr 25, 2026
84e99a6
Merge pull request #226 from CraftOS-dev/dev
zfoong Apr 25, 2026
663184c
Remove integrations related action from conversation mode
zfoong Apr 25, 2026
e2988d3
minor living UI UI update
zfoong Apr 25, 2026
58a7557
Fix option not working bug: add proper property propagation
zfoong Apr 25, 2026
edcf887
Disable reply to task and chat bubble waiting for option selection
zfoong Apr 25, 2026
456a312
minor living UI setting page update
zfoong Apr 26, 2026
4b48c9c
Improvements in the installers and Updated the Redme.
korivi-CraftOS Apr 27, 2026
ab31a70
Port 7925 improved with smoother error handling for compatibility iss…
korivi-CraftOS Apr 27, 2026
449681a
fix living UI data communication issue
zfoong Apr 27, 2026
059c807
Improved the happy path issues!
korivi-CraftOS Apr 27, 2026
83e2d73
handle imported living UI not launching in browser interface correctly
zfoong Apr 27, 2026
22068c2
Update Bytelpus default model to seed because kimi is deprecated
zfoong Apr 27, 2026
a1e046b
Simplify chat routing and fix related leaks
ahmad-ajmal Apr 27, 2026
9729371
Merge pull request #228 from CraftOS-dev/V1.3.0
ahmad-ajmal Apr 27, 2026
23dfdc5
Merge pull request #229 from CraftOS-dev/dev
ahmad-ajmal Apr 27, 2026
7a270fd
staging lint check
ahmad-ajmal Apr 28, 2026
34d3a3e
Merge pull request #230 from CraftOS-dev/dev
ahmad-ajmal Apr 28, 2026
26cf47e
Build proper installer pipeline (CraftBotInstaller + agent payload)
ahmad-ajmal Apr 28, 2026
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/ci.yml.disabled
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: CI

on:
pull_request:
push:
branches:
- main
- dev
- "V*"

jobs:
lint:
name: Lint (ruff)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: pip

- name: Install ruff
run: pip install ruff

- name: Check formatting
run: ruff format --check .

- name: Run ruff check
run: ruff check .

smoke:
name: Smoke (syntax + imports)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: pip

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Byte-compile source tree
run: python -m compileall -q app agent_core agents decorators skills
139 changes: 73 additions & 66 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,31 @@ jobs:
with:
python-version: "3.10"

- name: Install Linux webview system packages
if: matrix.os_label == 'linux'
shell: bash
run: |
# PyGObject builds against these headers. WebKitGTK + the
# webkit2-4.0 GObject introspection bindings are what pywebview's
# GTK backend talks to at runtime. End users need the runtime
# halves of these too (libwebkit2gtk-4.0-37, gir1.2-webkit2-4.0).
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.0-37 \
gir1.2-webkit2-4.0 \
libgirepository1.0-dev \
libcairo2-dev \
python3-gi \
python3-gi-cairo

- name: Install dependencies
shell: bash
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# Installer-only deps (pywebview + per-OS backend bindings). Kept
# in a separate file so the agent's requirements.txt stays lean.
pip install -r packaging/requirements-installer.txt
pip install pyinstaller

- name: Set up Node.js
Expand All @@ -126,61 +146,55 @@ jobs:
run: |
echo "{\"use_conda\": false, \"gui_mode_enabled\": false}" > config.json

- name: Build with PyInstaller
- name: Write VERSION file from git tag
shell: bash
run: |
# github.ref_name is "v1.3.0" for tag pushes; strip the leading 'v'.
# The installer's _read_bundled_version() reads this to pin the
# download URL to the matching agent release.
REF="${{ github.ref_name }}"
VERSION="${REF#v}"
echo "$VERSION" > VERSION
echo "VERSION file content: $(cat VERSION)"

- name: Build agent (CraftBotAgent) with PyInstaller
shell: bash
run: pyinstaller --noconfirm --clean packaging/CraftBotAgent.spec

- name: Zip agent payload
shell: bash
run: |
pyinstaller \
--noconfirm \
--clean \
--onefile \
--name CraftBot \
--collect-submodules app \
--collect-submodules agent_core \
--collect-submodules agents \
--collect-submodules decorators \
--collect-submodules chromadb \
--hidden-import onnxruntime \
--hidden-import tokenizers \
--collect-data tiktoken_ext \
--collect-submodules tiktoken \
--exclude-module torch \
--exclude-module torchvision \
--exclude-module torchaudio \
--exclude-module triton \
--exclude-module nvidia \
--exclude-module transformers \
--exclude-module cv2 \
--exclude-module matplotlib \
--exclude-module tensorflow \
--additional-hooks-dir hooks \
--runtime-hook rthooks/rthook-rich-unicode.py \
--add-data "assets${{ matrix.data_sep }}assets" \
--add-data "main.py${{ matrix.data_sep }}." \
--add-data "config.json${{ matrix.data_sep }}." \
--add-data ".env.example${{ matrix.data_sep }}." \
--add-data "requirements.txt${{ matrix.data_sep }}." \
--add-data "environment.yml${{ matrix.data_sep }}." \
--add-data "app/config${{ matrix.data_sep }}app/config" \
--add-data "app/data${{ matrix.data_sep }}app/data" \
--add-data "app/ui_layer/browser/frontend/dist${{ matrix.data_sep }}app/ui_layer/browser/frontend/dist" \
--add-data "app/gui/docker-compose.yaml${{ matrix.data_sep }}app/gui" \
--add-data "app/gui/Dockerfile${{ matrix.data_sep }}app/gui" \
--add-data "app/gui/custom-cont-init.d${{ matrix.data_sep }}app/gui/custom-cont-init.d" \
--add-data "agents${{ matrix.data_sep }}agents" \
--add-data "skills${{ matrix.data_sep }}skills" \
run.py

- name: Rename artifact
# CraftBotAgent.spec produces dist/CraftBotAgent/ (folder).
# Zip it into the asset name the installer downloads at runtime.
cd dist
if [ "${{ matrix.os_label }}" = "windows" ]; then
7z a -tzip "CraftBot-agent-${{ matrix.os_label }}.zip" CraftBotAgent
else
zip -r "CraftBot-agent-${{ matrix.os_label }}.zip" CraftBotAgent
fi
ls -lh "CraftBot-agent-${{ matrix.os_label }}.zip"

- name: Build installer (CraftBotInstaller) with PyInstaller
shell: bash
run: pyinstaller --noconfirm --clean packaging/CraftBotInstaller.spec

- name: Rename installer artifact
shell: bash
run: |
mv "dist/CraftBot${{ matrix.ext }}" \
"dist/CraftBot-${{ matrix.os_label }}${{ matrix.ext }}"
mv "dist/CraftBotInstaller${{ matrix.ext }}" \
"dist/CraftBotInstaller-${{ matrix.os_label }}${{ matrix.ext }}"

- name: Upload installer artifact
uses: actions/upload-artifact@v4
with:
name: release-installer-${{ matrix.os_label }}
path: dist/CraftBotInstaller-${{ matrix.os_label }}${{ matrix.ext }}

- name: Upload artifact
- name: Upload agent zip artifact
uses: actions/upload-artifact@v4
with:
name: release-${{ matrix.os_label }}
path: dist/CraftBot-${{ matrix.os_label }}${{ matrix.ext }}
name: release-agent-${{ matrix.os_label }}
path: dist/CraftBot-agent-${{ matrix.os_label }}.zip

# ──────────────────────────────────────────────
# Create GitHub Release with all artifacts
Expand All @@ -202,21 +216,14 @@ jobs:
files: release/**
generate_release_notes: true
body: |
## Installation

### Docker Compose (Recommended)
Includes the agent, OmniParser, and GUI desktop VM — all in one.
```bash
git clone https://github.com/zfoong/CraftBot.git
cd CraftBot
cp .env.example .env # Edit with your API keys
docker compose up
```
For GPU acceleration on OmniParser:
```bash
docker compose -f docker-compose.yml -f docker-compose.gpu.yml up
```

### Standalone Binary
Download the binary for your platform from the assets below.
Requires Docker for GUI mode and Omniparser. Run with `--no-omniparser` to skip OmniParser setup. Run with `--no-conda` to skip conda setup and use system Python instead.
### Installer (Recommended)
Download `CraftBotInstaller-<platform>` from the assets below and
run it. The installer wizard will let you choose an install
location and will download the matching agent payload
(`CraftBot-agent-<platform>.zip`) from this same release.

### Manual install
If you'd rather skip the wizard, download both
`CraftBotInstaller-<platform>` and `CraftBot-agent-<platform>.zip`,
place them in the same folder, and run the installer — it'll find
the local zip instead of fetching from GitHub.
42 changes: 42 additions & 0 deletions .github/workflows/staging-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Staging Lint

on:
push:
branches: [staging]
pull_request:
branches: [staging]

jobs:
ruff:
name: Ruff (format + check)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: pip

- name: Install ruff
run: pip install ruff

- name: Check formatting
run: ruff format --check .

- name: Run ruff check
run: ruff check .

smoke:
name: Smoke (syntax + imports)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.10"
cache: pip

- name: Byte-compile source tree
run: python -m compileall -q app agent_core agents decorators skills
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,14 @@ build/
debug_images
.vscode/
.idea/
# PyInstaller auto-generates a <name>.spec when run without one — those are
# build artifacts. Our hand-written CraftBotInstaller.spec and
# CraftBotAgent.spec live under packaging/ and are source-of-truth for the
# release workflow, so they MUST be tracked. Keep the broad ignore but
# allow-list the two we own.
*.spec
!packaging/CraftBotInstaller.spec
!packaging/CraftBotAgent.spec
**/.whatsapp_web_sessions/
**/build
**/build_*
Expand All @@ -46,4 +53,6 @@ app/config/settings.json
**/USER.md
**/onboarding_config.json
**/config.json
!build_template.py
!build_template.py
docs/LIVING_UI_DEVELOPER_GUIDE.md
agent_file_system/ACTIONS.md
10 changes: 5 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ To ensure contributor feels welcome, we have this guide to help you get started
## 🌟 Links

- [Discord Community](https://discord.gg/W8jdMKdE)
- [Issue Tracker](https://github.com/zfoong/CraftBot/issues)
- [Issue Tracker](https://github.com/CraftOS-dev/CraftBot/issues)

## 1. 🚀 Ways to Contribute

Expand All @@ -24,7 +24,7 @@ Here are all the things you to contribute to the community.
## 📫 There are several ways to collaborate with the team and community:

### GitHub Collaboration
- [Open an issue](https://github.com/zfoong/CraftBot/issues) for bug reports, feature requests, or discussions
- [Open an issue](https://github.com/CraftOS-dev/CraftBot/issues) for bug reports, feature requests, or discussions
- Submit pull requests to contribute code or documentation
- Join ongoing discussions in existing issues and PRs

Expand All @@ -45,7 +45,7 @@ For faster responses, consider using our Discord channel where the whole communi

### Fork and Clone

1. Fork the [**CraftBot**](https://github.com/zfoong/CraftBot) repository
1. Fork the [**CraftBot**](https://github.com/CraftOS-dev/CraftBot) repository
2. Clone your fork:
```shell
git clone https://github.com/<your-github-username>/CraftBot.git
Expand Down Expand Up @@ -85,7 +85,7 @@ git push origin your-branch-name
```

2. Create a Pull Request:
- Go to the [**CraftBot** repository](https://github.com/zfoong/CraftBot)
- Go to the [**CraftBot** repository](https://github.com/CraftOS-dev/CraftBot)
- Click "Compare & Pull Request" and open a PR against dev branch
- Fill in the PR template with details about your changes

Expand All @@ -99,7 +99,7 @@ git push origin your-branch-name

## 6. 📫 To Get Help

- Open an [issue](https://github.com/zfoong/CraftBot)
- Open an [issue](https://github.com/CraftOS-dev/CraftBot)
- Join our Discord community

Thank you for contributing to **CraftBot**! 🌟
6 changes: 4 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
FROM python:3.10-slim

ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1
PYTHONUNBUFFERED=1 \
PIP_TIMEOUT=600 \
PIP_PROGRESS_BAR=off

RUN apt-get update \
&& apt-get install -y --no-install-recommends \
Expand Down Expand Up @@ -38,7 +40,7 @@ WORKDIR /app
COPY requirements.txt ./requirements.txt

RUN pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir -r requirements.txt
&& pip install --no-cache-dir --timeout 600 -r requirements.txt

COPY . .

Expand Down
Loading
Loading