nolo-cli 0.79.0-alpha.1 → 0.79.0

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 (152) hide show
  1. package/README.md +2 -2
  2. package/{_executeModel-T3FPYFVF.js → _executeModel-U5V7LOJX.js} +46 -46
  3. package/{action-D22U6CTH.js → action-EXQVY3UO.js} +11 -11
  4. package/{addContentAction-XAPUTGL4.js → addContentAction-6IXQSRD2.js} +9 -9
  5. package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-FZOB4BYM.js} +8 -8
  6. package/{agentDeleteCommand-2TYFURBN.js → agentDeleteCommand-4MIJFQQB.js} +30 -28
  7. package/{agentEmailCommands-7P35ZMUA.js → agentEmailCommands-JUXT36BY.js} +62 -60
  8. package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-YW6PQAQ2.js} +2 -2
  9. package/{agentListCommands-IFUOWXP3.js → agentListCommands-MUVKMMZ5.js} +38 -30
  10. package/{agentMachineCommands-G46ZZ2ZQ.js → agentMachineCommands-56FTZLYV.js} +30 -28
  11. package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-TOMVKJOV.js} +87 -0
  12. package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-GLOOXJ2E.js} +3 -3
  13. package/{agentRecordCommands-R74LTQEQ.js → agentRecordCommands-FST3KAKG.js} +59 -57
  14. package/{agentRunCommand-IRSZYCEU.js → agentRunCommand-UMUEVIY2.js} +60 -58
  15. package/{agentRunControl-T44MESII.js → agentRunControl-XLGD3UZ5.js} +1 -1
  16. package/{agentRuntimeLocal-PUZINLWJ.js → agentRuntimeLocal-NH6GSGAJ.js} +28 -26
  17. package/{agentSlice-EACXUOWW.js → agentSlice-YZK6KG73.js} +10 -10
  18. package/{appDeleteCommands-U4NTEJYQ.js → appDeleteCommands-U45KXYX7.js} +30 -28
  19. package/{appDeployCommands-FXF45Q7F.js → appDeployCommands-LWQIQCFX.js} +30 -28
  20. package/{appDeployStatusCommands-KONVRM53.js → appDeployStatusCommands-LZO33PGD.js} +30 -28
  21. package/{appGetCommands-3VOGIZ7T.js → appGetCommands-OJSO6BCF.js} +30 -28
  22. package/{appListCommands-A6ROBW7P.js → appListCommands-NE56V7DI.js} +30 -28
  23. package/{authCommand-EVGFLAHO.js → authCommand-U5LA6H4Y.js} +164 -24
  24. package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
  25. package/builtinSkillRegistry-4NB7PCOF.js +33 -0
  26. package/{chatQueueReduxAdapter-XEIJO5WR.js → chatQueueReduxAdapter-FRMSYX7N.js} +24 -24
  27. package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
  28. package/{chunk-U6LKJRJB.js → chunk-377KM42Z.js} +42 -26
  29. package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
  30. package/{chunk-AFIWC5NH.js → chunk-3XMOAYRC.js} +1 -1
  31. package/{chunk-UJ63UXGE.js → chunk-4CAPEGHN.js} +1077 -752
  32. package/{chunk-DWPNOYMB.js → chunk-4JBZUECA.js} +1 -1
  33. package/{chunk-NG4UT4K4.js → chunk-4QKBQHPQ.js} +1 -1
  34. package/{chunk-UZ6XXCVR.js → chunk-546FPOW3.js} +15 -2
  35. package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
  36. package/chunk-5ZUL4CUO.js +10 -0
  37. package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
  38. package/{chunk-G3NT6BM3.js → chunk-7IBK6MYW.js} +142 -59
  39. package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
  40. package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
  41. package/{chunk-H7UKKEIS.js → chunk-AQDH76OK.js} +1 -1
  42. package/{chunk-L2Y24GRM.js → chunk-B4S7MR5S.js} +16 -12
  43. package/{chunk-E36HZARC.js → chunk-BF2K6MRF.js} +3 -3
  44. package/{chunk-MGU5ADIQ.js → chunk-BKP7CFUD.js} +10 -10
  45. package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
  46. package/{chunk-AFIKMMGC.js → chunk-COM7GG76.js} +1 -1
  47. package/{chunk-HH65VA5U.js → chunk-CPH3W5A7.js} +15 -3
  48. package/{chunk-XWNRAIUL.js → chunk-DM4UNXPK.js} +6 -16
  49. package/{chunk-ZLPA7K55.js → chunk-DSX6K7C2.js} +29 -10
  50. package/{chunk-QA6YKM3H.js → chunk-E2NP7ZQU.js} +32 -4
  51. package/{chunk-FSFQ3A7S.js → chunk-E3VQ6S3A.js} +10 -10
  52. package/{chunk-YFADVSZE.js → chunk-F3UTRUDO.js} +6 -6
  53. package/{chunk-KIS76A2P.js → chunk-G5X57NDE.js} +38 -4
  54. package/{chunk-BJIRLHJR.js → chunk-GII32WZW.js} +1 -0
  55. package/{chunk-DSRXPQWA.js → chunk-GRDSMV4V.js} +43 -43
  56. package/{chunk-733J6D44.js → chunk-HGRDL36J.js} +6 -6
  57. package/{chunk-OZX2IPKM.js → chunk-HQCSU3DI.js} +1 -1
  58. package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
  59. package/{chunk-QC5LGHYP.js → chunk-HWZAXNO7.js} +10 -5
  60. package/{chunk-Q6FF2MCK.js → chunk-IIKPWSPX.js} +1 -1
  61. package/{chunk-KC5FAHVS.js → chunk-JEDZAO7L.js} +1 -1
  62. package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
  63. package/{chunk-AJHEFRGJ.js → chunk-JTYPAMGP.js} +155 -1
  64. package/{chunk-UDQWGU7F.js → chunk-KR3YI36B.js} +1 -1
  65. package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
  66. package/{chunk-SZLVDREM.js → chunk-LSSBA2TN.js} +3 -3
  67. package/{chunk-CMH2SYHX.js → chunk-MBEEYLGL.js} +2 -2
  68. package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
  69. package/{chunk-PGSKWZCB.js → chunk-NKIH4Q7W.js} +1 -1
  70. package/{chunk-FPTQQSS6.js → chunk-OH7H6LPC.js} +26 -5
  71. package/{chunk-5J7W2VWW.js → chunk-OOLWKQSM.js} +6 -265
  72. package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
  73. package/chunk-Q5FJJ6XI.js +103 -0
  74. package/{chunk-JYYZCK2Z.js → chunk-QFMFJZLO.js} +1 -1
  75. package/{chunk-P7FA2HMM.js → chunk-QMASIHYZ.js} +13 -15
  76. package/{chunk-ZY4K4CZR.js → chunk-R2YY6MWV.js} +909 -304
  77. package/chunk-RLEWGSM5.js +677 -0
  78. package/{chunk-PYXL2CJL.js → chunk-RZYQMSQA.js} +1 -1
  79. package/{chunk-XEEHSS64.js → chunk-S3UI4IUJ.js} +1200 -52
  80. package/{chunk-SPAQ4PVV.js → chunk-SAFZABH7.js} +1 -1
  81. package/{chunk-QRBAZ5PW.js → chunk-SASGLNUD.js} +3 -3
  82. package/{chunk-D74EWXL4.js → chunk-SUERPXJZ.js} +390 -47
  83. package/{chunk-3QPYFHAH.js → chunk-TMAZ3VHN.js} +1 -1
  84. package/{chunk-BJCWNHVU.js → chunk-U47DH2WO.js} +2 -2
  85. package/{chunk-MEVSATIF.js → chunk-UBNV6CS6.js} +66 -792
  86. package/{chunk-EXMHJN7C.js → chunk-UDEFS2PV.js} +4 -3
  87. package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
  88. package/{chunk-4EJ5QYB5.js → chunk-VOOTT7HA.js} +1 -1
  89. package/{chunk-PZM3EENV.js → chunk-W2E6HIIK.js} +1 -1
  90. package/chunk-WKEUHK57.js +1625 -0
  91. package/{chunk-GBPZKFYK.js → chunk-WON762L4.js} +4 -4
  92. package/{chunk-X7Z7U4Z6.js → chunk-WP6BC7OF.js} +15 -15
  93. package/{chunk-QUH3XHL5.js → chunk-X2ZTVRXP.js} +7 -7
  94. package/{chunk-MYU3MJCF.js → chunk-XAQAF25W.js} +175 -7
  95. package/chunk-XGJAR4T5.js +283 -0
  96. package/{chunk-ZZCJUXUI.js → chunk-XLGHBHGP.js} +2 -2
  97. package/{chunk-V3ZKNK5D.js → chunk-YOXYA2GU.js} +10 -10
  98. package/{chunk-ALGK6TIE.js → chunk-YPYMGGPJ.js} +3 -3
  99. package/{chunk-K7AG465Q.js → chunk-ZHUTWJ3N.js} +4 -2
  100. package/{chunk-CDVGNZDA.js → chunk-ZKMYGRO7.js} +11 -173
  101. package/{contentThunks-3SPROFG5.js → contentThunks-TC3AENBY.js} +25 -25
  102. package/{createAgentAutomationAction-EIP2EG3O.js → createAgentAutomationAction-67EOD3WK.js} +25 -25
  103. package/{createDialogAction-RLUSTN4D.js → createDialogAction-4OCQC5MW.js} +28 -28
  104. package/{createPageAction-4Y52G7WG.js → createPageAction-JLGVP57B.js} +26 -26
  105. package/{dbSlice-GKGGFNOB.js → dbSlice-RDGCE5MU.js} +8 -8
  106. package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
  107. package/{dialogCommands-G223U5WU.js → dialogCommands-JHSDKCR5.js} +32 -30
  108. package/{dialogSlice-THY45JWM.js → dialogSlice-I2DK32ZT.js} +24 -24
  109. package/{docCreateCommands-2P47IJDK.js → docCreateCommands-QUL6VWK2.js} +31 -29
  110. package/{docDeleteCommands-N3EGDOIC.js → docDeleteCommands-DMQ2MU6I.js} +32 -30
  111. package/{docReadCommands-6BFV2HI7.js → docReadCommands-FVHENBU6.js} +31 -29
  112. package/{docStore-ZQ3ECOPY.js → docStore-OLC6MD7B.js} +9 -9
  113. package/{docUpdateCommands-ZTMPXHC5.js → docUpdateCommands-VA6V5C6L.js} +31 -29
  114. package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
  115. package/{getPricing-HRMSOF3E.js → getPricing-YYXTEPBP.js} +4 -4
  116. package/{handleSendMessageAction-CE4M5XIE.js → handleSendMessageAction-GRDIRXAK.js} +24 -24
  117. package/index.js +88 -80
  118. package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
  119. package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
  120. package/{machineCommands-4OT7KVCD.js → machineCommands-IJJ66MYU.js} +59 -57
  121. package/{machineWsRunDispatch-TR3EYESP.js → machineWsRunDispatch-PP2ZBS6D.js} +57 -55
  122. package/{memberThunks-KATHH3F4.js → memberThunks-WQGQWYYT.js} +9 -9
  123. package/{models-GS72DVJS.js → models-UN7YGMPM.js} +2 -2
  124. package/{offlineMarxistsAgentCommand-GEH6SNNA.js → offlineMarxistsAgentCommand-JEWCIAWM.js} +1 -1
  125. package/package.json +1 -1
  126. package/providerPresetApply-NO73BG45.js +214 -0
  127. package/providerRegistry-OVY4VKNN.js +31 -0
  128. package/{read-LC6HVYBN.js → read-S4WC2OUK.js} +5 -4
  129. package/{readDocTool-N3ERJHHF.js → readDocTool-PQNM63KV.js} +1 -1
  130. package/{readlineWorkspace-GSL5CYNJ.js → readlineWorkspace-ASJECDJD.js} +196 -111
  131. package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-YJZ6XJV6.js} +11 -11
  132. package/{runAgentClientLoop-NE5EHXSS.js → runAgentClientLoop-KIOQSDRC.js} +45 -45
  133. package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
  134. package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-E6A3WL4E.js} +9 -9
  135. package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-WBLIVICQ.js} +11 -11
  136. package/{settingSlice-OEJA4NQO.js → settingSlice-JR6S7TRD.js} +10 -10
  137. package/{spaceCommands-MRP5U3C3.js → spaceCommands-WDUNCAK5.js} +29 -27
  138. package/{streamAgentChatTurn-A6L6O22P.js → streamAgentChatTurn-EGQDPMAO.js} +57 -56
  139. package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-DTR36ZY2.js} +8 -8
  140. package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
  141. package/{toolApiClient-VGYUB4P5.js → toolApiClient-7PSIFQPJ.js} +2 -2
  142. package/{tools-JS475NYO.js → tools-AOVE5LKM.js} +41 -39
  143. package/tuiSummaryLlmCaller-XRQCSNYQ.js +127 -0
  144. package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
  145. package/{updateDialogTitleAction-GMZUT6RP.js → updateDialogTitleAction-T66TXHIR.js} +45 -28
  146. package/chunk-3IT2PFHL.js +0 -611
  147. package/chunk-I42VC5KR.js +0 -15
  148. package/codingSkills-E6KSDNSJ.js +0 -48
  149. package/tuiSummaryLlmCaller-3Z24VUWM.js +0 -116
  150. package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
  151. package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
  152. package/{localRuntimeAuthority-R5UBODT3.js → localRuntimeAuthority-6IR6BBXE.js} +3 -3
