mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
The identifier test was ASCII-only, so an object with a `路径` field degraded to dict[str, Any] -- dropping every sibling field's name, requiredness and type, with no native schema behind it in Code Mode to carry them. Python identifiers are `xid_start xid_continue*`, so match that instead, and widen camelCase's split and head check to the same sets (naming `_` explicitly in the split, since it is XID_Continue). NFKC stability is a second and separate condition. CPython normalizes identifiers at compile time while a JSON key is compared as written, so a U+FB01 ligature key would be declared and reachable under its ASCII expansion, a key the tool never accepts, and two keys that normalize together would collapse into one declaration. Those names take the subscript path. Generated class names are normalized instead of rejected -- they are never matched against a key. Astral characters can now reach the class-name cap, whose slice counts UTF-16 code units, so drop a split surrogate half. Also fix two comment claims. The note said one projection reads the runtime twice per tool; the language-aware getters are installed on run_code's own definition, so it is twice, both for that schema. And the 182-bracket site's reachability is an array reached from the root through oneOf arms alone -- a union spine of any depth, not just one root union; an object ancestor restarts the chain at the 181 site.
core/ — product API spine
English | 中文
The session log, system-prompt assembly, tool registry, agent vocabulary, and concrete loop that form the harness's default control spine. These are product packages — the stable surface plugins and consumers build against.
| Package | Role | ctx key |
|---|---|---|
scope/ |
Scoped-context registration primitive | library — no ctx key |
session/ |
Event-sourced session log and in-memory store | ctx.sessions |
system-prompt/ |
Prompt and tool-schema assembly registry | ctx.systemPrompt |
tools/ |
Scoped tool registry and execution pipeline | ctx.tools |
agent/ |
Agent interface, registry, and event vocabulary | ctx.agents |
agent-loop/ |
Default concrete agent driver | ctx.agentLoop |
scope supplies the shared scoping primitive. agent owns the public seam, while agent-loop is its default implementation; extension plugins depend on the seam so the driver remains swappable.
Runnable compositions belong to examples/agent-spine-demo; this group owns only the swappable spine pieces.