Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
72 commits
Select commit Hold shift + click to select a range
5b1fa1d
feat: document Orchestrator contract drift with **kwargs
bkrabach Feb 14, 2026
89b1aed
feat: Milestone 0-1 — prerequisites and Rust workspace scaffolding
bkrabach Feb 14, 2026
d6b4dae
feat: add events.rs — port all 47 canonical event constants from Python
bkrabach Feb 14, 2026
5d1d25a
feat: implement error types for Rust kernel (Task 2.2)
bkrabach Feb 14, 2026
113cdc0
feat: create models.rs — core data models (Task 2.3)
bkrabach Feb 14, 2026
9a673b4
feat: add messages.rs — chat protocol models (Task 2.4)
bkrabach Feb 14, 2026
a163e97
feat: define Rust kernel traits and test fakes
bkrabach Feb 14, 2026
2d321c7
feat: implement CancellationToken state machine and HookRegistry disp…
bkrabach Feb 14, 2026
d2826b4
feat: implement Rust kernel coordinator and session lifecycle
bkrabach Feb 14, 2026
46f42d4
feat: add PyO3 bridge classes for Session, HookRegistry, Cancellation…
bkrabach Feb 14, 2026
c146969
feat: integrate Python layer with Rust engine (Milestone 6)
bkrabach Feb 14, 2026
bbf022b
feat: Milestones 5-7 — PyO3 bridge, Python integration, and verificat…
bkrabach Feb 14, 2026
feb7c64
docs: add testing guide and known limitations for rust-core branch
bkrabach Feb 14, 2026
1deae44
ci: add Rust + Python CI and wheel building workflows
bkrabach Feb 14, 2026
1230494
fix: consolidate to single maturin pyproject.toml — resolves .so plac…
bkrabach Feb 15, 2026
307cd0d
fix: resolve CI failures — clippy derivable_impls + maturin venv + wh…
bkrabach Feb 15, 2026
5673daa
fix: CI round 2 — clippy type_complexity + maturin build instead of d…
bkrabach Feb 15, 2026
c268c50
fix: update CI workflow test to match aarch64-unknown-linux-gnu target
bkrabach Feb 15, 2026
6b02c5a
feat(switchover): add set_default_fields to RustHookRegistry
bkrabach Feb 16, 2026
8cc80ba
feat(switchover): add on() alias to RustHookRegistry
bkrabach Feb 16, 2026
3080a70
feat(switchover): add list_handlers to RustHookRegistry
bkrabach Feb 16, 2026
4271281
feat(switchover): add emit_and_collect to RustHookRegistry
bkrabach Feb 16, 2026
e38b407
feat(switchover): add event constants to RustHookRegistry
bkrabach Feb 16, 2026
1bd1cc5
feat(switchover): expand RustCoordinator with full ModuleCoordinator …
bkrabach Feb 16, 2026
d1bd7bc
feat(switchover): expand RustSession with full AmplifierSession API (…
bkrabach Feb 16, 2026
57e2d34
feat(switchover): switch top-level imports to Rust-backed types (Mile…
bkrabach Feb 16, 2026
9aeadfe
feat(switchover): add dogfood validation tests (Milestone 5)
bkrabach Feb 16, 2026
c3fc85a
fix: clippy warnings — downcast deprecation, unused var, map_or simpl…
bkrabach Feb 16, 2026
535285a
fix: dogfooding fixes — sync from main, use ModuleCoordinator wrapper…
bkrabach Feb 17, 2026
d4f73f9
fix: emit() returns HookResult object instead of JSON string
bkrabach Feb 17, 2026
4c1da1c
fix: register() signature matches Python API + cleanup guards non-cal…
bkrabach Feb 17, 2026
7d2dc2d
fix: async handler bridge + mount_points setter + cleanup coroutine h…
bkrabach Feb 17, 2026
a221271
fix: use Python HookRegistry for hook dispatch — resolves async handl…
bkrabach Feb 17, 2026
f599f84
fix: make PyCancellationToken.is_cancelled a property to match Python…
bkrabach Feb 17, 2026
cd1a093
feat: add polyglot gRPC loader infrastructure (Milestone 1)
bkrabach Feb 19, 2026
aa505a1
feat: sync ToolResult auto-populate output from error message (from m…
bkrabach Feb 21, 2026
14d8664
feat: sync event timestamp to Python hooks.py (from main 29ee7a1)
bkrabach Feb 21, 2026
68cf4ba
fix: rewrite PyHookHandlerBridge::handle() with pyo3_async_runtimes::…
bkrabach Feb 21, 2026
31573e4
feat: add ToolResult auto-populate output from error message
bkrabach Feb 21, 2026
8ebe824
feat: stamp UTC ISO-8601 timestamp in HookRegistry::emit()
bkrabach Feb 21, 2026
b69be84
feat: move initialize() control flow to Rust (Task 8)
bkrabach Feb 21, 2026
8d26a31
feat: move execute() control flow to Rust (Task 9)
bkrabach Feb 21, 2026
177ea0b
feat: move cleanup() control flow to Rust (Task 10)
bkrabach Feb 21, 2026
4f3544e
test: add full session lifecycle integration test (Task 11)
bkrabach Feb 21, 2026
04fb552
refactor: remove hooks property override from ModuleCoordinator (Task…
bkrabach Feb 21, 2026
1ded190
refactor: delete unused _hooks_bridge.py helper (Task 13)
bkrabach Feb 21, 2026
d32d906
test: dogfood verification — Rust engine active, RustHookRegistry con…
bkrabach Feb 21, 2026
e8ee4ab
fix: skip non-callable items in cleanup instead of logging TypeError
bkrabach Feb 21, 2026
247f1a2
test: add comprehensive Rust kernel validation script — 40 checks acr…
bkrabach Feb 21, 2026
7d45850
fix: rewrite both Rust cleanup paths to use into_future pattern
bkrabach Feb 22, 2026
34bbf0f
ci: update workflows for wheel publishing + update project metadata f…
bkrabach Feb 27, 2026
8f7cb74
docs: update README, CONTRACTS.md, and docs for Rust kernel
bkrabach Feb 27, 2026
7dbc8e8
style: apply cargo fmt to fix CI rustfmt check failure
bkrabach Feb 28, 2026
d6396c8
fix: correct stub validation test — is_cancelled is a property, not a…
bkrabach Feb 28, 2026
b23c3c9
feat: complete PyCancellationToken PyO3 bindings — add 11 missing met…
bkrabach Feb 28, 2026
85b7556
feat: add provider:throttle, provider:tool_sequence_repaired, provide…
bkrabach Mar 1, 2026
7aec41e
feat: expose all 51 event constants via PyO3 _engine module
bkrabach Mar 1, 2026
fb36ae1
feat: add capabilities module with model capability and cost tier con…
bkrabach Mar 1, 2026
b7ef10c
feat: expose capabilities and cost tier constants via PyO3
bkrabach Mar 1, 2026
2154447
feat: add model, retry_after, delay_multiplier fields to all Provider…
bkrabach Mar 1, 2026
561d9a9
feat: expose ProviderError fields (model, retry_after, delay_multipli…
bkrabach Mar 1, 2026
83017cd
feat: add retry utilities (RetryConfig, classify_error_message, compu…
bkrabach Mar 1, 2026
a33cb0e
feat: expose retry utilities (RetryConfig, classify_error_message, co…
bkrabach Mar 1, 2026
fc38084
feat: thin events.py and create capabilities.py as re-export stubs fr…
bkrabach Mar 1, 2026
88626c9
feat: thin coordinator.py and cancellation.py to re-export stubs from…
bkrabach Mar 1, 2026
7794a42
chore: clean up helper files — remove dead code, document Rust depend…
microsoft-amplifier Mar 1, 2026
bee9b5c
style: apply cargo fmt formatting to Rust sources
bkrabach Mar 1, 2026
43db721
fix: resolve CI failures — PyO3 deprecation warning and KeyboardInter…
bkrabach Mar 1, 2026
b9a83cf
ci: add sdist build to publish workflow for PyPI
bkrabach Mar 1, 2026
05f9cb1
fix: include LICENSE in sdist for PyPI upload
bkrabach Mar 1, 2026
2e7ea9e
fix: align Rust kernel with main — strip unused symbols, restore LLME…
bkrabach Mar 1, 2026
baef495
merge: integrate origin/main into rust-core (resolve conflicts by kee…
bkrabach Mar 1, 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
55 changes: 55 additions & 0 deletions .github/workflows/rust-core-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Rust Core CI

on:
push:
branches: [rust-core]
pull_request:
branches: [rust-core, main]

jobs:
rust-tests:
name: Rust Kernel Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt
- uses: Swatinem/rust-cache@v2
- name: Run Rust tests
run: cargo test -p amplifier-core --verbose
- name: Check workspace
run: cargo check --workspace
- name: Rustfmt
run: cargo fmt --check
- name: Clippy
run: cargo clippy --workspace -- -D warnings

python-tests:
name: Python Tests (${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.11', '3.12', '3.13']
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Create venv and build
run: |
python -m venv .venv
source .venv/bin/activate
pip install maturin
maturin build --release --out dist
pip install dist/amplifier_core-*.whl
- name: Install test dependencies
run: |
source .venv/bin/activate
pip install pytest pytest-asyncio
- name: Run all Python tests
run: |
source .venv/bin/activate
pytest tests/ bindings/python/tests/ -v --tb=short
75 changes: 75 additions & 0 deletions .github/workflows/rust-core-wheels.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Build Wheels

on:
push:
branches: [rust-core, main]
tags: ['v*']
workflow_dispatch:

jobs:
build-wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: PyO3/maturin-action@v1
with:
args: --release --out dist --find-interpreter
manylinux: auto
- uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}
path: dist/*.whl

build-linux-aarch64:
name: Build wheels (Linux aarch64)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: PyO3/maturin-action@v1
with:
target: aarch64-unknown-linux-gnu
args: --release --out dist --find-interpreter
manylinux: auto
- uses: actions/upload-artifact@v4
with:
name: wheels-linux-aarch64
path: dist/*.whl

build-sdist:
name: Build source distribution
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
command: sdist
args: --out dist
- uses: actions/upload-artifact@v4
with:
name: sdist
path: dist/*.tar.gz

publish:
name: Publish to PyPI
runs-on: ubuntu-latest
needs: [build-wheels, build-linux-aarch64, build-sdist]
if: startsWith(github.ref, 'refs/tags/v')
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
pattern: '{wheels-*,sdist}'
merge-multiple: true
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
77 changes: 14 additions & 63 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,70 +1,21 @@
# Private settings
**/certs/*.pem
**/certs/config.json
**/certs/mkcert
.env
*.local
*.local.*
*.user
*__local__*
appsettings.*.json
# Rust
target/
# Note: Cargo.lock IS committed intentionally (binary/binding crate)

# OS files
**/.DS_Store
**/Thumbs.db
**/*Zone.Identifier
**/*:Zone.Identifier
**/*sec.endpointdlp
**/*:sec.endpointdlp

# Dependencies, build, test, and other generated files
node_modules
.venv
venv
env
__pycache__
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
.cache
*.egg
*.egg-info
.pytest_cache
.coverage
htmlcov/
.tox/
.ruff_cache
bin/
obj/
*.pyd
.venv/
*.egg-info/
dist/
build/
output/

# Logs
logs/
*.log
*.log.jsonl
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

#azd files
.azure
azure.yaml
next-steps.md

# Databases
*.db
*.sqlite
*.sqlite3

##############################
# Amplifier specific ignores #
##############################

# Pytest cache
.pytest_cache/

# Working folders
ai_working/tmp
# IDE
.idea/
.vscode/
*.swp
Loading
Loading