kimi-code/packages/agent-core/test/agent
Kai 65d30177ad
feat(agent-core): record llm request trace in wire.jsonl (#1448)
* feat(agent-core): record llm request trace in wire.jsonl

Add three observability record types so every request sent to the model
can be reconstructed from the wire log at the logical-request level:

- llm.tools_snapshot: content-addressed snapshot of the top-level tools
  table as sent (post deferred-strip), written once per unique table
- llm.request: one record per outbound request (retries, strict resends,
  and compaction rounds included) carrying the effective request params
  and hash links to the system prompt and tools snapshot
- mcp.tools_discovered: the server's verbatim tools/list result plus the
  agent's gating (allow-list, collisions), deduplicated by content hash

Observability records never feed state rebuild; replay only restores the
write-dedup cursors. The records/types.ts contract now documents the two
record classes explicitly (persisted is not the same as replayed).

Recording happens at the single Agent.generate choke point. The
LLMRequestLogFields side channel gains kind/projection/maxTokens/
droppedCount, chatWithRetry preserves caller-set fields, and compaction
tags its requests. The vis wire view renders the new record kinds.

* fix(agent-core): record the provider-clamped completion cap in the request trace

The llm.request trace recorded the client-requested budget cap, but
chat-completions providers tighten the actual wire value inside
withMaxCompletionTokens (remaining-context sizing, transport ceilings,
model-default resolution) — with the default budget the clamp is active
on nearly every non-empty-context request, so the recorded value did not
match what was sent.

Providers now expose the effective cap they computed as a readonly
maxCompletionTokens field on the clone, and the recorder reads it from
the effective provider at the Agent.generate choke point. This replaces
the side-channel recomputation, which is removed along with the
appliedCompletionBudgetCap helper.

* fix(agent-core): park pre-replay MCP discovery records and hash the collision outcome

Two wire-hygiene fixes for the mcp.tools_discovered trace:

Parking: the real Session ordering connects MCP servers concurrently with
agent construction, so ToolManager can observe a connected server before
agent.resume() has replayed the wire. Recording at that point bypassed
the restored dedup cursor (duplicating a 1-50KB record on every resume)
and appended a stray metadata record ahead of replay. AgentRecords now
exposes a one-shot opened latch — set when replay completes (after the
migration rewrite flushes) or when the first live record is logged — and
ToolManager parks discoveries until then, re-running the dedup check at
drain time. A frozen range-limited replay never opens; those agents are
transient previews.

Collision hashing: the dedup hash now covers the collision outcome, not
just the raw list and allow-list. Collisions depend on which other
servers hold a sanitized qualified name at registration time, so a
server can re-register with identical tools but a flipped outcome; that
gating change must produce a new record instead of being suppressed.

* fix(agent-core): skip the request trace for pre-flight-aborted calls

Mirror kosong generate()'s pre-flight abort check at the Agent.generate
choke point: a call whose signal is already aborted never reaches the
wire (generate throws before dispatching), so it must not leave an
llm.request/llm.tools_snapshot trace or a diagnostic log line claiming a
request was sent. Recording stays before dispatch for every call that
passes the gate, preserving the crash-safety of the trace.

* chore(agent-core): remove a leftover adaptive-thinking override hook

The adaptiveThinkingOverride option was a temporary local hook explicitly
marked for removal before commit. Nothing passes it, so resolution falls
back to the alias-level adaptiveThinking value in all cases; drop the
option and the dead indirection.

* fix(kosong): derive the exposed completion cap from generation kwargs

maxCompletionTokens was a field stored only by withMaxCompletionTokens,
so caps that reach the wire through other paths were invisible to the
request trace: with completion budgeting disabled via env, Anthropic
still sends the constructor-resolved max_tokens (required by the
Messages API), and constructor-level kwargs like OpenAILegacyOptions
maxTokens were likewise unreported.

Replace the stored field with a getter derived from each provider's
generation kwargs — the single source the request body reads — covering
constructor defaults, direct withGenerationKwargs configuration, and
budget application in one place. Kimi mirrors its request-time legacy
max_tokens alias normalization; openai-legacy reuses the same
normalizeGenerationKwargs the request path uses.

* feat(agent-core): add thinkingKeep passthrough for Kimi providers and update tests
2026-07-07 14:09:19 +08:00
..
background fix(agent-core): cap background shell output to match foreground (#1372) 2026-07-04 18:48:04 +08:00
compaction feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
config feat: add model alias overrides (#1262) 2026-07-01 19:57:13 +08:00
context fix(agent-core): harden tool_use/tool_result exchange integrity (#1340) 2026-07-03 14:26:57 +08:00
cron feat(cron): render scheduled reminders in TUI and expose fired events (#204) 2026-06-01 11:34:35 +08:00
harness feat(agent-core): progressive tool disclosure via select_tools (#1369) 2026-07-06 15:51:08 +08:00
injection feat(agent-core): rework compaction to keep only user prompts and summary (#1214) 2026-07-01 01:17:30 +08:00
permission feat(goal): support guided goal authoring (#839) 2026-06-18 18:48:23 +08:00
records refactor: move tool-result metadata into a structured note side channel (#1437) 2026-07-07 11:40:27 +08:00
turn feat(agent-core): detect and escalate repeated tool calls to prevent infinite loops (#364) 2026-06-03 14:16:14 +08:00
basic.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
bg-idle-notification-repro.test.ts fix: preserve long tool output (#1062) 2026-06-24 14:42:11 +08:00
config-state.test.ts feat(agent-core): enable Preserved Thinking by default on the Anthropic provider (#1432) 2026-07-06 23:45:17 +08:00
config.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
context.test.ts refactor: move tool-result metadata into a structured note side channel (#1437) 2026-07-07 11:40:27 +08:00
dynamic-tools.test.ts feat(agent-core): progressive tool disclosure via select_tools (#1369) 2026-07-06 15:51:08 +08:00
goal-outcome.test.ts fix: polish goal lifecycle messaging (#555) 2026-06-09 11:47:00 +08:00
goal.test.ts fix: polish goal lifecycle messaging (#555) 2026-06-09 11:47:00 +08:00
image-caption-injection.test.ts fix(agent-core): route image-compression captions through hidden system reminders (#1348) 2026-07-03 16:21:10 +08:00
kosong-llm.test.ts feat: record model response id in wire logs (#1349) 2026-07-03 17:15:04 +08:00
llm-request-recorder.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
permission.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
plan.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
question.test.ts feat(agent-core): ModelProvider interface and SingleModelProvider (#167) 2026-05-28 22:27:09 +08:00
resume.test.ts refactor: move tool-result metadata into a structured note side channel (#1437) 2026-07-07 11:40:27 +08:00
skill-prompt.test.ts fix: surface skill directory in the loaded-skill context block (#785) 2026-06-15 22:29:00 +08:00
skill-tool-manager.test.ts fix: surface skill directory in the loaded-skill context block (#785) 2026-06-15 22:29:00 +08:00
tool-result-render.test.ts refactor: move tool-result metadata into a structured note side channel (#1437) 2026-07-07 11:40:27 +08:00
tool-select.e2e.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
tool.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
turn.test.ts feat(agent-core): record llm request trace in wire.jsonl (#1448) 2026-07-07 14:09:19 +08:00
usage.test.ts Kimi For Coding 2026-05-22 15:54:50 +08:00