@spzxg/cli-ui 0.6.6 → 0.6.8

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 (79) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/README.md +90 -21
  3. package/dist/cli-ui-embed-Be9_d9jB.js +49691 -0
  4. package/dist/{cli-ui-index-b8wF7wrN.js → cli-ui-index-CzNfiynu.js} +2 -2
  5. package/dist/{cli-ui-jszip.min-B0uLrCHg.js → cli-ui-jszip.min-BL0mSekN.js} +2 -2
  6. package/dist/{cli-ui-jszip.min-ggP8OokP.js → cli-ui-jszip.min-DjCIAfse.js} +1 -1
  7. package/dist/{cli-ui-xlsx-DEDdHrJJ.js → cli-ui-xlsx-CscI4xk0.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 +121 -51
  34. package/src/chat/Composer.tsx +54 -22
  35. package/src/chat/GroupChat.tsx +113 -0
  36. package/src/chat/RunControls.tsx +143 -46
  37. package/src/chat/draft.ts +12 -4
  38. package/src/chat/useExecutionConfig.ts +93 -0
  39. package/src/components.tsx +1 -1
  40. package/src/core/blocks.ts +2 -1
  41. package/src/core/client.ts +65 -61
  42. package/src/core/config.ts +6 -2
  43. package/src/core/documentUpload.ts +196 -0
  44. package/src/core/execution.ts +24 -0
  45. package/src/core/store.ts +81 -20
  46. package/src/core/types.ts +3 -1
  47. package/src/index.ts +4 -0
  48. package/src/msglist/CliMsgList.tsx +9 -2
  49. package/src/operator/node/Chat.tsx +11 -9
  50. package/src/operator/node/Composer.tsx +103 -75
  51. package/src/operator/node/Orchestrator.tsx +1 -1
  52. package/src/operator/node/SessionRail.tsx +71 -32
  53. package/src/operator/node/SessionView.tsx +31 -28
  54. package/src/operator/node/Transcript.tsx +21 -9
  55. package/src/operator/node/boardBackend.ts +0 -19
  56. package/src/operator/node/boardEvents.ts +21 -3
  57. package/src/operator/node/boardState.ts +18 -1
  58. package/src/operator/node/boardWorkspace.ts +4 -1
  59. package/src/operator/node/composerDraft.ts +6 -2
  60. package/src/operator/node/format.ts +4 -2
  61. package/src/operator/node/liveStream.ts +14 -2
  62. package/src/operator/node/useTaskStream.ts +3 -1
  63. package/src/operator.base.css +150 -43
  64. package/src/operator.css +150 -43
  65. package/src/styles.css +253 -39
  66. package/src/ui/Markdown.tsx +2 -2
  67. package/src/ui/Popover.tsx +25 -12
  68. package/src/ui/QueuedMessages.tsx +69 -0
  69. package/src/ui/ReferenceCard.tsx +28 -0
  70. package/src/ui/TextBlock.tsx +6 -4
  71. package/src/ui/Transcript.tsx +20 -10
  72. package/src/ui/UploadProgress.tsx +46 -0
  73. package/src/ui/WorkspaceDrawer.tsx +64 -0
  74. package/src/ui/WorkspaceTabs.tsx +60 -0
  75. package/src/ui/format.ts +3 -1
  76. package/src/ui/reference.ts +40 -0
  77. package/src/ui/useChatScrollbar.ts +29 -0
  78. package/src/ui/useComposerAutosize.ts +54 -0
  79. package/dist/cli-ui-embed-BAqonuoD.js +0 -45952
@@ -606,9 +606,10 @@ button{font-family:inherit;color:inherit;cursor:pointer;border:none;background:n
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
  .transcript-wrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column;}
609
- .msg-nav{position:absolute;right:18px;bottom:12px;z-index:5;display:flex;flex-direction:column;gap:6px;}
610
- .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
- .msg-nav-btn:hover{background:var(--surface-2);transform:translateY(-1px);}
609
+ .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
+ .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
+ .msg-nav-btn:hover{background:var(--surface-2);color:var(--ink);}
612
+ .msg-nav-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;}
612
613
  .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 @@ button{font-family:inherit;color:inherit;cursor:pointer;border:none;background:n
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
  .sess-split{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 0px var(--col-rail);}
619
- .sess-main{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--line);}
620
- .sess-rail{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--bg-2);}
621
- .rail-tabs{flex:0 0 auto;display:flex;gap:2px;padding:0 14px;border-bottom:1px solid var(--line);}
620
+ .sess-main{position:relative;min-width:0;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--line-2);}
621
+ .sess-split>.sess-main + .col-rail.rail-right{border-left:0;}
622
+ .sess-rail{min-width:0;min-height:0;display:flex;flex-direction:column;background:var(--bg-2);container-type:inline-size;}
623
+ .rail-tabs{flex:0 0 auto;display:flex;gap:2px;padding:0 14px;border-bottom:1px solid var(--line-2);}
622
624
  .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
  .rail-tab.on{color:var(--ink);border-bottom-color:var(--accent);}
