nolo-cli 0.83.0 → 0.84.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 (106) hide show
  1. package/{_executeModel-LUNEV235.js → _executeModel-BPUR2QYH.js} +29 -28
  2. package/{action-YVYQEAAV.js → action-P4TNFGAD.js} +3 -3
  3. package/{addContentAction-O7R66HEX.js → addContentAction-MB2HHMDZ.js} +2 -2
  4. package/{addDialogAgentAction-74OA7KYP.js → addDialogAgentAction-S2NRBCWW.js} +2 -2
  5. package/{agentDeleteCommand-2YAHAZFJ.js → agentDeleteCommand-MNAA6MIG.js} +15 -14
  6. package/{agentEmailCommands-G6A7IRPQ.js → agentEmailCommands-SK34WJKU.js} +37 -36
  7. package/{agentListCommands-KMS675GZ.js → agentListCommands-I26MKI4T.js} +31 -19
  8. package/{agentMachineCommands-W2SMNSQ3.js → agentMachineCommands-M6QDR6P3.js} +15 -14
  9. package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-X3UNW77C.js} +1 -1
  10. package/{agentRecordCommands-D7BRMFNI.js → agentRecordCommands-HTHLO2MM.js} +36 -35
  11. package/{agentRunCommand-VL6MMEUB.js → agentRunCommand-IAIRCMTH.js} +38 -36
  12. package/{agentRuntimeLocal-VXZSDIGT.js → agentRuntimeLocal-3WTYYIT2.js} +16 -11
  13. package/{agentSlice-5YJHUO47.js → agentSlice-TVP3HINW.js} +2 -2
  14. package/{appDeleteCommands-32MHLR4L.js → appDeleteCommands-SB5TNLKY.js} +16 -15
  15. package/{appDeployCommands-WCQOUSOB.js → appDeployCommands-2IPKZINV.js} +16 -15
  16. package/{appDeployStatusCommands-6QKB7DYN.js → appDeployStatusCommands-K63TFUID.js} +16 -15
  17. package/{appGetCommands-SFAPP5PB.js → appGetCommands-VU2SLNEH.js} +16 -15
  18. package/{appListCommands-EKUBDRUO.js → appListCommands-S3T4DJ36.js} +16 -15
  19. package/{authCommand-F4EFRRX6.js → authCommand-HGP2XTKC.js} +100 -8
  20. package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-Q2VVY3SC.js} +2 -2
  21. package/{chatQueueReduxAdapter-PQMRR2PK.js → chatQueueReduxAdapter-TWIYKVIZ.js} +9 -9
  22. package/{chunk-Z77CRGTW.js → chunk-3AMA42ZI.js} +1 -1
  23. package/{chunk-5FBTLSFG.js → chunk-3BGIKIPF.js} +317 -153
  24. package/{chunk-ORYWEJO4.js → chunk-3IUWIAHP.js} +3 -3
  25. package/{chunk-Q2XN3EOZ.js → chunk-3VUWPRFW.js} +17 -7
  26. package/{chunk-GEPUP7OO.js → chunk-3YIAR5UI.js} +1 -1
  27. package/{chunk-5H7KJX7J.js → chunk-4MK3I7Y4.js} +1 -1
  28. package/{chunk-6VFARHZW.js → chunk-52Q2IW2X.js} +783 -999
  29. package/{chunk-6Q33GUCC.js → chunk-5MEYHVIB.js} +1 -1
  30. package/{chunk-6YTOJY35.js → chunk-6D2JFXLY.js} +35 -0
  31. package/{chunk-FZGV4FGK.js → chunk-6GFOD3TK.js} +260 -140
  32. package/{chunk-HJUYAD4A.js → chunk-6Z7MY3V7.js} +1 -1
  33. package/{chunk-V4MJDUSR.js → chunk-AHAHBQMU.js} +1 -1
  34. package/{chunk-TOP2VXOR.js → chunk-BFDFRLLQ.js} +2 -2
  35. package/chunk-BMQ2MJUK.js +153 -0
  36. package/{chunk-RG6JBBX5.js → chunk-CWQINZEA.js} +119 -3
  37. package/{chunk-BTI7PJDX.js → chunk-DD6XE56O.js} +12 -65
  38. package/{chunk-ETI2NYVF.js → chunk-FKNWP6SG.js} +1 -1
  39. package/{chunk-SSDAAEC2.js → chunk-FP76KI2Y.js} +280 -40
  40. package/chunk-FV3JEYR3.js +870 -0
  41. package/{chunk-DHDMC6FO.js → chunk-GIVFXPWK.js} +2 -0
  42. package/chunk-GMZLP5DV.js +82 -0
  43. package/{chunk-UZGQNTVW.js → chunk-GNCCNNZD.js} +3 -1
  44. package/{chunk-AFUORTY4.js → chunk-GP5LKBUZ.js} +1 -1
  45. package/{chunk-ZCYXJSTU.js → chunk-H4AHY5BU.js} +4 -81
  46. package/{chunk-OEVAY4J6.js → chunk-HAFJ3NDE.js} +2 -2
  47. package/{chunk-IIVGDG4I.js → chunk-HCT7U36O.js} +3 -0
  48. package/{chunk-4OEFYTWL.js → chunk-HKNXJGEC.js} +1 -1
  49. package/{chunk-VLTIYV3X.js → chunk-HYJFRTLW.js} +1 -1
  50. package/{chunk-NA35QHCF.js → chunk-K36IXSCQ.js} +1 -1
  51. package/{chunk-DRGSDQBL.js → chunk-KAUSRTO6.js} +2 -2
  52. package/{chunk-GPCZ7UXG.js → chunk-LJ5VW2UJ.js} +1 -1
  53. package/{chunk-YFE4A4O7.js → chunk-LMREEBWT.js} +120 -37
  54. package/{chunk-JRQFUXY7.js → chunk-LVIFM7VW.js} +1 -1
  55. package/{chunk-RFCKMYDK.js → chunk-MZYBSTMH.js} +4 -4
  56. package/chunk-OCZKATRC.js +129 -0
  57. package/{chunk-DNCEALKX.js → chunk-P5EVSOPA.js} +2 -2
  58. package/{chunk-BP4XNZRM.js → chunk-PBA4UJBK.js} +1 -1
  59. package/{chunk-G2O6V3HJ.js → chunk-PMAIQX7A.js} +3 -3
  60. package/{chunk-AEOE4Z6Q.js → chunk-QSHEEA5N.js} +2 -2
  61. package/{chunk-KQ4ONNQD.js → chunk-QU7KDSZX.js} +1 -1
  62. package/{chunk-45C5ER5U.js → chunk-RPJUFEGR.js} +4 -4
  63. package/{chunk-X6DN5HBD.js → chunk-U4OKDZFH.js} +3 -3
  64. package/{chunk-4S5QUMJP.js → chunk-UDVH2P4A.js} +4 -4
  65. package/{chunk-UKZDAFYT.js → chunk-UEVXFHQB.js} +2 -2
  66. package/{chunk-H62HCIUP.js → chunk-VRTTFDBM.js} +2 -1
  67. package/{chunk-6IG4XSS6.js → chunk-WP5UXDA5.js} +71 -4
  68. package/{chunk-3DII57IT.js → chunk-XD2MJFUG.js} +1 -1
  69. package/{chunk-QVKRR2SS.js → chunk-XP3VVAPG.js} +878 -175
  70. package/{chunk-L5UXH3B2.js → chunk-Z2PV6O2T.js} +18 -2
  71. package/{chunk-53HEEOTT.js → chunk-Z5625XML.js} +1 -1
  72. package/{contentThunks-GJV22WVZ.js → contentThunks-JYWI7G7I.js} +10 -10
  73. package/{createAgentAutomationAction-6V25TZEO.js → createAgentAutomationAction-Z4SUJ54Y.js} +10 -10
  74. package/{createDialogAction-SX36BGSX.js → createDialogAction-RCHFLVJ2.js} +12 -12
  75. package/{createPageAction-IR4BGJSI.js → createPageAction-YK2253XQ.js} +11 -11
  76. package/{dbSlice-XVWBAGYN.js → dbSlice-A6C6H32X.js} +1 -1
  77. package/{dialogCommands-5J56DFWN.js → dialogCommands-X4UOZQWX.js} +16 -15
  78. package/{dialogSlice-UNX2FAPZ.js → dialogSlice-IVTWLCE2.js} +15 -9
  79. package/{docCreateCommands-KYI2DC2U.js → docCreateCommands-VD6TGHG4.js} +15 -14
  80. package/{docDeleteCommands-67REUSRY.js → docDeleteCommands-OT3R2G4W.js} +16 -15
  81. package/{docReadCommands-HOSVSBDJ.js → docReadCommands-2G7BIXSH.js} +15 -14
  82. package/{docStore-JWVG5NDO.js → docStore-UENKCCDX.js} +2 -2
  83. package/{docUpdateCommands-EMGCSMXY.js → docUpdateCommands-45MVJKZA.js} +15 -14
  84. package/{handleSendMessageAction-B75UOJKF.js → handleSendMessageAction-LM2J4HC3.js} +50 -58
  85. package/index.js +51 -51
  86. package/{machineCommands-GFPTOY6L.js → machineCommands-6N6MQIE6.js} +38 -37
  87. package/{machineWsRunDispatch-46PSZ3DJ.js → machineWsRunDispatch-7MFKVQCR.js} +35 -34
  88. package/{memberThunks-QGFLFVCI.js → memberThunks-P2ECUJ56.js} +2 -2
  89. package/package.json +1 -1
  90. package/pdf-U6KSUEZZ.js +26435 -0
  91. package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-XI3WUPTI.js} +2 -2
  92. package/{providerRegistry-757OWH3O.js → providerRegistry-KEPWWGXD.js} +2 -2
  93. package/{readlineWorkspace-UFSWHFKD.js → readlineWorkspace-JWBON5CX.js} +184 -63
  94. package/{removeDialogAgentAction-IX3MN2ZO.js → removeDialogAgentAction-W66BJ7CF.js} +4 -4
  95. package/{runAgentClientLoop-25LJ4XGV.js → runAgentClientLoop-TA4SSPHE.js} +26 -26
  96. package/{setDialogExtraReferencesAction-X4HCPNZL.js → setDialogExtraReferencesAction-2ALKG3WA.js} +3 -3
  97. package/{setPrimaryDialogAgentAction-4GMIQLOD.js → setPrimaryDialogAgentAction-TQZB55F6.js} +4 -4
  98. package/{settingSlice-ZQZVUPKK.js → settingSlice-P4ZW7K5X.js} +2 -2
  99. package/{spaceCommands-NKJVJCQQ.js → spaceCommands-6NSAXB7D.js} +15 -14
  100. package/{streamAgentChatTurn-A46QFV4O.js → streamAgentChatTurn-X5ENGUIS.js} +94 -34
  101. package/{switchDialogAgentAction-N52LRPA3.js → switchDialogAgentAction-3KI72HHS.js} +2 -2
  102. package/{toolApiClient-QVJ6HDNN.js → toolApiClient-G3M73RTB.js} +2 -2
  103. package/{tools-TTDGRNY6.js → tools-XRQR7ZZR.js} +23 -23
  104. package/{tuiSummaryLlmCaller-WFRWERGK.js → tuiSummaryLlmCaller-UFGFOIIW.js} +5 -4
  105. package/{updateDialogTitleAction-QJPZGF52.js → updateDialogTitleAction-ESUUD3GT.js} +10 -10
  106. package/chunk-Q5FJJ6XI.js +0 -103
