nolo-cli 0.83.0-alpha.1 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/README.md +2 -2
  2. package/{_executeModel-TRYFRXDJ.js → _executeModel-LUNEV235.js} +48 -48
  3. package/{action-D22U6CTH.js → action-YVYQEAAV.js} +11 -11
  4. package/{addContentAction-XAPUTGL4.js → addContentAction-O7R66HEX.js} +9 -9
  5. package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-74OA7KYP.js} +8 -8
  6. package/{agentDeleteCommand-EKSPHWHV.js → agentDeleteCommand-2YAHAZFJ.js} +31 -30
  7. package/{agentEmailCommands-QD2K4YG6.js → agentEmailCommands-G6A7IRPQ.js} +67 -64
  8. package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-M3XFO6EN.js} +2 -2
  9. package/{agentListCommands-WFBYAQKO.js → agentListCommands-KMS675GZ.js} +40 -33
  10. package/{agentMachineCommands-F5DKXCQP.js → agentMachineCommands-W2SMNSQ3.js} +31 -30
  11. package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-GNPTL5XR.js} +87 -0
  12. package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-O5MPVJ5E.js} +3 -3
  13. package/agentRecordCommands-D7BRMFNI.js +128 -0
  14. package/{agentRunCommand-4VMDFEQF.js → agentRunCommand-VL6MMEUB.js} +65 -62
  15. package/{agentRunControl-T44MESII.js → agentRunControl-AVJR4JW4.js} +2 -2
  16. package/{agentRuntimeLocal-FMOEMRUU.js → agentRuntimeLocal-VXZSDIGT.js} +27 -26
  17. package/{agentSlice-Q5XOM2PN.js → agentSlice-5YJHUO47.js} +10 -10
  18. package/{appDeleteCommands-AXB7XZE7.js → appDeleteCommands-32MHLR4L.js} +31 -30
  19. package/{appDeployCommands-ZLWI4QUC.js → appDeployCommands-WCQOUSOB.js} +31 -30
  20. package/{appDeployStatusCommands-2RAEYJQF.js → appDeployStatusCommands-6QKB7DYN.js} +31 -30
  21. package/{appGetCommands-QYUXS4W4.js → appGetCommands-SFAPP5PB.js} +31 -30
  22. package/{appListCommands-GQLN4J5X.js → appListCommands-EKUBDRUO.js} +31 -30
  23. package/{authCommand-7N2G6MXP.js → authCommand-F4EFRRX6.js} +89 -24
  24. package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
  25. package/builtinSkillRegistry-FUAVTRVZ.js +33 -0
  26. package/{chatQueueReduxAdapter-WICMMQZT.js → chatQueueReduxAdapter-PQMRR2PK.js} +24 -24
  27. package/{chromeCommands-VOIRNJBL.js → chromeCommands-FZYAU75D.js} +1 -1
  28. package/{chromeOpsCommands-M7DPCX2T.js → chromeOpsCommands-62P2Q2YB.js} +31 -1
  29. package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
  30. package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
  31. package/{chunk-3QPYFHAH.js → chunk-3DII57IT.js} +1 -1
  32. package/{chunk-NTW5GWDM.js → chunk-3VNWWVKB.js} +2 -0
  33. package/{chunk-DWUCB2A3.js → chunk-42V6BK2E.js} +1 -1
  34. package/{chunk-XRMBP7IW.js → chunk-45C5ER5U.js} +10 -10
  35. package/{chunk-DSRXPQWA.js → chunk-4OEFYTWL.js} +43 -43
  36. package/{chunk-6RUOYAPM.js → chunk-4S5QUMJP.js} +7 -7
  37. package/{chunk-GBPZKFYK.js → chunk-53HEEOTT.js} +4 -4
  38. package/{chunk-5Q5LYRJH.js → chunk-5FBTLSFG.js} +155 -795
  39. package/{chunk-KIS76A2P.js → chunk-5H7KJX7J.js} +38 -4
  40. package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
  41. package/chunk-5ZUL4CUO.js +10 -0
  42. package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
  43. package/{chunk-KVDUCO4Q.js → chunk-6IG4XSS6.js} +16 -12
  44. package/{chunk-CMH2SYHX.js → chunk-6OZ36FXI.js} +2 -2
  45. package/{chunk-5BVAAVIF.js → chunk-6Q33GUCC.js} +1 -1
  46. package/{chunk-EWRS6HJ3.js → chunk-6VFARHZW.js} +625 -303
  47. package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
  48. package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
  49. package/chunk-ACTMNVHM.js +93 -0
  50. package/{chunk-NRALD3CC.js → chunk-AEOE4Z6Q.js} +54 -10
  51. package/{chunk-XWNRAIUL.js → chunk-AFUORTY4.js} +6 -16
  52. package/chunk-BNGW5ASC.js +344 -0
  53. package/{chunk-SZLVDREM.js → chunk-BP4XNZRM.js} +3 -3
  54. package/{chunk-JZYXSXMZ.js → chunk-BTI7PJDX.js} +15 -15
  55. package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
  56. package/{chunk-GCJ3IS5M.js → chunk-DHDMC6FO.js} +175 -6
  57. package/{chunk-E36HZARC.js → chunk-DNCEALKX.js} +93 -17
  58. package/{chunk-N5KGQ5AD.js → chunk-DRGSDQBL.js} +3 -3
  59. package/{chunk-D6XYLSOS.js → chunk-ETI2NYVF.js} +1 -1
  60. package/{chunk-EXMHJN7C.js → chunk-EYAQT56M.js} +4 -3
  61. package/{chunk-CJCJF5XB.js → chunk-FDTR4QJ6.js} +4 -2
  62. package/{chunk-JPVNC5B2.js → chunk-G2O6V3HJ.js} +3 -3
  63. package/{chunk-WL2RKIBF.js → chunk-GEPUP7OO.js} +1 -1
  64. package/{chunk-PYXL2CJL.js → chunk-GPCZ7UXG.js} +1 -1
  65. package/{chunk-K7AG465Q.js → chunk-GQBOR3G6.js} +4 -2
  66. package/{chunk-YFADVSZE.js → chunk-H62HCIUP.js} +6 -6
  67. package/{chunk-PZM3EENV.js → chunk-HJUYAD4A.js} +1 -1
  68. package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
  69. package/{chunk-HH65VA5U.js → chunk-I3TQJXQ7.js} +109 -6
  70. package/{chunk-ZVN6I33J.js → chunk-IIVGDG4I.js} +6 -5
  71. package/{chunk-UDQWGU7F.js → chunk-J4MOO56S.js} +1 -1
  72. package/{chunk-KC5FAHVS.js → chunk-JEDZAO7L.js} +1 -1
  73. package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
  74. package/chunk-JRQFUXY7.js +1625 -0
  75. package/chunk-KQ4ONNQD.js +677 -0
  76. package/{chunk-CPSZJBLK.js → chunk-L5UXH3B2.js} +105 -26
  77. package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
  78. package/{chunk-BJIRLHJR.js → chunk-M2EJHDJP.js} +4 -0
  79. package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
  80. package/{chunk-DUJWWUGV.js → chunk-NA35QHCF.js} +1 -1
  81. package/{chunk-FNGAF7C4.js → chunk-OEVAY4J6.js} +137 -12
  82. package/{chunk-UJ63UXGE.js → chunk-OIVSQH2O.js} +1006 -801
  83. package/{chunk-LZIMZZYT.js → chunk-ORYWEJO4.js} +13 -15
  84. package/{chunk-LKSDMMY2.js → chunk-Q2XN3EOZ.js} +40 -30
  85. package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
  86. package/{chunk-FMODTASJ.js → chunk-Q5FJJ6XI.js} +1 -7
  87. package/{chunk-AJHEFRGJ.js → chunk-Q67DOFOO.js} +214 -5
  88. package/{chunk-UZ6XXCVR.js → chunk-QDSINZM3.js} +15 -2
  89. package/{chunk-BHXK3KPV.js → chunk-QVKRR2SS.js} +2314 -66
  90. package/{chunk-BNQK6UPC.js → chunk-RFCKMYDK.js} +11 -173
  91. package/{chunk-YWG6EMH3.js → chunk-RG6JBBX5.js} +10 -6
  92. package/{chunk-QCZX4FTW.js → chunk-SH43IESU.js} +173 -15
  93. package/{chunk-YIR5OYHU.js → chunk-SSDAAEC2.js} +1235 -59
  94. package/{chunk-SPAQ4PVV.js → chunk-SV5IJK6K.js} +1 -1
  95. package/{chunk-BJCWNHVU.js → chunk-TOP2VXOR.js} +2 -2
  96. package/{chunk-4EJ5QYB5.js → chunk-UKZDAFYT.js} +1 -1
  97. package/{chunk-PGSKWZCB.js → chunk-UZGQNTVW.js} +1 -1
  98. package/{chunk-ZZCJUXUI.js → chunk-V4MJDUSR.js} +2 -2
  99. package/{chunk-JYYZCK2Z.js → chunk-V7E4PXQD.js} +1 -1
  100. package/{chunk-OZX2IPKM.js → chunk-VLTIYV3X.js} +1 -1
  101. package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
  102. package/{chunk-5J7W2VWW.js → chunk-WV42OMV7.js} +6 -265
  103. package/{chunk-PFDKB7IZ.js → chunk-X6DN5HBD.js} +6 -6
  104. package/{chunk-Q7TA25PG.js → chunk-YFE4A4O7.js} +731 -90
  105. package/{chunk-BOYUESO7.js → chunk-Z77CRGTW.js} +1 -1
  106. package/{chunk-QC5LGHYP.js → chunk-ZCYXJSTU.js} +10 -5
  107. package/{contentThunks-A2ZG3SW6.js → contentThunks-GJV22WVZ.js} +25 -25
  108. package/{cooldownCommands-BSCH2W7P.js → cooldownCommands-REAWYVTY.js} +2 -2
  109. package/{createAgentAutomationAction-QFQQPG35.js → createAgentAutomationAction-6V25TZEO.js} +25 -25
  110. package/{createDialogAction-WI73R5EQ.js → createDialogAction-SX36BGSX.js} +28 -28
  111. package/{createPageAction-XN237WPJ.js → createPageAction-IR4BGJSI.js} +26 -26
  112. package/{dbSlice-GKGGFNOB.js → dbSlice-XVWBAGYN.js} +8 -8
  113. package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
  114. package/{dialogCommands-SFRDEMB3.js → dialogCommands-5J56DFWN.js} +35 -32
  115. package/{dialogSlice-56G4Q4RU.js → dialogSlice-UNX2FAPZ.js} +24 -24
  116. package/{docCreateCommands-OMQLZ3OW.js → docCreateCommands-KYI2DC2U.js} +32 -31
  117. package/{docDeleteCommands-7RCC6P23.js → docDeleteCommands-67REUSRY.js} +33 -32
  118. package/{docReadCommands-5FABO4UV.js → docReadCommands-HOSVSBDJ.js} +32 -31
  119. package/{docStore-PZSZWXX3.js → docStore-JWVG5NDO.js} +9 -9
  120. package/{docUpdateCommands-P5AQI6HB.js → docUpdateCommands-EMGCSMXY.js} +32 -31
  121. package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
  122. package/{getPricing-HRMSOF3E.js → getPricing-LUSEABA6.js} +4 -4
  123. package/{handleSendMessageAction-MHKC4R3Q.js → handleSendMessageAction-B75UOJKF.js} +24 -24
  124. package/index.js +99 -86
  125. package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
  126. package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
  127. package/{machineCommands-VJABZGD2.js → machineCommands-GFPTOY6L.js} +64 -61
  128. package/{machineWsRunDispatch-5SPILS2O.js → machineWsRunDispatch-46PSZ3DJ.js} +62 -59
  129. package/{memberThunks-KATHH3F4.js → memberThunks-QGFLFVCI.js} +9 -9
  130. package/{models-GS72DVJS.js → models-T3SG6MJ5.js} +2 -2
  131. package/{offlineMarxistsAgentCommand-GEH6SNNA.js → offlineMarxistsAgentCommand-HGXZV4XJ.js} +1 -1
  132. package/package.json +1 -1
  133. package/providerPresetApply-FG6NZ57W.js +214 -0
  134. package/providerRegistry-757OWH3O.js +31 -0
  135. package/{read-LC6HVYBN.js → read-COE3ZYR6.js} +5 -4
  136. package/{readDocTool-N3ERJHHF.js → readDocTool-5USN4A6V.js} +1 -1
  137. package/{readlineWorkspace-GMYIPMRU.js → readlineWorkspace-UFSWHFKD.js} +144 -109
  138. package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-IX3MN2ZO.js} +11 -11
  139. package/{runAgentClientLoop-U3GEPCQI.js → runAgentClientLoop-25LJ4XGV.js} +47 -47
  140. package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
  141. package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-X4HCPNZL.js} +9 -9
  142. package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-4GMIQLOD.js} +11 -11
  143. package/{settingSlice-OEJA4NQO.js → settingSlice-ZQZVUPKK.js} +10 -10
  144. package/{spaceCommands-FNXBNF5X.js → spaceCommands-NKJVJCQQ.js} +30 -29
  145. package/{streamAgentChatTurn-DAGDJH3L.js → streamAgentChatTurn-A46QFV4O.js} +59 -58
  146. package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-N52LRPA3.js} +8 -8
  147. package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
  148. package/{toolApiClient-VGYUB4P5.js → toolApiClient-QVJ6HDNN.js} +2 -2
  149. package/{tools-73VPBNX3.js → tools-TTDGRNY6.js} +43 -43
  150. package/tuiSummaryLlmCaller-WFRWERGK.js +127 -0
  151. package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
  152. package/{updateDialogTitleAction-RFQONESQ.js → updateDialogTitleAction-QJPZGF52.js} +45 -28
  153. package/agentRecordCommands-DAZ2FDZP.js +0 -125
  154. package/chunk-I42VC5KR.js +0 -15
  155. package/chunk-NB5SIWC4.js +0 -611
  156. package/chunk-NG4UT4K4.js +0 -79
  157. package/codingSkills-7S6523WH.js +0 -48
  158. package/tuiSummaryLlmCaller-3Z24VUWM.js +0 -116
  159. package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
  160. package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
  161. package/{localRuntimeAuthority-R5UBODT3.js → localRuntimeAuthority-6IR6BBXE.js} +3 -3
