fix(cli): strip virtual-LLM lifecycle fields from llm apply-doc YAML
Some checks failed
CI/CD / lint (pull_request) Successful in 55s
CI/CD / test (pull_request) Successful in 1m12s
CI/CD / typecheck (pull_request) Successful in 2m59s
CI/CD / smoke (pull_request) Failing after 1m44s
CI/CD / build (pull_request) Successful in 6m35s
CI/CD / publish (pull_request) Has been skipped
Some checks failed
CI/CD / lint (pull_request) Successful in 55s
CI/CD / test (pull_request) Successful in 1m12s
CI/CD / typecheck (pull_request) Successful in 2m59s
CI/CD / smoke (pull_request) Failing after 1m44s
CI/CD / build (pull_request) Successful in 6m35s
CI/CD / publish (pull_request) Has been skipped
The smoke test \`llm.smoke > round-trips yaml output → apply -f\` failed after v1 of the virtual-LLM feature: \`mcpctl get llm <name> -o yaml\` output now starts with \`kind: public\` (the new schema column) instead of \`kind: llm\` (the apply-doc envelope), because toApplyDocs spread the cleaned item AFTER setting the kind, so the cleaned item's \`kind\` overwrote. Fix: in toApplyDocs, when serialising the \`llms\` resource, drop the new lifecycle fields (kind, status, lastHeartbeatAt, inactiveSince, providerSessionId) before merging. They collide with the apply-doc envelope and aren't apply-able anyway — they're derived runtime state owned by VirtualLlmService. Public-LLM round-trip is now byte-clean (those fields default to public/active anyway). Virtual rows are created by the registrar, not via apply -f, so dropping them on output is the right call. CLI suite: 437/437. Smoke will re-run against the live mcpd via scripts/release.sh after merge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -408,6 +408,17 @@ function toApplyDocs(resource: string, items: unknown[]): Array<{ kind: string }
|
|||||||
const kind = RESOURCE_KIND[resource] ?? resource;
|
const kind = RESOURCE_KIND[resource] ?? resource;
|
||||||
return items.map((item) => {
|
return items.map((item) => {
|
||||||
const cleaned = stripInternalFields(item as Record<string, unknown>);
|
const cleaned = stripInternalFields(item as Record<string, unknown>);
|
||||||
|
// Llm-specific: the new virtual-provider lifecycle fields collide with
|
||||||
|
// the apply-doc `kind` envelope (the schema uses `kind: public|virtual`)
|
||||||
|
// and aren't apply-able anyway — they're derived runtime state managed
|
||||||
|
// by VirtualLlmService. Drop them so YAML round-trips stay clean.
|
||||||
|
if (resource === 'llms') {
|
||||||
|
delete cleaned['kind'];
|
||||||
|
delete cleaned['status'];
|
||||||
|
delete cleaned['lastHeartbeatAt'];
|
||||||
|
delete cleaned['inactiveSince'];
|
||||||
|
delete cleaned['providerSessionId'];
|
||||||
|
}
|
||||||
return { kind, ...cleaned };
|
return { kind, ...cleaned };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user