@spzxg/cli-ui 0.6.6 → 0.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/README.md +79 -20
  3. package/dist/cli-ui-embed-CB7ibAtF.js +49558 -0
  4. package/dist/{cli-ui-index-b8wF7wrN.js → cli-ui-index-BmwOLWFI.js} +2 -2
  5. package/dist/{cli-ui-jszip.min-ggP8OokP.js → cli-ui-jszip.min-BKNOJnhm.js} +1 -1
  6. package/dist/{cli-ui-jszip.min-B0uLrCHg.js → cli-ui-jszip.min-Cq0WjNYb.js} +2 -2
  7. package/dist/{cli-ui-xlsx-DEDdHrJJ.js → cli-ui-xlsx-Sl7ypvSe.js} +1 -1
  8. package/dist/cli-ui.css +1 -1
  9. package/dist/cli-ui.js +1 -1
  10. package/package.json +3 -1
  11. package/src/board/CliBoard.tsx +128 -100
  12. package/src/board/FileViewer.tsx +259 -132
  13. package/src/board/FilesPane.tsx +129 -40
  14. package/src/board/HtmlReadingPreview.tsx +52 -0
  15. package/src/board/MarkdownPreview.tsx +134 -0
  16. package/src/board/PanelControls.tsx +19 -7
  17. package/src/board/fileKind.ts +138 -0
  18. package/src/board/fileOps.ts +9 -2
  19. package/src/board/fileScope.ts +29 -0
  20. package/src/board/fileSync.ts +343 -0
  21. package/src/board/fileSyncCache.ts +250 -0
  22. package/src/board/fileSyncProcessor.ts +71 -0
  23. package/src/board/fileSyncQueue.ts +56 -0
  24. package/src/board/fileSyncTransport.ts +85 -0
  25. package/src/board/fileWatch.ts +177 -76
  26. package/src/board/folderDownload.ts +39 -5
  27. package/src/board/frameQuote.ts +10 -8
  28. package/src/board/htmlReading.ts +148 -0
  29. package/src/board/textLoad.ts +14 -39
  30. package/src/board/useBoardUpload.tsx +51 -0
  31. package/src/board/useBoardVisibility.ts +35 -0
  32. package/src/board/workspace.ts +38 -6
  33. package/src/chat/CliChat.tsx +86 -46
  34. package/src/chat/Composer.tsx +52 -20
  35. package/src/chat/GroupChat.tsx +113 -0
  36. package/src/chat/RunControls.tsx +132 -42
  37. package/src/chat/draft.ts +5 -2
  38. package/src/core/blocks.ts +2 -1
  39. package/src/core/client.ts +44 -57
  40. package/src/core/documentUpload.ts +196 -0
  41. package/src/core/store.ts +71 -14
  42. package/src/core/types.ts +1 -1
  43. package/src/index.ts +3 -0
  44. package/src/msglist/CliMsgList.tsx +9 -2
  45. package/src/operator/node/Chat.tsx +7 -8
  46. package/src/operator/node/Composer.tsx +99 -72
  47. package/src/operator/node/Orchestrator.tsx +1 -1
  48. package/src/operator/node/SessionRail.tsx +71 -32
  49. package/src/operator/node/SessionView.tsx +25 -25
  50. package/src/operator/node/Transcript.tsx +21 -9
  51. package/src/operator/node/boardBackend.ts +0 -19
  52. package/src/operator/node/boardEvents.ts +21 -3
  53. package/src/operator/node/boardState.ts +18 -1
  54. package/src/operator/node/boardWorkspace.ts +4 -1
  55. package/src/operator/node/composerDraft.ts +6 -2
  56. package/src/operator/node/format.ts +4 -2
  57. package/src/operator/node/liveStream.ts +14 -2
  58. package/src/operator/node/useTaskStream.ts +3 -1
  59. package/src/operator.base.css +141 -38
  60. package/src/operator.css +141 -38
  61. package/src/styles.css +248 -34
  62. package/src/ui/Markdown.tsx +2 -2
  63. package/src/ui/Popover.tsx +25 -12
  64. package/src/ui/QueuedMessages.tsx +69 -0
  65. package/src/ui/ReferenceCard.tsx +28 -0
  66. package/src/ui/TextBlock.tsx +6 -4
  67. package/src/ui/Transcript.tsx +20 -10
  68. package/src/ui/UploadProgress.tsx +46 -0
  69. package/src/ui/WorkspaceDrawer.tsx +64 -0
  70. package/src/ui/WorkspaceTabs.tsx +60 -0
  71. package/src/ui/format.ts +3 -1
  72. package/src/ui/reference.ts +40 -0
  73. package/src/ui/useChatScrollbar.ts +29 -0
  74. package/src/ui/useComposerAutosize.ts +54 -0
  75. package/dist/cli-ui-embed-BAqonuoD.js +0 -45952
package/src/operator.css CHANGED
@@ -606,9 +606,10 @@
606
606
  /* Wrapper exists so the nav cluster anchors to the transcript's bottom edge —
607
607
  i.e. always just above the composer, however tall the composer grows. */
608
608
  .cli-ui .transcript-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;}