624
626
  .rail-tab:not(.on):hover{color:var(--ink-2);}
@@ -671,7 +673,7 @@ button{font-family:inherit;color:inherit;cursor:pointer;border:none;background:n
671
673
  .ctxw-desc{font-family:var(--mono);font-size:11px;color:var(--ink-3);line-height:1.6;margin-top:4px;}
672
674
  .ctxw-clear{width:100%;justify-content:center;margin-top:20px;}
673
675
  .ctxw-foot{margin-top:12px;font-family:var(--mono);font-size:10px;line-height:1.7;color:var(--ink-4);text-align:center;}
674
- .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
+ .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
  .sess-head .sh-main{min-width:150px;flex:1;}
676
678
  .sess-head .crumb{font-family:var(--mono);font-size:10.5px;color:var(--ink-3);display:flex;align-items:center;gap:6px;}
677
679
  .sess-head .crumb .sep{opacity:.5;}
@@ -790,7 +792,7 @@ a.tc-btn{display:inline-flex;align-items:center;text-decoration:none;line-height
790
792
  .transcript{flex:1;overflow-y:auto;padding:26px 0 18px;}
791
793
  .tw{max-width:760px;margin:0 auto;padding:0 28px;}
792
794
  .msg{margin-bottom:22px;}
793
- .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
+ .msg .who{display:flex;align-items:center;gap:7px;font-size:11px;font-weight:500;color:var(--ink-3);margin-bottom:9px;}
794
796
  .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
  .msg .who .msg-time{font-weight:400;letter-spacing:.03em;text-transform:none;color:var(--ink-3);opacity:.75;}
796
798
  .msg .who .av{width:18px;height:18px;border-radius:5px;display:grid;place-items:center;color:#fff;font-size:10px;}
@@ -806,15 +808,15 @@ a.tc-btn{display:inline-flex;align-items:center;text-decoration:none;line-height
806
808
  .msg .who .av.cc.codex{color:var(--ink);}
807
809
  .msg .who .av svg{width:11px;height:11px;}
808
810
  .msg .who .av.cc svg{width:16px;height:16px;}
809
- .msg-body{font-size:14px;line-height:1.6;color:var(--ink);}
811
+ .msg-body{font-size:15px;line-height:1.75;color:var(--ink);}
810
812
  .msg-body p{margin:0 0 10px;}
811
813
  .msg-body p:last-child{margin-bottom:0;}
812
814
  .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
  [data-theme="dark"] .msg-body code{color:#E0A07F;}
814
816
  .msg-body strong{font-weight:700;}
815
817
 
816
- .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
- .msg.user.initial .msg-body{background:var(--surface);border:1px solid var(--accent);box-shadow:var(--sh-1);}
818
+ .msg.user .msg-body{background:var(--surface-2);border:1px solid var(--line-2);border-radius:16px;padding:14px 16px;}
819
+ .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
  .msg.user.queued{opacity:.62;}
820
822
  .msg.user.queued .msg-body{background:var(--surface-2);border:1px dashed var(--line-2);position:relative;padding-right:34px;}
@@ -827,7 +829,8 @@ a.tc-btn{display:inline-flex;align-items:center;text-decoration:none;line-height
827
829
 
828
830
  /* tool call block (expandable) */
829
831
  .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
- .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
+ .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
+ .tool-h:focus-visible{outline:2px solid var(--accent);outline-offset:-3px;}
831
834
  .tool-h:hover{background:var(--panel-2);}
832
835
  .tool-h .tchev{flex:0 0 auto;color:var(--ink-4);display:inline-flex;transition:transform .14s;}
833
836
  .tool-h .tchev svg{width:13px;height:13px;}
@@ -910,16 +913,16 @@ button.tpeek-more:hover{color:var(--accent-ink);}
910
913
  .md li{margin-bottom:4px;}
911
914
  .md li::marker{color:var(--ink-3);}
912
915
  .md h1,.md h2,.md h3,.md h4{margin:16px 0 8px;font-weight:700;letter-spacing:-.01em;line-height:1.3;}
913
- .md h1{font-size:18px;}
914
- .md h2{font-size:16px;}
915
- .md h3{font-size:14.5px;}
916
+ .md h1{font-size:20px;}
917
+ .md h2{font-size:18px;}
918
+ .md h3{font-size:16px;}
916
919
  .md h4{font-size:13px;}
917
920
  .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
  [data-theme="dark"] .md code{color:#E0A07F;}
919
922
  .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
  .md pre code{display:block;background:none;border:none;padding:0;color:var(--ink);font-size:12.5px;line-height:1.55;}
921
- .md blockquote{margin:8px 0;padding:2px 0 2px 14px;border-left:3px solid var(--line-strong);color:var(--ink-2);}
922
- .md hr{border:none;border-top:1px solid var(--line);margin:14px 0;}
924
+ .md blockquote{margin:12px 0;padding:4px 0 4px 14px;border-left:2px solid var(--line);color:var(--ink-2);}
925
+ .md hr{border:none;border-top:1px solid var(--line-2);margin:14px 0;}
923
926
  .md table{border-collapse:collapse;margin:8px 0;font-size:13px;width:100%;}
924
927
  .md th,.md td{border:1px solid var(--line-2);padding:6px 10px;text-align:left;}
925
928
  .md th{background:var(--surface-2);font-weight:700;}
@@ -973,7 +976,7 @@ button.tpeek-more:hover{color:var(--accent-ink);}
973
976
  .sbreak .card .ct b{color:var(--ink);}
974
977
 
975
978
  .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
- .session-label .ln{flex:1;height:1px;background:var(--line);}
979
+ .session-label .ln{flex:1;height:1px;background:var(--line-2);}
977
980
 
978
981
  /* windowed transcript: reveal earlier rows */
979
982
  .load-older{display:flex;justify-content:center;margin:0 0 18px;}
@@ -1013,7 +1016,7 @@ button.tpeek-more:hover{color:var(--accent-ink);}
1013
1016
  .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
  .comp-box:focus-within{border-color:var(--ink-4);box-shadow:0 4px 24px rgba(0,0,0,.07);}
1015
1018
  .comp-area{padding:18px 20px 8px;}
1016
- .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
+ .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
  .comp-area textarea::placeholder{color:var(--ink-4);}
1018
1021
  .comp-toolbar{display:flex;align-items:center;gap:7px;padding:4px 12px 12px;min-width:0;}
1019
1022
  .comp-add{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;flex:none;color:var(--ink-2);background:transparent;}
@@ -1025,13 +1028,16 @@ button.tpeek-more:hover{color:var(--accent-ink);}
1025
1028
  .comp-setting svg{width:14px;height:14px;}
1026
1029
  .comp-setting.elevated{color:var(--amber);}
1027
1030
  .comp-model-name{min-width:0;max-width:220px;overflow:hidden;text-overflow:ellipsis;}
1028
- .comp-reasoning{color:var(--ink-3);font-size:11px;}
1029
1031
  .comp-setting:disabled,.comp-add:disabled{opacity:.5;cursor:default;}
1030
- .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
- .send:hover{filter:brightness(1.07);}
1032
- .send:disabled{opacity:.35;cursor:default;filter:none;}
1033
- .send.stop{background:var(--blue);color:#fff;}
1032
+ .send{width:44px;height:44px;min-width:44px;min-height:44px;flex:none;padding:0;border-radius:50%;background:var(--accent);color:var(--on-accent);display:grid;place-items:center;transition:filter .12s,opacity .12s,transform .12s;}
1033
+ .send:hover:not(:disabled){filter:brightness(1.08);}
1034
+ .send:active:not(:disabled){transform:scale(.96);filter:brightness(.94);}
1035
+ .send:disabled{opacity:.35;cursor:not-allowed;filter:none;}
1036
+ .send[aria-busy="true"]{opacity:.7;cursor:progress;}
1037
+ .send.stop{background:var(--blue);color:var(--on-accent);}
1034
1038
  .send.stop svg{fill:currentColor;width:15px;height:15px;}
1039
+ .send .spinner{width:18px;height:18px;border-color:color-mix(in srgb,currentColor 30%,transparent);border-top-color:currentColor;}
1040
+ @media(prefers-reduced-motion:reduce){.send{transition:none;}.send .spinner{animation:none;}}
1035
1041
  /* mid-turn: queue button + stop button sit side by side */
1036
1042
  .send-group{display:flex;align-items:flex-end;gap:8px;flex:0 0 auto;}
1037
1043
  .send svg{width:17px;height:17px;}
@@ -1052,16 +1058,9 @@ button.tpeek-more:hover{color:var(--accent-ink);}
1052
1058
 
1053
1059
  .send-group{display:flex;align-items:center;gap:6px;flex:none;}
1054
1060
  .send svg{width:19px;height:19px;}
1055
- .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
- .comp-caption button{display:flex;align-items:center;gap:4px;background:transparent;color:var(--ink-3);font-size:10px;}
1057
- .comp-caption button:disabled{opacity:.45;cursor:default;}
1058
1061
  .comp-error,.control-error{padding:8px 10px;font-size:12px;line-height:1.5;color:var(--red);overflow-wrap:anywhere;}
1059
1062
  .comp-upload-status{padding:6px 10px;font-size:11px;color:var(--ink-3);}
1060
- .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
- .comp-quote>div{flex:1;min-width:0;}
1062
- .comp-quote strong{font-weight:500;color:var(--ink-2);}
1063
- .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
- .comp-quote .icon-btn{width:24px;height:24px;flex:none;}
1063
+ .comp-quote{margin:12px 14px 0;}
1065
1064
  .hero-controls{display:flex;align-items:center;gap:12px;padding:12px 20px;border-bottom:1px solid var(--line);}
1066
1065
  .hero-controls .comp-model{margin-left:0;}
1067
1066
  .compact-chat{flex:1;}
@@ -1070,7 +1069,8 @@ button.tpeek-more:hover{color:var(--accent-ink);}
1070
1069
  .compact-session .sess-head{flex-wrap:wrap;}
1071
1070
  .compact-session .sh-tools{flex-wrap:wrap;}
1072
1071
  .msg-actions{display:flex;margin-top:6px;}
1073
- .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);}
1072
+ .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);}
1073
+ .msg-actions button svg{width:14px;height:14px;}
1074
1074
  .msg-actions button:hover,.msg-actions button:focus-visible{background:var(--surface-2);color:var(--ink);}
1075
1075
  .msg-body{overflow-wrap:anywhere;min-width:0;}
1076
1076
  button.pop-item{width:100%;text-align:left;background:transparent;color:var(--ink);font:inherit;}
@@ -1084,7 +1084,6 @@ button.pop-item:hover{background:var(--surface-2);}
1084
1084
  .comp-setting{font-size:11px;padding:5px;gap:4px;}
1085
1085
  .comp-model-name{max-width:145px;}
1086
1086
  .comp-area{padding:14px 16px 6px;}
1087
- .comp-caption{font-size:9px;}
1088
1087
  }
1089
1088
  @container (max-width:310px){
1090
1089
  .comp-control:has(.permission){flex:1;}
@@ -1353,10 +1352,111 @@ button.pop-item:hover{background:var(--surface-2);}
1353
1352
  .pop-item .pi-check svg{width:14px;height:14px;}
1354
1353
  .pop-item .pi-sub{font-family:var(--mono);font-size:10px;color:var(--ink-3);font-weight:400;}
1355
1354
  .pop-sec{padding:8px 13px 4px;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);}
1356
- .pop-custom-model{border-top:1px solid var(--line);padding-bottom:10px;}
1355
+ .pop-custom-model{border-top:1px solid var(--line-2);padding-bottom:10px;}
1357
1356
  .pop-custom-row{display:flex;gap:7px;padding:5px 10px;}
1358
1357
  .pop-custom-row input{min-width:260px;flex:1;font-size:11px;}
1359
1358
  .pop-custom-model>.pi-sub{max-width:360px;padding:0 11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1359
+ .run-agent-list{width:260px;max-width:100%;}
1360
+ .run-agent-option{min-height:44px;}
1361
+ .run-agent-trailing{margin-left:auto;display:flex;align-items:center;gap:8px;color:var(--ink-3);}
1362
+ .run-agent-trailing svg{width:14px;height:14px;}
1363
+ .run-settings{width:320px;max-width:100%;}
1364
+ .run-settings-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line-2);}
1365
+ .run-settings-head .run-settings-back{width:auto;font-size:12px;}
1366
+ .run-settings-back svg{width:14px;height:14px;}
1367
+ .run-settings-field{padding:4px 2px 10px;}
1368
+ .run-settings-note{margin:6px 0 0;font-size:11px;line-height:1.5;color:var(--ink-3);overflow-wrap:anywhere;}
1369
+ .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;}
1370
+ .run-settings .pop-custom-row button{min-height:38px;}
1371
+ /* Composer menus share one card treatment without changing task or board menus. */
1372
+ .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);}
1373
+ [data-theme="light"] .composer-popover{--composer-reasoning:#7c3aed;}
1374
+ .composer-menu-heading{padding:8px 10px 10px;font-size:12px;font-weight:500;color:var(--ink-3);}
1375
+ .composer-menu-note{margin:0;padding:0 10px 10px;color:var(--ink-3);font-size:11px;line-height:1.5;}
1376
+ .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;}
1377
+ .composer-popover .composer-option:hover:not(:disabled),.composer-popover .composer-option[aria-pressed="true"]{background:var(--surface-2);}
1378
+ .composer-option-icon{display:grid;place-items:center;flex:none;width:24px;height:26px;color:var(--ink-3);}
1379
+ .composer-option-icon svg{width:19px;height:19px;}
1380
+ .composer-option-copy{display:block;flex:1;min-width:0;}
1381
+ .composer-option-title{display:block;color:var(--ink);font-size:14px;font-weight:500;overflow-wrap:anywhere;}
1382
+ .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;}
1383
+ .composer-option-trailing{margin-left:auto;display:flex;align-items:center;gap:6px;flex:none;color:var(--accent);}
1384
+ .composer-option-trailing svg{width:16px;height:16px;}
1385
+ .composer-menu-key{color:var(--ink-4);font-size:12px;}
1386
+ .composer-popover .pop-sec{padding:8px 10px;font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;}
1387
+ .composer-popover .run-agent-list,.composer-popover .run-settings{width:auto;max-width:none;}
1388
+ .composer-popover .run-settings-head{margin:0 2px 10px;padding-bottom:4px;}
1389
+ .composer-popover .run-settings-back{min-height:40px;border-radius:10px;font-size:13px;}
1390
+ .composer-popover .run-models-back{display:flex;align-items:center;gap:8px;width:auto;min-height:40px;border-radius:10px;font-size:13px;}
1391
+ .run-models-back svg{width:14px;height:14px;}
1392
+ .run-field-label{display:block;color:var(--ink-3);font-size:12px;font-weight:500;padding:0 8px 8px;}
1393
+ .composer-popover .run-model-entry{border:1px solid var(--line);background:var(--surface);}
1394
+ .run-model-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
1395
+ .run-model-list{max-height:min(46vh,320px);overflow-y:auto;overscroll-behavior:contain;}
1396
+ .run-model-group-title{padding:12px 10px 4px;color:var(--ink-3);font-size:11px;}
1397
+ .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%);}
1398
+ .run-reasoning-head{display:flex;align-items:center;justify-content:space-between;gap:10px;}
1399
+ .run-reasoning-head .run-field-label{padding:0;}
1400
+ .run-reasoning-value{min-width:0;color:var(--composer-reasoning);font-size:18px;font-weight:600;overflow-wrap:anywhere;text-align:right;}
1401
+ .run-reasoning-note{margin:8px 0 14px;color:var(--ink-3);font-size:12px;line-height:1.5;}
1402
+ .run-reasoning-options{display:flex;flex-wrap:wrap;gap:5px;}
1403
+ .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;}
1404
+ .run-reasoning-option:hover:not(:disabled){border-color:var(--composer-reasoning);}
1405
+ .run-reasoning-option[aria-pressed="true"]{background:var(--composer-reasoning);border-color:transparent;color:var(--raise);font-weight:600;}
1406
+ .run-reasoning-option:disabled,.run-reasoning-reset:disabled{opacity:.5;cursor:default;}
1407
+ .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;}
1408
+ .run-reasoning-reset svg{width:14px;height:14px;}
1409
+ .run-reasoning-reset:hover:not(:disabled),.run-reasoning-reset[aria-pressed="true"]{color:var(--composer-reasoning);background:color-mix(in srgb,var(--composer-reasoning) 8%,transparent);}
1410
+ .run-settings .pop-custom-model{padding-top:8px;}
1411
+ .run-settings .pop-custom-model>.composer-menu-heading{display:block;padding-bottom:4px;}
1412
+ .run-settings .pop-custom-row input:focus-visible{outline:2px solid var(--accent);outline-offset:2px;}
1413
+ .composer-popover .control-error{margin:4px 2px;border-radius:10px;background:var(--red-soft);}
1414
+ .comp-add.on{color:var(--ink);}
1415
+ .comp-add.on svg{transform:rotate(45deg);}
1416
+ .composer .comp-setting{min-height:38px;border-radius:6px;padding:7px 10px;background:transparent;}
1417
+ .composer .comp-add{width:38px;height:38px;border-radius:6px;background:transparent;}
1418
+ .composer .comp-setting:hover:not(:disabled),.composer .comp-add:hover:not(:disabled){background:var(--surface-2);}
1419
+ .composer .send{width:44px;height:44px;}
1420
+ .composer .comp-box{border-radius:26px;border-color:var(--line);box-shadow:0 4px 20px rgba(0,0,0,.035);}
1421
+ .composer .comp-box:focus-within{border-color:var(--line-strong);box-shadow:0 6px 24px rgba(0,0,0,.055);}
1422
+ .composer .comp-toolbar{gap:6px;padding:6px 12px 12px;}
1423
+ .composer .comp-area{padding:18px 20px 12px;}
1424
+ .composer .attach-chip.image{width:108px;height:88px;border-radius:12px;}
1425
+ .composer .attach-chip.image>img{height:100%;object-fit:cover;}
1426
+ .composer .attach-chip .attach-x{width:26px;height:26px;top:4px;right:4px;font-size:16px;}
1427
+ .composer .attach-chip.file{border-radius:10px;}
1428
+ .composer .attach-row{gap:10px;padding:14px 16px 4px;flex-wrap:nowrap;overflow-x:auto;}
1429
+ .composer .attach-row .attach-chip{flex:none;}
1430
+ .composer .cli-blocks{max-height:min(30vh,180px);}
1431
+ @container(max-width:420px){
1432
+ .composer .comp-area{padding:14px 16px 8px;}
1433
+ .composer .comp-toolbar{gap:4px;padding:6px 10px 10px;}
1434
+ .composer .comp-setting{padding:6px 9px;}
1435
+ .composer .attach-chip.image{width:86px;height:76px;}
1436
+ }
1437
+ @container(max-width:360px){
1438
+ .composer .comp-toolbar{flex-wrap:nowrap;padding-left:8px;padding-right:8px;}
1439
+ .composer .comp-toolbar>.comp-control{flex:0 0 auto;}
1440
+ .composer .comp-toolbar>.comp-model{flex:0 1 auto;min-width:44px;margin-left:auto;}
1441
+ .composer .comp-setting{font-size:11px;gap:0;padding-left:6px;padding-right:6px;}
1442
+ .composer .comp-setting>svg{display:none;}
1443
+ .composer .comp-model-name{max-width:42px;}
1444
+ .composer .comp-toolbar:not(:has(.send.stop)) .comp-setting{gap:4px;font-size:12px;}
1445
+ .composer .comp-toolbar:not(:has(.send.stop)) .permission>svg:first-child{display:block;width:14px;height:14px;}
1446
+ .composer .comp-toolbar:not(:has(.send.stop)) .comp-model .comp-setting>svg{display:block;width:12px;height:12px;}
1447
+ .composer .comp-foot{flex-wrap:wrap;gap:6px;}
1448
+ .composer .comp-foot>.send-group{margin-left:auto;}
1449
+ }
1450
+ @media(pointer:coarse){
1451
+ .composer-popover .composer-option{min-height:52px;}
1452
+ .composer .comp-add,.composer .comp-setting,.composer .send{min-width:44px;min-height:44px;}
1453
+ .composer .attach-chip .attach-x{min-width:32px;min-height:32px;}
1454
+ }
1455
+ @media(prefers-reduced-motion:reduce){.popover.composer-popover{animation:none;}}
1456
+ @media(pointer:coarse){
1457
+ .run-settings .pop-custom-row input{min-height:44px;font-size:16px;}
1458
+ .run-settings-back,.run-models-back,.run-settings .pop-custom-row button,.run-reasoning-option,.run-reasoning-reset{min-height:44px;}
1459
+ }
1360
1460
 
