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
Peter Steinberger
c3dbaf4375
refactor: split hot TypeScript modules and add LOC ratchet ( #105894 )
...
* refactor: split high-churn agent and chat modules
* ci: enforce TypeScript LOC ratchet
* ci: anchor LOC baseline updates to merge base
* test: cover LOC ratchet check plans
* chore: refresh TypeScript LOC baseline
2026-07-12 19:57:42 -07:00
Peter Steinberger
2186cdf36e
fix(i18n): restore Text(title) wrapper contract for settings accessibility labels
...
0aabf56242 relaxed the wrapper contract to .accessibilityLabel(title) while
the same pattern stayed in RAW_LOCALIZATION_BYPASSES, and #105859 then
restored Text(title) in SettingsProTabSections.swift, leaving main's
apple-app-i18n guard failing in both directions. Revert the contract to the
original required pattern; both guard tables validate against current main.
2026-07-12 19:47:54 -07:00
Vincent Koc
f26793ca54
refactor(qa-lab): trim process metric parser exports ( #105891 )
2026-07-13 10:42:29 +08:00
Peter Steinberger
c81ae0412c
fix(ios): localize Settings accessibility labels ( #105859 )
...
* fix(ios): preserve localized accessibility labels
* chore(i18n): refresh native source inventory
2026-07-12 19:33:27 -07:00
Vincent Koc
e9e7d385e0
refactor(plugin-runtime): trim task facade exports ( #105878 )
2026-07-13 10:25:52 +08:00
Ayaan Zaidi
0aabf56242
chore(i18n): track accessibilityLabel(title) wrapper contract
...
5e9bc0916f switched two SettingsProTabSections accessibility labels
from .accessibilityLabel(Text(title)) to .accessibilityLabel(title);
title is LocalizedStringKey so lookup stays localized, but the wrapper
contract in apple-app-i18n.ts still required the old spelling and the
tooling shard only runs on PRs, so main broke silently.
2026-07-13 07:46:38 +05:30
Peter Steinberger
38e636542d
fix(gateway): keep watch logs visible in tmux
2026-07-13 03:14:49 +01:00
Vincent Koc
afb282ee68
refactor(infra): trim Windows firewall exports ( #105856 )
2026-07-13 10:06:10 +08:00
Peter Steinberger
c3ee86a068
refactor(browser): localize internal support types ( #105839 )
2026-07-12 18:59:01 -07:00
Peter Steinberger
58e8440190
fix(docs-i18n): reject leaked placeholder variants
2026-07-12 21:53:44 -04:00
Vincent Koc
8091292e3e
refactor(infra): trim advertised host exports ( #105834 )
2026-07-13 09:40:34 +08:00
Peter Steinberger
43901be298
refactor(agents): trim embedded helper dead exports ( #105815 )
...
* refactor(agents): trim embedded helper exports
* chore(deadcode): refresh export baseline
* chore(deadcode): sync export baseline
* chore(deadcode): reconcile export baseline
2026-07-12 18:34:45 -07:00
Peter Steinberger
3613b83c6c
refactor(browser): trim private Playwright exports ( #105794 )
...
* refactor(browser): trim private Playwright exports
* chore(deadcode): refresh export baseline
* chore(deadcode): refresh current baseline
* chore(deadcode): refresh latest baseline
2026-07-12 18:30:34 -07:00