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>
243 lines
8.7 KiB
Go
243 lines
8.7 KiB
Go
// Code generated by modernc.org/undup from the per-target sqlite_*.go files; DO NOT EDIT.
|
|
|
|
//go:build (freebsd && amd64) || (linux && amd64) || (linux && arm64) || (linux && loong64) || (linux && ppc64le) || (linux && riscv64) || (linux && s390x) || (netbsd && amd64) || (openbsd && amd64) || (openbsd && arm64)
|
|
|
|
package sqlite3
|
|
|
|
import (
|
|
"unsafe"
|
|
|
|
"modernc.org/libc"
|
|
)
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Implementation of bm25() function.
|
|
// */
|
|
func _fts5Bm25Function(tls *libc.TLS, pApi uintptr, pFts uintptr, pCtx uintptr, nVal int32, apVal uintptr) {
|
|
bp := tls.Alloc(32)
|
|
defer tls.Free(32)
|
|
var D, b, k1, score, w, v2 float64
|
|
var aFreq uintptr
|
|
var i, rc int32
|
|
var _ /* ic at bp+16 */ int32
|
|
var _ /* io at bp+20 */ int32
|
|
var _ /* ip at bp+12 */ int32
|
|
var _ /* nInst at bp+8 */ int32
|
|
var _ /* nTok at bp+24 */ int32
|
|
var _ /* pData at bp+0 */ uintptr
|
|
_, _, _, _, _, _, _, _, _ = D, aFreq, b, i, k1, rc, score, w, v2
|
|
k1 = float64(1.2) /* Constant "k1" from BM25 formula */
|
|
b = float64(0.75) /* Error code */
|
|
score = float64(0) /* Iterator variable */
|
|
**(**int32)(__ccgo_up(bp + 8)) = 0 /* Value returned by xInstCount() */
|
|
D = float64(0) /* Total number of tokens in row */
|
|
aFreq = uintptr(0) /* Array of phrase freq. for current row */
|
|
/* Calculate the phrase frequency (symbol "f(qi,D)" in the documentation)
|
|
** for each phrase in the query for the current row. */
|
|
rc = _fts5Bm25GetData(tls, pApi, pFts, bp)
|
|
if rc == SQLITE_OK {
|
|
aFreq = (*TFts5Bm25Data)(unsafe.Pointer(**(**uintptr)(__ccgo_up(bp)))).FaFreq
|
|
libc.Xmemset(tls, aFreq, 0, uint64(8)*libc.Uint64FromInt32((*TFts5Bm25Data)(unsafe.Pointer(**(**uintptr)(__ccgo_up(bp)))).FnPhrase))
|
|
rc = (*(*func(*libc.TLS, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFts5ExtensionApi)(unsafe.Pointer(pApi)).FxInstCount})))(tls, pFts, bp+8)
|
|
}
|
|
i = 0
|
|
for {
|
|
if !(rc == SQLITE_OK && i < **(**int32)(__ccgo_up(bp + 8))) {
|
|
break
|
|
}
|
|
rc = (*(*func(*libc.TLS, uintptr, int32, uintptr, uintptr, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFts5ExtensionApi)(unsafe.Pointer(pApi)).FxInst})))(tls, pFts, i, bp+12, bp+16, bp+20)
|
|
if rc == SQLITE_OK {
|
|
if nVal > **(**int32)(__ccgo_up(bp + 16)) {
|
|
v2 = Xsqlite3_value_double(tls, **(**uintptr)(__ccgo_up(apVal + uintptr(**(**int32)(__ccgo_up(bp + 16)))*8)))
|
|
} else {
|
|
v2 = float64(1)
|
|
}
|
|
w = v2
|
|
**(**float64)(__ccgo_up(aFreq + uintptr(**(**int32)(__ccgo_up(bp + 12)))*8)) += w
|
|
}
|
|
goto _1
|
|
_1:
|
|
;
|
|
i = i + 1
|
|
}
|
|
/* Figure out the total size of the current row in tokens. */
|
|
if rc == SQLITE_OK {
|
|
rc = (*(*func(*libc.TLS, uintptr, int32, uintptr) int32)(unsafe.Pointer(&struct{ uintptr }{(*TFts5ExtensionApi)(unsafe.Pointer(pApi)).FxColumnSize})))(tls, pFts, -int32(1), bp+24)
|
|
D = float64(**(**int32)(__ccgo_up(bp + 24)))
|
|
}
|
|
/* Determine and return the BM25 score for the current row. Or, if an
|
|
** error has occurred, throw an exception. */
|
|
if rc == SQLITE_OK {
|
|
i = 0
|
|
for {
|
|
if !(i < (*TFts5Bm25Data)(unsafe.Pointer(**(**uintptr)(__ccgo_up(bp)))).FnPhrase) {
|
|
break
|
|
}
|
|
score = score + float64(**(**float64)(__ccgo_up((*TFts5Bm25Data)(unsafe.Pointer(**(**uintptr)(__ccgo_up(bp)))).FaIDF + uintptr(i)*8))*(float64(**(**float64)(__ccgo_up(aFreq + uintptr(i)*8))*(k1+libc.Float64FromFloat64(1)))/(**(**float64)(__ccgo_up(aFreq + uintptr(i)*8))+float64(k1*(libc.Float64FromInt32(1)-b+float64(b*D)/(*TFts5Bm25Data)(unsafe.Pointer(**(**uintptr)(__ccgo_up(bp)))).Favgdl)))))
|
|
goto _3
|
|
_3:
|
|
;
|
|
i = i + 1
|
|
}
|
|
Xsqlite3_result_double(tls, pCtx, float64(-libc.Float64FromFloat64(1)*score))
|
|
} else {
|
|
Xsqlite3_result_error_code(tls, pCtx, rc)
|
|
}
|
|
}
|
|
|
|
// C documentation
|
|
//
|
|
// /*
|
|
// ** Determine the overlap between two polygons
|
|
// */
|
|
func _geopolyOverlap(tls *libc.TLS, p1 uintptr, p2 uintptr) (r int32) {
|
|
bp := tls.Alloc(16)
|
|
defer tls.Free(16)
|
|
var iMask, needSort, rc, v1 int32
|
|
var nByte, nVertex Tsqlite3_int64
|
|
var p, pActive, pPrev, pSeg, pThisEvent, v5 uintptr
|
|
var rX, y, v2 float64
|
|
var _ /* aOverlap at bp+0 */ [4]uint8
|
|
_, _, _, _, _, _, _, _, _, _, _, _, _, _, _ = iMask, nByte, nVertex, needSort, p, pActive, pPrev, pSeg, pThisEvent, rX, rc, y, v1, v2, v5
|
|
nVertex = int64((*TGeoPoly)(unsafe.Pointer(p1)).FnVertex + (*TGeoPoly)(unsafe.Pointer(p2)).FnVertex + int32(2))
|
|
rc = 0
|
|
needSort = 0
|
|
pActive = uintptr(0)
|
|
nByte = libc.Int64FromUint64(uint64(32)*libc.Uint64FromInt64(nVertex)*uint64(2) + uint64(48)*libc.Uint64FromInt64(nVertex) + uint64(24))
|
|
p = Xsqlite3_malloc64(tls, libc.Uint64FromInt64(nByte))
|
|
if p == uintptr(0) {
|
|
return -int32(1)
|
|
}
|
|
(*TGeoOverlap)(unsafe.Pointer(p)).FaEvent = p + 1*24
|
|
(*TGeoOverlap)(unsafe.Pointer(p)).FaSegment = (*TGeoOverlap)(unsafe.Pointer(p)).FaEvent + uintptr(nVertex*int64(2))*32
|
|
v1 = libc.Int32FromInt32(0)
|
|
(*TGeoOverlap)(unsafe.Pointer(p)).FnSegment = v1
|
|
(*TGeoOverlap)(unsafe.Pointer(p)).FnEvent = v1
|
|
_geopolyAddSegments(tls, p, p1, uint8(1))
|
|
_geopolyAddSegments(tls, p, p2, uint8(2))
|
|
pThisEvent = _geopolySortEventsByX(tls, (*TGeoOverlap)(unsafe.Pointer(p)).FaEvent, (*TGeoOverlap)(unsafe.Pointer(p)).FnEvent)
|
|
if pThisEvent != 0 && (*TGeoEvent)(unsafe.Pointer(pThisEvent)).Fx == float64(0) {
|
|
v2 = -libc.Float64FromFloat64(1)
|
|
} else {
|
|
v2 = float64(0)
|
|
}
|
|
rX = v2
|
|
libc.Xmemset(tls, bp, 0, uint64(4))
|
|
for pThisEvent != 0 {
|
|
if (*TGeoEvent)(unsafe.Pointer(pThisEvent)).Fx != rX {
|
|
pPrev = uintptr(0)
|
|
iMask = 0
|
|
rX = (*TGeoEvent)(unsafe.Pointer(pThisEvent)).Fx
|
|
if needSort != 0 {
|
|
pActive = _geopolySortSegmentsByYAndC(tls, pActive)
|
|
needSort = 0
|
|
}
|
|
pSeg = pActive
|
|
for {
|
|
if !(pSeg != 0) {
|
|
break
|
|
}
|
|
if pPrev != 0 {
|
|
if (*TGeoSegment)(unsafe.Pointer(pPrev)).Fy != (*TGeoSegment)(unsafe.Pointer(pSeg)).Fy {
|
|
(**(**[4]uint8)(__ccgo_up(bp)))[iMask] = uint8(1)
|
|
}
|
|
}
|
|
iMask = iMask ^ libc.Int32FromUint8((*TGeoSegment)(unsafe.Pointer(pSeg)).Fside)
|
|
pPrev = pSeg
|
|
goto _3
|
|
_3:
|
|
;
|
|
pSeg = (*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext
|
|
}
|
|
pPrev = uintptr(0)
|
|
pSeg = pActive
|
|
for {
|
|
if !(pSeg != 0) {
|
|
break
|
|
}
|
|
y = float64((*TGeoSegment)(unsafe.Pointer(pSeg)).FC*rX) + (*TGeoSegment)(unsafe.Pointer(pSeg)).FB
|
|
(*TGeoSegment)(unsafe.Pointer(pSeg)).Fy = y
|
|
if pPrev != 0 {
|
|
if (*TGeoSegment)(unsafe.Pointer(pPrev)).Fy > (*TGeoSegment)(unsafe.Pointer(pSeg)).Fy && libc.Int32FromUint8((*TGeoSegment)(unsafe.Pointer(pPrev)).Fside) != libc.Int32FromUint8((*TGeoSegment)(unsafe.Pointer(pSeg)).Fside) {
|
|
rc = int32(1)
|
|
goto geopolyOverlapDone
|
|
} else {
|
|
if (*TGeoSegment)(unsafe.Pointer(pPrev)).Fy != (*TGeoSegment)(unsafe.Pointer(pSeg)).Fy {
|
|
(**(**[4]uint8)(__ccgo_up(bp)))[iMask] = uint8(1)
|
|
}
|
|
}
|
|
}
|
|
iMask = iMask ^ libc.Int32FromUint8((*TGeoSegment)(unsafe.Pointer(pSeg)).Fside)
|
|
pPrev = pSeg
|
|
goto _4
|
|
_4:
|
|
;
|
|
pSeg = (*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext
|
|
}
|
|
}
|
|
if (*TGeoEvent)(unsafe.Pointer(pThisEvent)).FeType == 0 {
|
|
/* Add a segment */
|
|
pSeg = (*TGeoEvent)(unsafe.Pointer(pThisEvent)).FpSeg
|
|
(*TGeoSegment)(unsafe.Pointer(pSeg)).Fy = float64((*TGeoSegment)(unsafe.Pointer(pSeg)).Fy0)
|
|
(*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext = pActive
|
|
pActive = pSeg
|
|
needSort = int32(1)
|
|
} else {
|
|
/* Remove a segment */
|
|
if pActive == (*TGeoEvent)(unsafe.Pointer(pThisEvent)).FpSeg {
|
|
if pActive != 0 {
|
|
v5 = (*TGeoSegment)(unsafe.Pointer(pActive)).FpNext
|
|
} else {
|
|
v5 = uintptr(0)
|
|
}
|
|
pActive = v5
|
|
} else {
|
|
pSeg = pActive
|
|
for {
|
|
if !(pSeg != 0) {
|
|
break
|
|
}
|
|
if (*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext == (*TGeoEvent)(unsafe.Pointer(pThisEvent)).FpSeg {
|
|
if (*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext != 0 {
|
|
v5 = (*TGeoSegment)(unsafe.Pointer((*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext)).FpNext
|
|
} else {
|
|
v5 = uintptr(0)
|
|
}
|
|
(*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext = v5
|
|
break
|
|
}
|
|
goto _6
|
|
_6:
|
|
;
|
|
pSeg = (*TGeoSegment)(unsafe.Pointer(pSeg)).FpNext
|
|
}
|
|
}
|
|
}
|
|
pThisEvent = (*TGeoEvent)(unsafe.Pointer(pThisEvent)).FpNext
|
|
}
|
|
if libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(3)]) == 0 {
|
|
rc = 0
|
|
} else {
|
|
if libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(1)]) != 0 && libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(2)]) == 0 {
|
|
rc = int32(3)
|
|
} else {
|
|
if libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(1)]) == 0 && libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(2)]) != 0 {
|
|
rc = int32(2)
|
|
} else {
|
|
if libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(1)]) == 0 && libc.Int32FromUint8((**(**[4]uint8)(__ccgo_up(bp)))[int32(2)]) == 0 {
|
|
rc = int32(4)
|
|
} else {
|
|
rc = int32(1)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
goto geopolyOverlapDone
|
|
geopolyOverlapDone:
|
|
;
|
|
Xsqlite3_free(tls, p)
|
|
return rc
|
|
}
|