@@ -3,8 +3,8 @@ import {
3
3
  CUSTOM_API_KEY_TEMPLATES,
4
4
  SUBSCRIPTION_OAUTH_PROVIDERS,
5
5
  findProviderById
6
- } from "./chunk-KQ4ONNQD.js";
7
- import "./chunk-UZGQNTVW.js";
6
+ } from "./chunk-QU7KDSZX.js";
7
+ import "./chunk-GNCCNNZD.js";
8
8
  import "./chunk-6OZ36FXI.js";
9
9
  import "./chunk-GQBOR3G6.js";
10
10
  import {
@@ -5,8 +5,8 @@ import {
5
5
  findProviderById,
6
6
  isCustomApiKeyTemplate,
7
7
  isSubscriptionOAuthProvider
8
- } from "./chunk-KQ4ONNQD.js";
9
- import "./chunk-UZGQNTVW.js";
8
+ } from "./chunk-QU7KDSZX.js";
9
+ import "./chunk-GNCCNNZD.js";
10
10
  import "./chunk-6OZ36FXI.js";
11
11
  import "./chunk-GQBOR3G6.js";
12
12
  import "./chunk-OIVSQH2O.js";
@@ -7,7 +7,7 @@ import {
7
7
  normalizeDialogRecord,
8
8
  readDialogSnapshot,
9
9
  sortDialogs
10
- } from "./chunk-OEVAY4J6.js";
10
+ } from "./chunk-HAFJ3NDE.js";
11
11
  import "./chunk-M3JEW6N6.js";