@@ -4,15 +4,15 @@ import {
4
4
  refreshAntigravityOAuthToken,
5
5
  refreshOpenAiCodexToken,
6
6
  xaiRefresh
7
- } from "./chunk-GBPZKFYK.js";
7
+ } from "./chunk-53HEEOTT.js";
8
+ import {
9
+ defaultLoopbackRequest
10
+ } from "./chunk-EADNWBAZ.js";
8
11
  import {
9
12
  createChromeConnectorClient,
10
13
  createVerifiedChromeConnectorClient,
11
14
  executeChromeConnectorTool
12
- } from "./chunk-QCZX4FTW.js";
13
- import {
14
- defaultLoopbackRequest
15
- } from "./chunk-EADNWBAZ.js";
15
+ } from "./chunk-SH43IESU.js";
16
16
  import {
17
17
  ackRunRecord,
18
18
  appendRunQueue,
@@ -21,6 +21,7 @@ import {
21
21
  commitRunRecordClaim,
22
22
  findRunRecord,
23
23
  gcRunRecords,
24
+ isRunTerminalStatus,
24
25
  popAllQueueEntries,
25
26
  queryRunRecords,
26
27
  releaseRunRecordAck,
@@ -29,7 +30,7 @@ import {
29
30
  terminateRunProcess,
30
31
  transitionRunToTerminal,
31
32
  withQueueLock
32
- } from "./chunk-HH65VA5U.js";
33
+ } from "./chunk-I3TQJXQ7.js";
33
34
  import {
34
35
  clearCredentialAvailability,
35
36
  markCredentialUnavailable,
@@ -37,30 +38,30 @@ import {
37
38
  readCredentialEntry,
38
39
  recordCredentialProbe,
39
40
  resolveCredentialKeyWithFallback
40
- } from "./chunk-DWUCB2A3.js";
41
+ } from "./chunk-42V6BK2E.js";
41
42
  import {
42
43
  buildLocalAgentLookupKeys
43
- } from "./chunk-BOYUESO7.js";
44
+ } from "./chunk-Z77CRGTW.js";
44
45
  import {
45
46
  LOCAL_CODEX_AGENT_ID,
46
47
  LOCAL_CODEX_AGENT_KEY,
47
48
  NOLO_DEFAULT_AGENT_ID,
48
49
  NOLO_DEFAULT_AGENT_KEY
49
- } from "./chunk-SPAQ4PVV.js";
50
+ } from "./chunk-SV5IJK6K.js";
50
51
  import {
51
52
  CliProviderQuotaError,
52
53
  executeCli
53
54
  } from "./chunk-MP64VFGD.js";
54
55
  import {
55
56
  inferCaptureIntent
56
- } from "./chunk-3QPYFHAH.js";
57
+ } from "./chunk-3DII57IT.js";
57
58
  import {
58
59
  buildCliPrompt
59
60
  } from "./chunk-ATNTHIZI.js";
60
61
  import {
61
62
  inlineImageUrlsForCustomProvider,
62
63
  prepareTools
63
- } from "./chunk-N5KGQ5AD.js";
64
+ } from "./chunk-DRGSDQBL.js";
64
65
  import {
65
66
  getServerProviderSecret
66
67
  } from "./chunk-HS7MLR74.js";
@@ -69,6 +70,7 @@ import {
69
70
  CONTROL_AGENT_RUN_ACTIONS,
70
71
  buildControlAgentRunFunctionSchema,
71
72
  buildStartAgentRunFunctionSchema,
73
+ checkCredentialFanout,
72
74
  deleteMemoryFunctionSchema,
73
75
  queryMemoryFunctionSchema,
74
76
  readXPostFunc,
@@ -78,11 +80,11 @@ import {
78
80
  rememberMemoryFunctionSchema,
79
81
  resolveAgentRequiredPackIds,
80
82
  setTodoListFunc
81
- } from "./chunk-5Q5LYRJH.js";
83
+ } from "./chunk-5FBTLSFG.js";
82
84
  import {
83
85
  fetchWithTransientRetry,
84
86
  isTransientFetchError
85
- } from "./chunk-5XTOKQLW.js";
87
+ } from "./chunk-5UTFL4QJ.js";
86
88
  import {
87
89
  TASK_PREVIEW_MAX,
88
90
  formatListRunsCard,
@@ -94,26 +96,33 @@ import {
94
96
  isAgentRunTerminalStatus,
95
97
  resolveRunLabel,
96
98
  shortRunId
97
- } from "./chunk-NTW5GWDM.js";
99
+ } from "./chunk-3VNWWVKB.js";
100
+ import {
101
+ deriveCredentialGroup
102
+ } from "./chunk-RG6JBBX5.js";
103
+ import {
104
+ getModelPricing
105
+ } from "./chunk-EYAQT56M.js";
98
106
  import {
99
107
  applyBuiltinAgentRuntimeOverride,
100
108
  applyTokenUsageToDayStats,
101
109
  prepareTokenUsageData,
102
110
  resolveBuiltinPlatformAgentConfig,
103
111
  runKeyed
104
- } from "./chunk-BHXK3KPV.js";
112
+ } from "./chunk-QVKRR2SS.js";
105
113
  import {
114
+ BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL,
106
115
  BUILTIN_TITLE_LLM_CONFIG
107
- } from "./chunk-EVBFYPDC.js";
116
+ } from "./chunk-MC4XLIJ7.js";
108
117
  import {
109
118
  fetchServerSyncedCredential
110
- } from "./chunk-6RUOYAPM.js";
119
+ } from "./chunk-4S5QUMJP.js";
111
120
  import {
112
121
  require_date_fns
113
122
  } from "./chunk-M76ECQRD.js";
114
123
  import {
115
124
  getDefaultCliLocalRuntimeDb
116
- } from "./chunk-C3FZR5EC.js";
125
+ } from "./chunk-2F7RJC6L.js";
117
126
  import {
118
127
  FORCED_TOOLS,
119
128
  addDefaultLightWebToolsForConfiguredAgents,
@@ -123,7 +132,7 @@ import {
123
132
  applySystemBuiltinSkillFilter,
124
133
  expandEnabledPacks,
125
134
  resolveEffectiveEnabledPacks
126
- } from "./chunk-GCJ3IS5M.js";
135
+ } from "./chunk-DHDMC6FO.js";
127
136
  import {
128
137
  DEFAULT_HYBRID_READ_TIMEOUT_MS,
129
138
  Duration_exports,
@@ -156,11 +165,12 @@ import {
156
165
  parseSseDataLineObject,
157
166
  parseSyncServersEnv,
158
167
  parseUpstreamErrorBody,
168
+ readDevinUpstreamFailure,
159
169
  resolveAntigravityFinishReason,
160
170
  resolveOpenAiCompatibleProviderConfig,
161
171
  shouldUseGeminiNativeToolRoute,
162
172
  summarizeToolArguments
163
- } from "./chunk-EWRS6HJ3.js";
173
+ } from "./chunk-6VFARHZW.js";
164
174
  import {
165
175
  PlatformStreamInterruptedError,
166
176
  buildPlatformChatCompletionRequest,
@@ -172,14 +182,14 @@ import {
172
182
  readSseDataValues,
173
183
  resolvePlatformChatProviderConfig,
174
184
  shouldUsePlatformChatProvider
175
- } from "./chunk-QC5LGHYP.js";
176
- import {
177
- isDevinOAuthAgent
178
- } from "./chunk-FMODTASJ.js";
185
+ } from "./chunk-ZCYXJSTU.js";
179
186
  import {
180
187
  resolveAgentRuntimeConfigFromRecord,
181
188
  resolveHistoricalToolContentCap
182
- } from "./chunk-KIS76A2P.js";
189
+ } from "./chunk-5H7KJX7J.js";
190
+ import {
191
+ isDevinOAuthAgent
192
+ } from "./chunk-5ZUL4CUO.js";
183
193
  import {
184
194
  collectStablePromptPrefix,
185
195
  convertMessagesToResponsesInput,
@@ -190,38 +200,39 @@ import {
190
200
  buildNoloWorkspaceOpenAiTools,
191
201
  parseNoloWorkspaceToolArguments,
192
202
  resolveRuntimeToolSurfaceForAgent
193
- } from "./chunk-ZVN6I33J.js";
203
+ } from "./chunk-IIVGDG4I.js";
194
204
  import {
195
205
  mergeAvailabilityDeadline,
196
206
  resolveAvailabilityAction,
197
207
  resolveCooldownGate
198
- } from "./chunk-CJCJF5XB.js";
208
+ } from "./chunk-FDTR4QJ6.js";
199
209
  import {
200
210
  isAntigravityOAuthAgent
201
- } from "./chunk-PGSKWZCB.js";
211
+ } from "./chunk-UZGQNTVW.js";
202
212
  import {
203
213
  resolvePlatformAuthToken
204
- } from "./chunk-CMH2SYHX.js";
214
+ } from "./chunk-6OZ36FXI.js";
205
215
  import {
206
216
  buildDialogFallbackTitleFromUserInput,
207
217
  normalizeDialogTitle
208
218
  } from "./chunk-2MBTWINN.js";
209
219
  import {
210
220
  normalizeUsage
211
- } from "./chunk-DSRXPQWA.js";
221
+ } from "./chunk-4OEFYTWL.js";
212
222
  import {
213
223
  clipCompactText,
214
224
  createProviderCallTimingTracker,
215
225
  finalizeProviderCallTiming,
216
226
  observeMeaningfulProviderResponseAt,
217
227
  withProviderCallTimingFields
218
- } from "./chunk-E36HZARC.js";
228
+ } from "./chunk-DNCEALKX.js";
219
229
  import {
220
230
  estimateTokenCount
221
231
  } from "./chunk-PSCNXBYA.js";
222
232
  import {
233
+ getModelConfig,
223
234
  isAdaptiveThinkingModelId
224
- } from "./chunk-UJ63UXGE.js";
235
+ } from "./chunk-OIVSQH2O.js";
225
236
  import {
226
237
  compactWhitespace
227
238
  } from "./chunk-DWLEOOGR.js";
@@ -230,7 +241,7 @@ import {
230
241
  resolveCurrentRunRuntimeToolPolicy,
231
242
  resolveLocalWorkspaceExecutorOptionsFromPolicy,
232
243
  resolveRequestedRuntimeToolNames
233
- } from "./chunk-3JQ2NRYU.js";
244
+ } from "./chunk-HVURBGF3.js";
234
245
  import {
235
246
  createOAuthTokenStore,
236
247
  isTokenExpired,
@@ -250,24 +261,42 @@ import {
250
261
  import {
251
262
  DEFAULT_NOLO_SERVER_URL
252
263
  } from "./chunk-OLZBQWZU.js";
264
+ import {
265
+ isNoloHostedProvider,
266
+ isPlatformHostedImageModel
267
+ } from "./chunk-Q67DOFOO.js";
253
268
  import {
254
269
  createTokenKey,
255
270
  createTokenStatsKey,
256
271
  createUserKey,
257
272
  dialogMessageRange
258
- } from "./chunk-NHRQCXIQ.js";
273
+ } from "./chunk-VMFTFOWF.js";
259
274
  import {
260
275
  asTrimmedLowercaseString
261
276
  } from "./chunk-QSJ3HFEF.js";
262
277
  import {
278
+ PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID,
279
+ PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID,
280
+ PUBLIC_GLM_53_FLASH_AGENT_ID,
281
+ PUBLIC_GPT_IMAGE_2_CONTINUOUS_AGENT_ID,
282
+ PUBLIC_GPT_IMAGE_2_EDITOR_AGENT_ID,
283
+ PUBLIC_GPT_IMAGE_2_GENERATOR_AGENT_ID,
284
+ PUBLIC_NANO_BANANA_2_LITE_AGENT_ID,
285
+ builtinAgentCatalogEntryById,
286
+ isRetiredCatalogEntry,
263
287
  isSystemBuiltinTrustedAgentKey
264
- } from "./chunk-5J7W2VWW.js";
288
+ } from "./chunk-BNGW5ASC.js";
265
289
  import {
266
- asTrimmedString
267
- } from "./chunk-3EUW3WEO.js";
290
+ parsePublicAgentId,
291
+ parseSystemAgentId,
292
+ publicAgentKey
293
+ } from "./chunk-M2EJHDJP.js";
268
294
  import {
269
295
  isRecord
270
296
  } from "./chunk-KUG52IAP.js";