609
- .cli-ui .msg-nav{position:absolute;right:18px;bottom:12px;z-index:5;display:flex;flex-direction:column;gap:6px;}
610
- .cli-ui .msg-nav-btn{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;background:var(--surface);border:1px solid var(--line);color:var(--ink-2);box-shadow:0 4px 14px rgba(0,0,0,.18);cursor:pointer;transition:transform .12s ease,background .12s ease;}
611
- .cli-ui .msg-nav-btn:hover{background:var(--surface-2);transform:translateY(-1px);}
609
+ .cli-ui .msg-nav{position:absolute;right:14px;bottom:12px;z-index:5;display:flex;flex-direction:column;gap:2px;padding:3px;border:1px solid var(--line);border-radius:10px;background:var(--surface);box-shadow:0 2px 10px rgba(0,0,0,.06);}
610
+ .cli-ui .msg-nav-btn{width:32px;height:32px;border-radius:6px;display:grid;place-items:center;background:transparent;color:var(--ink-3);cursor:pointer;transition:background .12s ease;}
611
+ .cli-ui .msg-nav-btn:hover{background:var(--surface-2);color:var(--ink);}
612
+ .cli-ui .msg-nav-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
612
613
  .cli-ui .msg-nav-btn svg{width:16px;height:16px;}
613
614
 
614
615
  /* ===== workspace split: transcript beside the DIFF/PREVIEW/CONTEXT rail ===== */
@@ -616,9 +617,10 @@
616
617
  driven by an inline gridTemplateColumns from layout state (resizable); the
617
618
  --col-rail value here is only the SSR/fallback default. */
618
619
  .cli-ui .sess-split{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 0px var(--col-rail);}
619
- .cli-ui .sess-main{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--line);}
620
- .cli-ui .sess-rail{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--bg-2);}
621
- .cli-ui .rail-tabs{flex:0 0 auto;display:flex;gap:2px;padding:0 14px;border-bottom:1px solid var(--line);}
620
+ .cli-ui .sess-main{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--line-2);}
621
+ .cli-ui .sess-split>.sess-main + .col-rail.rail-right{border-left:0;}
622
+ .cli-ui .sess-rail{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--bg-2);container-type:inline-size;}
623
+ .cli-ui .rail-tabs{flex:0 0 auto;display:flex;gap:2px;padding:0 14px;border-bottom:1px solid var(--line-2);}
622
624
  .cli-ui .rail-tab{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--ink-4);background:transparent;border:none;border-bottom:2px solid transparent;padding:14px 13px 12px;cursor:pointer;transition:color .12s;}
623
625
  .cli-ui .rail-tab.on{color:var(--ink);border-bottom-color:var(--accent);}
624
626
  .cli-ui .rail-tab:not(.on):hover{color:var(--ink-2);}
@@ -671,7 +673,7 @@
671
673
  .cli-ui .ctxw-desc{font-family:var(--mono);font-size:11px;color:var(--ink-3);line-height:1.6;margin-top:4px;}
672
674
  .cli-ui .ctxw-clear{width:100%;justify-content:center;margin-top:20px;}
673
675
  .cli-ui .ctxw-foot{margin-top:12px;font-family:var(--mono);font-size:10px;line-height:1.7;color:var(--ink-4);text-align:center;}
674
- .cli-ui .sess-head{flex:0 0 auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-height:60px;padding:11px 18px;border-bottom:1px solid var(--line);background:var(--surface);}
676
+ .cli-ui .sess-head{flex:0 0 auto;display:flex;align-items:center;gap:12px;flex-wrap:wrap;min-height:60px;padding:11px 18px;border-bottom:1px solid var(--line-2);background:var(--surface);}
675
677
  .cli-ui .sess-head .sh-main{min-width:150px;flex:1;}
676
678
  .cli-ui .sess-head .crumb{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px;}
677
679
  .cli-ui .sess-head .crumb .sep{opacity:.5;}
@@ -790,7 +792,7 @@
790
792
  .cli-ui .transcript{flex:1;overflow-y:auto;padding:26px 0 18px;}
791
793
  .cli-ui .tw{max-width:760px;margin:0 auto;padding:0 28px;}
792
794
  .cli-ui .msg{margin-bottom:22px;}
793
- .cli-ui .msg .who{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-bottom:7px;}
795
+ .cli-ui .msg .who{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:500;color:var(--ink-3);margin-bottom:9px;}
794
796
  .cli-ui .msg .who .badge{font-size:9px;padding:1px 5px;border-radius:4px;background:var(--surface-2);color:var(--ink-3);letter-spacing:.04em;}
795
797
  .cli-ui .msg .who .msg-time{font-weight:400;letter-spacing:.03em;text-transform:none;color:var(--ink-3);opacity:.75;}
