Skip to content

Latest commit

 

History

History
1743 lines (1200 loc) · 90.7 KB

File metadata and controls

1743 lines (1200 loc) · 90.7 KB

CHANGELOG

v1.16.0 (2026-10-02)

Chores

  • Sync uv.lock with the 1.15.0 release version (1e03643)

Documentation

  • examples: RAG context example and full row structure in prompt optimization scripts (1106723)

  • optimization: Dataset row format, what each stage sees, RAG datasets (3c66a75)

Features

  • optimize: Pass every example's full context to the optimizer, judges and augmenter (81f6227)

  • templates: RAG agents answer from supplied documents; seed rows use every field (ba50527)

v1.15.0 (2026-09-30)

Bug Fixes

  • deps: Upgrade locked anyio, PyJWT, urllib3 and virtualenv past advisories (20eb8ae)

  • optimize: Accept every metric protocol everywhere; hold the test split out of selection (868755f)

  • optimize: Data augmentation actually adds usable, leak-free rows (7a46ae7)

  • optimize: Judge scores and metric aggregation mean what they say (950baa3)

  • studio: Chat, debug, tasks, pipelines and feedback work with template agents (8b45d7d)

  • studio,tasks: Make template agents chat, thread and run as tasks out of the box (8cc6ac0)

Chores

  • Ignore ModelCheckpoint's default output directory (921a97d)

  • Sync uv.lock with the 1.14.0 project version (9b88a71)

  • studio: Rebuild the Studio UI 0.4.1 bundle with patched dependencies (1428e2d)

  • studio: Ship the Studio UI 0.4.1 build from source (b5b60d1)

Continuous Integration

  • Keep pre-commit fixers off the synced Studio bundle (54ce4a0)

  • sync-studio: Do not fail the sync when PR labels are missing (69e1636)

Documentation

  • Adding prompt optimization low level example (e94084a)

  • Adding report generation (9c45d4e)

  • Cleaning tmp files (f82af42)

  • Improving examples (93863d3)

  • optimization: A dedicated section covering the whole mechanism (dcc74af)

Features

  • examples: Working prompt-optimization examples, low to high level (7d04c78)

  • optimize: An anti-overfitting mechanism for prompt optimization (a39b603)

  • optimize: Fit reports show what changed and whether it helped (735f9c5)

v1.14.0 (2026-09-16)

Bug Fixes

  • a2a: Render one agent card for discovery and the per-agent endpoint (7fc8d66)

  • cli: Scaffold into the real project instead of the current directory (302e754)

  • security: Scope retained stream replay to its agent and principal (de013da)

  • security: Scope the per-agent A2A task routes to their owning agent (ba50f55)

  • storage: Support Azure SQL and portable database drivers (e265adb)

  • streaming: Bound replay memory, key Studio resumes safely, size config (cb264d8)

Build System

  • lint: Run ruff from the project's lockfile instead of a pinned hook (6739f07)

Code Style

  • tests: Format an assert stably across both pinned ruff versions (02b1ef9)

Features

  • status: Report replay buffer occupancy on the status dashboard (c4a8054)

  • streaming: Number and retain frames on every SSE surface (75af79c)

  • tasks: Make task progress streams resumable after a dropped connection (cc1f746)

Testing

  • streaming: Assert Studio's frames stay numbered and retained (d576e6e)

v1.13.0 (2026-09-07)

Code Style

  • Write long asserts so both pinned ruff versions agree (3102795)

Continuous Integration

  • Install extras in the PR Quality Gate so its test step can collect (dc3c5e1)

Features

  • cli: Verify the local model name in agentomatic doctor (5cd7a30)

  • templates: Scaffold local-first agents that run and train out of the box (3684bdf)

v1.12.0 (2026-09-04)

Bug Fixes

  • Preserve pipeline plugin invocation compatibility (a865238)

  • Restore secure release checks (21d3d64)

Documentation

  • Align guides with current platform contracts (e1d40b1)

  • Align production guides with current platform (feb9e70)

  • Complete code-aligned documentation audit (f8ea416)

  • Complete frontend request contracts (cce1194)

  • Correct deep agent hitl setup (ffc3b84)

Features

  • Auto-reload plugins after artifact promotion (e144116)

  • Harden providers, plugin reload, and release pipeline (7668595)

  • providers: Pluggable LLM provider registry, generic OAuth2 token provider, retry/backoff util (57d33ac)

Testing

  • Cover every frontend request documentation model (bd57877)

v1.11.0 (2026-08-26)

Features

  • Production-ready platform and embedded Studio: hardened auth and error boundaries, deployable containers, durable storage and task paths, verified pipeline composition, a self-contained schema-driven Studio bundle, and a comprehensive deployment verifier covering all published resource families.

  • Studio schema discovery: agent input/output schemas now resolve for all supported naming conventions ({Title}Request/{Title}Response, {Title}Input/{Title}Output, CustomInvoke*, AgentInput/AgentOutput, etc.) in both the registry SchemaValidator and the Studio GET /studio/agents/{name}/schemas endpoint. The schemas response now includes schema_source metadata (custom vs default, Pydantic model name, convention) so the UI can badge which contract a run executes against.

Bug Fixes

  • Fixed release-blocking deployment, distroless startup, provider wiring, pipeline, task, storage, rate-limit, Studio, and API error-handling defects; expanded regression coverage across authenticated and store-backed postures.

  • Studio no longer falls back to the generic AgentInvokeRequest for agents that declare {Title}Input/{Title}Output models (e.g. alpha/beta), so the debug UI now renders the real per-agent input fields.

v1.10.0 (2026-07-23)

Features

  • Migrate generic ai_core batteries into Agentomatic (15ce8ef)

Add ArtifactRegistry, task-progress ContextVar bridge, JSON repair, local_npz + TextEncoder, ingestion text helpers, op-audit sink, and language helpers so projects no longer need a parallel domain library for plugin persistence and common RAG/ops plumbing. Keep estimation and Cosmos out of core (reference under examples/scooper-ai-core).

Co-authored-by: Cursor cursoragent@cursor.com

v1.9.0 (2026-07-23)

Bug Fixes

  • 5 optimizer bugs causing zero improvement signal (v1.8.3) (c822e54)

BUG-1 fitter_optimizers: RewriteOptimizer used task_model instead of rewrite_model for prompt rewriting.

BUG-2 fitter: minibatch_size was not clamped to len(val_points), producing misleading '500%' log and no additional signal.

BUG-3 fitter: _EARLY_STOP_PATIENCE=3 > max_rounds=2 for typical budgets; early stopping never fired. Replaced with effective_patience = min(patience, max_rounds) so the loop exits after the first fruitless round.

BUG-4 agents/types: AgentExample.to_datapoint() skipped 'current_query' (the standard agentomatic input field), falling back to json.dumps(input) as the optimizer query — degrading judge evaluation and briefing quality.

BUG-5 agents/optimizers: PromptFitterBridge hid 'optimizer' in **kwargs with no explicit default. Promoted to named parameter (default='rewrite') and seeded into kwargs before overrides so it is always present.

Also adds BUGS.md documenting root-cause analysis + how to install from source.

  • Epoch compounding + judge context + to_datapoint correctness (v1.8.4) (c8fc46a)

to_datapoint(): - Prefer input['question'] over input['query'] (actual question vs meta-label) - Extract input['context'] dict → DataPoint.context list so judge can evaluate groundedness against the project snapshot - Convert boolean-flag expected_output {k: True} → human-readable description 'Response must include: k' so judge can compare quality - Fix invoke payload to exclude question/current_query/query (already in query field)

PromptFitter: - Add baseline_system_prompt param: when set, _load_baseline_config uses it instead of prompts.json so successive fit() epochs compound improvement

PromptFitterBridge._build_fitter: - Pass agent.compiled_config['system_prompt'] as baseline_system_prompt so epoch N+1 starts from epoch N's best prompt, not the original file

train_next.py: - Use stack judge profile (temp=0.0, no thinking) for deterministic scoring - EPOCHS=5, MAX_TRIALS=12, PATIENCE=3 for meaningful multi-epoch curve - min_absolute_improvement=0.01 (was 0.02) — accept 1%+ consistent gains - APPLY=True — persist improvements to prompts.json - Rich loss-curve table (epoch / loss / val_loss / judge / val_judge / f1) - Clear model-role console banner at startup

Version: 1.8.3 → 1.8.4

  • Judge_expected priority in to_datapoint + structural keys for expected_output (v1.8.5) (d4df6a6)

to_datapoint(): - Read metadata['judge_expected'] first as judge reference answer (human-written quality description beats auto-converted boolean flags) - Fall through to existing boolean-flag → text conversion when no judge_expected

dataset all.jsonl (SCOOPER_NEW): - Add judge_expected to all examples for quality reference - as_next_steps val: update expected_output to {content: true, next_action: true} - Add 2 new validation examples (as_val_budget, as_val_status) → 3 val examples total (was 1), reduces binary score oscillation

