Releases: Viking602/go-hydaelyn
Release list
v0.11.6
Hydaelyn v0.11.6
Status: Released
Released on 2026-07-18.
Unlimited interactive agent turns
Interactive agents can now set LoopPolicy.UnlimitedIterations to disable the
default model-turn ceiling. Tool-call, token, step, wall-clock, context, and
cancellation policies remain independent and continue to apply when configured.
The opt-in is forwarded through Engine.Run and exposed to output guardrails,
so guardrail retries follow the same iteration policy. Existing callers retain
the default 12-turn ceiling unless they explicitly enable unlimited iterations.
This release adds fields to exported structs. Keyed struct literals remain
compatible; external unkeyed literals must be updated.
Upgrade
go get github.com/Viking602/go-hydaelyn@v0.11.6
go install github.com/Viking602/go-hydaelyn/cmd/hydaelyn@v0.11.6Full Changelog: v0.11.5...v0.11.6
v0.11.3
Hydaelyn v0.11.3
Status: Released
Released on 2026-07-18.
Stable tool definitions for prompt caching
Tool definitions are now returned in deterministic name order instead of Go
map iteration order. Stable tool serialization preserves the shared request
prefix across agent turns, allowing providers to reuse prompt caches reliably.
The behavior is backward-compatible: tool selection and execution are
unchanged; only the order of definitions sent to providers is stabilized.
Upgrade
go get github.com/Viking602/go-hydaelyn@v0.11.3
go install github.com/Viking602/go-hydaelyn/cmd/hydaelyn@v0.11.3Full Changelog: v0.11.2...v0.11.3
v0.11.1
Hydaelyn v0.11.1
Status: Released
Released on 2026-07-18.
Cached input token usage
Provider usage now reports cached input tokens separately so applications can
measure prompt-cache effectiveness without changing total input accounting:
provider.Usage.CachedInputTokensexposes the provider-reported cached
subset of input tokens;provider.Usage.Addaccumulates cached input tokens across streamed usage;- OpenAI Chat Completions reads
prompt_tokens_details.cached_tokens; - OpenAI Responses reads
input_tokens_details.cached_tokens.
The change is backward-compatible: the new field is additive and remains zero
when a provider does not report cache usage.
Upgrade
go get github.com/Viking602/go-hydaelyn@v0.11.1
go install github.com/Viking602/go-hydaelyn/cmd/hydaelyn@v0.11.1What's Changed
- feat(provider): report cached input tokens by @Viking602 in #40
- chore(release): prepare v0.11.1 by @Viking602 in #41
Full Changelog: v0.11.0...v0.11.1
v0.11.0
Hydaelyn v0.11.0
Status: Released
Released on 2026-07-18.
Context-aware agent compaction
Agent loops can now manage per-request context capacity independently from
cumulative run spend:
agent.LoopPolicy.ContextTokenTargetdeclares the usable history allowance
for one model request;agent.TargetContextManageradds token-targetedCompactTopreparation;- targeted context preparation runs before every model request, including the
first request and requests following tool results; - complete tool turns and framework-owned skill context are validated before a
compacted request is sent; - existing
ContextManagerimplementations and cumulative
api.TaskBudget.MaxTokensbehavior remain compatible.
Applications should derive ContextTokenTarget from the selected model's
context window after reserving capacity for output, reasoning, tool schemas, and
provider framing.
OpenAI Responses API
The OpenAI provider now supports the Responses API required by Codex models.
Set openai.Config.WireAPI to openai.WireResponses to use /responses;
Chat Completions remains the default. Responses streaming preserves encrypted
reasoning/provider state needed by subsequent turns and conforms to the shared
provider event contract.
Upgrade
go get github.com/Viking602/go-hydaelyn@v0.11.0
go install github.com/Viking602/go-hydaelyn/cmd/hydaelyn@v0.11.0What's Changed
- feat(openai): support Responses API for Codex by @Viking602 in #38
- fix(agent): decouple context compaction from run budget by @Viking602 in #39
Full Changelog: v0.10.1...v0.11.0
v0.10.1
Hydaelyn v0.10.1
Status: Released
Released on 2026-07-16.
Module integrity fix
v0.10.1 publishes the intended v0.10.0 framework changes under a new,
verifiable module version. The v0.10.0 tag reused a version already recorded
with different content in the public Go checksum database, so standard Go
module verification rejects it.
This release:
- retracts
v0.10.0ingo.mod; - preserves the public API and runtime behavior documented in the
v0.10.0 release notes; - gives module consumers a version that installs with normal checksum
verification enabled.
Consumers should upgrade directly to v0.10.1:
go get github.com/Viking602/go-hydaelyn@v0.10.1
go install github.com/Viking602/go-hydaelyn/cmd/hydaelyn@v0.10.1Full Changelog: v0.10.0...v0.10.1
v0.10.0 (retracted)
Retracted: Do not use this version. Its tag reused a version already recorded with different content in the public Go checksum database, so standard module verification rejects it. Use v0.10.1 instead.
Hydaelyn v0.10.0
Status: Released
Released on 2026-07-16.
Breaking changes
MCP low-level transport contract
transport/mcp/client.Transport now aliases the official MCP SDK transport
contract. Custom transports must replace this shape:
Call(ctx context.Context, method string, params any, result any) error
Close() errorwith the official connection entry point:
Connect(ctx context.Context) (mcp.Connection, error)Use mcp.IOTransport or mcp.StreamableClientTransport when possible.
Hydaelyn no longer maintains a second JSON-RPC framing or session
implementation.
Stdio process lifecycle
DialStdio keeps its public shape and no longer starts the child process during
the dial call. Internally, a bounded command-process adapter owns the pipes and
feeds the official mcp.IOTransport; the local layer enforces a 4 MiB physical
NDJSON line limit while the SDK parses MCP. Client.Initialize starts the
process and completes negotiation. Code that checked subprocess side effects
before Initialize must move those checks after initialization.
Gateway client field and constructor types
ClientGateway.Client and NewGateway now accept mcpcontract.Client instead
of only *mcpclient.Client. Existing NewGateway(client) calls and calls to all
eight high-level methods remain source compatible: Initialize, ListTools,
CallTool, ListResources, ReadResource, ListPrompts, GetPrompt, and
Close.
Two exact static shapes require migration:
- Change
var c *mcpclient.Client = gateway.Clientto a checked type assertion
when the concrete implementation matters. - Change a function variable typed as
func(*mcpclient.Client) mcp.ClientGatewayto accept
mcpcontract.Client, or wrapmcp.NewGatewayin a function with the old
parameter type.
Tool importer function type
tool/kit.ImportMCPTools now accepts kit.MCPClient instead of a concrete
*mcpclient.Client. Ordinary direct calls remain source compatible because
*mcpclient.Client implements the interface. An exact function value such as
func(context.Context, *mcpclient.Client) ([]tool.Driver, error) must change its
second parameter to kit.MCPClient, or wrap kit.ImportMCPTools in a function
with the old parameter type.
The mcpclient DTO source names, assignment compatibility, and JSON fields are
preserved through aliases. The defined types now belong to mcpcontract, so
reflection reports the mcpcontract package path instead of
transport/mcp/client. Official SDK result types do not enter those DTOs. Nil
and typed-nil gateway clients now return a stable error instead of panicking.
New features
- Runner construction now separates explicit
NewDevelopmentdefaults from
validatedNewProductiondependencies. The pre-v1Newdevelopment entry
point remains source compatible and is deprecated. - Agent Skills support now covers the complete local progressive-disclosure
lifecycle: trusted user/project/additional-root discovery, standards-compatible
SKILL.mdparsing, explicit activation, metadata-only catalog disclosure,
model-driven activation, bounded on-demand resource reads, per-run activation
de-duplication, and skill-context retention across compaction.allowed-tools
remains advisory; agent configuration and policy still control tool access,
and bundled scripts are never executed automatically. - MCP stdio and HTTP clients now use
github.com/modelcontextprotocol/go-sdk
v1.6.1 for protocol parsing and sessions. HTTP applies a 30-second response
header timeout, while an SSE response body has no total lifetime timeout.
Streamable HTTP JSON bodies and individual SSE events have the same 4 MiB
inbound limit as physical stdio NDJSON lines; overflow returns the typed
InboundLimitError. - Conversation compactors now keep each assistant tool-call batch and its
results as one atomic turn. The agent loop rejects custom compactors that
return an incomplete tool exchange. - The optional
agent.StepRecorderreceives each finalized step. Runner-backed
workers persist those steps as typedStepCompletedevents, and callers can
reconstruct separate execution-attempt traces from the event log. - Storage adapters can run
contract.RunRecoveryContractTeststo verify Runner
projection recovery, committed step traces, and saved scheduler decisions
across runtime loss. The contract does not resume an in-progress model or
tool turn, and Hydaelyn still ships no storage backend.
Fixes and hardening
- Multi-agent dispatch defaults to four concurrent executions; unbounded
concurrency now requires an explicit option. OpenAI and Anthropic streaming
clients retain connection/header timeouts without a total response lifetime
timeout, and undeclared Store capabilities now fail closed. - The pinned toolchain moves from Go 1.25.11 to Go 1.25.12.
govulncheckno
longer reports the reachable standard-library vulnerability found during the
release audit. - CLI
versionand help output now read Go build metadata. Local builds report
devel; module-at-version installs report the installed module version. - Workspace and transport hardening merged after v0.9.0 closes path, symlink,
filter, process-lifecycle, and stream EOF edge cases. - Cross-origin HTTP redirects are rejected before redirected MCP requests can
reach another origin. Same-origin redirects retain the configured and
SDK-owned headers required for the session. - Concurrent
Initializecalls share one terminal result.Closerecords one
terminal result and runs the same session, transport, and subprocess cleanup
path once. - A
go listbased architecture check enforces the four load-bearing import
seams. Sentrux continues to enforce global cycles, coupling, and god-file
limits. - The release workflow rejects tags outside
origin/main, pins staticcheck and
govulncheck, runs the architecture gate, verifies the installed CLI, and
builds a temporary consumer that importsskillfrom the same tag.
Verification performed
The following checks passed on 2026-07-10 against the release-candidate
worktree:
make verifymake architecture-checkGOTOOLCHAIN=go1.25.12 govulncheck ./..., with no vulnerabilities foundgo test -race ./transport/mcp/client -count=20go test ./... -count=1after the MCP migration- Official SDK stdio initialization, tool list and call, protocol failure, and
close scenarios - Official SDK Streamable HTTP JSON and SSE initialization, tool list and call,
session-header, cancellation, and close scenarios - Release workflow syntax and
actionlint, main-contained and side-branch tag
ancestry fixtures, an isolated tagged CLI install, and a temporaryskill
consumer build
The real GitHub tag event and release creation cannot be tested until a tag is
pushed. The release workflow keeps publication behind the same verification
job.
Deferred scope
Advanced schedulers, memory pipelines, artifact storage, OpenTelemetry
integration, and production pack content are not part of v0.10.0. They remain
in the unversioned future backlog.
Release operators should follow RELEASING.md after the
candidate passes the full local gate.
What's Changed
- fix(runtime): harden transports and workspace sandbox by @Viking602 in #32
- feat(skill): Agent Skills parser/registry with spec-compliant validation by @Viking602 in #33
- feat(v0.10.0): complete release stabilization by @Viking602 in #34
- feat(runtime): harden production construction and execution defaults by @Viking602 in #35
- feat(runtime): harden durable multi-agent execution by @Viking602 in #36
- feat(v0.10.0): add atomic history and runtime recovery by @Viking602 in #37
Full Changelog: v0.9.0...v0.10.0
v0.9.0
What's Changed
- chore(api): enforce public any-field contract and add coverage by @Viking602 in #15
- fix: remediate runtime stability risks by @Viking602 in #16
- feat: live agent streaming + reference multi-agent schedulers by @Viking602 in #17
- feat(multiagent): add typed DAG orchestration graph with bounded concurrency by @Viking602 in #18
- feat(multiagent): field-level fan-in, deep schema checks, team-level streaming by @Viking602 in #19
- feat(agent,worker): bound the agent loop with per-task budgets and typed failure classification by @Viking602 in #20
- fix(provider/anthropic): round-trip structured content blocks and thinking signatures by @Viking602 in #21
- fix(agent): harden loop failure paths (panic isolation, partial-trace, guardrail classification) by @Viking602 in #22
- docs(adr): translate ADR-001..008 to English by @Viking602 in #23
- feat(agent): self-sufficient agent layer — neutral Spec, model resolver, subagent-as-tool by @Viking602 in #24
- feat(workflow): add workflow modeling layer; rename scheduler driver to cron by @Viking602 in #25
- docs(readme): rewrite as a why-first overview by @Viking602 in #26
- feat(eval): redesign evaluation framework around EvalCase/Harness by @Viking602 in #27
- feat(coding): sandboxed coding agent with hashline edit protocol by @Viking602 in #28
- feat(agent): wire StepPolicy and ContextManager.Compact into the loop by @Viking602 in #29
- refactor: land 2026-06-10 architecture review fixes by @Viking602 in #30
- feat!: close v0.8.0 storage debt and reliability gaps by @Viking602 in #31
Full Changelog: v0.8.1...v0.9.0
v0.8.1
v0.8.0
What's Changed
- feat(v0.8.0): Memory[T] optional plugin + in-flight refactor by @Viking602 in #12
- refactor(storage): Position D — delete reference implementations, ship contract only by @Viking602 in #13
- feat(v0.8.0): Phase 0 + Phase 1 — strong bounded agent loop + multi-agent skeleton by @Viking602 in #14
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- feat!: v2.0 — migrate internal/runtime → internal/core, add worker package by @Viking602 in #2
- fix(runtime): 修复响应发布与事件 ID 回归 by @Viking602 in #3
- chore: 引入 Go 代码风格工具链与 CI 门禁 by @Viking602 in #4
- refactor: fix package naming violations (Plan Phase A.1) by @Viking602 in #5
- chore: first baseline lint cleanup batch + CI Node 24 upgrade by @Viking602 in #6
- docs: add Examples for mcpclient + errorprovider (Plan D, partial) by @Viking602 in #7
- chore: second baseline lint cleanup batch + Examples by @Viking602 in #8
- refactor: split internal/core into layered architecture by @Viking602 in #9
- refactor(core): split internal/core into domain packages by @Viking602 in #10
- refactor(arch): eliminate model_aliases, split runner facade, add tests by @Viking602 in #11
Full Changelog: v0.6.0...v0.7.0