796
798
  .cli-ui .msg .who .av{width:18px;height:18px;border-radius:5px;display:grid;place-items:center;color:#fff;font-size:10px;}
@@ -806,15 +808,15 @@
806
808
  .cli-ui .msg .who .av.cc.codex{color:var(--ink);}
807
809
  .cli-ui .msg .who .av svg{width:11px;height:11px;}
808
810
  .cli-ui .msg .who .av.cc svg{width:16px;height:16px;}
809
- .cli-ui .msg-body{font-size:14px;line-height:1.6;color:var(--ink);}
811
+ .cli-ui .msg-body{font-size:15px;line-height:1.75;color:var(--ink);}
810
812
  .cli-ui .msg-body p{margin:0 0 10px;}
811
813
  .cli-ui .msg-body p:last-child{margin-bottom:0;}
812
814
  .cli-ui .msg-body code{font-family:var(--mono);font-size:12.5px;background:var(--surface-2);border:1px solid var(--line-2);padding:1px 5px;border-radius:5px;color:var(--accent-ink);}
813
815
  .cli-ui[data-theme="dark"] .msg-body code{color:#E0A07F;}
814
816
  .cli-ui .msg-body strong{font-weight:700;}
815
817
 
816
- .cli-ui .msg.user .msg-body{background:var(--accent-soft);border:1px solid rgba(194,96,60,.2);border-radius:var(--r-lg);padding:13px 15px;}
817
- .cli-ui .msg.user.initial .msg-body{background:var(--surface);border:1px solid var(--accent);box-shadow:var(--sh-1);}
818
+ .cli-ui .msg.user .msg-body{background:var(--surface-2);border:1px solid var(--line-2);border-radius:16px;padding:14px 16px;}
819
+ .cli-ui .msg.user.initial .msg-body{background:var(--surface);border-color:var(--line);}
818
820
  /* queued follow-up: a dimmed user bubble waiting its turn, with a cancel × */
819
821
  .cli-ui .msg.user.queued{opacity:.62;}
820
822
  .cli-ui .msg.user.queued .msg-body{background:var(--surface-2);border:1px dashed var(--line-2);position:relative;padding-right:34px;}
@@ -827,7 +829,8 @@
827
829
 
828
830
  /* tool call block (expandable) */
829
831
  .cli-ui .tool{font-family:var(--mono);font-size:12px;border-radius:var(--r);border:1px solid var(--line-2);background:var(--surface-2);overflow:hidden;}
830
- .cli-ui .tool-h{display:flex;align-items:center;gap:8px;padding:8px 12px;color:var(--ink-2);width:100%;text-align:left;font-family:var(--mono);font-size:12px;}
832
+ .cli-ui .tool-h{display:flex;align-items:center;gap:8px;padding:9px 12px;min-height:38px;color:var(--ink-2);width:100%;text-align:left;font-family:var(--mono);font-size:12px;}
833
+ .cli-ui .tool-h:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;}
831
834
  .cli-ui .tool-h:hover{background:var(--panel-2);}
832
835
  .cli-ui .tool-h .tchev{flex:0 0 auto;color:var(--ink-4);display:inline-flex;transition:transform .14s;}
833
836
  .cli-ui .tool-h .tchev svg{width:13px;height:13px;}
@@ -910,16 +913,16 @@
910
913
  .cli-ui .md li{margin-bottom:4px;}
911
914
  .cli-ui .md li::marker{color:var(--ink-3);}
912
915
  .cli-ui .md h1,.cli-ui .md h2,.cli-ui .md h3,.cli-ui .md h4{margin:16px 0 8px;font-weight:700;letter-spacing:-.01em;line-height:1.3;}
913
- .cli-ui .md h1{font-size:18px;}
914
- .cli-ui .md h2{font-size:16px;}
915
- .cli-ui .md h3{font-size:14.5px;}
916
+ .cli-ui .md h1{font-size:20px;}
917
+ .cli-ui .md h2{font-size:18px;}
918
+ .cli-ui .md h3{font-size:16px;}
916
919
  .cli-ui .md h4{font-size:13px;}
917
920
  .cli-ui .md code{font-family:var(--mono);font-size:12.5px;background:var(--surface-2);border:1px solid var(--line-2);padding:1px 5px;border-radius:5px;color:var(--accent-ink);}
918
921
  .cli-ui[data-theme="dark"] .md code{color:#E0A07F;}
919
922
  .cli-ui .md pre{margin:0 0 12px;background:var(--panel-2);border:1px solid var(--line-2);border-radius:var(--r);padding:12px 14px;overflow-x:auto;}
920
923
  .cli-ui .md pre code{display:block;background:none;border:none;padding:0;color:var(--ink);font-size:12.5px;line-height:1.55;}
921
- .cli-ui .md blockquote{margin:8px 0;padding:2px 0 2px 14px;border-left:3px solid var(--line-strong);color:var(--ink-2);}
922
- .cli-ui .md hr{border:none;border-top:1px solid var(--line);margin:14px 0;}
924
+ .cli-ui .md blockquote{margin:12px 0;padding:4px 0 4px 14px;border-left:2px solid var(--line);color:var(--ink-2);}
925
+ .cli-ui .md hr{border:none;border-top:1px solid var(--line-2);margin:14px 0;}
923
926
  .cli-ui .md table{border-collapse:collapse;margin:8px 0;font-size:13px;width:100%;}
924
927
  .cli-ui .md th,.cli-ui .md td{border:1px solid var(--line-2);padding:6px 10px;text-align:left;}
925
928
  .cli-ui .md th{background:var(--surface-2);font-weight:700;}
@@ -973,7 +976,7 @@
973
976
  .cli-ui .sbreak .card .ct b{color:var(--ink);}
974
977
 
975
978
  .cli-ui .session-label{display:flex;align-items:center;gap:9px;margin:0 0 20px;font-family:var(--mono);font-size:10px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-4);}
976
- .cli-ui .session-label .ln{flex:1;height:1px;background:var(--line);}
979
+ .cli-ui .session-label .ln{flex:1;height:1px;background:var(--line-2);}
977
980
 
978
981
  /* windowed transcript: reveal earlier rows */
979
982
  .cli-ui .load-older{display:flex;justify-content:center;margin:0 0 18px;}
@@ -1013,7 +1016,7 @@
1013
1016
  .cli-ui .comp-box{border:1px solid var(--line-strong);border-radius:24px;background:var(--raise);box-shadow:0 4px 20px rgba(0,0,0,.04);transition:border-color .15s,box-shadow .15s;overflow:hidden;}
1014
1017
  .cli-ui .comp-box:focus-within{border-color:var(--ink-4);box-shadow:0 4px 24px rgba(0,0,0,.07);}
1015
1018
  .cli-ui .comp-area{padding:18px 20px 8px;}
1016
- .cli-ui .comp-area textarea{display:block;width:100%;min-width:0;border:none;background:none;resize:none;outline:none;font-family:var(--sans);font-size:15px;line-height:1.6;color:var(--ink);max-height:200px;min-height:62px;}
1019
+ .cli-ui .comp-area textarea{display:block;width:100%;min-width:0;padding:0;border:none;background:none;resize:none;outline:none;font-family:var(--sans);font-size:15px;line-height:1.6;color:var(--ink);min-height:3.2em;max-height:12.8em;overflow-y:hidden;scrollbar-width:thin;overscroll-behavior:contain;}
1017
1020
  .cli-ui .comp-area textarea::placeholder{color:var(--ink-4);}
1018
1021
  .cli-ui .comp-toolbar{display:flex;align-items:center;gap:7px;padding:4px 12px 12px;min-width:0;}
1019
1022
  .cli-ui .comp-add{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;flex:none;color:var(--ink-2);background:transparent;}
@@ -1025,7 +1028,6 @@
1025
1028
  .cli-ui .comp-setting svg{width:14px;height:14px;}
1026
1029
  .cli-ui .comp-setting.elevated{color:var(--amber);}
1027
1030
  .cli-ui .comp-model-name{min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;}
1028
- .cli-ui .comp-reasoning{color:var(--ink-3);font-size:11px;}
1029
1031
  .cli-ui .comp-setting:disabled,.cli-ui .comp-add:disabled{opacity:.5;cursor:default;}
1030
1032
  .cli-ui .send{width:36px;height:36px;flex:none;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;transition:filter .12s,opacity .12s;}
1031
1033
  .cli-ui .send:hover{filter:brightness(1.07);}
@@ -1052,16 +1054,9 @@
1052
1054
 
1053
1055
  .cli-ui .send-group{display:flex;align-items:center;gap:6px;flex:none;}
1054
1056
  .cli-ui .send svg{width:19px;height:19px;}
1055
- .cli-ui .comp-caption{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:4px;padding:8px 6px 0;font-size:10px;color:var(--ink-4);}
1056
- .cli-ui .comp-caption button{display:flex;align-items:center;gap:4px;background:transparent;color:var(--ink-3);font-size:10px;}
1057
- .cli-ui .comp-caption button:disabled{opacity:.45;cursor:default;}
1058
1057
  .cli-ui .comp-error,.cli-ui .control-error{padding:8px 10px;font-size:12px;line-height:1.5;color:var(--red);overflow-wrap:anywhere;}
1059
1058
  .cli-ui .comp-upload-status{padding:6px 10px;font-size:11px;color:var(--ink-3);}
1060
- .cli-ui .comp-quote{display:flex;align-items:flex-start;gap:10px;margin:12px 14px 0;padding:10px 12px;border-left:3px solid var(--accent);border-radius:5px 12px 12px 5px;background:var(--surface-2);font-size:12px;}
1061
- .cli-ui .comp-quote>div{flex:1;min-width:0;}
1062
- .cli-ui .comp-quote strong{font-weight:500;color:var(--ink-2);}
1063
- .cli-ui .comp-quote p{margin:4px 0 0;color:var(--ink-3);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere;white-space:pre-wrap;}
1064
- .cli-ui .comp-quote .icon-btn{width:24px;height:24px;flex:none;}
1059
+ .cli-ui .comp-quote{margin:12px 14px 0;}
1065
1060
  .cli-ui .hero-controls{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line);}
