Files
deepseek-harness/packages/extensions
Yichen Jiang 7e95a00c8a fix(llm): align replay state with assembled content and degrade unusable state
A max-tokens response that included a tool call persisted assembler-transformed
content next to replay metadata projected from the untransformed native message,
so the next request died in history reconstruction with INVALID_REPLAY_STATE and
the session stayed permanently stuck.

Write side: the finish chunk's replayState becomes a typed ReplayEnvelope —
opaque response-level metadata plus optional per-block entries aligned with the
emitted block sequence. BlockAssembler computes one keep/drop decision for
blocks and entries together, so stored metadata always describes stored content
and retained blocks keep their signatures. pi-ai splits its state into a
version-2 response half and per-block signature entries.

Read side: durable content is authoritative. toPiAssistant degrades any
unusable state — foreign kind, other versions (including the flat v1 form
already on disk), malformed metadata, or content/block mismatches — to the
existing provider-neutral conversion with an onReplayDegrade diagnostic instead
of failing the request, which un-bricks sessions poisoned before this change.

Covered by assembler and replay unit tests, an agent-loop continuation
regression, keyless real-composition continuation tests (native pruned-envelope
replay and legacy flat-state degrade), and the authored keyless snapshot
scenario max-tokens-continue through the assembled ACP app.
2026-08-15 16:07:30 +08:00
..
2026-08-13 02:29:17 +08:00
2026-08-13 02:29:17 +08:00
2026-08-13 02:29:17 +08:00

extensions/ — the agent modifies its own runtime

English | 中文

Model-facing tools over the live cordis runtime the agent itself runs inside: inspect the loaded plugins and service API, define and run model-written dynamic packages, and retract them again — plus the restricted repository Plugin runtime. Both browser-half packages live here rather than under packages/client/ because they are halves of this subsystem's dual-half packages; the host aggregate excludes them so each face keeps its own compiler program. Design home: the toolset Agent Note.

Package Role ctx key
tool-cordis/ Model-facing runtime inspection and dynamic-package tools registers on ctx.tools
cordis-host-runner/ Definition registry, the node:vm sandbox for host halves, and the request-run round trip provides ctx.dynamicCordisRunner
cordis-client-runner/ Browser half of a dual-half package: evaluates the definition into a live browser plugin and answers the run request client face; provides the browser ctx.dynamicCordisRunner
ui-cordis/ Browser surfaces: the frame-wide panel that operates every definition, and the read-only define card client face; registers slots