client ↔ worker
→ {"v":1,"type":"peer.hello","peer_id":"9f2c…"}
← {"v":1,"type":"peer.announce","peer_id":"41ab…","caps":["llm"],"models":[],"max_concurrent":1}
→ {"v":1,"type":"job.submit","job_id":"550e…","from":"9f2c…","payload":{"kind":"llm",
"model_id":"m","messages":[{"role":"user","content":"ping"}],
"max_tokens":64,"temperature":0.0},"sig":"a71…","payer":"0x…",
"bond":{"v":1,"job_id":"550e…","ticket":{"client":"0x…","worker_payout":"0x…",
"cumulative":20000000,"deadline":1786…},"sig":"0x…"}}
← {"v":1,"type":"job.status","job_id":"550e…","status":"running","progress":0.3,"error":null}
← {"v":1,"type":"job.delta","job_id":"550e…","text":"pong"}
← {"v":1,"type":"job.result","job_id":"550e…","kind":"llm","sha256":"ba78…","text":"pong","meta":{"model":"m"}}
← {"v":1,"type":"job.status","job_id":"550e…","status":"done","progress":1.0,"error":null}
← {"v":1,"type":"job.invoice","job_id":"550e…","amount":250000,"sha256":"ba78…",
"prompt_tokens":12,"completion_tokens":1,"cached_tokens":0}
→ {"v":1,"type":"job.pay","job_id":"550e…","ticket":{"client":"0x…","worker_payout":"0x…",
"cumulative":250000,"deadline":1786…},"sig":"0x…"}