Skip to content

Releases: edspencer/herdctl

@herdctl/core@5.22.1

Choose a tag to compare

@github-actions github-actions released this 20 Jul 15:10
5419acb

Patch Changes

  • #391 15c20be Thanks @edspencer! - Re-establish injected MCP servers on session wake-fired turns (#390).

    Under session drive-mode, in-process injectedMcpServers were dropped on every
    wake-driven turn (ScheduleWakeup / /loop / CronCreate re-fires): the reaper
    closes the idle session and the wake registry re-opens it without the in-process
    servers, so the resumed subprocess still lists the injected mcp__…__* patterns
    in --allowedTools but has no server behind them — the tools vanish from the
    model's catalog for the whole autonomous stretch (durably so across restarts).

    • @herdctl/core: add an optional resolveInjectedMcpServers(entry) factory to
      SessionLifecycleManagerOptions (and a setResolveInjectedMcpServers setter on
      both SessionLifecycleManager and FleetManager). When registered, the wake
      fire() path consults it and threads the resolved servers into the resumed
      session via a new optional injectedMcpServers field on
      SessionWakeChatOptions. Injection policy stays in the consumer; herdctl owns
      the wiring. Fully backward-compatible — with no resolver registered, wakes fire
      with no injection exactly as before, and a throwing resolver is logged and
      degrades to no-injection rather than wedging the wake.

    • @herdctl/core (secondary): stop allowedTools from accumulating duplicate
      mcp__…__* wildcards across turns. toSDKOptions now copies the agent's
      allowed_tools array instead of aliasing it, and the SDK runtime de-dupes
      injected tool patterns before appending them.

@herdctl/web@0.10.1

Choose a tag to compare

@github-actions github-actions released this 19 Jul 16:15
851c001

Patch Changes

  • Updated dependencies [ba61918]:
    • @herdctl/core@5.22.0
    • @herdctl/chat@0.7.0

@herdctl/slack@1.2.32

Choose a tag to compare

@github-actions github-actions released this 19 Jul 16:15
851c001

Patch Changes

  • Updated dependencies [ba61918]:
    • @herdctl/core@5.22.0
    • @herdctl/chat@0.7.0

@herdctl/discord@1.2.19

Choose a tag to compare

@github-actions github-actions released this 19 Jul 16:15
851c001

Patch Changes

  • Updated dependencies [ba61918]:
    • @herdctl/core@5.22.0
    • @herdctl/chat@0.7.0

@herdctl/core@5.22.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 16:15
851c001