12
12
  import {
13
13
  ANSI_ESCAPE_REGEX,
@@ -72,21 +72,23 @@ import {
72
72
  wrapTextToLines,
73
73
  wrapTranscriptLine,
74
74
  wrapTranscriptLineWithLayout
75
- } from "./chunk-SSDAAEC2.js";
75
+ } from "./chunk-FP76KI2Y.js";
76
76
  import "./chunk-S7Z2HMCN.js";
77
77
  import "./chunk-V7E4PXQD.js";
78
+ import "./chunk-ESHYE7WU.js";
78
79
  import {
80
+ formatQuotaSummary,
79
81
  listFavoriteAgentIdsAcrossServers,
80
82
  listLocalCachedAgents,
81
83
  listRemoteAgents,
82
84
  listRemoteAgentsAcrossServers,
83
85
  normalizeListedAgent
84
- } from "./chunk-6IG4XSS6.js";
86
+ } from "./chunk-WP5UXDA5.js";
85
87
  import "./chunk-ID4G2MAR.js";
86
88
  import {
87
89
  listUserRecordsFromServers,
88
90
  readLiveDbRecordAfterTombstoneMerge
89
- } from "./chunk-GEPUP7OO.js";
91
+ } from "./chunk-3YIAR5UI.js";
90
92
  import {
91
93
  RUN_WAKE_CHANNEL_ENV,
92
94
  createCliLocalRuntimeAdapter,
@@ -96,8 +98,8 @@ import {
96
98
  readTimestamp,
97
99
  setCliLocale,
98
100
  t
99
- } from "./chunk-YFE4A4O7.js";
100
- import "./chunk-53HEEOTT.js";
101
+ } from "./chunk-LMREEBWT.js";
102
+ import "./chunk-Z5625XML.js";
101
103
  import "./chunk-EADNWBAZ.js";
102
104
  import "./chunk-SH43IESU.js";
103
105
  import {
@@ -115,8 +117,8 @@ import {
115
117
  deleteDbRecord,
116
118
  queryUserRecords,
117
119
  readDbRecord
118
- } from "./chunk-AEOE4Z6Q.js";
119
- import "./chunk-Z77CRGTW.js";
120
+ } from "./chunk-QSHEEA5N.js";
121
+ import "./chunk-3AMA42ZI.js";
120
122
  import {
121
123
  NOLO_DEFAULT_AGENT_KEY,
122
124
  resolveCliAgentKeyInput
@@ -127,20 +129,19 @@ import {
127
129
  normalizeRunCompletionShape
128
130
  } from "./chunk-YPREESF4.js";
129
131
  import "./chunk-MP64VFGD.js";
130
- import "./chunk-ESHYE7WU.js";
131
132
  import "./chunk-JBTJAPUF.js";
132
133
  import "./chunk-LTRXGFMS.js";
133
- import "./chunk-3DII57IT.js";
134
+ import "./chunk-XD2MJFUG.js";
134
135
  import "./chunk-ATNTHIZI.js";
135
136
  import "./chunk-JEXVIMYZ.js";
136
137
  import {
137
138
  prepareTools
138
- } from "./chunk-DRGSDQBL.js";
139
+ } from "./chunk-KAUSRTO6.js";
139
140
  import {
140
141
  buildResponseGuidelines
141
142
  } from "./chunk-EOARMOVD.js";
142
143
  import "./chunk-HS7MLR74.js";
143
- import "./chunk-5FBTLSFG.js";
144
+ import "./chunk-3BGIKIPF.js";
144
145
  import "./chunk-5UTFL4QJ.js";
145
146
  import "./chunk-NF64D32W.js";
146
147
  import "./chunk-3L2WKC3W.js";
@@ -155,34 +156,35 @@ import {
155
156
  runShowsLogTail,
156
157
  shortRunId
157
158
  } from "./chunk-3VNWWVKB.js";
158
- import "./chunk-RG6JBBX5.js";
159
+ import "./chunk-CWQINZEA.js";
159
160
  import "./chunk-KQHGZWSV.js";
160
161
  import "./chunk-J4MOO56S.js";
161
- import "./chunk-HJUYAD4A.js";
162
+ import "./chunk-6Z7MY3V7.js";
162
163
  import "./chunk-EYAQT56M.js";
163
164
  import "./chunk-VIDPVFP3.js";
