Compare commits

..

2 Commits

Author SHA1 Message Date
Michal
2a44f60785 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
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>
2026-04-27 14:47:00 +01:00
65b6b265d9 feat: virtual LLMs v1 (registration skeleton) (#63)
Some checks failed
CI/CD / lint (push) Successful in 55s
CI/CD / test (push) Successful in 1m12s
CI/CD / typecheck (push) Successful in 2m13s
CI/CD / smoke (push) Failing after 1m42s
CI/CD / build (push) Successful in 4m50s
CI/CD / publish (push) Has been skipped
2026-04-27 13:38:50 +00:00

View File

@@ -408,6 +408,17 @@ function toApplyDocs(resource: string, items: unknown[]): Array<{ kind: string }
const kind = RESOURCE_KIND[resource] ?? resource;
return items.map((item) => {
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 };
});
}