nolo-cli 0.11.0 → 0.12.0-alpha.10

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-4F7VZR5U.js} +52 -50
  2. package/{action-AA4IJ5K2.js → action-OTOWUMPW.js} +8 -9
  3. package/{addContentAction-QYVO4SYP.js → addContentAction-JGBUVR7K.js} +7 -9
  4. package/{addDialogAgentAction-WVVKT5WQ.js → addDialogAgentAction-V6CL2UCF.js} +9 -10
  5. package/{agentDeleteCommand-RDPGYIWF.js → agentDeleteCommand-MMRSG6AB.js} +39 -28
  6. package/{agentEmailCommands-2HJJKS5F.js → agentEmailCommands-YFVKOGM7.js} +65 -62
  7. package/{agentListCommands-HFEVV3ZW.js → agentListCommands-2PZHIQ3I.js} +128 -31
  8. package/{agentMachineCommands-25ZOENJU.js → agentMachineCommands-55UUZNHF.js} +38 -26
  9. package/{agentPullCommand-GOL2S4W2.js → agentPullCommand-KRBRIFIY.js} +7 -7
  10. package/{agentRecordCommands-GTCOAM3L.js → agentRecordCommands-BTP3OAPL.js} +57 -54
  11. package/{agentRunCommand-YBS3JDLD.js → agentRunCommand-AA4QLRQZ.js} +60 -59
  12. package/{agentRunControl-K4VKNEHF.js → agentRunControl-IX4F5W2C.js} +3 -3
  13. package/{agentRuntimeLocal-UQBMQI2M.js → agentRuntimeLocal-QDJCBXM2.js} +31 -15
  14. package/{agentSlice-6EKOBCCS.js → agentSlice-6JAJOU3X.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-E4HNJSHC.js → chunk-2BVGERJ2.js} +81 -19
  18. package/{chunk-LP65VRCI.js → chunk-3MI5LDDU.js} +6 -6
  19. package/{chunk-OPZYGHUC.js → chunk-3WGLLTK4.js} +59 -1
  20. package/{chunk-KJR5KAUQ.js → chunk-3XF6LCCN.js} +20 -7
  21. package/{chunk-PXZAAB4L.js → chunk-4LG74DRG.js} +4 -4
  22. package/{chunk-2FTTDCD4.js → chunk-4ON5AV72.js} +2 -1
  23. package/{chunk-IWX4UW2E.js → chunk-524BDL33.js} +89 -8
  24. package/{chunk-ISNCLGUZ.js → chunk-5NBHQD4D.js} +4 -3
  25. package/{chunk-ZPRK73XY.js → chunk-5S4SWV5G.js} +51 -38
  26. package/{chunk-EVZKZF32.js → chunk-5V524MHX.js} +195 -78
  27. package/{chunk-CKOJQDKR.js → chunk-7JJCGV7N.js} +146 -3
  28. package/{chunk-NEM67FX7.js → chunk-ARSC56DC.js} +1 -1
  29. package/{chunk-AFON4QUU.js → chunk-AS3ZQ3O2.js} +19 -28
  30. package/{chunk-4SOKXIW4.js → chunk-B4KT7RN2.js} +10 -13
  31. package/chunk-BYXBJQAS.js +0 -0
  32. package/{chunk-PXQN7IBQ.js → chunk-C3BFP57W.js} +95 -2
  33. package/{chunk-AEZAORLG.js → chunk-CGDQDXKZ.js} +5 -5
  34. package/{chunk-MQI77IRB.js → chunk-DPFWKRHG.js} +2 -2
  35. package/{chunk-TACHTH5D.js → chunk-EIMX5ER5.js} +18 -18
  36. package/{chunk-5MOUAAMK.js → chunk-FSUZIGIG.js} +197 -2578
  37. package/{chunk-FXXSGWAJ.js → chunk-H5Y2H2N6.js} +1 -1
  38. package/chunk-IKXL2HZ3.js +70 -0
  39. package/{chunk-QNMFBBZK.js → chunk-IVAOVLM7.js} +1 -1
  40. package/chunk-JFANOO7I.js +2274 -0
  41. package/{chunk-YPRZSPF3.js → chunk-JKWWVF2I.js} +1 -1
  42. package/{chunk-3NSIQZZ6.js → chunk-JU7J7EAV.js} +45 -45
  43. package/{chunk-X2S7JTIG.js → chunk-KWBH4RAL.js} +1280 -137
  44. package/{chunk-OUI3ZHYD.js → chunk-LUKQQJFL.js} +39 -2
  45. package/{chunk-BX6U3ETE.js → chunk-MG6BVV3T.js} +320 -102
  46. package/{chunk-L53FGHA4.js → chunk-MQRZ5QUH.js} +1 -1
  47. package/{chunk-2W2VYVI5.js → chunk-MZHSAPZP.js} +675 -177
  48. package/{chunk-YOCHZD7D.js → chunk-NCGFB7NN.js} +5 -3
  49. package/{chunk-DWGAEFJL.js → chunk-O4FOPRCP.js} +1 -1
  50. package/chunk-OGGHETUE.js +4900 -0
  51. package/{chunk-PNEW2Z3T.js → chunk-OHEKYYJF.js} +7 -7
  52. package/chunk-OOIN7HSO.js +146 -0
  53. package/{chunk-SV5MWASH.js → chunk-OPM2DE2J.js} +12 -12
  54. package/{chunk-5OIFWVX7.js → chunk-QJSTNKJY.js} +1 -1
  55. package/{chunk-C4FTUXVF.js → chunk-QLUFR47U.js} +11 -1
  56. package/{chunk-LAX2JSTX.js → chunk-QUHUVG6Y.js} +20 -2
  57. package/{chunk-D6OQHXVG.js → chunk-RQSOAMPJ.js} +22 -6
  58. package/{chunk-ZEYDOXHF.js → chunk-RUGEW4P7.js} +1515 -884
  59. package/{chunk-GBDSZATH.js → chunk-RWO5DGXI.js} +3 -3
  60. package/{chunk-S3GS2PRL.js → chunk-TA7VKOHU.js} +613 -70
  61. package/{chunk-XYZA7S7V.js → chunk-TQYYGE6G.js} +6 -6
  62. package/{chunk-YTBMA7NO.js → chunk-TYPHUVK5.js} +70 -8
  63. package/{chunk-4ZDM73SD.js → chunk-V2J635L5.js} +1 -1
  64. package/{chunk-C2MDQQ4O.js → chunk-VBSWHE5W.js} +1 -1
  65. package/{chunk-O26GI2JP.js → chunk-VKG4HXYV.js} +39 -8
  66. package/{chunk-IPYUUY4E.js → chunk-WPHL6ALY.js} +1 -1
  67. package/{chunk-7D3JY6C2.js → chunk-WVTBAALN.js} +64 -5
  68. package/{chunk-XFOLQLDN.js → chunk-XHQWJUW4.js} +2 -2
  69. package/{chunk-Q3UKJVU4.js → chunk-Y5P3ZRGC.js} +10 -10
  70. package/{chunk-KQQVGRA3.js → chunk-YUMYYXPI.js} +53 -183
  71. package/cliEnvHelpers-VYC2OPTB.js +30 -0
  72. package/{createAgentAutomationAction-LTI5QU35.js → createAgentAutomationAction-4NY4JLOK.js} +26 -26
  73. package/{createDialogAction-OJJ7L3L3.js → createDialogAction-I5WUWFJ6.js} +26 -26
  74. package/{createPageAction-5MXWVRGY.js → createPageAction-HFTIQ7TW.js} +26 -26
  75. package/{dbSlice-RQFQQVHT.js → dbSlice-J4PUZ6Y5.js} +6 -7
  76. package/{deleteFile-7XP5BGC7.js → deleteFile-M7UNIUOO.js} +4 -4
  77. package/{dialogCommands-JTJ3RPPW.js → dialogCommands-SVXRJFZS.js} +34 -23
  78. package/{dialogSlice-OWROKURJ.js → dialogSlice-35LA3ZRG.js} +26 -26
  79. package/{docCreateCommands-WJBEW2V7.js → docCreateCommands-Z7RIAYKQ.js} +34 -23
  80. package/{docDeleteCommands-BVEHJOY5.js → docDeleteCommands-NEYHUVZF.js} +35 -25
  81. package/{docReadCommands-NEWOZIJV.js → docReadCommands-I4US2SDE.js} +34 -23
  82. package/{docStore-3DXRYBMD.js → docStore-3CP2IO6M.js} +25 -25
  83. package/{docUpdateCommands-C7WHT7UU.js → docUpdateCommands-UU5HQBRP.js} +34 -23
  84. package/fetchMessages-KTNM7QAR.js +1 -1
  85. package/{getPricing-3E6UNPKL.js → getPricing-UGDJHI7M.js} +7 -3
  86. package/{handleSendMessageAction-B5PRR7BE.js → handleSendMessageAction-FWTLQGOZ.js} +30 -30
  87. package/index.js +77 -76
  88. package/{localDialogRead-YSKFFRTT.js → localDialogRead-2VRI24F4.js} +1 -1
  89. package/{machineCommands-IIIREAEK.js → machineCommands-STHZKBDJ.js} +64 -61
  90. package/{machineWsRunDispatch-3SIU6ILW.js → machineWsRunDispatch-7YHT4TPT.js} +56 -53
  91. package/{memoryCommands-O4MIPIWQ.js → memoryCommands-AFMES3LN.js} +5 -5
  92. package/{models-4OPOOLFS.js → models-LSCRJJ6P.js} +2 -2
  93. package/package.json +1 -1
  94. package/{read-QJNKRROM.js → read-2MIMRBZ2.js} +4 -4
  95. package/{readDocTool-H6X6KO6X.js → readDocTool-QHVGQHUJ.js} +1 -1
  96. package/{readlineWorkspace-HGP3I3OC.js → readlineWorkspace-OMRWYMB6.js} +1279 -716
  97. package/{removeDialogAgentAction-TCT35SOF.js → removeDialogAgentAction-XUZYQBV4.js} +13 -13
  98. package/{runAgentClientLoop-EFM4PTVI.js → runAgentClientLoop-FP2K33ZO.js} +47 -46
  99. package/{runtimeDoctorCommands-ID43Z7VX.js → runtimeDoctorCommands-QNF3J3UV.js} +6 -6
  100. package/{setDialogExtraReferencesAction-CGYLZMFH.js → setDialogExtraReferencesAction-PTAIFKGM.js} +9 -10
  101. package/{setPrimaryDialogAgentAction-F6BFQDJU.js → setPrimaryDialogAgentAction-HRFTDB44.js} +13 -13
  102. package/{settingSlice-2I5HMG47.js → settingSlice-VGRJUSE5.js} +7 -8
  103. package/{skillDiscovery-UGSQGX2U.js → skillDiscovery-6M2BZUFN.js} +3 -3
  104. package/{spaceCommands-MT7BWCIL.js → spaceCommands-GN73BCOB.js} +38 -29
  105. package/{spaceSlice-BS5TSW3W.js → spaceSlice-WTFNKOVA.js} +30 -26
  106. package/{streamAgentChatTurn-I3VBFNR3.js → streamAgentChatTurn-HBAQQVNK.js} +442 -130
  107. package/{toolApiClient-C7P7YSE4.js → toolApiClient-QI3YBNWB.js} +2 -2
  108. package/{tools-XSD2BOEN.js → tools-TPQYTLQZ.js} +34 -33
  109. package/{tuiSummaryLlmCaller-32NRHTT2.js → tuiSummaryLlmCaller-XDC7WG4K.js} +11 -7
  110. package/{updateCommands-VOSPKXFF.js → updateCommands-XZDOOYFH.js} +13 -5
  111. package/{updateDialogTitleAction-7FYNJOGP.js → updateDialogTitleAction-AWXNPUQJ.js} +30 -29
  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
