Compare commits

...

1046 Commits

Author SHA1 Message Date
Peter Steinberger
542baa3b43 docs: document DM policy compatibility contracts 2026-06-01 22:43:57 -04:00
Peter Steinberger
72402b51c5 docs: document channel ingress SDK contracts 2026-06-01 22:40:58 -04:00
Peter Steinberger
df90aac6e2 docs: document ingress state contracts 2026-06-01 22:39:21 -04:00
Peter Steinberger
09796c6991 docs: document ingress decision contracts 2026-06-01 22:37:09 -04:00
Peter Steinberger
86ef2324a3 docs: document ingress sender gate contracts 2026-06-01 22:35:11 -04:00
Peter Steinberger
f1326d71ae docs: document ingress allowlist contracts 2026-06-01 22:33:46 -04:00
Peter Steinberger
cf6700486c docs: document ingress identity contracts 2026-06-01 22:32:06 -04:00
Peter Steinberger
537636b926 docs: document ingress access group contracts 2026-06-01 22:30:55 -04:00
Peter Steinberger
21648cf844 docs: document direct DM guard policy 2026-06-01 22:29:10 -04:00
Peter Steinberger
0841fe7d67 docs: document direct DM dispatch contracts 2026-06-01 22:27:53 -04:00
Peter Steinberger
7ecc9551ff docs: document channel DM access helpers 2026-06-01 22:26:12 -04:00
Peter Steinberger
5d423e5f1a docs: document direct DM access contracts 2026-06-01 22:25:03 -04:00
Peter Steinberger
fc459ad376 docs: document read-only channel command defaults 2026-06-01 22:22:42 -04:00
Peter Steinberger
abd52441c5 docs: document native command session targets 2026-06-01 22:21:24 -04:00
Peter Steinberger
33711a477b docs: document typing start skip semantics 2026-06-01 22:19:08 -04:00
Peter Steinberger
5edcff17c8 docs: document conversation label contracts 2026-06-01 22:17:17 -04:00
Peter Steinberger
a652a0529b docs: document account snapshot credential contracts 2026-06-01 22:15:47 -04:00
Peter Steinberger
d92f990126 docs: document outbound attachment staging contract 2026-06-01 22:13:21 -04:00
Peter Steinberger
5577442e84 docs: document base64 mime sniffing contract 2026-06-01 22:12:06 -04:00
Peter Steinberger
fe01495f8e docs: document channel inbound media root contracts 2026-06-01 22:10:13 -04:00
Peter Steinberger
c8d313f742 docs: document local media access contracts 2026-06-01 22:09:01 -04:00
Peter Steinberger
82466b33c5 docs: document media load option contracts 2026-06-01 22:07:02 -04:00
Peter Steinberger
480091b9ee docs: document media reference contracts 2026-06-01 22:05:32 -04:00
Peter Steinberger
5ea7e9d071 docs: document media read access contracts 2026-06-01 22:03:28 -04:00
Peter Steinberger
6c4626eca1 docs: document realtime voice provider resolver contracts 2026-06-01 22:01:37 -04:00
Peter Steinberger
b3f7436307 docs: document realtime voice activation contracts 2026-06-01 21:59:56 -04:00
Peter Steinberger
e327700c7d docs: document tool call repair contracts 2026-06-01 21:58:24 -04:00
Peter Steinberger
988b2e12a6 docs: document channel allowlist resolution contracts 2026-06-01 21:56:11 -04:00
Peter Steinberger
4cf2a2dd6f docs: document system run allowlist contracts 2026-06-01 21:54:58 -04:00
Peter Steinberger
b65bd56a79 docs: document media understanding output contracts 2026-06-01 21:52:15 -04:00
Peter Steinberger
bed2f620dd docs: document media generation catalog contracts 2026-06-01 21:50:36 -04:00
Peter Steinberger
eb1d0a3588 docs: document memory batch contracts 2026-06-01 21:48:10 -04:00
Peter Steinberger
fbdbbe9e97 docs: document llm event stream contracts 2026-06-01 21:46:22 -04:00
Peter Steinberger
782a360580 docs: document shell capture contracts 2026-06-01 21:44:31 -04:00
Peter Steinberger
0e9b65889b docs: document media boundary helpers 2026-06-01 21:42:55 -04:00
Peter Steinberger
914f0f9315 docs: document markdown chunking invariants 2026-06-01 21:40:42 -04:00
Peter Steinberger
1666686eba docs: document gateway connect error contracts 2026-06-01 21:39:25 -04:00
Peter Steinberger
1cfc23afb4 docs: document voice webhook ingress contracts 2026-06-01 21:37:35 -04:00
Peter Steinberger
5acb805f37 docs: document voice runtime boundary contracts 2026-06-01 21:36:02 -04:00
Peter Steinberger
8361b69ff6 docs: document voice response extraction contracts 2026-06-01 21:33:55 -04:00
Peter Steinberger
66c588e28f docs: document plivo callback flow contracts 2026-06-01 21:32:08 -04:00
Peter Steinberger
3d5c8b25a5 docs: document telnyx call setup contracts 2026-06-01 21:29:25 -04:00
Peter Steinberger
0ff9e3a88f docs: document twilio stream bridge contracts 2026-06-01 21:27:27 -04:00
Peter Steinberger
4774d26cec docs: document voice webhook security contracts 2026-06-01 21:25:10 -04:00
Peter Steinberger
0bff438190 docs: document voice call lifecycle helper contracts 2026-06-01 21:23:01 -04:00
Peter Steinberger
2fbddd65e6 docs: document realtime audio pacer contracts 2026-06-01 21:20:55 -04:00
Peter Steinberger
08ff5f7235 docs: document media stream helper contracts 2026-06-01 21:19:06 -04:00
Peter Steinberger
ca10f65280 docs: document voice stream frame contracts 2026-06-01 21:17:17 -04:00
Peter Steinberger
79627a02a5 docs: document voice model selection contracts 2026-06-01 21:15:27 -04:00
Peter Steinberger
b8cd4513a6 docs: document realtime voice context contracts 2026-06-01 21:13:37 -04:00
Peter Steinberger
cd003a688e docs: clarify voice mapping contracts 2026-06-01 21:11:54 -04:00
Peter Steinberger
7321e70b6f docs: document mock voice provider contracts 2026-06-01 21:09:57 -04:00
Peter Steinberger
691baa3054 docs: document voice test support contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
782de561c8 docs: document voice config compatibility contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
56c2ee2a77 docs: document voice exposure tunnel contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
7e59c8a48a docs: document twilio helper contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
2cb6f013ad docs: document voice shared type contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
c9417590c4 docs: document voice runtime lifecycle contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
dae769e4d1 docs: document voice response generator contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
fd36d510ac docs: document voice lifecycle timer contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
1b7da5d000 docs: document voice event processor contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
4730f05e78 docs: document voice outbound helper contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
859d01c919 docs: document telephony persistence contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
3549150d17 docs: document voice utility helper contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
bb7339fe24 docs: document realtime default instructions 2026-06-01 21:07:14 -04:00
Peter Steinberger
7033becd07 docs: document voice config helpers 2026-06-01 21:07:14 -04:00
Peter Steinberger
9326519c8d docs: document twilio provider state 2026-06-01 21:07:14 -04:00
Peter Steinberger
ace9d4c842 docs: document stale call reaper options 2026-06-01 21:07:14 -04:00
Peter Steinberger
8ccb15f813 docs: document realtime handler APIs 2026-06-01 21:07:14 -04:00
Peter Steinberger
85aa7cca7a docs: document realtime audio pacer contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
fd84a67e22 docs: document voice webhook server contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
c4b7e5ebd7 docs: tighten voice webhook security comments 2026-06-01 21:07:14 -04:00
Peter Steinberger
6878fb25f9 docs: document shared provider helpers 2026-06-01 21:07:14 -04:00
Peter Steinberger
da6e410690 docs: document plivo provider contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
7d013c1353 docs: document telnyx provider contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
f733a37db3 docs: document twilio provider helpers 2026-06-01 21:07:14 -04:00
Peter Steinberger
42fae37d9f docs: tighten voice provider API docs 2026-06-01 21:07:14 -04:00
Peter Steinberger
940e4e64ff docs: document voice manager context 2026-06-01 21:07:14 -04:00
Peter Steinberger
30bf7310a5 docs: document voice event processor 2026-06-01 21:07:14 -04:00
Peter Steinberger
f4952f3c42 docs: document voice initial message flow 2026-06-01 21:07:14 -04:00
Peter Steinberger
a0590e113a docs: document voice call snapshot persistence 2026-06-01 21:07:14 -04:00
Peter Steinberger
645f3025a7 docs: document voice restore invariants 2026-06-01 21:07:14 -04:00
Peter Steinberger
84398e8509 docs: document voice call type contracts 2026-06-01 21:07:14 -04:00
Peter Steinberger
89d694b33a docs: tighten voice tunnel comments 2026-06-01 21:07:14 -04:00
Peter Steinberger
2b411b0298 docs: document telephony voice selection 2026-06-01 21:07:14 -04:00
Peter Steinberger
f5c2e455c7 docs: tighten media stream comments 2026-06-01 21:07:14 -04:00
Peter Steinberger
6495eb8355 docs: document telephony tts adapter 2026-06-01 21:07:14 -04:00
Peter Steinberger
f3dccaa707 docs: document voice runtime transcript handling 2026-06-01 21:07:14 -04:00
Peter Steinberger
3830ae5f86 docs: tighten voice response comments 2026-06-01 21:07:14 -04:00
Peter Steinberger
955cc4a0fa docs: document realtime voice context budget 2026-06-01 21:07:14 -04:00
Peter Steinberger
e6049f5560 docs: document voice realtime path defaults 2026-06-01 21:07:14 -04:00
Peter Steinberger
b949cd8a63 docs: document realtime consult coordination 2026-06-01 21:07:14 -04:00
Peter Steinberger
eb68d9e8e7 docs: document realtime bridge lookup 2026-06-01 21:07:13 -04:00
Peter Steinberger
ee6b5eb51a docs: document voice webhook realtime guards 2026-06-01 21:07:13 -04:00
Peter Steinberger
57930933ce docs: document twilio twiml policy 2026-06-01 21:07:13 -04:00
Peter Steinberger
a9865297f9 docs: document plivo call control invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
8f952a1819 docs: document telnyx call control invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
ef7f54e1db docs: document twilio stream cleanup 2026-06-01 21:07:13 -04:00
Peter Steinberger
1bb275b4af docs: document voice provider contracts 2026-06-01 21:07:13 -04:00
Peter Steinberger
8f8fba66e3 docs: document voice lifecycle cleanup 2026-06-01 21:07:13 -04:00
Peter Steinberger
3663b216ea docs: document voice outbound invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
082e0e1e74 docs: document voice twiml helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
029eae8d4d docs: document voice event idempotency 2026-06-01 21:07:13 -04:00
Peter Steinberger
7e91337292 docs: document voice call store ordering 2026-06-01 21:07:13 -04:00
Peter Steinberger
5cddc8617b docs: document tts voice lookup 2026-06-01 21:07:13 -04:00
Peter Steinberger
b29bc49452 docs: document telephony audio exports 2026-06-01 21:07:13 -04:00
Peter Steinberger
ab0c86079c docs: document telephony tts policy 2026-06-01 21:07:13 -04:00
Peter Steinberger
7cc4b178da docs: document realtime audio pacer invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
8e21b7b791 docs: document stream frame adapter invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
70c180de5c docs: document webhook replay invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
3ab4ff1970 docs: document voice webhook lifecycle 2026-06-01 21:07:13 -04:00
Peter Steinberger
b80b736bec docs: document voice config invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
902a7f2e40 docs: document realtime consult invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
fd66568e9c docs: document media stream invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
cb50517168 docs: document twilio provider invariants 2026-06-01 21:07:13 -04:00
Peter Steinberger
461d582bf0 docs: document voice cli helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
df403be1a6 docs: document voice response sanitizing 2026-06-01 21:07:13 -04:00
Peter Steinberger
ddec7f7583 docs: document voice runtime setup 2026-06-01 21:07:13 -04:00
Peter Steinberger
f675c85e97 docs: document voice core bridge 2026-06-01 21:07:13 -04:00
Peter Steinberger
935e31e1f7 docs: document voice webhook security guards 2026-06-01 21:07:13 -04:00
Peter Steinberger
7a2312ed3b docs: document stale call reaper 2026-06-01 21:07:13 -04:00
Peter Steinberger
22408ff4ca docs: document voice mock provider 2026-06-01 21:07:13 -04:00
Peter Steinberger
a293e4ea36 docs: document voice outbound helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
d1d363f02c docs: document voice runtime utilities 2026-06-01 21:07:13 -04:00
Peter Steinberger
181937aa79 docs: document voice twiml helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
b05a9e64e7 docs: document voice continue operations 2026-06-01 21:07:13 -04:00
Peter Steinberger
052b9caa4c docs: document realtime voice context helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
b8cd038b53 docs: document telephony tts helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
807a78d729 docs: document voice response helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
3ba3706e7b docs: document voice config compatibility 2026-06-01 21:07:13 -04:00
Peter Steinberger
f8fbeca3b0 docs: document webhook exposure checks 2026-06-01 21:07:13 -04:00
Peter Steinberger
ecfdc422ff docs: document telnyx provider flow 2026-06-01 21:07:13 -04:00
Peter Steinberger
b2d4015559 docs: document plivo provider flow 2026-06-01 21:07:13 -04:00
Peter Steinberger
38b3f872ec docs: document twilio provider helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
30342d1ff1 docs: document voice provider helpers 2026-06-01 21:07:13 -04:00
Peter Steinberger
5772ce0bd2 docs: document voice event state flow 2026-06-01 21:07:12 -04:00
Peter Steinberger
8b615e7bdd docs: document voice call timers 2026-06-01 21:07:12 -04:00
Peter Steinberger
74a6828e65 docs: document voice call record store 2026-06-01 21:07:12 -04:00
Peter Steinberger
6f885c9e69 docs: document voice manager helpers 2026-06-01 21:07:12 -04:00
Peter Steinberger
606f914786 docs: document voice helper boundaries 2026-06-01 21:07:12 -04:00
Peter Steinberger
0a37307b9e docs: document tailscale exposure helpers 2026-06-01 21:07:12 -04:00
Peter Steinberger
a45cf4aa3d docs: document stream frame adapters 2026-06-01 21:07:12 -04:00
Peter Steinberger
627f937126 docs: document realtime audio pacing 2026-06-01 21:07:12 -04:00
Peter Steinberger
87a51de824 docs: document voice config merge guard 2026-06-01 21:07:12 -04:00
Peter Steinberger
cf7aa53974 docs: document voice mapping passthrough 2026-06-01 21:07:12 -04:00
Peter Steinberger
1dd7dcbb8b docs: document telephony audio chunking 2026-06-01 21:07:12 -04:00
Peter Steinberger
1c7bc0a70c docs: document pair loop guard invariants 2026-06-01 21:07:12 -04:00
Peter Steinberger
2eef5e64ea docs: document string entry coercion 2026-06-01 21:07:12 -04:00
Peter Steinberger
44030e6a70 docs: document async lock contract 2026-06-01 21:07:12 -04:00
Peter Steinberger
b4e3680c15 docs: document slack external menu tokens 2026-06-01 21:07:12 -04:00
Peter Steinberger
f5fed728d7 docs: document thread binding contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
7e1c1293d2 docs: document ssrf pinned lookup contract 2026-06-01 21:07:12 -04:00
Peter Steinberger
2ba9dcc4d1 docs: document local media access guardrails 2026-06-01 21:07:12 -04:00
Peter Steinberger
c4b2e5ede1 docs: document media mime helper contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
9b9481466b docs: document tcp port config parsing 2026-06-01 21:07:12 -04:00
Peter Steinberger
e887319d03 docs: document fetch runtime proxy preset 2026-06-01 21:07:12 -04:00
Peter Steinberger
19cd359980 docs: document scp host normalization contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
6d6f800b71 docs: document provider operation retry contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
89e289bebf docs: document image asset helper contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
887da616a3 docs: document delivery queue runtime contract 2026-06-01 21:07:12 -04:00
Peter Steinberger
6f7111af77 docs: document provider auth runtime contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
fb184b23d8 docs: document provider catalog projection contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
3da99c9c5d docs: document provider stream family contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
4a5250bbd0 docs: document provider stream wrapper contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
a01dad0467 docs: document provider replay family contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
3e0f205e21 docs: remove provider web facade header comments 2026-06-01 21:07:12 -04:00
Peter Steinberger
7e89d1549c docs: document web search provider contract fields 2026-06-01 21:07:12 -04:00
Peter Steinberger
7fe48606d9 docs: document provider selection contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
c9dba69584 docs: document provider enable result contract 2026-06-01 21:07:12 -04:00
Peter Steinberger
04e960542d docs: document oauth provider auth result helper 2026-06-01 21:07:12 -04:00
Peter Steinberger
37d68a2c26 docs: clarify outbound text chunking contract 2026-06-01 21:07:12 -04:00
Peter Steinberger
4f75d03f98 docs: document reply payload delivery helpers 2026-06-01 21:07:12 -04:00
Peter Steinberger
c56f0ad6e8 docs: document outbound media load options 2026-06-01 21:07:12 -04:00
Peter Steinberger
e7685a3442 docs: document channel policy helper contracts 2026-06-01 21:07:12 -04:00
Peter Steinberger
0915a43ae3 docs: document browser profile facade contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
40bc655224 docs: document agent media payload contract 2026-06-01 21:07:11 -04:00
Peter Steinberger
c4c3649a69 docs: document browser control auth facade 2026-06-01 21:07:11 -04:00
Peter Steinberger
982d81f613 docs: document browser cdp url helpers 2026-06-01 21:07:11 -04:00
Peter Steinberger
cd01bd00fc docs: document allow-from helper contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
133a0a3d1b docs: document approval approver resolution 2026-06-01 21:07:11 -04:00
Peter Steinberger
542c2a667c docs: document approval auth helper contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
eaa9da2d81 docs: document approval client helper contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
7c7c52640c docs: document approval delivery capability contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
7106593349 docs: document native approval routing contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
284c316fde docs: document channel lifecycle contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
f4a049d571 docs: document approval reaction runtime contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
c7d3d09345 docs: document plugin config runtime helpers 2026-06-01 21:07:11 -04:00
Peter Steinberger
f43e8eac30 docs: document provider onboard merge contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
daa6405784 docs: document provider tool schema compat 2026-06-01 21:07:11 -04:00
Peter Steinberger
63d1572d40 docs: document channel route shape contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
6d3d1b4449 docs: document channel ingress SDK contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
5198edc051 docs: document group access decision contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
776121bf27 docs: document session transcript hit contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
321bd8734d docs: document allowlist config edit contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
f5c3fc2033 docs: document session visibility contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
eb925afda2 docs: document channel config adapter options 2026-06-01 21:07:11 -04:00
Peter Steinberger
66dccf2111 docs: document channel config write policy shapes 2026-06-01 21:07:11 -04:00
Peter Steinberger
fe976b19f5 docs: document gateway config write contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
c306bf9986 docs: document model auth status payloads 2026-06-01 21:07:11 -04:00
Peter Steinberger
c9c71965d2 docs: document talk realtime helper contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
7e3832cb72 docs: document webchat reply media normalization 2026-06-01 21:07:11 -04:00
Peter Steinberger
a71d83f1ea docs: document webchat media helper contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
d14c004124 docs: document managed image attachment limits 2026-06-01 21:07:11 -04:00
Peter Steinberger
87881bb3f8 docs: document session history state payloads 2026-06-01 21:07:11 -04:00
Peter Steinberger
f529019f71 docs: document session kill http contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
ad230f0072 docs: document openai embeddings endpoint contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
57c15073bd docs: document openai models endpoint contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
3d4a170acd docs: document openai compat error contracts 2026-06-01 21:07:11 -04:00
Peter Steinberger
70954c5ef1 docs: document responses prompt conversion 2026-06-01 21:07:11 -04:00
Peter Steinberger
bc1ceb11f5 docs: document responses output item helpers 2026-06-01 21:07:11 -04:00
Peter Steinberger
5c5ead97f2 docs: document openai tool choice constraints 2026-06-01 21:07:11 -04:00
Peter Steinberger
5a451e4b29 docs: document openai http request context helpers 2026-06-01 21:07:11 -04:00
Peter Steinberger
74b7668ad7 docs: document gateway http auth contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
fd820654f6 docs: document gateway post json endpoint options 2026-06-01 21:07:10 -04:00
Peter Steinberger
91bc6d2f75 docs: document shared gateway http responses 2026-06-01 21:07:10 -04:00
Peter Steinberger
c8f2b9864a docs: document gateway client readiness adapter 2026-06-01 21:07:10 -04:00
Peter Steinberger
845ae136e2 docs: document control ui link resolution 2026-06-01 21:07:10 -04:00
Peter Steinberger
8bad7e3c5f docs: document control ui shared url helpers 2026-06-01 21:07:10 -04:00
Peter Steinberger
5d916a47e0 docs: document gateway lane concurrency contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
ce6443d6c2 docs: document gateway client bootstrap contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
a4f270e960 docs: document gateway auth mode validation message 2026-06-01 21:07:10 -04:00
Peter Steinberger
25c19e98d9 docs: document gateway connection auth options 2026-06-01 21:07:10 -04:00
Peter Steinberger
be1d0283f7 docs: document gateway probe target contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
6ea9de0ba9 docs: document gateway probe auth source contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
9f9b233262 docs: document gateway dedupe entry contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
befc96d445 docs: document startup task result contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
9de16d960e docs: document hook allowlist policy contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
ac3fed0b90 docs: document channel health policy contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
8856a3e63f docs: document control UI bootstrap contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
8348c97336 docs: document plugin reload target contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
a1e7b5c2af docs: document MCP loopback runtime cache contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
93d27fd090 docs: document MCP schema export contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
ae1d58e2e2 docs: document MCP loopback protocol contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
73d7448920 docs: document websocket close reason contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
35e8f4aeb5 docs: document gateway method helper contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
9e8e5f8b8e docs: document node wake state contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
f5ee1d71a0 docs: document agent helper API contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
a1ac0e892c docs: document RPC attachment normalization contract 2026-06-01 21:07:10 -04:00
Peter Steinberger
5554d29db7 docs: document gateway request type contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
ba9f3be82b docs: document plugin route context contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
c4618bd859 docs: document hook request replay contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
47c68db395 docs: document gateway event loop health contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
14d9a9d184 docs: document gateway health state refresh contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
ad3e74f433 docs: document gateway chat state registry contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
5869473dc3 docs: document gateway model pricing cache state contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
005da3bfc0 docs: document gateway active session shutdown tracker contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
c3042c8a53 docs: document gateway run session key lookup contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
595df6e4fc docs: document gateway session event broadcast contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
80a9f9171d docs: document gateway transcript key ownership contracts 2026-06-01 21:07:10 -04:00
Peter Steinberger
a85df5a2fe docs: document gateway session kill HTTP contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
3d39143851 docs: document gateway session mutation cleanup contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
578258775e docs: document gateway transcript reader contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
9cbe85f2e6 docs: document gateway transcript index contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
035ca4106d docs: document gateway session compaction checkpoint contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
ace66d9276 docs: document gateway session lineage helper contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
2e856ecf6d docs: document gateway session lifecycle state contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
bb5a2a6c4b docs: document gateway session reset lifecycle contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
e3652a0541 docs: document gateway sessions patch contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
9ac9c4014e docs: document gateway session transcript file contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
a059c5e359 docs: document gateway session store key contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
d1cc90f991 docs: document gateway session transcript key contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
bbf74df187 docs: document gateway live chat projection contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
9f56655cba docs: document gateway chat abort contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
32cf26edb9 docs: document gateway chat attachment contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
38219de4a8 docs: document gateway chat sanitize contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
74de22592f docs: document gateway chat display projection contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
49d563823e docs: document gateway openai chat helper contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
55c26f453a docs: document gateway openai compatibility contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
39dcc60cf3 docs: document gateway openresponses helper contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
74b77e746c docs: document gateway openresponses continuity contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
b1562cf30e docs: document gateway openai embeddings contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
f46921dbc1 docs: document gateway openai models contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
2873917a67 docs: document gateway http compatibility utility contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
45e30ed8cb docs: document gateway http auth trust contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
343901eed2 docs: document gateway http endpoint helper contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
39987341ef docs: document gateway http common contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
e968912c0a docs: document gateway maintenance timer contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
a8946ceaa2 docs: document gateway runtime startup service contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
a38f8a7727 docs: document gateway runtime service contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
937c81d269 docs: document gateway runtime state contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
f741019d47 docs: document gateway reload handler contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
f3a66be5db docs: document gateway runtime config contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
1b3d42a5bf docs: document gateway server hook facade contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
6920c31b59 docs: document gateway hook request handler contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
bff56270f7 docs: document gateway hook mapping contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
16a2e9797c docs: document gateway hook helper contracts 2026-06-01 21:07:09 -04:00
Peter Steinberger
3580dcc2c5 docs: document gateway control reply suppression 2026-06-01 21:07:09 -04:00
Peter Steinberger
77cbf0bbe7 docs: document gateway local request context 2026-06-01 21:07:08 -04:00
Peter Steinberger
be604a74cc docs: document gateway control ui routing contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
d3645e9a09 docs: document gateway connection helpers 2026-06-01 21:07:08 -04:00
Peter Steinberger
f430f7b35f docs: document gateway shutdown env helpers 2026-06-01 21:07:08 -04:00
Peter Steinberger
5c8ad36c96 docs: document gateway boot echo guard contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
9cf089add3 docs: document gateway config reload contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
2f42e28822 docs: document gateway agent list contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
0dfecf5d38 docs: document gateway cli session history contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
0cf207ff69 docs: document gateway chat display projection 2026-06-01 21:07:08 -04:00
Peter Steinberger
34f5d18646 docs: document gateway chat attachment contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
894f76f9b2 docs: document gateway chat sanitize contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
cf2f010c11 docs: document gateway agent prompt helpers 2026-06-01 21:07:08 -04:00
Peter Steinberger
9dec94077c docs: document gateway channel health contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
46fdc874ff docs: document gateway install auth policy 2026-06-01 21:07:08 -04:00
Peter Steinberger
07cfeb8825 docs: document gateway auth token resolution 2026-06-01 21:07:08 -04:00
Peter Steinberger
748d15a7e8 docs: document gateway auth rate limiter contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
44a41c983d docs: document gateway chat state registries 2026-06-01 21:07:08 -04:00
Peter Steinberger
5991581624 docs: document gateway health state contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
6462d5711f docs: document gateway plugin http path contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
da00d620c8 docs: document gateway plugin http auth contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
5e2913b8f2 docs: document gateway http auth contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
35efd98a8d docs: document websocket auth policy contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
a74d094a92 docs: document gateway auth probe contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
8501e1ab49 docs: document hosted plugin url contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
1b35fd6042 docs: document live chat projection contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
f199a3ec4a docs: document gateway cli backend live helpers 2026-06-01 21:07:08 -04:00
Peter Steinberger
8b445c0b1c docs: document gateway run lifecycle contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
31cb21dc80 docs: document gateway cli registration contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
9141dac9ff docs: document gateway cli rpc contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
641c8d3e8f docs: document cli route parser contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
48ef13f3f9 docs: document message cli subcommand contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
f002c11263 docs: document message cli helper contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
ed98cf4072 docs: document program runtime helper contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
06bbffa56b docs: document program command descriptor contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
b9dd6e2176 docs: document nodes cli command contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
84941d8079 docs: document nodes cli rpc contracts 2026-06-01 21:07:08 -04:00
Peter Steinberger
7c71652b97 docs: document update command restore contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
68d189aee2 docs: document update cli helper contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
de62123e4d docs: document daemon shared helper contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
ffbfcf7ede docs: document CLI startup runtime helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
af78281011 docs: document config set helper contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
ea0411257d docs: document CLI utility helper contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
bcd4e91a26 docs: document CLI banner contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
03ccc1860d docs: document CLI completion contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
1a7ff3c75c docs: document CLI command policy contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
657355d2b0 docs: document CLI invocation display helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
2b444e9b43 docs: document CLI argv helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
c603b71d40 docs: document CLI root option helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
ac33c605cc docs: document approval handler runtime contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
df13f8aa6d docs: document command carrier exports 2026-06-01 21:07:07 -04:00
Peter Steinberger
590b653d8d docs: document offsetless datetime parsing 2026-06-01 21:07:07 -04:00
Peter Steinberger
f126a99773 docs: document duration formatter contract 2026-06-01 21:07:07 -04:00
Peter Steinberger
d44e59b737 docs: document lsof resolver contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
dee8f41d99 docs: document port diagnostics contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
3242949658 docs: document binary detection contract 2026-06-01 21:07:07 -04:00
Peter Steinberger
b1375ef40c docs: document git root contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
0f3ef7d6e7 docs: document package json contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
0ed2a3f6f4 docs: document runtime status contract 2026-06-01 21:07:07 -04:00
Peter Steinberger
1404b0e87e docs: document WebSocket raw data contract 2026-06-01 21:07:07 -04:00
Peter Steinberger
738bcde966 docs: document secure random contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
93f04f1edd docs: document JSON byte contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
a47f3b240d docs: document path prepend contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
e90dea78a8 docs: document port probe contract 2026-06-01 21:07:07 -04:00
Peter Steinberger
03b1d06980 docs: document install target contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
78638ba4bb docs: document update channel contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
c4fcafcf8e docs: document update check contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
e4c1182789 docs: document update restart sentinel handoff 2026-06-01 21:07:07 -04:00
Peter Steinberger
1cba4300a8 docs: document restart sentinel continuations 2026-06-01 21:07:07 -04:00
Peter Steinberger
93084f6073 docs: document entrypoint detection 2026-06-01 21:07:07 -04:00
Peter Steinberger
f4d53265da docs: document npm registry spec contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
c77e69b27b docs: document secret input normalization 2026-06-01 21:07:07 -04:00
Peter Steinberger
b9fd6d96cc docs: document inline directive helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
1fd4e90463 docs: document delivery context helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
ae62e30ae7 docs: document message channel helpers 2026-06-01 21:07:07 -04:00
Peter Steinberger
7b11b3f782 docs: document shared utils contracts 2026-06-01 21:07:07 -04:00
Peter Steinberger
0531beaf52 docs: document ssrf contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
355c1354e9 docs: document local-origin bypass contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
064ac94744 docs: document proxy fetch contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
b5f9cb6151 docs: document runtime fetch contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
5e03331d19 docs: document fetch compatibility contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
75b6ebc524 docs: document web push contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
f3a35fb09b docs: document Homebrew resolution contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
7634b15b81 docs: document gateway discovery targets 2026-06-01 21:07:06 -04:00
Peter Steinberger
5122e14c6b docs: document gateway process contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
2efa068f0b docs: document host env security contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
0a59b1319d docs: document restart sentinel contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
222e6f5c60 docs: document port diagnostics contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
cdd8bc862b docs: document heartbeat cooldown contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
762ad43b26 docs: document OpenAI tool choice contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
87c1417dab docs: document temp directory contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
71c473a539 docs: document executable path contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
5fa93a09d6 docs: document MCP loopback contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
e5b9d3c66b docs: document infra utility contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
4c12cc9da1 docs: document npm registry spec contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
0df70f2f9a docs: document gateway shared auth contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
ccbfcd3337 docs: document gateway method scope contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
a564c7dd82 docs: document agent stream safety contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
79c2c69ef1 docs: document CLI session reuse contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
c76863ec8a docs: document node pairing surface contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
297d95b94c docs: document node pairing persistence contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
751eabc9c4 docs: document gateway security helper contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
89d868733a docs: document gateway update mutation contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
1ea0f55fd6 docs: document node wake rpc contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
7f2ab82410 docs: document node approval pairing contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
2fc6ef9cd0 docs: document gateway node registry contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
e90fb1feba docs: document gateway startup runtime contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
7398020b1f docs: document gateway startup config contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
3ce0abff1a docs: document gateway talk session registry contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
71f9d68616 docs: document gateway talk relay contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
eae814770c docs: document gateway session history contracts 2026-06-01 21:07:06 -04:00
Peter Steinberger
9660aab819 docs: document gateway subagent lineage contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
a1f602765e docs: document session lifecycle event contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
243094a9e2 docs: document gateway active session shutdown contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
aa63357a88 docs: document gateway transcript ownership contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
7aff176ead docs: document gateway session patch contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
c7ac8c0b58 docs: document gateway auth resolution contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
ac29cbccc1 docs: document gateway auth secret materialization 2026-06-01 21:07:05 -04:00
Peter Steinberger
ab4ff72e05 docs: document gateway explicit connection policy 2026-06-01 21:07:05 -04:00
Peter Steinberger
1fd3e8a536 docs: document control ui routing contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
b57eb93646 docs: document gateway utility contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
188dbfbbbd docs: document gateway run session key contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
279a3a00bb docs: document node invoke sanitizer contract 2026-06-01 21:07:05 -04:00
Peter Steinberger
51ae46319a docs: document gateway rate limit contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
d9ef964c42 docs: document gateway request context contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
d47eeda8f9 docs: document gateway shared auth generation 2026-06-01 21:07:05 -04:00
Peter Steinberger
5eaba4ce10 docs: document gateway session key contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
ff4a7f7e50 docs: document gateway credential secret contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
8a6472b4b0 docs: document gateway method contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
9091d44ad2 docs: document plugin main api contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
5f2a996550 docs: document plugin node service contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
d096e788aa docs: document plugin command gateway contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
67a8225f3b docs: document speech realtime provider contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
3932238405 docs: document provider plugin tail contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
8dd47022bc docs: document provider plugin identity contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
429082e106 docs: document provider setup prompt contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
97c9ef2bad docs: document provider runtime hook contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
14b88e5193 docs: document provider catalog type contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
55d0eebf38 docs: document provider auth method contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
32fe56d9b5 docs: document provider auth type contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
fb2e814383 docs: document migration provider type contracts 2026-06-01 21:07:05 -04:00
Peter Steinberger
6d4d2d662a docs: document migrate prompt option APIs 2026-06-01 21:07:05 -04:00
Peter Steinberger
3c1d353e33 docs: document migrate command entrypoint 2026-06-01 21:07:05 -04:00
Peter Steinberger
85d0bd8c75 docs: document migrate provider context helpers 2026-06-01 21:07:05 -04:00
Peter Steinberger
ba37ac552c docs: document migrate output helpers 2026-06-01 21:07:05 -04:00
Peter Steinberger
ea4b3fd235 docs: document migrate selection helpers 2026-06-01 21:07:05 -04:00
Peter Steinberger
233a68e820 docs: document plugin SDK migration runtime 2026-06-01 21:07:05 -04:00
Peter Steinberger
6b4d308045 docs: document plugin SDK migration helpers 2026-06-01 21:07:05 -04:00
Peter Steinberger
c7befdc0e0 docs: document provider tool schema compatibility 2026-06-01 21:07:05 -04:00
Peter Steinberger
06e70c8ea5 docs: document outbound text chunking 2026-06-01 21:07:04 -04:00
Peter Steinberger
d7dedeb427 docs: document channel route identity helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
6e53296c56 docs: document inbound debounce policy 2026-06-01 21:07:04 -04:00
Peter Steinberger
5bd5cbcc3e docs: document channel config matching helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
e3647f0c03 docs: document plugin host cleanup timeout 2026-06-01 21:07:04 -04:00
Peter Steinberger
8ed427971d docs: document provider catalog helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
1cbf3a9114 docs: document channel model override resolution 2026-06-01 21:07:04 -04:00
Peter Steinberger
37b3dd4008 docs: document channel config helper contracts 2026-06-01 21:07:04 -04:00
Peter Steinberger
4712707798 docs: document account snapshot field projection 2026-06-01 21:07:04 -04:00
Peter Steinberger
041d699c13 docs: document thread binding policy helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
090d549a17 docs: document channel target parsing contracts 2026-06-01 21:07:04 -04:00
Peter Steinberger
ce00659782 docs: document direct dm access bridge 2026-06-01 21:07:04 -04:00
Peter Steinberger
fc35ea8283 docs: document provider catalog text projection 2026-06-01 21:07:04 -04:00
Peter Steinberger
7b3803a4a6 docs: document gateway startup plugin scopes 2026-06-01 21:07:04 -04:00
Peter Steinberger
68ce3a2d38 docs: document embedding provider runtime lookup 2026-06-01 21:07:04 -04:00
Peter Steinberger
b9910b87a0 docs: document memory embedding provider runtime 2026-06-01 21:07:04 -04:00
Peter Steinberger
6c67c766ce docs: document memory runtime helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
4b2ccbf421 docs: document bundle config helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
05c5d5a23d docs: document plugin config state 2026-06-01 21:07:04 -04:00
Peter Steinberger
39daf6e335 docs: document plugin activation context 2026-06-01 21:07:04 -04:00
Peter Steinberger
b4cce6da21 docs: document trusted tool policy flow 2026-06-01 21:07:04 -04:00
Peter Steinberger
458d49e8e4 docs: document provider install catalog 2026-06-01 21:07:04 -04:00
Peter Steinberger
36dd1f902e docs: document web search provider helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
6d88c9416d docs: document web fetch provider helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
ae3f999856 docs: document web provider resolution 2026-06-01 21:07:04 -04:00
Peter Steinberger
eac2c3db00 docs: document manifest model suppression 2026-06-01 21:07:04 -04:00
Peter Steinberger
e60a8bac79 docs: document manifest owner policy 2026-06-01 21:07:04 -04:00
Peter Steinberger
30a5337315 docs: document manifest tool availability 2026-06-01 21:07:04 -04:00
Peter Steinberger
8382859716 docs: document plugin scheduled turn contracts 2026-06-01 21:07:04 -04:00
Peter Steinberger
4e004384e0 docs: document uninstall helper contracts 2026-06-01 21:07:04 -04:00
Peter Steinberger
79074b7ee9 docs: document effective plugin id resolution 2026-06-01 21:07:04 -04:00
Peter Steinberger
ab1415b62d docs: document optional plugin manifest rule 2026-06-01 21:07:04 -04:00
Peter Steinberger
8359e618ed docs: document web search credential detection 2026-06-01 21:07:04 -04:00
Peter Steinberger
86c3de42cf docs: document hook agent channel context 2026-06-01 21:07:04 -04:00
Peter Steinberger
44413914a2 docs: document host hook cleanup timeout 2026-06-01 21:07:04 -04:00
Peter Steinberger
84d2aff5fb docs: document agent tool result middleware helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
4354045ce1 docs: document plugin source display 2026-06-01 21:07:04 -04:00
Peter Steinberger
fa305ad2e7 docs: document plugin control plane context 2026-06-01 21:07:04 -04:00
Peter Steinberger
81d30ae3c8 docs: document plugin scope helpers 2026-06-01 21:07:04 -04:00
Peter Steinberger
b460cae176 docs: document provider auth input mode 2026-06-01 21:07:04 -04:00
Peter Steinberger
ab3b585601 docs: document installed plugin index store paths 2026-06-01 21:07:04 -04:00
Peter Steinberger
8061edd972 docs: document plugin HTTP path normalization 2026-06-01 21:07:04 -04:00
Peter Steinberger
88b853cf7b docs: document provider config owner hints 2026-06-01 21:07:03 -04:00
Peter Steinberger
b8b85fb402 docs: document plugin conversation binding runtime 2026-06-01 21:07:03 -04:00
Peter Steinberger
a074ac6382 docs: document interactive registry helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
1a8e1f25ae docs: document plugin tool descriptor cache 2026-06-01 21:07:03 -04:00
Peter Steinberger
26bde4dcbd docs: document plugin cache primitives 2026-06-01 21:07:03 -04:00
Peter Steinberger
f97c5946b7 docs: document plugin root cache inputs 2026-06-01 21:07:03 -04:00
Peter Steinberger
3fb6b22133 docs: document package entrypoint candidates 2026-06-01 21:07:03 -04:00
Peter Steinberger
8ea2dc7075 docs: document bundled public surface resolution 2026-06-01 21:07:03 -04:00
Peter Steinberger
393ac2a110 docs: document host hook JSON boundary 2026-06-01 21:07:03 -04:00
Peter Steinberger
ce908ef258 docs: document setup wizard flow 2026-06-01 21:07:03 -04:00
Peter Steinberger
bd549a1a02 docs: clarify configured binding matching 2026-06-01 21:07:03 -04:00
Peter Steinberger
251d1a3c33 docs: document stateful target driver contract 2026-06-01 21:07:03 -04:00
Peter Steinberger
fb5c0da417 docs: document configured binding consumer contract 2026-06-01 21:07:03 -04:00
Peter Steinberger
700003d25c docs: document configured binding skips 2026-06-01 21:07:03 -04:00
Peter Steinberger
5f4fbb1639 docs: document chat target prefix helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
4c0a838b34 docs: document status approval utilities 2026-06-01 21:07:03 -04:00
Peter Steinberger
281e503a18 docs: document channel module loader 2026-06-01 21:07:03 -04:00
Peter Steinberger
091df1fddc docs: document config write ambiguity 2026-06-01 21:07:03 -04:00
Peter Steinberger
0826b75e9b docs: document group policy warning helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
79fae8a163 docs: document channel utility entrypoints 2026-06-01 21:07:03 -04:00
Peter Steinberger
521861192b docs: document status issue helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
c94710b5f4 docs: document setup wizard type contracts 2026-06-01 21:07:03 -04:00
Peter Steinberger
ccc4053def docs: document channel adapter type contracts 2026-06-01 21:07:03 -04:00
Peter Steinberger
cb72a1ce2d docs: document channel plugin type contracts 2026-06-01 21:07:03 -04:00
Peter Steinberger
ca23a63de1 docs: document outbound config types 2026-06-01 21:07:03 -04:00
Peter Steinberger
b6288593c2 docs: document setup wizard helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
817f220aaa docs: document setup promotion helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
06502bc9ad docs: document bundled read helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
3e74cc4d1a docs: document approval config schema helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
ffa248a523 docs: document dm pairing helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
7a4a814a3d docs: document channel runtime helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
5948160245 docs: document media helper APIs 2026-06-01 21:07:03 -04:00
Peter Steinberger
2656a8feca docs: document threading target helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
1d87ef5a86 docs: document channel state helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
ba8abd1357 docs: document channel catalog helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
4fabaea49b docs: document bundled channel loader 2026-06-01 21:07:03 -04:00
Peter Steinberger
64b684e187 docs: document channel registry helpers 2026-06-01 21:07:03 -04:00
Peter Steinberger
3cbf0d1faa docs: document outbound loader APIs 2026-06-01 21:07:03 -04:00
Peter Steinberger
e088d2cbbe docs: document presentation limit invariants 2026-06-01 21:07:02 -04:00
Peter Steinberger
75ba474c7d docs: document outbound helper APIs 2026-06-01 21:07:02 -04:00
Peter Steinberger
93ff68940d docs: document message action helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
0d676cfd48 docs: document message tool APIs 2026-06-01 21:07:02 -04:00
Peter Steinberger
c0026f1811 docs: document message action discovery 2026-06-01 21:07:02 -04:00
Peter Steinberger
112ce219fb docs: document stateful target builtins 2026-06-01 21:07:02 -04:00
Peter Steinberger
937a5a1ee1 docs: document configured binding consumers 2026-06-01 21:07:02 -04:00
Peter Steinberger
72edfa235e docs: document binding public APIs 2026-06-01 21:07:02 -04:00
Peter Steinberger
58ba60e14e docs: document stateful target drivers 2026-06-01 21:07:02 -04:00
Peter Steinberger
5782a24b97 docs: document configured binding registry 2026-06-01 21:07:02 -04:00
Peter Steinberger
b03998ae37 docs: document binding routing helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
18bf52fc94 docs: document directory adapter helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
026ec61336 docs: document directory config helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
c01cd303b2 docs: document setup wizard prompt helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
be1009ea34 docs: document setup wizard policy helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
eaa1af3e56 docs: document setup wizard helper parsing 2026-06-01 21:07:02 -04:00
Peter Steinberger
f4833592b3 docs: document setup wizard delegation 2026-06-01 21:07:02 -04:00
Peter Steinberger
577636d728 docs: document setup promotion keys 2026-06-01 21:07:02 -04:00
Peter Steinberger
a827663a5b docs: document setup promotion helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
07ca2b6871 docs: document plugin config helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
5f431f4fcd docs: document config write wrappers 2026-06-01 21:07:02 -04:00
Peter Steinberger
da2d32c5f8 docs: document config write policy helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
9ab59b4953 docs: document channel account helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
9e5dace9d3 docs: document account action gate 2026-06-01 21:07:02 -04:00
Peter Steinberger
544245826c docs: document target resolver helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
d275f33bd5 docs: document channel route helper invariants 2026-06-01 21:07:02 -04:00
Peter Steinberger
9df20de599 docs: document channel target parser contracts 2026-06-01 21:07:02 -04:00
Peter Steinberger
4184e9833b docs: document chat target prefix helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
92405fb43a docs: document allowlist matcher invariants 2026-06-01 21:07:02 -04:00
Peter Steinberger
e6232d218f docs: document allowlist resolution helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
8044db357f docs: document plugin allow-from helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
219ff4f299 docs: document channel gating helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
2646058c9b docs: document channel ingress sender gates 2026-06-01 21:07:02 -04:00
Peter Steinberger
5ed4298fb3 docs: document channel ingress allowlist helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
66c359839a docs: document channel ingress identity helpers 2026-06-01 21:07:02 -04:00
Peter Steinberger
48dc4444ae docs: document channel ingress runtime invariants 2026-06-01 21:07:02 -04:00
Peter Steinberger
903612ab64 docs: document channel turn helper invariants 2026-06-01 21:07:02 -04:00
Peter Steinberger
a4d7a8e3d9 docs: document delivery result compatibility 2026-06-01 21:07:02 -04:00
Peter Steinberger
1edf373908 docs: document durable reply delivery 2026-06-01 21:07:02 -04:00
Peter Steinberger
e36f9bcb89 docs: document channel turn kernel invariants 2026-06-01 21:07:02 -04:00
Peter Steinberger
2aec8684a0 docs: document inbound reply dispatch delivery 2026-06-01 21:07:02 -04:00
Peter Steinberger
b32d6f48ca docs: document reply prefix context 2026-06-01 21:07:01 -04:00
Peter Steinberger
a69a86775b docs: document channel typing internals 2026-06-01 21:07:01 -04:00
Peter Steinberger
a116a0567e docs: document channel typing lifecycle 2026-06-01 21:07:01 -04:00
Peter Steinberger
0e16019ead docs: document channel reply pipeline contracts 2026-06-01 21:07:01 -04:00
Peter Steinberger
f56e36d828 docs: document channel inbound compatibility 2026-06-01 21:07:01 -04:00
Peter Steinberger
7b18277681 docs: document channel config helper contracts 2026-06-01 21:07:01 -04:00
Peter Steinberger
e2990c76df docs: document channel policy helper contracts 2026-06-01 21:07:01 -04:00
Peter Steinberger
7b8ff148af docs: document channel send result helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
bfc66fb505 docs: document channel route helper contracts 2026-06-01 21:07:01 -04:00
Peter Steinberger
ecba8fb765 docs: document status helper contracts 2026-06-01 21:07:01 -04:00
Peter Steinberger
4bb06ec498 docs: document webhook target helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
04f2a05a95 docs: document webhook memory guards 2026-06-01 21:07:01 -04:00
Peter Steinberger
783a709a94 docs: document webhook request guards 2026-06-01 21:07:01 -04:00
Peter Steinberger
c7240c46a7 docs: document plugin runtime store 2026-06-01 21:07:01 -04:00
Peter Steinberger
ec2f8ca948 docs: document agent harness task runtime 2026-06-01 21:07:01 -04:00
Peter Steinberger
5d489d45e8 docs: document agent harness task runtime scope 2026-06-01 21:07:01 -04:00
Peter Steinberger
bf3f207175 docs: document detached task runtime state 2026-06-01 21:07:01 -04:00
Peter Steinberger
3c65961276 docs: document detached task runtime dispatch 2026-06-01 21:07:01 -04:00
Peter Steinberger
f31c30fece docs: document detached task runtime contract 2026-06-01 21:07:01 -04:00
Peter Steinberger
124bb53ea9 docs: document task registry types 2026-06-01 21:07:01 -04:00
Peter Steinberger
fe7fcc9091 docs: document task registry summaries 2026-06-01 21:07:01 -04:00
Peter Steinberger
adf128510b docs: document task domain view mappers 2026-06-01 21:07:01 -04:00
Peter Steinberger
dcbf2dde4c docs: document task status helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
32a5c3848a docs: document required completion contract 2026-06-01 21:07:01 -04:00
Peter Steinberger
e1509529bf docs: document task executor policy helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
73b434f25b docs: document blocked taskflow retry helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
792976b76f docs: document taskflow executor helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
8aaf6d9a84 docs: document task owner access helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
30a4478c10 docs: document taskflow owner access helpers 2026-06-01 21:07:01 -04:00
Peter Steinberger
5d07ee772e docs: document managed taskflow runtime guards 2026-06-01 21:07:01 -04:00
Peter Steinberger
fa9ef924a2 docs: document managed taskflow runtime types 2026-06-01 21:07:01 -04:00
Peter Steinberger
f066d1c87e docs: document plugin runtime task DTOs 2026-06-01 21:07:01 -04:00
Peter Steinberger
05f2113302 docs: document plugin runtime task types 2026-06-01 21:07:01 -04:00
Peter Steinberger
3597ff0547 docs: document plugin runtime llm types 2026-06-01 21:07:01 -04:00
Peter Steinberger
dd90fd0255 docs: document plugin runtime core types 2026-06-01 21:07:01 -04:00
Peter Steinberger
cb04dd3028 docs: document plugin runtime types 2026-06-01 21:07:01 -04:00
Peter Steinberger
04505f86eb docs: document runtime context registry 2026-06-01 21:07:01 -04:00
Peter Steinberger
f0101337bb docs: document channel runtime surface types 2026-06-01 21:07:01 -04:00
Peter Steinberger
797777c813 docs: document channel runtime contexts 2026-06-01 21:07:01 -04:00
Peter Steinberger
c79b89173d docs: document approval handler bootstrap 2026-06-01 21:07:01 -04:00
Peter Steinberger
2a2228e496 docs: document exec approval channel runtime 2026-06-01 21:07:00 -04:00
Peter Steinberger
157fddee51 docs: document exec approval runtime types 2026-06-01 21:07:00 -04:00
Peter Steinberger
5ea6857491 docs: document approval native runtime helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
59eb39e39a docs: document approval route coordinator 2026-06-01 21:07:00 -04:00
Peter Steinberger
a2b0002d3f docs: document exec approval surface states 2026-06-01 21:07:00 -04:00
Peter Steinberger
0308347fa7 docs: document approval request filters 2026-06-01 21:07:00 -04:00
Peter Steinberger
cf6875e633 docs: document exec approval display sanitizers 2026-06-01 21:07:00 -04:00
Peter Steinberger
9cf1c116ff docs: document exec approval session targets 2026-06-01 21:07:00 -04:00
Peter Steinberger
3030a4973e docs: document approval account binding helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
8c59fbbe92 docs: document approval gateway resolver 2026-06-01 21:07:00 -04:00
Peter Steinberger
443791ef52 docs: document approval error detection 2026-06-01 21:07:00 -04:00
Peter Steinberger
9ee71023c2 docs: document approval turn-source routing 2026-06-01 21:07:00 -04:00
Peter Steinberger
731cfb6ff5 docs: document approval view model builders 2026-06-01 21:07:00 -04:00
Peter Steinberger
9e7f9915a0 docs: document approval view model unions 2026-06-01 21:07:00 -04:00
Peter Steinberger
ef20dc5f2f docs: document approval handler adapters 2026-06-01 21:07:00 -04:00
Peter Steinberger
f58a38b522 docs: document lazy approval runtime adapter 2026-06-01 21:07:00 -04:00
Peter Steinberger
05a13da12c docs: document approval handler runtime types 2026-06-01 21:07:00 -04:00
Peter Steinberger
e0cfcc3151 docs: document approval native runtime types 2026-06-01 21:07:00 -04:00
Peter Steinberger
ac61833b62 docs: document approval native target keys 2026-06-01 21:07:00 -04:00
Peter Steinberger
1683b809c1 docs: document approval native delivery planner 2026-06-01 21:07:00 -04:00
Peter Steinberger
78d012ece4 docs: document approval native route notices 2026-06-01 21:07:00 -04:00
Peter Steinberger
67d008d00e docs: document approval display path helper 2026-06-01 21:07:00 -04:00
Peter Steinberger
adeafcee18 docs: document exec approval surface helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
d9099828a4 docs: document safe-bin runtime policy 2026-06-01 21:07:00 -04:00
Peter Steinberger
0b66e2cd01 docs: document safe-bin argv validator 2026-06-01 21:07:00 -04:00
Peter Steinberger
beabbe9219 docs: document safe-bin semantic helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
62a27e1be5 docs: document safe-bin profile helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
cc31cddf54 docs: document safe-bin trust helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
d6fe20c350 docs: document exec allowlist pattern matching 2026-06-01 21:07:00 -04:00
Peter Steinberger
a483a2cbc5 docs: document shell wrapper APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
7fff122060 docs: document executable path helpers 2026-06-01 21:07:00 -04:00
Peter Steinberger
6b9185c6ec docs: document exec command resolution APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
473188bd1f docs: document exec command analysis APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
b734ccfa3c docs: document exec allowlist result APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
b8f1843909 docs: document system-run approval match result 2026-06-01 21:07:00 -04:00
Peter Steinberger
4048b087c3 docs: document exec approval request config APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
2a7e41b27b docs: document exec approval prompt policy 2026-06-01 21:07:00 -04:00
Peter Steinberger
2f5f5307ef docs: document exec approval allowlist APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
2439e2450a docs: document exec approval store APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
cec3fbae45 docs: document exec approval decision APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
7881649f7e docs: document dispatch wrapper resolution APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
355a411e2a docs: document exec approval reply APIs 2026-06-01 21:07:00 -04:00
Peter Steinberger
883f4cbf25 docs: document dotenv loader contracts 2026-06-01 21:06:59 -04:00
Peter Steinberger
eaf86695b3 docs: document update channel contracts 2026-06-01 21:06:59 -04:00
Peter Steinberger
0b3465e9a3 docs: document home directory helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
2478bd2db4 docs: document exec approval policy combinators 2026-06-01 21:06:59 -04:00
Peter Steinberger
c949857684 docs: document exec approval policy APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
37218ccd2b docs: document error kind contract 2026-06-01 21:06:59 -04:00
Peter Steinberger
298fcebd96 docs: document exec approval session target 2026-06-01 21:06:59 -04:00
Peter Steinberger
b62ab78f03 docs: document exec approval surface APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
e46cb79e93 docs: document event session routing APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
7f45dc815f docs: document approval request filters 2026-06-01 21:06:59 -04:00
Peter Steinberger
f5556b500e docs: document container environment helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
19821c958d docs: document clipboard helper 2026-06-01 21:06:59 -04:00
Peter Steinberger
c94964e3a0 docs: document clawhub spec parser 2026-06-01 21:06:59 -04:00
Peter Steinberger
e6ecffc7fb docs: document channel summary APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
fc5c22a238 docs: document channel runtime context APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
a4c1d64a33 docs: document bonjour discovery APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
9d96e542de docs: document diagnostic event APIs 2026-06-01 21:06:59 -04:00
Peter Steinberger
0ebc68745f docs: document channel activity helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
dd42bb9e4c docs: document agent event contracts 2026-06-01 21:06:59 -04:00
Peter Steinberger
59ab73f417 docs: document source reply mirror 2026-06-01 21:06:59 -04:00
Peter Steinberger
cb2ec869ac docs: document outbound session context 2026-06-01 21:06:59 -04:00
Peter Steinberger
1ca4396825 docs: document outbound delivery substrate 2026-06-01 21:06:59 -04:00
Peter Steinberger
98b2385585 docs: document session binding service 2026-06-01 21:06:59 -04:00
Peter Steinberger
0a1adb9290 docs: document delivery queue storage 2026-06-01 21:06:59 -04:00
Peter Steinberger
21662d3ee8 docs: document delivery recovery helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
a33ec61daa docs: document outbound message API 2026-06-01 21:06:59 -04:00
Peter Steinberger
1eb4a2a837 docs: document message action runner API 2026-06-01 21:06:59 -04:00
Peter Steinberger
1e7c7caba5 docs: document agent delivery helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
d97ce8e7c1 docs: document npm install env helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
8ef5d37f84 docs: document OpenClaw exec env marker 2026-06-01 21:06:59 -04:00
Peter Steinberger
2858ced19f docs: document shell env fallback 2026-06-01 21:06:59 -04:00
Peter Steinberger
19e4a47ba5 docs: document binary prerequisite helper 2026-06-01 21:06:59 -04:00
Peter Steinberger
4ab1f899c8 docs: document control UI asset helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
3159b1840b docs: document channel status issues 2026-06-01 21:06:59 -04:00
Peter Steinberger
d44507dd58 docs: document brew resolution 2026-06-01 21:06:59 -04:00
Peter Steinberger
1988f443dd docs: document CLI root option parsing 2026-06-01 21:06:59 -04:00
Peter Steinberger
a4e811a063 docs: document diagnostics timeline 2026-06-01 21:06:59 -04:00
Peter Steinberger
1e8b669bdc docs: document diagnostic LLM content policy 2026-06-01 21:06:59 -04:00
Peter Steinberger
76412b9e76 docs: document diagnostic trace context 2026-06-01 21:06:59 -04:00
Peter Steinberger
515acdb6b7 docs: document disk space helpers 2026-06-01 21:06:59 -04:00
Peter Steinberger
64598efd21 docs: document diagnostic flags 2026-06-01 21:06:58 -04:00
Peter Steinberger
e819d5718b docs: document embedded mode flag 2026-06-01 21:06:58 -04:00
Peter Steinberger
51cf923f7e docs: document package manager detection 2026-06-01 21:06:58 -04:00
Peter Steinberger
bf2628fd09 docs: document browser open helpers 2026-06-01 21:06:58 -04:00
Peter Steinberger
bc6ddea004 docs: document map size pruning 2026-06-01 21:06:58 -04:00
Peter Steinberger
cf6f086114 docs: document abort signal helper 2026-06-01 21:06:58 -04:00
Peter Steinberger
85f262ad3b docs: document channel activity 2026-06-01 21:06:58 -04:00
Peter Steinberger
07642fd3ac docs: document approval gateway runtime 2026-06-01 21:06:58 -04:00
Peter Steinberger
e9eb6a5a6e docs: document approval turn source auth 2026-06-01 21:06:58 -04:00
Peter Steinberger
058cf763b4 docs: document approval display errors 2026-06-01 21:06:58 -04:00
Peter Steinberger
e3439e2019 docs: document approval view model 2026-06-01 21:06:58 -04:00
Peter Steinberger
7e5a7eff15 docs: document approval handler runtime 2026-06-01 21:06:58 -04:00
Peter Steinberger
5d4b2081b5 docs: document native approval runtime 2026-06-01 21:06:58 -04:00
Peter Steinberger
b60e95ac50 docs: document native approval delivery 2026-06-01 21:06:58 -04:00
Peter Steinberger
9fbf3ab3f5 docs: document native approval route notices 2026-06-01 21:06:58 -04:00
Peter Steinberger
0a4ef8b44c docs: document approval request binding filters 2026-06-01 21:06:58 -04:00
Peter Steinberger
9d27524aae docs: document exec approval channel runtime 2026-06-01 21:06:58 -04:00
Peter Steinberger
37ee88c43a docs: document exec approval forwarder 2026-06-01 21:06:58 -04:00
Peter Steinberger
8c40322f6d docs: document exec approval reply routing 2026-06-01 21:06:58 -04:00
Peter Steinberger
9621d02c3b docs: document system-run approval binding 2026-06-01 21:06:58 -04:00
Peter Steinberger
db9524334d docs: document system-run approval context 2026-06-01 21:06:58 -04:00
Peter Steinberger
023d1c1346 docs: document system-run command contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
02257c6145 docs: document exec allowlist entry contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
63a085603d docs: document exec allowlist contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
6c1acbb51d docs: document safe-bin profile contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
3962e794a3 docs: document safe-bin trust contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
e93debe38a docs: document safe-bin runtime policy contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
2aa74b8be8 docs: document exec approval policy snapshots 2026-06-01 21:06:58 -04:00
Peter Steinberger
641329157f docs: document approval display contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
069e616b40 docs: document executable path contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
b72867c4ef docs: document exec command resolution contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
e7029418b2 docs: document shell inline command scanners 2026-06-01 21:06:58 -04:00
Peter Steinberger
0094f36bb9 docs: document shell wrapper trust contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
6a96f5701a docs: document dispatch wrapper trust contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
4d335bccae docs: document command carrier helper contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
018a5dccf1 docs: document command explainer span contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
3cb4554fe8 docs: document command policy analysis contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
d1d6900c6d docs: document command explanation summary contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
bd46b791e9 docs: document command risk carrier contracts 2026-06-01 21:06:58 -04:00
Peter Steinberger
3c781401ad docs: document inline eval detector contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
86581bd139 docs: document TCP port parser contract 2026-06-01 21:06:57 -04:00
Peter Steinberger
c5fda5eb9a docs: document port diagnostics contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
390434673e docs: document package tag input contract 2026-06-01 21:06:57 -04:00
Peter Steinberger
f27fdcbdb0 docs: document update channel contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
303141be85 docs: document inline option token contract 2026-06-01 21:06:57 -04:00
Peter Steinberger
580bc23dcc docs: document prototype key guard contract 2026-06-01 21:06:57 -04:00
Peter Steinberger
9e5f601c61 docs: document environment helper contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
d22b8d1cdb docs: document PATH bootstrap contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
01c5513c41 docs: document fetch header normalization contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
4dde1e9b54 docs: document secret file compatibility contract 2026-06-01 21:06:57 -04:00
Peter Steinberger
5efffc9184 docs: document JSON file helper contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
301aae5cd7 docs: document HTTP body guard contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
bd3f2929c0 docs: document fixed-window rate limiter contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
6a540d945c docs: document backoff helper contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
68a780bb3c docs: document retry engine contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
bd654bf5be docs: document retry policy contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
aa5996ff28 docs: document number coercion thresholds 2026-06-01 21:06:57 -04:00
Peter Steinberger
4404474a99 docs: document map and numeric option helpers 2026-06-01 21:06:57 -04:00
Peter Steinberger
edad8bd695 docs: document dedupe cache contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
f1fcb4763c docs: document diagnostic error metadata helpers 2026-06-01 21:06:57 -04:00
Peter Steinberger
c996011b0c docs: document shared error helpers 2026-06-01 21:06:57 -04:00
Peter Steinberger
b7659b414e docs: document reasoning tag partitioner contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
0c22351b0e docs: document trajectory path helpers 2026-06-01 21:06:57 -04:00
Peter Steinberger
a3c068ab46 docs: document trajectory runtime writer contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
34e60c7613 docs: document trajectory cleanup guards 2026-06-01 21:06:57 -04:00
Peter Steinberger
ae048ac2dc docs: document trajectory export contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
b97bc433ff docs: document trajectory metadata contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
82b69dceb8 docs: document support bundle writer contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
2ae9055e8d docs: document diagnostic support export contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
b1ec36802c docs: document support log sanitizer invariants 2026-06-01 21:06:57 -04:00
Peter Steinberger
98b8eb02d2 docs: document support redaction contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
9a6c1eb13f docs: document logging redaction API contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
10d44e6e2a docs: document bounded concurrency helper contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
7c3bf80220 docs: document fetch timeout abort contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
279f14f3fc docs: document gateway client public contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
9d50d2beb6 docs: document device auth payload contracts 2026-06-01 21:06:57 -04:00
Peter Steinberger
e9b481bbf6 docs: document gateway client readiness start rules 2026-06-01 21:06:57 -04:00
Peter Steinberger
2d2a4da093 docs: document event loop readiness probe fields 2026-06-01 21:06:57 -04:00
Peter Steinberger
aaebe74428 docs: document gateway timeout clamp rules 2026-06-01 21:06:56 -04:00
Peter Steinberger
ac68783d81 docs: document live plugin config fallback 2026-06-01 21:06:56 -04:00
Peter Steinberger
11169b5c6a docs: document node presence reasons 2026-06-01 21:06:56 -04:00
Peter Steinberger
a190b16ced docs: document avatar policy constants 2026-06-01 21:06:56 -04:00
Peter Steinberger
8be6591675 docs: document OpenAI Codex auth helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
e9982ad288 docs: document plugin command runner 2026-06-01 21:06:56 -04:00
Peter Steinberger
ef68275a6d docs: document tool send target fallback 2026-06-01 21:06:56 -04:00
Peter Steinberger
92aeda817d docs: document telegram account facade 2026-06-01 21:06:56 -04:00
Peter Steinberger
67a08ebadb docs: document runtime store helper 2026-06-01 21:06:56 -04:00
Peter Steinberger
e68c5861ac docs: document webhook request guard helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
0109afd7fc docs: document keyed async queue helper 2026-06-01 21:06:56 -04:00
Peter Steinberger
3bdd36b718 docs: document tool payload helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
0a88da285b docs: document plugin SDK runtime helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
3bab9e07d4 docs: document browser maintenance helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
77b22b4e22 docs: document safe record helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
30f28516d7 docs: document approval reaction helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
ecea9a3d8c docs: document provider catalog helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
02565857e8 docs: document provider onboard helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
32f1e0e3ac docs: document allowlist config helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
ddfe936ebe docs: document provider tool compat helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
2810c181ea docs: document persistent dedupe helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
911ebfa7fb docs: document account setup helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
8675ae253b docs: document auth and chunk helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
20c0ef5341 docs: document assistant text helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
ef1f870335 docs: document command status runtime 2026-06-01 21:06:56 -04:00
Peter Steinberger
74dfd528cc docs: document provider model helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
624f279b6c docs: document browser config helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
48e0fb965d docs: document QA scenario helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
22ccabe92e docs: document migration helper contracts 2026-06-01 21:06:56 -04:00
Peter Steinberger
bd3eea8a24 docs: document status helper payloads 2026-06-01 21:06:56 -04:00
Peter Steinberger
cb3ea96414 docs: document extension shared helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
cf2f6e8902 docs: document session policy payloads 2026-06-01 21:06:56 -04:00
Peter Steinberger
c11eb54ff3 docs: document webhook guard helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
b25cc2cb97 docs: document channel diagnostics helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
9693b72e87 docs: document thread binding label helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
b7f733f828 docs: document reply prefix typing guard helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
8f5c762f9b docs: document inbound debounce stream helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
170f7ac81b docs: document direct dm allow-from helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
bb70e68f82 docs: document channel match allowlist helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
fbeb08967c docs: document channel snapshot presence helpers 2026-06-01 21:06:56 -04:00
Peter Steinberger
69df840dd1 docs: document channel config helper contracts 2026-06-01 21:06:56 -04:00
Peter Steinberger
ea70737204 docs: document channel turn adapter contracts 2026-06-01 21:06:55 -04:00
Peter Steinberger
6950c25a89 docs: document channel turn delivery helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
45823c5f88 docs: document inbound reply bridge helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
4d4b9a76ce docs: document message receive capability helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
e08890f356 docs: document durable ingress queue helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
f63647a799 docs: document message outbound bridge helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
d49ce1011b docs: document durable message state fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
10f1f19a55 docs: document live message contracts 2026-06-01 21:06:55 -04:00
Peter Steinberger
eb45f7506e docs: document message receipt fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
72ddb522b4 docs: document channel turn helper fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
1a45a6d112 docs: document inbound event context helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
a227ce9cd5 docs: document conversation resolution helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
871ba88159 docs: document route projection helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
6588d77fa0 docs: document direct dm guard policy 2026-06-01 21:06:55 -04:00
Peter Steinberger
edbbbddf96 docs: document ack reaction helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
deddd60a50 docs: document channel target policy helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
8d5352fdf9 docs: document thread binding policy fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
b19e8edd45 docs: document command gating fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
9b3f19377d docs: document mention gating fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
035f50f0b3 docs: document entry status fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
8917f5fcd5 docs: document usage timeseries fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
7f8ae918e3 docs: document usage payload fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
a43dafe15d docs: document node list payload fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
0f883cb654 docs: document thread binding lifecycle fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
d2c55f660f docs: document runtime requirement fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
93efa868b9 docs: document requirement metadata fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
0c15c69e8f docs: document store writer queue fields 2026-06-01 21:06:55 -04:00
Peter Steinberger
40326fcd4f docs: document scoped id cache helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
d0c99db71b docs: document custom command config helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
333c28efe1 docs: document final tag parser helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
062c82ef82 docs: document device auth store helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
732f2e5375 docs: document node matching helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
db1246e1bd docs: document shared runtime policy helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
fb614861e0 docs: document shared utility helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
d887a39c28 docs: document assistant error format helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
f0e5fd6037 docs: document shared json schema helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
343c56a64c docs: document markdown table chunk helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
386044015b docs: document markdown ir helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
62edb0ccab docs: document markdown code span helpers 2026-06-01 21:06:55 -04:00
Peter Steinberger
8554efb754 docs: document markdown render helpers 2026-06-01 21:06:54 -04:00
Vincent Koc
489efc8f5e refactor: share device token authz test fixtures 2026-06-02 02:58:38 +02:00
Vincent Koc
459abfc26b fix(e2e): isolate plugin sweep scratch files 2026-06-02 02:50:41 +02:00
Vincent Koc
340cc2c1e4 refactor: share session history test fixtures 2026-06-02 02:41:09 +02:00
Vincent Koc
be8cb5d4ea refactor: share agent wait dedupe test fixtures 2026-06-02 02:37:48 +02:00
Vincent Koc
222ade9fa6 fix(e2e): clean kitchen sink sweep state 2026-06-02 02:29:52 +02:00
Peter Steinberger
6667b9734a fix(ci): avoid rg dependency in changelog gate 2026-06-02 01:29:15 +01:00
Vincent Koc
ebbb2e8f01 refactor: share handshake auth helper test fixtures 2026-06-02 02:20:52 +02:00
Vincent Koc
dea3e835c5 refactor: share channel health policy test fixtures 2026-06-02 02:16:09 +02:00
Peter Steinberger
722af385d2 test(release): accept gateway schema rejection wrapper 2026-06-02 01:10:00 +01:00
Vincent Koc
dacd18a8aa refactor: share chat attachment test helpers 2026-06-02 02:00:15 +02:00
Vincent Koc
8a9acd2940 test(mac): exercise codesign entitlement use 2026-06-02 01:56:24 +02:00
Vincent Koc
bd8353dbaa fix(testing): fail plugin gauntlet on failed qa summaries 2026-06-02 01:52:00 +02:00
Vincent Koc
3baf78dd0a refactor: share node invoke approval test helpers 2026-06-02 01:51:08 +02:00
Vincent Koc
1ed7692d2f test(changelog): exercise attribution gate policy 2026-06-02 01:46:34 +02:00
Omar Shahine
12798eb789 fix(agents): avoid duplicate generated media fallback (#89220)
Treat targetless current-chat message-tool media telemetry as delivered for generated-media completion dedupe while preserving fallback delivery for mismatched provider/account/thread evidence.

Real behavior proof was added from the live iMessage generated-image run: inbound id 5805, exactly one outgoing media reply id 5806, and no follow-up generated-image fallback.

Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Reviewed-by: @lobster
2026-06-01 16:46:14 -07:00
Omar Shahine
02192bd27f fix(imessage): keep typing active during tool work (#88948)
Keep iMessage native typing indicators alive through long tool-running gaps by bridging tool-start activity into the existing typing controller, while preserving typingMode and sendPolicy suppression semantics.

Real behavior proof was added from the live iMessage generated-image run: inbound id 5805, outgoing media reply id 5806, and requester-observed typing during the 84s tool path.

Co-authored-by: omarshahine <10343873+omarshahine@users.noreply.github.com>
Reviewed-by: @lobster
2026-06-01 16:45:46 -07:00
Vincent Koc
086274fd7e test(e2e): exercise onboard wizard exit status 2026-06-02 01:38:46 +02:00
Vincent Koc
ed07a7a2de refactor: share node pairing authz test setup 2026-06-02 01:33:11 +02:00
Vincent Koc
829fb5dcb3 fix(e2e): clean generated docker client state 2026-06-02 01:30:10 +02:00
Peter Steinberger
4c6285e8ff test(release): retry google tool-read failovers 2026-06-02 00:26:55 +01:00
Vincent Koc
7c52969d49 fix(e2e): clean plugin fixture servers on timeout 2026-06-02 01:17:08 +02:00
Vincent Koc
42d3acfc99 refactor: share ios approval push delivery 2026-06-02 01:09:58 +02:00
Vincent Koc
32f98d7fe8 fix(e2e): forward sighup in node watchdogs 2026-06-02 01:05:29 +02:00
Vincent Koc
4bd7421182 refactor: share gateway auth request guards 2026-06-02 00:56:06 +02:00
Vincent Koc
d91d8ff060 refactor: share chat abort test setup 2026-06-02 00:47:43 +02:00
Vincent Koc
af44fb9b6c fix(test): preserve vitest batch wrapper signals 2026-06-02 00:46:55 +02:00
Vincent Koc
45e0545e82 refactor: share gateway shutdown abort helpers 2026-06-02 00:44:16 +02:00
Peter Steinberger
2d17cb295d fix(discord): use libopus structured decode errors 2026-06-01 23:43:31 +01:00
Peter Steinberger
e8120a72e1 ci(release): retry quiet node shard stalls 2026-06-01 23:43:03 +01:00
Dallin Romney
0904f3e553 revert: undo gateway memory watch warning (#89246) 2026-06-01 15:32:42 -07:00
Vincent Koc
2770aa5f4c fix(scripts): clean boundary step process groups 2026-06-02 00:29:22 +02:00
Vincent Koc
285401ced8 refactor: share cli session history test helpers 2026-06-02 00:25:39 +02:00
Vincent Koc
64697fbe24 chore(release): add matrix plugin changelog 2026-06-02 00:23:41 +02:00
Vincent Koc
e9aae26b22 fix(test): clean live wrapper children 2026-06-02 00:19:53 +02:00
Vincent Koc
cb12a9af94 refactor: share node pairing request test helpers 2026-06-02 00:17:07 +02:00
Peter Steinberger
65d7fa2420 fix(memory): reattach Linux watchers on directory rename
(cherry picked from commit 0db7781514cc84fac4f3a999d24b4b747fc871f9)
2026-06-01 23:15:00 +01:00
Peter Steinberger
bd4a7f4119 fix(discord): classify corrupt opus packets structurally 2026-06-01 23:14:23 +01:00
Vincent Koc
14f61d0637 fix(test): clean delegated vitest runners 2026-06-02 00:09:20 +02:00
Vincent Koc
0f3a63b12e refactor: share preauth hardening test helpers 2026-06-02 00:07:53 +02:00
Peter Steinberger
a14eacf372 chore(release): set version 2026.6.2 2026-06-01 23:06:55 +01:00
Colin
646df2da83 fix skill workshop filtered fallback 2026-06-01 23:00:40 +01:00
Colin
211321ce5c address skill workshop review comments 2026-06-01 23:00:40 +01:00
Colin
a34e822cd4 fix skill workshop filtered navigation 2026-06-01 23:00:40 +01:00
Colin
8c180c9153 fix(ui): render skill workshop tab 2026-06-01 23:00:40 +01:00
Vincent Koc
990f0baff9 fix(e2e): scope gateway cleanup to tracked pid 2026-06-01 23:59:03 +02:00
Peter Steinberger
bd8baeb323 perf(gateway): narrow plugin lookup memo key 2026-06-01 22:58:46 +01:00
Vincent Koc
0771bbbd20 refactor: share discovery runtime test setup 2026-06-01 23:50:24 +02:00
Vincent Koc
74cf5c7e7d refactor: share session permission client setup 2026-06-01 23:48:17 +02:00
Vincent Koc
0cfd6b0504 fix(e2e): clean timed-out docker harness containers 2026-06-01 23:45:56 +02:00
Peter Steinberger
4e45010203 ci(release): fail fast on red release children
(cherry picked from commit 8d7038775f0a0a1bb5354ba6b6b708c6b2c3167b)
2026-06-01 22:42:53 +01:00
Vincent Koc
afdf9aaea0 refactor: share talk config test helpers 2026-06-01 23:34:51 +02:00
Vincent Koc
72ed2121f8 fix(scripts): guard delayed docker package kills 2026-06-01 23:33:00 +02:00
Dallin Romney
2405bbcbaf fix(memory): warn on gateway watcher FD risk (#89185)
* fix(memory): default gateway memory watch off

* fix(memory): warn on gateway watcher fd risk

* fix(config): avoid warning helper narrowing

* fix(config): remove redundant warning boolean cast

* docs(memory): clarify watcher default wording

* docs(memory): simplify watcher warning copy

* fix(config): scope watcher warning to local gateway
2026-06-01 14:23:25 -07:00
Vincent Koc
403190572b fix(e2e): isolate release media memory artifacts 2026-06-01 23:19:47 +02:00
Vincent Koc
67983a00c8 refactor: share session reset model test helpers 2026-06-01 23:12:52 +02:00
Vincent Koc
61aa499b53 test(scripts): trap test-state temp homes 2026-06-01 23:09:58 +02:00
Vincent Koc
420450b5cb fix(ci): timeout dependency guard GitHub requests 2026-06-01 22:59:55 +02:00
Kevin Lin
f8491b0fcf enhance(slack): route plugin approvals through native UI
Route Slack plugin approval delivery through the shared native approval route gates while preserving Slack Block Kit buttons and plugin resolver semantics.

Verification: Slack/native approval unit tests, Slack QA Lab, and live clawd native plugin approval via Slack desktop.
2026-06-01 13:55:59 -07:00
Vincent Koc
98e943ebdd refactor: share voicewake model test helpers 2026-06-01 22:53:29 +02:00
Vincent Koc
f8d5f162a1 fix(ui): terminate child on wrapper shutdown 2026-06-01 22:37:25 +02:00
Vincent Koc
a2fdd5bc70 refactor: share session delete lifecycle test helpers 2026-06-01 22:31:06 +02:00
Vincent Koc
2af2111ae0 refactor: share session history test helpers 2026-06-01 22:28:14 +02:00
Vincent Koc
c9d35c7172 fix(scripts): forward run-with-env termination 2026-06-01 22:24:34 +02:00
Dallin Romney
50b69e16dc fix(agents): dispatch auth failures by type (#89181) 2026-06-01 13:23:05 -07:00
Vincent Koc
fe97c6000c refactor: share browser auth test helpers 2026-06-01 22:19:07 +02:00
Dallin Romney
a99cbf29bd test: reset gateway timers at test boundaries (#89212) 2026-06-01 13:13:08 -07:00
Vyctor H. Brzezowski
05ea36a81f docs: refresh ClawHub showcase cards (#88734) 2026-06-01 13:08:56 -07:00
Vincent Koc
eb58c88598 refactor: share model catalog test helpers 2026-06-01 21:58:49 +02:00
Dallin Romney
5a67c5c556 fix(memory-core): reduce Linux watcher fan-out (#89188)
* fix(memory-core): reduce Linux watcher fan-out

* fix(memory-core): satisfy watcher type and lint checks

* fix(memory-core): harden Linux watcher subtree races
2026-06-01 12:54:30 -07:00
NianJiu
5a55135146 fix(memory): retry transient FileProvider-backed reads (#85351) 2026-06-01 12:40:20 -07:00
Vincent Koc
193988bc5b fix(e2e): isolate onboard temp artifacts 2026-06-01 21:25:03 +02:00
Vincent Koc
a20f57bf2e refactor: share startup auth test assertions 2026-06-01 21:16:55 +02:00
Vincent Koc
66f797b22c fix(e2e): wait for plugin update registry cleanup 2026-06-01 21:01:26 +02:00
Vincent Koc
65a805ac28 fix(e2e): harden web search cleanup 2026-06-01 20:35:33 +02:00
Vincent Koc
b18bab0bcc refactor: share session kill http test fixtures 2026-06-01 20:35:08 +02:00
Alexzhu
9ac30b587e Keep machine-readable CLI startup output parseable (#88689)
Constraint: CLI startup progress can render before Commander resolves a command's JSON output contract.

Rejected: Leaving Clack on its default stdout | contaminates JSON stdout when startup progress appears.

Confidence: high

Scope-risk: narrow

Directive: Keep progress output off stdout before full command parsing for machine-readable invocations.

Tested: git diff --check origin/main; OPENCLAW_HEAVY_CHECK_LOCK_SCOPE=worktree OPENCLAW_VITEST_MAX_WORKERS=1 node scripts/run-vitest.mjs src/cli/progress.test.ts src/cli/run-main.exit.test.ts; source CLI sessions --json parse proof.

Not-tested: broad pnpm check.
2026-06-01 11:33:22 -07:00
Peter Steinberger
82de264710 test(release): tolerate MiniMax portal nonce drift 2026-06-01 19:30:46 +01:00
Vincent Koc
7f7f0775ed fix(testing): keep crabbox sync checkouts durable 2026-06-01 20:30:08 +02:00
Vincent Koc
30819ed3da refactor: share http endpoint test scaffolding 2026-06-01 20:25:40 +02:00
Vincent Koc
1c3095e029 test(deps): clean dependency evidence temp roots 2026-06-01 20:20:42 +02:00
Vincent Koc
62cfc613f1 refactor: share startup early test inputs 2026-06-01 20:17:30 +02:00
Dallin Romney
64a946ac21 fix(agents): actionable copy for exhausted auth-profile failover (#85798)
* fix(agents): actionable copy for exhausted auth-profile failover

The pi-embedded runner threw a generic "No available auth profile for
<provider> (all in cooldown or unavailable)" message whenever every
configured profile was in cooldown, even though the failover machinery
had already resolved a concrete reason (auth, billing, rate_limit,
session_expired, etc.). The user-facing copy never used that reason and
never told the user how to recover.

Route the resolved reason through a single presenter
(`formatAuthProfileFailureMessage`) that composes a reason-specific
sentence with `buildProviderAuthRecoveryHint`, so FailoverError.message
ships with the right `openclaw models auth login --provider <id>` hint
when the cause is authentication/session/billing, and falls back to the
underlying provider error text otherwise. Helper moved out of
`src/commands/` into `src/agents/` because `src/agents/` cannot depend
on `src/commands/`.

* fix(agents): soften auth-profile failure copy for non-technical users

* refactor(agents): drop guidance re-export shim and de-brittle failure-copy tests

- Delete `src/commands/provider-auth-guidance.ts` and point doctor-auth, auth-choice.model-check, and models/list.status-command directly at `src/agents/provider-auth-recovery-hint.ts`. The cold-imports test moves with it.
- Rewrite `failure-copy.test.ts` to assert behavior (recovery-hint dispatch, provider mention, cause-suffix dedup) instead of pinning exact long copy strings, so wording tweaks no longer require a test update in two places.
2026-06-01 11:16:25 -07:00
Vincent Koc
96187089d4 refactor: share session history message fixtures 2026-06-01 20:05:18 +02:00
Vincent Koc
965e680603 test(control-ui): clean i18n timeout temp dirs 2026-06-01 20:03:05 +02:00
Vincent Koc
1cf39a2d6f refactor: table-drive lifecycle state tests 2026-06-01 19:57:35 +02:00
Vincent Koc
92b3d52e8a fix(e2e): isolate release media temp files 2026-06-01 19:56:05 +02:00
Dallin Romney
8ba6dfeaf6 fix(ci): restore dist cache before artifact builds (#89169) 2026-06-01 10:55:27 -07:00
Peter Steinberger
bddcf4448c fix(subagents): rotate steered restart sessions 2026-06-01 18:50:36 +01:00
Vincent Koc
c8a67768e3 fix(e2e): require expected web search rejection 2026-06-01 19:49:11 +02:00
Vincent Koc
26e61b2087 refactor: share single-row cache test helpers 2026-06-01 19:48:19 +02:00
Vincent Koc
ee48028028 fix(dev): clean tui pty watch children 2026-06-01 19:40:42 +02:00
Vincent Koc
3c324590ae refactor: share compaction checkpoint test helpers 2026-06-01 19:33:41 +02:00
Vincent Koc
ba88b7a178 fix(e2e): clean plugin lifecycle temp state 2026-06-01 19:27:04 +02:00
Vincent Koc
d767e296e2 refactor: share plugin node auth test helpers 2026-06-01 19:26:59 +02:00
Vincent Koc
83cd3cbe2a fix(e2e): bound bundled plugin lifecycle commands 2026-06-01 19:18:26 +02:00
Vincent Koc
16807824cc refactor: share node invoke approval test helpers 2026-06-01 19:18:14 +02:00
Dallin Romney
e3d24faecd fix: allow admins to approve dependency guard (#88966)
* fix: allow admins to approve dependency guard

* fix: auto-bypass trusted dependency authors
2026-06-01 10:17:14 -07:00
Peter Steinberger
469bec97ef test(codex): keep live subagent smoke lightweight 2026-06-01 18:09:48 +01:00
Vincent Koc
101db565ca refactor: share startup plugin test helpers 2026-06-01 19:09:39 +02:00
Vincent Koc
ef26e8dfce fix(repro): clean webchat tts proof artifacts 2026-06-01 19:04:12 +02:00
Vincent Koc
25c19e013a refactor: share startup memory test helpers 2026-06-01 19:00:26 +02:00
Vincent Koc
f2eea90dac fix(e2e): bound cron mcp probe waits 2026-06-01 18:52:13 +02:00
Vincent Koc
3113fe95ea refactor: share startup secrets test helpers 2026-06-01 18:49:58 +02:00
Vincent Koc
4e1f8b8ac7 fix(e2e): clean timed-out runtime commands 2026-06-01 18:43:25 +02:00
Vincent Koc
0b8f6b81e6 refactor: share probe request dispatch helper 2026-06-01 18:35:38 +02:00
Vincent Koc
ab1042d115 refactor: share talk transcription relay test setup 2026-06-01 18:34:05 +02:00
Peter Steinberger
9153aab037 fix(codex): abort app-server thread startup cleanly 2026-06-01 17:33:00 +01:00
Vincent Koc
285a792aa8 refactor: share maintenance test fixtures 2026-06-01 18:25:54 +02:00
Vincent Koc
a8bc1716dd fix(usage): skip empty timeseries scans 2026-06-01 18:20:52 +02:00
Vincent Koc
373ef81e83 refactor: share codex harness model assertions 2026-06-01 18:12:11 +02:00
Vincent Koc
c053b90290 refactor: share shared auth rotation test helpers 2026-06-01 18:10:57 +02:00
Pavan Kumar Gondhi
fbdf593778 fix: bound remote media reference reads [AI] (#88974)
* fix: bound remote media reference reads

* fix: remove unreachable video timeout wiring

* test: cover remote video reference handoff
2026-06-01 21:35:40 +05:30
Vincent Koc
488b65ab87 refactor: share session reset test helpers 2026-06-01 18:00:39 +02:00
Peter Steinberger
6668eb8225 test(codex): drop unused live harness helper 2026-06-01 16:56:48 +01:00
Vincent Koc
72436217ff fix(e2e): isolate MCP channel client temp state 2026-06-01 17:51:04 +02:00
Peter Steinberger
460cf7ed75 test(codex): avoid sessions list wait in live harness start probe 2026-06-01 16:49:20 +01:00
Vincent Koc
461999c060 fix(dev): clean Telegram flow previews on failure 2026-06-01 17:37:15 +02:00
Vincent Koc
9cb347e4c3 fix(dev): close gateway smoke websocket on failures 2026-06-01 17:26:15 +02:00
Vincent Koc
1d7e5f48ed fix(dev): close stalled gateway websocket handshakes 2026-06-01 17:18:40 +02:00
Vincent Koc
1fd2259e28 refactor: share config patch test helpers 2026-06-01 17:15:48 +02:00
Peter Steinberger
3f54d150b3 test(openrouter): stabilize music timeout clamp assertion 2026-06-01 16:09:23 +01:00
Vincent Koc
a9866a405c test(agents): align provider auth alias fixtures 2026-06-01 17:08:31 +02:00
Vincent Koc
0b9187c780 test(gateway): fix node invoke capture race 2026-06-01 17:08:31 +02:00
Vincent Koc
b1ec23e05f fix(e2e): escalate stuck PTY children 2026-06-01 17:07:42 +02:00
Vincent Koc
050f0c0af6 refactor: share device pair authz test helpers 2026-06-01 16:58:10 +02:00
Vincent Koc
dfeb5b81ca fix(e2e): harden Parallels helper cleanup 2026-06-01 16:57:27 +02:00
Vincent Koc
d9f6e03e32 refactor: share silent reconnect test helpers 2026-06-01 16:54:10 +02:00
Peter Steinberger
fed7d1f385 test(release): stabilize beta validation regressions 2026-06-01 15:47:56 +01:00
Vincent Koc
0a9e594420 fix(scripts): clean Anthropic prompt probe temp state 2026-06-01 16:47:27 +02:00
Sally O'Malley
c1ce51546e fix(ui): clear chat composer after send (#89106) 2026-06-01 10:42:35 -04:00
Vincent Koc
1b928592ef refactor: share startup recovery test helpers 2026-06-01 16:37:09 +02:00
Vincent Koc
12087ac9d4 test(e2e): exercise Parallels smoke cleanup path 2026-06-01 16:33:11 +02:00
Peter Steinberger
00caead80a test: close oxlint signal readiness race 2026-06-01 10:26:08 -04:00
Peter Steinberger
4b54a423f0 test: harden changed-gate assertions 2026-06-01 10:26:08 -04:00
Peter Steinberger
bdd6cf3d5e test: stabilize order-sensitive assertions 2026-06-01 10:26:08 -04:00
Peter Steinberger
cb7a4239ef fix: stabilize full-suite regressions 2026-06-01 10:26:08 -04:00
Peter Steinberger
b226a752a1 test: stabilize slow shard regressions 2026-06-01 10:26:08 -04:00
Vincent Koc
110f7d55e3 fix(scripts): clean Z.AI fallback repro temp state 2026-06-01 16:25:05 +02:00
Vincent Koc
645c7dc40b refactor: share gateway misc test helpers 2026-06-01 16:18:22 +02:00
Vincent Koc
a4847297b8 fix(ci): clean check-changed pnpm shim temp dirs 2026-06-01 16:16:26 +02:00
Vincent Koc
4253517070 refactor: share node allowlist test helpers 2026-06-01 16:14:59 +02:00
Peter Steinberger
e8c126eaf2 fix(ci): use QA runtime build for release checks 2026-06-01 15:12:50 +01:00
Peter Steinberger
2075d19923 test(gateway): scope lazy server mock 2026-06-01 15:12:50 +01:00
Vincent Koc
9e58ef1c82 test(scripts): clean session log temp roots 2026-06-01 16:00:41 +02:00
Vincent Koc
eaeccf5fdf refactor: share node registry system run test helpers 2026-06-01 16:00:36 +02:00
Vincent Koc
2c0e835b48 test(codex): clean up fake timer spies 2026-06-01 14:57:47 +01:00
Vincent Koc
b942a958b3 test(qa): cover QA lab help runtime boundary 2026-06-01 15:54:16 +02:00
Vincent Koc
42bcf9cd0b fix(test): keep runtime tests raw-sync safe 2026-06-01 15:53:37 +02:00
Vincent Koc
a0fbb6cfe2 fix(test): keep app parity checks sparse safe 2026-06-01 15:53:37 +02:00
Vincent Koc
408fa6e951 fix(test): stabilize watch-node shutdown tests 2026-06-01 15:53:37 +02:00
Vincent Koc
671909d6d3 refactor: share server aux reload test helpers 2026-06-01 15:51:05 +02:00
Vincent Koc
409f78a1ea fix(e2e): clean OTEL collector startup failures 2026-06-01 15:46:02 +02:00
Vincent Koc
3e592a8bd7 refactor: share mcp http loopback test helpers 2026-06-01 15:39:28 +02:00
Vincent Koc
e895479a21 fix(ci): fail gateway watch spawn errors promptly 2026-06-01 15:38:16 +02:00
Peter Steinberger
930bc9691b fix(ci): page CI timing job reads 2026-06-01 14:33:39 +01:00
Vincent Koc
b9f181635f fix(ci): fail gateway CPU spawn errors 2026-06-01 15:27:13 +02:00
Vincent Koc
c2aaf8afec refactor: share sessions patch test helpers 2026-06-01 15:17:55 +02:00
Vincent Koc
cbc5f277bb refactor: share session reset hook test helpers 2026-06-01 15:11:10 +02:00
Vincent Koc
44b388f863 fix(e2e): keep kitchen-sink process snapshots wide 2026-06-01 15:09:33 +02:00
Vincent Koc
c0e49a2c52 fix(e2e): catch runtime package-manager descendants 2026-06-01 14:58:39 +02:00
Peter Steinberger
c1e132195d test(release): activate manifest channels in bundle smoke 2026-06-01 13:51:38 +01:00
Vincent Koc
5bd8dbd0b8 refactor: share system run approval test helpers 2026-06-01 14:44:46 +02:00
Vincent Koc
421ea1f458 fix(e2e): bound Parallels host VM commands 2026-06-01 14:41:46 +02:00
Vincent Koc
1f91e97353 refactor: share startup secrets test helpers 2026-06-01 14:31:58 +02:00
Vincent Koc
d4f6e0a1f2 fix(docs): clean link audit temp docs 2026-06-01 14:26:21 +02:00
Peter Steinberger
ec2455a842 test(memory): drive timeout tests with explicit fake clocks
(cherry picked from commit d75eea53c9)
2026-06-01 13:12:07 +01:00
Vincent Koc
1742f3f77c refactor: share mcp http test helpers 2026-06-01 14:10:41 +02:00
Vincent Koc
5117f457bb fix(ci): clean gateway watch temp home 2026-06-01 14:09:58 +02:00
Vincent Koc
8fe5e83462 refactor: share sessions list changed test helpers 2026-06-01 14:00:20 +02:00
Vincent Koc
27097bed65 fix(ci): bound deadcode knip scan 2026-06-01 13:57:16 +02:00
Vincent Koc
1849a86dd2 refactor: share session history revocation helpers 2026-06-01 13:47:39 +02:00
Vincent Koc
5280d1d95d fix(e2e): stream Parallels phase logs 2026-06-01 13:46:21 +02:00
Vincent Koc
bcdc93d651 refactor: share auth compat backend scope assertion 2026-06-01 13:31:03 +02:00
Vincent Koc
0751b6f2c9 fix(e2e): bound upgrade survivor config commands 2026-06-01 13:30:23 +02:00
Peter Steinberger
7d9fae5b3a fix(memory): keep embedding timeout watchdog active
(cherry picked from commit 591f310869)
2026-06-01 12:29:27 +01:00
Vincent Koc
a595aba60e refactor: share sessions send result assertions 2026-06-01 13:21:09 +02:00
Vincent Koc
75645aec08 fix(e2e): clean Telegram proof child processes 2026-06-01 13:20:03 +02:00
Vincent Koc
d10d71cdb6 fix(codex): stabilize app-server cleanup tests 2026-06-01 13:15:05 +02:00
Vincent Koc
c69a8d633d perf(control-ui): hydrate chat startup state
Add a combined chat.startup gateway method for Control UI startup hydration so first chat load can receive history and agents in one RPC, while falling back to chat.history for older/unadvertised gateways. Verified with focused UI/gateway tests, tsgo/oxlint/diff checks, clean autoreview, and Testbox changed gate tbx_01kt1dt6fqdtdbprsk48z8fn71.
2026-06-01 12:14:19 +01:00
Vincent Koc
d8ebbedf45 refactor: share plugin http auth request assertions 2026-06-01 13:10:09 +02:00
Peter Steinberger
9ed1766696 test(whatsapp): align direct last-route envelope
(cherry picked from commit 5d902b0f20)
2026-06-01 12:04:51 +01:00
Vincent Koc
bed0fb7bad refactor: share session resolve assertions 2026-06-01 13:00:51 +02:00
Vincent Koc
db6fc20559 fix(e2e): clean Windows background smoke timeouts 2026-06-01 12:55:15 +02:00
Vincent Koc
1364acbe4c refactor: share gateway http stage error assertions 2026-06-01 12:45:20 +02:00
Vincent Koc
d2988e0248 refactor: share preview resolve alias fixtures 2026-06-01 12:42:30 +02:00
Vincent Koc
8c8c8c8e32 perf(control-ui): prioritize first connect startup (#89030)
* perf(control-ui): prioritize first connect startup

* fix(control-ui): close connect timing gaps

* fix(control-ui): default embeds strict before bootstrap

* fix(control-ui): keep bootstrap identity deferred

* fix(control-ui): gate startup chat on bootstrap

* fix(control-ui): restore composer after hello

* fix(control-ui): restore drafts before hello
2026-06-01 11:41:22 +01:00
Vincent Koc
8bee3be90a fix(e2e): bound Parallels fresh lanes 2026-06-01 12:34:29 +02:00
Vincent Koc
87d890003d refactor: share shutdown drain session setup 2026-06-01 12:31:32 +02:00
Peter Steinberger
aed7de306e fix(qa-matrix): detect sqlite dedupe commits by payload
(cherry picked from commit 2fc497e67b)
2026-06-01 11:27:10 +01:00
Vincent Koc
859cb52b44 refactor: share unauthorized response assertions 2026-06-01 12:22:58 +02:00
Vincent Koc
4685a84e9b fix(e2e): bound bundled runtime gateway cleanup 2026-06-01 12:19:37 +02:00
Vincent Koc
f30235bed2 test: fix gateway test type fixtures 2026-06-01 12:13:36 +02:00
Vincent Koc
4f8f6c7693 refactor: share thinking e2e session setup 2026-06-01 12:13:36 +02:00
Peter Steinberger
055063f06b fix(qa-matrix): read sqlite inbound dedupe state 2026-06-01 11:07:53 +01:00
Vincent Koc
dac33c8ecb fix(e2e): cap pty transcript output 2026-06-01 11:49:58 +02:00
Vincent Koc
75ebf1c870 refactor: share device token authz test helpers 2026-06-01 11:49:06 +02:00
Vincent Koc
e4a32b9e8e lint(e2e): remove redundant channel fallback 2026-06-01 11:38:28 +02:00
Vincent Koc
22e3b2e94e fix(dev): wait for watch-node shutdown 2026-06-01 11:38:28 +02:00
Peter Steinberger
729420c34a test: split slow vitest shards 2026-06-01 05:34:59 -04:00
Peter Steinberger
0b5be66ef7 perf(gateway): trim startup plugin planning work 2026-06-01 10:33:28 +01:00
Peter Steinberger
8e28c773fe chore(release): prepare 2026.6.1 2026-06-01 10:30:15 +01:00
Vincent Koc
2dcb681f38 refactor: share session search test fixtures 2026-06-01 11:28:59 +02:00
Peter Steinberger
e733774e3c fix(test): repair telegram prerelease blockers 2026-06-01 10:26:12 +01:00
Mason Huang
004835f4c7 fix(plugins): block untrusted workspace setup-only channel loads (#86953)
Summary:
- This PR blocks disabled workspace-origin channel plugins from setup-only scoped imports, rejects their channel registrations at registry assembly, documents the trust rule, and adds regression coverage.
- PR surface: Source +46, Tests +610, Docs +13. Total +669 across 22 files.
- Reproducibility: yes. source inspection gives a high-confidence reproduction path: current main's setup-only ... ce channel plugin can be imported before this PR. I did not run the repro locally in this read-only review.

Automerge notes:
- PR branch already contained follow-up commit before automerge: test(plugins): cover workspace channel registry guard
- PR branch already contained follow-up commit before automerge: fix(plugins): isolate setup channel registration errors
- PR branch already contained follow-up commit before automerge: fix(channels): mark raw catalog listing internal
- PR branch already contained follow-up commit before automerge: test(channels): cover trusted catalog filtering
- PR branch already contained follow-up commit before automerge: test(channels): mock raw catalog helper
- PR branch already contained follow-up commit before automerge: docs(changelog): credit setup channel hardening

Validation:
- ClawSweeper review passed for head 11438bc1a0.
- Required merge gates passed before the squash merge.

Prepared head SHA: 11438bc1a0
Review: https://github.com/openclaw/openclaw/pull/86953#issuecomment-4545730044

Co-authored-by: masonxhuang <masonxhuang@tencent.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Mason Huang <masonxhuang@tencent.com>
Co-authored-by: Sebastien Tardif <sebtardif@ncf.ca>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: hxy91819
Co-authored-by: hxy91819 <8814856+hxy91819@users.noreply.github.com>
2026-06-01 09:25:56 +00:00
Vincent Koc
97d373ff37 perf(ui): speed up first global chat sends
Speed up Control UI first global chat sends by letting safe literal-global startup refresh use the fresh hello default before agents.list finishes, while keeping stale carried/cached agent ids out of that fast path. Adds chat history/send and gateway chat.send timing markers for the next latency pass.
2026-06-01 10:25:22 +01:00
Vincent Koc
3119f08009 fix(scripts): bound shrinkwrap npm commands 2026-06-01 11:23:20 +02:00
Peter Steinberger
9d55fc4579 fix(plugins): skip peer links in rollback snapshots 2026-06-01 10:18:30 +01:00
Vincent Koc
2bac970abc refactor: share node invoke policy test setup 2026-06-01 11:17:38 +02:00
Vincent Koc
f8e9ba3718 fix(codex): prevent aborted app-server turn handles 2026-06-01 10:12:36 +01:00
1452 changed files with 31593 additions and 13190 deletions

View File

@@ -16,6 +16,10 @@ Use this with `$release-openclaw-maintainer` and `$openclaw-testing` when a rele
- Watch one parent run plus compact child summaries. Avoid broad `gh run view` polling loops; REST quota is easy to burn.
- Fetch logs only for failed or currently-blocking jobs. If quota is low, stop polling and wait for reset.
- Treat live-provider flakes separately from code failures: prove key validity, provider HTTP status, retry evidence, and exact failing lane before editing code.
- Full Release Validation parent monitors fail fast: once a required child job
fails, the parent cancels the remaining child matrix and prints the failed
job summary. Inspect that first red job instead of waiting for unrelated
matrix tails.
## Preflight
@@ -73,6 +77,9 @@ gh workflow run full-release-validation.yml \
```
Use `release_profile=stable` unless the operator explicitly asks for the broad advisory provider/media matrix. Use narrow `rerun_group` after focused fixes.
Publish with `openclaw-release-publish.yml` using `release_profile=from-validation`
unless a maintainer intentionally wants to cross-check a specific profile; the
publish workflow reads the effective profile from the full-validation manifest.
## Watch

View File

@@ -49,17 +49,21 @@ Use this skill for release and publish-time workflow. Load `$release-private` if
the next beta number until the matching npm package has actually published.
If a published beta needs a fix, commit the fix on the release branch and
increment to the next `-beta.N`.
- For a beta release train, run the fast local preflight first, publish the
beta to npm `beta`, then run the expensive published-package roster focused
on install/update/Docker/Parallels/NPM Telegram. If anything fails, fix it on
the release branch, commit/push/pull, increment beta number, and repeat. Run
the full expensive roster at least once before stable/latest promotion; for
later beta attempts, rerun only lanes whose evidence changed unless the fix
touches broad release, install/update, plugin, Docker, Parallels, or live QA
behavior. After each beta is published, scan current `main` once for critical
fixes that landed after the release branch cut and backport only important
low-risk fixes. Operators may authorize up to 4 autonomous beta attempts;
after 4 failed beta attempts, stop and report.
- For a beta release train, keep Full Release Validation as a pre-publish gate
unless the operator explicitly waives it. Run the fast local preflight, npm
preflight, full release validation, and performance in parallel where safe.
If anything fails before npm publish, fix it on the release branch,
forward-port the fix to `main`, move the unpublished beta tag/prerelease to
the fixed commit, and rerun the affected pre-publish gates. If anything fails
after npm publish, fix it, forward-port to `main`, increment beta number, and
repeat. After each beta publish, run the published-package roster focused on
install/update/Docker/Parallels/NPM Telegram. For later beta attempts, rerun
only lanes whose evidence changed unless the fix touches broad release,
install/update, plugin, Docker, Parallels, or live QA behavior. After each
beta is live, scan current `main` once for critical fixes that landed after
the release branch cut and backport only important low-risk fixes. Operators
may authorize up to 4 autonomous beta attempts; after 4 failed beta attempts,
stop and report.
- As soon as the release candidate SHA exists, dispatch `OpenClaw Performance`
with `target_ref=<release-sha>` in parallel with the other release work. Do
not wait for full release validation to start the performance signal.
@@ -468,8 +472,10 @@ node --import tsx scripts/openclaw-npm-postpublish-verify.ts <published-version>
- The npm workflow and the private mac publish workflow accept
`preflight_only=true` to run validation/build/package steps without uploading
public release assets.
- Real npm publish requires a prior successful npm preflight run id so the
publish job promotes the prepared tarball instead of rebuilding it.
- Real npm publish requires a prior successful npm preflight run id and the
successful Full Release Validation run id for the same tag/SHA so the publish
job promotes the prepared tarball instead of rebuilding it and attaches the
correct release evidence.
- Real private mac publish requires a prior successful private mac preflight
run id so the publish job promotes the prepared artifacts instead of
rebuilding or renotarizing them again.
@@ -499,11 +505,12 @@ node --import tsx scripts/openclaw-npm-postpublish-verify.ts <published-version>
instead of uploading public GitHub release assets.
- Private smoke-test runs upload ad-hoc, non-notarized build artifacts as
workflow artifacts and intentionally skip stable `appcast.xml` generation.
- For stable releases, npm preflight, public mac validation, private mac
validation, and private mac preflight must all pass before any real publish
run starts. For beta releases, npm preflight plus the selected Docker,
install/update, Parallels, and release-check lanes are sufficient unless mac
beta validation was explicitly requested.
- For stable releases, npm preflight, Full Release Validation, public mac
validation, private mac validation, and private mac preflight must all pass
before any real publish run starts. For beta releases, npm preflight and Full
Release Validation must pass before npm publish unless the operator explicitly
waives the full gate; mac beta validation is still only required when
requested.
- Real publish runs may be dispatched from `main` or from a
`release/YYYY.M.D` branch. For release-branch runs, the tag must be contained
in that release branch, and the real publish must reuse a successful preflight

View File

@@ -605,7 +605,19 @@ jobs:
restore-keys: |
${{ runner.os }}-build-all-v3-
- name: Restore dist build cache
id: dist_build_cache
uses: actions/cache/restore@v5
with:
path: |
dist/
dist-runtime/
extensions/*/src/host/**/.bundle.hash
extensions/*/src/host/**/*.bundle.js
key: ${{ runner.os }}-dist-build-${{ needs.preflight.outputs.checkout_revision }}
- name: Build dist
if: steps.dist_build_cache.outputs.cache-hit != 'true'
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build:ci-artifacts
@@ -614,14 +626,6 @@ jobs:
if: needs.preflight.outputs.run_control_ui_i18n == 'true'
run: pnpm ui:i18n:check
- name: Cache dist build
uses: actions/cache@v5
with:
path: |
dist/
dist-runtime/
key: ${{ runner.os }}-dist-build-${{ needs.preflight.outputs.checkout_revision }}
- name: Pack built runtime artifacts
run: tar --posix -cf dist-runtime-build.tar.zst --use-compress-program zstdmt dist dist-runtime
@@ -751,6 +755,18 @@ jobs:
done
exit "$failures"
- name: Save dist build cache
if: steps.dist_build_cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
continue-on-error: true
with:
path: |
dist/
dist-runtime/
extensions/*/src/host/**/.bundle.hash
extensions/*/src/host/**/*.bundle.js
key: ${{ steps.dist_build_cache.outputs.cache-primary-key }}
- name: Upload gateway watch regression artifacts
if: always() && needs.preflight.outputs.run_check_additional == 'true'
uses: actions/upload-artifact@v7
@@ -1151,7 +1167,8 @@ jobs:
OPENCLAW_NODE_TEST_CONFIGS_JSON: ${{ toJson(matrix.configs) }}
OPENCLAW_NODE_TEST_INCLUDE_PATTERNS_JSON: ${{ toJson(matrix.includePatterns) }}
OPENCLAW_VITEST_SHARD_NAME: ${{ matrix.shard_name }}
OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "900000"
OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "300000"
OPENCLAW_VITEST_NO_OUTPUT_RETRY: "1"
OPENCLAW_TEST_PROJECTS_PARALLEL: "2"
shell: bash
run: |

View File

@@ -380,6 +380,21 @@ jobs:
gh_with_retry api --paginate "repos/${GITHUB_REPOSITORY}/actions/runs/${run_id}/jobs?per_page=100" --jq '.jobs[]'
}
fail_fast_failed_jobs() {
local failed_jobs_json
failed_jobs_json="$(
fetch_child_jobs |
jq -s '[.[] | select(.status == "completed" and .conclusion != "success" and .conclusion != "skipped")]'
)"
if jq -e 'length > 0' <<< "$failed_jobs_json" >/dev/null; then
echo "::error::${workflow} has failed child jobs before the workflow completed; cancelling the remaining matrix."
jq '.[] | {name, conclusion, url: .html_url}' <<< "$failed_jobs_json"
cancel_child
trap - EXIT INT TERM
exit 1
fi
}
cancel_child() {
if [[ -n "${run_id:-}" ]]; then
echo "Cancelling child workflow ${workflow}: ${run_id}" >&2
@@ -395,6 +410,9 @@ jobs:
break
fi
poll_count=$((poll_count + 1))
if (( poll_count % 2 == 0 )); then
fail_fast_failed_jobs
fi
if (( poll_count % 10 == 0 )); then
echo "Still waiting on ${workflow}: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${run_id}"
fetch_child_jobs | jq 'select(.status != "completed") | {name, status, url: .html_url}' || true
@@ -510,6 +528,21 @@ jobs:
gh_with_retry api --paginate "repos/${GITHUB_REPOSITORY}/actions/runs/${run_id}/jobs?per_page=100" --jq '.jobs[]'
}
fail_fast_failed_jobs() {
local failed_jobs_json
failed_jobs_json="$(
fetch_child_jobs |
jq -s '[.[] | select(.status == "completed" and .conclusion != "success" and .conclusion != "skipped")]'
)"
if jq -e 'length > 0' <<< "$failed_jobs_json" >/dev/null; then
echo "::error::${workflow} has failed child jobs before the workflow completed; cancelling the remaining matrix."
jq '.[] | {name, conclusion, url: .html_url}' <<< "$failed_jobs_json"
cancel_child
trap - EXIT INT TERM
exit 1
fi
}
cancel_child() {
if [[ -n "${run_id:-}" ]]; then
echo "Cancelling child workflow ${workflow}: ${run_id}" >&2
@@ -525,6 +558,9 @@ jobs:
break
fi
poll_count=$((poll_count + 1))
if (( poll_count % 2 == 0 )); then
fail_fast_failed_jobs
fi
if (( poll_count % 10 == 0 )); then
echo "Still waiting on ${workflow}: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${run_id}"
fetch_child_jobs | jq 'select(.status != "completed") | {name, status, url: .html_url}' || true
@@ -690,6 +726,24 @@ jobs:
[[ "$saw_advisory" == "1" && "$failed" == "0" ]]
}
fail_fast_failed_jobs() {
local failed_jobs_json
if [[ "$workflow" == "openclaw-release-checks.yml" && "$CHILD_WORKFLOW_REF" =~ ^tideclaw/alpha/[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{4}Z$ ]]; then
return 0
fi
failed_jobs_json="$(
fetch_child_jobs |
jq -s '[.[] | select(.status == "completed" and .conclusion != "success" and .conclusion != "skipped")]'
)"
if jq -e 'length > 0' <<< "$failed_jobs_json" >/dev/null; then
echo "::error::${workflow} has failed child jobs before the workflow completed; cancelling the remaining matrix."
jq '.[] | {name, conclusion, url: .html_url}' <<< "$failed_jobs_json"
cancel_child
trap - EXIT INT TERM
exit 1
fi
}
cancel_child() {
if [[ -n "${run_id:-}" ]]; then
echo "Cancelling child workflow ${workflow}: ${run_id}" >&2
@@ -705,6 +759,9 @@ jobs:
break
fi
poll_count=$((poll_count + 1))
if (( poll_count % 2 == 0 )); then
fail_fast_failed_jobs
fi
if (( poll_count % 10 == 0 )); then
echo "Still waiting on ${workflow}: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${run_id}"
fetch_child_jobs | jq 'select(.status != "completed") | {name, status, url: .html_url}' || true
@@ -962,6 +1019,21 @@ jobs:
}
trap cancel_child EXIT INT TERM
fail_fast_failed_jobs() {
local failed_jobs_json
failed_jobs_json="$(
gh_with_retry run view "$run_id" --json jobs \
--jq '[.jobs[] | select(.status == "completed" and .conclusion != "success" and .conclusion != "skipped")]'
)"
if jq -e 'length > 0' <<< "$failed_jobs_json" >/dev/null; then
echo "::error::npm-telegram-beta-e2e.yml has failed child jobs before the workflow completed; cancelling the remaining run."
jq '.[] | {name, conclusion, url}' <<< "$failed_jobs_json"
cancel_child
trap - EXIT INT TERM
exit 1
fi
}
poll_count=0
while true; do
status="$(gh_with_retry run view "$run_id" --json status --jq '.status')"
@@ -969,6 +1041,9 @@ jobs:
break
fi
poll_count=$((poll_count + 1))
if (( poll_count % 2 == 0 )); then
fail_fast_failed_jobs
fi
if (( poll_count % 10 == 0 )); then
echo "Still waiting on npm-telegram-beta-e2e.yml: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${run_id}"
gh_with_retry run view "$run_id" --json jobs --jq '.jobs[] | select(.status != "completed") | {name, status, url}' || true

View File

@@ -798,7 +798,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run parity lane
env:
@@ -876,7 +876,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Generate parity report
run: |
@@ -934,7 +934,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run runtime parity lane
id: runtime_parity_lane
@@ -1101,7 +1101,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run Matrix live lane
id: run_lane
@@ -1199,7 +1199,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run Telegram live lane
id: run_lane
@@ -1295,7 +1295,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run Discord live lane
id: run_lane
@@ -1393,7 +1393,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run WhatsApp live lane
id: run_lane
@@ -1488,7 +1488,7 @@ jobs:
- name: Build private QA runtime
env:
NODE_OPTIONS: --max-old-space-size=8192
run: pnpm build
run: node scripts/build-all.mjs qaRuntime
- name: Run Slack live lane
id: run_lane

View File

@@ -46,11 +46,12 @@ on:
default: true
type: boolean
release_profile:
description: Release coverage profile used for release evidence summaries
description: Release coverage profile used for release evidence summaries; default reads it from the validation manifest
required: false
default: beta
default: from-validation
type: choice
options:
- from-validation
- beta
- stable
- full
@@ -135,9 +136,9 @@ jobs:
exit 1
fi
case "$RELEASE_PROFILE" in
beta|stable|full) ;;
from-validation|beta|stable|full) ;;
*)
echo "release_profile must be one of: beta, stable, full" >&2
echo "release_profile must be one of: from-validation, beta, stable, full" >&2
exit 1
;;
esac
@@ -259,6 +260,7 @@ jobs:
echo "sha=$release_sha" >> "$GITHUB_OUTPUT"
- name: Validate full release validation manifest
id: full_manifest
if: ${{ inputs.publish_openclaw_npm }}
env:
GH_TOKEN: ${{ github.token }}
@@ -289,7 +291,7 @@ jobs:
echo "Full release validation target SHA mismatch: expected $EXPECTED_SHA, got $target_sha" >&2
exit 1
fi
if [[ "$release_profile" != "$EXPECTED_RELEASE_PROFILE" ]]; then
if [[ "$EXPECTED_RELEASE_PROFILE" != "from-validation" && "$release_profile" != "$EXPECTED_RELEASE_PROFILE" ]]; then
echo "Full release validation profile mismatch: expected $EXPECTED_RELEASE_PROFILE, got $release_profile" >&2
exit 1
fi
@@ -297,6 +299,7 @@ jobs:
echo "Full release validation must run rerun_group=all before npm publish; got $rerun_group" >&2
exit 1
fi
echo "release_profile=$release_profile" >> "$GITHUB_OUTPUT"
- name: Validate release tag is reachable from a trusted release branch
env:
@@ -332,7 +335,7 @@ jobs:
env:
RELEASE_TAG: ${{ inputs.tag }}
TARGET_SHA: ${{ steps.manifest.outputs.sha || steps.ref.outputs.sha }}
RELEASE_PROFILE: ${{ inputs.release_profile }}
RELEASE_PROFILE: ${{ steps.full_manifest.outputs.release_profile || inputs.release_profile }}
FULL_RELEASE_VALIDATION_RUN_ID: ${{ inputs.full_release_validation_run_id }}
run: |
{
@@ -501,7 +504,7 @@ jobs:
wait_for_run() {
local workflow="$1"
local run_id="$2"
local status conclusion url updated_at created_at duration_seconds duration_label last_state
local status conclusion url updated_at created_at duration_seconds duration_label last_state failed_json
last_state=""
while true; do
@@ -510,6 +513,14 @@ jobs:
if [[ "$status" == "completed" ]]; then
break
fi
failed_json="$(gh run view --repo "$GITHUB_REPOSITORY" "$run_id" --json jobs \
--jq '[.jobs[] | select(.status == "completed" and .conclusion != "success" and .conclusion != "skipped")]' || true)"
if [[ -n "${failed_json}" ]] && jq -e 'length > 0' <<< "$failed_json" >/dev/null; then
echo "${workflow} has failed jobs before the workflow completed: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${run_id}" >&2
jq '.[] | {name, conclusion, url}' <<< "$failed_json" >&2 || true
print_failed_run_summary "${run_id}"
return 1
fi
url="$(printf '%s' "$run_json" | jq -r '.url')"
updated_at="$(printf '%s' "$run_json" | jq -r '.updatedAt')"
state="${status}:${updated_at}"

View File

@@ -818,6 +818,7 @@ jobs:
OPENCLAW_QA_CONVEX_SECRET_CI: ${{ secrets.OPENCLAW_QA_CONVEX_SECRET_CI }}
OPENCLAW_QA_REDACT_PUBLIC_METADATA: "1"
OPENCLAW_QA_SLACK_CAPTURE_CONTENT: "1"
OPENCLAW_QA_TRANSPORT_READY_TIMEOUT_MS: "180000"
INPUT_SCENARIO: ${{ github.event_name == 'workflow_dispatch' && inputs.slack_scenario || '' }}
run: |
set -euo pipefail

View File

@@ -2,7 +2,7 @@
Docs: https://docs.openclaw.ai
## 2026.5.31
## 2026.6.2
### Highlights
@@ -13,10 +13,10 @@ Docs: https://docs.openclaw.ai
- Skills and plugin loading now handle stale disabled snapshots and loader failures more clearly, so channel turns avoid disabled SecretRefs and operators get better recovery guidance. (#79072, #79173) Thanks @zeus1959.
- Workboard, SecretRef plugin manifests, hosted iOS push relay, and external Copilot/Tokenjuice packaging add broader orchestration, integration, and plugin delivery surfaces. (#82326, #87469, #87796, #88107, #88117)
- Skill Workshop now has a fuller Control UI flow with proposal lists, today actions, revision handoff, searchable file previews, review states, locale coverage, and reusable session routing.
- Chat and Control UI startup paths keep sends alive through history loading, stream deltas incrementally, skip markdown work while streaming, and expose calmer composer controls. (#88772, #88825)
- Chat and Control UI startup paths keep sends alive through history loading, stream deltas incrementally, skip markdown work while streaming, keep drafts local while typing, trace first-output latency, and expose calmer composer controls. (#88772, #88825, #88998) Thanks @vincentkoc.
- Provider coverage and model metadata now include MiniMax M3, account OAuth endpoints, Google/Vertex catalog fixes, OpenRouter SQLite model caching, Copilot Claude 1M capabilities, Foundry reasoning alignment, and OpenAI response replay guards. (#88480, #88512, #88851, #88860)
- iMessage monitor state, inbound queues, and plugin install ledgers moved toward SQLite-backed state so restarts and local monitors recover with less duplicate filesystem scanning. (#88794, #88797)
- Release, CI, Docker, E2E, and diagnostics lanes now cap more logs, response bodies, readiness probes, artifact checks, and status polling so failures report bounded proof instead of stalling.
- Release, CI, Docker, E2E, plugin install, and diagnostics lanes now cap more logs, response bodies, readiness probes, artifact checks, status polling, and rollback snapshots so failures report bounded proof instead of stalling.
### Changes
@@ -35,7 +35,7 @@ Docs: https://docs.openclaw.ai
- Code mode: add internal namespaces for scoped agent/global sessions and exact namespace tool dispatch. (#88043)
- Code mode: add MCP API files and docs for code-mode integrations.
- Control UI: add a Dreaming-tab agent selector and propagate the selected agent through Dreaming status, diary, and diary actions. (#78748) Thanks @stevenepalmer.
- Control UI: add calmer chat composer controls for active chat entry. (#88772)
- Control UI: add calmer chat composer controls, local draft typing state, and first-output latency instrumentation for active chat entry. (#88772, #88998) Thanks @vincentkoc.
- Plugins: add a SecretRef provider integration manifest contract and extract shared LLM core packages for provider/plugin reuse. (#82326, #88117)
- Plugins: persist the plugin install index in SQLite so installed package lookup survives reloads with less filesystem scanning. (#88794)
- Providers: add MiniMax M3 model support. (#88860)
@@ -49,18 +49,21 @@ Docs: https://docs.openclaw.ai
- Agents/TUI: restore in-flight TUI run switch-back behavior, keep no-policy native hook fallback available, guard vanished workspaces, and keep lightweight isolated subagents lightweight.
- Agents/media: keep async image, music, and video generation starts from ending the Codex turn, so mixed requests can continue with summaries or other work while media renders in the background.
- Agents/Codex: keep public OpenAI API-key profiles from being treated as native Codex app-server auth while preserving persisted Codex OAuth sessions.
- Agents/Codex: stream Codex app-server final-answer partials to live reply previews, preserve ACP metadata in SQLite, prefer real tool results over synthetic repair output, prevent aborted app-server turn handles from lingering, migrate legacy OpenAI Codex `lastGood` auth state, and preserve workspace/session metadata through ACP runtime refactors. (#88405, #88724, #88730) Thanks @vincentkoc.
- Control UI: keep collapsed tool cards labeled with the tool name and action instead of generic output text. Thanks @shakkernerd.
- Agents/Codex: surface Skill Workshop guidance in Codex app-server prompts when `skill_workshop` is available. Thanks @shakkernerd.
- Agents/auth: write auth profiles atomically, add force re-login recovery, preserve workspaces during state-only uninstall, and compact before oversized turns so recovery paths avoid partial state.
- Skills: skip disabled skill env overrides from stale persisted snapshots so disabled skill `apiKey` SecretRefs cannot abort embedded or channel turns. (#79072, #79173) Thanks @zeus1959.
- Skill Workshop: render the Control UI tab from filtered navigation state and keep filtered fallback routing stable.
- CLI: avoid live catalog validation during `openclaw agents add`, so adding a secondary agent no longer depends on provider catalog availability. (#76284, #88314) Thanks @zhangguiping-xydt.
- CLI: keep `plugins list --json` on the snapshot-only path so plugin sweeps avoid loading the full runtime status graph.
- CLI/desktop: bridge WSL clipboard operations through the shell and recognize manual-update launchd jobs. (#88764)
- Plugins: make PixVerse external-plugin ClawHub metadata explicit and keep it out of bundled dist builds.
- Plugins: clarify plugin loader failure guidance so missing or incompatible plugin packages point operators at the right repair path.
- Plugins: preserve npm plugin roots after blocked installs, isolate cached tool runtime siblings, and isolate web-provider factory failures so one bad plugin does not poison sibling runtime paths. (#77237, #88807)
- Plugins: preserve npm plugin roots after blocked installs, skip plugin-local `openclaw` peer symlinks during rollback snapshots, relink those peers after restore, isolate cached tool runtime siblings, and isolate web-provider factory failures so one bad plugin does not poison sibling runtime paths. (#77237, #88807)
- Cron: keep SQLite cron migrations compatible with legacy run-log tables, archived job stores, diagnostic cron names, and legacy one-shot delete-after-run behavior. (#88285)
- Cron: keep update delivery validation scoped, harden restart state, and retire MCP runtimes on isolated cron cleanup.
- Memory: serialize QMD update/embed writes per store, preserve phase signals on read errors, harden envelope metadata sanitization, and rewrite generated transcript paths on rollover so memory/search state survives concurrent gateway and CLI activity. (#66339, #85931) Thanks @openperf and @amittell.
- Providers: bound generated media downloads from OpenAI, Runway, xAI, MiniMax, BytePlus, DashScope-compatible, FAL, OpenRouter, Google, Vydra, and Comfy providers.
- Providers: resolve Google defaults to `google-generative-ai`, register Vertex static catalog rows, align Foundry reasoning metadata, skip DeepSeek V4 thinking params on Foundry fallback, use MiniMax account OAuth endpoints, preserve Copilot Claude 1M capabilities, suppress disabled Ollama reasoning output, keep OpenAI stop-finished tool calls, and avoid replay ids when the Responses store is disabled. (#88480, #88512)
- Providers: cap GitHub Copilot OAuth request timeouts before creating abort signals.
@@ -70,17 +73,18 @@ Docs: https://docs.openclaw.ai
- Channels: cap Telegram, Discord, WhatsApp, Signal, Feishu, Google Chat, Microsoft Teams, QQBot, Nostr, Zalo, Zalouser, and Nextcloud-style request/retry timers; preserve SMS approval reply routes; and retry WhatsApp QR login 408 timeouts. (#88183)
- Security/config parsing: reject unsafe OAuth/token lifetimes, retry-after delays, inbound timestamps, response body sizes, command timeout config, sandbox observer token TTLs, and gateway WebSocket calls after close.
- Providers/media: cap local service, model, usage, queue, generated media, TTS, music, workflow polling, and provider OAuth request timers across hosted and local providers.
- Release/CI/E2E: bound release candidate reads, beta smoke REST calls, changelog restore, kitchen-sink and bundled plugin readiness probes, secret-provider probes, Vitest routing, and mainline test flakes. (#88127, #88137, #88155, #88160)
- Release/CI/E2E: bound release candidate reads, beta smoke REST calls, plugin npm verification commands, changelog restore, cross-OS process groups, kitchen-sink and bundled plugin readiness probes, secret-provider probes, Telegram credential timeouts, Control UI i18n and CLI startup metadata generation, Vitest routing, and mainline test flakes. (#88127, #88137, #88155, #88160)
- Release/CI/E2E: keep Kitchen Sink live plugin MCP probes resolving source-checkout workspace packages and align the live gauntlet with current Kitchen Sink diagnostics.
- Release/CI/E2E: run the secret-provider integration proof through the repo pnpm runner so native macOS and Windows validation use the hydrated package-manager shim.
- Release/CI/E2E: run the Telegram desktop proof gateway through the repo pnpm runner so native macOS proof uses the hydrated package-manager shim.
- Docs/CI: run Mintlify anchor checks through the repo pnpm runner so docs link validation works when pnpm is only available through the hydrated package-manager shim.
- Agents: keep configured fallback model metadata typed so provider params, context-token caps, and media input limits do not break changed-gate typechecks.
- Agents: accept hidden `sessions_send` body aliases before validation while keeping the model-facing `message` schema canonical. (#88229) Thanks @zhangguiping-xydt.
- Chat/UI: preserve startup chat sends during history loading, unblock the initial Control UI chat send, stream chat deltas incrementally, skip markdown parsing while streaming, honor Chromium executable overrides, and detect system Chromium for E2E.
- Channels: preserve long Feishu streaming replies, send visible fallbacks when accepted Feishu turns produce no final reply, tolerate iMessage self-chat timestamp skew, decode Nostr `npub` allowlists correctly, and suppress raw provider errors during channel delivery. (#87896)
- Chat/UI: preserve startup chat sends during history loading, unblock the initial Control UI chat send, stream chat deltas incrementally, skip markdown parsing while streaming, keep drafts local while typing, guard composer rerenders, honor Chromium executable overrides, and detect system Chromium for E2E. (#88998) Thanks @vincentkoc.
- Channels: preserve long Feishu streaming replies, send visible fallbacks when accepted Feishu turns produce no final reply, tolerate iMessage self-chat timestamp skew, preserve colon-prefixed slash commands in mention parsing, decode Nostr `npub` allowlists correctly, and suppress raw provider errors during channel delivery. (#87896)
- Config/status/doctor: skip unresolved shell references in state-dir dotenv files, resolve gateway auth secrets during deep status audits, respect explicit PI runtime policy, report runtime tool-schema errors, and keep post-upgrade JSON stable. (#88288)
- Gateway/session state: list commands from the Gateway plugin registry, harden MCP loopback tool schemas, hide phantom agent-store rows from `sessions.list`, make task persistence failures explicit, and carry session UUIDs on interactive dispatch events.
- Gateway/plugins: narrow plugin lookup memoization to the stable plugin/runtime inputs, avoiding repeated lookup work without mixing disabled or filtered plugin state.
- OpenAI/TTS: handle speed directives for OpenAI TTS voices. (#74089)
- CI/Crabbox: keep default runner capacity on the Azure credit-backed on-demand D4 lane with the Azure SSH port and a Git-independent full check job, so broad validation avoids low-priority spot quota stalls, hydrate port mismatches, non-Git hydrated workspaces, and stale AWS region hints.
- CI/Crabbox: route Crabbox wrapper and Testbox workflow edits to their regression tests so changed-test gates do not silently run zero specs.
@@ -655,6 +659,7 @@ Docs: https://docs.openclaw.ai
- Gateway/sessions: allow shared-secret bearer callers to read and stream session history without an explicit scope header. (#81815) Thanks @medns.
- Agents/embedded runner: classify HTML auth provider responses as `auth_html` and return a re-authentication hint instead of the CDN-blocked copy that `upstream_html` returns. Cloudflare Access login pages, nginx basic-auth challenges, and gateway login walls all produce HTML auth bodies that were previously misdiagnosed as transient CDN blocks. (#79900) Thanks @martingarramon.
- TUI/streaming watchdog: dismiss the `This response is taking longer than expected` notice as soon as a chat event for the same run arrives, so the message no longer sits next to the recovered response when the run was only briefly silent. Refs #67052, #69081 (closed), prior attempt #69026. Thanks @jpruit20 and @romneyda.
- Agents/auth profiles: replace the bare `No available auth profile for <provider> (all in cooldown or unavailable)` TUI error with plain-language copy that explains what happened in user terms (sign-in expired, provider asking us to slow down, billing issue on the account, etc.) and suggests the matching `openclaw models auth login --provider <provider>` recovery command for sign-in and billing causes, while falling back to the underlying provider error for cases without a clear recovery path. Thanks @romneyda.
- Agents/Pi: tolerate OpenClaw-owned transcript writes while embedded prompts are released for model I/O, keeping long-running Feishu, Slack, Telegram, and cron turns from failing with false session-takeover errors. Fixes #84059. (#84250) Thanks @tianxiaochannel-oss88.
## 2026.5.20

View File

@@ -65,8 +65,8 @@ android {
applicationId = "ai.openclaw.app"
minSdk = 31
targetSdk = 36
versionCode = 2026053101
versionName = "2026.5.31"
versionCode = 2026060201
versionName = "2026.6.2"
ndk {
// Support all major ABIs — native libs are tiny (~47 KB per ABI)
abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86", "x86_64")

View File

@@ -1,6 +1,10 @@
# OpenClaw iOS Changelog
## 2026.5.31 - 2026-05-31
## 2026.6.2 - 2026-06-02
Maintenance update for the current OpenClaw release.
## 2026.6.1 - 2026-06-01
Maintenance update for the current OpenClaw release.

View File

@@ -2,8 +2,8 @@
// Source of truth: apps/ios/version.json
// Generated by scripts/ios-sync-versioning.ts.
OPENCLAW_IOS_VERSION = 2026.5.31
OPENCLAW_MARKETING_VERSION = 2026.5.31
OPENCLAW_IOS_VERSION = 2026.6.2
OPENCLAW_MARKETING_VERSION = 2026.6.2
OPENCLAW_BUILD_VERSION = 1
#include? "../build/Version.xcconfig"

View File

@@ -1,5 +1 @@
Maintenance update for the current OpenClaw release.
- Added hosted push relay defaults, realtime Talk playback, and safer WebSocket ping handling for mobile sessions.
- Updated App Store screenshots to cover Gateway pairing, Command, Chat, Talk, Agent, and Settings flows.
- Highlighted realtime Talk relay, Gateway connection status, node capabilities, push wake, and privacy controls.

View File

@@ -1,3 +1,3 @@
{
"version": "2026.5.31"
"version": "2026.6.2"
}

View File

@@ -15,9 +15,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>2026.5.31</string>
<string>2026.6.2</string>
<key>CFBundleVersion</key>
<string>2026053100</string>
<string>2026060200</string>
<key>CFBundleIconFile</key>
<string>OpenClaw</string>
<key>CFBundleURLTypes</key>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 KiB

After

Width:  |  Height:  |  Size: 244 KiB

View File

@@ -329,6 +329,19 @@ openclaw plugins install -l ./my-plugin
Standalone plugin files must be listed in `plugins.load.paths` rather than placed directly in `~/.openclaw/extensions` or `<workspace>/.openclaw/extensions`. Those auto-discovered roots load plugin package or bundle directories, while top-level script files are treated as local helpers and skipped.
<Note>
Workspace-origin plugins discovered from a workspace extensions root are not
imported or executed until they are explicitly enabled. For local development,
run `openclaw plugins enable <plugin-id>` or set
`plugins.entries.<plugin-id>.enabled: true`; if your config uses
`plugins.allow`, include the same plugin id there too. This fail-closed rule
also applies when channel setup explicitly targets a workspace-origin plugin for
setup-only loading, so local channel plugin setup code will not run while that
workspace plugin remains disabled or excluded from the allowlist. Linked installs
and explicit `plugins.load.paths` entries follow the normal policy for their
resolved plugin origin. See
[Configure plugin policy](/tools/plugin#configure-plugin-policy)
and [Configuration reference](/gateway/configuration-reference#plugins).
`--force` is not supported with `--link` because linked installs reuse the source path instead of copying over a managed install target.
Use `--pin` on npm installs to save the resolved exact spec (`name@version`) in the managed plugin index while keeping the default behavior unpinned.

View File

@@ -368,7 +368,7 @@ If discovery fails or times out, OpenClaw uses a bundled fallback catalog for:
- GPT-5.4 mini
- GPT-5.2
The current bundled harness is `@openai/codex` `0.134.0`. A `model/list` probe
The current bundled harness is `@openai/codex` `0.135.0`. A `model/list` probe
against that bundled app-server returned:
| Model id | Default | Hidden | Input modalities | Reasoning efforts |

View File

@@ -107,7 +107,7 @@ commands.
| [oc-path](/plugins/reference/oc-path) | Adds the openclaw path CLI for oc:// workspace file addressing. | `@openclaw/oc-path`<br />included in OpenClaw | plugin |
| [ollama](/plugins/reference/ollama) | Adds Ollama, Ollama Cloud model provider support to OpenClaw. | `@openclaw/ollama-provider`<br />included in OpenClaw | providers: ollama, ollama-cloud; contracts: memoryEmbeddingProviders, webSearchProviders |
| [open-prose](/plugins/reference/open-prose) | OpenProse VM skill pack with a /prose slash command. | `@openclaw/open-prose`<br />included in OpenClaw | skills |
| [openai](/plugins/reference/openai) | Adds OpenAI model provider support to OpenClaw, including ChatGPT/Codex OAuth. | `@openclaw/openai-provider`<br />included in OpenClaw | providers: openai; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [openai](/plugins/reference/openai) | Adds OpenAI model provider support to OpenClaw. | `@openclaw/openai-provider`<br />included in OpenClaw | providers: openai; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [opencode](/plugins/reference/opencode) | Adds OpenCode model provider support to OpenClaw. | `@openclaw/opencode-provider`<br />included in OpenClaw | providers: opencode; contracts: mediaUnderstandingProviders |
| [opencode-go](/plugins/reference/opencode-go) | Adds OpenCode Go model provider support to OpenClaw. | `@openclaw/opencode-go-provider`<br />included in OpenClaw | providers: opencode-go; contracts: mediaUnderstandingProviders |
| [openrouter](/plugins/reference/openrouter) | Adds OpenRouter model provider support to OpenClaw. | `@openclaw/openrouter-provider`<br />included in OpenClaw | providers: openrouter; contracts: imageGenerationProviders, mediaUnderstandingProviders, musicGenerationProviders, speechProviders, videoGenerationProviders |

View File

@@ -95,7 +95,7 @@ pnpm plugins:inventory:gen
| [oc-path](/plugins/reference/oc-path) | Adds the openclaw path CLI for oc:// workspace file addressing. | `@openclaw/oc-path`<br />included in OpenClaw | plugin |
| [ollama](/plugins/reference/ollama) | Adds Ollama, Ollama Cloud model provider support to OpenClaw. | `@openclaw/ollama-provider`<br />included in OpenClaw | providers: ollama, ollama-cloud; contracts: memoryEmbeddingProviders, webSearchProviders |
| [open-prose](/plugins/reference/open-prose) | OpenProse VM skill pack with a /prose slash command. | `@openclaw/open-prose`<br />included in OpenClaw | skills |
| [openai](/plugins/reference/openai) | Adds OpenAI model provider support to OpenClaw, including ChatGPT/Codex OAuth. | `@openclaw/openai-provider`<br />included in OpenClaw | providers: openai; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [openai](/plugins/reference/openai) | Adds OpenAI model provider support to OpenClaw. | `@openclaw/openai-provider`<br />included in OpenClaw | providers: openai; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [opencode](/plugins/reference/opencode) | Adds OpenCode model provider support to OpenClaw. | `@openclaw/opencode-provider`<br />included in OpenClaw | providers: opencode; contracts: mediaUnderstandingProviders |
| [opencode-go](/plugins/reference/opencode-go) | Adds OpenCode Go model provider support to OpenClaw. | `@openclaw/opencode-go-provider`<br />included in OpenClaw | providers: opencode-go; contracts: mediaUnderstandingProviders |
| [openrouter](/plugins/reference/openrouter) | Adds OpenRouter model provider support to OpenClaw. | `@openclaw/openrouter-provider`<br />included in OpenClaw | providers: openrouter; contracts: imageGenerationProviders, mediaUnderstandingProviders, musicGenerationProviders, speechProviders, videoGenerationProviders |

View File

@@ -1,5 +1,5 @@
---
summary: "Adds OpenAI model provider support to OpenClaw, including ChatGPT/Codex OAuth."
summary: "Adds OpenAI model provider support to OpenClaw."
read_when:
- You are installing, configuring, or auditing the openai plugin
title: "OpenAI plugin"
@@ -7,7 +7,7 @@ title: "OpenAI plugin"
# OpenAI plugin
Adds OpenAI model provider support to OpenClaw, including ChatGPT/Codex OAuth.
Adds OpenAI model provider support to OpenClaw.
## Distribution

View File

@@ -101,6 +101,8 @@ Automated UK school meal booking via ParentPay. Uses mouse coordinates for relia
**@julianengel** • `files` `r2` `presigned-urls`
Upload to Cloudflare R2/S3 and generate secure presigned download links. Useful for remote OpenClaw instances.
<img src="/assets/showcase/r2-upload.png" alt="R2 upload skill on ClawHub" />
</Card>
<Card title="iOS app via Telegram" icon="mobile">
@@ -269,6 +271,8 @@ Vapi voice assistant to OpenClaw HTTP bridge. Near real-time phone calls with yo
**@obviyus** • `transcription` `multilingual` `skill`
Multi-lingual audio transcription via OpenRouter (Gemini, and more). Available on ClawHub.
<img src="/assets/showcase/openrouter-transcribe.png" alt="OpenRouter transcription skill on ClawHub" />
</Card>
</CardGroup>
@@ -289,6 +293,8 @@ OpenClaw gateway running on Home Assistant OS with SSH tunnel support and persis
**ClawHub**`homeassistant` `skill` `automation`
Control and automate Home Assistant devices via natural language.
<img src="/assets/showcase/homeassistant.png" alt="Home Assistant skill on ClawHub" />
</Card>
<Card title="Nix packaging" icon="snowflake" href="https://github.com/openclaw/nix-openclaw">
@@ -301,6 +307,8 @@ Batteries-included nixified OpenClaw configuration for reproducible deployments.
**ClawHub**`calendar` `caldav` `skill`
Calendar skill using khal and vdirsyncer. Self-hosted calendar integration.
<img src="/assets/showcase/caldav-calendar.png" alt="CalDAV calendar skill on ClawHub" />
</Card>
</CardGroup>

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/acpx",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/acpx",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@agentclientprotocol/claude-agent-acp": "0.39.0",
"@zed-industries/codex-acp": "0.15.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/acpx",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw ACP runtime backend with plugin-owned session and transport management.",
"repository": {
"type": "git",
@@ -26,10 +26,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"staticAssets": [
{
"source": "./src/runtime-internals/mcp-proxy.mjs",

View File

@@ -3218,7 +3218,7 @@ describe("active-memory plugin", () => {
testing.setSetupGraceTimeoutMsForTests(0);
api.pluginConfig = {
agents: ["main"],
timeoutMs: 100,
timeoutMs: 1_000,
};
plugin.register(api as unknown as OpenClawPluginApi);
hoisted.sessionStore["agent:main:memory-get-miss"] = {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/admin-http-rpc",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw admin HTTP RPC endpoint",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/alibaba-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Alibaba Model Studio video provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@anthropic-ai/sdk": "0.100.1",
"@aws/bedrock-token-generator": "1.1.0"

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-mantle-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Amazon Bedrock Mantle provider plugin for OpenAI-compatible model routing.",
"repository": {
"type": "git",
@@ -24,10 +24,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"bundledDist": false
},
"release": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@aws-sdk/client-bedrock": "3.1056.0",
"@aws-sdk/client-bedrock-runtime": "3.1056.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/amazon-bedrock-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Amazon Bedrock provider plugin with model discovery, embeddings, and guardrail support.",
"repository": {
"type": "git",
@@ -28,10 +28,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"bundledDist": false
},
"release": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@anthropic-ai/vertex-sdk": "0.16.1"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-vertex-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Anthropic Vertex provider plugin for Claude models on Google Vertex AI.",
"repository": {
"type": "git",
@@ -23,10 +23,10 @@
"minHostVersion": ">=2026.5.12-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"bundledDist": false
},
"release": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/anthropic-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Anthropic provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/arcee-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Arcee provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/azure-speech",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Azure Speech plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/bonjour",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Bonjour/mDNS gateway discovery",
"type": "module",
"dependencies": {

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/brave-plugin",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/brave-plugin",
"version": "2026.5.31"
"version": "2026.6.2"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/brave-plugin",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Brave Search provider plugin for web search.",
"repository": {
"type": "git",
@@ -21,10 +21,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31"
"openclawVersion": "2026.6.2"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/browser-plugin",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw browser tool plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/byteplus-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw BytePlus provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/canvas-plugin",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Canvas plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/cerebras-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Cerebras provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/chutes-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Chutes.ai provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/clickclack",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw ClickClack channel plugin",
"type": "module",
@@ -18,7 +18,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.5.31"
"openclaw": ">=2026.6.2"
},
"peerDependenciesMeta": {
"openclaw": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/cloudflare-ai-gateway-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Cloudflare AI Gateway provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/codex-supervisor",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Codex app-server fleet supervision plugin.",
"type": "module",

View File

@@ -253,6 +253,8 @@ describe("codex media understanding provider", () => {
expect(result?.text).toBe("A red square.");
expect(setTimeoutSpy).toHaveBeenCalledWith(expect.any(Function), MAX_TIMER_TIMEOUT_MS);
} finally {
vi.restoreAllMocks();
vi.clearAllTimers();
vi.useRealTimers();
}
});

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/codex",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/codex",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@openai/codex": "0.135.0",
"typebox": "1.1.39",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/codex",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Codex app-server harness and model provider plugin with a Codex-managed GPT catalog.",
"repository": {
"type": "git",
@@ -26,10 +26,10 @@
"minHostVersion": ">=2026.5.1-beta.1"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31"
"openclawVersion": "2026.6.2"
},
"release": {
"publishToClawHub": true,

View File

@@ -121,12 +121,14 @@ async function waitForThreadStart(harness: ClientHarness): Promise<{ id?: number
describe("startCodexAttemptThread", () => {
beforeEach(() => {
vi.useRealTimers();
vi.stubEnv("CODEX_API_KEY", "");
vi.stubEnv("OPENAI_API_KEY", "");
clearSharedCodexAppServerClient();
});
afterEach(() => {
vi.useRealTimers();
clearSharedCodexAppServerClient();
vi.restoreAllMocks();
vi.unstubAllEnvs();

View File

@@ -266,6 +266,7 @@ export async function startCodexAttemptThread(params: {
mcpServersFingerprintEvaluated: params.bundleMcpThreadConfig.evaluated,
environmentSelection: startupEnvironmentSelection,
contextEngineProjection: params.contextEngineProjection,
signal: params.signal,
pluginThreadConfig: pluginThreadConfigRequired
? {
enabled: true,

View File

@@ -1,7 +1,11 @@
import { afterEach, describe, expect, it, vi } from "vitest";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { createCodexSteeringQueue } from "./attempt-steering.js";
describe("Codex app-server steering queue", () => {
beforeEach(() => {
vi.useFakeTimers();
});
afterEach(() => {
vi.useRealTimers();
});
@@ -16,7 +20,9 @@ describe("Codex app-server steering queue", () => {
signal: new AbortController().signal,
});
await queue.queue("accepted", { debounceMs: 0 });
const queued = queue.queue("accepted", { debounceMs: 0 });
await vi.advanceTimersByTimeAsync(0);
await queued;
expect(request).toHaveBeenCalledWith("turn/steer", {
threadId: "thread-1",
@@ -37,9 +43,10 @@ describe("Codex app-server steering queue", () => {
signal: new AbortController().signal,
});
await expect(queue.queue("rejected", { debounceMs: 0 })).rejects.toThrow(
"cannot steer a compact turn",
);
const queued = queue.queue("rejected", { debounceMs: 0 });
const rejected = expect(queued).rejects.toThrow("cannot steer a compact turn");
await vi.advanceTimersByTimeAsync(0);
await rejected;
expect(request).toHaveBeenCalledWith("turn/steer", {
threadId: "thread-1",
expectedTurnId: "turn-1",
@@ -48,7 +55,6 @@ describe("Codex app-server steering queue", () => {
});
it("rejects queued steering when the run aborts before debounce flush", async () => {
vi.useFakeTimers();
const controller = new AbortController();
const request = vi.fn(async () => ({ turnId: "turn-1" }));
const queue = createCodexSteeringQueue({

View File

@@ -82,6 +82,10 @@ export function createCodexSteeringQueue(params: {
batchedTexts.push({ text, resolve, reject });
clearBatchTimer();
const debounceMs = normalizeCodexSteerDebounceMs(options?.debounceMs);
if (debounceMs === 0) {
void flushBatch().catch(() => undefined);
return;
}
batchTimer = setTimeout(() => {
batchTimer = undefined;
void flushBatch().catch(() => undefined);

View File

@@ -9,6 +9,8 @@ describe("Codex app-server attempt turn watches", () => {
});
afterEach(() => {
vi.restoreAllMocks();
vi.clearAllTimers();
vi.useRealTimers();
});
@@ -91,6 +93,28 @@ describe("Codex app-server attempt turn watches", () => {
expect(harness.abortController.signal.reason).toBe("turn_completion_idle_timeout");
});
it("prefers completion idle timeout when completion and progress watches are due together", () => {
const harness = createController();
harness.controller.armAttemptIdleWatch();
harness.controller.touchActivity("request:item/tool/call:response", {
arm: true,
attemptProgress: true,
attemptTimeoutMs: 10,
});
vi.advanceTimersByTime(10);
expect(harness.timeouts).toMatchObject([
{
kind: "completion",
idleMs: 10,
timeoutMs: 10,
lastActivityReason: "request:item/tool/call:response",
},
]);
expect(harness.abortController.signal.reason).toBe("turn_completion_idle_timeout");
});
it("clamps oversized completion idle timeouts before scheduling", () => {
const setTimeoutSpy = vi.spyOn(globalThis, "setTimeout");
const harness = createController({

View File

@@ -166,6 +166,23 @@ export function createCodexAttemptTurnWatchController(params: {
scheduleTerminalIdleWatch();
}
function isCompletionIdleTimeoutDueBeforeAttempt(timeoutMs: number) {
if (
params.isCompleted() ||
params.isTerminalTurnNotificationQueued() ||
params.signal.aborted ||
!completionIdleWatchArmed ||
params.getActiveAppServerTurnRequests() > 0
) {
return false;
}
const completionTimeoutMs = completionIdleTimeoutOverrideMs ?? turnCompletionIdleTimeoutMs;
if (completionTimeoutMs > timeoutMs) {
return false;
}
return Math.max(0, Date.now() - completionLastActivityAt) >= completionTimeoutMs;
}
function recordAttemptProgress(
reason: string,
options?: { details?: Record<string, unknown>; attemptTimeoutMs?: number },
@@ -236,6 +253,10 @@ export function createCodexAttemptTurnWatchController(params: {
scheduleAttemptIdleWatch();
return;
}
if (isCompletionIdleTimeoutDueBeforeAttempt(timeoutMs)) {
fireCompletionIdleTimeout();
return;
}
const timeout = {
kind: "progress" as const,
idleMs,

View File

@@ -157,10 +157,12 @@ describe("Auth profile runtime contract - Codex app-server adapter", () => {
let tmpDir: string;
beforeEach(async () => {
vi.useRealTimers();
tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "openclaw-codex-auth-contract-"));
});
afterEach(async () => {
vi.useRealTimers();
abortAgentHarnessRun(AUTH_PROFILE_RUNTIME_CONTRACT.sessionId);
resetCodexAppServerClientFactoryForTest();
await fs.rm(tmpDir, { recursive: true, force: true });

View File

@@ -29,8 +29,8 @@ describe("CodexAppServerClient", () => {
afterEach(() => {
resetSharedCodexAppServerClientForTests();
vi.useRealTimers();
vi.restoreAllMocks();
vi.useRealTimers();
for (const client of clients) {
client.close();
}

View File

@@ -17,8 +17,8 @@ import type { CodexDynamicToolCallResponse } from "./protocol.js";
describe("dynamic tool execution helpers", () => {
afterEach(() => {
vi.useRealTimers();
vi.restoreAllMocks();
vi.useRealTimers();
});
it("keeps explicit dynamic tool timeouts above the default bridge deadline", () => {

View File

@@ -1,6 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import {
abortAndDrainAgentHarnessRun,
nativeHookRelayTesting,
queueAgentHarnessMessage,
resetAgentEventsForTest,
@@ -30,6 +31,8 @@ const appServerHarnessWait = { interval: 1, timeout: 120_000 } as const;
const activeAppServerAttemptsForTest = new Set<{
abortController?: AbortController;
promise: Promise<unknown>;
sessionId: string;
sessionKey?: string;
}>();
type RunCodexAppServerAttemptOptions = NonNullable<
@@ -62,6 +65,8 @@ export function runCodexAppServerAttempt(
const entry = {
abortController,
promise: undefined as unknown as Promise<unknown>,
sessionId: params.sessionId,
sessionKey: params.sessionKey,
};
const promise = runCodexAppServerAttemptImpl(
trackedParams,
@@ -76,6 +81,7 @@ export function runCodexAppServerAttempt(
}
async function drainActiveAppServerAttemptsForTest(): Promise<void> {
vi.useRealTimers();
const attempts = [...activeAppServerAttemptsForTest];
if (attempts.length === 0) {
return;
@@ -83,12 +89,33 @@ async function drainActiveAppServerAttemptsForTest(): Promise<void> {
for (const attempt of attempts) {
attempt.abortController?.abort("test_cleanup");
}
await Promise.race([
Promise.allSettled(attempts.map((attempt) => attempt.promise)),
new Promise<void>((resolve) => {
setTimeout(resolve, 5_000);
const drainedSessions = new Set<string>();
const sessionDrains = attempts.flatMap((attempt) => {
if (!attempt.sessionId || drainedSessions.has(attempt.sessionId)) {
return [];
}
drainedSessions.add(attempt.sessionId);
return [
abortAndDrainAgentHarnessRun({
sessionId: attempt.sessionId,
sessionKey: attempt.sessionKey,
settleMs: 1_000,
forceClear: true,
reason: "test_cleanup",
}).catch(() => undefined),
];
});
const drainResult = await Promise.race([
Promise.allSettled([...attempts.map((attempt) => attempt.promise), ...sessionDrains]).then(
() => "settled" as const,
),
new Promise<"timeout">((resolve) => {
setTimeout(() => resolve("timeout"), 5_000);
}),
]);
if (drainResult === "settled") {
activeAppServerAttemptsForTest.clear();
}
}
export function createParams(sessionFile: string, workspaceDir: string): EmbeddedRunAttemptParams {
@@ -465,6 +492,7 @@ export function createRuntimeDynamicTool(name: string): RuntimeDynamicToolForTes
export function setupRunAttemptTestHooks(): void {
beforeEach(async () => {
vi.useRealTimers();
clearInternalHooks();
resetAgentEventsForTest();
resetDiagnosticEventsForTest();
@@ -489,8 +517,8 @@ export function setupRunAttemptTestHooks(): void {
resetGlobalHookRunner();
clearInternalHooks();
defaultCodexAppInventoryCache.clear();
vi.useRealTimers();
vi.restoreAllMocks();
vi.useRealTimers();
vi.unstubAllEnvs();
await closeCodexSandboxExecServersForTests();
await fs.rm(tempDir, { recursive: true, force: true });

View File

@@ -84,6 +84,7 @@ function turnStartResult(turnId = "turn-1") {
describe("Codex app-server main thread cleanup", () => {
beforeEach(async () => {
vi.useRealTimers();
resetAgentEventsForTest();
vi.stubEnv("OPENCLAW_TRAJECTORY", "0");
vi.stubEnv("CODEX_API_KEY", "");
@@ -92,6 +93,7 @@ describe("Codex app-server main thread cleanup", () => {
});
afterEach(async () => {
vi.useRealTimers();
resetAgentEventsForTest();
vi.restoreAllMocks();
vi.unstubAllEnvs();

View File

@@ -18,24 +18,44 @@ import {
setupRunAttemptTestHooks();
function createSteeringParams(name: string) {
const params = createParams(
path.join(tempDir, `${name}.jsonl`),
path.join(tempDir, `${name}-workspace`),
);
params.sessionId = `session-${name}`;
params.sessionKey = `agent:main:session-${name}`;
return params;
}
async function queueActiveRunMessageEventually(
sessionId: string,
text: string,
options?: Parameters<typeof queueActiveRunMessageForTest>[2],
) {
await vi.waitFor(
() => expect(queueActiveRunMessageForTest(sessionId, text, options)).toBe(true),
fastWait,
);
}
describe("runCodexAppServerAttempt steering", () => {
it("forwards queued user input and aborts the active app-server turn", async () => {
const { requests, waitForMethod } = createStartedThreadHarness();
const params = createSteeringParams("steering-forward");
const run = runCodexAppServerAttempt(
createParams(path.join(tempDir, "session.jsonl"), path.join(tempDir, "workspace")),
{ pluginConfig: { appServer: { mode: "yolo" } } },
);
const run = runCodexAppServerAttempt(params, { pluginConfig: { appServer: { mode: "yolo" } } });
await waitForMethod("turn/start");
expect(queueActiveRunMessageForTest("session-1", "more context", { debounceMs: 1 })).toBe(true);
await vi.waitFor(() => expect(requests.map((entry) => entry.method)).toContain("turn/steer"), {
interval: 1,
});
expect(abortAgentHarnessRun("session-1")).toBe(true);
await queueActiveRunMessageEventually(params.sessionId, "more context", { debounceMs: 1 });
await vi.waitFor(
() => expect(requests.map((entry) => entry.method)).toContain("turn/steer"),
fastWait,
);
expect(abortAgentHarnessRun(params.sessionId)).toBe(true);
await vi.waitFor(
() => expect(requests.map((entry) => entry.method)).toContain("turn/interrupt"),
{ interval: 1 },
fastWait,
);
const result = await run;
@@ -67,22 +87,21 @@ describe("runCodexAppServerAttempt steering", () => {
it("accepts message-tool-only steering for active Codex app-server source replies", async () => {
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
const params = createParams(
path.join(tempDir, "session.jsonl"),
path.join(tempDir, "workspace"),
);
const params = createSteeringParams("steering-message-tool");
params.sourceReplyDeliveryMode = "message_tool_only";
const run = runCodexAppServerAttempt(params);
await waitForMethod("turn/start");
expect(
queueActiveRunMessageForTest("session-1", "subagent complete", {
await queueActiveRunMessageEventually(
params.sessionId,
"subagent complete",
{
debounceMs: 1,
steeringMode: "all",
sourceReplyDeliveryMode: "message_tool_only",
}),
).toBe(true);
},
);
await vi.waitFor(
() =>
@@ -96,7 +115,7 @@ describe("runCodexAppServerAttempt steering", () => {
},
},
]),
{ interval: 1 },
fastWait,
);
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
@@ -105,14 +124,13 @@ describe("runCodexAppServerAttempt steering", () => {
it("batches default queued steering before sending turn/steer", async () => {
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
const params = createSteeringParams("steering-batch-default");
const run = runCodexAppServerAttempt(
createParams(path.join(tempDir, "session.jsonl"), path.join(tempDir, "workspace")),
);
const run = runCodexAppServerAttempt(params);
await waitForMethod("turn/start");
expect(queueActiveRunMessageForTest("session-1", "first", { debounceMs: 5 })).toBe(true);
expect(queueActiveRunMessageForTest("session-1", "second", { debounceMs: 5 })).toBe(true);
await queueActiveRunMessageEventually(params.sessionId, "first", { debounceMs: 5 });
expect(queueActiveRunMessageForTest(params.sessionId, "second", { debounceMs: 5 })).toBe(true);
await vi.waitFor(
() =>
@@ -129,7 +147,7 @@ describe("runCodexAppServerAttempt steering", () => {
},
},
]),
{ interval: 1 },
fastWait,
);
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
@@ -138,15 +156,12 @@ describe("runCodexAppServerAttempt steering", () => {
it("flushes pending default queued steering during normal turn cleanup", async () => {
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
const params = createSteeringParams("steering-flush");
const run = runCodexAppServerAttempt(
createParams(path.join(tempDir, "session.jsonl"), path.join(tempDir, "workspace")),
);
const run = runCodexAppServerAttempt(params);
await waitForMethod("turn/start");
expect(queueActiveRunMessageForTest("session-1", "late steer", { debounceMs: 30_000 })).toBe(
true,
);
await queueActiveRunMessageEventually(params.sessionId, "late steer", { debounceMs: 30_000 });
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
await run;
@@ -165,17 +180,20 @@ describe("runCodexAppServerAttempt steering", () => {
it("batches explicit all-mode steering before sending turn/steer", async () => {
const { requests, waitForMethod, completeTurn } = createStartedThreadHarness();
const params = createSteeringParams("steering-batch-all");
const run = runCodexAppServerAttempt(
createParams(path.join(tempDir, "session.jsonl"), path.join(tempDir, "workspace")),
);
const run = runCodexAppServerAttempt(params);
await waitForMethod("turn/start");
await queueActiveRunMessageEventually(params.sessionId, "first", {
debounceMs: 5,
steeringMode: "all",
});
expect(
queueActiveRunMessageForTest("session-1", "first", { debounceMs: 5, steeringMode: "all" }),
).toBe(true);
expect(
queueActiveRunMessageForTest("session-1", "second", { debounceMs: 5, steeringMode: "all" }),
queueActiveRunMessageForTest(params.sessionId, "second", {
debounceMs: 5,
steeringMode: "all",
}),
).toBe(true);
await vi.waitFor(
@@ -193,7 +211,7 @@ describe("runCodexAppServerAttempt steering", () => {
},
},
]),
{ interval: 1 },
fastWait,
);
await completeTurn({ threadId: "thread-1", turnId: "turn-1" });
@@ -235,10 +253,7 @@ describe("runCodexAppServerAttempt steering", () => {
}) as never,
);
const params = createParams(
path.join(tempDir, "session.jsonl"),
path.join(tempDir, "workspace"),
);
const params = createSteeringParams("steering-request-input");
params.onBlockReply = vi.fn();
const run = runCodexAppServerAttempt(params);
await vi.waitFor(
@@ -271,7 +286,7 @@ describe("runCodexAppServerAttempt steering", () => {
});
await vi.waitFor(() => expect(params.onBlockReply).toHaveBeenCalledTimes(1), fastWait);
expect(queueActiveRunMessageForTest("session-1", "2")).toBe(true);
await queueActiveRunMessageEventually(params.sessionId, "2");
await expect(response).resolves.toEqual({
answers: { mode: { answers: ["Deep"] } },
});

View File

@@ -3937,6 +3937,46 @@ describe("runCodexAppServerAttempt", () => {
}
});
it("does not install an active run handle when turn start resolves after abort", async () => {
let resolveTurnStart: ((value: ReturnType<typeof turnStartResult>) => void) | undefined;
const request = vi.fn(async (method: string) => {
if (method === "thread/start") {
return threadStartResult("thread-1");
}
if (method === "turn/start") {
return await new Promise<ReturnType<typeof turnStartResult>>((resolve) => {
resolveTurnStart = resolve;
});
}
return {};
});
setCodexAppServerClientFactoryForTest(
async () =>
({
request,
addNotificationHandler: () => () => undefined,
addRequestHandler: () => () => undefined,
}) as never,
);
const abortController = new AbortController();
const params = createParams(
path.join(tempDir, "session.jsonl"),
path.join(tempDir, "workspace"),
);
params.abortSignal = abortController.signal;
const run = runCodexAppServerAttempt(params);
await vi.waitFor(
() => expect(request.mock.calls.map(([method]) => method)).toContain("turn/start"),
fastWait,
);
abortController.abort("test_abort");
resolveTurnStart?.(turnStartResult());
await expect(run).rejects.toThrow("test_abort");
expect(queueActiveRunMessageForTest("session-1", "after abort")).toBe(false);
});
it("keeps extended history enabled when resuming a bound Codex thread", async () => {
const sessionFile = path.join(tempDir, "session.jsonl");
const workspaceDir = path.join(tempDir, "workspace");

View File

@@ -1832,6 +1832,22 @@ export async function runCodexAppServerAttempt(
});
let turn: CodexTurnStartResponse | undefined;
const throwIfTurnStartAcceptedAfterAbort = () => {
if (!runAbortController.signal.aborted) {
return;
}
const reason = runAbortController.signal.reason;
if (reason instanceof Error) {
throw reason;
}
const error = new Error(
typeof reason === "string" && reason.length > 0
? reason
: "codex app-server turn start aborted before acceptance",
);
error.name = "AbortError";
throw error;
};
const startCodexTurn = async (): Promise<CodexTurnStartResponse> => {
const turnStartParams = buildTurnStartParams(params, {
threadId: thread.threadId,
@@ -1847,12 +1863,14 @@ export async function runCodexAppServerAttempt(
workspaceBootstrapContext.heartbeatCollaborationInstructions,
});
codexModelCallDiagnostics.setRequestPayloadBytes(utf8JsonByteLength(turnStartParams));
return assertCodexTurnStartResponse(
const startedTurn = assertCodexTurnStartResponse(
await client.request("turn/start", turnStartParams, {
timeoutMs: params.timeoutMs,
signal: runAbortController.signal,
}),
);
throwIfTurnStartAcceptedAfterAbort();
return startedTurn;
};
try {
codexModelCallDiagnostics.emitStarted();
@@ -2123,7 +2141,7 @@ export async function runCodexAppServerAttempt(
kind: "embedded" as const,
queueMessage: async (text: string, optionsLocal?: CodexSteeringQueueOptions) =>
activeSteeringQueue.queue(text, optionsLocal),
isStreaming: () => !completed,
isStreaming: () => !completed && !runAbortController.signal.aborted,
isCompacting: () => projectorRef.current?.isCompacting() ?? false,
sourceReplyDeliveryMode: params.sourceReplyDeliveryMode,
cancel: () => runAbortController.abort("cancelled"),

View File

@@ -133,8 +133,8 @@ describe("shared Codex app-server client", () => {
afterEach(() => {
resetSharedCodexAppServerClientForTests();
vi.useRealTimers();
vi.restoreAllMocks();
vi.useRealTimers();
mocks.bridgeCodexAppServerStartOptions.mockClear();
mocks.applyCodexAppServerAuthProfile.mockClear();
mocks.resolveCodexAppServerAuthProfileIdForAgent.mockClear();

View File

@@ -262,7 +262,12 @@ export async function createIsolatedCodexAppServerClient(
export function resetSharedCodexAppServerClientForTests(): void {
const state = getSharedCodexAppServerClientState();
const clients = collectSharedClients(state);
state.clients.clear();
state.leasedReleases = new WeakMap();
for (const client of clients) {
client.close();
}
}
export function clearSharedCodexAppServerClient(): void {

View File

@@ -169,6 +169,42 @@ function createTwoCalendarAppPolicyContext() {
setupRunAttemptTestHooks();
describe("Codex app-server thread lifecycle bindings", () => {
it("does not write a binding when thread start resolves after abort", async () => {
const sessionFile = path.join(tempDir, "session.jsonl");
const workspaceDir = path.join(tempDir, "workspace");
const params = createParams(sessionFile, workspaceDir);
const appServer = createThreadLifecycleAppServerOptions();
const abortController = new AbortController();
let resolveStart: ((value: ReturnType<typeof threadStartResult>) => void) | undefined;
const request = vi.fn(async (method: string) => {
if (method === "thread/start") {
return await new Promise<ReturnType<typeof threadStartResult>>((resolve) => {
resolveStart = resolve;
});
}
throw new Error(`unexpected method: ${method}`);
});
const run = startOrResumeThread({
client: { request } as never,
params,
cwd: workspaceDir,
dynamicTools: [],
appServer,
signal: abortController.signal,
});
await vi.waitFor(() =>
expect(request).toHaveBeenCalledWith("thread/start", expect.any(Object), {
signal: abortController.signal,
}),
);
abortController.abort("test_abort");
resolveStart?.(threadStartResult("thread-after-abort"));
await expect(run).rejects.toThrow("test_abort");
await expect(readCodexAppServerBinding(sessionFile)).resolves.toBeUndefined();
});
it("resumes a bound Codex thread when only dynamic tool descriptions change", async () => {
const sessionFile = path.join(tempDir, "session.jsonl");
const workspaceDir = path.join(tempDir, "workspace");

View File

@@ -243,6 +243,7 @@ export async function startOrResumeThread(params: {
environmentSelection?: CodexTurnEnvironmentParams[];
pluginThreadConfig?: CodexPluginThreadConfigProvider;
contextEngineProjection?: CodexContextEngineThreadBootstrapProjection;
signal?: AbortSignal;
}): Promise<CodexAppServerThreadLifecycleBinding> {
// Thread lifecycle spans are useful when profiling startup churn, but normal
// turns should not pay Date.now/span-array overhead while resuming threads.
@@ -275,6 +276,22 @@ export async function startOrResumeThread(params: {
let preserveExistingBinding = false;
let rotatedContextEngineBinding = false;
let prebuiltPluginThreadConfig: CodexPluginThreadConfig | undefined;
const throwIfAborted = () => {
if (!params.signal?.aborted) {
return;
}
const reason = params.signal.reason;
if (reason instanceof Error) {
throw reason;
}
const error = new Error(
typeof reason === "string" && reason.length > 0
? reason
: "codex app-server thread lifecycle aborted",
);
error.name = "AbortError";
throw error;
};
if (binding?.threadId && params.nativeCodeModeEnabled === false) {
embeddedAgentLog.debug(
"codex app-server native tool surface disabled for turn; starting transient thread",
@@ -446,9 +463,10 @@ export async function startOrResumeThread(params: {
);
const response = assertCodexThreadResumeResponse(
await lifecycleTiming.measure("thread_resume_request", () =>
params.client.request("thread/resume", resumeParams),
params.client.request("thread/resume", resumeParams, { signal: params.signal }),
),
);
throwIfAborted();
const boundAuthProfileId = authProfileId;
const fallbackModelProvider = resolveCodexAppServerModelProvider({
provider: params.params.provider,
@@ -570,7 +588,7 @@ export async function startOrResumeThread(params: {
);
const threadStartResponse = await lifecycleTiming.measure("thread_start_request", async () => {
try {
return await params.client.request("thread/start", startParams);
return await params.client.request("thread/start", startParams, { signal: params.signal });
} catch (error) {
if (error instanceof CodexAppServerRpcError) {
throw new CodexThreadStartRequestError(error);
@@ -579,6 +597,7 @@ export async function startOrResumeThread(params: {
}
});
const response = assertCodexThreadStartResponse(threadStartResponse);
throwIfAborted();
const modelProvider = resolveCodexAppServerModelProvider({
provider: params.params.provider,
authProfileId: params.params.authProfileId,

View File

@@ -2,4 +2,4 @@ export const MIN_CODEX_APP_SERVER_VERSION = "0.125.0";
export const MIN_CODEX_SANDBOX_EXEC_SERVER_APP_SERVER_VERSION = "0.132.0";
export const MANAGED_CODEX_APP_SERVER_PACKAGE = "@openai/codex";
// Keep this in sync with the Codex CLI live-test package pin.
export const MANAGED_CODEX_APP_SERVER_PACKAGE_VERSION = "0.134.0";
export const MANAGED_CODEX_APP_SERVER_PACKAGE_VERSION = "0.135.0";

View File

@@ -186,6 +186,7 @@ describe("codex conversation turn collector", () => {
await vi.advanceTimersByTimeAsync(100);
await assertion;
} finally {
vi.restoreAllMocks();
vi.useRealTimers();
}
});
@@ -206,6 +207,8 @@ describe("codex conversation turn collector", () => {
await expect(completion).resolves.toEqual({ replyText: "" });
} finally {
vi.restoreAllMocks();
vi.clearAllTimers();
vi.useRealTimers();
}
});

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/comfy-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw ComfyUI provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot-proxy",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Copilot Proxy provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/copilot",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/copilot",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@github/copilot-sdk": "1.0.0-beta.9"
}

View File

@@ -2,7 +2,7 @@
"id": "copilot",
"name": "GitHub Copilot agent runtime",
"description": "Registers the GitHub Copilot agent runtime.",
"version": "2026.5.31",
"version": "2026.6.2",
"activation": {
"onStartup": false,
"onAgentHarnesses": ["copilot"]

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/copilot",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw GitHub Copilot agent runtime plugin (registers a `github-copilot` AgentHarness backed by @github/copilot-sdk over JSON-RPC to the GitHub Copilot CLI)",
"repository": {
"type": "git",
@@ -25,10 +25,10 @@
"minHostVersion": ">=2026.5.28"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"bundledDist": false
},
"release": {

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepgram-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw Deepgram media-understanding provider",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepinfra-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw DeepInfra provider plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/deepseek-provider",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw DeepSeek provider plugin",
"type": "module",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diagnostics-otel",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diagnostics-otel",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@opentelemetry/api": "1.9.1",
"@opentelemetry/api-logs": "0.218.0",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-otel",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw diagnostics OpenTelemetry exporter for metrics and traces.",
"repository": {
"type": "git",
@@ -34,10 +34,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31"
"openclawVersion": "2026.6.2"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diagnostics-prometheus",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diagnostics-prometheus",
"version": "2026.5.31"
"version": "2026.6.2"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diagnostics-prometheus",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw diagnostics Prometheus exporter for runtime metrics.",
"repository": {
"type": "git",
@@ -21,10 +21,10 @@
"minHostVersion": ">=2026.4.25"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31"
"openclawVersion": "2026.6.2"
},
"release": {
"publishToClawHub": true,

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diffs-language-pack",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diffs-language-pack",
"version": "2026.5.31"
"version": "2026.6.2"
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs-language-pack",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw diffs viewer syntax highlighting language pack",
"repository": {
"type": "git",
@@ -22,13 +22,13 @@
"minHostVersion": ">=2026.5.27"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"assetScripts": {
"build": "node ../../scripts/build-diffs-viewer-runtime.mjs full"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"staticAssets": [
{
"source": "./assets/viewer-runtime.js",

View File

@@ -1,12 +1,12 @@
{
"name": "@openclaw/diffs",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/diffs",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@pierre/diffs": "1.2.4",
"@pierre/theme": "1.0.3",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/diffs",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw read-only diff viewer plugin and file renderer for agents.",
"repository": {
"type": "git",
@@ -29,13 +29,13 @@
"minHostVersion": ">=2026.4.30"
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"assetScripts": {
"build": "node ../../scripts/build-diffs-viewer-runtime.mjs curated"
},
"build": {
"openclawVersion": "2026.5.31",
"openclawVersion": "2026.6.2",
"staticAssets": [
{
"source": "./assets/viewer-runtime.js",

View File

@@ -1,22 +1,22 @@
{
"name": "@openclaw/discord",
"version": "2026.5.31",
"version": "2026.6.2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@openclaw/discord",
"version": "2026.5.31",
"version": "2026.6.2",
"dependencies": {
"@discordjs/voice": "0.19.2",
"discord-api-types": "0.38.48",
"libopus-wasm": "0.1.0",
"libopus-wasm": "0.2.0",
"typebox": "1.1.39",
"undici": "8.3.0",
"ws": "8.21.0"
},
"peerDependencies": {
"openclaw": ">=2026.5.31"
"openclaw": ">=2026.6.2"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -352,9 +352,9 @@
]
},
"node_modules/libopus-wasm": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/libopus-wasm/-/libopus-wasm-0.1.0.tgz",
"integrity": "sha512-/aurGcAVgy0GcBEUzFaX9pm9qv7zYcy8W5hBXFiK+cyqOXAX4lOS6rlFogkY9CcSIajhjnuXyixsbmziSHCDMQ==",
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/libopus-wasm/-/libopus-wasm-0.2.0.tgz",
"integrity": "sha512-x/2Gu1/C6L3IICY09zyfp984AWiOYjn53u4WfdY3yh+3KTzMN8Xkm77q3lenWMVIk5SnSzjGEkQT+VQMFHLBHQ==",
"license": "MIT",
"engines": {
"node": ">=20"

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/discord",
"version": "2026.5.31",
"version": "2026.6.2",
"description": "OpenClaw Discord channel plugin for channels, DMs, commands, and app events.",
"repository": {
"type": "git",
@@ -10,7 +10,7 @@
"dependencies": {
"@discordjs/voice": "0.19.2",
"discord-api-types": "0.38.48",
"libopus-wasm": "0.1.0",
"libopus-wasm": "0.2.0",
"typebox": "1.1.39",
"undici": "8.3.0",
"ws": "8.21.0"
@@ -20,7 +20,7 @@
"openclaw": "2026.5.28"
},
"peerDependencies": {
"openclaw": ">=2026.5.31"
"openclaw": ">=2026.6.2"
},
"peerDependenciesMeta": {
"openclaw": {
@@ -67,10 +67,10 @@
"allowInvalidConfigRecovery": true
},
"compat": {
"pluginApi": ">=2026.5.31"
"pluginApi": ">=2026.6.2"
},
"build": {
"openclawVersion": "2026.5.31"
"openclawVersion": "2026.6.2"
},
"release": {
"publishToClawHub": true,

View File

@@ -2154,8 +2154,8 @@ describe("DiscordVoiceManager", () => {
expect(entersStateMock).toHaveBeenCalledWith(connection, "signalling", 20_000);
expect(entersStateMock).toHaveBeenCalledWith(connection, "connecting", 20_000);
expect(connection.destroy).toHaveBeenCalledTimes(1);
expect(manager.status()).toStrictEqual([]);
await vi.waitFor(() => expect(connection.destroy).toHaveBeenCalledTimes(1));
await vi.waitFor(() => expect(manager.status()).toStrictEqual([]));
});
it("uses the default reconnect grace before destroying disconnected sessions", async () => {
@@ -2175,8 +2175,8 @@ describe("DiscordVoiceManager", () => {
expect(entersStateMock).toHaveBeenCalledWith(connection, "signalling", 15_000);
expect(entersStateMock).toHaveBeenCalledWith(connection, "connecting", 15_000);
expect(connection.destroy).toHaveBeenCalledTimes(1);
expect(manager.status()).toStrictEqual([]);
await vi.waitFor(() => expect(connection.destroy).toHaveBeenCalledTimes(1));
await vi.waitFor(() => expect(manager.status()).toStrictEqual([]));
});
it("closes realtime sessions when disconnected recovery destroys the connection", async () => {
@@ -2201,9 +2201,9 @@ describe("DiscordVoiceManager", () => {
expect(disconnected).toBeTypeOf("function");
await disconnected?.();
expect(realtimeSessionMock.close).toHaveBeenCalledTimes(1);
expect(connection.destroy).toHaveBeenCalledTimes(1);
expect(manager.status()).toStrictEqual([]);
await vi.waitFor(() => expect(realtimeSessionMock.close).toHaveBeenCalledTimes(1));
await vi.waitFor(() => expect(connection.destroy).toHaveBeenCalledTimes(1));
await vi.waitFor(() => expect(manager.status()).toStrictEqual([]));
});
it("closes realtime sessions when Discord destroys the connection", async () => {

View File

@@ -1774,6 +1774,10 @@ export class DiscordVoiceManager {
logVoiceVerbose(`receive stream ended: ${analysis.message}`);
return;
}
if (analysis.isDecodeCorruption && !analysis.countsAsDecryptFailure) {
logVoiceVerbose(`receive decode skipped: ${analysis.message}`);
return;
}
logger.warn(`discord voice: receive error: ${analysis.message}`);
if (analysis.shouldAttemptPassthrough) {
this.enableDaveReceivePassthrough(

View File

@@ -1,3 +1,4 @@
import { OpusError, OpusErrorCode } from "libopus-wasm";
import { describe, expect, it, vi } from "vitest";
import {
analyzeVoiceReceiveError,
@@ -15,6 +16,7 @@ describe("voice receive recovery", () => {
).toEqual({
message: "Failed to decrypt: DecryptionFailed(UnencryptedWhenPassthroughDisabled)",
isAbortLike: false,
isDecodeCorruption: false,
shouldAttemptPassthrough: true,
countsAsDecryptFailure: true,
});
@@ -24,15 +26,60 @@ describe("voice receive recovery", () => {
expect(analyzeVoiceReceiveError(new Error("memory access out of bounds"))).toEqual({
message: "memory access out of bounds",
isAbortLike: false,
isDecodeCorruption: false,
shouldAttemptPassthrough: false,
countsAsDecryptFailure: true,
});
});
it("treats corrupt Opus packets as non-recoverable decode noise", () => {
expect(
analyzeVoiceReceiveError(
new OpusError(OpusErrorCode.InvalidPacket, "not inspected", "decode"),
),
).toEqual({
message: "not inspected",
isAbortLike: false,
isDecodeCorruption: true,
shouldAttemptPassthrough: false,
countsAsDecryptFailure: false,
});
});
it("treats structurally equivalent Opus errors as decode corruption", () => {
const analysis = analyzeVoiceReceiveError({
name: "OpusError",
message: "libopus decode failed (-4): corrupted stream",
code: OpusErrorCode.InvalidPacket,
codeName: "InvalidPacket",
operation: "decode",
});
expect(analysis).toMatchObject({
isAbortLike: false,
isDecodeCorruption: true,
shouldAttemptPassthrough: false,
countsAsDecryptFailure: false,
});
});
it("does not classify corrupt Opus packet text without the Opus error contract", () => {
expect(
analyzeVoiceReceiveError(new Error("libopus decode failed (-4): corrupted stream")),
).toEqual({
message: "libopus decode failed (-4): corrupted stream",
isAbortLike: false,
isDecodeCorruption: false,
shouldAttemptPassthrough: false,
countsAsDecryptFailure: false,
});
});
it("treats premature stream close as an expected receive end", () => {
expect(analyzeVoiceReceiveError(new Error("Premature close"))).toEqual({
message: "Premature close",
isAbortLike: true,
isDecodeCorruption: false,
shouldAttemptPassthrough: false,
countsAsDecryptFailure: false,
});

View File

@@ -1,3 +1,4 @@
import { OpusErrorCode, isOpusError } from "libopus-wasm";
import { formatErrorMessage } from "openclaw/plugin-sdk/ssrf-runtime";
const DECRYPT_FAILURE_WINDOW_MS = 30_000;
@@ -18,6 +19,7 @@ export type VoiceReceiveRecoveryState = {
type VoiceReceiveErrorAnalysis = {
message: string;
isAbortLike: boolean;
isDecodeCorruption: boolean;
shouldAttemptPassthrough: boolean;
countsAsDecryptFailure: boolean;
};
@@ -80,13 +82,23 @@ function isAbortLikeReceiveError(err: unknown): boolean {
);
}
function isOpusDecodeInvalidPacketError(err: unknown): boolean {
return (
isOpusError(err) &&
err.code === OpusErrorCode.InvalidPacket &&
(err.operation === "decode" || err.operation === "decodeFloat")
);
}
export function analyzeVoiceReceiveError(err: unknown): VoiceReceiveErrorAnalysis {
const message = formatErrorMessage(err);
const normalizedMessage = message.toLowerCase();
const shouldAttemptPassthrough = message.includes(DAVE_PASSTHROUGH_DISABLED_MARKER);
const isWasmMemoryAccessFailure = message.toLowerCase().includes(WASM_MEMORY_ACCESS_MARKER);
const isWasmMemoryAccessFailure = normalizedMessage.includes(WASM_MEMORY_ACCESS_MARKER);
return {
message,
isAbortLike: isAbortLikeReceiveError(err),
isDecodeCorruption: isOpusDecodeInvalidPacketError(err),
shouldAttemptPassthrough,
countsAsDecryptFailure:
message.includes(DECRYPT_FAILURE_MARKER) ||

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/document-extract-plugin",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw local document extraction plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/duckduckgo-plugin",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw DuckDuckGo plugin",
"type": "module",

View File

@@ -1,6 +1,6 @@
{
"name": "@openclaw/elevenlabs-speech",
"version": "2026.5.31",
"version": "2026.6.2",
"private": true,
"description": "OpenClaw ElevenLabs speech plugin",
"type": "module",

Some files were not shown because too many files have changed in this diff Show More