Minor Changes

  • #383 ba61918 Thanks @edspencer! - Stream partial assistant-text deltas on the SDK runtime.

    • @herdctl/core: add an opt-in includePartialMessages flag on
      ChatSessionOptions / RuntimeExecuteOptions (and SDKQueryOptions), threaded
      from openChatSession down to the SDK query(). When set, the SDK emits
      stream_event / text_delta chunks so callers can stream assistant text
      token-by-token. Default off — batch/one-shot and non-opting session callers are
      unchanged.
    • @herdctl/chat: SDKMessageTranslator now handles stream_event messages,
      emitting incremental onText(delta) calls for content_block_delta /
      text_delta events, and suppresses the terminal whole-assistant text re-emit
      when its text already streamed as deltas (the onText contract stays "deltas,
      in order"). Boundary and tool-call semantics are preserved; the partials-off
      path is byte-for-byte unchanged (one onText per assistant content block).

@herdctl/chat@0.7.0

Choose a tag to compare

@github-actions github-actions released this 19 Jul 16:15
851c001

Minor Changes

  • #383 ba61918 Thanks @edspencer! - Stream partial assistant-text deltas on the SDK runtime.

    • @herdctl/core: add an opt-in includePartialMessages flag on
      ChatSessionOptions / RuntimeExecuteOptions (and SDKQueryOptions), threaded
      from openChatSession down to the SDK query(). When set, the SDK emits
      stream_event / text_delta chunks so callers can stream assistant text
      token-by-token. Default off — batch/one-shot and non-opting session callers are
      unchanged.
    • @herdctl/chat: SDKMessageTranslator now handles stream_event messages,
      emitting incremental onText(delta) calls for content_block_delta /
      text_delta events, and suppresses the terminal whole-assistant text re-emit
      when its text already streamed as deltas (the onText contract stays "deltas,
      in order"). Boundary and tool-call semantics are preserved; the partials-off
      path is byte-for-byte unchanged (one onText per assistant content block).

Patch Changes

  • Updated dependencies [ba61918]:
    • @herdctl/core@5.22.0

herdctl@1.5.27

Choose a tag to compare

@github-actions github-actions released this 18 Jul 10:49
0cf4673

Patch Changes

  • Updated dependencies [247d452, 822fdfb]:
    • @herdctl/core@5.21.0
    • @herdctl/web@0.10.0

@herdctl/web@0.10.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 10:49
0cf4673

Minor Changes

  • #380 822fdfb Thanks @edspencer! - Add spawned trigger type (#377)

    Extend TriggerTypeSchema with an explicit spawned value so a host (e.g. paddock)
    can persist run provenance for agent-spawned jobs as a first-class enum rather than
    inferring it. Additive and backward-compatible — existing headless fleets are
    unchanged.

    • core: spawned added to TriggerTypeSchema (and therefore the TriggerType
      type). schedule already covers scheduled runs, so no separate scheduled value
      is introduced.
    • web: the job-history trigger-type icon/label map renders spawned with a
      Bot icon labelled "Spawned".

    Supports paddock#267 (provenance badges).

Patch Changes

@herdctl/core@5.21.0

Choose a tag to compare

@github-actions github-actions released this 18 Jul 10:49
0cf4673

Minor Changes

  • #379 247d452 Thanks @edspencer! - Scheduler: host-execution seam + runtime schedule mutation (additive, backward-compatible)

    Make the scheduler embeddable so a host can own execution and mutate schedules at
    runtime. Existing headless fleets are unchanged — every new capability is opt-in.

    • Host-execution seam (#375): FleetManager.setScheduleTriggerHandler(handler)
      mirrors setSessionWakeHandler. When set, a fired schedule routes to the host
      handler (which can resume/stream the turn on its own hub) instead of the built-in
      headless ScheduleExecutor; when unset, schedules run headless exactly as before.
      Cron/interval timing is untouched. Every scheduler-fired trigger — including a
      forced immediate fire — funnels through this seam.
    • Relative-wake timezone hardening (#311): resolveSystemTimeZone() centralizes
      the host-timezone lookup used by calculateNextCronTrigger/
      calculatePreviousCronTrigger, falling back to UTC when an ICU-less runtime
      reports no timezone (which could otherwise revive the 24h-idle bug).
    • Runtime schedule mutation (#376): FleetManager.setAgentSchedule(agent, name, schedule) and removeAgentSchedule(agent, name) add/remove a single schedule on a
      registered agent without a whole-agent addAgent(replace). setAgentSchedule also
      normalizes a lingering persisted disabled status to idle (via the new
      armScheduleState helper) so a set-after-disable is actually eligible to fire.
      Removal prunes persisted state via the new deleteScheduleState helper.
    • Concurrency-safe mutation: schedule-state read-modify-writes are now serialized
      per state file (no lost sibling updates); a removed schedule with an in-flight run is
      tombstoned so that run's trailing write can't resurrect deleted state; and the
      in-flight run's running-set entry is retained (only warn-once bookkeeping is cleared)
      so a same-name re-add can't start a second concurrent execution. The tombstone is
      coordinated with the active execution generation so it is neither left set nor cleared
      too early: setAgents lifts it for a re-armed schedule only when no run for that key
      is in flight
      — so reload() / addAgent({replace}) / setAgentSchedule re-arm a
      removed name cleanly (no runaway per-tick firing from a stuck tombstone) while a still
      in-flight removed generation's trailing next_run_at/last_error write stays
      suppressed (can't contaminate the freshly re-added schedule); the tombstone is then
      lifted by that run's own executeJob finally on completion, or immediately by the
      remover when no run is in flight. removeAgentSchedule is in-memory-only (like
      addAgent/removeAgent): it does not rewrite herdctl.yaml, so a later reload()
      legitimately brings the schedule back.
    • Mutation gate: a new allowScheduleMutation FleetManager option (default
      false) gates the two mutation methods; when disabled they throw the new
      ScheduleMutationDisabledError. Enable/disable of existing schedules stays ungated.
  • #380 822fdfb Thanks @edspencer! - Add spawned trigger type (#377)

    Extend TriggerTypeSchema with an explicit spawned value so a host (e.g. paddock)
    can persist run provenance for agent-spawned jobs as a first-class enum rather than
    inferring it. Additive and backward-compatible — existing headless fleets are
    unchanged.

    • core: spawned added to TriggerTypeSchema (and therefore the TriggerType
      type). schedule already covers scheduled runs, so no separate scheduled value
      is introduced.
    • web: the job-history trigger-type icon/label map renders spawned with a
      Bot icon labelled "Spawned".

    Supports paddock#267 (provenance badges).

@herdctl/web@0.9.31

Choose a tag to compare

@github-actions github-actions released this 15 Jul 04:08
c1f5ebf

Patch Changes

  • Updated dependencies [5af6326]:
    • @herdctl/chat@0.6.0