1361
1461
  /* ⌘K command palette */
1362
1462
  .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,8 +1553,7 @@ button.pop-item:hover{background:var(--surface-2);}
1453
1553
  the home indicator. The keyboard hints are mouse-era noise on a phone. */
1454
1554
  .app.mobile .composer{padding:10px 12px calc(12px + env(safe-area-inset-bottom));}
1455
1555
  .app.mobile .comp-area textarea{font-size:16px;}
1456
- .app.mobile .comp-caption>span{display:none;}
1457
- .app.mobile .send{width:40px;height:40px;}
1556
+ .app.mobile .send{width:44px;height:44px;}
1458
1557
 
1459
1558
  /* Ask card options are tap targets — give them room. */
1460
1559
  .app.mobile .ask-opt{padding:10px 13px;}
@@ -1659,7 +1758,7 @@ button.pop-item:hover{background:var(--surface-2);}
1659
1758
  .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
1759
  .bp-handoff-sub{margin-top:4px;font-family:var(--mono);font-size:10.5px;color:var(--ink-3);}
1661
1760
  .bp-viewer{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--panel);box-shadow:var(--sh-2);position:relative;}
1662
- .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;}
1761
+ .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
1762
  .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
1763
  .bp-tab > span:first-child{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}
1665
1764
  .bp-tab.active{background:var(--panel);border-bottom-color:var(--accent);color:var(--ink);}
