bos-ai 0.0.0__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.
- bos_ai-0.0.0/.dockerignore +10 -0
- bos_ai-0.0.0/.github/workflows/pr-title.yml +31 -0
- bos_ai-0.0.0/.github/workflows/release.yml +71 -0
- bos_ai-0.0.0/.gitignore +217 -0
- bos_ai-0.0.0/AGENTS.md +34 -0
- bos_ai-0.0.0/CHANGELOG.md +97 -0
- bos_ai-0.0.0/Dockerfile +37 -0
- bos_ai-0.0.0/LICENSE +24 -0
- bos_ai-0.0.0/PKG-INFO +350 -0
- bos_ai-0.0.0/README.md +301 -0
- bos_ai-0.0.0/docs/architecture/config-workspace.md +59 -0
- bos_ai-0.0.0/docs/architecture/core.md +66 -0
- bos_ai-0.0.0/docs/architecture/overview.md +45 -0
- bos_ai-0.0.0/docs/architecture/protocol.md +40 -0
- bos_ai-0.0.0/docs/architecture/runner.md +38 -0
- bos_ai-0.0.0/pyproject.toml +73 -0
- bos_ai-0.0.0/src/bos/__init__.py +0 -0
- bos_ai-0.0.0/src/bos/cli/commands/agent.py +313 -0
- bos_ai-0.0.0/src/bos/cli/commands/auth.py +130 -0
- bos_ai-0.0.0/src/bos/cli/commands/init.py +18 -0
- bos_ai-0.0.0/src/bos/cli/entry.py +59 -0
- bos_ai-0.0.0/src/bos/cli/tui_app.py +476 -0
- bos_ai-0.0.0/src/bos/config/__init__.py +3 -0
- bos_ai-0.0.0/src/bos/config/template.toml +122 -0
- bos_ai-0.0.0/src/bos/config/workspace.py +667 -0
- bos_ai-0.0.0/src/bos/core/__init__.py +145 -0
- bos_ai-0.0.0/src/bos/core/_utils.py +217 -0
- bos_ai-0.0.0/src/bos/core/actor.py +354 -0
- bos_ai-0.0.0/src/bos/core/agent.py +570 -0
- bos_ai-0.0.0/src/bos/core/chat_state.py +145 -0
- bos_ai-0.0.0/src/bos/core/contract.py +221 -0
- bos_ai-0.0.0/src/bos/core/defaults.py +260 -0
- bos_ai-0.0.0/src/bos/core/events.py +40 -0
- bos_ai-0.0.0/src/bos/core/harness.py +264 -0
- bos_ai-0.0.0/src/bos/core/llm.py +63 -0
- bos_ai-0.0.0/src/bos/core/registry.py +137 -0
- bos_ai-0.0.0/src/bos/extensions/actor_commands/system_cmd.py +159 -0
- bos_ai-0.0.0/src/bos/extensions/all.py +16 -0
- bos_ai-0.0.0/src/bos/extensions/channels/http.py +489 -0
- bos_ai-0.0.0/src/bos/extensions/channels/http_client.py +284 -0
- bos_ai-0.0.0/src/bos/extensions/channels/telegram.py +346 -0
- bos_ai-0.0.0/src/bos/extensions/mailboxes/jsonl_mailbox.py +139 -0
- bos_ai-0.0.0/src/bos/extensions/memory_stores/markdown_memory_store.py +55 -0
- bos_ai-0.0.0/src/bos/extensions/message_stores/jsonl_message_store.py +129 -0
- bos_ai-0.0.0/src/bos/extensions/providers/antigravity_provider.py +507 -0
- bos_ai-0.0.0/src/bos/extensions/providers/codex_provider.py +348 -0
- bos_ai-0.0.0/src/bos/extensions/providers/gemini_cli_provider.py +334 -0
- bos_ai-0.0.0/src/bos/extensions/providers/google_oauth.py +217 -0
- bos_ai-0.0.0/src/bos/extensions/tools/filesystem.py +306 -0
- bos_ai-0.0.0/src/bos/extensions/tools/knowledge.py +261 -0
- bos_ai-0.0.0/src/bos/extensions/tools/orchestration.py +57 -0
- bos_ai-0.0.0/src/bos/extensions/tools/system.py +143 -0
- bos_ai-0.0.0/src/bos/protocol/__init__.py +6 -0
- bos_ai-0.0.0/src/bos/protocol/content.py +144 -0
- bos_ai-0.0.0/src/bos/protocol/envelope.py +27 -0
- bos_ai-0.0.0/src/bos/protocol/message_types.py +14 -0
- bos_ai-0.0.0/src/bos/protocol/turn_events.py +68 -0
- bos_ai-0.0.0/src/bos/runner/__init__.py +14 -0
- bos_ai-0.0.0/src/bos/runner/_main.py +124 -0
- bos_ai-0.0.0/src/bos/runner/proc.py +292 -0
- bos_ai-0.0.0/src/bos/runner/runner.py +88 -0
- bos_ai-0.0.0/tests/test_actor_commands.py +359 -0
- bos_ai-0.0.0/tests/test_agent_tui_connect.py +77 -0
- bos_ai-0.0.0/tests/test_bootstrap.py +59 -0
- bos_ai-0.0.0/tests/test_chat_state.py +91 -0
- bos_ai-0.0.0/tests/test_event_sink.py +286 -0
- bos_ai-0.0.0/tests/test_harness.py +361 -0
- bos_ai-0.0.0/tests/test_http_channel.py +582 -0
- bos_ai-0.0.0/tests/test_init_command.py +28 -0
- bos_ai-0.0.0/tests/test_mailbox.py +171 -0
- bos_ai-0.0.0/tests/test_multimodal_support.py +354 -0
- bos_ai-0.0.0/tests/test_proc.py +105 -0
- bos_ai-0.0.0/tests/test_prompt_command.py +36 -0
- bos_ai-0.0.0/tests/test_registry.py +87 -0
- bos_ai-0.0.0/tests/test_runner.py +53 -0
- bos_ai-0.0.0/tests/test_telegram_channel.py +283 -0
- bos_ai-0.0.0/tests/test_tui_app.py +170 -0
- bos_ai-0.0.0/tests/test_web_search.py +138 -0
- bos_ai-0.0.0/tests/test_workspace_agents.py +451 -0
- bos_ai-0.0.0/tests/test_workspace_init.py +66 -0
- bos_ai-0.0.0/tests/test_workspace_runtime.py +191 -0
- bos_ai-0.0.0/uv.lock +1872 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: "PR Title Checker"
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types:
|
|
6
|
+
- opened
|
|
7
|
+
- edited
|
|
8
|
+
- synchronize
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
pull-requests: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
main:
|
|
16
|
+
name: Validate PR title
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: amannn/action-semantic-pull-request@v5
|
|
20
|
+
env:
|
|
21
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
22
|
+
with:
|
|
23
|
+
# Ensure PR titles follow conventional commits
|
|
24
|
+
# Example valid titles:
|
|
25
|
+
# feat: added a new cli command
|
|
26
|
+
# fix: resolved crash on startup
|
|
27
|
+
# docs: updated readme
|
|
28
|
+
requireScope: false
|
|
29
|
+
subjectPattern: ^(?![A-Z]).+$
|
|
30
|
+
subjectPatternError: |
|
|
31
|
+
The subject (description) of the PR title must start with a lowercase letter.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
on:
|
|
3
|
+
workflow_dispatch:
|
|
4
|
+
|
|
5
|
+
env:
|
|
6
|
+
REGISTRY: ghcr.io
|
|
7
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
release:
|
|
11
|
+
if: github.ref == 'refs/heads/main'
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
permissions:
|
|
14
|
+
id-token: write # Required for PyPI OIDC Trusted Publishing
|
|
15
|
+
contents: write # Required for PSR to push commits/tags
|
|
16
|
+
packages: write # Required to push container images to GHCR
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
fetch-depth: 0 # PSR needs full history to calculate versions
|
|
22
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
23
|
+
|
|
24
|
+
- name: Set up Python
|
|
25
|
+
uses: actions/setup-python@v5
|
|
26
|
+
with:
|
|
27
|
+
python-version-file: "pyproject.toml"
|
|
28
|
+
|
|
29
|
+
- name: Python Semantic Release
|
|
30
|
+
id: release
|
|
31
|
+
uses: python-semantic-release/python-semantic-release@v10.5.3
|
|
32
|
+
with:
|
|
33
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
34
|
+
verbosity: 1
|
|
35
|
+
|
|
36
|
+
# Publish to PyPI ONLY IF a new release was actually generated
|
|
37
|
+
- name: Publish package distributions to PyPI
|
|
38
|
+
if: steps.release.outputs.released == 'true'
|
|
39
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
40
|
+
|
|
41
|
+
- name: Set up Docker Buildx
|
|
42
|
+
if: steps.release.outputs.released == 'true'
|
|
43
|
+
uses: docker/setup-buildx-action@v3
|
|
44
|
+
|
|
45
|
+
- name: Log in to GHCR
|
|
46
|
+
if: steps.release.outputs.released == 'true'
|
|
47
|
+
uses: docker/login-action@v3
|
|
48
|
+
with:
|
|
49
|
+
registry: ${{ env.REGISTRY }}
|
|
50
|
+
username: ${{ github.actor }}
|
|
51
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
52
|
+
|
|
53
|
+
- name: Extract Docker metadata
|
|
54
|
+
if: steps.release.outputs.released == 'true'
|
|
55
|
+
id: docker_meta
|
|
56
|
+
uses: docker/metadata-action@v5
|
|
57
|
+
with:
|
|
58
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
59
|
+
tags: |
|
|
60
|
+
type=raw,value=${{ steps.release.outputs.version }}
|
|
61
|
+
type=raw,value=${{ steps.release.outputs.tag }}
|
|
62
|
+
type=raw,value=latest,enable=${{ steps.release.outputs.is_prerelease != 'true' }}
|
|
63
|
+
|
|
64
|
+
- name: Build and push Docker image to GHCR
|
|
65
|
+
if: steps.release.outputs.released == 'true'
|
|
66
|
+
uses: docker/build-push-action@v6
|
|
67
|
+
with:
|
|
68
|
+
context: .
|
|
69
|
+
push: true
|
|
70
|
+
tags: ${{ steps.docker_meta.outputs.tags }}
|
|
71
|
+
labels: ${{ steps.docker_meta.outputs.labels }}
|
bos_ai-0.0.0/.gitignore
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
# Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
# uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
# poetry.lock
|
|
109
|
+
# poetry.toml
|
|
110
|
+
|
|
111
|
+
# pdm
|
|
112
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
113
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
114
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
115
|
+
# pdm.lock
|
|
116
|
+
# pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# pixi
|
|
121
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
122
|
+
# pixi.lock
|
|
123
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
124
|
+
# in the .local directory. It is recommended not to include this directory in version control.
|
|
125
|
+
.pixi
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# Redis
|
|
135
|
+
*.rdb
|
|
136
|
+
*.aof
|
|
137
|
+
*.pid
|
|
138
|
+
|
|
139
|
+
# RabbitMQ
|
|
140
|
+
mnesia/
|
|
141
|
+
rabbitmq/
|
|
142
|
+
rabbitmq-data/
|
|
143
|
+
|
|
144
|
+
# ActiveMQ
|
|
145
|
+
activemq-data/
|
|
146
|
+
|
|
147
|
+
# SageMath parsed files
|
|
148
|
+
*.sage.py
|
|
149
|
+
|
|
150
|
+
# Environments
|
|
151
|
+
.env
|
|
152
|
+
.envrc
|
|
153
|
+
.local
|
|
154
|
+
env/
|
|
155
|
+
venv/
|
|
156
|
+
ENV/
|
|
157
|
+
env.bak/
|
|
158
|
+
venv.bak/
|
|
159
|
+
|
|
160
|
+
# Spyder project settings
|
|
161
|
+
.spyderproject
|
|
162
|
+
.spyproject
|
|
163
|
+
|
|
164
|
+
# Rope project settings
|
|
165
|
+
.ropeproject
|
|
166
|
+
|
|
167
|
+
# mkdocs documentation
|
|
168
|
+
/site
|
|
169
|
+
|
|
170
|
+
# mypy
|
|
171
|
+
.mypy_cache/
|
|
172
|
+
.dmypy.json
|
|
173
|
+
dmypy.json
|
|
174
|
+
|
|
175
|
+
# Pyre type checker
|
|
176
|
+
.pyre/
|
|
177
|
+
|
|
178
|
+
# pytype static type analyzer
|
|
179
|
+
.pytype/
|
|
180
|
+
|
|
181
|
+
# Cython debug symbols
|
|
182
|
+
cython_debug/
|
|
183
|
+
|
|
184
|
+
# PyCharm
|
|
185
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
186
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
187
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
188
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
189
|
+
# .idea/
|
|
190
|
+
|
|
191
|
+
# Abstra
|
|
192
|
+
# Abstra is an AI-powered process automation framework.
|
|
193
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
194
|
+
# Learn more at https://abstra.io/docs
|
|
195
|
+
.abstra/
|
|
196
|
+
|
|
197
|
+
# Visual Studio Code
|
|
198
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
199
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
200
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
201
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
202
|
+
# .vscode/
|
|
203
|
+
|
|
204
|
+
# Ruff stuff:
|
|
205
|
+
.ruff_cache/
|
|
206
|
+
|
|
207
|
+
# PyPI configuration file
|
|
208
|
+
.pypirc
|
|
209
|
+
|
|
210
|
+
# Marimo
|
|
211
|
+
marimo/_static/
|
|
212
|
+
marimo/_lsp/
|
|
213
|
+
__marimo__/
|
|
214
|
+
|
|
215
|
+
# Streamlit
|
|
216
|
+
.streamlit/secrets.toml
|
|
217
|
+
.omx/
|
bos_ai-0.0.0/AGENTS.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Repository Guidance
|
|
2
|
+
|
|
3
|
+
This `AGENTS.md` applies to the entire repository.
|
|
4
|
+
|
|
5
|
+
## Toolchain
|
|
6
|
+
|
|
7
|
+
- Use `uv run ...` for Python entrypoints, tests, and linting.
|
|
8
|
+
- The project targets Python `>=3.13` via [pyproject.toml](/Users/jerry/Repo/workbench/bos-ai/pyproject.toml).
|
|
9
|
+
- Do not assume the system `python3` is suitable. On this machine it is older and can fail on `tomllib`.
|
|
10
|
+
- When you need the CLI locally, prefer `uv run bos ...`.
|
|
11
|
+
|
|
12
|
+
## Common Commands
|
|
13
|
+
|
|
14
|
+
- Run the full test suite: `uv run pytest -q`
|
|
15
|
+
- Run a focused test file: `uv run pytest -q tests/test_workspace_runtime.py`
|
|
16
|
+
- Run lint: `uv run ruff check src tests`
|
|
17
|
+
- Run the CLI help: `uv run bos --help`
|
|
18
|
+
|
|
19
|
+
## Repo Layout
|
|
20
|
+
|
|
21
|
+
- `src/bos/config`: workspace discovery and TOML-backed config loading
|
|
22
|
+
- `src/bos/core`: runtime primitives, contracts, harness, agent loop
|
|
23
|
+
- `src/bos/extensions`: channels, tools, stores, and other extension implementations
|
|
24
|
+
- `src/bos/runner`: runtime assembly and process/container lifecycle
|
|
25
|
+
- `src/bos/protocol`: shared message contracts
|
|
26
|
+
- `tests`: pytest coverage for config, runner, channels, harness, and CLI behavior
|
|
27
|
+
|
|
28
|
+
## Working Notes
|
|
29
|
+
|
|
30
|
+
- Keep package boundaries explicit. If you change config loading behavior, check whether `README.md` and `docs/architecture/*.md` also need updates.
|
|
31
|
+
- Prefer small, reversible diffs and extend existing patterns before adding new abstractions.
|
|
32
|
+
- If a change touches config/runtime behavior, add or update targeted pytest coverage in `tests/`.
|
|
33
|
+
- `uv run ruff check src tests` is a useful signal, but the repo may already contain unrelated lint findings. Do not assume a lint failure came from your change without checking the reported files.
|
|
34
|
+
- Pull request titles must follow semantic/conventional format, for example `feat(config): ...` or `fix(runner): ...`, because GitHub Actions validate the PR title.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
<!-- version list -->
|
|
4
|
+
|
|
5
|
+
## v0.0.0 (2026-04-27)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## v0.2.0 (2026-04-27)
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
- **config**: Anchor broadcast state under bos dir
|
|
13
|
+
([#18](https://github.com/bos-agent/bos-ai/pull/18),
|
|
14
|
+
[`50879ab`](https://github.com/bos-agent/bos-ai/commit/50879ab3e458f607b5813c2e6fe711874be9f7fc))
|
|
15
|
+
|
|
16
|
+
### Build System
|
|
17
|
+
|
|
18
|
+
- **release**: Upgrade semantic-release v10 and tighten top-level docs
|
|
19
|
+
([#8](https://github.com/bos-agent/bos-ai/pull/8),
|
|
20
|
+
[`d16da5c`](https://github.com/bos-agent/bos-ai/commit/d16da5cfef0a657a619d78940baa43f7279562e3))
|
|
21
|
+
|
|
22
|
+
### Chores
|
|
23
|
+
|
|
24
|
+
- Remove local OMX planning artifacts ([#18](https://github.com/bos-agent/bos-ai/pull/18),
|
|
25
|
+
[`50879ab`](https://github.com/bos-agent/bos-ai/commit/50879ab3e458f607b5813c2e6fe711874be9f7fc))
|
|
26
|
+
|
|
27
|
+
### Documentation
|
|
28
|
+
|
|
29
|
+
- **agents**: Require semantic PR titles ([#14](https://github.com/bos-agent/bos-ai/pull/14),
|
|
30
|
+
[`16fb4fb`](https://github.com/bos-agent/bos-ai/commit/16fb4fbb268053b31ee460bdfdf142c7c1e99aca))
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
- Enable image-first multimodal transport ([#12](https://github.com/bos-agent/bos-ai/pull/12),
|
|
35
|
+
[`78d02bc`](https://github.com/bos-agent/bos-ai/commit/78d02bc5c7a9d4ea8a96de9107db61405fcdca00))
|
|
36
|
+
|
|
37
|
+
- Make turn events an explicit runtime output for frontend to consume
|
|
38
|
+
([#11](https://github.com/bos-agent/bos-ai/pull/11),
|
|
39
|
+
[`5a4e2cb`](https://github.com/bos-agent/bos-ai/commit/5a4e2cb73b32f06b9e795fa54858a25aaecda57d))
|
|
40
|
+
|
|
41
|
+
- **channel**: Support resumable multi-client HTTP sessions
|
|
42
|
+
([#18](https://github.com/bos-agent/bos-ai/pull/18),
|
|
43
|
+
[`50879ab`](https://github.com/bos-agent/bos-ai/commit/50879ab3e458f607b5813c2e6fe711874be9f7fc))
|
|
44
|
+
|
|
45
|
+
- **config**: Inject workspace context into channels
|
|
46
|
+
([#18](https://github.com/bos-agent/bos-ai/pull/18),
|
|
47
|
+
[`50879ab`](https://github.com/bos-agent/bos-ai/commit/50879ab3e458f607b5813c2e6fe711874be9f7fc))
|
|
48
|
+
|
|
49
|
+
- **config**: Refine BOS config loading and add explicit external agent definitions
|
|
50
|
+
([#14](https://github.com/bos-agent/bos-ai/pull/14),
|
|
51
|
+
[`16fb4fb`](https://github.com/bos-agent/bos-ai/commit/16fb4fbb268053b31ee460bdfdf142c7c1e99aca))
|
|
52
|
+
|
|
53
|
+
### Refactoring
|
|
54
|
+
|
|
55
|
+
- **agent**: Make system_prompt string-only ([#16](https://github.com/bos-agent/bos-ai/pull/16),
|
|
56
|
+
[`6b3dbf8`](https://github.com/bos-agent/bos-ai/commit/6b3dbf898f3202107fac00a58ef6a6becb55b246))
|
|
57
|
+
|
|
58
|
+
- **channel**: Unify actor-owned session resets and interactive channel takeover
|
|
59
|
+
([#13](https://github.com/bos-agent/bos-ai/pull/13),
|
|
60
|
+
[`221047b`](https://github.com/bos-agent/bos-ai/commit/221047b18ba2edb5dd6d6df5f9fafbc439f2ecf5))
|
|
61
|
+
|
|
62
|
+
- **config**: Resolve broadcast channel state options
|
|
63
|
+
([#18](https://github.com/bos-agent/bos-ai/pull/18),
|
|
64
|
+
[`50879ab`](https://github.com/bos-agent/bos-ai/commit/50879ab3e458f607b5813c2e6fe711874be9f7fc))
|
|
65
|
+
|
|
66
|
+
- **core**: Align interceptor APIs with turn terminology
|
|
67
|
+
([#16](https://github.com/bos-agent/bos-ai/pull/16),
|
|
68
|
+
[`6b3dbf8`](https://github.com/bos-agent/bos-ai/commit/6b3dbf898f3202107fac00a58ef6a6becb55b246))
|
|
69
|
+
|
|
70
|
+
- **core**: Rename conversations to chats ([#19](https://github.com/bos-agent/bos-ai/pull/19),
|
|
71
|
+
[`e5e8048`](https://github.com/bos-agent/bos-ai/commit/e5e8048167143595f4b2e948da413e7eb52f469e))
|
|
72
|
+
|
|
73
|
+
- **harness**: Default agent mode. exam subagent orchstration.
|
|
74
|
+
([#9](https://github.com/bos-agent/bos-ai/pull/9),
|
|
75
|
+
[`abd3c1c`](https://github.com/bos-agent/bos-ai/commit/abd3c1c06eba4922355b625672b7ef068c9b7b2a))
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
## v0.1.0 (2026-04-19)
|
|
79
|
+
|
|
80
|
+
### Features
|
|
81
|
+
|
|
82
|
+
- mailbox redesign to mailroute + mailbox bound with address ([#5](https://github.com/bos-agent/bos-ai/pull/5), [`fb7dc69`](https://github.com/bos-agent/bos-ai/commit/fb7dc695f2d2c77d5bde4c09be0ec1b78d8f5980))
|
|
83
|
+
- run agent in docker container ([`ba19b7a`](https://github.com/bos-agent/bos-ai/commit/ba19b7a2807e4610653456c174cf168fa7aa84c6))
|
|
84
|
+
- run agentactor as a standalone process. support channels of http and telegram ([#3](https://github.com/bos-agent/bos-ai/pull/3), [`bcecf00`](https://github.com/bos-agent/bos-ai/commit/bcecf00c17c22a4f3c3d55512fbd422978da6c95))
|
|
85
|
+
|
|
86
|
+
### Bug Fixes
|
|
87
|
+
|
|
88
|
+
- skill loader and other bugs fix. update on the config template ([#2](https://github.com/bos-agent/bos-ai/pull/2), [`493864c`](https://github.com/bos-agent/bos-ai/commit/493864c57a28247949cb8df1643860bdc9b86265))
|
|
89
|
+
|
|
90
|
+
### Refactoring
|
|
91
|
+
|
|
92
|
+
- make channel routing explicit and stabilize primary actor address ([#6](https://github.com/bos-agent/bos-ai/pull/6), [`90573da`](https://github.com/bos-agent/bos-ai/commit/90573daf492aa5f505be8fc260ee3b3188d17a23))
|
|
93
|
+
- **core**: code structure deep refactoring ([#4](https://github.com/bos-agent/bos-ai/pull/4), [`daea7d2`](https://github.com/bos-agent/bos-ai/commit/daea7d24c7ff0a2630c14d602b661299b23a48fd))
|
|
94
|
+
|
|
95
|
+
### Chores
|
|
96
|
+
|
|
97
|
+
- setup PSR and github flow ([#1](https://github.com/bos-agent/bos-ai/pull/1), [`1bcb8e2`](https://github.com/bos-agent/bos-ai/commit/1bcb8e2a2c68d63ad145b33aee4d6a45b9149d41))
|
bos_ai-0.0.0/Dockerfile
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
FROM ghcr.io/astral-sh/uv:latest AS uv
|
|
2
|
+
|
|
3
|
+
FROM node:22-bookworm-slim AS node
|
|
4
|
+
|
|
5
|
+
FROM python:3.13-slim
|
|
6
|
+
|
|
7
|
+
ENV DEBIAN_FRONTEND=noninteractive \
|
|
8
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
|
9
|
+
PYTHONDONTWRITEBYTECODE=1 \
|
|
10
|
+
PYTHONUNBUFFERED=1
|
|
11
|
+
|
|
12
|
+
RUN apt-get update \
|
|
13
|
+
&& apt-get install -y --no-install-recommends \
|
|
14
|
+
ca-certificates \
|
|
15
|
+
tini \
|
|
16
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
17
|
+
|
|
18
|
+
COPY --from=uv /uv /usr/local/bin/uv
|
|
19
|
+
COPY --from=uv /uvx /usr/local/bin/uvx
|
|
20
|
+
COPY --from=node /usr/local/bin/node /usr/local/bin/node
|
|
21
|
+
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
|
|
22
|
+
|
|
23
|
+
RUN ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
|
|
24
|
+
&& ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
|
|
25
|
+
&& ln -s /usr/local/lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack
|
|
26
|
+
|
|
27
|
+
WORKDIR /app
|
|
28
|
+
|
|
29
|
+
COPY LICENSE README.md pyproject.toml uv.lock /app/
|
|
30
|
+
COPY src /app/src
|
|
31
|
+
|
|
32
|
+
RUN python -m pip install --no-cache-dir .
|
|
33
|
+
|
|
34
|
+
WORKDIR /workspace
|
|
35
|
+
|
|
36
|
+
ENTRYPOINT ["tini", "--", "python", "-m", "bos.runner._main"]
|
|
37
|
+
CMD ["--workspace", "/workspace"]
|
bos_ai-0.0.0/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
BSD 2-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026, bos-ai contributors
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|