feat: virtual agents v3 (Stages 1-3) + real fixes for chat/adapter/CLI thread format #67
Reference in New Issue
Block a user
Delete Branch "feat/virtual-agent-v3"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
v3 Stage 1 (already in branch):
Agent.kind/status/...lifecyclefields + chat.service
kind=virtualbranch + DB migration.v3 Stage 2 (already in branch): AgentService virtual methods +
GC cascade so Agent.llmId Restrict FK doesn't block Llm sweeps.
v3 Stage 3 (this round):
_provider-registerpayload accepts anoptional
agents[]array; mcplocal config gains a top-levelagentsblock; mcplocal registrar reads it and forwards to mcpd.
Real fixes uncovered by running the live smoke against
qwen3-thinking — none of these are fixed by tweaking the tests:
openai-passthroughadapter no longer doubles/v1when the userpasses a conventional
https://x/v1base URL.reasoning_contentwhen thinking models emit only thinking output (with a
[response truncated by max_tokens]marker onfinish_reason: length).get agent X -o yamlstripskind/status/lastHeartbeatAt/inactiveSince/ providerSessionIdso apply-round-trip works (same fix shape as thev1 Llm strip).
thread: <cuid>format on stderr(was
thread:cuidno-space in non-streaming,(thread: cuid)with-space in streaming).
run()switched fromexecSync(discards stderron success — made stderr assertions structurally impossible in the
happy path) to
spawnSyncwith a tiny quoted-argv splitter.Test plan
mcpctl get agent X -o yaml | apply -f -producesno diff
thread: <cuid>