Kernel-only release from a clean archive of v0.0.12; everything else is carried from 452a592. Offline backup first; READY in 0.74 s, schema 13, apps up 7. The existing hermes runtime gained process = python3 and the one-off task_argv (hermes -z, --accept-hooks, no --yolo), and its argv moved to the launcher's chat form. check-config valid; config_gen 21489c1f0fff3c10.
49 lines
3.4 KiB
YAML
49 lines
3.4 KiB
YAML
# nh3-svos: the hermes seat runtime becomes task-capable (Prime 2026-10-14 via svos-dev, thread 01M4X1ZE8RDF63NARVT4CFJBT2).
|
|
# Merged into the EXISTING [[seats.runtimes]] name="hermes" entry: svos-dev's argv/process/task_argv replace its old argv
|
|
# (venv python + hermes-agent/hermes). Needs kernel 0.0.12 (0.0.11's check-config refuses `process`). No --yolo (Prime's call).
|
|
steps:
|
|
- name: back up instance.toml
|
|
sudo: true
|
|
shell: runuser -u svc-svos -- cp -p /var/lib/svos/config/instance.toml /var/lib/svos/config/instance.toml.pre-hermes-task
|
|
creates: /var/lib/svos/config/instance.toml.pre-hermes-task
|
|
- name: merge the task runtime keys into the hermes entry
|
|
sudo: true
|
|
shell: |
|
|
runuser -u svc-svos -- python3 - <<'PY'
|
|
import os
|
|
p = "/var/lib/svos/config/instance.toml"; s = open(p).read()
|
|
old = ('[[seats.runtimes]]\nname = "hermes"\nprogram = "hermes"\n'
|
|
'argv = ["/home/lkraven/.hermes/hermes-agent/venv/bin/python", "/home/lkraven/.hermes/hermes-agent/hermes"]\n'
|
|
'credential_env = "SVOS_CREDENTIAL"\n')
|
|
assert s.count(old) == 1, s.count(old)
|
|
new = ('[[seats.runtimes]] # U15 task runtime (Prime 2026-10-14 via svos-dev): hermes one-off, no --yolo\n'
|
|
'name = "hermes"\n'
|
|
'argv = ["/home/lkraven/.local/bin/hermes", "chat"]\n'
|
|
'program = "hermes"\n'
|
|
'process = "python3" # the launcher execs python3; the live process never shows hermes\n'
|
|
'credential_env = "SVOS_CREDENTIAL"\n'
|
|
'task_argv = ["/home/lkraven/.local/bin/hermes", "-z", "Your brief is the file {brief}. Do what it asks. Write every deliverable into {result}. Print a one-line summary first, then the details.", "-m", "{model}", "--accept-hooks"]\n')
|
|
s = s.replace(old, new)
|
|
s = s.replace("# [seat_host].tasks_root); every ceiling at its default. No runtime declares task_argv yet, so a task-spawn is\n# refused routing_unavailable: runtime_not_task_capable until Prime names the command.\n",
|
|
"# [seat_host].tasks_root); every ceiling at its default. Since 2026-10-14 the hermes runtime declares task_argv\n# (the only task-capable runtime).\n")
|
|
t = p + ".tmp"; fd = os.open(t, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o600)
|
|
with os.fdopen(fd, "w") as f: f.write(s)
|
|
os.replace(t, p); print("edited")
|
|
PY
|
|
- name: the kernel accepts it (else restore)
|
|
sudo: true
|
|
shell: |
|
|
if runuser -u svc-svos -- /opt/svos/current/kernel-env/bin/svos-kernel check-config --data-root /var/lib/svos; then exit 0; fi
|
|
runuser -u svc-svos -- cp -p /var/lib/svos/config/instance.toml.pre-hermes-task /var/lib/svos/config/instance.toml; echo RESTORED; exit 1
|
|
- name: reload
|
|
sudo: true
|
|
shell: |
|
|
systemctl reload svos-kernel; sleep 6
|
|
curl -s http://127.0.0.1:8400/health; echo
|
|
journalctl -u svos-kernel --since "-20s" --no-pager -o cat | grep -i -E "refus|invalid|error|config" | tail -5 | cut -c1-200
|
|
verify:
|
|
- name: the hermes runtime reads task-capable
|
|
sudo: true
|
|
shell: runuser -u svc-svos -- python3 -c "import tomllib; d=tomllib.load(open('/var/lib/svos/config/instance.toml','rb')); h=[r for r in d['seats']['runtimes'] if r['name']=='hermes']; assert len(h)==1 and h[0]['process']=='python3' and h[0]['task_argv'][1]=='-z'; print(h[0]['argv'], h[0]['process'], len(h[0]['task_argv']))"
|
|
changed_when: "false"
|