Repository navigation
·
158 commits
to main
since this release
What's Changed
- Release @lousho/build-ai-agent 1.0.0-alpha.19, create-lousho-a… by @LinuxDevil in #411
- fix(shell): exact-match allow rules, cmd.exe % and ^ operators, name the shell by @LinuxDevil in #412
- fix(registry): make receipt-enforced approval non-overridable from the agent directory by @LinuxDevil in #413
- fix(errors): classify local-runtime overflow, name connection failures, keep unparsed error bodies by @LinuxDevil in #415
- fix(handoffs): no mid-conversation system message; keep memory after a handoff by @LinuxDevil in #416
- fix(context): warn on unknown context window and count tools in the compaction estimate by @LinuxDevil in #418
- fix(mcp): forward abort signal and timeout to callTool; stop sending text results twice by @LinuxDevil in #419
- fix(agent-dir): forward every createAgent() override from loadAgentDir/resolveAgentDir by @LinuxDevil in #420
- fix(providers): per-call fallback state and no silent file-part drops (A9) by @LinuxDevil in #422
- fix(output): accept optional fields on strict structured-output endpoints by @LinuxDevil in #414
- fix(schedules): report unfinished prompt turns, awaitable stop(), keepAlive, export fireSchedule by @LinuxDevil in #417
- fix(mcp): sanitize tool names, per-server include/exclude, approval sees args by @LinuxDevil in #426
- fix(cli): make lousho add work by default, check flags before the manifest by @LinuxDevil in #427
- fix(context): retry rejected summaries, count the summarizer call, stub pruned results by @LinuxDevil in #425
- fix(server): scope approvals and sessions to their caller, redact errors (audit A1) by @LinuxDevil in #423
- fix(registry): coding-kit can't rewrite its own config; per-turn loop guard; drop git diff by @LinuxDevil in #428
- feat(providers): OpenAIProvider api: 'chat' for OpenAI-compatible servers; lousho doctor --ping by @LinuxDevil in #431
- fix(evals): lousho eval time limits, reports on vitest failures, collision-safe cassettes by @LinuxDevil in #424
- fix(mcp): coded start failures with exit code and stderr; ready() reconnects after close() by @LinuxDevil in #432
- fix(flows): gate toolCall steps like agent tool calls; enforce flow inputs by @LinuxDevil in #421
- fix(execution): reject unparseable tool-call JSON and suggest the closest tool name by @LinuxDevil in #429
- fix(registry): enforce a kit's install receipt on its sub-agent directories by @LinuxDevil in #435
- fix(flows): cancel flows with a signal; unique ids for steps without one by @LinuxDevil in #436
- fix(output): read near-miss JSON without a repair call, detect schema echoes, flag repaired objects by @LinuxDevil in #434
- fix(testing): replay keeps reasoning and full usage; robust judge scores; tool order by @LinuxDevil in #437
- fix(tracing): send({ parentSpanId }), execute_tool error message, approvals.get on malformed ids by @LinuxDevil in #430
- fix: audit-found durability, security and compatibility bugs by @LinuxDevil in #438
- fix(providers): one retry layer, retry streams that fail before output, provider fetch option (C2) by @LinuxDevil in #439
- fix(server): a client disconnect no longer drops a session turn (audit B4) by @LinuxDevil in #440
- fix(execution): checkpoint every settled tool result by toolCallId by @LinuxDevil in #441
- feat(output): output { schema, promptSchema: false } sends the schema only on responseFormat by @LinuxDevil in #442
- feat(agent): createAgent({ modelSettings }) and omit unset sampling keys by @LinuxDevil in #433
- test(providers): skip the ollama fetch test when its peer is absent by @LinuxDevil in #443
- test(audit): harness fixes + live revalidation matrix (alpha.19) by @LinuxDevil in #444
- feat(execution): forced no-tools answer call at maxSteps with output set (audit D3) by @LinuxDevil in #445
- docs(audit): record D3 forced-answer live verification by @LinuxDevil in #446
- fix(mcp): keep object schemas with a sibling oneOf/anyOf (Eve TOOLS-F4) by @LinuxDevil in #447
- fix(flows): per-iteration forEach scope so parallel loops don't share {{item}} (Eve DUR-F1) by @LinuxDevil in #448
- fix(execution): isolate onEvent listener errors from the run (Eve CORE-F2) by @LinuxDevil in #449
- fix(channels): webhookChannel auth works on Fetch hosts (Eve E17 / F2) by @LinuxDevil in #451
- fix(providers): use OpenRouter's reported cost for usage.costUsd and maxCostUsd (Eve PROV-F3) by @LinuxDevil in #450
- fix(tools): shell allow string patterns see through quotes, $ and braces (Eve TOOLS-F1) by @LinuxDevil in #452
- fix(examples): ops-pipeline demo ports, setup docs, smoke test (Eve DUI-F6) by @LinuxDevil in #453
- fix(channels): githubChannel ignores /approve for a non-pending approval (Eve E17 / F5) by @LinuxDevil in #456
- fix(storage): keep Uint8Array bytes across SQLite approvals and KV checkpoints/approvals (Eve DUR-F5) by @LinuxDevil in #454
- fix(models): normalize . vs - in model ids and tighten snapshot matching (Eve PROV-F3) by @LinuxDevil in #459
- fix(channels): no sign-in links in Telegram/Teams groups (Eve TOOLS-F3) by @LinuxDevil in #458
- fix(tracing): default redactContent to true so content stays off spans (Eve MA-F4) by @LinuxDevil in #457
- fix(oauth): token redaction gaps and concurrent refresh race (Eve TOOLS-F2, TOOLS-F16) by @LinuxDevil in #455
- fix(flows): abort parallel siblings on failure; add FlowExecutionResult.usage (Eve DUR-F12 / MA-F11) by @LinuxDevil in #461
- ci(examples): add typecheck:examples and fix strict errors (Eve DUI-F16) by @LinuxDevil in #462
- fix(ui): remote mode sends a per-chat sessionId (Eve CORE-F1) by @LinuxDevil in #464
- fix(session): queue concurrent send({ sessionId }) runs (Eve DUR-F2) by @LinuxDevil in #463
- fix(oauth): namespace token owner by authenticator (Eve TOOLS-F15) by @LinuxDevil in #465
- fix(tracing): roll background sub-agent cost up to the lead span and listTraces (Eve MA-F2) by @LinuxDevil in #466
- fix(execution): strict structured output for oneOf, root unions, records and tuples (Eve PROV-F1, PROV-F2) by @LinuxDevil in #467
- fix(triggers): cap WebhookTriggerAdapter body at 1 MB, 413, no error echo (Eve DUR-F18) by @LinuxDevil in #468
- fix(cli): --version, fresh top-level usage, correct command name in chat/acp errors (Eve CLI-F8/F9/F10) by @LinuxDevil in #469
- fix(providers): cap Retry-After at backoff.maxMs (Eve PROV-F5) by @LinuxDevil in #471
- fix(channels): channel sessions default to the agent's session store (Eve EVE-0, F1) by @LinuxDevil in #472
- fix(acp): answer -32600 for a non-object JSON line instead of crashing (Eve TOOLS-F14) by @LinuxDevil in #473
- fix(mcp): validate Host and Origin on the serveMcp HTTP transport (Eve TOOLS-F5) by @LinuxDevil in #460
- fix(cli): lousho mcp accepts agent directories, no raw EISDIR (Eve CLI-F2) by @LinuxDevil in #479
- fix(session): re-read the transcript on every session call (Eve DUR-F3) by @LinuxDevil in #476
- fix(agentDir): run sub-agent directories through the native sub-agent runtime (Eve MA-F5) by @LinuxDevil in #478
- fix(errors): quota-exceeded category for insufficient_quota and 402 (Eve PROV-F6) by @LinuxDevil in #480
- fix(evals): parse the last labelled judge score and show the judge the input (Eve MA-F8) by @LinuxDevil in #482
- fix(cli): lousho add warns on non-agent dirs, creates missing dir for kits (Eve CLI-F3/F18) by @LinuxDevil in #483
- fix(subagents): count a failed sub-agent's spend in the lead's usage and limits (Eve MA-F1) by @LinuxDevil in #477
- fix(ui): chat reducer separates step texts and surfaces non-stop endings (Eve CORE-F9) by @LinuxDevil in #484
- fix(tools): defineTool rejects non-object roots and z.date()/z.bigint() fields (Eve TOOLS-F10) by @LinuxDevil in #485
- fix(channels): a double click on a channel approval decides once (Eve CH-F7) by @LinuxDevil in #486
- fix(session): clear() deletes every turn checkpoint and its history (Eve DUR-F8) by @LinuxDevil in #487
- fix(build): coded error for node-server bundling failures (Eve CLI-F7) by @LinuxDevil in #488
- fix(channels): channel 500s no longer leak internal error messages (Eve CH-F6) by @LinuxDevil in #489
- fix(studio): token-gate the API and WebSocket, drop wildcard CORS (Eve DUI-F1) by @LinuxDevil in #475
- fix(providers): withRetry timeoutMs no longer aborts healthy streams (Eve PROV-F7) by @LinuxDevil in #490
- fix(cli): lousho init notes a missing API key after scaffolding (Eve CLI-F19) by @LinuxDevil in #493
- fix(otel): keep a queued background sub-agent in the lead's trace (Eve MA-F3) by @LinuxDevil in #495
- fix(ui): drop unregistered LOUSHO_RUN_ENDED code (Eve CORE-F9 follow-up) by @LinuxDevil in #497
- fix(tools): grep refuses nested quantifiers and matches in a worker with a timeout (Eve TOOLS-F6) by @LinuxDevil in #498
- fix(server): /ui 400 for an invalid id; auth: '' fails closed (Eve CH-F11, CH-F16) by @LinuxDevil in #496
- fix(storage): SqliteStore no longer freezes the event loop on lock contention (Eve DUR-F14) by @LinuxDevil in #491
- fix(storage): case-safe file names for file-backed stores (Eve DUR-F7, MEM-F3) by @LinuxDevil in #474
- fix(providers): send modelSettings.stop and add toolChoice (Eve PROV-F9) by @LinuxDevil in #481
- fix(triggers): cron 02:xx jobs run after the spring-forward gap instead of skipping the day (Eve DUR-F20) by @LinuxDevil in #500
- fix(mcp): ask for approval by default; refuse an MCP tool shadowing a local tool (Eve TOOLS-F11) by @LinuxDevil in #494
- fix(studio): validate agent names inline, throw on API errors, add an error boundary (Eve DUI-F3) by @LinuxDevil in #499
- fix(memory): whole-word keyword recall that never fails open (Eve MEM-F1) by @LinuxDevil in #507
- fix(tools): edit_file refuses non-UTF-8 and UTF-16 files instead of corrupting them (Eve TOOLS-F7) by @LinuxDevil in #503
- fix(providers): finish_reason 'error' inside a 200 throws a retryable error (Eve PROV-F8) by @LinuxDevil in #506
- fix(schedules): one session per fire, opt-in sharedSession (Eve DUR-F10) by @LinuxDevil in #509
- fix(providers): send reasoning to Fable/gpt-oss/DeepSeek V3.x, warn when not sent (Eve PROV-F10) by @LinuxDevil in #510
- fix(memory): degrade on recall errors, validate scopes and scope keys (Eve MEM-F4, F6, F7) by @LinuxDevil in #511
- fix(execution): agent.stream() rethrows the run error after run.done (Eve CORE-F10) by @LinuxDevil in #508
- fix(evals): replay cassettes by request, per agent, and let mismatches stop the run (Eve MA-F7) by @LinuxDevil in #501
- fix(execution): skip the futile repair after a maxTokens cutoff (Eve CORE-F12) by @LinuxDevil in #492
- fix(session): tools see the session id, not the turn checkpoint key (Eve DUI-F5) by @LinuxDevil in #502
- fix(studio): fail a run with no provider key instead of silently running mock (Eve DUI-F4) by @LinuxDevil in #512
- fix(security): confine SubprocessSandbox.writeFile to a root and harden its containers (Eve TOOLS-F17) by @LinuxDevil in #514
- fix(mcp): follow tools/list pages, re-list on list_changed, report a crashed server as failed (Eve TOOLS-F18) by @LinuxDevil in #516
- fix(ui): React reset(), server error in remote errors, tiny-cost formatting (Eve CORE-F17) by @LinuxDevil in #517
- fix(storage): SqliteStore.prune() keeps turns paused on an unresolved approval (Eve DUR-F6) by @LinuxDevil in #470
- fix(execution): keep the repair and forced-answer prompts request-only (Eve CORE-F3) by @LinuxDevil in #518
- fix(tracing): name sub-agent spans by their key, add subagent name/depth/taskId attributes (Eve MA-F10) by @LinuxDevil in #505
- fix(providers): registered providers in model strings; replace retired defaults (Eve PROV-F13) by @LinuxDevil in #513
- fix(execution): forced answer on limits.maxSteps; validate maxSteps (Eve CORE-F5) by @LinuxDevil in #522
- fix(studio): agents come from the server workspace via HttpAgentStore (Eve DUI-F2, DUI-F7) by @LinuxDevil in #521
- fix(execution): don't duplicate the system prompt when result.messages is sent back (Eve CORE-F4) by @LinuxDevil in #525
- fix(session): a turn paused for approval locks the session id (Eve EVE-0 follow-up) by @LinuxDevil in #524
- fix(channels): early channel acks on fetch hosts without ctx.waitUntil (Eve CH-F4) by @LinuxDevil in #526
- fix(handoffs): keep a handoff target's own toolSearch (Eve MA-F6) by @LinuxDevil in #523
- fix(skills): skip README files, coded errors, and read bundled skill files (Eve MA-F13) by @LinuxDevil in #519
- fix(studio): scope Ctrl+D to the canvas and surface import errors (Eve DUI-F10, DUI-F11) by @LinuxDevil in #527
- fix(compaction): cap protectedTokens below the threshold and quiet no-op events (Eve MEM-F5, F14) by @LinuxDevil in #515
- fix(tools): cap tool results; MCP media as placeholders; cap MCP descriptions (Eve TOOLS-F8) by @LinuxDevil in #529
- chore(api): regenerate reports for Skill.directory (Eve MA-F13) by @LinuxDevil in #531
- fix(channels): dedupe redelivered webhooks; Discord replay window (Eve CH-F8, CH-F13) by @LinuxDevil in #530
- fix(channels): approvals route decides a pause after a restart via sessionKey (Eve CH-F10) by @LinuxDevil in #532
- fix(session): a turn that failed for good no longer bricks the session (Eve DUR-F11) by @LinuxDevil in #533
- fix(subagents): flag a sub-agent answer cut off at the token limit (Eve MA-F15) by @LinuxDevil in #528
- docs(typedoc): cover every exports entry; ratchet undocumented count (Eve DUI-F18) by @LinuxDevil in #536
- fix(memory): recall_ score/metadata + limit cap, scope-aware remember_, escape memory tags, transcript docs (Eve MEM-F9, F11, F15, F16) by @LinuxDevil in #535
- fix(session): fork long session ids, and fork().messages without load() (Eve DUR-F19, DUI-F23) by @LinuxDevil in #537
- fix(server): /ui drops client-sent system and other non user/assistant roles (Eve TOOLS-F9) by @LinuxDevil in #539
- fix(subagents): reserve task ids at allocation, never reuse a failed task's id (Eve MA-F12) by @LinuxDevil in #538
- fix(docs): llms.txt descriptions, ticket ids, Optional section (Eve DUI-F20) by @LinuxDevil in #540
- fix(deploy): claim a KV approval before resolving it; approval id as idempotency key (Eve DUR-F9) by @LinuxDevil in #542
- fix(execution): close the ExecutionFinishReason union; unknown reasons are 'other' (Eve CORE-F14) by @LinuxDevil in #534
- fix(docs): verify tsx snippets, define placeholder names on doc pages (Eve DUI-F19) by @LinuxDevil in #543
- fix(storage): retry Windows EPERM/EACCES/EBUSY in file stores, wrap as LOUSHO_STORAGE_FAILED (Eve DUR-F13) by @LinuxDevil in #545
- docs(nextjs): rewrite approvals section around authorizeApproval (Eve DUI-F12) by @LinuxDevil in #546
- feat(providers): withRateLimit and createAgent({ rateLimit }) (Eve PROV-F14) by @LinuxDevil in #541
- fix(agent-forge): keyboard, screen-reader and contrast fixes in the studio (Eve DUI-F9) by @LinuxDevil in #547
- docs: correct doc-vs-behaviour drifts (Eve DUI-F23) by @LinuxDevil in #548
- docs(audit): B14, B16, B17 held only after the Eve fixes by @LinuxDevil in #549
- fix(cost): price prompt-cache reads and writes; add cacheWriteTokens (Eve PROV-F4) by @LinuxDevil in #544
- fix(deps): caret ranges for the pi optional peers (Eve F17) by @LinuxDevil in #550
- fix(build): route withSkills/AgentSession node imports through the Worker shim by @LinuxDevil in #555
- fix(tools): tool_search ranker matches synonyms, word families and -es plurals (Eve MEM-F13) by @LinuxDevil in #551
- fix(agent-forge): usable studio below 860px - drawers and a More menu (Eve DUI-F8) by @LinuxDevil in #552
- fix(docs): cross-platform way to create .env (Eve F15) by @LinuxDevil in #557
- fix(docs): move test files out of docs/ (Eve F16) by @LinuxDevil in #558
- docs: consistent Agent Forge / lousho studio naming (Eve F11) by @LinuxDevil in #559
- docs: explain the Node 22.19 engines floor (Eve F13) by @LinuxDevil in #561
- fix(approvals): list durable pauses after a restart, drop ones decided elsewhere (Eve TOOLS-F13, DUI-F15) by @LinuxDevil in #554
- fix(evals): trajectory evals see sub-agent tool calls (Eve MA-F9) by @LinuxDevil in #560
- fix(agent-forge): done status, Run input label, typed names, rename/delete, connection banner (Eve DUI-F21) by @LinuxDevil in #565
- fix(package): drop llms-full.txt from the npm tarball, state the size trade-off (Eve F4) by @LinuxDevil in #566
- fix(deploy): shim storage/fsRetry so Worker bundles build again (Eve E14) by @LinuxDevil in #562
- feat(memory): migrateMemoryKeys() for pre-namespacing memory items (Eve MEM-F10) by @LinuxDevil in #567
- fix(session): atomic SessionStore.saveIf for session commits (Eve DUR-F4) by @LinuxDevil in #556
- fix(deploy): Worker agent-dir sub-agents run through the native sub-agent runtime (Eve E14, MA-F5) by @LinuxDevil in #569
- fix(agent-forge): single-boxed Output node and a working minimap (Eve DUI-F22) by @LinuxDevil in #568
- fix(config): range-check modelSettings at createAgent and per call (Eve CORE-F13) by @LinuxDevil in #570
- fix(memory): fileMemory/sqliteMemory keep every item across instances and processes (Eve MEM-F8) by @LinuxDevil in #571
- fix(storage): StorageService-backed checkpoint and approval stores keep Uint8Array bytes (Eve E14, DUR-F5) by @LinuxDevil in #573
- feat(flows): checkpoint flow runs and resume them (Eve DUR-F17, 1/3) by @LinuxDevil in #563
- fix(storage): SqliteStore stores write through transactionAsync (Eve E14, DUR-F14) by @LinuxDevil in #574
- feat(providers): createAgent({ promptCaching }) marks Anthropic cache breakpoints (Eve PROV-F4) by @LinuxDevil in #564
- fix(deploy): node-server drains on SIGTERM before closing the agent (Eve DUR-F15) by @LinuxDevil in #577
- feat(subagents): subagentOptions.background false, optional task description (Eve MA-F14) by @LinuxDevil in #575
- fix(deploy): coded error for cloudflare-worker bundling failures (Eve E14, CLI-F7) by @LinuxDevil in #580
- fix(session): Stop during a model reply keeps the user's turn (Eve CORE-F11) by @LinuxDevil in #579
- feat(send): per-call maxSteps and appended instructions (Eve CORE-F13) by @LinuxDevil in #576
- fix(subagents): resolve a dynamic sub-agent's config with the caller's context (Eve CORE-F7) by @LinuxDevil in #582
- feat(durability): agent.pending() and CheckpointStore.list() for crash recovery (Eve DUR-F15) by @LinuxDevil in #572
- feat(flows): per-node retry and timeoutMs (Eve DUR-F17, 2/3) by @LinuxDevil in #578
- docs(sessions): two kinds of conversation id; schedule fires live in checkpoints (Eve DUR-F16) by @LinuxDevil in #583
- feat(memory): forget_, itemKey upserts and MemoryProvider.upsert (Eve MEM-F2) by @LinuxDevil in #581
- feat(approvals): remember and approve-with-edits decisions; once() ignores callback approvals (Eve TOOLS-F19) by @LinuxDevil in #585
- feat(flows): pause durable flows for approval, resume with the decision (Eve DUR-F17, 3/3) by @LinuxDevil in #586
- feat(stream): object.delta partial objects for output agents (Eve CORE-F13) by @LinuxDevil in #584
- fix(abort): prompt abort with a signal-ignoring provider, abortReason, mockModel honours signal (Eve CORE-F15) by @LinuxDevil in #587
- test: green typecheck:tests, test:types, typecheck:examples and channel restart tests after the Eve merges (MAIN-HEALTH) by @LinuxDevil in #588
- fix(providers): OpenRouter reports search calls and reasoning only for calls that asked for them (MAIN-HEALTH) by @LinuxDevil in #589
- fix(studio): dark-mode Save button text meets 4.5:1 contrast (MAIN-HEALTH) by @LinuxDevil in #590
- feat(approvals): a step with several calls needing approval pauses once on all of them (Eve TOOLS-F12) by @LinuxDevil in #591
- feat(channels): channels and session routes decide each call of a step paused on several (Eve TOOLS-F12) by @LinuxDevil in #593
- docs: green docs:verify-snippets, docs:llms:check, docs:ratchet and api:check after the Eve merges (MAIN-HEALTH) by @LinuxDevil in #592
- refactor: make the fallow gate pass after the Eve merges (MAIN-HEALTH) by @LinuxDevil in #594
- fix(ci): green the zod 4 peers jobs and pack-smoke (MAIN-HEALTH) by @LinuxDevil in #595
- test(audit): start the incident-responder harness from a clean store by @LinuxDevil in #596
- fix(cli): load agent-dir tools from npm installs, ESM typings, scaffold and CLI fixes by @LinuxDevil in #597
- fix(security): secure-by-default HTTP routes, dev server, worker and webhook adapter by @LinuxDevil in #598
- fix(durability): run leases, at-most-once approved calls, bounded history, store races by @LinuxDevil in #599
- fix(integrations): exporter isolation, MCP cancel/optional servers, UI stream endings, OTel attributes, coverage gates by @LinuxDevil in #600
- fix(runtime): surface in-response provider failures, timeouts, ai v4 tool errors, pricing, serialization by @LinuxDevil in #601
- docs: port docs-site corrections into the SDK docs and add an alpha.19 upgrade guide by @LinuxDevil in #602
- fix(durability): round 2 — fenced run leases, safe early takeover, fileStore upgrade path, history pruning by @LinuxDevil in #604
- fix(security): round 2 — channel guards, no session squatting, proxy-aware origins, closed Worker by default by @LinuxDevil in #603
- fix(integrations): round 2 — OTel span cap keeps open spans, MCP optional in specs, safer serveMcp cancel, async exporters by @LinuxDevil in #605
- fix(runtime): round 2 — unsupported content code, typed custom providers, ai 7 tool errors, JSON replies to streams by @LinuxDevil in #606
- fix(cli): round 2 — zod-agnostic declarations, build peer warnings, CJS hot reload, consistent exit codes by @LinuxDevil in #607
- fix(security): round 3 — fail closed for stored sessions whose owner is not on record by @LinuxDevil in #608
- fix(providers): round 3 — plain tool errors for every @ai-sdk/openai model on ai 7; typed built-in configs in create() by @LinuxDevil in #610
- fix(session): round 3 — keep turn history bounded when each turn uses a new store by @LinuxDevil in #609
- fix(cli): round 3 — dev keeps watching recreated folders, exit codes, LOUSHO_PEER_MISSING to clients, cross-copy instanceof by @LinuxDevil in #611
- docs(audit): Eve-2 adversarial audit — 8 verified findings in fix-round code by @LinuxDevil in #614
- fix(providers): unindexed streamed tool-call ids dedupe; parsed stream detection (Eve2-F7/F8) by @LinuxDevil in #615
- fix(server): atomic session ownership claim - deny a lost claim instead of streaming in a foreign session (Eve2-F1) by @LinuxDevil in #616
- fix(session): fence turn-failure writes under the run lease; detect paused turns without the .paused marker (Eve2-F2, Eve2-F3) by @LinuxDevil in #617
- fix(execution): grouped sub-agent edited args validated, abort ends wedged tool waits, re-pause keeps approvalIds (Eve2-F4/F5/F6) by @LinuxDevil in #618
- docs: round 4 — runnable snippet gate, examples import the package, id rules, CHANGELOG cleanup by @LinuxDevil in #612
- docs(audit): record Eve-2 findings fixes and packed-build verification by @LinuxDevil in #619
- fix(cli): round 4 — kits load under node, base URLs on ai v4, cross-copy errors, usable templates, eval/dev accuracy, slimmer image by @LinuxDevil in #613
- feat(audit): real-task harnesses — products-admin CRUD build + real-data modes by @LinuxDevil in #620
- feat(audit): replicate real-world agent harnesses — sdr-outreach, data-analyst, eval-loop by @LinuxDevil in #621
- chore: remove internal audit harnesses, planning docs and scratch files by @LinuxDevil in #622
- docs: instructions is the one documented createAgent name; deprecate prompt by @LinuxDevil in #624
- fix(providers): retry malformed or cut-off provider responses before any output by @LinuxDevil in #625
- docs: run a job once, structured output vs side-effect tools, provider fetch by @LinuxDevil in #627
- chore: CI on main, honest README claims, comparison page, gpt-4.1-mini default by @LinuxDevil in #626
- fix(deploy): provider-class detection for node-server deps; correct createDeployedServer docs by @LinuxDevil in #628
- fix: error codes on session stream, fallback model ids, partial run cost by @LinuxDevil in #631
- fix(tools): grep timeout counts only matching time, not file reads by @LinuxDevil in #632
- chore: drop source maps from the tarball, add size budgets (C4, C10) by @LinuxDevil in #630
- test(providers): complete the LLMProvider stub in the malformed-response retry test by @LinuxDevil in #633
- feat(durable): agent.recover() resumes crashed runs automatically by @LinuxDevil in #629
- fix: permission-rule tool typos, dev template piped stdin, eval soft-failure counts by @LinuxDevil in #635
- fix(session): keep the input of a turn whose first model call fails by @LinuxDevil in #640
- feat(agent-dir): retry/output config keys and typed loadAgentDir output by @LinuxDevil in #636
- chore(triggers)!: remove deprecated trigger adapters by @LinuxDevil in #623
- fix(build): never copy .env or the .lousho session store into node-server/docker builds by @LinuxDevil in #634
- fix: eval --replay skips mockModel; quiet doctor/cost warnings; docs fixes by @LinuxDevil in #641
- fix(flows): run leases for durable flow runs; typed toolCall placeholders; agents in flows docs by @LinuxDevil in #639
- fix(workspace): file tools refuse paths through .git (deny option) by @LinuxDevil in #637
- fix(subagents): a sub-agent's own memory works on task runs; subagentOptions.continuation by @LinuxDevil in #638
- refactor: fix fallow complexity gate and re-baseline bundle size budget by @LinuxDevil in #643
- feat: surface tool failures, failed-run usage and run lastError by @LinuxDevil in #642
- fix(test): green test suite on Windows by @LinuxDevil in #644
- chore: drop internal ticket ids from comments, tests, docs and registry by @LinuxDevil in #646
- fix(ci): measure the tarball budget with Agent Forge built by @LinuxDevil in #647
- fix(cli): lousho add leaves no empty dir on refusal (Eve-3) by @LinuxDevil in #648
- fix(session): non-checkpointed pause lock, monotonic turn ids, memory races (Eve-3) by @LinuxDevil in #649
- fix(server): close Eve-3 server/channel findings — body caps, approval binding, CSRF trust by @LinuxDevil in #645
- Release/sdk alpha21 by @LinuxDevil in #650
- chore: version the CHANGELOG (alpha.20-23) and guard releases by @LinuxDevil in #651
- docs: honest, dated competitor comparison by @LinuxDevil in #652
- chore: prune stale lockfile and scrub internal ticket ids by @LinuxDevil in #653
- feat: fromAiSdkTools() adapter and AI SDK migration guide by @LinuxDevil in #654
- fix(mcp): honour OpenAPI nullable; name server and tool in failed-call errors by @LinuxDevil in #655
- fix(flows): object interpolation, first-step resume, compacted llmCall errors, save-before-step-complete by @LinuxDevil in #656
- fix(providers): retry a 200 streaming reply with an unparseable body by @LinuxDevil in #657
- fix(subagents): accept out-of-steps objects, count delegated tool errors, share the lead budget by @LinuxDevil in #658
- fix(server): SSE heartbeat and coded statuses on the session HTTP API by @LinuxDevil in #659
- fix(workspace): check the deny list through links; write files atomically by @LinuxDevil in #664
- fix(cli): consumer-found DX fixes for chat, .env, doctor and eval by @LinuxDevil in #663
- feat(providers): google/ model prefix, vendor routes on unknown prefixes, doctor ai@5 hint by @LinuxDevil in #662
- fix(output): send responseFormat only on calls that offer no tools by @LinuxDevil in #660
- fix(workspace): back up before writing; make edit_file/write_file replay-safe by @LinuxDevil in #665
- fix(cli): repair doctor's Google ping target after a merge race by @LinuxDevil in #666
- ci: green main, one workflow with two jobs by @LinuxDevil in #668
- fix(build): let an agent directory's auth.ts export authorizeApproval / authorizeSession by @LinuxDevil in #661
- feat(server): Idempotency-Key on POST /chat by @LinuxDevil in #667
- Release/sdk alpha21 by @LinuxDevil in #669
Full Changelog: v1.0.0-alpha.19...1.0.0-alpha.24