1066
1061
  .cli-ui .hero-controls .comp-model{margin-left:0;}
1067
1062
  .cli-ui .compact-chat{flex:1;}
@@ -1070,7 +1065,8 @@
1070
1065
  .cli-ui .compact-session .sess-head{flex-wrap:wrap;}
1071
1066
  .cli-ui .compact-session .sh-tools{flex-wrap:wrap;}
1072
1067
  .cli-ui .msg-actions{display:flex;margin-top:6px;}
1073
- .cli-ui .msg-actions button{display:flex;align-items:center;gap:4px;padding:4px 6px;border-radius:6px;background:transparent;font-size:11px;color:var(--ink-4);}
1068
+ .cli-ui .msg-actions button{display:flex;align-items:center;gap:5px;min-height:32px;padding:5px 8px;border-radius:6px;background:transparent;font-size:12px;color:var(--ink-3);}
1069
+ .cli-ui .msg-actions button svg{width:14px;height:14px;}
1074
1070
  .cli-ui .msg-actions button:hover,.cli-ui .msg-actions button:focus-visible{background:var(--surface-2);color:var(--ink);}
1075
1071
  .cli-ui .msg-body{overflow-wrap:anywhere;min-width:0;}
1076
1072
  .cli-ui button.pop-item{width:100%;text-align:left;background:transparent;color:var(--ink);font:inherit;}
