Files
kandev/apps/backend/internal/scriptengine/resolver.go
T
João Salavisa fa4a48d5e7 chore: remove orphan helpers, setters, and deprecated wrappers (#1085)
* chore: remove orphan executor tracing file and deprecated ResolveScript wrappers

- Delete internal/agentctl/tracing/executor.go (7 TraceExecutor* funcs)
- Delete internal/orchestrator/executor/script_template.go (deprecated wrapper)
- Delete scriptengine.ResolveScript convenience function

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove orphan setter methods across healthpoll, jira, linear, slack, updates

- Delete Poller.SetInterval from integrations/healthpoll (no callers)
- Delete Poller.SetIssueTickHook from jira and linear (no callers)
- Delete Trigger.SetInterval and Trigger.SetMatchHook from slack (no callers)
- Delete Service.SetPollInterval from system/updates (no callers)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove orphan wrapper functions and accessor method

- Delete updates.FetchLatestRelease shim (wraps FetchLatestReleaseFrom, no callers)
- Delete usage.NewClaudeUsageClient and NewCodexUsageClient shims (no callers)
- Delete database.Service.Path() accessor (no callers)
- Update ErrGitHubRateLimited godoc to reference FetchLatestReleaseFrom

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove unwired handleListExecutors MCP handler

The sibling profile handlers (list/create/update/delete) are registered
via RegisterFunc in handlers.go. handleListExecutors never was — dead flow.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove stale hook-field comments after setter deletion

SetIssueTickHook (jira, linear) and SetMatchHook (slack) were removed
in the deadcode cleanup. Their struct fields still claimed "tests use
this" — no test or caller can set these fields now.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove orphan hook fields and fire methods after setter deletion

issueTickHook (jira/linear) and matchHook (slack) are unexported and
never set after their public setters were removed; fireIssueTickHook /
fireHook were permanent no-ops.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-29 09:32:52 +01:00

65 lines
1.7 KiB
Go

// Package scriptengine provides executor-agnostic script resolution with dynamic placeholders.
// It is designed to be reusable by any executor type (Sprites, Docker, remote SSH, etc.).
package scriptengine
import (
"maps"
"strings"
)
// PlaceholderProvider supplies dynamic placeholder values at resolution time.
type PlaceholderProvider func() map[string]string
// Resolver resolves {{key}} placeholders in scripts.
type Resolver struct {
staticVars map[string]string
providers []PlaceholderProvider
}
// NewResolver creates a new placeholder resolver.
func NewResolver() *Resolver {
return &Resolver{
staticVars: make(map[string]string),
}
}
// WithStatic registers static key-value placeholders.
func (r *Resolver) WithStatic(vars map[string]string) *Resolver {
maps.Copy(r.staticVars, vars)
return r
}
// WithProvider registers a dynamic placeholder provider.
func (r *Resolver) WithProvider(p PlaceholderProvider) *Resolver {
r.providers = append(r.providers, p)
return r
}
// Resolve replaces all {{key}} placeholders in the script.
// Unknown placeholders are left as-is so the user can see what wasn't resolved.
func (r *Resolver) Resolve(script string) string {
if script == "" {
return script
}
vars := r.mergedVars()
if len(vars) == 0 {
return script
}
result := script
for key, value := range vars {
result = strings.ReplaceAll(result, "{{"+key+"}}", value)
}
return result
}
// mergedVars collects all static vars and dynamic provider vars into a single map.
// Provider values override static values if keys collide.
func (r *Resolver) mergedVars() map[string]string {
merged := make(map[string]string, len(r.staticVars))
maps.Copy(merged, r.staticVars)
for _, p := range r.providers {
maps.Copy(merged, p())
}
return merged
}