Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
10 changes: 5 additions & 5 deletions .github/workflows/agent-e2e.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: Agent E2E

# Runs the agent e2e suites (conductor-ai-e2e/) against the Conductor OSS
# Runs the agent e2e suites (e2e/) against the Conductor OSS
# server boot JAR (Maven Central) — the server this SDK ships against, with
# the agent runtime on by default from 3.32.0-rc.8 onward. The Agentspan
# server JAR is no longer used here.
Expand Down Expand Up @@ -88,7 +88,7 @@ jobs:
exit 1

- name: Run e2e suites
run: ./gradlew :conductor-ai-e2e:test -Pe2e
run: ./gradlew :e2e:test -Pe2e

# BaseTest assumeTrue-skips every suite when the server is unreachable —
# without this guard a boot failure after the health gate (or a future
Expand All @@ -102,7 +102,7 @@ jobs:
import xml.etree.ElementTree as ET

total = executed = 0
for path in glob.glob("conductor-ai-e2e/build/test-results/test/TEST-*.xml"):
for path in glob.glob("e2e/build/test-results/test/TEST-*.xml"):
root = ET.parse(path).getroot()
t = int(root.get("tests", 0))
sk = int(root.get("skipped", 0))
Expand All @@ -118,7 +118,7 @@ jobs:
with:
name: agent-e2e-results
path: |
conductor-ai-e2e/build/test-results/test/
conductor-ai-e2e/build/reports/tests/test/
e2e/build/test-results/test/
e2e/build/reports/tests/test/
server.log
retention-days: 14
8 changes: 6 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ All notable changes to this project will be documented in this file.

### Added

- Merged the Agentspan agent SDK into this repository as four new modules: `conductor-ai` (durable AI agents — `Agent`, `AgentRuntime`, `@Tool` functions, guardrails, handoffs, multi-agent strategies), `conductor-ai-spring` (Spring Boot auto-configuration), `conductor-ai-examples` (150+ runnable examples), and `conductor-ai-e2e` (e2e suites, gated behind `-Pe2e`) — docs under [docs/agents/](docs/agents/index.md)
- `conductor-ai` and `conductor-ai-spring` publish as `org.conductoross:conductor-ai` and `org.conductoross:conductor-ai-spring`, superseding `org.conductoross.conductor:conductor-agent-sdk[-spring]@0.1.0`; the java package `org.conductoross.conductor.ai[.spring]` is unchanged apart from the client relocation below, so migrating is a dependency-coordinate swap plus — only if those types are imported directly — the relocated imports
- Merged the Agentspan agent SDK into this repository as four new modules: `conductor-client-ai` (durable AI agents — `Agent`, `AgentRuntime`, `@Tool` functions, guardrails, handoffs, multi-agent strategies), `conductor-client-ai-spring` (Spring Boot auto-configuration), `agent-examples` (150+ runnable examples), and `e2e` (e2e suites, gated behind `-Pe2e`) — docs under [docs/agents/](docs/agents/index.md)
- `conductor-client-ai` and `conductor-client-ai-spring` publish as `org.conductoross:conductor-client-ai` and `org.conductoross:conductor-client-ai-spring`, superseding `org.conductoross.conductor:conductor-agent-sdk[-spring]@0.1.0`; the java package `org.conductoross.conductor.ai[.spring]` is unchanged apart from the client relocation below, so migrating is a dependency-coordinate swap plus — only if those types are imported directly — the relocated imports
- Agent control-plane clients now live in `conductor-client`: `AgentClient` is an interface (implemented by `io.orkes.conductor.client.http.OrkesAgentClient`) covering the full `/agent/*` control plane — `compileAgent`, `deployAgent`, `startAgent`, `getAgentStatus`, `getExecution`, `listExecutions`, `respond`, `stopAgent`, `signalAgent`, `streamSse`, `close` — handed out by `OrkesClients.getAgentClient()`; the SSE streaming client `SseClient` moved to `io.orkes.conductor.client`; their transport DTOs (`AgentRequest`, `StartResponse`, `AgentStatusResponse`, `PendingTool`, `RespondBody`, `CompileResponse`) moved to `io.orkes.conductor.client.model.agent` and the typed exceptions (`AgentspanException`, `AgentAPIException`, `AgentNotFoundException`, `SSEUnavailableException`) to `io.orkes.conductor.client.exceptions`
- SSE streaming hardened: the initial connect throws `SSEUnavailableException` when the server rejects streaming (never a silently-empty stream — `stream()` degrades to status polling), `id:` frames are tracked, and mid-stream drops reconnect with a `Last-Event-ID` header; `AgentRuntime.getClient()` exposes the runtime's own `AgentClient` instance
- Verb contract: `serve` = deploy + serve (each served agent is compiled + registered first, idempotently) with a non-blocking variant `serve(false, agents...)` that returns once workers are polling; `AgentHandle` gains the lifecycle verbs `send(message)` (now actually delivers `{"message": ...}` — it previously discarded the message), `stop()` (graceful, deterministic), `pause()`/`resume()` (un-pause; distinct from `AgentRuntime.resume(executionId, agent)` which re-attaches workers), `cancel(reason)`, and `getStatus()`
Expand All @@ -19,6 +19,10 @@ All notable changes to this project will be documented in this file.
- Swarm hand-offs: transfer tools echo the hand-off `message`; `check_transfer` is first-wins with `transfer_message` and surfaces non-winning transfers in `dropped_transfers` (with a warning) instead of silently discarding them
- `agent-e2e` GitHub workflow runs the e2e suites as a two-server matrix: the Conductor OSS server boot JAR `3.32.0-rc.8` (Maven Central) and the released `agentspan-server-0.4.4.jar`