@@ -1084,7 +1080,6 @@
1084
1080
  .cli-ui .comp-setting{font-size:11px;padding:5px;gap:4px;}
1085
1081
  .cli-ui .comp-model-name{max-width:145px;}
1086
1082
  .cli-ui .comp-area{padding:14px 16px 6px;}
1087
- .cli-ui .comp-caption{font-size:9px;}
1088
1083
  }
1089
1084
  @container (max-width:310px){
1090
1085
  .cli-ui .comp-control:has(.permission){flex:1;}
@@ -1353,10 +1348,111 @@
1353
1348
  .cli-ui .pop-item .pi-check svg{width:14px;height:14px;}
1354
1349
  .cli-ui .pop-item .pi-sub{font-family:var(--mono);font-size:10px;color:var(--ink-3);font-weight:400;}
1355
1350
  .cli-ui .pop-sec{padding:8px 13px 4px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);}
1356
- .cli-ui .pop-custom-model{border-top:1px solid var(--line);padding-bottom:10px;}
1351
+ .cli-ui .pop-custom-model{border-top:1px solid var(--line-2);padding-bottom:10px;}
1357
1352
  .cli-ui .pop-custom-row{display:flex;gap:7px;padding:5px 10px;}
1358
1353
  .cli-ui .pop-custom-row input{min-width:260px;flex:1;font-size:11px;}