@@ -0,0 +1,31 @@
1
+ import {
2
+ ALL_PROVIDER_REGISTRY,
3
+ CUSTOM_API_KEY_TEMPLATES,
4
+ SUBSCRIPTION_OAUTH_PROVIDERS,
5
+ findProviderById,
6
+ isCustomApiKeyTemplate,
7
+ isSubscriptionOAuthProvider
8
+ } from "./chunk-RLEWGSM5.js";
9
+ import "./chunk-NKIH4Q7W.js";
10
+ import "./chunk-MBEEYLGL.js";
11
+ import "./chunk-ZHUTWJ3N.js";
12
+ import "./chunk-4CAPEGHN.js";
13
+ import "./chunk-W7XHHYWM.js";
14
+ import "./chunk-HNMXYYJR.js";
15
+ import "./chunk-JTYPAMGP.js";
16
+ import "./chunk-WWC7I6TA.js";
17
+ import "./chunk-QSJ3HFEF.js";
18
+ import "./chunk-KUG52IAP.js";
19
+ import "./chunk-3EUW3WEO.js";
20
+ import "./chunk-4SN6J65J.js";
21
+ import "./chunk-CF7PE763.js";
22
+ import "./chunk-G3SUCT4W.js";
23
+ import "./chunk-4VNS5WPM.js";
24
+ export {
25
+ ALL_PROVIDER_REGISTRY,
26
+ CUSTOM_API_KEY_TEMPLATES,
27
+ SUBSCRIPTION_OAUTH_PROVIDERS,
28
+ findProviderById,
29
+ isCustomApiKeyTemplate,
30
+ isSubscriptionOAuthProvider
31
+ };
@@ -1,15 +1,16 @@
1
1
  import {
2
2
  readAction
3
- } from "./chunk-5J7W2VWW.js";
4
- import "./chunk-BJIRLHJR.js";
5
- import "./chunk-3RAG2NAD.js";
3
+ } from "./chunk-OOLWKQSM.js";
4
+ import "./chunk-XGJAR4T5.js";
5
+ import "./chunk-GII32WZW.js";
6
+ import "./chunk-UKWGR5SS.js";
6
7
  import "./chunk-QOKAKDPE.js";