@@ -1724,8 +1823,9 @@ button.pop-item:hover{background:var(--surface-2);}
1724
1823
  .sess-head .sh-tools{gap:8px;flex-wrap:nowrap;flex-shrink:0;}
1725
1824
  .session-more{width:32px;height:32px;}
1726
1825
  .session-viewbar{display:flex;align-items:center;gap:16px;min-height:42px;padding:0 22px;border-bottom:1px solid var(--line-2);}
1727
- .session-agent-label{color:var(--ink-3);font-size:12px;}
1728
- .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;}
1826
+ .session-origin{display:flex;align-items:center;gap:6px;}
1827
+ .session-origin svg{width:14px;height:14px;flex:none;}
1828
+ .session-origin span{min-width:0;overflow-wrap:anywhere;}
1729
1829
  .session-viewbar .viewseg{flex-shrink:0;}
1730
1830
  .compact-session .sh-tools{flex-wrap:nowrap;}
1731
1831
  .composer{padding:16px 24px 12px;}
@@ -1733,9 +1833,16 @@ button.pop-item:hover{background:var(--surface-2);}
1733
1833
  .comp-area{padding:18px 20px 10px;}
1734
1834
  .comp-toolbar{padding:4px 14px 12px;}
1735
1835
  .comp-setting{font-size:13px;}