Version: 1.8.4 → 1.8.5

  • ci: Clear lint, mypy, and failing release-gate tests (228785d)

Format drifted sources, tighten store/failover/report typing for mypy, and align dataset/metric/failover tests with current intentional APIs.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Nest HolySheet train/eval report sections (3c19fac)

Empty section cards came from flat report.add(Section) + sibling blocks; HolySheet only renders nested children. Rebuild fit/eval dashboards with Tabs/Accordion, full prompts, run config, deployment recommendations, held-out scores, and judge rationales via OptimizeMetricAdapter.last_result.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Restore HolySheet fit reports and real training curves (5e76553)

KPI status='warning' crashed HolySheet export into a 258-line stub; acceptance threshold 0.01 rejected real LLM-judge gains. Lower default to 0.001, wire fitter patience from TrainConfig, and add chronological prompt evolution diffs.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Restore real fit learning signal and report curves (d3f2247)

Keep structured expected_output alongside judge_expected so metrics, gold few-shot, and tip candidates receive machine-readable targets. Always record score/prompt history (including no-improve rounds), bake few-shot into prompt overrides, diversify rewrite proposals, and surface score/prompt/trial sections in the HTML fit report.

Chores

  • Bump version 1.8.4 (1c4ece8)

  • studio: Sync static UI bundle for schema-driven forms (b0ac2b6)

Refresh packaged Studio assets to match SchemaForm/ChatView updates and capture remaining fit/logs follow-ups in TODO.

Co-authored-by: Cursor cursoragent@cursor.com

Documentation

  • Adding todo form fitting observations (69390e3)

  • Mark fit/learning/train-UX TODO items done (8a597f2)

Reflect shipped PromptFitter learnings, generalization, train_and_report, and HolySheet reports; leave studio schema forms and log-analysis open.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Document train/eval APIs and sync CLI templates (83a8f48)

Align MkDocs, changelog, primer, and scaffold train.py/eval.py with train_and_report / evaluate_and_report, print helpers, augment knobs, HolySheet reports, and logs/DB persistence.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Document train_and_report, HolySheet, and augment knobs (39c12ba)

Co-authored-by: Cursor cursoragent@cursor.com

Features

  • logs: Durable multi-backend logs history and train print helpers (1d4720b)

Persist invocation logs and retrain artefacts via SQLAlchemyStore for any configured DB URL (Postgres/SQLite/…); stop MemoryStore from preempting auto-derive. Add print_train_result / TrainResult.print_summary and TrainConfig.persist_fit_store for auditable offline fits.

Co-authored-by: Cursor cursoragent@cursor.com

  • logs: Extend logs_history to plugins, pipelines, ingestion, endpoints (d5dc4f7)

Persist full I/O across resource types with cross-resource REST (/api/v1/logs) while keeping per-agent routes; also record in-process pipeline steps. Bump to 1.8.9.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Add evaluate_and_report API with HolySheet eval reports (d1ab06c)

Package stack/metrics/judge/split selection into EvalConfig so project eval.py scripts stay thin like train_and_report. Fix OptimizeMetricAdapter to prefer question + snapshot context for judges.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Add train_and_report API with HolySheet fit dashboards (62459f4)

Package Keras-style fit plumbing into TrainConfig/run_train so agent train scripts stay thin. Add non-saturating structured fit metrics, HolySheet interactive fit reports (score curves, epoch tables, prompt history, trials), and scaffold train.py to match. Cover all fitter optimizers plus judge wiring in a matrix test.

  • optimize: Add TrainCliSettings/EvalCliSettings for flat train/eval scripts (b5451d7)

Replace argparse walls with pydantic-settings (AGENTOMATIC_* env + kebab CLI), print_eval_result, and scaffold/docs updates. Bump to 1.8.10.

Co-authored-by: Cursor cursoragent@cursor.com

  • optimize: Expose staged Keras-like compile/fit/evaluate API (e83c667)

Add compile_agent/fit_agent/evaluate_agent on shared primitives with train_and_report as the thin one-shot path; document and test both tiers.

Co-authored-by: Cursor cursoragent@cursor.com

Refactoring

v1.8.2 (2026-07-22)

Bug Fixes

  • platform: Harden health probes and unblock Studio control plane (425ca6d)

Add timeouts around aggregate and control-plane health checks, alias /ready, skip Studio/probe paths in maintenance middleware, and enable control plane by default in generated projects so Studio Control tabs work out of the box.

  • platform: Mount agent slug aliases and timeout Studio graph loads (54a9439)

Expose /api/v1/{slug} alongside folder-name routes so Studio threads/chat work, run graph_fn off the event loop with timeouts, and harden vector provider lookup against typos and dual imports.

Chores

  • studio: Bundle Studio UI with Connect and API alignment fixes (d154f46)

Rebuild PUBLIC_URL=/studio/ui assets so SCOOPER serves the non-blocking Connect flow and hardened control/pipeline/plugin client parsers.

  • studio: Bundle Studio UI with connection and API alignment fixes (b75b8be)

Sync the freshly built agentomatic-studio assets into studio/static so platforms serving /studio/ui pick up same-origin defaults and envelope fixes.

v1.8.1 (2026-07-21)

Bug Fixes

  • llm: Trigger 1.8.1 after conventional-commit subject pollution (e66547b)

Prior fix commits included ANSI color codes in subjects (bat aliased as cat), so semantic-release skipped the patch. Clean subject to publish timeout and duplicate-fallback fixes already on main.

Co-authored-by: Cursor cursoragent@cursor.com

v1.8.0 (2026-07-21)

Features

  • providers: Add configurable ordered LLM model fallbacks (2f8cc49)

Retry the next configured model on timeout, connection errors, rate limits, or empty responses via stack YAML / get_llm, without changing single-model stacks that omit fallbacks.

  • providers: Add configurable ordered LLM model fallbacks (8df1ab8)

Retry the next configured model on timeout, connection errors, rate limits, or empty responses via stack YAML / get_llm, without changing single-model stacks that omit fallbacks.

v1.7.0 (2026-07-21)

Bug Fixes

  • security: Skip JWT audience check when audience is empty (1952df2)

Keycloak often issues aud=account unless a mapper is configured; empty JWTConfig.audience must not enable verify_aud.

  • security: Skip OPTIONS in JWT and API-key auth (a68aaf3)

CORS preflight has no Authorization header; blocking it with 401 broke browser calls from the Vite SPA to JWT-protected ai_platform APIs.

Code Style

  • security: Apply ruff format for CI (b951fbc)

Features

  • security: Add OIDC claim normalization and optional DPoP (03dedf5)

Align JWT middleware with Keycloak/AXA-style tokens (realm_access, scope, resource_access) and validate DPoP proofs when required or when tokens are cnf.jkt-bound, so platforms can enforce full OIDC resource-server semantics.

v1.6.0 (2026-07-20)

Bug Fixes

  • Clear mypy errors and ruff format drift (c1455fc)

Narrow class-agent streaming to a typed BaseGraphAgent binding so mypy passes, and reformat drifted optimize/test files for CI format-check.

  • optimize: Make prompt fit/train mechanics work with oMLX (eb1c585)

Ensure fitted prompts and overrides actually apply, keep LLM-as-judge failures honest, add oMLX-friendly caller routing, and cover the pipeline with extensive unit plus live oMLX tests.

Features

  • optimize: Add gemini/ provider and live Gemini fit tests (c68dc3b)

Route gemini/* through the Generative Language API, keep cloud models out of SLM multipass heuristics, and cover rewrite/GEPA/judge with a live suite gated on GEMINI_API_KEY.

  • optimize: Harden openai/ cloud routing for reliable fit/rewrite (fdc0e7d)

Keep gpt-*/o1/o3 models on api.openai.com even when OPENAI_BASE_URL points at a local server, require a real API key for cloud calls, handle max_completion_tokens for reasoning models, and add unit plus live suites.

  • optimize: Multi-pass rewrite with full briefing for SLMs and LLMs (b8402c8)

Give rewrite/GEPA/MIPRO the full fit context (prompt, params, dataset, eval I/O, metrics, history) and auto-run draft→revise for frontier LLMs plus draft→critique→revise for SLMs, with docs and tests.

Testing

  • Adding tests (dce9abb)

  • endpoints: 93 comprehensive API endpoint tests (a960b18)

tests/test_agent_endpoints.py — covers every auto-generated route:

POST /invoke sync invocation (fn agent + class agent) POST /invoke/stream SSE streaming: [DONE] sentinel, error frame, content-type header, X-Agent header, data frames POST /chat session-aware chat with/without store, thread_id, user-supplied messages, persist flag GET /health per-agent health check GET /config agent configuration GET /prompts prompt versions GET /card A2A agent card with capabilities + endpoint URLs POST /a2a/tasks A2A submission (sync fallback + cancel) GET /a2a/tasks/{id} task status / 404 on unknown POST /threads create thread GET /threads list (with/without store, user filter) GET /threads/{id} get thread / 404 PATCH /threads/{id} update title DELETE /threads/{id} delete thread GET /threads/{id}/messages get messages (empty after create) DELETE /threads/{id}/messages clear messages GET /threads/{id}/summary summary POST /optimize/invoke full-context invocation (retrieval_context, steps) POST /feedback submit (thumbs up, rating, correction) GET /feedback list GET /feedback/export export

