Part of the Agent Substrate epic ⬆️. Depends on #B (Substrate CRDs) + #C (authored agents).
Goal
Turn a published DevAI registry agent into the Substrate runtime objects automatically, the same way kagent-agent-sync already renders the classic Agent CR today.
Today (grounded)
agentic-registry serves GET /v0/export/kagent → renders kagent Agent (v1alpha2, spec.declarative) + ToolServer. kagent-agent-sync (CronJob) curls it and kubectl applys with --prune. We added per-variant rendering (provider/model) + the active-variants endpoint + lane-aware reconcile this session. Known gap: the export does NOT resolve promptRef → empty systemMessage → invalid CR (we built but reverted that one-line fix).
Tasks
Acceptance
Publishing/labelling an agent for Substrate produces a valid SandboxAgent the controller accepts; unlabelling/kill-switch reaps it. No empty-systemMessage rejections.
Refs: agentic-registry/{adapters/kagent,internal/api/export.go,internal/api/resolve.go}, tesserix-k8s/charts/apps/kagent-agent-sync/; memory: Agent Harness + kagent (promptRef + reap gotchas).
— Part of #69
Part of the Agent Substrate epic ⬆️. Depends on #B (Substrate CRDs) + #C (authored agents).
Goal
Turn a published DevAI registry agent into the Substrate runtime objects automatically, the same way
kagent-agent-syncalready renders the classicAgentCR today.Today (grounded)
agentic-registryservesGET /v0/export/kagent→ renders kagentAgent(v1alpha2,spec.declarative) +ToolServer.kagent-agent-sync(CronJob) curls it andkubectl applys with--prune. We added per-variant rendering (provider/model) + the active-variants endpoint + lane-aware reconcile this session. Known gap: the export does NOT resolvepromptRef→ emptysystemMessage→ invalid CR (we built but reverted that one-line fix).Tasks
SandboxAgent(+ActorTemplate/AgentHarnessSubstrateSpec) when the agent targets Substrate, vs the classicAgentotherwise.promptRef→Prompt.spec.systemPromptat export so the 39 prompt-by-reference agents render a valid non-emptysystemMessage(the revertedkagent.goOptions.SystemPrompt +resolveSystemPromptchange — redo it).kagent-agent-sync: render → apply/prune SandboxAgents; keep the reap-on-empty + operator kill-switch semantics we shipped.metadata.labels; unlabelling a seed doesn't drop it) — the reliable off-switch is the active-variants kill-switch.Acceptance
Publishing/labelling an agent for Substrate produces a valid
SandboxAgentthe controller accepts; unlabelling/kill-switch reaps it. No empty-systemMessage rejections.Refs:
agentic-registry/{adapters/kagent,internal/api/export.go,internal/api/resolve.go},tesserix-k8s/charts/apps/kagent-agent-sync/; memory: Agent Harness + kagent (promptRef + reap gotchas).— Part of #69