Skip to content

Releases: getaxonflow/axonflow-sdk-java

Release 5.7.0

22 Apr 13:30
5720c3d

Choose a tag to compare

AxonFlow Java SDK v5.7.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.7.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.7.0'

Added

  • Rich ApproveStepResponse / RejectStepResponse — both classes now carry
    the same shape as the step-gate response: decision resolves to "allow" or
    "block", retryContext mirrors the gate response retry state, approvedBy
    / approvedAt / rejectedBy / rejectedAt carry reviewer identity,
    approvalId is the deterministic HITL queue UUID, policiesMatched
    reconstructs the governance trail. The legacy workflowId / stepId /
    status fields remain for back-compat.
  • planId on approve/reject responses — populated when the response comes
    from the MAP plan-scoped endpoint; empty on WCP plane responses. Same types
    work across both endpoints.
  • Back-compat 3-arg constructorsnew ApproveStepResponse(workflowId, stepId, status)
    and new RejectStepResponse(workflowId, stepId, status) still compile, so
    existing test fixtures and SDK consumers keep working without changes.
  • getPendingPlanApprovals / getPendingPlanApprovalsAsync — new client
    methods that list MAP-plane pending approvals
    (GET /api/v1/plans/approvals/pending), the counterpart of
    getPendingApprovals for the WCP plane. The two-arg form accepts an
    optional planId filter so reviewer tools can scope the listing to one
    plan. Available on Evaluation+ licenses (same tier gate as the MAP step
    approve/reject endpoints).
  • PendingApproval.planId — populated on MAP-plane entries, null on
    WCP-plane entries. Mirrors the approve/reject asymmetry. PendingApproval
    also gains stepIndex, decision, decisionReason, and approvalStatus
    so reviewer tools can render the full approval context without a second
    request. The existing 6-arg back-compat constructor still works; new
    fields default to null / 0 for callers that don't pass them.

Fixed

  • approveStep / rejectStep / getPendingApprovals endpoint URLs
    all three previously targeted non-existent paths under
    /api/v1/workflow-control/ and would fail against a real AxonFlow server.
    Corrected to the canonical /api/v1/workflows/{id}/steps/{step_id}/(approve|reject)
    and /api/v1/workflows/approvals/pending routes. Customers using these
    methods against a live deployment were receiving 404s; this release makes
    them work.
  • PendingApprovalsResponse getters and JSON field names aligned with the
    wire shape
    — the class previously declared getApprovals() / getTotal()
    over a JSON body with keys approvals / total, which never matched the
    server (pending_approvals / count). Getters renamed to
    getPendingApprovals() / getCount() with the correct JSON bindings.
    Callers that read response.getApprovals() or response.getTotal() need
    to update to the new getter names.

Deprecated

  • DO_NOT_TRACK=1 as an AxonFlow telemetry opt-out — scheduled for removal after 2026-05-05 in the next major release. Use AXONFLOW_TELEMETRY=off instead. The SDK emits a one-line migration warning when DO_NOT_TRACK=1 is the active control and AXONFLOW_TELEMETRY=off is not also set.

Unchanged

  • approveStep(workflowId, stepId) / rejectStep(workflowId, stepId, reason)
    method signatures on AxonFlow are unchanged — only the response fields grew.

Release 5.6.0

21 Apr 22:10
3dc7ae5

Choose a tag to compare

AxonFlow Java SDK v5.6.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.6.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.6.0'

Added

  • retry_context and idempotency_key support on the step gate
    StepGateResponse now carries a RetryContext object on every gate call with the
    true (workflow_id, step_id) lifecycle: gateCount, completionCount,
    priorCompletionStatus (PriorCompletionStatus enum —
    NONE / COMPLETED / GATED_NOT_COMPLETED), priorOutputAvailable,
    priorOutput, priorCompletionAt, firstAttemptAt, lastAttemptAt,
    lastDecision, and idempotencyKey. Prefer these to the legacy cached /
    decisionSource fields.
  • stepGate(workflowId, stepId, request, options) overload — new 4-arg overload
    taking StepGateOptions. Use StepGateOptions.includePriorOutput() to send
    ?include_prior_output=true so retryContext.priorOutput is populated when a prior
    /complete has landed. Existing 3-arg overload keeps its signature and delegates
    with StepGateOptions.defaults().
  • StepGateRequest.idempotencyKey — caller-supplied opaque business-level key
    (max 255 chars; validated at construction). Immutable once recorded on the first gate
    call for a (workflow, step); subsequent gate/complete calls must pass the same key.
  • MarkStepCompletedRequest.idempotencyKey — must match the key set on the
    corresponding gate call, if any. Mismatch (including missing-vs-set on either side)
    surfaces as a typed IdempotencyKeyMismatchException.
  • IdempotencyKeyMismatchException — new typed exception in
    com.getaxonflow.sdk.exceptions. Thrown by stepGate and markStepCompleted when
    the platform returns HTTP 409 with error.code == "IDEMPOTENCY_KEY_MISMATCH".
    Surfaces workflowId, stepId, expectedIdempotencyKey, receivedIdempotencyKey,
    plus inherited statusCode=409 and errorCode="IDEMPOTENCY_KEY_MISMATCH".
  • RetryContext, PriorCompletionStatus, StepGateOptions — exported in
    WorkflowTypes.

