(content any)
| 399 | }() |
| 400 | |
| 401 | event := NewStreamEvent("permission_needed", "", map[string]any{ |
| 402 | "skill_shell_request": req, |
| 403 | "dangerous": true, |
| 404 | "risk": "high", |
| 405 | }) |
| 406 | if !sendStream(ctx, out, event) { |
| 407 | return false |
| 408 | } |
| 409 | select { |
| 410 | case granted := <-ch: |
| 411 | return granted |
| 412 | case <-ctx.Done(): |
| 413 | return false |
| 414 | } |
| 415 | } |
| 416 | |
| 417 | func (q *QueryEngine) resolvePendingSkillPermission(granted bool) bool { |
| 418 | q.skillPermissionMu.Lock() |
| 419 | ch := q.skillPermissionCh |
| 420 | q.skillPermissionMu.Unlock() |
| 421 | if ch == nil { |
| 422 | return false |
| 423 | } |
| 424 | select { |
| 425 | case ch <- granted: |
| 426 | default: |
| 427 | } |
| 428 | return true |
| 429 | } |
| 430 | |
| 431 | func (q *QueryEngine) normalizeSkillUserPrompt(skillName, skillArgs string) string { |
| 432 | if strings.TrimSpace(skillArgs) != "" { |
no test coverage detected