v0.22.0
·
414 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
What's Changed
- refactor(llm): delegate gemini ApiError to map_error_response; docs(config): CandleConfig doc comment by @bug-ops in #4880
- refactor(memory): remove ScoredCandidate wrapper and fix entered() span in tiered_retrieval by @bug-ops in #4881
- fix(experiments): correct EvalReport total_tokens overcounting and improve evaluator tests by @bug-ops in #4888
- refactor(llm): extract generation_params() helper and fix context_window fallback in OpenAiProvider by @bug-ops in #4889
- perf(context),refactor(llm): add fidelity tracing spans and extract response body helper by @bug-ops in #4891
- refactor(acp): bump agent-client-protocol to 0.14.0 by @bug-ops in #4893
- feat(index): add embedding_provider config field and fix double provider construction by @bug-ops in #4894
- refactor(subagent): add tracing span to resume and remove utc_now_pub by @bug-ops in #4895
- fix(llm): add config-driven override for CompletionTokens resolution by @bug-ops in #4898
- refactor(sanitizer,mcp): add guardrail tracing spans and fix mcp client span naming by @bug-ops in #4907
- refactor(subagent): split manager.rs monolith into focused modules by @bug-ops in #4906
- fix(acp): use thread::Builder with 8 MiB stack for agent connection thread by @bug-ops in #4908
- refactor(config): replace stringly-typed fields with typed enums by @bug-ops in #4909
- fix(acp,gateway): fix stdio stack overflow and sanitize webhook body by @bug-ops in #4911
- fix(a2a): add TTL eviction to TaskManager and replace now_rfc3339 with chrono by @bug-ops in #4910
- refactor(agent-feedback,scheduler): expose judge rate limit via config and add CronExpr newtype by @bug-ops in #4913
- refactor(config): split migrate/mod.rs monolith into subsystem submodules by @bug-ops in #4914
- refactor(config): split providers.rs monolith into per-family submodules by @bug-ops in #4915
- refactor(llm): split router/mod.rs monolith into focused submodules by @bug-ops in #4920
- refactor(core): split agent/persistence.rs into focused submodules by @bug-ops in #4921
- refactor(config): split memory.rs monolith into per-concern submodules by @bug-ops in #4922
- refactor(plugins): split manager.rs monolith into per-concern submodules by @bug-ops in #4927
- refactor: extract inline test blocks to dedicated tests modules by @bug-ops in #4932
- refactor(mcp): split manager.rs monolith into focused submodules by @bug-ops in #4931
- refactor(core): split agent/mod.rs monolith into focused submodules by @bug-ops in #4933
- chore(config,core,llm): post-split code-quality cleanup (#4926, #4928, #4929, #4930) by @bug-ops in #4934
- refactor(tui): split app/mod.rs monolith into focused submodules by @bug-ops in #4938
- refactor(config): dedup unit-interval validators and complete must_use sweep by @bug-ops in #4939
- perf(acp): offload list_directory and find_path fs walks to spawn_blocking by @bug-ops in #4940
- refactor(acp): extract session-usage and llm-providers clusters from agent/mod.rs by @bug-ops in #4942
- docs(spec-064): refresh stale references after monolith splits by @bug-ops in #4959
- feat(durable): scaffold zeph-durable crate, core newtypes, journal schema by @bug-ops in #4965
- fix(db): restore postgres backend compile and sqlite/postgres parity by @bug-ops in #4966
- feat(durable): payload AEAD cipher, AAD binding, max-payload fail-closed (#4945) by @bug-ops in #4967
- feat(durable): journal writer actor, sealed backend, local durable.db backend (#4946) by @bug-ops in #4968
- docs(agents): track all AGENTS.md guides and refresh review instructions by @bug-ops in #4969
- feat(durable): durable step, &self context, and replay divergence guard by @bug-ops in #4970
- feat(durable): durable promises, timers, and retention/compaction by @bug-ops in #4971
- feat(durable): zeph durable CLI, config wiring, init wizard, migrate-config, TUI view by @bug-ops in #4972
- refactor: add #[must_use] to public validate/scan functions across workspace by @bug-ops in #4974
- feat(core): durable agent tool-loop steps with crash-resume (#4951) by @bug-ops in #4975
- fix(subagent): offload blocking FS IO to spawn_blocking by @bug-ops in #4979
- feat(tui,experiments): reverse search backward nav and subject error tolerance by @bug-ops in #4976
- docs/refactor: fix acp intra-doc links and extract DRY helpers by @bug-ops in #4980
- feat(durable): --json flag for durable CLI, remove dead TUI consts, degraded metric by @bug-ops in #4986
- fix(init,config): sanitize provider env vars, fix embedding and eval_model prompts by @bug-ops in #4991
- fix(init): align default config output path with runtime search order by @bug-ops in #4992
- feat(durable,subagent): criterion benchmarks + durable subagent promise adapter by @bug-ops in #4994
- refactor(experiments,init): rename eval_model → eval_provider, add XDG parity test by @bug-ops in #4999
- fix(skills): use compact skill catalog when embedding matcher is unavailable by @bug-ops in #4998
- feat(durable): P2+P3 durable adapters — replan budget restore and exactly-once scheduler fires by @bug-ops in #5001
- fix(tui): add transcript scroll in Insert mode (PageUp/PageDown + mouse wheel) by @bug-ops in #4996
- fix(durable): use AtomicU32 counter in append benchmarks to avoid UNIQUE violation by @bug-ops in #5002
- refactor(tui) + docs(spec-063): scroll-step constant and panic=abort Drop limitation by @bug-ops in #5005
- feat(skills): add built-in caveman ultra-compressed output mode by @bug-ops in #5008
- spec(deep-link-scheme): add zeph:// URI scheme specification by @bug-ops in #5009
- spec(knowledge-ingest): add specification for zeph knowledge ingest (spec-067) by @bug-ops in #5025
- fix(orchestration): remove INV-1 violating deps and track durable writer handle by @bug-ops in #5028
- fix(llm): apply restored reasoning_effort to active provider (Phase 2) by @bug-ops in #5031
- feat(commands): add /undo and /redo slash commands with checkpoint stack by @bug-ops in #5029
- fix(tools): checkpoint_undo(0) misleading message and has_traversal backslash bypass by @bug-ops in #5036
- fix(core,config): de-dup CAVEMAN_DIRECTIVE injection and add migration tests by @bug-ops in #5034
- test(context): add fidelity provider wiring assertions in apply_session_config by @bug-ops in #5038
- feat(knowledge): add knowledge ingest CLI, ledger, and notes sink (#5016, #5017, #5018) by @bug-ops in #5040
- test(core): add fidelity provider wiring tests for #5037 and #5039 by @bug-ops in #5042
- feat(deep-link): Phase 1 — parser, config, cwd validation by @bug-ops in #5041
- feat(memory): add provenance columns to graph tables + recall isolation flag by @bug-ops in #5044
- feat(knowledge): wire IngestProgress channel in knowledge ingest (FR-014) by @bug-ops in #5049
- fix(deep-link): add #[non_exhaustive] to DeepLinkError and gate DeepLinkConfig behind feature flag by @bug-ops in #5050
- fix(llm): delegate context_window, supports_vision, last_reasoning_tokens in CompatibleProvider by @bug-ops in #5051
- feat(knowledge): implement rollback command and TUI palette by @bug-ops in #5053
- feat(deep-link): Phase 2 — CLI dispatch, bootstrap integration, TUI notification, --init wizard by @bug-ops in #5052
- fix(knowledge): make rollback atomic across all three tables by @bug-ops in #5055
- feat(memory): add graph batch extraction API (ingest_documents) by @bug-ops in #5056
- research(knowledge): Phase 2 measurement spike + kill-criterion (#5022) by @bug-ops in #5058
- feat(deep-link): Phase 3 — OS registration tests and playbook (spec-066) by @bug-ops in #5061
- feat(deep-link): macOS .app bundle registration and stale url-scheme detection by @bug-ops in #5062
- feat(acp): stateless POST /deep-link endpoint for zeph:// URI dispatch (spec-066 TASK-15, #5059) by @bug-ops in #5066
- feat(knowledge): graph go-live for --source subagents + sanitizer on write path by @bug-ops in #5069
- feat(tools): add policy_provider to PolicyConfig and utility_window hard-stop by @bug-ops in #5068
- feat(knowledge): add external Claude Code / Codex transcript import (spec-067 Phase 3) by @bug-ops in #5070
- fix(knowledge): validator bypass, graph_origin mismatch, blocking fs I/O by @bug-ops in #5112
- fix(tools): resolve policy_provider by name in adversarial policy gate by @bug-ops in #5111
- fix(config): surface config load errors and improve init wizard by @bug-ops in #5115
- fix(tui): use display width instead of char count for CJK and emoji by @bug-ops in #5119
- fix(config): scope step 63 idempotency check to [memory.graph] section by @bug-ops in #5120
- test(init): add missing build_config tests for policy_provider and utility_window by @bug-ops in #5124
- fix(tui): uniform ToolDensity matrix and unicode-aware table/wrap widths by @bug-ops in #5122
- fix(memory,subagent): eliminate blocking sync I/O on async runtime threads (#5107, #5108) by @bug-ops in #5125
- fix(core): eliminate blocking sync I/O and Mutex-across-await in agent commands by @bug-ops in #5155
- fix(vault): wrap blocking I/O in spawn_blocking, use std RwLock, add tracing spans by @bug-ops in #5153
- fix(acp): eliminate blocking I/O on async threads in permission and session handlers by @bug-ops in #5161
- fix(durable): eliminate async violations in ReplayCursor and DurableHandle by @bug-ops in #5160
- feat(tui): theme system 2.0 — semantic palette, presets, color-mode downgrade by @bug-ops in #5159
- fix(db): wrap blocking I/O in spawn_blocking in connect_sqlite by @bug-ops in #5165
- fix(llm,orchestration,mcp): eliminate blocking I/O on async threads by @bug-ops in #5174
- fix(deep-link): add missing stale-detection tests and CI feature coverage by @bug-ops in #5175
- refactor(channels): extract StreamingSend trait and migrate telegram spawns to TaskSupervisor by @bug-ops in #5184
- fix(subagent,memory): eliminate async violations in SubAgentManager and RetrievalFailureLogger by @bug-ops in #5187
- fix(tracing): add missing instrument spans to a2a, orchestration, and agent-context by @bug-ops in #5192
- fix(tui): add expand/collapse affordance to grouped tool summary line by @bug-ops in #5193
- fix(acp): advisory injection detection, async canonicalize, span instrumentation by @bug-ops in #5194
- fix(channels,llm,core): wire TaskSupervisor into TelegramChannel and add embed_batch tracing spans by @bug-ops in #5197
- feat(skills,commands): surface skill load failures and enrich /model+/provider help by @bug-ops in #5234
- refactor(spawn): migrate direct tokio::spawn sites to TaskSupervisor by @bug-ops in #5240
- feat(tui): theme switching, borderless UI, and dashboard restyle by @bug-ops in #5242
- fix(index): eliminate async violations in zeph-index by @bug-ops in #5241
- fix(runner): replace sync span guards and blocking fs I/O in async fn by @bug-ops in #5247
- fix(async): eliminate blocking std::fs calls on async threads by @bug-ops in #5248
- test(tui): add unit tests for /theme parsing and insta snapshots for rounded modals by @bug-ops in #5249
- refactor(channels,core): migrate raw tokio::spawn to TaskSupervisor (#5146, #5147) by @bug-ops in #5250
- refactor(spawn): migrate core, tools, and subagent tokio::spawn sites to supervised tasks by @bug-ops in #5253
- fix(core): route lsp_hooks and notifications spawns through BackgroundSupervisor by @bug-ops in #5254
- fix(async): eliminate blocking std::fs calls on async threads by @bug-ops in #5255
- feat(tui): breeze spinner, human-voice status verbs, and splash wordmark by @bug-ops in #5256
- refactor(channels): fix DiscordChannel dead supervisor field and remove SlackChannel::with_supervisor no-op by @bug-ops in #5257
- fix(spawn): migrate skills/mcp/llm raw spawns to supervised tasks by @bug-ops in #5259
- feat(memory): add tracing instrumentation to facade, graph store, and embedding store by @bug-ops in #5261
- refactor(spawn): migrate remaining tokio::spawn sites to supervised tasks (#5149, #5150) by @bug-ops in #5260
- fix(async): eliminate span.entered() across .await and blocking fs::read in async callers by @bug-ops in #5264
- feat(tui): sidebar collapse, extended syntax highlighting, code block presentation by @bug-ops in #5263
- feat(tracing): add instrument spans to llm router async fns by @bug-ops in #5262
- refactor(agent-context, knowledge): eliminate two DRY violations by @bug-ops in #5265
- feat(tracing): instrument hot-path async fns in subagent and agent-context by @bug-ops in #5267
- feat(scheduler): add tracing instrumentation to scheduler and store hot paths by @bug-ops in #5266
- feat(tracing): instrument hot-path async fns in zeph-core agent module (#5181, #5182, #5183) by @bug-ops in #5268
- feat(config): migration step 66 — tui.theme active defaults (#5091) by @bug-ops in #5269
- feat(durable): add tracing instrumentation to hot-path async fns by @bug-ops in #5270
- feat(tui): status bar pressure abbreviation and live wave animation (#5101, #5096) by @bug-ops in #5271
- feat(tracing): instrument hot-path async fns in learning, agent-context, and skills by @bug-ops in #5272
- feat(tracing): add missing instrument spans in experiments, gateway, and index by @bug-ops in #5273
- fix(ci): add full bundle check and fix compile errors under --features full by @bug-ops in #5274
- feat(tracing): instrument hot-path async fns in zeph-memory qdrant/embed-registry/graph-retrieval by @bug-ops in #5275
- feat(tui): dashboard restyle and tracing instrumentation (#5093, #5233) by @bug-ops in #5276
- feat(tui): micro-delights — stream metrics, toasts, completion flash, smooth scroll, splash shimmer by @bug-ops in #5278
- fix(memory): replace .entered() guard with .instrument(span) in ingest_documents by @bug-ops in #5280
- feat(tracing): add tracing instrumentation to sanitizer, a2a, and candle crates by @bug-ops in #5282
- fix(memory): fix .entered() span guard across .await and add tracing to trust/cache by @bug-ops in #5281
- refactor(tracing): add instrument spans to memory and skills hot paths by @bug-ops in #5284
- feat(tracing): instrument hot-path async fns in zeph-mcp, zeph-channels, zeph-vault by @bug-ops in #5285
- feat(deep-link): add 30s timeout to lsregister in url-scheme commands by @bug-ops in #5283
- feat(tui): reducer/action decomposition and opt-in mouse mode (#5076, #5103) by @bug-ops in #5294
- refactor(skills): extract embed_skills_with_timeout and add tracing spans by @bug-ops in #5295
- refactor(llm): extract ASI coherence helper and replace cascade expect() with Result by @bug-ops in #5299
- fix(index): add embed_batch timeout and ensure_collection tracing span by @bug-ops in #5300
- fix(tui): remove keys.rs DRY violation and route spawn_blocking through supervisor (#5296, #5297) by @bug-ops in #5319
- fix(config): correct SchedulerConfig doc-comment and add cron/run_at validation by @bug-ops in #5317
- fix(tui,worktree): offload blocking std::fs I/O to spawn_blocking by @bug-ops in #5320
- feat(llm): add profiling tracing spans to private async fns in claude/openai/ollama backends by @bug-ops in #5324
- fix(core,plugins): remove match_same_arms and enforce PluginName at deserialization by @bug-ops in #5326
- refactor(bench): extract write_atomic, add tracing spans to tau2_bench driver and envs by @bug-ops in #5327
- feat(tracing): add instrument spans to zeph-llm, zeph-subagent, zeph-plugins by @bug-ops in #5329
- refactor(tui): migrate 27 TuiCommand variants from execute_command into reducer by @bug-ops in #5330
- fix(channels,tracing): annotate guest proxy spawn + instrument runner startup fns by @bug-ops in #5331
- feat(tracing): add missing instrument spans to scheduler, worktree, and commands by @bug-ops in #5332
- feat(tracing): instrument async fns in zeph-mcp manager/ and zeph-context summarization by @bug-ops in #5333
- fix(llm): remove profiling feature gate from candle tracing spans by @bug-ops in #5335
- test(tui): add regression tests for poll_pending_theme and apply_theme async dispatch by @bug-ops in #5334
- docs(cocoon): add threat IDs, attestation monitoring checklist, and spec gap fixes by @bug-ops in #5340
- feat(hooks): add conditional if filter and agent context to hook payloads by @bug-ops in #5341
- spec(068-session-persistence): session persistence, event log replay, and zeph serve mode by @bug-ops in #5344
- fix(llm): make tracing instrument spans unconditional in zeph-llm backends and router by @bug-ops in #5345
- feat(security): MATRA threat model spec + NetworkScope/AssetSensitivity in orchestration by @bug-ops in #5342
- feat(tui): TUI design polish — status bar redesign and input prompt glyph update by @bug-ops in #5346
- chore(deps): update dependency telethon to >=1.44.0 by @bug-ops in #5353
- chore(deps): update debian:bookworm-slim docker digest to 60eac75 by @bug-ops in #5347
- chore(deps): update ghcr.io/bug-ops/zeph:latest docker digest to aaea3b9 by @bug-ops in #5348
- chore(deps): update github-actions by @bug-ops in #5349
- chore(deps): update ollama/ollama:latest docker digest to c484b70 by @bug-ops in #5350
- chore(deps): update rust:1.96-slim docker digest to c37af73 by @bug-ops in #5351
- chore(deps): update qdrant/qdrant docker tag to v1.18.2 by @bug-ops in #5352
- chore(deps): update grafana/grafana docker tag to v13.1.0 by @bug-ops in #5354
- chore(deps): update rust crate tower-http to 0.7.0 by @bug-ops in #5355
- chore(deps): update rust-minor-patch by @bug-ops in #5356
- chore(deps): update github-actions (major) by @bug-ops in #5357
- chore: bump MSRV to 1.96 and migrate to assert_matches! by @bug-ops in #5360
- chore(deps): refresh cargo lock file by @bug-ops in #5359
- build(db): upgrade sqlx 0.8.6 to 0.9.0 by @bug-ops in #5363
- refactor(acp)!: migrate zeph-acp to agent-client-protocol 1.0.1 by @bug-ops in #5369
- feat(mcp)!: migrate to rmcp 2.0 and render full ContentBlock union by @bug-ops in #5371
- test(mcp): add in-process duplex-transport MCP integration test by @bug-ops in #5372
- feat(acp): add model_config temperature option and cancel_request bridge by @bug-ops in #5375
- fix(db,memory,index): add Postgres runtime coverage for dynamic-SQL paths by @bug-ops in #5376
- test(acp): cover store-backed resume_session reconstruction path by @bug-ops in #5378
- fix(acp): load resolved config in model-config show, inherit session-config on fork/resume by @bug-ops in #5383
- fix(knowledge): create Qdrant documents collection before ingest by @bug-ops in #5385
- test(ci): wire zeph-memory/zeph-index postgres integration tests into CI by @bug-ops in #5386
- fix(a2a): close SSRF DNS-rebinding TOCTOU and redirect bypass, replace boolean-blind with_security by @bug-ops in #5389
- test(memory): add Postgres coverage for acp session_config round-trip by @bug-ops in #5390
- fix(knowledge): bound embed-provider calls with a timeout in ingest path by @bug-ops in #5391
- refactor(memory,index): extract shared probe+ensure_collection helper by @bug-ops in #5392
- refactor(memory): finish probe-then-ensure_collection dedup by @bug-ops in #5400
- fix(orchestration): stop populating verify_predicate when the gate is disabled by @bug-ops in #5405
- fix(orchestration): raise recursion limit to fix release build overflow by @bug-ops in #5407
- fix(worktree): drop stale handle when branch prune fails after remove by @bug-ops in #5411
- fix: prevent stack overflow crash in zeph --daemon startup by @bug-ops in #5406
- fix: expand ~ in file-tool paths, allow durable --reveal without key by @bug-ops in #5413
- fix(knowledge): thread --provider through notes-sink ingest and accept batch-id prefixes in rollback by @bug-ops in #5416
- fix(acp): add recursion_limit to zeph-acp test crate root; add release-build CI gate by @bug-ops in #5417
- fix(plugins): enforce dependency and skill-path validation parity in auto-update by @bug-ops in #5423
- fix(tools): expand leading ~ in diagnostics, cwd, and search-code path arguments by @bug-ops in #5424
- ci: run release-build check only on main pushes by @bug-ops in #5430
- fix(durable): attach AEAD cipher on write paths when encrypt_payload=true by @bug-ops in #5436
- feat(session)!: implement session persistence, event log replay, and zeph serve mode by @bug-ops in #5446
- fix(session): route default CLI continuation through hydrate_and_condense by @bug-ops in #5454
- fix(gateway,sanitizer): classify webhook input as ExternalUntrusted before agent ingestion by @bug-ops in #5459
- fix(llm): load classifier.bias in candle PII NER head by @bug-ops in #5461
- fix(knowledge): stop destructive Qdrant recreate and zero-truncated graph extraction in ingest by @bug-ops in #5462
- fix(session): guard against store-query errors and hydration-retry narrowing in init_session_sink by @bug-ops in #5468
- fix(channels,core): classify channel-adapter input as ExternalUntrusted before agent ingestion by @bug-ops in #5473
- fix(session): pair tool-result events correctly in session replay by @bug-ops in #5476
- fix(core): wire durable agent_turns/subagent and parameter_reformat_provider by @bug-ops in #5477
- refactor(mcp): extract shared rmcp Tool -> McpTool conversion helper by @bug-ops in #5485
- fix(orchestration): correct timestamp corruption and pipeline duplication by @bug-ops in #5483
- fix(context): guard assembler memory fetchers with timeouts, dedupe budget loop by @bug-ops in #5489
- fix(memory): guard Qdrant gRPC calls with timeout, dedupe EmbeddingStore payload logic by @bug-ops in #5499
- fix(memory): route all raw and mis-numbered SQL through sql!() for Postgres by @bug-ops in #5505
- fix(core): wire ShadowSentinel Postgres SQL and cross-session detection by @bug-ops in #5516
- fix(session): serialize SessionEventLog writes and stop silent seq collisions by @bug-ops in #5517
- fix(db): parse SQLite ?N placeholders correctly in sql!() for Postgres by @bug-ops in #5521
- fix(memory): route agent_sessions.rs and unixepoch() sites through dialect-aware SQL for Postgres by @bug-ops in #5528
- fix(llm): resolve candle_pii NER test defect and broken doc link by @bug-ops in #5529
- fix(security): wire PAAC secret masking and SONAR NLI injection detection by @bug-ops in #5532
- fix(memory): route datetime('now') and NUMERIC/TIMESTAMPTZ sites through dialect-aware SQL for Postgres by @bug-ops in #5537
- fix(core): stop cancelled tool_calls from corrupting message history by @bug-ops in #5541
- fix(memory): three independent P2 gaps in zeph-memory (timeouts + metadata restoration) by @bug-ops in #5542
- fix(memory): document RL admission strategy fallback warning (#5543) by @bug-ops in #5554
- fix(durable): namespace durable.db journal per-database to stop ExecutionId collisions by @bug-ops in #5557
- fix(testing): mitigate orphaned postgres testcontainers with no ryuk reaper by @bug-ops in #5558
- fix(core): gate shutdown LLM calls behind --bare and fix ACP model-switch lag by @bug-ops in #5559
- fix(serve): sanitize zeph serve HTTP prompt bodies as ExternalUntrusted by @bug-ops in #5562
- fix(acp): wire provider_names into build_agent_state so providers/list is no longer empty by @bug-ops in #5563
- fix(memory): reactivate three dormant write paths in zeph-memory by @bug-ops in #5568
- fix(db,memory): route compacted_at Postgres writes through to_timestamp by @bug-ops in #5570
- fix(memory): sweep TIMESTAMPTZ->String decode defect across zeph-memory by @bug-ops in #5560
- fix(tools): wire diagnostics tool and bound search_code recursion by @bug-ops in #5574
- fix(sanitizer): harden PII detection across entry points and free-text names by @bug-ops in #5582
- fix(memory): decode remaining Postgres INTEGER columns as i32 not i64 by @bug-ops in #5583
- fix(serve,daemon): wire debug dumper into serve-sessions and daemon paths by @bug-ops in #5585
- fix(memory): graph-extraction cancellation and hot-path write timeouts by @bug-ops in #5587
- fix(tools): wire search_code into daemon and fix symlink walk safety by @bug-ops in #5589
- fix(tools,core): stop live turn stall when Qdrant is unreachable by @bug-ops in #5590
- fix(llm): add gonkagate live smoke test for unreachable gonka URLs by @bug-ops in #5592
- test(memory): pin the SkillVersionTuple Postgres INTEGER decode fix by @bug-ops in #5593
- fix(skills): bound SkillGenerator LLM calls with a timeout by @bug-ops in #5594
- fix(tui): differentiate daemon palette command messages by @bug-ops in #5598
- fix(db): cache postgres sql! macro rewrite per call site instead of leaking on every call by @bug-ops in #5597
- fix(scheduler): construct test_pool via DbConfig::connect for postgres compatibility by @bug-ops in #5599
- fix(core): wire provider_pool into ACP/serve/daemon agent construction by @bug-ops in #5604
- fix(config): sum migrate-config summary counts across all migration passes by @bug-ops in #5605
- fix(db): resolve postgres feature E0308 errors and widen CI coverage by @bug-ops in #5606
- fix: postgres in-memory backend runtime failures and provider fallback masking by @bug-ops in #5607
- fix(tools): require confirmation for unconfigured tools in Supervised mode by @bug-ops in #5609
- fix(core,channels): correct misleading /image path-rejection message by @bug-ops in #5612
- fix(scheduler,orchestration,subagent): gate remaining :memory: test-pool sites behind sqlite-only cfg by @bug-ops in #5613
- fix(ci): widen nextest leak-timeout for zeph-index spawn_blocking tests by @bug-ops in #5616
- fix(memory): surface folded-message count in live /compact command by @bug-ops in #5614
- perf(memory): batch entity-name resolution in graph_recall_beam by @bug-ops in #5618
- fix(tools,acp): enforce quarantine trust gate across full ACP/daemon executor tree by @bug-ops in #5621
- refactor(memory): extract duplicated dedup helpers in skills/recall paths by @bug-ops in #5619
- fix(acp,daemon): wire PolicyGateExecutor and AdversarialPolicyGateExecutor into ACP and daemon by @bug-ops in #5624
- fix(memory): anchor tech-doc extraction on specific artifacts to reduce hub-degree skew (#5467) by @bug-ops in #5626
- fix(serve,acp): surface session-lock degradation via metric and notification by @bug-ops in #5622
- test(tui): add dedicated unit tests for detect_unicode_capable by @bug-ops in #5630
- fix(db): restore sqlite/postgres compile-time mutual exclusivity by @bug-ops in #5633
- fix(core): satisfy non-exhaustive AcpTransport match without acp-http by @bug-ops in #5628
- feat(memory): wire Qdrant gRPC timeout through to configuration by @bug-ops in #5634
- refactor(memory): deduplicate graph/store/mod.rs batch constants and edge/BFS/community logic by @bug-ops in #5635
- fix(memory): close three async/DB hygiene gaps in zeph-memory by @bug-ops in #5637
- feat(serve,acp): run ACP transport in-process with zeph serve-sessions --acp by @bug-ops in #5638
- refactor(memory): dedupe sweep clustering, admission gate, and bg-embed logic by @bug-ops in #5636
- refactor(memory): deduplicate router classification and SemanticMemory constructors by @bug-ops in #5639
- refactor(core): split rebuild_system_prompt and fix agent hot-path blocking I/O by @bug-ops in #5641
- refactor(agent-context): deduplicate graph-strategy dispatch and three minor DRY shapes by @bug-ops in #5642
- refactor(cargo): split default feature arrays and simplify postgres cfg guards by @bug-ops in #5643
- refactor(memory): deduplicate SQLite-datetime, ingest doc building, and LLM-judge/embed fail-open helpers by @bug-ops in #5644
- fix(agent-context): rebuild skill registry off-lock in prepare_context by @bug-ops in #5645
- refactor(core): extract shared provider-pool and debug-dumper wiring helpers by @bug-ops in #5648
- fix(tools): stop utility gate from vetoing direct-action tool calls by @bug-ops in #5658
- fix(agent): repair orphaned tool_calls after process-kill-and-resume by @bug-ops in #5674
- fix(channels): recognize exit/quit commands in JsonCliChannel::try_recv by @bug-ops in #5675
- fix(config): stop condense_provider defaulting to unresolvable "fast" by @bug-ops in #5682
- fix(llm): retry chat_with_tools and classify 429/503 correctly in send_with_retry by @bug-ops in #5695
- fix(core): enforce atomic daemon single-instance guard via flock by @bug-ops in #5697
- fix(core): timeout, provider-match, and tool_call_id fixes by @bug-ops in #5704
- fix(llm): provider robustness — Cocoon retry, supports_tool_use default, embed_batch timeout by @bug-ops in #5703
- fix(llm): add SHA-256 integrity verification to Candle model loaders by @bug-ops in #5705
- fix(llm): add tool-support escalation to TriageRouter::chat_with_tools by @bug-ops in #5706
- fix(llm): fix CandleNerClassifier bias-tensor bug and dedupe Claude retry logic by @bug-ops in #5708
- fix(tools): close utility gate mcp_* stall with opt-in high_gain_tools by @bug-ops in #5711
- refactor(core): dedup digest pipeline, cancellation handling, fix blocking git call by @bug-ops in #5715
- fix(sanitizer,core): scrub PII before spotlight-wrapping tool output by @bug-ops in #5710
- fix(skills): treat missing skill trust-map entry as Trusted, not Quarantined by @bug-ops in #5718
- fix(skills): stamp stable proactive_domain marker to close has_knowledge() idempotency gate by @bug-ops in #5726
- fix(core): offload benchmark file load to spawn_blocking by @bug-ops in #5727
- fix(tools,core): honor mandated-retry contract in utility gate, fix MCP id matching and cancel ordering by @bug-ops in #5730
- fix(tools,skills): name active skill set in quarantine-denial message by @bug-ops in #5737
- fix(sanitizer,llm): gate CandleNerClassifier BIO spans on confidence threshold by @bug-ops in #5735
- fix(core,tools,mcp): identify MCP tools via ToolDef.server_id, not name prefix by @bug-ops in #5738
- fix(core): preserve calls/tool_calls index alignment on tafc strip failure by @bug-ops in #5739
- fix(memory): scope Key Facts recall to conversation_id by @bug-ops in #5741
- fix(tools): make ShadowProbeExecutor short-circuit quarantined tool calls by @bug-ops in #5745
- fix(index): throttle full-repo indexing to stop blocking interactive turns by @bug-ops in #5746
- fix(core,tools,tui): detect MCP tool origin via ToolDef.is_mcp_tool, not name prefix by @bug-ops in #5748
- test(core): add regression coverage for MCP cross-boundary server id resolution by @bug-ops in #5751
- fix(core,tools): refresh TrustGateExecutor MCP tool-id registry after startup by @bug-ops in #5752
- fix(memory): disambiguate conversation_id across databases sharing one Qdrant instance by @bug-ops in #5753
- fix(llm): add explicit supports_tool_use() override to CandleProvider by @bug-ops in #5754
- fix(core): decouple ShadowSentinel probe engagement from keyword risk tiering by @bug-ops in #5756
- fix(core,tui): thread MCP tool origin through ToolStartEvent to TUI classification by @bug-ops in #5757
- refactor(common,memory,mcp,context,llm,core): dedup truncation, similarity, and JSON extraction by @bug-ops in #5758
- refactor(memory,core): dedup graph edge-fold, count-sync, and sanitize logic by @bug-ops in #5759
- refactor(core): dedup call_non_streaming, LayerContext, and spawn_oneshot dispatch by @bug-ops in #5760
- fix(core): unify cocoon client gating and dedup correction-signal logging by @bug-ops in #5761
- refactor(commands,core,skills): dedup command-output silence, skill version-activation, and prompt-template branches by @bug-ops in #5762
- refactor(core): dedup conversation reset, graph lookup, and sentinel persist logic by @bug-ops in #5763
- refactor(experiments): remove dead code and dedup generator constants by @bug-ops in #5767
- refactor(core,common,context,agent-context,mcp,memory,index): dedup spawn_oneshot, ChatJsonError conversion, and context-budget resolution by @bug-ops in #5768
- fix(llm): thread Cocoon STT status_tx and demote timed-out router providers by @bug-ops in #5772
- test(core): close coverage gaps in graph queries, conversation reset, and shadow sentinel by @bug-ops in #5769
- fix(core): dedup test-shim invariant drift and remove dead adapter code by @bug-ops in #5771
- fix(llm): send flat reasoning_effort field to OpenAI Chat Completions by @bug-ops in #5776
- refactor(core): dedup trust rollout, hover line-parsing, and graph-timeout helper by @bug-ops in #5777
- fix(core,agent-context): set compaction_last_at_ms on all compaction paths by @bug-ops in #5778
- fix(core): break unbreakable utility-gate Retrieve/memory_search retry loop by @bug-ops in #5787
- fix(tui): route slash-command autocomplete and typed submission through Action::Dispatch by @bug-ops in #5788
- fix(tui): humanize status bar busy label and use breeze spinner by @bug-ops in #5791
- fix(llm): surface actionable error for reasoning_effort + tools on Chat Completions by @bug-ops in #5795
- fix(memory): HELA timeout budgets and turn_index provenance gaps by @bug-ops in #5794
- fix(skills): make symlinked SKILL.md discoverable and traversal warning reachable by @bug-ops in #5792
- fix(tui): treat space/colon/hyphen as equivalent in command fuzzy matcher by @bug-ops in #5797
- fix(db): restore cfg guards dropped by #5633, fixing --all-features doc build by @bug-ops in #5798
- refactor(common,core,scheduler): consolidate flock pid-file guard into zeph-common by @bug-ops in #5799
- refactor(channels): extract shared ConfirmLoop trait for confirm() dedup by @bug-ops in #5800
- fix(skills): implement Qdrant vector retrieval for RL rerank by @bug-ops in #5804
- fix(memory): dedup snapshot timestamp helper, add missing test coverage by @bug-ops in #5802
- refactor(durable): deduplicate notify-or-poll wait loop by @bug-ops in #5807
- ci: fix change-detection gaps and dedup integration test runs by @bug-ops in #5806
- fix(orchestration,mcp): qualify ON CONFLICT self-references for Postgres by @bug-ops in #5808
- fix(llm): router falls back on model capability mismatches, add CandleProvider vision override by @bug-ops in #5810
- fix(skills): normalize in-memory skill embeddings to unit length by @bug-ops in #5812
- fix(skills): scope unused-lint allow to qdrant-off build in refresh_skill_embeddings by @bug-ops in #5814
- fix(memory): use locally-authoritative entity id for graph edge FK targets by @bug-ops in #5815
- fix(core): apply semantic_scan config at initial agent construction by @bug-ops in #5817
- fix(llm): preserve last provider error in embed/embed_batch fallback loops by @bug-ops in #5820
- fix(acp,server,skills): wire config.skills.* into ACP/serve agent construction by @bug-ops in #5823
- test(memory): close low-severity test-coverage gaps from #5815 FK-violation fix by @bug-ops in #5822
- refactor(memory): consolidate SqliteStore naming, remove WriteBuffer dead code by @bug-ops in #5824
- fix(llm): preserve last provider error in chat/chat_stream fallback loops by @bug-ops in #5825
- fix(subagent): route WorktreeCleanupGuard cleanup through TaskSupervisor by @bug-ops in #5828
- fix(llm): preserve last provider error in cascade_chat fallback exhaustion by @bug-ops in #5829
- test(core): add build_agent test seam for startup wiring regressions by @bug-ops in #5831
- fix(acp,server,skills): wire with_semantic_scan into ACP/serve agent construction by @bug-ops in #5830
- fix(skills,core): dedupe SKILL.md frontmatter-patching logic, fix missing newline by @bug-ops in #5832
- refactor(a2a): deduplicate processor-drain and artifact-finalization logic by @bug-ops in #5833
- ci: harden release-build gating and bump nextest leak-timeout by @bug-ops in #5835
- test(core): add build_daemon_agent test seam for daemon startup wiring by @bug-ops in #5836
- fix(orchestration): forward zeph-memory sqlite/postgres features explicitly by @bug-ops in #5837
- fix(orchestration): gate llm-planning test sites and cover postgres feature in CI by @bug-ops in #5842
- docs(sanitizer): fix shadow_memory wiring doc comment and spec-040 layer table by @bug-ops in #5843
- perf(session): bound replay memory via chunked event-log read by @bug-ops in #5844
- feat(core): log RL re-rank success path for cross-backend parity verification by @bug-ops in #5847
- test(session): cover chunked-replay torn-tail and up_to boundary paths by @bug-ops in #5848
- test(core): add real-Agent NFR-P7 idle-session memory bench by @bug-ops in #5849
- fix(skills): close RL rerank warmup TOCTOU and add test coverage by @bug-ops in #5850
- release: v0.22.0 by @bug-ops in #5853
Full Changelog: v0.21.4...v0.22.0