diff --git a/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-orchestration.workerterminaluserinput-1.json b/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-orchestration.workerterminaluserinput-1.json index 590f406c10b..cc6a3fbb1ea 100644 --- a/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-orchestration.workerterminaluserinput-1.json +++ b/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-orchestration.workerterminaluserinput-1.json @@ -61,6 +61,13 @@ "$rpc": "undefined" } }, + "2744881d0748": { + "name": "terminal-subscribe", + "ordinal": 8, + "value": { + "handle": "terminal-1" + } + }, "31a1ebf3ac68": { "name": "orchestration.workerTerminalUserInput#1", "ordinal": 3, @@ -98,16 +105,6 @@ } } }, - "3dc7f55dee2a": { - "name": "toast", - "ordinal": 7, - "value": { - "durationMs": { - "$rpc": "null" - }, - "message": "Terminal cleared" - } - }, "41eb762c53f0": { "name": "orchestration.workerTerminalUserInput#1", "ordinal": 3, @@ -145,6 +142,43 @@ } } }, + "42b4a7d170de": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "id": "frame-3", + "ok": true, + "result": { + "clear": { + "cleared": true, + "handle": "terminal-1" + } + } + } + } + }, "47c387a75ffc": { "name": "terminal.send#1", "ordinal": 1, @@ -249,6 +283,16 @@ "startedAt": 16 } }, + "7e0ebd472c7b": { + "name": "toast", + "ordinal": 9, + "value": { + "durationMs": { + "$rpc": "null" + }, + "message": "Terminal cleared" + } + }, "8224ccdb2cd8": { "name": "terminal.send#1", "ordinal": 2, @@ -307,6 +351,13 @@ "ordinal": 6, "json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"terminal.clearBuffer\",\"params\":{\"terminal\":\"terminal-1\"}}" }, + "94a34b9a1800": { + "name": "terminal-unsubscribe", + "ordinal": 7, + "value": { + "handle": "terminal-1" + } + }, "94ce15ec36dc": { "name": "orchestration.workerTerminalUserInput#1", "ordinal": 3, @@ -482,7 +533,7 @@ } } }, - "afb61324f54a": { + "bfd73b81d7a1": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -499,7 +550,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -598,40 +649,6 @@ "value": { "$rpc": "undefined" } - }, - "ebaa6b64425b": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-3", - "ok": true, - "result": { - "cleared": true - } - } - } } }, "recording": { @@ -692,7 +709,7 @@ { "id": "terminal-gesture-flush-and-clear.normal:clearing", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "afb61324f54a"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -706,7 +723,7 @@ { "id": "terminal-gesture-flush-and-clear.normal:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -714,7 +731,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -733,7 +750,7 @@ { "id": "terminal-gesture-flush-and-clear.result-absent:clearing", "observation": { - "sender": ["47c387a75ffc", "e24bc71ad7f1", "afb61324f54a"], + "sender": ["47c387a75ffc", "e24bc71ad7f1", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -747,7 +764,7 @@ { "id": "terminal-gesture-flush-and-clear.result-absent:cleared", "observation": { - "sender": ["47c387a75ffc", "e24bc71ad7f1", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "e24bc71ad7f1", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -755,7 +772,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -774,7 +791,7 @@ { "id": "terminal-gesture-flush-and-clear.result-null:clearing", "observation": { - "sender": ["47c387a75ffc", "9c7f27a40956", "afb61324f54a"], + "sender": ["47c387a75ffc", "9c7f27a40956", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -788,7 +805,7 @@ { "id": "terminal-gesture-flush-and-clear.result-null:cleared", "observation": { - "sender": ["47c387a75ffc", "9c7f27a40956", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "9c7f27a40956", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -796,7 +813,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -815,7 +832,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-ok-missing:clearing", "observation": { - "sender": ["47c387a75ffc", "0bbc8e9d2e60", "afb61324f54a"], + "sender": ["47c387a75ffc", "0bbc8e9d2e60", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -829,7 +846,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-ok-missing:cleared", "observation": { - "sender": ["47c387a75ffc", "0bbc8e9d2e60", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "0bbc8e9d2e60", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -837,7 +854,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -856,7 +873,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-string-error:clearing", "observation": { - "sender": ["47c387a75ffc", "41eb762c53f0", "afb61324f54a"], + "sender": ["47c387a75ffc", "41eb762c53f0", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -870,7 +887,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-string-error:cleared", "observation": { - "sender": ["47c387a75ffc", "41eb762c53f0", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "41eb762c53f0", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -878,7 +895,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -897,7 +914,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-object-error:clearing", "observation": { - "sender": ["47c387a75ffc", "8412fcb9c620", "afb61324f54a"], + "sender": ["47c387a75ffc", "8412fcb9c620", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -911,7 +928,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-object-error:cleared", "observation": { - "sender": ["47c387a75ffc", "8412fcb9c620", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "8412fcb9c620", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -919,7 +936,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -938,7 +955,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused:clearing", "observation": { - "sender": ["47c387a75ffc", "dfe8d1bab9c5", "afb61324f54a"], + "sender": ["47c387a75ffc", "dfe8d1bab9c5", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -952,7 +969,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused:cleared", "observation": { - "sender": ["47c387a75ffc", "dfe8d1bab9c5", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "dfe8d1bab9c5", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -960,7 +977,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -979,7 +996,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused-no-message:clearing", "observation": { - "sender": ["47c387a75ffc", "9850afd5b555", "afb61324f54a"], + "sender": ["47c387a75ffc", "9850afd5b555", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -993,7 +1010,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused-no-message:cleared", "observation": { - "sender": ["47c387a75ffc", "9850afd5b555", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "9850afd5b555", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1001,7 +1018,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -1020,7 +1037,7 @@ { "id": "terminal-gesture-flush-and-clear.method-not-found:clearing", "observation": { - "sender": ["47c387a75ffc", "31a1ebf3ac68", "afb61324f54a"], + "sender": ["47c387a75ffc", "31a1ebf3ac68", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1034,7 +1051,7 @@ { "id": "terminal-gesture-flush-and-clear.method-not-found:cleared", "observation": { - "sender": ["47c387a75ffc", "31a1ebf3ac68", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "31a1ebf3ac68", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1042,7 +1059,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -1061,7 +1078,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection:clearing", "observation": { - "sender": ["47c387a75ffc", "aa1058fa6654", "afb61324f54a"], + "sender": ["47c387a75ffc", "aa1058fa6654", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1075,7 +1092,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection:cleared", "observation": { - "sender": ["47c387a75ffc", "aa1058fa6654", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "aa1058fa6654", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1083,7 +1100,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -1102,7 +1119,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection-no-message:clearing", "observation": { - "sender": ["47c387a75ffc", "60ae3b4c26a5", "afb61324f54a"], + "sender": ["47c387a75ffc", "60ae3b4c26a5", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1116,7 +1133,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection-no-message:cleared", "observation": { - "sender": ["47c387a75ffc", "60ae3b4c26a5", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "60ae3b4c26a5", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -1124,7 +1141,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } } ] diff --git a/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.clearbuffer-1.json b/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.clearbuffer-1.json index 14505cc14c0..bd1827e21fb 100644 --- a/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.clearbuffer-1.json +++ b/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.clearbuffer-1.json @@ -17,7 +17,7 @@ "$rpc": "null" } }, - "0db561233383": { + "15e2e6598861": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -34,44 +34,7 @@ { "name": "options", "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-3", - "ok": true, - "result": { - "error": { - "message": "inner refused" - }, - "ok": false - } - } - } - }, - "13e21e9d5a19": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -89,7 +52,22 @@ } } }, - "14826318e3f0": { + "204da356c8b7": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "$rpc": "undefined" + } + }, + "2744881d0748": { + "name": "terminal-subscribe", + "ordinal": 8, + "value": { + "handle": "terminal-1" + } + }, + "4176bcebcf7b": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -106,7 +84,78 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "id": "frame-3", + "ok": true, + "result": { + "error": "refused" + } + } + } + }, + "42b4a7d170de": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "id": "frame-3", + "ok": true, + "result": { + "clear": { + "cleared": true, + "handle": "terminal-1" + } + } + } + } + }, + "4696dadf3552": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true } } ], @@ -121,55 +170,6 @@ } } }, - "18f37862e26f": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-3", - "ok": true - } - } - }, - "204da356c8b7": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "$rpc": "undefined" - } - }, - "3dc7f55dee2a": { - "name": "toast", - "ordinal": 7, - "value": { - "durationMs": { - "$rpc": "null" - }, - "message": "Terminal cleared" - } - }, "47c387a75ffc": { "name": "terminal.send#1", "ordinal": 1, @@ -212,7 +212,7 @@ } } }, - "4dd92d5c81be": { + "5f9d4dda97d0": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -229,41 +229,7 @@ { "name": "options", "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-3", - "ok": true, - "result": { - "$rpc": "null" - } - } - } - }, - "52f4b33bfffe": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -273,8 +239,8 @@ "settledAt": 16, "value": { "error": { - "code": "refused", - "message": "" + "code": "method_not_found", + "message": "Unknown method" }, "id": "frame-3", "ok": false @@ -309,6 +275,16 @@ "startedAt": 16 } }, + "7e0ebd472c7b": { + "name": "toast", + "ordinal": 9, + "value": { + "durationMs": { + "$rpc": "null" + }, + "message": "Terminal cleared" + } + }, "8224ccdb2cd8": { "name": "terminal.send#1", "ordinal": 2, @@ -318,7 +294,17 @@ "status": "pending", "startedAt": 16 }, - "85797d45b4ec": { + "85a38010bc83": { + "name": "orchestration.workerTerminalUserInput#1", + "ordinal": 4, + "json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"orchestration.workerTerminalUserInput\",\"params\":{\"terminal\":\"terminal-1\"}}" + }, + "8716af94ca80": { + "name": "terminal.clearBuffer#1", + "ordinal": 6, + "json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"terminal.clearBuffer\",\"params\":{\"terminal\":\"terminal-1\"}}" + }, + "8f3a96ddce74": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -335,7 +321,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -345,17 +331,12 @@ "settledAt": 16, "error": { "category": "Error", - "message": "transport failure", + "message": "Connection closed", "isRpcDeliveryUnknown": true } } }, - "85a38010bc83": { - "name": "orchestration.workerTerminalUserInput#1", - "ordinal": 4, - "json": "{\"id\":\"frame-2\",\"deviceToken\":\"recording-device\",\"method\":\"orchestration.workerTerminalUserInput\",\"params\":{\"terminal\":\"terminal-1\"}}" - }, - "86e68519e4fc": { + "8fb1e35238ae": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -372,7 +353,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -382,17 +363,51 @@ "settledAt": 16, "value": { "id": "frame-3", - "ok": true, - "result": { - "error": "refused" - } + "ok": true } } }, - "8716af94ca80": { + "949a86468951": { "name": "terminal.clearBuffer#1", - "ordinal": 6, - "json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"terminal.clearBuffer\",\"params\":{\"terminal\":\"terminal-1\"}}" + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "error": { + "code": "refused", + "message": "outer refused" + }, + "id": "frame-3", + "ok": false + } + } + }, + "94a34b9a1800": { + "name": "terminal-unsubscribe", + "ordinal": 7, + "value": { + "handle": "terminal-1" + } }, "94ce15ec36dc": { "name": "orchestration.workerTerminalUserInput#1", @@ -430,6 +445,41 @@ } } }, + "985c83a876c6": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "error": { + "code": "refused", + "message": "" + }, + "id": "frame-3", + "ok": false + } + } + }, "9fa6cd0b7fa0": { "name": "terminal.send#1", "ordinal": 1, @@ -462,7 +512,7 @@ "startedAt": 0 } }, - "a2ee798dd5e4": { + "a99e20d3b060": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -479,39 +529,7 @@ { "name": "options", "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "rejected", - "startedAt": 16, - "settledAt": 16, - "error": { - "category": "Error", - "message": "Connection closed", - "isRpcDeliveryUnknown": true - } - } - }, - "af47e4950d3c": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -520,16 +538,15 @@ "startedAt": 16, "settledAt": 16, "value": { - "error": { - "code": "refused", - "message": "outer refused" - }, "id": "frame-3", - "ok": false + "ok": true, + "result": { + "$rpc": "null" + } } } }, - "afb61324f54a": { + "bfd73b81d7a1": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -546,7 +563,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -568,7 +585,7 @@ "$rpc": "null" } }, - "e9ab8b56056e": { + "e14358e73867": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -585,50 +602,7 @@ { "name": "options", "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "error": { - "code": "method_not_found", - "message": "Unknown method" - }, - "id": "frame-3", - "ok": false - } - } - }, - "eb79a9b3682a": { - "status": "fulfilled", - "startedAt": 0, - "settledAt": 0, - "value": { - "$rpc": "undefined" - } - }, - "ebaa6b64425b": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -640,11 +614,54 @@ "id": "frame-3", "ok": true, "result": { - "cleared": true + "error": { + "message": "inner refused" + }, + "ok": false } } } }, + "eb79a9b3682a": { + "status": "fulfilled", + "startedAt": 0, + "settledAt": 0, + "value": { + "$rpc": "undefined" + } + }, + "f0e97f295e31": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "rejected", + "startedAt": 16, + "settledAt": 16, + "error": { + "category": "Error", + "message": "transport failure", + "isRpcDeliveryUnknown": true + } + } + }, "f9995c5eb101": { "name": "toast", "ordinal": 7, @@ -712,7 +729,7 @@ { "id": "terminal-gesture-flush-and-clear.prelude:clearing", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "afb61324f54a"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -726,7 +743,7 @@ { "id": "terminal-gesture-flush-and-clear.prelude:cleanup", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "a2ee798dd5e4"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "8f3a96ddce74"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -740,7 +757,7 @@ { "id": "terminal-gesture-flush-and-clear.normal:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -748,13 +765,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { "id": "terminal-gesture-flush-and-clear.result-absent:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "18f37862e26f"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "8fb1e35238ae"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -762,13 +779,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.result-null:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "4dd92d5c81be"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "a99e20d3b060"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -776,13 +793,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.inner-ok-missing:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "86e68519e4fc"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "4176bcebcf7b"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -790,13 +807,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.inner-false-string-error:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "13e21e9d5a19"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "15e2e6598861"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -804,13 +821,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.inner-false-object-error:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "0db561233383"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "e14358e73867"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -818,13 +835,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.outer-refused:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "af47e4950d3c"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "949a86468951"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -832,13 +849,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.outer-refused-no-message:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "52f4b33bfffe"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "985c83a876c6"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -846,13 +863,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.method-not-found:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "e9ab8b56056e"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "5f9d4dda97d0"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -860,13 +877,13 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["f9995c5eb101"] } }, { "id": "terminal-gesture-flush-and-clear.transport-rejection:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "85797d45b4ec"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "f0e97f295e31"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -880,7 +897,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection-no-message:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "14826318e3f0"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "4696dadf3552"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", diff --git a/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.send-1.json b/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.send-1.json index a90bdebc532..bb4d39f1299 100644 --- a/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.send-1.json +++ b/mobile/rpc-foundation/goldens/matrix-session.terminal-gesture-input-terminal.send-1.json @@ -54,40 +54,6 @@ "$rpc": "null" } }, - "165d659fda65": { - "name": "terminal.clearBuffer#1", - "ordinal": 3, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-2", - "ok": true, - "result": { - "cleared": true - } - } - } - }, "18ae72c963d5": { "name": "terminal.send#1", "ordinal": 1, @@ -177,6 +143,13 @@ } } }, + "2744881d0748": { + "name": "terminal-subscribe", + "ordinal": 8, + "value": { + "handle": "terminal-1" + } + }, "3a2f96d25da8": { "name": "terminal.send#1", "ordinal": 1, @@ -268,6 +241,43 @@ "message": "Terminal cleared" } }, + "42b4a7d170de": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "id": "frame-3", + "ok": true, + "result": { + "clear": { + "cleared": true, + "handle": "terminal-1" + } + } + } + } + }, "47c387a75ffc": { "name": "terminal.send#1", "ordinal": 1, @@ -310,7 +320,7 @@ } } }, - "5ec72f058605": { + "4b5c402c0aac": { "name": "terminal.clearBuffer#1", "ordinal": 3, "args": [ @@ -327,7 +337,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -336,6 +346,50 @@ "startedAt": 16 } }, + "4d7959cb9208": { + "name": "terminal.clearBuffer#1", + "ordinal": 3, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" + }, + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "id": "frame-2", + "ok": true, + "result": { + "clear": { + "cleared": true, + "handle": "terminal-1" + } + } + } + } + }, + "70f80fc43078": { + "name": "terminal-subscribe", + "ordinal": 6, + "value": { + "handle": "terminal-1" + } + }, "77d8a44e0dcc": { "name": "orchestration.workerTerminalUserInput#1", "ordinal": 3, @@ -364,6 +418,16 @@ "startedAt": 16 } }, + "7e0ebd472c7b": { + "name": "toast", + "ordinal": 9, + "value": { + "durationMs": { + "$rpc": "null" + }, + "message": "Terminal cleared" + } + }, "8224ccdb2cd8": { "name": "terminal.send#1", "ordinal": 2, @@ -464,6 +528,13 @@ } } }, + "94a34b9a1800": { + "name": "terminal-unsubscribe", + "ordinal": 7, + "value": { + "handle": "terminal-1" + } + }, "94ce15ec36dc": { "name": "orchestration.workerTerminalUserInput#1", "ordinal": 3, @@ -573,17 +644,14 @@ "startedAt": 0 } }, - "a1ae5051ed70": { - "name": "toast", + "a8bcca91a365": { + "name": "terminal-unsubscribe", "ordinal": 5, "value": { - "durationMs": { - "$rpc": "null" - }, - "message": "Terminal cleared" + "handle": "terminal-1" } }, - "afb61324f54a": { + "bfd73b81d7a1": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -600,7 +668,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -676,40 +744,6 @@ "$rpc": "undefined" } }, - "ebaa6b64425b": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-3", - "ok": true, - "result": { - "cleared": true - } - } - } - }, "eecb4c1a0308": { "name": "terminal.send#1", "ordinal": 1, @@ -807,7 +841,7 @@ { "id": "terminal-gesture-flush-and-clear.normal:clearing", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "afb61324f54a"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -821,7 +855,7 @@ { "id": "terminal-gesture-flush-and-clear.normal:cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -829,7 +863,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } }, { @@ -861,7 +895,7 @@ { "id": "terminal-gesture-flush-and-clear.result-absent:clearing", "observation": { - "sender": ["038694606b99", "5ec72f058605"], + "sender": ["038694606b99", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -875,7 +909,7 @@ { "id": "terminal-gesture-flush-and-clear.result-absent:cleared", "observation": { - "sender": ["038694606b99", "165d659fda65"], + "sender": ["038694606b99", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -883,7 +917,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -915,7 +949,7 @@ { "id": "terminal-gesture-flush-and-clear.result-null:clearing", "observation": { - "sender": ["3a2f96d25da8", "5ec72f058605"], + "sender": ["3a2f96d25da8", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -929,7 +963,7 @@ { "id": "terminal-gesture-flush-and-clear.result-null:cleared", "observation": { - "sender": ["3a2f96d25da8", "165d659fda65"], + "sender": ["3a2f96d25da8", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -937,7 +971,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -969,7 +1003,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-ok-missing:clearing", "observation": { - "sender": ["8cc2f30cc0d2", "5ec72f058605"], + "sender": ["8cc2f30cc0d2", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -983,7 +1017,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-ok-missing:cleared", "observation": { - "sender": ["8cc2f30cc0d2", "165d659fda65"], + "sender": ["8cc2f30cc0d2", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -991,7 +1025,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1023,7 +1057,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-string-error:clearing", "observation": { - "sender": ["3ac9be406587", "5ec72f058605"], + "sender": ["3ac9be406587", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1037,7 +1071,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-string-error:cleared", "observation": { - "sender": ["3ac9be406587", "165d659fda65"], + "sender": ["3ac9be406587", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1045,7 +1079,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1077,7 +1111,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-object-error:clearing", "observation": { - "sender": ["2198adee8c06", "5ec72f058605"], + "sender": ["2198adee8c06", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1091,7 +1125,7 @@ { "id": "terminal-gesture-flush-and-clear.inner-false-object-error:cleared", "observation": { - "sender": ["2198adee8c06", "165d659fda65"], + "sender": ["2198adee8c06", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1099,7 +1133,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1131,7 +1165,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused:clearing", "observation": { - "sender": ["8d84d72cf6d5", "5ec72f058605"], + "sender": ["8d84d72cf6d5", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1145,7 +1179,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused:cleared", "observation": { - "sender": ["8d84d72cf6d5", "165d659fda65"], + "sender": ["8d84d72cf6d5", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1153,7 +1187,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1185,7 +1219,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused-no-message:clearing", "observation": { - "sender": ["94fa272beafb", "5ec72f058605"], + "sender": ["94fa272beafb", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1199,7 +1233,7 @@ { "id": "terminal-gesture-flush-and-clear.outer-refused-no-message:cleared", "observation": { - "sender": ["94fa272beafb", "165d659fda65"], + "sender": ["94fa272beafb", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1207,7 +1241,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1239,7 +1273,7 @@ { "id": "terminal-gesture-flush-and-clear.method-not-found:clearing", "observation": { - "sender": ["e1076775e5c2", "5ec72f058605"], + "sender": ["e1076775e5c2", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1253,7 +1287,7 @@ { "id": "terminal-gesture-flush-and-clear.method-not-found:cleared", "observation": { - "sender": ["e1076775e5c2", "165d659fda65"], + "sender": ["e1076775e5c2", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1261,7 +1295,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1293,7 +1327,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection:clearing", "observation": { - "sender": ["18ae72c963d5", "5ec72f058605"], + "sender": ["18ae72c963d5", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1307,7 +1341,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection:cleared", "observation": { - "sender": ["18ae72c963d5", "165d659fda65"], + "sender": ["18ae72c963d5", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1315,7 +1349,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } }, { @@ -1347,7 +1381,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection-no-message:clearing", "observation": { - "sender": ["eecb4c1a0308", "5ec72f058605"], + "sender": ["eecb4c1a0308", "4b5c402c0aac"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1361,7 +1395,7 @@ { "id": "terminal-gesture-flush-and-clear.transport-rejection-no-message:cleared", "observation": { - "sender": ["eecb4c1a0308", "165d659fda65"], + "sender": ["eecb4c1a0308", "4d7959cb9208"], "payloads": ["8224ccdb2cd8", "d9c52be2f839"], "settlements": { "mount": "eb79a9b3682a", @@ -1369,7 +1403,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["a1ae5051ed70"] + "effects": ["a8bcca91a365", "70f80fc43078", "3dc7f55dee2a"] } } ] diff --git a/mobile/rpc-foundation/goldens/terminal-gesture-flush-and-clear.json b/mobile/rpc-foundation/goldens/terminal-gesture-flush-and-clear.json index 1692ab6a12b..6767773a754 100644 --- a/mobile/rpc-foundation/goldens/terminal-gesture-flush-and-clear.json +++ b/mobile/rpc-foundation/goldens/terminal-gesture-flush-and-clear.json @@ -25,14 +25,48 @@ "$rpc": "undefined" } }, - "3dc7f55dee2a": { - "name": "toast", - "ordinal": 7, + "2744881d0748": { + "name": "terminal-subscribe", + "ordinal": 8, "value": { - "durationMs": { - "$rpc": "null" + "handle": "terminal-1" + } + }, + "42b4a7d170de": { + "name": "terminal.clearBuffer#1", + "ordinal": 5, + "args": [ + { + "name": "method", + "value": "terminal.clearBuffer" }, - "message": "Terminal cleared" + { + "name": "params", + "value": { + "terminal": "terminal-1" + } + }, + { + "name": "options", + "value": { + "failWhenDisconnected": true + } + } + ], + "settlement": { + "status": "fulfilled", + "startedAt": 16, + "settledAt": 16, + "value": { + "id": "frame-3", + "ok": true, + "result": { + "clear": { + "cleared": true, + "handle": "terminal-1" + } + } + } } }, "47c387a75ffc": { @@ -105,6 +139,16 @@ "startedAt": 16 } }, + "7e0ebd472c7b": { + "name": "toast", + "ordinal": 9, + "value": { + "durationMs": { + "$rpc": "null" + }, + "message": "Terminal cleared" + } + }, "8224ccdb2cd8": { "name": "terminal.send#1", "ordinal": 2, @@ -124,6 +168,13 @@ "ordinal": 6, "json": "{\"id\":\"frame-3\",\"deviceToken\":\"recording-device\",\"method\":\"terminal.clearBuffer\",\"params\":{\"terminal\":\"terminal-1\"}}" }, + "94a34b9a1800": { + "name": "terminal-unsubscribe", + "ordinal": 7, + "value": { + "handle": "terminal-1" + } + }, "94ce15ec36dc": { "name": "orchestration.workerTerminalUserInput#1", "ordinal": 3, @@ -192,7 +243,7 @@ "startedAt": 0 } }, - "afb61324f54a": { + "bfd73b81d7a1": { "name": "terminal.clearBuffer#1", "ordinal": 5, "args": [ @@ -209,7 +260,7 @@ { "name": "options", "value": { - "$rpc": "absent" + "failWhenDisconnected": true } } ], @@ -238,40 +289,6 @@ "value": { "$rpc": "undefined" } - }, - "ebaa6b64425b": { - "name": "terminal.clearBuffer#1", - "ordinal": 5, - "args": [ - { - "name": "method", - "value": "terminal.clearBuffer" - }, - { - "name": "params", - "value": { - "terminal": "terminal-1" - } - }, - { - "name": "options", - "value": { - "$rpc": "absent" - } - } - ], - "settlement": { - "status": "fulfilled", - "startedAt": 16, - "settledAt": 16, - "value": { - "id": "frame-3", - "ok": true, - "result": { - "cleared": true - } - } - } } }, "recording": { @@ -332,7 +349,7 @@ { "id": "clearing", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "afb61324f54a"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "bfd73b81d7a1"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -346,7 +363,7 @@ { "id": "cleared", "observation": { - "sender": ["47c387a75ffc", "94ce15ec36dc", "ebaa6b64425b"], + "sender": ["47c387a75ffc", "94ce15ec36dc", "42b4a7d170de"], "payloads": ["8224ccdb2cd8", "85a38010bc83", "8716af94ca80"], "settlements": { "mount": "eb79a9b3682a", @@ -354,7 +371,7 @@ "clear": "204da356c8b7" }, "state": "0cc3e25ebff5", - "effects": ["3dc7f55dee2a"] + "effects": ["94a34b9a1800", "2744881d0748", "7e0ebd472c7b"] } } ] diff --git a/mobile/rpc-foundation/pilot-scenarios.json b/mobile/rpc-foundation/pilot-scenarios.json index ae927039580..ede0fa55e2a 100644 --- a/mobile/rpc-foundation/pilot-scenarios.json +++ b/mobile/rpc-foundation/pilot-scenarios.json @@ -21487,7 +21487,7 @@ "reply": { "ok": true, "result": { - "cleared": true + "clear": { "handle": "terminal-1", "cleared": true } } } }, diff --git a/mobile/src/session/mobile-terminal-clear-acknowledgement.test.tsx b/mobile/src/session/mobile-terminal-clear-acknowledgement.test.tsx new file mode 100644 index 00000000000..28f69d6171f --- /dev/null +++ b/mobile/src/session/mobile-terminal-clear-acknowledgement.test.tsx @@ -0,0 +1,167 @@ +import { createElement } from 'react' +import { act, create } from 'react-test-renderer' +import { describe, expect, it, vi } from 'vitest' +import type { RpcResponse } from '../transport/types' +import { useMobileSessionTerminalInput } from './use-mobile-session-terminal-input' + +function mountClear(sendRequest: () => Promise, opts: { subscribed?: boolean } = {}) { + let generation = 1 + const client = { sendRequest, getGeneration: () => generation } + const clear = vi.fn() + const terminal = { clear } + let currentTerminal = terminal + const clientRef = { current: client } + const showToast = vi.fn() + const unsubscribeTerminal = vi.fn() + const subscribeToTerminal = vi.fn() + const terminalUnsubsRef = { + current: new Map void>(opts.subscribed === false ? [] : [['term', () => {}]]) + } + let actions: ReturnType | undefined + function Harness() { + actions = useMobileSessionTerminalInput( + // oxlint-disable-next-line typescript/consistent-type-assertions -- SAFETY: This fixture supplies every field reached by handleClearTerminal. + { + client, + clientRef, + showToast, + getTerminalRef: () => currentTerminal, + unsubscribeTerminal, + subscribeToTerminal, + terminalUnsubsRef + } as unknown as Parameters[0] + ) + return null + } + let renderer: ReturnType | undefined + act(() => { + renderer = create(createElement(Harness)) + }) + return { + clear, + showToast, + unsubscribeTerminal, + subscribeToTerminal, + clearHost: () => + actions?.handleClearTerminal({ + handle: 'term', + title: 'Shell', + isActive: true + }), + replaceTerminal: () => { + currentTerminal = { clear: vi.fn() } + }, + migrateAuthority: () => { + generation += 1 + }, + replaceClient: () => { + clientRef.current = { ...client } + }, + dispose: () => act(() => renderer?.unmount()) + } +} + +function deferredReply() { + let resolve: (reply: RpcResponse) => void = () => {} + const promise = new Promise((done) => { + resolve = done + }) + return { promise, resolve } +} +const cleared: RpcResponse = { + id: 'clear', + ok: true, + result: { clear: { handle: 'term', cleared: true } } +} + +describe('mobile terminal buffer clear acknowledgement', () => { + it.each([ + { + id: 'refused', + ok: false, + error: { code: 'not_found', message: 'Terminal missing' } + }, + { + id: 'not-cleared', + ok: true, + result: { clear: { handle: 'term', cleared: false } } + }, + { id: 'incompatible', ok: true, result: {} } + ] satisfies RpcResponse[])( + 'preserves local output when the host does not clear it: $id', + async (reply) => { + const view = mountClear(async () => reply) + try { + await view.clearHost() + expect(view.clear).not.toHaveBeenCalled() + expect(view.subscribeToTerminal).not.toHaveBeenCalled() + expect(view.showToast.mock.calls).toEqual([["Couldn't clear terminal", 1500]]) + } finally { + view.dispose() + } + } + ) + + it('refreshes the ordered host snapshot after acknowledgement instead of erasing current output', async () => { + const reply = deferredReply() + const view = mountClear(() => reply.promise) + try { + const pending = view.clearHost() + expect(view.subscribeToTerminal).not.toHaveBeenCalled() + expect(view.showToast).not.toHaveBeenCalled() + reply.resolve(cleared) + await pending + expect(view.clear).not.toHaveBeenCalled() + expect(view.unsubscribeTerminal).toHaveBeenCalledWith('term') + expect(view.subscribeToTerminal).toHaveBeenCalledWith('term') + expect(view.showToast.mock.calls).toEqual([['Terminal cleared']]) + } finally { + view.dispose() + } + }) + + it('leaves an unsubscribed tab to draw its snapshot when it next subscribes', async () => { + const view = mountClear(async () => cleared, { subscribed: false }) + try { + await view.clearHost() + expect(view.subscribeToTerminal).not.toHaveBeenCalled() + expect(view.showToast.mock.calls).toEqual([['Terminal cleared']]) + } finally { + view.dispose() + } + }) + + it.each(['replaceTerminal', 'migrateAuthority'] as const)( + 'still refreshes when the clear is accepted after %s', + async (change) => { + const reply = deferredReply() + const view = mountClear(() => reply.promise) + try { + const pending = view.clearHost() + view[change]() + reply.resolve(cleared) + await pending + expect(view.subscribeToTerminal).toHaveBeenCalledWith('term') + expect(view.showToast.mock.calls).toEqual([['Terminal cleared']]) + } finally { + view.dispose() + } + } + ) + + it('ignores a clear acknowledgement after the client is replaced', async () => { + const reply = deferredReply() + const view = mountClear(() => reply.promise) + try { + const pending = view.clearHost() + view.replaceClient() + reply.resolve(cleared) + await pending + expect(view.clear).not.toHaveBeenCalled() + expect(view.subscribeToTerminal).not.toHaveBeenCalled() + expect(view.showToast).not.toHaveBeenCalled() + } finally { + view.dispose() + } + }) +}) diff --git a/mobile/src/session/use-mobile-session-terminal-input.ts b/mobile/src/session/use-mobile-session-terminal-input.ts index ccc8ba943cc..36031079c31 100644 --- a/mobile/src/session/use-mobile-session-terminal-input.ts +++ b/mobile/src/session/use-mobile-session-terminal-input.ts @@ -45,9 +45,10 @@ export function useMobileSessionTerminalInput(scope: MobileSessionFileActionsMod sendLiveInputClick, sendLiveTerminalInputRef, showToast, - getTerminalRef, hostQueryReplyInputSupportedRef, - hostProgramStatusSupportedRef + hostProgramStatusSupportedRef, + unsubscribeTerminal, + subscribeToTerminal } = scope const toggleLiveInput = useCallback(() => { if (!activeHandle) { @@ -242,13 +243,31 @@ export function useMobileSessionTerminalInput(scope: MobileSessionFileActionsMod if (!client) { return } - getTerminalRef(target.handle)?.clear() + // Why: only a different client is stale; the WebView handle is rebuilt on re-render and a path cutover keeps the same host. + const isCurrent = () => clientRef.current === client try { - // Reply is intentionally unread; historical success feedback follows any fulfilled envelope, including refusal. - await terminalBufferClear.request(client, { terminal: target.handle }) + const response = await terminalBufferClear.request( + client, + { terminal: target.handle }, + { failWhenDisconnected: true } + ) + if (!isCurrent()) { + return + } + if (terminalBufferClear.interpret(response) !== true) { + showToast("Couldn't clear terminal", 1500) + return + } + // Why: an unsubscribed tab draws a fresh snapshot when it next subscribes; subscribing it here would leak a background stream. + if (terminalUnsubsRef.current.has(target.handle)) { + unsubscribeTerminal(target.handle) + subscribeToTerminal(target.handle) + } showToast('Terminal cleared') } catch { - showToast("Couldn't clear terminal", 1500) + if (isCurrent()) { + showToast("Couldn't clear terminal", 1500) + } } } return { diff --git a/mobile/src/terminal/mobile-terminal-operations.ts b/mobile/src/terminal/mobile-terminal-operations.ts index 3251d844fa6..8359681fa36 100644 --- a/mobile/src/terminal/mobile-terminal-operations.ts +++ b/mobile/src/terminal/mobile-terminal-operations.ts @@ -2,6 +2,7 @@ import { bindDeferredRpcOperation, defineRpcOperation } from '../transport/rpc-o import { rpcResultVariant } from '../transport/rpc-operation-result-reader' import { terminalAutoRestoreFitSchema, + terminalBufferClearedSchema, terminalSendAcceptedSchema, terminalViewportUpdatedSchema, terminalWriteUnreadReplySchema @@ -60,13 +61,13 @@ export const workerTerminalTakeoverReport = bindDeferredRpcOperation( }) ) -// Preserve legacy clear semantics: fulfilled replies report success; only transport rejection reaches failure copy. +/** A clear is successful only when the host confirms its buffer was cleared. */ export const terminalBufferClear = bindDeferredRpcOperation( defineRpcOperation({ - name: 'terminal.clear-buffer-or-skip', + name: 'terminal.clear-buffer', method: 'terminal.clearBuffer', - acceptance: 'success-result-or-skip', + acceptance: 'object-result-or-null', barrier: 'after-caller-barrier', - read: rpcResultVariant('terminal-buffer-cleared', terminalWriteUnreadReplySchema) + read: rpcResultVariant('terminal-buffer-cleared', terminalBufferClearedSchema) }) ) diff --git a/mobile/src/terminal/terminal-reply-schema.ts b/mobile/src/terminal/terminal-reply-schema.ts index b2c7f1f0466..4a1ef28996e 100644 --- a/mobile/src/terminal/terminal-reply-schema.ts +++ b/mobile/src/terminal/terminal-reply-schema.ts @@ -21,5 +21,9 @@ export const terminalViewportUpdatedSchema = z export const terminalAutoRestoreFitSchema = z.looseObject({ ms: z.number().nullable() }) -// Payloads are unread; requiring changed/clear fields would reject hosts without affecting any consumer. +export const terminalBufferClearedSchema = z + .looseObject({ clear: z.looseObject({ cleared: z.boolean() }) }) + .transform((reply) => reply.clear.cleared) + +// The worker-takeover report's `{ changed }` payload is unread; requiring it would reject hosts without affecting any consumer. export const terminalWriteUnreadReplySchema = z.unknown() diff --git a/mobile/src/test-support/rpc-recording/adapters/session-terminal-gesture-mount-adapters.ts b/mobile/src/test-support/rpc-recording/adapters/session-terminal-gesture-mount-adapters.ts index cf374606d8c..ecfd876f1c0 100644 --- a/mobile/src/test-support/rpc-recording/adapters/session-terminal-gesture-mount-adapters.ts +++ b/mobile/src/test-support/rpc-recording/adapters/session-terminal-gesture-mount-adapters.ts @@ -59,12 +59,17 @@ export function sessionTerminalGestureMountAdapters( terminalGestureInputInFlightRef: inFlight, liveInputRef: { current: null }, liveInputFocusTimerRef: { current: null }, - terminalUnsubsRef: { current: new Map() }, + terminalUnsubsRef: { current: new Map([[HANDLE, () => {}]]) }, hostQueryReplyInputSupportedRef: { current: false }, hostProgramStatusSupportedRef: { current: false }, clearPendingLiveInputCommit: () => {}, toggleTerminalLiveInput: () => false, getTerminalRef: () => undefined, + unsubscribeTerminal: (handle) => effect('terminal-unsubscribe', { handle }), + subscribeToTerminal: (handle) => { + effect('terminal-subscribe', { handle }) + return true + }, showToast: (message: string, durationMs?: number) => effect('toast', { message, durationMs: durationMs ?? null }) })