Files
deepseek-harness/packages/spill
Dudu-0223 c9310d2a19 fix: address codex review round 3
- spill-policy enforces the true cap invariant: it never emits a replacement
  larger than maxInlineBytes. When the notice alone exceeds the cap (tiny cap or
  long spill root) there is no within-cap replacement, so the inline result is
  kept — the previous guard only compared against the original size and could
  still return content over the cap for a large original. A within-cap
  replacement is always smaller than the original, so this subsumes the earlier
  check.
- Add the HMR-disposal test the conventions require for a new registration:
  dispose the plugin fiber and assert oversized results stop being transformed
  and nothing more is spilled (no leaked tools/post-execute listener on reload).
2026-07-09 10:07:07 +08:00
..

spill/ - spill storage capability family

The tool-output spill capability seam: an abstract storage interface, a local filesystem implementation, and the tool-result policy that uses it. All product packages.

Package Role ctx key
spill/ Abstract spill storage seam (saveText — persist oversized tool text to a session-scoped path) ctx.spillFiles
spill-local/ Local-filesystem backend: private, session-scoped files with traversal-safe names (registers on ctx.spillFiles)
spill-policy/ tools/post-execute policy: replaces oversized plain-text results with a preview + spill path (no service surface)

The interface lives at spill/spill/. The split mirrors bash/fs: the seam owns storage only, spill-local owns the filesystem mechanics, and spill-policy owns WHEN to spill and the model-facing notice. Preview mechanics stay in util/retention — the policy composes the two without either owning the other's job.

See the tool output spill RFC for the design rationale, including why final-result spill is separate from tool-owned early spill (bash streams, subagent rollouts) and why creation belongs to the runtime spill seam rather than the model-facing write tool.