nolo-cli 0.11.0 → 0.12.0-alpha.1

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 (123) hide show
  1. package/{_executeModel-ZEDPX6OF.js → _executeModel-MWAY74HA.js} +51 -50
  2. package/{action-AA4IJ5K2.js → action-RAXNQQKC.js} +8 -9
  3. package/{addContentAction-QYVO4SYP.js → addContentAction-ZHI7TVV3.js} +7 -9
  4. package/{addDialogAgentAction-WVVKT5WQ.js → addDialogAgentAction-JWXPKXNC.js} +9 -10
  5. package/{agentDeleteCommand-RDPGYIWF.js → agentDeleteCommand-LXR5A5FV.js} +38 -28
  6. package/{agentEmailCommands-2HJJKS5F.js → agentEmailCommands-DXRAP7BB.js} +64 -62
  7. package/{agentListCommands-HFEVV3ZW.js → agentListCommands-ZFMS5ZLY.js} +127 -31
  8. package/{agentMachineCommands-25ZOENJU.js → agentMachineCommands-ZJLYVV52.js} +37 -26
  9. package/{agentPullCommand-GOL2S4W2.js → agentPullCommand-KRBRIFIY.js} +7 -7
  10. package/{agentRecordCommands-GTCOAM3L.js → agentRecordCommands-DFS626TB.js} +56 -54
  11. package/{agentRunCommand-YBS3JDLD.js → agentRunCommand-GWBIE2TS.js} +59 -59
  12. package/{agentRunControl-K4VKNEHF.js → agentRunControl-IX4F5W2C.js} +3 -3
  13. package/{agentRuntimeLocal-UQBMQI2M.js → agentRuntimeLocal-YNZSHMZC.js} +30 -15
  14. package/{agentSlice-6EKOBCCS.js → agentSlice-T2PXOEPQ.js} +8 -9
  15. package/{authCommand-O2OWACN4.js → authCommand-DMW336GT.js} +15 -15
  16. package/{authCommands-H7365TZP.js → authCommands-GH5T6RYV.js} +6 -6
  17. package/{chunk-7D3JY6C2.js → chunk-3HHTVM6G.js} +64 -5
  18. package/{chunk-AFON4QUU.js → chunk-3QKO4EHV.js} +3 -3
  19. package/{chunk-4SOKXIW4.js → chunk-43UD5ZP7.js} +8 -11
  20. package/{chunk-S3GS2PRL.js → chunk-4BTHUYMY.js} +597 -68
  21. package/{chunk-SV5MWASH.js → chunk-4EH7AR52.js} +12 -12
  22. package/{chunk-FXXSGWAJ.js → chunk-4GBNEA5B.js} +1 -1
  23. package/{chunk-PXZAAB4L.js → chunk-4LG74DRG.js} +4 -4
  24. package/{chunk-2FTTDCD4.js → chunk-4ON5AV72.js} +2 -1
  25. package/{chunk-IWX4UW2E.js → chunk-524BDL33.js} +89 -8
  26. package/{chunk-X2S7JTIG.js → chunk-5ITRDSHY.js} +1240 -136
  27. package/{chunk-ISNCLGUZ.js → chunk-5NBHQD4D.js} +4 -3
  28. package/{chunk-GBDSZATH.js → chunk-6LMFFG3K.js} +3 -3
  29. package/{chunk-OUI3ZHYD.js → chunk-6OVCRC72.js} +1 -1
  30. package/{chunk-CKOJQDKR.js → chunk-7JJCGV7N.js} +146 -3
  31. package/{chunk-MQI77IRB.js → chunk-7MYHLZ3F.js} +2 -2
  32. package/{chunk-5MOUAAMK.js → chunk-AM53Q2SD.js} +194 -2564
  33. package/chunk-BYXBJQAS.js +0 -0
  34. package/{chunk-LAX2JSTX.js → chunk-DE5BA4O6.js} +20 -2
  35. package/{chunk-BX6U3ETE.js → chunk-DRMGJFGQ.js} +293 -89
  36. package/{chunk-KJR5KAUQ.js → chunk-EBH7G34M.js} +20 -7
  37. package/{chunk-E4HNJSHC.js → chunk-G3B356GF.js} +16 -18
  38. package/{chunk-KQQVGRA3.js → chunk-GDBCUWQ3.js} +35 -29
  39. package/{chunk-Q3UKJVU4.js → chunk-GPZM7QH6.js} +10 -10
  40. package/chunk-IKXL2HZ3.js +70 -0
  41. package/{chunk-QNMFBBZK.js → chunk-IVAOVLM7.js} +1 -1
  42. package/{chunk-EVZKZF32.js → chunk-JUN3HFMN.js} +182 -75
  43. package/{chunk-NEM67FX7.js → chunk-JZDIW766.js} +1 -1
  44. package/{chunk-TACHTH5D.js → chunk-LHSJMY5V.js} +18 -18
  45. package/{chunk-XYZA7S7V.js → chunk-MEVCDATU.js} +6 -6
  46. package/{chunk-YOCHZD7D.js → chunk-NCGFB7NN.js} +5 -3
  47. package/{chunk-O26GI2JP.js → chunk-NITP2JDG.js} +39 -8
  48. package/{chunk-YPRZSPF3.js → chunk-OCDEWRE2.js} +1 -1
  49. package/{chunk-PNEW2Z3T.js → chunk-OHEKYYJF.js} +7 -7
  50. package/chunk-OOIN7HSO.js +146 -0
  51. package/{chunk-DWGAEFJL.js → chunk-OPKKB25T.js} +1 -1
  52. package/{chunk-AEZAORLG.js → chunk-QCA3EPYK.js} +5 -5
  53. package/{chunk-C4FTUXVF.js → chunk-QLUFR47U.js} +11 -1
  54. package/{chunk-C2MDQQ4O.js → chunk-RNQ5BLR2.js} +1 -1
  55. package/{chunk-L53FGHA4.js → chunk-RSEUHW6T.js} +1 -1
  56. package/{chunk-2W2VYVI5.js → chunk-RZ735TLX.js} +527 -176
  57. package/chunk-S3UTETIC.js +4885 -0
  58. package/chunk-S73OEOHH.js +2286 -0
  59. package/{chunk-YTBMA7NO.js → chunk-TSKWE74T.js} +58 -8
  60. package/{chunk-5OIFWVX7.js → chunk-UG3WOFU6.js} +1 -1
  61. package/{chunk-4ZDM73SD.js → chunk-V2J635L5.js} +1 -1
  62. package/{chunk-IPYUUY4E.js → chunk-WPHL6ALY.js} +1 -1
  63. package/{chunk-3NSIQZZ6.js → chunk-WTYKCU4W.js} +9 -9
  64. package/{chunk-LP65VRCI.js → chunk-WWU275LU.js} +6 -6
  65. package/{chunk-XFOLQLDN.js → chunk-XHQWJUW4.js} +2 -2
  66. package/{chunk-D6OQHXVG.js → chunk-YDCZVUFP.js} +7 -7
  67. package/{chunk-PXQN7IBQ.js → chunk-YTQLJYLB.js} +2 -2
  68. package/{chunk-ZEYDOXHF.js → chunk-ZPFRLGIZ.js} +1467 -869
  69. package/{chunk-ZPRK73XY.js → chunk-ZR4VHQ5D.js} +14 -13
  70. package/cliEnvHelpers-VYC2OPTB.js +30 -0
  71. package/{createAgentAutomationAction-LTI5QU35.js → createAgentAutomationAction-G32GKDGV.js} +25 -26
  72. package/{createDialogAction-OJJ7L3L3.js → createDialogAction-TISANRZK.js} +26 -27
  73. package/{createPageAction-5MXWVRGY.js → createPageAction-O7KOYNV4.js} +26 -27
  74. package/{dbSlice-RQFQQVHT.js → dbSlice-WDP2ZZHK.js} +6 -7
  75. package/{deleteFile-7XP5BGC7.js → deleteFile-M7UNIUOO.js} +4 -4
  76. package/{dialogCommands-JTJ3RPPW.js → dialogCommands-6JPB3YQY.js} +33 -23
  77. package/{dialogSlice-OWROKURJ.js → dialogSlice-PRHHYSP5.js} +26 -27
  78. package/{docCreateCommands-WJBEW2V7.js → docCreateCommands-75E6TZNN.js} +33 -23
  79. package/{docDeleteCommands-BVEHJOY5.js → docDeleteCommands-EJHLN7LW.js} +34 -25
  80. package/{docReadCommands-NEWOZIJV.js → docReadCommands-RJYBC4FS.js} +33 -23
  81. package/{docStore-3DXRYBMD.js → docStore-H5VWKT5D.js} +25 -26
  82. package/{docUpdateCommands-C7WHT7UU.js → docUpdateCommands-MG4CNISV.js} +33 -23
  83. package/fetchMessages-KTNM7QAR.js +1 -1
  84. package/{getPricing-3E6UNPKL.js → getPricing-6TOZXPAU.js} +7 -3
  85. package/{handleSendMessageAction-B5PRR7BE.js → handleSendMessageAction-QTUGICSZ.js} +29 -30
  86. package/index.js +77 -76
  87. package/{localDialogRead-YSKFFRTT.js → localDialogRead-2VRI24F4.js} +1 -1
  88. package/{machineCommands-IIIREAEK.js → machineCommands-MAV7M3TK.js} +63 -61
  89. package/{machineWsRunDispatch-3SIU6ILW.js → machineWsRunDispatch-ZOEGTKHC.js} +55 -53
  90. package/{memoryCommands-O4MIPIWQ.js → memoryCommands-AFMES3LN.js} +5 -5
  91. package/{models-4OPOOLFS.js → models-LSCRJJ6P.js} +2 -2
  92. package/package.json +1 -1
  93. package/{read-QJNKRROM.js → read-2MIMRBZ2.js} +4 -4
  94. package/{readDocTool-H6X6KO6X.js → readDocTool-QHVGQHUJ.js} +1 -1
  95. package/{readlineWorkspace-HGP3I3OC.js → readlineWorkspace-SWQKC7ZS.js} +1113 -678
  96. package/{removeDialogAgentAction-TCT35SOF.js → removeDialogAgentAction-GTX5AN54.js} +13 -13
  97. package/{runAgentClientLoop-EFM4PTVI.js → runAgentClientLoop-P25HACXX.js} +47 -47
  98. package/{runtimeDoctorCommands-ID43Z7VX.js → runtimeDoctorCommands-QNF3J3UV.js} +6 -6
  99. package/{setDialogExtraReferencesAction-CGYLZMFH.js → setDialogExtraReferencesAction-WFQ63KYO.js} +9 -10
  100. package/{setPrimaryDialogAgentAction-F6BFQDJU.js → setPrimaryDialogAgentAction-P57FXTSU.js} +13 -13
  101. package/{settingSlice-2I5HMG47.js → settingSlice-CK5YZGNI.js} +7 -8
  102. package/{skillDiscovery-UGSQGX2U.js → skillDiscovery-ZYHSX7VD.js} +3 -3
  103. package/{spaceCommands-MT7BWCIL.js → spaceCommands-6O5EFEM5.js} +37 -29
  104. package/{spaceSlice-BS5TSW3W.js → spaceSlice-4EXTYXS4.js} +28 -27
  105. package/{streamAgentChatTurn-I3VBFNR3.js → streamAgentChatTurn-Q3FJAHG2.js} +222 -128
  106. package/{toolApiClient-C7P7YSE4.js → toolApiClient-QI3YBNWB.js} +2 -2
  107. package/{tools-XSD2BOEN.js → tools-AHNQE4GP.js} +34 -34
  108. package/{tuiSummaryLlmCaller-32NRHTT2.js → tuiSummaryLlmCaller-TXLF4MEI.js} +8 -6
  109. package/{updateCommands-VOSPKXFF.js → updateCommands-XZDOOYFH.js} +13 -5
  110. package/{updateDialogTitleAction-7FYNJOGP.js → updateDialogTitleAction-XZDVLKVX.js} +29 -29
  111. package/chunk-5MMAK75Q.js +0 -15
  112. package/chunk-AZPCASRE.js +0 -36
  113. package/chunk-BBYVOSU2.js +0 -792
  114. package/chunk-DCOA4QSN.js +0 -105
  115. package/chunk-UAD2WT54.js +0 -64
  116. package/{chunk-JK7VW2FN.js → chunk-5MIDPSSK.js} +3 -3
  117. package/{chunk-5CS33IBL.js → chunk-PDL2AV3E.js} +3 -3
  118. package/{chunk-5MMZUWSG.js → chunk-TOILAPLH.js} +5 -5
  119. package/{chunk-OOM6SJNR.js → chunk-TSUJOM6N.js} +6 -6
  120. package/{db-6QED3ZVO.js → db-HCJ5PRB5.js} +3 -3
  121. package/{offlineMarxistsAgentCommand-BCPJITJL.js → offlineMarxistsAgentCommand-5OOWZLJI.js} +3 -3
  122. package/{tableCommands-M3DJUETS.js → tableCommands-E4SQWDOX.js} +6 -6
  123. package/{understanding-ZOESBLF3.js → understanding-3CUQQ6SV.js} +3 -3
