6c92f85d10
Bring the Nexus/Praxis/Hexis integration in line with MAVEN_ECOSYSTEM_ARCHITECTURE.md: - Praxis over HTTP: drop the in-process praxis.db open (praxisstore/ praxistools) and call praxisd's /api/v1/tools/* API via a new praxisClient. Honors the "no component reads another's DB" invariant (AC#12). PraxisConfig.DBPath -> URL. - Hexis confirmation gate: mutating capabilities (ReadOnly=false) now park a bound pendingHexis confirmation and require a spoken "да" before executing; read-only run immediately (AC#7, no auto attention->action). - Capability safety: >1 verb match is ambiguous -> ask instead of firing the first; ambiguous Nexus resolution asks for clarification (AC#2). - Correlation IDs on Hexis execute, recorded in the cross-service trace. - Bug: importance arrives as JSON float64 over HTTP, not int. - Tests: confirm-gate, decline, read-only, and ambiguity paths. Build: vendor/ bakes in the hexis client (replace-directed at a sibling repo outside the Docker context); Dockerfile builds from vendor and no longer `go mod download`s the unreachable replace paths. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
986 B
Go
50 lines
986 B
Go
package humanize
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func stripTrailingZeros(s string) string {
|
|
if !strings.ContainsRune(s, '.') {
|
|
return s
|
|
}
|
|
offset := len(s) - 1
|
|
for offset > 0 {
|
|
if s[offset] == '.' {
|
|
offset--
|
|
break
|
|
}
|
|
if s[offset] != '0' {
|
|
break
|
|
}
|
|
offset--
|
|
}
|
|
return s[:offset+1]
|
|
}
|
|
|
|
func stripTrailingDigits(s string, digits int) string {
|
|
if i := strings.Index(s, "."); i >= 0 {
|
|
if digits <= 0 {
|
|
return s[:i]
|
|
}
|
|
i++
|
|
if i+digits >= len(s) {
|
|
return s
|
|
}
|
|
return s[:i+digits]
|
|
}
|
|
return s
|
|
}
|
|
|
|
// Ftoa converts a float to a string with no trailing zeros.
|
|
func Ftoa(num float64) string {
|
|
return stripTrailingZeros(strconv.FormatFloat(num, 'f', 6, 64))
|
|
}
|
|
|
|
// FtoaWithDigits converts a float to a string but limits the resulting string
|
|
// to the given number of decimal places, and no trailing zeros.
|
|
func FtoaWithDigits(num float64, digits int) string {
|
|
return stripTrailingZeros(stripTrailingDigits(strconv.FormatFloat(num, 'f', 6, 64), digits))
|
|
}
|