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
fcb45b4400
feat(ui): render streaming chat markdown live instead of plain text ( #106062 )
...
Streaming assistant replies in the Control UI now render markdown live: the in-flight tail is repaired with remend (zero-dep, Apache-2.0, extracted from Vercel's Streamdown) before the existing markdown-it + DOMPurify pipeline, and open code fences stream as live-highlighted code blocks. Deletes the plain-text streaming tail path (toStreamingPlainTextHtml) and extracts an uncached render core so tail deltas stop churning the markdown LRU cache. Closes #106053
2026-07-12 23:11:45 -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
Peter Steinberger
9cdf166d2e
refactor(mattermost): trim monitor gating facade ( #106021 )
...
* refactor(mattermost): trim monitor gating facade
* chore(ci): shrink Mattermost LOC baseline
* chore(ci): refresh deadcode export baseline
2026-07-12 23:09:15 -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
aa04722c5c
fix(ci): make TypeScript LOC growth reviewable ( #105952 )
2026-07-12 23:06:30 -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
2454511480
refactor(sms): consolidate webhook test hooks ( #106072 )
2026-07-13 14:02:10 +08: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
4349687b9d
refactor(extensions): burn down Discord and Slack dead exports ( #106017 )
...
* refactor(discord): trim dead internal exports
* refactor(slack): trim dead internal exports
* test(discord): cover inherited streaming migration
* chore(tooling): ratchet reduced extension LOC
* refactor(discord): remove stale approval helper import
* chore(deadcode): remove reintroduced transcript baseline
2026-07-12 22:58:22 -07:00
Peter Steinberger
e4a17ee160
refactor(ui): split Workboard controller modules ( #105995 )
...
* refactor(ui): split Workboard controller modules
* chore(ui): track moved Workboard export
* chore(ui): avoid unrelated LOC baseline validation
* ci: refresh TypeScript LOC baseline
* ci: drop stale transcript export baseline
2026-07-12 22:55:07 -07: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
Jason (Json)
38808a43d6
ci: remove stale transcript deadcode baseline ( #106064 )
2026-07-13 13:46:59 +08:00
Peter Steinberger
807491e0f1
ci: consolidate SMS webhook test reset ( #106070 )
...
* ci: clear stale dead-export surfaces
* ci: align dead-export baseline
2026-07-12 22:41:35 -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
Vincent Koc
6a0eecdb44
fix(release): separate code and release SHA validation ( #105948 )
2026-07-13 13:38:19 +08:00
Vincent Koc
a778f891fa
fix(ci): repair main validation regressions ( #106037 )
2026-07-13 13:37:53 +08: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
125ad94d6d
ci: remove stale transcript export baseline
2026-07-13 01:26:06 -04:00
Peter Steinberger
26210c1600
refactor: remove browser and codex dead exports ( #105867 )
...
* refactor(browser): collapse Playwright export paths
* refactor(browser): remove dead plugin exports
* refactor(codex): remove dead app-server exports
* refactor(codex): remove remaining dead exports
* test(codex): use canonical private-type owners
* test(browser): isolate proxy startup state
* test(browser): remove stale chrome imports
* refactor(codex): privatize remaining helpers
* chore(deadcode): refresh export baseline after rebase
* refactor(browser): finish canonical helper ownership
* refactor: fix dead-export cleanup gates
* refactor(codex): keep runtime facades LOC-neutral
* chore(ci): refresh TypeScript LOC baseline
* chore(deadcode): refresh ratchets after rebase
* chore(ci): refresh LOC baseline after main advance
* chore(deadcode): align ratchets with latest main
2026-07-12 22:23:11 -07:00
Peter Steinberger
d13e3c6adf
ci: clear unused-export drift from sms webhook and transcript readers ( #106052 )
2026-07-12 22:19:30 -07:00
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
2ecd485cd5
refactor(ui): deduplicate layout, clipboard, and polling scaffolds ( #106003 )
...
* refactor(ui): share dock panel layout
* refactor(ui): centralize clipboard writes
* refactor(ui): centralize polling lifecycle
* refactor(ui): reuse shared byte formatter
* chore(ci): refresh UI LOC ratchet
* fix(ui): keep dock layout type internal
2026-07-12 22:05:09 -07:00
Peter Steinberger
2a6ccac40c
ci: tolerate inherited TypeScript LOC drift ( #106042 )
...
* ci: reconcile LOC baseline drift safely
* ci: tolerate pre-existing LOC drift
2026-07-12 22:04:36 -07:00
Ayaan Zaidi
143fed81c1
feat(sessions): reopen history around search hits
2026-07-13 10:27:29 +05:30
Peter Steinberger
415bd25313
fix(ci): repair TypeScript LOC ratchet baseline ( #105991 )
2026-07-12 21:37:45 -07:00
Peter Steinberger
4fe5002191
fix(docs-i18n): block marker leaks at output
2026-07-13 00:18:33 -04:00
Peter Steinberger
4d06181c7a
ci: drop stale sidebar export baselines
2026-07-13 00:18:28 -04:00
Peter Steinberger
c808b01a04
ci: refresh ratchet after main advance
2026-07-13 00:13:14 -04:00
Peter Steinberger
3bac8923e6
ci: clear unused export drift
2026-07-13 00:12:36 -04:00
Peter Steinberger
9df42e1d67
ci: repair main ratchet drift
2026-07-13 00:12:36 -04:00
Peter Steinberger
e43bd3d57b
refactor(ui): localize lobster pet internals ( #105955 )
...
* refactor(ui): localize lobster pet internals
* chore(deadcode): reconcile current UI export drift
2026-07-12 21:08:24 -07: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
156f4c89ed
refactor(ui): fold sidebar More section into a popup menu ( #105906 )
...
The sidebar's expandable "MORE" section (uppercase header, chevron, persisted
sidebarMoreExpanded pref, dedicated "Edit pinned items" row) collapses into a
single More nav row that opens a transient popup menu with the unpinned
routes, dynamic plugin tabs, and the pin editor entry. Menu rows are real
anchors, so Cmd/middle-click keeps native link behavior; the More row carries
the active highlight when the current route lives inside the menu. The
sessions list gets the reclaimed vertical space, and one persisted setting is
gone (stale keys are ignored on load). The nav rows and menus move to
app-sidebar-nav-menus.ts to keep app-sidebar.ts under the TS LOC ratchet.
Docs: docs/web/control-ui.md sidebar-navigation section updated.
Fixes #105905
2026-07-12 20:33:51 -07:00
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
Vincent Koc
08ab604a1e
refactor(discord): remove model picker barrel ( #105908 )
2026-07-13 10:59:59 +08: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
Peter Steinberger
dce8eed0b9
ci(deadcode): restore enforced unused-export ratchet ( #105826 )
...
* ci(deadcode): restore export ratchet
* chore(deadcode): refresh export baseline
* refactor(sessions): remove obsolete patch writer
* refactor(deadcode): classify current export residue
* fix(deadcode): preserve exported signature types
* chore(deadcode): sync export baseline after rebase
* chore(deadcode): classify pairing test exports
* fix(ci): refresh plugin SDK declaration budget
2026-07-12 19:58:38 -07:00