@@ -3,7 +3,11 @@ import {
3
3
  isGatewayHttpStatus,
4
4
  normalizeNonNegativeMs,
5
5
  parseRetryAfterHeaderMs
6
- } from "./chunk-D6OQHXVG.js";
6
+ } from "./chunk-YDCZVUFP.js";
7
+ import {
8
+ sortSafeAgentSummaries,
9
+ toSafeAgentSummary
10
+ } from "./chunk-OOIN7HSO.js";
7
11
  import {
8
12
  getUserDataItemTimestamp,
9
13
  mergeAndDedupUserData
@@ -14,7 +18,7 @@ import {
14
18
  readPageFunc,
15
19
  readPageFunctionSchema,
16
20
  slateToSimplifiedMarkdown
17
- } from "./chunk-QNMFBBZK.js";
21
+ } from "./chunk-IVAOVLM7.js";
18
22
  import {
19
23
  markdownToSlate
20
24
  } from "./chunk-3LY4F7SV.js";
@@ -29,10 +33,10 @@ import {
29
33
  } from "./chunk-VF4K2QE6.js";
30
34
  import {
31
35
  createDocState
32
- } from "./chunk-XYZA7S7V.js";
36
+ } from "./chunk-MEVCDATU.js";
33
37
  import {
34
38
  createDialogAction
35
- } from "./chunk-E4HNJSHC.js";
39
+ } from "./chunk-G3B356GF.js";
36
40
  import {
37
41
  buildSkillDocMarkdown,
38
42
  normalizeSkillBudgetTier,
@@ -46,7 +50,6 @@ import {
46
50
  addCategory,
47
51
  addContentToSpace,
48
52
  addRow,
49
- buildDatabaseFileContentUrl,
50
53
  createTable,
51
54
  deleteDbKey,
52
55
  deleteSpace,
@@ -72,38 +75,13 @@ import {
72
75
  updateContentCategory,
73
76
  updateContentTitle,
74
77
  updateStep
75
- } from "./chunk-5MOUAAMK.js";
78
+ } from "./chunk-AM53Q2SD.js";
76
79
  import {
77
80
  createAgent,
78
81
  runLlm,
79
82
  streamAgentChatTurn,
80
83
  updateAgent
81
- } from "./chunk-Q3UKJVU4.js";
82
- import {
83
- shareResourceAction
84
- } from "./chunk-MQI77IRB.js";
85
- import {
86
- AGENT_UPDATE_FIELD_NAMES,
87
- normalizeAgentUpdateFieldList,
88
- selectAutoApproveSelfUpdateFields,
89
- selectCurrentServer,
90
- selectSyncServers
91
- } from "./chunk-3NSIQZZ6.js";
92
- import {
93
- addContentAction
94
- } from "./chunk-7D3JY6C2.js";
95
- import {
96
- createSpaceKey,
97
- normalizeSpaceId
98
- } from "./chunk-UAD2WT54.js";
99
- import {
100
- patch,
101
- read,
102
- readAndWait,
103
- readAndWaitAction,
104
- toTimestampMs,
105
- write
106
- } from "./chunk-O26GI2JP.js";
84
+ } from "./chunk-GPZM7QH6.js";
107
85
  import {
108
86
  NOLO_WORKSPACE_TOOL_NAMES,
109
87
  buildNoloSubjectRefQueryTarget,
@@ -119,13 +97,62 @@ import {
119
97
  redactAgentRecordForWorkspaceTool,
120
98
  resolveNoloDialogInput,
121
99
  verifyNoloDialogSubjectRefQuery
122
- } from "./chunk-4SOKXIW4.js";
100
+ } from "./chunk-43UD5ZP7.js";
101
+ import {
102
+ buildDatabaseFileContentUrl
103
+ } from "./chunk-S73OEOHH.js";
123
104
  import {
124
105
  DEFAULT_MODEL
125
- } from "./chunk-BBYVOSU2.js";
106
+ } from "./chunk-S3UTETIC.js";
107
+ import {
108
+ ToolApiError,
109
+ buildToolRequestHeaders,
110
+ callToolApi,
111
+ getRequestConfig,
112
+ getToolBaseUrl,
113
+ getToolRequestContext
114
+ } from "./chunk-5MIDPSSK.js";
115
+ import {
116
+ extractCustomId
117
+ } from "./chunk-DFFIZ25G.js";
118
+ import {
119
+ getActiveDialogKey,
120
+ require_react,
121
+ selectCurrentDialogKey,
122
+ selectPendingRawDataByPageKey
123
+ } from "./chunk-3ASDTTEI.js";
124
+ import {
125
+ toErrorMessage
126
+ } from "./chunk-HNMXYYJR.js";
127
+ import {
128
+ compactWhitespace
129
+ } from "./chunk-DWLEOOGR.js";
130
+ import {
131
+ shareResourceAction
132
+ } from "./chunk-7MYHLZ3F.js";
133
+ import {
134
+ AGENT_UPDATE_FIELD_NAMES,
135
+ normalizeAgentUpdateFieldList,
136
+ selectAutoApproveSelfUpdateFields,
137
+ selectCurrentServer,
138
+ selectSyncServers
139
+ } from "./chunk-WTYKCU4W.js";
126
140
  import {
127
141
  asRecordOrEmpty
128
142
  } from "./chunk-KX6YBIHG.js";
143
+ import {
144
+ addContentAction,
145
+ createSpaceKey,
146
+ normalizeSpaceId
147
+ } from "./chunk-3HHTVM6G.js";
148
+ import {
149
+ patch,
150
+ read,
151
+ readAndWait,
152
+ readAndWaitAction,
153
+ toTimestampMs,
154
+ write
155
+ } from "./chunk-NITP2JDG.js";
129
156
  import {
130
157
  SEPARATOR,
131
158
  createAgentKey,
@@ -145,35 +172,12 @@ import {
145
172
  import {
146
173
  asOptionalFiniteNumber
147
174
  } from "./chunk-WWC7I6TA.js";
148
- import {
149
- ToolApiError,
150
- buildToolRequestHeaders,
151
- callToolApi,
152
- getRequestConfig,
153
- getToolBaseUrl,
154
- getToolRequestContext
155
- } from "./chunk-JK7VW2FN.js";
156
- import {
157
- extractCustomId
158
- } from "./chunk-DFFIZ25G.js";
159
- import {
160
- getActiveDialogKey,
161
- require_react,
162
- selectCurrentDialogKey,
163
- selectPendingRawDataByPageKey
164
- } from "./chunk-3ASDTTEI.js";
165
175
  import {
166
176
  asTrimmedLowercaseString
167
177
  } from "./chunk-QSJ3HFEF.js";
168
- import {
169
- compactWhitespace
170
- } from "./chunk-DWLEOOGR.js";
171
- import {
172
- toErrorMessage
173
- } from "./chunk-HNMXYYJR.js";
174
178
  import {
175
179
  readAction
176
- } from "./chunk-XFOLQLDN.js";
180
+ } from "./chunk-XHQWJUW4.js";
177
181
  import {
178
182
  createAsyncThunk,
179
183
  getRuntimeServerContext,
@@ -181,22 +185,22 @@ import {
181
185
  selectIdentityToken,
182
186
  selectIdentityUserId,
183
187
  selectRuntimeSnapshot
184
- } from "./chunk-OOM6SJNR.js";
188
+ } from "./chunk-TSUJOM6N.js";
185
189
  import {
186
190
  isAbortError
187
191
  } from "./chunk-OOSFSFMA.js";
188
- import {
189
- asTrimmedString
190
- } from "./chunk-3EUW3WEO.js";
191
192
  import {
192
193
  isRecord
193
194
  } from "./chunk-KUG52IAP.js";
194
195
  import {
195
- DEFAULT_LOCAL_API_ORIGIN
196
- } from "./chunk-4SN6J65J.js";
196
+ asTrimmedString
197
+ } from "./chunk-3EUW3WEO.js";
197
198
  import {
198
199
  API_ENDPOINTS
199
200
  } from "./chunk-LCBAMY2M.js";
201
+ import {
202
+ DEFAULT_LOCAL_API_ORIGIN
203
+ } from "./chunk-4SN6J65J.js";
200
204
  import {
201
205
  normalizeServerOrigin
202
206
  } from "./chunk-CF7PE763.js";
@@ -747,7 +751,19 @@ var ai_locale_default = {
747
751
  chat: "Start Chat",
748
752
  public: "Public",
749
753
  byConversation: "Create AI by Conversation",
750
- manualConfiguration: "Manual Configuration"
754
+ manualConfiguration: "Manual Configuration",
755
+ quickCreate: {
756
+ reasoningEffort: "Reasoning Effort",
757
+ reasoningEffortOptions: {
758
+ none: "None",
759
+ minimal: "Minimal",
760
+ low: "Low",
761
+ medium: "Medium",
762
+ high: "High",
763
+ xhigh: "X-High",
764
+ max: "Max"
765
+ }
766
+ }
751
767
  },
