Commit Graph

4625 Commits

Author SHA1 Message Date
Vincent Koc 877fa6178a fix(test): isolate plugin install fixtures (#116008) 2026-07-30 01:28:19 +08:00
ljy-1351 0ef7b4581f fix(plugins): remove incorrect modifying hook timeout fallback in getClaimingHookTimeoutMs (#107996)
* fix(plugins): keep claiming hook timeouts explicit

Co-authored-by: ljy-1351 <lin.jingya@xydigit.com>

* fix(plugins): keep claiming hook timeouts explicit

Co-authored-by: ljy-1351 <lin.jingya@xydigit.com>

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 01:03:34 +08:00
Gorkem Erdogan 5cf756e258 fix(plugins): prevent prompt-build hook reentrancy (#102554)
* fix(agents): prevent prompt hook reentrancy

Co-authored-by: Gorkem <gorkem.erdogan@outlook.com>

* fix(agents): prevent prompt hook reentrancy

Move the reentrancy invariant to the plugin hook runner so every caller is protected while sibling hook families and independent runners remain active.

Co-authored-by: Gorkem Erdogan <29964484+gorkem2020@users.noreply.github.com>

* test(plugins): type prompt hook reentrancy event

Co-authored-by: Gorkem Erdogan <29964484+gorkem2020@users.noreply.github.com>

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: Gorkem Erdogan <29964484+gorkem2020@users.noreply.github.com>
2026-07-30 01:00:52 +08:00
Peter Steinberger 6dc13c63b6 fix(memory-core): adopt legacy dreaming jobs (#115986) 2026-07-29 12:26:43 -04:00
Peter Steinberger 5bfc65d7f4 refactor: remove 3,543 lines of redundant runtime and tests (#115961)
* refactor: remove 3,543 lines of redundant runtime and tests

* refactor: ratchet production environment variable budget
2026-07-29 11:43:41 -04:00
Vincent Koc 41f118cec3 fix(plugins): forward tool cancellation to hooks (#115817)
* fix(plugins): forward tool cancellation to hooks

* test(plugins): prove hook cancellation propagation
2026-07-29 22:54:01 +08:00
Peter Steinberger 17a8961a6a fix(active-memory): inject cold first-turn memory in QA-channel DMs (#115936)
* fix(active-memory): prewarm trigger recall for channel turns

* test(active-memory): satisfy timing test lint

* test(plugins): declare active-memory prewarm hook
2026-07-29 10:38:42 -04:00
Peter Steinberger adf3178ae6 feat(gateway): expose MCP tool identity in effective tools (#115870)
* feat(gateway): expose MCP tool identity in effective-tools catalog

* docs(agents): comment utility-tool pass gate invariant
2026-07-29 08:41:04 -04:00
Peter Steinberger 40dafc5c33 refactor: replace context-engine retry proxy with declared params (#115872)
* refactor(context-engine): remove legacy host-key retry proxy

* refactor(context-engine): declare accepted host parameters

* fix(context-engine): preserve engine adapter receivers

* refactor(plugins): tighten context-engine compat record

* refactor(context-engine): inline compat window lookup

* docs(plugins): align context-engine removal diagnostic

* test(context-engine): declare harness proof parameters
2026-07-29 08:37:08 -04:00
chenyangjun-xy 431562e775 fix: reject malformed UTF-8 in hosted official plugin catalog feed responses (#111768)
Add { fatal: true } to TextDecoder in readHostedCatalogResponseText so
invalid UTF-8 bytes throw a TypeError before the text is JSON.parsed,
instead of silently becoming U+FFFD inside field values.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 08:36:12 -04:00
Peter Steinberger 5de970c1cc refactor: correct SDK compatibility removal metadata (#115862)
* refactor(plugin-sdk): correct compat removal metadata

* test(plugins): align boundary report compat counts
2026-07-29 08:18:52 -04:00
zhanxingxin1998 943ebc012e fix(plugins): validate constrained empty config schemas (#109569)
Route pattern, dependency, and active conditional schemas through the real plugin config validator while keeping standalone conditional annotations on the empty-config path.

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:20:52 -04:00
Peter Steinberger 20668eed03 fix(memory): quarantine writes from tainted agent turns (#115818)
* feat(memory): taint writes after network tools

* fix(memory): keep provenance mutations recoverable

* fix(memory): roll back failed provenance writes

* fix(memory): serialize provenance mutations

* docs(memory): explain flush provenance boundary

* refactor(memory): share provenance mutation wrapper

* docs(memory): clarify flush provenance fallback

* fix(memory): canonicalize provenance paths
2026-07-29 06:02:06 -04:00
Hannes Rudolph 6dc55fa65e fix(plugins): recover user turns with scoped reply hooks (#114836)
Allow before_agent_reply plugins to declare host-enforced trigger eligibility so scheduled-only hooks do not block interrupted user-turn recovery. Keep omitted and malformed scopes fail-closed, scope both memory-core maintenance hooks, and cover three runner reload cycles through the public registration contract.

Refs: #111442

Source: #114836

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 17:22:16 +08:00
Peter Steinberger a37a5a6575 feat(agents): add per-session tool overrides (#115785)
* feat(agents): per-session tool overrides (mcp/skills/web-search)

* test(agents): use tracked MCP temp dirs
2026-07-29 05:13:56 -04:00
Peter Steinberger 05516e7a5f fix(plugins): stop repeated manifest realpath scans (#115783)
Fixes #115524 by keeping path canonicalization scoped to each manifest and persisted registry build.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 05:10:49 -04:00
Vincent Koc 80707db7ab fix(plugins): bound hook execution and retire stale registrations (#115695)
* fix(plugins): bound hooks and own legacy registrations

* docs(hooks): clarify internal handler ownership

* fix(cli): retain message hook shutdown deadline
2026-07-29 16:44:05 +08:00
Vincent Koc bf91a5786c fix(plugins): enforce hook security invariants (#115701) 2026-07-29 16:10:34 +08:00
Peter Steinberger ed7d01be34 fix(providers): keep model refs out of plugin paths (#115713) 2026-07-29 03:54:40 -04:00
Vincent Koc 14940edf15 feat(skills): add Skill Workshop lifecycle hooks (#115606)
* feat(skills): add lifecycle hook contracts

* feat(plugins): expose skill hook contracts

* feat(plugins): identify skill evaluators

* feat(skills): persist proposal evaluation lifecycle

* feat(skills): add agent evaluation action

* feat(skills): emit committed skill lifecycle changes

* feat(gateway): expose skill proposal evaluation lifecycle

* feat(ui): add Skill Workshop evaluations

* fix(skills): bind lifecycle state to proposal revisions

* fix(skills): preserve lifecycle events without artifacts

* feat(cli): evaluate skill proposals

* fix(ui): bind evaluations to proposal revisions

* docs(skills): document lifecycle hook primitives

* chore(plugin-sdk): refresh skill hook surface

* fix(skills): harden proposal evaluator execution

* fix(plugins): isolate skill evaluator inputs

* fix(cli): align skill lifecycle deadlines

* fix(skills): preserve evaluation replay invariants

* test(ui): capture Skill Workshop evaluation proof

* fix(skills): bind apply to evaluated target tree

* fix(skills): preserve evaluation contract edges

* fix(skills): bound evaluation event storage

* chore(skills): keep lifecycle helpers internal

* refactor(skills): isolate evaluation persistence

* fix(skills): satisfy lifecycle validation gates

* chore(protocol): refresh Skill Workshop clients

* docs: refresh Skill Workshop map

* chore: keep release notes in PR metadata

* docs: refresh merged docs map

* fix(ci): type Code Mode catch errors

* fix(skills): freeze lifecycle observation payloads

* fix(protocol): keep proposal inspect backward-decodable

* fix(skills): enforce final evaluator bundle limits

* fix(skills): preserve lifecycle caller attribution

* chore: drop subsumed Code Mode formatting

* test(plugins): adapt lifecycle hook mocks
2026-07-29 15:49:44 +08:00
Peter Steinberger 14ad80481a perf(gateway): prewarm dashboard data caches after startup (#115710) 2026-07-29 03:30:46 -04:00
Vincent Koc dd3d1d1a8b fix(ui): hide pre-thread changes from session diffs (#115708)
* fix(ui): scope session diffs to thread changes

* docs: refresh generated map
2026-07-29 15:17:47 +08:00
Peter Steinberger 0babd1a73f fix(tts): persist generated speech in media store (#115647) 2026-07-29 02:37:19 -04:00
Peter Steinberger ddd0b48673 refactor: remove 3,527 lines of runtime and test duplication (#115626)
* refactor: remove obsolete runtime and test duplication

* test: preserve typed cron and realtime fixtures
2026-07-29 02:21:20 -04:00
Peter Steinberger 1b9481012b fix(active-memory): share one recall per run across retries (#115627)
* fix(active-memory): share one recall per run across retries

Register in-flight recalls per ctx.runId so overlapping or changed-prompt
attempts join a single execution, and gate replacement recalls on settled
timeout cleanup. Entries clear on agent_end. Fixes #106957.

* fix(active-memory): evict rejected recall entries

* test(active-memory): clarify run result retention

* test(active-memory): complete recall result fixture
2026-07-29 02:16:59 -04:00
Peter Steinberger 032defb172 fix(nodes): cancel paired local inference when callers disconnect (#115624) 2026-07-29 02:00:22 -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 161a136941 fix(gateway): speed up startup with stateless plugin paths (#115578) 2026-07-29 01:34:49 -04:00
Peter Steinberger ab3a788612 fix(models): read self-hosted context metadata (#115566)
Co-authored-by: Alaundo <alaundo@mohl.it>
2026-07-29 00:43:07 -04:00
Peter Steinberger d41a56fca1 feat(memory): isolate curated entries by project (#115438)
* feat(memory): scope recall to active projects

* feat(memory): preserve project scope in promotion

* docs(memory): explain project-scoped recall

* fix(memory): chunk curated files per entry

* refactor(memory): narrow project scope internals

* fix(memory): exclude annotations from concept tags

* fix(memory): tighten project isolation boundaries

* fix(memory): preserve project path casing

* fix(memory): prioritize project bootstrap candidates

* docs: refresh memory architecture map

* test(memory): cover project scope schema repair

* fix(memory): complete project isolation paths

* fix(memory): close project ranking checks

* fix(memory): reinitialize search provider before ranking

* fix(memory): tolerate missing bootstrap paths
2026-07-28 23:55:49 -04:00
Peter Steinberger 7a1aa4eb4f feat(ui): Talk settings page with catalog-driven realtime pickers (#115409)
* feat(talk): emit realtime models and voices in talk.catalog and mirror create-time readiness

* feat(ui): add curated Talk settings page with catalog-driven pickers

* docs(talk): correct stale claims and add one-page GPT-Live setup path

* fix(ui): refresh Talk catalog on config-hash advance and neutralize GPT-Live badge

* fix(ui): provider-aware Talk selection, atomic provider switch, focus refresh

* fix(ui): resolve Talk provider fallbacks via catalog and make Default a true reset

* fix(ui): provider-compatible transports and race-free Talk catalog loads

* fix(ui): never resolve an unknown explicit Talk provider to the active one

* docs(talk): note Android relay readiness caveat for browser-only models

* fix(ui): keep the relay transport when switching Talk provider to Auto

* fix(ui): align section-ownership test and drop unused export after rebase
2026-07-28 17:38:15 -04:00
Peter Steinberger 8ee1d046d3 refactor(sessions): consolidate entry state (#115299)
* refactor(sessions): consolidate entry state

* refactor(gateway): unify session kind classification

* refactor(sessions): keep entry state types private

* test(sessions): drop retired pending delivery case

* fix(sessions): clear stale transport-only delivery
2026-07-28 14:31:02 -04:00
Peter Steinberger b07efcb6dc perf(plugins): serve plugins.list from the process-current metadata snapshot (#115353) 2026-07-28 14:22:51 -04:00
Peter Steinberger 2b8e6395b9 fix: prevent node gateway hangs and runaway local inference (#115248)
* fix(node): bound gateway wake, cancellation, and local inference

* refactor(gateway): extract bounded node invocation policies
2026-07-28 12:47:30 -04:00
Peter Steinberger 695db84cd1 feat(plugins): match shared models across vendor-namespaced catalog ids (#115210)
Aggregators republish first-party models under a namespaced id and varying
case, so the shared-model check could not group novita/moonshotai/kimi-k3 with
moonshot/kimi-k3. Matching now ignores one leading namespace segment and case,
which catches that whole class automatically instead of needing an
upstreamModel marker per row.

Declares the tier on the 18 rows this surfaces across baseten, deepinfra, gmi,
novita, nvidia, and together. All are "capable", matching what the runtime
already applied for an absent flag, so behavior is unchanged.
2026-07-28 10:22:23 -04:00
Peter Steinberger 99ec30b44b feat(plugins): catch code-mode drift between catalogs shipping the same model (#115183)
* feat(plugins): catch code-mode drift between catalogs sharing one model

Adds a contract test that groups bundled catalog rows by shared upstream
model and requires every row in a group to declare compat.codeMode once any
sibling does. Rows sharing a model id group automatically; rows under
different ids opt in with the new manifest-only `upstreamModel` marker.

Moves the kimi catalog into its manifest so the scan can see it, and records
the tier reseller catalogs were silently missing as explicit "capable".

* docs: regenerate docs map for the shared-model code-mode section
2026-07-28 08:52:21 -04:00
Peter Steinberger 107bc4f963 fix: make gateway nodes and local inference reliable under stress (#115185) 2026-07-28 08:41:14 -04:00
lee-xydt f78d58379a fix(plugins): clone registration record metadata for transactional rollback isolation (#108084)
* fix(plugins): deep-clone registry snapshot values for transactional rollback isolation

Shallow spread / new Map() copies nested objects by reference, so
in-place mutations on PluginRecord fields and Map values inside
arrays leak through rollback() — violating transactional isolation.

Wrap array items, Map values, and object properties in a recursive
deep-clone helper that preserves function references so handlers
and resolvers are not lost. Fixes #106647.

* fix(plugins): replace generic deep-clone with targeted shallow record cloning

Replace the recursive deepCloneRegistryValue with cloneRegistryEntry that
shallow-clones registration records to isolate primitive metadata fields
while preserving opaque plugin-owned instances (providers, services,
channels, harnesses, resolvers) by reference. A generic deep-clone was
too broad: it converted every plugin-owned object into a plain object,
losing prototypes, internal slots, and shared identity.

Add a class-instance regression test proving that providers survive
snapshot/rollback with their prototype chain intact and methods callable.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(plugins): add curly braces and fix TS type assertions for CI

- Add curly braces to single-line if statements in cloneRegistryEntry
  to satisfy eslint curly rule
- Use `as unknown as ProviderPlugin` double cast for test class instance
- Call test methods on original variable instead of through registry type

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* test: add loader-scenario rollback proof for two sequential plugin transactions (#106647)

Simulate the real loader pattern from loader-runtime-candidate L492-531:
transaction 1 registers a class-backed provider and commits, transaction 2
mutates registry state and rolls back. Prove the first plugin's metadata is
restored and its class-backed provider instance, prototype, and methods
survive the rollback.

* fix(plugins): snapshot active PluginRecord in registration transactions (#106647)

Add activeRecord parameter to createPluginRegistrationTransaction so
the active record's array fields (toolNames, hookNames, providerIds, etc.)
are snapshotted at transaction creation and restored on rollback.
Without this, the loader's recordPluginError path re-pushes the record
with stale id arrays from the failed register() call.

Also replace flat container copies in snapshotPluginRegistry with
cloneRegistryEntry that shallow-clones individual registration records
while preserving opaque plugin-owned objects by reference.

Update all three production callers (loader-runtime-candidate,
loader-channel-runtime, loader-cli-registry) to pass activeRecord.

* fix(plugins): snapshot all mutable PluginRecord metadata in transactions (#106647)

Expand activeRecord snapshot from array-only to full cloneRegistryEntry
so scalars (httpRoutes, hookCount), flags (configSchema, enabled,
memorySlotSelected), and Dates are also restored on rollback. Runtime
objects (configUiHints, configJsonSchema, contracts) stay by reference.

Also update the activeRecord JSDoc to reflect the broader contract.

* fix(plugins): restore exact rollback record shape

Co-authored-by: 詹幸心0668001037 <zhan.xingxin@xydigit.com>

* test(plugins): cover date rollback isolation

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: 詹幸心0668001037 <zhan.xingxin@xydigit.com>
2026-07-28 08:24:48 -04:00
Peter Steinberger 9692e62119 test: align release validation fixtures (#115146)
* test: forward-port release validation fixtures

* test(telegram): isolate native command test dependencies

* test(telegram): await async file logs
2026-07-28 07:08:08 -04:00
Peter Steinberger 0ecd449a43 fix(plugins): report missing plugin modules as missing, not boundary escapes (#115053)
* fix(plugins): report missing plugin modules as missing, not boundary escapes

The root-scoped open helper returns a classified failure, but five plugin
loader sites collapsed every failure into "escapes plugin root or fails
alias checks". A plugin artifact that is simply absent — e.g. while
dist/extensions/<id> is being re-emitted by a build — was therefore
logged as a containment violation.

Classify the failure instead: missing (ENOENT/ENOTDIR), unreadable
(coded), or an actual boundary/alias rejection. The containment check is
unchanged; only the reported reason is. Also drops the never-supplied
boundaryLabel/boundaryRootDir parameters on loadChannelPluginModule so
one root carries one label.

* test(infra): rename lint-flagged local helper in boundary failure test
2026-07-28 07:06:24 -04:00
Peter Steinberger 28630a9a65 feat(memory): provenance-gated memory with dreaming on by default (#114819)
* feat(memory): add provenance and recall metadata to the memory index

* feat(memory): provenance-gated promotion and capture hygiene

* feat(dreaming): LLM consolidation with deterministic gates, on by default

* feat(active-memory): deterministic recall lane with escalation default

* feat(memory): user model file and standing intents

* docs(memory): document the memory architecture

* fix(memory): live-QA fixes — metadata writers, provenance classes, intent scope, claim accumulation
2026-07-28 06:04:25 -04:00
Vincent Koc 75531b2fb7 refactor(plugins): remove dead provider test reset (#115043) 2026-07-28 15:54:06 +08:00
Peter Steinberger 6b255f1f74 improve(gateway): reduce plugin startup memory (#115020)
* perf(gateway): reduce plugin startup memory

* test(plugins): cover effective alias order caching
2026-07-28 03:33:03 -04:00
Peter Steinberger ca2681313b fix(channels): fail channel start when the durable ingress queue is denied (#114998)
An untrusted channel plugin cannot open its durable ingress queue, but the shared
ingress monitor resolved the queue lazily, so start() armed the poll timer anyway and
every tick re-invoked the throwing factory. On a production gateway that produced one
INFO-level "slack ingress drain failed" line per second for 26+ hours while Slack
reported connected and healthy and every inbound event was silently dropped.

Open the queue before arming the poll timer so an unusable monitor fails channel start
through the caller instead of spinning. Also report the actual denied capability:
openChannelIngressQueue and openSyncKeyedStore both announced themselves as
openKeyedStore, and the message named neither the plugin nor its origin.
2026-07-28 03:17:09 -04:00
Peter Steinberger d6096f36e4 refactor(plugins): reuse prepared channel discovery (#114942)
* refactor(plugins): reuse prepared channel discovery

* fix(plugins): keep prepared catalog types acyclic

* test(auto-reply): preserve real plugin registry exports
2026-07-28 02:34:39 -04:00
Peter Steinberger 6dbe7ff1e2 perf(catalog): memoize probes and single-flight identical list requests (#114961) 2026-07-28 02:00:27 -04:00
Peter Steinberger 938749180e refactor(nodes)!: retire arming leases for durable capability enablement (#114892)
* refactor(nodes): retire phone control leases

* fix(doctor): clean retired phone control state

* docs(nodes): document durable capability enablement

* docs(changelog): defer node enablement note

* fix(doctor): harden retired phone control cleanup

* fix(doctor): fail closed on unreadable lease state

* fix(doctor): validate retired lease journals

* fix(doctor): preserve deny-shadowed consent

* docs: refresh node authorization map

* fix(doctor): keep retirement helpers private
2026-07-27 23:51:30 -04:00
Peter Steinberger d7622734d5 feat(code-mode): unify node MCP namespaces (#114876) 2026-07-27 23:07:06 -04:00
Peter Steinberger 4273ca9dbd refactor(sessions): remove file-era transcript runtime (#113233)
* refactor(sessions): keep helper transcripts in memory

* refactor(sessions): remove file-era transcript storage

* test(sessions): use SQLite identity in attempt persistence

* test(codex): isolate legacy transcript fixtures

* fix(sessions): preserve SQLite transcript identity

* fix(sessions): harden transcript lifecycle invariants

* fix(sessions): validate transcript identities

* fix(sessions): close identity compatibility gaps

* fix(sessions): preserve leaf and plugin identities

* fix(sessions): retain dispatch transcript targets

* fix(sessions): preserve active transcript context

* fix(sessions): isolate artifact accounting

* fix(sessions): bound SQLite usage accounting

* fix(sessions): retain bounded latest usage

* fix(sessions): align rebased transcript targets

* test(sessions): align accessor scope fixture

* fix(telegram): derive SQLite transcript identity

* refactor(sessions): remove file-era compaction residue

* chore(sessions): lower max-lines baseline

* fix(sessions): preserve structured transcript identity

* test(sessions): align doctor identity assertions

* fix(sessions): isolate default SDK database

* refactor(sessions): remove dead file-era exports

* fix(sessions): reconcile SQLite transcript identity

* fix(sessions): pass checkpoint identity explicitly

* test(sessions): make entry field probe explicit

* test(sessions): satisfy transcript cleanup lint

* test(sessions): align diagnostics identity proof

* fix(sessions): finish transcript runtime teardown

* fix(sessions): preserve transcript identity invariants

* fix(sessions): harden transcript compatibility edges

* fix(sessions): preserve checkpoint transcript anchors

* fix(sessions): preserve SQLite lifecycle invariants

* fix(sessions): retarget compaction successors

* test(sessions): preserve transcript fixture semantics

* feat(plugin-sdk): add command transcript targets

* fix(sessions): serialize transcript rewrites

* fix(sessions): validate legacy successor identity

* fix(sessions): normalize compaction ownership

* fix(sessions): validate successor identity before adoption

* fix(sessions): preserve plugin transcript ownership

* fix(sessions): carry transcript identity through commands

* fix(sessions): import legacy checkpoint artifacts into SQLite

* fix(sessions): preserve successor transcript ownership

* fix(sessions): align transcript consumers with target identity

* fix(sessions): scope transcript token estimates

* fix(sessions): retain agent identity across lifecycle hooks

* fix(sessions): resolve scoped SQLite targets

* fix(sessions): isolate lifecycle transcript targets

* fix(sessions): validate compaction agent ownership

* fix(sessions): preserve reset and cleanup lifecycle

* fix(sessions): serialize prompt cleanup lifecycle

* fix(sessions): remove stale lock import

* fix(sessions): preserve reset target context

* fix(sessions): fence prompt reload takeover

* fix(sessions): unblock abort and default lifecycle reads

* fix(sessions): validate legacy successor scope

* fix(sessions): reject metadata-only runtime rows

* fix(sessions): propagate custom transcript stores

* fix(sessions): preserve adopted retry targets

* fix(sessions): allow unkeyed usage reads

* fix(sessions): harden runtime target boundaries

* fix(sessions): serialize retry transcript writes

* fix(sessions): bound prompt reload disposal

* fix(sessions): complete retry marker identity

* fix(sessions): keep legacy marker identity minimal

* test(sessions): tighten teardown fixture types

* fix(sessions): preserve compatibility target identity

* test(sessions): persist post-checkpoint boundary turn

* test(sessions): align runtime store mock contracts

* style(sessions): simplify persisted identity guard

* fix(sessions): prefer complete typed targets

* fix(sessions): recover legacy marker targets

* test(sessions): align marker lookup fixture scope

* fix(sessions): validate partial transcript targets

* fix(sessions): reconcile partial transcript identities

* fix(sessions): canonicalize compatibility identities

* test(sessions): cover compatibility aliases

* fix(sessions): adopt legacy successor identity

* fix(sessions): preserve usage read identity

* fix(sessions): preserve partial marker compatibility

* fix(sessions): validate legacy successor mappings

* fix(sessions): reconcile marker store mappings

* fix(sessions): preserve legacy fallback identity

* fix(sessions): harden marker alias resolution

* fix(sessions): prefer verified successor aliases

* fix(sessions): resolve preferred marker aliases

* fix(sessions): serialize cleanup admission

* fix(sessions): align marker lookup scopes

* fix(codex): type marker alias summaries

* style(sessions): satisfy changed lint

* test(sessions): align structured target assertions

* fix(sessions): reconcile latest identity contracts

* fix(sessions): validate transcript identity boundaries

* docs(sessions): explain stable registry keys

* fix(sessions): harden compatibility target round trips

* fix(sessions): port usage identity to split modules

* test(sessions): align subagent transcript identity

* fix(sessions): finish transcript identity migration

* fix(agents): route subagent completion capture through transcript targets

* fix(agents): settle SQLite prompt handoff during cleanup

* chore: shrink max-lines baseline after teardown

* fix(sessions): port teardown across split runtime owners

* fix(sessions): carry transcript targets through split owners

* test(agents): use SQLite compaction target in abort coverage

* chore: retain unrelated max-lines suppressions

* chore: shrink max-lines baseline after main splits

* style(agents): const compaction checkpoint locals

* fix(sessions): harden SQLite teardown boundaries

* test(sessions): use typed metadata in predicate isolation fixture

* test(agents): cover malformed settlement rejections lint-safely

* fix(sessions): close remaining SQLite identity races

* fix(agents): fail closed on incomplete successor targets

* fix(sessions): preserve transcript identity fallbacks

* fix(agents): preserve session-key abort admission

* fix(trajectory): validate incomplete export targets

* test(sessions): drop retired pricing cache imports

* fix(sessions): validate partial transcript identities

* fix(sessions): close transcript identity edge cases

* fix(plugins): reserve retired transcript locator slot

* fix(sessions): scope transcript locks by target

* style(sessions): simplify SDK initialization error

* fix(sessions): preserve initialized transcript state

* fix(codex): verify mirrored history session keys

* fix(sessions): reject stale transcript ownership

* fix(sessions): anchor asynchronous transcript ownership

* fix(sessions): measure active transcript state

* fix(sessions): preserve scoped transcript compaction

* fix(sessions): harden transcript identity and lifecycle

* fix(sessions): resolve scoped command transcript stores

* fix(sessions): make transcript appends failure-atomic

* fix(sessions): enforce scoped transcript ownership

* fix(sessions): reject cross-owner transcript handoffs

* fix(sessions): fence cleanup transcript ownership

* fix(sessions): retire stale write ownership contexts

* fix(sessions): preserve pending session migration state

* fix(sessions): validate migrated transcript ownership

* fix(sessions): validate usage transcript targets

* fix(sessions): clear predecessor transcript metadata

* fix(sessions): align durable session event targets

* fix(sessions): fence late prompt handoffs

* fix(sessions): fence lifecycle transcript fallbacks

* fix(sessions): bound zero-length memory capture

* fix(sessions): preserve transcript teardown ownership

* fix(sessions): reject duplicate cleanup ownership

* fix(sessions): serialize runtime writes with sqlite leases

* fix(sessions): close sqlite teardown concurrency gaps

* fix(sessions): preserve nested lifecycle failures

* fix(sessions): canonicalize sqlite transcript ownership

* fix(sessions): settle disposed prompt handoffs

* fix(sessions): resolve canonical attempt lock targets

* test(sessions): align canonical target fixtures

* test(sessions): retire redundant jsonl parser coverage

* refactor(sessions): split active transcript cursors

* test(memory): retire legacy marker fixture

* fix(sessions): preserve canonical transcript access after rebase

* fix(sessions): fence prompt lease and return transcript targets

* fix(sessions): colocate transcript leases with target store

* fix(sessions): canonicalize transcript lease and worker targets

* fix(sessions): preserve plugin and fork identity markers

* fix(sessions): complete sqlite transcript target migration

* fix(sessions): integrate canonical followup identity

* fix(sessions): preserve bounded transcript topology

* fix(sessions): validate transcript identity boundaries

* fix(context): separate caller and successor targets

* test(sessions): split persistence compatibility coverage

* test(sessions): preserve fixture topology efficiently

* chore(sdk): refresh plugin api baseline

* test(agents): align compaction lock target mocks

* test(sessions): seed malformed transcript fixtures directly

* fix(agents): canonicalize transcript compatibility inputs

* fix(agents): type optional tool result ids

* test(ci): stabilize loaded process timing

* test(tui): wait for collect queue admission
2026-07-27 22:33:24 -04:00
Jason (Json) 78720fbaef fix(plugins): load replacement npm plugin after reinstall (#114713)
* fix(plugins): reconcile managed npm load paths

* fix(plugins): preserve replacement load path order
2026-07-27 19:48:45 -06:00