Commit Graph

37952 Commits

Author SHA1 Message Date
Peter Steinberger
32c84b0f41 feat(skills): capture reusable techniques from successful work (#105674)
* feat(skills): capture reusable experience safely

* feat(skills): review completed work for reusable learning

* docs(skills): explain self-learning

* docs: clarify self-learning runtime scope

* fix(skills): harden autonomous workshop reviews

* test(skills): align review prompt fixture
2026-07-13 00:22:06 -07:00
Peter Steinberger
6b506e9070 improve(gateway): reduce context-cache startup delay (#106117)
* perf(gateway): defer context cache prewarm

* refactor(gateway): keep prewarm internals private
2026-07-13 00:06:18 -07:00
Jason (Json)
4e1224ddbe fix(agents): follow through on promised asynchronous work (#105958)
* fix(agents): close promised asynchronous work loops

* fix(agents): close promised asynchronous work loops

* refactor(agents): keep promised work policy focused

* refactor(agents): preserve prompt module documentation

* style(agents): keep prompt renderer within LOC ratchet

* fix(agents): close promised asynchronous work loops

* fix(agents): close promised asynchronous work loops
2026-07-13 00:56:04 -06:00
Peter Steinberger
4cbbb86d5e refactor(zalouser): share offset-preserving text chunk ranges (#105842)
* refactor(zalouser): share text chunk ranges

* chore(plugin-sdk): refresh combined API baseline
2026-07-12 23:46:16 -07:00
Ben Badejo
be7241b656 fix: deliver completed replies when post-turn compaction fails (#105156)
* fix(agents): preserve final replies across compaction failures

* test(agents): normalize nullable pending final

* chore(deadcode): drop used outbound payload export baseline

* refactor(agents): clarify pending final compaction delivery guard

* fix(agents): preserve media in pending final recovery

* fix(agents): require persisted final marker before compaction

* fix: keep pending final marker result internal

* test: update plugin SDK surface budget

---------

Co-authored-by: Benjamin Badejo <ben@benbadejo.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 23:46:04 -07:00
Peter Steinberger
adf6b08ab4 refactor: consolidate duration parsing and formatting (#105988)
* refactor: consolidate duration handling

* docs: leave release notes to release workflow

* fix: preserve build timing precision

* ci: align plugin sdk surface budgets
2026-07-12 23:38:22 -07:00
Vincent Koc
4ea758dcf9 fix(sqlite): keep plugin index reads read-only (#106103) 2026-07-13 14:37:18 +08:00
Peter Steinberger
24ad2484e4 refactor(gateway): split websocket message handler (#106030)
* refactor(gateway): split websocket message handler

* chore(gateway): refresh dead export baseline

* fix(gateway): satisfy websocket handler checks

* fix(gateway): keep transcript read target internal

* fix(gateway): refresh plugin surface budget
2026-07-12 23:36:32 -07:00
Peter Steinberger
82d53fd91d fix(ci): stabilize CLI startup memory gate 2026-07-13 02:31:44 -04:00
Peter Steinberger
16fa19cd72 improve(control-ui): compress and cache bundled assets (#105890)
* perf(control-ui): compress bundled assets

* chore(control-ui): remove release-owned changelog edit

* fix(control-ui): release assets before compression

* refactor(control-ui): split static response helpers

* perf(control-ui): precompress bundled assets

* refactor(control-ui): keep encoding internals private

* chore(control-ui): refresh LOC baseline
2026-07-12 23:13:04 -07:00
NIO
70b3467484 fix(media): bound hung remote downloads in media store (#104624)
* fix(media): bound remote download lifecycle

Co-authored-by: hugenshen <hu.genshen@xydigit.com>

* fix(media): keep download test seam internal

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 23:12:03 -07:00
Peter Steinberger
0633afe6a5 fix(config): reject schema-only keys (#106031)
* fix(config): reject schema-only keys

* chore(config): refresh plugin SDK baseline

* test(config): remove stale remote enabled fixtures
2026-07-12 23:10:12 -07:00
Peter Steinberger
6410e33cb0 refactor(ci): restore LOC ratchet headroom (#106063)
* refactor(ci): restore TypeScript LOC ratchet

* fix(ci): keep source reply item type internal
2026-07-12 23:09:25 -07:00
Paul Campbell
008f04a656 feat(mxc): add Windows MXC sandbox backend (#97086)
* feat(mxc): add Windows MXC sandbox backend

Add the official MXC sandbox plugin package with Windows ProcessContainer execution, plugin-owned MXC SDK dependency packaging, host-backed filesystem bridge support, and configured MXC policy file loading via mxcPolicyPaths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(mxc): preserve Windows binary override paths

* fix: remove stray sandbox barrel export

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 9ea19539-b8ca-44fb-93bd-b8496e3deb2c

* fix(mxc): address sandbox review feedback

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): satisfy test type checks

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): clarify protected skill enforcement

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* test(mxc): align fail-closed expectations

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): satisfy extension lint

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(plugin-sdk): narrow fs-safe remove surface

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* fix(mxc): repair rebased CI failures

* fix(scripts): declare shrinkwrap override normalizer

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Gio Della-Libera <235387111+giodl73-repo@users.noreply.github.com>
Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-07-12 23:07:25 -07:00
Peter Steinberger
1cbb380f02 fix: resolve agent identity workspace (#106087) 2026-07-12 23:06:53 -07:00
Peter Steinberger
ebe69fd238 fix(ci): stabilize dead-export ratchet (#105945)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-12 23:03:53 -07:00
Peter Steinberger
a5883c33d1 refactor: use semver package for version ordering (#105944)
* refactor: use semver package for version ordering

* refactor: centralize semver validation

* chore: keep release notes in PR body

* refactor: update semver LOC ratchet
2026-07-12 23:02:25 -07:00
Vincent Koc
f33ab243cf fix(sqlite): reject runtimes vulnerable to WAL corruption (#106065)
* fix(sqlite): require WAL-reset-safe Node runtime

* docs(sqlite): document safe Node runtime floor

* fix(sqlite): defer runtime library validation until use

* fix(ci): align startup memory with Node 24.15
2026-07-13 13:59:00 +08:00
Peter Steinberger
20c5b2282e fix: render complete HTML entity set in agent workflows (#105957)
* fix(agents): decode full HTML entity set

* fix(agents): preserve mixed-case nbsp extraction

* chore: leave release notes to release automation

* chore(ci): lower web fetch LOC baseline

* fix(agents): use literal entity radices
2026-07-12 22:54:46 -07:00
Peter Steinberger
a0e5c15988 refactor(errors): consolidate shared error formatting (#105927)
* refactor(errors): consolidate shared formatting

* fix(errors): preserve structured diagnostic details

* fix(errors): preserve nested cause compatibility

* chore(ci): ratchet reduced formatter files
2026-07-12 22:48:55 -07:00
Peter Steinberger
db252ac417 refactor: move usage cost cache into agent database (#106051)
* refactor(infra): rename usage cache lock owner field

* refactor(state): migrate usage cost cache to SQLite

* fix(state): satisfy SQLite migration gates

* refactor(state): keep usage cache access synchronous

* chore: leave release notes to release workflow

* fix(state): satisfy dependency export gate
2026-07-12 22:39:54 -07:00
Peter Steinberger
8c7f3d087f refactor: use native abort signal composition (#105947)
* refactor: use native abort signal composition

* style(discord): preserve media module LOC baseline

* chore(ci): lower abort refactor LOC baselines
2026-07-12 22:39:43 -07:00
Peter Steinberger
1edc8b6c27 refactor(security): centralize timing-safe secret comparisons (#105989)
* refactor(plugins): reuse safe secret comparator

* refactor(security): centralize remaining secret comparisons

* chore(ci): lower refactored file baselines
2026-07-12 22:37:21 -07:00
Peter Steinberger
f025311e1b fix(config): preserve nested defaults across deep merges (#105953)
* fix(config): preserve deep-merge semantics with defu

* chore: keep release notes in PR body

* fix(config): avoid defu type suppressions

* chore(ci): ratchet merged helper line counts
2026-07-12 22:36:45 -07:00
Peter Steinberger
6f0072d574 improve(channels): reuse loaded plugin lookup view (#105977)
* perf(channels): memoize loaded plugin lookups

* chore(channels): update deadcode export baseline

* test(channels): preserve loaded registry mock exports
2026-07-12 22:35:23 -07:00
Peter Steinberger
5cb074ece5 refactor: dedupe small async primitives (#105961)
* refactor(sqlite): remove unused async Kysely driver

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>

* refactor(media): share promise memoization

* chore(sqlite): prune stale Kysely guardrails

* chore(media): lower runner LOC baseline

* style(shared): format promise memo tests

* chore(deadcode): refresh main export baseline

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-07-12 22:34:53 -07:00
Josh Avant
bb75950159 fix(worktrees): normalize dashed base refs (#104105) (#106048) 2026-07-13 00:34:26 -05:00
Peter Steinberger
b9f0246765 feat(plugin-sdk): add shared HTML escaping seam (#105975) 2026-07-12 22:33:53 -07:00
Ayaan Zaidi
6908e6a63b fix(gateway): allowlist default-model config edits and explain protected-path refusals
agents.list[].model was agent-tunable while agents.defaults.model was
refused — the same capability gated by config shape (partially reverts
the defaults-spelling removal from #90145; token/auth/exec paths stay
protected). The bare refusal string also caused agents to misread the
injection boundary as an authorization failure and argue with the owner;
it now states the contract, the remedy, and the agent-tunable paths.
Guard moved to gateway-config-guard.ts (gateway-tool.ts 652->390).

Closes #106059
2026-07-13 11:03:50 +05:30
Peter Steinberger
28a4effd4c improve(gateway): reduce startup work before readiness (#105913)
* perf(gateway): defer optional startup work

* refactor(gateway): isolate optional startup work

* fix(gateway): refresh deferred lifecycle state

* chore(gateway): ratchet startup file sizes

* fix(ci): reconcile dead export drift
2026-07-12 22:18:10 -07:00
Peter Steinberger
5084280d55 refactor: factor transport stream fixtures (#106006)
* test: factor OpenAI transport fixtures

* test: share dispatch config harness
2026-07-12 22:02:36 -07:00
Peter Steinberger
7c99322e3f chore(ci): shrink TypeScript LOC guard files 2026-07-13 05:58:32 +01:00
Ayaan Zaidi
143fed81c1 feat(sessions): reopen history around search hits 2026-07-13 10:27:29 +05:30
Ayaan Zaidi
432da8b3cb feat(agent): preserve interrupted turn context
Inspired by Codex: codex-rs/core/src/context/turn_aborted.rs and codex-rs/core/src/tasks/mod.rs.
2026-07-13 10:27:29 +05:30
Peter Steinberger
ac31549853 fix(cron): avoid ambiguous direct delivery retries (#105941) 2026-07-12 21:56:47 -07:00
Ayaan Zaidi
9d07a96ac9 fix(agents): route unbound OAuth compaction through auth-aware harness selection
Out-of-run compaction (budget preflight, /compact, subagent announce)
forced harness selection to the core runtime whenever a session had no
bound/planned/explicit harness, so ChatGPT-OAuth-only sessions on the
implicit Codex runtime failed auth against openai/openai-responses and
subagent completion announcements were dropped after retries.

Leave the selection override unset in both compaction paths so prepared
OAuth auth can select the credential-owning harness (as live runs do),
and ensure the policy-selected harness plugin is loaded before
selection. Native transcript compaction stays gated on the resolved
harness only.

Fixes #90925
2026-07-13 10:11:08 +05:30
Ayaan Zaidi
4dc6e182c3 fix(codex): preserve legacy termination when final is omitted
Omitted final on a confirmed message-tool-only source reply keeps main's terminate-on-delivery semantics and records a completed marker; only explicit final=false defers termination. Project the Codex-only final schema property in place on attempt-fresh tools instead of adding a public plugin-SDK clone export, resolving the SDK surface budget failure.
2026-07-13 10:09:52 +05:30
Glucksberg
d8a84a29cb fix(codex): require explicit final source delivery
Distinguish progress from terminal source delivery across Codex telemetry,
payload suppression, terminal failure routing, and stranded-reply recovery.
Preserve legacy behavior when explicit markers are absent.
2026-07-13 10:09:52 +05:30
Peter Steinberger
9df42e1d67 ci: repair main ratchet drift 2026-07-13 00:12:36 -04:00
Developers Digest
8809848b19 feat(firecrawl): add keyless Firecrawl Search (Free) provider + richer firecrawl_search options (#97078)
* feat(firecrawl): add keyless Firecrawl Search (Free) provider + richer firecrawl_search options

Add an opt-in, keyless 'firecrawl-free' web_search provider (Firecrawl
Search (Free)) mirroring the Parallel plugin's parallel-free pattern:
requiresCredential false, no autoDetectOrder, never auto-selected. The
free path is credential-isolated — it never resolves or sends any
Firecrawl API key (no Authorization header), so opting out of credentials
cannot leak a configured/paid key — and its results and cache key carry a
distinct 'firecrawl-free' provider identity. The keyed 'firecrawl'
provider and core search auto-select behavior are unchanged, honoring the
maintainers' opt-in policy for keyless search.

Registered in index.ts, the web-search-provider barrel, the
web-search-contract-api metadata artifact (the onboarding/setup source),
manifest contracts, the official external plugin catalog snapshot, and
the doctor/contract registries.

Also extend the firecrawl_search tool to /v2/search parity:
includeDomains/excludeDomains (mutually exclusive), tbs, location,
country, and raise the result cap to 100.

* docs: regenerate docs_map for firecrawl heading rename

---------

Co-authored-by: developersdigest <jonathan@sideguide.dev>
2026-07-12 21:04:43 -07:00
Peter Steinberger
1aff6da827 refactor(test): use shared timeout helper (#105918) 2026-07-12 20:51:51 -07:00
Peter Steinberger
7a8e45f43f test: standardize HTTP mocks on MockAgent (#105925) 2026-07-12 20:50:40 -07:00
Markus
6dfa4c27a3 fix(outbound): cap initial gateway send wait 2026-07-13 09:12:03 +05:30
Markus
f9eeedb231 test(outbound): cover bounded reconciliation fallback 2026-07-13 09:12:03 +05:30
Markus
d00ed02f62 fix(outbound): bound message timeout reconciliation 2026-07-13 09:12:03 +05:30
Glucksberg
9c75a09431 fix: reconcile timed-out gateway message actions 2026-07-13 09:12:03 +05:30
Peter Steinberger
0d90ca6b5d refactor(config): retire flat and scalar streaming keys from matrix, feishu, and qqbot (#105808)
* feat(doctor): migrate legacy matrix/feishu/qqbot streaming spellings to nested config

* test(matrix): shorten setup fixture tokens below the review secret-scanner threshold

* refactor(config): retire flat/scalar streaming keys from matrix, feishu, and qqbot

* docs: describe nested-only streaming config for matrix, feishu, and qqbot

* fix(qa-matrix): compose nested streaming config for the matrix QA harness

* test(feishu): compose negative webhook fixtures outside the GHSA opengrep pattern

* docs: refresh generated docs map

* test(feishu): compose negative webhook fixtures from lint-clean bases outside the GHSA opengrep pattern

* fix(qa-lab): rewrite crabline flat streaming config into the nested channel shape

* chore(config): regenerate channel config metadata and plugin-sdk API baseline for nested-only streaming

* chore(plugin-sdk): absorb main-side deprecated pairing/conversation pin drift

* fix(qa-lab): consume Crabline nested streaming config
2026-07-12 20:33:14 -07:00
Peter Steinberger
a674ce5e0d refactor(plugins): trim path safety facade (#105876)
* refactor(plugins): trim path safety facade

* chore(deadcode): reconcile export baseline

* chore(deadcode): refresh baseline after main sync

* chore(deadcode): align baseline with linux scan
2026-07-12 20:24:58 -07:00
mushuiyu886
cf0b80bf7e fix(gateway): clamp MCP loopback body timeout (#105769)
* fix(gateway): clamp MCP loopback body timeout

* test(gateway): keep stalled request auth strict

* test(gateway): name loopback request auth

* test(gateway): scope overflow auth fixture

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 20:13:59 -07:00
Peter Steinberger
d49acffa5e refactor(infra): consolidate retry scheduling (#105789)
* refactor(infra): consolidate retry scheduling

* fix(build): wire shared retry package

* fix(build): resolve retry package in source graphs

* fix(infra): keep retry adapter dependency-free
2026-07-12 19:58:55 -07:00