Init
release-tag / Resolve release metadata (push) Successful in 30s
release-tag / Build knowledge (push) Failing after 4m51s
release-tag / Build control (push) Failing after 5m0s
release-tag / Build agent (push) Failing after 5m0s
release-tag / Build agent-data-init (push) Failing after 5m5s
release-tag / Build neuroforge-worker (push) Failing after 5m7s
release-tag / Build neuroforge (push) Failing after 5m9s

This commit is contained in:
2026-08-26 18:34:41 +02:00
parent 3d8ffe6dfd
commit a6bc71fb3a
514 changed files with 199925 additions and 1 deletions
+13
View File
@@ -0,0 +1,13 @@
#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
PORT=${CODEBASE_MEMORY_PORT:-9749}
if ! command -v codebase-memory-mcp >/dev/null 2>&1; then
echo "codebase-memory-mcp is not installed or not in PATH" >&2
exit 1
fi
export CBM_ALLOWED_ROOT="$ROOT"
echo "Indexing $ROOT with CBM_ALLOWED_ROOT=$CBM_ALLOWED_ROOT" >&2
codebase-memory-mcp cli index_repository "{\"repo_path\":\"$ROOT\"}"
echo "Starting optional Codebase Memory UI on :$PORT" >&2
exec codebase-memory-mcp --ui=true --port="$PORT"
+40
View File
@@ -0,0 +1,40 @@
#!/bin/sh
set -eu
MODE=${1:-kb}
OUT=${2:-./glpi-neuroforge-obsidian.zip}
TMP="${OUT}.tmp.$$"
trap 'rm -f "$TMP"' EXIT INT TERM
case "$MODE" in
kb)
BASE=${KB_URL:-http://127.0.0.1:8081}
USER=${BASIC_AUTH_USER:-}
PASS=${BASIC_AUTH_PASSWORD:-}
URL="${BASE%/}/api/export/obsidian"
if [ -n "$USER" ] || [ -n "$PASS" ]; then
curl -fsS --user "$USER:$PASS" "$URL" -o "$TMP"
else
curl -fsS "$URL" -o "$TMP"
fi
;;
agent)
BASE=${AGENT_URL:-http://127.0.0.1:8080}
USER=${WEB_USERNAME:-}
PASS=${WEB_PASSWORD:-}
URL="${BASE%/}/api/knowledge/export/obsidian"
if [ -n "$USER" ] || [ -n "$PASS" ]; then
curl -fsS --user "$USER:$PASS" "$URL" -o "$TMP"
else
curl -fsS "$URL" -o "$TMP"
fi
;;
*)
echo "usage: $0 [kb|agent] [output.zip]" >&2
exit 2
;;
esac
mv "$TMP" "$OUT"
trap - EXIT INT TERM
printf 'written: %s\n' "$OUT"
+12
View File
@@ -0,0 +1,12 @@
#!/bin/sh
set -eu
gen() { openssl rand -hex 32; }
cat <<OUT
NEUROFORGE_ADMIN_TOKEN=$(gen)
NEUROFORGE_APP_API_KEY=$(gen)
NEUROFORGE_WORKER_TOKEN=$(gen)
NEUROFORGE_METRICS_TOKEN=$(gen)
KB_INTEGRATION_TOKEN=$(gen)
CONTROL_READ_TOKEN=$(gen)
SEARXNG_SECRET=$(gen)
OUT
+14
View File
@@ -0,0 +1,14 @@
#!/bin/sh
set -eu
: "${KB_INTEGRATION_TOKEN:?set KB_INTEGRATION_TOKEN}"
KB_URL=${KB_URL:-http://127.0.0.1:${KNOWLEDGE_HOST_PORT:-8081}}
if [ "$#" -ne 1 ]; then
echo "usage: $0 proposal.json" >&2
exit 2
fi
curl --fail-with-body -sS \
-H "Authorization: Bearer $KB_INTEGRATION_TOKEN" \
-H 'Content-Type: application/json' \
--data-binary "@$1" \
"$KB_URL/api/integrations/staging"
printf '\n'
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env python3
"""Run the read-only retrieval/learning replay benchmark against a live Agent."""
import argparse, base64, json, pathlib, sys, urllib.request, urllib.error
p=argparse.ArgumentParser()
p.add_argument('cases', help='JSON file: {"cases":[...]}')
p.add_argument('--url', default='http://127.0.0.1:8080')
p.add_argument('--user', default='')
p.add_argument('--password', default='')
p.add_argument('--output', default='')
a=p.parse_args()
payload=pathlib.Path(a.cases).read_bytes()
req=urllib.request.Request(a.url.rstrip('/')+'/api/quality/replay', data=payload, method='POST', headers={'Content-Type':'application/json'})
if a.user or a.password:
token=base64.b64encode(f'{a.user}:{a.password}'.encode()).decode()
req.add_header('Authorization','Basic '+token)
try:
with urllib.request.urlopen(req, timeout=300) as r:
out=r.read()
except urllib.error.HTTPError as e:
sys.stderr.write(e.read().decode(errors='replace')+'\n')
raise SystemExit(2)
if a.output:
pathlib.Path(a.output).write_bytes(out+b'\n')
obj=json.loads(out)
print(json.dumps(obj.get('summary',{}), indent=2, ensure_ascii=False))
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
secret=${SEARXNG_SECRET:-}
if [ -z "$secret" ] && [ -f "$ROOT/.env" ]; then
secret=$(awk -F= '$1=="SEARXNG_SECRET" {sub(/^[^=]*=/, ""); print; exit}' "$ROOT/.env")
fi
case "$secret" in
""|CHANGE_ME*)
echo "Set a real SEARXNG_SECRET in $ROOT/.env (or export it) before enabling research." >&2
exit 1
;;
esac
export SEARXNG_SECRET=$secret
cd "$ROOT"
NEUROFORGE_RESEARCH_ENABLED=true \
NEUROFORGE_SEARXNG_ENABLED=true \
docker compose --profile research up -d searxng neuroforge neuroforge-worker
printf '%s\n' 'SearXNG + NeuroForge research are running. Autonomy remains controlled by NEUROFORGE_AUTONOMY_ENABLED.'
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
set -eu
PORT="${CONTROL_HOST_PORT:-8070}"
curl -fsS "http://127.0.0.1:${PORT}/api/status" | python3 -m json.tool
+20
View File
@@ -0,0 +1,20 @@
#!/bin/sh
set -eu
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
for mod in platform/neuroforge services/agent services/knowledge services/control; do
echo "==> go test $mod"
(cd "$ROOT/$mod" && go test ./...)
echo "==> go vet $mod"
(cd "$ROOT/$mod" && go vet ./...)
done
echo "==> shell syntax"
for script in "$ROOT"/scripts/*.sh; do
sh -n "$script"
done
if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
echo "==> docker compose config (base)"
(cd "$ROOT" && docker compose --env-file .env.example config >/dev/null)
echo "==> docker compose config (research profile)"
(cd "$ROOT" && docker compose --env-file .env.example --profile research config >/dev/null)
fi
echo "validation OK"