14. Extending it in Rust
| To add | Touch |
|---|---|
| a step type | a module in app/src/kinds/ with a With struct (deny_unknown_fields), a build function that validates it, and a Task impl; plus one line in KindRegistry::builtin (mark it terminal, or as an approval point, if it is one) |
| a connector type | an impl IntegrationConnector in crates/integrations and one arm in engine::adapters::build_connector |
| a model provider type | an impl LlmProvider in crates/llm and one arm in engine::adapters::build_llms |
| a parser type | an impl DocumentParser in crates/documents and one arm in engine::adapters::build_parsers |
| a table | a SQL migration in migration/ and a store method in app/src/stores/ (PostgreSQL and in-memory) |
Each step is wrapped for you. Retries come from the node's retry, and every outcome is written
to the audit trail; a step whose audit write fails does not proceed.
Checks
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace # no database needed
cargo test -p bo-app --test http -- --ignored --test-threads=1 # needs PostgreSQL + pgvector (bo_test)
cargo deny check licenses bans advisories sources
cd web && bun run build && bun run type-check && bun run license:check
CI runs all of these on every change under agents/backoffice-agents/, license gate first
(.github/workflows/backoffice-agents.yml).