Peter Steinberger
46c712fd7e
fix(gateway): align prepared model auth readiness ( #121090 )
2026-08-09 09:05:38 -07:00
Peter Steinberger
693b62f69e
fix(secrets): reuse prepared plugin metadata ( #120863 )
2026-08-09 03:37:29 -07:00
Peter Steinberger
da463bfef4
fix(gateway): hydrate auth snapshots at startup ( #120977 )
...
Refs #120951 .
2026-08-09 00:55:07 -07:00
Vincent Koc
38039f5ea8
fix(secrets): preserve Windows ACL diagnostics ( #120211 )
...
* fix(secrets): preserve Windows ACL diagnostics
* fix(secrets): make Windows path security proof deterministic
* test(secrets): isolate Windows ACL tool failures
* test(secrets): preserve ACL preload process contract
* test(ci): route Doctor ACL proof to Windows
* test(qa): normalize Clack note borders
* test(ci): register Windows ACL preload for deadcode checks
2026-08-09 03:48:42 +08:00
Peter Steinberger
0aa85c7f83
perf(gateway): reuse lifecycle plugin metadata instead of per-turn rescans ( #120344 )
...
* perf(gateway): reuse lifecycle plugin metadata
* test(commands): expect workspace-scoped snapshot reuse in sessions metadata prep
2026-08-07 14:20:21 -07:00
Peter Steinberger
10e60fa0ce
refactor(plugins): shared legacy-state doctor migration and simple secret contracts ( #120346 )
...
* refactor(plugins): share legacy JSON doctor migration
* refactor(discord): share account token inspection cascade
* refactor(plugins): share simple channel secret contracts
* refactor(discord): keep token inspector private
2026-08-07 13:55:31 -07:00
Peter Steinberger
b4a26783f7
refactor(test): consolidate duplicated requireRecord and provider HTTP mock helpers ( #119982 )
...
* refactor(test): consolidate duplicated test helpers
* test: remove stale record guard import
* fix(test): remove orphaned record guards
* refactor(test): keep record requirement messages exhaustively typed
* fix(test): keep packages/ai record guard package-local
2026-08-06 14:48:01 -07:00
Vincent Koc
fd1662f49c
fix(cli): retire invalid secret flags and prove doctor recovery ( #118926 )
...
* test(qa): add doctor CLI recovery coverage
* test(qa): secure doctor exec SecretRef proof
* test(qa): gate doctor systemd recovery proof
* test(qa): normalize doctor terminal output
* test(qa): close doctor probe sockets
* test(qa): classify doctor probe as foreign
* test(qa): track doctor probe sockets
* test(qa): retain doctor instance narrowing
* test(qa): preserve observed doctor recovery proof
* test(qa): keep doctor recovery on stable dist
* test(qa): honor Windows exec ACL blocking
* test(qa): use canonical home for systemd recovery
* test(qa): follow bounded gateway recovery
* test(qa): accept lifecycle service label
* test(qa): align doctor recovery contract
Punchcard-Session: crisp-lantern-orchard-nv
* docs(secrets): remove retired provider bypasses
Punchcard-Session: crisp-lantern-orchard-nv
* test(qa): isolate doctor recovery target
Punchcard-Session: crisp-lantern-orchard-nv
* fix(cli): retire invalid secret provider flags
Punchcard-Session: crisp-lantern-orchard-nv
* test(qa): isolate doctor supervisor mode
Punchcard-Session: crisp-lantern-orchard-nv
* fix(plugins): remove dead secret path bypass
Punchcard-Session: crisp-lantern-orchard-nv
* chore: drop release-owned changelog entry
Punchcard-Session: crisp-lantern-orchard-nv
* test(qa): isolate doctor sudo scope
Punchcard-Session: crisp-lantern-orchard-nv
* fix(secrets): remove dead path bypass
Punchcard-Session: crisp-lantern-orchard-nv
* test(qa): isolate systemd user bus
Punchcard-Session: crisp-lantern-orchard-nv
2026-08-05 11:20:23 +08:00
Peter Steinberger
c83dcc2bc0
fix(security): harden network tool output at canonical owner boundaries ( #118984 )
...
* fix(security): bound external tool content at its canonical owner boundary
* fix(plugin-sdk): document supported security boundary and restore facade parity
2026-08-03 15:34:33 -07:00
Peter Steinberger
8eaf917efb
fix(google): honor Cloud SDK credential location and Vertex billing project ( #118745 )
2026-08-03 10:47:13 -07:00
Peter Steinberger
836a9f8323
test(secrets): consolidate runtime fixtures ( #118162 )
2026-08-02 13:13:37 -07:00
Peter Steinberger
33ea3e16e9
refactor: consolidate core micro-helpers ( #117825 )
...
* refactor: centralize stable stringification
* refactor: reuse canonical record coercion
* refactor: reuse safe JSON parsing in cron storage
* refactor: centralize environment truthiness
* fix: enforce model scan and block reply timeouts
* refactor: consolidate signal-aware sleep helper
* fix: preserve plugin SDK sleep contract
* test: satisfy model scan timeout lint
2026-08-01 23:10:46 -07:00
Peter Steinberger
c5dd9c3095
test(secrets): dedupe runtime state fixtures ( #117563 )
2026-08-01 11:48:07 -07:00
Peter Steinberger
586e1fe10e
refactor: dedupe secrets runtime snapshot fixtures ( #117502 )
...
* test(secrets): dedupe runtime snapshot fixtures
* test(secrets): preserve runtime auth-store fixture type
2026-08-01 10:26:33 -07:00
Jesse Merhi
d3f4530ce8
feat(google): allow operator headers on Gemini web search ( #115549 )
...
* feat(google): support Gemini web search headers
* fix(google): validate Gemini search headers
* docs(changelog): credit Gemini headers
* test(secrets): route config contracts through collector
* chore: remove release-owned changelog entry
* test(google): cover resolved search headers
2026-08-02 01:41:09 +10:00
Peter Steinberger
383f8947c1
fix: doctor skips host services for isolated state ( #115922 )
...
* fix(doctor): isolate host service management
* fix(doctor): clarify service isolation recovery
* test(doctor): isolate service identity fixtures
* test(daemon): keep lifecycle fixtures lint-clean
* test(daemon): isolate install identity fixtures
2026-07-29 11:09:56 -04:00
Peter Steinberger
c5d0b7dd39
refactor: retire legacy provider and secret paths ( #115655 )
...
* refactor: retire legacy provider and secret paths
* fix: remove stale cache retention import
* test: remove retired secret marker fallback
2026-07-29 04:36:20 -04:00
Gio Della-Libera
47f654ea14
fix(claws): report plugin setup readiness ( #114899 )
...
* fix(claws): report plugin setup readiness
* fix(claws): keep setup readiness helper private
* fix(claws): honor local provider auth evidence
* fix(claws): require auth-method-only setup
* fix(azure-speech): keep setup envs credential-only
* revert(azure-speech): preserve compound setup metadata
2026-07-29 05:48:35 +00:00
Peter Steinberger
269bc5c89e
fix(cli): preserve machine-readable stdout ( #113654 )
...
Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com >
2026-07-27 05:44:16 -04:00
Peter Steinberger
fd6e042d87
fix(gateway): keep configured local auth authoritative ( #114462 )
...
* fix(gateway): align configured local credentials
* test(gateway): align local credential coverage
* chore(gateway): leave release note to release process
2026-07-27 05:43:31 -04:00
Peter Steinberger
3c67fcc45d
fix(release): stabilize beta validation and completion ( #114396 )
...
* test(release): fix rebased validation gates
* test(migrate-hermes): use canonical auth store fixture
* test(secrets): reset runtime state before migration isolation
* test(secrets): reload singleton graph for migration isolation
* test(secrets): isolate auth migration state
* fix(release): return completed validation run
* docs: refresh docs map after forward-port
2026-07-27 03:42:00 -04:00
Peter Steinberger
b6dcb8c323
test(auth): avoid broad profile discovery in migration isolation ( #114217 )
2026-07-26 21:12:33 -04:00
Peter Steinberger
19a98c873c
refactor(auth): finish SQLite-only auth profile cutover ( #114033 )
...
* refactor(auth): finish SQLite-only profile cutover
* test(auth): isolate SQLite shadow fixtures
* test(auth): satisfy OAuth refresh lint
* test(auth): infer legacy sidecar fixtures
* fix(auth): fail closed on unreadable stores
* fix(auth): recheck migration readiness on lookup
* fix(auth): preserve compatibility owner checks
* fix(auth): align SQLite cutover proof
* style(qa): format SQLite auth helpers
* fix(auth): recover interrupted SQLite migrations
* fix(auth): bind materialized SQLite refs
* style(auth): clarify receipt hash value
* fix(auth): preserve state-only OAuth routing
* fix(auth): snapshot receipted migration sources
* fix(auth): fail closed across recovery races
* fix(auth): close legacy recovery gaps
* fix(auth): serialize SQLite refresh recovery
2026-07-26 07:27:54 -04:00
Peter Steinberger
5347285d6b
improve(models): source pricing from hosted catalog ( #114060 )
...
* feat(model-catalog): serve hosted fallback pricing
* refactor(config): retire client pricing bootstrap settings
* refactor(gateway): delete client pricing refresh runtime
* docs(models): explain hosted catalog pricing
* fix(model-catalog): preserve pricing privacy and aliases
* fix(model-catalog): fingerprint pricing eligibility
* fix(model-catalog): harden pricing endpoint checks
* fix(model-catalog): materialize source-safe pricing aliases
* fix(model-catalog): keep unknown pricing fallbacks safe
* fix(model-catalog): reject zero-only hosted prices
* fix(model-catalog): fail closed without pricing policy metadata
* refactor(utils): extract usage pricing normalization
* fix(model-catalog): rebuild policy-owned pricing namespaces
* test(model-catalog): type publisher cost fixtures
* chore(config): regenerate schema baselines
* fix(utils): keep raw pricing tiers private
2026-07-26 03:48:25 -04:00
Peter Steinberger
481d826ff4
fix(vault): prevent insecure secrets plan writes ( #113707 )
...
* fix(vault): harden secrets plan writes
* fix(secrets): avoid env marker collision
* style(secrets): type plan write rejection
* refactor(onepassword): remove obsolete path resolver
* fix(secrets): preserve Windows plan path trust
* refactor(secrets): compact ACL token policy
* fix(secrets): route permission checks through facade
2026-07-25 08:27:33 -07:00
joshavant
f153858045
fix(onepassword): make SecretRef setup production-safe
2026-07-25 06:03:30 -05:00
Peter Steinberger
82d1a03f25
refactor(agents): move implicit-main fallback into load-time roster injection ( #112678 )
...
* refactor(agents): require explicit roster defaults
* feat(onboard): create named first roster agent
* refactor(agents): remove runtime main fallbacks
* style(agents): apply roster refactor formatting
* refactor(agents): finish roster-only runtime sweep
* fix(doctor): migrate legacy main session sqlite
* fix(doctor): harden roster session migrations
* fix(onboard): commit first agent atomically
* fix(config): support empty-roster analysis
* fix(agents): preserve legacy main state during creation
* fix(setup): materialize baseline agent roster
* fix(agents): harden legacy default transfer recovery
* fix(agents): simplify roster-only legacy compatibility
* fix(agents): preserve staged first-agent entries
* fix(config): migrate persisted implicit-main rosters
* fix(config): preserve staged empty rosters
* fix(agents): finalize roster-only upgrade paths
* fix(sessions): close legacy main migration outcomes
* fix(config): migrate legacy roster markers at load
* fix(sessions): preserve roster upgrade history
* refactor(sessions): restore lean legacy main compatibility
* fix(setup): prepare first-agent credentials before publish
* fix(config): stabilize roster snapshot migration
* refactor(sessions): shrink legacy main compatibility
* fix(agents): restore roster compatibility fidelity
* fix(sessions): preserve divergent legacy history
* refactor(agents): narrow roster-only scope
* fix(config): isolate roster migration
* test(agents): align roster-only fixtures
* fix(agents): keep main agent undeletable
* fix(agents): harden roster migration invariants
* fix(agents): close setup and audit scope gaps
* fix(cron): scope session reaper throttles by agent
* fix(agents): preserve scoped owner precedence
* fix(config): preserve authored config ownership
* fix(setup): keep default workspace and roster in sync
* fix(setup): preserve default entry workspace on bare runs
* fix(agents): adapt roster rebase to keyed entries
* fix(agents): honor both roster representations
* fix(agents): route roster reads through shared helpers
* fix(config): preserve canonical roster writes
* fix(cron): resolve dynamic default for session reaper
* fix(agents): close dynamic default migration gaps
* fix(agents): align scoped session ownership
* fix(sessions): preserve legacy main directory casing
* fix(agents): align cron and legacy auth ownership
* fix(setup): provision the committed default workspace
* fix(cron): align scoped ownership and reaping
* fix(cron): treat blank agent ids as absent
* fix(cron): retain configured session-store owners
* fix(agents): repair roster-aware CI boundaries
* fix(cron): preserve scoped ownership resolution
* fix(agents): preserve rosterless maintenance paths
* fix(agents): propagate roster ownership through runtime boundaries
* fix(agents): preserve roster ownership across runtime paths
* fix(agents): harden roster diagnostics and legacy routing
* fix(agents): remove redundant diagnostic import
* test(agents): type CLI policy fixture explicitly
* fix(config): preserve canonical roster mutation identity
* fix(doctor): read canonical agent rosters consistently
* fix(config): resolve compound roster unsets safely
* fix(config): finalize main-session reconciliation
* fix(doctor): read canonical session state safely
* fix(sessions): preserve current visibility alias
* fix(config): track roster include provenance
* test(config): type roster provenance cases
* fix(config): refine roster include ownership
* fix(agents): preserve staged roster invariants
* test(config): align fixtures with explicit roster ownership
* test(node-host): preserve optional plan typing
* fix(config): preserve authored roster projections
* test(config): keep raw roster fixtures explicit
* test(config): normalize rosters at runtime fixtures
* fix(config): protect authored roster ownership
* fix(agents): require explicit session ownership
* fix(agents): enforce scoped roster ownership
* fix(sessions): merge fixed-store agent partitions
* fix(agents): harden roster ownership boundaries
* fix(config): reject ambiguous roster projections
* fix(sessions): preserve persisted store ownership
* fix(sessions): keep collision diagnostics additive
* fix(security): scan malformed roster workspaces
* test(config): align snapshot fixtures after rebase
* test(agents): use explicit roster fixtures
* fix(config): harden roster diagnostic boundaries
* fix(sessions): isolate fixed-store agent databases
* test(agents): type malformed default markers
* refactor(sessions): extract store collision resolution
* test(system-agent): split oversized setup coverage
* style(system-agent): format split setup suite
* fix(sessions): preserve promoted store ownership
* fix(sessions): derive scoped owner before target
* fix(sessions): preserve explicit sqlite ownership
* fix(agents): restore roster compatibility across CI
* fix(agents): enforce roster-owned runtime boundaries
* fix(agents): satisfy default lookup lint
* test(sessions): split known-owner coverage
* fix(state): satisfy path identity lint
* fix(agents): preserve malformed roster safety boundaries
* fix(agents): restore roster compatibility at runtime boundaries
* fix(config): satisfy roster boundary type checks
* fix(agents): preserve roster ownership across runtime probes
Setup inference probes now execute as the configured roster owner. Malformed agent-prefixed session rows are intentionally omitted by the fail-closed visibility contract rather than normalized by tests.
* fix(agents): satisfy session list owner lint
* fix(agents): preserve roster-owned runtime boundaries
Restore shared logical rows for exact SQLite session locators while keeping their physical database owner separate. The ownership regression test now constructs an explicit sole-owner database directly instead of relying on first-touch capture, matching the intentional shared-store contract.
* fix(sessions): preserve multiply owned exact stores
* fix(sessions): restore runtime owner boundaries
Keep incognito sentinels agent-owned, fold default-agent approvals into the global snapshot, and preserve the configless legacy-main CLI policy fallback. Also repair the existing CLI watchdog test lifecycle so the compact shard observes its timeout without an unawaited assertion or async timer stall; product behavior is unchanged by that test-only fix.
* test(ci): align owner-scoped fixtures
These assertions are unchanged. The fixtures now declare the intended non-default runner, expose the session-key constant imported by production status code, and select the main approvals bucket explicitly on Windows.
* fix(agents): close final roster ownership gaps
2026-07-24 22:38:09 -07:00
Peter Steinberger
26e4dec8c9
fix(ios): native Talk respects session thinking level ( #112901 )
...
* fix(ios): inherit thinking in native Talk
* test(ios): verify native Talk thinking inheritance
* test(ios): keep Talk regression i18n-neutral
* test(ios): import Talk request builder module
* test(secrets): secure plugin preset fixture
---------
Co-authored-by: RECOVERI <alfred@recoveri.io >
2026-07-23 01:02:12 -04:00
Hiroshi Tanaka
52f412bf17
fix(browser): tab creation steals window focus during agent automation ( #105356 )
...
* fix(browser): tab creation steals window focus during agent automation
Agent-created tabs inherited CDP's foreground default: direct CDP
Target.createTarget omitted the background flag, and the extension
relay's createTab defaulted to active:true, so every agent tab open
activated the new tab (and, on the extension driver, focused the
window), interrupting whatever the human was doing in that browser.
Direct CDP tab creation now requests background:true (agent tab
ownership/selection is target-id based and never depended on
activation), and the extension relay defaults an omitted background
to true while preserving an explicit background:false, matching the
Codex/Claude-in-Chrome model the extension driver mirrors.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
* refactor(browser): keep focus fix LOC-neutral
Preserve background tab creation while keeping the oversized CDP and relay modules within the current LOC ratchet.\n\nCodex-Session: 019f5e93-780a-7350-88f9-1986cdb64914
* fix(browser): honor explicit CDP focus requests
Keep background-by-default automation while treating Target.createTarget focus=true as an explicit foreground request in the extension relay.
Codex-Session: 019f5e93-780a-7350-88f9-1986cdb64914
* fix(browser): preserve explicit CDP focus semantics
Apply the background-by-default automation policy only when focus is omitted, preserving focus=false foreground-tab requests as well as focus=true.
Codex-Session: 019f5e93-780a-7350-88f9-1986cdb64914
* fix(browser): preserve create target window focus
Carry the resolved CDP focus intent through the extension relay and explicitly focus the containing Chrome window when requested.\n\nCodex-Session: 019f5e93-780a-7350-88f9-1986cdb64914
* style(browser): refresh relay import order
* test(secrets): use secure node exec fixtures
* test(doctor): secure exec secret fixture
* test(doctor): retain narrowed temp path
* test(secrets): secure remaining exec fixtures
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-21 21:35:40 -07:00
Peter Steinberger
edecdbd05e
refactor(config): config-surface reduction tranche 3 — product consolidations (review request) ( #111527 )
...
* refactor(config): consolidate media model lists
* refactor(config): unify memory configuration
* refactor(config): consolidate TTS ownership
* refactor(config): move typing policy to agents
* refactor(config): retire product-level config surfaces
* refactor(config): share scoped tool policy type
* chore(config): refresh generated baselines
* fix(config): honor agent typing overrides
* fix(config): migrate sibling config consumers
* refactor(infra): keep base64url decoder private
* fix(config): strip invalid legacy TTS values
* chore(config): refresh rebased baseline hash
* fix(doctor): route legacy messages.tts.realtime voice to talk during tts move
* refactor(config): polish final layout names
* refactor(config): freeze retired tuning defaults
* feat(config): add fast mode default symmetry
* refactor(config): key agent entries by id
* docs(config): update final layout reference
* test(config): cover final layout migrations
* chore(config): refresh final layout baselines
* fix(config): align final layout runtime readers
* fix(config): align remaining readers
* fix(config): stabilize final layout migrations
* fix(config): finalize config projection proof
* fix(config): address final layout review
* docs(release): preserve historical config names
* fix(config): complete keyed agent migration
* fix(config): close final migration gaps
* fix(config): finish full-branch review
* fix(config): complete runtime secret detection
* fix(config): close final review findings
* fix(config): finish canonical docs and heartbeat migration
* fix(config): integrate latest main after rebase
* refactor(env): isolate test-only controls
* refactor(env): isolate build and development controls
* refactor(env): collapse process identity indirection
* refactor(env): remove duplicate config and temp aliases
* docs(env): define the operator-facing allowlist
* ci(env): ratchet production variable count
* fix(env): remove stale provider helper import
* fix(env): make ratchet sorting explicit
* test(env): keep test seam in dead-code audit
* test(env): cover ratchet growth and boundary; document surface budgets
* docs(config): document tier-eval consolidations
* docs(config): clarify speech preference ownership
* test(memory): align retired tuning fixtures
* refactor(memory): freeze engine heuristics
* refactor(config): apply tier-eval tranche
* refactor(tts): move persona shaping to providers
* refactor(compaction): move prompt policy to providers
* test(config): align hookified prompt fixtures
* chore(deadcode): classify test-only exports
* chore(github): remove unused spawn helper
* chore(deadcode): classify queue diagnostics
* chore(deadcode): remove unused lane snapshot export
* chore(plugin-sdk): ratchet consolidated surface
* fix(config): integrate latest main after rebase
2026-07-21 20:28:43 -07:00
RickLin
959a450b69
fix(secrets): register secret targets for installed-origin plugins ( #104347 )
...
The secret target registry filtered plugin-derived entries to bundled-origin
records only, so when the Exa web providers moved into an installed plugin
package their config targets vanished: the gateway's isKnownSecretTargetId
rejected the CLI-discovered target and infer web search failed with an
unresolved SecretRef before provider I/O (regression of #82621/#82798).
Web-provider and config-contract entries now come from every active plugin
manifest record, matching what channel entries already did; entries stay
manifest-scoped (web-provider contract + sensitive hint, or declared
secretInput paths), so non-bundled origins cannot widen target paths beyond
their own declared contracts.
Fixes #104320
2026-07-21 00:12:55 -07:00
Peter Steinberger
c7e7ac2728
refactor: remove expired plugin compatibility surfaces ( #111451 )
...
* docs(secrets): remove retired web credential paths
* refactor(web): remove retired provider compatibility paths
* refactor(providers): delete retired compatibility routes
* refactor(secrets): remove retired credential aliases
* refactor(plugin-sdk): delete retired compatibility surfaces
* docs(plugin-sdk): remove retired migration guidance
* chore(plugin-sdk): refresh rebased surface budgets
* chore(plugin-sdk): refresh API removal baseline
* refactor(compat): migrate retired internal callers
* chore(plugin-sdk): refresh current-main baselines
* test(config): migrate plugin-owned secret assertions
* test(gateway): narrow plugin secret refs
* fix(plugin-sdk): preserve private boundary type identity
* chore(compat): remove stale sweep references
* chore(lint): lower max-lines budget
* refactor(secrets): remove unused web helper
* build(plugin-sdk): drop removed compat entries
* chore(plugin-sdk): refresh rebased API baseline
* chore(plugin-sdk): use Linux API baseline hash
* fix(plugin-sdk): preserve private bundled build entries
* fix(plugin-sdk): package private runtime facades
* fix(plugins): preserve external credential contracts
2026-07-19 11:04:48 -07:00
Peter Steinberger
783a5d21cf
refactor(config): purge numeric tuning knobs behind built-in defaults ( #111382 )
2026-07-19 07:35:45 -07:00
Peter Steinberger
06f5f73e47
refactor: own model discovery by runtime lifecycle ( #111173 )
...
* refactor(agents): prepare model runtime catalogs
Build lifecycle-owned model and auth snapshots, carry prepared stores into hot agent paths, and serialize config/auth publication.
Credits @zeroaltitude's #90741 investigation and benchmark approach.
* refactor: finish lifecycle-owned model discovery
* fix: align prepared model catalog contracts
* test: align lifecycle catalog mocks
* test: fix prepared catalog type fixtures
* refactor: split prepared model runtime ownership
* fix: import prepared runtime replacement gate type
* test: split media runtime coverage
* test: preserve image auth fixture key types
* test: isolate lifecycle gate fixtures
* chore: keep release changelog owned
* refactor: finish prepared model catalog migration
* test: keep catalog review fixtures scanner-safe
* refactor: preserve lifecycle model runtime ownership
* fix: close prepared runtime lifecycle races
* fix: preserve compaction workspace fallback
* chore: document btw generation rebinding
* fix: preserve prepared generation boundaries
* fix: keep model-list discovery flag explicit
* fix: serialize standalone model runtime activation
* refactor: migrate subagent model catalog lookup
* refactor: clarify doctor catalog lookup seam
* chore: refresh plugin sdk api baseline
* test: migrate swarm catalog dependency
* refactor(telegram): rename runtime catalog seam
* refactor: extract model-aware tool context
* test(models): isolate lifecycle catalog fixtures
* refactor(agents): avoid btw parameter rebinding
* fix(net-policy): align root ipaddr dependency
* fix(build): keep net policy dependency bundled
* fix(deadcode): document net policy compile dependency
2026-07-19 05:30:54 -07:00
Peter Steinberger
f07a1fb502
refactor: centralize bounded file reads in fs-safe ( #111104 )
...
* refactor: use fs-safe bounded descriptor reads
* build: update fs-safe to 0.4.2
* build: refresh root npm shrinkwrap
* fix: satisfy bounded read return paths
* fix: update fs-safe integration for latest main
* fix: adopt fs-safe overflow compatibility release
* build: complete fs-safe lockfile update
* build: update fs-safe to 0.4.4
* build: refresh plugin SDK API baseline
* test: follow fs-safe bounded read seam
2026-07-19 01:29:23 -07:00
Peter Steinberger
7a551bff0c
fix(vault): aggregate provider outage diagnostics ( #110908 )
...
* fix(vault): aggregate provider outage diagnostics
* fix(vault): classify revoked token outages
* fix(vault): preserve scoped ACL failures
* fix(vault): keep token probes advisory
* test(vault): satisfy gateway proof gates
* fix(secrets): attribute web provider outages
* test(secrets): prove web outage fan-out in owner suite
* fix(vault): scope malformed responses per secret
* test(secrets): harden exec fanout fixtures
2026-07-18 22:44:06 +01:00
Peter Steinberger
8a5c8690e1
fix(secrets): keep unaffected owners live during reload failures ( #110779 )
...
* fix(secrets): isolate reload failures per owner
* refactor(secrets): split runtime activation helpers
* fix(secrets): export web warning type
* fix(secrets): reject unsafe degraded config writes
* fix(secrets): derive reload defaults type
* fix(secrets): defer reload state publication
* fix(secrets): preserve partial refresh state
* fix(secrets): retry superseded reload preflight
* fix(secrets): bind stale credentials to owner contracts
* fix(secrets): scope degraded credential contracts
* fix(secrets): restore source ownership guards
* fix(secrets): recover provider-only degradation
* fix(secrets): enforce degraded reload contracts
* fix(secrets): preserve scoped reload state
* fix(secrets): reconcile deferred descendant state
* fix(secrets): commit reload state atomically
* fix(secrets): preserve source transaction lineage
* test(secrets): use non-secret lineage marker
* chore(plugin-sdk): refresh API baseline
* fix(secrets): canonicalize web owner contracts
* fix(plugin-sdk): preserve legacy secret owner contracts
* fix(secrets): satisfy startup activation types
* test(secrets): align reload fixtures with owner contracts
* refactor(secrets): move source recovery scope helper
* fix(secrets): preserve owner contracts on web failures
* fix(secrets): bind legacy web resolution contract
* fix(secrets): retry stale auth publication
2026-07-18 18:29:24 +01:00
Peter Steinberger
347ee45895
fix(secrets): surface degradation in logs and doctor ( #109792 )
...
* fix(secrets): surface degraded owners safely
* fix(secrets): preserve degradation ownership across reloads
* fix(secrets): require cold ownership for source recovery
* refactor(secrets): keep assignment provenance internal
* test(secrets): use provider error contract
* fix(secrets): attribute provider failures to active co-owners
* test(secrets): clarify provider failure fixture
* fix(secrets): redact doctor degradation reasons
* test(secrets): align reload harness with runtime state
* test(secrets): cover atomic source publication
* fix(secrets): preserve web owner degradation context
* fix(secrets): retain active web degradation co-owners
* fix(secrets): keep web provider error internal
* refactor(secrets): unify reload degradation state
* refactor(config): remove obsolete source snapshot setter
2026-07-18 11:46:53 +01:00
Peter Lee
8539640abc
fix(config,secrets): emit JSON errors and cover dotenv roots ( #104340 )
...
* fix(secrets): use resolveStateDir for .env path to cover legacy .clawdbot dir
* fix(secrets): replace override-based legacy .env test with true automatic fallback, add apply-path coverage
* fix(config-cli): emit JSON error on config get --json for missing paths
When is used with a nonexistent
path, the command emits no JSON on stdout, only a text error on stderr.
This breaks automated consumers that expect machine-readable errors.
Fix: output JSON to stdout before exit(1) when
opts.json is set. This matches the existing JSON error output pattern
already used by runConfigValidate and handleConfigMutationError.
Also re-throw synthetic exit errors in the catch block so the
--json branch's writeRuntimeJson+exit is not caught and re-emitted
as a text error.
* fix(config-cli): use typed ExitError signal instead of __exit__ string sentinel
* fix(secrets): reuse resolved stateDir for .env path in audit
* fix(secrets): pass resolved stateDir into apply .env scrubbing, add root-switch regression
* test(config-cli): migrate remaining __exit__ sentinel to ExitError
* fix(secrets): cover config and state dotenv roots
* style(secrets): format dotenv path helper
* test(secrets): track temporary directories
* test(config): expect typed exit for missing patch files
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
Co-authored-by: Peter Steinberger <peter@steipete.me >
2026-07-17 23:14:05 -07:00
Peter Steinberger
3e74534a70
fix(channels): keep healthy accounts running when credential files fail ( #110360 )
...
* fix(channels): isolate unavailable credential files
* fix(channels): complete credential file type contract
* fix(channels): preserve credential path handling
* test(channels): cover credential file edge cases
* fix(channels): ignore blank credential file paths
* test(secrets): keep empty credential files unavailable
* test(googlechat): keep temp cleanup plugin-local
* fix(channels): keep credential diagnostic internal
* chore: defer release note to release automation
2026-07-18 06:27:59 +01:00
Peter Steinberger
9c2d38a596
fix: keep broken SSH sandbox refs agent-scoped ( #110081 )
...
* fix: isolate agent sandbox SecretRef owners
* fix: preserve SSH sandbox lifecycle secrets
* fix: preserve default SSH sandbox lifecycle secrets
2026-07-17 23:56:43 +01:00
Peter Steinberger
d4ae2bb01f
fix(agent): materialize local auth profile refs
2026-07-17 21:55:27 +01:00
Peter Steinberger
95d17b500c
fix: isolate media model SecretRef owners ( #110042 )
2026-07-17 15:39:18 +01:00
Peter Steinberger
4ef4323db9
fix: keep memory SecretRef failures agent-scoped ( #109977 )
...
* test: normalize Copilot token fixture
* test: normalize Copilot auth fixtures
* test: use explicit Copilot placeholders
* test: use neutral Copilot fixture host
* refactor: clarify Copilot embedding auth values
* refactor: keep Copilot profile result intact
* test: normalize embedding credential fixtures
* fix: isolate memory SecretRef owners
* refactor: isolate memory secret collection
2026-07-17 14:44:03 +01:00
Peter Steinberger
56907458ac
fix(skills): keep healthy skills available when one secret fails ( #109791 )
...
* fix(skills): isolate unavailable skill secrets
* fix(skills): preserve snapshot catalog during degradation
* fix(skills): fail closed for legacy snapshot aliases
* fix(skills): preserve empty runtime catalogs
* fix(skills): migrate snapshots to owner identities
* fix(skills): filter degraded captured prompts
* fix(skills): narrow snapshot owner keys
* style(skills): satisfy captured prompt lint
2026-07-17 12:31:29 +01:00
Peter Steinberger
4ecd85e0b7
fix: keep healthy channel accounts running when one credential fails ( #109766 )
...
* fix(secrets): isolate channel account credentials
* fix(secrets): normalize Feishu default ownership
* fix(feishu): preserve accountless secret ownership
* fix(matrix): keep accountless top-level refs active
2026-07-17 01:12:18 -07:00
Peter Steinberger
d26951ae9a
fix(secrets): degrade stale auth profile refs on startup ( #77213 )
...
* fix(secrets): isolate unavailable auth profile refs
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
* fix(secrets): retain current auth profile metadata
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
* style(auth): use explicit materialized fields
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
* fix(secrets): scrub skipped auth profile material
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
* test(auth): separate setup fallback from secret refs
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
* fix(secrets): reuse prepared auth alias metadata
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
---------
Co-authored-by: Val Alexander <68980965+BunsDev@users.noreply.github.com >
2026-07-17 00:38:35 -07:00
Peter Steinberger
b64242a4a9
fix(cron): isolate unavailable webhook secret ( #109739 )
2026-07-17 00:10:45 -07:00
Peter Steinberger
c13925b387
fix(webhooks): keep routes cold when SecretRefs are unavailable ( #109715 )
...
* fix(webhooks): isolate unresolved route secrets
* chore(plugin-sdk): refresh API baseline
* docs(secrets): refresh credential surface
2026-07-16 23:56:59 -07:00
Peter Steinberger
0097363c69
fix(secrets): keep gateway alive when web provider refs fail ( #109687 )
...
* fix(secrets): isolate unavailable web providers
* fix(secrets): keep web result type internal
* fix(secrets): hide unavailable web selections
2026-07-16 23:48:37 -07:00