nolo-cli 0.54.0 → 0.61.0-alpha.2

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 (154) hide show
  1. package/README.md +3 -3
  2. package/{_executeModel-OPTKYHJA.js → _executeModel-CKT6RGTL.js} +48 -45
  3. package/{action-ORXWW2ZG.js → action-76JX3JX3.js} +7 -6
  4. package/{addContentAction-53BZ34AE.js → addContentAction-V3NAZRTJ.js} +6 -5
  5. package/{addDialogAgentAction-JRYUS54Y.js → addDialogAgentAction-RZOAF46K.js} +5 -4
  6. package/{agentDeleteCommand-FJIWU2BS.js → agentDeleteCommand-VN7NPXQ4.js} +30 -27
  7. package/{agentEmailCommands-CE32L43B.js → agentEmailCommands-F2TNAV4A.js} +59 -56
  8. package/{agentGrantCommands-2LEZDADN.js → agentGrantCommands-R3VQEZJR.js} +1 -1
  9. package/{agentListCommands-VJNKULIK.js → agentListCommands-OSM2ANI3.js} +61 -31
  10. package/{agentMachineCommands-HCJ3WQXL.js → agentMachineCommands-MTPWYVRV.js} +31 -28
  11. package/{agentPullCommand-M552CYSI.js → agentPullCommand-N7L2CT7L.js} +2 -2
  12. package/{agentRecordCommands-QFWERED4.js → agentRecordCommands-VWAWTVVC.js} +57 -54
  13. package/{agentRunCommand-G3GQMUNN.js → agentRunCommand-PLZOBNVK.js} +61 -58
  14. package/{agentRunControl-INKFDXDA.js → agentRunControl-WECMOO6O.js} +11 -6
  15. package/{agentRuntimeLocal-K327ELSL.js → agentRuntimeLocal-XCJLRWQE.js} +26 -23
  16. package/{agentSlice-ODKF4J6M.js → agentSlice-F6DOP4IW.js} +8 -7
  17. package/{appDeleteCommands-XUXMFDI4.js → appDeleteCommands-3BCFTRFJ.js} +30 -27
  18. package/{appDeployCommands-37F4GPCU.js → appDeployCommands-B4GMHCYA.js} +30 -27
  19. package/{appDeployStatusCommands-WSPU7TUK.js → appDeployStatusCommands-4MN36WIG.js} +30 -27
  20. package/{appGetCommands-YLOBA3EM.js → appGetCommands-4GJIEUAX.js} +30 -27
  21. package/{appListCommands-UD62R5ME.js → appListCommands-CHU53GSX.js} +30 -27
  22. package/{authCommand-OK6HLHGS.js → authCommand-WOTWLJNF.js} +35 -29
  23. package/{authCommands-2DUIUEMT.js → authCommands-ILTBI6JV.js} +7 -5
  24. package/{chatQueueReduxAdapter-TV2TUOQS.js → chatQueueReduxAdapter-HNSQXNIR.js} +20 -18
  25. package/{chunk-HPW5MNDQ.js → chunk-22BTGNSP.js} +113 -57
  26. package/{chunk-TR4DXUYX.js → chunk-2HPRMEEZ.js} +1180 -736
  27. package/{chunk-UNZDCI3O.js → chunk-2KDR4CWE.js} +35 -4
  28. package/{chunk-3ZTR7ZO4.js → chunk-2PGGC63K.js} +1 -1
  29. package/{chunk-JXIP6ZWH.js → chunk-37QVS7BU.js} +18 -5
  30. package/{chunk-EA5OYZVD.js → chunk-37XDGCY7.js} +1 -1
  31. package/chunk-3BLB7QKO.js +433 -0
  32. package/{chunk-CS6TCJ7E.js → chunk-3JQ2NRYU.js} +30 -7
  33. package/{chunk-RHMDMTDK.js → chunk-3JWKQDA4.js} +2 -2
  34. package/{chunk-3LKZRP7E.js → chunk-3QGUVVX5.js} +2 -2
  35. package/{chunk-SSXTSPSG.js → chunk-45YO6H7P.js} +71 -30
  36. package/{chunk-EJE33XNR.js → chunk-4C4ST2YE.js} +1521 -565
  37. package/{chunk-YLCUU3WM.js → chunk-4NJEIGBQ.js} +5 -5
  38. package/{chunk-K4NISKOR.js → chunk-5ZYA4JJ3.js} +47 -17
  39. package/{chunk-3Y2K5O2R.js → chunk-7A3RRUCQ.js} +125 -40
  40. package/{chunk-5FCIPEKT.js → chunk-7O7KH4X5.js} +1051 -926
  41. package/{chunk-6HDYSFLO.js → chunk-7UF7CQ6B.js} +3 -3
  42. package/{chunk-SUEIAK5N.js → chunk-AQMVUA7N.js} +1 -0
  43. package/{chunk-WQHGJHAL.js → chunk-AVE2YR4F.js} +732 -726
  44. package/{chunk-6COJEAYH.js → chunk-B7DXRX7F.js} +44 -37
  45. package/chunk-BFU6C242.js +66 -0
  46. package/{chunk-IA3A5373.js → chunk-C3FZR5EC.js} +1 -1
  47. package/{chunk-IWUMSAQF.js → chunk-CJCJF5XB.js} +26 -3
  48. package/{chunk-UGBHDMHI.js → chunk-CP7VIDZ7.js} +1 -1
  49. package/{chunk-JON2PHYT.js → chunk-CTCW7U7N.js} +1 -1
  50. package/{chunk-YBFJQC2M.js → chunk-D5XKNNUV.js} +65 -42
  51. package/{chunk-7NYDJAQ7.js → chunk-DNNSCSA2.js} +5 -5
  52. package/{chunk-NI2BS6UD.js → chunk-DWUCB2A3.js} +1 -1
  53. package/{chunk-AA564GBL.js → chunk-DZZL7UBV.js} +1 -1
  54. package/{chunk-75MSWWUE.js → chunk-E6RGHPDR.js} +5 -3
  55. package/chunk-EDKF7RX4.js +30 -0
  56. package/{chunk-FJHMLRDQ.js → chunk-ES6CVKVD.js} +21 -27
  57. package/{chunk-SYYUU7EV.js → chunk-FHAGENAS.js} +2 -3
  58. package/{chunk-NJUQBYFJ.js → chunk-FKFMIBTT.js} +3 -1
  59. package/{chunk-INZZJSQF.js → chunk-FZGV4FGK.js} +24 -12
  60. package/{chunk-YQBXOHE6.js → chunk-GAL47RNP.js} +1 -1
  61. package/{chunk-UOWXD4VN.js → chunk-HBPV76EK.js} +335 -243
  62. package/{chunk-MLEZPE3U.js → chunk-HLU5Q2GV.js} +4 -4
  63. package/{chunk-TC6P4NDR.js → chunk-HQP7HJDL.js} +6 -6
  64. package/{chunk-7FAS3NEF.js → chunk-IYCUMIYS.js} +19 -15
  65. package/{chunk-AUVFJGPC.js → chunk-JX5PJCWS.js} +7 -5
  66. package/{chunk-LYGNQHUW.js → chunk-JYYZCK2Z.js} +2 -4
  67. package/{chunk-XOJRZUPF.js → chunk-KWSQR2KK.js} +14 -29
  68. package/{chunk-2WBFJHQA.js → chunk-L7B47JXR.js} +34 -39
  69. package/{chunk-EICIFHVS.js → chunk-LAFC3B2I.js} +1 -1
  70. package/{chunk-N4JKMCY3.js → chunk-LJKICKVC.js} +2 -2
  71. package/chunk-M3JEW6N6.js +193 -0
  72. package/{chunk-LRGKOI5Y.js → chunk-MBOEV4L2.js} +7 -3
  73. package/{chunk-SVDMVX4G.js → chunk-MMZ6ZTVO.js} +112 -73
  74. package/{chunk-JDSUTNYY.js → chunk-MP64VFGD.js} +2 -2
  75. package/{chunk-NFLA6GSU.js → chunk-MXUDQZXQ.js} +44 -5
  76. package/chunk-N4G4PKQ6.js +23 -0
  77. package/{chunk-KXKQO4Q6.js → chunk-NTW5GWDM.js} +58 -1
  78. package/chunk-ONXOABJR.js +215 -0
  79. package/{chunk-TY3ADTX5.js → chunk-OZX2IPKM.js} +7 -2
  80. package/{chunk-Q4XZVZPN.js → chunk-P7OOB7QP.js} +1 -1
  81. package/{chunk-XIJZOCSP.js → chunk-PEZJEQAO.js} +1 -1
  82. package/{chunk-SWJGJMTW.js → chunk-PQDIDWGX.js} +1 -1
  83. package/chunk-PSCNXBYA.js +11 -0
  84. package/{chunk-BY2FF2C4.js → chunk-QEFJJS2I.js} +55 -73
  85. package/{chunk-BG7J6Y5X.js → chunk-QEW2MFDQ.js} +1 -1
  86. package/{chunk-KLIBF3BY.js → chunk-RDBARW6T.js} +8 -3
  87. package/{chunk-ZVOHVJI3.js → chunk-RJ2SAFB5.js} +82 -35
  88. package/{chunk-MYMBBB6Q.js → chunk-RVWRKFUB.js} +5 -3
  89. package/{chunk-43CXXVJD.js → chunk-RXX4GDIH.js} +1 -1
  90. package/chunk-SEJ5OS6F.js +49 -0
  91. package/{chunk-SAJSBPI2.js → chunk-SOJM57FX.js} +5 -2
  92. package/{chunk-EKLRRZIN.js → chunk-SPAQ4PVV.js} +0 -5
  93. package/{chunk-L7NG2M6H.js → chunk-TRV2MIDW.js} +89 -74
  94. package/{chunk-5UAYZEXO.js → chunk-UZPQSVM6.js} +1 -1
  95. package/{chunk-SVC3GGUA.js → chunk-VMWYBIXG.js} +7 -5
  96. package/{chunk-ZHXJ6M7T.js → chunk-W7XHHYWM.js} +4 -0
  97. package/{chunk-UR66XPVF.js → chunk-XAVSS3KE.js} +21 -3
  98. package/{chunk-A65UV3M5.js → chunk-XOKOSO35.js} +10 -19
  99. package/{chunk-VZMUOPYG.js → chunk-XTJTN3RW.js} +46 -3
  100. package/{chunk-T5HJEUQN.js → chunk-YCDWJX45.js} +1 -1
  101. package/{chunk-BBTN4NQD.js → chunk-Z4QSJILV.js} +85 -13
  102. package/{chunk-O5FLGN2L.js → chunk-ZRSJ3JEH.js} +6 -2
  103. package/{cliExecutor-BBUVQU4L.js → cliExecutor-HG3S345O.js} +1 -1
  104. package/{codingSkills-BCQXRZOI.js → codingSkills-VDXQYWX4.js} +2 -2
  105. package/{contentThunks-KNI6VXLT.js → contentThunks-7YG2ZYQC.js} +21 -19
  106. package/{cooldownCommands-GI5NNWGL.js → cooldownCommands-BSCH2W7P.js} +2 -2
  107. package/{createAgentAutomationAction-OK4L33KF.js → createAgentAutomationAction-PJQSCAIO.js} +23 -21
  108. package/{createDialogAction-JDSMY4AY.js → createDialogAction-SFEJX6SP.js} +23 -21
  109. package/{createPageAction-T7RA3HCG.js → createPageAction-B7WRHOQO.js} +24 -22
  110. package/{dbSlice-TVX6SN2T.js → dbSlice-IBVOBVMS.js} +5 -4
  111. package/{deleteFile-JYKRT7C3.js → deleteFile-FWP2PSBG.js} +3 -2
  112. package/{dialogCommands-UQZYWOOV.js → dialogCommands-VL2X22QC.js} +30 -27
  113. package/{dialogSlice-TYW2G7IL.js → dialogSlice-ANMACABO.js} +20 -18
  114. package/{docCreateCommands-OA6HZBWO.js → docCreateCommands-ITLGZ5YI.js} +29 -26
  115. package/{docDeleteCommands-KBB3YQI2.js → docDeleteCommands-LH3YNL4C.js} +30 -27
  116. package/{docReadCommands-ZLMFVC67.js → docReadCommands-YAJ77F36.js} +29 -26
  117. package/{docStore-2URPBVCS.js → docStore-D4HGHPWI.js} +6 -5
  118. package/{docUpdateCommands-HMH5KUON.js → docUpdateCommands-DQBOMH2G.js} +29 -26
  119. package/{getPricing-RFOPUWHY.js → getPricing-NM3NUTAS.js} +4 -4
  120. package/handleSendMessageAction-DF2OABGW.js +675 -0
  121. package/index.js +79 -88
  122. package/{lib-2ZTNRXR4.js → lib-FRRS27KN.js} +63 -28
  123. package/{localRuntimeAuthority-KQDAE64E.js → localRuntimeAuthority-R5UBODT3.js} +6 -4
  124. package/{localRuntimeDb-PF7CFKDL.js → localRuntimeDb-P37ZTX55.js} +1 -1
  125. package/{machineCommands-RK6L7ZWL.js → machineCommands-JXDYQ5LB.js} +296 -79
  126. package/{machineWsRunDispatch-3X64DW2Z.js → machineWsRunDispatch-3QHI7JX5.js} +55 -52
  127. package/{memberThunks-THZYZFSN.js → memberThunks-VZI6G7YZ.js} +10 -8
  128. package/{models-JVKUEER5.js → models-FAMINFZ7.js} +2 -2
  129. package/package.json +3 -2
  130. package/{read-K4JU4MQC.js → read-2BYWW7AA.js} +3 -2
  131. package/{readDocTool-LQGR6FUN.js → readDocTool-LC3A7QTB.js} +1 -1
  132. package/{readlineWorkspace-XUFJV3RS.js → readlineWorkspace-KVZTEAHB.js} +4365 -2795
  133. package/{removeDialogAgentAction-ECHCFB7N.js → removeDialogAgentAction-SFYZXHNK.js} +8 -7
  134. package/{runAgentClientLoop-24GQ2AW6.js → runAgentClientLoop-KGTEL7ZP.js} +49 -45
  135. package/{runtimeDoctorCommands-JKTTN723.js → runtimeDoctorCommands-CROTMULY.js} +7 -5
  136. package/{setDialogExtraReferencesAction-KCVJNGMB.js → setDialogExtraReferencesAction-Q32RGFTA.js} +6 -5
  137. package/{setPrimaryDialogAgentAction-VDOBOMKC.js → setPrimaryDialogAgentAction-BFYJHUJS.js} +8 -7
  138. package/{settingSlice-VR2IJSXC.js → settingSlice-IRUU4VFB.js} +6 -5
  139. package/{skillDiscovery-2QTZINON.js → skillDiscovery-NTRLM6KP.js} +1 -1
  140. package/{spaceCommands-S5YJJXL7.js → spaceCommands-KNAYWMCZ.js} +33 -215
  141. package/{streamAgentChatTurn-QHKP3ABO.js → streamAgentChatTurn-FLYPTXKZ.js} +105 -73
  142. package/{switchDialogAgentAction-5L4UP7VI.js → switchDialogAgentAction-L2KOKCGG.js} +5 -4
  143. package/{tableCommands-R6WFRDYF.js → tableCommands-SUNTHAYX.js} +1 -1
  144. package/{toolApiClient-53U4UDFF.js → toolApiClient-VGYUB4P5.js} +2 -1
  145. package/{tools-SSXSTC3O.js → tools-CVLUXK6P.js} +37 -34
  146. package/{tuiSummaryLlmCaller-URFJHFC5.js → tuiSummaryLlmCaller-F3DPFFZM.js} +15 -13
  147. package/{updateCommands-IYKLF3JX.js → updateCommands-AJYSD73Y.js} +2 -2
  148. package/{updateDialogTitleAction-YFYAEW3T.js → updateDialogTitleAction-HWJIZEIV.js} +23 -21
  149. package/agentSuperviseCommands-5AR3DKNN.js +0 -640
  150. package/chunk-6IGD47IC.js +0 -19
  151. package/chunk-FD36SCCD.js +0 -105
  152. package/chunk-GRFK2XP4.js +0 -230
  153. package/chunk-HJTAGT3W.js +0 -370
  154. package/handleSendMessageAction-GO53TY7U.js +0 -409
@@ -11,13 +11,24 @@ import {
11
11
  normalizeNonNegativeMs,
12
12
  parseRetryAfterHeaderMs
13
13
  } from "./chunk-3L2WKC3W.js";
14
+ import {
15
+ TASK_PREVIEW_MAX,
16
+ buildDelegatedTaskContent,
17
+ calculateDelegatedPayloadMetrics,
18
+ formatListRunsCard,
19
+ formatNotFoundRunCard,
20
+ formatStartRunCard,
21
+ formatStatusRunCard,
22
+ formatStopRunCard,
23
+ resolveRunLabel
24
+ } from "./chunk-NTW5GWDM.js";
14
25
  import {
15
26
  omitNullishAgentSummaryFields,
16
27
  sortSafeAgentSummaries,
17
28
  toCompactAgentSummary,
18
29
  toSafeAgentSummary,
19
30
  toUnavailableAgentSummary
20
- } from "./chunk-GRFK2XP4.js";
31
+ } from "./chunk-3BLB7QKO.js";
21
32
  import {
22
33
  getUserDataItemTimestamp,
23
34
  mergeAndDedupUserData
@@ -28,17 +39,7 @@ import {
28
39
  readPageFunc,
29
40
  readPageFunctionSchema,
30
41
  slateToSimplifiedMarkdown
31
- } from "./chunk-3ZTR7ZO4.js";
32
- import {
33
- TASK_PREVIEW_MAX,
34
- buildDelegatedTaskContent,
35
- formatListRunsCard,
36
- formatNotFoundRunCard,
37
- formatStartRunCard,
38
- formatStatusRunCard,
39
- formatStopRunCard,
40
- resolveRunLabel
41
- } from "./chunk-KXKQO4Q6.js";
42
+ } from "./chunk-2PGGC63K.js";
42
43
  import {
43
44
  addMemberSpace,
44
45
  fetchAuthoritativeRemoteSpace,
@@ -50,7 +51,7 @@ import {
50
51
  setMembershipRejected,
51
52
  setSpaceInitialized,
52
53
  updateMemberSpaceName
53
- } from "./chunk-LRGKOI5Y.js";
54
+ } from "./chunk-MBOEV4L2.js";
54
55
  import {
55
56
  ToolApiError,
56
57
  buildToolRequestHeaders,
@@ -58,13 +59,16 @@ import {
58
59
  getRequestConfig,
59
60
  getToolBaseUrl,
60
61
  getToolRequestContext
61
- } from "./chunk-TY3ADTX5.js";
62
+ } from "./chunk-OZX2IPKM.js";
62
63
  import {
63
64
  setDialogExtraReferencesAction
64
- } from "./chunk-UGBHDMHI.js";
65
+ } from "./chunk-CP7VIDZ7.js";
66
+ import {
67
+ waitForAbortableDelay
68
+ } from "./chunk-N4G4PKQ6.js";
65
69
  import {
66
70
  markdownToSlate
67
- } from "./chunk-INZZJSQF.js";
71
+ } from "./chunk-FZGV4FGK.js";
68
72
  import {
69
73
  extractMentionsFromSlate
70
74
  } from "./chunk-MEYIRKDN.js";
@@ -76,14 +80,14 @@ import {
76
80
  } from "./chunk-VF4K2QE6.js";
77
81
  import {
78
82
  createDocState
79
- } from "./chunk-6HDYSFLO.js";
83
+ } from "./chunk-7UF7CQ6B.js";
80
84
  import {
81
85
  BUILTIN_OBJECT_SKILL_IDS,
82
86
  buildBuiltinObjectSkillConfig,
83
87
  buildBuiltinObjectSkillDbKey,
84
88
  buildBuiltinObjectSkillPageContent,
85
89
  createDialogAction
86
- } from "./chunk-FJHMLRDQ.js";
90
+ } from "./chunk-ES6CVKVD.js";
87
91
  import {
88
92
  DEFAULT_COLLAPSED_CATEGORIES,
89
93
  addContentToSpace,
@@ -104,7 +108,7 @@ import {
104
108
  updateContentCategory,
105
109
  updateContentTitle,
106
110
  writeStoredCollapsedCategories
107
- } from "./chunk-WQHGJHAL.js";
111
+ } from "./chunk-AVE2YR4F.js";
108
112
  import {
109
113
  getCurrentSpaceId,
110
114
  getCurrentSpaceIdRaw,
@@ -125,14 +129,14 @@ import {
125
129
  selectMsgById,
126
130
  uiAskChoiceFunc,
127
131
  uiAskChoiceFunctionSchema
128
- } from "./chunk-YBFJQC2M.js";
132
+ } from "./chunk-D5XKNNUV.js";
129
133
  import {
130
134
  createAgent,
131
135
  deleteServerSyncedCredential,
132
136
  runLlm,
133
137
  streamAgentChatTurn,
134
138
  updateAgent
135
- } from "./chunk-TC6P4NDR.js";
139
+ } from "./chunk-HQP7HJDL.js";
136
140
  import {
137
141
  getActiveDialogKey,
138
142
  selectCurrentDialogKey,
@@ -147,10 +151,10 @@ import {
147
151
  buildCodingSkillContentBySlug,
148
152
  buildCodingSkillId,
149
153
  buildCodingSkillPageKey
150
- } from "./chunk-AA564GBL.js";
154
+ } from "./chunk-DZZL7UBV.js";
151
155
  import {
152
156
  CAPABILITY_PACKS
153
- } from "./chunk-O5FLGN2L.js";
157
+ } from "./chunk-ZRSJ3JEH.js";
154
158
  import {
155
159
  buildSkillDocMarkdown,
156
160
  normalizeSkillModalities,
@@ -173,22 +177,22 @@ import {
173
177
  redactAgentRecordForWorkspaceTool,
174
178
  resolveNoloDialogInput,
175
179
  verifyNoloDialogSubjectRefQuery
176
- } from "./chunk-ZVOHVJI3.js";
180
+ } from "./chunk-RJ2SAFB5.js";
177
181
  import {
178
182
  isAgentUnavailableNow
179
- } from "./chunk-IWUMSAQF.js";
183
+ } from "./chunk-CJCJF5XB.js";
180
184
  import {
181
185
  buildDatabaseFileContentUrl
182
- } from "./chunk-BBTN4NQD.js";
186
+ } from "./chunk-Z4QSJILV.js";
183
187
  import {
184
188
  DEFAULT_MODEL
185
- } from "./chunk-SVDMVX4G.js";
189
+ } from "./chunk-MMZ6ZTVO.js";
186
190
  import {
187
191
  compactWhitespace
188
192
  } from "./chunk-DWLEOOGR.js";
189
193
  import {
190
194
  createFileCredentialBroker
191
- } from "./chunk-CS6TCJ7E.js";
195
+ } from "./chunk-3JQ2NRYU.js";
192
196
  import {
193
197
  toErrorMessage
194
198
  } from "./chunk-HNMXYYJR.js";
@@ -198,7 +202,7 @@ import {
198
202
  } from "./chunk-O6OSWFZQ.js";
199
203
  import {
200
204
  shareResourceAction
201
- } from "./chunk-AUVFJGPC.js";
205
+ } from "./chunk-JX5PJCWS.js";
202
206
  import {
203
207
  AGENT_UPDATE_FIELD_NAMES,
204
208
  nolotusId,
@@ -206,7 +210,7 @@ import {
206
210
  selectAutoApproveSelfUpdateFields,
207
211
  selectCurrentServer,
208
212
  selectSyncServers
209
- } from "./chunk-SVC3GGUA.js";
213
+ } from "./chunk-VMWYBIXG.js";
210
214
  import {
211
215
  asRecordOrEmpty
212
216
  } from "./chunk-KX6YBIHG.js";
@@ -214,7 +218,7 @@ import {
214
218
  UNCATEGORIZED_ID,
215
219
  addContentAction,
216
220
  checkSpaceMembership
217
- } from "./chunk-MYMBBB6Q.js";
221
+ } from "./chunk-RVWRKFUB.js";
218
222
  import {
219
223
  createSpaceKey,
220
224
  normalizeSpaceId
@@ -229,7 +233,7 @@ import {
229
233
  selectEntities,
230
234
  toTimestampMs,
231
235
  write
232
- } from "./chunk-7NYDJAQ7.js";
236
+ } from "./chunk-DNNSCSA2.js";
233
237
  import {
234
238
  SEPARATOR,
235
239
  TYPE_STORAGE_PREFIXES,
@@ -260,9 +264,8 @@ import {
260
264
  asTrimmedLowercaseString
261
265
  } from "./chunk-QSJ3HFEF.js";
262
266
  import {
263
- DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS,
264
267
  readAction
265
- } from "./chunk-2WBFJHQA.js";
268
+ } from "./chunk-L7B47JXR.js";
266
269
  import {
267
270
  extractCustomId
268
271
  } from "./chunk-BJIRLHJR.js";
@@ -276,14 +279,16 @@ import {
276
279
  noloWriteRequest,
277
280
  resolveEffectiveSpaceActorId,
278
281
  resolveRecordOwnerUserId,
279
- selectIdentityToken,
280
- selectIdentityUserBalance,
281
- selectIdentityUserId,
282
282
  selectRuntimeSnapshot
283
- } from "./chunk-XOJRZUPF.js";
283
+ } from "./chunk-KWSQR2KK.js";
284
284
  import {
285
285
  isAbortError
286
286
  } from "./chunk-QOKAKDPE.js";
