jesse-merhi
254db64295
fix(gateway): preserve unapproved policy warnings
2026-08-13 13:43:22 +10:00
jesse-merhi
76b79fe2e9
refactor(security): keep scan identity internal
2026-08-13 13:43:22 +10:00
jesse-merhi
1c040134b0
fix(security): fail closed on missing npm integrity
2026-08-13 13:43:22 +10:00
jesse-merhi
30ba169e33
fix(security): scope approvals to scan stages
2026-08-13 13:43:22 +10:00
jesse-merhi
85fe665b3c
fix(security): bind approvals to resolved artifacts
2026-08-13 13:43:21 +10:00
jesse-merhi
ef88c58712
fix(security): carry staged warning approvals
2026-08-13 13:42:48 +10:00
Jesse Merhi
7cf4e84584
fix(security): bind install warning approvals
2026-08-13 13:42:48 +10:00
Jesse Merhi
7412828da8
fix(security): surface refreshed gateway warnings
2026-08-13 13:42:24 +10:00
Jesse Merhi
7562e5542e
docs(security): clarify one-shot warning approval
2026-08-13 13:42:24 +10:00
Jesse Merhi
fd85373182
test(plugins): keep policy warning coverage within lint budget
2026-08-13 13:42:00 +10:00
Jesse Merhi
0078cd4a58
test(security): keep policy approval coverage compact
2026-08-13 13:42:00 +10:00
Jesse Merhi
4096c19642
fix(security): consume policy warning approvals once
2026-08-13 13:42:00 +10:00
Jesse Merhi
2a4a8832f4
feat(security): expose install policy warning details
2026-08-13 13:41:23 +10:00
jesse-merhi
c621276dac
fix(security): clarify automatic policy recovery
2026-08-13 13:34:55 +10:00
jesse-merhi
9d9e3833a6
test(security): complete policy warning fixtures
2026-08-12 21:38:58 +10:00
jesse-merhi
b79d0360ff
fix(security): enforce install policy output bounds
2026-08-12 20:53:38 +10:00
jesse-merhi
009be3dd20
fix(security): bound install policy notices
2026-08-12 17:38:37 +10:00
jesse-merhi
84a8d4d571
test(security): prove warning acknowledgement lifecycle
2026-08-12 05:38:32 +10:00
jesse-merhi
9ce3ec0082
fix(security): reconcile current install boundaries
2026-08-12 05:38:31 +10:00
jesse-merhi
744abb088b
fix(security): show complete policy findings
2026-08-12 05:38:31 +10:00
jesse-merhi
78d0040c90
fix(security): close install policy review gaps
2026-08-12 05:38:31 +10:00
jesse-merhi
e5bb6e955b
fix(security): fingerprint full policy warnings
2026-08-12 05:38:31 +10:00
jesse-merhi
bda84e0ba3
fix(cli): distinguish exhausted policy approval
2026-08-12 05:38:31 +10:00
jesse-merhi
318d8592b2
fix(install): preserve explicit policy acknowledgement
2026-08-12 05:38:30 +10:00
Jesse Merhi
78ce693958
fix(security): reapprove changed policy warnings
2026-08-12 05:38:30 +10:00
Jesse Merhi
e057d9570e
fix(security): re-evaluate forced policy warnings
2026-08-12 05:38:30 +10:00
Jesse Merhi
7be358d70f
feat(security): support install policy warnings
2026-08-12 05:38:29 +10:00
tharuntejmeta
a57e8c70f5
feat(meta): add Muse Spark 1.2 models ( #120373 )
...
* feat(meta): add Muse Spark 1.2 models
* fix(meta): verify Muse Spark 1.2 catalog metadata
* fix(meta): verify Muse Spark 1.2 contracts
* docs(meta): quote discounted services terms
* fix(meta): preserve replay fields for simple completions
* test(meta): align stream host adapter types
* fix(meta): apply catalog cap for zero max tokens
* fix(meta): preserve omitted output cap
* fix(meta): scope responses stream wrapper
* fix(ai): preserve source API for stream wrappers
* fix(ai): distinguish hook and dispatch APIs
* test(ai): adapt plugin streams synchronously
* chore(plugin-sdk): refresh API baseline
* chore(plugin-sdk): refresh sharded API baseline
---------
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-08-11 11:26:58 -07:00
Peter Steinberger
3d76246792
refactor: eliminate final export name collisions ( #122083 )
...
* refactor: resolve final export name collisions
* refactor: update remaining collision rename consumers
* style: format rebased auth helpers
* test: update remaining session entry mocks
* test: update remaining runtime mock exports
* test: update delivery info path mock
* refactor: reconcile combined collision sweeps
* chore: regenerate collision and sdk baselines
2026-08-11 11:18:24 -07:00
Peter Steinberger
ebb2770000
refactor: eliminate export name collisions ( #122084 )
...
* refactor: eliminate export name collisions
* chore(scripts): burn resolved collision baselines
* refactor: narrow legacy session load options
* chore: refresh SDK and session debt baselines
* refactor: adopt upstream secrets collision fix
* test(plugin-sdk): mock renamed session store core
* fix(scripts): track renamed session accessor core
2026-08-11 10:41:50 -07:00
Peter Steinberger
cad77fb39c
refactor: consolidate remaining coercion helpers ( #122020 )
2026-08-11 10:22:01 -07:00
Patrick Erichsen
ad704f35c4
fix(control-ui): hide unusable models from picker ( #121852 )
...
* fix(ui): hide unusable models from picker
* refactor(ui): remove stale model availability helper
* refactor(ui): simplify catalog state guards
* style: format provider catalog imports
* chore: refresh plugin SDK API baseline
* refactor(core): break provider catalog type cycle
* chore(protocol): refresh models list Swift output
* chore: refresh plugin SDK API baseline after rebase
* fix(gateway): preserve full catalog preload semantics
* fix(ui): keep model status within startup budget
* fix(ui): preserve provider status within startup budget
* fix(models): scope live catalog outcomes
* test(ui): expect agent-scoped model refresh
* test(ui): align model refresh e2e fixtures
2026-08-11 09:13:44 -07:00
Vincent Koc
32e3bd3797
refactor(plugins): centralize bundled tree detection ( #122093 )
2026-08-11 23:59:38 +08:00
Peter Steinberger
db73b59c04
refactor: burn wrapper shadowing baseline entries ( #122040 )
...
* refactor: burn wrapper shadowing entries
* chore: refresh wrapper shadowing baselines
* test: update secrets runtime state mocks
* fix(ci): absorb Control UI build identity variance
2026-08-11 08:24:03 -07:00
Peter Steinberger
e390781534
refactor: burn cross-directory export name collisions ( #121893 )
...
* refactor: name subsystem logger exports
* refactor(test): distinguish exported test doubles
* refactor: consolidate canonical owner helpers
* refactor: give cross-domain helpers distinct names
* chore(lint): ratchet collision debt baselines
* fix(test): complete collision rename consumers
* fix(test): update remaining collision mock consumers
* fix(test): update transcript reader mock export
* refactor: keep embedded logger name at its owner
* fix(test): align embedded logger mock with owner
* refactor: name shared assistant phase extraction
* fix(ui): update assistant phase extractor import
* chore(generated): refresh collision and SDK baselines
* style(test): format merged plugin mocks
* chore(sdk): refresh API content hashes
2026-08-11 06:50:22 -07:00
Ayaan Zaidi
2c8ed54ddb
feat(heartbeat): default delivery to the configured owner, never groups ( #121988 )
...
Unset heartbeat.target now resolves "owner": elected heartbeat notifications deliver to the operator's DM resolved from commands.ownerAllowFrom or the channel allowFrom (first concrete entry; wildcards and channel-scoped wildcards excluded; configured owners exhausted across channels before any channel-local fallback). Delivery requires the channel's own classifier to positively prove a direct destination — every bundled messaging plugin now ships an inferTargetChatType contract — and unproven or group-shaped destinations fail closed to the visible no-route state. The first implicitly-routed delivery carries a one-line self-explanation naming the target: "none" opt-out. Explicit target "last" remains as the follow-the-conversation opt-in. Refines the unreleased #121892 default before it ships; refs #121880 .
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 13:18:22 +00:00
Peter Steinberger
59dc87290f
test(plugins): remove cache resize test knob ( #121904 )
...
* test(plugins): remove cache resize test knob
* chore(plugin-sdk): refresh cache closure hashes
2026-08-11 06:05:32 -07:00
Peter Steinberger
686294f9f8
test(sqlite): right-size reliability crash payloads ( #122016 )
...
* test(sqlite): right-size reliability crash payloads
* test(agents): replace hanging provider error integration
---------
Co-authored-by: Amp <amp@ampcode.com >
2026-08-11 05:26:07 -07:00
Peter Steinberger
02e8470bb8
refactor: burn SDK export collision debt ( #121888 )
...
* refactor: burn SDK export collision debt
* chore: regenerate collision debt baselines
* fix: update durable delivery core import
* fix: remove stale channel metadata type import
* fix: preserve config write SDK parameter type
* fix: preserve chat metadata SDK return type
* chore: refresh plugin SDK API baseline
* test: update plugin enable mock import
* fix: remove duplicate status helper re-export
* fix: preserve strict QA runtime availability errors
2026-08-11 05:06:11 -07:00
Peter Steinberger
12165769c7
refactor(agents): move OpenRouter failover ownership to its plugin and derive reason schemas from one tuple ( #121898 )
...
* refactor(agents): centralize failover ownership and reasons
* test(agents): move OpenRouter failover cases to plugin owner
* fix(agents): preserve prepared provider failover ownership
* test(agents): avoid failover mock shadowing
* fix(agents): preserve provider owner in error copy
* fix(agents): complete provider owner propagation
* chore(plugins): refresh failover type closure hashes
2026-08-11 04:30:18 -07:00
Peter Steinberger
bcaec0cf14
fix: resume main sessions after gateway restarts ( #121969 )
...
* fix(agents): always resume main sessions after restart
* fix(ui): render internal messages as system rows
* docs: update gateway restart recovery semantics
* refactor(sessions): simplify restart hook checkpoints
* refactor(agents): consolidate restart recovery claims
* test(agents): update delivery recovery revision guard
* fix(plugin-sdk): preserve restart hook state contract
* fix(ui): localize system row label
* test(agents): remove obsolete recovery import
* test(agents): align abort-code propagation with always-resume recovery
* fix(ui): share notice-aware turn boundaries
* test(agents): reconcile restart recovery ownership
* fix(ci): reconcile rebased recovery and UI checks
2026-08-11 04:01:34 -07:00
Peter Steinberger
2731dc24e5
fix(plugin-sdk): keep inbound reply shim through next SDK major ( #121922 )
...
* fix(plugin-sdk): honor major-gated reply shim retirement
* fix(plugin-sdk): preserve compat code literals
* chore(plugin-sdk): refresh compatibility API baseline
2026-08-11 03:18:07 -07:00
Ayaan Zaidi
73d4c07bd5
fix(delivery): record ambiguous final loss as durable notice debt ( #121833 )
...
A final reply whose platform send was accepted but whose response was lost
previously ended in silence. Custody that stays unknown after a claimed send
now records durable pendingDeliveryNotice debt; the next same-route turn
delivers one "could not confirm delivery" notice and acknowledges it into the
transcript. Restart recovery completes ambiguous sessions with the same debt
instead of a fire-and-forget notice; the debt survives reset and rollover, and
suppressed notice sends retain it instead of faking delivery. Permanent typed
no-send rejections settle as terminal suppression (no replay, no false
notice); retryable ones restore prepared custody for safe replay. Google Chat
media-only rejections use the typed no-send contract; Telegram native-command
replies join pending-final custody.
Fixes #80362
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
2026-08-11 09:25:04 +00:00
Peter Steinberger
e71d56d557
feat(cloud): let cloud sessions spawn and message cloud children ( #121846 )
...
* feat(cloud): add nested worker session capabilities
Amp-Thread-ID: https://ampcode.com/threads/T-019feaaa-c7ed-769e-9f29-a3612bec72e7
* fix(cloud): harden nested worker sessions
Amp-Thread-ID: https://ampcode.com/threads/T-019feaaa-c7ed-769e-9f29-a3612bec72e7
* fix(cloud): repair exact-head integration
Amp-Thread-ID: https://ampcode.com/threads/T-019feaaa-c7ed-769e-9f29-a3612bec72e7
---------
Co-authored-by: Amp <amp@ampcode.com >
2026-08-11 02:07:49 -07:00
Ayaan Zaidi
ba9e72c17f
fix(heartbeat): deliver to the last conversation by default ( #121892 )
...
Unset heartbeat.target silently collapsed into the explicit "none" opt-out: heartbeats ran every 30m by default, elected notifications were dropped with only an in-memory event, and health read fine. Unset now resolves to "last" (the most recent conversation); explicit target: "none" keeps its internal-only contract. Polls skip pre-model with reason no-route while no route exists yet, and status/doctor surface the waiting-for-route state. Deliberate maintainer-owned default cutover: existing installs without a configured target start receiving heartbeat alerts in their last conversation after upgrade.
Fixes #121880
Co-authored-by: Ayaan Zaidi <hi@obviy.us >
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
2026-08-11 08:45:30 +00:00
Peter Steinberger
fa03d9b913
refactor: consolidate coercion helpers ( #121366 )
...
* refactor: consolidate coercion helpers
* fix: remove duplicate coercion imports
* fix: preserve serialized coercion guard
* chore: ratchet coercion helper carve-outs
* fix(test): keep gauntlet subprocess startup lean
* fix: preserve imported session timestamp semantics
* fix: preserve catalog timestamp string semantics
* chore: align plugin SDK surface ratchet
* fix: preserve trajectory and SDK string contracts
* fix(test): preserve QA record assertion semantics
* fix: complete standalone record guard rename
* refactor(cron): use canonical string coercion
* fix(acpx): preserve Pi timestamp parsing
* test(channels): adapt custody test harnesses
* test(telegram): classify media harness as test support
* test(acpx): split timestamp contract coverage
* test(channels): support generated custody contracts
* chore: ban the full coercion helper name set
Extends the declaration guard to all eleven consolidated helper names and
renames the cron schedule-identity readNumber wrapper to readScheduleInteger
so the banned generic name cannot regrow.
* fix(scripts): repair release-validation guard drift and lint cause
Restores the renamed isJsonRecord guard in assertTrustedWorkflowHarness after
main added isRecord call sites in parallel, and attaches the caught YAML error
as the thrown error cause (preserve-caught-error was red on main).
* fix: preserve Claude timestamp string semantics
* fix: preserve persisted timestamp string semantics
* fix: preserve date-first timestamp contracts
* fix(openai): harden delegation failure formatting
* chore: close coercion helper guard gaps
* test(openai): model non-error delegation rejection
* chore: refresh plugin SDK API contract
* fix(tasks): use canonical string field reader
* fix(ai): use canonical provider error field coercion
* fix(browser): migrate native bootstrap coercion
* docs(plugin-sdk): clarify text record export compatibility
* fix(gateway): normalize approval execution identity
* test(outbound): isolate message action poll harness
2026-08-11 00:02:18 -07:00
Peter Steinberger
1220a7609a
refactor: consolidate promise-like guards ( #121861 )
...
* feat(normalization-core): add promise-like guard
* refactor: consolidate promise-like guards
* fix(normalization-core): keep isPromiseLike non-throwing on hostile then getters
ClawSweeper finding on #121861 : the diagnostics-path local guard caught throwing
then getters; the canonical guard must classify, never throw.
* test(normalization-core): annotate intentional hostile-thenable fixture
2026-08-10 22:50:48 -07:00
Peter Steinberger
069f6e1c34
test(plugins): reuse Vitest for doctor contracts ( #121878 )
...
Amp-Thread-ID: https://ampcode.com/threads/T-019fee8d-665d-707b-a380-23f2a6a1ce03
Co-authored-by: Amp <amp@ampcode.com >
2026-08-10 22:49:40 -07:00
Peter Steinberger
eb28964522
test(plugins): remove provider family meta-test ( #121875 )
2026-08-10 22:46:34 -07:00
Peter Steinberger
36fbd869ed
refactor(agents): eliminate export name collisions ( #121768 )
...
* refactor(auth): consolidate profile helper owners
* refactor(agents): consolidate subagent registry reads
* refactor(agents): disambiguate runtime placement helpers
* refactor(agents): disambiguate helper exports
* chore(scripts): burn export collision debt
* test(agents): follow moved subagent read owner
2026-08-10 22:24:33 -07:00