Platform-level: GET / root 200 GET /docs Swagger 200 GET /openapi.json schema with paths GET /health aggregated health GET /readiness (200 or 404 if not mounted) GET /api/v1/agents listing (handles dict-of-dicts response shape) GET /.well-known/agent.json A2A discovery

Error contract: 404 on missing agent with detail 500 on agent failure 422 on bad JSON body

Programmatic registration: Two isolated agents don't cross-talk Custom api_prefix routed correctly

Response shape contract: All canonical fields present (response, agent_type, duration_ms, metadata, suggestions, citations, steps_taken) All list fields are lists, metadata is dict

Lifecycle hooks: register_before_node_hook / register_after_node_hook called on /invoke

Studio: /studio/agents/{name}/runs/stream returns 200 + [DONE] class agent: no run_error; fn agent: run_error expected (no graph_fn) /studio/agents/{name}/graph returns 200 or 404

Full thread lifecycle: chat(persist=True) → get messages → clear → delete

  • optimize: 54 regression tests for all 6 confirmed bugs (1f91ffa)

Also fixes two source bugs uncovered by the new tests:

BUG-5 fix: OptimizeMetricAdapter.score() — wrap coro-creation inside the try block so sync-raising evaluate() is caught and returns 0.5 neutral (instead of propagating the exception to the caller).

BUG-3 fix: PromptFitResult.to_dict() — include score_history in the serialized dict so it round-trips through JSON artefacts.

New test file: tests/test_optimization_bugs.py TestBug1AgentRunnerLocalCallable (7 tests) - async callable dispatched correctly - sync callable runs via asyncio.to_thread (verified with threading)

  • dict response extracted via _response_text - errors captured, no crash - prompt_override / context forwarded - without callable falls through to HTTP path

TestBug2LLMCallerBaseUrl (5 tests) - configure() stores / resets class-level attrs - LLMCaller.call() forwards base_url/api_key to _call_openai - per-call args override class-level defaults - non-openai provider unaffected

TestBug3PromptFitResultHistory (8 tests) - .history returns score_history list - derives from full_val trials when score_history empty - fallback to all trial scores - empty list when no data

  • stable across repeated calls - score_history in to_dict() - generate_fit_report does not crash - fitter.fit() populates score_history on result

TestBug4CompositeMetricScore (9 tests) - has .score() method - returns float in [0,1] - custom always-1.0/0.0 sub-metrics - dict expected_output JSON-serialised and forwarded - sub-metric failure → 0.0 contribution, no exception - weighted average computed correctly - usable in agents.WeightedMetric (validates .score() on init) - usable in MetricLoss

TestBug5OptimizeMetricAdapter (13 tests) - returns float not coroutine - correctly awaits async metric - query extracted from input["query"] and ["current_query"] - prediction dict JSON-serialised as response string - expected_output dict JSON-serialised - expected_output None passed as None - neutral 0.5 on async exception (judge unavailable) - neutral 0.5 on sync exception (evaluate() raises before await) - usable in agents.WeightedMetric - usable in MetricLoss - name inherited from metric / overrideable - score value propagated correctly for all values in [0,1]

TestBug6PromptFitterBridgeLocalAgent (5 tests) - local_agent= param forwarded to PromptFitter - live agent used as fallback when local_agent=None - explicit local_agent wins over live agent - llm_base_url/api_key set on LLMCaller class defaults - injected fitter= returned as-is

TestEndToEndLocalTraining (3 tests) - full PromptFitter.fit() with local callable: history, score_history, best_score, summary() all accessible - OptimizeMetricAdapter → WeightedMetric → MetricLoss end-to-end - CompositeMetric → MetricLoss with multiple sub-metrics

v1.5.1 (2026-07-17)

Bug Fixes

  • lint+types+docs: Ruff clean, mypy clean, docs improved (94e7b05)

lint: remove unused json import from runner.py (F401/F811) sort imports in test_fitter.py (I001) ruff format runner.py (1 file reformatted)

types: fix mypy error in AgentRunner._run_local — cast sync callable before passing to asyncio.to_thread to narrow away Awaitable branch

docs(index): fix :octicons-zap-24: inside raw HTML h3 (renders as literal text — replace with ⚡ emoji which works in all contexts) update test badge 1049 → 1185 passing update Prompt Optimization card: '7 strategies' → '5 optimizer strategies', add local-training mention

docs(optimization): add comprehensive 'Local-mode Training' guide section - full annotated compile→fit→evaluate example - architecture diagram (no HTTP server) - metric roles table (WeightedMetric vs OptimizeMetricAdapter vs CustomMetric vs MetricLoss) - tip callout explaining metric role separation - warning callout: do NOT use optimize.CompositeMetric as MetricLoss - result.history documented with list[float] example

  • optimize: Local-mode training — 6 confirmed bugs fixed (22b1b35)

BUG-1: AgentRunner.agent_callable — local callable bypasses HTTP - Add agent_callable param to AgentRunner.init - Add _run_local() dispatching async/sync callables via asyncio.to_thread - run_single() short-circuits to _run_local when callable is set

BUG-2: LLMCaller._call_openai ignores base_url/api_key - _call_openai now accepts base_url/api_key, forwards to AsyncOpenAI - LLMCaller.call() and call_with_json() thread base_url/api_key through - New LLMCaller.configure(base_url, api_key) classmethod for global defaults

BUG-3: PromptFitResult missing .history attribute

  • Add score_history: list[float] field to PromptFitResult - Add .history property (returns score_history with fallback from trials) - fitter.fit() populates score_history on the result - Switch auto-report from generate_html_report to generate_fit_report

BUG-4: optimize.CompositeMetric has no .score() for training loops - Add .score(example, prediction) to CompositeMetric - Sync bridge: extract query/response/expected, run evaluate() via asyncio.run

  • Thread-pool fallback for nested event loops

BUG-5: OptimizeMetricAdapter.score() wrong arg types + unawaited async - Rewrite score() to extract query from example.input, serialize prediction - Properly await async evaluate() via asyncio.run + thread-pool fallback - Return neutral 0.5 when judge is unavailable (not 0.0)

BUG-6: PromptFitterBridge._build_fitter never passes live agent - Add local_agent, llm_base_url, llm_api_key to PromptFitterBridge.init - _build_fitter passes local_agent=agent (live instance) to PromptFitter - PromptFitter.local_agent wires _wrap_local_agent into AgentRunner - _wrap_local_agent: adapts transform()/atransform() to runner callable sig, injects prompt_override via attribute + metadata.system_prompt_override, restores original prompt even on error

feat(cli): update train.py template to local-mode pattern - Stack-driven (stacks/local.yaml), no HTTP server, no env-var hacks - LocalJudgeMetric + OptimizeMetricAdapter + agents.WeightedMetric + MetricLoss - PromptFitterBridge with llm_base_url forwarded from stack entry

feat(tests): 19 new tests for local-mode (AgentRunner, _wrap_local_agent, PromptFitter, LLMCaller.configure, PromptFitterBridge)

docs: local-mode examples in optimization.md and class-agents.md

v1.5.0 (2026-07-16)

Bug Fixes

  • deploy: Use absolute compose paths for out-of-tree --out (3108c0d)

When deploy artefacts are written outside the project, relative dockerfile paths escaped the Docker build context and broke compose builds. Fall back to absolute context/dockerfile/volume paths instead.

  • invoke: Expose structured agent output on AgentInvokeResponse (2810397)

Class-agent state_to_output dicts were stringified into response via str(result), breaking frontend parsers. Add an output field and coerce payloads so sync/chat/A2A paths return JSON-friendly structured data.

  • pipelines: Discover flat YAML when scanning pipelines/ itself (64252b7)