287
+ import {
288
+ selectIdentityToken,
289
+ selectIdentityUserBalance,
290
+ selectIdentityUserId
291
+ } from "./chunk-SEJ5OS6F.js";
287
292
  import {
288
293
  buildTombstoneRecord,
289
294
  isTombstoneRecord
@@ -343,7 +348,7 @@ var queryModelUsageFunctionSchema = {
343
348
  },
344
349
  model: {
345
350
  type: "string",
346
- description: "\u53EF\u9009\u6A21\u578B\u8FC7\u6EE4\uFF0C\u4F8B\u5982 gemini-3.7-flash\u3002"
351
+ description: "\u53EF\u9009\u6A21\u578B\u8FC7\u6EE4\uFF0C\u4F8B\u5982 gemini-3.8-flash\u3002"
347
352
  },
348
353
  serviceTier: {
349
354
  type: "string",
@@ -620,7 +625,7 @@ var ai_locale_default = {
620
625
  chat: "Start Chat",
621
626
  public: "Public",
622
627
  byConversation: "Create AI by Conversation",
623
- manualConfiguration: "Manual Configuration",
628
+ manualConfiguration: "Create AI",
624
629
  quickCreate: {
625
630
  reasoningEffort: "Reasoning Effort",
626
631
  reasoningEffortOptions: {
@@ -858,7 +863,7 @@ var ai_locale_default = {
858
863
  description: "Create a new Agent (intelligent assistant/app) based on the given configuration and return the complete Agent information.",
859
864
  params: {
860
865
  name: "The name of the Agent, e.g., 'Meeting Minutes Assistant'.",
861
- model: "The model name to use. Logic: Default 'nolo/glm-5.2'. Complex tasks: 'openai/gpt-5.2'. Cost-saving: 'openai/gpt-5.1'. Aesthetic/Creative: 'gemini-3.7-flash'. Reliable low-cost summary/reasoning: 'deepseek-v4-pro'. Image Generation: 'gemini-3-pro-image-preview' (Best/Expensive), 'gemini-3.1-flash-image-preview' (Ordinary), or 'gemini-3.1-flash-lite-image' (Fastest/Cheapest).",
866
+ model: "The model name to use. Logic: Default 'nolo/deepseek-flash'. Complex tasks: 'openai/gpt-5.6-sol'. Cost-saving: 'openai/gpt-5.5'. Aesthetic/Creative: 'gemini-3.8-flash'. Reliable low-cost summary/reasoning: 'nolo/deepseek-flash'. Image Generation: 'gemini-3-pro-image-preview' (Best/Expensive), 'gemini-3.1-flash-image-preview' (Ordinary), or 'gemini-3.1-flash-lite-image' (Fastest/Cheapest).",
862
867
  provider: "The model provider identifier, must match the selected model, e.g., 'openrouter', 'nolo', 'fireworks', 'mistral', etc.",
863
868
  prompt: "System prompt/instruction describing the Agent's role, tone, and usage.",
864
869
  introduction: "Introduction displayed in the app market or list, explanatory text for end users.",
@@ -1010,7 +1015,7 @@ var ai_locale_default = {
1010
1015
  chat: "\u5F00\u59CB\u804A\u5929",
1011
1016
  public: "\u516C\u5F00",
1012
1017
  byConversation: "\u7528\u5BF9\u8BDD\u521B\u5EFA AI",
1013
- manualConfiguration: "\u624B\u52A8\u914D\u7F6E AI",
1018
+ manualConfiguration: "\u521B\u5EFAAI",
1014
1019
  quickCreate: {
1015
1020
  reasoningEffort: "\u63A8\u7406\u5F3A\u5EA6",
1016
1021
  reasoningEffortOptions: {
@@ -1249,7 +1254,7 @@ var ai_locale_default = {
1249
1254
  description: "\u6839\u636E\u7ED9\u5B9A\u914D\u7F6E\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684 Agent\uFF08\u667A\u80FD\u4F53 / \u5E94\u7528\uFF09\uFF0C\u5E76\u8FD4\u56DE\u5B8C\u6574\u7684 Agent \u4FE1\u606F\u3002",
1250
1255
  params: {
1251
1256
  name: "Agent \u7684\u540D\u79F0\uFF0C\u4F8B\u5982\uFF1A'\u4F1A\u8BAE\u7EAA\u8981\u52A9\u624B'\u3002",
1252
- model: "\u9ED8\u8BA4\u4F7F\u7528 'nolo/glm-5.2'\u3002\u590D\u6742\u4EFB\u52A1: 'openai/gpt-5.2'\u3002\u7701\u6210\u672C\u4F46\u590D\u6742: 'openai/gpt-5.1'\u3002\u8FFD\u6C42\u7F8E\u89C2/\u521B\u610F: 'gemini-3.7-flash'\u3002\u4F4E\u6210\u672C\u6458\u8981/\u63A8\u7406: 'deepseek-v4-pro'\u3002\u751F\u6210\u56FE\u7247: \u8D35/\u9AD8\u8D28\u91CF\u9009 'gemini-3-pro-image-preview'\uFF0C\u666E\u901A\u9009 'gemini-3.1-flash-image-preview'\uFF0C\u6700\u5FEB\u6700\u4FBF\u5B9C\u9009 'gemini-3.1-flash-lite-image'\u3002",
1257
+ model: "\u9ED8\u8BA4\u4F7F\u7528 'nolo/deepseek-flash'\u3002\u590D\u6742\u4EFB\u52A1: 'openai/gpt-5.6-sol'\u3002\u7701\u6210\u672C\u4F46\u590D\u6742: 'openai/gpt-5.5'\u3002\u8FFD\u6C42\u7F8E\u89C2/\u521B\u610F: 'gemini-3.8-flash'\u3002\u4F4E\u6210\u672C\u6458\u8981/\u63A8\u7406: 'nolo/deepseek-flash'\u3002\u751F\u6210\u56FE\u7247: \u8D35/\u9AD8\u8D28\u91CF\u9009 'gemini-3-pro-image-preview'\uFF0C\u666E\u901A\u9009 'gemini-3.1-flash-image-preview'\uFF0C\u6700\u5FEB\u6700\u4FBF\u5B9C\u9009 'gemini-3.1-flash-lite-image'\u3002",
1253
1258
  provider: "\u6A21\u578B\u63D0\u4F9B\u65B9\u6807\u8BC6\uFF0C\u5FC5\u987B\u4E0E\u6240\u9009\u6A21\u578B\u76F8\u5339\u914D\uFF0C\u4F8B\u5982 'openrouter'\u3001'nolo'\u3001'fireworks'\u3001'mistral' \u7B49\u3002",
1254
1259
  prompt: "\u7CFB\u7EDF\u63D0\u793A\u8BCD / \u6307\u4EE4\uFF0C\u63CF\u8FF0\u8FD9\u4E2A Agent \u7684\u89D2\u8272\u3001\u8BED\u6C14\u548C\u4F7F\u7528\u65B9\u5F0F\u3002",
1255
1260
  introduction: "\u5728\u5E94\u7528\u5E02\u573A\u6216\u5217\u8868\u4E2D\u5C55\u793A\u7684\u7B80\u4ECB\uFF0C\u9762\u5411\u7EC8\u7AEF\u7528\u6237\u7684\u8BF4\u660E\u6587\u6848\u3002",
@@ -1401,7 +1406,7 @@ var ai_locale_default = {
1401
1406
  chat: "\u958B\u59CB\u804A\u5929",
1402
1407
  public: "\u516C\u958B",
1403
1408
  byConversation: "\u7528\u5C0D\u8A71\u5EFA\u7ACB AI",
1404
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A AI",
1409
+ manualConfiguration: "\u5EFA\u7ACBAI",
1405
1410
  quickCreate: {
1406
1411
  reasoningEffort: "\u63A8\u7406\u5F37\u5EA6",
1407
1412
  reasoningEffortOptions: {
@@ -1714,7 +1719,7 @@ var ai_locale_default = {
1714
1719
  chat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u59CB",
1715
1720
  public: "\u516C\u958B",
1716
1721
  byConversation: "\u4F1A\u8A71\u3067 AI \u3092\u4F5C\u6210",
1717
- manualConfiguration: "\u624B\u52D5\u8A2D\u5B9A\u3067 AI \u3092\u4F5C\u6210",
1722
+ manualConfiguration: "AI\u3092\u4F5C\u6210",
1718
1723
  quickCreate: {
1719
1724
  reasoningEffort: "\u63A8\u8AD6\u5F37\u5EA6",
1720
1725
  reasoningEffortOptions: {
@@ -1975,6 +1980,14 @@ var chat_locale_default = {
1975
1980
  copyDiagnostics: "Copy diagnostics",
1976
1981
  finishReasonLengthNotice: "Response was cut off at the model's output limit",
1977
1982
  retryProgress: "Auto-retrying {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
1983
+ sendErrorCard: {
1984
+ title: "Send Failed",
1985
+ retry: "Retry",
1986
+ viewDetails: "Technical details",
1987
+ hideDetails: "Hide details",
1988
+ suggestion: "Suggestion",
1989
+ verifyAccount: "Verify account"
1990
+ },
1978
1991
  copyFailed: "Copy failed",
1979
1992
  copySuccess: "Copied successfully",
1980
1993
  createDialog: "Create Dialog",
@@ -2056,6 +2069,7 @@ var chat_locale_default = {
2056
2069
  chooseAnotherModelDialogTitle: "Choose another model",
2057
2070
  useThisModelContinue: "Continue with this model",
2058
2071
  switchModelContinueSuccess: "Switched model and continued this conversation",
2072
+ contextReprocessingNotice: "The system may need to reread part of this conversation after switching models or editing an earlier message.",
2059
2073
  switchModelContinueFailed: "Failed to switch model. Please try again.",
2060
2074
  noAlternativeModels: "No other available models",
2061
2075
  noAvailableAgentMessage: "No available Agent message",
@@ -2080,7 +2094,7 @@ var chat_locale_default = {
2080
2094
  editMessage: "Edit message",
2081
2095
  editSeeded: "Editing message",
2082
2096
  editEmptyContent: "No editable text in this message",
2083
- editingMessageNotice: "Editing a previous message. Sending will discard all later messages.",
2097
+ editingMessageNotice: "Editing a previous message. Sending will discard all later messages. The system may need to reread part of this conversation.",
2084
2098
  cancelEditingMessage: "Cancel editing message",
2085
2099
  branchMessage: "Branch",
2086
2100
  branchCreated: "Branch chat created",
@@ -2088,6 +2102,7 @@ var chat_locale_default = {
2088
2102
  stopBeforeDelete: "Stop generation before deleting",
2089
2103
  messageQueued: "Message queued; will be sent after the current turn",
2090
2104
  cannotSendFileDuringLoop: "Agent is running. Please wait before sending attachments.",
2105
+ assistantReplyStarting: "Working\u2026",
2091
2106
  queueBadgeLabel: "Queued messages",
2092
2107
  queueBadgeQueued: "queued",
2093
2108
  queueBadgeTitle: "Queued messages",
@@ -2194,6 +2209,36 @@ var chat_locale_default = {
2194
2209
  loadSkill: "Load skill",
2195
2210
  startAgentRun: "Start agent run"
2196
2211
  },
2212
+ toolVerbs: {
2213
+ readFile: "Read",
2214
+ readWorkspaceFile: "Read",
2215
+ writeFile: "Write",
2216
+ writeWorkspaceFile: "Write",
2217
+ editFile: "Edit",
2218
+ replaceWorkspaceText: "Edit",
2219
+ applyDiff: "Edit",
2220
+ globFiles: "Find files",
2221
+ searchWorkspace: "Find files",
2222
+ codeSearch: "Search",
2223
+ exa_search: "Web search",
2224
+ firecrawl_search: "Web search",
2225
+ fetchWebpage: "Fetch page",
2226
+ firecrawl_scrape: "Fetch page",
2227
+ execShell: "Run",
2228
+ loadSkill: "Load skill",
2229
+ listAgents: "List agents",
2230
+ readAgent: "Read agent",
2231
+ startAgentRun: "Start subtask",
2232
+ startPreview: "Start preview",
2233
+ getPreviewStatus: "Preview status",
2234
+ stopPreview: "Stop preview",
2235
+ releasePreview: "Release preview",
2236
+ captureVisualState: "Screenshot",
2237
+ appDeploy: "Deploy app",
2238
+ setTodoList: "Update plan",
2239
+ ask_user: "Ask",
2240
+ runStreamingAgent: "Handoff"
2241
+ },
2197
2242
  gemini: {
2198
2243
  title: "Image Generation",
2199
2244
  count: "{{count}} images generated"
@@ -2349,6 +2394,14 @@ var chat_locale_default = {
2349
2394
  copyDiagnostics: "\u590D\u5236\u8BCA\u65AD\u4FE1\u606F",
2350
2395
  finishReasonLengthNotice: "\u56DE\u7B54\u56E0\u8FBE\u5230\u6A21\u578B\u8F93\u51FA\u4E0A\u9650\u88AB\u622A\u65AD",
2351
2396
  retryProgress: "\u81EA\u52A8\u91CD\u8BD5 {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
2397
+ sendErrorCard: {
2398
+ title: "\u53D1\u9001\u5931\u8D25",
2399
+ retry: "\u91CD\u8BD5",
2400
+ viewDetails: "\u67E5\u770B\u8BE6\u60C5",
2401
+ hideDetails: "\u6536\u8D77\u8BE6\u60C5",
2402
+ suggestion: "\u5EFA\u8BAE",
2403
+ verifyAccount: "\u9A8C\u8BC1\u8D26\u53F7"
2404
+ },
2352
2405
  copyFailed: "\u590D\u5236\u5931\u8D25",
2353
2406
  copySuccess: "\u590D\u5236\u6210\u529F",
2354
2407
  createDialog: "\u521B\u5EFA\u5BF9\u8BDD",
@@ -2430,6 +2483,7 @@ var chat_locale_default = {
2430
2483
  chooseAnotherModelDialogTitle: "\u9009\u62E9\u5176\u4ED6\u6A21\u578B",
2431
2484
  useThisModelContinue: "\u7528\u8FD9\u4E2A\u6A21\u578B\u7EE7\u7EED",
2432
2485
  switchModelContinueSuccess: "\u5DF2\u5207\u6362\u6A21\u578B\uFF0C\u5E76\u7EE7\u7EED\u5F53\u524D\u5BF9\u8BDD",
2486
+ contextReprocessingNotice: "\u5207\u6362\u6A21\u578B\u6216\u7F16\u8F91\u5386\u53F2\u6D88\u606F\u540E\uFF0C\u7CFB\u7EDF\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u8BFB\u53D6\u90E8\u5206\u5BF9\u8BDD\u5185\u5BB9\u3002",
2433
2487
  switchModelContinueFailed: "\u5207\u6362\u6A21\u578B\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",
2434
2488
  noAlternativeModels: "\u6CA1\u6709\u5176\u4ED6\u53EF\u7528\u6A21\u578B",
2435
2489
  noAvailableAgentMessage: "\u6CA1\u6709\u53EF\u7528\u7684\u667A\u80FD\u4F53\u6D88\u606F",
@@ -2454,7 +2508,7 @@ var chat_locale_default = {
2454
2508
  editMessage: "\u7F16\u8F91\u6D88\u606F",
2455
2509
  editSeeded: "\u5DF2\u8FDB\u5165\u7F16\u8F91\u6A21\u5F0F",
2456
2510
  editEmptyContent: "\u6D88\u606F\u6CA1\u6709\u53EF\u7F16\u8F91\u7684\u6587\u672C",
2457
- editingMessageNotice: "\u6B63\u5728\u7F16\u8F91\u5386\u53F2\u6D88\u606F\uFF0C\u53D1\u9001\u540E\u5C06\u4E22\u5F03\u5176\u540E\u7684\u6D88\u606F",
2511
+ editingMessageNotice: "\u6B63\u5728\u7F16\u8F91\u5386\u53F2\u6D88\u606F\uFF0C\u53D1\u9001\u540E\u5C06\u4E22\u5F03\u5176\u540E\u7684\u6D88\u606F\u3002\u7CFB\u7EDF\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u8BFB\u53D6\u90E8\u5206\u5BF9\u8BDD\u5185\u5BB9\u3002",
2458
2512
  cancelEditingMessage: "\u53D6\u6D88\u7F16\u8F91\u6D88\u606F",
2459
2513
  branchMessage: "\u5206\u652F",
2460
2514
  branchCreated: "\u5DF2\u521B\u5EFA\u5206\u652F\u5BF9\u8BDD",
@@ -2462,6 +2516,7 @@ var chat_locale_default = {
2462
2516
  stopBeforeDelete: "\u8BF7\u7B49\u5F85\u751F\u6210\u505C\u6B62\u540E\u518D\u5220\u9664",
2463
2517
  messageQueued: "\u6D88\u606F\u5DF2\u6392\u961F\uFF0C\u5C06\u5728\u5F53\u524D\u8F6E\u6B21\u7ED3\u675F\u540E\u53D1\u9001",
2464
2518
  cannotSendFileDuringLoop: "Agent \u8FD0\u884C\u4E2D\uFF0C\u542B\u9644\u4EF6\u6D88\u606F\u8BF7\u7B49\u5F85\u5B8C\u6210\u540E\u518D\u53D1\u9001",
2519
+ assistantReplyStarting: "\u6B63\u5728\u5904\u7406\u2026",
2465
2520
  queueBadgeLabel: "\u6392\u961F\u6D88\u606F",
2466
2521
  queueBadgeQueued: "\u6392\u961F\u4E2D",
2467
2522
  queueBadgeTitle: "\u6392\u961F\u6D88\u606F",
@@ -2563,6 +2618,36 @@ var chat_locale_default = {
2563
2618
  loadSkill: "\u52A0\u8F7D\u6280\u80FD",
2564
2619
  startAgentRun: "\u542F\u52A8\u5B50\u4EFB\u52A1"
2565
2620
  },
2621
+ toolVerbs: {
2622
+ readFile: "\u8BFB\u53D6",
2623
+ readWorkspaceFile: "\u8BFB\u53D6",
2624
+ writeFile: "\u5199\u5165",
2625
+ writeWorkspaceFile: "\u5199\u5165",
2626
+ editFile: "\u4FEE\u6539",
2627
+ replaceWorkspaceText: "\u4FEE\u6539",
2628
+ applyDiff: "\u4FEE\u6539",
2629
+ globFiles: "\u67E5\u627E\u6587\u4EF6",
2630
+ searchWorkspace: "\u67E5\u627E\u6587\u4EF6",
2631
+ codeSearch: "\u641C\u7D22",
2632
+ exa_search: "\u7F51\u9875\u641C\u7D22",
2633
+ firecrawl_search: "\u7F51\u9875\u641C\u7D22",
2634
+ fetchWebpage: "\u7F51\u9875\u6293\u53D6",
2635
+ firecrawl_scrape: "\u7F51\u9875\u6293\u53D6",
2636
+ execShell: "\u547D\u4EE4",
2637
+ loadSkill: "\u52A0\u8F7D\u6280\u80FD",
2638
+ listAgents: "\u5217\u51FA\u52A9\u624B",
2639
+ readAgent: "\u8BFB\u53D6\u52A9\u624B",
2640
+ startAgentRun: "\u542F\u52A8\u5B50\u4EFB\u52A1",
2641
+ startPreview: "\u542F\u52A8\u9884\u89C8",
2642
+ getPreviewStatus: "\u9884\u89C8\u72B6\u6001",
2643
+ stopPreview: "\u505C\u6B62\u9884\u89C8",
2644
+ releasePreview: "\u91CA\u653E\u9884\u89C8",
2645
+ captureVisualState: "\u622A\u56FE\u68C0\u67E5",
2646
+ appDeploy: "\u90E8\u7F72\u5E94\u7528",
2647
+ setTodoList: "\u66F4\u65B0\u8BA1\u5212",
2648
+ ask_user: "\u63D0\u95EE",
2649
+ runStreamingAgent: "\u8F6C\u4EA4"
2650
+ },
2566
2651
  gemini: {
2567
2652
  title: "\u56FE\u50CF\u751F\u6210",
2568
2653
  count: "\u751F\u6210\u4E86 {{count}} \u5F20\u56FE\u7247"
@@ -2718,6 +2803,14 @@ var chat_locale_default = {
2718
2803
  copyDiagnostics: "\u8907\u88FD\u8A3A\u65B7\u8CC7\u8A0A",
2719
2804
  finishReasonLengthNotice: "\u56DE\u7B54\u56E0\u9054\u5230\u6A21\u578B\u8F38\u51FA\u4E0A\u9650\u88AB\u622A\u65B7",
2720
2805
  retryProgress: "\u81EA\u52D5\u91CD\u8A66 {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
2806
+ sendErrorCard: {
2807
+ title: "\u767C\u9001\u5931\u6557",
2808
+ retry: "\u91CD\u8A66",
2809
+ viewDetails: "\u67E5\u770B\u8A73\u60C5",
2810
+ hideDetails: "\u6536\u8D77\u8A73\u60C5",
2811
+ suggestion: "\u5EFA\u8B70",
2812
+ verifyAccount: "\u9A57\u8B49\u5E33\u865F"
2813
+ },
2721
2814
  copyFailed: "\u8907\u88FD\u5931\u6557",
2722
2815
  copySuccess: "\u8907\u88FD\u6210\u529F",
2723
2816
  createDialog: "\u5275\u5EFA\u5C0D\u8A71",
@@ -2799,6 +2892,8 @@ var chat_locale_default = {
2799
2892
  chooseAnotherModelDialogTitle: "\u9078\u64C7\u5176\u4ED6\u6A21\u578B",
2800
2893
  useThisModelContinue: "\u7528\u9019\u500B\u6A21\u578B\u7E7C\u7E8C",
2801
2894
  switchModelContinueSuccess: "\u5DF2\u5207\u63DB\u6A21\u578B\uFF0C\u4E26\u7E7C\u7E8C\u7576\u524D\u5C0D\u8A71",
2895
+ contextReprocessingNotice: "\u5207\u63DB\u6A21\u578B\u6216\u7DE8\u8F2F\u6B77\u53F2\u8A0A\u606F\u5F8C\uFF0C\u7CFB\u7D71\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u8B80\u53D6\u90E8\u5206\u5C0D\u8A71\u5167\u5BB9\u3002",
2896
+ editingMessageNotice: "\u6B63\u5728\u7DE8\u8F2F\u6B77\u53F2\u8A0A\u606F\uFF0C\u767C\u9001\u5F8C\u5C07\u4E1F\u68C4\u5176\u5F8C\u7684\u8A0A\u606F\u3002\u7CFB\u7D71\u53EF\u80FD\u9700\u8981\u91CD\u65B0\u8B80\u53D6\u90E8\u5206\u5C0D\u8A71\u5167\u5BB9\u3002",
2802
2897
  switchModelContinueFailed: "\u5207\u63DB\u6A21\u578B\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66",
2803
2898
  noAlternativeModels: "\u6C92\u6709\u5176\u4ED6\u53EF\u7528\u6A21\u578B",
2804
2899
  noAvailableAgentMessage: "\u6C92\u6709\u53EF\u7528\u7684\u667A\u80FD\u9AD4\u6D88\u606F",
@@ -2823,6 +2918,7 @@ var chat_locale_default = {
2823
2918
  stopBeforeDelete: "\u8ACB\u7B49\u5F85\u751F\u6210\u505C\u6B62\u5F8C\u518D\u522A\u9664",
2824
2919
  messageQueued: "\u8A0A\u606F\u5DF2\u6392\u968A\uFF0C\u5C07\u5728\u7576\u524D\u8F2A\u6B21\u7D50\u675F\u5F8C\u767C\u9001",
2825
2920
  cannotSendFileDuringLoop: "Agent \u904B\u884C\u4E2D\uFF0C\u542B\u9644\u4EF6\u8A0A\u606F\u8ACB\u7B49\u5F85\u5B8C\u6210\u5F8C\u518D\u767C\u9001",
2921
+ assistantReplyStarting: "\u6B63\u5728\u8655\u7406\u2026",
2826
2922
  queueBadgeLabel: "\u6392\u968A\u8A0A\u606F",
2827
2923
  queueBadgeQueued: "\u6392\u968A\u4E2D",
2828
2924
  queueBadgeTitle: "\u6392\u968A\u8A0A\u606F",
@@ -2922,6 +3018,36 @@ var chat_locale_default = {
2922
3018
  loadSkill: "\u8F09\u5165\u6280\u80FD",
2923
3019
  startAgentRun: "\u555F\u52D5\u5B50\u4EFB\u52D9"
2924
3020
  },
3021
+ toolVerbs: {
3022
+ readFile: "\u8B80\u53D6",
3023
+ readWorkspaceFile: "\u8B80\u53D6",
3024
+ writeFile: "\u5BEB\u5165",
3025
+ writeWorkspaceFile: "\u5BEB\u5165",
3026
+ editFile: "\u4FEE\u6539",
3027
+ replaceWorkspaceText: "\u4FEE\u6539",
3028
+ applyDiff: "\u4FEE\u6539",
3029
+ globFiles: "\u67E5\u627E\u6A94\u6848",
3030
+ searchWorkspace: "\u67E5\u627E\u6A94\u6848",
3031
+ codeSearch: "\u641C\u5C0B",
3032
+ exa_search: "\u7DB2\u9801\u641C\u5C0B",
3033
+ firecrawl_search: "\u7DB2\u9801\u641C\u5C0B",
3034
+ fetchWebpage: "\u7DB2\u9801\u64F7\u53D6",
3035
+ firecrawl_scrape: "\u7DB2\u9801\u64F7\u53D6",
3036
+ execShell: "\u547D\u4EE4",
3037
+ loadSkill: "\u8F09\u5165\u6280\u80FD",
3038
+ listAgents: "\u5217\u51FA\u52A9\u624B",
3039
+ readAgent: "\u8B80\u53D6\u52A9\u624B",
3040
+ startAgentRun: "\u555F\u52D5\u5B50\u4EFB\u52D9",
3041
+ startPreview: "\u555F\u52D5\u9810\u89BD",
3042
+ getPreviewStatus: "\u9810\u89BD\u72C0\u614B",
3043
+ stopPreview: "\u505C\u6B62\u9810\u89BD",
3044
+ releasePreview: "\u91CB\u653E\u9810\u89BD",
3045
+ captureVisualState: "\u622A\u5716\u6AA2\u67E5",
3046
+ appDeploy: "\u90E8\u7F72\u61C9\u7528",
3047
+ setTodoList: "\u66F4\u65B0\u8A08\u756B",
3048
+ ask_user: "\u63D0\u554F",
3049
+ runStreamingAgent: "\u8F49\u4EA4"
3050
+ },
2925
3051
  gemini: {
2926
3052
  title: "\u5716\u50CF\u751F\u6210",
2927
3053
  count: "\u751F\u6210\u4E86 {{count}} \u5F35\u5716\u7247"
@@ -3015,6 +3141,14 @@ var chat_locale_default = {
3015
3141
  copyDiagnostics: "\u8A3A\u65AD\u60C5\u5831\u3092\u30B3\u30D4\u30FC",
3016
3142
  finishReasonLengthNotice: "\u30E2\u30C7\u30EB\u306E\u51FA\u529B\u4E0A\u9650\u306B\u9054\u3057\u305F\u305F\u3081\u3001\u56DE\u7B54\u304C\u9014\u4E2D\u3067\u7D42\u4E86\u3057\u307E\u3057\u305F",
3017
3143
  retryProgress: "\u81EA\u52D5\u30EA\u30C8\u30E9\u30A4 {{attempt}}/{{maxAttempts}} \xB7 {{seconds}}s",
3144
+ sendErrorCard: {
3145
+ title: "\u9001\u4FE1\u5931\u6557",
3146
+ retry: "\u518D\u8A66\u884C",
3147
+ viewDetails: "\u8A73\u7D30\u3092\u8868\u793A",
3148
+ hideDetails: "\u8A73\u7D30\u3092\u6298\u308A\u305F\u305F\u3080",
3149
+ suggestion: "\u63D0\u6848",
3150
+ verifyAccount: "\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D"
3151
+ },
3018
3152
  copyFailed: "\u30B3\u30D4\u30FC\u306B\u5931\u6557\u3057\u307E\u3057\u305F",
3019
3153
  copySuccess: "\u30B3\u30D4\u30FC\u306B\u6210\u529F\u3057\u307E\u3057\u305F",
3020
3154
  createDialog: "\u5BFE\u8A71\u3092\u4F5C\u6210",
@@ -3096,6 +3230,8 @@ var chat_locale_default = {
3096
3230
  chooseAnotherModelDialogTitle: "\u5225\u306E\u30E2\u30C7\u30EB\u3092\u9078\u629E",
3097
3231
  useThisModelContinue: "\u3053\u306E\u30E2\u30C7\u30EB\u3067\u7D9A\u3051\u308B",
3098
3232
  switchModelContinueSuccess: "\u30E2\u30C7\u30EB\u3092\u5207\u308A\u66FF\u3048\u3066\u73FE\u5728\u306E\u4F1A\u8A71\u3092\u7D9A\u3051\u307E\u3057\u305F",
3233
+ contextReprocessingNotice: "\u30E2\u30C7\u30EB\u306E\u5207\u308A\u66FF\u3048\u3084\u904E\u53BB\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u7DE8\u96C6\u5F8C\u306F\u3001\u4F1A\u8A71\u306E\u4E00\u90E8\u3092\u518D\u8AAD\u307F\u8FBC\u307F\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
3234
+ editingMessageNotice: "\u904E\u53BB\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u7DE8\u96C6\u4E2D\u3067\u3059\u3002\u9001\u4FE1\u3059\u308B\u3068\u3001\u305D\u308C\u4EE5\u964D\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u7834\u68C4\u3055\u308C\u307E\u3059\u3002\u4F1A\u8A71\u306E\u4E00\u90E8\u3092\u518D\u8AAD\u307F\u8FBC\u307F\u3059\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
3099
3235
  switchModelContinueFailed: "\u30E2\u30C7\u30EB\u306E\u5207\u308A\u66FF\u3048\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002",
3100
3236
  noAlternativeModels: "\u5229\u7528\u53EF\u80FD\u306A\u4ED6\u306E\u30E2\u30C7\u30EB\u304C\u3042\u308A\u307E\u305B\u3093",
3101
3237
  noAvailableAgentMessage: "\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093",
@@ -3120,6 +3256,7 @@ var chat_locale_default = {
3120
3256
  stopBeforeDelete: "\u751F\u6210\u304C\u505C\u6B62\u3059\u308B\u307E\u3067\u304A\u5F85\u3061\u304F\u3060\u3055\u3044",
3121
3257
  messageQueued: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u30AD\u30E5\u30FC\u306B\u5165\u308C\u307E\u3057\u305F\u3002\u73FE\u5728\u306E\u30BF\u30FC\u30F3\u5F8C\u306B\u9001\u4FE1\u3055\u308C\u307E\u3059",
3122
3258
  cannotSendFileDuringLoop: "Agent \u5B9F\u884C\u4E2D\u3067\u3059\u3002\u6DFB\u4ED8\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u5B8C\u4E86\u5F8C\u306B\u304A\u9001\u308A\u304F\u3060\u3055\u3044",
3259
+ assistantReplyStarting: "\u51E6\u7406\u4E2D\u2026",
3123
3260
  queueBadgeLabel: "\u30AD\u30E5\u30FC\u4E2D\u30E1\u30C3\u30BB\u30FC\u30B8",
3124
3261
  queueBadgeQueued: "\u30AD\u30E5\u30FC\u4E2D",
3125
3262
  queueBadgeTitle: "\u30AD\u30E5\u30FC\u4E2D\u30E1\u30C3\u30BB\u30FC\u30B8",
@@ -3225,6 +3362,36 @@ var chat_locale_default = {
3225
3362
  loadSkill: "\u30B9\u30AD\u30EB\u3092\u8AAD\u307F\u8FBC\u307F",
3226
3363
  startAgentRun: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u5B9F\u884C"
3227
3364
  },
3365
+ toolVerbs: {
3366
+ readFile: "\u8AAD\u307F\u53D6\u308A",
3367
+ readWorkspaceFile: "\u8AAD\u307F\u53D6\u308A",
3368
+ writeFile: "\u66F8\u304D\u8FBC\u307F",
3369
+ writeWorkspaceFile: "\u66F8\u304D\u8FBC\u307F",
3370
+ editFile: "\u7DE8\u96C6",
3371
+ replaceWorkspaceText: "\u7DE8\u96C6",
3372
+ applyDiff: "\u7DE8\u96C6",
3373
+ globFiles: "\u30D5\u30A1\u30A4\u30EB\u691C\u7D22",
3374
+ searchWorkspace: "\u30D5\u30A1\u30A4\u30EB\u691C\u7D22",
3375
+ codeSearch: "\u691C\u7D22",
3376
+ exa_search: "Web\u691C\u7D22",
3377
+ firecrawl_search: "Web\u691C\u7D22",
3378
+ fetchWebpage: "\u30DA\u30FC\u30B8\u53D6\u5F97",
3379
+ firecrawl_scrape: "\u30DA\u30FC\u30B8\u53D6\u5F97",
3380
+ execShell: "\u5B9F\u884C",
3381
+ loadSkill: "\u30B9\u30AD\u30EB\u8AAD\u307F\u8FBC\u307F",
3382
+ listAgents: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u4E00\u89A7",
3383
+ readAgent: "\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u8AAD\u307F\u53D6\u308A",
3384
+ startAgentRun: "\u5B50\u30BF\u30B9\u30AF\u8D77\u52D5",
3385
+ startPreview: "\u30D7\u30EC\u30D3\u30E5\u30FC\u8D77\u52D5",
3386
+ getPreviewStatus: "\u30D7\u30EC\u30D3\u30E5\u30FC\u72B6\u614B",
3387
+ stopPreview: "\u30D7\u30EC\u30D3\u30E5\u30FC\u505C\u6B62",
3388
+ releasePreview: "\u30D7\u30EC\u30D3\u30E5\u30FC\u89E3\u653E",
3389
+ captureVisualState: "\u30B9\u30AF\u30EA\u30FC\u30F3\u30B7\u30E7\u30C3\u30C8",
3390
+ appDeploy: "\u30A2\u30D7\u30EA\u30C7\u30D7\u30ED\u30A4",
3391
+ setTodoList: "\u8A08\u753B\u3092\u66F4\u65B0",
3392
+ ask_user: "\u8CEA\u554F",
3393
+ runStreamingAgent: "\u5F15\u304D\u7D99\u304E"
3394
+ },
3228
3395
  gemini: {
3229
3396
  title: "\u753B\u50CF\u751F\u6210",
3230
3397
  count: "{{count}} \u679A\u306E\u753B\u50CF\u3092\u751F\u6210\u3057\u307E\u3057\u305F"
@@ -9881,7 +10048,6 @@ var appBuilder_locale_default = {
9881
10048
  appEditor_chatMode_heading: "Continue editing with natural language",
9882
10049
  appEditor_chatMode_description: "Tell AI what to change. Best for copy, typography, color, layout, and iterative feature updates.",
9883
10050
  appEditor_chatMode_hint: "If you only want to tweak copy, spacing, colors, or a specific feature, start here.",
9884
- appEditor_chatMode_openAssistant: "Open Assistant",
9885
10051
  appEditor_switchToCode: "Switch to Code Editing",
9886
10052
  appEditor_backToChat: "Back to Chat Editing",
9887
10053
  appEditor_codeMode_title: "Code Editing",
@@ -9987,7 +10153,6 @@ var appBuilder_locale_default = {
9987
10153
  appEditor_chatMode_heading: "\u7528\u81EA\u7136\u8BED\u8A00\u7EE7\u7EED\u4FEE\u6539\u5E94\u7528",
9988
10154
  appEditor_chatMode_description: "\u76F4\u63A5\u544A\u8BC9 AI \u4F60\u60F3\u6539\u4EC0\u4E48\u3002\u9002\u5408\u6539\u6587\u6848\u3001\u5B57\u4F53\u3001\u989C\u8272\u3001\u5E03\u5C40\u548C\u529F\u80FD\u8FED\u4EE3\u3002",
9989
10155
  appEditor_chatMode_hint: "\u5982\u679C\u4F60\u53EA\u662F\u60F3\u6539\u5B57\u4F53\u3001\u989C\u8272\u3001\u95F4\u8DDD\u3001\u6587\u6848\u6216\u67D0\u4E2A\u529F\u80FD\uFF0C\u4F18\u5148\u7528\u8FD9\u4E2A\u6A21\u5F0F\u3002",
9990
- appEditor_chatMode_openAssistant: "\u6253\u5F00\u53F3\u4FA7\u52A9\u624B",
9991
10156
  appEditor_switchToCode: "\u5207\u6362\u5230\u4EE3\u7801\u7F16\u8F91",
9992
10157
  appEditor_backToChat: "\u8FD4\u56DE\u5BF9\u8BDD\u7F16\u8F91",
9993
10158
  appEditor_codeMode_title: "\u4EE3\u7801\u7F16\u8F91",
@@ -10093,7 +10258,6 @@ var appBuilder_locale_default = {
10093
10258
  appEditor_chatMode_heading: "\u7528\u81EA\u7136\u8A9E\u8A00\u7E7C\u7E8C\u4FEE\u6539\u61C9\u7528",
10094
10259
  appEditor_chatMode_description: "\u76F4\u63A5\u544A\u8A34 AI \u4F60\u60F3\u6539\u4EC0\u9EBC\u3002\u9069\u5408\u4FEE\u6539\u6587\u6848\u3001\u5B57\u9AD4\u3001\u984F\u8272\u3001\u7248\u9762\u548C\u529F\u80FD\u8FED\u4EE3\u3002",
10095
10260
  appEditor_chatMode_hint: "\u5982\u679C\u4F60\u53EA\u662F\u60F3\u8ABF\u6574\u5B57\u9AD4\u3001\u984F\u8272\u3001\u9593\u8DDD\u3001\u6587\u6848\u6216\u67D0\u500B\u529F\u80FD\uFF0C\u512A\u5148\u7528\u9019\u500B\u6A21\u5F0F\u3002",
10096
- appEditor_chatMode_openAssistant: "\u6253\u958B\u53F3\u5074\u52A9\u624B",
10097
10261
  appEditor_switchToCode: "\u5207\u63DB\u5230\u7A0B\u5F0F\u78BC\u7DE8\u8F2F",
10098
10262
  appEditor_backToChat: "\u8FD4\u56DE\u5C0D\u8A71\u7DE8\u8F2F",
10099
10263
  appEditor_codeMode_title: "\u7A0B\u5F0F\u78BC\u7DE8\u8F2F",
@@ -10199,7 +10363,6 @@ var appBuilder_locale_default = {
10199
10363
  appEditor_chatMode_heading: "\u81EA\u7136\u8A00\u8A9E\u3067\u7DE8\u96C6\u3092\u7D9A\u3051\u308B",
10200
10364
  appEditor_chatMode_description: "AI \u306B\u4F55\u3092\u5909\u3048\u305F\u3044\u304B\u4F1D\u3048\u3066\u304F\u3060\u3055\u3044\u3002\u6587\u6848\u3001\u6587\u5B57\u30B5\u30A4\u30BA\u3001\u8272\u3001\u30EC\u30A4\u30A2\u30A6\u30C8\u3001\u6A5F\u80FD\u6539\u5584\u306B\u5411\u3044\u3066\u3044\u307E\u3059\u3002",
10201
10365
  appEditor_chatMode_hint: "\u6587\u6848\u3001\u4F59\u767D\u3001\u8272\u3001\u7279\u5B9A\u306E\u6A5F\u80FD\u3060\u3051\u3092\u5909\u3048\u305F\u3044\u306A\u3089\u3001\u307E\u305A\u3053\u3061\u3089\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002",
10202
- appEditor_chatMode_openAssistant: "\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3092\u958B\u304F",
10203
10366
  appEditor_switchToCode: "\u30B3\u30FC\u30C9\u7DE8\u96C6\u306B\u5207\u308A\u66FF\u3048\u308B",
10204
10367
  appEditor_backToChat: "\u4F1A\u8A71\u7DE8\u96C6\u306B\u623B\u308B",
10205
10368
  appEditor_codeMode_title: "\u30B3\u30FC\u30C9\u7DE8\u96C6",
@@ -10376,7 +10539,7 @@ Pro unlocks at ${ADVANCED_FEATURE_MIN_BALANCE} points. No subscription lock-in.`
10376
10539
  },
10377
10540
  {
10378
10541
  q: "Is it more cost-effective than subscriptions?",
10379
- a: "Usually yes. Nolo charges at actual API cost with no subscription premium, so you only pay for real usage."
10542
+ a: "Usually yes. Nolo uses transparent pay-as-you-go pricing based on actual token usage, with no subscription lock-in."
10380
10543
  }
10381
10544
  ]
10382
10545
  }
@@ -10471,7 +10634,7 @@ Pro unlocks at ${ADVANCED_FEATURE_MIN_BALANCE} points. No subscription lock-in.`
10471
10634
  },
10472
10635
  {
10473
10636
  q: "\u6BD4\u5305\u6708\u8BA2\u9605\u66F4\u5212\u7B97\u5417\uFF1F",
10474
- a: "\u901A\u5E38\u66F4\u5212\u7B97\u3002Nolo \u6309\u5B9E\u9645 API \u6210\u672C\u900F\u660E\u8BA1\u8D39\uFF0C\u6CA1\u6709\u8BA2\u9605\u6EA2\u4EF7\uFF0C\u53EA\u4E3A\u5B9E\u9645\u6D88\u8017\u4ED8\u8D39\u3002"
10637
+ a: "\u901A\u5E38\u66F4\u5212\u7B97\u3002Nolo \u6309\u5B9E\u9645 Token \u6D88\u8017\u900F\u660E\u8BA1\u8D39\uFF0C\u65E0\u8BA2\u9605\u7ED1\u5B9A\uFF0C\u53EA\u4E3A\u5B9E\u9645\u7528\u91CF\u4ED8\u8D39\u3002"
10475
10638
  }
10476
10639
  ]
10477
10640
  }
@@ -10682,15 +10845,16 @@ var recharge_locale_default = {
10682
10845
  custom: "Custom",
10683
10846
  recommended: "Popular",
10684
10847
  customPlaceholder: "Enter a whole number between {{min}} and {{max}} points",
10685
- rateHint: "{{min}}-{{max}} points per order (whole numbers). The larger the top-up, the lower the price per point.",
10848
+ rateHint: "{{min}}-{{max}} whole-number credits per order. Each credit has CNY 1 principal; card processing fees are shown separately. Tax and bank FX may be added at checkout.",
10686
10849
  neverExpire: "Points never expire.",
10687
10850
  unlockPro: "{{n}} more points unlocks Pro \u2014 real-time web search and batch file analysis.",
10688
10851
  bestValue: "Best value",
10689
- customAmountHint: "This order costs about {{price}}.",
10852
+ customAmountHint: "Principal CNY {{principalCny}}; payment fee about USD {{feeUsd}}; total USD {{totalUsd}}. FX is the configured checkout rate: CNY {{cnyPerUsd}} per USD. Tax and bank FX may be added at checkout.",
10690
10853
  waffoTrust: "Payments are processed by Waffo Pancake under PCI-DSS. Points are credited automatically once the payment is confirmed.",
10691
10854
  methodLabel: "Payment method",
10692
10855
  methods: {
10693
10856
  waffo: { name: "Global payment", desc: "Visa / MasterCard / Apple Pay" },
10857
+ cnyWechat: { name: "WeChat Pay (CNY)", desc: "Pay in RMB via WeChat; 1 credit = CNY 1 principal + 3.9% processing fee" },
10694
10858
  wechat: { name: "WeChat Pay", desc: "QR transfer" },
10695
10859
  alipay: { name: "Alipay", desc: "QR transfer" },
10696
10860
  cryptoDesc: "{{network}} network"
@@ -10749,15 +10913,16 @@ var recharge_locale_default = {
10749
10913
  custom: "\u81EA\u5B9A\u4E49",
10750
10914
  recommended: "\u63A8\u8350",
10751
10915
  customPlaceholder: "\u8BF7\u8F93\u5165 {{min}}-{{max}} \u4E4B\u95F4\u7684\u6574\u6570\u79EF\u5206",
10752
- rateHint: "\u5355\u7B14 {{min}}-{{max}} \u79EF\u5206\uFF08\u6574\u6570\uFF09\u3002\u5145\u5F97\u8D8A\u591A\uFF0C\u6BCF\u79EF\u5206\u5355\u4EF7\u8D8A\u4F4E\u3002",
10916
+ rateHint: "\u5355\u7B14 {{min}}-{{max}} \u79EF\u5206\uFF08\u6574\u6570\uFF09\u3002\u6BCF\u79EF\u5206\u672C\u91D1\u4E3A\u4EBA\u6C11\u5E01 1 \u5143\uFF1B\u652F\u4ED8\u624B\u7EED\u8D39\u5355\u72EC\u663E\u793A\uFF0C\u7A0E\u8D39\u548C\u94F6\u884C\u6C47\u7387\u53EF\u80FD\u5728\u7ED3\u8D26\u65F6\u53E6\u8BA1\u3002",
10753
10917
  neverExpire: "\u79EF\u5206\u6C38\u4E45\u6709\u6548\uFF0C\u4E0D\u8BBE\u6709\u6548\u671F\u3002",
10754
10918
  unlockPro: "\u518D\u5145 {{n}} \u79EF\u5206\u5373\u53EF\u89E3\u9501\u4E13\u4E1A\u7248\uFF1A\u5B9E\u65F6\u8054\u7F51\u641C\u7D22\u3001\u6279\u91CF\u6587\u4EF6\u5206\u6790\u3002",
10755
10919
  bestValue: "\u6700\u5212\u7B97",
10756
- customAmountHint: "\u672C\u6B21\u7EA6\u9700 {{price}}\u3002",
10920
+ customAmountHint: "\u672C\u91D1\u4EBA\u6C11\u5E01 {{principalCny}}\uFF1B\u652F\u4ED8\u624B\u7EED\u8D39\u7EA6 USD {{feeUsd}}\uFF1B\u5408\u8BA1 USD {{totalUsd}}\u3002\u6C47\u7387\u4E3A\u7ED3\u8D26\u914D\u7F6E\u6C47\u7387\uFF1A1 USD = {{cnyPerUsd}} \u5143\u3002\u7A0E\u8D39\u548C\u94F6\u884C\u6C47\u7387\u53EF\u80FD\u5728\u7ED3\u8D26\u65F6\u53E6\u8BA1\u3002",
10757
10921
  waffoTrust: "\u652F\u4ED8\u7531 Waffo Pancake \u5904\u7406\u5E76\u7B26\u5408 PCI-DSS \u56FD\u9645\u5B89\u5168\u6807\u51C6\uFF0C\u56DE\u8C03\u786E\u8BA4\u540E\u79EF\u5206\u81EA\u52A8\u5230\u8D26\u3002",
10758
10922
  methodLabel: "\u652F\u4ED8\u65B9\u5F0F",
10759
10923
  methods: {
10760
10924
  waffo: { name: "\u5168\u7403\u652F\u4ED8", desc: "Visa / MasterCard / Apple Pay" },
10925
+ cnyWechat: { name: "\u5FAE\u4FE1\u652F\u4ED8\uFF08\u4EBA\u6C11\u5E01\uFF09", desc: "\u4EBA\u6C11\u5E01\u76F4\u4ED8\u5FAE\u4FE1\uFF0C1 \u79EF\u5206 = 1 \u5143\u672C\u91D1 + 3.9% \u652F\u4ED8\u624B\u7EED\u8D39" },
10761
10926
  wechat: { name: "\u5FAE\u4FE1\u652F\u4ED8", desc: "\u626B\u7801\u8F6C\u8D26" },
10762
10927
  alipay: { name: "\u652F\u4ED8\u5B9D", desc: "\u626B\u7801\u8F6C\u8D26" },
10763
10928
  cryptoDesc: "{{network}} \u7F51\u7EDC"
@@ -10816,15 +10981,16 @@ var recharge_locale_default = {
10816
10981
  custom: "\u81EA\u8A02",
10817
10982
  recommended: "\u63A8\u85A6",
10818
10983
  customPlaceholder: "\u8ACB\u8F38\u5165 {{min}}-{{max}} \u4E4B\u9593\u7684\u6574\u6578\u7A4D\u5206",
10819
- rateHint: "\u55AE\u7B46 {{min}}-{{max}} \u7A4D\u5206\uFF08\u6574\u6578\uFF09\u3002\u5132\u503C\u8D8A\u591A\uFF0C\u6BCF\u7A4D\u5206\u55AE\u50F9\u8D8A\u4F4E\u3002",
10984
+ rateHint: "\u55AE\u7B46 {{min}}-{{max}} \u7A4D\u5206\uFF08\u6574\u6578\uFF09\u3002\u6BCF\u7A4D\u5206\u672C\u91D1\u70BA\u4EBA\u6C11\u5E63 1 \u5143\uFF1B\u652F\u4ED8\u624B\u7E8C\u8CBB\u55AE\u7368\u986F\u793A\uFF0C\u7A05\u8CBB\u548C\u9280\u884C\u532F\u7387\u53EF\u80FD\u5728\u7D50\u5E33\u6642\u53E6\u8A08\u3002",
10820
10985
  neverExpire: "\u7A4D\u5206\u6C38\u4E45\u6709\u6548\uFF0C\u4E0D\u8A2D\u6709\u6548\u671F\u9650\u3002",
10821
10986
  unlockPro: "\u518D\u5132\u503C {{n}} \u7A4D\u5206\u5373\u53EF\u89E3\u9396\u5C08\u696D\u7248\uFF1A\u5373\u6642\u806F\u7DB2\u641C\u5C0B\u3001\u6279\u6B21\u6A94\u6848\u5206\u6790\u3002",
10822
10987
  bestValue: "\u6700\u5212\u7B97",
10823
- customAmountHint: "\u672C\u6B21\u7D04\u9700 {{price}}\u3002",
10988
+ customAmountHint: "\u672C\u91D1\u4EBA\u6C11\u5E63 {{principalCny}}\uFF1B\u652F\u4ED8\u624B\u7E8C\u8CBB\u7D04 USD {{feeUsd}}\uFF1B\u5408\u8A08 USD {{totalUsd}}\u3002\u532F\u7387\u70BA\u7D50\u5E33\u914D\u7F6E\u532F\u7387\uFF1A1 USD = {{cnyPerUsd}} \u5143\u3002\u7A05\u8CBB\u548C\u9280\u884C\u532F\u7387\u53EF\u80FD\u5728\u7D50\u5E33\u6642\u53E6\u8A08\u3002",
10824
10989
  waffoTrust: "\u652F\u4ED8\u7531 Waffo Pancake \u8655\u7406\u4E26\u7B26\u5408 PCI-DSS \u570B\u969B\u5B89\u5168\u6A19\u6E96\uFF0C\u56DE\u547C\u78BA\u8A8D\u5F8C\u7A4D\u5206\u81EA\u52D5\u5165\u5E33\u3002",
10825
10990
  methodLabel: "\u652F\u4ED8\u65B9\u5F0F",
10826
10991
  methods: {
10827
10992
  waffo: { name: "\u5168\u7403\u652F\u4ED8", desc: "Visa / MasterCard / Apple Pay" },
10993
+ cnyWechat: { name: "\u5FAE\u4FE1\u652F\u4ED8\uFF08\u4EBA\u6C11\u5E63\uFF09", desc: "\u4EBA\u6C11\u5E63\u76F4\u4ED8\u5FAE\u4FE1\uFF0C1 \u7A4D\u5206 = 1 \u5143\u672C\u91D1 + 3.9% \u652F\u4ED8\u624B\u7E8C\u8CBB" },
10828
10994
  wechat: { name: "\u5FAE\u4FE1\u652F\u4ED8", desc: "\u6383\u78BC\u8F49\u5E33" },
10829
10995
  alipay: { name: "\u652F\u4ED8\u5BF6", desc: "\u6383\u78BC\u8F49\u5E33" },
10830
10996
  cryptoDesc: "{{network}} \u7DB2\u8DEF"
@@ -10883,15 +11049,16 @@ var recharge_locale_default = {
10883
11049
  custom: "\u30AB\u30B9\u30BF\u30E0",
10884
11050
  recommended: "\u304A\u3059\u3059\u3081",
10885
11051
  customPlaceholder: "{{min}}\u301C{{max}} \u306E\u6574\u6570\u30DD\u30A4\u30F3\u30C8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044",
10886
- rateHint: "1\u56DE\u3042\u305F\u308A {{min}}\u301C{{max}} \u30DD\u30A4\u30F3\u30C8\uFF08\u6574\u6570\uFF09\u3002\u91D1\u984D\u304C\u5927\u304D\u3044\u307B\u30691\u30DD\u30A4\u30F3\u30C8\u5358\u4FA1\u304C\u4E0B\u304C\u308A\u307E\u3059\u3002",
11052
+ rateHint: "1\u56DE {{min}}\u301C{{max}}\u30DD\u30A4\u30F3\u30C8\uFF08\u6574\u6570\uFF09\u3002\u5404\u30DD\u30A4\u30F3\u30C8\u306E\u5143\u672C\u306F\u4EBA\u6C11\u51431\u5143\u3067\u3001\u6C7A\u6E08\u624B\u6570\u6599\u306F\u5225\u8868\u793A\u3067\u3059\u3002\u7A0E\u30FB\u9280\u884C\u306E\u70BA\u66FF\u5DEE\u306F\u6C7A\u6E08\u6642\u306B\u52A0\u308F\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
10887
11053
  neverExpire: "\u30DD\u30A4\u30F3\u30C8\u306B\u6709\u52B9\u671F\u9650\u306F\u3042\u308A\u307E\u305B\u3093\u3002",
10888
11054
  unlockPro: "\u3042\u3068 {{n}} \u30DD\u30A4\u30F3\u30C8\u3067\u30D7\u30ED\u7248\uFF08\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u691C\u7D22\u30FB\u4E00\u62EC\u30D5\u30A1\u30A4\u30EB\u5206\u6790\uFF09\u304C\u89E3\u653E\u3055\u308C\u307E\u3059\u3002",
10889
11055
  bestValue: "\u6700\u3082\u304A\u5F97",
10890
- customAmountHint: "\u4ECA\u56DE\u306E\u304A\u652F\u6255\u3044\u306F\u7D04 {{price}} \u3067\u3059\u3002",
11056
+ customAmountHint: "\u5143\u672C\u306F\u4EBA\u6C11\u5143 {{principalCny}}\u3001\u6C7A\u6E08\u624B\u6570\u6599\u306F\u7D04 USD {{feeUsd}}\u3001\u5408\u8A08\u306F USD {{totalUsd}} \u3067\u3059\u3002\u70BA\u66FF\u306F\u8A2D\u5B9A\u6E08\u307F\u306E\u6C7A\u6E08\u63DB\u7B97\u30EC\u30FC\u30C8\uFF081 USD = {{cnyPerUsd}} \u5143\uFF09\u3067\u3059\u3002\u7A0E\u30FB\u9280\u884C\u306E\u70BA\u66FF\u5DEE\u306F\u6C7A\u6E08\u6642\u306B\u52A0\u308F\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002",
10891
11057
  waffoTrust: "\u6C7A\u6E08\u306F Waffo Pancake \u304C PCI-DSS \u6E96\u62E0\u3067\u51E6\u7406\u3057\u307E\u3059\u3002\u78BA\u8A8D\u5F8C\u3001\u30DD\u30A4\u30F3\u30C8\u306F\u81EA\u52D5\u7684\u306B\u53CD\u6620\u3055\u308C\u307E\u3059\u3002",
10892
11058
  methodLabel: "\u6C7A\u6E08\u65B9\u6CD5",
10893
11059
  methods: {
10894
11060
  waffo: { name: "\u30B0\u30ED\u30FC\u30D0\u30EB\u6C7A\u6E08", desc: "Visa / MasterCard / Apple Pay" },
11061
+ cnyWechat: { name: "WeChat Pay\uFF08\u4EBA\u6C11\u5143\uFF09", desc: "\u4EBA\u6C11\u5143\u3067\u305D\u306E\u307E\u307E\u652F\u6255\u3044\u30011\u30DD\u30A4\u30F3\u30C8 = 1\u5143\u306E\u5143\u672C + 3.9% \u306E\u6C7A\u6E08\u624B\u6570\u6599" },
10895
11062
  wechat: { name: "WeChat Pay", desc: "QR\u9001\u91D1" },
10896
11063
  alipay: { name: "Alipay", desc: "QR\u9001\u91D1" },
10897
11064
  cryptoDesc: "{{network}} \u30CD\u30C3\u30C8\u30EF\u30FC\u30AF"
@@ -11486,22 +11653,24 @@ var localFirst_locale_default = {
11486
11653
  localFirst: {
11487
11654
  onboarding: {
11488
11655
  title: "How do you want to start?",
11489
- description: "Get going fastest with Nolo, or connect your own sources locally \u2014 no detours.",
11656
+ description: "Start with Nolo, or connect AI you already use.",
11490
11657
  group: {
11491
- nolo: "Use Nolo \xB7 fastest, zero setup",
11492
- byo: "Use my own \xB7 local direct, no login"
11658
+ nolo: "Use Nolo \xB7 fastest start",
11659
+ byo: "Connect AI I already use \xB7 run locally"
11493
11660
  },
11494
11661
  path: {
11495
- signup: "Sign up and start (includes credits)",
11496
- signupHint: "Create an account to begin \u2014 no model setup required",
11497
- login: "I already have a Nolo account \xB7 Log in",
11498
- loginHint: "Sync your existing assistants and credits",
11499
- membership: "I use an AI membership / subscription",
11500
- membershipHint: "Claude, ChatGPT, Grok, Token Plan\u2026",
11501
- byo: "I have an API Key / local model",
11502
- byoHint: "OpenAI Key, Ollama, LM Studio, compatible endpoints"
11662
+ signup: "Sign up",
11663
+ signupHint: "Includes starter credits; no model setup needed",
11664
+ login: "Already have an account? Log in",
11665
+ loginHint: "Sync your assistants and credits",
11666
+ membership: "I have an AI membership or subscription",
11667
+ membershipHint: "Claude, ChatGPT, Grok, and more",
11668
+ cli: "My local CLI is signed in",
11669
+ cliHint: "Claude Code, Codex, Grok CLI",
11670
+ byo: "I have an API Key or local model",
11671
+ byoHint: "OpenAI, Ollama, LM Studio, compatible endpoints"
11503
11672
  },
11504
- skipCta: "Just look around first",
11673
+ skipCta: "Not now",
11505
11674
  rnTitle: "Create your local Agent first",
11506
11675
  rnDescription: "Create and run Agents on this device without signing in to Nolo first. Sign-in is only for account content, sync, and cloud features.",
11507
11676
  createCta: "Create local Agent",
@@ -11561,22 +11730,24 @@ var localFirst_locale_default = {
11561
11730
  localFirst: {
11562
11731
  onboarding: {
11563
11732
  title: "\u600E\u4E48\u5F00\u59CB\uFF1F",
11564
- description: "\u7528 Nolo \u6700\u5FEB\u4E0A\u624B\uFF0C\u6216\u672C\u5730\u76F4\u8FDE\u81EA\u5DF1\u7684\u6E90\u2014\u2014\u90FD\u4E0D\u7528\u7ED5\u5F2F\u3002",
11733
+ description: "\u7528 Nolo \u76F4\u63A5\u5F00\u59CB\uFF0C\u6216\u8FDE\u63A5\u4F60\u5DF2\u7ECF\u5728\u7528\u7684 AI\u3002",
11565
11734
  group: {
11566
- nolo: "\u7528 Nolo \xB7 \u96F6\u914D\u7F6E\u6700\u5FEB",
11567
- byo: "\u7528\u6211\u81EA\u5DF1\u7684 \xB7 \u672C\u5730\u76F4\u8FDE\u514D\u767B\u5F55"
11735
+ nolo: "\u7528 Nolo \xB7 \u6700\u5FEB\u5F00\u59CB",
11736
+ byo: "\u8FDE\u63A5\u6211\u5DF2\u6709\u7684 AI \xB7 \u672C\u5730\u4F7F\u7528"
11568
11737
  },
11569
11738
  path: {
11570
- signup: "\u6CE8\u518C\u5373\u7528\uFF08\u9001\u989D\u5EA6\uFF09",
11571
- signupHint: "\u521B\u5EFA\u8D26\u53F7\u5373\u53EF\u5F00\u59CB\uFF0C\u65E0\u9700\u5148\u914D\u6A21\u578B",
11572
- login: "\u5DF2\u6709 Nolo \u8D26\u53F7 \xB7 \u767B\u5F55",
11573
- loginHint: "\u540C\u6B65\u4F60\u5DF2\u6709\u7684\u52A9\u624B\u4E0E\u989D\u5EA6",
11574
- membership: "\u6211\u5728\u7528\u67D0\u5BB6 AI \u4F1A\u5458/\u8BA2\u9605",
11575
- membershipHint: "Claude\u3001ChatGPT\u3001Grok\u3001Token Plan\u2026",
11576
- byo: "\u6211\u6709 API Key / \u672C\u5730\u6A21\u578B",
11577
- byoHint: "OpenAI Key\u3001Ollama\u3001LM Studio\u3001\u517C\u5BB9\u7AEF\u70B9"
11739
+ signup: "\u6CE8\u518C\u5373\u7528",
11740
+ signupHint: "\u65B0\u8D26\u53F7\u6709\u514D\u8D39\u989D\u5EA6\uFF0C\u65E0\u9700\u914D\u7F6E\u6A21\u578B",
11741
+ login: "\u5DF2\u6709\u8D26\u53F7\uFF0C\u767B\u5F55 Nolo",
11742
+ loginHint: "\u540C\u6B65\u5DF2\u6709\u52A9\u624B\u548C\u989D\u5EA6",
11743
+ membership: "\u6211\u6709 AI \u4F1A\u5458\u6216\u8BA2\u9605",
11744
+ membershipHint: "Claude\u3001ChatGPT\u3001Grok \u7B49",
11745
+ cli: "\u672C\u673A CLI \u5DF2\u767B\u5F55",
11746
+ cliHint: "Claude Code\u3001Codex\u3001Grok CLI",
11747
+ byo: "\u6211\u6709 API Key \u6216\u672C\u5730\u6A21\u578B",
11748
+ byoHint: "OpenAI\u3001Ollama\u3001LM Studio\u3001\u517C\u5BB9\u7AEF\u70B9"
11578
11749
  },
11579
- skipCta: "\u5148\u968F\u4FBF\u770B\u770B",
11750
+ skipCta: "\u6682\u65F6\u8DF3\u8FC7",
11580
11751
  rnTitle: "\u5148\u521B\u5EFA\u4F60\u7684\u672C\u5730 Agent",
11581
11752
  rnDescription: "\u5728\u8FD9\u53F0\u8BBE\u5907\u4E0A\u76F4\u63A5\u521B\u5EFA\u5E76\u8FD0\u884C Agent\uFF0C\u65E0\u9700\u5148\u767B\u5F55 Nolo\u3002\u767B\u5F55\u4EC5\u7528\u4E8E\u8D26\u53F7\u5185\u5BB9\u3001\u540C\u6B65\u4E0E\u4E91\u7AEF\u80FD\u529B\u3002",
11582
11753
  createCta: "\u521B\u5EFA\u672C\u5730 Agent",
@@ -11636,22 +11807,24 @@ var localFirst_locale_default = {
11636
11807
  localFirst: {
11637
11808
  onboarding: {
11638
11809
  title: "\u600E\u9EBC\u958B\u59CB\uFF1F",
11639
- description: "\u7528 Nolo \u6700\u5FEB\u4E0A\u624B\uFF0C\u6216\u672C\u6A5F\u76F4\u9023\u81EA\u5DF1\u7684\u4F86\u6E90\u2014\u2014\u90FD\u4E0D\u7528\u7E5E\u5F4E\u3002",
11810
+ description: "\u7528 Nolo \u76F4\u63A5\u958B\u59CB\uFF0C\u6216\u9023\u63A5\u4F60\u5DF2\u7D93\u5728\u7528\u7684 AI\u3002",
11640
11811
  group: {
11641
- nolo: "\u7528 Nolo \xB7 \u96F6\u8A2D\u5B9A\u6700\u5FEB",
11642
- byo: "\u7528\u6211\u81EA\u5DF1\u7684 \xB7 \u672C\u6A5F\u76F4\u9023\u514D\u767B\u5165"
11812
+ nolo: "\u7528 Nolo \xB7 \u6700\u5FEB\u958B\u59CB",
11813
+ byo: "\u9023\u63A5\u6211\u5DF2\u6709\u7684 AI \xB7 \u672C\u6A5F\u4F7F\u7528"
11643
11814
  },
11644
11815
  path: {
11645
- signup: "\u8A3B\u518A\u5373\u7528\uFF08\u9001\u984D\u5EA6\uFF09",
11646
- signupHint: "\u5EFA\u7ACB\u5E33\u865F\u5373\u53EF\u958B\u59CB\uFF0C\u7121\u9700\u5148\u8A2D\u5B9A\u6A21\u578B",
11647
- login: "\u5DF2\u6709 Nolo \u5E33\u865F \xB7 \u767B\u5165",
11648
- loginHint: "\u540C\u6B65\u4F60\u65E2\u6709\u7684\u52A9\u624B\u8207\u984D\u5EA6",
11649
- membership: "\u6211\u5728\u7528\u67D0\u5BB6 AI \u6703\u54E1/\u8A02\u95B1",
11650
- membershipHint: "Claude\u3001ChatGPT\u3001Grok\u3001Token Plan\u2026",
11651
- byo: "\u6211\u6709 API Key / \u672C\u6A5F\u6A21\u578B",
11652
- byoHint: "OpenAI Key\u3001Ollama\u3001LM Studio\u3001\u76F8\u5BB9\u7AEF\u9EDE"
11816
+ signup: "\u8A3B\u518A\u5373\u7528",
11817
+ signupHint: "\u65B0\u5E33\u865F\u6709\u514D\u8CBB\u984D\u5EA6\uFF0C\u7121\u9700\u8A2D\u5B9A\u6A21\u578B",
11818
+ login: "\u5DF2\u6709\u5E33\u865F\uFF0C\u767B\u5165 Nolo",
11819
+ loginHint: "\u540C\u6B65\u5DF2\u6709\u52A9\u624B\u548C\u984D\u5EA6",
11820
+ membership: "\u6211\u6709 AI \u6703\u54E1\u6216\u8A02\u95B1",
11821
+ membershipHint: "Claude\u3001ChatGPT\u3001Grok \u7B49",
11822
+ cli: "\u672C\u6A5F CLI \u5DF2\u767B\u5165",
11823
+ cliHint: "Claude Code\u3001Codex\u3001Grok CLI",
11824
+ byo: "\u6211\u6709 API Key \u6216\u672C\u6A5F\u6A21\u578B",
11825
+ byoHint: "OpenAI\u3001Ollama\u3001LM Studio\u3001\u76F8\u5BB9\u7AEF\u9EDE"
11653
11826
  },
11654
- skipCta: "\u5148\u96A8\u4FBF\u770B\u770B",
11827
+ skipCta: "\u66AB\u6642\u8DF3\u904E",
11655
11828
  rnTitle: "\u5148\u5EFA\u7ACB\u4F60\u7684\u672C\u6A5F Agent",
11656
11829
  rnDescription: "\u5728\u9019\u53F0\u88DD\u7F6E\u4E0A\u76F4\u63A5\u5EFA\u7ACB\u4E26\u57F7\u884C Agent\uFF0C\u7121\u9700\u5148\u767B\u5165 Nolo\u3002\u767B\u5165\u50C5\u7528\u65BC\u5E33\u865F\u5167\u5BB9\u3001\u540C\u6B65\u8207\u96F2\u7AEF\u80FD\u529B\u3002",
11657
11830
  createCta: "\u5EFA\u7ACB\u672C\u6A5F Agent",
@@ -11711,22 +11884,24 @@ var localFirst_locale_default = {
11711
11884
  localFirst: {
11712
11885
  onboarding: {
11713
11886
  title: "\u3069\u3046\u59CB\u3081\u307E\u3059\u304B\uFF1F",
11714
- description: "Nolo \u3067\u6700\u901F\u30B9\u30BF\u30FC\u30C8\u3059\u308B\u304B\u3001\u81EA\u5206\u306E\u30BD\u30FC\u30B9\u3092\u30ED\u30FC\u30AB\u30EB\u76F4\u7D50\u2014\u2014\u9060\u56DE\u308A\u306A\u3057\u3002",
11887
+ description: "Nolo \u3067\u59CB\u3081\u308B\u304B\u3001\u3059\u3067\u306B\u4F7F\u3063\u3066\u3044\u308B AI \u3092\u63A5\u7D9A\u3057\u307E\u3059\u3002",
11715
11888
  group: {
11716
- nolo: "Nolo \u3092\u4F7F\u3046 \xB7 \u8A2D\u5B9A\u30BC\u30ED\u3067\u6700\u901F",
11717
- byo: "\u81EA\u5206\u306E\u3082\u306E\u3092\u4F7F\u3046 \xB7 \u30ED\u30FC\u30AB\u30EB\u76F4\u7D50\u30FB\u30ED\u30B0\u30A4\u30F3\u4E0D\u8981"
11889
+ nolo: "Nolo \u3092\u4F7F\u3046 \xB7 \u6700\u77ED\u3067\u958B\u59CB",
11890
+ byo: "\u65E2\u5B58\u306E AI \u3092\u63A5\u7D9A \xB7 \u30ED\u30FC\u30AB\u30EB\u3067\u4F7F\u7528"
11718
11891
  },
11719
11892
  path: {
11720
- signup: "\u767B\u9332\u3057\u3066\u3059\u3050\u4F7F\u3046\uFF08\u30AF\u30EC\u30B8\u30C3\u30C8\u4ED8\u304D\uFF09",
11721
- signupHint: "\u30A2\u30AB\u30A6\u30F3\u30C8\u4F5C\u6210\u3067\u3059\u3050\u958B\u59CB\u3002\u30E2\u30C7\u30EB\u8A2D\u5B9A\u306F\u4E0D\u8981",
11722
- login: "Nolo \u30A2\u30AB\u30A6\u30F3\u30C8\u3042\u308A \xB7 \u30ED\u30B0\u30A4\u30F3",
11893
+ signup: "\u767B\u9332\u3057\u3066\u59CB\u3081\u308B",
11894
+ signupHint: "\u7121\u6599\u30AF\u30EC\u30B8\u30C3\u30C8\u4ED8\u304D\u3002\u30E2\u30C7\u30EB\u8A2D\u5B9A\u306F\u4E0D\u8981",
11895
+ login: "\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u304A\u6301\u3061\u306E\u65B9 \xB7 \u30ED\u30B0\u30A4\u30F3",
11723
11896
  loginHint: "\u65E2\u5B58\u306E\u30A2\u30B7\u30B9\u30BF\u30F3\u30C8\u3068\u30AF\u30EC\u30B8\u30C3\u30C8\u3092\u540C\u671F",
11724
- membership: "AI \u4F1A\u54E1 / \u30B5\u30D6\u30B9\u30AF\u3092\u4F7F\u3063\u3066\u3044\u308B",
11725
- membershipHint: "Claude\u3001ChatGPT\u3001Grok\u3001Token Plan\u2026",
11726
- byo: "API \u30AD\u30FC / \u30ED\u30FC\u30AB\u30EB\u30E2\u30C7\u30EB\u304C\u3042\u308B",
11727
- byoHint: "OpenAI Key\u3001Ollama\u3001LM Studio\u3001\u4E92\u63DB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8"
11897
+ membership: "AI \u4F1A\u54E1\u30FB\u30B5\u30D6\u30B9\u30AF\u3092\u4F7F\u3046",
11898
+ membershipHint: "Claude\u3001ChatGPT\u3001Grok \u306A\u3069",
11899
+ cli: "\u30ED\u30FC\u30AB\u30EB CLI \u3067\u30ED\u30B0\u30A4\u30F3\u6E08\u307F",
11900
+ cliHint: "Claude Code\u3001Codex\u3001Grok CLI",
11901
+ byo: "API \u30AD\u30FC\u30FB\u30ED\u30FC\u30AB\u30EB\u30E2\u30C7\u30EB\u3092\u4F7F\u3046",
11902
+ byoHint: "OpenAI\u3001Ollama\u3001LM Studio\u3001\u4E92\u63DB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8"
11728
11903
  },
11729
- skipCta: "\u307E\u305A\u306F\u898B\u3066\u307F\u308B",
11904
+ skipCta: "\u4ECA\u306F\u30B9\u30AD\u30C3\u30D7",
11730
11905
  rnTitle: "\u307E\u305A\u30ED\u30FC\u30AB\u30EB Agent \u3092\u4F5C\u6210",
11731
11906
  rnDescription: "\u3053\u306E\u7AEF\u672B\u4E0A\u3067 Agent \u3092\u4F5C\u6210\u30FB\u5B9F\u884C\u3067\u304D\u307E\u3059\u3002Nolo \u3078\u306E\u30ED\u30B0\u30A4\u30F3\u306F\u4E0D\u8981\u3067\u3059\u3002\u30ED\u30B0\u30A4\u30F3\u306F\u30A2\u30AB\u30A6\u30F3\u30C8\u5185\u5BB9\u30FB\u540C\u671F\u30FB\u30AF\u30E9\u30A6\u30C9\u6A5F\u80FD\u7528\u3067\u3059\u3002",
11732
11907
  createCta: "\u30ED\u30FC\u30AB\u30EB Agent \u3092\u4F5C\u6210",
@@ -11882,147 +12057,518 @@ var i18nConfig = {
11882
12057
  };
11883
12058
 
11884
12059
  // packages/app/i18n/index.ts
11885
- instance.use(initReactI18next).init({
11886
- ...i18nConfig,
11887
- lng: "zh-CN" /* ZH_CN */,
11888
- // 💡 强制设置为中文 (简体)
11889
- fallbackLng: "zh-CN" /* ZH_CN */,
11890
- // 💡 失败回退也设为中文
11891
- compatibilityJSON: "v3"
11892
- // Fixes "Intl not found" error on Android/RN
11893
- });
12060
+ instance.use(initReactI18next);
12061
+ if (!instance.isInitialized) {
12062
+ instance.init({
12063
+ ...i18nConfig,
12064
+ lng: "zh-CN" /* ZH_CN */,
12065
+ fallbackLng: "zh-CN" /* ZH_CN */,
12066
+ compatibilityJSON: "v3"
12067
+ // Fixes "Intl not found" error on Android/RN
12068
+ });
12069
+ }
11894
12070
  var i18n_default = instance;
11895
12071
 
11896
- // packages/ai/tools/agent/createAgentTool.ts
11897
- var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
11898
- version: 1,
11899
- runtimeTools: ["execShell"],
11900
- workspace: { mode: "lease" }
11901
- };
11902
- var findModelConfig = async (modelName, provider) => {
11903
- const { ALL_MODELS } = await import("./models-JVKUEER5.js");
11904
- const name = toTrimmedString(modelName);
11905
- const prov = toTrimmedString(provider ?? "");
11906
- if (!name) return null;
11907
- if (prov) {
11908
- const exact = ALL_MODELS.find(
11909
- (m) => m.name === name && m.provider === prov
11910
- );
11911
- if (exact) return exact;
11912
- }
11913
- const matches = ALL_MODELS.filter((m) => m.name === name);
11914
- if (matches.length === 1) return matches[0];
11915
- if (matches.length > 1 && !prov) {
11916
- console.warn(
11917
- "[createAgentTool] findModelConfig: duplicate model names without provider",
11918
- {
11919
- modelName: name,
11920
- providers: matches.map((m) => m.provider)
11921
- }
11922
- );
12072
+ // packages/ai/tools/toolResultError.ts
12073
+ var ToolResultError = class extends Error {
12074
+ code;
12075
+ rawData;
12076
+ displayData;
12077
+ retryable;
12078
+ constructor(message, options) {
12079
+ super(message);
12080
+ this.name = "ToolResultError";
12081
+ this.code = options?.code;
12082
+ this.rawData = options?.rawData;
12083
+ this.displayData = options?.displayData;
12084
+ this.retryable = options?.retryable;
11923
12085
  }
11924
- return null;
11925
12086
  };
11926
- var createAgentToolFunctionSchema = {
11927
- name: "createAgent",
11928
- description: i18n_default.t("tools.createAgent.description"),
11929
- parameters: {
11930
- type: "object",
11931
- properties: {
11932
- name: {
11933
- type: "string",
11934
- description: i18n_default.t("tools.createAgent.params.name")
11935
- },
11936
- model: {
11937
- type: "string",
11938
- description: i18n_default.t("tools.createAgent.params.model")
11939
- },
11940
- provider: {
11941
- type: "string",
11942
- description: i18n_default.t("tools.createAgent.params.provider")
11943
- },
11944
- prompt: {
11945
- type: "string",
11946
- description: i18n_default.t("tools.createAgent.params.prompt")
11947
- },
11948
- introduction: {
11949
- type: "string",
11950
- description: i18n_default.t("tools.createAgent.params.introduction")
11951
- },
11952
- greeting: {
11953
- description: i18n_default.t("tools.createAgent.params.greeting.desc"),
11954
- anyOf: [
11955
- {
11956
- type: "string",
11957
- description: i18n_default.t(
11958
- "tools.createAgent.params.greeting.stringDesc"
11959
- )
11960
- },
11961
- {
11962
- type: "object",
11963
- description: i18n_default.t(
11964
- "tools.createAgent.params.greeting.objectDesc"
11965
- ),
11966
- properties: {
11967
- text: {
11968
- type: "string",
11969
- description: i18n_default.t(
11970
- "tools.createAgent.params.greeting.texts.text"
11971
- )
12087
+ var getToolResultErrorData = (error) => {
12088
+ if (!error || typeof error !== "object") return null;
12089
+ const candidate = error;
12090
+ return {
12091
+ rawData: candidate.rawData,
12092
+ displayData: candidate.displayData,
12093
+ code: candidate.code,
12094
+ retryable: candidate.retryable,
12095
+ message: candidate.message
12096
+ };
12097
+ };
12098
+
12099
+ // packages/ai/tools/agent/agentUpdateShared.ts
12100
+ var agentUpdateFieldSchemaProperties = {
12101
+ name: { type: "string", description: "Agent \u7684\u65B0\u540D\u79F0\u3002" },
12102
+ handle: { type: "string", description: "\u7A33\u5B9A\u7684\u673A\u5668\u8C03\u7528\u540D\uFF0C\u4F8B\u5982 pm\u3001fullstack\u3001reviewer\u3002" },
12103
+ model: { type: "string", description: "\u6A21\u578B\u540D\u79F0\uFF0C\u4F8B\u5982 'gpt-4o-mini'\u3002" },
12104
+ provider: { type: "string", description: "\u6A21\u578B\u63D0\u4F9B\u65B9\uFF0C\u4F8B\u5982 'openai'\u3002\u82E5\u4E0D\u786E\u5B9A\u53EF\u7559\u7A7A\u3002" },
12105
+ prompt: { type: "string", description: "\u7CFB\u7EDF\u63D0\u793A\u8BCD\uFF0C\u63CF\u8FF0 Agent \u7684\u89D2\u8272\u548C\u884C\u4E3A\u3002" },
12106
+ introduction: { type: "string", description: "\u9762\u5411\u7EC8\u7AEF\u7528\u6237\u7684\u7B80\u4ECB\u6587\u6848\u3002" },
12107
+ greeting: {
12108
+ description: "\u6B22\u8FCE\u914D\u7F6E\uFF1A\u7EAF\u6587\u672C\u5B57\u7B26\u4E32\uFF0C\u6216\u5305\u542B\u6B22\u8FCE\u8BED + \u83DC\u5355\u7684\u5BF9\u8C61\u3002",
12109
+ anyOf: [
12110
+ { type: "string", description: "\u7EAF\u6587\u672C\u6B22\u8FCE\u8BED\u3002" },
12111
+ {
12112
+ type: "object",
12113
+ description: "\u7ED3\u6784\u5316\u6B22\u8FCE\u914D\u7F6E\u3002",
12114
+ properties: {
12115
+ text: { type: "string", description: "\u6B22\u8FCE\u8BED\u6587\u672C\u3002" },
12116
+ menu: {
12117
+ type: "array",
12118
+ description: "\u5FEB\u6377\u83DC\u5355\u9879\u3002",
12119
+ items: {
12120
+ type: "object",
12121
+ properties: {
12122
+ id: { type: "string", description: "\u83DC\u5355\u9879\u552F\u4E00\u6807\u8BC6\u3002" },
12123
+ label: { type: "string", description: "\u6309\u94AE\u663E\u793A\u6587\u6848\u3002" },
12124
+ userMessage: { type: "string", description: "\u70B9\u51FB\u540E\u53D1\u9001\u7ED9 Agent \u7684\u6D88\u606F\u3002" }
11972
12125
  },
11973
- menu: {
11974
- type: "array",
11975
- description: i18n_default.t(
11976
- "tools.createAgent.params.greeting.menu.desc"
11977
- ),
11978
- items: {
11979
- type: "object",
11980
- properties: {
11981
- id: {
11982
- type: "string",
11983
- description: i18n_default.t(
11984
- "tools.createAgent.params.greeting.menu.id"
11985
- )
11986
- },
11987
- label: {
11988
- type: "string",
11989
- description: i18n_default.t(
11990
- "tools.createAgent.params.greeting.menu.label"
11991
- )
11992
- },
11993
- userMessage: {
11994
- type: "string",
11995
- description: i18n_default.t(
11996
- "tools.createAgent.params.greeting.menu.userMessage"
11997
- )
11998
- }
11999
- },
12000
- required: ["id", "label"]
12001
- }
12002
- }
12126
+ required: ["id", "label"]
12003
12127
  }
12004
12128
  }
12005
- ]
12006
- },
12007
- isPublic: {
12008
- type: "boolean",
12009
- description: i18n_default.t("tools.createAgent.params.isPublic")
12010
- },
12011
- allowFork: {
12012
- type: "boolean",
12013
- description: i18n_default.t("tools.createAgent.params.allowFork")
12014
- },
12015
- tags: {
12016
- type: "array",
12017
- items: { type: "string" },
12018
- description: i18n_default.t("tools.createAgent.params.tags")
12019
- },
12020
- tools: {
12021
- type: "array",
12022
- items: { type: "string" },
12023
- description: i18n_default.t("tools.createAgent.params.tools")
12024
- },
12025
- disabledTools: {
12129
+ }
12130
+ }
12131
+ ]
12132
+ },
12133
+ isPublic: { type: "boolean", description: "\u662F\u5426\u516C\u5F00\u5230\u5E94\u7528\u5E02\u573A\u3002" },
12134
+ allowFork: { type: "boolean", description: "\u662F\u5426\u5141\u8BB8\u5176\u4ED6\u7528\u6237\u628A\u8FD9\u4E2A AI \u590D\u5236\u4E00\u4EFD\u5230\u81EA\u5DF1\u7684\u7A7A\u95F4\u3002" },
12135
+ tags: {
12136
+ type: "array",
12137
+ items: { type: "string" },
12138
+ description: "\u6807\u7B7E\u5217\u8868\uFF1B\u4F20\u7A7A\u6570\u7EC4 [] \u8868\u793A\u6E05\u7A7A\u3002"
12139
+ },
12140
+ tools: {
12141
+ type: "array",
12142
+ items: { type: "string" },
12143
+ description: "\u5141\u8BB8\u8C03\u7528\u7684\u5DE5\u5177\u540D\u79F0\u6570\u7EC4\u3002"
12144
+ },
12145
+ disabledTools: {
12146
+ type: "array",
12147
+ items: { type: "string" },
12148
+ description: "\u660E\u786E\u7981\u7528\u7684\u9ED8\u8BA4\u5DE5\u5177\u540D\u79F0\u6570\u7EC4\uFF08\u5982 exa_search\u3001fetchWebpage\uFF09\u3002\u8FD9\u4E9B\u5DE5\u5177\u5373\u4F7F\u88AB\u5E73\u53F0\u9ED8\u8BA4\u6CE8\u5165\u4E5F\u4E0D\u4F1A\u53D1\u7ED9\u6A21\u578B\uFF0C\u4ECE\u6839\u4E0A\u8282\u7701 token\u3002"
12149
+ },
12150
+ enabledPacks: {
12151
+ type: "array",
12152
+ items: { type: "string", enum: CAPABILITY_PACKS.map((p) => p.id) },
12153
+ description: '\u542F\u7528\u7684\u80FD\u529B\u5305 ID \u6570\u7EC4\u3002\u80FD\u529B\u5305\u662F\u9762\u5411\u7528\u6237\u7684\u5DE5\u5177\u5206\u7EC4\uFF0C\u4E00\u4E2A\u5305\u5305\u542B\u4E00\u7EC4\u534F\u540C\u5DE5\u5177\u3002\u5982 ["web-search"] \u5F00\u542F\u8054\u7F51\u641C\u7D22\u3002'
12154
+ },
12155
+ references: {
12156
+ type: "array",
12157
+ description: "\u5F15\u7528\u96C6\u5408\uFF1B\u4F20\u7A7A\u6570\u7EC4 [] \u8868\u793A\u6E05\u7A7A\u3002",
12158
+ items: {
12159
+ type: "object",
12160
+ properties: {
12161
+ dbKey: { type: "string", description: "\u5F15\u7528\u6761\u76EE\u7684\u6570\u636E\u5E93\u952E\u3002" },
12162
+ title: { type: "string", description: "\u5F15\u7528\u5728 UI \u4E2D\u5C55\u793A\u7684\u6807\u9898\u3002" },
12163
+ type: {
12164
+ type: "string",
12165
+ enum: ["knowledge", "instruction", "page"],
12166
+ description: "\u5F15\u7528\u7C7B\u578B\u3002"
12167
+ }
12168
+ },
12169
+ required: ["dbKey"]
12170
+ }
12171
+ },
12172
+ temperature: { type: "number", description: "\u91C7\u6837\u6E29\u5EA6\uFF0C0~2\u3002" },
12173
+ top_p: { type: "number", description: "nucleus sampling\uFF0C0~1\u3002" },
12174
+ frequency_penalty: { type: "number", description: "\u91CD\u590D\u60E9\u7F5A\uFF0C-2~2\u3002" },
12175
+ presence_penalty: { type: "number", description: "\u65B0\u8BDD\u9898\u6FC0\u52B1\uFF0C-2~2\u3002" },
12176
+ max_tokens: { type: "number", description: "\u5355\u6B21\u56DE\u7B54\u6700\u5927 token \u6570\u3002" },
12177
+ reasoning_effort: {
12178
+ type: "string",
12179
+ enum: ["low", "medium", "high"],
12180
+ description: "\u63A8\u7406\u5F3A\u5EA6\u3002"
12181
+ }
12182
+ };
12183
+ var validateUpdateArgs = (userId, options) => {
12184
+ if (!userId) throw new Error("\u66F4\u65B0 Agent \u5931\u8D25\uFF1A\u5F53\u524D\u672A\u767B\u5F55\u6216\u7F3A\u5C11 userId\u3002");
12185
+ if (options?.requireAgentId && !options?.agentId?.trim()) {
12186
+ throw new Error("\u66F4\u65B0 Agent \u5931\u8D25\uFF1A\u5FC5\u987B\u63D0\u4F9B\u975E\u7A7A\u7684 agentId\u3002");
12187
+ }
12188
+ };
12189
+ var fetchAgentByDbKey = async (dbKey, db) => {
12190
+ if (!db) return void 0;
12191
+ return db.get(dbKey).catch(() => void 0);
12192
+ };
12193
+ var extractAgentId = (dbKey) => {
12194
+ const parts = dbKey.trim().split("-");
12195
+ return parts.length >= 3 ? parts.slice(2).join("-") : dbKey.trim();
12196
+ };
12197
+ var buildPatch = (args) => {
12198
+ const patch2 = {};
12199
+ const {
12200
+ name,
12201
+ handle,
12202
+ model,
12203
+ provider,
12204
+ prompt,
12205
+ introduction,
12206
+ greeting,
12207
+ isPublic,
12208
+ allowFork,
12209
+ tags,
12210
+ tools,
12211
+ disabledTools,
12212
+ enabledPacks,
12213
+ references,
12214
+ temperature,
12215
+ top_p,
12216
+ frequency_penalty,
12217
+ presence_penalty,
12218
+ max_tokens,
12219
+ reasoning_effort
12220
+ } = args;
12221
+ if (name !== void 0) patch2.name = String(name).trim();
12222
+ if (handle !== void 0) patch2.handle = String(handle).trim();
12223
+ if (model !== void 0) patch2.model = String(model).trim();
12224
+ if (provider !== void 0) patch2.provider = String(provider).trim();
12225
+ if (prompt !== void 0) patch2.prompt = prompt;
12226
+ if (introduction !== void 0) patch2.introduction = introduction;
12227
+ if (greeting !== void 0) patch2.greeting = greeting;
12228
+ if (isPublic !== void 0) patch2.isPublic = isPublic;
12229
+ if (allowFork !== void 0) patch2.allowFork = allowFork;
12230
+ if (tags !== void 0) patch2.tags = tags;
12231
+ if (tools !== void 0) patch2.tools = tools ?? [];
12232
+ if (disabledTools !== void 0) patch2.disabledTools = disabledTools ?? [];
12233
+ if (enabledPacks !== void 0) patch2.enabledPacks = enabledPacks ?? [];
12234
+ if (references !== void 0) patch2.references = references;
12235
+ if (temperature !== void 0) patch2.temperature = temperature;
12236
+ if (top_p !== void 0) patch2.top_p = top_p;
12237
+ if (frequency_penalty !== void 0) patch2.frequency_penalty = frequency_penalty;
12238
+ if (presence_penalty !== void 0) patch2.presence_penalty = presence_penalty;
12239
+ if (max_tokens !== void 0) patch2.max_tokens = max_tokens;
12240
+ if (reasoning_effort !== void 0) patch2.reasoning_effort = reasoning_effort;
12241
+ return patch2;
12242
+ };
12243
+ var AGENT_UPDATE_FIELD_NAME_SET = new Set(AGENT_UPDATE_FIELD_NAMES);
12244
+ var listRequestedFields = (args) => Object.keys(args).filter(
12245
+ (key) => key !== "agentId" && key !== "__confirmedSelfEvolution" && AGENT_UPDATE_FIELD_NAME_SET.has(key) && args[key] !== void 0
12246
+ );
12247
+ var assertAgentUpdateConfirmation = ({
12248
+ scope,
12249
+ requestedFields,
12250
+ confirmed,
12251
+ autoApprovedFields = []
12252
+ }) => {
12253
+ if (requestedFields.length === 0 || confirmed) return;
12254
+ const allowedFields = scope === "self" ? requestedFields.filter((field) => autoApprovedFields.includes(field)) : [];
12255
+ const blockedFields = scope === "self" ? requestedFields.filter((field) => !autoApprovedFields.includes(field)) : requestedFields;
12256
+ if (blockedFields.length === 0) return;
12257
+ const displayPrefix = scope === "self" ? "updateSelf" : "updateAgent";
12258
+ throw new ToolResultError(
12259
+ scope === "self" ? `\u5F53\u524D\u81EA\u6211\u66F4\u65B0\u5B57\u6BB5\u9700\u8981\u5148\u786E\u8BA4\uFF1A${blockedFields.join(", ")}` : `\u5F53\u524D\u901A\u7528 Agent \u66F4\u65B0\u9700\u8981\u5148\u786E\u8BA4\uFF1A${blockedFields.join(", ")}`,
12260
+ {
12261
+ code: "agent_update_requires_confirmation",
12262
+ retryable: false,
12263
+ displayData: `${displayPrefix} \u9700\u8981\u5148\u786E\u8BA4\uFF1A${blockedFields.join(", ")}`,
12264
+ rawData: {
12265
+ error: "agent_update_requires_confirmation",
12266
+ message: scope === "self" ? "\u5F53\u524D\u81EA\u6211\u66F4\u65B0\u5305\u542B\u9700\u8981\u7528\u6237\u786E\u8BA4\u7684\u5B57\u6BB5\u3002" : "\u5F53\u524D\u901A\u7528 Agent \u66F4\u65B0\u9ED8\u8BA4\u8981\u6C42\u7528\u6237\u786E\u8BA4\u3002",
12267
+ policy: {
12268
+ capability: scope === "self" ? "self_update" : "agent_update",
12269
+ scope,
12270
+ decision: "ask",
12271
+ requestedFields,
12272
+ allowedFields,
12273
+ blockedFields,
12274
+ autoApprovedFields
12275
+ }
12276
+ }
12277
+ }
12278
+ );
12279
+ };
12280
+ var buildRawDataWithUpdateInfo = (agent, previousAgent, requestedFields) => {
12281
+ const changes = {};
12282
+ for (const key of requestedFields) {
12283
+ const newVal = agent[key];
12284
+ const oldVal = previousAgent[key];
12285
+ if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
12286
+ changes[key] = { o: oldVal, n: newVal };
12287
+ }
12288
+ }
12289
+ return {
12290
+ ...agent,
12291
+ _isUpdate: true,
12292
+ _changes: Object.keys(changes).length > 0 ? changes : void 0
12293
+ };
12294
+ };
12295
+ var formatUpdatedAgentOutput = (agent) => [
12296
+ `\u2705 \u5DF2\u66F4\u65B0 Agent\uFF1A${agent.name ?? "(\u540D\u79F0\u672A\u53D8)"}`,
12297
+ `- ID: ${agent.id}`,
12298
+ `- \u662F\u5426\u516C\u5F00: ${agent.isPublic ? "\u662F" : "\u5426"}`,
12299
+ `- \u5141\u8BB8\u4ED6\u4EBA\u590D\u5236: ${agent.allowFork ? "\u662F" : "\u5426"}`,
12300
+ agent.model && `- \u6A21\u578B: ${agent.model}`,
12301
+ agent.provider && `- Provider: ${agent.provider}`,
12302
+ agent.tags?.length && `- \u6807\u7B7E: ${agent.tags.join(", ")}`,
12303
+ typeof agent.temperature === "number" && `- temperature: ${agent.temperature}`
12304
+ ].filter(Boolean).join("\n");
12305
+ var buildUpdateThunkPreviousAgent = (previousAgent, userId) => {
12306
+ const ownerUserId = String(previousAgent.userId ?? "").trim();
12307
+ if (previousAgent.isPublic && ownerUserId !== userId) {
12308
+ return {
12309
+ ...previousAgent,
12310
+ isPublic: false
12311
+ };
12312
+ }
12313
+ return previousAgent;
12314
+ };
12315
+
12316
+ // packages/ai/agent/forkAgent.ts
12317
+ var COPY_KEYS = [
12318
+ "prompt",
12319
+ "introduction",
12320
+ "greeting",
12321
+ "tools",
12322
+ "hasVision",
12323
+ "hasImageOutput",
12324
+ "imageModel",
12325
+ "imageConfig",
12326
+ "imageWorkflow",
12327
+ "defaultInteractionMode"
12328
+ ];
12329
+ var PROVIDER_CONFIG_KEYS = [
12330
+ "provider",
12331
+ "apiSource",
12332
+ "customProviderUrl",
12333
+ "useServerProxy",
12334
+ "apiKeyHeader",
12335
+ "cliProvider"
12336
+ ];
12337
+ var REASONING_CONFIG_KEYS = [
12338
+ "enableThinking",
12339
+ "thinkingBudget",
12340
+ "reasoning_effort"
12341
+ ];
12342
+ var OPTIONAL_GENERATION_KEYS = [
12343
+ "temperature",
12344
+ "top_p",
12345
+ "max_tokens",
12346
+ "frequency_penalty",
12347
+ "presence_penalty"
12348
+ ];
12349
+ var FORCED_SAFE_DEFAULTS = {
12350
+ isPublic: false,
12351
+ allowFork: false,
12352
+ whitelist: [],
12353
+ references: [],
12354
+ inputPrice: 0,
12355
+ outputPrice: 0,
12356
+ // Never clone a plaintext secret or another Agent's local credential-broker reference.
12357
+ apiKey: "",
12358
+ credentialRef: "",
12359
+ apiKeyFromAgentKey: "",
12360
+ credentialSynced: false,
12361
+ // Machine bindings are owner/runtime specific even when the account is the same.
12362
+ machineId: ""
12363
+ };
12364
+ var NAME_MAX_LENGTH = 50;
12365
+ var API_SOURCES = /* @__PURE__ */ new Set(["platform", "custom", "cli"]);
12366
+ var trimmed = (value) => typeof value === "string" ? value.trim() : "";
12367
+ function getForkedAgentProviderExpectation(formData) {
12368
+ const apiKeyRef = trimmed(formData.apiKeyRef);
12369
+ const apiSource = formData.apiSource;
12370
+ return {
12371
+ model: formData.model,
12372
+ apiSource,
12373
+ provider: formData.provider,
12374
+ credentialConfigured: apiKeyRef.length > 0,
12375
+ apiKeyRef
12376
+ };
12377
+ }
12378
+ function assertForkedAgentProviderConfig(created, expected) {
12379
+ const actualApiKeyRef = trimmed(created.apiKeyRef);
12380
+ const actualCredentialConfigured = typeof created.credentialConfigured === "boolean" ? created.credentialConfigured : actualApiKeyRef.length > 0;
12381
+ const mismatches = [];
12382
+ if (created.model !== expected.model) mismatches.push("model");
12383
+ if (created.apiSource !== expected.apiSource) mismatches.push("apiSource");
12384
+ if (created.provider !== expected.provider) mismatches.push("provider");
12385
+ if (actualCredentialConfigured !== expected.credentialConfigured) {
12386
+ mismatches.push("credentialConfigured");
12387
+ }
12388
+ if (actualApiKeyRef !== expected.apiKeyRef) mismatches.push("apiKeyRef");
12389
+ if (mismatches.length) {
12390
+ throw new Error(`Agent \u521B\u5EFA\u540E\u914D\u7F6E\u6821\u9A8C\u5931\u8D25\uFF1A${mismatches.join(", ")}`);
12391
+ }
12392
+ }
12393
+ function buildForkAgentFormData(source, options) {
12394
+ if (!source || source.allowFork !== true) return null;
12395
+ const result = {};
12396
+ for (const key of [
12397
+ ...COPY_KEYS,
12398
+ ...PROVIDER_CONFIG_KEYS,
12399
+ ...REASONING_CONFIG_KEYS,
12400
+ ...OPTIONAL_GENERATION_KEYS
12401
+ ]) {
12402
+ if (source[key] !== void 0) result[key] = source[key];
12403
+ }
12404
+ if (source.model !== void 0) result.model = source.model;
12405
+ const modelOverride = trimmed(options?.overrides?.model);
12406
+ if (modelOverride) result.model = modelOverride;
12407
+ const explicitApiSource = options?.overrides?.apiSource;
12408
+ if (explicitApiSource) {
12409
+ result.apiSource = explicitApiSource;
12410
+ } else if (!API_SOURCES.has(source.apiSource)) {
12411
+ delete result.apiSource;
12412
+ }
12413
+ const sourceOwner = trimmed(source.userId);
12414
+ const targetOwner = trimmed(options?.targetUserId);
12415
+ result.apiKeyRef = sourceOwner && targetOwner && sourceOwner === targetOwner ? trimmed(source.apiKeyRef) : "";
12416
+ if (result.apiSource === "platform") {
12417
+ result.customProviderUrl = "";
12418
+ result.cliProvider = "";
12419
+ result.apiKeyRef = "";
12420
+ result.apiKeyHeader = "";
12421
+ result.useServerProxy = true;
12422
+ }
12423
+ const explicitName = options?.overrides && "name" in options.overrides ? trimmed(options.overrides.name) : "";
12424
+ const sourceName = trimmed(source.name);
12425
+ const suffix = options?.nameSuffix ?? " \u526F\u672C";
12426
+ result.name = (explicitName || (sourceName ? `${sourceName}${suffix}`.trim() : "\u65B0 AI")).slice(0, NAME_MAX_LENGTH);
12427
+ const rawTags = source.tags;
12428
+ if (Array.isArray(rawTags)) {
12429
+ result.tags = rawTags.map((tag) => String(tag ?? "").trim()).filter(Boolean).join(",");
12430
+ } else {
12431
+ result.tags = typeof rawTags === "string" ? rawTags.trim() : "";
12432
+ }
12433
+ Object.assign(result, FORCED_SAFE_DEFAULTS);
12434
+ return result;
12435
+ }
12436
+
12437
+ // packages/ai/tools/agent/createAgentTool.ts
12438
+ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
12439
+ version: 1,
12440
+ runtimeTools: ["execShell"],
12441
+ workspace: { mode: "lease" }
12442
+ };
12443
+ var findModelConfig = async (modelName, provider) => {
12444
+ const { ALL_MODELS } = await import("./models-FAMINFZ7.js");
12445
+ const name = toTrimmedString(modelName);
12446
+ const prov = toTrimmedString(provider ?? "");
12447
+ if (!name) return null;
12448
+ if (prov) {
12449
+ const exact = ALL_MODELS.find(
12450
+ (m) => m.name === name && m.provider === prov
12451
+ );
12452
+ if (exact) return exact;
12453
+ }
12454
+ const matches = ALL_MODELS.filter((m) => m.name === name);
12455
+ if (matches.length === 1) return matches[0];
12456
+ if (matches.length > 1 && !prov) {
12457
+ console.warn(
12458
+ "[createAgentTool] findModelConfig: duplicate model names without provider",
12459
+ {
12460
+ modelName: name,
12461
+ providers: matches.map((m) => m.provider)
12462
+ }
12463
+ );
12464
+ }
12465
+ return null;
12466
+ };
12467
+ var createAgentToolFunctionSchema = {
12468
+ name: "createAgent",
12469
+ description: i18n_default.t("tools.createAgent.description"),
12470
+ parameters: {
12471
+ type: "object",
12472
+ properties: {
12473
+ name: {
12474
+ type: "string",
12475
+ description: i18n_default.t("tools.createAgent.params.name")
12476
+ },
12477
+ model: {
12478
+ type: "string",
12479
+ description: i18n_default.t("tools.createAgent.params.model")
12480
+ },
12481
+ provider: {
12482
+ type: "string",
12483
+ description: i18n_default.t("tools.createAgent.params.provider")
12484
+ },
12485
+ apiSource: {
12486
+ type: "string",
12487
+ enum: ["platform"],
12488
+ description: "\u663E\u5F0F\u9009\u62E9\u5E73\u53F0\u8BA1\u8D39\uFF1B\u4E0D\u4F20\u5219\u7EE7\u627F\u5F53\u524D Agent \u7684 API \u6765\u6E90\u3002"
12489
+ },
12490
+ prompt: {
12491
+ type: "string",
12492
+ description: i18n_default.t("tools.createAgent.params.prompt")
12493
+ },
12494
+ introduction: {
12495
+ type: "string",
12496
+ description: i18n_default.t("tools.createAgent.params.introduction")
12497
+ },
12498
+ greeting: {
12499
+ description: i18n_default.t("tools.createAgent.params.greeting.desc"),
12500
+ anyOf: [
12501
+ {
12502
+ type: "string",
12503
+ description: i18n_default.t(
12504
+ "tools.createAgent.params.greeting.stringDesc"
12505
+ )
12506
+ },
12507
+ {
12508
+ type: "object",
12509
+ description: i18n_default.t(
12510
+ "tools.createAgent.params.greeting.objectDesc"
12511
+ ),
12512
+ properties: {
12513
+ text: {
12514
+ type: "string",
12515
+ description: i18n_default.t(
12516
+ "tools.createAgent.params.greeting.texts.text"
12517
+ )
12518
+ },
12519
+ menu: {
12520
+ type: "array",
12521
+ description: i18n_default.t(
12522
+ "tools.createAgent.params.greeting.menu.desc"
12523
+ ),
12524
+ items: {
12525
+ type: "object",
12526
+ properties: {
12527
+ id: {
12528
+ type: "string",
12529
+ description: i18n_default.t(
12530
+ "tools.createAgent.params.greeting.menu.id"
12531
+ )
12532
+ },
12533
+ label: {
12534
+ type: "string",
12535
+ description: i18n_default.t(
12536
+ "tools.createAgent.params.greeting.menu.label"
12537
+ )
12538
+ },
12539
+ userMessage: {
12540
+ type: "string",
12541
+ description: i18n_default.t(
12542
+ "tools.createAgent.params.greeting.menu.userMessage"
12543
+ )
12544
+ }
12545
+ },
12546
+ required: ["id", "label"]
12547
+ }
12548
+ }
12549
+ }
12550
+ }
12551
+ ]
12552
+ },
12553
+ isPublic: {
12554
+ type: "boolean",
12555
+ description: i18n_default.t("tools.createAgent.params.isPublic")
12556
+ },
12557
+ allowFork: {
12558
+ type: "boolean",
12559
+ description: i18n_default.t("tools.createAgent.params.allowFork")
12560
+ },
12561
+ tags: {
12562
+ type: "array",
12563
+ items: { type: "string" },
12564
+ description: i18n_default.t("tools.createAgent.params.tags")
12565
+ },
12566
+ tools: {
12567
+ type: "array",
12568
+ items: { type: "string" },
12569
+ description: i18n_default.t("tools.createAgent.params.tools")
12570
+ },
12571
+ disabledTools: {
12026
12572
  type: "array",
12027
12573
  items: { type: "string" },
12028
12574
  description: "\u660E\u786E\u7981\u7528\u7684\u9ED8\u8BA4\u5DE5\u5177\u540D\u79F0\u6570\u7EC4\uFF08\u5982 exa_search\u3001fetchWebpage\uFF09\u3002\u8FD9\u4E9B\u5DE5\u5177\u5373\u4F7F\u88AB\u5E73\u53F0\u9ED8\u8BA4\u6CE8\u5165\u4E5F\u4E0D\u4F1A\u53D1\u7ED9\u6A21\u578B\u3002"
@@ -12102,8 +12648,7 @@ var createAgentToolFunctionSchema = {
12102
12648
  )
12103
12649
  }
12104
12650
  },
12105
- // provider 必填
12106
- required: ["name", "model", "provider"]
12651
+ required: ["name"]
12107
12652
  }
12108
12653
  };
12109
12654
  var normalizeTags = (tags) => {
@@ -12113,7 +12658,7 @@ var normalizeTags = (tags) => {
12113
12658
  }
12114
12659
  return String(tags);
12115
12660
  };
12116
- var buildFormDataFromArgs = async (args) => {
12661
+ var buildPlatformFormDataFromArgs = async (args) => {
12117
12662
  const {
12118
12663
  name,
12119
12664
  model,
@@ -12141,7 +12686,7 @@ var buildFormDataFromArgs = async (args) => {
12141
12686
  const trimmedModel = toTrimmedString(model);
12142
12687
  const trimmedProvider = toTrimmedString(provider);
12143
12688
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
12144
- const { getModelPricing } = await import("./getPricing-RFOPUWHY.js");
12689
+ const { getModelPricing } = await import("./getPricing-NM3NUTAS.js");
12145
12690
  const normalizedTools = tools ?? [];
12146
12691
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
12147
12692
  const formData = {
@@ -12199,7 +12744,7 @@ var findSpaceConfig = (nameOrId, allSpaces) => {
12199
12744
  if (byName) return { spaceId: byName.spaceId, name: byName.spaceName };
12200
12745
  return null;
12201
12746
  };
12202
- async function createAgentToolFunc(args, thunkApi) {
12747
+ async function createAgentToolFunc(args, thunkApi, runtime) {
12203
12748
  const state2 = thunkApi.getState();
12204
12749
  const currentUserId = selectIdentityUserId(state2);
12205
12750
  const currentBalance = selectIdentityUserBalance(state2);
@@ -12207,16 +12752,10 @@ async function createAgentToolFunc(args, thunkApi) {
12207
12752
  if (!currentUserId) {
12208
12753
  throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u5F53\u524D\u672A\u767B\u5F55\u6216\u7F3A\u5C11 userId\u3002");
12209
12754
  }
12210
- const { name, model, provider, linkedSpaces } = args || {};
12755
+ const { name, linkedSpaces } = args || {};
12211
12756
  if (!name || typeof name !== "string" || !name.trim()) {
12212
12757
  throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u5FC5\u987B\u63D0\u4F9B\u975E\u7A7A\u7684 name \u5B57\u6BB5\u3002");
12213
12758
  }
12214
- if (!model || typeof model !== "string" || !model.trim()) {
12215
- throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u5FC5\u987B\u63D0\u4F9B\u975E\u7A7A\u7684 model \u5B57\u6BB5\u3002");
12216
- }
12217
- if (!provider || typeof provider !== "string" || !provider.trim()) {
12218
- throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u5FC5\u987B\u63D0\u4F9B\u975E\u7A7A\u7684 provider \u5B57\u6BB5\u3002");
12219
- }
12220
12759
  const resolvedLinkedSpaces = [];
12221
12760
  if (Array.isArray(linkedSpaces) && linkedSpaces.length > 0) {
12222
12761
  const notFound = [];
@@ -12238,8 +12777,52 @@ ${availableList}`
12238
12777
  );
12239
12778
  }
12240
12779
  }
12241
- const formData = await buildFormDataFromArgs(args);
12242
- formData.linkedSpaces = resolvedLinkedSpaces;
12780
+ const db = thunkApi.extra?.db;
12781
+ const sourceAgent = runtime?.agentKey ? await fetchAgentByDbKey(runtime.agentKey, db) : null;
12782
+ let formData;
12783
+ if (sourceAgent) {
12784
+ const inherited = buildForkAgentFormData(
12785
+ // Internal creation is not a marketplace fork; policy still enforces all secret boundaries.
12786
+ { ...sourceAgent, allowFork: true },
12787
+ {
12788
+ targetUserId: currentUserId,
12789
+ overrides: {
12790
+ name: toTrimmedString(name),
12791
+ ...typeof args.model === "string" ? { model: toTrimmedString(args.model) } : {},
12792
+ ...args.apiSource === "platform" ? { apiSource: "platform" } : {}
12793
+ }
12794
+ }
12795
+ );
12796
+ if (!inherited) throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u65E0\u6CD5\u7EE7\u627F\u5F53\u524D Agent \u914D\u7F6E\u3002");
12797
+ Object.assign(inherited, {
12798
+ name: toTrimmedString(name),
12799
+ ...args.prompt !== void 0 ? { prompt: args.prompt } : {},
12800
+ ...args.introduction !== void 0 ? { introduction: args.introduction } : {},
12801
+ ...args.greeting !== void 0 ? { greeting: args.greeting } : {},
12802
+ ...args.tools !== void 0 ? { tools: args.tools } : {},
12803
+ ...args.disabledTools !== void 0 ? { disabledTools: args.disabledTools } : {},
12804
+ ...args.enabledPacks !== void 0 ? { enabledPacks: args.enabledPacks } : {},
12805
+ ...args.temperature !== void 0 ? { temperature: args.temperature } : {},
12806
+ ...args.top_p !== void 0 ? { top_p: args.top_p } : {},
12807
+ ...args.frequency_penalty !== void 0 ? { frequency_penalty: args.frequency_penalty } : {},
12808
+ ...args.presence_penalty !== void 0 ? { presence_penalty: args.presence_penalty } : {},
12809
+ ...args.max_tokens !== void 0 ? { max_tokens: args.max_tokens } : {},
12810
+ ...args.reasoning_effort !== void 0 ? { reasoning_effort: args.reasoning_effort } : {},
12811
+ isPublic: !!args.isPublic,
12812
+ allowFork: !!args.allowFork,
12813
+ tags: normalizeTags(args.tags),
12814
+ references: args.references ?? [],
12815
+ linkedSpaces: resolvedLinkedSpaces
12816
+ });
12817
+ formData = inherited;
12818
+ } else {
12819
+ if (!args.model?.trim() || !args.provider?.trim()) {
12820
+ throw new Error("\u521B\u5EFA Agent \u5931\u8D25\uFF1A\u65E0\u6CD5\u8BC6\u522B\u6E90 Agent \u65F6\u5FC5\u987B\u63D0\u4F9B model \u548C provider\u3002");
12821
+ }
12822
+ formData = await buildPlatformFormDataFromArgs(args);
12823
+ formData.linkedSpaces = resolvedLinkedSpaces;
12824
+ }
12825
+ const expectedProviderConfig = getForkedAgentProviderExpectation(formData);
12243
12826
  try {
12244
12827
  const agent = await thunkApi.dispatch(
12245
12828
  createAgent({
@@ -12248,6 +12831,7 @@ ${availableList}`
12248
12831
  spaceId: getCurrentSpaceId() || void 0
12249
12832
  })
12250
12833
  ).unwrap();
12834
+ assertForkedAgentProviderConfig(agent, expectedProviderConfig);
12251
12835
  const currentSpaceId = getCurrentSpaceId();
12252
12836
  if (currentSpaceId) {
12253
12837
  const agentDbKey = agent.isPublic ? createAgentKey.public(agent.id) : createAgentKey.private(currentUserId, agent.id);
@@ -12278,265 +12862,21 @@ ${availableList}`
12278
12862
  lines.push(`- \u542F\u7528\u5DE5\u5177: ${agent.tools.join(", ")}`);
12279
12863
  }
12280
12864
  if (typeof agent.temperature === "number") {
12281
- lines.push(`- temperature: ${agent.temperature}`);
12282
- }
12283
- if (typeof currentBalance === "number") {
12284
- lines.push(`- \u5F53\u524D\u4F59\u989D: ${currentBalance}`);
12285
- }
12286
- return {
12287
- rawData: agent,
12288
- displayData: lines.join("\n")
12289
- };
12290
- } catch (error) {
12291
- throw new Error(
12292
- `\u521B\u5EFA Agent \u5931\u8D25\uFF1A${error?.message || "\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002"}`
12293
- );
12294
- }
12295
- }
12296
-
12297
- // packages/ai/tools/toolResultError.ts
12298
- var ToolResultError = class extends Error {
12299
- code;
12300
- rawData;
12301
- displayData;
12302
- retryable;
12303
- constructor(message, options) {
12304
- super(message);
12305
- this.name = "ToolResultError";
12306
- this.code = options?.code;
12307
- this.rawData = options?.rawData;
12308
- this.displayData = options?.displayData;
12309
- this.retryable = options?.retryable;
12310
- }
12311
- };
12312
- var getToolResultErrorData = (error) => {
12313
- if (!error || typeof error !== "object") return null;
12314
- const candidate = error;
12315
- return {
12316
- rawData: candidate.rawData,
12317
- displayData: candidate.displayData,
12318
- code: candidate.code,
12319
- retryable: candidate.retryable,
12320
- message: candidate.message
12321
- };
12322
- };
12323
-
12324
- // packages/ai/tools/agent/agentUpdateShared.ts
12325
- var agentUpdateFieldSchemaProperties = {
12326
- name: { type: "string", description: "Agent \u7684\u65B0\u540D\u79F0\u3002" },
12327
- handle: { type: "string", description: "\u7A33\u5B9A\u7684\u673A\u5668\u8C03\u7528\u540D\uFF0C\u4F8B\u5982 pm\u3001fullstack\u3001reviewer\u3002" },
12328
- model: { type: "string", description: "\u6A21\u578B\u540D\u79F0\uFF0C\u4F8B\u5982 'gpt-4o-mini'\u3002" },
12329
- provider: { type: "string", description: "\u6A21\u578B\u63D0\u4F9B\u65B9\uFF0C\u4F8B\u5982 'openai'\u3002\u82E5\u4E0D\u786E\u5B9A\u53EF\u7559\u7A7A\u3002" },
12330
- prompt: { type: "string", description: "\u7CFB\u7EDF\u63D0\u793A\u8BCD\uFF0C\u63CF\u8FF0 Agent \u7684\u89D2\u8272\u548C\u884C\u4E3A\u3002" },
12331
- introduction: { type: "string", description: "\u9762\u5411\u7EC8\u7AEF\u7528\u6237\u7684\u7B80\u4ECB\u6587\u6848\u3002" },
12332
- greeting: {
12333
- description: "\u6B22\u8FCE\u914D\u7F6E\uFF1A\u7EAF\u6587\u672C\u5B57\u7B26\u4E32\uFF0C\u6216\u5305\u542B\u6B22\u8FCE\u8BED + \u83DC\u5355\u7684\u5BF9\u8C61\u3002",
12334
- anyOf: [
12335
- { type: "string", description: "\u7EAF\u6587\u672C\u6B22\u8FCE\u8BED\u3002" },
12336
- {
12337
- type: "object",
12338
- description: "\u7ED3\u6784\u5316\u6B22\u8FCE\u914D\u7F6E\u3002",
12339
- properties: {
12340
- text: { type: "string", description: "\u6B22\u8FCE\u8BED\u6587\u672C\u3002" },
12341
- menu: {
12342
- type: "array",
12343
- description: "\u5FEB\u6377\u83DC\u5355\u9879\u3002",
12344
- items: {
12345
- type: "object",
12346
- properties: {
12347
- id: { type: "string", description: "\u83DC\u5355\u9879\u552F\u4E00\u6807\u8BC6\u3002" },
12348
- label: { type: "string", description: "\u6309\u94AE\u663E\u793A\u6587\u6848\u3002" },
12349
- userMessage: { type: "string", description: "\u70B9\u51FB\u540E\u53D1\u9001\u7ED9 Agent \u7684\u6D88\u606F\u3002" }
12350
- },
12351
- required: ["id", "label"]
12352
- }
12353
- }
12354
- }
12355
- }
12356
- ]
12357
- },
12358
- isPublic: { type: "boolean", description: "\u662F\u5426\u516C\u5F00\u5230\u5E94\u7528\u5E02\u573A\u3002" },
12359
- allowFork: { type: "boolean", description: "\u662F\u5426\u5141\u8BB8\u5176\u4ED6\u7528\u6237\u628A\u8FD9\u4E2A AI \u590D\u5236\u4E00\u4EFD\u5230\u81EA\u5DF1\u7684\u7A7A\u95F4\u3002" },
12360
- tags: {
12361
- type: "array",
12362
- items: { type: "string" },
12363
- description: "\u6807\u7B7E\u5217\u8868\uFF1B\u4F20\u7A7A\u6570\u7EC4 [] \u8868\u793A\u6E05\u7A7A\u3002"
12364
- },
12365
- tools: {
12366
- type: "array",
12367
- items: { type: "string" },
12368
- description: "\u5141\u8BB8\u8C03\u7528\u7684\u5DE5\u5177\u540D\u79F0\u6570\u7EC4\u3002"
12369
- },
12370
- disabledTools: {
12371
- type: "array",
12372
- items: { type: "string" },
12373
- description: "\u660E\u786E\u7981\u7528\u7684\u9ED8\u8BA4\u5DE5\u5177\u540D\u79F0\u6570\u7EC4\uFF08\u5982 exa_search\u3001fetchWebpage\uFF09\u3002\u8FD9\u4E9B\u5DE5\u5177\u5373\u4F7F\u88AB\u5E73\u53F0\u9ED8\u8BA4\u6CE8\u5165\u4E5F\u4E0D\u4F1A\u53D1\u7ED9\u6A21\u578B\uFF0C\u4ECE\u6839\u4E0A\u8282\u7701 token\u3002"
12374
- },
12375
- enabledPacks: {
12376
- type: "array",
12377
- items: { type: "string", enum: CAPABILITY_PACKS.map((p) => p.id) },
12378
- description: '\u542F\u7528\u7684\u80FD\u529B\u5305 ID \u6570\u7EC4\u3002\u80FD\u529B\u5305\u662F\u9762\u5411\u7528\u6237\u7684\u5DE5\u5177\u5206\u7EC4\uFF0C\u4E00\u4E2A\u5305\u5305\u542B\u4E00\u7EC4\u534F\u540C\u5DE5\u5177\u3002\u5982 ["web-search"] \u5F00\u542F\u8054\u7F51\u641C\u7D22\u3002'
12379
- },
12380
- references: {
12381
- type: "array",
12382
- description: "\u5F15\u7528\u96C6\u5408\uFF1B\u4F20\u7A7A\u6570\u7EC4 [] \u8868\u793A\u6E05\u7A7A\u3002",
12383
- items: {
12384
- type: "object",
12385
- properties: {
12386
- dbKey: { type: "string", description: "\u5F15\u7528\u6761\u76EE\u7684\u6570\u636E\u5E93\u952E\u3002" },
12387
- title: { type: "string", description: "\u5F15\u7528\u5728 UI \u4E2D\u5C55\u793A\u7684\u6807\u9898\u3002" },
12388
- type: {
12389
- type: "string",
12390
- enum: ["knowledge", "instruction", "page"],
12391
- description: "\u5F15\u7528\u7C7B\u578B\u3002"
12392
- }
12393
- },
12394
- required: ["dbKey"]
12395
- }
12396
- },
12397
- temperature: { type: "number", description: "\u91C7\u6837\u6E29\u5EA6\uFF0C0~2\u3002" },
12398
- top_p: { type: "number", description: "nucleus sampling\uFF0C0~1\u3002" },
12399
- frequency_penalty: { type: "number", description: "\u91CD\u590D\u60E9\u7F5A\uFF0C-2~2\u3002" },
12400
- presence_penalty: { type: "number", description: "\u65B0\u8BDD\u9898\u6FC0\u52B1\uFF0C-2~2\u3002" },
12401
- max_tokens: { type: "number", description: "\u5355\u6B21\u56DE\u7B54\u6700\u5927 token \u6570\u3002" },
12402
- reasoning_effort: {
12403
- type: "string",
12404
- enum: ["low", "medium", "high"],
12405
- description: "\u63A8\u7406\u5F3A\u5EA6\u3002"
12406
- }
12407
- };
12408
- var validateUpdateArgs = (userId, options) => {
12409
- if (!userId) throw new Error("\u66F4\u65B0 Agent \u5931\u8D25\uFF1A\u5F53\u524D\u672A\u767B\u5F55\u6216\u7F3A\u5C11 userId\u3002");
12410
- if (options?.requireAgentId && !options?.agentId?.trim()) {
12411
- throw new Error("\u66F4\u65B0 Agent \u5931\u8D25\uFF1A\u5FC5\u987B\u63D0\u4F9B\u975E\u7A7A\u7684 agentId\u3002");
12412
- }
12413
- };
12414
- var fetchAgentByDbKey = async (dbKey, db) => {
12415
- if (!db) return void 0;
12416
- return db.get(dbKey).catch(() => void 0);
12417
- };
12418
- var extractAgentId = (dbKey) => {
12419
- const parts = dbKey.trim().split("-");
12420
- return parts.length >= 3 ? parts.slice(2).join("-") : dbKey.trim();
12421
- };
12422
- var buildPatch = (args) => {
12423
- const patch2 = {};
12424
- const {
12425
- name,
12426
- handle,
12427
- model,
12428
- provider,
12429
- prompt,
12430
- introduction,
12431
- greeting,
12432
- isPublic,
12433
- allowFork,
12434
- tags,
12435
- tools,
12436
- disabledTools,
12437
- enabledPacks,
12438
- references,
12439
- temperature,
12440
- top_p,
12441
- frequency_penalty,
12442
- presence_penalty,
12443
- max_tokens,
12444
- reasoning_effort
12445
- } = args;
12446
- if (name !== void 0) patch2.name = String(name).trim();
12447
- if (handle !== void 0) patch2.handle = String(handle).trim();
12448
- if (model !== void 0) patch2.model = String(model).trim();
12449
- if (provider !== void 0) patch2.provider = String(provider).trim();
12450
- if (prompt !== void 0) patch2.prompt = prompt;
12451
- if (introduction !== void 0) patch2.introduction = introduction;
12452
- if (greeting !== void 0) patch2.greeting = greeting;
12453
- if (isPublic !== void 0) patch2.isPublic = isPublic;
12454
- if (allowFork !== void 0) patch2.allowFork = allowFork;
12455
- if (tags !== void 0) patch2.tags = tags;
12456
- if (tools !== void 0) patch2.tools = tools ?? [];
12457
- if (disabledTools !== void 0) patch2.disabledTools = disabledTools ?? [];
12458
- if (enabledPacks !== void 0) patch2.enabledPacks = enabledPacks ?? [];
12459
- if (references !== void 0) patch2.references = references;
12460
- if (temperature !== void 0) patch2.temperature = temperature;
12461
- if (top_p !== void 0) patch2.top_p = top_p;
12462
- if (frequency_penalty !== void 0) patch2.frequency_penalty = frequency_penalty;
12463
- if (presence_penalty !== void 0) patch2.presence_penalty = presence_penalty;
12464
- if (max_tokens !== void 0) patch2.max_tokens = max_tokens;
12465
- if (reasoning_effort !== void 0) patch2.reasoning_effort = reasoning_effort;
12466
- return patch2;
12467
- };
12468
- var AGENT_UPDATE_FIELD_NAME_SET = new Set(AGENT_UPDATE_FIELD_NAMES);
12469
- var listRequestedFields = (args) => Object.keys(args).filter(
12470
- (key) => key !== "agentId" && key !== "__confirmedSelfEvolution" && AGENT_UPDATE_FIELD_NAME_SET.has(key) && args[key] !== void 0
12471
- );
12472
- var assertAgentUpdateConfirmation = ({
12473
- scope,
12474
- requestedFields,
12475
- confirmed,
12476
- autoApprovedFields = []
12477
- }) => {
12478
- if (requestedFields.length === 0 || confirmed) return;
12479
- const allowedFields = scope === "self" ? requestedFields.filter((field) => autoApprovedFields.includes(field)) : [];
12480
- const blockedFields = scope === "self" ? requestedFields.filter((field) => !autoApprovedFields.includes(field)) : requestedFields;
12481
- if (blockedFields.length === 0) return;
12482
- const displayPrefix = scope === "self" ? "updateSelf" : "updateAgent";
12483
- throw new ToolResultError(
12484
- scope === "self" ? `\u5F53\u524D\u81EA\u6211\u66F4\u65B0\u5B57\u6BB5\u9700\u8981\u5148\u786E\u8BA4\uFF1A${blockedFields.join(", ")}` : `\u5F53\u524D\u901A\u7528 Agent \u66F4\u65B0\u9700\u8981\u5148\u786E\u8BA4\uFF1A${blockedFields.join(", ")}`,
12485
- {
12486
- code: "agent_update_requires_confirmation",
12487
- retryable: false,
12488
- displayData: `${displayPrefix} \u9700\u8981\u5148\u786E\u8BA4\uFF1A${blockedFields.join(", ")}`,
12489
- rawData: {
12490
- error: "agent_update_requires_confirmation",
12491
- message: scope === "self" ? "\u5F53\u524D\u81EA\u6211\u66F4\u65B0\u5305\u542B\u9700\u8981\u7528\u6237\u786E\u8BA4\u7684\u5B57\u6BB5\u3002" : "\u5F53\u524D\u901A\u7528 Agent \u66F4\u65B0\u9ED8\u8BA4\u8981\u6C42\u7528\u6237\u786E\u8BA4\u3002",
12492
- policy: {
12493
- capability: scope === "self" ? "self_update" : "agent_update",
12494
- scope,
12495
- decision: "ask",
12496
- requestedFields,
12497
- allowedFields,
12498
- blockedFields,
12499
- autoApprovedFields
12500
- }
12501
- }
12502
- }
12503
- );
12504
- };
12505
- var buildRawDataWithUpdateInfo = (agent, previousAgent, requestedFields) => {
12506
- const changes = {};
12507
- for (const key of requestedFields) {
12508
- const newVal = agent[key];
12509
- const oldVal = previousAgent[key];
12510
- if (JSON.stringify(newVal) !== JSON.stringify(oldVal)) {
12511
- changes[key] = { o: oldVal, n: newVal };
12865
+ lines.push(`- temperature: ${agent.temperature}`);
12866
+ }
12867
+ if (typeof currentBalance === "number") {
12868
+ lines.push(`- \u5F53\u524D\u4F59\u989D: ${currentBalance}`);
12512
12869
  }
12513
- }
12514
- return {
12515
- ...agent,
12516
- _isUpdate: true,
12517
- _changes: Object.keys(changes).length > 0 ? changes : void 0
12518
- };
12519
- };
12520
- var formatUpdatedAgentOutput = (agent) => [
12521
- `\u2705 \u5DF2\u66F4\u65B0 Agent\uFF1A${agent.name ?? "(\u540D\u79F0\u672A\u53D8)"}`,
12522
- `- ID: ${agent.id}`,
12523
- `- \u662F\u5426\u516C\u5F00: ${agent.isPublic ? "\u662F" : "\u5426"}`,
12524
- `- \u5141\u8BB8\u4ED6\u4EBA\u590D\u5236: ${agent.allowFork ? "\u662F" : "\u5426"}`,
12525
- agent.model && `- \u6A21\u578B: ${agent.model}`,
12526
- agent.provider && `- Provider: ${agent.provider}`,
12527
- agent.tags?.length && `- \u6807\u7B7E: ${agent.tags.join(", ")}`,
12528
- typeof agent.temperature === "number" && `- temperature: ${agent.temperature}`
12529
- ].filter(Boolean).join("\n");
12530
- var buildUpdateThunkPreviousAgent = (previousAgent, userId) => {
12531
- const ownerUserId = String(previousAgent.userId ?? "").trim();
12532
- if (previousAgent.isPublic && ownerUserId !== userId) {
12533
12870
  return {
12534
- ...previousAgent,
12535
- isPublic: false
12871
+ rawData: agent,
12872
+ displayData: lines.join("\n")
12536
12873
  };
12874
+ } catch (error) {
12875
+ throw new Error(
12876
+ `\u521B\u5EFA Agent \u5931\u8D25\uFF1A${error?.message || "\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002"}`
12877
+ );
12537
12878
  }
12538
- return previousAgent;
12539
- };
12879
+ }
12540
12880
 
12541
12881
  // packages/ai/tools/agent/updateAgentTool.ts
12542
12882
  var updateAgentToolFunctionSchema = {
@@ -13176,15 +13516,15 @@ async function evalSkillFunc(args, thunkApi) {
13176
13516
 
13177
13517
  // packages/ai/tools/importSkillTool.ts
13178
13518
  var normalizeUrl = (rawUrl) => {
13179
- const trimmed = rawUrl.trim();
13180
- const githubBlobMatch = trimmed.match(
13519
+ const trimmed2 = rawUrl.trim();
13520
+ const githubBlobMatch = trimmed2.match(
13181
13521
  /^https:\/\/github\.com\/([^/]+)\/([^/]+)\/blob\/([^/]+)\/(.+)$/
13182
13522
  );
13183
13523
  if (githubBlobMatch) {
13184
13524
  const [, owner, repo, ref, path] = githubBlobMatch;
13185
13525
  return `https://raw.githubusercontent.com/${owner}/${repo}/${ref}/${path}`;
13186
13526
  }
13187
- return trimmed;
13527
+ return trimmed2;
13188
13528
  };
13189
13529
  var slugify2 = (value) => value.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "imported-skill";
13190
13530
  var mapImportedTools = (toolNames) => canonicalizeToolNames(
@@ -13512,16 +13852,17 @@ function buildCodePlannerSkillPageKey(userId, slug) {
13512
13852
  var CODE_PLANNER_ROOT_SKILL_ID = buildCodePlannerSkillId(
13513
13853
  CODE_PLANNER_ROOT_SKILL_SLUG
13514
13854
  );
13515
- function buildDispatchExecutorsPromptPatch(candidateKeys = DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS) {
13516
- const keys = candidateKeys.map((key) => key.trim()).filter(Boolean);
13517
- if (keys.length === 0) {
13518
- throw new Error("buildDispatchExecutorsPromptPatch requires at least one candidate key");
13519
- }
13855
+ function buildDispatchExecutorsPromptPatch() {
13520
13856
  return [
13521
13857
  "\u6D3E\u53D1\u534F\u8BAE\uFF1A",
13522
13858
  "- \u552F\u4E00\u771F\u5B9E\u5206\u6D3E\u901A\u9053\u662F startAgentRun\u3002\u7981\u6B62\u58F0\u79F0\u4F7F\u7528\u4E86\u672C\u673A CLI \u6216 nolo agent run\uFF08\u9664\u975E\u7528\u6237\u5F53\u524D\u4F1A\u8BDD\u672C\u8EAB\u5C31\u662F CLI\uFF09\u3002",
13523
- "- \u9ED8\u8BA4\u6267\u884C\u5019\u9009\u662F\u4E0B\u5217\u5E73\u53F0\u516C\u5F00 Agent key\uFF08\u65E0\u56FA\u5B9A\u89D2\u8272\u3001\u65E0\u6253\u5206\uFF09\uFF0C\u6309\u987A\u5E8F\u4F18\u5148\u8003\u8651\uFF1B\u65E0\u9700\u5148\u505A\u53D1\u73B0\u8C03\u7528\uFF1A",
13524
- ...keys.map((key, index) => ` ${index + 1}. ${key}`),
13859
+ "- \u5F53\u4EFB\u52A1\u9002\u5408\u59D4\u6D3E\u65F6\uFF0C\u5148\u8C03\u7528 listAgents \u83B7\u53D6\u5F53\u524D\u53EF\u7528\u5019\u9009\u3002",
13860
+ "- \u9ED8\u8BA4\u4F7F\u7528 preferred scope\uFF1B\u53EA\u6709\u6CA1\u6709\u5408\u9002\u5019\u9009\u6216\u7528\u6237\u660E\u786E\u8981\u6C42\u63A2\u7D22\u516C\u5F00 Agent \u65F6\u518D\u67E5\u8BE2 public\u3002",
13861
+ "- \u6839\u636E\u7528\u6237\u6307\u5B9A\u3001\u4EFB\u52A1\u80FD\u529B\u3001runtime\u3001billingSource\u3001availability\u3001cost \u548C\u53EF\u7528 quality evidence \u9009\u62E9\u3002",
13862
+ "- agentKey \u5FC5\u987B\u539F\u6837\u590D\u5236 listAgents \u8FD4\u56DE\u503C\u3002",
13863
+ "- \u7136\u540E\u8C03\u7528 startAgentRun\u3002",
13864
+ "- \u4E0D\u5047\u8BBE\u4EFB\u4F55\u56FA\u5B9A implementer/reviewer/coder \u89D2\u8272\u3002",
13865
+ "- \u4E0D\u7EF4\u62A4\u9759\u6001\u5E73\u53F0 executor pool\u3002",
13525
13866
  "- started \u2260 completed\uFF1AstartAgentRun \u6210\u529F\u8FD4\u56DE\u771F\u5B9E runId\uFF08\u540C\u6B65 wait:true \u5219\u8FD4\u56DE\u7ED3\u679C\uFF09\u540E\u624D\u80FD\u8BF4\u300C\u5DF2\u542F\u52A8\u300D\uFF1B\u5F02\u6B65\u6D3E\u53D1\u6210\u529F\u53EA\u8868\u793A started\u3002",
13526
13867
  "- \u591A\u6587\u4EF6\u5B9E\u73B0\u3001\u5927\u91CD\u6784\u3001\u65B0\u5EFA\u6A21\u5757\u5E94\u6D3E\u53D1\u6267\u884C\u8005\uFF1B\u5355\u70B9\u5C0F\u6539\u53EF\u76F4\u63A5\u7528\u5DE5\u4F5C\u533A\u5DE5\u5177\u5B8C\u6210\u3002",
13527
13868
  "- \u4E0D\u8981\u5199\u6B7B owner \u79C1\u6709 agentKey\u3002"
@@ -13598,19 +13939,15 @@ var CODE_PLANNER_SKILL_SEEDS = [
13598
13939
  {
13599
13940
  slug: "dispatch-executors",
13600
13941
  title: "dispatch-executors",
13601
- description: "startAgentRun dispatch protocol for Code Planner executor candidates.",
13942
+ description: "listAgents discovery and startAgentRun dispatch protocol for Code Planner.",
13602
13943
  body: [
13603
13944
  "# dispatch-executors",
13604
13945
  "",
13605
- "Only startAgentRun is granted. Default candidate keys are platform public agents;",
13606
- "hard allowlisting is enforced by runtimeContext.allowedChildAgentKeys when wired."
13946
+ "Discover candidates via listAgents and dispatch chosen exact agentKey via startAgentRun."
13607
13947
  ].join("\n"),
13608
13948
  triggerMode: "required",
13609
- toolNames: ["startAgentRun"],
13610
- // Keys come from core/builtinAgents — do not hard-code a separate list here.
13611
- promptPatch: buildDispatchExecutorsPromptPatch(
13612
- DEFAULT_CODE_PLANNER_EXECUTOR_CANDIDATE_KEYS
13613
- )
13949
+ toolNames: ["listAgents", "startAgentRun"],
13950
+ promptPatch: buildDispatchExecutorsPromptPatch()
13614
13951
  },
13615
13952
  {
13616
13953
  slug: "code-planning",
@@ -15309,6 +15646,108 @@ async function listUserSpacesFunc(args, thunkApi, context) {
15309
15646
  }
15310
15647
  }
15311
15648
 
15649
+ // packages/ai/agent/agentDiscovery.ts
15650
+ function isPreferredAgent(agent) {
15651
+ return agent.isFavorite === true || agent.isOwned === true || agent.isOAuth === true || agent.billingSource === "user_subscription" || agent.billingSource === "user_api" || agent.billingSource === "local";
15652
+ }
15653
+ function isPublicDiscoveryAgent(agent) {
15654
+ return agent.isPublic === true && !isPreferredAgent(agent);
15655
+ }
15656
+ function resolveDiscoveryScope(args) {
15657
+ const rawScope = typeof args?.scope === "string" ? args.scope.trim().toLowerCase() : void 0;
15658
+ const hasScope = rawScope !== void 0 && rawScope !== "";
15659
+ const hasPublicOnly = typeof args?.publicOnly === "boolean";
15660
+ const publicOnly = args?.publicOnly === true;
15661
+ if (hasScope) {
15662
+ if (rawScope !== "preferred" && rawScope !== "public" && rawScope !== "all") {
15663
+ throw new Error(`Invalid scope '${args?.scope}': must be 'preferred', 'public', or 'all'.`);
15664
+ }
15665
+ const scope = rawScope;
15666
+ if (hasPublicOnly) {
15667
+ if (publicOnly && scope !== "public") {
15668
+ throw new Error(
15669
+ `Conflicting arguments: scope='${args?.scope}' conflicts with publicOnly=true.`
15670
+ );
15671
+ }
15672
+ if (!publicOnly && scope === "public") {
15673
+ throw new Error(
15674
+ `Conflicting arguments: scope='${args?.scope}' conflicts with publicOnly=false.`
15675
+ );
15676
+ }
15677
+ }
15678
+ return scope;
15679
+ }
15680
+ if (hasPublicOnly && publicOnly) {
15681
+ return "public";
15682
+ }
15683
+ return "preferred";
15684
+ }
15685
+ function agentIdentityKeys(agent) {
15686
+ return [agent.agentKey, agent.publicKey, agent.id].filter(
15687
+ (key) => typeof key === "string" && key.length > 0
15688
+ );
15689
+ }
15690
+ function deduplicateAgentSummaries(agents) {
15691
+ const byIdentity = /* @__PURE__ */ new Map();
15692
+ for (const agent of agents) {
15693
+ const keys = agentIdentityKeys(agent);
15694
+ const existing = keys.map((key) => byIdentity.get(key)).find(Boolean);
15695
+ if (!existing) {
15696
+ for (const key of keys) byIdentity.set(key, agent);
15697
+ continue;
15698
+ }
15699
+ const winner = isPreferredAgent(agent) && !isPreferredAgent(existing) ? agent : existing;
15700
+ for (const key of /* @__PURE__ */ new Set([...agentIdentityKeys(existing), ...keys])) byIdentity.set(key, winner);
15701
+ }
15702
+ return [...new Set(byIdentity.values())];
15703
+ }
15704
+ function filterAgentsByScope(agents, scope) {
15705
+ const unique = deduplicateAgentSummaries(agents);
15706
+ if (scope === "preferred") return unique.filter((agent) => isPreferredAgent(agent));
15707
+ if (scope === "public") return unique.filter((agent) => isPublicDiscoveryAgent(agent));
15708
+ return unique.filter((agent) => isPreferredAgent(agent) || agent.isPublic === true);
15709
+ }
15710
+ function buildAgentDiscoveryResult(options) {
15711
+ const scope = resolveDiscoveryScope({
15712
+ scope: options.scope,
15713
+ publicOnly: options.publicOnly
15714
+ });
15715
+ const now = options.now ?? Date.now();
15716
+ let scopedAgents = filterAgentsByScope(options.agents, scope);
15717
+ const unavailableList = scopedAgents.filter((a) => isAgentUnavailableNow(a, now));
15718
+ const unavailableCount = unavailableList.length;
15719
+ const unavailableAgents = sortSafeAgentSummaries(unavailableList).map(toUnavailableAgentSummary);
15720
+ if (options.showUnavailable !== true) {
15721
+ scopedAgents = scopedAgents.filter((a) => !isAgentUnavailableNow(a, now));
15722
+ }
15723
+ const sortedAgents = sortSafeAgentSummaries(scopedAgents);
15724
+ const projectedAgents = options.verbose === true ? sortedAgents.map(omitNullishAgentSummaryFields) : sortedAgents.map(toCompactAgentSummary);
15725
+ return {
15726
+ total: projectedAgents.length,
15727
+ unavailableCount,
15728
+ unavailableAgents,
15729
+ agents: projectedAgents
15730
+ };
15731
+ }
15732
+
15733
+ // packages/ai/agent/publicAgentDiscovery.ts
15734
+ async function fetchPublicAgentsForDiscovery(args) {
15735
+ const fetchImpl = args.fetchImpl ?? fetch;
15736
+ const response = await fetchImpl(`${args.serverBase.replace(/\/$/, "")}/rpc/getPublicAgents`, {
15737
+ method: "POST",
15738
+ headers: {
15739
+ "Content-Type": "application/json",
15740
+ ...args.token ? { Authorization: `Bearer ${args.token}` } : {}
15741
+ },
15742
+ body: JSON.stringify({ limit: Math.min(args.limit ?? 500, 500), summary: true })
15743
+ });
15744
+ if (!response.ok) throw new Error(`Public agent catalog request failed (${response.status})`);
15745
+ const payload = await response.json();
15746
+ const data = Array.isArray(payload?.data?.data) ? payload.data.data : Array.isArray(payload?.data) ? payload.data : Array.isArray(payload) ? payload : null;
15747
+ if (!data) throw new Error("Public agent catalog returned an invalid response");
15748
+ return data;
15749
+ }
15750
+
15312
15751
  // packages/ai/tools/deleteDialogsToolModel.ts
15313
15752
  var normalizeText = (value) => asTrimmedString(value);
15314
15753
  var resolveDialogId = (record) => {
@@ -15739,7 +16178,7 @@ async function deleteDialogsFunc(args, thunkApi) {
15739
16178
  const deletedDialogIds = [];
15740
16179
  const deletedDialogKeys = [];
15741
16180
  const failures = [];
15742
- const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-TYW2G7IL.js");
16181
+ const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-ANMACABO.js");
15743
16182
  for (const target of targets) {
15744
16183
  try {
15745
16184
  await thunkApi.dispatch(deleteDialog2(target.dbKey)).unwrap();
@@ -15823,12 +16262,17 @@ function formatAgentListCard(agents, maxDisplay = 8) {
15823
16262
  }
15824
16263
  var listAgentsFunctionSchema = {
15825
16264
  name: "listAgents",
15826
- description: "List the current user's Nolo agents as safe summaries. The `agents` array carries a compact agent-selection projection per agent: runnable `agentKey` (agent-<userId>-<id> owned, agent-pub-<id> public) plus name, model, provider, apiSource, tools, isFavorite, isOAuth, isOwned, isPublic. Copy `agentKey` verbatim into startAgentRun. Set `verbose: true` for troubleshooting to also get prices, introduction, modelAbility and timestamps. Results prioritize favorites, then OAuth/custom, then owned, then public. Rate-limited agents (429, nextAvailableAt in the future) are hidden by default; set `showUnavailable: true` to include them; `unavailableCount` and `unavailableAgents` carry their nextAvailableAt recovery timestamps.",
16265
+ description: "List Nolo agents available for delegation as safe summaries. By default (scope='preferred'), returns the user's preferred agents (favorites, self-owned, OAuth subscriptions, custom API, and local agents). Note: favorited public agents stay in preferred and may still consume platform credits - check each agent's billingSource before dispatching. If no suitable preferred candidate is found or the user explicitly asks to explore public/shared agents, call with scope='public' (public agents may consume platform credits). scope='all' returns the deduplicated union for troubleshooting/management. listAgents does not automatically fallback to public agents. The `agents` array carries a compact agent-selection projection per agent: runnable `agentKey` (agent-<userId>-<id> owned, agent-pub-<id> public), name, model, provider, apiSource, billingSource ('user_subscription' | 'user_api' | 'platform_credits' | 'local'), tools, isFavorite, isOAuth, isOwned, isPublic. Copy `agentKey` verbatim into startAgentRun. Rate-limited agents (429, nextAvailableAt in the future) are hidden by default; unavailableCount and unavailableAgents carry their nextAvailableAt recovery timestamps; pass `showUnavailable: true` to include them. Set `verbose: true` for full safe summary details.",
15827
16266
  parameters: {
15828
16267
  type: "object",
15829
16268
  properties: {
15830
16269
  limit: { type: "integer", description: "Maximum agents to return. Default 100, max 500." },
15831
- publicOnly: { type: "boolean", description: "Only show public agents." },
16270
+ scope: {
16271
+ type: "string",
16272
+ enum: ["preferred", "public", "all"],
16273
+ description: "Discovery scope. 'preferred' (default): user's favorites, owned, OAuth, custom API, and local agents. 'public': shared/marketplace agents not in preferred (may use platform credits). 'all': deduplicated union for inspection."
16274
+ },
16275
+ publicOnly: { type: "boolean", description: "Deprecated compatibility alias for scope='public'." },
15832
16276
  showUnavailable: { type: "boolean", description: "Include agents currently rate-limited (429). Default false." },
15833
16277
  verbose: { type: "boolean", description: "Return the full safe-summary field set (prices, introduction, modelAbility, timestamps) for troubleshooting. Default false returns the compact agent-selection projection." }
15834
16278
  }
@@ -15838,6 +16282,13 @@ async function listAgentsFunc(args, thunkApi) {
15838
16282
  const limit = clampNoloPositiveInteger(args?.limit, 100, 500);
15839
16283
  const userRecords = await queryBestRecords(thunkApi, "agent" /* AGENT */, limit);
15840
16284
  const favoritesMap = await fetchUserFavoriteAgentMap(thunkApi);
16285
+ const runtime = getRuntime2(thunkApi);
16286
+ const scope = resolveDiscoveryScope({ scope: args?.scope, publicOnly: args?.publicOnly });
16287
+ const publicRecords = scope === "preferred" ? [] : await fetchPublicAgentsForDiscovery({
16288
+ serverBase: runtime?.currentServer ?? "",
16289
+ token: runtime?.currentToken,
16290
+ limit
16291
+ });
15841
16292
  const recordsMap = /* @__PURE__ */ new Map();
15842
16293
  for (const record of userRecords) {
15843
16294
  const key = record?.dbKey || record?.id || record?.publicKey;
@@ -15853,40 +16304,39 @@ async function listAgentsFunc(args, thunkApi) {
15853
16304
  return null;
15854
16305
  });
15855
16306
  if (favRecord) {
16307
+ if (favKey.startsWith("agent-pub-")) {
16308
+ favRecord.publicRecordExists = true;
16309
+ favRecord.publicKey = favKey;
16310
+ }
15856
16311
  const key = favRecord?.dbKey || favRecord?.id || favKey;
15857
16312
  recordsMap.set(key, favRecord);
15858
16313
  }
15859
16314
  }
15860
16315
  }
15861
- const runtime = getRuntime2(thunkApi);
15862
16316
  const userId = runtime?.currentUserId ?? void 0;
15863
- let agents = Array.from(recordsMap.values()).map(
16317
+ const agents = [...Array.from(recordsMap.values()), ...publicRecords].map(
15864
16318
  (record) => toSafeAgentSummary(record, {
15865
16319
  favoritesMap,
15866
- userId
16320
+ userId,
16321
+ publicRecordExists: publicRecords.includes(record) ? true : void 0
15867
16322
  })
15868
16323
  );
15869
- const now = Date.now();
15870
- if (args?.publicOnly === true) {
15871
- agents = agents.filter((agent) => agent.isPublic);
15872
- }
15873
- const unavailableList = agents.filter((a) => isAgentUnavailableNow(a, now));
15874
- const unavailableCount = unavailableList.length;
15875
- const unavailableAgents = sortSafeAgentSummaries(unavailableList).map(toUnavailableAgentSummary);
15876
- if (args?.showUnavailable !== true) {
15877
- agents = agents.filter((a) => !isAgentUnavailableNow(a, now));
15878
- }
15879
- agents = sortSafeAgentSummaries(agents);
15880
- const projectedAgents = args?.verbose === true ? agents.map(omitNullishAgentSummaryFields) : agents.map(toCompactAgentSummary);
16324
+ const discovery = buildAgentDiscoveryResult({
16325
+ agents,
16326
+ scope: args?.scope,
16327
+ publicOnly: args?.publicOnly,
16328
+ showUnavailable: args?.showUnavailable,
16329
+ verbose: args?.verbose
16330
+ });
15881
16331
  return {
15882
16332
  rawData: {
15883
16333
  success: true,
15884
- total: projectedAgents.length,
15885
- unavailableCount,
15886
- unavailableAgents,
15887
- agents: projectedAgents
16334
+ total: discovery.total,
16335
+ unavailableCount: discovery.unavailableCount,
16336
+ unavailableAgents: discovery.unavailableAgents,
16337
+ agents: discovery.agents
15888
16338
  },
15889
- displayData: formatAgentListCard(agents)
16339
+ displayData: formatAgentListCard(discovery.agents)
15890
16340
  };
15891
16341
  }
15892
16342
  var readAgentFunctionSchema = {
@@ -16034,7 +16484,7 @@ var readSkillDocFunctionSchema = {
16034
16484
  }
16035
16485
  };
16036
16486
  async function readSkillDocFunc(args, thunkApi) {
16037
- const { buildReadDocResult } = await import("./readDocTool-LQGR6FUN.js");
16487
+ const { buildReadDocResult } = await import("./readDocTool-LC3A7QTB.js");
16038
16488
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
16039
16489
  if (typeof id !== "string" || !id.trim()) {
16040
16490
  throw new Error("readSkillDoc requires id or doc.");
@@ -16302,11 +16752,14 @@ var addSpaceAction = async (input, thunkAPI) => {
16302
16752
  // packages/app/favorite/favoriteStore.ts
16303
16753
  var import_react3 = __toESM(require_react());
16304
16754
 
16755
+ // packages/app/store.ts
16756
+ var import_react2 = __toESM(require_react());
16757
+
16305
16758
  // packages/app/sessionSnapshot.ts
16306
16759
  var import_react = __toESM(require_react());
16307
16760
 
16308
- // packages/app/hooks/useHasMounted.ts
16309
- var import_react2 = __toESM(require_react());
16761
+ // packages/identity/useIdentity.local.ts
16762
+ var LOCAL_USER_ID = (typeof process !== "undefined" ? process.env?.NOLO_LOCAL_USER_ID : void 0) || (typeof process !== "undefined" ? process.env?.NOLO_USER_ID : void 0) || "local";
16310
16763
 
16311
16764
  // packages/app/favorite/favoriteStore.ts
16312
16765
  var createInitialState = () => ({
@@ -16834,7 +17287,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
16834
17287
  const spaceKey = createSpaceKey.space(spaceId);
16835
17288
  const readSpace = async (dbKey) => {
16836
17289
  try {
16837
- const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-TVX6SN2T.js");
17290
+ const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-IBVOBVMS.js");
16838
17291
  if (fresh) {
16839
17292
  return await dispatch(readAndWait2(dbKey)).unwrap();
16840
17293
  }
@@ -17282,7 +17735,7 @@ var defaultDeps = {
17282
17735
  },
17283
17736
  deleteServerKey: async (thunkApi, server, dbKey) => {
17284
17737
  const state2 = thunkApi.getState();
17285
- const token = state2?.auth?.currentToken;
17738
+ const token = selectIdentityToken(state2);
17286
17739
  if (!server) {
17287
17740
  return { ok: false, status: 0, detail: "missing server" };
17288
17741
  }
@@ -17882,16 +18335,96 @@ async function emailArchiveFunc(args, thunkApi) {
17882
18335
  };
17883
18336
  }
17884
18337
 
18338
+ // packages/ai/tools/table/toolShared.ts
18339
+ var resolveTableIdentity = (args, _state) => {
18340
+ return { tenantId: args?.tenantId, tableId: args?.tableId };
18341
+ };
18342
+ async function loadTableMetaOrThrow(thunkApi, tenantId, tableId) {
18343
+ const key = metaKey(tenantId, tableId);
18344
+ const result = await thunkApi.dispatch(readAndWait(key));
18345
+ const isMatch = typeof readAndWait?.fulfilled?.match === "function" ? readAndWait.fulfilled.match(result) : result?.type === "fulfilled" || Boolean(result?.payload);
18346
+ if (!isMatch || !result?.payload) {
18347
+ const message = result?.payload?.message || result?.error?.message || `\u627E\u4E0D\u5230\u8868 ${tableId} \u7684\u5B9A\u4E49\u3002`;
18348
+ throw new Error(message);
18349
+ }
18350
+ return result.payload;
18351
+ }
18352
+ async function ensureRowsLoaded(thunkApi, tenantId, tableId) {
18353
+ const result = await thunkApi.dispatch(loadTableRows({ tenantId, tableId }));
18354
+ if (!loadTableRows.fulfilled.match(result)) {
18355
+ const message = result.payload || result.error?.message || "\u52A0\u8F7D\u8868\u884C\u5931\u8D25";
18356
+ throw new Error(message);
18357
+ }
18358
+ const loadedRows = Array.isArray(result?.payload) ? result.payload : [];
18359
+ return loadedRows.filter(
18360
+ (row) => row?.tenantId === tenantId && row?.tableId === tableId && !row?.deletedAt
18361
+ );
18362
+ }
18363
+ async function resolveRowOrThrow(thunkApi, args) {
18364
+ const { tenantId, tableId, rowId, dbKey } = args;
18365
+ if (!rowId && !dbKey) {
18366
+ throw new Error("\u9700\u8981\u63D0\u4F9B rowId \u6216 dbKey \u624D\u80FD\u5B9A\u4F4D\u8868\u884C\u3002");
18367
+ }
18368
+ const finalDbKey = dbKey || rowKey.single(tenantId, tableId, String(rowId));
18369
+ const readResult = await thunkApi.dispatch(readAndWait(finalDbKey));
18370
+ if (readAndWait.fulfilled.match(readResult) && readResult.payload && !readResult.payload.deletedAt) {
18371
+ return readResult.payload;
18372
+ }
18373
+ const rows = await ensureRowsLoaded(thunkApi, tenantId, tableId);
18374
+ const found = rows.find((row) => row?.dbKey === finalDbKey || row?.rowId === rowId);
18375
+ if (!found) {
18376
+ throw new Error(`\u627E\u4E0D\u5230\u8981\u64CD\u4F5C\u7684\u884C\uFF1A${rowId || finalDbKey}`);
18377
+ }
18378
+ return found;
18379
+ }
18380
+ async function writeRow(thunkApi, row) {
18381
+ const result = await thunkApi.dispatch(
18382
+ write({
18383
+ data: row,
18384
+ customKey: row.dbKey
18385
+ })
18386
+ );
18387
+ if (!write.fulfilled.match(result)) {
18388
+ const message = result.payload?.message || result.error?.message || "\u5199\u5165\u8868\u884C\u5931\u8D25";
18389
+ throw new Error(message);
18390
+ }
18391
+ return result.payload;
18392
+ }
18393
+ async function patchRecord(thunkApi, dbKey, changes) {
18394
+ const result = await thunkApi.dispatch(
18395
+ patch({
18396
+ dbKey,
18397
+ changes
18398
+ })
18399
+ );
18400
+ if (!patch.fulfilled.match(result)) {
18401
+ const message = result.payload?.message || result.error?.message || `\u66F4\u65B0\u8BB0\u5F55\u5931\u8D25\uFF1A${dbKey}`;
18402
+ throw new Error(message);
18403
+ }
18404
+ return result.payload;
18405
+ }
18406
+ function buildNewRow(tenantId, tableId, values) {
18407
+ const { dbKey, rowId } = rowKey.create(tenantId, tableId);
18408
+ const now = (/* @__PURE__ */ new Date()).toISOString();
18409
+ return {
18410
+ dbKey,
18411
+ tenantId,
18412
+ tableId,
18413
+ rowId,
18414
+ createdAt: now,
18415
+ updatedAt: now,
18416
+ type: "table_row" /* TABLE_ROW */,
18417
+ ...values
18418
+ };
18419
+ }
18420
+
17885
18421
  // packages/ai/tools/table/addTableRowTool.ts
17886
18422
  var addTableRowFunctionSchema = {
17887
18423
  name: "addTableRow",
17888
18424
  description: [
17889
18425
  "\u5728\u6307\u5B9A\u8868\u4E2D\u65B0\u589E\u4E00\u884C\u6570\u636E\u3002",
17890
- "\u3010\u91CD\u8981\u3011\u5982\u679C\u4F60\u662F\u5728\u5BF9\u8BDD\uFF08chat\uFF09\u4E2D\u8C03\u7528\u6B64\u51FD\u6570\uFF08\u800C\u975E\u5728\u8868\u683C\u9875\u9762\u7684\u300C\u9875\u9762\u52A9\u624B\u300D\u4E2D\uFF09\uFF0C",
17891
- "\u5219\u5FC5\u987B\u663E\u5F0F\u4F20\u5165 tenantId \u548C tableId\u3002\u8FD9\u4E24\u4E2A\u503C\u53EF\u4ECE createTable \u7684\u8FD4\u56DE\u7ED3\u679C\u4E2D\u83B7\u53D6\u3002",
17892
- "\u5982\u679C\u4F60\u521A\u521A\u8C03\u7528\u4E86 createTable\uFF0C\u8BF7\u52A1\u5FC5\u5C06\u5176\u8FD4\u56DE\u7684 tenantId \u548C tableId \u4F20\u5165\u6B64\u51FD\u6570\u3002",
17893
- "\u53EA\u6709\u5728\u8868\u683C\u9875\u9762\u6253\u5F00\u300C\u9875\u9762\u52A9\u624B\u300D\u65F6\uFF0CtenantId \u548C tableId \u624D\u53EF\u4EE5\u7701\u7565\uFF08\u4F1A\u81EA\u52A8\u63A8\u65AD\uFF09\u3002",
17894
- "\u3010\u91CD\u8981\u3011\u8868\u683C\u5B57\u6BB5\u5FC5\u987B\u653E\u5728 values \u5BF9\u8C61\u91CC\uFF0C\u4E0D\u8981\u628A content\u3001status \u8FD9\u7C7B\u5217\u540D\u76F4\u63A5\u653E\u5728\u9876\u5C42\u3002",
18426
+ "\u5FC5\u987B\u663E\u5F0F\u4F20\u5165 tenantId \u548C tableId\u3002\u8FD9\u4E24\u4E2A\u503C\u53EF\u4ECE\u521B\u5EFA\u8868\u6216\u67E5\u8BE2\u8868\u7684\u8FD4\u56DE\u7ED3\u679C\u4E2D\u83B7\u53D6\u3002",
18427
+ "\u8868\u683C\u5B57\u6BB5\u5FC5\u987B\u653E\u5728 values \u5BF9\u8C61\u91CC\uFF0C\u4E0D\u8981\u628A content\u3001status \u8FD9\u7C7B\u5217\u540D\u76F4\u63A5\u653E\u5728\u9876\u5C42\u3002",
17895
18428
  '\u5B8C\u6574\u793A\u4F8B\uFF1A{"tenantId":"u1","tableId":"t1","values":{"content":"\u5E0C\u671B\u652F\u6301\u652F\u4ED8\u5B9D\u652F\u4ED8","status":"\u5F85\u5904\u7406"}}\u3002'
17896
18429
  ].join("\n"),
17897
18430
  parameters: {
@@ -17910,14 +18443,14 @@ var addTableRowFunctionSchema = {
17910
18443
  },
17911
18444
  tenantId: {
17912
18445
  type: "string",
17913
- description: "\u79DF\u6237 ID\u3002\u5728\u5BF9\u8BDD\uFF08chat\uFF09\u4E2D\u8C03\u7528\u65F6\u5FC5\u987B\u663E\u5F0F\u4F20\u5165\uFF0C\u4ECE createTable \u7684\u8FD4\u56DE\u7ED3\u679C\u83B7\u53D6\u3002"
18446
+ description: "\u76EE\u6807\u8868\u7684\u79DF\u6237 ID\u3002\u5FC5\u987B\u663E\u5F0F\u4F20\u5165\u3002"
17914
18447
  },
17915
18448
  tableId: {
17916
18449
  type: "string",
17917
- description: "\u8868 ID\u3002\u5728\u5BF9\u8BDD\uFF08chat\uFF09\u4E2D\u8C03\u7528\u65F6\u5FC5\u987B\u663E\u5F0F\u4F20\u5165\uFF0C\u4ECE createTable \u7684\u8FD4\u56DE\u7ED3\u679C\u83B7\u53D6\u3002"
18450
+ description: "\u76EE\u6807\u8868\u7684\u8868 ID\u3002\u5FC5\u987B\u663E\u5F0F\u4F20\u5165\u3002"
17918
18451
  }
17919
18452
  },
17920
- required: ["values"]
18453
+ required: ["tenantId", "tableId", "values"]
17921
18454
  }
17922
18455
  };
17923
18456
  var toPreviewJson = (value, maxLength = 400) => {
@@ -17939,25 +18472,22 @@ var extractLegacyValues = (args) => {
17939
18472
  );
17940
18473
  };
17941
18474
  async function addTableRowFunc(args, thunkApi) {
17942
- const state2 = thunkApi.getState();
17943
- const tableState = state2.table;
17944
- const currentTable = tableState.currentTable;
17945
- const tenantId = args?.tenantId ?? currentTable?.tenantId;
17946
- const tableId = args?.tableId ?? currentTable?.tableId;
17947
- const normalizedValues = args?.values !== void 0 ? args.values : extractLegacyValues(args);
17948
- const values = normalizedValues ?? {};
18475
+ const { tenantId, tableId } = resolveTableIdentity(args);
17949
18476
  if (!tenantId || !tableId) {
17950
18477
  throw new Error(
17951
- "addTableRow \u53EA\u80FD\u5728\u5DF2\u6253\u5F00\u67D0\u5F20\u8868\u7684\u9875\u9762\u4E2D\u8C03\u7528\uFF0C\u6216\u663E\u5F0F\u63D0\u4F9B tenantId \u548C tableId\u3002"
18478
+ "addTableRow \u5FC5\u987B\u663E\u5F0F\u63D0\u4F9B tenantId \u548C tableId\u3002"
17952
18479
  );
17953
18480
  }
18481
+ const normalizedValues = args?.values !== void 0 ? args.values : extractLegacyValues(args);
18482
+ const values = normalizedValues ?? {};
17954
18483
  if (!isRecord(values)) {
17955
18484
  throw new Error(
17956
18485
  'addTableRow.values \u5FC5\u987B\u662F\u4E00\u4E2A\u5BF9\u8C61\uFF08\u5217\u540D\u5230\u503C\u7684\u6620\u5C04\uFF0C\u4F8B\u5982 { "name": "\u5F20\u4E09", "desc": "\u6D4B\u8BD5\u4EFB\u52A1" }\uFF09\u3002'
17957
18486
  );
17958
18487
  }
18488
+ const tableMeta = await loadTableMetaOrThrow(thunkApi, tenantId, tableId);
17959
18489
  if (Object.keys(values).length === 0) {
17960
- const knownCols = currentTable ? currentTable.columns.map((c) => c.name).join(", ") || "(\u65E0\u5217\u5B9A\u4E49)" : "(\u5F53\u524D\u8868\u5B57\u6BB5\u672A\u77E5)";
18490
+ const knownCols = tableMeta && Array.isArray(tableMeta.columns) ? tableMeta.columns.map((c) => c.name).join(", ") || "(\u65E0\u5217\u5B9A\u4E49)" : "(\u76EE\u6807\u8868\u5B57\u6BB5\u672A\u77E5)";
17961
18491
  throw new Error(
17962
18492
  `addTableRow.values \u4E0D\u80FD\u4E3A\u7A7A\uFF1A\u4F60\u9700\u8981\u81F3\u5C11\u4E3A\u4E00\u4E2A\u5B57\u6BB5\u63D0\u4F9B\u503C\u3002
17963
18493
  \u8BF7\u6839\u636E\u7528\u6237\u7684\u8F93\u5165\uFF0C\u4ECE\u4EE5\u4E0B\u5B57\u6BB5\u4E2D\u9009\u62E9\u5E76\u586B\u5145\u503C\uFF1A${knownCols}`
@@ -17965,8 +18495,8 @@ async function addTableRowFunc(args, thunkApi) {
17965
18495
  }
17966
18496
  let sanitizedValues = values;
17967
18497
  let ignoredColumns = [];
17968
- if (currentTable && currentTable.tenantId === tenantId && currentTable.tableId === tableId) {
17969
- const allowedColumns = new Set(currentTable.columns.map((c) => c.name));
18498
+ if (tableMeta && Array.isArray(tableMeta.columns) && tableMeta.columns.length > 0) {
18499
+ const allowedColumns = new Set(tableMeta.columns.map((c) => c.name));
17970
18500
  sanitizedValues = {};
17971
18501
  ignoredColumns = [];
17972
18502
  for (const [key, val] of Object.entries(values)) {
@@ -17977,9 +18507,9 @@ async function addTableRowFunc(args, thunkApi) {
17977
18507
  }
17978
18508
  }
17979
18509
  if (Object.keys(sanitizedValues).length === 0 && Object.keys(values).length > 0) {
17980
- const knownCols = currentTable.columns.map((c) => c.name).join(", ") || "(\u65E0\u5217\u5B9A\u4E49)";
18510
+ const knownCols = tableMeta.columns.map((c) => c.name).join(", ") || "(\u65E0\u5217\u5B9A\u4E49)";
17981
18511
  throw new Error(
17982
- `addTableRow \u5931\u8D25\uFF1A\u63D0\u4F9B\u7684\u5B57\u6BB5\u540D\u90FD\u4E0D\u5728\u5F53\u524D\u8868\u4E2D\u3002
18512
+ `addTableRow \u5931\u8D25\uFF1A\u63D0\u4F9B\u7684\u5B57\u6BB5\u540D\u90FD\u4E0D\u5728\u76EE\u6807\u8868\u4E2D\u3002
17983
18513
  \u5DF2\u77E5\u5B57\u6BB5: ${knownCols}
17984
18514
  \u8BF7\u4EC5\u4F7F\u7528\u8FD9\u4E9B\u5B57\u6BB5\u540D\u4F5C\u4E3A key\u3002`
17985
18515
  );
@@ -17994,10 +18524,10 @@ async function addTableRowFunc(args, thunkApi) {
17994
18524
  throw new Error(msg);
17995
18525
  }
17996
18526
  const createdRow = actionResult.payload;
17997
- const tableLabel = currentTable?.displayName || currentTable?.tableId || tableId || "\u5F53\u524D\u8868";
18527
+ const tableLabel = tableMeta?.displayName || tableMeta?.tableId || tableId;
17998
18528
  const ignoredInfo = ignoredColumns.length > 0 ? `
17999
18529
 
18000
- \u6CE8\u610F\uFF1A\u4EE5\u4E0B\u5B57\u6BB5\u5728\u5F53\u524D\u8868\u4E2D\u4E0D\u5B58\u5728\uFF0C\u5DF2\u88AB\u5FFD\u7565\uFF1A${ignoredColumns.join(
18530
+ \u6CE8\u610F\uFF1A\u4EE5\u4E0B\u5B57\u6BB5\u5728\u76EE\u6807\u8868\u4E2D\u4E0D\u5B58\u5728\uFF0C\u5DF2\u88AB\u5FFD\u7565\uFF1A${ignoredColumns.join(
18001
18531
  ", "
18002
18532
  )}` : "";
18003
18533
  return {
@@ -18451,10 +18981,10 @@ var normalizeDate = (value) => {
18451
18981
  return value.toISOString().slice(0, 10);
18452
18982
  }
18453
18983
  if (typeof value !== "string") return void 0;
18454
- const trimmed = value.trim();
18455
- if (!trimmed) return void 0;
18456
- if (/^\d{4}-\d{2}-\d{2}$/.test(trimmed)) return trimmed;
18457
- const parsed = new Date(trimmed);
18984
+ const trimmed2 = value.trim();
18985
+ if (!trimmed2) return void 0;
18986
+ if (/^\d{4}-\d{2}-\d{2}$/.test(trimmed2)) return trimmed2;
18987
+ const parsed = new Date(trimmed2);
18458
18988
  if (Number.isNaN(parsed.getTime())) return void 0;
18459
18989
  return parsed.toISOString().slice(0, 10);
18460
18990
  };
@@ -18463,9 +18993,9 @@ var normalizeDateTime = (value) => {
18463
18993
  return value.toISOString();
18464
18994
  }
18465
18995
  if (typeof value !== "string") return void 0;
18466
- const trimmed = value.trim();
18467
- if (!trimmed) return void 0;
18468
- const parsed = new Date(trimmed);
18996
+ const trimmed2 = value.trim();
18997
+ if (!trimmed2) return void 0;
18998
+ const parsed = new Date(trimmed2);
18469
18999
  if (Number.isNaN(parsed.getTime())) return void 0;
18470
19000
  return parsed.toISOString();
18471
19001
  };
@@ -18477,9 +19007,9 @@ var normalizeMultiSelectInput = (value) => {
18477
19007
  return list;
18478
19008
  }
18479
19009
  if (typeof value === "string") {
18480
- const trimmed = value.trim();
18481
- if (!trimmed) return [];
18482
- return trimmed.split(",").map((item) => item.trim()).filter(Boolean);
19010
+ const trimmed2 = value.trim();
19011
+ if (!trimmed2) return [];
19012
+ return trimmed2.split(",").map((item) => item.trim()).filter(Boolean);
18483
19013
  }
18484
19014
  return void 0;
18485
19015
  };
@@ -18660,90 +19190,6 @@ var pickRowColumns = (row, columns, options = {}) => {
18660
19190
  };
18661
19191
  var formatKnownColumns = (tableMeta) => tableMeta.columns.map((column) => column.name).join(", ") || "(\u65E0\u5217\u5B9A\u4E49)";
18662
19192
 
18663
- // packages/ai/tools/table/toolShared.ts
18664
- var resolveTableIdentity = (args, state2) => {
18665
- const currentTable = state2.table.currentTable;
18666
- const tenantId = args.tenantId ?? currentTable?.tenantId;
18667
- const tableId = args.tableId ?? currentTable?.tableId;
18668
- return { tenantId, tableId, currentTable };
18669
- };
18670
- async function loadTableMetaOrThrow(thunkApi, tenantId, tableId) {
18671
- const result = await thunkApi.dispatch(readAndWait(metaKey(tenantId, tableId)));
18672
- if (!readAndWait.fulfilled.match(result) || !result.payload) {
18673
- const message = result.payload?.message || result.error?.message || `\u627E\u4E0D\u5230\u8868 ${tableId} \u7684\u5B9A\u4E49\u3002`;
18674
- throw new Error(message);
18675
- }
18676
- return result.payload;
18677
- }
18678
- async function ensureRowsLoaded(thunkApi, tenantId, tableId) {
18679
- const result = await thunkApi.dispatch(loadTableRows({ tenantId, tableId }));
18680
- if (!loadTableRows.fulfilled.match(result)) {
18681
- const message = result.payload || result.error?.message || "\u52A0\u8F7D\u8868\u884C\u5931\u8D25";
18682
- throw new Error(message);
18683
- }
18684
- const state2 = thunkApi.getState();
18685
- return state2.table.rows.filter(
18686
- (row) => row?.tenantId === tenantId && row?.tableId === tableId && !row?.deletedAt
18687
- );
18688
- }
18689
- async function resolveRowOrThrow(thunkApi, args) {
18690
- const { tenantId, tableId, rowId, dbKey } = args;
18691
- if (!rowId && !dbKey) {
18692
- throw new Error("\u9700\u8981\u63D0\u4F9B rowId \u6216 dbKey \u624D\u80FD\u5B9A\u4F4D\u8868\u884C\u3002");
18693
- }
18694
- const finalDbKey = dbKey || rowKey.single(tenantId, tableId, String(rowId));
18695
- const readResult = await thunkApi.dispatch(readAndWait(finalDbKey));
18696
- if (readAndWait.fulfilled.match(readResult) && readResult.payload && !readResult.payload.deletedAt) {
18697
- return readResult.payload;
18698
- }
18699
- const rows = await ensureRowsLoaded(thunkApi, tenantId, tableId);
18700
- const found = rows.find((row) => row?.dbKey === finalDbKey || row?.rowId === rowId);
18701
- if (!found) {
18702
- throw new Error(`\u627E\u4E0D\u5230\u8981\u64CD\u4F5C\u7684\u884C\uFF1A${rowId || finalDbKey}`);
18703
- }
18704
- return found;
18705
- }
18706
- async function writeRow(thunkApi, row) {
18707
- const result = await thunkApi.dispatch(
18708
- write({
18709
- data: row,
18710
- customKey: row.dbKey
18711
- })
18712
- );
18713
- if (!write.fulfilled.match(result)) {
18714
- const message = result.payload?.message || result.error?.message || "\u5199\u5165\u8868\u884C\u5931\u8D25";
18715
- throw new Error(message);
18716
- }
18717
- return result.payload;
18718
- }
18719
- async function patchRecord(thunkApi, dbKey, changes) {
18720
- const result = await thunkApi.dispatch(
18721
- patch({
18722
- dbKey,
18723
- changes
18724
- })
18725
- );
18726
- if (!patch.fulfilled.match(result)) {
18727
- const message = result.payload?.message || result.error?.message || `\u66F4\u65B0\u8BB0\u5F55\u5931\u8D25\uFF1A${dbKey}`;
18728
- throw new Error(message);
18729
- }
18730
- return result.payload;
18731
- }
18732
- function buildNewRow(tenantId, tableId, values) {
18733
- const { dbKey, rowId } = rowKey.create(tenantId, tableId);
18734
- const now = (/* @__PURE__ */ new Date()).toISOString();
18735
- return {
18736
- dbKey,
18737
- tenantId,
18738
- tableId,
18739
- rowId,
18740
- createdAt: now,
18741
- updatedAt: now,
18742
- type: "table_row" /* TABLE_ROW */,
18743
- ...values
18744
- };
18745
- }
18746
-
18747
19193
  // packages/ai/tools/table/rowTools.ts
18748
19194
  var toPreviewJson3 = (value, maxLength = 600) => {
18749
19195
  try {
@@ -18755,7 +19201,10 @@ var toPreviewJson3 = (value, maxLength = 600) => {
18755
19201
  return "[\u65E0\u6CD5\u5E8F\u5217\u5316\u4E3A JSON]";
18756
19202
  }
18757
19203
  };
18758
- var selectCurrentUserId = (state2) => typeof state2.auth?.currentUser?.userId === "string" ? state2.auth.currentUser.userId : void 0;
19204
+ var selectCurrentUserId = (state2) => {
19205
+ const userId = selectIdentityUserId(state2);
19206
+ return typeof userId === "string" ? userId : void 0;
19207
+ };
18759
19208
  var normalizeTableQueryArgs = (args, thunkApi) => {
18760
19209
  const state2 = thunkApi.getState();
18761
19210
  return buildNoloTableQueryRequest(args ?? {}, selectCurrentUserId(state2)) ?? args;
@@ -18764,7 +19213,7 @@ var requireTableIdentity = (args, thunkApi) => {
18764
19213
  const state2 = thunkApi.getState();
18765
19214
  const { tenantId, tableId } = resolveTableIdentity(args, state2);
18766
19215
  if (!tenantId || !tableId) {
18767
- throw new Error("\u9700\u8981\u663E\u5F0F\u63D0\u4F9B tenantId \u548C tableId\uFF0C\u6216\u5728\u5DF2\u6253\u5F00\u7684\u8868\u9875\u9762\u4E2D\u8C03\u7528\u3002");
19216
+ throw new Error("\u9700\u8981\u663E\u5F0F\u63D0\u4F9B tenantId \u548C tableId\u3002");
18768
19217
  }
18769
19218
  return { tenantId, tableId };
18770
19219
  };
@@ -19093,7 +19542,7 @@ var requireTableIdentity2 = (args, thunkApi) => {
19093
19542
  const state2 = thunkApi.getState();
19094
19543
  const { tenantId, tableId } = resolveTableIdentity(args, state2);
19095
19544
  if (!tenantId || !tableId) {
19096
- throw new Error("\u9700\u8981\u663E\u5F0F\u63D0\u4F9B tenantId \u548C tableId\uFF0C\u6216\u5728\u5DF2\u6253\u5F00\u7684\u8868\u9875\u9762\u4E2D\u8C03\u7528\u3002");
19545
+ throw new Error("\u9700\u8981\u663E\u5F0F\u63D0\u4F9B tenantId \u548C tableId\u3002");
19097
19546
  }
19098
19547
  return { tenantId, tableId };
19099
19548
  };
@@ -19520,14 +19969,14 @@ async function assertFetchableDocsUrl(rawUrl, fetchImpl = fetch, originalUrl) {
19520
19969
  }
19521
19970
  }
19522
19971
  function detectExtractionIssue(markdown, sourceUrl) {
19523
- const trimmed = markdown.trim();
19524
- if (!trimmed) {
19972
+ const trimmed2 = markdown.trim();
19973
+ if (!trimmed2) {
19525
19974
  return {
19526
19975
  code: "EMPTY_EXTRACTION",
19527
19976
  message: `\u8BBF\u95EE\u7F51\u9875\u5931\u8D25\uFF1A${sourceUrl} \u672A\u63D0\u53D6\u5230\u6B63\u6587\u5185\u5BB9\u3002`
19528
19977
  };
19529
19978
  }
19530
- const lower = trimmed.toLowerCase();
19979
+ const lower = trimmed2.toLowerCase();
19531
19980
  if (lower.startsWith("<!doctype html") || lower.startsWith("<html") || lower.includes("__next_error__")) {
19532
19981
  return {
19533
19982
  code: "HTML_SHELL",
@@ -21202,11 +21651,11 @@ var firecrawlSearchSchema = {
21202
21651
  }
21203
21652
  };
21204
21653
  function normalizeHttpUrl(rawUrl) {
21205
- const trimmed = rawUrl.trim();
21206
- if (!trimmed.startsWith("http://") && !trimmed.startsWith("https://")) {
21654
+ const trimmed2 = rawUrl.trim();
21655
+ if (!trimmed2.startsWith("http://") && !trimmed2.startsWith("https://")) {
21207
21656
  throw new Error("firecrawl_scrape \u9700\u8981\u6709\u6548\u7684 http/https URL\u3002");
21208
21657
  }
21209
- return trimmed;
21658
+ return trimmed2;
21210
21659
  }
21211
21660
  function normalizeScrapeTimeout(timeout) {
21212
21661
  if (timeout === void 0 || timeout === null) return void 0;
@@ -21587,9 +22036,9 @@ async function googleSearchScraperFunc(args, thunkApi) {
21587
22036
  }
21588
22037
  if (Array.isArray(args.queries)) {
21589
22038
  for (const q of args.queries) {
21590
- const trimmed = asOptionalTrimmedString(q);
21591
- if (trimmed) {
21592
- collected.push(trimmed);
22039
+ const trimmed2 = asOptionalTrimmedString(q);
22040
+ if (trimmed2) {
22041
+ collected.push(trimmed2);
21593
22042
  }
21594
22043
  }
21595
22044
  } else {
@@ -21786,7 +22235,7 @@ var cloudflareCrawlStatusFunctionSchema = {
21786
22235
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
21787
22236
  const { jobId, limit, status, cursor } = args;
21788
22237
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
21789
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-53U4UDFF.js");
22238
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-VGYUB4P5.js");
21790
22239
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
21791
22240
  const params = new URLSearchParams();
21792
22241
  if (limit !== void 0) params.set("limit", String(limit));
@@ -22557,11 +23006,14 @@ function stringifyIfPresent(value) {
22557
23006
  // packages/ai/tools/geminiImagePreviewTool.ts
22558
23007
  var selectCurrentDialogKeyFromState = (_state) => getActiveDialogKey();
22559
23008
  var selectCurrentSpaceIdFromState = (_state) => getCurrentSpaceId();
22560
- var selectUserIdFromState = (state2) => typeof state2?.auth?.currentUser?.userId === "string" ? state2.auth.currentUser.userId : null;
23009
+ var selectUserIdFromState = (state2) => {
23010
+ const userId = selectIdentityUserId(state2);
23011
+ return typeof userId === "string" ? userId : null;
23012
+ };
22561
23013
  var selectCurrentServerFromState = (state2) => typeof state2?.settings?.currentServer === "string" ? state2.settings.currentServer : null;
22562
23014
  async function addImageContentToSpace(input) {
22563
23015
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
22564
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-53BZ34AE.js")).addContentAction;
23016
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-V3NAZRTJ.js")).addContentAction;
22565
23017
  await addContentAction2(
22566
23018
  {
22567
23019
  spaceId: input.spaceId,
@@ -24389,26 +24841,6 @@ var resolveRetryAfterMs = (headers, fallbackMs, bodyRetryAfterMs) => {
24389
24841
  return normalizeNonNegativeMs(bodyRetryAfterMs, fallbackMs);
24390
24842
  };
24391
24843
 
24392
- // packages/core/abortableDelay.ts
24393
- function waitForAbortableDelay(ms, signal) {
24394
- const delayMs = Number.isFinite(ms) && ms >= 0 ? Math.round(ms) : 0;
24395
- if (signal?.aborted) {
24396
- return Promise.reject(new DOMException("Aborted", "AbortError"));
24397
- }
24398
- return new Promise((resolve, reject) => {
24399
- const onAbort = () => {
24400
- clearTimeout(timeoutId);
24401
- signal?.removeEventListener("abort", onAbort);
24402
- reject(new DOMException("Aborted", "AbortError"));
24403
- };
24404
- const timeoutId = setTimeout(() => {
24405
- signal?.removeEventListener("abort", onAbort);
24406
- resolve();
24407
- }, delayMs);
24408
- signal?.addEventListener("abort", onAbort, { once: true });
24409
- });
24410
- }
24411
-
24412
24844
  // packages/core/deployWindowRetrySignal.ts
24413
24845
  function isDeployWindowRetrySignal(e) {
24414
24846
  if (e.reason === CORE_DRAIN_REASON) return true;
@@ -24711,9 +25143,10 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
24711
25143
  // packages/ai/tools/agent/startAgentRunTool.ts
24712
25144
  function buildStartAgentRunFunctionSchema(opts) {
24713
25145
  const supportsWait = opts?.supportsWait !== false;
25146
+ const wakeEnabled = opts?.wakeEnabled === true;
24714
25147
  return {
24715
25148
  name: "startAgentRun",
24716
- description: "\u542F\u52A8\u4E00\u4E2A Agent \u6267\u884C\u5B50\u4EFB\u52A1\u3002\u9ED8\u8BA4\u5F02\u6B65\uFF08fork+exec\uFF09\uFF1A\u7ACB\u5373\u8FD4\u56DE runId \u4E0D\u963B\u585E\u5BF9\u8BDD\uFF0C\u4E4B\u540E\u7528 controlAgentRun \u89C2\u5BDF/\u505C\u6B62\uFF0C\u7B49\u7EC8\u6001\u901A\u77E5\uFF0C\u7981\u6B62\u8F6E\u8BE2\u3002" + (supportsWait ? "\u8981\u540C\u6B65\u7ED3\u679C\u4F20 wait:true\uFF08\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF0C\u4EC5\u9650 \u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C \u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD \u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u65E0\u5E76\u884C\u5DE5\u4F5C\uFF1B\u8BE6\u89C1 wait \u53C2\u6570\uFF09\u3002wait:true \u65F6\u53EF\u7528 resultMode \u63A7\u5236\u8FD4\u56DE\u5185\u5BB9\uFF1Afull=\u5B8C\u6574\u8F93\u51FA\uFF1Bsummary=\u53EA\u56DE\u5934\u5C3E\u603B\u7ED3\uFF08\u9632\u957F\u8F93\u51FA\u6491\u7206\u4E0A\u4E0B\u6587\uFF09\u3002" : "\u672C\u5BBF\u4E3B\u53EA\u6709\u5F02\u6B65\u6D3E\u53D1\uFF0C\u6CA1\u6709\u540C\u6B65\u7B49\u5F85\uFF1Arun \u5230\u7EC8\u6001\u4F1A\u81EA\u52A8\u5524\u9192\u5BF9\u8BDD\u628A\u7ED3\u679C\u9001\u56DE\u6765\u3002"),
25149
+ description: "\u542F\u52A8\u4E00\u4E2A Agent \u6267\u884C\u5B50\u4EFB\u52A1\u3002\u9ED8\u8BA4\u5F02\u6B65\uFF08fork+exec\uFF09\uFF1A\u7ACB\u5373\u8FD4\u56DE runId \u4E0D\u963B\u585E\u5BF9\u8BDD\uFF0C\u6D3E\u53D1\u540E\u76F4\u63A5\u6536\u5C3E\u7B49\u7EC8\u6001\u901A\u77E5\uFF0C\u7981\u6B62\u8F6E\u8BE2\uFF1BcontrolAgentRun \u7528\u4E8E\u63A7\u5236\uFF08\u53EB\u505C/\u8FFD\u52A0\u6307\u4EE4\uFF09\u4E0E\u5F02\u5E38\u8BCA\u65AD\u3002" + (supportsWait ? "\u8981\u540C\u6B65\u7ED3\u679C\u4F20 wait:true\uFF08\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF0C\u4EC5\u9650 \u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C \u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD \u2462 \u73AF\u5883\u4E0D\u652F\u6301\u7EC8\u6001\u5524\u9192\u4E14\u65E0\u5E76\u884C\u5DE5\u4F5C\uFF1B\u8BE6\u89C1 wait \u53C2\u6570\uFF09\u3002wait:true \u65F6\u53EF\u7528 resultMode \u63A7\u5236\u8FD4\u56DE\u5185\u5BB9\uFF1Afull=\u5B8C\u6574\u8F93\u51FA\uFF1Bsummary=\u53EA\u56DE\u5934\u5C3E\u603B\u7ED3\uFF08\u9632\u957F\u8F93\u51FA\u6491\u7206\u4E0A\u4E0B\u6587\uFF09\u3002" : wakeEnabled ? "\u53EA\u652F\u6301\u5F02\u6B65\u6D3E\u53D1\uFF1Brun \u5230\u7EC8\u6001\u4F1A\u81EA\u52A8\u901A\u8FC7 terminal wake \u628A\u7236\u5BF9\u8BDD\u63A5\u56DE\u6765\uFF1B\u6D3E\u53D1\u540E\u76F4\u63A5\u6536\u5C3E\uFF0C\u4E0D\u8981\u8F6E\u8BE2" : "\u53EA\u652F\u6301\u5F02\u6B65\u6D3E\u53D1\uFF0CstartAgentRun \u4E0D\u63D0\u4F9B\u540C\u6B65\u7B49\u5F85\uFF1B\u9700\u8981\u7B49\u7EC8\u6001\u65F6\u53EF\u7528 controlAgentRun(wait)\uFF08\u82E5\u8BE5 action \u53EF\u7528\uFF09\uFF1B\u4E0D\u8981\u5047\u8BBE\u4F1A\u81EA\u52A8 terminal wake"),
24717
25150
  parameters: {
24718
25151
  type: "object",
24719
25152
  properties: {
@@ -24723,10 +25156,10 @@ function buildStartAgentRunFunctionSchema(opts) {
24723
25156
  },
24724
25157
  task: {
24725
25158
  type: "string",
24726
- description: "\u59D4\u6258\u7ED9\u8BE5 Agent \u7684\u5B50\u4EFB\u52A1\u63CF\u8FF0\uFF08\u81EA\u7136\u8BED\u8A00\uFF09\u3002\u5EFA\u8BAE\u5305\u542B\u5FC5\u8981\u7684\u4E0A\u4E0B\u6587\u8BF4\u660E\u3002"
25159
+ description: "\u59D4\u6258\u7ED9\u8BE5 Agent \u7684\u7CBE\u7B80\u5B50\u4EFB\u52A1\u6307\u4EE4/brief\u3002\u63A8\u8350\u901A\u8FC7\u5171\u4EAB\u5F15\u7528\uFF08\u5982 commit hash\u3001\u6587\u4EF6\u8DEF\u5F84\u4E0E\u884C\u53F7\u533A\u95F4 path:1-50\u3001dialogId\u3001artifact id \u7B49\uFF09\u6307\u5F15\u5B50\u4EFB\u52A1\u81EA\u884C\u8BFB\u53D6\uFF0C\u4E25\u7981\u5C06\u5B8C\u6574\u6587\u4EF6\u5185\u5BB9\u3001\u5168\u91CF git diff\u3001\u957F\u65E5\u5FD7\u6216\u4ED3\u5E93\u603B\u8BF4\u660E\u590D\u5236\u8FDB task\u3002"
24727
25160
  },
24728
25161
  input: {
24729
- description: "\u53EF\u9009\u3002JSON \u6216\u5B57\u7B26\u4E32\uFF0C\u4F5C\u4E3A\u672C\u6B21\u5B50\u4EFB\u52A1\u7684\u9644\u52A0\u8F93\u5165\uFF08\u5982\u6293\u53D6\u5230\u7684\u539F\u59CB\u6570\u636E\u3001\u4E0A\u4E0B\u6587\u7247\u6BB5\u7B49\uFF09\u3002"
25162
+ description: "\u53EF\u9009\u3002\u4EC5\u7528\u4E8E\u4F20\u9012\u5B50\u4EFB\u52A1\u65E0\u6CD5\u901A\u8FC7\u672C\u5730\u6587\u4EF6\u7CFB\u7EDF\u6216\u5171\u4EAB\u5F15\u7528\u76F4\u63A5\u8BFB\u53D6\u7684\u771F\u5B9E\u5916\u90E8\u8F93\u5165\uFF08\u5982\u5916\u90E8 API \u54CD\u5E94\u3001\u77AC\u65F6\u6570\u636E\uFF09\u3002\u5DF2\u6709\u5171\u4EAB\u5F15\u7528\u6216\u65E0\u9700\u9644\u52A0\u6570\u636E\u65F6\u8BF7\u7701\u7565\uFF0C\u5207\u52FF\u91CD\u590D\u590D\u5236 task \u63CF\u8FF0\u3002"
24730
25163
  },
24731
25164
  agentName: {
24732
25165
  type: "string",
@@ -24747,7 +25180,7 @@ function buildStartAgentRunFunctionSchema(opts) {
24747
25180
  ...supportsWait ? {
24748
25181
  wait: {
24749
25182
  type: "boolean",
24750
- description: "\u53EF\u9009\u3002\u4E3A true \u65F6\u540C\u6B65\u7B49\u5F85\u5B50\u4EFB\u52A1\u5B8C\u6210\u5E76\u76F4\u63A5\u8FD4\u56DE\u7ED3\u679C\uFF08\u8BA2\u9605 SSE \u7B49 done/failed\uFF09\uFF0C\u4E0D\u8FD4\u56DE runId\u3002\u963B\u585E\u7B49\u5F85\u4F1A\u51BB\u7ED3\u5F53\u524D\u5BF9\u8BDD\uFF0C\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF08\u89C1\u9876\u5C42\u63CF\u8FF0\uFF09\uFF1B\u9ED8\u8BA4 false\uFF08\u5F02\u6B65\uFF0C\u8FD4\u56DE runId \u540E\u7528 controlAgentRun \u89C2\u5BDF\uFF09\u3002",
25183
+ description: "\u53EF\u9009\u3002\u4E3A true \u65F6\u540C\u6B65\u7B49\u5F85\u5B50\u4EFB\u52A1\u5B8C\u6210\u5E76\u76F4\u63A5\u8FD4\u56DE\u7ED3\u679C\uFF08\u8BA2\u9605 SSE \u7B49 done/failed\uFF09\uFF0C\u4E0D\u8FD4\u56DE runId\u3002\u963B\u585E\u7B49\u5F85\u4F1A\u51BB\u7ED3\u5F53\u524D\u5BF9\u8BDD\uFF0C\u4EC5\u9650\u4E09\u79CD\u60C5\u51B5\uFF08\u89C1\u9876\u5C42\u63CF\u8FF0\uFF09\uFF1B\u9ED8\u8BA4 false\uFF08\u5F02\u6B65\uFF0C\u8FD4\u56DE runId \u540E\u76F4\u63A5\u6536\u5C3E\u7B49\u7EC8\u6001\u901A\u77E5\uFF09\u3002",
24751
25184
  default: false
24752
25185
  },
24753
25186
  resultMode: {
@@ -24779,6 +25212,7 @@ async function startAgentRunFunc(args, thunkApi, _context) {
24779
25212
  throw new Error("startAgentRun: \u7F3A\u5C11\u6709\u6548\u7684 task \u6587\u672C\u63CF\u8FF0\u3002");
24780
25213
  }
24781
25214
  const content = buildDelegatedTaskContent(task, input);
25215
+ const payloadMetrics = calculateDelegatedPayloadMetrics(task, input, content);
24782
25216
  const activeDialogKey = getActiveDialogKey();
24783
25217
  const explicitParentDialogId = typeof args.parentDialogId === "string" && args.parentDialogId.trim() ? args.parentDialogId.includes("-") ? extractCustomId(args.parentDialogId) : args.parentDialogId.trim() : void 0;
24784
25218
  const parentDialogId = explicitParentDialogId ?? (activeDialogKey ? extractCustomId(activeDialogKey) : void 0);
@@ -24800,7 +25234,10 @@ async function startAgentRunFunc(args, thunkApi, _context) {
24800
25234
  const fullContent = bgResult.content ?? "";
24801
25235
  return {
24802
25236
  rawData: resultMode === "summary" ? summarizeChildContent(fullContent) : fullContent,
24803
- displayData: `\u2705 startAgentRun \u540C\u6B65\u5B8C\u6210\uFF0CdialogId: ${bgResult.dialogId}${resultMode === "summary" ? "\uFF08summary\uFF09" : ""}`
25237
+ displayData: `\u2705 startAgentRun \u540C\u6B65\u5B8C\u6210\uFF0CdialogId: ${bgResult.dialogId}${resultMode === "summary" ? "\uFF08summary\uFF09" : ""}`,
25238
+ metadata: {
25239
+ payloadMetrics
25240
+ }
24804
25241
  };
24805
25242
  }
24806
25243
  const runId = bgResult.dialogId;
@@ -24819,12 +25256,16 @@ async function startAgentRunFunc(args, thunkApi, _context) {
24819
25256
  // CLI local path it is also persisted on the run record.
24820
25257
  batchId: effectiveBatchId,
24821
25258
  ...resolvedName ? { agentName: resolvedName } : {},
24822
- ...taskPreview ? { taskPreview } : {}
25259
+ ...taskPreview ? { taskPreview } : {},
25260
+ payloadMetrics
24823
25261
  },
24824
25262
  displayData: formatStartRunCard(resolveRunLabel(identity), status, {
24825
25263
  task: taskPreview,
24826
25264
  runId
24827
- })
25265
+ }),
25266
+ metadata: {
25267
+ payloadMetrics
25268
+ }
24828
25269
  };
24829
25270
  } catch (e) {
24830
25271
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
@@ -24859,20 +25300,24 @@ var ACTION_DESCRIPTIONS = {
24859
25300
  wait: "wait=\u7EC8\u6001\u963B\u585E\u7B49\u5F85\uFF1A\u8BA2\u9605\u8BE5 dialog \u7684 SSE \u4E8B\u4EF6\u6D41\u7B49 done/failed\uFF0C\u5DF2\u7EC8\u6001\u7ACB\u5373\u8FD4\u56DE\uFF0C\u4E0D\u662F\u8F6E\u8BE2",
24860
25301
  todo: "todo=\u5217\u51FA runtime todo\uFF08\u7531 startAgentRun \u7684 batchId/trackTodo \u4EA7\u751F\uFF09"
24861
25302
  };
25303
+ var WAKE_STATUS_ACTION_DESCRIPTION = "status=\u6309\u9700\u8BCA\u65AD\u5355\u6761 run\uFF1A\u4EC5\u5728\u6000\u7591\u5361\u6B7B\u3001\u5931\u8D25\u540E\u770B\u8BE6\u60C5/\u65E5\u5FD7\uFF08tailLines>0\uFF09\u3001\u6216\u7528\u6237\u660E\u786E\u8BE2\u95EE\u6267\u884C\u7EC6\u8282\u65F6\u8C03\u7528\uFF1B\u6B63\u5E38\u8FD0\u884C\u7684\u8FDB\u5EA6\u7531\u5BBF\u4E3B\u89C2\u5BDF\uFF0C\u7981\u6B62\u8FDE\u7EED status \u67E5\u8BE2\u7B49\u5F85\u5B8C\u6210";
24862
25304
  function buildControlAgentRunFunctionSchema(opts) {
24863
25305
  const actions = opts?.actions ?? CONTROL_AGENT_RUN_ACTIONS;
24864
25306
  const hasWait = actions.includes("wait");
25307
+ const wake = opts?.wakeEnabled === true;
24865
25308
  const actionList = actions.filter((a) => a !== "todo").join("/");
24866
25309
  return {
24867
25310
  name: "controlAgentRun",
24868
- description: `\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\uFF08action\uFF1A${actionList}\uFF0C\u53E6\u6709 todo \u67E5\u8BE2\uFF09\u3002` + (hasWait ? "\u7528 startAgentRun \u62FF\u5230 runId \u540E\u8DDF\u8FDB\u5EA6\u3001\u7B49\u7ED3\u679C\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002" : "\u7528 startAgentRun \u62FF\u5230 runId \u540E\u8DDF\u8FDB\u5EA6\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002") + "\u76EF\u68A2/\u8F6E\u8BE2\u7EAA\u5F8B\u89C1 system prompt\u300C\u591A Agent \u7F16\u6392\u300D\u6BB5\uFF1A\u5F02\u6B65\u6D3E\u53D1\u540E\u7B49\u7EC8\u6001\u901A\u77E5\u3001\u4E0D\u8981\u8F6E\u8BE2\uFF1B" + (hasWait ? "\u963B\u585E\u7B49\u5F85\uFF08wait action\uFF09\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF0C\u4EC5\u9650 \u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C \u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD \u2462 \u65E0\u5E76\u884C\u5DE5\u4F5C\u53EF\u505A\u3002" : "\u672C\u73AF\u5883\u6709\u7EC8\u6001\u5524\u9192\uFF1Arun \u5230\u7EC8\u6001\u4F1A\u81EA\u52A8\u628A\u5BF9\u8BDD\u63A5\u56DE\u6765\uFF0C\u6240\u4EE5\u6CA1\u6709\u963B\u585E\u7B49\u5F85\u52A8\u4F5C\u2014\u2014\u6D3E\u53D1\u540E\u76F4\u63A5\u6536\u5C3E\uFF0C\u4E0D\u8981\u7528\u8FDE\u7EED\u67E5\u72B6\u6001\u4EE3\u66FF\u7B49\u5F85\u3002") + "\u672C\u5DE5\u5177\u4F9B\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u4E0D\u5FC5\u4E3A\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8C03\u7528\uFF0C\u8FD4\u56DE\u503C\u4E5F\u4E0D\u8981\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
25311
+ description: `\u89C2\u5BDF\u548C\u63A7\u5236\u540E\u53F0 agent run\uFF08action\uFF1A${actionList}\uFF0C\u53E6\u6709 todo \u67E5\u8BE2\uFF09\u3002` + (wake ? "\u672C\u73AF\u5883\u6709\u7EC8\u6001\u5524\u9192\uFF08terminal wake\uFF09\uFF1A\u6B63\u5E38\u540E\u53F0 run \u6D3E\u53D1\u540E\u76F4\u63A5\u6536\u5C3E\uFF0C\u5BBF\u4E3B\u4F1A\u6301\u7EED\u89C2\u5BDF\u751F\u547D\u5468\u671F\u5E76\u5728 run \u5230\u7EC8\u6001\u65F6\u81EA\u52A8\u628A\u7236\u5BF9\u8BDD\u63A5\u56DE\u6765\u3002" : hasWait ? "\u7528 startAgentRun \u62FF\u5230 runId \u540E\u8DDF\u8FDB\u5EA6\u3001\u7B49\u7ED3\u679C\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002" : "\u7528 startAgentRun \u62FF\u5230 runId \u540E\u8DDF\u8FDB\u5EA6\u3001\u8FFD\u52A0\u6307\u4EE4\u6216\u53EB\u505C\u3002") + "\u76EF\u68A2/\u8F6E\u8BE2\u7EAA\u5F8B\u89C1 system prompt\u300C\u591A Agent \u7F16\u6392\u300D\u6BB5\uFF1A\u5F02\u6B65\u6D3E\u53D1\u540E\u7B49\u7EC8\u6001\u901A\u77E5\u3001\u4E0D\u8981\u8F6E\u8BE2\uFF1B" + (hasWait ? "\u963B\u585E\u7B49\u5F85\uFF08wait action\uFF09\u4F1A\u51BB\u7ED3\u5BF9\u8BDD\uFF0C\u4EC5\u9650 \u2460 \u9884\u8BA1 <100s \u4E14\u9A6C\u4E0A\u8981\u7528\u7ED3\u679C \u2461 \u7528\u6237\u660E\u786E\u8981\u6C42\u540C\u6B65\u7B49\u5F85\u6216\u6B63\u5728\u4E0E\u8BE5\u5B50\u4EFB\u52A1\u5BF9\u8BDD \u2462 \u65E0\u5E76\u884C\u5DE5\u4F5C\u53EF\u505A\u3002" : wake ? "\u672C\u5DE5\u5177\u6CA1\u6709\u963B\u585E\u7B49\u5F85\u52A8\u4F5C\uFF0C\u53EA\u7528\u4E8E\u63A7\u5236\u3001\u5F02\u5E38\u8BCA\u65AD\u548C\u5FC5\u8981\u7684\u4E00\u6B21\u6027\u72B6\u6001\u68C0\u67E5\uFF0C\u4E0D\u7528\u4E8E\u7B49\u5F85\u5B8C\u6210\u6216\u6301\u7EED\u8DDF\u8E2A\u8FDB\u5EA6\uFF0C\u4E0D\u8981\u7528\u8FDE\u7EED\u67E5\u72B6\u6001\u4EE3\u66FF\u7B49\u5F85\u3002" : "") + "\u672C\u5DE5\u5177\u4F9B\u4F60\u81EA\u5DF1\u505A\u51B3\u7B56\u7528\uFF1A\u7528\u6237\u754C\u9762\u5DF2\u5B9E\u65F6\u663E\u793A\u6BCF\u6761 run \u7684\u72B6\u6001\uFF0C\u4E0D\u5FC5\u4E3A\u300C\u8BA9\u7528\u6237\u770B\u5230\u72B6\u6001\u300D\u800C\u8C03\u7528\uFF0C\u8FD4\u56DE\u503C\u4E5F\u4E0D\u8981\u590D\u8FF0\u7ED9\u7528\u6237\u3002",
24869
25312
  parameters: {
24870
25313
  type: "object",
24871
25314
  properties: {
24872
25315
  action: {
24873
25316
  type: "string",
24874
25317
  enum: [...actions],
24875
- description: actions.map((a) => ACTION_DESCRIPTIONS[a]).join("\uFF1B")
25318
+ description: actions.map(
25319
+ (a) => a === "status" && wake ? WAKE_STATUS_ACTION_DESCRIPTION : ACTION_DESCRIPTIONS[a]
25320
+ ).join("\uFF1B")
24876
25321
  },
24877
25322
  runId: {
24878
25323
  type: "string",
@@ -24900,7 +25345,7 @@ function buildControlAgentRunFunctionSchema(opts) {
24900
25345
  } : {},
24901
25346
  tailLines: {
24902
25347
  type: "number",
24903
- description: "\u53EF\u9009\u3002action=status \u65F6\uFF1A0=\u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF0C>0=\u540C\u65F6\u8FD4\u56DE\u6700\u8FD1 N \u884C\u65E5\u5FD7\uFF08\u9ED8\u8BA4 0\uFF09\u3002\u72B6\u6001\u6458\u8981\u5DF2\u542B progress\uFF08\u5DE5\u5177\u8C03\u7528/LLM \u8C03\u7528/inFlight=\u6B64\u523B\u5728\u6267\u884C\u4EC0\u4E48\u3001idleMs\uFF09\uFF0C\u5148\u770B\u5B83\u5224\u65AD\u300C\u5728\u5E72\u6D3B\u300D\u8FD8\u662F\u300C\u5361\u4F4F\u300D\uFF0C\u786E\u5B9E\u53EF\u7591\u6216\u5DF2\u5931\u8D25\u624D\u62C9\u65E5\u5FD7\u3002",
25348
+ description: "\u53EF\u9009\u3002action=status \u65F6\uFF1A0=\u53EA\u8FD4\u56DE\u72B6\u6001\u6458\u8981\uFF0C>0=\u540C\u65F6\u8FD4\u56DE\u6700\u8FD1 N \u884C\u65E5\u5FD7\uFF08\u9ED8\u8BA4 0\uFF09\u3002" + (wake ? "\u72B6\u6001\u6458\u8981\u542B progress\uFF08inFlight=\u6B64\u523B\u5728\u6267\u884C\u4EC0\u4E48\u3001idleMs\uFF09\uFF0C\u7528\u4E8E\u4E00\u6B21\u6027\u5224\u65AD\u300C\u5B83\u662F\u4E0D\u662F\u5361\u4F4F\u4E86\u300D\uFF1B\u6B63\u5E38\u8FD0\u884C\u7684\u8FDB\u5EA6\u7531\u5BBF\u4E3B\u89C2\u5BDF\uFF0C\u4E0D\u8981\u53CD\u590D\u8C03\u7528 status \u76EF progress\u3002" : "\u72B6\u6001\u6458\u8981\u5DF2\u542B progress\uFF08\u5DE5\u5177\u8C03\u7528/LLM \u8C03\u7528/inFlight=\u6B64\u523B\u5728\u6267\u884C\u4EC0\u4E48\u3001idleMs\uFF09\uFF0C\u5148\u770B\u5B83\u5224\u65AD\u300C\u5728\u5E72\u6D3B\u300D\u8FD8\u662F\u300C\u5361\u4F4F\u300D\uFF0C\u786E\u5B9E\u53EF\u7591\u6216\u5DF2\u5931\u8D25\u624D\u62C9\u65E5\u5FD7\u3002"),
24904
25349
  default: 0
24905
25350
  },
24906
25351
  batchId: {
@@ -25071,7 +25516,7 @@ async function handleStop(thunkApi, opts) {
25071
25516
  async function handleAppend(thunkApi, opts) {
25072
25517
  try {
25073
25518
  const state2 = thunkApi.getState?.() ?? {};
25074
- const userId = state2?.identity?.currentUser?.userId ?? state2?.auth?.currentUser?.userId;
25519
+ const userId = selectIdentityUserId(state2);
25075
25520
  const resolvedKey = opts.dialogKey || (opts.runId?.startsWith("dialog-") ? opts.runId : opts.runId && userId ? `dialog-${userId}-${opts.runId}` : opts.runId);
25076
25521
  if (!resolvedKey) {
25077
25522
  throw new Error("dialogKey or runId is required to append an instruction");
@@ -25614,7 +26059,7 @@ var codeSearchFunctionSchema = {
25614
26059
  "\u4F7F\u7528 ripgrep (rg) \u5728\u9879\u76EE\u4EE3\u7801\u4E2D\u641C\u7D22\u6587\u672C\uFF0C\u6216\u6309 glob \u5217\u51FA\u6587\u4EF6\u3002",
25615
26060
  "",
25616
26061
  "\u63A8\u8350\u573A\u666F\uFF1A",
25617
- "- mode=content\uFF1A\u6309\u5173\u952E\u8BCD\u641C\u7D22\u4EE3\u7801\u5185\u5BB9\uFF0C\u66FF\u4EE3\u65E7\u7684 searchRepo\u3002",
26062
+ "- mode=content\uFF1A\u6309\u5173\u952E\u8BCD\u641C\u7D22\u4EE3\u7801\u5185\u5BB9\u3002",
25618
26063
  "- mode=files\uFF1A\u6309\u8DEF\u5F84\u8303\u56F4\u548C glob \u5217\u51FA\u6587\u4EF6\u3002",
25619
26064
  "",
25620
26065
  "\u53C2\u6570\u8BF4\u660E\uFF1A",
@@ -26489,7 +26934,7 @@ var executeToolRun = createAsyncThunk(
26489
26934
  if (!executionInput) {
26490
26935
  throw new Error(`ToolRun ${id} has no input to execute with.`);
26491
26936
  }
26492
- const { findToolExecutor: findToolExecutor2 } = await import("./tools-SSXSTC3O.js");
26937
+ const { findToolExecutor: findToolExecutor2 } = await import("./tools-CVLUXK6P.js");
26493
26938
  const { executor } = findToolExecutor2(run.toolName);
26494
26939
  toolRunStarted({
26495
26940
  id: run.id,
@@ -26511,9 +26956,9 @@ var executeToolRun = createAsyncThunk(
26511
26956
  });
26512
26957
  if (run.toolName === "deleteSpaces") {
26513
26958
  const latestState = thunkApi.getState();
26514
- const userId = latestState.auth?.currentUser?.userId;
26959
+ const userId = selectIdentityUserId(latestState);
26515
26960
  if (userId) {
26516
- const { fetchUserSpaceMemberships } = await import("./memberThunks-THZYZFSN.js");
26961
+ const { fetchUserSpaceMemberships } = await import("./memberThunks-VZI6G7YZ.js");
26517
26962
  await thunkApi.dispatch(fetchUserSpaceMemberships(userId));
26518
26963
  }
26519
26964
  }
@@ -26975,9 +27420,9 @@ var TOOL_STEP_STATUS_RANK = {
26975
27420
  function parseSseChunk(chunk) {
26976
27421
  const results = [];
26977
27422
  for (const line of chunk.split("\n")) {
26978
- const trimmed = line.trim();
26979
- if (!trimmed.startsWith("data:")) continue;
26980
- const json = trimmed.slice(5).trim();
27423
+ const trimmed2 = line.trim();
27424
+ if (!trimmed2.startsWith("data:")) continue;
27425
+ const json = trimmed2.slice(5).trim();
26981
27426
  if (!json) continue;
26982
27427
  try {
26983
27428
  results.push(JSON.parse(json));
@@ -28622,7 +29067,7 @@ var buildScopedDisplayData = (query, results, scopeLabel) => {
28622
29067
  ${summary}`;
28623
29068
  };
28624
29069
  var loadLocalMyContentResults = async (thunkApi, state2) => {
28625
- const userId = state2.auth?.currentUser?.userId?.trim();
29070
+ const userId = selectIdentityUserId(state2)?.trim();
28626
29071
  if (!userId) {
28627
29072
  throw new Error("\u65E0\u6CD5\u641C\u7D22\u5168\u90E8\u5185\u5BB9\uFF0C\u56E0\u4E3A\u5F53\u524D\u7528\u6237\u672A\u767B\u5F55\u3002");
28628
29073
  }
@@ -28679,10 +29124,10 @@ async function searchAllSpacesFunc(args, thunkApi) {
28679
29124
 
28680
29125
  // packages/core/clipMultilineText.ts
28681
29126
  function clipMultilineText(value, max) {
28682
- const trimmed = value.trim();
28683
- if (trimmed.length <= max) return trimmed;
28684
- return `${trimmed.slice(0, max)}
28685
- ...[truncated ${trimmed.length - max} chars]`;
29127
+ const trimmed2 = value.trim();
29128
+ if (trimmed2.length <= max) return trimmed2;
29129
+ return `${trimmed2.slice(0, max)}
29130
+ ...[truncated ${trimmed2.length - max} chars]`;
28686
29131
  }
28687
29132
 
28688
29133
  // packages/ai/tools/dialogMessageSearch.ts
@@ -28996,7 +29441,7 @@ async function updateDocFunc(args, thunkApi) {
28996
29441
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
28997
29442
  };
28998
29443
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
28999
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-2URPBVCS.js");
29444
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-D4HGHPWI.js");
29000
29445
  if (getDocState().pageKey === id) {
29001
29446
  applyExternalDocUpdate({
29002
29447
  slateData: finalSlateData,
@@ -29021,7 +29466,7 @@ async function updateDocFunc(args, thunkApi) {
29021
29466
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
29022
29467
  async function dispatchSetSettings(thunkApi, changes) {
29023
29468
  const injectedSetSettings = thunkApi?.extra?.setSettings;
29024
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-VR2IJSXC.js")).setSettings;
29469
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingSlice-IRUU4VFB.js")).setSettings;
29025
29470
  await thunkApi.dispatch(setSettings(changes)).unwrap();
29026
29471
  }
29027
29472
  var updateUserPreferenceProfileFunctionSchema = {
@@ -29390,7 +29835,7 @@ async function runZiweiChart(input) {
29390
29835
  const gender = normalizeGender(input.gender);
29391
29836
  const fixLeap = input.fixLeap !== false;
29392
29837
  const isLeapMonth = input.isLeapMonth === true;
29393
- const { astro } = await import("./lib-2ZTNRXR4.js");
29838
+ const { astro } = await import("./lib-FRRS27KN.js");
29394
29839
  const rawChart = calendarType === "lunar" ? astro.byLunar(dateStr, timeIndex, gender, isLeapMonth, fixLeap, language) : astro.bySolar(dateStr, timeIndex, gender, fixLeap, language);
29395
29840
  const palaces = rawChart.palaces.map((palace) => ({
29396
29841
  index: palace.index,
@@ -31283,7 +31728,6 @@ export {
31283
31728
  toolRunSucceeded,
31284
31729
  toolRunFailed,
31285
31730
  getAllToolRuns,
31286
- waitForAbortableDelay,
31287
31731
  createSSEParser,
31288
31732
  formatAgentListCard,
31289
31733
  readXPostFunctionSchema,