@@ -1,9 +1,14 @@
1
1
  import {
2
2
  CORE_DRAIN_REASON,
3
+ DRAIN_EXHAUSTED_USER_MESSAGE,
3
4
  isGatewayHttpStatus,
4
5
  normalizeNonNegativeMs,
5
6
  parseRetryAfterHeaderMs
6
- } from "./chunk-D6OQHXVG.js";
7
+ } from "./chunk-RQSOAMPJ.js";
8
+ import {
9
+ sortSafeAgentSummaries,
10
+ toSafeAgentSummary
11
+ } from "./chunk-OOIN7HSO.js";
7
12
  import {
8
13
  getUserDataItemTimestamp,
9
14
  mergeAndDedupUserData
@@ -14,7 +19,7 @@ import {
14
19
  readPageFunc,
15
20
  readPageFunctionSchema,
16
21
  slateToSimplifiedMarkdown
17
- } from "./chunk-QNMFBBZK.js";
22
+ } from "./chunk-IVAOVLM7.js";
18
23
  import {
19
24
  markdownToSlate
20
25
  } from "./chunk-3LY4F7SV.js";
@@ -29,10 +34,10 @@ import {
29
34
  } from "./chunk-VF4K2QE6.js";
30
35
  import {
31
36
  createDocState
32
- } from "./chunk-XYZA7S7V.js";
37
+ } from "./chunk-TQYYGE6G.js";
33
38
  import {
34
39
  createDialogAction
35
- } from "./chunk-E4HNJSHC.js";
40
+ } from "./chunk-2BVGERJ2.js";
36
41
  import {
37
42
  buildSkillDocMarkdown,
38
43
  normalizeSkillBudgetTier,
@@ -46,7 +51,6 @@ import {
46
51
  addCategory,
47
52
  addContentToSpace,
48
53
  addRow,
49
- buildDatabaseFileContentUrl,
50
54
  createTable,
51
55
  deleteDbKey,
52
56
  deleteSpace,
@@ -72,38 +76,13 @@ import {
72
76
  updateContentCategory,
73
77
  updateContentTitle,
74
78
  updateStep
75
- } from "./chunk-5MOUAAMK.js";
79
+ } from "./chunk-FSUZIGIG.js";
76
80
  import {
77
81
  createAgent,
78
82
  runLlm,
79
83
  streamAgentChatTurn,
80
84
  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";
85
+ } from "./chunk-Y5P3ZRGC.js";
107
86
  import {
108
87
  NOLO_WORKSPACE_TOOL_NAMES,
109
88
  buildNoloSubjectRefQueryTarget,
@@ -119,13 +98,62 @@ import {
119
98
  redactAgentRecordForWorkspaceTool,
120
99
  resolveNoloDialogInput,
121
100
  verifyNoloDialogSubjectRefQuery
122
- } from "./chunk-4SOKXIW4.js";
101
+ } from "./chunk-B4KT7RN2.js";
102
+ import {
103
+ buildDatabaseFileContentUrl
104
+ } from "./chunk-JFANOO7I.js";
123
105
  import {
124
106
  DEFAULT_MODEL
125
- } from "./chunk-BBYVOSU2.js";
107
+ } from "./chunk-OGGHETUE.js";
108
+ import {
109
+ ToolApiError,
110
+ buildToolRequestHeaders,
111
+ callToolApi,
112
+ getRequestConfig,
113
+ getToolBaseUrl,
114
+ getToolRequestContext
115
+ } from "./chunk-5MIDPSSK.js";
116
+ import {
117
+ extractCustomId
118
+ } from "./chunk-DFFIZ25G.js";
119
+ import {
120
+ getActiveDialogKey,
121
+ require_react,
122
+ selectCurrentDialogKey,
123
+ selectPendingRawDataByPageKey
124
+ } from "./chunk-3ASDTTEI.js";
125
+ import {
126
+ toErrorMessage
127
+ } from "./chunk-HNMXYYJR.js";
128
+ import {
129
+ compactWhitespace
130
+ } from "./chunk-DWLEOOGR.js";
131
+ import {
132
+ shareResourceAction
133
+ } from "./chunk-DPFWKRHG.js";
134
+ import {
135
+ AGENT_UPDATE_FIELD_NAMES,
136
+ normalizeAgentUpdateFieldList,
137
+ selectAutoApproveSelfUpdateFields,
138
+ selectCurrentServer,
139
+ selectSyncServers
140
+ } from "./chunk-JU7J7EAV.js";
126
141
  import {
127
142
  asRecordOrEmpty
128
143
  } from "./chunk-KX6YBIHG.js";
144
+ import {
145
+ addContentAction,
146
+ createSpaceKey,
147
+ normalizeSpaceId
148
+ } from "./chunk-WVTBAALN.js";
149
+ import {
150
+ patch,
151
+ read,
152
+ readAndWait,
153
+ readAndWaitAction,
154
+ toTimestampMs,
155
+ write
156
+ } from "./chunk-VKG4HXYV.js";
129
157
  import {
130
158
  SEPARATOR,
131
159
  createAgentKey,
@@ -145,35 +173,12 @@ import {
145
173
  import {
146
174
  asOptionalFiniteNumber
147
175
  } 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
176
  import {
166
177
  asTrimmedLowercaseString
167
178
  } from "./chunk-QSJ3HFEF.js";
168
- import {
169
- compactWhitespace
170
- } from "./chunk-DWLEOOGR.js";
171
- import {
172
- toErrorMessage
173
- } from "./chunk-HNMXYYJR.js";
174
179
  import {
175
180
  readAction
176
- } from "./chunk-XFOLQLDN.js";
181
+ } from "./chunk-XHQWJUW4.js";
177
182
  import {
178
183
  createAsyncThunk,
179
184
  getRuntimeServerContext,
@@ -181,22 +186,22 @@ import {
181
186
  selectIdentityToken,
182
187
  selectIdentityUserId,
183
188
  selectRuntimeSnapshot
184
- } from "./chunk-OOM6SJNR.js";
189
+ } from "./chunk-TSUJOM6N.js";
185
190
  import {
186
191
  isAbortError
187
192
  } from "./chunk-OOSFSFMA.js";
188
- import {
189
- asTrimmedString
190
- } from "./chunk-3EUW3WEO.js";
191
193
  import {
192
194
  isRecord
193
195
  } from "./chunk-KUG52IAP.js";
194
196
  import {
195
- DEFAULT_LOCAL_API_ORIGIN
196
- } from "./chunk-4SN6J65J.js";
197
+ asTrimmedString
198
+ } from "./chunk-3EUW3WEO.js";
197
199
  import {
198
200
  API_ENDPOINTS
199
201
  } from "./chunk-LCBAMY2M.js";
202
+ import {
203
+ DEFAULT_LOCAL_API_ORIGIN
204
+ } from "./chunk-4SN6J65J.js";
200
205
  import {
201
206
  normalizeServerOrigin
202
207
  } from "./chunk-CF7PE763.js";
@@ -747,7 +752,19 @@ var ai_locale_default = {
747
752
  chat: "Start Chat",
748
753
  public: "Public",
749
754
  byConversation: "Create AI by Conversation",
750
- manualConfiguration: "Manual Configuration"
755
+ manualConfiguration: "Manual Configuration",
756
+ quickCreate: {
757
+ reasoningEffort: "Reasoning Effort",
758
+ reasoningEffortOptions: {
759
+ none: "None",
760
+ minimal: "Minimal",
761
+ low: "Low",
762
+ medium: "Medium",
763
+ high: "High",
764
+ xhigh: "X-High",
765
+ max: "Max"
766
+ }
767
+ }
751
768
  },