7
8
  import "./chunk-OW765XBU.js";
8
9
  import "./chunk-SEJ5OS6F.js";
9
10
  import "./chunk-GBRG75BQ.js";
11
+ import "./chunk-KUG52IAP.js";
10
12
  import "./chunk-3EUW3WEO.js";
11
13
  import "./chunk-U6VC4MU4.js";
12
- import "./chunk-KUG52IAP.js";
13
14
  import "./chunk-LCBAMY2M.js";
14
15
  import "./chunk-4SN6J65J.js";
15
16
  import "./chunk-CF7PE763.js";
@@ -4,7 +4,7 @@ import {
4
4
  readDocFunctionSchema,
5
5
  readPageFunc,
6
6
  readPageFunctionSchema
7
- } from "./chunk-UDQWGU7F.js";
7
+ } from "./chunk-KR3YI36B.js";
8
8
  import "./chunk-HNMXYYJR.js";
9
9
  import "./chunk-4VNS5WPM.js";
10
10
  export {
@@ -1,14 +1,14 @@
1
- import "./chunk-M3JEW6N6.js";
2
1
  import {
3
2
  defaultOpenBrowser,
4
3
  saveTokenLogin
5
- } from "./chunk-E6RGHPDR.js";
4
+ } from "./chunk-6D6VBVEW.js";
6
5
  import {
7
6
  isScheduledDialog,
8
7
  normalizeDialogRecord,
9
8
  readDialogSnapshot,
10
9
  sortDialogs
11
- } from "./chunk-FSFQ3A7S.js";
10
+ } from "./chunk-E3VQ6S3A.js";
11
+ import "./chunk-M3JEW6N6.js";
12
12
  import {
13
13
  ANSI_ESCAPE_REGEX,
14
14
  COLLAPSED_PASTE_PLACEHOLDER_RE,
@@ -72,21 +72,21 @@ import {
72
72
  wrapTextToLines,
73
73
  wrapTranscriptLine,
74
74
  wrapTranscriptLineWithLayout
75
- } from "./chunk-XEEHSS64.js";
75
+ } from "./chunk-S3UI4IUJ.js";
76
76
  import "./chunk-S7Z2HMCN.js";
77
+ import "./chunk-QFMFJZLO.js";
77
78
  import {
78
79
  listFavoriteAgentIdsAcrossServers,
79
80
  listLocalCachedAgents,
80
81
  listRemoteAgents,
81
82
  listRemoteAgentsAcrossServers,
82
83
  normalizeListedAgent
83
- } from "./chunk-L2Y24GRM.js";
84
+ } from "./chunk-B4S7MR5S.js";
84
85
  import "./chunk-ID4G2MAR.js";