1359
1354
  .cli-ui .pop-custom-model>.pi-sub{max-width:360px;padding:0 11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1355
+ .cli-ui .run-agent-list{width:260px;max-width:100%;}
1356
+ .cli-ui .run-agent-option{min-height:44px;}
1357
+ .cli-ui .run-agent-trailing{margin-left:auto;display:flex;align-items:center;gap:8px;color:var(--ink-3);}
1358
+ .cli-ui .run-agent-trailing svg{width:14px;height:14px;}
1359
+ .cli-ui .run-settings{width:320px;max-width:100%;}
1360
+ .cli-ui .run-settings-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line-2);}
1361
+ .cli-ui .run-settings-head .run-settings-back{width:auto;font-size:12px;}
1362
+ .cli-ui .run-settings-back svg{width:14px;height:14px;}
1363
+ .cli-ui .run-settings-field{padding:4px 2px 10px;}
1364
+ .cli-ui .run-settings-note{margin:6px 0 0;font-size:11px;line-height:1.5;color:var(--ink-3);overflow-wrap:anywhere;}
1365
+ .cli-ui .run-settings .pop-custom-row input{width:100%;min-height:38px;padding:6px 10px;border:1px solid var(--line-strong);border-radius:8px;background:var(--surface);color:var(--ink);font:inherit;font-size:13px;}
1366
+ .cli-ui .run-settings .pop-custom-row button{min-height:38px;}
1367
+ /* Composer menus share one card treatment without changing task or board menus. */
1368
+ .cli-ui .popover.composer-popover{--composer-reasoning:var(--operator);width:348px;padding:8px;border-radius:20px;border-color:var(--line-strong);background:var(--raise);box-shadow:0 12px 40px rgba(0,0,0,.16),0 2px 8px rgba(0,0,0,.06);}
1369
+ .cli-ui[data-theme="light"] .composer-popover{--composer-reasoning:#7c3aed;}
1370
+ .cli-ui .composer-menu-heading{padding:8px 10px 10px;font-size:12px;font-weight:500;color:var(--ink-3);}
1371
+ .cli-ui .composer-menu-note{margin:0;padding:0 10px 10px;color:var(--ink-3);font-size:11px;line-height:1.5;}
1372
+ .cli-ui .composer-popover .composer-option{display:flex;align-items:center;text-align:left;width:100%;min-height:56px;gap:11px;padding:11px 10px;border-radius:12px;font-size:14px;line-height:1.4;}
1373
+ .cli-ui .composer-popover .composer-option:hover:not(:disabled),.cli-ui .composer-popover .composer-option[aria-pressed="true"]{background:var(--surface-2);}
1374
+ .cli-ui .composer-option-icon{display:grid;place-items:center;flex:none;width:24px;height:26px;color:var(--ink-3);}
1375
+ .cli-ui .composer-option-icon svg{width:19px;height:19px;}
1376
+ .cli-ui .composer-option-copy{display:block;flex:1;min-width:0;}
1377
+ .cli-ui .composer-option-title{display:block;color:var(--ink);font-size:14px;font-weight:500;overflow-wrap:anywhere;}
1378
+ .cli-ui .composer-option-sub{display:block;margin-top:3px;color:var(--ink-3);font-size:12px;font-weight:400;line-height:1.45;overflow-wrap:anywhere;}
1379
+ .cli-ui .composer-option-trailing{margin-left:auto;display:flex;align-items:center;gap:6px;flex:none;color:var(--accent);}
1380
+ .cli-ui .composer-option-trailing svg{width:16px;height:16px;}
1381
+ .cli-ui .composer-menu-key{color:var(--ink-4);font-size:12px;}
1382
+ .cli-ui .composer-popover .pop-sec{padding:8px 10px;font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;}
1383
+ .cli-ui .composer-popover .run-agent-list,.cli-ui .composer-popover .run-settings{width:auto;max-width:none;}
1384
+ .cli-ui .composer-popover .run-settings-head{margin:0 2px 10px;padding-bottom:4px;}
1385
+ .cli-ui .composer-popover .run-settings-back{min-height:40px;border-radius:10px;font-size:13px;}
1386
+ .cli-ui .composer-popover .run-models-back{display:flex;align-items:center;gap:8px;width:auto;min-height:40px;border-radius:10px;font-size:13px;}
1387
+ .cli-ui .run-models-back svg{width:14px;height:14px;}
1388
+ .cli-ui .run-field-label{display:block;color:var(--ink-3);font-size:12px;font-weight:500;padding:0 8px 8px;}
1389
+ .cli-ui .composer-popover .run-model-entry{border:1px solid var(--line);background:var(--surface);}
1390
+ .cli-ui .run-model-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1391
+ .cli-ui .run-model-list{max-height:min(46vh,320px);overflow-y:auto;overscroll-behavior:contain;}
1392
+ .cli-ui .run-model-group-title{padding:12px 10px 4px;color:var(--ink-3);font-size:11px;}
1393
+ .cli-ui .run-reasoning-card{margin:4px 2px 10px;padding:14px;border:1px solid var(--line);border-radius:16px;background:linear-gradient(145deg,color-mix(in srgb,var(--composer-reasoning) 8%,var(--raise)),var(--raise) 80%);}
1394
+ .cli-ui .run-reasoning-head{display:flex;align-items:center;justify-content:space-between;gap:10px;}
1395
+ .cli-ui .run-reasoning-head .run-field-label{padding:0;}
1396
+ .cli-ui .run-reasoning-value{min-width:0;color:var(--composer-reasoning);font-size:18px;font-weight:600;overflow-wrap:anywhere;text-align:right;}
1397
+ .cli-ui .run-reasoning-note{margin:8px 0 14px;color:var(--ink-3);font-size:12px;line-height:1.5;}
1398
+ .cli-ui .run-reasoning-options{display:flex;flex-wrap:wrap;gap:5px;}
1399
+ .cli-ui .run-reasoning-option{flex:1 1 60px;min-height:38px;padding:7px 8px;border:1px solid var(--line);border-radius:9px;background:var(--raise);color:var(--ink-2);font-size:12px;line-height:1.3;overflow-wrap:anywhere;}
1400
+ .cli-ui .run-reasoning-option:hover:not(:disabled){border-color:var(--composer-reasoning);}
1401
+ .cli-ui .run-reasoning-option[aria-pressed="true"]{background:var(--composer-reasoning);border-color:transparent;color:var(--raise);font-weight:600;}
1402
+ .cli-ui .run-reasoning-option:disabled,.cli-ui .run-reasoning-reset:disabled{opacity:.5;cursor:default;}
1403
+ .cli-ui .run-reasoning-reset{display:flex;justify-content:center;align-items:center;gap:6px;width:100%;min-height:36px;margin-top:10px;padding:6px;border-radius:9px;color:var(--ink-3);font-size:12px;}
1404
+ .cli-ui .run-reasoning-reset svg{width:14px;height:14px;}
1405
+ .cli-ui .run-reasoning-reset:hover:not(:disabled),.cli-ui .run-reasoning-reset[aria-pressed="true"]{color:var(--composer-reasoning);background:color-mix(in srgb,var(--composer-reasoning) 8%,transparent);}
1406
+ .cli-ui .run-settings .pop-custom-model{padding-top:8px;}
1407
+ .cli-ui .run-settings .pop-custom-model>.composer-menu-heading{display:block;padding-bottom:4px;}
1408
+ .cli-ui .run-settings .pop-custom-row input:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
1409
+ .cli-ui .composer-popover .control-error{margin:4px 2px;border-radius:10px;background:var(--red-soft);}
1410
+ .cli-ui .comp-add.on{color:var(--ink);}
1411
+ .cli-ui .comp-add.on svg{transform:rotate(45deg);}
1412
+ .cli-ui .composer .comp-setting{min-height:38px;border-radius:6px;padding:7px 10px;background:transparent;}
1413
+ .cli-ui .composer .comp-add{width:38px;height:38px;border-radius:6px;background:transparent;}
1414
+ .cli-ui .composer .comp-setting:hover:not(:disabled),.cli-ui .composer .comp-add:hover:not(:disabled){background:var(--surface-2);}
1415
+ .cli-ui .composer .send{width:38px;height:38px;}
1416
+ .cli-ui .composer .comp-box{border-radius:26px;border-color:var(--line);box-shadow:0 4px 20px rgba(0,0,0,.035);}
1417
+ .cli-ui .composer .comp-box:focus-within{border-color:var(--line-strong);box-shadow:0 6px 24px rgba(0,0,0,.055);}
1418
+ .cli-ui .composer .comp-toolbar{gap:6px;padding:6px 12px 12px;}
1419
+ .cli-ui .composer .comp-area{padding:18px 20px 12px;}
1420
+ .cli-ui .composer .attach-chip.image{width:108px;height:88px;border-radius:12px;}
1421
+ .cli-ui .composer .attach-chip.image>img{height:100%;object-fit:cover;}
1422
+ .cli-ui .composer .attach-chip .attach-x{width:26px;height:26px;top:4px;right:4px;font-size:16px;}
1423
+ .cli-ui .composer .attach-chip.file{border-radius:10px;}
1424
+ .cli-ui .composer .attach-row{gap:10px;padding:14px 16px 4px;flex-wrap:nowrap;overflow-x:auto;}
1425
+ .cli-ui .composer .attach-row .attach-chip{flex:none;}
1426
+ .cli-ui .composer .cli-blocks{max-height:min(30vh,180px);}
1427
+ @container(max-width:420px){
1428
+ .cli-ui .composer .comp-area{padding:14px 16px 8px;}
1429
+ .cli-ui .composer .comp-toolbar{gap:4px;padding:6px 10px 10px;}
1430
+ .cli-ui .composer .comp-setting{padding:6px 9px;}
1431
+ .cli-ui .composer .attach-chip.image{width:86px;height:76px;}
1432
+ }
1433
+ @container(max-width:360px){
1434
+ .cli-ui .composer .comp-toolbar{flex-wrap:nowrap;padding-left:8px;padding-right:8px;}
1435
+ .cli-ui .composer .comp-toolbar>.comp-control{flex:0 0 auto;}
1436
+ .cli-ui .composer .comp-toolbar>.comp-model{flex:0 1 auto;min-width:44px;margin-left:auto;}
1437
+ .cli-ui .composer .comp-setting{font-size:11px;gap:0;padding-left:6px;padding-right:6px;}
1438
+ .cli-ui .composer .comp-setting>svg{display:none;}
1439
+ .cli-ui .composer .comp-model-name{max-width:42px;}
1440
+ .cli-ui .composer .comp-toolbar:not(:has(.send.stop)) .comp-setting{gap:4px;font-size:12px;}
1441
+ .cli-ui .composer .comp-toolbar:not(:has(.send.stop)) .permission>svg:first-child{display:block;width:14px;height:14px;}
1442
+ .cli-ui .composer .comp-toolbar:not(:has(.send.stop)) .comp-model .comp-setting>svg{display:block;width:12px;height:12px;}
1443
+ .cli-ui .composer .comp-foot{flex-wrap:wrap;gap:6px;}
1444
+ .cli-ui .composer .comp-foot>.send-group{margin-left:auto;}
1445
+ }
1446
+ @media(pointer:coarse){
1447
+ .cli-ui .composer-popover .composer-option{min-height:52px;}
1448
+ .cli-ui .composer .comp-add,.cli-ui .composer .comp-setting,.cli-ui .composer .send{min-width:44px;min-height:44px;}
1449
+ .cli-ui .composer .attach-chip .attach-x{min-width:32px;min-height:32px;}
1450
+ }
1451
+ @media(prefers-reduced-motion:reduce){.cli-ui .popover.composer-popover{animation:none;}}
1452
+ @media(pointer:coarse){
1453
+ .cli-ui .run-settings .pop-custom-row input{min-height:44px;font-size:16px;}
1454
+ .cli-ui .run-settings-back,.cli-ui .run-models-back,.cli-ui .run-settings .pop-custom-row button,.cli-ui .run-reasoning-option,.cli-ui .run-reasoning-reset{min-height:44px;}
1455
+ }
1360
1456
 
1361
1457
  /* ⌘K command palette */
1362
1458
  .cli-ui .palette-scrim{position:fixed;inset:0;background:rgba(0,0,0,.38);backdrop-filter:blur(3px);z-index:240;display:flex;align-items:flex-start;justify-content:center;padding-top:13vh;animation:fadein .12s ease;}
@@ -1453,7 +1549,6 @@
1453
1549
  the home indicator. The keyboard hints are mouse-era noise on a phone. */
1454
1550
  .cli-ui .app.mobile .composer{padding:10px 12px calc(12px + env(safe-area-inset-bottom));}
1455
1551
  .cli-ui .app.mobile .comp-area textarea{font-size:16px;}
1456
- .cli-ui .app.mobile .comp-caption>span{display:none;}
1457
1552
  .cli-ui .app.mobile .send{width:40px;height:40px;}
1458
1553
 
1459
1554
  /* Ask card options are tap targets — give them room. */
@@ -1659,7 +1754,7 @@
1659
1754
  .cli-ui .bp-handoff{border:1px solid var(--coral);background:var(--coral-soft);border-radius:var(--r-sm);padding:10px 12px;font-size:12.5px;line-height:1.6;color:var(--ink);}
1660
1755
  .cli-ui .bp-handoff-sub{margin-top:4px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);}
