DevOps plugin (5 skills): - install-core-agent, repair-core-agent, merge-workspace, update-deps, clean-workspaces CLI commands: version, check, extract for diagnostics. Codex dispatch: --skip-git-repo-check, removed broken --model-reasoning-effort, --sandbox workspace-write via --full-auto. Workspace template extracts to wsDir not srcDir. AX sweep (Codex-generated): sanitise.go extracted from prep/plan, mirror.go JSON parsing via encoding/json, setup/config.go URL parsing via net/url, strings/fmt imports eliminated from setup. CODEX.md template updated with Env/Path patterns. Review workspace template with audit-only PROMPT.md. Marketplace updated with devops plugin. Co-Authored-By: Virgil <virgil@lethean.io>
96 lines
1.8 KiB
Go
96 lines
1.8 KiB
Go
// SPDX-License-Identifier: EUPL-1.2
|
|
|
|
package agentic
|
|
|
|
func sanitiseBranchSlug(text string, max int) string {
|
|
out := make([]rune, 0, len(text))
|
|
for _, r := range text {
|
|
switch {
|
|
case r >= 'a' && r <= 'z' || r >= '0' && r <= '9' || r == '-':
|
|
out = append(out, r)
|
|
case r >= 'A' && r <= 'Z':
|
|
out = append(out, r+32)
|
|
default:
|
|
out = append(out, '-')
|
|
}
|
|
|
|
if max > 0 && len(out) >= max {
|
|
break
|
|
}
|
|
}
|
|
|
|
return trimRuneEdges(string(out), '-')
|
|
}
|
|
|
|
func sanitisePlanSlug(text string) string {
|
|
out := make([]rune, 0, len(text))
|
|
for _, r := range text {
|
|
switch {
|
|
case r >= 'a' && r <= 'z' || r >= '0' && r <= '9' || r == '-':
|
|
out = append(out, r)
|
|
case r >= 'A' && r <= 'Z':
|
|
out = append(out, r+32)
|
|
case r == ' ':
|
|
out = append(out, '-')
|
|
}
|
|
}
|
|
|
|
slug := collapseRepeatedRune(string(out), '-')
|
|
slug = trimRuneEdges(slug, '-')
|
|
if len(slug) > 30 {
|
|
slug = slug[:30]
|
|
}
|
|
|
|
return trimRuneEdges(slug, '-')
|
|
}
|
|
|
|
func sanitiseFilename(text string) string {
|
|
out := make([]rune, 0, len(text))
|
|
for _, r := range text {
|
|
switch {
|
|
case r >= 'a' && r <= 'z' || r >= 'A' && r <= 'Z' || r >= '0' && r <= '9' || r == '-' || r == '_' || r == '.':
|
|
out = append(out, r)
|
|
default:
|
|
out = append(out, '-')
|
|
}
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
func collapseRepeatedRune(text string, target rune) string {
|
|
runes := []rune(text)
|
|
out := make([]rune, 0, len(runes))
|
|
lastWasTarget := false
|
|
|
|
for _, r := range runes {
|
|
if r == target {
|
|
if lastWasTarget {
|
|
continue
|
|
}
|
|
lastWasTarget = true
|
|
} else {
|
|
lastWasTarget = false
|
|
}
|
|
|
|
out = append(out, r)
|
|
}
|
|
|
|
return string(out)
|
|
}
|
|
|
|
func trimRuneEdges(text string, target rune) string {
|
|
runes := []rune(text)
|
|
start := 0
|
|
end := len(runes)
|
|
|
|
for start < end && runes[start] == target {
|
|
start++
|
|
}
|
|
|
|
for end > start && runes[end-1] == target {
|
|
end--
|
|
}
|
|
|
|
return string(runes[start:end])
|
|
}
|