752
769
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
753
770
  localCreate: {
@@ -852,7 +869,7 @@ var ai_locale_default = {
852
869
  frequencyPenalty: "Reduces word repetition, from -2 to 2. Higher discourages repetition.",
853
870
  presencePenalty: "Reduces topic repetition, from -2 to 2. Higher encourages new topics.",
854
871
  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."
872
+ 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
873
  },
857
874
  // Validation Messages
858
875
  validation: {
@@ -870,7 +887,7 @@ var ai_locale_default = {
870
887
  maxTokensMin: "Max Tokens must be at least 1",
871
888
  maxTokensMax: "Max Tokens must be at most 500,000",
872
889
  maxTokensRange: "Max Tokens must be between {{min}} and {{max}}",
873
- reasoningEffortInvalid: "Reasoning effort must be low, medium, or high",
890
+ reasoningEffortInvalid: "Reasoning effort must be none, minimal, low, medium, high, xhigh, or max",
874
891
  thinkingBudgetMin: "Thinking budget must be at least 1024 tokens",
875
892
  thinkingBudgetMax: "Thinking budget must be at most 100,000 tokens",
876
893
  apiKeyRequired: "API Key is required when not using Server Proxy, Ollama or Custom provider",
@@ -1124,7 +1141,19 @@ var ai_locale_default = {
1124
1141
  chat: "\u5F00\u59CB\u804A\u5929",
1125
1142
  public: "\u516C\u5F00",
1126
1143
  byConversation: "\u7528\u5BF9\u8BDD\u521B\u5EFA AI",
1127
- manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI"
1144
+ manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI",
1145
+ quickCreate: {
1146
+ reasoningEffort: "\u63A8\u7406\u5F3A\u5EA6",
1147
+ reasoningEffortOptions: {
1148
+ none: "\u5173\u95ED",
1149
+ minimal: "\u6781\u7B80",
1150
+ low: "\u4F4E",
1151
+ medium: "\u4E2D",
1152
+ high: "\u9AD8",
1153
+ xhigh: "\u8D85\u9AD8",
1154
+ max: "\u6700\u5927"
1155
+ }
1156
+ }
1128
1157
  },
1129
1158
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1130
1159
  localCreate: {
@@ -1228,7 +1257,7 @@ var ai_locale_default = {
1228
1257
  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
1258
  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
1259
  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"
1260
+ 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
1261
  },
1233
1262
  // 验证信息
1234
1263
  validation: {
@@ -1246,7 +1275,7 @@ var ai_locale_default = {
1246
1275
  maxTokensMin: "\u6700\u5927Token\u6570\u5FC5\u987B\u81F3\u5C11\u4E3A1",
1247
1276
  maxTokensMax: "\u6700\u5927Token\u6570\u4E0D\u80FD\u8D85\u8FC7500,000",
1248
1277
  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",
1278
+ reasoningEffortInvalid: "\u63A8\u7406\u5F3A\u5EA6\u5FC5\u987B\u662F none, minimal, low, medium, high, xhigh, \u6216 max",
1250
1279
  thinkingBudgetMin: "\u601D\u8003\u9884\u7B97\u81F3\u5C11\u9700\u8981 1024 \u4E2A Token",
1251
1280
  thinkingBudgetMax: "\u601D\u8003\u9884\u7B97\u4E0D\u80FD\u8D85\u8FC7 100,000 \u4E2A Token",
1252
1281
  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 +1530,19 @@ var ai_locale_default = {
1501
1530
  chat: "\u958B\u59CB\u804A\u5929",
1502
1531
  public: "\u516C\u958B",
1503
1532
  byConversation: "\u7528\u5C0D\u8A71\u5EFA\u7ACB AI",
1504
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI"
1533
+ manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI",
1534
+ quickCreate: {
1535
+ reasoningEffort: "\u63A8\u7406\u5F37\u5EA6",
1536
+ reasoningEffortOptions: {
1537
+ none: "\u95DC\u9589",
1538
+ minimal: "\u6975\u7C21",
1539
+ low: "\u4F4E",
1540
+ medium: "\u4E2D",
1541
+ high: "\u9AD8",
1542
+ xhigh: "\u8D85\u9AD8",
1543
+ max: "\u6700\u5927"
1544
+ }
1545
+ }
1505
1546
  },
1506
1547
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1507
1548
  localCreate: {
@@ -1605,7 +1646,7 @@ var ai_locale_default = {
1605
1646
  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
1647
  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
1648
  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"
1649
+ 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
1650
  },
1610
1651
  // 驗證資訊
1611
1652
  validation: {
@@ -1623,7 +1664,7 @@ var ai_locale_default = {
1623
1664
  maxTokensMin: "\u6700\u5927Token\u6578\u5FC5\u9808\u81F3\u5C11\u70BA1",
1624
1665
  maxTokensMax: "\u6700\u5927Token\u6578\u4E0D\u5F97\u8D85\u904E500,000",
1625
1666
  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",
1667
+ reasoningEffortInvalid: "\u63A8\u7406\u5F37\u5EA6\u5FC5\u9808\u662F none, minimal, low, medium, high, xhigh, \u6216 max",
1627
1668
  thinkingBudgetMin: "\u601D\u8003\u9810\u7B97\u81F3\u5C11\u9700\u8981 1024 \u500B Token",
1628
1669
  thinkingBudgetMax: "\u601D\u8003\u9810\u7B97\u4E0D\u80FD\u8D85\u904E 100,000 \u500B Token",
1629
1670
  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 +1841,19 @@ var ai_locale_default = {
1800
1841
  chat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u59CB",
1801
1842
  public: "\u516C\u958B",
1802
1843
  byConversation: "\u4F1A\u8A71\u3067 AI \u3092\u4F5C\u6210",
1803
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210"
1844
+ manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210",
1845
+ quickCreate: {
1846
+ reasoningEffort: "\u63A8\u8AD6\u5F37\u5EA6",
1847
+ reasoningEffortOptions: {
1848
+ none: "\u306A\u3057",
1849
+ minimal: "\u6700\u5C0F",
1850
+ low: "\u4F4E",
1851
+ medium: "\u4E2D",
1852
+ high: "\u9AD8",
1853
+ xhigh: "\u8D85\u9AD8",
1854
+ max: "\u6700\u5927"
1855
+ }
1856
+ }
1804
1857
  },
1805
1858
  // RN / local-first create sheet (useTranslation("ai") → localCreate.*)
1806
1859
  localCreate: {
@@ -1905,7 +1958,7 @@ var ai_locale_default = {
1905
1958
  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
1959
  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
1960
  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"
1961
+ 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
1962
  },
1910
1963
  // バリデーションメッセージ
1911
1964
  validation: {
@@ -1923,7 +1976,7 @@ var ai_locale_default = {
1923
1976
  maxTokensMin: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F1\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1924
1977
  maxTokensMax: "\u6700\u5927\u30C8\u30FC\u30AF\u30F3\u6570\u306F500,000\u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1925
1978
  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",
1979
+ 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
1980
  thinkingBudgetMin: "\u601D\u8003\u4E88\u7B97\u306F1024\u30C8\u30FC\u30AF\u30F3\u4EE5\u4E0A\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1928
1981
  thinkingBudgetMax: "\u601D\u8003\u4E88\u7B97\u306F100,000\u30C8\u30FC\u30AF\u30F3\u4EE5\u4E0B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059",
1929
1982
  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 +2131,9 @@ var chat_locale_default = {
2078
2131
  messageInput: "Message input field",
2079
2132
  messageInputArea: "Message input area with file upload",
2080
2133
  messageOrFileHere: "Type a message or upload a file...",
2134
+ pastedTextChip: "Pasted text #{{id}} \xB7 {{lines}} lines \xB7 {{size}}",
2135
+ removePastedText: "Remove pasted text",
2136
+ expandPastedText: "Expand pasted text into the input",
2081
2137
  Mode: "Mode",
2082
2138
  ModeUpdateFailed: "Failed to update mode",
2083
2139
  ModeUpdatedSuccess: "Mode updated successfully",
@@ -2185,6 +2241,7 @@ var chat_locale_default = {
2185
2241
  uploadFailed: "Upload failed",
2186
2242
  deleteMessageTitle: "Delete Message",
2187
2243
  delConfirm: "Delete this tool output?",
2244
+ delConfirmMessage: "Delete this message?",
2188
2245
  bash: {
2189
2246
  blockedTitle: "Dangerous Command Blocked",
2190
2247
  blockedDesc: "This command was detected as high-risk and was not executed. If necessary, please confirm the risk and continue.",
@@ -2208,6 +2265,32 @@ var chat_locale_default = {
2208
2265
  preflightRepairing: "Preflight found {{count}} issue(s), auto-repairing\u2026",
2209
2266
  moreSteps: "{{count}} more steps\u2026"
2210
2267
  },
2268
+ toolConfirm: {
2269
+ executing: "Executing\u2026",
2270
+ patchApplied: "Patch applied",
2271
+ executed: "Executed {{name}}",
2272
+ retryApplyPatch: "Retry applying patch",
2273
+ retryExec: "Retry {{name}}",
2274
+ confirmDeleteSpaces: "Confirm deleting these Spaces",
2275
+ applyPatchDanger: "Apply this patch (dangerous)",
2276
+ confirmExec: "Run {{name}} (confirmation required)",
2277
+ successPatch: "\u2705 Successfully applied patch to {{path}}.",
2278
+ successExec: "\u2705 Successfully executed {{name}}.",
2279
+ failure: "\u274C Execution failed: {{error}}",
2280
+ unknownError: "Unknown error",
2281
+ confirmDelete: "Confirm deleting {{entity}}",
2282
+ confirmExecGate: "Confirm running {{name}}",
2283
+ fallbackDialogs: "Matching dialogs",
2284
+ fallbackSpaces: "Matching spaces",
2285
+ failureDialogs: "Failed to delete dialogs",
2286
+ failureSpaces: "Failed to delete spaces",
2287
+ executedDialogs: "deleteDialogs executed",
2288
+ executedSpaces: "deleteSpaces executed",
2289
+ entityDialog: "dialog",
2290
+ entitySpace: "space",
2291
+ deleteLabelMultiple: "{{title}} and {{count}} more {{entity}}",
2292
+ fallbackMatched: "Matches"
2293
+ },
2211
2294
  toolNames: {
2212
2295
  tool: "Tool",
2213
2296
  exa_search: "Search",
@@ -2409,6 +2492,9 @@ var chat_locale_default = {
2409
2492
  messageInput: "\u6D88\u606F\u8F93\u5165\u6846",
2410
2493
  messageInputArea: "\u6D88\u606F\u8F93\u5165\u533A\uFF0C\u652F\u6301\u6587\u4EF6\u4E0A\u4F20",
2411
2494
  messageOrFileHere: "\u8F93\u5165\u6D88\u606F\u6216\u4E0A\u4F20\u6587\u4EF6...",
2495
+ pastedTextChip: "\u5DF2\u7C98\u8D34\u6587\u672C #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
2496
+ removePastedText: "\u79FB\u9664\u7C98\u8D34\u6587\u672C",
2497
+ expandPastedText: "\u5C55\u5F00\u7C98\u8D34\u6587\u672C\u5230\u8F93\u5165\u6846",
2412
2498
  Mode: "\u6A21\u5F0F",
2413
2499
  ModeUpdateFailed: "\u6A21\u5F0F\u66F4\u65B0\u5931\u8D25",
2414
2500
  ModeUpdatedSuccess: "\u6A21\u5F0F\u66F4\u65B0\u6210\u529F",
@@ -2510,6 +2596,7 @@ var chat_locale_default = {
2510
2596
  answerContent: "\u56DE\u7B54",
2511
2597
  deleteMessageTitle: "\u5220\u9664\u6D88\u606F",
2512
2598
  delConfirm: "\u5220\u9664\u6B64\u5DE5\u5177\u8F93\u51FA\uFF1F",
2599
+ delConfirmMessage: "\u5220\u9664\u6B64\u6D88\u606F\uFF1F",
2513
2600
  bash: {
2514
2601
  blockedTitle: "\u5371\u9669\u547D\u4EE4\u5DF2\u88AB\u62E6\u622A",
2515
2602
  blockedDesc: "\u8BE5\u547D\u4EE4\u88AB\u68C0\u6D4B\u4E3A\u9AD8\u5371\u64CD\u4F5C\uFF0C\u9ED8\u8BA4\u672A\u6267\u884C\u3002\u5982\u786E\u6709\u5FC5\u8981\uFF0C\u8BF7\u786E\u8BA4\u98CE\u9669\u540E\u7EE7\u7EED\u3002",
@@ -2533,6 +2620,33 @@ var chat_locale_default = {
2533
2620
  preflightRepairing: "\u9884\u68C0\u53D1\u73B0 {{count}} \u4E2A\u95EE\u9898\uFF0C\u6B63\u5728\u81EA\u52A8\u4FEE\u590D\u2026",
2534
2621
  moreSteps: "\u8FD8\u6709 {{count}} \u6B65\u2026"
2535
2622
  },
2623
+ toolConfirm: {
2624
+ executing: "\u6B63\u5728\u6267\u884C\u2026",
2625
+ patchApplied: "\u8865\u4E01\u5DF2\u5E94\u7528",
2626
+ executed: "\u5DF2\u6267\u884C {{name}}",
2627
+ retryApplyPatch: "\u91CD\u8BD5\u5E94\u7528\u8865\u4E01",
2628
+ retryExec: "\u91CD\u8BD5\u6267\u884C {{name}}",
2629
+ confirmDeleteSpaces: "\u786E\u8BA4\u5220\u9664\u8FD9\u4E9B Space",
2630
+ applyPatchDanger: "\u5E94\u7528\u8FD9\u4E2A\u8865\u4E01\uFF08\u5371\u9669\u64CD\u4F5C\uFF09",
2631
+ confirmExec: "\u6267\u884C {{name}}\uFF08\u9700\u8981\u786E\u8BA4\uFF09",
2632
+ successPatch: "\u2705 \u5DF2\u6210\u529F\u5C06\u8865\u4E01\u5E94\u7528\u5230 {{path}}\u3002",
2633
+ successExec: "\u2705 \u5DF2\u6210\u529F\u6267\u884C {{name}}\u3002",
2634
+ failure: "\u274C \u6267\u884C\u5931\u8D25\uFF1A{{error}}",
2635
+ unknownError: "\u672A\u77E5\u9519\u8BEF",
2636
+ confirmDelete: "\u786E\u8BA4\u5220\u9664{{entity}}",
2637
+ confirmExecGate: "\u786E\u8BA4\u6267\u884C {{name}}",
2638
+ fallbackDialogs: "\u5339\u914D\u7684\u5BF9\u8BDD",
2639
+ fallbackSpaces: "\u5339\u914D\u7684\u7A7A\u95F4",
2640
+ failureDialogs: "\u5220\u9664\u5BF9\u8BDD\u6267\u884C\u5931\u8D25",
2641
+ failureSpaces: "\u5220\u9664\u7A7A\u95F4\u6267\u884C\u5931\u8D25",
2642
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符(zh/zh-Hant/ja 同)
2643
+ executedDialogs: "deleteDialogs executed",
2644
+ executedSpaces: "deleteSpaces executed",
2645
+ entityDialog: "\u5BF9\u8BDD",
2646
+ entitySpace: "\u7A7A\u95F4",
2647
+ deleteLabelMultiple: "{{title}} \u7B49 {{count}} \u4E2A{{entity}}",
2648
+ fallbackMatched: "\u5339\u914D\u9879"
2649
+ },
2536
2650
  toolNames: {
2537
2651
  tool: "\u5DE5\u5177",
2538
2652
  exa_search: "\u641C\u7D22",
@@ -2734,6 +2848,9 @@ var chat_locale_default = {
2734
2848
  messageInput: "\u8A0A\u606F\u8F38\u5165\u6846",
2735
2849
  messageInputArea: "\u8A0A\u606F\u8F38\u5165\u5340\uFF0C\u652F\u6301\u6A94\u6848\u4E0A\u50B3",
2736
2850
  messageOrFileHere: "\u8F38\u5165\u8A0A\u606F\u6216\u4E0A\u50B3\u6A94\u6848...",
2851
+ pastedTextChip: "\u5DF2\u8CBC\u4E0A\u6587\u5B57 #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
2852
+ removePastedText: "\u79FB\u9664\u8CBC\u4E0A\u6587\u5B57",
2853
+ expandPastedText: "\u5C55\u958B\u8CBC\u4E0A\u6587\u5B57\u5230\u8F38\u5165\u6846",
2737
2854
  Mode: "\u6A21\u5F0F",
2738
2855
  ModeUpdateFailed: "\u6A21\u5F0F\u66F4\u65B0\u5931\u6557",
2739
2856
  ModeUpdatedSuccess: "\u6A21\u5F0F\u66F4\u65B0\u6210\u529F",
@@ -2825,6 +2942,7 @@ var chat_locale_default = {
2825
2942
  answerContent: "\u56DE\u7B54",
2826
2943
  deleteMessageTitle: "\u522A\u9664\u8A0A\u606F",
2827
2944
  delConfirm: "\u522A\u9664\u6B64\u5DE5\u5177\u8F38\u51FA\uFF1F",
2945
+ delConfirmMessage: "\u522A\u9664\u6B64\u8A0A\u606F\uFF1F",
2828
2946
  bash: {
2829
2947
  blockedTitle: "\u5371\u96AA\u547D\u4EE4\u5DF2\u88AB\u6514\u622A",
2830
2948
  blockedDesc: "\u8A72\u547D\u4EE4\u88AB\u6AA2\u6E2C\u70BA\u9AD8\u5371\u64CD\u4F5C\uFF0C\u9810\u8A2D\u672A\u57F7\u884C\u3002\u5982\u78BA\u6709\u5FC5\u8981\uFF0C\u8ACB\u78BA\u8A8D\u98A8\u96AA\u5F8C\u7E7C\u7E8C\u3002",
@@ -2848,6 +2966,33 @@ var chat_locale_default = {
2848
2966
  preflightRepairing: "\u9810\u6AA2\u767C\u73FE {{count}} \u500B\u554F\u984C\uFF0C\u6B63\u5728\u81EA\u52D5\u4FEE\u5FA9\u2026",
2849
2967
  moreSteps: "\u9084\u6709 {{count}} \u6B65\u2026"
2850
2968
  },
2969
+ toolConfirm: {
2970
+ executing: "\u6B63\u5728\u57F7\u884C\u2026",
2971
+ patchApplied: "\u4FEE\u88DC\u5DF2\u5957\u7528",
2972
+ executed: "\u5DF2\u57F7\u884C {{name}}",
2973
+ retryApplyPatch: "\u91CD\u8A66\u5957\u7528\u4FEE\u88DC",
2974
+ retryExec: "\u91CD\u8A66\u57F7\u884C {{name}}",
2975
+ confirmDeleteSpaces: "\u78BA\u8A8D\u522A\u9664\u9019\u4E9B Space",
2976
+ applyPatchDanger: "\u5957\u7528\u9019\u500B\u4FEE\u88DC\uFF08\u5371\u96AA\u64CD\u4F5C\uFF09",
2977
+ confirmExec: "\u57F7\u884C {{name}}\uFF08\u9700\u8981\u78BA\u8A8D\uFF09",
2978
+ successPatch: "\u2705 \u5DF2\u6210\u529F\u5C07\u4FEE\u88DC\u5957\u7528\u5230 {{path}}\u3002",
2979
+ successExec: "\u2705 \u5DF2\u6210\u529F\u57F7\u884C {{name}}\u3002",
2980
+ failure: "\u274C \u57F7\u884C\u5931\u6557\uFF1A{{error}}",
2981
+ unknownError: "\u672A\u77E5\u932F\u8AA4",
2982
+ confirmDelete: "\u78BA\u8A8D\u522A\u9664{{entity}}",
2983
+ confirmExecGate: "\u78BA\u8A8D\u57F7\u884C {{name}}",
2984
+ fallbackDialogs: "\u7B26\u5408\u7684\u5C0D\u8A71",
2985
+ fallbackSpaces: "\u7B26\u5408\u7684\u7A7A\u9593",
2986
+ failureDialogs: "\u522A\u9664\u5C0D\u8A71\u57F7\u884C\u5931\u6557",
2987
+ failureSpaces: "\u522A\u9664\u7A7A\u9593\u57F7\u884C\u5931\u6557",
2988
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符
2989
+ executedDialogs: "deleteDialogs executed",
2990
+ executedSpaces: "deleteSpaces executed",
2991
+ entityDialog: "\u5C0D\u8A71",
2992
+ entitySpace: "\u7A7A\u9593",
2993
+ deleteLabelMultiple: "{{title}} \u7B49 {{count}} \u500B{{entity}}",
2994
+ fallbackMatched: "\u7B26\u5408\u9805"
2995
+ },
2851
2996
  toolNames: {
2852
2997
  tool: "\u5DE5\u5177",
2853
2998
  exa_search: "\u641C\u5C0B",
@@ -2987,6 +3132,9 @@ var chat_locale_default = {
2987
3132
  messageInput: "\u30E1\u30C3\u30BB\u30FC\u30B8\u5165\u529B\u6B04",
2988
3133
  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
3134
  messageOrFileHere: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u307E\u305F\u306F\u30D5\u30A1\u30A4\u30EB\u3092\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9...",
3135
+ pastedTextChip: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8 #{{id}} \xB7 {{lines}} \u884C \xB7 {{size}}",
3136
+ removePastedText: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8\u3092\u524A\u9664",
3137
+ expandPastedText: "\u8CBC\u308A\u4ED8\u3051\u30C6\u30AD\u30B9\u30C8\u3092\u5165\u529B\u6B04\u306B\u5C55\u958B",
2990
3138
  Mode: "\u30E2\u30FC\u30C9",
2991
3139
  ModeUpdateFailed: "\u30E2\u30FC\u30C9\u306E\u66F4\u65B0\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
2992
3140
  ModeUpdatedSuccess: "\u30E2\u30FC\u30C9\u3092\u66F4\u65B0\u3057\u307E\u3057\u305F",
@@ -3084,6 +3232,7 @@ var chat_locale_default = {
3084
3232
  uploadFailed: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u5931\u6557",
3085
3233
  deleteMessageTitle: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u524A\u9664",
3086
3234
  delConfirm: "\u3053\u306E\u5DE5\u5177\u306E\u51FA\u529B\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F",
3235
+ delConfirmMessage: "\u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u524A\u9664\u3057\u307E\u3059\u304B\uFF1F",
3087
3236
  bash: {
3088
3237
  blockedTitle: "\u5371\u967A\u306A\u30B3\u30DE\u30F3\u30C9\u3092\u30D6\u30ED\u30C3\u30AF\u3057\u307E\u3057\u305F",
3089
3238
  blockedDesc: "\u3053\u306E\u30B3\u30DE\u30F3\u30C9\u306F\u9AD8\u30EA\u30B9\u30AF\u3068\u3057\u3066\u691C\u51FA\u3055\u308C\u3001\u5B9F\u884C\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u5FC5\u8981\u306B\u5FDC\u3058\u3066\u30EA\u30B9\u30AF\u3092\u78BA\u8A8D\u3057\u3001\u7D9A\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
@@ -3107,6 +3256,33 @@ var chat_locale_default = {
3107
3256
  preflightRepairing: "\u30D7\u30EA\u30D5\u30E9\u30A4\u30C8\u3067 {{count}} \u4EF6\u306E\u554F\u984C\u3092\u691C\u51FA\u3001\u81EA\u52D5\u4FEE\u5FA9\u4E2D\u2026",
3108
3257
  moreSteps: "\u4ED6 {{count}} \u30B9\u30C6\u30C3\u30D7\u2026"
3109
3258
  },
3259
+ toolConfirm: {
3260
+ executing: "\u5B9F\u884C\u4E2D\u2026",
3261
+ patchApplied: "\u30D1\u30C3\u30C1\u3092\u9069\u7528\u3057\u307E\u3057\u305F",
3262
+ executed: "{{name}} \u3092\u5B9F\u884C\u3057\u307E\u3057\u305F",
3263
+ retryApplyPatch: "\u30D1\u30C3\u30C1\u9069\u7528\u3092\u518D\u8A66\u884C",
3264
+ retryExec: "{{name}} \u306E\u5B9F\u884C\u3092\u518D\u8A66\u884C",
3265
+ confirmDeleteSpaces: "\u3053\u308C\u3089\u306E Space \u3092\u524A\u9664\u3057\u307E\u3059\u304B",
3266
+ applyPatchDanger: "\u3053\u306E\u30D1\u30C3\u30C1\u3092\u9069\u7528\uFF08\u5371\u967A\u306A\u64CD\u4F5C\uFF09",
3267
+ confirmExec: "{{name}} \u3092\u5B9F\u884C\uFF08\u78BA\u8A8D\u304C\u5FC5\u8981\uFF09",
3268
+ successPatch: "\u2705 \u30D1\u30C3\u30C1\u3092 {{path}} \u306B\u9069\u7528\u3057\u307E\u3057\u305F\u3002",
3269
+ successExec: "\u2705 {{name}} \u3092\u5B9F\u884C\u3057\u307E\u3057\u305F\u3002",
3270
+ failure: "\u274C \u5B9F\u884C\u5931\u6557\uFF1A{{error}}",
3271
+ unknownError: "\u4E0D\u660E\u306A\u30A8\u30E9\u30FC",
3272
+ confirmDelete: "{{entity}}\u306E\u524A\u9664\u3092\u78BA\u8A8D",
3273
+ confirmExecGate: "{{name}} \u306E\u5B9F\u884C\u3092\u78BA\u8A8D",
3274
+ fallbackDialogs: "\u4E00\u81F4\u3059\u308B\u5BFE\u8A71",
3275
+ fallbackSpaces: "\u4E00\u81F4\u3059\u308B\u30B9\u30DA\u30FC\u30B9",
3276
+ failureDialogs: "\u5BFE\u8A71\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3277
+ failureSpaces: "\u30B9\u30DA\u30FC\u30B9\u306E\u524A\u9664\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3278
+ // executedSummary 仅写入 toolMessage 内部记录,不直接展示给用户,故保留英文标识符
3279
+ executedDialogs: "deleteDialogs executed",
3280
+ executedSpaces: "deleteSpaces executed",
3281
+ entityDialog: "\u5BFE\u8A71",
3282
+ entitySpace: "\u30B9\u30DA\u30FC\u30B9",
3283
+ deleteLabelMultiple: "{{title}} \u306A\u3069 {{count}} \u4EF6\u306E{{entity}}",
3284
+ fallbackMatched: "\u4E00\u81F4\u9805\u76EE"
3285
+ },
3110
3286
  toolNames: {
3111
3287
  tool: "\u30C4\u30FC\u30EB",
3112
3288
  exa_search: "\u691C\u7D22",
@@ -3239,6 +3415,7 @@ var space_locale_default = {
3239
3415
  select_space: "Select Space",
3240
3416
  no_spaces: "No spaces available",
3241
3417
  no_spaces_yet: "No spaces created yet",
3418
+ space_list_failed: "Failed to load spaces \u2014 tap to retry",
3242
3419
  space_list: "Space List",
3243
3420
  space_dropdown: "Open space menu",
3244
3421
  current_space: "Current Space",
@@ -3255,12 +3432,6 @@ var space_locale_default = {
3255
3432
  discard_changes: "Discard Changes",
3256
3433
  load_error_title: "Failed to Load Space Information",
3257
3434
  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
3435
  try_later: "Please try again later",
3265
3436
  // === 基本信息 ===
3266
3437
  basic_info: "Basic Information",
@@ -3554,6 +3725,7 @@ var space_locale_default = {
3554
3725
  select_space: "\u9009\u62E9\u7A7A\u95F4",
3555
3726
  no_spaces: "\u6682\u65E0\u7A7A\u95F4",
3556
3727
  no_spaces_yet: "\u5C1A\u672A\u521B\u5EFA\u4EFB\u4F55\u7A7A\u95F4",
3728
+ space_list_failed: "\u7A7A\u95F4\u5217\u8868\u52A0\u8F7D\u5931\u8D25\uFF0C\u70B9\u51FB\u91CD\u8BD5",
3557
3729
  space_list: "\u7A7A\u95F4\u5217\u8868",
3558
3730
  space_dropdown: "\u6253\u5F00\u7A7A\u95F4\u83DC\u5355",
3559
3731
  current_space: "\u5F53\u524D\u7A7A\u95F4",
@@ -3570,12 +3742,6 @@ var space_locale_default = {
3570
3742
  discard_changes: "\u653E\u5F03\u66F4\u6539",
3571
3743
  load_error_title: "\u52A0\u8F7D\u7A7A\u95F4\u4FE1\u606F\u5931\u8D25",
3572
3744
  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
3745
  try_later: "\u8BF7\u7A0D\u540E\u91CD\u8BD5",
3580
3746
  // === 基本信息 ===
3581
3747
  basic_info: "\u57FA\u672C\u4FE1\u606F",
@@ -3868,6 +4034,7 @@ var space_locale_default = {
3868
4034
  select_space: "\u9078\u64C7\u7A7A\u9593",
3869
4035
  no_spaces: "\u66AB\u7121\u7A7A\u9593",
3870
4036
  no_spaces_yet: "\u5C1A\u672A\u5275\u5EFA\u4EFB\u4F55\u7A7A\u9593",
4037
+ space_list_failed: "\u7A7A\u9593\u6E05\u55AE\u8F09\u5165\u5931\u6557\uFF0C\u9EDE\u64CA\u91CD\u8A66",
3871
4038
  space_list: "\u7A7A\u9593\u6E05\u55AE",
3872
4039
  space_dropdown: "\u958B\u555F\u7A7A\u9593\u9078\u55AE",
3873
4040
  current_space: "\u76EE\u524D\u7A7A\u9593",
@@ -3884,12 +4051,6 @@ var space_locale_default = {
3884
4051
  discard_changes: "\u653E\u68C4\u8B8A\u66F4",
3885
4052
  load_error_title: "\u8F09\u5165\u7A7A\u9593\u8CC7\u8A0A\u5931\u6557",
3886
4053
  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
4054
  try_later: "\u8ACB\u7A0D\u5F8C\u91CD\u8A66",
3894
4055
  // === 基本信息 ===
3895
4056
  basic_info: "\u57FA\u672C\u8CC7\u8A0A",
@@ -4191,12 +4352,6 @@ var space_locale_default = {
4191
4352
  discard_changes: "\u5909\u66F4\u3092\u7834\u68C4",
4192
4353
  load_error_title: "\u30B9\u30DA\u30FC\u30B9\u60C5\u5831\u306E\u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
4193
4354
  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
4355
  try_later: "\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u518D\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044",
4201
4356
  // === 基本情報 ===
4202
4357
  basic_info: "\u57FA\u672C\u60C5\u5831",
@@ -4522,6 +4677,40 @@ var interface_locale_default = {
4522
4677
  machines: "Machines",
4523
4678
  updates: "Updates"
4524
4679
  },
4680
+ updates: {
4681
+ title: "Client updates",
4682
+ desktopOnly: "This page is only available in the desktop client.",
4683
+ overview: {
4684
+ title: "Version status",
4685
+ description: "New versions are detected automatically on launch. You can also check, download, and install updates manually here."
4686
+ },
4687
+ currentHash: "Current build",
4688
+ latestHash: "Latest build",
4689
+ idle: "Waiting to check for updates",
4690
+ checkNow: "Check for updates",
4691
+ noAction: "No update available right now",
4692
+ failed: "Check failed",
4693
+ timeline: {
4694
+ title: "Update log",
4695
+ description: "Shows the most recent check or download events so you can confirm which stage the client is in.",
4696
+ empty: "No update events yet."
4697
+ },
4698
+ phase: {
4699
+ not_checked: "Not checked yet",
4700
+ checking: "Checking",
4701
+ update_available: "New version available",
4702
+ downloading: "Downloading",
4703
+ ready_to_install: "Ready to install",
4704
+ applying: "Installing",
4705
+ up_to_date: "Up to date",
4706
+ invalid_remote: "Remote metadata is invalid",
4707
+ error: "Check failed"
4708
+ },
4709
+ action: {
4710
+ download: "Download update",
4711
+ apply: "Restart and install"
4712
+ }
4713
+ },
4525
4714
  developer: {
4526
4715
  title: "Developer",
4527
4716
  developerMode: {
@@ -5768,6 +5957,40 @@ var interface_locale_default = {
5768
5957
  machines: "\u7535\u8111",
5769
5958
  updates: "\u66F4\u65B0"
5770
5959
  },
5960
+ updates: {
5961
+ title: "\u5BA2\u6237\u7AEF\u66F4\u65B0",
5962
+ desktopOnly: "\u6B64\u9875\u9762\u4EC5\u5728\u684C\u9762\u5BA2\u6237\u7AEF\u4E2D\u53EF\u7528\u3002",
5963
+ overview: {
5964
+ title: "\u7248\u672C\u72B6\u6001",
5965
+ description: "\u542F\u52A8\u65F6\u4F1A\u81EA\u52A8\u68C0\u6D4B\u65B0\u7248\u672C\u3002\u4F60\u4E5F\u53EF\u4EE5\u5728\u6B64\u624B\u52A8\u68C0\u67E5\u3001\u4E0B\u8F7D\u548C\u5B89\u88C5\u66F4\u65B0\u3002"
5966
+ },
5967
+ currentHash: "\u5F53\u524D\u6784\u5EFA",
5968
+ latestHash: "\u6700\u65B0\u6784\u5EFA",
5969
+ idle: "\u7B49\u5F85\u68C0\u67E5\u66F4\u65B0",
5970
+ checkNow: "\u68C0\u67E5\u66F4\u65B0",
5971
+ noAction: "\u6682\u65E0\u53EF\u7528\u66F4\u65B0",
5972
+ failed: "\u68C0\u67E5\u5931\u8D25",
5973
+ timeline: {
5974
+ title: "\u66F4\u65B0\u65E5\u5FD7",
5975
+ description: "\u663E\u793A\u6700\u8FD1\u7684\u68C0\u67E5\u6216\u4E0B\u8F7D\u4E8B\u4EF6\uFF0C\u4EE5\u4FBF\u4F60\u786E\u8BA4\u5BA2\u6237\u7AEF\u5904\u4E8E\u54EA\u4E2A\u9636\u6BB5\u3002",
5976
+ empty: "\u6682\u65E0\u66F4\u65B0\u4E8B\u4EF6\u3002"
5977
+ },
5978
+ phase: {
5979
+ not_checked: "\u672A\u68C0\u67E5",
5980
+ checking: "\u68C0\u67E5\u4E2D",
5981
+ update_available: "\u53D1\u73B0\u65B0\u7248\u672C",
5982
+ downloading: "\u4E0B\u8F7D\u4E2D",
5983
+ ready_to_install: "\u51C6\u5907\u5B89\u88C5",
5984
+ applying: "\u5B89\u88C5\u4E2D",
5985
+ up_to_date: "\u5DF2\u662F\u6700\u65B0\u7248\u672C",
5986
+ invalid_remote: "\u8FDC\u7AEF\u5143\u6570\u636E\u65E0\u6548",
5987
+ error: "\u68C0\u67E5\u5931\u8D25"
5988
+ },
5989
+ action: {
5990
+ download: "\u4E0B\u8F7D\u66F4\u65B0",
5991
+ apply: "\u91CD\u542F\u5E76\u5B89\u88C5"
5992
+ }
5993
+ },
5771
5994
  developer: {
5772
5995
  title: "\u5F00\u53D1\u8005",
5773
5996
  developerMode: {
@@ -6958,6 +7181,40 @@ var interface_locale_default = {
6958
7181
  machines: "\u96FB\u8166",
6959
7182
  updates: "\u66F4\u65B0"
6960
7183
  },
7184
+ updates: {
7185
+ title: "\u5BA2\u6236\u7AEF\u66F4\u65B0",
7186
+ desktopOnly: "\u6B64\u9801\u9762\u50C5\u5728\u684C\u9762\u5BA2\u6236\u7AEF\u4E2D\u53EF\u7528\u3002",
7187
+ overview: {
7188
+ title: "\u7248\u672C\u72C0\u614B",
7189
+ description: "\u555F\u52D5\u6642\u6703\u81EA\u52D5\u6AA2\u6E2C\u65B0\u7248\u672C\u3002\u4F60\u4E5F\u53EF\u4EE5\u5728\u6B64\u624B\u52D5\u6AA2\u67E5\u3001\u4E0B\u8F09\u548C\u5B89\u88DD\u66F4\u65B0\u3002"
7190
+ },
7191
+ currentHash: "\u7576\u524D\u5EFA\u7F6E",
7192
+ latestHash: "\u6700\u65B0\u5EFA\u7F6E",
7193
+ idle: "\u7B49\u5F85\u6AA2\u67E5\u66F4\u65B0",
7194
+ checkNow: "\u6AA2\u67E5\u66F4\u65B0",
7195
+ noAction: "\u66AB\u7121\u53EF\u7528\u66F4\u65B0",
7196
+ failed: "\u6AA2\u67E5\u5931\u6557",
7197
+ timeline: {
7198
+ title: "\u66F4\u65B0\u65E5\u8A8C",
7199
+ description: "\u986F\u793A\u6700\u8FD1\u7684\u6AA2\u67E5\u6216\u4E0B\u8F09\u4E8B\u4EF6\uFF0C\u4EE5\u4FBF\u4F60\u78BA\u8A8D\u5BA2\u6236\u7AEF\u8655\u65BC\u54EA\u500B\u968E\u6BB5\u3002",
7200
+ empty: "\u66AB\u7121\u66F4\u65B0\u4E8B\u4EF6\u3002"
7201
+ },
7202
+ phase: {
7203
+ not_checked: "\u672A\u6AA2\u67E5",
7204
+ checking: "\u6AA2\u67E5\u4E2D",
7205
+ update_available: "\u767C\u73FE\u65B0\u7248\u672C",
7206
+ downloading: "\u4E0B\u8F09\u4E2D",
7207
+ ready_to_install: "\u6E96\u5099\u5B89\u88DD",
7208
+ applying: "\u5B89\u88DD\u4E2D",
7209
+ up_to_date: "\u5DF2\u662F\u6700\u65B0\u7248\u672C",
7210
+ invalid_remote: "\u9060\u7AEF\u5143\u8CC7\u6599\u7121\u6548",
7211
+ error: "\u6AA2\u67E5\u5931\u6557"
7212
+ },
7213
+ action: {
7214
+ download: "\u4E0B\u8F09\u66F4\u65B0",
7215
+ apply: "\u91CD\u555F\u4E26\u5B89\u88DD"
7216
+ }
7217
+ },
6961
7218
  developer: {
6962
7219
  title: "\u958B\u767C\u8005",
6963
7220
  developerMode: {
@@ -8074,6 +8331,40 @@ var interface_locale_default = {
8074
8331
  machines: "\u30DE\u30B7\u30F3",
8075
8332
  updates: "\u66F4\u65B0"
8076
8333
  },
8334
+ updates: {
8335
+ title: "\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u306E\u66F4\u65B0",
8336
+ desktopOnly: "\u3053\u306E\u30DA\u30FC\u30B8\u306F\u30C7\u30B9\u30AF\u30C8\u30C3\u30D7\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u3067\u306E\u307F\u5229\u7528\u3067\u304D\u307E\u3059\u3002",
8337
+ overview: {
8338
+ title: "\u30D0\u30FC\u30B8\u30E7\u30F3\u72B6\u614B",
8339
+ description: "\u8D77\u52D5\u6642\u306B\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u81EA\u52D5\u691C\u51FA\u3055\u308C\u307E\u3059\u3002\u3053\u3053\u304B\u3089\u624B\u52D5\u3067\u78BA\u8A8D\u3001\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3001\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\u3053\u3068\u3082\u3067\u304D\u307E\u3059\u3002"
8340
+ },
8341
+ currentHash: "\u73FE\u5728\u306E\u30D3\u30EB\u30C9",
8342
+ latestHash: "\u6700\u65B0\u306E\u30D3\u30EB\u30C9",
8343
+ idle: "\u66F4\u65B0\u78BA\u8A8D\u3092\u5F85\u6A5F\u4E2D",
8344
+ checkNow: "\u66F4\u65B0\u3092\u78BA\u8A8D",
8345
+ noAction: "\u73FE\u5728\u5229\u7528\u53EF\u80FD\u306A\u66F4\u65B0\u306F\u3042\u308A\u307E\u305B\u3093",
8346
+ failed: "\u78BA\u8A8D\u5931\u6557",
8347
+ timeline: {
8348
+ title: "\u66F4\u65B0\u30ED\u30B0",
8349
+ description: "\u6700\u8FD1\u306E\u78BA\u8A8D\u307E\u305F\u306F\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u30A4\u30D9\u30F3\u30C8\u3092\u8868\u793A\u3057\u3001\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u306E\u30B9\u30C6\u30FC\u30B8\u3092\u78BA\u8A8D\u3067\u304D\u307E\u3059\u3002",
8350
+ empty: "\u66F4\u65B0\u30A4\u30D9\u30F3\u30C8\u306F\u307E\u3060\u3042\u308A\u307E\u305B\u3093\u3002"
8351
+ },
8352
+ phase: {
8353
+ not_checked: "\u672A\u78BA\u8A8D",
8354
+ checking: "\u78BA\u8A8D\u4E2D",
8355
+ update_available: "\u65B0\u3057\u3044\u30D0\u30FC\u30B8\u30E7\u30F3\u304C\u5229\u7528\u53EF\u80FD",
8356
+ downloading: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u4E2D",
8357
+ ready_to_install: "\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u6E96\u5099\u5B8C\u4E86",
8358
+ applying: "\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u4E2D",
8359
+ up_to_date: "\u6700\u65B0\u72B6\u614B",
8360
+ invalid_remote: "\u30EA\u30E2\u30FC\u30C8\u30E1\u30BF\u30C7\u30FC\u30BF\u304C\u7121\u52B9\u3067\u3059",
8361
+ error: "\u78BA\u8A8D\u5931\u6557"
8362
+ },
8363
+ action: {
8364
+ download: "\u66F4\u65B0\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
8365
+ apply: "\u518D\u8D77\u52D5\u3057\u3066\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB"
8366
+ }
8367
+ },
8077
8368
  developer: {
8078
8369
  title: "\u958B\u767A\u8005",
8079
8370
  developerMode: {
@@ -11080,6 +11371,20 @@ function expandEnabledPacks(enabledPacks, explicitTools = []) {
11080
11371
  const packTools = (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.tools ?? []).flat();
11081
11372
  return [.../* @__PURE__ */ new Set([...packTools, ...explicitTools ?? []])];
11082
11373
  }
11374
+ function expandEnabledPackPromptPatches(enabledPacks) {
11375
+ return (enabledPacks ?? []).map((id) => CAPABILITY_PACK_BY_ID[id]?.promptPatch).filter((patch2) => typeof patch2 === "string" && patch2.length > 0);
11376
+ }
11377
+ function appendEnabledPackPromptPatches(prompt, enabledPacks) {
11378
+ const patches = expandEnabledPackPromptPatches(enabledPacks);
11379
+ if (patches.length === 0) return prompt ?? void 0;
11380
+ const base = typeof prompt === "string" ? prompt.trim() : "";
11381
+ const addition = patches.join("\n\n");
11382
+ if (!base) return addition;
11383
+ if (base.includes(addition)) return base;
11384
+ return `${base}
11385
+
11386
+ ${addition}`;
11387
+ }
11083
11388
  var FORCED_TOOLS = ["ui_ask_choice"];
11084
11389
  function applyDisabledTools(toolNames, disabledTools) {
11085
11390
  if (!Array.isArray(disabledTools) || disabledTools.length === 0) {
@@ -11128,7 +11433,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11128
11433
  workspace: { mode: "lease" }
11129
11434
  };
11130
11435
  var findModelConfig = async (modelName, provider) => {
11131
- const { ALL_MODELS } = await import("./models-4OPOOLFS.js");
11436
+ const { ALL_MODELS } = await import("./models-LSCRJJ6P.js");
11132
11437
  const name = toTrimmedString(modelName);
11133
11438
  const prov = toTrimmedString(provider ?? "");
11134
11439
  if (!name) return null;
@@ -11369,7 +11674,7 @@ var buildFormDataFromArgs = async (args) => {
11369
11674
  const trimmedModel = toTrimmedString(model);
11370
11675
  const trimmedProvider = toTrimmedString(provider);
11371
11676
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
11372
- const { getModelPricing } = await import("./getPricing-3E6UNPKL.js");
11677
+ const { getModelPricing } = await import("./getPricing-UGDJHI7M.js");
11373
11678
  const normalizedTools = tools ?? [];
11374
11679
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
11375
11680
  const formData = {
@@ -13799,7 +14104,7 @@ async function deleteDialogsFunc(args, thunkApi) {
13799
14104
  const deletedDialogIds = [];
13800
14105
  const deletedDialogKeys = [];
13801
14106
  const failures = [];
13802
- const { deleteDialog } = await import("./dialogSlice-OWROKURJ.js");
14107
+ const { deleteDialog } = await import("./dialogSlice-35LA3ZRG.js");
13803
14108
  for (const target of targets) {
13804
14109
  try {
13805
14110
  await thunkApi.dispatch(deleteDialog(target.dbKey)).unwrap();
@@ -13824,9 +14129,60 @@ async function deleteDialogsFunc(args, thunkApi) {
13824
14129
  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
14130
  };
13826
14131
  }
14132
+ async function fetchUserFavoriteAgentMap(thunkApi) {
14133
+ const runtime = getRuntime2(thunkApi);
14134
+ if (!runtime?.currentServer || !runtime?.currentToken) return {};
14135
+ try {
14136
+ const serverBase = normalizeServerOrigin(runtime.currentServer);
14137
+ if (!serverBase) return {};
14138
+ const response = await fetch(`${serverBase}/rpc/listFavorites`, {
14139
+ method: "POST",
14140
+ headers: {
14141
+ "Content-Type": "application/json",
14142
+ ...authHeaders2(runtime.currentToken)
14143
+ },
14144
+ body: JSON.stringify({ targetType: "agent" })
14145
+ }).catch(() => null);
14146
+ if (!response || !response.ok) return {};
14147
+ const data = await response.json().catch(() => ({}));
14148
+ const favoritedAtByKey = {};
14149
+ const items = Array.isArray(data?.items) ? data.items : [];
14150
+ for (const item of items) {
14151
+ const id = typeof item?.id === "string" ? item.id : "";
14152
+ if (!id) continue;
14153
+ const at = Number(item?.favoritedAt) || 0;
14154
+ favoritedAtByKey[id] = Math.max(favoritedAtByKey[id] ?? 0, at || Date.now());
14155
+ }
14156
+ const ids = Array.isArray(data?.ids) ? data.ids : [];
14157
+ for (const id of ids) {
14158
+ if (typeof id === "string" && id && !(id in favoritedAtByKey)) {
14159
+ favoritedAtByKey[id] = 1;
14160
+ }
14161
+ }
14162
+ return favoritedAtByKey;
14163
+ } catch {
14164
+ return {};
14165
+ }
14166
+ }
14167
+ function formatAgentListCard(agents, maxDisplay = 20) {
14168
+ const total = agents.length;
14169
+ const lines = [`Agents (${total})`];
14170
+ const visible = agents.slice(0, maxDisplay);
14171
+ for (const agent of visible) {
14172
+ const star = agent.isFavorite ? "\u2605" : " ";
14173
+ const name = agent.name || "(unnamed)";
14174
+ const model = agent.model || "\u2014";
14175
+ const source = agent.apiSource || agent.provider || agent.cliProvider || "\u2014";
14176
+ lines.push(`${star} ${name} ${model} ${source}`);
14177
+ }
14178
+ if (total > maxDisplay) {
14179
+ lines.push(`\u2026 +${total - maxDisplay} more`);
14180
+ }
14181
+ return lines.join("\n");
14182
+ }
13827
14183
  var listAgentsFunctionSchema = {
13828
14184
  name: "listAgents",
13829
- description: "List the current user's Nolo agents.",
14185
+ 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
14186
  parameters: {
13831
14187
  type: "object",
13832
14188
  properties: {
@@ -13837,23 +14193,40 @@ var listAgentsFunctionSchema = {
13837
14193
  };
13838
14194
  async function listAgentsFunc(args, thunkApi) {
13839
14195
  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);
14196
+ const userRecords = await queryBestRecords(thunkApi, "agent" /* AGENT */, limit);
14197
+ const favoritesMap = await fetchUserFavoriteAgentMap(thunkApi);
14198
+ const recordsMap = /* @__PURE__ */ new Map();
14199
+ for (const record of userRecords) {
14200
+ const key = record?.dbKey || record?.id || record?.publicKey;
14201
+ if (key) recordsMap.set(key, record);
14202
+ }
14203
+ for (const favKey of Object.keys(favoritesMap)) {
14204
+ const isAlreadyPresent = Array.from(recordsMap.values()).some(
14205
+ (record) => record?.dbKey === favKey || record?.id === favKey || record?.publicKey === favKey || `agent-pub-${record?.id}` === favKey
14206
+ );
14207
+ if (!isAlreadyPresent) {
14208
+ const favRecord = await readBestRecord(thunkApi, favKey).catch(() => null);
14209
+ if (favRecord) {
14210
+ const key = favRecord?.dbKey || favRecord?.id || favKey;
14211
+ recordsMap.set(key, favRecord);
14212
+ }
14213
+ }
14214
+ }
14215
+ const runtime = getRuntime2(thunkApi);
14216
+ const userId = runtime?.currentUserId ?? void 0;
14217
+ let agents = Array.from(recordsMap.values()).map(
14218
+ (record) => toSafeAgentSummary(record, {
14219
+ favoritesMap,
14220
+ userId
14221
+ })
14222
+ );
14223
+ if (args?.publicOnly === true) {
14224
+ agents = agents.filter((agent) => agent.isPublic);
14225
+ }
14226
+ agents = sortSafeAgentSummaries(agents);
13854
14227
  return {
13855
14228
  rawData: { success: true, total: agents.length, agents },
13856
- displayData: jsonPreview({ total: agents.length, agents })
14229
+ displayData: formatAgentListCard(agents)
13857
14230
  };
13858
14231
  }
13859
14232
  var readAgentFunctionSchema = {
@@ -13995,7 +14368,7 @@ var readSkillDocFunctionSchema = {
13995
14368
  }
13996
14369
  };
13997
14370
  async function readSkillDocFunc(args, thunkApi) {
13998
- const { buildReadDocResult } = await import("./readDocTool-H6X6KO6X.js");
14371
+ const { buildReadDocResult } = await import("./readDocTool-QHVGQHUJ.js");
13999
14372
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
14000
14373
  if (typeof id !== "string" || !id.trim()) {
14001
14374
  throw new Error("readSkillDoc requires id or doc.");
@@ -18608,7 +18981,7 @@ var cloudflareCrawlStatusFunctionSchema = {
18608
18981
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
18609
18982
  const { jobId, limit, status, cursor } = args;
18610
18983
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
18611
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-C7P7YSE4.js");
18984
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-QI3YBNWB.js");
18612
18985
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
18613
18986
  const params = new URLSearchParams();
18614
18987
  if (limit !== void 0) params.set("limit", String(limit));
@@ -19383,7 +19756,7 @@ var selectUserIdFromState = (state) => typeof state?.auth?.currentUser?.userId =
19383
19756
  var selectCurrentServerFromState = (state) => typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
19384
19757
  async function addImageContentToSpace(input) {
19385
19758
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
19386
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-QYVO4SYP.js")).addContentAction;
19759
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-JGBUVR7K.js")).addContentAction;
19387
19760
  await addContentAction2(
19388
19761
  {
19389
19762
  spaceId: input.spaceId,
@@ -20466,6 +20839,26 @@ var resolveRetryAfterMs = (headers, fallbackMs, bodyRetryAfterMs) => {
20466
20839
  return normalizeNonNegativeMs(bodyRetryAfterMs, fallbackMs);
20467
20840
  };
20468
20841
 
20842
+ // packages/core/abortableDelay.ts
20843
+ function waitForAbortableDelay(ms, signal) {
20844
+ const delayMs = Number.isFinite(ms) && ms >= 0 ? Math.round(ms) : 0;
20845
+ if (signal?.aborted) {
20846
+ return Promise.reject(new DOMException("Aborted", "AbortError"));
20847
+ }
20848
+ return new Promise((resolve, reject) => {
20849
+ const onAbort = () => {
20850
+ clearTimeout(timeoutId);
20851
+ signal?.removeEventListener("abort", onAbort);
20852
+ reject(new DOMException("Aborted", "AbortError"));
20853
+ };
20854
+ const timeoutId = setTimeout(() => {
20855
+ signal?.removeEventListener("abort", onAbort);
20856
+ resolve();
20857
+ }, delayMs);
20858
+ signal?.addEventListener("abort", onAbort, { once: true });
20859
+ });
20860
+ }
20861
+
20469
20862
  // packages/ai/chat/parseMultilineSSE.ts
20470
20863
  function createSSEParser() {
20471
20864
  let buffer = "";
@@ -20544,20 +20937,7 @@ function createSubscriptionError(status, hasBody, retryAfterMs) {
20544
20937
  return createRetryableError(message, retryAfterMs);
20545
20938
  }
20546
20939
  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
- });
20940
+ await waitForAbortableDelay(retryAfterMs, signal);
20561
20941
  }
20562
20942
  function parseRetryableJson(text) {
20563
20943
  try {
@@ -20643,7 +21023,7 @@ async function listenToDialogEvents(dialogId, currentServer, authHeader, signal,
20643
21023
  });
20644
21024
  }
20645
21025
  var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, { getState, signal: thunkSignal }) => {
20646
- const { agentKey, userInput, serverBase, spaceId, onStatusChange, onDone, onFailed } = args;
21026
+ const { agentKey, userInput, serverBase, spaceId, parentDialogId, onStatusChange, onDone, onFailed } = args;
20647
21027
  const state = getState();
20648
21028
  const currentServer = normalizeServerOrigin(serverBase) || selectCurrentServer(state);
20649
21029
  const token = selectIdentityToken(state);
@@ -20664,12 +21044,14 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
20664
21044
  userInput,
20665
21045
  spaceId,
20666
21046
  background: true,
21047
+ ...parentDialogId ? { parentDialogId } : {},
20667
21048
  runtimeContext: {
20668
21049
  surface: "web",
20669
21050
  host: "browser",
20670
21051
  runtime: "react",
20671
21052
  entrypoint: "background-agent-run",
20672
- capabilities: ["background", "sse-events"]
21053
+ capabilities: ["background", "sse-events"],
21054
+ ...parentDialogId ? { parentThreadId: parentDialogId } : {}
20673
21055
  }
20674
21056
  }),
20675
21057
  signal: effectiveSignal
@@ -20694,6 +21076,9 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
20694
21076
  await waitForRetryDelay(retryAfterMs, effectiveSignal);
20695
21077
  continue;
20696
21078
  }
21079
+ if (isCoreDraining) {
21080
+ throw new Error(DRAIN_EXHAUSTED_USER_MESSAGE);
21081
+ }
20697
21082
  throw new Error(`\u542F\u52A8\u540E\u53F0\u4EFB\u52A1\u5931\u8D25 (${runRes.status}): ${errText}`);
20698
21083
  }
20699
21084
  if (!runResponse) {
@@ -20784,12 +21169,15 @@ async function callAgentFunc(args, thunkApi, context) {
20784
21169
  throw new Error("callAgent: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
20785
21170
  }
20786
21171
  const content = buildDelegatedTaskContent(task, input);
21172
+ const activeDialogKey = getActiveDialogKey();
21173
+ const parentDialogId = activeDialogKey ? extractCustomId(activeDialogKey) : void 0;
20787
21174
  try {
20788
21175
  const bgResult = await dispatch(
20789
21176
  runAgentBackground({
20790
21177
  agentKey,
20791
21178
  userInput: content,
20792
- ...background === true ? { waitForCompletion: false } : {}
21179
+ ...background === true ? { waitForCompletion: false } : {},
21180
+ ...parentDialogId ? { parentDialogId } : {}
20793
21181
  })
20794
21182
  ).unwrap();
20795
21183
  if (background === true) {
@@ -21369,6 +21757,117 @@ async function runLlmToolFunc(args, thunkApi, _context) {
21369
21757
  }
21370
21758
  }
21371
21759
 
21760
+ // packages/ai/tools/agent/agentRunDisplayHelpers.ts
21761
+ function getAgentRunStatusIcon(status) {
21762
+ switch (status) {
21763
+ case "running":
21764
+ case "pending":
21765
+ return "\u23F3";
21766
+ case "done":
21767
+ return "\u2713";
21768
+ case "failed":
21769
+ case "timeout":
21770
+ return "\u2717";
21771
+ case "killed":
21772
+ case "cancelled":
21773
+ case "cancelling":
21774
+ return "\u{1F6D1}";
21775
+ case "not_found":
21776
+ default:
21777
+ return "?";
21778
+ }
21779
+ }
21780
+ var DEFAULT_LABELS = {
21781
+ runStatus: "Run status",
21782
+ runStarted: "Run started",
21783
+ runStopped: "Run stopped",
21784
+ logTail: "Log tail:",
21785
+ runs: (count) => `Runs (${count})`
21786
+ };
21787
+ function resolveLabels(labels) {
21788
+ return {
21789
+ runStatus: labels?.runStatus ?? DEFAULT_LABELS.runStatus,
21790
+ runStarted: labels?.runStarted ?? DEFAULT_LABELS.runStarted,
21791
+ runStopped: labels?.runStopped ?? DEFAULT_LABELS.runStopped,
21792
+ logTail: labels?.logTail ?? DEFAULT_LABELS.logTail,
21793
+ runs: labels?.runs ?? DEFAULT_LABELS.runs
21794
+ };
21795
+ }
21796
+ function isAgentNameFallback(agentName) {
21797
+ const trimmed = typeof agentName === "string" ? agentName.trim() : "";
21798
+ return !trimmed || trimmed === "agent";
21799
+ }
21800
+ function formatStartRunCard(agentName, status = "running", labels) {
21801
+ const L = resolveLabels(labels);
21802
+ const icon = getAgentRunStatusIcon(status);
21803
+ const lines = [L.runStarted];
21804
+ if (!isAgentNameFallback(agentName)) {
21805
+ lines.push(` agent ${agentName}`);
21806
+ }
21807
+ lines.push(` status ${icon} ${status}`);
21808
+ return lines.join("\n");
21809
+ }
21810
+ function formatStatusRunCard(agentName, status = "running", opts) {
21811
+ const L = resolveLabels(opts?.labels);
21812
+ const icon = getAgentRunStatusIcon(status);
21813
+ const lines = [L.runStatus, ` ${icon} ${status}`];
21814
+ if (!isAgentNameFallback(agentName)) {
21815
+ lines.push(` agent ${agentName}`);
21816
+ }
21817
+ if (opts?.pollCount !== void 0 && opts.pollCount > 0) {
21818
+ lines.push(` polls ${opts.pollCount}`);
21819
+ }
21820
+ if (typeof opts?.elapsedMs === "number" && Number.isFinite(opts.elapsedMs)) {
21821
+ lines.push(` last ${Math.round(opts.elapsedMs)}ms`);
21822
+ }
21823
+ if (opts?.lastToolNames && opts.lastToolNames.length > 0) {
21824
+ lines.push(` lastTools ${opts.lastToolNames.join(", ")}`);
21825
+ }
21826
+ if (opts?.toolCallCount !== void 0) {
21827
+ lines.push(` toolCalls ${opts.toolCallCount}`);
21828
+ }
21829
+ if (opts?.errorMessage?.trim()) {
21830
+ lines.push(` error ${opts.errorMessage.trim()}`);
21831
+ }
21832
+ const includeLog = opts?.includeLogTail !== false;
21833
+ if (includeLog && opts?.logLines && opts.logLines.length > 0) {
21834
+ lines.push("", L.logTail, ...opts.logLines.map((l) => ` ${l}`));
21835
+ }
21836
+ return lines.join("\n");
21837
+ }
21838
+ function formatStopRunCard(status = "killed", labels) {
21839
+ const L = resolveLabels(labels);
21840
+ const icon = getAgentRunStatusIcon(status);
21841
+ return `${L.runStopped}
21842
+ ${icon} ${status}`;
21843
+ }
21844
+ function formatListRunsCard(runs, labels) {
21845
+ const L = resolveLabels(labels);
21846
+ const lines = [L.runs(runs.length)];
21847
+ for (const run of runs) {
21848
+ const status = run.status ?? "\u2014";
21849
+ const icon = getAgentRunStatusIcon(status);
21850
+ const name = run.agentName || run.name || "agent";
21851
+ lines.push(` ${icon} ${name}`);
21852
+ }
21853
+ return lines.join("\n");
21854
+ }
21855
+ function formatNotFoundRunCard(labels) {
21856
+ const L = resolveLabels(labels);
21857
+ return `${L.runStatus}
21858
+ ? not_found`;
21859
+ }
21860
+ var AGENT_RUN_TERMINAL_STATUSES = /* @__PURE__ */ new Set([
21861
+ "done",
21862
+ "failed",
21863
+ "timeout",
21864
+ "killed",
21865
+ "cancelled"
21866
+ ]);
21867
+ function isAgentRunTerminalStatus(status) {
21868
+ return typeof status === "string" && AGENT_RUN_TERMINAL_STATUSES.has(status);
21869
+ }
21870
+
21372
21871
  // packages/ai/tools/agent/startAgentRunTool.ts
21373
21872
  var startAgentRunFunctionSchema = {
21374
21873
  name: "startAgentRun",
@@ -21378,7 +21877,7 @@ var startAgentRunFunctionSchema = {
21378
21877
  properties: {
21379
21878
  agentKey: {
21380
21879
  type: "string",
21381
- description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u552F\u4E00 ID\uFF08dbKey\uFF0C\u683C\u5F0F\u5982 agent-xxx\uFF09\u3002"
21880
+ 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
21881
  },
21383
21882
  task: {
21384
21883
  type: "string",
@@ -21401,22 +21900,27 @@ async function startAgentRunFunc(args, thunkApi, _context) {
21401
21900
  throw new Error("startAgentRun: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
21402
21901
  }
21403
21902
  const content = buildDelegatedTaskContent(task, input);
21903
+ const activeDialogKey = getActiveDialogKey();
21904
+ const parentDialogId = activeDialogKey ? extractCustomId(activeDialogKey) : void 0;
21404
21905
  try {
21405
21906
  const bgResult = await dispatch(
21406
21907
  runAgentBackground({
21407
21908
  agentKey,
21408
21909
  userInput: content,
21409
- waitForCompletion: false
21910
+ waitForCompletion: false,
21911
+ ...parentDialogId ? { parentDialogId } : {}
21410
21912
  })
21411
21913
  ).unwrap();
21412
21914
  const runId = bgResult.dialogId;
21413
21915
  const status = bgResult.status ?? "pending";
21916
+ const name = bgResult.agentName || bgResult.name || "agent";
21414
21917
  return {
21415
21918
  rawData: {
21416
21919
  runId,
21417
- status
21920
+ status,
21921
+ ...bgResult.agentName ? { agentName: bgResult.agentName } : {}
21418
21922
  },
21419
- displayData: `\u23F3 \u540E\u53F0 run \u5DF2\u542F\u52A8\uFF0CrunId: ${runId}\u3002\u7528 controlAgentRun(action:"status", runId:"${runId}") \u67E5\u8FDB\u5EA6\u3002`
21923
+ displayData: formatStartRunCard(name, status)
21420
21924
  };
21421
21925
  } catch (e) {
21422
21926
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21486,11 +21990,9 @@ async function handleList(thunkApi, opts) {
21486
21990
  const resData = data?.data ?? data;
21487
21991
  const runs = resData?.runs ?? [];
21488
21992
  const count = resData?.count ?? runs.length;
21489
- const summary = runs.map((t) => `${t.runId} [${t.status}] ${t.agentKey ?? "unknown"}`).join("\n");
21490
21993
  return {
21491
21994
  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"
21995
+ displayData: formatListRunsCard(runs)
21494
21996
  };
21495
21997
  } catch (e) {
21496
21998
  throw new Error(`controlAgentRun(list) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21508,24 +22010,21 @@ async function handleStatus(thunkApi, opts) {
21508
22010
  if (!resData || resData.found === false || !resData.run) {
21509
22011
  return {
21510
22012
  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`
22013
+ displayData: `Run status
22014
+ ? not_found`
21512
22015
  };
21513
22016
  }
21514
22017
  const run = resData.run;
21515
22018
  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
- ];
22019
+ const name = run.agentName || run.name || "agent";
21526
22020
  return {
21527
22021
  rawData: { found: true, ...run, ...logLines ? { logLines } : {} },
21528
- displayData: displayParts.join("\n")
22022
+ displayData: formatStatusRunCard(name, run.status, {
22023
+ lastToolNames: run.lastToolNames,
22024
+ toolCallCount: run.toolCallCount,
22025
+ errorMessage: run.errorMessage,
22026
+ logLines
22027
+ })
21529
22028
  };
21530
22029
  } catch (e) {
21531
22030
  throw new Error(`controlAgentRun(status) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -21540,21 +22039,10 @@ async function handleStop(thunkApi, opts) {
21540
22039
  { withAuth: true }
21541
22040
  );
21542
22041
  const result = data?.data ?? data;
21543
- const wasActive = result?.wasActive ?? false;
21544
22042
  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
22043
  return {
21556
- rawData: { runId: opts.runId, status, wasActive },
21557
- displayData: statusText
22044
+ rawData: { runId: opts.runId, status, wasActive: result?.wasActive ?? false },
22045
+ displayData: formatStopRunCard(status)
21558
22046
  };
21559
22047
  } catch (e) {
21560
22048
  throw new Error(`controlAgentRun(stop) \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -22753,7 +23241,7 @@ var executeToolRun = createAsyncThunk(
22753
23241
  if (!executionInput) {
22754
23242
  throw new Error(`ToolRun ${id} has no input to execute with.`);
22755
23243
  }
22756
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-XSD2BOEN.js");
23244
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-TPQYTLQZ.js");
22757
23245
  const { executor } = findToolExecutor2(run.toolName);
22758
23246
  toolRunStarted({
22759
23247
  id: run.id,
@@ -22777,7 +23265,7 @@ var executeToolRun = createAsyncThunk(
22777
23265
  const latestState = thunkApi.getState();
22778
23266
  const userId = latestState.auth?.currentUser?.userId;
22779
23267
  if (userId) {
22780
- const { fetchUserSpaceMemberships } = await import("./spaceSlice-BS5TSW3W.js");
23268
+ const { fetchUserSpaceMemberships } = await import("./spaceSlice-WTFNKOVA.js");
22781
23269
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
22782
23270
  }
22783
23271
  }
@@ -25180,7 +25668,7 @@ async function updateDocFunc(args, thunkApi) {
25180
25668
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
25181
25669
  };
25182
25670
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
25183
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-3DXRYBMD.js");
25671
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-3CP2IO6M.js");
25184
25672
  if (getDocState().pageKey === id) {
25185
25673
  applyExternalDocUpdate({
25186
25674
  slateData: finalSlateData,
@@ -25205,7 +25693,7 @@ async function updateDocFunc(args, thunkApi) {
25205
25693
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
25206
25694
  async function dispatchSetSettings(thunkApi, changes) {
25207
25695
  const injectedSetSettings = thunkApi?.extra?.setSettings;
25208
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-2I5HMG47.js")).setSettings;
25696
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-VGRJUSE5.js")).setSettings;
25209
25697
  await thunkApi.dispatch(setSettings(changes)).unwrap();
25210
25698
  }
25211
25699
  var updateUserPreferenceProfileFunctionSchema = {
@@ -25699,7 +26187,7 @@ var ziweiChartFunctionSchema = {
25699
26187
  }
25700
26188
  };
25701
26189
  async function ziweiChartFunc(args) {
25702
- const result = runZiweiChart(args);
26190
+ const result = await runZiweiChart(args);
25703
26191
  return {
25704
26192
  rawData: result,
25705
26193
  displayData: result.displayData,
@@ -26607,7 +27095,7 @@ var baseToolDefinitions = [
26607
27095
  executor: listAgentsFunc,
26608
27096
  description: {
26609
27097
  name: "listAgents",
26610
- description: "List the current user's Nolo agents.",
27098
+ description: "List the current user's Nolo agents as safe summaries; use readAgent to resolve the runnable agentKey before delegation.",
26611
27099
  category: "Nolo workspace"
26612
27100
  },
26613
27101
  behavior: "data",
@@ -27410,8 +27898,16 @@ export {
27410
27898
  readXPostFunc,
27411
27899
  readXhsProfileFunctionSchema,
27412
27900
  readXhsProfileFunc,
27901
+ formatStartRunCard,
27902
+ formatStatusRunCard,
27903
+ formatStopRunCard,
27904
+ formatListRunsCard,
27905
+ formatNotFoundRunCard,
27906
+ isAgentRunTerminalStatus,
27413
27907
  TOOL_PACKS,
27414
27908
  expandEnabledPacks,
27909
+ expandEnabledPackPromptPatches,
27910
+ appendEnabledPackPromptPatches,
27415
27911
  FORCED_TOOLS,
27416
27912
  applyDisabledTools,
27417
27913
  addDefaultLightWebToolsForConfiguredAgents,
@@ -27427,7 +27923,9 @@ export {
27427
27923
  toolRunSucceeded,
27428
27924
  toolRunFailed,
27429
27925
  getAllToolRuns,
27926
+ waitForAbortableDelay,
27430
27927
  createSSEParser,
27928
+ formatAgentListCard,
27431
27929
  TOOL_GROUP_META,
27432
27930
  toolQueryFunctionSchema,
27433
27931
  toolQueryFunc,