1661
1756
  .cli-ui .bp-viewer{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--panel);box-shadow:var(--sh-2);position:relative;}
1662
- .cli-ui .bp-tabs{display:flex;gap:4px;overflow-x:auto;overscroll-behavior-x:contain;padding:6px 6px 0;border-bottom:1px solid var(--line);background:var(--surface-2);scrollbar-width:thin;}
1757
+ .cli-ui .bp-tabs{display:flex;gap:4px;overflow-x:auto;overscroll-behavior-x:contain;padding:6px 6px 0;border-bottom:1px solid var(--line-2);background:var(--surface-2);scrollbar-width:thin;}
1663
1758
  .cli-ui .bp-tab{display:flex;align-items:center;gap:6px;flex:0 0 auto;min-width:72px;max-width:200px;padding:7px 10px;border-radius:6px 6px 0 0;border-bottom:2px solid transparent;color:var(--ink-3);font-size:12px;text-align:left;}
1664
1759
  .cli-ui .bp-tab > span:first-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
1665
1760
  .cli-ui .bp-tab.active{background:var(--panel);border-bottom-color:var(--accent);color:var(--ink);}
@@ -1724,8 +1819,9 @@
1724
1819
  .cli-ui .sess-head .sh-tools{gap:8px;flex-wrap:nowrap;flex-shrink:0;}
