diff --git a/CHANGELOG.md b/CHANGELOG.md
index b4752eb97..aab47160e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,6 +18,8 @@ All notable changes to this project will be documented in this file.
- Liveness for stateful runs: a `SCHEDULED` task with zero polls beyond `livenessStallSeconds` surfaces as `WorkerStallError` from the handle's wait instead of burning the full timeout
- 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`
+- `SchedulerClient.pauseSchedule(name, reason)` — an optional pause reason, persisted as `pausedReason`
+- `WorkflowSchedule`/`SaveScheduleRequest` gain `nextRunTime` (read) and `cronSchedules` (a new `CronSchedule` list — multi-cron schedules) — additive, null-omitting serialization keeps existing save bodies unchanged when unused; `cronSchedules` is sent as-is and silently ignored on servers whose create DTO doesn't expose it
### Removed
@@ -26,6 +28,8 @@ All notable changes to this project will be documented in this file.
### 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
+- `SchedulerClient.pauseSchedule`/`resumeSchedule` now send `PUT` first (OSS Conductor's verb) and fall back to `GET` — caching that verdict for the client's lifetime — only on a `405`; any other error status propagates immediately. This makes the same client portable across OSS Conductor, Orkes Conductor (`GET`-only today), and agentspan-embedded servers with no configuration
+- `SchedulerClient.getSchedule` now throws consistently on a missing schedule
## [5.1.0]
diff --git a/conductor-client-ai/src/main/java/org/conductoross/conductor/ai/schedule/Schedules.java b/conductor-client-ai/src/main/java/org/conductoross/conductor/ai/schedule/Schedules.java
index ea1100a1d..3526ca643 100644
--- a/conductor-client-ai/src/main/java/org/conductoross/conductor/ai/schedule/Schedules.java
+++ b/conductor-client-ai/src/main/java/org/conductoross/conductor/ai/schedule/Schedules.java
@@ -12,37 +12,30 @@
*/
package org.conductoross.conductor.ai.schedule;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+import java.util.function.Supplier;
import org.conductoross.conductor.ai.model.AgentHandle;
import org.conductoross.conductor.ai.model.AgentResult;
import com.netflix.conductor.client.exception.ConductorClientException;
import com.netflix.conductor.client.http.ConductorClient;
-import com.netflix.conductor.client.http.ConductorClientRequest;
-import com.netflix.conductor.client.http.ConductorClientRequest.Method;
import com.netflix.conductor.client.http.WorkflowClient;
import com.netflix.conductor.common.metadata.workflow.StartWorkflowRequest;
import com.netflix.conductor.common.run.Workflow;
+import io.orkes.conductor.client.SchedulerClient;
import io.orkes.conductor.client.exceptions.AgentAPIException;
-
-import com.fasterxml.jackson.core.type.TypeReference;
+import io.orkes.conductor.client.http.OrkesSchedulerClient;
+import io.orkes.conductor.client.model.SaveScheduleRequest;
+import io.orkes.conductor.client.model.WorkflowSchedule;
/**
* Lifecycle API for cron-based agent schedules. Obtained via {@code runtime.schedules()}.
*
- *
All requests ride the shared native Conductor {@link ConductorClient}/ApiClient
- * (same HTTP + token-auth backend as every other client) — the scheduler CRUD via
- * {@link ConductorClientRequest}/{@link ConductorClient#execute} ({@code /api/scheduler/*},
- * for which the Conductor client ships no typed {@code SchedulerClient}), and
- * {@code runNow} via the typed {@link WorkflowClient}.
+ *
This class contributes only agent-scoped naming (prefix/unprefix),
+ * {@link Schedule}/{@link ScheduleInfo} DTO mapping, declarative
+ * {@link #reconcile}, and {@code runNow} sugar (via the typed {@link WorkflowClient}).
*
*
Operations are keyed by the wire name (prefixed with
* {@code agent-}) returned by {@link #list(String)}. Use {@link Schedule} to
@@ -50,65 +43,43 @@
*/
public class Schedules {
- private static final TypeReference