85
86
  import {
86
87
  listUserRecordsFromServers,
87
88
  readLiveDbRecordAfterTombstoneMerge
88
- } from "./chunk-AFIWC5NH.js";
89
- import "./chunk-JYYZCK2Z.js";
89
+ } from "./chunk-3XMOAYRC.js";
90
90
  import {
91
91
  RUN_WAKE_CHANNEL_ENV,
92
92
  createCliLocalRuntimeAdapter,
@@ -96,31 +96,31 @@ import {
96
96
  readTimestamp,
97
97
  setCliLocale,
98
98
  t
99
- } from "./chunk-G3NT6BM3.js";
100
- import "./chunk-GBPZKFYK.js";
101
- import "./chunk-QCZX4FTW.js";
99
+ } from "./chunk-7IBK6MYW.js";
100
+ import "./chunk-WON762L4.js";
102
101
  import "./chunk-EADNWBAZ.js";
102
+ import "./chunk-QCZX4FTW.js";
103
103
  import {
104
104
  backfillRunRecordParentDialog,
105
105
  checkStaleRun,
106
106
  isRunRecordClaimed,
107
107
  listRunRecords,
108
108
  readRunRecord
109
- } from "./chunk-HH65VA5U.js";
109
+ } from "./chunk-CPH3W5A7.js";
110
110
  import "./chunk-DWUCB2A3.js";
111
111
  import {
112
112
  getReadableCliDb
113
- } from "./chunk-RXX4GDIH.js";
113
+ } from "./chunk-LS2ZANRJ.js";
114
114
  import {
115
115
  deleteDbRecord,
116
116
  queryUserRecords,
117
117
  readDbRecord
118
- } from "./chunk-QA6YKM3H.js";
119
- import "./chunk-Q6FF2MCK.js";
118
+ } from "./chunk-E2NP7ZQU.js";
119
+ import "./chunk-IIKPWSPX.js";
120
120
  import {
121
121
  NOLO_DEFAULT_AGENT_KEY,
122
122
  resolveCliAgentKeyInput
123
- } from "./chunk-SPAQ4PVV.js";
123
+ } from "./chunk-SAFZABH7.js";
124
124
  import {
125
125
  createChatQueueRuntime,
126
126
  createTurnRequest,
@@ -130,18 +130,18 @@ import "./chunk-MP64VFGD.js";
130
130
  import "./chunk-ESHYE7WU.js";
131
131
  import "./chunk-JBTJAPUF.js";
132
132
  import "./chunk-LTRXGFMS.js";
133
- import "./chunk-3QPYFHAH.js";
133
+ import "./chunk-TMAZ3VHN.js";
134
134
  import "./chunk-ATNTHIZI.js";
135
135
  import "./chunk-JEXVIMYZ.js";
136
136
  import {
137
137
  prepareTools
138
- } from "./chunk-ALGK6TIE.js";
138
+ } from "./chunk-YPYMGGPJ.js";
139
139
  import {
140
140
  buildResponseGuidelines
141
141
  } from "./chunk-EOARMOVD.js";
142
142
  import "./chunk-HS7MLR74.js";
143
- import "./chunk-MEVSATIF.js";
144
- import "./chunk-5XTOKQLW.js";
143
+ import "./chunk-UBNV6CS6.js";
144
+ import "./chunk-5UTFL4QJ.js";
145
145
  import "./chunk-NF64D32W.js";
146
146
  import "./chunk-3L2WKC3W.js";
147
147
  import {
@@ -155,79 +155,82 @@ import {
155
155
  runShowsLogTail,
156
156
  shortRunId
157
157
  } from "./chunk-NTW5GWDM.js";
158
- import "./chunk-FPTQQSS6.js";
158
+ import "./chunk-OH7H6LPC.js";
159
159
  import "./chunk-KQHGZWSV.js";
160
- import "./chunk-UDQWGU7F.js";
161
- import "./chunk-PZM3EENV.js";
162
- import "./chunk-OZX2IPKM.js";
163
- import "./chunk-4EJ5QYB5.js";
160
+ import "./chunk-KR3YI36B.js";
161
+ import "./chunk-W2E6HIIK.js";
162
+ import "./chunk-HQCSU3DI.js";
163
+ import "./chunk-VOOTT7HA.js";
164
164
  import "./chunk-N4G4PKQ6.js";
165
165
  import "./chunk-FZGV4FGK.js";
166
166
  import "./chunk-MEYIRKDN.js";
167
167
  import "./chunk-63W5N6P3.js";
168
168
  import "./chunk-VF4K2QE6.js";
169
- import "./chunk-QRBAZ5PW.js";
170
- import "./chunk-CDVGNZDA.js";
171
- import "./chunk-P7FA2HMM.js";
169
+ import "./chunk-SASGLNUD.js";
170
+ import "./chunk-ZKMYGRO7.js";
171
+ import "./chunk-QMASIHYZ.js";
172
172
  import "./chunk-ZJ7UHBJS.js";
173
173
  import {
174
174
  extractReferenceKeysFromMessage
175
- } from "./chunk-D74EWXL4.js";
176
- import "./chunk-EVBFYPDC.js";
177
- import "./chunk-HQUORJTM.js";
175
+ } from "./chunk-SUERPXJZ.js";
176
+ import "./chunk-MC4XLIJ7.js";
177
+ import "./chunk-3BMYXEUW.js";
178
178
  import "./chunk-YYLHWIW6.js";
179
179
  import "./chunk-AGGIDPCZ.js";
180
- import "./chunk-QUH3XHL5.js";
181
- import "./chunk-BJCWNHVU.js";
180
+ import "./chunk-X2ZTVRXP.js";
181
+ import "./chunk-U47DH2WO.js";
182
182
  import "./chunk-5RGU3J7P.js";
183
183
  import "./chunk-6YTOJY35.js";
184
184
  import "./chunk-M76ECQRD.js";
185
185
  import "./chunk-YDH3FDFQ.js";
186
186
  import "./chunk-URMS4XY2.js";
187
187
  import "./chunk-TRV2MIDW.js";
188
- import "./chunk-C3FZR5EC.js";
188
+ import "./chunk-2F7RJC6L.js";
189
189
  import "./chunk-GLKOYSRU.js";
190
190
  import {
191
191
  buildSkillDiscoveryContextBlock,
192
192
  buildSkillDiscoveryContextLayer
193
193
  } from "./chunk-E4MARS3Q.js";
194
- import "./chunk-3IT2PFHL.js";
194
+ import "./chunk-WKEUHK57.js";
195
195
  import {
196
196
  expandEnabledPacks
197
- } from "./chunk-MYU3MJCF.js";
198
- import "./chunk-AETZ7AD6.js";
197
+ } from "./chunk-XAQAF25W.js";
198
+ import "./chunk-Q554LLSI.js";
199
199
  import "./chunk-KHCLMKZZ.js";
