Take a paste as one message, and quieten the transcript A twelve-line paste became twelve messages. Nothing marked where it began or ended, so every newline in it was an enter, and each line steered the turn the line before it had started — the transcript in the report shows `you`, `note: Steering…`, `you`, `note: Steering…` down the screen. The terminal can say. Bracketed paste is on now, so a paste arrives wrapped and its newlines are text; a paste split across two reads is held until its end arrives, because half a paste submitted as a message is the bug this exists to stop. The composer shows the blob as a blob — `first line [+2 more lines]` — since what a reader needs there is how much is waiting and that it goes as one message, not to read it in a one-row field. Then four things asked for in the interface: The role column is gone. It named every entry down the left — `you`, `think`, `coder`, `note`, `tool` — which is a word of chrome per turn saying what the colour already said. In its place is the one thing colour cannot say: a solid dot for an entry that is finished, a pulsing one for a reply still arriving. The trailing caret goes with it, having become a second answer to the same question. The ticker moves twice a second now, because a dot that blinks once a second reads as a dot that is broken. `scrolled` was the one yellow word in a dim row, which reads as a warning about something being wrong rather than a note about where you are. It matches the row now, and the `pgup/pgdn to scroll` hint is gone. 507 tests pass.
Take a paste as one message, and quieten the transcript
Deploy story
What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.
Not deployed through the forge lane
No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.
Changed files
-
modified
docs/assure-repo/false-green-candidates.v1.json -
modified
docs/assure-repo/surface-inventory.v1.json -
modified
packages/openagents-cli/src/coder-ui.ts -
added
packages/openagents-cli/test/coder-paste.test.ts -
modified
packages/openagents-cli/test/coder-ui.test.ts
Diff
5 files changed, +244 -22
docs/assure-repo/false-green-candidates.v1.json modified +1 -1
@@ -4,7 +4,7 @@
| 4 | 4 |
|
| 5 | 5 |
|
| 6 | 6 |
|
| 7 |
|
|
| 7 |
|
|
| 8 | 8 |
|
| 9 | 9 |
|
| 10 | 10 |
|
docs/assure-repo/surface-inventory.v1.json modified +2 -2
@@ -1,7 +1,7 @@
| 1 | 1 |
|
| 2 | 2 |
|
| 3 | 3 |
|
| 4 |
|
|
| 4 |
|
|
| 5 | 5 |
|
| 6 | 6 |
|
| 7 | 7 |
|
packages/openagents-cli/src/coder-ui.ts modified +90 -19
@@ -55,9 +55,23 @@ const ERASE_LINE = "\x1b[K";
| 55 | 55 |
|
| 56 | 56 |
|
| 57 | 57 |
|
| 58 |
|
|
| 59 |
|
|
| 60 |
|
|
| 58 | 61 |
|
| 59 | 62 |
|
| 60 | 63 |
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 61 | 75 |
|
| 62 | 76 |
|
| 63 | 77 |
|
@@ -90,7 +104,16 @@ const SPACER_ROWS = 1;
| 90 | 104 |
|
| 91 | 105 |
|
| 92 | 106 |
|
| 93 |
|
|
| 107 |
|
|
| 108 |
|
|
| 109 |
|
|
| 110 |
|
|
| 111 |
|
|
| 112 |
|
|
| 113 |
|
|
| 114 |
|
|
| 115 |
|
|
| 116 |
|
|
| 94 | 117 |
|
| 95 | 118 |
|
| 96 | 119 |
|
@@ -309,6 +332,13 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 309 | 332 |
|
| 310 | 333 |
|
| 311 | 334 |
|
| 335 |
|
|
| 336 |
|
|
| 337 |
|
|
| 338 |
|
|
| 339 |
|
|
| 340 |
|
|
| 341 |
|
|
| 312 | 342 |
|
| 313 | 343 |
|
| 314 | 344 |
|
@@ -318,6 +348,8 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 318 | 348 |
|
| 319 | 349 |
|
| 320 | 350 |
|
| 351 |
|
|
| 352 |
|
|
| 321 | 353 |
|
| 322 | 354 |
|
| 323 | 355 |
|
@@ -347,7 +379,9 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 347 | 379 |
|
| 348 | 380 |
|
| 349 | 381 |
|
| 350 |
|
|
| 382 |
|
|
| 383 |
|
|
| 384 |
|
|
| 351 | 385 |
|
| 352 | 386 |
|
| 353 | 387 |
|
@@ -366,21 +400,25 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 366 | 400 |
|
| 367 | 401 |
|
| 368 | 402 |
|
| 369 |
|
|
| 403 |
|
|
| 370 | 404 |
|
| 371 |
|
|
| 405 |
|
|
| 372 | 406 |
|
| 373 |
|
|
| 407 |
|
|
| 374 | 408 |
|
| 375 |
|
|
| 409 |
|
|
| 376 | 410 |
|
| 377 |
|
|
| 378 |
|
|
| 379 |
|
|
| 380 |
|
|
| 411 |
|
|
| 412 |
|
|
| 413 |
|
|
| 414 |
|
|
| 415 |
|
|
| 416 |
|
|
| 417 |
|
|
| 418 |
|
|
| 381 | 419 |
|
| 382 | 420 |
|
| 383 |
|
|
| 421 |
|
|
| 384 | 422 |
|
| 385 | 423 |
|
| 386 | 424 |
|
@@ -629,11 +667,21 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 629 | 667 |
|
| 630 | 668 |
|
| 631 | 669 |
|
| 632 |
|
|
| 670 |
|
|
| 671 |
|
|
| 672 |
|
|
| 673 |
|
|
| 674 |
|
|
| 675 |
|
|
| 676 |
|
|
| 677 |
|
|
| 678 |
|
|
| 679 |
|
|
| 680 |
|
|
| 633 | 681 |
|
| 634 |
|
|
| 682 |
|
|
| 635 | 683 |
|
| 636 |
|
|
| 684 |
|
|
| 637 | 685 |
|
| 638 | 686 |
|
| 639 | 687 |
|
@@ -669,7 +717,7 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 669 | 717 |
|
| 670 | 718 |
|
| 671 | 719 |
|
| 672 |
|
|
| 720 |
|
|
| 673 | 721 |
|
| 674 | 722 |
|
| 675 | 723 |
|
@@ -679,7 +727,7 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 679 | 727 |
|
| 680 | 728 |
|
| 681 | 729 |
|
| 682 |
|
|
| 730 |
|
|
| 683 | 731 |
|
| 684 | 732 |
|
| 685 | 733 |
|
@@ -732,10 +780,14 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 732 | 780 |
|
| 733 | 781 |
|
| 734 | 782 |
|
| 783 |
|
|
| 784 |
|
|
| 785 |
|
|
| 735 | 786 |
|
| 736 | 787 |
|
| 788 |
|
|
| 737 | 789 |
|
| 738 |
|
|
| 790 |
|
|
| 739 | 791 |
|
| 740 | 792 |
|
| 741 | 793 |
|
@@ -845,7 +897,9 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 845 | 897 |
|
| 846 | 898 |
|
| 847 | 899 |
|
| 848 |
|
|
| 900 |
|
|
| 901 |
|
|
| 902 |
|
|
| 849 | 903 |
|
| 850 | 904 |
|
| 851 | 905 |
|
@@ -853,6 +907,23 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 853 | 907 |
|
| 854 | 908 |
|
| 855 | 909 |
|
| 910 |
|
|
| 911 |
|
|
| 912 |
|
|
| 913 |
|
|
| 914 |
|
|
| 915 |
|
|
| 916 |
|
|
| 917 |
|
|
| 918 |
|
|
| 919 |
|
|
| 920 |
|
|
| 921 |
|
|
| 922 |
|
|
| 923 |
|
|
| 924 |
|
|
| 925 |
|
|
| 926 |
|
|
| 856 | 927 |
|
| 857 | 928 |
|
| 858 | 929 |
|
@@ -1073,7 +1144,7 @@ export function runCoderUi(session: CoderSession, options: CoderUiOptions): Prom
| 1073 | 1144 |
|
| 1074 | 1145 |
|
| 1075 | 1146 |
|
| 1076 |
|
|
| 1147 |
|
|
| 1077 | 1148 |
|
| 1078 | 1149 |
|
| 1079 | 1150 |
|
packages/openagents-cli/test/coder-paste.test.ts added +87
@@ -0,0 +1,87 @@
| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
|
| 22 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
|
| 30 |
|
|
| 31 |
|
|
| 32 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
|
|
| 38 |
|
|
| 39 |
|
|
| 40 |
|
|
| 41 |
|
|
| 42 |
|
|
| 43 |
|
|
| 44 |
|
|
| 45 |
|
|
| 46 |
|
|
| 47 |
|
|
| 48 |
|
|
| 49 |
|
|
| 50 |
|
|
| 51 |
|
|
| 52 |
|
|
| 53 |
|
|
| 54 |
|
|
| 55 |
|
|
| 56 |
|
|
| 57 |
|
|
| 58 |
|
|
| 59 |
|
|
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
|
|
| 65 |
|
|
| 66 |
|
|
| 67 |
|
|
| 68 |
|
|
| 69 |
|
|
| 70 |
|
|
| 71 |
|
|
| 72 |
|
|
| 73 |
|
|
| 74 |
|
|
| 75 |
|
|
| 76 |
|
|
| 77 |
|
|
| 78 |
|
|
| 79 |
|
|
| 80 |
|
|
| 81 |
|
|
| 82 |
|
|
| 83 |
|
|
| 84 |
|
|
| 85 |
|
|
| 86 |
|
|
| 87 |
|
packages/openagents-cli/test/coder-ui.test.ts modified +64
@@ -901,3 +901,67 @@ describe("quitting with the keyboard protocol on", () => {
| 901 | 901 |
|
| 902 | 902 |
|
| 903 | 903 |
|
| 904 |
|
|
| 905 |
|
|
| 906 |
|
|
| 907 |
|
|
| 908 |
|
|
| 909 |
|
|
| 910 |
|
|
| 911 |
|
|
| 912 |
|
|
| 913 |
|
|
| 914 |
|
|
| 915 |
|
|
| 916 |
|
|
| 917 |
|
|
| 918 |
|
|
| 919 |
|
|
| 920 |
|
|
| 921 |
|
|
| 922 |
|
|
| 923 |
|
|
| 924 |
|
|
| 925 |
|
|
| 926 |
|
|
| 927 |
|
|
| 928 |
|
|
| 929 |
|
|
| 930 |
|
|
| 931 |
|
|
| 932 |
|
|
| 933 |
|
|
| 934 |
|
|
| 935 |
|
|
| 936 |
|
|
| 937 |
|
|
| 938 |
|
|
| 939 |
|
|
| 940 |
|
|
| 941 |
|
|
| 942 |
|
|
| 943 |
|
|
| 944 |
|
|
| 945 |
|
|
| 946 |
|
|
| 947 |
|
|
| 948 |
|
|
| 949 |
|
|
| 950 |
|
|
| 951 |
|
|
| 952 |
|
|
| 953 |
|
|
| 954 |
|
|
| 955 |
|
|
| 956 |
|
|
| 957 |
|
|
| 958 |
|
|
| 959 |
|
|
| 960 |
|
|
| 961 |
|
|
| 962 |
|
|
| 963 |
|
|
| 964 |
|
|
| 965 |
|
|
| 966 |
|
|
| 967 |
|