fix: resolve cyclic structure serialization crash in token counter - #839
fix: resolve cyclic structure serialization crash in token counter#839OmarAlaaeldein wants to merge 1 commit into
Conversation
|
Good catch on the root cause — a recursive/self-referential Two things worth tightening before this could be ported:
Also worth double-checking: converting functions to Core idea is worth porting; please add a test and split out (or justify) the string-input behavior change. |
|
Marking this stale - there has been no activity here for 50 days. It will close in 7 days unless someone comments. This is backlog upkeep, not a verdict on the pull request. A single comment keeps it open, and anything closed this way can be reopened. |
When the token count API call fails or is not available, the CLI fallback logic serializes using . However, contains raw Zod schema objects (), which have circular references, causing a TypeError. Changes: - Added a utility to strip circular references from objects. - Sanitize the inside at creation time using so it is a plain, serializable object. This also prevents similar serialization failures when saving run state to disk.
85753fa to
7adbf86
Compare
|
Rebased onto current main and tightened the serialization fix. countTokensJson keeps its existing JSON-string serialization behavior; safeJsonStringify handles circular values, drops function properties using JSON semantics, and is used when persisting tool schemas. Added regression coverage for circular references, function properties, and string serialization. Verified with: bun test packages/agent-runtime/src/util/tests/token-counter.test.ts (9 passing). |
This PR fixes a TypeError crash:
JSON.stringify cannot serialize cyclic structureswhen the token count API fails and falls back to local estimation.safeJsonStringifyintoken-counter.tsto handle circular references.inputSchemainsidetoolDefinitionsat creation time usingJSON.parse(safeJsonStringify(schema))so it is a plain, serializable object.run-state.json).