297
+ import {
298
+ asTrimmedString
299
+ } from "./chunk-3EUW3WEO.js";
271
300
  import {
272
301
  NOLO_CLUSTER_SERVERS
273
302
  } from "./chunk-LCBAMY2M.js";
@@ -578,6 +607,10 @@ var STRINGS = {
578
607
  en: "\u2713 Copied the selection to the clipboard.",
579
608
  zh: "\u2713 \u5DF2\u590D\u5236\u9009\u533A\u5230\u526A\u8D34\u677F\u3002"
580
609
  },
610
+ copiedSelectionBusy: {
611
+ en: "\u2713 Copied the selection to the clipboard. Press Esc to stop generating.",
612
+ zh: "\u2713 \u5DF2\u590D\u5236\u9009\u533A\u5230\u526A\u8D34\u677F\u3002\u6309 Esc \u505C\u6B62\u751F\u6210\u3002"
613
+ },
581
614
  copiedAllHistory: {
582
615
  en: "\u2713 Copied the full conversation to the clipboard.",
583
616
  zh: "\u2713 \u5DF2\u590D\u5236\u5B8C\u6574\u5BF9\u8BDD\u5230\u526A\u8D34\u677F\u3002"
@@ -1719,6 +1752,9 @@ function buildCliChromeConnectorOpenAiTools(args) {
1719
1752
  function buildOpenAiTools(args) {
1720
1753
  const toolset = buildLocalWorkspaceToolsetForEnv(args);
1721
1754
  const workspaceToolNames = toolset.toolNames;
1755
+ const modelWorkspaceToolNames = (args.effectiveToolNames ?? workspaceToolNames).filter(
1756
+ (toolName) => toolName !== "taskWait" || !hasRunWakeChannel(args.env)
1757
+ );
1722
1758
  const toolNameSet = new Set(args.toolNames ?? []);
1723
1759
  const uiAskChoiceTools = toolNameSet.has("ask_user") ? prepareTools(["ask_user"]) : [];
1724
1760
  const readPastedTextTools = toolNameSet.has("readPastedText") ? [
@@ -1760,7 +1796,7 @@ function buildOpenAiTools(args) {
1760
1796
  ...uiAskChoiceTools,
1761
1797
  ...readPastedTextTools,
1762
1798
  ...buildLocalWorkspaceOpenAiTools({
1763
- toolNames: args.effectiveToolNames ?? workspaceToolNames,
1799
+ toolNames: modelWorkspaceToolNames,
1764
1800
  exposeShellTools: toolset.exposeShellTools
1765
1801
  }),
1766
1802
  ...buildCliChromeConnectorOpenAiTools({ toolNames: args.toolNames }),
@@ -8049,6 +8085,37 @@ function processCursorServerMessage(msg, state, onTextDelta, onReasoningDelta) {
8049
8085
  state.outputTokens += tokens;
8050
8086
  }
8051
8087
  }
8088
+ function attachCursorUpstreamFailure(error, failure) {
8089
+ if (failure) {
8090
+ error.cursorUpstreamFailure = failure;
8091
+ }
8092
+ return error;
8093
+ }
8094
+ function readCursorUpstreamFailure(error) {
8095
+ if (!error || typeof error !== "object") return void 0;
8096
+ const failure = error.cursorUpstreamFailure;
8097
+ if (!failure || typeof failure !== "object") return void 0;
8098
+ if (typeof failure.status !== "number" || !Number.isFinite(failure.status)) {
8099
+ return void 0;
8100
+ }
8101
+ return failure;
8102
+ }
8103
+ function buildCursorGrpcTrailerError(trailers) {
8104
+ const status = trailers["grpc-status"];
8105
+ if (!status || String(status) === "0") return null;
8106
+ const rawMessage = String(trailers["grpc-message"] || "");
8107
+ let message;
8108
+ try {
8109
+ message = decodeURIComponent(rawMessage);
8110
+ } catch {
8111
+ message = rawMessage;
8112
+ }
8113
+ const statusText = String(status);
8114
+ return attachCursorUpstreamFailure(
8115
+ new Error(`Cursor gRPC error ${statusText}: ${message}`),
8116
+ statusText === "8" || statusText.toLowerCase() === "resource_exhausted" ? { status: 429, body: { code: "resource_exhausted", message } } : void 0
8117
+ );
8118
+ }
8052
8119
  async function streamCursorChat(messages, options) {
8053
8120
  const baseUrl = options.baseUrl || CURSOR_API_URL;
8054
8121
  const clientVersion = options.clientVersion || CURSOR_CLIENT_VERSION;
@@ -8146,14 +8213,9 @@ async function streamCursorChat(messages, options) {
8146
8213
  }
8147
8214
  });
8148
8215
  h2Request.on("trailers", (trailers) => {
8149
- const status = trailers["grpc-status"];
8150
- const msg = trailers["grpc-message"];
8151
- if (status && status !== "0") {
8152
- h2Completion.reject(
8153
- new Error(
8154
- `Cursor gRPC error ${status}: ${decodeURIComponent(String(msg || ""))}`
8155
- )
8156
- );
8216
+ const error = buildCursorGrpcTrailerError(trailers);
8217
+ if (error) {
8218
+ h2Completion.reject(error);
8157
8219
  }
8158
8220
  });
8159
8221
  h2Request.on("end", () => {
@@ -9224,7 +9286,7 @@ function assertWithinLocalToolBudget(args) {
9224
9286
 
9225
9287
  // packages/cli/client/providerResolution/cursorTransport.ts
9226
9288
  var resolveCursorTransport = async (ctx) => {
9227
- const { agentConfig, deps, workspaceRoot, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, activeAgentToolNames, localToolExecutors } = ctx;
9289
+ const { agentConfig, deps, workspaceRoot, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, activeAgentToolNames, localToolExecutors, recordLocalAvailability } = ctx;
9228
9290
  if (isCursorOAuthAgent(agentConfig)) {
9229
9291
  const accessToken = await apiKeyRefResolver("cursor");
9230
9292
  if (!accessToken) {
@@ -9300,15 +9362,24 @@ var resolveCursorTransport = async (ctx) => {
9300
9362
  toolCount: tools.length,
9301
9363
  requestedToolNames
9302
9364
  });
9303
- const result = await cursorProvider.complete(messages, options);
9304
- logLocalRuntimeDiagnostic("provider.request.result", {
9305
- agentKey: agentConfig.key,
9306
- transport: "cursor-connect",
9307
- ok: true,
9308
- contentChars: (result.content ?? "").length,
9309
- toolCallCount: result.tool_calls?.length ?? 0
9310
- });
9311
- return result;
9365
+ try {
9366
+ const result = await cursorProvider.complete(messages, options);
9367
+ await recordLocalAvailability(200);
9368
+ logLocalRuntimeDiagnostic("provider.request.result", {
9369
+ agentKey: agentConfig.key,
9370
+ transport: "cursor-connect",
9371
+ ok: true,
9372
+ contentChars: (result.content ?? "").length,
9373
+ toolCallCount: result.tool_calls?.length ?? 0
9374
+ });
9375
+ return result;
9376
+ } catch (error) {
9377
+ const failure = readCursorUpstreamFailure(error);
9378
+ if (failure) {
9379
+ await recordLocalAvailability(failure.status, failure.body);
9380
+ }
9381
+ throw error;
9382
+ }
9312
9383
  }
9313
9384
  };
9314
9385
  }
@@ -9317,7 +9388,14 @@ var resolveCursorTransport = async (ctx) => {
9317
9388
 
9318
9389
  // packages/cli/client/providerResolution/devinTransport.ts
9319
9390
  var resolveDevinTransport = async (ctx) => {
9320
- const { agentConfig, apiKeyRefResolver } = ctx;
9391
+ const {
9392
+ agentConfig,
9393
+ apiKeyRefResolver,
9394
+ deps,
9395
+ buildProviderOpenAiTools,
9396
+ additionalToolNames,
9397
+ recordLocalAvailability
9398
+ } = ctx;
9321
9399
  if (isDevinOAuthAgent(agentConfig)) {
9322
9400
  const accessToken = await apiKeyRefResolver("devin");
9323
9401
  if (!accessToken) {
@@ -9326,22 +9404,46 @@ var resolveDevinTransport = async (ctx) => {
9326
9404
  );
9327
9405
  }
9328
9406
  const model = agentConfig.model || "swe-2-max";
9407
+ const { requestedToolNames, tools } = resolveProviderOpenAiToolBundle(
9408
+ agentConfig,
9409
+ deps.env,
9410
+ buildProviderOpenAiTools,
9411
+ additionalToolNames
9412
+ );
9413
+ const devinProvider = createDevinProvider({
9414
+ token: accessToken,
9415
+ model,
9416
+ fetchImpl: ctx.fetchImpl,
9417
+ tools,
9418
+ // agentConfig.temperature reaches every transport except the Devin one;
9419
+ // forward it so the agent form's sampling knob stops being a no-op here.
9420
+ // Left undefined it keeps the upstream client's value.
9421
+ temperature: typeof agentConfig.temperature === "number" ? agentConfig.temperature : void 0
9422
+ });
9329
9423
  logLocalRuntimeDiagnostic("provider.selected", {
9330
9424
  agentKey: agentConfig.key,
9331
9425
  transport: "devin-connect",
9332
9426
  provider: "devin",
9333
9427
  model,
9334
- hasApiKey: true
9335
- });
9336
- const devinProvider = createDevinProvider({
9337
- token: accessToken,
9338
- model,
9339
- fetchImpl: ctx.fetchImpl
9428
+ hasApiKey: true,
9429
+ toolCount: tools.length,
9430
+ requestedToolNames,
9431
+ temperature: typeof agentConfig.temperature === "number" ? agentConfig.temperature : null
9340
9432
  });
9341
9433
  return {
9342
9434
  model,
9343
9435
  complete: async (messages, options) => {
9344
- return devinProvider.complete(messages, options);
9436
+ try {
9437
+ const result = await devinProvider.complete(messages, options);
9438
+ await recordLocalAvailability(200);
9439
+ return result;
9440
+ } catch (error) {
9441
+ const failure = readDevinUpstreamFailure(error);
9442
+ if (failure) {
9443
+ await recordLocalAvailability(failure.status, failure.body);
9444
+ }
9445
+ throw error;
9446
+ }
9345
9447
  }
9346
9448
  };
9347
9449
  }
@@ -9448,7 +9550,7 @@ var resolveDirectOpenAiCompatibleTransport = async (ctx) => {
9448
9550
 
9449
9551
  // packages/cli/client/providerResolution/geminiNativeToolTransport.ts
9450
9552
  var resolveGeminiNativeToolTransport = async (ctx) => {
9451
- const { agentConfig, deps, fetchImpl, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, credentialBroker, syncFetcher } = ctx;
9553
+ const { agentConfig, deps, fetchImpl, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, credentialBroker, syncFetcher, recordLocalAvailability } = ctx;
9452
9554
  if (shouldUsePlatformChatProvider(deps.env, agentConfig) && isGemini3Model(agentConfig.model ?? "") && agentConfig.provider === "google") {
9453
9555
  const providerConfig = await resolvePlatformChatProviderConfig({
9454
9556
  agentConfig,
@@ -9515,6 +9617,7 @@ var resolveGeminiNativeToolTransport = async (ctx) => {
9515
9617
  status: res.status,
9516
9618
  error: errText.slice(0, 200)
9517
9619
  });
9620
+ await recordLocalAvailability(res.status, errText);
9518
9621
  throw new Error(
9519
9622
  `gemini native tool provider failed: HTTP ${res.status} ${errText.slice(0, 500)}`
9520
9623
  );
@@ -9540,6 +9643,7 @@ var resolveGeminiNativeToolTransport = async (ctx) => {
9540
9643
  contentChars: text.length,
9541
9644
  toolCallCount: toolCalls.length
9542
9645
  });
9646
+ await recordLocalAvailability(200);
9543
9647
  return result;
9544
9648
  }
9545
9649
  };
@@ -10091,6 +10195,446 @@ async function syncLocalDialogEvidenceToRemote(args) {
10091
10195
  return { attempted: true };
10092
10196
  }
10093
10197
 
10198
+ // packages/core/publicAgentSeeds.ts
10199
+ var AGENT_SEED_DEFAULTS = {
10200
+ isPublic: true,
10201
+ allowFork: true,
10202
+ hasVision: false,
10203
+ tools: []
10204
+ };
10205
+ function deterministicId(prefix, seed) {
10206
+ let h = 2166136261;
10207
+ for (let i = 0; i < seed.length; i++) {
10208
+ h ^= seed.charCodeAt(i);
10209
+ h = h * 16777619 >>> 0;
10210
+ }
10211
+ const suffix = h.toString(36).toUpperCase().padStart(14, "0");
10212
+ return (prefix + suffix).slice(0, 26);
10213
+ }
10214
+ function defineAgentSeed(input) {
10215
+ const providerForLookup = isPlatformHostedImageModel(input.model) ? "nolo" : input.provider || "nolo";
10216
+ const tools = input.tools ? [...input.tools] : [...AGENT_SEED_DEFAULTS.tools];
10217
+ const isPublic = input.isPublic ?? AGENT_SEED_DEFAULTS.isPublic;
10218
+ const allowFork = input.allowFork ?? AGENT_SEED_DEFAULTS.allowFork;
10219
+ const tags = input.tags ? [...input.tags] : [];
10220
+ const isPlatformHosted = isNoloHostedProvider(input.provider);
10221
+ const isPlatformPriced = !isPlatformHostedImageModel(input.model) && (isPlatformHosted || input.apiSource === "platform" || input.isPublic === true && !input.apiSource);
10222
+ let inputPrice = isPlatformPriced ? void 0 : input.inputPrice;
10223
+ let outputPrice = isPlatformPriced ? void 0 : input.outputPrice;
10224
+ let hasVision = input.hasVision;
10225
+ const pricesProvided = input.inputPrice !== void 0 || input.outputPrice !== void 0;
10226
+ if (!isPlatformPriced && (inputPrice === void 0 || outputPrice === void 0)) {
10227
+ const pricing = getModelPricing(providerForLookup, input.model);
10228
+ if (!pricing) {
10229
+ throw new Error(`\u672A\u627E\u5230\u6A21\u578B\u4EF7\u683C\u5143\u6570\u636E: ${providerForLookup}/${input.model}`);
10230
+ }
10231
+ if (inputPrice === void 0) inputPrice = pricing.inputPrice;
10232
+ if (outputPrice === void 0) outputPrice = pricing.outputPrice;
10233
+ }
10234
+ if (hasVision === void 0) {
10235
+ if (pricesProvided) {
10236
+ hasVision = AGENT_SEED_DEFAULTS.hasVision;
10237
+ } else {
10238
+ const modelConfig = getModelConfig(providerForLookup, input.model);
10239
+ hasVision = !!modelConfig.hasVision;
10240
+ }
10241
+ }
10242
+ const userVisibleTexts = [
10243
+ ["name", input.name],
10244
+ ["introduction", input.introduction],
10245
+ [
10246
+ "greeting",
10247
+ typeof input.greeting === "string" ? input.greeting : input.greeting?.text
10248
+ ],
10249
+ ["prompt", input.prompt],
10250
+ ...(input.tags ?? []).map((tag) => ["tags", tag])
10251
+ ];
10252
+ for (const [fieldName, text] of userVisibleTexts) {
10253
+ if (!text) continue;
10254
+ const hit = text.match(/平台托管|runinfra|openrouter|ollama/i);
10255
+ if (hit) {
10256
+ throw new Error(
10257
+ `\u516C\u5F00 agent seed\u300C${input.name}\u300D\u7684\u7528\u6237\u53EF\u89C1\u5B57\u6BB5 ${fieldName} \u542B\u4E0A\u6E38\u8DEF\u7531/\u6258\u7BA1\u6E20\u9053\u8BCD\u300C${hit[0]}\u300D\uFF0C\u7981\u6B62\u5199\u5165\uFF08\u6362\u4F9B\u5E94\u5546\u4E0D\u5E94\u7275\u52A8\u7528\u6237\u6587\u6848\uFF1B\u6A21\u578B\u5382\u5546\u540D\u4E0D\u5728\u6B64\u9650\uFF09`
10258
+ );
10259
+ }
10260
+ }
10261
+ const { inputPrice: _strippedInputPrice, outputPrice: _strippedOutputPrice, ...inputRest } = input;
10262
+ const record = {
10263
+ ...inputRest,
10264
+ tools,
10265
+ isPublic,
10266
+ allowFork,
10267
+ tags,
10268
+ hasVision
10269
+ };
10270
+ if (!isPlatformPriced) {
10271
+ record.inputPrice = inputPrice;
10272
+ record.outputPrice = outputPrice;
10273
+ }
10274
+ return record;
10275
+ }
10276
+ var GPT_6_LUNA_DEF = defineAgentSeed({
10277
+ // salt 冻结为历史值 "shared-space-openai-gpt-5-6-luna":deterministicId 由
10278
+ // prefix+salt 哈希得出,改 salt 会换 ID——2026-09-23 Luna 原地换代
10279
+ // (GPT-5.6 Luna → GPT-6 Luna)必须保留稳定 ID,用户收藏/别名/Space
10280
+ // 内容键才不失效。
10281
+ id: deterministicId("01GPT56LUNPB", "shared-space-openai-gpt-5-6-luna"),
10282
+ presetKey: "gpt-6-luna",
10283
+ name: "GPT-6 Luna",
10284
+ // provider 用平台托管命名空间 "nolo"(平台 agent 统一收敛方向):平台价只注册在
10285
+ // nolo 下,agent-run 的托管路由门也只认 nolo。写上游名 "openai" 会让计费落零价
10286
+ // 虚拟模型并绕过 hosted routing(2026-09-24 review CRITICAL)。
10287
+ provider: "nolo",
10288
+ model: "gpt-6-luna",
10289
+ isPublic: true,
10290
+ platformAudit: true,
10291
+ introduction: "OpenAI GPT-6 Luna \u516C\u5F00\u52A9\u624B\uFF08\u8F7B\u91CF\u6863\uFF09\uFF0C\u9002\u5408\u9AD8\u541E\u5410\u3001\u4F4E\u6210\u672C\u3001\u901F\u5EA6\u654F\u611F\u4EFB\u52A1\u3002",
10292
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F GPT-6 Luna\u3002\u8F7B\u91CF\u6863\u4F4D\uFF0C\u9002\u5408\u5FEB\u901F\u3001\u4F4E\u6210\u672C\u4EFB\u52A1\u3002",
10293
+ prompt: "\u4F18\u5148\u5FEB\u901F\u5B8C\u6210\u4EFB\u52A1\uFF1B\u4FDD\u6301\u56DE\u7B54\u76F4\u63A5\u3001\u7ED3\u8BBA\u660E\u786E\u3002",
10294
+ tools: [],
10295
+ tags: ["openai"]
10296
+ });
10297
+ var DEEPSEEK_V4_FLASH_DEF = defineAgentSeed({
10298
+ id: PUBLIC_DEEPSEEK_V4_FLASH_AGENT_ID,
10299
+ presetKey: "deepseek-v4-flash",
10300
+ name: "DeepSeek Flash",
10301
+ provider: "nolo",
10302
+ model: "deepseek-flash",
10303
+ isPublic: true,
10304
+ introduction: "DeepSeek Flash \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u9AD8\u6027\u4EF7\u6BD4\u901A\u7528\u95EE\u7B54\u3001\u4EE3\u7801\u4E0E\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1\u3002",
10305
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F DeepSeek Flash\u3002\u9002\u5408\u5FEB\u901F\u5904\u7406\u901A\u7528\u95EE\u9898\u3001\u4EE3\u7801\u548C\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1\u3002",
10306
+ prompt: "\u4F18\u5148\u5FEB\u901F\u3001\u76F4\u63A5\u3001\u7A33\u5B9A\u5730\u5B8C\u6210\u4EFB\u52A1\uFF1B\u9700\u8981\u63A8\u7406\u65F6\u4FDD\u6301\u6B65\u9AA4\u6E05\u6670\u3002",
10307
+ tools: [],
10308
+ tags: ["nolo", "deepseek"]
10309
+ });
10310
+ var DEEPSEEK_V4_PRO_DEF = defineAgentSeed({
10311
+ id: PUBLIC_DEEPSEEK_V4_PRO_AGENT_ID,
10312
+ presetKey: "deepseek-v4-pro",
10313
+ name: "DeepSeek V4 Pro",
10314
+ provider: "nolo",
10315
+ model: "deepseek-v4-pro",
10316
+ hasVision: false,
10317
+ isPublic: true,
10318
+ introduction: "DeepSeek V4 Pro \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u590D\u6742\u63A8\u7406\u3001\u4EE3\u7801\u3001agentic \u5DE5\u4F5C\u6D41\u4E0E\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1\u3002",
10319
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F DeepSeek V4 Pro\u3002\u9002\u5408\u590D\u6742\u63A8\u7406\u3001\u4EE3\u7801\u5206\u6790\u548C\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1\u3002",
10320
+ prompt: "\u9762\u5BF9\u590D\u6742\u4EFB\u52A1\u4F18\u5148\u62C6\u6E05\u76EE\u6807\u3001\u8BC1\u636E\u548C\u6267\u884C\u8DEF\u5F84\uFF0C\u518D\u7ED9\u51FA\u53EF\u9760\u7ED3\u8BBA\u3002",
10321
+ tools: [],
10322
+ tags: ["nolo", "deepseek"]
10323
+ });
10324
+ var GLM_5_3_DEF = defineAgentSeed({
10325
+ id: "01GLM52DIPB00000000I3E2MY",
10326
+ presetKey: "glm-5.3",
10327
+ name: "GLM 5.3",
10328
+ provider: "nolo",
10329
+ model: "glm-5.3",
10330
+ isPublic: true,
10331
+ hasVision: true,
10332
+ introduction: "GLM 5.3 \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u590D\u6742\u63A8\u7406\u3001\u957F\u4E0A\u4E0B\u6587\u3001\u4E2D\u6587\u7406\u89E3\u4E0E\u4EE3\u7801\u5206\u6790\u3002",
10333
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F GLM 5.3\u3002\u9002\u5408\u5904\u7406\u590D\u6742\u5206\u6790\u3001\u9AD8\u8D28\u91CF\u4E2D\u6587\u95EE\u7B54\u4E0E\u4EE3\u7801\u63A8\u7406\u4EFB\u52A1\u3002",
10334
+ prompt: "\u4F18\u5148\u7ED9\u51FA\u76F4\u63A5\u3001\u51C6\u786E\u3001\u53EF\u6267\u884C\u7684\u56DE\u7B54\uFF1B\u590D\u6742\u95EE\u9898\u5148\u7406\u6E05\u76EE\u6807\u548C\u7EA6\u675F\u518D\u63A8\u7406\uFF0C\u4FDD\u6301\u7ED3\u6784\u6E05\u6670\u3001\u4F9D\u636E\u660E\u786E\u3002",
10335
+ tools: [],
10336
+ tags: ["nolo", "glm"]
10337
+ });
10338
+ var GLM_5_3_FLASH_DEF = defineAgentSeed({
10339
+ id: PUBLIC_GLM_53_FLASH_AGENT_ID,
10340
+ presetKey: "glm-5-3-flash",
10341
+ name: "GLM 5.3 Flash",
10342
+ provider: "nolo",
10343
+ model: "glm-5-3-flash",
10344
+ isPublic: true,
10345
+ hasVision: true,
10346
+ introduction: "GLM 5.3 Flash \u516C\u5F00\u52A9\u624B\uFF0C\u5EC9\u4EF7\u5FEB\u6863\uFF0C\u9002\u5408\u9AD8\u9891\u8F7B\u91CF\u95EE\u7B54\u4E0E\u6279\u91CF\u4EFB\u52A1\u3002\u6CE8\u610F\uFF1A\u8BE5\u6A21\u578B\u9ED8\u8BA4\u6DF1\u5EA6\u601D\u8003\uFF0C\u601D\u8003\u8FC7\u7A0B token \u8BA1\u5165\u8F93\u51FA\u8BA1\u8D39\uFF08\u8F93\u51FA 3.2 \u79EF\u5206/\u767E\u4E07 token\uFF09\uFF0C\u5B9E\u9645\u6D88\u8017\u9AD8\u4E8E\u540C\u957F\u5EA6\u53EF\u89C1\u56DE\u590D\uFF1B\u628A agent \u7684 reasoning_effort \u8BBE\u4E3A low \u53EF\u5173\u95ED\u601D\u8003\u2014\u2014\u5355\u8F6E\u95EE\u7B54\u5B9E\u6D4B\u8F93\u51FA token \u964D\u5230\u7EA6 1/5\uFF0C\u591A\u8F6E\u5DE5\u5177\u5FAA\u73AF\u91CC\u7EA6\u964D 4 \u6210\uFF08\u5DE5\u5177\u8F6E\u672C\u8EAB\u601D\u8003\u5C31\u5C11\uFF09\uFF0C\u53EF\u89C1\u56DE\u590D\u957F\u5EA6\u4E0E\u5DE5\u5177\u8C03\u7528\u6B63\u786E\u6027\u5747\u4E0D\u53D8\uFF1Bmedium \u6863 token \u7565\u964D\u4F46\u5EF6\u8FDF\u4E0D\u6539\u5584\u3002",
10347
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F GLM 5.3 Flash\u3002\u8F7B\u91CF\u5FEB\u901F\u3001\u4EF7\u683C\u4F4E\uFF0C\u9002\u5408\u65E5\u5E38\u95EE\u7B54\u4E0E\u6279\u91CF\u8F7B\u91CF\u4EFB\u52A1\u3002",
10348
+ prompt: "\u76F4\u63A5\u3001\u7B80\u6D01\u5730\u5B8C\u6210\u4EFB\u52A1\uFF1B\u56DE\u7B54\u4FDD\u6301\u7B80\u77ED\uFF0C\u5148\u7ED9\u7ED3\u8BBA\u3002",
10349
+ // 关掉思考:该模型默认档的 reasoning token 计入输出计费,而实测 low 档
10350
+ // reasoning 输出为 0(10/10 样本),单轮问答输出 token 降到约 1/5、多轮工具
10351
+ // 循环降约 4 成,可见回复长度、工具调用正确性与循环完成度均不变。
10352
+ // medium 档只省约 29% token 且延迟不改善,故直接用 low。
10353
+ reasoning_effort: "low",
10354
+ tools: [],
10355
+ tags: ["nolo", "glm", "flash"]
10356
+ });
10357
+ var CLAUDE_FABLE_5_1_DEF = defineAgentSeed({
10358
+ id: deterministicId("01CLDFBL51PB", "shared-space-anthropic-claude-fable-5-1"),
10359
+ presetKey: "claude-fable-5-1",
10360
+ name: "Claude Fable 5.1",
10361
+ provider: "nolo",
10362
+ model: "anthropic/claude-fable-5-1",
10363
+ isPublic: true,
10364
+ hasVision: true,
10365
+ introduction: "Claude Fable 5.1 \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u590D\u6742\u95EE\u7B54\u3001\u957F\u6587\u5206\u6790\u3001\u4EE3\u7801\u548C\u56FE\u7247\u7406\u89E3\u3002",
10366
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F Claude Fable 5.1\u3002\u9002\u5408\u590D\u6742\u95EE\u9898\u3001\u957F\u6587\u5206\u6790\u3001\u4EE3\u7801\u548C\u56FE\u7247\u7406\u89E3\u3002",
10367
+ prompt: "\u9762\u5BF9\u590D\u6742\u4EFB\u52A1\u5148\u5398\u6E05\u76EE\u6807\u548C\u7EA6\u675F\uFF0C\u518D\u7ED9\u51FA\u53EF\u9760\u3001\u53EF\u6267\u884C\u3001\u53EF\u590D\u6838\u7684\u7ED3\u679C\u3002",
10368
+ tools: [],
10369
+ tags: ["anthropic", "claude", "fable"]
10370
+ });
10371
+ var CLAUDE_OPUS_5_5_DEF = defineAgentSeed({
10372
+ id: deterministicId("01CLDOPU55PB", "shared-space-anthropic-claude-opus-5-5"),
10373
+ presetKey: "claude-opus-5-5",
10374
+ name: "Claude Opus 5.5",
10375
+ provider: "nolo",
10376
+ model: "anthropic/claude-opus-5-5",
10377
+ isPublic: true,
10378
+ hasVision: true,
10379
+ introduction: "Claude Opus 5.5 \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u9AD8\u96BE\u63A8\u7406\u3001\u957F\u94FE\u8DEF\u5206\u6790\u548C\u56FE\u7247\u7406\u89E3\u3002",
10380
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F Claude Opus 5.5\u3002\u9002\u5408\u9AD8\u96BE\u63A8\u7406\u3001\u590D\u6742\u5206\u6790\u548C\u56FE\u7247\u7406\u89E3\u3002",
10381
+ prompt: "\u5148\u786E\u8BA4\u95EE\u9898\u76EE\u6807\u3001\u8BC1\u636E\u548C\u98CE\u9669\uFF0C\u518D\u7ED9\u51FA\u7ED3\u6784\u6E05\u695A\u3001\u7ED3\u8BBA\u660E\u786E\u7684\u56DE\u7B54\u3002",
10382
+ tools: [],
10383
+ tags: ["anthropic", "claude", "opus"]
10384
+ });
10385
+ var GROK_4_6_DEF = defineAgentSeed({
10386
+ id: deterministicId("01GROK46PLAZ", "shared-space-xai-grok-4-6"),
10387
+ presetKey: "grok-4.6",
10388
+ name: "Grok 4.6",
10389
+ provider: "xai",
10390
+ model: "grok-4.6",
10391
+ isPublic: true,
10392
+ hasVision: true,
10393
+ introduction: "xAI Grok 4.6 \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u5B9E\u65F6\u4FE1\u606F\u5206\u6790\u3001\u590D\u6742\u63A8\u7406\u3001\u4EE3\u7801\u548C\u591A\u6A21\u6001\u4EFB\u52A1\u3002",
10394
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F Grok 4.6\u3002\u53EF\u4EE5\u5E2E\u4F60\u5206\u6790\u95EE\u9898\u3001\u7F16\u5199\u4EE3\u7801\u3001\u7406\u89E3\u56FE\u7247\u5E76\u5904\u7406\u590D\u6742\u4EFB\u52A1\u3002",
10395
+ prompt: "\u4F18\u5148\u7ED9\u51FA\u76F4\u63A5\u3001\u51C6\u786E\u3001\u53EF\u6267\u884C\u7684\u56DE\u7B54\uFF1B\u9762\u5BF9\u590D\u6742\u95EE\u9898\u5148\u68B3\u7406\u76EE\u6807\u548C\u7EA6\u675F\uFF0C\u518D\u8FDB\u884C\u53EF\u9760\u63A8\u7406\u3002\u5BF9\u4E0D\u786E\u5B9A\u7684\u5185\u5BB9\u660E\u786E\u8BF4\u660E\u4F9D\u636E\u4E0E\u65F6\u6548\u6027\uFF0C\u4E0D\u7F16\u9020\u3002",
10396
+ tools: [],
10397
+ tags: ["xai", "grok"]
10398
+ });
10399
+ var GEMINI_3_8_FLASH_DEF = defineAgentSeed({
10400
+ // 种子串冻结以维持确定性 ID 稳定,勿随版本改名。
10401
+ id: deterministicId("01GEM37FLPB", "shared-space-google-gemini-3-7-flash"),
10402
+ presetKey: "gemini-3.8-flash",
10403
+ name: "Gemini 3.8 Flash",
10404
+ provider: "nolo",
10405
+ model: "gemini-3.8-flash",
10406
+ isPublic: true,
10407
+ introduction: "Gemini 3.8 Flash \u516C\u5F00\u52A9\u624B\uFF0C\u9002\u5408\u5FEB\u901F\u524D\u6CBF\u95EE\u7B54\u3001\u4EE3\u7801\u3001\u591A\u6A21\u6001\u548C\u957F\u4E0A\u4E0B\u6587\u4EFB\u52A1\u3002",
10408
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F Gemini 3.8 Flash\u3002\u9002\u5408\u5FEB\u901F\u5904\u7406\u957F\u4E0A\u4E0B\u6587\u3001\u591A\u6A21\u6001\u548C\u4EE3\u7801\u4EFB\u52A1\u3002",
10409
+ prompt: "\u4F18\u5148\u76F4\u63A5\u5B8C\u6210\u4EFB\u52A1\uFF1B\u9700\u8981\u63A8\u7406\u6216\u5199\u4EE3\u7801\u65F6\u4FDD\u6301\u6B65\u9AA4\u6E05\u6670\u3001\u7ED3\u8BBA\u53EF\u9760\u3002",
10410
+ tools: [],
10411
+ tags: ["google", "gemini"]
10412
+ });
10413
+ var GPT_IMAGE_2_GENERATOR_DEF = defineAgentSeed({
10414
+ id: PUBLIC_GPT_IMAGE_2_GENERATOR_AGENT_ID,
10415
+ presetKey: "gpt-image-2-generator",
10416
+ name: "GPT Image 2 \u56FE\u7247\u751F\u6210\u5668",
10417
+ provider: "nolo",
10418
+ model: "gpt-6-luna",
10419
+ imageModel: "gpt-image-2",
10420
+ isPublic: true,
10421
+ hasImageOutput: true,
10422
+ imageWorkflow: "generate",
10423
+ imageConfig: { enabled: true },
10424
+ introduction: "\u4E13\u95E8\u8D1F\u8D23 GPT Image 2 \u65B0\u56FE\u751F\u6210\uFF1A\u6587\u672C\u751F\u6210\u65B0\u56FE\u7247\uFF0C\u4E5F\u53EF\u628A\u4E0A\u4F20\u56FE\u7247\u5F53\u4F5C\u53C2\u8003\u56FE\u6765\u751F\u6210\u65B0\u7684\u753B\u9762\u3002",
10425
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F GPT Image 2 \u56FE\u7247\u751F\u6210\u5668\u3002\u76F4\u63A5\u544A\u8BC9\u6211\u4F60\u60F3\u753B\u4EC0\u4E48\uFF1B\u5982\u679C\u4F60\u4E0A\u4F20\u53C2\u8003\u56FE\uFF0C\u6211\u4F1A\u628A\u5B83\u4EEC\u5F53\u4F5C\u7075\u611F\u53C2\u8003\u6765\u751F\u6210\u4E00\u5F20\u65B0\u7684\u56FE\u7247\u3002",
10426
+ prompt: [
10427
+ "\u5B9A\u4F4D\uFF1A",
10428
+ "- \u4F60\u7684\u4E3B\u4EFB\u52A1\u662F\u6587\u672C\u751F\u6210\u65B0\u56FE\u7247\u3002",
10429
+ "- \u5982\u679C\u7528\u6237\u4E0A\u4F20\u4E86\u53C2\u8003\u56FE\uFF0C\u5B83\u4EEC\u53EA\u7528\u4E8E\u53C2\u8003\u56FE\u5F71\u54CD\u65B0\u56FE\u6784\u56FE\u3001\u98CE\u683C\u3001\u89D2\u8272\u5173\u7CFB\u548C\u89C6\u89C9\u65B9\u5411\u3002",
10430
+ "- \u4E0D\u8981\u628A\u8FD9\u7C7B\u8BF7\u6C42\u5904\u7406\u6210\u591A\u8F6E\u8FDE\u7EED\u7F16\u8F91\u4F1A\u8BDD\uFF1B\u9ED8\u8BA4\u6309\u5355\u6B21\u8BF7\u6C42\u5B8C\u6210\u4E00\u7248\u65B0\u56FE\u3002",
10431
+ "",
10432
+ "\u5DE5\u4F5C\u65B9\u5F0F\uFF1A",
10433
+ "- \u7528\u6237\u7ED9\u51FA\u6E05\u6670\u9700\u6C42\u540E\uFF0C\u76F4\u63A5\u751F\u6210\uFF0C\u4E0D\u5148\u5199\u957F\u7BC7\u89E3\u91CA\u3002",
10434
+ "- prompt \u8981\u660E\u786E\u4E3B\u4F53\u3001\u573A\u666F\u3001\u955C\u5934\u3001\u5149\u7EBF\u3001\u6750\u8D28\u3001\u98CE\u683C\u4E0E\u7981\u6B62\u9879\u3002",
10435
+ "- \u5982\u679C\u7528\u6237\u8981\u6C42\u591A\u7248\u672C\uFF0C\u53EF\u4EE5\u4E00\u6B21\u7ED9\u5C11\u91CF\u5019\u9009\uFF1B\u9ED8\u8BA4\u5148\u7ED9 1 \u5F20\u3002",
10436
+ "- \u5982\u679C\u7528\u6237\u5176\u5B9E\u662F\u5728\u8981\u6C42\u7CBE\u786E\u6539\u56FE\u3001\u5C40\u90E8\u66FF\u6362\u3001\u591A\u56FE\u62FC\u5408\u6216 mask \u4FEE\u6539\uFF0C\u63D0\u9192\u66F4\u9002\u5408\u6539\u7528\u201CGPT Image 2 \u56FE\u7247\u7F16\u8F91\u5668\u201D\u3002",
10437
+ "",
10438
+ "\u56DE\u590D\u65B9\u5F0F\uFF1A",
10439
+ "- \u9ED8\u8BA4\u4E2D\u6587\u8F93\u51FA\uFF0C\u7B80\u77ED\u8BF4\u660E\u7ED3\u679C\uFF0C\u5E76\u7ED9 2-4 \u4E2A\u4E0B\u4E00\u6B65\u53EF\u7EE7\u7EED\u5FAE\u8C03\u7684\u65B9\u5411\u3002"
10440
+ ].join("\n"),
10441
+ tools: ["openAIGptImageGenerate"],
10442
+ tags: ["image", "openai", "gpt-image-2", "generate"]
10443
+ });
10444
+ var GPT_IMAGE_2_EDITOR_DEF = defineAgentSeed({
10445
+ id: PUBLIC_GPT_IMAGE_2_EDITOR_AGENT_ID,
10446
+ presetKey: "gpt-image-2-editor",
10447
+ name: "GPT Image 2 \u56FE\u7247\u7F16\u8F91\u5668",
10448
+ provider: "nolo",
10449
+ model: "gpt-6-luna",
10450
+ imageModel: "gpt-image-2",
10451
+ isPublic: true,
10452
+ hasImageOutput: true,
10453
+ imageWorkflow: "edit",
10454
+ imageConfig: { enabled: true },
10455
+ introduction: "\u4E13\u95E8\u8D1F\u8D23 GPT Image 2 \u5355\u6B21\u8BF7\u6C42\u6539\u56FE\uFF1A\u652F\u6301\u5355\u56FE\u7F16\u8F91\u3001\u591A\u56FE\u53C2\u8003\u5408\u6210\uFF0C\u4EE5\u53CA\u5E26 mask \u7684\u7CBE\u786E\u4FEE\u6539\u3002",
10456
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F GPT Image 2 \u56FE\u7247\u7F16\u8F91\u5668\u3002\u628A\u8981\u4FEE\u6539\u7684\u56FE\u7247\u3001\u53C2\u8003\u56FE\u6216 mask \u53D1\u7ED9\u6211\uFF0C\u6211\u4F1A\u6309\u5355\u6B21\u8BF7\u6C42\u6539\u56FE\u7684\u65B9\u5F0F\u7ED9\u4F60\u4E00\u7248\u7ED3\u679C\u3002",
10457
+ prompt: [
10458
+ "\u5B9A\u4F4D\uFF1A",
10459
+ "- \u4F60\u7684\u4E3B\u4EFB\u52A1\u662F\u5355\u6B21\u8BF7\u6C42\u6539\u56FE\uFF0C\u4E0D\u662F\u957F\u5BF9\u8BDD\u966A\u4F34\u5F0F\u521B\u4F5C\u3002",
10460
+ "- \u4F60\u652F\u6301\u5355\u56FE\u7F16\u8F91\u3001\u591A\u56FE\u53C2\u8003\u3001\u62FC\u5408\u6784\u56FE\uFF0C\u4EE5\u53CA\u53EF\u9009\u7684 mask \u5C40\u90E8\u4FEE\u6539\u3002",
10461
+ "- \u5982\u679C\u7528\u6237\u8981\u7684\u662F\u6301\u7EED\u51E0\u8F6E\u201C\u7EE7\u7EED\u6539\u3001\u518D\u6765\u4E00\u7248\u3001\u5EF6\u7EED\u4E0A\u4E00\u8F6E\u201D\u7684\u521B\u4F5C\u8FC7\u7A0B\uFF0C\u63D0\u9192\u66F4\u9002\u5408\u201CGPT Image 2 \u8FDE\u7EED\u521B\u4F5C\u52A9\u624B\u201D\u3002",
10462
+ "",
10463
+ "\u5DE5\u4F5C\u65B9\u5F0F\uFF1A",
10464
+ "- \u6536\u5230\u56FE\u7247\u540E\uFF0C\u4F18\u5148\u6309\u5355\u6B21\u8BF7\u6C42\u6539\u56FE\u5B8C\u6210\u5F53\u524D\u76EE\u6807\u3002",
10465
+ "- \u591A\u56FE\u53C2\u8003\u65F6\uFF0C\u8981\u660E\u786E\u6BCF\u5F20\u56FE\u5206\u522B\u627F\u62C5\u4E3B\u4F53\u3001\u98CE\u683C\u3001\u80CC\u666F\u6216\u6784\u56FE\u53C2\u8003\u3002",
10466
+ "- \u5982\u679C\u7528\u6237\u63D0\u4F9B\u4E86 mask\uFF0C\u5C31\u628A mask \u89C6\u4E3A\u5FC5\u987B\u9075\u5B88\u7684\u7F16\u8F91\u8303\u56F4\u3002",
10467
+ "- \u5982\u679C\u7F3A\u5C11\u5173\u952E\u539F\u56FE\u3001\u53C2\u8003\u56FE\u6216 mask\uFF0C\u5148\u7528\u4E00\u53E5\u8BDD\u6307\u51FA\u7F3A\u53E3\uFF0C\u518D\u7B49\u7528\u6237\u8865\u9F50\u3002",
10468
+ "- \u8C03\u7528 openAIGptImageEdit \u65F6\uFF0C\u4F18\u5148\u590D\u7528\u7528\u6237\u5DF2\u4E0A\u4F20\u7684\u539F\u59CB http(s) \u56FE\u7247 URL\uFF1B\u4E0D\u8981\u81EA\u5DF1\u624B\u5199 data URL \u6216\u91CD\u7F16\u7801\u7F29\u7565\u56FE\u3002",
10469
+ "- \u8C03\u7528 openAIGptImageEdit \u65F6\uFF0C\u4E0D\u8981\u4F20 transparent background\uFF1Bbackground \u4E00\u5F8B\u7528 opaque\uFF0C\u9664\u975E\u5E95\u5C42\u80FD\u529B\u4EE5\u540E\u660E\u786E\u652F\u6301\u518D\u8C03\u6574\u3002",
10470
+ "- \u5982\u679C outputFormat \u662F png\uFF08\u6216\u6CA1\u6709\u663E\u5F0F\u6539\u6210 jpeg/webp\uFF09\uFF0C\u4E0D\u8981\u4F20 outputCompression\u3002",
10471
+ "",
10472
+ "\u56DE\u590D\u65B9\u5F0F\uFF1A",
10473
+ "- \u9ED8\u8BA4\u4E2D\u6587\u8F93\u51FA\uFF0C\u7B80\u77ED\u8BF4\u660E\u8FD9\u6B21\u6539\u52A8\uFF0C\u5E76\u7ED9 2-4 \u4E2A\u53EF\u7EE7\u7EED\u7EC6\u5316\u7684\u65B9\u5411\u3002"
10474
+ ].join("\n"),
10475
+ tools: ["openAIGptImageEdit"],
10476
+ tags: ["image", "openai", "gpt-image-2", "edit"]
10477
+ });
10478
+ var GPT_IMAGE_2_CONTINUOUS_DEF = defineAgentSeed({
10479
+ id: PUBLIC_GPT_IMAGE_2_CONTINUOUS_AGENT_ID,
10480
+ presetKey: "gpt-image-2-continuous",
10481
+ name: "GPT Image 2 \u8FDE\u7EED\u521B\u4F5C\u52A9\u624B",
10482
+ provider: "nolo",
10483
+ model: "gpt-6-luna",
10484
+ imageModel: "gpt-image-2",
10485
+ isPublic: true,
10486
+ hasImageOutput: true,
10487
+ imageWorkflow: "continuous",
10488
+ imageConfig: { enabled: true },
10489
+ introduction: "\u4E13\u95E8\u8D1F\u8D23 GPT Image 2 \u591A\u8F6E\u8FDE\u7EED\u521B\u4F5C\uFF1A\u9002\u5408\u5148\u51FA\u4E00\u7248\uFF0C\u518D\u56F4\u7ED5\u4E0A\u4E00\u8F6E\u56FE\u7247\u7EE7\u7EED\u4FEE\u6539\u3001\u7EE7\u7EED\u6269\u5C55\u548C\u7EE7\u7EED\u8FED\u4EE3\u3002",
10490
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F GPT Image 2 \u8FDE\u7EED\u521B\u4F5C\u52A9\u624B\u3002\u4F60\u53EF\u4EE5\u5148\u8BA9\u6211\u51FA\u4E00\u7248\u56FE\uFF0C\u518D\u56F4\u7ED5\u4E0A\u4E00\u8F6E\u7EE7\u7EED\u4FEE\u6539\u3001\u7EE7\u7EED\u6269\u5C55\u6216\u7EE7\u7EED\u5B9A\u7A3F\u3002",
10491
+ prompt: [
10492
+ "\u5B9A\u4F4D\uFF1A",
10493
+ "- \u4F60\u7684\u4E3B\u4EFB\u52A1\u662F\u591A\u8F6E\u8FDE\u7EED\u521B\u4F5C\u3002",
10494
+ "- \u7528\u6237\u7ECF\u5E38\u4F1A\u57FA\u4E8E\u4E0A\u4E00\u8F6E\u7ED3\u679C\u7EE7\u7EED\u4FEE\u6539\u3001\u7EE7\u7EED\u7EC6\u5316\u3001\u7EE7\u7EED\u6362\u98CE\u683C\u3001\u7EE7\u7EED\u8865\u5143\u7D20\u3002",
10495
+ "- \u4F60\u8981\u628A\u5F53\u524D\u5BF9\u8BDD\u91CC\u7684\u4E0A\u4E00\u8F6E\u56FE\u7247\u89C6\u4F5C\u9ED8\u8BA4\u5EF6\u7EED\u5BF9\u8C61\uFF0C\u800C\u4E0D\u662F\u6BCF\u8F6E\u90FD\u91CD\u65B0\u5F00\u59CB\u3002",
10496
+ "",
10497
+ "\u5DE5\u4F5C\u65B9\u5F0F\uFF1A",
10498
+ "- \u5982\u679C\u5F53\u524D\u8F6E\u7528\u6237\u6CA1\u6709\u4E0A\u4F20\u65B0\u56FE\uFF0C\u4E14\u4E0A\u4E0B\u6587\u91CC\u4E5F\u6CA1\u6709\u4E0A\u4E00\u8F6E\u53EF\u7528\u56FE\u7247\uFF0C\u4F46\u7528\u6237\u662F\u5728\u8981\u6C42\u5148\u51FA\u4E00\u7248\u56FE\uFF0C\u5148\u8C03\u7528 openAIGptImageGenerate \u751F\u6210\u521D\u59CB\u7248\u672C\u3002",
10499
+ "- \u5982\u679C\u5F53\u524D\u8F6E\u7528\u6237\u4E0A\u4F20\u4E86\u65B0\u56FE\uFF0C\u4F18\u5148\u57FA\u4E8E\u65B0\u56FE\u7EE7\u7EED\u521B\u4F5C\u3002",
10500
+ "- \u5982\u679C\u7528\u6237\u6CA1\u6709\u4E0A\u4F20\u65B0\u56FE\uFF0C\u4F46\u4E0A\u4E0B\u6587\u91CC\u5DF2\u6709\u4E0A\u4E00\u8F6E\u53EF\u7528\u56FE\u7247\uFF0C\u9ED8\u8BA4\u6CBF\u7528\u4E0A\u4E00\u8F6E\u7ED3\u679C\u7EE7\u7EED\u4FEE\u6539\u3002",
10501
+ "- \u8C03\u7528 openAIGptImageEdit \u65F6\uFF0C\u4F18\u5148\u590D\u7528\u5F53\u524D\u5BF9\u8BDD\u91CC\u6700\u8FD1\u4E00\u8F6E\u53EF\u7528\u7684\u539F\u59CB http(s) \u56FE\u7247 URL\uFF1B\u4E0D\u8981\u628A\u5DF2\u6709\u56FE\u7247\u91CD\u65B0\u624B\u5199\u6210 data URL \u6216\u4F4E\u4FDD\u771F\u7F29\u7565\u56FE\u3002",
10502
+ "- \u5982\u679C\u7528\u6237\u8BF7\u6C42\u7F16\u8F91\u5374\u6CA1\u6709\u4EFB\u4F55\u53EF\u7528\u56FE\u7247\uFF0C\u5C31\u660E\u786E\u63D0\u793A\u7528\u6237\u5148\u4E0A\u4F20\u4E00\u5F20\u56FE\u7247\u518D\u7EE7\u7EED\u3002",
10503
+ "- \u9ED8\u8BA4\u5148\u7ED9\u5FEB\u901F\u3001\u53EF\u8FED\u4EE3\u7684\u4E00\u7248\uFF1B\u7528\u6237\u660E\u786E\u8BF4\u8981\u6700\u7EC8\u7248\u3001\u9AD8\u6E05\u7248\u65F6\uFF0C\u518D\u63D0\u9AD8\u8D28\u91CF\u3002",
10504
+ "- \u8C03\u7528 openAIGptImageEdit \u65F6\uFF0C\u4E0D\u8981\u4F20 transparent background\uFF1Bbackground \u4E00\u5F8B\u7528 opaque\uFF0C\u9664\u975E\u5E95\u5C42\u80FD\u529B\u4EE5\u540E\u660E\u786E\u652F\u6301\u518D\u8C03\u6574\u3002",
10505
+ "- \u5982\u679C outputFormat \u662F png\uFF08\u6216\u6CA1\u6709\u663E\u5F0F\u6539\u6210 jpeg/webp\uFF09\uFF0C\u4E0D\u8981\u4F20 outputCompression\u3002",
10506
+ "",
10507
+ "\u56DE\u590D\u65B9\u5F0F\uFF1A",
10508
+ "- \u9ED8\u8BA4\u4E2D\u6587\u8F93\u51FA\uFF0C\u4FDD\u6301\u8FDE\u7EED\u534F\u4F5C\u53E3\u543B\uFF0C\u751F\u6210\u540E\u63D0\u793A\u7528\u6237\u53EF\u4EE5\u4ECE\u54EA\u4E9B\u65B9\u5411\u7EE7\u7EED\u7EC6\u5316\u3002"
10509
+ ].join("\n"),
10510
+ tools: ["openAIGptImageGenerate", "openAIGptImageEdit"],
10511
+ tags: ["image", "openai", "gpt-image-2", "continuous"]
10512
+ });
10513
+ var NANO_BANANA_2_LITE_GENERATOR_DEF = defineAgentSeed({
10514
+ id: PUBLIC_NANO_BANANA_2_LITE_AGENT_ID,
10515
+ presetKey: "nano-banana-2-lite-generator",
10516
+ name: "Nano Banana 2 Lite \u6587\u751F\u56FE",
10517
+ provider: "nolo",
10518
+ model: "gemini-3.1-flash-lite-image",
10519
+ isPublic: true,
10520
+ hasImageOutput: true,
10521
+ imageWorkflow: "generate",
10522
+ imageConfig: { enabled: true },
10523
+ introduction: "Nano Banana 2 Lite \u516C\u5F00\u6587\u751F\u56FE\u52A9\u624B\uFF1AGoogle \u6700\u5FEB\u3001\u6700\u4FBF\u5B9C\u7684\u56FE\u7247\u6A21\u578B\uFF0C\u9002\u5408\u5FEB\u901F\u8349\u7A3F\u3001\u6279\u91CF\u751F\u56FE\u548C\u4F4E\u6210\u672C\u89C6\u89C9\u63A2\u7D22\u3002",
10524
+ greeting: "\u4F60\u597D\uFF0C\u6211\u662F Nano Banana 2 Lite \u6587\u751F\u56FE\u52A9\u624B\u3002\u544A\u8BC9\u6211\u4F60\u60F3\u753B\u4EC0\u4E48\uFF0C\u6211\u4F1A\u7528 Google \u6700\u5FEB\u7684\u56FE\u7247\u6A21\u578B\u5FEB\u901F\u751F\u6210\u3002",
10525
+ prompt: [
10526
+ "\u5B9A\u4F4D\uFF1A",
10527
+ "- \u4F60\u7684\u4E3B\u4EFB\u52A1\u662F\u5FEB\u901F\u751F\u6210\u65B0\u56FE\u7247\u3002",
10528
+ "- \u5982\u679C\u7528\u6237\u9700\u8981\u66F4\u7CBE\u81F4\u7684\u7F16\u8F91\u3001\u591A\u56FE\u5408\u6210\u6216\u590D\u6742\u4FEE\u56FE\uFF0C\u5EFA\u8BAE\u4ED6\u4EEC\u53BB\u4F7F\u7528\u201CGPT Image 2 \u56FE\u7247\u7F16\u8F91\u5668\u201D\u6216\u201C\u8BC1\u4EF6\u7167\u5236\u4F5C\u201D\u7B49\u66F4\u5408\u9002\u7684\u5DE5\u5177\u3002",
10529
+ "",
10530
+ "\u5DE5\u4F5C\u65B9\u5F0F\uFF1A",
10531
+ "- \u7528\u6237\u7ED9\u51FA\u6E05\u6670\u9700\u6C42\u540E\uFF0C\u76F4\u63A5\u7528\u5F53\u524D\u6A21\u578B\u751F\u6210\u56FE\u7247\u3002",
10532
+ "- \u5BF9\u7528\u6237\u8BF4\u660E\u65F6\uFF0C\u628A\u5F53\u524D\u56FE\u7247\u6A21\u578B\u79F0\u4E3A\u56FE\u7247\u751F\u6210\u6A21\u578B\uFF0C\u4E0D\u8981\u628A\u6A21\u578B\u8BF4\u6210\u5DE5\u5177\u3002",
10533
+ "- prompt \u8981\u660E\u786E\u4E3B\u4F53\u3001\u573A\u666F\u3001\u98CE\u683C\u3001\u5149\u7EBF\u3001\u6C1B\u56F4\u3002",
10534
+ "- \u5982\u679C\u7528\u6237\u8981\u6C42\u591A\u7248\u672C\uFF0C\u53EF\u4EE5\u4E00\u6B21\u7ED9\u5C11\u91CF\u5019\u9009\uFF1B\u9ED8\u8BA4\u5148\u7ED9 1 \u5F20\u3002",
10535
+ "- \u5982\u679C\u7528\u6237\u4E0A\u4F20\u4E86\u53C2\u8003\u56FE\uFF0C\u8BA9\u6A21\u578B\u53C2\u8003\u6784\u56FE\u6216\u98CE\u683C\u3002",
10536
+ "- \u9ED8\u8BA4\u6BD4\u4F8B 5:4\uFF0C\u9ED8\u8BA4\u5C3A\u5BF8 2K\uFF1B\u7528\u6237\u660E\u786E\u8981\u6C42\u65F6\u6309\u6307\u5B9A\u503C\u4F20\u5165\u3002",
10537
+ "",
10538
+ "\u56DE\u590D\u65B9\u5F0F\uFF1A",
10539
+ "- \u9ED8\u8BA4\u4E2D\u6587\u8F93\u51FA\uFF0C\u7B80\u77ED\u8BF4\u660E\u7ED3\u679C\uFF0C\u5E76\u7ED9 2-4 \u4E2A\u53EF\u7EE7\u7EED\u8C03\u6574\u7684\u65B9\u5411\uFF08\u98CE\u683C\u3001\u6BD4\u4F8B\u3001\u6784\u56FE\u3001\u7EC6\u8282\u7B49\uFF09\u3002"
10540
+ ].join("\n"),
10541
+ tools: [],
10542
+ tags: ["image", "google", "gemini", "nano-banana", "fast", "generate"]
10543
+ });
10544
+ var PUBLIC_AGENT_DEFS = [
10545
+ GPT_6_LUNA_DEF,
10546
+ DEEPSEEK_V4_FLASH_DEF,
10547
+ DEEPSEEK_V4_PRO_DEF,
10548
+ GLM_5_3_DEF,
10549
+ GLM_5_3_FLASH_DEF,
10550
+ CLAUDE_FABLE_5_1_DEF,
10551
+ CLAUDE_OPUS_5_5_DEF,
10552
+ GROK_4_6_DEF,
10553
+ GEMINI_3_8_FLASH_DEF,
10554
+ GPT_IMAGE_2_GENERATOR_DEF,
10555
+ GPT_IMAGE_2_EDITOR_DEF,
10556
+ GPT_IMAGE_2_CONTINUOUS_DEF,
10557
+ NANO_BANANA_2_LITE_GENERATOR_DEF
10558
+ ];
10559
+ var PLATFORM_AUDITED_AGENT_SPECS = PUBLIC_AGENT_DEFS.filter((def) => def.platformAudit).map((def) => ({
10560
+ name: def.name,
10561
+ key: publicAgentKey(def.id)
10562
+ }));
10563
+
10564
+ // packages/agent-runtime/publicAgentCatalogOverride.ts
10565
+ var SEED_BY_ID = new Map(
10566
+ PUBLIC_AGENT_DEFS.map((seed) => [seed.id, seed])
10567
+ );
10568
+ function toPlatformOwnedCatalogId(value) {
10569
+ if (typeof value !== "string") return null;
10570
+ const trimmed = value.trim();
10571
+ if (!trimmed) return null;
10572
+ const parsed = parsePublicAgentId(trimmed);
10573
+ if (parsed) return parsed;
10574
+ const systemId = parseSystemAgentId(trimmed);
10575
+ if (systemId) return systemId;
10576
+ return null;
10577
+ }
10578
+ function readPlatformOwnedKey(record) {
10579
+ const fields = record;
10580
+ for (const value of [fields.dbKey, fields.id]) {
10581
+ if (typeof value !== "string") continue;
10582
+ if (toPlatformOwnedCatalogId(value) === null) continue;
10583
+ return value;
10584
+ }
10585
+ return null;
10586
+ }
10587
+ function resolvePublicAgentCatalogOverride(agentKey) {
10588
+ const id = toPlatformOwnedCatalogId(agentKey);
10589
+ if (!id) return null;
10590
+ const entry = builtinAgentCatalogEntryById(id);
10591
+ if (!entry) return null;
10592
+ if (entry.group !== "public" || isRetiredCatalogEntry(entry)) return null;
10593
+ const seed = SEED_BY_ID.get(entry.id);
10594
+ if (!seed) return null;
10595
+ return {
10596
+ name: entry.name,
10597
+ provider: entry.provider,
10598
+ model: entry.model,
10599
+ introduction: seed.introduction,
10600
+ greeting: seed.greeting,
10601
+ prompt: seed.prompt,
10602
+ tools: [...seed.tools],
10603
+ tags: [...seed.tags]
10604
+ };
10605
+ }
10606
+ function overlayGreeting(recordGreeting, seedGreeting) {
10607
+ const seedText = typeof seedGreeting === "string" ? seedGreeting : isRecord(seedGreeting) ? seedGreeting.text : void 0;
10608
+ if (typeof seedText !== "string" || !seedText) return recordGreeting;
10609
+ if (isRecord(recordGreeting)) {
10610
+ return { ...recordGreeting, text: seedText };
10611
+ }
10612
+ if (recordGreeting === void 0 || recordGreeting === null) {
10613
+ return seedGreeting;
10614
+ }
10615
+ if (typeof recordGreeting === "string") {
10616
+ return seedText;
10617
+ }
10618
+ return recordGreeting;
10619
+ }
10620
+ function applyPublicAgentCatalogOverride(record, agentKey) {
10621
+ const override = resolvePublicAgentCatalogOverride(agentKey) ?? resolvePublicAgentCatalogOverride(readPlatformOwnedKey(record));
10622
+ if (!override) return record;
10623
+ const current = record;
10624
+ const greeting = overlayGreeting(current.greeting, override.greeting);
10625
+ return {
10626
+ ...record,
10627
+ name: override.name,
10628
+ provider: override.provider,
10629
+ model: override.model,
10630
+ introduction: override.introduction,
10631
+ prompt: override.prompt,
10632
+ tools: [...override.tools],
10633
+ tags: [...override.tags],
10634
+ ...greeting !== void 0 ? { greeting } : {}
10635
+ };
10636
+ }
10637
+
10094
10638
  // packages/cli/client/cliLocalAgentRecordReader.ts
10095
10639
  function resolveBuiltinLocalCliAgentConfig(agentRef, userId) {
10096
10640
  const normalized = agentRef.trim();
@@ -10123,7 +10667,10 @@ async function readAgentFromStore(args) {
10123
10667
  if (!record || typeof record !== "object") continue;
10124
10668
  return applyBuiltinAgentRuntimeOverride(
10125
10669
  args.agentRef,
10126
- resolveAgentRuntimeConfigFromRecord(key, record)
10670
+ resolveAgentRuntimeConfigFromRecord(
10671
+ key,
10672
+ applyPublicAgentCatalogOverride(record)
10673
+ )
10127
10674
  );
10128
10675
  }
10129
10676
  return resolveBuiltinPlatformAgentConfig(args.agentRef);
@@ -10492,6 +11039,9 @@ function waitForRunTerminal(args) {
10492
11039
  };
10493
11040
  const loop = Effect_exports.gen(function* () {
10494
11041
  token = args.claim?.acquire() ?? null;
11042
+ const deadline = Date.now() + args.timeoutMs;
11043
+ const maxIterations = Math.ceil(args.timeoutMs / Math.max(1, args.pollIntervalMs)) + 1;
11044
+ let iterations = 0;
10495
11045
  while (true) {
10496
11046
  const state = yield* readEffect(args.read);
10497
11047
  lastState = state;
@@ -10502,6 +11052,10 @@ function waitForRunTerminal(args) {
10502
11052
  }
10503
11053
  return { kind: "terminal", state };
10504
11054
  }
11055
+ iterations += 1;
11056
+ if (Date.now() >= deadline || iterations >= maxIterations) {
11057
+ return { kind: "timeout", waitedMs: args.timeoutMs, lastState };
11058
+ }
10505
11059
  const slept = yield* sleep(args.pollIntervalMs);
10506
11060
  if (slept === "aborted") return { kind: "aborted" };
10507
11061
  }
@@ -10926,6 +11480,12 @@ function buildRunStatusPayload(reconciled, deps, opts = {}) {
10926
11480
  endedAt: reconciled.endedAt ?? null,
10927
11481
  exitCode: reconciled.exitCode ?? null,
10928
11482
  ...reconciled.failureReason ? { failureReason: reconciled.failureReason } : {},
11483
+ // 结构化失败分类 + 可重试性:编排者据此决策,不再肉读 logTail。
11484
+ ...reconciled.failureClass ? { failureClass: reconciled.failureClass } : {},
11485
+ ...typeof reconciled.retryable === "boolean" ? { retryable: reconciled.retryable } : {},
11486
+ // 日志落盘路径始终暴露:stalled/failed 且 dialogId 缺失(如 ephemeral)
11487
+ // 时 logTail 只能靠它读,不能只留在进程内存。
11488
+ ...reconciled.logPath ? { logPath: reconciled.logPath } : {},
10929
11489
  ...typeof reconciled.toolCallCount === "number" ? { toolCallCount: reconciled.toolCallCount } : {},
10930
11490
  ...reconciled.lastAssistantText ? { lastAssistantText: reconciled.lastAssistantText } : {},
10931
11491
  // Non-ephemeral runs expose dialogId so the caller can read the
@@ -10960,6 +11520,39 @@ function buildRunStatusPayload(reconciled, deps, opts = {}) {
10960
11520
  }
10961
11521
  };
10962
11522
  }
11523
+ async function assertCredentialFanoutAllowed(deps, args) {
11524
+ let candidateGroup;
11525
+ if (deps.resolveAgentCredentialGroup) {
11526
+ try {
11527
+ candidateGroup = await deps.resolveAgentCredentialGroup(args.agentKey);
11528
+ } catch {
11529
+ candidateGroup = void 0;
11530
+ }
11531
+ }
11532
+ if (!candidateGroup && typeof args.credentialGroup === "string" && args.credentialGroup.trim()) {
11533
+ candidateGroup = args.credentialGroup.trim();
11534
+ }
11535
+ const { batchId, parentDialogId } = args;
11536
+ if (!batchId && !parentDialogId) return candidateGroup;
11537
+ const active = queryRunRecords({ limit: 500 }, deps).runs.filter((record) => {
11538
+ if (isRunTerminalStatus(record.status)) return false;
11539
+ if (batchId && record.batchId === batchId) return true;
11540
+ if (parentDialogId && record.parentDialogId === parentDialogId) return true;
11541
+ return false;
11542
+ }).map((record) => ({
11543
+ runId: record.runId,
11544
+ agentKey: record.agentKey,
11545
+ credentialGroup: record.credentialGroup
11546
+ }));
11547
+ if (active.length === 0) return candidateGroup;
11548
+ const verdict = checkCredentialFanout({
11549
+ active,
11550
+ candidate: { agentKey: args.agentKey, credentialGroup: candidateGroup },
11551
+ allowUnknownCredential: args.allowUnknownCredential === true
11552
+ });
11553
+ if (!verdict.allowed) throw new Error(verdict.message);
11554
+ return candidateGroup;
11555
+ }
10963
11556
  function createCliStartAgentRunExecutor(deps = {}) {
10964
11557
  return async (call) => {
10965
11558
  const args = parseCallArgs(call);
@@ -10982,6 +11575,14 @@ function createCliStartAgentRunExecutor(deps = {}) {
10982
11575
  ];
10983
11576
  const agentName = typeof args.agentName === "string" && args.agentName.trim() ? args.agentName.trim() : typeof args.name === "string" && args.name.trim() ? args.name.trim() : void 0;
10984
11577
  const batchId = typeof args.batchId === "string" && args.batchId.trim() ? args.batchId.trim() : void 0;
11578
+ const parentDialogId = typeof args.parentDialogId === "string" && args.parentDialogId.trim() ? args.parentDialogId.trim() : void 0;
11579
+ const credentialGroup = await assertCredentialFanoutAllowed(deps, {
11580
+ agentKey,
11581
+ ...batchId ? { batchId } : {},
11582
+ ...parentDialogId ? { parentDialogId } : {},
11583
+ ...typeof args.credentialGroup === "string" && args.credentialGroup.trim() ? { credentialGroup: args.credentialGroup.trim() } : {},
11584
+ allowUnknownCredential: args.allowUnknownCredential === true
11585
+ });
10985
11586
  const dodCommands = Array.isArray(args.dodCommands) ? args.dodCommands.filter((c) => typeof c === "string" && c.trim().length > 0).map((c) => c.trim()) : typeof args.dod === "string" && args.dod.trim().length > 0 ? [args.dod.trim()] : Array.isArray(args.dod) ? args.dod.filter((c) => typeof c === "string" && c.trim().length > 0).map((c) => c.trim()) : void 0;
10986
11587
  const { runId, batchId: resolvedBatchId } = await spawnLocalBackgroundRun(
10987
11588
  {
@@ -10991,7 +11592,8 @@ function createCliStartAgentRunExecutor(deps = {}) {
10991
11592
  agentKey,
10992
11593
  ...agentName ? { agentName } : {},
10993
11594
  ...batchId ? { batchId } : {},
10994
- ...typeof args.parentDialogId === "string" && args.parentDialogId.trim() ? { parentDialogId: args.parentDialogId.trim() } : {},
11595
+ ...credentialGroup ? { credentialGroup } : {},
11596
+ ...parentDialogId ? { parentDialogId } : {},
10995
11597
  ...dodCommands && dodCommands.length > 0 ? { dodCommands } : {},
10996
11598
  cwd: deps.cwd ?? process.cwd(),
10997
11599
  message,
@@ -11077,6 +11679,8 @@ async function spawnContinuationRun(reconciled, userInput, deps) {
11077
11679
  ...agentName ? { agentName } : {},
11078
11680
  ...reconciled.batchId ? { batchId: reconciled.batchId } : {},
11079
11681
  ...reconciled.parentDialogId ? { parentDialogId: reconciled.parentDialogId } : {},
11682
+ // 续跑继承原 run 的凭证组(同一 agent),供并发扇出守卫判定。
11683
+ ...reconciled.credentialGroup ? { credentialGroup: reconciled.credentialGroup } : {},
11080
11684
  cwd: reconciled.cwd ?? deps.cwd ?? process.cwd(),
11081
11685
  message: userInput,
11082
11686
  ...reconciled.ephemeral ? { ephemeral: true } : {},
@@ -11675,7 +12279,8 @@ function buildLocalToolExecutors(args) {
11675
12279
  startAgentRun: createCliStartAgentRunExecutor({
11676
12280
  env: args.env,
11677
12281
  cliEntrypoint: args.cliEntrypoint,
11678
- cwd: args.workspaceRoot
12282
+ cwd: args.workspaceRoot,
12283
+ ...args.resolveAgentCredentialGroup ? { resolveAgentCredentialGroup: args.resolveAgentCredentialGroup } : {}
11679
12284
  }),
11680
12285
  controlAgentRun: createCliControlAgentRunExecutor({
11681
12286
  env: args.env
@@ -11809,13 +12414,18 @@ async function generateLocalDialogTitle(input) {
11809
12414
  return { title: fallbackTitle, source: "fallback" };
11810
12415
  }
11811
12416
  if (input.resolveProviderConfig && input.buildRequest && input.parseResponse) {
11812
- try {
11813
- const providerConfig = await input.resolveProviderConfig({
11814
- agentConfig: { ...BUILTIN_TITLE_LLM_CONFIG, key: BUILTIN_TITLE_LLM_CONFIG.id },
11815
- env
11816
- });
11817
- if (providerConfig?.authToken) {
11818
- const request = input.buildRequest({
12417
+ const resolveProviderConfig = input.resolveProviderConfig;
12418
+ const buildRequest = input.buildRequest;
12419
+ const parseResponse = input.parseResponse;
12420
+ const attemptPlatformTitle = async (model) => {
12421
+ try {
12422
+ const agentConfig = model ? { ...BUILTIN_TITLE_LLM_CONFIG, model } : BUILTIN_TITLE_LLM_CONFIG;
12423
+ const providerConfig = await resolveProviderConfig({
12424
+ agentConfig: { ...agentConfig, key: agentConfig.id },
12425
+ env
12426
+ });
12427
+ if (!providerConfig?.authToken) return null;
12428
+ const request = buildRequest({
11819
12429
  providerConfig,
11820
12430
  messages: [
11821
12431
  {
@@ -11847,21 +12457,26 @@ async function generateLocalDialogTitle(input) {
11847
12457
  body: JSON.stringify(patchedBody),
11848
12458
  signal: AbortSignal.timeout(timeoutMs)
11849
12459
  });
11850
- if (res.ok) {
11851
- const raw = await res.text().catch(() => "");
11852
- const data = safeParseJson(raw);
11853
- if (data) {
11854
- const parsed = input.parseResponse({ providerConfig, data });
11855
- const generated = normalizeDialogTitle(
11856
- extractTitleFromLlmContent(parsed.content)
11857
- );
11858
- if (generated) {
11859
- return { title: generated, source: "llm" };
11860
- }
11861
- }
11862
- }
12460
+ if (!res.ok) return null;
12461
+ const raw = await res.text().catch(() => "");
12462
+ const data = safeParseJson(raw);
12463
+ if (!data) return null;
12464
+ const parsed = parseResponse({ providerConfig, data });
12465
+ const generated = normalizeDialogTitle(
12466
+ extractTitleFromLlmContent(parsed.content)
12467
+ );
12468
+ return generated || null;
12469
+ } catch {
12470
+ return null;
11863
12471
  }
11864
- } catch {
12472
+ };
12473
+ const primaryTitle = await attemptPlatformTitle();
12474
+ if (primaryTitle) return { title: primaryTitle, source: "llm" };
12475
+ const fallbackModelTitle = await attemptPlatformTitle(
12476
+ BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL
12477
+ );
12478
+ if (fallbackModelTitle) {
12479
+ return { title: fallbackModelTitle, source: "llm" };
11865
12480
  }
11866
12481
  }
11867
12482
  if (input.resolveDirectProviderConfig) {
@@ -12526,6 +13141,23 @@ function createCliLocalRuntimeAdapter(deps) {
12526
13141
  const localToolUsage = /* @__PURE__ */ new Map();
12527
13142
  const buildProviderOpenAiTools = deps.buildProviderOpenAiTools ?? buildOpenAiTools;
12528
13143
  const additionalToolNames = deps.pastedTextStore ? ["readPastedText"] : [];
13144
+ const resolveAgentCredentialGroup = async (agentRef) => {
13145
+ try {
13146
+ const record = await readAgentFromStore({
13147
+ agentRef,
13148
+ store: await getOrCreateSharedStore(deps),
13149
+ userId
13150
+ });
13151
+ if (!record || typeof record !== "object") return void 0;
13152
+ const rec = record;
13153
+ const existing = typeof rec.credentialGroup === "string" && rec.credentialGroup.trim() ? rec.credentialGroup.trim() : void 0;
13154
+ if (existing) return existing;
13155
+ const ref = typeof rec.apiKeyRef === "string" && rec.apiKeyRef.trim() ? rec.apiKeyRef : typeof rec.credentialRef === "string" && rec.credentialRef.trim() ? rec.credentialRef : void 0;
13156
+ return deriveCredentialGroup(ref)?.credentialGroup;
13157
+ } catch {
13158
+ return void 0;
13159
+ }
13160
+ };
12529
13161
  let activeAgentToolNames = [];
12530
13162
  const workspaceRoot = deps.cwd ?? process.cwd();
12531
13163
  let runtimeToolExecutionLimits = {};
@@ -12538,6 +13170,7 @@ function createCliLocalRuntimeAdapter(deps) {
12538
13170
  readXPost: deps.readXPost,
12539
13171
  readXhsProfile: deps.readXhsProfile,
12540
13172
  cliEntrypoint: CLI_ENTRYPOINT,
13173
+ resolveAgentCredentialGroup,
12541
13174
  ...deps.confirmDestructiveAction ? { confirmDestructiveAction: deps.confirmDestructiveAction } : {},
12542
13175
  ...deps.requestUserChoice ? { requestUserChoice: deps.requestUserChoice } : {},
12543
13176
  ...deps.pastedTextStore ? { pastedTextStore: deps.pastedTextStore } : {},
@@ -12615,13 +13248,21 @@ function createCliLocalRuntimeAdapter(deps) {
12615
13248
  readXPost: deps.readXPost,
12616
13249
  readXhsProfile: deps.readXhsProfile,
12617
13250
  cliEntrypoint: CLI_ENTRYPOINT,
13251
+ resolveAgentCredentialGroup,
12618
13252
  ...deps.confirmDestructiveAction ? { confirmDestructiveAction: deps.confirmDestructiveAction } : {},
12619
13253
  ...deps.requestUserChoice ? { requestUserChoice: deps.requestUserChoice } : {},
12620
13254
  ...deps.pastedTextStore ? { pastedTextStore: deps.pastedTextStore } : {},
12621
13255
  agentKey: agentConfig?.key,
12622
13256
  ...runtimeToolExecutionLimits
12623
13257
  });
12624
- const exposedAgentConfig = agentConfig ? { ...agentConfig, exposedToolNames: activeAgentToolNames } : agentConfig;
13258
+ const exposedAgentConfig = agentConfig ? {
13259
+ ...agentConfig,
13260
+ exposedToolNames: activeAgentToolNames,
13261
+ toolSurface: {
13262
+ ...agentConfig.toolSurface ?? {},
13263
+ finalToolNames: activeAgentToolNames
13264
+ }
13265
+ } : agentConfig;
12625
13266
  if (exposedAgentConfig && !deps.pastedTextStore) {
12626
13267
  preparedAgentRuntimeCache.set(cacheKey, {
12627
13268
  agentConfig: exposedAgentConfig,