1736
- .comp-caption{font-size:11px;padding-top:9px;}
1737
- .comp-caption button{font-size:11px;}
1738
- .transcript .tw{max-width:800px;}
1836
+ /* Transcript and composer share one column; only a wide, isolated chat is capped. */
1837
+ [data-chat-layout]{--cli-chat-gutter:16px;--cli-chat-content-max:100%;container:chat-column / inline-size;}
1838
+ [data-chat-layout="centered"]{--cli-chat-content-max:50vw;}
1839
+ .body[data-chat-sidebars="open"]>.col-session [data-chat-layout="centered"]{--cli-chat-content-max:100%;}
1840
+ [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;}
1841
+ .session [data-chat-layout]>.composer{padding-inline:var(--cli-chat-gutter);padding-inline-end:calc(var(--cli-chat-gutter) + var(--cli-chat-scrollbar,0px));}
1842
+ [data-chat-layout]>.composer>.composer-inner{width:100%;max-width:var(--cli-chat-content-max);margin-inline:auto;}
1843
+ [data-chat-layout]>.cli-refs,[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;}
1844
+ @container chat-column (max-width:900px){[data-chat-layout]>*{--cli-chat-content-max:100%;}}
1845
+ @container chat-column (max-width:640px){[data-chat-layout]>*{--cli-chat-gutter:12px;}}
1739
1846
  .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
1847
  .fork-sources{display:flex;flex-wrap:wrap;gap:6px;padding:12px 14px 0;}
1741
1848
  .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;}