fix(skills): resolve session resolution, add cancelled event status, and scope mqtt topic

This commit is contained in:
2026-08-05 09:11:35 +09:00
parent 68eff79810
commit ea36e81624
8 changed files with 71 additions and 44 deletions
@@ -131,9 +131,9 @@ for s in d.get('herdr_sessions', []):
if s.get('delegate_job_id') == _jid and s.get('status') == 'running':
_name = s.get('name')
_srv = s.get('herdr_workspace') or s.get('herdr_server') or 'default'
if _event == 'completed':
if _event in ('completed', 'cancelled'):
s['delegate_job_id'] = None
print('MQTT Monitor: job completed on ' + str(_name) + ' — session kept alive', flush=True)
print('MQTT Monitor: job ' + _event + ' on ' + str(_name) + ' — session kept alive', flush=True)
_changed = True
else:
s['status'] = 'terminated'
@@ -216,7 +216,7 @@ def on_message(_client, _userdata, msg):
print(f"MQTT Monitor: recorded event {event} for job {jid} (seq={seq})", flush=True)
if event in ("completed", "error"):
if event in ("completed", "error", "cancelled"):
print(f"MQTT Monitor: received terminal event {event} for job {jid}", flush=True)
handle_terminal(jid, event)
except Exception as e:
@@ -227,8 +227,13 @@ def on_connect(_c, _u, _flags, reason_code, _props):
rc = mqtt_common.reason_code_value(reason_code)
if rc == 0:
state['connected'] = True
_c.subscribe("python/mqtt/jobs/+/events", qos=1)
print("MQTT Monitor: subscribed to python/mqtt/jobs/+/events", flush=True)
ws_path = os.path.abspath(workspace_root) if workspace_root else os.getcwd()
import hashlib
fp = hashlib.sha256(ws_path.encode('utf-8')).hexdigest()[:12]
topic = f"mam/{fp}/jobs/+/events"
_c.subscribe(topic, qos=1)
_c.subscribe("python/mqtt/jobs/+/events", qos=1) # legacy fallback during transition
print(f"MQTT Monitor: subscribed to {topic}", flush=True)
else:
state['failed'] = True
print(f"MQTT Monitor connection failed: rc={rc}", flush=True)