164
- import "./chunk-VLTIYV3X.js";
165
- import "./chunk-UKZDAFYT.js";
165
+ import "./chunk-HYJFRTLW.js";
166
+ import "./chunk-UEVXFHQB.js";
167
+ import "./chunk-BMQ2MJUK.js";
166
168
  import "./chunk-N4G4PKQ6.js";
167
- import "./chunk-FZGV4FGK.js";
169
+ import "./chunk-6GFOD3TK.js";
168
170
  import "./chunk-MEYIRKDN.js";
169
171
  import "./chunk-63W5N6P3.js";
170
172
  import "./chunk-VF4K2QE6.js";
171
- import "./chunk-G2O6V3HJ.js";
172
- import "./chunk-RFCKMYDK.js";
173
- import "./chunk-ORYWEJO4.js";
173
+ import "./chunk-PMAIQX7A.js";
174
+ import "./chunk-MZYBSTMH.js";
175
+ import "./chunk-3IUWIAHP.js";
174
176
  import "./chunk-ZJ7UHBJS.js";
175
177
  import {
176
178
  extractReferenceKeysFromMessage
177
- } from "./chunk-QVKRR2SS.js";
179
+ } from "./chunk-XP3VVAPG.js";
178
180
  import "./chunk-MC4XLIJ7.js";
179
181
  import "./chunk-3BMYXEUW.js";
180
182
  import "./chunk-YYLHWIW6.js";
181
183
  import "./chunk-AGGIDPCZ.js";
182
- import "./chunk-4S5QUMJP.js";
183
- import "./chunk-TOP2VXOR.js";
184
+ import "./chunk-UDVH2P4A.js";
185
+ import "./chunk-BFDFRLLQ.js";
184
186
  import "./chunk-5RGU3J7P.js";
185
- import "./chunk-6YTOJY35.js";
187
+ import "./chunk-6D2JFXLY.js";
186
188
  import "./chunk-M76ECQRD.js";
187
189
  import "./chunk-YDH3FDFQ.js";
188
190
  import "./chunk-URMS4XY2.js";
@@ -193,10 +195,10 @@ import {
193
195
  buildSkillDiscoveryContextBlock,
194
196
  buildSkillDiscoveryContextLayer
195
197
  } from "./chunk-E4MARS3Q.js";
196
- import "./chunk-JRQFUXY7.js";
198
+ import "./chunk-LVIFM7VW.js";
197
199
  import {
198
200
  expandEnabledPacks
199
- } from "./chunk-DHDMC6FO.js";
201
+ } from "./chunk-GIVFXPWK.js";
200
202
  import "./chunk-Q554LLSI.js";
201
203
  import "./chunk-KHCLMKZZ.js";
202
204
  import {
@@ -205,25 +207,27 @@ import {
205
207
  formatToolOverflowMarker,
206
208
  getProcessRegistry,
207
209
  readCommandActionGatePayload
208
- } from "./chunk-6VFARHZW.js";
209
- import "./chunk-ZCYXJSTU.js";
210
- import "./chunk-Q5FJJ6XI.js";
210
+ } from "./chunk-52Q2IW2X.js";
211
+ import "./chunk-H4AHY5BU.js";
212
+ import "./chunk-FV3JEYR3.js";
213
+ import "./chunk-GMZLP5DV.js";
211
214
  import "./chunk-ZNFJWEN4.js";
212
- import "./chunk-5H7KJX7J.js";
215
+ import "./chunk-4MK3I7Y4.js";
213
216
  import "./chunk-CQ3WA2NE.js";
214
217
  import "./chunk-5ZUL4CUO.js";
215
218
  import "./chunk-N7J63Q6C.js";
216
219
  import {
220
+ DELETE_SAFETY_RED_LINE,
217
221
  buildIdentityBlock,
218
222
  buildRuntimeGuidanceBlocks,
219
223
  resolveToolGuidedSections
220
- } from "./chunk-L5UXH3B2.js";
224
+ } from "./chunk-Z2PV6O2T.js";
221
225
  import "./chunk-PUOC4YRO.js";
222
- import "./chunk-IIVGDG4I.js";
226
+ import "./chunk-HCT7U36O.js";
223
227
  import {
224
228
  isQuotaExhaustedError
225
229
  } from "./chunk-FDTR4QJ6.js";
226
- import "./chunk-UZGQNTVW.js";
230
+ import "./chunk-GNCCNNZD.js";
227
231
  import {
228
232
  resolvePlatformAuthToken
229
233
  } from "./chunk-6OZ36FXI.js";
@@ -232,7 +236,7 @@ import {
232
236
  DEFAULT_CONTEXT_WINDOW,
233
237
  getModelContextWindow,
234
238
  normalizeUsage
235
- } from "./chunk-4OEFYTWL.js";
239
+ } from "./chunk-HKNXJGEC.js";
236
240
  import {
237
241
  buildCompactionMetricsFromPlan,
238
242
  buildCompactionUserContent,
@@ -242,7 +246,7 @@ import {
242
246
  formatMessagesForSummaryWithTruncation,
243
247
  planCompression,
244
248
  serializeMessageContent
245
- } from "./chunk-DNCEALKX.js";
249
+ } from "./chunk-P5EVSOPA.js";
246
250
  import {
247
251
  estimateTokenCount
248
252
  } from "./chunk-PSCNXBYA.js";
@@ -300,14 +304,14 @@ import {
300
304
  } from "./chunk-OLZBQWZU.js";
301
305
  import "./chunk-ACTMNVHM.js";
302
306
  import "./chunk-Q67DOFOO.js";
303
- import "./chunk-BP4XNZRM.js";
304
- import "./chunk-AFUORTY4.js";
307
+ import "./chunk-PBA4UJBK.js";
308
+ import "./chunk-GP5LKBUZ.js";
305
309
  import "./chunk-Y5GCAMGP.js";