AgentPlatform.build passes the pipelines/ directory into discover_pipelines, which previously only loaded pipelines/pipelines/*.yaml or pipeline.yaml.

  • platform: Restore OpenAPI schema and class-agent async invoke path (8a33296)

Move StudioResumeRequest to module scope so /openapi.json stays complete; route async tasks through invoke_registered_agent; prefer main:app on run; flatten invoke context for input_to_state; document correct /api/v1 paths.

Continuous Integration

  • Fix lint, typing, and commit message display (5cb0dcd)

Reformat files that failed ruff format check; narrow OptimizeInvokeResponse field types for mypy. Add a commit-msg hook that strips ANSI/bat line numbers when cat is aliased to bat, and document using /bin/cat in HEREDOCs.

Documentation

  • Add Agentomatic agent primer skill (fd0ffd7)

Ship the generated Cursor skill so agents working in this repo have install/dev/deploy guidance for the Agentomatic platform.

Features

  • plugins: Add reload API and full invoke context passthrough (cd43ba6)

Expose POST /api/v1/plugins[/name]/reload so platforms can refresh in-memory weights after artifact promotion, and preserve the entire client payload (rich context + top-level extras) through to input_to_state.

  • providers: Support thinking/reasoning on modern OpenAI-compatible LLMs (5612c85)

Normalize Qwen/Gemma-style thinking tags and reasoning fields so agents get answer-only content by default, while stack extra: knobs (enable_thinking, chat_template_kwargs, response_format) pass through to oMLX without breaking other providers.

  • stack: Make stacks drive fit/eval and async graph invoke (7500360)

Load .env by default from stacks, resolve agent llm_config roles, forward metadata.invoke in AgentRunner, prefer data-level splits in PromptFitterBridge, and await async nodes in sync invoke so compile/fit/evaluate work with class agents.

v1.4.0 (2026-07-16)

Features

  • connections: Support arbitrary custom DB/vector clients + docs (3a79444)

Make the connection abstraction robustly accept ANY custom Python client (async or sync SDK, graph/time-series DB, in-house package) with correct lifecycle, and document the setup end-to-end.

Gaps closed: - VectorConnection.close() now also handles clients exposing only disconnect (was aclose/close only); uses inspect.isawaitable and a callable check so any client — async, sync, or none — is closed gracefully - add public async helper initialize_connections(scope, configs) that registers AND initialises connections in one call, for standalone runs (bare get_graph(), scripts, langgraph dev) that have no platform lifecycle - export initialize_connections / register_connections / register_vector_store_adapter from the top-level agentomatic package and connections package

Confirmed already-working (kept, with tests): arbitrary registered provider names resolve via VectorConnectionConfig(provider="") with a clear error when unregistered; generic duck-typed adapter and preferred custom adapter; custom non-vector backends via CustomConnectionConfig(factory=...) and register_connection_type are lifecycle-managed and closed on shutdown.

Tests (tests/test_custom_client_integration.py, +7): custom async vector client full round-trip through a scope (initialize/as_store/upsert/query/delete + close on shutdown); sync-only SDK via asyncio.to_thread; non-vector factory backend + env interpolation; register_connection_type arbitrary backend; unknown-provider error; disconnect-only close path.

Docs: new guide docs/guide/custom-connections.md (3-layer model; async, sync, and factory examples; ${ENV}; scoping; lifecycle; standalone helper; testing) wired into mkdocs nav; cross-link from connections.md; primer (cli/agent_guide.py) gets a custom-connections section; regenerated repo CLAUDE.md; extended .agents/AGENTS.md; 1.3.0 changelog bullets in docs/changelog.md + CHANGELOG.md.

Part of the unreleased 1.3.0 (no version bump). Provider-agnostic: no first-party vendor connectors added.

v1.3.0 (2026-07-15)

Bug Fixes

  • deploy: Make scaffolded main.py app fully-featured for uvicorn parity with agentomatic run (77b640a)

  • main.py now builds an env-driven, fully-featured module-level app so a deployed container (uvicorn main:app) serves the same surface as agentomatic run: discovers all component dirs and enables Studio, docs, health, and metrics by default - feature flags read from AGENTOMATIC_* env vars (ENABLE_STUDIO, ENABLE_METRICS, ENABLE_AUTH, ENABLE_JWT, REQUIRE_AUTH -> implies JWT + zero-trust, ENABLE_CONTROL_PLANE, ENABLE_RATE_LIMIT, TITLE, LOG_LEVEL) so the same file works in dev and in the container without code edits - .env.example documents the deploy feature flags - deployment guide + 1.2.1 changelog (docs/changelog.md + CHANGELOG.md) note the uvicorn main:app parity - new parity tests: build the scaffolded app and assert run-equivalent routes (/health, /readiness, /docs, /openapi.json, /, /studio); env flags drive features (studio toggle + title) ruff/format/mypy/pytest(1187)/mkdocs --strict/uv build all green.

  • platform: Wire class agents through input_to_state on REST + Studio; harden deploy, auth, and run --reload for 1.2.1 (6977de7)

  • Class agents work on every server path (REST invoke/chat/invoke/stream/ optimize/A2A/approve + Studio streaming): route through invoke_registered_agent / input_to_state instead of graph.ainvoke(dict), so dataclass-state agents no longer 500 - agentomatic deploy builds in real projects: Dockerfile installs agentomatic[all]==1.2.1 from PyPI, copies project dirs, runs uvicorn main:app; init --project emits a pinned requirements.txt - agentomatic run --reload / workers>1 uses a factory import string instead of exiting with code 1 (programmatic platforms degrade gracefully) - --require-auth-globally refuses to start without JWKS/API-key auth instead of accepting forged/unsigned JWTs; expiry is always verified - AGENTOMATIC_AGENTS env var scopes agent discovery (deploy stubs isolate a single agent per replica) - honest plugin eval (real metric or clear failure); provider-agnostic deepagent model; endpoint health_check; optimize status observable via agent._last_optimize_status - version 1.2.1 + changelog updates; new tests (class agent server paths, deploy CLI, run --reload factory, allow-list, scaffold, and more) mypy/ruff/pytest(1183)/mkdocs/build all green.

  • security: Disable CORS credentials with wildcard origins; correct deploy docstring (03b7e55)

  • CORS: when cors_origins == ["*"], set allow_credentials=False (with a one-time warning) so the platform no longer reflects credentialed cross-origin requests from any site. Explicit cors_origins=[...] keeps allow_credentials=True (backward-compatible). - deploy: correct the module docstring to state the generated image launches the project via uvicorn main:app (matching the rendered Dockerfile CMD), not the stale agentomatic run entrypoint. - docs: 1.2.1 changelog bullet for the CORS hardening (docs/changelog.md + CHANGELOG.md); add tests asserting wildcard -> credentials disabled and explicit origins -> credentials enabled.

Features

  • cli: Add agents-guide command; agent knowledge + docs + 1.3.0 release prep (240902b)

  • add agentomatic agents-guide command: prints an Agentomatic primer or writes it into a project via --write AGENTS.md|CLAUDE.md|.cursor/skills/agentomatic/SKILL.md (refuses to overwrite without --force). Content is a single source of truth in agentomatic.cli.agent_guide so CLI/docs/agent files stay in sync - refresh agent knowledge: regenerate repo-root CLAUDE.md from the primer; extend .agents/AGENTS.md with a 1.3.0 capabilities section (class-agent server wiring, deploy parity + profiles, env toggles, security defaults, provider-agnostic principle, optimization, agents-guide). (The user-level skill at ~/.cursor/skills/agentomatic/SKILL.md was also refreshed in place — outside this repo, not committed here.) - docs: add deploy + agents-guide sections and profile table to docs/cli/commands.md; update command listing - release prep (1.3.0): bump pyproject + _version + uv.lock to 1.3.0 (matches semantic-release's version_toml/version_variables source of truth); reorganize changelogs into a 1.3.0 feature section (deploy profiles, env-driven main.py parity, agents-guide) while keeping genuine patch fixes under 1.2.1 - tests: 10 new tests for the primer source + agents-guide CLI (print, --write, --force, refuse-without-force, all targets, unknown target/skill frontmatter) ruff/format/mypy/pytest(1210)/mkdocs --strict/uv build(1.3.0 wheel w/ py.typed + studio static + templates) all green.

  • deploy: Add full/minimal deploy profiles (swagger always on) (e55b810)

  • agentomatic deploy --profile full|minimal (+ --minimal shorthand). full (default) runs everything; minimal is production-lean: disables the Studio debug UI and quiets logging while keeping the core REST API, health/readiness, metrics, and auth - Swagger/OpenAPI (/docs, /redoc, /openapi.json) is NEVER gated by the profile — always available in both, per explicit requirement - profiles drive the SAME env-driven main.py via baked-in AGENTOMATIC_* env vars (AGENTOMATIC_ENABLE_STUDIO=0, AGENTOMATIC_LOG_LEVEL=WARNING) in the rendered Dockerfile/distroless/compose — one code path, not two images - kept agentomatic[all] for minimal so no required functionality is dropped (Studio just isn't mounted); documented the choice

    • deployment guide gets a profile comparison table + "Swagger always on" warning; 1.2.1 changelog bullets (docs/changelog.md + CHANGELOG.md) - tests: profile_env helper + unknown-profile ValueError; minimal Dockerfile/distroless/compose disable Studio but keep docs; generate_deploy + CLI --minimal/--profile; scaffolded app under minimal env keeps /docs+/redoc+/openapi.json+/health+/api/v1/agents, drops /studio; a built platform with minimal settings exposes /api/v1//invoke + Swagger, no /studio ruff/format/mypy/pytest(1200)/mkdocs --strict/uv build all green.
  • deploy: Production deploy profiles, uvicorn parity, and agents-guide (1.3.0) (d0e2026)

This is the 1.3.0 release-driving commit. It carries a Conventional Commit subject that Python Semantic Release can parse; the preceding commits in v1.2.0..HEAD were committed with ANSI/line-number-corrupted subjects (a cat alias to bat rendered the heredoc), so the parser skipped them and computed no_release. This clean commit restores a correct minor bump to 1.3.0.

Features shipped in 1.3.0 (already present in the tree): - env-driven scaffolded main.py so uvicorn main:app is feature-identical to agentomatic run (Studio/docs/health/metrics on by default; component dirs discovered; auth/control-plane/rate-limit via AGENTOMATIC_* env vars) - agentomatic deploy --profile full|minimal (+ --minimal shorthand): minimal bakes AGENTOMATIC_ENABLE_STUDIO=0 and quieter logs into the image/compose while keeping REST API, health, metrics, auth, and Swagger (/docs, /redoc, /openapi.json) always enabled - agentomatic agents-guide prints or writes an Agentomatic primer (--write AGENTS.md|CLAUDE.md|.cursor/skills/agentomatic/SKILL.md, --force) from a single source of truth to bootstrap coding agents in any project

Also finalizes the 1.3.0 release-notes wording in CHANGELOG.md.

v1.2.0 (2026-07-14)

Features

  • Production execution modes, task board, status, ingestion and Keras lifecycle (a5bad3c)

Add a unified task/execution subsystem so every agent, plugin, pipeline, endpoint, and ingestor is callable sync, async, batch, streaming, or as a tracked background task with progress, SSE events, cancellation, and webhooks.

  • tasks: TaskManager/TaskStore with InMemory + durable SQLAlchemyTaskStore (pooling, TTL/eviction, forward-compatible JSON schema, lazy import), per-resource /async and /batch routes, and a pollable /api/v1/tasks board - status: unified /status HTML dashboard + /api/v1/status JSON rollup across all resources, storage, and the task engine - ingestion: first-class BaseIngestor ops layer (auto-discovery, /run and /run/async, pipeline ingestion step) - packaging, not implementation - pipelines: plugin step type, rollback/compensation, optional input/output schema enforcement, plugin registry threaded through engine/router/dispatcher - agents: Keras-style lifecycle - History, epoch-aware fit() with verbose/callbacks/validation_data, EarlyStopping, Loss abstraction, and PromptFitterBridge wired to the optimize engine

Docs: new tasks/status/ingestion guides; README plus index, concepts, deployment, storage, observability, api-reference, and frontend guide updated. mkdocs --strict clean; full test suite green.

v1.1.0 (2026-07-09)

Bug Fixes

  • types: Ignore missing imports for optional vector-store clients (53925f5)

Add qdrant_client, chromadb, weaviate, pinecone and pymilvus to the mypy optional-dependency override so the type-check gate passes when these lazily-imported vector backends are not installed.

Documentation

  • Add production deployment guide; sync Studio UI with control-plane views (28a809f)

  • Add docs/guide/deployment.md: an end-to-end production guide built around a 5-agent deployment — per-agent inbound OAuth2/JWT + zero-trust, per-agent authenticated databases and vector stores (RAG), caching, custom APIs that call authenticated model APIs, observability stack, control-plane operations, Docker/compose, health/readiness probes, and a production checklist. - index.md: add discoverable cards for Per-Agent Connections, Custom Endpoints, and the Control Plane; point the container card at the deployment guide. - FRONTEND_API_GUIDE.md: document the platform surfaces (control plane, custom endpoints, pipelines, plugins) with TS interfaces matching the server models. - Rebuild and sync the Studio UI bundle (Control/Endpoints/Connections views).

Docs build --strict and Studio/serve tests pass.

Features

  • Production endpoints, per-agent connections, control plane & observability (003e239)

Make Agentomatic production-ready for deploying multiple authenticated agents that pull ML-model context, connect to per-agent databases (memory, RAG / vector search, cache) and call authenticated services — with minimal code.

  • Custom Endpoints: BaseEndpoint APIs that call deployed model services via authenticated httpx (API key/bearer/basic/OAuth2 client-credentials with token caching), fan out and aggregate (ALL/FIRST_SUCCESS/MAJORITY), and are usable as pipeline steps to feed context into agents; auto-discovered from endpoints/ and scaffoldable via init --template endpoint. - Per-Agent Connections: scoped, authenticated DatabaseConnection (any SQL DB via URL), VectorConnection (qdrant/chroma/weaviate/pinecone/milvus, pluggable), HttpConnection, and CustomConnection (any backend via a factory, zero classes). Purpose tagging (memory/rag/vector/cache/...) with by_purpose lookups, register_connection_type/register_vector_provider extensibility, memory backed by a connection engine, and request.state.connections middleware; scaffoldable via init --template connection. - Production Control Plane (enable_control_plane): /api/v1/control admin API to inspect/drain agents, read health/metrics, and toggle maintenance mode, protected by X-Control-Token. - Security: JWT/OAuth2 auth plus per-agent zero-trust policy enforcement. - Observability: endpoint/upstream/connection Prometheus metrics and a ready Grafana + Prometheus + OTel Collector stack in deploy/observability/. - Swagger/OpenAPI fixes: structured tags, cleaner operation IDs, de-duplicated pipeline tags, Studio UI routes excluded from the schema. - Docs, changelog, agent SKILL/AGENTS updates, and full tests for all of the above (lint, format, mypy, docs --strict, build all green).

v1.0.0 (2026-06-25)

Bug Fixes

  • types: Resolve all mypy type check errors (c022137)

  • Add list[Any] annotation for LangChain message lists (mixed types) - Add type: ignore[arg-type] for asyncio.to_thread with sync callable - Add None guard for rewrite_llm in loop._call_llm - Add type: ignore[union-attr] for hasattr-guarded ainvoke/invoke calls - Add type: ignore[arg-type] for DeepEval metric constructors (LLMSpec)

Features

  • providers: Pluggable custom LLM injection across entire package (d9bcdaa)

  • Add set_llm() for global custom LLM singleton injection - Add instance= kwarg to get_llm, get_named_llm, get_structured_llm - Add LLMSpec (str | LLMCallable) type to optimize module - Add call_llm/call_llm_json unified dispatch with graceful error handling - Update PromptFitterBridge to accept LLMSpec for model params - Replace 5 raw httpx Ollama calls with centralized LLMCaller/call_llm - Fix critical OpenAI AsyncClient resource leak (connection leak) - Fix thread safety: record_failover, get_settings, get_failover_count - Fix StructuredOutputFallbackWrapper silent exception swallowing - Fix LLMSpec|Any type annotations (nullified the union) - Fix literal \n in CLI template init.py generation - Fix missing from future import annotations in 2 files - Fix protocols/init.py missing re-exports and all - Fix Makefile check-ci using auto-fix format instead of format-check - Enable Studio by default (--studio/--no-studio, default: on) - Add branded error pages for Studio disabled/missing states - Add Custom LLM Injection docs section in llm-providers.md - Update CLI docs for --studio/--no-studio change - Update changelog with all changes - Add 9 new tests (error handling, provider injection, security)

BREAKING CHANGE: Studio is now enabled by default. Use --no-studio to disable.

Breaking Changes

  • providers: Studio is now enabled by default. Use --no-studio to disable.

v0.10.0 (2026-06-24)

Chores

Features

  • studio: Update bundled studio UI with pipelines and plugins views (ae23f73)

v0.9.0 (2026-06-24)

Features

  • cli: Add ml lifecycle templates for pipelines and plugins (78e9512)

v0.8.0 (2026-06-24)

Bug Fixes

  • ci: Add mypy overrides for optional dependency imports (cae7bff)

Add ignore_missing_imports for optional packages (chainlit, litellm, opentelemetry, langchain providers, holysheet, yaml) that may not be installed in CI environments. Fixes type check pipeline failures.

  • ci: Suppress false call-arg errors for langchain provider constructors (c4adae9)

LangChain's Pydantic models (ChatOpenAI, AzureChatOpenAI) use dynamic init signatures that conflict with pydantic-mypy plugin, causing false 'Unexpected keyword argument' errors when --all-extras are installed. Add agentomatic.providers.* to the call-arg suppression overrides.

Code Style

  • cli: Fix ruff formatting in commands.py (7499efd)

Documentation

  • Major documentation overhaul with premium design and expanded content (473671e)

  • Add custom CSS design system (Inter/JetBrains Mono fonts, gradient tables, animated cards, branded code blocks, dark mode support) - Add announcement bar template override - Upgrade mkdocs.yml with footer nav, breadcrumbs, TOC follow, tooltips, search share, inline highlighting, and 10+ new markdown extensions - Fix homepage: test badge 393→846, endpoint count 12→26, add BaseGraphAgent to public API table, add Class-Based Agents and Cookbook navigation cards - New pages: Concepts & Glossary (461 lines), Testing Your Agents (833 lines), Cookbook & Recipes (1344 lines) - Expand stubs: delegation.md (47→273), security.md (57→435), llm-providers.md (77→424) - Add cross-references and troubleshooting to 8 existing pages - Rewrite templates.md: replace non-existent swarm/pipeline/class templates with actual legacy_dict/plugin templates - Expand first-agent.md with Steps 3-5, common mistakes, navigation - Add state dictionary explanation and troubleshooting to quickstart.md - Add FAQ and Related Documentation to class-agents.md - Restructure mkdocs.yml nav with Concepts, Cookbook, Testing, Advanced section

Features

  • cli: Add full ML lifecycle scaffolding to init --template full (a9e1cbc)

  • Add eval.py: detailed evaluation with per-example reporting, JSON export, --split/--compiled/--dataset flags, CallableMetric support - Add optimize.py: GridSearch param sweep + PromptFitter bridge for LLM-powered prompt rewriting, --strategy grid|prompt - Add predict.py: single query, batch JSONL, and interactive prediction modes with --compiled/--input/--output flags - Add Makefile: convenience targets (train, eval, optimize, predict, all) - Expand dataset.jsonl: 3 → 6 examples (4 train, 2 test) - Fix CLI --template choices: remove non-existent swarm/pipeline/class, add legacy_dict (matches actual TEMPLATES registry) - Update full template description to mention ML lifecycle scripts

The 'full' template now generates 16 files covering the complete ML-like workflow: agent → config → schemas → tools → dataset → train → eval → optimize → predict → Makefile

  • cli: Overhaul TUI with branded ASCII banner, categorized help, and ML lifecycle awareness (f8f705b)

  • Add ASCII art banner with version number in Rich panels - Add --version / -V flag to show package version - Replace plain click.group with Rich categorized command table (Agent Lifecycle, Platform, ML & Optimization, Debug, Advanced) - Upgrade list command: detect class-based vs functional agents, show Pattern/Framework/ML Lifecycle columns with T·E·O·D badges - Upgrade inspect command: 3-section capabilities table (Core, ML Lifecycle, Advanced) with agent pattern detection panel - Enhance init next-steps: show ML lifecycle commands for full template (train, eval, optimize, predict, make all) - Polish doctor: detect agent.py alongside init.py for counting - Polish all docstrings to be clear and descriptive

v0.7.0 (2026-06-23)

Bug Fixes

  • lint: Fix pre-commit ruff and UP038 unsafe fixes (5cf9a16)

  • lint: Resolve mypy and ruff errors for 0.7.0 release (16c4b24)

  • stacks: Ensure pydantic-settings singleton syncs with StackConfig environment injection (3c8d6fb)

Features

  • release: V0.5.1 production readiness, ML plugins, class-based agents, and deep documentation (f04bd7a)

v0.6.0 (2026-06-19)

Chores

  • optimize: Fix linting errors in tests and config (2dc3830)

  • optimize: Fix mypy arg-type error in test_fitter (092995a)

  • optimize: Fix unused imports in dashboard (c6aae12)

Features

  • optimize: Integrate event callbacks and TUI dashboards (13ab8e9)

  • Add comprehensive EventData and OptimizationEvent system - Add RichProgressCallback and Textual DashboardCallback - Pass deep context payload to rewrite LLM - Implement regression rejection via acceptance_policy - Support brace-safe system prompt formatting - Expand documentation and unit tests for optimizer observability

v0.5.1 (2026-06-19)

Bug Fixes

  • ci: Remove unsupported --force flag from mike deploy commands (a798262)

mike v2 does not support --force, causing 'unrecognized arguments' error and docs deployment failure during release. Replace with --ignore-remote-status for robustness across all workflow files: - release.yml (deploy-docs job) - manual-docs.yml (both deploy paths) - docs.yml (retry step)

  • ci: Resolve lint, format, and type-check failures (4316914)

  • Fix indentation bug in langgraph adapter where checkpointer access was outside the None-guard, causing mypy union-attr errors - Remove unused imports (asyncio, AsyncMock, RegisteredAgent) in tests - Sort import blocks in test_bugfixes_041.py - Apply ruff format to 6 files (memory_manager, router_factory, middleware/init, optimize/config, optimize/optimizer, tests) - Replace hardcoded version assertions with dynamic semver validation to prevent test failures on every version bump

v0.5.0 (2026-06-19)

Features

  • studio: Sync Studio UI v0.2.0 + fix run_tracker output (54b17b7)

  • fix(studio): run_tracker now stores actual agent output instead of input state - fix(studio): include thread_id in run_start event data for frontend tracking - feat(studio): sync Studio UI v0.2.0 with SSE fixes and UX improvements - chore: include pending changes from previous sessions (docs, CI, bugfixes)

v0.4.1 (2026-06-18)

Bug Fixes

  • ci: Switch to GitHub App tokens + fix smoke test deps (88e46a4)

  • ci.yml: smoke test uses --all-extras (langchain_core is a hard import dependency via ConversationMemoryManager) - release.yml: switched all GH_TOKEN PAT refs to App token (TECHNICAL_APP_APP_ID + TECHNICAL_APP_PEM org secrets) - release.yml: added App token generation to bundle-studio job (separate job needs its own token) - sync-studio.yml: switched to App token for cross-repo access to private agentomatic-studio repo

  • test: Remove hardcoded version + lower coverage threshold (85ae59f)

  • Version test: use semver pattern match instead of hardcoded '0.3.0' (test broke when semantic release bumped to 0.4.0) - Coverage: lowered from 55% to 50% (actual 54.89% fluctuates across Python versions due to conditional imports)

  • test: Resolve ruff lint errors in coverage tests (dea5c4a)

  • Remove unused imports (asyncio, time, AsyncMock, MagicMock) - Fix F841 unused variable in test_reset_clears_singleton - Fix F811 redefined MagicMock import

Chores

  • Remove stale poetry.lock (migrated to uv) (eeb1c2e)

Testing

  • coverage: Add 35 tests for middleware, decorators, providers (1c2084f)

Boost coverage from 54.89% to 57% by testing: - config/defaults: 0% → 100% - middleware/auth: 38% → 100% - middleware/rate_limit: 32% → 97% - middleware/metrics: 27% → 89% - protocols/decorators: 43% → 100% - providers/embeddings: 0% → 95% - storage/init: 42% → 100% - studio/decorators: 43% → 97%

v0.4.0 (2026-06-18)

Bug Fixes

  • ci: Resolve mypy type-check failures (cee0f00)

  • Disabled warn_return_any (false positives with Pydantic/FastAPI) - Added per-module overrides for studio adapters, router, run_tracker, demo, and optimize modules where Pydantic Field defaults trigger false call-arg errors - Fixed resume_input type annotation in studio/router.py - All 74 source files now pass mypy with zero errors

Documentation

  • Add comprehensive guide for Agentomatic Studio (8a18ff7)

  • Complete CLI reference rewrite + studio docs enhancement (ae3d1ea)

  • CLI commands.md fully rewritten with all 9 commands documented - Every flag, option, and example for each command - Studio.md enhanced with tabbed quick start and demo reference - Both files significantly expanded with professional formatting

  • Comprehensive documentation overhaul + agent skills + CI/CD hardening (313b410)

Documentation (11,804 total lines — doubled from 5,943): - Rewrote index.md (458 lines) — feature cards, arch diagram, comparison table - Rewrote quickstart.md (575 lines) — 4 framework tabs, 6 query examples - Rewrote first-agent.md (450 lines) — annotated code, decision guide - Rewrote agent-structure.md (629 lines) — manifest reference, discovery flow - Rewrote configuration.md (418 lines) — 22-param constructor table, env vars - Rewrote middleware.md (578 lines) — 5 middleware with param tables, custom guide - Rewrote storage.md (576 lines) — backend comparison, ER diagram, Redis example - Rewrote templates.md (503 lines) — 6 templates with generated file details - Created langgraph.md (1,209 lines) — dedicated LangGraph integration guide with 4 graph patterns, checkpointing, HITL, streaming, Studio integration - Rewrote api-reference.md (1,117 lines) — every endpoint with curl examples - Rewrote overview.md (501 lines) — architecture diagrams, deployment patterns - Extended platform-features.md (1,112 lines) — HITL workflow, thread management - Rewrote changelog.md (143 lines) — 3 versioned releases

Agent Skills: - Created .agents/AGENTS.md — project rules for AI coding assistants - Created .agents/skills/agentomatic/SKILL.md (336 lines) — comprehensive skill covering architecture, patterns, CLI, Studio, conventions

CI/CD Hardening: - ci.yml: Added docs build verification + import smoke test (2 new jobs) - pr-checks.yml: Added test + docs gates, fixed uv consistency - Makefile: Fixed uv sync consistency, added docs-check target - pyproject.toml: Raised coverage threshold (40%→55%), .agents in sdist

LangGraph Coverage: - Added retriever event mapping (on_retriever_start/end) - Added LLM event mapping (on_llm_start/end) - Added 4 new tests for retriever/LLM events (430 total passing)

  • Elevate core README to enterprise standard and highlight Studio (dc89aa2)

Features

  • Add demo command + comprehensive documentation overhaul (853d0f5)

Demo Command - Add 'agentomatic demo' CLI command for E2E testing - Create src/agentomatic/demo/

with built-in demo agent - Demo agent uses @studio_graph and @studio_state decorators - Custom 5-node graph: Input → Research → Analyze → Synthesize → Respond → Output - Simulated multi-step reasoning with timing per node

Documentation Overhaul - Rewrite docs/index.md with professional hero section, feature grid,

architecture diagram - Rewrite docs/getting-started/quickstart.md with step-by-step guide - Rewrite docs/guide/debug-ui.md as 'Chat Interface (Chainlit)' with clear Studio distinction - Enhance docs/guide/studio.md with comparison box, tabbed quick start, demo reference - Rewrite docs/cli/commands.md with all flags including --studio, --title, --log-level - Rewrite docs/architecture/overview.md with 3 mermaid diagrams (platform, request flow, adapter) - Rewrite docs/contributing.md with dev setup, testing, PR process - Add docs/guide/demo.md for the new demo command - Update test count badge from 175 → 393

Production Readiness - Add test-studio, run-studio, demo, check-ci targets to Makefile - Update

mkdocs.yml nav with Debugging section (Studio, Chat UI, Demo) - Update README with universal framework support table, demo command, Studio decorators

393/393 tests passing, 0 lint errors

  • Add LangChain adapter + fix CI lint/tests + comprehensive documentation (85d0510)

  • Add LangChainAdapter with LCEL graph extraction, astream_events SSE, and message tracking - Auto-detect framework='langchain' in adapter factory resolution chain - Fix all ruff lint errors across src/ and tests/ (sorted imports, unused imports, datetime.UTC) - Fix test_studio.py mock agents to work with adapter system (remove spurious MagicMock attrs) - Add 8 new LangChainAdapter tests (import, capabilities, graph, state, history, streaming) - Add LangChain resolution test to TestAdapterResolution - Expand studio docs with LangChain integration section, chatbot example, LCEL graph discovery - Total: 393/393 tests pass, 0 lint errors

  • Complete Phase 4 Agentomatic Studio UI integration and rebrand (b142d27)

  • Deep_agent integration — enhanced Studio support for LangChain Deep Agents (bede820)

  • Enhanced LangGraphAdapter with deep_agent-specific features: - Node classification for subagent/planning/filesystem/execute nodes - Subagent event mapping (subagent_start/subagent_end via namespace detection) - Task planning events (task_update for write_todos tool) - Interrupt handling (breakpoint_hit for NodeInterrupt/GraphInterrupt) - Deep agent capability detection from graph node inspection - Added POST /studio/agents/{name}/threads/{tid}/resume endpoint - Supports LangGraph Command(resume=value) for HITL interrupt resume - Streams continued execution via SSE - Updated adapter factory to resolve framework='deepagent' → LangGraphAdapter - Added 'deepagent' scaffold template (agentomatic init --template deepagent) - Updated Studio models with new event types and node types - Added comprehensive deep_agent documentation guide - Updated framework comparison table in studio.md with Deep Agent column - Added 33 new tests (total: 426 passing)

  • Universal Studio adapter architecture for any agent framework (500145f)

  • Add StudioAdapter ABC with capabilities, graph, streaming, state, and history methods - Add LangGraphAdapter with full graph topology, SSE streaming, checkpointer, and breakpoints - Add GenericAdapter with trace-based SSE, synthetic graphs, and in-memory state/history - Add @studio_graph, @studio_state, @studio_stream decorators for incremental opt-in - Add adapter factory (resolve_adapter) with automatic framework detection - Refactor router.py and run_tracker.py to delegate all framework-specific logic to adapters - Update studio init.py with new public API exports - Rewrite docs/guide/studio.md with full adapter documentation and decorator examples

v0.3.0 (2026-06-14)

Features

  • Implement memory management, platform features, and router updates (5cf8aa8)

v0.2.0 (2026-06-14)

Documentation

  • Add telemetry and feedback correlation notes for A/B testing (2c27a86)

Features

  • Implement advanced platform features (HITL, checkpointer, structured output, fork, A/B routing, fallbacks, hooks) and update documentation (c1a55c3)

  • Increase core test coverage over 85% and enhance homepage aesthetics (98f28f5)

Testing

  • Enhance unit test coverage for sqlalchemy store, sync checkpointers, and structured fallbacks (91ab042)

v0.1.1 (2026-06-13)

Bug Fixes

  • Resolve import block sorting and unused typing imports (99c83ba)

  • ci: Force Node.js 24 runtime and disable PyPI attestations to remove warnings (275a233)

Documentation

  • Add detailed input and output schemas guide and improve custom schema extraction (4c5e079)

  • Expand agent structure, customization overrides, and platform settings references (5aa9956)

  • Overhaul documentation with detailed guides, visual diagrams, and logo accents (ef3de5a)

  • agnostic: Replace all remaining hr_bot references with project-agnostic placeholders (4f868d6)

  • prompts: Document versioned prompts and PromptManager usage (f0fe872)

v0.1.0 (2026-06-13)

Bug Fixes

  • Add parallel-safe Annotated reducers to BaseAgentState (04ed6b8)

All state fields now use Annotated reducers for LangGraph parallel fan-out compatibility: - metadata: dict merge (last-writer-wins per key) - response/agent_type/routing_decision/error: last-writer-wins - suggestions/citations/steps_taken: list concatenation (operator.add) - messages: add_messages (existing)

This fixes 'Can receive only one value per step' errors when parallel graph branches write to the same state field.

  • ci: Fix codecov param on v7, add pr-title check filter, and import Callable (490583c)

  • ci: Fix semantic release token and upgrade deprecated Node.js 20 actions (7dfea0d)

  • release: Disable semantic-release build command and pypi upload (2b1c427)

Chores

  • Fix workflows, docker, setup-telemetry, and resolve all type/mypy errors for first release (54cd42d)

  • Run pre-commit quality gate autofix, add importlib.util, resolve mypy and formatting (1140c7b)

Documentation

  • Comprehensive v0.1.0 release documentation (06c34b1)

  • Create root CHANGELOG.md with detailed release notes - Update docs/changelog.md with full feature breakdown - Update docs/index.md with badges, expanded features, architecture diagram - Update docs/getting-started/installation.md with extras table, pip/uv/poetry tabs - Update docs/getting-started/quickstart.md with expected outputs, next steps - Update docs/cli/commands.md with click-style help for all 7 commands - Update docs/guide/optimization.md with all 7 strategies, GEval, per-agent pattern - Fix noqa WPS433 → F811 in optimize/report.py - Format cli/commands.py - mkdocs build --strict passes with 0 errors

  • Mkdocs Material + CI/CD + semantic release + pre-commit (2f672e8)

Documentation (MkDocs Material): - 16 documentation pages (getting-started, user guide, CLI, architecture) - mike versioning (dev/latest aliases) - Dark/light theme with deep purple accent - Mermaid diagrams, tabbed content, code copy

CI/CD (GitHub Actions): - ci.yml: lint (ruff), test (Python 3.11/3.12/3.13 matrix), typecheck (mypy)

  • release.yml: python-semantic-release + PyPI publish + GitHub Release - docs.yml: auto-deploy docs via mike on push/tag

Pre-commit: - trailing whitespace, end-of-file-fixer, check-yaml/toml/json - ruff lint + format - mypy type checking - conventional-pre-commit (commit message enforcement)

Author: UnicoLab - Updated pyproject.toml, LICENSE, README, all URLs - Added semantic-release config, coverage thresholds - Added docs and cli optional deps - Cleaned up 12 stale test files, removed conflicting pytest.ini - Enhanced Makefile with docs-serve, docs-build, docs-deploy, check-all

88/88 tests passing, docs build clean in strict mode

Features

  • Add Pixar logo, fix 130 lint errors, format all files (902072d)

  • Add assets/logo.png (Pixar-style 3D robot mascot) - Update README.md with centered logo - Fix 130 ruff lint errors (import sorting, unused imports, etc.) - Reformat 51 files with ruff format - All 161 tests pass, all linting clean - Verify CI workflows reference UnicoLab/agentomatic

  • Add PromptOptimizationLoop — local-first prompt optimizer (3b4143f)

Generic, framework-agnostic iterative prompt optimization engine: - PromptOptimizationLoop: evaluate → analyse failures → LLM rewrite → repeat - 4 rewrite strategies: iterative, adversarial, structured, minimal - Built-in scorers: keyword_overlap, contains_score - Pluggable scoring: sync or async (LLM-as-a-judge) - Pluggable rewrite LLM: any LangChain model or raw callable - Early stopping with patience - Rich HTML reports with SVG evolution charts - JSON experiment tracking for reproducibility - Zero project-specific deps — works with any agent

  • Complete framework with SQLAlchemy storage, full example, and integration tests (c358ed1)

New modules: - storage/models.py: SQLAlchemy ORM (ThreadModel, MessageModel, FeedbackModel) - storage/sqlalchemy.py: Async SQLAlchemyStore with connection pooling - examples/full_agent/: Full weather agent demonstrating ALL overwrite options (manifest, graph, nodes, config, schemas, tools, api, prompts, langgraph.json)

Fixes: - platform.py: Mount routers for programmatic agents at build-time (previously only mounted during lifespan, breaking TestClient)

Tests: - test_integration.py: 20 integration tests (platform + agent endpoints) - 41/41 tests passing (unit + integration)

  • Deep DeepEval + HolySheet integration (fc2dc44)

Metrics (metrics.py): - GEvalMetric — DeepEval GEval with custom criteria + eval_steps (chain-of-thought LLM-as-judge, Ollama fallback) - DeepEvalMetric — wrap ANY deepeval metric instance as BaseMetric - RedTeamMetric — adversarial safety scoring (bias+toxicity) - resolve_metrics() now supports 'geval:criteria' shorthand syntax - All DeepEval imports gracefully degrade via try/except

Reports (report.py): - HolySheet integration for interactive React dashboards - KPI cards (baseline, best, improvement, duration, iteration) - LineChart (score vs iteration per metric) - DataTable (full iteration history) - Markdown (prompt diffs via difflib) - Falls back to inline SVG/HTML if HolySheet not installed

Synthesizer (synthesizer.py): - generate_from_docs() — DeepEval Synthesizer.generate_goldens_from_docs() - red_team() — DeepEval RedTeamer with 40+ vulnerability scans - to_deepeval_dataset() / from_deepeval_dataset() — bidirectional bridge - Convenience: generate_from_docs(), red_team() at module level

Dependencies: - optimize extra: deepeval>=2.0, holysheet>=0.1

Tests: 139/139 passing | Docs: builds clean

  • Make skip_paths customizable in AuthMiddleware (acc6de2)

  • Optimization endpoints, feedback collection, OpenTelemetry (3dcfc8c)

API Endpoints: - POST /{agent}/optimize/invoke — full pipeline context (retrieval_context, tool_calls, reasoning, citations) for DeepEval metrics - POST /{agent}/feedback — async user feedback (thumbs, rating, correction) - GET /{agent}/feedback — list feedback entries - GET /{agent}/feedback/export — JSONL export for optimization datasets

Feedback System (middleware/feedback.py): - FeedbackCollector — async collector with in-memory buffer + BaseStore backend - @collect_feedback decorator — auto-record agent I/O for dataset building - Module-level singleton via get_collector()/set_collector() - Corrections feed back as expected_answers for optimization

OpenTelemetry (observability/telemetry.py): - setup_telemetry(app) — auto-configures from env vars - Auto-instruments FastAPI + httpx - @traced decorator — creates spans for any sync/async function - OTLP exporter (gRPC → HTTP fallback) or ConsoleSpanExporter - Graceful no-op when opentelemetry not installed

Runner Context (optimize/runner.py): - RunResult now carries retrieval_context, tool_calls, reasoning, steps_taken - Auto-tries /optimize/invoke first, falls back to /invoke - submit_feedback() method for feeding optimization results back

Platform (core/platform.py): - enable_feedback=True (default) — auto-attaches feedback endpoints - enable_telemetry=True (default) — auto-configures OTEL on build()

Dependencies: - telemetry = [opentelemetry-api, opentelemetry-sdk, fastapi+httpx instrumentors] - all extra now includes telemetry

Tests: 161/161 passing | Docs: builds clean

  • Production-ready pluggable architecture (f096a9d)

Storage: - BaseStore ABC defining the universal storage protocol - MemoryStore and SQLAlchemyStore both inherit BaseStore - Users can implement RedisStore, MongoStore, etc. by subclassing - Platform accepts store= param with auto-init/close lifecycle

Middleware pipeline: - AuthMiddleware: API key auth via header/query param - RateLimitMiddleware: sliding-window per-IP rate limiter - MetricsMiddleware: Prometheus counters + histograms - All toggleable via platform constructor params - Custom middleware via middleware=[] param

Platform integration: - Storage wired into router_factory (threads, messages, feedback) - Health endpoint includes storage health check - /api/v1/storage/stats and /api/v1/feedback endpoints - Lifecycle hooks properly init/close storage

Tests: - 63/63 passing (21 unit + 42 integration) - Coverage: invoke, chat, stream, A2A, threads, lifecycle, middleware, storage, feedback, programmatic reg, custom routers

  • Prompt optimization engine with DSPy-inspired strategies (c12f00e)

Optimization Module (agentomatic.optimize): - PromptOptimizer — like model.fit() for prompts - Separate rewrite_llm and eval_llm for full model control - 7 optimization strategies (iterative_rewrite, few_shot, chain_of_thought, mipro, bootstrap_random_search, ensemble) - Rich progress display with per-iteration metrics table - Auto HTML reports with SVG charts + prompt diffs - Experiment tracking (JSON logs) - Prompt versioning (branching in prompts.json) - Early stopping with patience + target score - Cross-prompt A/B comparison

Data Synthesis (agentomatic.optimize.synthesizer): - DataSynthesizer — generate eval datasets from descriptions - 5 augmentation strategies (paraphrase, perturbation, expansion, adversarial, formality_shift) - generate_dataset() + augment_dataset() convenience functions - Generate from system prompts or agent descriptions

Metrics (agentomatic.optimize.metrics): - Built-in: ExactMatchMetric, ContainsMetric (no LLM needed)

  • DeepEval: answer_relevancy, faithfulness, hallucination, etc. - LLMJudgeMetric — custom criteria with LLM-as-judge - CustomMetric — wrap any sync/async callable

CLI: agentomatic optimize --dataset qa.jsonl

Docs: guide/optimization.md with full usage reference

Tests: 51 new tests (139/139 total passing)

Install: pip install agentomatic[optimize]

  • Rich CLI/TUI + Chainlit debug UI + 5 scaffolding templates (642cdf7)

CLI (agentomatic command): - init: Interactive agent scaffolding with 5 templates (basic, full, rag, chatbot, custom) - run: Start platform with --with-ui flag - list: Rich table of discovered agents

  • test: Interactive terminal testing against running agents - inspect: Show agent structure, manifest, config - doctor: Environment health check with dep status - ui: Launch Chainlit debug UI standalone

Templates generate ALL agent files: - init.py, graph.py, nodes.py (always) - config.py, schemas.py, tools.py, api.py (full template) - prompts.json, langgraph.json, .env.example, README.md

Chainlit Debug UI (pip install agentomatic[ui]): - Mounts at /chat inside the same FastAPI app - Agent selector, real-time streaming, tool call visualization - Chain-of-thought display, feedback collection - Dark theme with agentomatic branding

Dependencies: - cli extra: rich>=13.0, questionary>=2.0 - ui extra: chainlit>=2.0

Tests: 88/88 passing (21 unit + 42 integration + 25 CLI)

  • 🚀 agentomatic v0.1.0 — zero-code multi-agent API framework (ba9d6ae)

Complete rewrite of lm_agents_api into a reusable Python package:

Core Framework: - AgentPlatform: one-liner app factory with auto-discovery - AgentRegistry: auto-discovers agents from folder structure - AgentManifest: frozen dataclass identity card per agent - BaseAgentState: LangGraph-compatible default state - RouterFactory: auto-generates 12+ REST endpoints per agent

Features: - Auto-generated endpoints: invoke, stream, chat, health, config, prompts, A2A - Framework-agnostic: LangGraph, LangChain, or plain async functions - Circuit breakers & concurrency limiting - Prometheus metrics with graceful fallback - Pluggable storage (memory/SQLAlchemy) - Prompt versioning with JSON-based management - A2A protocol with auto-generated agent cards - Feature flags via env vars (streaming, auth, metrics, etc.) - CLI: init, run, list commands - LoggingMiddleware with X-Request-ID and timing

Package: - hatchling build system - Optional extras: langgraph, ollama, openai, azure, vertex, metrics, db - PEP 561 py.typed marker - Comprehensive test suite (21 tests, all passing) - MIT license

Example: - hello_agent: 3-line main.py demonstrating the framework

  • prompts: Export PromptManager from root and support prompts_file parameter (bb3cbf2)

Refactoring

  • Cleaning the implementation (36f035b)

  • Improving and testing (af37c0a)

  • Improving dockers (5f65ae3)

  • Migrate CLI from argparse to click, replace print with loguru (6b00b9e)

  • Replace argparse with click decorators for all 8 commands - All print() → loguru logger.info/success/warning/error - Add click>=8.1.0 to dependencies - Update entry point to cli click group - 161/161 tests pass

  • Saving state (0e73eaf)

  • Simplification (32e5987)

  • Simplifying (fabdc64)

Testing

  • Adding some first tests (ce21191)