feat(kernel,artifacts): inject artifact-kind vocabulary into architect context

This commit is contained in:
2026-06-11 10:06:40 +04:00
parent beed501d60
commit ed0dca8b78
10 changed files with 96 additions and 7 deletions
@@ -41,6 +41,7 @@ private data class StageSection(
@param:JsonProperty("token_budget") val tokenBudget: Int = 4096,
@param:JsonProperty("max_retries") val maxRetries: Int = 3,
@param:JsonProperty("requires_approval") val requiresApproval: Boolean = false,
@param:JsonProperty("inject_artifact_kinds") val injectArtifactKinds: Boolean = false,
)
// condition fields flattened into the transition row
@@ -105,6 +106,7 @@ class TomlWorkflowLoader(
s.prompt?.let { put("prompt", resolvePromptPath(it, workflowDir)) }
s.systemPrompt?.let { put("systemPrompt", resolvePromptPath(it, workflowDir)) }
if (s.requiresApproval) put("requiresApproval", "true")
if (s.injectArtifactKinds) put("injectArtifactKinds", "true")
},
)
}
@@ -97,4 +97,24 @@ class TomlWorkflowLoaderTest {
val path = Files.createTempFile("workflow", ".toml").also { it.writeText(bad) }
assertThrows<IllegalStateException> { loader.load(path) }
}
@Test
fun `inject_artifact_kinds true maps to metadata key`() {
val toml = validToml.replace(
"prompt = \"prompts/collect.md\"",
"prompt = \"prompts/collect.md\"\ninject_artifact_kinds = true",
)
val path = Files.createTempFile("workflow", ".toml").also { it.writeText(toml) }
val graph = loader.load(path)
val collectStage = graph.stages[graph.start]!!
assertEquals("true", collectStage.metadata["injectArtifactKinds"])
}
@Test
fun `inject_artifact_kinds absent means no metadata key`() {
val path = Files.createTempFile("workflow", ".toml").also { it.writeText(validToml) }
val graph = loader.load(path)
val collectStage = graph.stages[graph.start]!!
assertEquals(null, collectStage.metadata["injectArtifactKinds"])
}
}