### Removed

- The source-less publishing shim modules `java-sdk` (`org.conductoross:java-sdk`), `orkes-client` (`io.orkes.conductor:orkes-conductor-client`), and `orkes-spring` (`io.orkes.conductor:orkes-conductor-client-spring`) are deleted — depend on `org.conductoross:conductor-client` / `conductor-client-spring` directly instead

### Changed

- `useEnvVariables(true)` (and the `new ApiClient()` no-arg constructor) no longer throws when `CONDUCTOR_SERVER_URL` is unset — it falls back to `AGENTSPAN_SERVER_URL`, then `http://localhost:8080/api`; the resolved URL is normalized to end in `/api`, and credentials gain the `AGENTSPAN_AUTH_KEY`/`AGENTSPAN_AUTH_SECRET` fallback
Expand Down
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ executor.initWorkers("com.mycompany.workers"); // Package to scan for @WorkerTa
| Complexity | Simple | Complex (service mesh, load balancer) |

**Learn more:**
- [Worker SDK Guide](java-sdk/worker_sdk.md) — Complete worker framework documentation
- [Worker SDK Guide](docs/worker_sdk.md) — Complete worker framework documentation
- [Worker Examples](examples/) — Sample worker implementations

## Monitoring Workers
Expand Down Expand Up @@ -387,8 +387,8 @@ workflowClient.restartWorkflow(workflowId, false);
```

**Learn more:**
- [Workflow SDK Guide](java-sdk/workflow_sdk.md) — Workflow-as-code documentation
- [Workflow Testing](java-sdk/testing_framework.md) — Unit testing workflows
- [Workflow SDK Guide](docs/workflow_sdk.md) — Workflow-as-code documentation
- [Workflow Testing](docs/testing_framework.md) — Unit testing workflows

## Troubleshooting

Expand Down Expand Up @@ -426,7 +426,7 @@ Conductor supports AI-native workflows including agentic tool calling, RAG pipel

**Durable AI Agents**

The `conductor-ai` module is a full agent SDK on top of Conductor: `Agent`, `AgentRuntime`, `@Tool` functions, guardrails, handoffs, and multi-agent strategies, with Spring Boot auto-configuration in `conductor-ai-spring` and 150+ runnable examples in `conductor-ai-examples`. Start with the [agent docs](docs/agents/index.md).
The `conductor-client-ai` module is a full agent SDK on top of Conductor: `Agent`, `AgentRuntime`, `@Tool` functions, guardrails, handoffs, and multi-agent strategies, with Spring Boot auto-configuration in `conductor-client-ai-spring` and 150+ runnable examples in `agent-examples`. Start with the [agent docs](docs/agents/index.md).

**Agentic Workflows**

Expand Down Expand Up @@ -540,13 +540,13 @@ End-to-end examples covering all APIs for each domain:

| Document | Description |
|----------|-------------|
| [Worker SDK](java-sdk/worker_sdk.md) | Complete worker framework guide |
| [Workflow SDK](java-sdk/workflow_sdk.md) | Workflow-as-code documentation |
| [Testing Framework](java-sdk/testing_framework.md) | Unit testing workflows and workers |
| [Worker SDK](docs/worker_sdk.md) | Complete worker framework guide |
| [Workflow SDK](docs/workflow_sdk.md) | Workflow-as-code documentation |
| [Testing Framework](docs/testing_framework.md) | Unit testing workflows and workers |
| [Conductor Client](conductor-client/README.md) | HTTP client library documentation |
| [Client Metrics](conductor-client-metrics/README.md) | Prometheus metrics collection |
| [Spring Integration](conductor-client-spring/README.md) | Spring Boot auto-configuration |
| [AI Agents](docs/agents/index.md) | Durable AI agent SDK (`conductor-ai`) guide |
| [AI Agents](docs/agents/index.md) | Durable AI agent SDK (`conductor-client-ai`) guide |
| [Examples](examples/README.md) | Complete examples catalog |

## Support
Expand Down Expand Up @@ -600,7 +600,7 @@ Workers are standard Java applications. Deploy them as you would any Java applic

**How do I test workflows without running a full Conductor server?**

The SDK provides a test framework that uses Conductor's `POST /api/workflow/test` endpoint to evaluate workflows with mock task outputs. See [Testing Framework](java-sdk/testing_framework.md) for details.
The SDK provides a test framework that uses Conductor's `POST /api/workflow/test` endpoint to evaluate workflows with mock task outputs. See [Testing Framework](docs/testing_framework.md) for details.

## License

Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ plugins {
}

// Run individual examples via:
// ./gradlew :conductor-ai-examples:run -PmainClass=org.conductoross.conductor.ai.examples.openai.Example01BasicAgent
// ./gradlew :agent-examples:run -PmainClass=org.conductoross.conductor.ai.examples.openai.Example01BasicAgent
application {
mainClass = project.findProperty('mainClass') ?: 'org.conductoross.conductor.ai.examples.Example01BasicAgent'
}

dependencies {
implementation project(':conductor-ai')
implementation project(':conductor-client-ai')

// Native framework SDKs used by the adk/, langchain/, langgraph/, openai/
// subpackages. @Tool / @P annotations are RUNTIME-retained, so these must be
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ ext {
apply plugin: 'publish-config'

dependencies {
api project(":conductor-ai")
api project(":conductor-client-ai")
// Conductor Spring auto-configuration — wires ApiClient from conductor.* properties
// so callers don't need to hand-roll the client bean themselves.
api project(":conductor-client-spring")
Expand Down
File renamed without changes.
Loading
Loading