306
310
  import "./chunk-QDSINZM3.js";
307
311
  import "./chunk-KX6YBIHG.js";
308
- import "./chunk-V4MJDUSR.js";
312
+ import "./chunk-AHAHBQMU.js";
309
313
  import "./chunk-UAD2WT54.js";
310
- import "./chunk-H62HCIUP.js";
314
+ import "./chunk-VRTTFDBM.js";
311
315
  import "./chunk-VMFTFOWF.js";
312
316
  import "./chunk-WWC7I6TA.js";
313
317
  import "./chunk-ABQYVJBJ.js";
@@ -3025,11 +3029,23 @@ function formatPanelDetail(snapshot) {
3025
3029
  if (!lines || lines.length === 0) return "";
3026
3030
  return lines[lines.length - 1]?.trim() ?? "";
3027
3031
  }
3032
+ var AUTO_IDENTITY_PATTERNS = [
3033
+ /^agent-[0-9a-f]{8,}-[a-z0-9]/i,
3034
+ /^agent-pub-[a-z0-9]{10,}$/i,
3035
+ /^run-\d{4}-\d{2}-\d{2}T[\d-]+Z-[a-z0-9]+$/i
3036
+ ];
3037
+ function isAutoGeneratedIdentity(raw) {
3038
+ return AUTO_IDENTITY_PATTERNS.some((pattern) => pattern.test(raw));
3039
+ }
3040
+ function displayAgentName(snapshot) {
3041
+ const raw = snapshot.agentName?.trim();
3042
+ if (!raw) return "Sub-agent";
3043
+ if (isAutoGeneratedIdentity(raw)) return "Sub-agent";
3044
+ return raw;
3045
+ }
3028
3046
  function formatAgentRunPanelLines(snapshot, colorEnabled, now = Date.now()) {
3029
3047
  const lines = [];
3030
- const name = snapshot.agentName || "sub-agent";
3031
- const short = shortRunId(snapshot.runId);
3032
- const runId = short ? ` (${short})` : "";
3048
+ const name = displayAgentName(snapshot);
3033
3049
  const status = snapshot.status || "running";
3034
3050
  const statusSymbol = getAgentRunStatusIcon(status);
3035
3051
  const statusColor = runStatusTone(status);
@@ -3042,19 +3058,18 @@ function formatAgentRunPanelLines(snapshot, colorEnabled, now = Date.now()) {
3042
3058
  const creditsPart = typeof snapshot.credits === "number" && Number.isFinite(snapshot.credits) ? ` \xB7 ${formatCreditsChip(snapshot.credits)}` : "";
3043
3059
  if (!colorEnabled) {
3044
3060
  lines.push(
3045
- `\u{1F916} Sub-Agent: ${name}${runId} \xB7 ${statusSymbol} ${status}${unassignedPart}${agePart}${progressPart}${creditsPart}${errPart}`
3061
+ `\u{1F916} ${name} \xB7 ${statusSymbol} ${status}${unassignedPart}${agePart}${progressPart}${creditsPart}${errPart}`
3046
3062
  );
3047
3063
  } else {
3048
3064
  const botIcon = themeText("\u{1F916}", "accent", true);
3049
- const labelText = themeText(" Sub-Agent: ", "muted", true);
3050
- const nameText = themeText(`${name}${runId}`, "chrome", true);
3065
+ const nameText = themeText(` ${name}`, "chrome", true);
3051
3066
  const statusText = themeText(` \xB7 ${statusSymbol} ${status}`, statusColor, true);
3052
3067
  const unassignedText = unassignedPart ? themeText(unassignedPart, "muted") : "";
3053
3068
  const ageText = agePart ? themeText(agePart, "chrome") : "";
3054
3069
  const progressText = progressPart ? themeText(progressPart, "chrome") : "";
3055
3070
  const creditsText = creditsPart ? themeText(creditsPart, "muted") : "";
3056
3071
  const errorText = errPart ? themeText(errPart, "danger") : "";
3057
- lines.push(`${botIcon}${labelText}${nameText}${statusText}${unassignedText}${ageText}${progressText}${creditsText}${errorText}`);
3072
+ lines.push(`${botIcon}${nameText}${statusText}${unassignedText}${ageText}${progressText}${creditsText}${errorText}`);
3058
3073
  }
3059
3074
  const detail = formatPanelDetail(snapshot);
3060
3075
  if (detail) {
@@ -3236,7 +3251,7 @@ function formatRunDockLines(snapshots, colorEnabled, now = Date.now(), maxRows =
3236
3251
  return lines;
3237
3252
  }
3238
3253
  function formatRunDockRow(snapshot, colorEnabled, now) {
3239
- const name = snapshot.agentName || "sub-agent";
3254
+ const name = displayAgentName(snapshot);
3240
3255
  const short = shortRunId(snapshot.runId);
3241
3256
  const icon = getAgentRunStatusIcon(snapshot.status);
3242
3257
  const terminal = isAgentRunTerminalStatus(snapshot.status);
@@ -3857,7 +3872,8 @@ function listedAgentToCatalogEntry(agent) {
3857
3872
  kind: "private",
3858
3873
  updatedAt: toUpdatedAt(agent.updatedAt),
3859
3874
  ...agent.apiSource ? { apiSource: agent.apiSource } : {},
3860
- ...agent.cliProvider ? { cliProvider: agent.cliProvider } : {}
3875
+ ...agent.cliProvider ? { cliProvider: agent.cliProvider } : {},
3876
+ ...agent.quota ? { quota: agent.quota } : {}
3861
3877
  };
3862
3878
  }
3863
3879
  function mergeCatalogEntries(currentKey, platformAgents, privateAgents, favoritedAtByKey = {}) {
@@ -4182,8 +4198,10 @@ function renderAgentCatalogList(entries, currentKey) {
4182
4198
  const current = entry.key === currentKey ? " (current)" : "";
4183
4199
  const favorite = entry.favoritedAt ? " \u2605" : "";
4184
4200
  const detail = entry.description ? ` \u2014 ${entry.description}` : "";
4201
+ const quota = formatQuotaSummary(entry.quota);
4202
+ const trailing = quota ? ` [${quota}]` : detail;
4185
4203
  lines.push(
4186
- ` ${String(index + 1).padStart(2)} ${entry.name.padEnd(18)} ${entry.model.padEnd(14)} ${formatAgentSourceLabel(entry)}${favorite}${detail}${current}`
4204
+ ` ${String(index + 1).padStart(2)} ${entry.name.padEnd(18)} ${entry.model.padEnd(14)} ${formatAgentSourceLabel(entry)}${favorite}${trailing}${current}`
4187
4205
  );
4188
4206
  });
4189
4207
  lines.push("");
@@ -5732,6 +5750,7 @@ var SLASH_COMMANDS = [
5732
5750
  "/context",
5733
5751
  "/ctx",
5734
5752
  "/credits",
5753
+ "/links",
5735
5754
  "/cd",
5736
5755
  "/runtime",
5737
5756
  "/auto",
@@ -5833,6 +5852,68 @@ function stripImageTokens(input, hints) {
5833
5852
  return compactWhitespace(out);
5834
5853
  }
5835
5854
 
5855
+ // packages/cli/tui/conversationLinks.ts
5856
+ var URL_PATTERN = /https?:\/\/[^\s<>"'`]+/gi;
5857
+ function trimUrl(raw) {
5858
+ const CLOSERS = { ")": "(", "]": "[", "}": "{" };
5859
+ let out = raw.replace(/[.,;:!?]+$/, "");
5860
+ while (out) {
5861
+ const last = out[out.length - 1];
5862
+ const opener = CLOSERS[last];
5863
+ if (!opener) break;
5864
+ const openCount = out.split(opener).length - 1;
5865
+ const closeCount = out.split(last).length - 1;
5866
+ if (closeCount > openCount) {
5867
+ out = out.slice(0, -1);
5868
+ continue;
5869
+ }
5870
+ break;
5871
+ }
5872
+ return out;
5873
+ }
5874
+ function collectConversationTurns(history) {
5875
+ const turns = [...history.turns];
5876
+ if (history.currentRole != null && history.currentContent) {
5877
+ turns.push({
5878
+ role: history.currentRole ?? void 0,
5879
+ content: history.currentContent
5880
+ });
5881
+ }
5882
+ return turns;
5883
+ }
5884
+ function extractConversationLinks(turns, options = {}) {
5885
+ const limit = options.limit ?? 20;
5886
+ const seen = /* @__PURE__ */ new Map();
5887
+ let total = 0;
5888
+ for (const turn of turns) {
5889
+ const content = typeof turn?.content === "string" ? turn.content : "";
5890
+ if (!content) continue;
5891
+ if (turn?.role === "local") continue;
5892
+ const role = turn?.role === "user" ? "user" : "assistant";
5893
+ const pattern = new RegExp(URL_PATTERN.source, "gi");
5894
+ let match;
5895
+ while ((match = pattern.exec(content)) !== null) {
5896
+ const url = trimUrl(match[0]);
5897
+ if (!url || seen.has(url)) continue;
5898
+ if (seen.size < limit) {
5899
+ seen.set(url, { url, role, index: seen.size + 1 });
5900
+ }
5901
+ total += 1;
5902
+ }
5903
+ }
5904
+ return { links: [...seen.values()], total, hasMore: total > seen.size };
5905
+ }
5906
+ function renderConversationLinks(extracted, t2) {
5907
+ const { links, total } = extracted;
5908
+ if (links.length === 0) return t2("noConversationLinks");
5909
+ const lines = links.map((link) => {
5910
+ const who = link.role === "user" ? "you" : "assistant";
5911
+ return ` ${String(link.index).padStart(2)} [${who}] ${link.url}`;
5912
+ });
5913
+ const heading = t2("conversationLinksShowing", links.length, total);
5914
+ return [heading, ...lines, "", t2("conversationLinksCopyHint")].join("\n");
5915
+ }
5916
+
5836
5917
  // packages/cli/tui/sessionDispatch.ts
5837
5918
  import { statSync as statSync3 } from "node:fs";
5838
5919
  import { homedir as homedir3 } from "node:os";
@@ -5840,11 +5921,14 @@ import { resolve as resolve3 } from "node:path";
5840
5921
 
5841
5922
  // packages/cli/tui/agentPicker.ts
5842
5923
  function toAgentPickerItems(entries) {
5843
- return entries.map((entry) => ({
5844
- label: entry.name,
5845
- detail: `${entry.favoritedAt ? "\u2605 " : ""}${entry.model} ${formatAgentSourceLabel(entry)}`,
5846
- entry
5847
- }));
5924
+ return entries.map((entry) => {
5925
+ const quota = formatQuotaSummary(entry.quota, Date.now(), { compact: true });
5926
+ return {
5927
+ label: entry.name,
5928
+ detail: `${entry.favoritedAt ? "\u2605 " : ""}${entry.model} ${formatAgentSourceLabel(entry)}${quota ? ` [${quota}]` : ""}`,
5929
+ entry
5930
+ };
5931
+ });
5848
5932
  }
5849
5933
  function formatAgentSwitchMessage(args) {
5850
5934
  const dialog = args.dialogId ? `Dialog kept: ${args.dialogId}` : "Dialog kept: new";
@@ -5976,6 +6060,8 @@ function estimateDefaultCliContextTokens(opts = {}) {
5976
6060
  const guidance = buildRuntimeGuidanceBlocks(toolNames);
5977
6061
  const toolSections = resolveToolGuidedSections(toolNames);
5978
6062
  const systemParts = [
6063
+ // 与实际装配线一致:删除安全红线是系统提示词的最顶层块。
6064
+ DELETE_SAFETY_RED_LINE,
5979
6065
  prompt,
5980
6066
  opts.userLanguage?.trim() ? buildUserResponseLanguageContext({ language: opts.userLanguage }) : "",
5981
6067
  buildIdentityBlock({
@@ -6076,7 +6162,7 @@ function formatAttachedSkillLine(skillRef) {
6076
6162
  const name = themeText(skillRef, "chrome", true);
6077
6163
  return `${bullet} ${label} ${name}`;
6078
6164
  }
6079
- function handleTuiInput(input, state) {
6165
+ function handleTuiInput(input, state, historyTurns) {
6080
6166
  const trimmed = input.trim();
6081
6167
  if (!trimmed) {
6082
6168
  return { nextState: state, output: "" };
@@ -6219,6 +6305,14 @@ ${t("cdUsage")}`
6219
6305
  case "/context":
6220
6306
  case "/ctx":
6221
6307
  return { nextState: state, output: renderContextPanel(state) };
6308
+ case "/links": {
6309
+ const extracted = extractConversationLinks(historyTurns ?? []);
6310
+ return {
6311
+ nextState: state,
6312
+ output: `${renderConversationLinks(extracted, t)}
6313
+ `
6314
+ };
6315
+ }
6222
6316
  case "/credits":
6223
6317
  return { nextState: state, output: renderCreditsDebug(state) };
6224
6318
  case "/runtime": {
@@ -6781,7 +6875,7 @@ function formatProcessTerminalWakeMessage(notices) {
6781
6875
  return [
6782
6876
  `<background_task_completion count="${notices.length}">`,
6783
6877
  ...notices.flatMap((notice) => [
6784
- formatProcessTerminalNoticeLine(notice),
6878
+ formatProcessTerminalWakeLine(notice),
6785
6879
  ...notice.resultCapsule ? formatProcessResultCapsuleLines(notice.resultCapsule) : []
6786
6880
  ]),
6787
6881
  `</background_task_completion>`
@@ -6815,12 +6909,21 @@ function formatProcessResultCapsuleLines(capsule) {
6815
6909
  ] : []
6816
6910
  ];
6817
6911
  }
6818
- function formatProcessTerminalNoticeLine(notice) {
6912
+ function formatProcessTerminalWakeLine(notice) {
6819
6913
  const informative = notice.label && notice.label.trim() !== "" && notice.label !== notice.command;
6820
6914
  const label = informative ? ` (label: "${notice.label.replace(/(["\\])/g, "\\$1")}")` : "";
6821
6915
  const exit = notice.exitCode !== void 0 ? ` exitCode=${notice.exitCode}` : "";
6822
6916
  return `[Background task ${notice.taskId}${label} finished: status=${notice.status}${exit}]`;
6823
6917
  }
6918
+ function formatProcessTerminalNoticeLine(notice) {
6919
+ const informative = notice.label && notice.label.trim() !== "" && notice.label !== notice.command;
6920
+ const label = informative ? notice.label.trim() : "background task";
6921
+ const ok = notice.status === "exited" && (notice.exitCode === void 0 || notice.exitCode === 0);
6922
+ if (ok) return `\u2713 ${label}`;
6923
+ if (notice.status === "stopped") return `\u25A0 ${label} \xB7 stopped`;
6924
+ const exit = notice.exitCode !== void 0 ? ` \xB7 exit ${notice.exitCode}` : "";
6925
+ return `\u2717 ${label}${exit}`;
6926
+ }
6824
6927
  function buildProcessTerminalTurnMessage(notices) {
6825
6928
  if (notices.length === 0) return "";
6826
6929
  return formatProcessTerminalWakeMessage(notices);
@@ -6837,7 +6940,7 @@ function buildProcessTaskCompletedTurnEvent(notice) {
6837
6940
  }
6838
6941
  var PENDING_NOTICE_PREFIX = "process-notice-v1:";
6839
6942
  function serializePendingProcessNotice(notice) {
6840
- return notice.resultCapsule ? `${PENDING_NOTICE_PREFIX}${JSON.stringify(notice)}` : formatProcessTerminalNoticeLine(notice);
6943
+ return notice.resultCapsule ? `${PENDING_NOTICE_PREFIX}${JSON.stringify(notice)}` : formatProcessTerminalWakeLine(notice);
6841
6944
  }
6842
6945
  function parsePendingProcessNoticeLine(line) {
6843
6946
  if (line.startsWith(PENDING_NOTICE_PREFIX)) {
@@ -7818,8 +7921,19 @@ function resolveChatSendDecision(input) {
7818
7921
  }
7819
7922
  return { kind: "compact-dialog" };
7820
7923
  }
7821
- if (!trimmed && !input.imagePreviewCount && !input.pendingFileCount || input.isSendBlocked) {
7822
- return { kind: "noop" };
7924
+ const hasContent = Boolean(trimmed) || input.imagePreviewCount > 0 || input.pendingFileCount > 0;
7925
+ const hasActiveTurn = input.hasActiveTurn ?? (input.isLoopRunning || input.isSendPending);
7926
+ if (!hasContent) {
7927
+ return { kind: "noop", reason: "empty-input" };
7928
+ }
7929
+ if (input.isSendPending && !input.isLoopRunning && !hasActiveTurn) {
7930
+ return { kind: "stale-send" };
7931
+ }
7932
+ if (input.isSendPending) {
7933
+ return { kind: "noop", reason: "already-sending" };
7934
+ }
7935
+ if (input.isSendBlocked) {
7936
+ return { kind: "noop", reason: "blocked" };
7823
7937
  }
7824
7938
  if (!input.canMultiImg && input.imagePreviewCount > 1) {
7825
7939
  return { kind: "multi-image-blocked" };
@@ -7971,6 +8085,11 @@ function createChatQueueTuiBinding(runTurn) {
7971
8085
  const clear = () => {
7972
8086
  runtime.send({ type: "clear" });
7973
8087
  };
8088
+ const recoverStaleRunning = () => {
8089
+ if (!runtime.getState().running) return false;
8090
+ runtime.send({ type: "turn-end", ok: true, aborted: false });
8091
+ return true;
8092
+ };
7974
8093
  const getStatus = () => projectChatQueueStatus({ state: runtime.getState() });
7975
8094
  const queueLength = () => runtime.getState().queue.length;
7976
8095
  const dispose = () => {
@@ -7987,6 +8106,7 @@ function createChatQueueTuiBinding(runTurn) {
7987
8106
  preemptForStop,
7988
8107
  snapshotAndClearQueue,
7989
8108
  clear,
8109
+ recoverStaleRunning,
7990
8110
  getStatus,
7991
8111
  queueLength,
7992
8112
  dispose
@@ -10029,7 +10149,7 @@ async function runSubmittedSlashLine(line, host, actionGateHandler, confirmDestr
10029
10149
  spawnRunner,
10030
10150
  installAltScreenRestoreHandlers: installAltScreenRestoreHandlers2
10031
10151
  } = host;
10032
- const result = handleTuiInput(line, host.state);
10152
+ const result = handleTuiInput(line, host.state, collectConversationTurns(host.history));
10033
10153
  const previousAgentKey = host.state.agentKey;
10034
10154
  host.state = result.nextState;
10035
10155
  const interactive = isInteractiveInput(input);
@@ -11494,7 +11614,7 @@ ${err.message}` : ""}`
11494
11614
  cursorPos = 0;
11495
11615
  if (fixedInput.active) fixedInput.repaint(buffer, cursorPos);
11496
11616
  const beforeAgentKey = state.agentKey;
11497
- const res = handleTuiInput(submittedText, state);
11617
+ const res = handleTuiInput(submittedText, state, collectConversationTurns(history));
11498
11618
  if (res.action?.type === "paste-clipboard") {
11499
11619
  await readAndApplyClipboard("slash");
11500
11620
  return;
@@ -11769,7 +11889,7 @@ ${merged}` : merged;
11769
11889
  if (busyLock) {
11770
11890
  const trimmedText = submittedText.trim();
11771
11891
  const busySlashCommand = trimmedText.split(/\s+/)[0]?.toLowerCase();
11772
- const isBusyLocalSlash = busySlashCommand === "/context" || busySlashCommand === "/ctx" || busySlashCommand === "/cd" || busySlashCommand === "/switch" || busySlashCommand === "/theme" || busySlashCommand === "/runtime" || busySlashCommand === "/tools" || busySlashCommand === "/thinking" || busySlashCommand === "/auto" || busySlashCommand === "/tasks" || busySlashCommand === "/jobs" || busySlashCommand === "/procs" || busySlashCommand === "/agents" || busySlashCommand === "/doc" || busySlashCommand === "/skill" || busySlashCommand === "/customize" || busySlashCommand === "/login" || busySlashCommand === "/profile" || busySlashCommand === "/paste" || busySlashCommand === "/version";
11892
+ const isBusyLocalSlash = busySlashCommand === "/context" || busySlashCommand === "/ctx" || busySlashCommand === "/cd" || busySlashCommand === "/switch" || busySlashCommand === "/theme" || busySlashCommand === "/runtime" || busySlashCommand === "/tools" || busySlashCommand === "/thinking" || busySlashCommand === "/auto" || busySlashCommand === "/tasks" || busySlashCommand === "/jobs" || busySlashCommand === "/procs" || busySlashCommand === "/agents" || busySlashCommand === "/doc" || busySlashCommand === "/skill" || busySlashCommand === "/customize" || busySlashCommand === "/login" || busySlashCommand === "/profile" || busySlashCommand === "/paste" || busySlashCommand === "/version" || busySlashCommand === "/links";
11773
11893
  if (isBusyLocalSlash) {
11774
11894
  await handleBusyLocalSlash(submittedText, busySlashCommand);
11775
11895
  return;
@@ -11803,6 +11923,7 @@ ${merged}` : merged;
11803
11923
  return;
11804
11924
  }
11805
11925
  }
11926
+ chatQueueBinding?.recoverStaleRunning();
11806
11927
  busy = startsChatTurn;
11807
11928
  bumpDraftEpoch();
11808
11929
  buffer = "";
@@ -1,26 +1,26 @@
1
1
  import {
2
2
  cleanupCliSessionForDialog
3
- } from "./chunk-TOP2VXOR.js";
3
+ } from "./chunk-BFDFRLLQ.js";
4
4
  import {
5
5
  getPrimaryDialogAgentId,
6
6
  removeDialogAgentId
7
7
  } from "./chunk-5RGU3J7P.js";
8
8
  import {
9
9
  getActiveDialogKey
10
- } from "./chunk-6YTOJY35.js";
10
+ } from "./chunk-6D2JFXLY.js";
11
11
  import {
12
12
  require_date_fns
13
13
  } from "./chunk-M76ECQRD.js";
14
14
  import "./chunk-YDH3FDFQ.js";
15
15
  import "./chunk-W7XHHYWM.js";
16
- import "./chunk-AFUORTY4.js";
16
+ import "./chunk-GP5LKBUZ.js";
17
17
  import "./chunk-Y5GCAMGP.js";
18
18
  import "./chunk-QDSINZM3.js";
19
19
  import "./chunk-KX6YBIHG.js";
20
20
  import {
21
21
  patch,
22
22
  selectById
23
- } from "./chunk-H62HCIUP.js";
23
+ } from "./chunk-VRTTFDBM.js";
24
24
  import "./chunk-VMFTFOWF.js";
25
25
  import "./chunk-WWC7I6TA.js";
26
26
  import "./chunk-ABQYVJBJ.js";