Fixed

  • 409 dispatch on step gate/complete — previously all 409 responses on
    markStepCompleted fell through to a generic AxonFlowException(..., 409, "VERSION_CONFLICT"), conflating step idempotency conflicts with plan version
    conflicts. The step gate/complete call sites now inspect the 409 body and dispatch
    to IdempotencyKeyMismatchException when error.code matches, falling back to a
    generic AxonFlowException otherwise. Plan update paths (which also use 409) are
    untouched.

Deprecated

  • StepGateResponse.isCached() and StepGateResponse.getDecisionSource()
    marked @Deprecated. Use getRetryContext().getGateCount() > 1 and
    getRetryContext().getPriorCompletionStatus() instead. Planned for removal in a
    future major version.

Compatibility

Companion to the platform change that introduces retry_context on
POST /api/v1/workflows/{workflow_id}/steps/{step_id}/gate. Additive only — existing
callers that never set idempotencyKey or pass StepGateOptions see no behavior
change. Binary-compatibility preserved: old StepGateRequest, StepGateResponse, and
MarkStepCompletedRequest constructors kept alongside new ones.

Release 5.5.0

20 Apr 22:25
ae0825e

Choose a tag to compare

AxonFlow Java SDK v5.5.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.5.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.5.0'

Added

  • mapTimeout field on AxonFlowConfig — brings Java to parity with
    the TypeScript, Python, and Go SDKs (all three already had a separate
    MAP timeout). The shared timeout (default 60s) only covered single-
    request endpoints; MAP plans routinely take 60-120s because they
    chain multiple LLM calls end-to-end, and the global timeout was
    cutting them off. New constant DEFAULT_MAP_TIMEOUT = 120s, new
    builder method AxonFlowConfig.builder().mapTimeout(Duration.ofSeconds(300)),
    and new environment variable AXONFLOW_MAP_TIMEOUT_SECONDS. All
    plan-lifecycle methods (generatePlan, executePlan, getPlanStatus,
    updatePlan, cancelPlan, resumePlan, rollbackPlan,
    getPlanVersions) now use a plan-specific OkHttpClient clone with
    callTimeout / readTimeout / writeTimeout set to mapTimeout.
    Shares connection pool + interceptors + dispatcher with the main
    client; only the timeout attributes differ. Keep mapTimeout
    server AXONFLOW_MAP_MAX_TIMEOUT_SECONDS (default 300s) ≤
    front-door ALB idle_timeout.timeout_seconds (default 300s), or the
    connection is killed mid-stream.

Release 5.4.0

18 Apr 12:21
08b18cb

Choose a tag to compare

AxonFlow Java SDK v5.4.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.4.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.4.0'

Changes

See CHANGELOG.md for details.

Release 5.3.0

09 Apr 23:48
127a781

Choose a tag to compare

AxonFlow Java SDK v5.3.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.3.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.3.0'

Changes

See CHANGELOG.md for details.

Release 5.2.0

08 Apr 21:11
06e8b90

Choose a tag to compare

AxonFlow Java SDK v5.2.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.2.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.2.0'

Changes

See CHANGELOG.md for details.

Release 5.1.0

06 Apr 18:36
3d08476

Choose a tag to compare

AxonFlow Java SDK v5.1.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.1.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.1.0'

Changes

See CHANGELOG.md for details.

Release 5.0.0

05 Apr 13:12
3d77ad6

Choose a tag to compare

AxonFlow Java SDK v5.0.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>5.0.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:5.0.0'

Changes

See CHANGELOG.md for details.

Release 4.3.0

25 Mar 10:56
1201052

Choose a tag to compare

AxonFlow Java SDK v4.3.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>4.3.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:4.3.0'

Changes

See CHANGELOG.md for details.

Release 4.2.0

16 Mar 18:53
dccdf5b

Choose a tag to compare

AxonFlow Java SDK v4.2.0

Installation

Maven:

<dependency>
    <groupId>com.getaxonflow</groupId>
    <artifactId>axonflow-sdk</artifactId>
    <version>4.2.0</version>
</dependency>

Gradle:

implementation 'com.getaxonflow:axonflow-sdk:4.2.0'

Changes

See CHANGELOG.md for details.