agentos-nano 0.2.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.
- agentos_nano-0.2.0/.github/workflows/ci.yml +40 -0
- agentos_nano-0.2.0/.gitignore +219 -0
- agentos_nano-0.2.0/.python-version +1 -0
- agentos_nano-0.2.0/PKG-INFO +212 -0
- agentos_nano-0.2.0/README.md +179 -0
- agentos_nano-0.2.0/docs/blog-post-draft.md +76 -0
- agentos_nano-0.2.0/docs/quickstart.md +72 -0
- agentos_nano-0.2.0/docs/security.md +140 -0
- agentos_nano-0.2.0/examples/data_pipeline.yaml +10 -0
- agentos_nano-0.2.0/examples/research_agent.yaml +10 -0
- agentos_nano-0.2.0/examples/summarizer.yaml +14 -0
- agentos_nano-0.2.0/examples/support_triage.yaml +15 -0
- agentos_nano-0.2.0/examples/tool_workflow.yaml +10 -0
- agentos_nano-0.2.0/pyproject.toml +107 -0
- agentos_nano-0.2.0/src/agentos_nano/__init__.py +5 -0
- agentos_nano-0.2.0/src/agentos_nano/__main__.py +4 -0
- agentos_nano-0.2.0/src/agentos_nano/checkpoint.py +106 -0
- agentos_nano-0.2.0/src/agentos_nano/cli.py +910 -0
- agentos_nano-0.2.0/src/agentos_nano/config.py +243 -0
- agentos_nano-0.2.0/src/agentos_nano/context.py +46 -0
- agentos_nano-0.2.0/src/agentos_nano/crash.py +225 -0
- agentos_nano-0.2.0/src/agentos_nano/dsl.py +203 -0
- agentos_nano-0.2.0/src/agentos_nano/error_context.py +183 -0
- agentos_nano-0.2.0/src/agentos_nano/event_store.py +997 -0
- agentos_nano-0.2.0/src/agentos_nano/events.py +193 -0
- agentos_nano-0.2.0/src/agentos_nano/executor.py +305 -0
- agentos_nano-0.2.0/src/agentos_nano/handlers.py +105 -0
- agentos_nano-0.2.0/src/agentos_nano/llm.py +248 -0
- agentos_nano-0.2.0/src/agentos_nano/metrics.py +146 -0
- agentos_nano-0.2.0/src/agentos_nano/recovery.py +104 -0
- agentos_nano-0.2.0/src/agentos_nano/replay.py +897 -0
- agentos_nano-0.2.0/src/agentos_nano/runtime.py +126 -0
- agentos_nano-0.2.0/src/agentos_nano/security.py +241 -0
- agentos_nano-0.2.0/src/agentos_nano/state.py +286 -0
- agentos_nano-0.2.0/src/agentos_nano/tools.py +130 -0
- agentos_nano-0.2.0/src/agentos_nano/workflow.py +584 -0
- agentos_nano-0.2.0/test_imports.py +18 -0
- agentos_nano-0.2.0/tests/test_aos_004_event_store_reconstruction.py +76 -0
- agentos_nano-0.2.0/tests/test_cli.py +1172 -0
- agentos_nano-0.2.0/tests/test_config.py +233 -0
- agentos_nano-0.2.0/tests/test_context.py +94 -0
- agentos_nano-0.2.0/tests/test_crash.py +174 -0
- agentos_nano-0.2.0/tests/test_crash_recovery_integration.py +104 -0
- agentos_nano-0.2.0/tests/test_dsl.py +336 -0
- agentos_nano-0.2.0/tests/test_error_context.py +247 -0
- agentos_nano-0.2.0/tests/test_event_store.py +1154 -0
- agentos_nano-0.2.0/tests/test_events.py +200 -0
- agentos_nano-0.2.0/tests/test_example_workflows.py +17 -0
- agentos_nano-0.2.0/tests/test_executor.py +541 -0
- agentos_nano-0.2.0/tests/test_handlers.py +183 -0
- agentos_nano-0.2.0/tests/test_llm.py +346 -0
- agentos_nano-0.2.0/tests/test_main.py +17 -0
- agentos_nano-0.2.0/tests/test_metrics.py +135 -0
- agentos_nano-0.2.0/tests/test_recovery.py +107 -0
- agentos_nano-0.2.0/tests/test_release_phase1.py +65 -0
- agentos_nano-0.2.0/tests/test_replay.py +987 -0
- agentos_nano-0.2.0/tests/test_runtime.py +111 -0
- agentos_nano-0.2.0/tests/test_security.py +287 -0
- agentos_nano-0.2.0/tests/test_state.py +259 -0
- agentos_nano-0.2.0/tests/test_tools.py +161 -0
- agentos_nano-0.2.0/tests/test_workflow.py +560 -0
- agentos_nano-0.2.0/uv.lock +1267 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: ["main"]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
quality:
|
|
10
|
+
name: Lint, test, and scan
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: Check out repository
|
|
19
|
+
uses: actions/checkout@v5
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v7
|
|
23
|
+
|
|
24
|
+
- name: Install Python
|
|
25
|
+
run: uv python install ${{ matrix.python-version }}
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: uv sync --dev --locked
|
|
29
|
+
|
|
30
|
+
- name: Lint
|
|
31
|
+
run: uv run ruff check .
|
|
32
|
+
|
|
33
|
+
- name: Type check
|
|
34
|
+
run: uv run mypy
|
|
35
|
+
|
|
36
|
+
- name: Test with coverage
|
|
37
|
+
run: uv run pytest -n auto --cov=src
|
|
38
|
+
|
|
39
|
+
- name: Security scan
|
|
40
|
+
run: uv run bandit -c pyproject.toml -r src
|
|
@@ -0,0 +1,219 @@
|
|
|
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 .venv 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
|
+
.venv
|
|
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
|
+
# Temporary file for partial code execution
|
|
204
|
+
tempCodeRunnerFile.py
|
|
205
|
+
|
|
206
|
+
# Ruff stuff:
|
|
207
|
+
.ruff_cache/
|
|
208
|
+
|
|
209
|
+
# PyPI configuration file
|
|
210
|
+
.pypirc
|
|
211
|
+
|
|
212
|
+
# Marimo
|
|
213
|
+
marimo/_static/
|
|
214
|
+
marimo/_lsp/
|
|
215
|
+
__marimo__/
|
|
216
|
+
|
|
217
|
+
# Streamlit
|
|
218
|
+
.streamlit/secrets.toml
|
|
219
|
+
demo.db
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.14
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agentos-nano
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: A lightweight framework for building and deploying AI agents with minimal boilerplate code.
|
|
5
|
+
Project-URL: Homepage, https://github.com/jabbala10-bit/agentos-nano
|
|
6
|
+
Project-URL: Issues, https://github.com/jabbala10-bit/agentos-nano/issues
|
|
7
|
+
Project-URL: Source, https://github.com/jabbala10-bit/agentos-nano
|
|
8
|
+
Author-email: AgentOS Labs <jabbala10@gmail.com>
|
|
9
|
+
Keywords: agents,ai,cli,llm,workflow
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Natural Language :: English
|
|
14
|
+
Classifier: Operating System :: OS Independent
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Classifier: Topic :: Utilities
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Requires-Dist: jsonschema>=4.0.0
|
|
26
|
+
Requires-Dist: openai>=1.109.0
|
|
27
|
+
Requires-Dist: pydantic<3,>=2.10.6
|
|
28
|
+
Requires-Dist: python-dotenv<2,>=1.0.1
|
|
29
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
30
|
+
Requires-Dist: rich>=14.1.0
|
|
31
|
+
Requires-Dist: typer>=0.17.4
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# agentos-nano
|
|
35
|
+
|
|
36
|
+
`agentos-nano` is a small crash-resilient workflow runner for demonstrating the core AgentOS runtime.
|
|
37
|
+
Phase 1 focuses on a believable local demo: install the CLI, run a YAML workflow, simulate a crash,
|
|
38
|
+
resume automatically, and replay the trace.
|
|
39
|
+
|
|
40
|
+
## What Phase 1 Can Do
|
|
41
|
+
|
|
42
|
+
- Parse a simple YAML workflow DSL with line-aware validation errors.
|
|
43
|
+
- Execute local workflow steps from YAML with terminal status output.
|
|
44
|
+
- Simulate a runtime crash after a chosen completed step and resume cleanly.
|
|
45
|
+
- Replay any stored workflow execution to the terminal or JSON.
|
|
46
|
+
- Build and install as a Python package with an `agentos` CLI entry point.
|
|
47
|
+
|
|
48
|
+
## Requirements
|
|
49
|
+
|
|
50
|
+
- Python `3.10` or newer
|
|
51
|
+
- `uv` for the local developer flow
|
|
52
|
+
|
|
53
|
+
An OpenAI API key is only needed for the optional `ask` command. The Phase 1 workflow demo works
|
|
54
|
+
without external credentials.
|
|
55
|
+
|
|
56
|
+
Useful runtime overrides can live in `.env`:
|
|
57
|
+
|
|
58
|
+
```dotenv
|
|
59
|
+
AGENTOS_DEFAULT_DB=agentos.db
|
|
60
|
+
AGENTOS_DEMO_DB=demo.db
|
|
61
|
+
AGENTOS_DEMO_CRASH_STEP=3
|
|
62
|
+
AGENTOS_DEMO_RESTART_DELAY_SECONDS=1
|
|
63
|
+
AGENTOS_LOG_VERBOSITY=normal
|
|
64
|
+
AGENTOS_REDACTION_ENABLED=true
|
|
65
|
+
AGENTOS_SENSITIVE_FIELDS=api_key,authorization,cookie,cvv,email,password,phone,secret,session,ssn,token
|
|
66
|
+
# AGENTOS_EVENT_RETENTION_DAYS=30
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
By default, CLI output and replay traces redact common sensitive fields such as `api_key`,
|
|
70
|
+
`token`, `password`, `email`, and `phone`. Use `--verbosity quiet|normal|debug` on `run`,
|
|
71
|
+
`demo`, and `replay` to control how much execution detail is shown.
|
|
72
|
+
|
|
73
|
+
For the full Phase 2 behavior, including checkpoint display protection, persistence defaults,
|
|
74
|
+
and retention semantics, see [docs/security.md](docs/security.md).
|
|
75
|
+
|
|
76
|
+
## Quickstart
|
|
77
|
+
|
|
78
|
+
1. Install dependencies:
|
|
79
|
+
|
|
80
|
+
```powershell
|
|
81
|
+
uv sync --dev
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
2. Run the example workflow:
|
|
85
|
+
|
|
86
|
+
```powershell
|
|
87
|
+
uv run agentos run examples/data_pipeline.yaml --db demo.db
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
3. Run the crash demo:
|
|
91
|
+
|
|
92
|
+
```powershell
|
|
93
|
+
uv run agentos demo examples/data_pipeline.yaml --crash-at-step 2 --db demo.db
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Expected outcome:
|
|
97
|
+
|
|
98
|
+
- the workflow runs until step 2 completes
|
|
99
|
+
- the process is intentionally killed
|
|
100
|
+
- the runtime restarts after 1 second
|
|
101
|
+
- execution resumes from step 3 with `0 steps repeated`
|
|
102
|
+
|
|
103
|
+
4. Replay the execution:
|
|
104
|
+
|
|
105
|
+
```powershell
|
|
106
|
+
uv run agentos replay demo-<workflow-id> --db demo.db
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The `demo` command prints the generated workflow ID in the terminal panels and final summary. For a
|
|
110
|
+
full walkthrough, see [docs/quickstart.md](docs/quickstart.md).
|
|
111
|
+
|
|
112
|
+
## Example Workflows
|
|
113
|
+
|
|
114
|
+
- [examples/data_pipeline.yaml](examples/data_pipeline.yaml)
|
|
115
|
+
- [examples/research_agent.yaml](examples/research_agent.yaml)
|
|
116
|
+
- [examples/summarizer.yaml](examples/summarizer.yaml)
|
|
117
|
+
- [examples/support_triage.yaml](examples/support_triage.yaml)
|
|
118
|
+
|
|
119
|
+
These ship with simple local handlers in [src/agentos_nano/handlers.py](src/agentos_nano/handlers.py)
|
|
120
|
+
so the demo stays self-contained.
|
|
121
|
+
|
|
122
|
+
## CLI Commands
|
|
123
|
+
|
|
124
|
+
Show help:
|
|
125
|
+
|
|
126
|
+
```powershell
|
|
127
|
+
uv run agentos --help
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Show version:
|
|
131
|
+
|
|
132
|
+
```powershell
|
|
133
|
+
uv run agentos --version
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Run a workflow:
|
|
137
|
+
|
|
138
|
+
```powershell
|
|
139
|
+
uv run agentos run examples/data_pipeline.yaml --db agentos.db
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Run the crash demo:
|
|
143
|
+
|
|
144
|
+
```powershell
|
|
145
|
+
uv run agentos demo examples/data_pipeline.yaml --crash-at-step 2 --db demo.db
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Replay a workflow:
|
|
149
|
+
|
|
150
|
+
```powershell
|
|
151
|
+
uv run agentos replay <workflow-id> --db demo.db
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Export replay JSON:
|
|
155
|
+
|
|
156
|
+
```powershell
|
|
157
|
+
uv run agentos replay <workflow-id> --db demo.db --json replay.json
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Show current config for the optional LLM command path:
|
|
161
|
+
|
|
162
|
+
```powershell
|
|
163
|
+
uv run agentos config
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Inspect or apply event retention:
|
|
167
|
+
|
|
168
|
+
```powershell
|
|
169
|
+
uv run agentos retention
|
|
170
|
+
uv run agentos retention --days 30 --apply
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Security Notes
|
|
174
|
+
|
|
175
|
+
- `run`, `demo`, and `replay` mask common sensitive fields by default
|
|
176
|
+
- `quiet`, `normal`, and `debug` change output detail, not the basic masking contract
|
|
177
|
+
- replay JSON export is policy-aware and masked by default
|
|
178
|
+
- retention is manual by default and prunes whole workflow histories by age
|
|
179
|
+
|
|
180
|
+
Operational details live in [docs/security.md](docs/security.md).
|
|
181
|
+
|
|
182
|
+
## Packaging
|
|
183
|
+
|
|
184
|
+
Build a distributable package:
|
|
185
|
+
|
|
186
|
+
```powershell
|
|
187
|
+
uv build
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Install the built wheel into a fresh environment:
|
|
191
|
+
|
|
192
|
+
```powershell
|
|
193
|
+
python -m venv .venv-release
|
|
194
|
+
.venv-release\Scripts\python -m pip install dist\agentos_nano-0.1.0-py3-none-any.whl
|
|
195
|
+
.venv-release\Scripts\agentos --help
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Package metadata lives in [pyproject.toml](pyproject.toml).
|
|
199
|
+
|
|
200
|
+
## Development Checks
|
|
201
|
+
|
|
202
|
+
```powershell
|
|
203
|
+
uv run ruff check .
|
|
204
|
+
uv run mypy
|
|
205
|
+
uv run pytest
|
|
206
|
+
uv run bandit -c pyproject.toml -r src
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Current Scope
|
|
210
|
+
|
|
211
|
+
Phase 1 is meant to be workable and demonstrable, not final-product complete. The strongest path
|
|
212
|
+
today is the local trust demo built around `run`, `demo`, and `replay`.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# agentos-nano
|
|
2
|
+
|
|
3
|
+
`agentos-nano` is a small crash-resilient workflow runner for demonstrating the core AgentOS runtime.
|
|
4
|
+
Phase 1 focuses on a believable local demo: install the CLI, run a YAML workflow, simulate a crash,
|
|
5
|
+
resume automatically, and replay the trace.
|
|
6
|
+
|
|
7
|
+
## What Phase 1 Can Do
|
|
8
|
+
|
|
9
|
+
- Parse a simple YAML workflow DSL with line-aware validation errors.
|
|
10
|
+
- Execute local workflow steps from YAML with terminal status output.
|
|
11
|
+
- Simulate a runtime crash after a chosen completed step and resume cleanly.
|
|
12
|
+
- Replay any stored workflow execution to the terminal or JSON.
|
|
13
|
+
- Build and install as a Python package with an `agentos` CLI entry point.
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
|
|
17
|
+
- Python `3.10` or newer
|
|
18
|
+
- `uv` for the local developer flow
|
|
19
|
+
|
|
20
|
+
An OpenAI API key is only needed for the optional `ask` command. The Phase 1 workflow demo works
|
|
21
|
+
without external credentials.
|
|
22
|
+
|
|
23
|
+
Useful runtime overrides can live in `.env`:
|
|
24
|
+
|
|
25
|
+
```dotenv
|
|
26
|
+
AGENTOS_DEFAULT_DB=agentos.db
|
|
27
|
+
AGENTOS_DEMO_DB=demo.db
|
|
28
|
+
AGENTOS_DEMO_CRASH_STEP=3
|
|
29
|
+
AGENTOS_DEMO_RESTART_DELAY_SECONDS=1
|
|
30
|
+
AGENTOS_LOG_VERBOSITY=normal
|
|
31
|
+
AGENTOS_REDACTION_ENABLED=true
|
|
32
|
+
AGENTOS_SENSITIVE_FIELDS=api_key,authorization,cookie,cvv,email,password,phone,secret,session,ssn,token
|
|
33
|
+
# AGENTOS_EVENT_RETENTION_DAYS=30
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
By default, CLI output and replay traces redact common sensitive fields such as `api_key`,
|
|
37
|
+
`token`, `password`, `email`, and `phone`. Use `--verbosity quiet|normal|debug` on `run`,
|
|
38
|
+
`demo`, and `replay` to control how much execution detail is shown.
|
|
39
|
+
|
|
40
|
+
For the full Phase 2 behavior, including checkpoint display protection, persistence defaults,
|
|
41
|
+
and retention semantics, see [docs/security.md](docs/security.md).
|
|
42
|
+
|
|
43
|
+
## Quickstart
|
|
44
|
+
|
|
45
|
+
1. Install dependencies:
|
|
46
|
+
|
|
47
|
+
```powershell
|
|
48
|
+
uv sync --dev
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
2. Run the example workflow:
|
|
52
|
+
|
|
53
|
+
```powershell
|
|
54
|
+
uv run agentos run examples/data_pipeline.yaml --db demo.db
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
3. Run the crash demo:
|
|
58
|
+
|
|
59
|
+
```powershell
|
|
60
|
+
uv run agentos demo examples/data_pipeline.yaml --crash-at-step 2 --db demo.db
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Expected outcome:
|
|
64
|
+
|
|
65
|
+
- the workflow runs until step 2 completes
|
|
66
|
+
- the process is intentionally killed
|
|
67
|
+
- the runtime restarts after 1 second
|
|
68
|
+
- execution resumes from step 3 with `0 steps repeated`
|
|
69
|
+
|
|
70
|
+
4. Replay the execution:
|
|
71
|
+
|
|
72
|
+
```powershell
|
|
73
|
+
uv run agentos replay demo-<workflow-id> --db demo.db
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The `demo` command prints the generated workflow ID in the terminal panels and final summary. For a
|
|
77
|
+
full walkthrough, see [docs/quickstart.md](docs/quickstart.md).
|
|
78
|
+
|
|
79
|
+
## Example Workflows
|
|
80
|
+
|
|
81
|
+
- [examples/data_pipeline.yaml](examples/data_pipeline.yaml)
|
|
82
|
+
- [examples/research_agent.yaml](examples/research_agent.yaml)
|
|
83
|
+
- [examples/summarizer.yaml](examples/summarizer.yaml)
|
|
84
|
+
- [examples/support_triage.yaml](examples/support_triage.yaml)
|
|
85
|
+
|
|
86
|
+
These ship with simple local handlers in [src/agentos_nano/handlers.py](src/agentos_nano/handlers.py)
|
|
87
|
+
so the demo stays self-contained.
|
|
88
|
+
|
|
89
|
+
## CLI Commands
|
|
90
|
+
|
|
91
|
+
Show help:
|
|
92
|
+
|
|
93
|
+
```powershell
|
|
94
|
+
uv run agentos --help
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Show version:
|
|
98
|
+
|
|
99
|
+
```powershell
|
|
100
|
+
uv run agentos --version
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Run a workflow:
|
|
104
|
+
|
|
105
|
+
```powershell
|
|
106
|
+
uv run agentos run examples/data_pipeline.yaml --db agentos.db
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Run the crash demo:
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
uv run agentos demo examples/data_pipeline.yaml --crash-at-step 2 --db demo.db
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Replay a workflow:
|
|
116
|
+
|
|
117
|
+
```powershell
|
|
118
|
+
uv run agentos replay <workflow-id> --db demo.db
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Export replay JSON:
|
|
122
|
+
|
|
123
|
+
```powershell
|
|
124
|
+
uv run agentos replay <workflow-id> --db demo.db --json replay.json
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Show current config for the optional LLM command path:
|
|
128
|
+
|
|
129
|
+
```powershell
|
|
130
|
+
uv run agentos config
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Inspect or apply event retention:
|
|
134
|
+
|
|
135
|
+
```powershell
|
|
136
|
+
uv run agentos retention
|
|
137
|
+
uv run agentos retention --days 30 --apply
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Security Notes
|
|
141
|
+
|
|
142
|
+
- `run`, `demo`, and `replay` mask common sensitive fields by default
|
|
143
|
+
- `quiet`, `normal`, and `debug` change output detail, not the basic masking contract
|
|
144
|
+
- replay JSON export is policy-aware and masked by default
|
|
145
|
+
- retention is manual by default and prunes whole workflow histories by age
|
|
146
|
+
|
|
147
|
+
Operational details live in [docs/security.md](docs/security.md).
|
|
148
|
+
|
|
149
|
+
## Packaging
|
|
150
|
+
|
|
151
|
+
Build a distributable package:
|
|
152
|
+
|
|
153
|
+
```powershell
|
|
154
|
+
uv build
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Install the built wheel into a fresh environment:
|
|
158
|
+
|
|
159
|
+
```powershell
|
|
160
|
+
python -m venv .venv-release
|
|
161
|
+
.venv-release\Scripts\python -m pip install dist\agentos_nano-0.1.0-py3-none-any.whl
|
|
162
|
+
.venv-release\Scripts\agentos --help
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Package metadata lives in [pyproject.toml](pyproject.toml).
|
|
166
|
+
|
|
167
|
+
## Development Checks
|
|
168
|
+
|
|
169
|
+
```powershell
|
|
170
|
+
uv run ruff check .
|
|
171
|
+
uv run mypy
|
|
172
|
+
uv run pytest
|
|
173
|
+
uv run bandit -c pyproject.toml -r src
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Current Scope
|
|
177
|
+
|
|
178
|
+
Phase 1 is meant to be workable and demonstrable, not final-product complete. The strongest path
|
|
179
|
+
today is the local trust demo built around `run`, `demo`, and `replay`.
|