8ecdadf8b8
executus CI / test (push) Successful in 3m21s
Lifts the 'an agent uses a SKILL.md pack' concept out of a host and into the harness: - run.Ports.SkillPacks (SkillPackActivator) — nil-safe port; the executor folds a loaded agent's pack catalog into the system prompt and adds a skill_use loader tool to the toolbox (uses the existing ra.SystemPrompt + toolbox seams) - run.RunnableAgent.SkillPacks + persona.Agent.SkillPacks (+ skill_packs YAML, extends-inherit, ToRunnable) — the Agent noun is now pack-aware - skillpack.Activator — the battery's default port impl (resolve names → packs → catalog + skill_use), with a per-run BundleStager factory the host plumbs; satisfies the port structurally (no import of run) - agentbuiltins: ships gifsmith, a portable focused GIF/MP4 render agent that uses the gif pack — references tool/tier/pack NAMES only, no host coupling A host now wires run.Ports.SkillPacks instead of carrying its own activation glue. Tests: Activator resolution + gifsmith loads through persona→RunnableAgent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
39 lines
1.2 KiB
Go
39 lines
1.2 KiB
Go
package persona
|
|
|
|
import "gitea.stevedudenhoeffer.com/steve/executus/run"
|
|
|
|
// ToRunnable lowers an Agent persona into the kernel's run.RunnableAgent DTO —
|
|
// the bridge that lets run.Executor run a persona WITHOUT importing this
|
|
// battery (the inversion of mort's agentexec.Run(*agents.Agent)). It maps the
|
|
// static shape only; per-run personalization, palette resolution, the critic,
|
|
// audit, etc. are supplied separately via run.Ports.
|
|
func (a *Agent) ToRunnable() run.RunnableAgent {
|
|
ra := run.RunnableAgent{
|
|
ID: a.ID,
|
|
Name: a.Name,
|
|
SystemPrompt: a.SystemPrompt,
|
|
ModelTier: a.ModelTier,
|
|
MaxIterations: a.MaxIterations,
|
|
MaxRuntime: a.MaxRuntime,
|
|
LowLevelTools: a.LowLevelTools,
|
|
SkillPalette: a.SkillPalette,
|
|
SubAgentPalette: a.SubAgentPalette,
|
|
SkillPacks: a.SkillPacks,
|
|
Critic: run.CriticConfig{
|
|
Enabled: a.CriticEnabled,
|
|
BackstopMultiplier: a.CriticBackstopMultiplier,
|
|
},
|
|
}
|
|
for _, p := range a.Phases {
|
|
ra.Phases = append(ra.Phases, run.Phase{
|
|
Name: p.Name,
|
|
SystemPrompt: p.SystemPrompt,
|
|
ModelTier: p.ModelTier,
|
|
MaxIterations: p.MaxIter,
|
|
Tools: p.Tools,
|
|
Optional: p.Optional,
|
|
})
|
|
}
|
|
return ra
|
|
}
|