200
200
  import {
201
201
  buildLocalWorkspaceOpenAiTools,
202
202
  buildLocalWorkspaceToolset,
203
+ formatToolOverflowMarker,
203
204
  getProcessRegistry,
204
205
  readCommandActionGatePayload
205
- } from "./chunk-ZY4K4CZR.js";
206
+ } from "./chunk-R2YY6MWV.js";
207
+ import "./chunk-HWZAXNO7.js";
208
+ import "./chunk-Q5FJJ6XI.js";
206
209
  import "./chunk-ZNFJWEN4.js";
207
- import "./chunk-QC5LGHYP.js";
208
- import "./chunk-KIS76A2P.js";
210
+ import "./chunk-G5X57NDE.js";
209
211
  import "./chunk-CQ3WA2NE.js";
212
+ import "./chunk-5ZUL4CUO.js";
210
213
  import "./chunk-N7J63Q6C.js";
211
214
  import {
212
215
  buildIdentityBlock,
213
216
  buildRuntimeGuidanceBlocks,
214
217
  resolveToolGuidedSections
215
- } from "./chunk-ZLPA7K55.js";
218
+ } from "./chunk-DSX6K7C2.js";
216
219
  import "./chunk-PUOC4YRO.js";
217
- import "./chunk-PGSKWZCB.js";
218
- import {
219
- resolvePlatformAuthToken
220
- } from "./chunk-CMH2SYHX.js";
221
- import "./chunk-V3ZKNK5D.js";
220
+ import "./chunk-YOXYA2GU.js";
222
221
  import {
223
222
  isQuotaExhaustedError
224
223
  } from "./chunk-CJCJF5XB.js";
224
+ import "./chunk-NKIH4Q7W.js";
225
+ import {
226
+ resolvePlatformAuthToken
227
+ } from "./chunk-MBEEYLGL.js";
225
228
  import "./chunk-2MBTWINN.js";
226
229
  import {
227
230
  DEFAULT_CONTEXT_WINDOW,
228
231
  getModelContextWindow,
229
232
  normalizeUsage
230
- } from "./chunk-DSRXPQWA.js";
233
+ } from "./chunk-GRDSMV4V.js";
231
234
  import {
232
235
  buildCompactionMetricsFromPlan,
233
236
  buildCompactionUserContent,
@@ -237,17 +240,17 @@ import {
237
240
  formatMessagesForSummaryWithTruncation,
238
241
  planCompression,
239
242
  serializeMessageContent
240
- } from "./chunk-E36HZARC.js";
241
- import "./chunk-K7AG465Q.js";
243
+ } from "./chunk-BF2K6MRF.js";
242
244
  import {
243
245
  estimateTokenCount
244
246
  } from "./chunk-PSCNXBYA.js";
247
+ import "./chunk-ZHUTWJ3N.js";
245
248
  import "./chunk-BYXBJQAS.js";
246
- import "./chunk-UJ63UXGE.js";
249
+ import "./chunk-4CAPEGHN.js";
247
250
  import {
248
251
  compactWhitespace
249
252
  } from "./chunk-DWLEOOGR.js";
250
- import "./chunk-3JQ2NRYU.js";
253
+ import "./chunk-HVURBGF3.js";
251
254
  import "./chunk-ONXOABJR.js";
252
255
  import "./chunk-W7XHHYWM.js";
