v3.3.1

projectdiscovery/katanav3.3.1Apr 14, 2026by kichanyurd

AI Summary

Introduces advanced tag dependency control, health monitoring, and resolution tracking to the relational resolver and SDK.

Key Highlights

  • Added `AnyOf` and `AllOf` modifiers for explicit tag dependency semantics.
  • Added `depend_on_any()` method for OR dependency relationships.
  • Added event loop health monitoring to the `/healthz` endpoint.
  • Added resolution tracking to the relational resolver with detailed `ResolutionKind` and `ResolutionDetails`.
  • Split `RelationshipEntityKind.TAG` into `TAG_ALL` and `TAG_ANY`.

Breaking Changes

  • Split `RelationshipEntityKind.TAG` into `TAG_ALL` and `TAG_ANY`

New Features

  • AnyOf and AllOf modifiers for tag dependencies
  • depend_on_any() method
  • Event loop health monitoring
  • Resolution tracking for relational resolver

Full Release Notes

## [3.3.1] - 2026-04-14

### Added

- Allow passing ToolId when attaching tools throughout the SDK
- Add `AnyOf(tag)` and `AllOf(tag)` modifiers for explicit control over tag dependency semantics in `depend_on()` — `AnyOf` requires at least one tagged member to be active, `AllOf` requires all of them (bare `Tag` defaults to `AllOf`)
- Add `depend_on_any()` to `Guideline`, `Tag`, and `Journey` for OR dependency relationships — at least one target must be active. Multiple `depend_on_any()` calls create independent OR groups that are AND'd together
- Add event loop health monitoring to `/healthz` endpoint — measures callback latency and reports `healthy`, `degraded`, or `unhealthy` status with peak latency over a configurable window
- Add resolution tracking to the relational resolver — every entity that enters resolution gets a `Resolution` with a `ResolutionKind` (`NONE`, `DEPRIORITIZED`, `UNMET_DEPENDENCY_ALL`, `UNMET_DEPENDENCY_ANY`, `ENTAILED`) and structured `ResolutionDetails` (relationship ID, target IDs) explaining why

### Changed

- Split `RelationshipEntityKind.TAG` into `TAG_ALL` and `TAG_ANY` to support explicit tag dependency semantics at the core level (existing `TAG` entries treated as `TAG_ALL` for backwards compatibility)

### Fixed

- Fix priority and dependency relationships propagating through inactive intermediaries — only direct relationships now affect resolution, consistent with the reinstatement principle from argumentation theory
- Fix entailment recording only the highest-scoring source when multiple guidelines entail the same target — all entailing relationships are now recorded in resolution details
- Fix dep-failed guidelines not recovering when entailment satisfies their dependency target in a later iteration
- Fix SDK startup appearing stuck at 100% after evaluations — add "Applying evaluations" progress bar for the metadata-writing phase
- Fix `Variable.get_value()` returning `None` when called from a retriever, caused by retrievers starting before context variables were loaded
- Fix journey tool-state auto-advancing even when the tool did not run