752
768
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
753
769
  localCreate: {
@@ -852,7 +868,7 @@ var ai_locale_default = {
852
868
  frequencyPenalty: "Reduces word repetition, from -2 to 2. Higher discourages repetition.",
853
869
  presencePenalty: "Reduces topic repetition, from -2 to 2. Higher encourages new topics.",
854
870
  maxTokens: "Limits response length, minimum 1.",
855
- reasoningEffort: "How hard the model thinks before answering (low / medium / high). Only applies to models that support reasoning effort."
871
+ reasoningEffort: "How hard the model thinks before answering. Supported values: none / minimal / low / medium / high / xhigh / max (varies by model/provider). Only applies to models that support reasoning effort."
856
872
  },
857
873
  // Validation Messages
858
874
  validation: {
@@ -870,7 +886,7 @@ var ai_locale_default = {
870
886
  maxTokensMin: "Max Tokens must be at least 1",
871
887
  maxTokensMax: "Max Tokens must be at most 500,000",
872
888
  maxTokensRange: "Max Tokens must be between {{min}} and {{max}}",
873
- reasoningEffortInvalid: "Reasoning effort must be low, medium, or high",
889
+ reasoningEffortInvalid: "Reasoning effort must be none, minimal, low, medium, high, xhigh, or max",
874
890
  thinkingBudgetMin: "Thinking budget must be at least 1024 tokens",
875
891
  thinkingBudgetMax: "Thinking budget must be at most 100,000 tokens",
876
892
  apiKeyRequired: "API Key is required when not using Server Proxy, Ollama or Custom provider",
@@ -1124,7 +1140,19 @@ var ai_locale_default = {
1124
1140
  chat: "\u5F00\u59CB\u804A\u5929",
1125
1141
  public: "\u516C\u5F00",
1126
1142
  byConversation: "\u7528\u5BF9\u8BDD\u521B\u5EFA AI",
1127
- manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI"
1143
+ manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI",
1144
+ quickCreate: {
1145
+ reasoningEffort: "\u63A8\u7406\u5F3A\u5EA6",
1146
+ reasoningEffortOptions: {
1147
+ none: "\u5173\u95ED",
1148
+ minimal: "\u6781\u7B80",
1149
+ low: "\u4F4E",
1150
+ medium: "\u4E2D",
1151
+ high: "\u9AD8",
1152
+ xhigh: "\u8D85\u9AD8",
1153
+ max: "\u6700\u5927"
1154
+ }
1155
+ }
1128
1156
  },
1129
1157
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1130
1158
  localCreate: {
@@ -1228,7 +1256,7 @@ var ai_locale_default = {
1228
1256
  frequencyPenalty: "\u964D\u4F4E\u8BCD\u6C47\u91CD\u590D\u5EA6\uFF0C\u8303\u56F4-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u80FD\u907F\u514D\u91CD\u590D\u7528\u8BCD\u3002",
1229
1257
  presencePenalty: "\u964D\u4F4E\u4E3B\u9898\u91CD\u590D\u5EA6\uFF0C\u8303\u56F4-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u9F13\u52B1\u8C08\u8BBA\u65B0\u4E3B\u9898\u3002",
1230
1258
  maxTokens: "\u9650\u5236\u5355\u6B21\u56DE\u590D\u7684\u957F\u5EA6\uFF0C\u6700\u5C0F\u4E3A1\u3002",
1231
- reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F3A\u5EA6\uFF08low / medium / high\uFF09\u3002\u4EC5\u5BF9\u652F\u6301\u63A8\u7406\u5F3A\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1259
+ reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F3A\u5EA6\u3002\u652F\u6301\u7684\u503C\uFF1Anone / minimal / low / medium / high / xhigh / max\uFF08\u56E0\u6A21\u578B/\u670D\u52A1\u5546\u800C\u5F02\uFF09\u3002\u4EC5\u5BF9\u652F\u6301\u63A8\u7406\u5F3A\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1232
1260
  },
1233
1261
  // 验证信息
1234
1262
  validation: {
@@ -1246,7 +1274,7 @@ var ai_locale_default = {
1246
1274
  maxTokensMin: "\u6700\u5927Token\u6570\u5FC5\u987B\u81F3\u5C11\u4E3A1",
1247
1275
  maxTokensMax: "\u6700\u5927Token\u6570\u4E0D\u80FD\u8D85\u8FC7500,000",
1248
1276
  maxTokensRange: "\u6700\u5927Token\u6570\u5FC5\u987B\u5728 {{min}} \u548C {{max}} \u4E4B\u95F4",
1249
- reasoningEffortInvalid: "\u63A8\u7406\u5F3A\u5EA6\u5FC5\u987B\u662F low, medium, \u6216 high",
1277
+ reasoningEffortInvalid: "\u63A8\u7406\u5F3A\u5EA6\u5FC5\u987B\u662F none, minimal, low, medium, high, xhigh, \u6216 max",
1250
1278
  thinkingBudgetMin: "\u601D\u8003\u9884\u7B97\u81F3\u5C11\u9700\u8981 1024 \u4E2A Token",
1251
1279
  thinkingBudgetMax: "\u601D\u8003\u9884\u7B97\u4E0D\u80FD\u8D85\u8FC7 100,000 \u4E2A Token",
1252
1280
  apiKeyRequired: "\u672A\u4F7F\u7528\u4EE3\u7406\u6A21\u5F0F\u3001Ollama\u6216\u81EA\u5B9A\u4E49\u670D\u52A1\u5546\u65F6\uFF0CAPI\u5BC6\u94A5\u4E3A\u5FC5\u586B\u9879",
@@ -1501,7 +1529,19 @@ var ai_locale_default = {
1501
1529
  chat: "\u958B\u59CB\u804A\u5929",
1502
1530
  public: "\u516C\u958B",
1503
1531
  byConversation: "\u7528\u5C0D\u8A71\u5EFA\u7ACB AI",
1504
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI"
1532
+ manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI",
1533
+ quickCreate: {
1534
+ reasoningEffort: "\u63A8\u7406\u5F37\u5EA6",
1535
+ reasoningEffortOptions: {
1536
+ none: "\u95DC\u9589",
1537
+ minimal: "\u6975\u7C21",
1538
+ low: "\u4F4E",
1539
+ medium: "\u4E2D",
1540
+ high: "\u9AD8",
1541
+ xhigh: "\u8D85\u9AD8",
1542
+ max: "\u6700\u5927"
1543
+ }
1544
+ }
1505
1545
  },
1506
1546
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1507
1547
  localCreate: {
@@ -1605,7 +1645,7 @@ var ai_locale_default = {
1605
1645
  frequencyPenalty: "\u964D\u4F4E\u8A5E\u5F59\u91CD\u8907\u5EA6\uFF0C\u7BC4\u570D-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u80FD\u907F\u514D\u91CD\u8907\u7528\u8A5E\u3002",
1606
1646
  presencePenalty: "\u964D\u4F4E\u4E3B\u984C\u91CD\u8907\u5EA6\uFF0C\u7BC4\u570D-2\u52302\u3002\u8D8A\u9AD8\u8D8A\u9F13\u52F5\u8AC7\u8AD6\u65B0\u4E3B\u984C\u3002",
1607
1647
  maxTokens: "\u9650\u5236\u55AE\u6B21\u56DE\u8986\u7684\u9577\u5EA6\uFF0C\u6700\u5C0F\u70BA1\u3002",
1608
- reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F37\u5EA6\uFF08low / medium / high\uFF09\u3002\u50C5\u5C0D\u652F\u63F4\u63A8\u7406\u5F37\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1648
+ reasoningEffort: "\u63A7\u5236\u6A21\u578B\u56DE\u7B54\u524D\u7684\u63A8\u7406\u5F37\u5EA6\u3002\u652F\u63F4\u7684\u503C\uFF1Anone / minimal / low / medium / high / xhigh / max\uFF08\u56E0\u6A21\u578B/\u670D\u52D9\u5546\u800C\u7570\uFF09\u3002\u50C5\u5C0D\u652F\u63F4\u63A8\u7406\u5F37\u5EA6\u7684\u6A21\u578B\u751F\u6548\u3002"
1609
1649
  },
1610
1650
  // 驗證資訊
1611
1651
  validation: {
@@ -1623,7 +1663,7 @@ var ai_locale_default = {
1623
1663
  maxTokensMin: "\u6700\u5927Token\u6578\u5FC5\u9808\u81F3\u5C11\u70BA1",
1624
1664
  maxTokensMax: "\u6700\u5927Token\u6578\u4E0D\u5F97\u8D85\u904E500,000",
1625
1665
  maxTokensRange: "\u6700\u5927Token\u6578\u5FC5\u9808\u5728 {{min}} \u548C {{max}} \u4E4B\u9593",
1626
- reasoningEffortInvalid: "\u63A8\u7406\u5F37\u5EA6\u5FC5\u9808\u662F low, medium, \u6216 high",
1666
+ reasoningEffortInvalid: "\u63A8\u7406\u5F37\u5EA6\u5FC5\u9808\u662F none, minimal, low, medium, high, xhigh, \u6216 max",
1627
1667
  thinkingBudgetMin: "\u601D\u8003\u9810\u7B97\u81F3\u5C11\u9700\u8981 1024 \u500B Token",
1628
1668
  thinkingBudgetMax: "\u601D\u8003\u9810\u7B97\u4E0D\u80FD\u8D85\u904E 100,000 \u500B Token",
1629
1669
  apiKeyRequired: "\u672A\u4F7F\u7528\u4EE3\u7406\u6A21\u5F0F\u3001Ollama\u6216\u81EA\u8A02\u670D\u52D9\u63D0\u4F9B\u8005\u6642\uFF0CAPI\u91D1\u9470\u70BA\u5FC5\u586B\u9805",
@@ -1800,7 +1840,19 @@ var ai_locale_default = {
1800
1840
  chat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u59CB",
1801
1841
  public: "\u516C\u958B",
1802
1842
  byConversation: "\u4F1A\u8A71\u3067 AI \u3092\u4F5C\u6210",
1803
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210"
1843
+ manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210",
1844
+ quickCreate: {
1845
+ reasoningEffort: "\u63A8\u8AD6\u5F37\u5EA6",
1846
+ reasoningEffortOptions: {
1847
+ none: "\u306A\u3057",
1848
+ minimal: "\u6700\u5C0F",
1849
+ low: "\u4F4E",
1850
+ medium: "\u4E2D",
1851
+ high: "\u9AD8",
1852
+ xhigh: "\u8D85\u9AD8",
1853
+ max: "\u6700\u5927"
1854
+ }
1855
+ }
1804
1856
  },
1805
1857
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1806
1858
  localCreate: {
@@ -1905,7 +1957,7 @@ var ai_locale_default = {
1905
1957
  frequencyPenalty: "\u5358\u8A9E\u306E\u7E70\u308A\u8FD4\u3057\u3092\u6E1B\u3089\u3057\u307E\u3059\uFF08\u7BC4\u56F2-2\u301C2\uFF09\u3002\u5024\u304C\u9AD8\u3044\u307B\u3069\u7E70\u308A\u8FD4\u3055\u308C\u306B\u304F\u304F\u306A\u308A\u307E\u3059\u3002",
1906
1958
  presencePenalty: "\u30C8\u30D4\u30C3\u30AF\u306E\u7E70\u308A\u8FD4\u3057\u3092\u6E1B\u3089\u3057\u307E\u3059\uFF08\u7BC4\u56F2-2\u301C2\uFF09\u3002\u5024\u304C\u9AD8\u3044\u307B\u3069\u65B0\u3057\u3044\u30C8\u30D4\u30C3\u30AF\u304C\u4FC3\u3055\u308C\u307E\u3059\u3002",
1907
1959
  maxTokens: "1\u56DE\u306E\u5FDC\u7B54\u306E\u9577\u3055\u3092\u5236\u9650\u3057\u307E\u3059\uFF08\u6700\u5C0F1\uFF09\u3002",
1908
- reasoningEffort: "\u56DE\u7B54\u524D\u306E\u63A8\u8AD6\u306E\u5F37\u3055\uFF08low / medium / high\uFF09\u3002\u63A8\u8AD6\u5F37\u5EA6\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u30E2\u30C7\u30EB\u3067\u306E\u307F\u6709\u52B9\u3067\u3059\u3002"
1960
+ reasoningEffort: "\u56DE\u7B54\u524D\u306E\u63A8\u8AD6\u306E\u5F37\u3055\u3002\u30B5\u30DD\u30FC\u30C8\u5024\uFF1Anone / minimal / low / medium / high / xhigh / max\uFF08\u30E2\u30C7\u30EB/\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u306B\u3088\u308A\u7570\u306A\u308B\uFF09\u3002\u63A8\u8AD6\u5F37\u5EA6\u3092\u30B5\u30DD\u30FC\u30C8\u3059\u308B\u30E2\u30C7\u30EB\u3067\u306E\u307F\u6709\u52B9\u3067\u3059\u3002"
1909
1961
  },
1910
1962
  // バリデーションメッセージ
1911
1963
  validation: {
@@ -1923,7 +1975,7 @@ var ai_locale_default = {
1923
1975
  maxTokensMin: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F1\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1924
1976
  maxTokensMax: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F500,000\u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1925
1977
  maxTokensRange: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F {{min}} \u301C {{max}} \u306E\u7BC4\u56F2\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
1926
- reasoningEffortInvalid: "\u63A8\u8AD6\u5F37\u5EA6\u306F low, medium, high \u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1978
+ reasoningEffortInvalid: "\u63A8\u8AD6\u5F37\u5EA6\u306F none, minimal, low, medium, high, xhigh, max \u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1927
1979
  thinkingBudgetMin: "\u601D\u8003\u4E88\u7B97\u306F1024\u30C8\u30FC\u30AF\u30F3\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1928
1980
  thinkingBudgetMax: "\u601D\u8003\u4E88\u7B97\u306F100,000\u30C8\u30FC\u30AF\u30F3\u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1929
1981
  apiKeyRequired: "\u30D7\u30ED\u30AD\u30B7\u30E2\u30FC\u30C9\u3001Ollama\u3001\u307E\u305F\u306F\u30AB\u30B9\u30BF\u30E0\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u4F7F\u7528\u3057\u306A\u3044\u5834\u5408\u3001API\u30AD\u30FC\u306F\u5FC5\u9808\u3067\u3059",
@@ -2078,6 +2130,9 @@ var chat_locale_default = {
2078
2130
  messageInput: "Message input field",
2079
2131
  messageInputArea: "Message input area with file upload",
2080
2132
  messageOrFileHere: "Type a message or upload a file...",
2133
+ pastedTextChip: "Pasted text #{{id}} \xB7 {{lines}} lines \xB7 {{size}}",
2134
+ removePastedText: "Remove pasted text",
2135
+ expandPastedText: "Expand pasted text into the input",
2081
2136
  Mode: "Mode",
2082
2137
  ModeUpdateFailed: "Failed to update mode",
2083
2138
  ModeUpdatedSuccess: "Mode updated successfully",
@@ -2208,6 +2263,32 @@ var chat_locale_default = {
2208
2263
  preflightRepairing: "Preflight found {{count}} issue(s), auto-repairing\u2026",
2209
2264
  moreSteps: "{{count}} more steps\u2026"
2210
2265
  },
2266
+ toolConfirm: {
2267
+ executing: "Executing\u2026",
2268
+ patchApplied: "Patch applied",
2269
+ executed: "Executed {{name}}",
2270
+ retryApplyPatch: "Retry applying patch",
2271
+ retryExec: "Retry {{name}}",
2272
+ confirmDeleteSpaces: "Confirm deleting these Spaces",
2273
+ applyPatchDanger: "Apply this patch (dangerous)",
2274
+ confirmExec: "Run {{name}} (confirmation required)",
2275
+ successPatch: "\u2705 Successfully applied patch to {{path}}.",
2276
+ successExec: "\u2705 Successfully executed {{name}}.",
2277
+ failure: "\u274C Execution failed: {{error}}",
2278
+ unknownError: "Unknown error",
2279
+ confirmDelete: "Confirm deleting {{entity}}",
2280
+ confirmExecGate: "Confirm running {{name}}",
2281
+ fallbackDialogs: "Matching dialogs",
2282
+ fallbackSpaces: "Matching spaces",
2283
+ failureDialogs: "Failed to delete dialogs",
2284
+ failureSpaces: "Failed to delete spaces",
2285
+ executedDialogs: "deleteDialogs executed",
2286
+ executedSpaces: "deleteSpaces executed",
2287
+ entityDialog: "dialog",
2288
+ entitySpace: "space",
2289
+ deleteLabelMultiple: "{{title}} and {{count}} more {{entity}}",
2290
+ fallbackMatched: "Matches"
2291
+ },
2211
2292
  toolNames: {
2212
2293
  tool: "Tool",
2213
2294
  exa_search: "Search",
@@ -2409,6 +2490,9 @@ var chat_locale_default = {
2409
2490
  messageInput: "\u6D88\u606F\u8F93\u5165\u6846",
2410
2491
  messageInputArea: "\u6D88\u606F\u8F93\u5165\u533A\uFF0C\u652F\u6301\u6587\u4EF6\u4E0A\u4F20",
2411
2492
  messageOrFileHere: "\u8F93\u5165\u6D88\u606F\u6216\u4E0A\u4F20\u6587\u4EF6...",
2493
+ pastedTextChip: "\u5DF2\u7C98\u8D34\u6587\u672C #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
2494
+ removePastedText: "\u79FB\u9664\u7C98\u8D34\u6587\u672C",
2495
+ expandPastedText: "\u5C55\u5F00\u7C98\u8D34\u6587\u672C\u5230\u8F93\u5165\u6846",
2412
2496
  Mode: "\u6A21\u5F0F",
2413
2497
  ModeUpdateFailed: "\u6A21\u5F0F\u66F4\u65B0\u5931\u8D25",
2414
2498
  ModeUpdatedSuccess: "\u6A21\u5F0F\u66F4\u65B0\u6210\u529F",
@@ -2533,6 +2617,33 @@ var chat_locale_default = {
2533
2617
  preflightRepairing: "\u9884\u68C0\u53D1\u73B0 {{count}} \u4E2A\u95EE\u9898\uFF0C\u6B63\u5728\u81EA\u52A8\u4FEE\u590D\u2026",
2534
2618
  moreSteps: "\u8FD8\u6709 {{count}} \u6B65\u2026"
2535
2619
  },
2620
+ toolConfirm: {
2621
+ executing: "\u6B63\u5728\u6267\u884C\u2026",
2622
+ patchApplied: "\u8865\u4E01\u5DF2\u5E94\u7528",
2623
+ executed: "\u5DF2\u6267\u884C {{name}}",
2624
+ retryApplyPatch: "\u91CD\u8BD5\u5E94\u7528\u8865\u4E01",
2625
+ retryExec: "\u91CD\u8BD5\u6267\u884C {{name}}",
2626
+ confirmDeleteSpaces: "\u786E\u8BA4\u5220\u9664\u8FD9\u4E9B Space",
2627
+ applyPatchDanger: "\u5E94\u7528\u8FD9\u4E2A\u8865\u4E01\uFF08\u5371\u9669\u64CD\u4F5C\uFF09",
2628
+ confirmExec: "\u6267\u884C {{name}}\uFF08\u9700\u8981\u786E\u8BA4\uFF09",
2629
+ successPatch: "\u2705 \u5DF2\u6210\u529F\u5C06\u8865\u4E01\u5E94\u7528\u5230 {{path}}\u3002",
2630
+ successExec: "\u2705 \u5DF2\u6210\u529F\u6267\u884C {{name}}\u3002",
2631
+ failure: "\u274C \u6267\u884C\u5931\u8D25\uFF1A{{error}}",
2632
+ unknownError: "\u672A\u77E5\u9519\u8BEF",
2633
+ confirmDelete: "\u786E\u8BA4\u5220\u9664{{entity}}",
2634
+ confirmExecGate: "\u786E\u8BA4\u6267\u884C {{name}}",
2635
+ fallbackDialogs: "\u5339\u914D\u7684\u5BF9\u8BDD",
2636
+ fallbackSpaces: "\u5339\u914D\u7684\u7A7A\u95F4",
2637
+ failureDialogs: "\u5220\u9664\u5BF9\u8BDD\u6267\u884C\u5931\u8D25",
2638
+ failureSpaces: "\u5220\u9664\u7A7A\u95F4\u6267\u884C\u5931\u8D25",
2639
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符(zh/zh-Hant/ja 同)
2640
+ executedDialogs: "deleteDialogs executed",
2641
+ executedSpaces: "deleteSpaces executed",
2642
+ entityDialog: "\u5BF9\u8BDD",
2643
+ entitySpace: "\u7A7A\u95F4",
2644
+ deleteLabelMultiple: "{{title}} \u7B49 {{count}} \u4E2A{{entity}}",
2645
+ fallbackMatched: "\u5339\u914D\u9879"
2646
+ },
2536
2647
  toolNames: {
2537
2648
  tool: "\u5DE5\u5177",
2538
2649
  exa_search: "\u641C\u7D22",
@@ -2734,6 +2845,9 @@ var chat_locale_default = {
2734
2845
  messageInput: "\u8A0A\u606F\u8F38\u5165\u6846",
2735
2846
  messageInputArea: "\u8A0A\u606F\u8F38\u5165\u5340\uFF0C\u652F\u6301\u6A94\u6848\u4E0A\u50B3",
2736
2847
  messageOrFileHere: "\u8F38\u5165\u8A0A\u606F\u6216\u4E0A\u50B3\u6A94\u6848...",
2848
+ pastedTextChip: "\u5DF2\u8CBC\u4E0A\u6587\u5B57 #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
2849
+ removePastedText: "\u79FB\u9664\u8CBC\u4E0A\u6587\u5B57",
2850
+ expandPastedText: "\u5C55\u958B\u8CBC\u4E0A\u6587\u5B57\u5230\u8F38\u5165\u6846",
2737
2851
  Mode: "\u6A21\u5F0F",
2738
2852
  ModeUpdateFailed: "\u6A21\u5F0F\u66F4\u65B0\u5931\u6557",
2739
2853
  ModeUpdatedSuccess: "\u6A21\u5F0F\u66F4\u65B0\u6210\u529F",
@@ -2848,6 +2962,33 @@ var chat_locale_default = {
2848
2962
  preflightRepairing: "\u9810\u6AA2\u767C\u73FE {{count}} \u500B\u554F\u984C\uFF0C\u6B63\u5728\u81EA\u52D5\u4FEE\u5FA9\u2026",
2849
2963
  moreSteps: "\u9084\u6709 {{count}} \u6B65\u2026"
2850
2964
  },
2965
+ toolConfirm: {
2966
+ executing: "\u6B63\u5728\u57F7\u884C\u2026",
2967
+ patchApplied: "\u4FEE\u88DC\u5DF2\u5957\u7528",
2968
+ executed: "\u5DF2\u57F7\u884C {{name}}",
2969
+ retryApplyPatch: "\u91CD\u8A66\u5957\u7528\u4FEE\u88DC",
2970
+ retryExec: "\u91CD\u8A66\u57F7\u884C {{name}}",
2971
+ confirmDeleteSpaces: "\u78BA\u8A8D\u522A\u9664\u9019\u4E9B Space",
2972
+ applyPatchDanger: "\u5957\u7528\u9019\u500B\u4FEE\u88DC\uFF08\u5371\u96AA\u64CD\u4F5C\uFF09",
2973
+ confirmExec: "\u57F7\u884C {{name}}\uFF08\u9700\u8981\u78BA\u8A8D\uFF09",
2974
+ successPatch: "\u2705 \u5DF2\u6210\u529F\u5C07\u4FEE\u88DC\u5957\u7528\u5230 {{path}}\u3002",
2975
+ successExec: "\u2705 \u5DF2\u6210\u529F\u57F7\u884C {{name}}\u3002",
2976
+ failure: "\u274C \u57F7\u884C\u5931\u6557\uFF1A{{error}}",
2977
+ unknownError: "\u672A\u77E5\u932F\u8AA4",
2978
+ confirmDelete: "\u78BA\u8A8D\u522A\u9664{{entity}}",
2979
+ confirmExecGate: "\u78BA\u8A8D\u57F7\u884C {{name}}",
2980
+ fallbackDialogs: "\u7B26\u5408\u7684\u5C0D\u8A71",
2981
+ fallbackSpaces: "\u7B26\u5408\u7684\u7A7A\u9593",
2982
+ failureDialogs: "\u522A\u9664\u5C0D\u8A71\u57F7\u884C\u5931\u6557",
2983
+ failureSpaces: "\u522A\u9664\u7A7A\u9593\u57F7\u884C\u5931\u6557",
2984
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符
2985
+ executedDialogs: "deleteDialogs executed",
2986
+ executedSpaces: "deleteSpaces executed",
2987
+ entityDialog: "\u5C0D\u8A71",
2988
+ entitySpace: "\u7A7A\u9593",
2989
+ deleteLabelMultiple: "{{title}} \u7B49 {{count}} \u500B{{entity}}",
2990
+ fallbackMatched: "\u7B26\u5408\u9805"
2991
+ },
2851
2992
  toolNames: {
2852
2993
  tool: "\u5DE5\u5177",
2853
2994
  exa_search: "\u641C\u5C0B",
@@ -2987,6 +3128,9 @@ var chat_locale_default = {
2987
3128
  messageInput: "\u30E1\u30C3\u30BB\u30FC\u30B8\u5165\u529B\u6B04",
2988
3129
  messageInputArea: "\u30D5\u30A1\u30A4\u30EB\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5BFE\u5FDC\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u5165\u529B\u30A8\u30EA\u30A2",
2989
3130
  messageOrFileHere: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u307E\u305F\u306F\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9...",
3131
+ pastedTextChip: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8 #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
3132
+ removePastedText: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8\u3092\u524A\u9664",
3133
+ expandPastedText: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8\u3092\u5165\u529B\u6B04\u306B\u5C55\u958B",
2990
3134
  Mode: "\u30E2\u30FC\u30C9",
2991
3135
  ModeUpdateFailed: "\u30E2\u30FC\u30C9\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
2992
3136
  ModeUpdatedSuccess: "\u30E2\u30FC\u30C9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",
@@ -3107,6 +3251,33 @@ var chat_locale_default = {
3107
3251
  preflightRepairing: "\u30D7\u30EA\u30D5\u30E9\u30A4\u30C8\u3067 {{count}} \u4EF6\u306E\u554F\u984C\u3092\u691C\u51FA\u3001\u81EA\u52D5\u4FEE\u5FA9\u4E2D\u2026",
3108
3252
  moreSteps: "\u4ED6 {{count}} \u30B9\u30C6\u30C3\u30D7\u2026"
3109
3253
  },
3254
+ toolConfirm: {
3255
+ executing: "\u5B9F\u884C\u4E2D\u2026",
3256
+ patchApplied: "\u30D1\u30C3\u30C1\u3092\u9069\u7528\u3057\u307E\u3057\u305F",
3257
+ executed: "{{name}} \u3092\u5B9F\u884C\u3057\u307E\u3057\u305F",
3258
+ retryApplyPatch: "\u30D1\u30C3\u30C1\u9069\u7528\u3092\u518D\u8A66\u884C",
3259
+ retryExec: "{{name}} \u306E\u5B9F\u884C\u3092\u518D\u8A66\u884C",
3260
+ confirmDeleteSpaces: "\u3053\u308C\u3089\u306E Space \u3092\u524A\u9664\u3057\u307E\u3059\u304B",
3261
+ applyPatchDanger: "\u3053\u306E\u30D1\u30C3\u30C1\u3092\u9069\u7528\uFF08\u5371\u967A\u306A\u64CD\u4F5C\uFF09",
3262
+ confirmExec: "{{name}} \u3092\u5B9F\u884C\uFF08\u78BA\u8A8D\u304C\u5FC5\u8981\uFF09",
3263
+ successPatch: "\u2705 \u30D1\u30C3\u30C1\u3092 {{path}} \u306B\u9069\u7528\u3057\u307E\u3057\u305F\u3002",
3264
+ successExec: "\u2705 {{name}} \u3092\u5B9F\u884C\u3057\u307E\u3057\u305F\u3002",
3265
+ failure: "\u274C \u5B9F\u884C\u5931\u6557\uFF1A{{error}}",
3266
+ unknownError: "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC",
3267
+ confirmDelete: "{{entity}}\u306E\u524A\u9664\u3092\u78BA\u8A8D",
3268
+ confirmExecGate: "{{name}} \u306E\u5B9F\u884C\u3092\u78BA\u8A8D",
3269
+ fallbackDialogs: "\u4E00\u81F4\u3059\u308B\u5BFE\u8A71",
3270
+ fallbackSpaces: "\u4E00\u81F4\u3059\u308B\u30B9\u30DA\u30FC\u30B9",
3271
+ failureDialogs: "\u5BFE\u8A71\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3272
+ failureSpaces: "\u30B9\u30DA\u30FC\u30B9\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3273
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符
3274
+ executedDialogs: "deleteDialogs executed",
3275
+ executedSpaces: "deleteSpaces executed",
3276
+ entityDialog: "\u5BFE\u8A71",
3277
+ entitySpace: "\u30B9\u30DA\u30FC\u30B9",
3278
+ deleteLabelMultiple: "{{title}} \u306A\u3069 {{count}} \u4EF6\u306E{{entity}}",
3279
+ fallbackMatched: "\u4E00\u81F4\u9805\u76EE"
3280
+ },
3110
3281
  toolNames: {
3111
3282
  tool: "\u30C4\u30FC\u30EB",
3112
3283
  exa_search: "\u691C\u7D22",
@@ -3255,12 +3426,6 @@ var space_locale_default = {
3255
3426
  discard_changes: "Discard Changes",
3256
3427
  load_error_title: "Failed to Load Space Information",
3257
3428
  no_space_data: "Space data not found",
3258
- try_repair: "Try to Repair",
3259
- repair_success: "Repair operation completed successfully",
3260
- repair_space: "Repair Space",
3261
- repair_count_warn: "This space has {{count}} content items. Repair will re-deduplicate and remove orphaned references. Continue?",
3262
- repair: "Repair",
3263
- repair_error: "Repair operation failed",
3264
3429
  try_later: "Please try again later",
3265
3430
  // === 基本信息 ===
3266
3431
  basic_info: "Basic Information",
@@ -3570,12 +3735,6 @@ var space_locale_default = {
3570
3735
  discard_changes: "\u653E\u5F03\u66F4\u6539",
3571
3736
  load_error_title: "\u52A0\u8F7D\u7A7A\u95F4\u4FE1\u606F\u5931\u8D25",
3572
3737
  no_space_data: "\u672A\u627E\u5230\u7A7A\u95F4\u6570\u636E",
3573
- try_repair: "\u5C1D\u8BD5\u4FEE\u590D",
3574
- repair_success: "\u4FEE\u590D\u64CD\u4F5C\u6210\u529F\u5B8C\u6210",
3575
- repair_space: "\u4FEE\u590D\u7A7A\u95F4",
3576
- repair_count_warn: "\u6B64\u7A7A\u95F4\u6709 {{count}} \u9879\u5185\u5BB9\u3002\u4FEE\u590D\u5C06\u91CD\u65B0\u53BB\u91CD\u5E76\u6E05\u9664\u5B64\u7ACB\u7684\u5F15\u7528\u3002\u662F\u5426\u7EE7\u7EED\uFF1F",
3577
- repair: "\u4FEE\u590D",
3578
- repair_error: "\u4FEE\u590D\u64CD\u4F5C\u5931\u8D25",
3579
3738
  try_later: "\u8BF7\u7A0D\u540E\u91CD\u8BD5",
3580
3739
  // === 基本信息 ===
3581
3740
  basic_info: "\u57FA\u672C\u4FE1\u606F",
@@ -3884,12 +4043,6 @@ var space_locale_default = {
3884
4043
  discard_changes: "\u653E\u68C4\u8B8A\u66F4",
3885
4044
  load_error_title: "\u8F09\u5165\u7A7A\u9593\u8CC7\u8A0A\u5931\u6557",
3886
4045
  no_space_data: "\u672A\u627E\u5230\u7A7A\u9593\u8CC7\u6599",
3887
- try_repair: "\u5617\u8A66\u4FEE\u5FA9",
3888
- repair_success: "\u4FEE\u5FA9\u64CD\u4F5C\u6210\u529F\u5B8C\u6210",
3889
- repair_space: "\u4FEE\u5FA9\u7A7A\u9593",
3890
- repair_count_warn: "\u6B64\u7A7A\u9593\u6709 {{count}} \u9805\u5167\u5BB9\u3002\u4FEE\u5FA9\u5C07\u91CD\u65B0\u53BB\u91CD\u4E26\u6E05\u9664\u5B64\u7ACB\u7684\u5F15\u7528\u3002\u662F\u5426\u7E7C\u7E8C\uFF1F",
3891
- repair: "\u4FEE\u5FA9",
3892
- repair_error: "\u4FEE\u5FA9\u64CD\u4F5C\u5931\u6557",
3893
4046
  try_later: "\u8ACB\u7A0D\u5F8C\u91CD\u8A66",
3894
4047
  // === 基本信息 ===
3895
4048
  basic_info: "\u57FA\u672C\u8CC7\u8A0A",
@@ -4191,12 +4344,6 @@ var space_locale_default = {
4191
4344
  discard_changes: "\u5909\u66F4\u3092\u7834\u68C4",
4192
4345
  load_error_title: "\u30B9\u30DA\u30FC\u30B9\u60C5\u5831\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
4193
4346
  no_space_data: "\u30B9\u30DA\u30FC\u30B9\u30C7\u30FC\u30BF\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093",
4194
- try_repair: "\u4FEE\u5FA9\u3092\u8A66\u884C",
4195
- repair_success: "\u4FEE\u5FA9\u64CD\u4F5C\u304C\u6B63\u5E38\u306B\u5B8C\u4E86\u3057\u307E\u3057\u305F",
4196
- repair_space: "\u30B9\u30DA\u30FC\u30B9\u3092\u4FEE\u5FA9",
4197
- repair_count_warn: "\u3053\u306E\u30B9\u30DA\u30FC\u30B9\u306B\u306F {{count}} \u4EF6\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u3042\u308A\u307E\u3059\u3002\u4FEE\u5FA9\u306F\u91CD\u8907\u3092\u6574\u7406\u3057\u3001\u5B64\u7ACB\u3057\u305F\u53C2\u7167\u3092\u524A\u9664\u3057\u307E\u3059\u3002\u7D9A\u884C\u3057\u307E\u3059\u304B\uFF1F",
4198
- repair: "\u4FEE\u5FA9",
4199
- repair_error: "\u4FEE\u5FA9\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
4200
4347
  try_later: "\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
4201
4348
  // === 基本情報 ===
4202
4349
  basic_info: "\u57FA\u672C\u60C5\u5831",
@@ -11080,6 +11227,20 @@ function expandEnabledPacks(enabledPacks, explicitTools = []) {
11080
11227
  const packTools = (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.tools ?? []).flat();
11081
11228
  return [.../* @__PURE__ */ new Set([...packTools, ...explicitTools ?? []])];
11082
11229
  }
11230
+ function expandEnabledPackPromptPatches(enabledPacks) {
11231
+ return (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.promptPatch).filter((patch2) => typeof patch2 === "string" && patch2.length > 0);
11232
+ }
11233
+ function appendEnabledPackPromptPatches(prompt, enabledPacks) {
11234
+ const patches = expandEnabledPackPromptPatches(enabledPacks);
11235
+ if (patches.length === 0) return prompt ?? void 0;
11236
+ const base = typeof prompt === "string" ? prompt.trim() : "";
11237
+ const addition = patches.join("\n\n");
11238
+ if (!base) return addition;
11239
+ if (base.includes(addition)) return base;
11240
+ return `${base}
11241
+
11242
+ ${addition}`;
11243
+ }
11083
11244
  var FORCED_TOOLS = ["ui_ask_choice"];
11084
11245
  function applyDisabledTools(toolNames, disabledTools) {
11085
11246
  if (!Array.isArray(disabledTools) || disabledTools.length === 0) {
@@ -11128,7 +11289,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11128
11289
  workspace: { mode: "lease" }
11129
11290
  };
11130
11291
  var findModelConfig = async (modelName, provider) => {
11131
- const { ALL_MODELS } = await import("./models-4OPOOLFS.js");
11292
+ const { ALL_MODELS } = await import("./models-LSCRJJ6P.js");
11132
11293
  const name = toTrimmedString(modelName);
11133
11294
  const prov = toTrimmedString(provider ?? "");
11134
11295
  if (!name) return null;
@@ -11369,7 +11530,7 @@ var buildFormDataFromArgs = async (args) => {
11369
11530
  const trimmedModel = toTrimmedString(model);
11370
11531
  const trimmedProvider = toTrimmedString(provider);
11371
11532
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11372
- const { getModelPricing } = await import("./getPricing-3E6UNPKL.js");
11533
+ const { getModelPricing } = await import("./getPricing-6TOZXPAU.js");
11373
11534
  const normalizedTools = tools ?? [];
11374
11535
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11375
11536
  const formData = {
@@ -13799,7 +13960,7 @@ async function deleteDialogsFunc(args, thunkApi) {
13799
13960
  const deletedDialogIds = [];
13800
13961
  const deletedDialogKeys = [];
13801
13962
  const failures = [];
13802
- const { deleteDialog } = await import("./dialogSlice-OWROKURJ.js");
13963
+ const { deleteDialog } = await import("./dialogSlice-PRHHYSP5.js");
13803
13964
  for (const target of targets) {
13804
13965
  try {
13805
13966
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -13824,9 +13985,60 @@ async function deleteDialogsFunc(args, thunkApi) {
13824
13985
  displayData: deletedDialogIds.length > 0 ? `\u5DF2\u5220\u9664 ${deletedDialogIds.length} \u4E2A\u5BF9\u8BDD\uFF1A${deletedDialogIds.join(", ")}\u3002` : "\u6CA1\u6709\u5220\u9664\u4EFB\u4F55\u5BF9\u8BDD\u3002"
13825
13986
  };
13826
13987
  }
13988
+ async function fetchUserFavoriteAgentMap(thunkApi) {
13989
+ const runtime = getRuntime2(thunkApi);
13990
+ if (!runtime?.currentServer || !runtime?.currentToken) return {};
13991
+ try {
13992
+ const serverBase = normalizeServerOrigin(runtime.currentServer);
13993
+ if (!serverBase) return {};
13994
+ const response = await fetch(`${serverBase}/rpc/listFavorites`, {
13995
+ method: "POST",
13996
+ headers: {
13997
+ "Content-Type": "application/json",
13998
+ ...authHeaders2(runtime.currentToken)
13999
+ },
14000
+ body: JSON.stringify({ targetType: "agent" })
14001
+ }).catch(() => null);
14002
+ if (!response || !response.ok) return {};
14003
+ const data = await response.json().catch(() => ({}));
14004
+ const favoritedAtByKey = {};
14005
+ const items = Array.isArray(data?.items) ? data.items : [];
14006
+ for (const item of items) {
14007
+ const id = typeof item?.id === "string" ? item.id : "";
14008
+ if (!id) continue;
14009
+ const at = Number(item?.favoritedAt) || 0;
14010
+ favoritedAtByKey[id] = Math.max(favoritedAtByKey[id] ?? 0, at || Date.now());
14011
+ }
14012
+ const ids = Array.isArray(data?.ids) ? data.ids : [];
14013
+ for (const id of ids) {
14014
+ if (typeof id === "string" && id && !(id in favoritedAtByKey)) {
14015
+ favoritedAtByKey[id] = 1;
14016
+ }
14017
+ }
14018
+ return favoritedAtByKey;
14019
+ } catch {
14020
+ return {};
14021
+ }
14022
+ }
14023
+ function formatAgentListCard(agents, maxDisplay = 20) {
14024
+ const total = agents.length;
14025
+ const lines = [`Agents (${total})`];
14026
+ const visible = agents.slice(0, maxDisplay);
14027
+ for (const agent of visible) {
14028
+ const star = agent.isFavorite ? "\u2605" : " ";
14029
+ const name = agent.name || "(unnamed)";
14030
+ const model = agent.model || "\u2014";
14031
+ const source = agent.apiSource || agent.provider || agent.cliProvider || "\u2014";
14032
+ lines.push(`${star} ${name} ${model} ${source}`);
14033
+ }
14034
+ if (total > maxDisplay) {
14035
+ lines.push(`\u2026 +${total - maxDisplay} more`);
14036
+ }
14037
+ return lines.join("\n");
14038
+ }
13827
14039
  var listAgentsFunctionSchema = {
13828
14040
  name: "listAgents",
13829
- description: "List the current user's Nolo agents.",
14041
+ description: "List the current user's Nolo agents as safe summaries. Use readAgent with the selected id/publicKey to resolve the runnable agentKey before delegation.",
13830
14042
  parameters: {
13831
14043
  type: "object",
13832
14044
  properties: {
@@ -13837,23 +14049,40 @@ var listAgentsFunctionSchema = {
13837
14049
  };
13838
14050
  async function listAgentsFunc(args, thunkApi) {
13839
14051
  const limit = clampNoloPositiveInteger(args?.limit, 100, 500);
13840
- const records = await queryBestRecords(thunkApi, "agent" /* AGENT */, limit);
13841
- const agents = records.sort((left, right) => getNoloComparableUpdatedAt(right) - getNoloComparableUpdatedAt(left)).map((record) => ({
13842
- id: record?.id ?? null,
13843
- // 不返回 privateKey/dbKey:这是私有 workspace 工具,dbKey 属于敏感标识,
13844
- // 避免出现在公开/分享文本(与 readAgent redactAgentRecordForWorkspaceTool
13845
- // 脱敏策略对齐)。后续读取走 readAgent(id/publicKey 已足够)。
13846
- publicKey: typeof record?.id === "string" ? `agent-pub-${record.id}` : null,
13847
- name: record?.name ?? "(unnamed)",
13848
- model: record?.model ?? null,
13849
- provider: record?.provider ?? record?.apiSource ?? null,
13850
- isPublic: record?.isPublic === true,
13851
- updatedAt: record?.updatedAt ?? record?.createdAt ?? null,
13852
- tools: Array.isArray(record?.tools) ? record.tools : []
13853
- })).filter((agent) => args?.publicOnly !== true || agent.isPublic);
14052
+ const userRecords = await queryBestRecords(thunkApi, "agent" /* AGENT */, limit);
14053
+ const favoritesMap = await fetchUserFavoriteAgentMap(thunkApi);
14054
+ const recordsMap = /* @__PURE__ */ new Map();
14055
+ for (const record of userRecords) {
14056
+ const key = record?.dbKey || record?.id || record?.publicKey;
14057
+ if (key) recordsMap.set(key, record);
14058
+ }
14059
+ for (const favKey of Object.keys(favoritesMap)) {
14060
+ const isAlreadyPresent = Array.from(recordsMap.values()).some(
14061
+ (record) => record?.dbKey === favKey || record?.id === favKey || record?.publicKey === favKey || `agent-pub-${record?.id}` === favKey
14062
+ );
14063
+ if (!isAlreadyPresent) {
14064
+ const favRecord = await readBestRecord(thunkApi, favKey).catch(() => null);
14065
+ if (favRecord) {
14066
+ const key = favRecord?.dbKey || favRecord?.id || favKey;
14067
+ recordsMap.set(key, favRecord);
14068
+ }
14069
+ }
14070
+ }
14071
+ const runtime = getRuntime2(thunkApi);
14072
+ const userId = runtime?.currentUserId ?? void 0;
14073
+ let agents = Array.from(recordsMap.values()).map(
14074
+ (record) => toSafeAgentSummary(record, {
14075
+ favoritesMap,
14076
+ userId
14077
+ })
14078
+ );
14079
+ if (args?.publicOnly === true) {
14080
+ agents = agents.filter((agent) => agent.isPublic);
14081
+ }
14082
+ agents = sortSafeAgentSummaries(agents);
13854
14083
  return {
13855
14084
  rawData: { success: true, total: agents.length, agents },
13856
- displayData: jsonPreview({ total: agents.length, agents })
14085
+ displayData: formatAgentListCard(agents)
13857
14086
  };
13858
14087
  }
13859
14088
  var readAgentFunctionSchema = {
@@ -13995,7 +14224,7 @@ var readSkillDocFunctionSchema = {
13995
14224
  }
13996
14225
  };
13997
14226
  async function readSkillDocFunc(args, thunkApi) {
13998
- const { buildReadDocResult } = await import("./readDocTool-H6X6KO6X.js");
14227
+ const { buildReadDocResult } = await import("./readDocTool-QHVGQHUJ.js");
13999
14228
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
14000
14229
  if (typeof id !== "string" || !id.trim()) {
14001
14230
  throw new Error("readSkillDoc requires id or doc.");
@@ -18608,7 +18837,7 @@ var cloudflareCrawlStatusFunctionSchema = {
18608
18837
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
18609
18838
  const { jobId, limit, status, cursor } = args;
18610
18839
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
18611
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-C7P7YSE4.js");
18840
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-QI3YBNWB.js");
18612
18841
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
18613
18842
  const params = new URLSearchParams();
18614
18843
  if (limit !== void 0) params.set("limit", String(limit));
@@ -19383,7 +19612,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19383
19612
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19384
19613
  async function addImageContentToSpace(input) {
19385
19614
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19386
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-QYVO4SYP.js")).addContentAction;
19615
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-ZHI7TVV3.js")).addContentAction;
19387
19616
  await addContentAction2(
19388
19617
  {
19389
19618
  spaceId: input.spaceId,
@@ -20466,6 +20695,26 @@ var resolveRetryAfterMs = (headers, fallbackMs, bodyRetryAfterMs) => {
20466
20695
  return normalizeNonNegativeMs(bodyRetryAfterMs, fallbackMs);
20467
20696
  };
20468
20697
 
20698
+ // packages/core/abortableDelay.ts
20699
+ function waitForAbortableDelay(ms, signal) {
20700
+ const delayMs = Number.isFinite(ms) && ms >= 0 ? Math.round(ms) : 0;
20701
+ if (signal?.aborted) {
20702
+ return Promise.reject(new DOMException("Aborted", "AbortError"));
20703
+ }
20704
+ return new Promise((resolve, reject) => {
20705
+ const onAbort = () => {
20706
+ clearTimeout(timeoutId);
20707
+ signal?.removeEventListener("abort", onAbort);
20708
+ reject(new DOMException("Aborted", "AbortError"));
20709
+ };
20710
+ const timeoutId = setTimeout(() => {
20711
+ signal?.removeEventListener("abort", onAbort);
20712
+ resolve();
20713
+ }, delayMs);
20714
+ signal?.addEventListener("abort", onAbort, { once: true });
20715
+ });
20716
+ }
20717
+
20469
20718
  // packages/ai/chat/parseMultilineSSE.ts
20470
20719
  function createSSEParser() {
20471
20720
  let buffer = "";
@@ -20544,20 +20793,7 @@ function createSubscriptionError(status, hasBody, retryAfterMs) {
20544
20793
  return createRetryableError(message, retryAfterMs);
20545
20794
  }
20546
20795
  async function waitForRetryDelay(retryAfterMs, signal) {
20547
- if (signal.aborted) throw new DOMException("Aborted", "AbortError");
20548
- await new Promise((resolve, reject) => {
20549
- let timeoutId;
20550
- const onAbort = () => {
20551
- clearTimeout(timeoutId);
20552
- signal.removeEventListener("abort", onAbort);
20553
- reject(new DOMException("Aborted", "AbortError"));
20554
- };
20555
- timeoutId = setTimeout(() => {
20556
- signal.removeEventListener("abort", onAbort);
20557
- resolve();
20558
- }, retryAfterMs);
20559
- signal.addEventListener("abort", onAbort, { once: true });
20560
- });
20796
+ await waitForAbortableDelay(retryAfterMs, signal);
20561
20797
  }
20562
20798
  function parseRetryableJson(text) {
20563
20799
  try {
@@ -20643,7 +20879,7 @@ async function listenToDialogEvents(dialogId, currentServer, authHeader, signal,
20643
20879
  });
20644
20880
  }
20645
20881
  var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, { getState, signal: thunkSignal }) => {
20646
- const { agentKey, userInput, serverBase, spaceId, onStatusChange, onDone, onFailed } = args;
20882
+ const { agentKey, userInput, serverBase, spaceId, parentDialogId, onStatusChange, onDone, onFailed } = args;
20647
20883
  const state = getState();
20648
20884
  const currentServer = normalizeServerOrigin(serverBase) || selectCurrentServer(state);
20649
20885
  const token = selectIdentityToken(state);
@@ -20664,12 +20900,14 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
20664
20900
  userInput,
20665
20901
  spaceId,
20666
20902
  background: true,
20903
+ ...parentDialogId ? { parentDialogId } : {},
20667
20904
  runtimeContext: {
20668
20905
  surface: "web",
20669
20906
  host: "browser",
20670
20907
  runtime: "react",
20671
20908
  entrypoint: "background-agent-run",
20672
- capabilities: ["background", "sse-events"]
20909
+ capabilities: ["background", "sse-events"],
20910
+ ...parentDialogId ? { parentThreadId: parentDialogId } : {}
20673
20911
  }
20674
20912
  }),
20675
20913
  signal: effectiveSignal
@@ -20784,12 +21022,15 @@ async function callAgentFunc(args, thunkApi, context) {
20784
21022
  throw new Error("callAgent: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
20785
21023
  }
20786
21024
  const content = buildDelegatedTaskContent(task, input);
21025
+ const activeDialogKey = getActiveDialogKey();
21026
+ const parentDialogId = activeDialogKey ? extractCustomId(activeDialogKey) : void 0;
20787
21027
  try {
20788
21028
  const bgResult = await dispatch(
20789
21029
  runAgentBackground({
20790
21030
  agentKey,
20791
21031
  userInput: content,
20792
- ...background === true ? { waitForCompletion: false } : {}
21032
+ ...background === true ? { waitForCompletion: false } : {},
21033
+ ...parentDialogId ? { parentDialogId } : {}
20793
21034
  })
20794
21035
  ).unwrap();
20795
21036
  if (background === true) {
@@ -21369,6 +21610,117 @@ async function runLlmToolFunc(args, thunkApi, _context) {
21369
21610
  }
21370
21611
  }
21371
21612
 
21613
+ // packages/ai/tools/agent/agentRunDisplayHelpers.ts
21614
+ function getAgentRunStatusIcon(status) {
21615
+ switch (status) {
21616
+ case "running":
21617
+ case "pending":
21618
+ return "\u23F3";
21619
+ case "done":
21620
+ return "\u2713";
21621
+ case "failed":
21622
+ case "timeout":
21623
+ return "\u2717";
21624
+ case "killed":
21625
+ case "cancelled":
21626
+ case "cancelling":
21627
+ return "\u{1F6D1}";
21628
+ case "not_found":
21629
+ default:
21630
+ return "?";
21631
+ }
21632
+ }
21633
+ var DEFAULT_LABELS = {
21634
+ runStatus: "Run status",
21635
+ runStarted: "Run started",
21636
+ runStopped: "Run stopped",
21637
+ logTail: "Log tail:",
21638
+ runs: (count) => `Runs (${count})`
21639
+ };
21640
+ function resolveLabels(labels) {
21641
+ return {
21642
+ runStatus: labels?.runStatus ?? DEFAULT_LABELS.runStatus,
21643
+ runStarted: labels?.runStarted ?? DEFAULT_LABELS.runStarted,
21644
+ runStopped: labels?.runStopped ?? DEFAULT_LABELS.runStopped,
21645
+ logTail: labels?.logTail ?? DEFAULT_LABELS.logTail,
21646
+ runs: labels?.runs ?? DEFAULT_LABELS.runs
21647
+ };
21648
+ }
21649
+ function isAgentNameFallback(agentName) {
21650
+ const trimmed = typeof agentName === "string" ? agentName.trim() : "";
21651
+ return !trimmed || trimmed === "agent";
21652
+ }
21653
+ function formatStartRunCard(agentName, status = "running", labels) {
21654
+ const L = resolveLabels(labels);
21655
+ const icon = getAgentRunStatusIcon(status);
21656
+ const lines = [L.runStarted];
21657
+ if (!isAgentNameFallback(agentName)) {
21658
+ lines.push(` agent ${agentName}`);
21659
+ }
21660
+ lines.push(` status ${icon} ${status}`);
21661
+ return lines.join("\n");
21662
+ }
21663
+ function formatStatusRunCard(agentName, status = "running", opts) {
21664
+ const L = resolveLabels(opts?.labels);
21665
+ const icon = getAgentRunStatusIcon(status);
21666
+ const lines = [L.runStatus, ` ${icon} ${status}`];
21667
+ if (!isAgentNameFallback(agentName)) {
21668
+ lines.push(` agent ${agentName}`);
21669
+ }
21670
+ if (opts?.pollCount !== void 0 && opts.pollCount > 0) {
21671
+ lines.push(` polls ${opts.pollCount}`);
21672
+ }
21673
+ if (typeof opts?.elapsedMs === "number" && Number.isFinite(opts.elapsedMs)) {
21674
+ lines.push(` last ${Math.round(opts.elapsedMs)}ms`);
21675
+ }
21676
+ if (opts?.lastToolNames && opts.lastToolNames.length > 0) {
21677
+ lines.push(` lastTools ${opts.lastToolNames.join(", ")}`);
21678
+ }
21679
+ if (opts?.toolCallCount !== void 0) {
21680
+ lines.push(` toolCalls ${opts.toolCallCount}`);
21681
+ }
21682
+ if (opts?.errorMessage?.trim()) {
21683
+ lines.push(` error ${opts.errorMessage.trim()}`);
21684
+ }
21685
+ const includeLog = opts?.includeLogTail !== false;
21686
+ if (includeLog && opts?.logLines && opts.logLines.length > 0) {
21687
+ lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
21688
+ }
21689
+ return lines.join("\n");
21690
+ }
21691
+ function formatStopRunCard(status = "killed", labels) {
21692
+ const L = resolveLabels(labels);
21693
+ const icon = getAgentRunStatusIcon(status);
21694
+ return `${L.runStopped}
21695
+ ${icon} ${status}`;
21696
+ }
21697
+ function formatListRunsCard(runs, labels) {
21698
+ const L = resolveLabels(labels);
21699
+ const lines = [L.runs(runs.length)];
21700
+ for (const run of runs) {
21701
+ const status = run.status ?? "\u2014";
21702
+ const icon = getAgentRunStatusIcon(status);
21703
+ const name = run.agentName || run.name || "agent";
21704
+ lines.push(` ${icon} ${name}`);
21705
+ }
21706
+ return lines.join("\n");
21707
+ }
21708
+ function formatNotFoundRunCard(labels) {
21709
+ const L = resolveLabels(labels);
21710
+ return `${L.runStatus}
21711
+ ? not_found`;
21712
+ }
21713
+ var AGENT_RUN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
21714
+ "done",
21715
+ "failed",
21716
+ "timeout",
21717
+ "killed",
21718
+ "cancelled"
21719
+ ]);
21720
+ function isAgentRunTerminalStatus(status) {
21721
+ return typeof status === "string" && AGENT_RUN_TERMINAL_STATUSES.has(status);
21722
+ }
21723
+
21372
21724
  // packages/ai/tools/agent/startAgentRunTool.ts
21373
21725
  var startAgentRunFunctionSchema = {
21374
21726
  name: "startAgentRun",
@@ -21378,7 +21730,7 @@ var startAgentRunFunctionSchema = {
21378
21730
  properties: {
21379
21731
  agentKey: {
21380
21732
  type: "string",
21381
- description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u552F\u4E00 ID\uFF08dbKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF09\u3002"
21733
+ description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF08\u4F18\u5148\u4F7F\u7528 readAgent \u8FD4\u56DE\u7684 agentKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF09\u3002"
21382
21734
  },
21383
21735
  task: {
21384
21736
  type: "string",
@@ -21401,22 +21753,27 @@ async function startAgentRunFunc(args, thunkApi, _context) {
21401
21753
  throw new Error("startAgentRun: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
21402
21754
  }
21403
21755
  const content = buildDelegatedTaskContent(task, input);
21756
+ const activeDialogKey = getActiveDialogKey();
21757
+ const parentDialogId = activeDialogKey ? extractCustomId(activeDialogKey) : void 0;
21404
21758
  try {
21405
21759
  const bgResult = await dispatch(
21406
21760
  runAgentBackground({
21407
21761
  agentKey,
21408
21762
  userInput: content,
21409
- waitForCompletion: false
21763
+ waitForCompletion: false,
21764
+ ...parentDialogId ? { parentDialogId } : {}
21410
21765
  })
21411
21766
  ).unwrap();
21412
21767
  const runId = bgResult.dialogId;
21413
21768
  const status = bgResult.status ?? "pending";
21769
+ const name = bgResult.agentName || bgResult.name || "agent";
21414
21770
  return {
21415
21771
  rawData: {
21416
21772
  runId,
21417
- status
21773
+ status,
21774
+ ...bgResult.agentName ? { agentName: bgResult.agentName } : {}
21418
21775
  },
21419
- displayData: `\u23F3 \u540E\u53F0 run \u5DF2\u542F\u52A8\uFF0CrunId: ${runId}\u3002\u7528 controlAgentRun(action:"status", runId:"${runId}") \u67E5\u8FDB\u5EA6\u3002`
21776
+ displayData: formatStartRunCard(name, status)
21420
21777
  };
21421
21778
  } catch (e) {
21422
21779
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21486,11 +21843,9 @@ async function handleList(thunkApi, opts) {
21486
21843
  const resData = data?.data ?? data;
21487
21844
  const runs = resData?.runs ?? [];
21488
21845
  const count = resData?.count ?? runs.length;
21489
- const summary = runs.map((t) => `${t.runId} [${t.status}] ${t.agentKey ?? "unknown"}`).join("\n");
21490
21846
  return {
21491
21847
  rawData: { runs, count },
21492
- displayData: runs.length > 0 ? `\u{1F4CB} \u627E\u5230 ${runs.length} \u4E2A run\uFF1A
21493
- ${summary}` : "\u{1F4CB} \u6CA1\u6709\u627E\u5230 run\u3002"
21848
+ displayData: formatListRunsCard(runs)
21494
21849
  };
21495
21850
  } catch (e) {
21496
21851
  throw new Error(`controlAgentRun(list) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21508,24 +21863,21 @@ async function handleStatus(thunkApi, opts) {
21508
21863
  if (!resData || resData.found === false || !resData.run) {
21509
21864
  return {
21510
21865
  rawData: { runId: opts.runId, found: false },
21511
- displayData: `\u2753 run ${opts.runId} \u672A\u627E\u5230\u3002\u53EF\u80FD\u5DF2\u5B8C\u6210\u5E76\u88AB\u6E05\u7406\uFF0C\u6216 ID \u9519\u8BEF\u3002`
21866
+ displayData: `Run status
21867
+ ? not_found`
21512
21868
  };
21513
21869
  }
21514
21870
  const run = resData.run;
21515
21871
  const logLines = resData.logLines;
21516
- const displayParts = [
21517
- `\u{1F4CA} run ${run.runId}`,
21518
- ` \u72B6\u6001: ${run.status}`,
21519
- ` Agent: ${run.agentKey ?? "unknown"}`,
21520
- ...run.lastToolNames?.length ? [` \u6700\u8FD1\u5DE5\u5177: ${run.lastToolNames.join(", ")}`] : [],
21521
- ...run.toolCallCount !== void 0 ? [` \u5DE5\u5177\u8C03\u7528\u6570: ${run.toolCallCount}`] : [],
21522
- ...run.lastAssistantText ? [` \u6700\u8FD1\u8F93\u51FA: ${run.lastAssistantText.slice(0, 200)}`] : [],
21523
- ...run.errorMessage ? [` \u9519\u8BEF: ${run.errorMessage}`] : [],
21524
- ...logLines?.length ? [` \u65E5\u5FD7(\u6700\u8FD1 ${logLines.length} \u884C):`, ...logLines.map((l) => ` ${l}`)] : []
21525
- ];
21872
+ const name = run.agentName || run.name || "agent";
21526
21873
  return {
21527
21874
  rawData: { found: true, ...run, ...logLines ? { logLines } : {} },
21528
- displayData: displayParts.join("\n")
21875
+ displayData: formatStatusRunCard(name, run.status, {
21876
+ lastToolNames: run.lastToolNames,
21877
+ toolCallCount: run.toolCallCount,
21878
+ errorMessage: run.errorMessage,
21879
+ logLines
21880
+ })
21529
21881
  };
21530
21882
  } catch (e) {
21531
21883
  throw new Error(`controlAgentRun(status) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21540,21 +21892,10 @@ async function handleStop(thunkApi, opts) {
21540
21892
  { withAuth: true }
21541
21893
  );
21542
21894
  const result = data?.data ?? data;
21543
- const wasActive = result?.wasActive ?? false;
21544
21895
  const status = result?.status ?? "cancelled";
21545
- let statusText;
21546
- if (status === "cancelling") {
21547
- statusText = `\u{1F6D1} \u5DF2\u53D1\u51FA\u53D6\u6D88\u4FE1\u53F7\uFF0Crun ${opts.runId} \u6B63\u5728\u4E2D\u6B62\u3002`;
21548
- } else if (status === "cancelled" && !wasActive) {
21549
- statusText = `\u{1F6D1} run ${opts.runId} \u6CA1\u6709\u6D3B\u8DC3\u8FDB\u7A0B\uFF0C\u5DF2\u6807\u8BB0\u4E3A\u5DF2\u53D6\u6D88\u3002`;
21550
- } else if (status === "cancelled") {
21551
- statusText = `\u{1F6D1} run ${opts.runId} \u5DF2\u6210\u529F\u53D6\u6D88\u3002`;
21552
- } else {
21553
- statusText = `\u2139\uFE0F run ${opts.runId} \u5DF2\u5904\u4E8E\u72B6\u6001 "${status}"\u3002${wasActive ? "\u6267\u884C\u5DF2\u505C\u6B62\u3002" : "\u6CA1\u6709\u6D3B\u8DC3\u8FDB\u7A0B\u3002"}`;
21554
- }
21555
21896
  return {
21556
- rawData: { runId: opts.runId, status, wasActive },
21557
- displayData: statusText
21897
+ rawData: { runId: opts.runId, status, wasActive: result?.wasActive ?? false },
21898
+ displayData: formatStopRunCard(status)
21558
21899
  };
21559
21900
  } catch (e) {
21560
21901
  throw new Error(`controlAgentRun(stop) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -22753,7 +23094,7 @@ var executeToolRun = createAsyncThunk(
22753
23094
  if (!executionInput) {
22754
23095
  throw new Error(`ToolRun ${id} has no input to execute with.`);
22755
23096
  }
22756
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-XSD2BOEN.js");
23097
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-AHNQE4GP.js");
22757
23098
  const { executor } = findToolExecutor2(run.toolName);
22758
23099
  toolRunStarted({
22759
23100
  id: run.id,
@@ -22777,7 +23118,7 @@ var executeToolRun = createAsyncThunk(
22777
23118
  const latestState = thunkApi.getState();
22778
23119
  const userId = latestState.auth?.currentUser?.userId;
22779
23120
  if (userId) {
22780
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-BS5TSW3W.js");
23121
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-4EXTYXS4.js");
22781
23122
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
22782
23123
  }
22783
23124
  }
@@ -25180,7 +25521,7 @@ async function updateDocFunc(args, thunkApi) {
25180
25521
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
25181
25522
  };
25182
25523
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
25183
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-3DXRYBMD.js");
25524
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-H5VWKT5D.js");
25184
25525
  if (getDocState().pageKey === id) {
25185
25526
  applyExternalDocUpdate({
25186
25527
  slateData: finalSlateData,
@@ -25205,7 +25546,7 @@ async function updateDocFunc(args, thunkApi) {
25205
25546
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
25206
25547
  async function dispatchSetSettings(thunkApi, changes) {
25207
25548
  const injectedSetSettings = thunkApi?.extra?.setSettings;
25208
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-2I5HMG47.js")).setSettings;
25549
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-CK5YZGNI.js")).setSettings;
25209
25550
  await thunkApi.dispatch(setSettings(changes)).unwrap();
25210
25551
  }
25211
25552
  var updateUserPreferenceProfileFunctionSchema = {
@@ -26607,7 +26948,7 @@ var baseToolDefinitions = [
26607
26948
  executor: listAgentsFunc,
26608
26949
  description: {
26609
26950
  name: "listAgents",
26610
- description: "List the current user's Nolo agents.",
26951
+ description: "List the current user's Nolo agents as safe summaries; use readAgent to resolve the runnable agentKey before delegation.",
26611
26952
  category: "Nolo workspace"
26612
26953
  },
26613
26954
  behavior: "data",
@@ -27410,8 +27751,16 @@ export {
27410
27751
  readXPostFunc,
27411
27752
  readXhsProfileFunctionSchema,
27412
27753
  readXhsProfileFunc,
27754
+ formatStartRunCard,
27755
+ formatStatusRunCard,
27756
+ formatStopRunCard,
27757
+ formatListRunsCard,
27758
+ formatNotFoundRunCard,
27759
+ isAgentRunTerminalStatus,
27413
27760
  TOOL_PACKS,
27414
27761
  expandEnabledPacks,
27762
+ expandEnabledPackPromptPatches,
27763
+ appendEnabledPackPromptPatches,
27415
27764
  FORCED_TOOLS,
27416
27765
  applyDisabledTools,
27417
27766
  addDefaultLightWebToolsForConfiguredAgents,
@@ -27427,7 +27776,9 @@ export {
27427
27776
  toolRunSucceeded,
27428
27777
  toolRunFailed,
27429
27778
  getAllToolRuns,
27779
+ waitForAbortableDelay,
27430
27780
  createSSEParser,
27781
+ formatAgentListCard,
27431
27782
  TOOL_GROUP_META,
27432
27783
  toolQueryFunctionSchema,
27433
27784
  toolQueryFunc,