1725
1820
  .cli-ui .session-more{width:32px;height:32px;}
1726
1821
  .cli-ui .session-viewbar{display:flex;align-items:center;gap:16px;min-height:42px;padding:0 22px;border-bottom:1px solid var(--line-2);}
1727
- .cli-ui .session-agent-label{color:var(--ink-3);font-size:12px;}
1728
- .cli-ui .session-branch{margin-left:auto;min-width:0;display:flex;align-items:center;gap:6px;color:var(--ink-4);font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1822
+ .cli-ui .session-origin{display:flex;align-items:center;gap:6px;}
1823
+ .cli-ui .session-origin svg{width:14px;height:14px;flex:none;}
1824
+ .cli-ui .session-origin span{min-width:0;overflow-wrap:anywhere;}
1729
1825
  .cli-ui .session-viewbar .viewseg{flex-shrink:0;}
1730
1826
  .cli-ui .compact-session .sh-tools{flex-wrap:nowrap;}
1731
1827
  .cli-ui .composer{padding:16px 24px 12px;}
@@ -1733,9 +1829,16 @@
1733
1829
  .cli-ui .comp-area{padding:18px 20px 10px;}
1734
1830
  .cli-ui .comp-toolbar{padding:4px 14px 12px;}
1735
1831
  .cli-ui .comp-setting{font-size:13px;}
1736
- .cli-ui .comp-caption{font-size:11px;padding-top:9px;}
1737
- .cli-ui .comp-caption button{font-size:11px;}
1738
- .cli-ui .transcript .tw{max-width:800px;}
1832
+ /* Transcript and composer share one column; only a wide, isolated chat is capped. */
1833
+ .cli-ui [data-chat-layout]{--cli-chat-gutter:16px;--cli-chat-content-max:100%;container:chat-column / inline-size;}
1834
+ .cli-ui [data-chat-layout="centered"]{--cli-chat-content-max:50vw;}
1835
+ .cli-ui .body[data-chat-sidebars="open"]>.col-session [data-chat-layout="centered"]{--cli-chat-content-max:100%;}
1836
+ .cli-ui [data-chat-layout] .transcript>.tw{width:calc(100% - 2 * var(--cli-chat-gutter));max-width:var(--cli-chat-content-max);margin-inline:auto;padding-inline:0;}
1837
+ .cli-ui .session [data-chat-layout]>.composer{padding-inline:var(--cli-chat-gutter);padding-inline-end:calc(var(--cli-chat-gutter) + var(--cli-chat-scrollbar,0px));}
1838
+ .cli-ui [data-chat-layout]>.composer>.composer-inner{width:100%;max-width:var(--cli-chat-content-max);margin-inline:auto;}
1839
+ .cli-ui [data-chat-layout]>.cli-refs,.cli-ui [data-chat-layout]>.cli-queue{width:calc(100% - 2 * var(--cli-chat-gutter) - var(--cli-chat-scrollbar,0px));max-width:var(--cli-chat-content-max);margin-inline:auto;margin-inline-start:max(var(--cli-chat-gutter),calc((100% - var(--cli-chat-scrollbar,0px) - var(--cli-chat-content-max)) / 2));flex-shrink:0;}
1840
+ @container chat-column (max-width:900px){.cli-ui [data-chat-layout]>*{--cli-chat-content-max:100%;}}
1841
+ @container chat-column (max-width:640px){.cli-ui [data-chat-layout]>*{--cli-chat-gutter:12px;}}
1739
1842
  .cli-ui .task-origin{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--ink-3);padding-top:7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1740
1843
  .cli-ui .fork-sources{display:flex;flex-wrap:wrap;gap:6px;padding:12px 14px 0;}
1741
1844
  .cli-ui .fork-sources>span{max-width:100%;display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--line);background:var(--surface-2);border-radius:8px;font-size:11px;color:var(--ink-2);overflow-wrap:anywhere;}