253
256
  import {
@@ -265,11 +268,11 @@ import {
265
268
  import {
266
269
  canonicalizeToolNames
267
270
  } from "./chunk-O6OSWFZQ.js";
268
- import "./chunk-BYEJ7K2Z.js";
271
+ import "./chunk-7S4YWN7P.js";
269
272
  import {
270
273
  checkForCliUpdate,
271
274
  runSelfUpdateDetailed
272
- } from "./chunk-KC5FAHVS.js";
275
+ } from "./chunk-JEDZAO7L.js";
273
276
  import {
274
277
  getAgentSelectionAuditPath,
275
278
  getDefaultProfileConfigPath,
@@ -279,7 +282,7 @@ import {
279
282
  saveProfileAgentSelection,
280
283
  saveProfileLocale,
281
284
  saveProfileTokens
282
- } from "./chunk-2KDR4CWE.js";
285
+ } from "./chunk-BYMV6QZG.js";
283
286
  import {
284
287
  readPipeText,
285
288
  spawnProcess
@@ -293,41 +296,41 @@ import {
293
296
  import {
294
297
  DEFAULT_NOLO_SERVER_URL
295
298
  } from "./chunk-OLZBQWZU.js";
296
- import "./chunk-NG4UT4K4.js";
297
- import "./chunk-AJHEFRGJ.js";
298
- import "./chunk-SZLVDREM.js";
299
- import "./chunk-XWNRAIUL.js";
299
+ import "./chunk-4QKBQHPQ.js";
300
+ import "./chunk-JTYPAMGP.js";
301
+ import "./chunk-LSSBA2TN.js";
302
+ import "./chunk-DM4UNXPK.js";
300
303
  import "./chunk-Y5GCAMGP.js";
301
- import "./chunk-UZ6XXCVR.js";
304
+ import "./chunk-546FPOW3.js";
302
305
  import "./chunk-KX6YBIHG.js";
303
- import "./chunk-ZZCJUXUI.js";
306
+ import "./chunk-XLGHBHGP.js";
304
307
  import "./chunk-UAD2WT54.js";
305
- import "./chunk-YFADVSZE.js";
306
- import "./chunk-NHRQCXIQ.js";
308
+ import "./chunk-F3UTRUDO.js";
309
+ import "./chunk-VMFTFOWF.js";
307
310
  import "./chunk-WWC7I6TA.js";
308
- import "./chunk-I42VC5KR.js";
309
- import "./chunk-SREASRV5.js";
311
+ import "./chunk-ABQYVJBJ.js";
310
312
  import {
311
313
  asTrimmedLowercaseString
312
314
  } from "./chunk-QSJ3HFEF.js";
315
+ import "./chunk-OOLWKQSM.js";
313
316
  import {
314
317
  BUILTIN_NOLO_AGENT_KEY,
315
318
  BUILTIN_NOLO_AGENT_MODEL,
316
319
  BUILTIN_NOLO_AGENT_NAME,
317
320
  builtinAgentCatalogEntryById
318
- } from "./chunk-5J7W2VWW.js";
321
+ } from "./chunk-XGJAR4T5.js";
319
322
  import {
320
323
  extractCustomId,
321
324
  parsePublicAgentId
322
- } from "./chunk-BJIRLHJR.js";
323
- import "./chunk-3RAG2NAD.js";
325
+ } from "./chunk-GII32WZW.js";
326
+ import "./chunk-UKWGR5SS.js";
324
327
  import "./chunk-QOKAKDPE.js";
325
328
  import "./chunk-OW765XBU.js";
326
329
  import "./chunk-SEJ5OS6F.js";
327
330
  import "./chunk-GBRG75BQ.js";
331
+ import "./chunk-KUG52IAP.js";
328
332
  import "./chunk-3EUW3WEO.js";
329
333
  import "./chunk-U6VC4MU4.js";
330
- import "./chunk-KUG52IAP.js";
331
334
  import "./chunk-LCBAMY2M.js";
332
335
  import "./chunk-4SN6J65J.js";
333
336
  import {
@@ -347,7 +350,7 @@ import { stdin as defaultInput, stdout as defaultOutput } from "node:process";
347
350
  import nacl from "tweetnacl";
348
351
 
349
352
  // node_modules/js-base64/base64.mjs
350
- var version = "3.9.3";
353
+ var version = "3.9.4";
351
354
  var VERSION = version;
352
355
  var _TD = typeof TextDecoder === "function" ? new TextDecoder("utf-8", { ignoreBOM: true }) : void 0;
353
356
  var _TE = typeof TextEncoder === "function" ? new TextEncoder() : void 0;
@@ -1656,13 +1659,14 @@ function layoutTurnRows(role, content, contentWidth, colorEnabled, command) {
1656
1659
  const surfaceSeq = colorEnabled ? userSurfaceBackgroundSequence() : "";
1657
1660
  const boldOn = colorEnabled ? "\x1B[1m" : "";
1658
1661
  const boldOff = colorEnabled ? "\x1B[22m" : "";
1662
+ const fgOff = colorEnabled ? "\x1B[39m" : "";
1659
1663
  const prefixWidth = 3;
1660
1664
  let lineSourceStart = 0;
1661
1665
  const rows2 = [];
1662
1666
  for (let i = 0; i < logicalLines.length; i++) {
1663
1667
  const line = logicalLines[i];
1664
1668
  const prefix = i === 0 ? firstPrefix : multilinePrefix;
1665
- const styledLine = `${prefix}${boldOn}${line}${boldOff}`;
1669
+ const styledLine = `${prefix}${accentSeq}${boldOn}${line}${boldOff}${fgOff}`;
1666
1670
  const prefixCharCount = prefix.length;
1667
1671
  const wrappedRows = wrapTranscriptLineWithLayout(
1668
1672
  styledLine,
@@ -1855,9 +1859,10 @@ function renderTailTurnBlock(role, content, contentWidth, colorEnabled) {
1855
1859
  const hangingIndent = colorEnabled ? `${accentSeq}\x1B[1m\u2503 \x1B[0m` : "\u2503 ";
1856
1860
  const boldOn = colorEnabled ? "\x1B[1m" : "";
1857
1861
  const boldOff = colorEnabled ? "\x1B[22m" : "";
1862
+ const fgOff = colorEnabled ? "\x1B[39m" : "";
1858
1863
  const lines = [];
1859
1864
  for (const rawLine of content.split("\n")) {
1860
- const styledLine = `${multilinePrefix}${boldOn}${rawLine}${boldOff}`;
1865
+ const styledLine = `${multilinePrefix}${accentSeq}${boldOn}${rawLine}${boldOff}${fgOff}`;
1861
1866
  const rows = wrapTranscriptLine(styledLine, contentWidth, hangingIndent);
1862
1867
  lines.push(
1863
1868
  ...surfaceSeq ? rows.map((row) => fillUserBubbleRow(row, surfaceSeq, contentWidth)) : rows
@@ -3885,7 +3890,7 @@ function mergeCatalogEntries(currentKey, platformAgents, privateAgents, favorite
3885
3890
  }
3886
3891
  var agentCatalogCache = null;
3887
3892
  var agentCatalogRefreshInFlight = null;
3888
- var agentCatalogRawLoadInFlight = null;
3893
+ var agentCatalogRawLoadInFlight = /* @__PURE__ */ new Map();
3889
3894
  var AGENT_CATALOG_FRESH_MS = 15e3;
3890
3895
  var AGENT_CATALOG_FOREGROUND_DEADLINE_MS = 2500;
3891
3896
  var AGENT_CATALOG_BACKGROUND_DEADLINE_MS = 8e3;
@@ -3907,6 +3912,9 @@ function filterHealthyServers(serverUrls) {
3907
3912
  });
3908
3913
  return healthy.length > 0 ? healthy : serverUrls;
3909
3914
  }
3915
+ function keepPrimaryServer(serverUrls, primary) {
3916
+ return serverUrls.includes(primary) ? serverUrls : [primary, ...serverUrls];
3917
+ }
3910
3918
  function recordServerFailures(failures) {
3911
3919
  const now = serverHealthNow();
3912
3920
  for (const failure of failures) {
@@ -3980,18 +3988,20 @@ async function loadAgentCatalog(args) {
3980
3988
  return cached.entries;
3981
3989
  }
3982
3990
  let rawData;
3983
- if (agentCatalogRawLoadInFlight) {
3984
- rawData = await agentCatalogRawLoadInFlight;
3991
+ const deadlineKind = args.deadlineKind ?? "foreground";
3992
+ const inFlight = agentCatalogRawLoadInFlight.get(deadlineKind);
3993
+ if (inFlight) {
3994
+ rawData = await inFlight;
3985
3995
  } else {
3986
- const promise = fetchRawCatalogData(args, env);
3987
- agentCatalogRawLoadInFlight = promise;
3996
+ const promise = fetchRawCatalogData({ ...args, deadlineKind }, env);
3997
+ agentCatalogRawLoadInFlight.set(deadlineKind, promise);
3988
3998
  try {
3989
3999
  rawData = await promise;
3990
- } catch (error) {
3991
- agentCatalogRawLoadInFlight = null;
3992
- throw error;
4000
+ } finally {
4001
+ if (agentCatalogRawLoadInFlight.get(deadlineKind) === promise) {
4002
+ agentCatalogRawLoadInFlight.delete(deadlineKind);
4003
+ }
3993
4004
  }
3994
- agentCatalogRawLoadInFlight = null;
3995
4005
  }
3996
4006
  const entries = mergeCatalogEntries(
3997
4007
  args.currentKey,
@@ -4026,7 +4036,7 @@ function prefetchAgentCatalog(args) {
4026
4036
  void (async () => {
4027
4037
  await prefillCatalogFromLocalDb({ env: args.env, getDb: args.getDb }).catch(() => {
4028
4038
  });
4029
- void loadAgentCatalog({ ...args, currentKey: "" }).catch(() => {
4039
+ void loadAgentCatalog({ ...args, currentKey: "", deadlineKind: "background" }).catch(() => {
4030
4040
  });
4031
4041
  })();
4032
4042
  }
@@ -4041,7 +4051,7 @@ async function fetchRawCatalogData(args, env) {
4041
4051
  }
4042
4052
  const serverUrl = resolveServerUrl(env);
4043
4053
  const allServerUrls = resolveServerCandidates([], env, serverUrl);
4044
- const serverUrls = (args.deadlineKind ?? "foreground") === "foreground" ? filterHealthyServers(allServerUrls) : allServerUrls;
4054
+ const serverUrls = (args.deadlineKind ?? "foreground") === "foreground" ? keepPrimaryServer(filterHealthyServers(allServerUrls), serverUrl) : allServerUrls;
4045
4055
  const fetchStartedAt = performance.now();
4046
4056
  let listedAgents = [];
4047
4057
  const favoritesPromise = listFavoriteAgentIdsAcrossServers({
@@ -4070,9 +4080,28 @@ async function fetchRawCatalogData(args, env) {
4070
4080
  recordServerFailures(remoteResult.failures);
4071
4081
  } catch {
4072
4082
  try {
4073
- const db = args.getDb ? await args.getDb() : await getReadableCliDb({ write: () => {
4074
- } });
4075
- listedAgents = await listLocalCachedAgents({ db, userId });
4083
+ const localBudgetMs = Math.max(
4084
+ 500,
4085
+ deadlineMs - (performance.now() - fetchStartedAt)
4086
+ );
4087
+ let localTimer;
4088
+ try {
4089
+ listedAgents = await Promise.race([
4090
+ (async () => {
4091
+ const db = args.getDb ? await args.getDb() : await getReadableCliDb({ write: () => {
4092
+ } });
4093
+ return listLocalCachedAgents({ db, userId });
4094
+ })(),
4095
+ new Promise((_, reject) => {
4096
+ localTimer = setTimeout(
4097
+ () => reject(new Error("local catalog deadline exceeded")),
4098
+ localBudgetMs
4099
+ );
4100
+ })
4101
+ ]);
4102
+ } finally {
4103
+ if (localTimer) clearTimeout(localTimer);
4104
+ }
4076
4105
  } catch {
4077
4106
  try {
4078
4107
  listedAgents = await listRemoteAgents({
@@ -6749,11 +6778,41 @@ function createTurnInjectionInbox() {
6749
6778
  function formatProcessTerminalWakeMessage(notices) {
6750
6779
  return [
6751
6780
  `<background_task_completion count="${notices.length}">`,
6752
- ...notices.map(formatProcessTerminalNoticeLine),
6753
- `\u9700\u8981\u8F93\u51FA/\u8BE6\u60C5\u65F6: taskLogs(taskId) \u6216 tasks`,
6781
+ ...notices.flatMap((notice) => [
6782
+ formatProcessTerminalNoticeLine(notice),
6783
+ ...notice.resultCapsule ? formatProcessResultCapsuleLines(notice.resultCapsule) : []
6784
+ ]),
6754
6785
  `</background_task_completion>`
6755
6786
  ].join("\n");
6756
6787
  }
6788
+ function formatProcessResultCapsuleLines(capsule) {
6789
+ const meta = [];
6790
+ if (capsule.durationMs !== void 0) meta.push(`duration=${capsule.durationMs}ms`);
6791
+ meta.push(capsule.truncated ? "tail-only" : "full");
6792
+ const stream = (name, value) => [
6793
+ `--- ${name} ---`,
6794
+ ...value.trim() ? value.replace(/\n+$/, "").split("\n") : ["(empty)"]
6795
+ ];
6796
+ const omittedChars = capsule.spill ? Math.max(0, capsule.spill.totalChars - capsule.stdout.length - capsule.stderr.length) : 0;
6797
+ return [
6798
+ `result capsule (${meta.join(", ")}):`,
6799
+ ...capsule.captureError ? [`capture error: ${capsule.captureError}`] : [],
6800
+ ...stream("stdout", capsule.stdout),
6801
+ ...stream("stderr", capsule.stderr),
6802
+ // Retrieval pointer reuses the tool-overflow convention: the model learns
6803
+ // one marker for "the tail above is not the whole story, full text lives
6804
+ // here", whether the truncation happened in a foreground tool result or in
6805
+ // a detached task capsule.
6806
+ ...capsule.spill ? [
6807
+ formatToolOverflowMarker({
6808
+ spillRef: capsule.spill.displayPath,
6809
+ totalChars: capsule.spill.totalChars,
6810
+ totalLines: capsule.spill.totalLines,
6811
+ omittedChars
6812
+ }).trim()
6813
+ ] : []
6814
+ ];
6815
+ }
6757
6816
  function formatProcessTerminalNoticeLine(notice) {
6758
6817
  const informative = notice.label && notice.label.trim() !== "" && notice.label !== notice.command;
6759
6818
  const label = informative ? ` (label: "${notice.label.replace(/(["\\])/g, "\\$1")}")` : "";
@@ -6774,7 +6833,20 @@ function buildProcessTaskCompletedTurnEvent(notice) {
6774
6833
  displayText: formatProcessTerminalNoticeLine(notice)
6775
6834
  };
6776
6835
  }
6836
+ var PENDING_NOTICE_PREFIX = "process-notice-v1:";
6837
+ function serializePendingProcessNotice(notice) {
6838
+ return notice.resultCapsule ? `${PENDING_NOTICE_PREFIX}${JSON.stringify(notice)}` : formatProcessTerminalNoticeLine(notice);
6839
+ }
6777
6840
  function parsePendingProcessNoticeLine(line) {
6841
+ if (line.startsWith(PENDING_NOTICE_PREFIX)) {
6842
+ try {
6843
+ const parsed = JSON.parse(line.slice(PENDING_NOTICE_PREFIX.length));
6844
+ if (parsed && typeof parsed.taskId === "string" && parsed.resultCapsule) {
6845
+ return parsed;
6846
+ }
6847
+ } catch {
6848
+ }
6849
+ }
6778
6850
  const taskMatch = line.match(
6779
6851
  /^\[Background task ([^ \]]+?)(?:\s+\(label: "((?:[^"\\]|\\.)*)"\))? finished: status=(\w+)(?: exitCode=(-?\d+))?\]$/
6780
6852
  );
@@ -6834,6 +6906,9 @@ function decideProcessTerminalResume(input) {
6834
6906
  if (!input.owner || !dialogId) {
6835
6907
  return { kind: "notice-only", reason: "unowned", taskId };
6836
6908
  }
6909
+ if (!input.notice.promoted) {
6910
+ return { kind: "notice-only", reason: "not-promoted", taskId };
6911
+ }
6837
6912
  if (input.state.claimedTaskIds.has(taskId)) {
6838
6913
  return { kind: "notice-only", reason: "duplicate", taskId };
6839
6914
  }
@@ -6860,8 +6935,10 @@ function createProcessTerminalAutoResumer(deps) {
6860
6935
  state,
6861
6936
  noteUserTurn: () => state.noteUserTurn(),
6862
6937
  decide: (notice) => {
6938
+ const promoted = notice.promoted ?? deps.isPromoted?.(notice.taskId) ?? false;
6939
+ const effectiveNotice = notice.promoted === promoted ? notice : { ...notice, promoted };
6863
6940
  const decision = decideProcessTerminalResume({
6864
- notice,
6941
+ notice: effectiveNotice,
6865
6942
  owner: deps.readOwner(notice.taskId),
6866
6943
  currentDialogId: deps.getCurrentDialogId(),
6867
6944
  turnActive: deps.isTurnActive(),
@@ -10655,7 +10732,7 @@ async function runTuiWorkspace(options) {
10655
10732
  });
10656
10733
  const pushPendingProcessNotice = (notice) => {
10657
10734
  if (sessionEnded) return;
10658
- const line = formatProcessTerminalNoticeLine(notice);
10735
+ const line = serializePendingProcessNotice(notice);
10659
10736
  state = {
10660
10737
  ...state,
10661
10738
  pendingProcessNotices: [...state.pendingProcessNotices ?? [], line]
@@ -11202,6 +11279,7 @@ async function runTuiWorkspace(options) {
11202
11279
  };
11203
11280
  const processTerminalResumer = createProcessTerminalAutoResumer({
11204
11281
  readOwner: (taskId) => getProcessRegistry().getByTaskId(taskId)?.owner ?? null,
11282
+ isPromoted: (taskId) => getProcessRegistry().getByTaskId(taskId)?.promoted ?? false,
11205
11283
  getCurrentDialogId: () => state.dialogId ?? null,
11206
11284
  isTurnActive: () => busy || fixedInput.isPaused(),
11207
11285
  canDeliver: () => !sessionEnded && !done && runWakeHandler !== null
@@ -11344,8 +11422,36 @@ ${err.message}` : ""}`
11344
11422
  paintFrame(buffer);
11345
11423
  }, 60);
11346
11424
  };
11425
+ const hasNonEmptySelection = () => selectionState.anchor !== null && selectionState.head !== null && !areSelectionPointsEqual(selectionState.anchor, selectionState.head);
11426
+ const copySelectionToClipboard = async (feedbackKey) => {
11427
+ const tty = output;
11428
+ const columns = tty.columns ?? 80;
11429
+ const contentWidth = Math.max(1, columns - 1);
11430
+ const textToCopy = extractSelectedText(
11431
+ history,
11432
+ selectionState.anchor,
11433
+ selectionState.head,
11434
+ contentWidth
11435
+ );
11436
+ clearSelection();
11437
+ if (textToCopy.length > 0) {
11438
+ try {
11439
+ await writeClipboard2(textToCopy);
11440
+ emitCommandOutput(t(feedbackKey));
11441
+ } catch (error) {
11442
+ emitCommandOutput(
11443
+ `[nolo] ${t("copyFailed")}: ${toErrorMessage(error)}`
11444
+ );
11445
+ }
11446
+ }
11447
+ paintFrame(buffer);
11448
+ };
11347
11449
  const handleCtrlCKey = async (busyLock) => {
11348
11450
  if (busyLock && activeTurnAbort) {
11451
+ if (hasNonEmptySelection()) {
11452
+ await copySelectionToClipboard("copiedSelectionBusy");
11453
+ return;
11454
+ }
11349
11455
  const stopBinding = chatQueueBinding;
11350
11456
  if (stopBinding && stopBinding.queueLength() > 0) {
11351
11457
  stopBinding.preemptForStop();
@@ -11355,29 +11461,8 @@ ${err.message}` : ""}`
11355
11461
  return;
11356
11462
  }
11357
11463
  const now = Date.now();
11358
- const hasSelection = selectionState.anchor !== null && selectionState.head !== null && !areSelectionPointsEqual(selectionState.anchor, selectionState.head);
11359
- if (hasSelection) {
11360
- const tty = output;
11361
- const columns = tty.columns ?? 80;
11362
- const contentWidth = Math.max(1, columns - 1);
11363
- const textToCopy = extractSelectedText(
11364
- history,
11365
- selectionState.anchor,
11366
- selectionState.head,
11367
- contentWidth
11368
- );
11369
- clearSelection();
11370
- if (textToCopy.length > 0) {
11371
- try {
11372
- await writeClipboard2(textToCopy);
11373
- emitCommandOutput(t("copiedSelection"));
11374
- } catch (error) {
11375
- emitCommandOutput(
11376
- `[nolo] ${t("copyFailed")}: ${toErrorMessage(error)}`
11377
- );
11378
- }
11379
- }
11380
- paintFrame(buffer);
11464
+ if (hasNonEmptySelection()) {
11465
+ await copySelectionToClipboard("copiedSelection");
11381
11466
  return;
11382
11467
  }
11383
11468
  if (selectionState.anchor) {