(ctx context.Context, out chan<- StreamEvent, skill skills.SkillSpec, args string, state *AgentState, sessionID []string)
| 264 | return nil, "" |
| 265 | } |
| 266 | cmdName, args, _ := strings.Cut(stripped, " ") |
| 267 | cmdName = strings.ToLower(strings.TrimSpace(cmdName)) |
| 268 | cwd := skills.ResolveSkillContextCWD(q.Config.CWD, nil) |
| 269 | skill := q.CoreEngine.skillRegistry.FindVisible(cmdName, cwd) |
| 270 | if skill == nil || !skill.Frontmatter.UserInvocable { |
| 271 | return nil, "" |
| 272 | } |
| 273 | return skill, strings.TrimSpace(args) |
| 274 | } |
| 275 | |
| 276 | func (q *QueryEngine) executeSlashSkill(ctx context.Context, out chan<- StreamEvent, skill skills.SkillSpec, args string, state *AgentState, sessionID []string) (skills.SkillExecutionResult, error) { |
| 277 | if q.CoreEngine.skillRegistry == nil { |
| 278 | return skills.SkillExecutionResult{}, fmt.Errorf("skills are not enabled") |
| 279 | } |
| 280 | loader := skills.NewSkillLoader(q.Config) |
| 281 | executor := skills.NewSkillExecutor(loader, skills.NewPromptProcessor(q.Config)) |
| 282 | executor.ForkRunner = q.CoreEngine.runForkSkill |
| 283 | sid := "" |
| 284 | if len(sessionID) > 0 { |
| 285 | sid = sessionID[0] |
| 286 | } |
| 287 | if sid == "" { |
| 288 | sid = uuid.NewString()[:12] |
| 289 | } |
| 290 | extraContext := coretools.ExecutionContext{ |
| 291 | "_session_id": sid, |
| 292 | "_agent_id": q.CoreEngine.sessionMemoryAgentID(), |
| 293 | "runtime_dir": q.Config.ProjectRuntimeDir, |
no test coverage detected