nolo-cli 0.82.0-alpha.6 → 0.82.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/{_executeModel-225YRU52.js → _executeModel-MA3D2J4W.js} +48 -48
- package/{action-D22U6CTH.js → action-YVYQEAAV.js} +11 -11
- package/{addContentAction-XAPUTGL4.js → addContentAction-O7R66HEX.js} +9 -9
- package/{addDialogAgentAction-M7VLLBZM.js → addDialogAgentAction-74OA7KYP.js} +8 -8
- package/{agentDeleteCommand-ZJNQGVR2.js → agentDeleteCommand-FHUJH5X4.js} +31 -29
- package/{agentEmailCommands-VLVWFWX2.js → agentEmailCommands-KNYBWNMA.js} +67 -63
- package/{agentGrantCommands-R3VQEZJR.js → agentGrantCommands-M3XFO6EN.js} +2 -2
- package/{agentListCommands-GHQGLAUU.js → agentListCommands-GATRXEMT.js} +40 -32
- package/{agentMachineCommands-QDXYENZJ.js → agentMachineCommands-N62I3D5Q.js} +31 -29
- package/{agentProviderCommands-65ZC2WB4.js → agentProviderCommands-GNPTL5XR.js} +87 -0
- package/{agentPullCommand-N7L2CT7L.js → agentPullCommand-O5MPVJ5E.js} +3 -3
- package/agentRecordCommands-GOC5K27T.js +128 -0
- package/{agentRunCommand-YSCD65HH.js → agentRunCommand-JP2U3MQF.js} +65 -61
- package/{agentRunControl-T44MESII.js → agentRunControl-AVJR4JW4.js} +2 -2
- package/{agentRuntimeLocal-ZOHB7OOO.js → agentRuntimeLocal-VXZSDIGT.js} +27 -25
- package/{agentSlice-O2SBU5TK.js → agentSlice-65ETD734.js} +10 -10
- package/{appDeleteCommands-PRT6K5N2.js → appDeleteCommands-PDZ7HQYH.js} +31 -29
- package/{appDeployCommands-63ZONFAN.js → appDeployCommands-KLLW32YA.js} +31 -29
- package/{appDeployStatusCommands-AFAYCVR3.js → appDeployStatusCommands-IPNJ445T.js} +31 -29
- package/{appGetCommands-TNZDZE36.js → appGetCommands-QA57XGXS.js} +31 -29
- package/{appListCommands-IA4SPG2X.js → appListCommands-YBTAUFZS.js} +31 -29
- package/{authCommand-EVGFLAHO.js → authCommand-F4EFRRX6.js} +164 -24
- package/{authCommands-ILTBI6JV.js → authCommands-RGOGCPP6.js} +4 -5
- package/builtinSkillRegistry-FUAVTRVZ.js +33 -0
- package/{chatQueueReduxAdapter-4SM3DAWX.js → chatQueueReduxAdapter-5QOW43T4.js} +24 -24
- package/{chromeCommands-VOIRNJBL.js → chromeCommands-FZYAU75D.js} +1 -1
- package/{chromeOpsCommands-M7DPCX2T.js → chromeOpsCommands-62P2Q2YB.js} +31 -1
- package/{chunk-C3FZR5EC.js → chunk-2F7RJC6L.js} +1 -1
- package/{chunk-A3NNC2LA.js → chunk-2FA3ITSX.js} +1235 -59
- package/{chunk-HQUORJTM.js → chunk-3BMYXEUW.js} +1 -1
- package/{chunk-3QPYFHAH.js → chunk-3DII57IT.js} +1 -1
- package/{chunk-NTW5GWDM.js → chunk-3VNWWVKB.js} +2 -0
- package/{chunk-DWUCB2A3.js → chunk-42V6BK2E.js} +1 -1
- package/{chunk-DSRXPQWA.js → chunk-4OEFYTWL.js} +43 -43
- package/{chunk-GBPZKFYK.js → chunk-53HEEOTT.js} +4 -4
- package/{chunk-KIS76A2P.js → chunk-5H7KJX7J.js} +38 -4
- package/{chunk-5XTOKQLW.js → chunk-5UTFL4QJ.js} +6 -2
- package/chunk-5ZUL4CUO.js +10 -0
- package/{chunk-E6RGHPDR.js → chunk-6D6VBVEW.js} +4 -6
- package/{chunk-CMH2SYHX.js → chunk-6OZ36FXI.js} +2 -2
- package/{chunk-HHLTFENG.js → chunk-6VFARHZW.js} +907 -317
- package/{chunk-NRALD3CC.js → chunk-76WEAXJB.js} +49 -10
- package/{chunk-BYEJ7K2Z.js → chunk-7S4YWN7P.js} +1 -1
- package/{chunk-SREASRV5.js → chunk-ABQYVJBJ.js} +1 -1
- package/chunk-ACTMNVHM.js +93 -0
- package/{chunk-3W2JJOH3.js → chunk-AD2L6YCC.js} +3 -3
- package/{chunk-XWNRAIUL.js → chunk-AFUORTY4.js} +6 -16
- package/{chunk-WL2RKIBF.js → chunk-BLJWCTRL.js} +1 -1
- package/chunk-BNGW5ASC.js +344 -0
- package/{chunk-SZLVDREM.js → chunk-BP4XNZRM.js} +3 -3
- package/{chunk-2KDR4CWE.js → chunk-BYMV6QZG.js} +24 -1
- package/{chunk-5LSS6MFZ.js → chunk-D2QT5FW4.js} +13 -15
- package/{chunk-MYU3MJCF.js → chunk-DHDMC6FO.js} +175 -7
- package/{chunk-SO7B7NW3.js → chunk-DHDVZFNC.js} +413 -62
- package/{chunk-E36HZARC.js → chunk-DNCEALKX.js} +93 -17
- package/{chunk-EXMHJN7C.js → chunk-EYAQT56M.js} +4 -3
- package/{chunk-CJCJF5XB.js → chunk-FDTR4QJ6.js} +4 -2
- package/{chunk-YSKEOTPH.js → chunk-FSX24MR3.js} +155 -795
- package/{chunk-NJ6WLAPS.js → chunk-FUUHG5LT.js} +1 -1
- package/{chunk-EM6MPSEI.js → chunk-GABFWSOQ.js} +52 -30
- package/{chunk-PYXL2CJL.js → chunk-GPCZ7UXG.js} +1 -1
- package/{chunk-K7AG465Q.js → chunk-GQBOR3G6.js} +4 -2
- package/{chunk-FP27MNSX.js → chunk-GZBATRJA.js} +3 -3
- package/{chunk-YFADVSZE.js → chunk-H62HCIUP.js} +6 -6
- package/{chunk-PZM3EENV.js → chunk-HJUYAD4A.js} +1 -1
- package/{chunk-3JQ2NRYU.js → chunk-HVURBGF3.js} +4 -4
- package/{chunk-HH65VA5U.js → chunk-I3TQJXQ7.js} +109 -6
- package/{chunk-ZVN6I33J.js → chunk-IIVGDG4I.js} +6 -5
- package/{chunk-UDQWGU7F.js → chunk-J4MOO56S.js} +1 -1
- package/{chunk-KC5FAHVS.js → chunk-JEDZAO7L.js} +1 -1
- package/{chunk-6XIE5ZGI.js → chunk-JPGCXHNM.js} +1 -1
- package/chunk-JRQFUXY7.js +1625 -0
- package/chunk-KQ4ONNQD.js +677 -0
- package/{chunk-CPSZJBLK.js → chunk-L5UXH3B2.js} +105 -26
- package/{chunk-RXX4GDIH.js → chunk-LS2ZANRJ.js} +1 -1
- package/{chunk-BJIRLHJR.js → chunk-M2EJHDJP.js} +4 -0
- package/{chunk-EVBFYPDC.js → chunk-MC4XLIJ7.js} +6 -2
- package/{chunk-6SD5OPQ4.js → chunk-N2WELJE7.js} +11 -173
- package/{chunk-UJ63UXGE.js → chunk-OIVSQH2O.js} +1006 -801
- package/{chunk-4UW2LDVA.js → chunk-PELKTR62.js} +15 -15
- package/{chunk-AETZ7AD6.js → chunk-Q554LLSI.js} +1 -1
- package/chunk-Q5FJJ6XI.js +103 -0
- package/{chunk-AJHEFRGJ.js → chunk-Q67DOFOO.js} +214 -5
- package/{chunk-UZ6XXCVR.js → chunk-QDSINZM3.js} +15 -2
- package/{chunk-D6XYLSOS.js → chunk-QIAVMDHY.js} +1 -1
- package/{chunk-YWG6EMH3.js → chunk-RG6JBBX5.js} +10 -6
- package/{chunk-QCZX4FTW.js → chunk-SH43IESU.js} +173 -15
- package/{chunk-FNGAF7C4.js → chunk-SNPMM7H3.js} +137 -12
- package/{chunk-SPAQ4PVV.js → chunk-SV5IJK6K.js} +1 -1
- package/{chunk-KVDUCO4Q.js → chunk-TDRTS7QW.js} +16 -12
- package/{chunk-BJCWNHVU.js → chunk-TOP2VXOR.js} +2 -2
- package/{chunk-Q46HQOW3.js → chunk-TVYSVSA2.js} +7 -7
- package/{chunk-4EJ5QYB5.js → chunk-UKZDAFYT.js} +1 -1
- package/{chunk-YXLXHIT2.js → chunk-UY2NBS4V.js} +6 -6
- package/{chunk-PGSKWZCB.js → chunk-UZGQNTVW.js} +1 -1
- package/{chunk-73IOJLK2.js → chunk-V4I3A7DR.js} +10 -10
- package/{chunk-ZZCJUXUI.js → chunk-V4MJDUSR.js} +2 -2
- package/{chunk-JYYZCK2Z.js → chunk-V7E4PXQD.js} +1 -1
- package/{chunk-OZX2IPKM.js → chunk-VLTIYV3X.js} +1 -1
- package/{chunk-NHRQCXIQ.js → chunk-VMFTFOWF.js} +13 -3
- package/{chunk-5J7W2VWW.js → chunk-WV42OMV7.js} +6 -265
- package/{chunk-DUJWWUGV.js → chunk-YQTQQX2H.js} +1 -1
- package/{chunk-BOYUESO7.js → chunk-Z77CRGTW.js} +1 -1
- package/{chunk-QC5LGHYP.js → chunk-ZCYXJSTU.js} +10 -5
- package/{chunk-LSZXYE64.js → chunk-ZMD2CQFC.js} +759 -80
- package/{contentThunks-ENAVF2YU.js → contentThunks-Y6FA2TCW.js} +25 -25
- package/{cooldownCommands-BSCH2W7P.js → cooldownCommands-REAWYVTY.js} +2 -2
- package/{createAgentAutomationAction-CH6BYC7K.js → createAgentAutomationAction-JXAFQO5V.js} +25 -25
- package/{createDialogAction-23UDOXSO.js → createDialogAction-O2QABXZF.js} +28 -28
- package/{createPageAction-J6AEMLHK.js → createPageAction-GUQDPKO5.js} +26 -26
- package/{dbSlice-GKGGFNOB.js → dbSlice-XVWBAGYN.js} +8 -8
- package/{deleteFile-LWSR674W.js → deleteFile-YG6QMJLU.js} +3 -3
- package/{dialogCommands-BJJGCCQR.js → dialogCommands-JJDASFIL.js} +35 -31
- package/{dialogSlice-F7RD6PUY.js → dialogSlice-J2YJNE6E.js} +24 -24
- package/{docCreateCommands-53GB2FU3.js → docCreateCommands-OB3X3EQM.js} +32 -30
- package/{docDeleteCommands-TAW5JEBU.js → docDeleteCommands-WMHRGF22.js} +33 -31
- package/{docReadCommands-F5N7N5E3.js → docReadCommands-NWGGLIAZ.js} +32 -30
- package/{docStore-WX4YBGXC.js → docStore-6KKYKAGQ.js} +9 -9
- package/{docUpdateCommands-YQ7TRT35.js → docUpdateCommands-3DDSOLPS.js} +32 -30
- package/{fetchMessages-DRABNDPZ.js → fetchMessages-EIU7UFFK.js} +3 -4
- package/{getPricing-HRMSOF3E.js → getPricing-LUSEABA6.js} +4 -4
- package/{handleSendMessageAction-CW4LULIR.js → handleSendMessageAction-A4XLEEPU.js} +24 -24
- package/index.js +102 -85
- package/{localDialogRead-PUQKFI73.js → localDialogRead-BTFJ4V2I.js} +2 -2
- package/{localRuntimeDb-P37ZTX55.js → localRuntimeDb-SYQGUF4U.js} +1 -1
- package/{machineCommands-FIYWY5EU.js → machineCommands-Y64KAIRW.js} +64 -60
- package/{machineWsRunDispatch-KQ4OFFNR.js → machineWsRunDispatch-M366L2LJ.js} +62 -58
- package/{memberThunks-KATHH3F4.js → memberThunks-QGFLFVCI.js} +9 -9
- package/{models-GS72DVJS.js → models-T3SG6MJ5.js} +2 -2
- package/{offlineMarxistsAgentCommand-GEH6SNNA.js → offlineMarxistsAgentCommand-HGXZV4XJ.js} +1 -1
- package/package.json +1 -1
- package/providerPresetApply-FG6NZ57W.js +214 -0
- package/providerRegistry-757OWH3O.js +31 -0
- package/{read-LC6HVYBN.js → read-COE3ZYR6.js} +5 -4
- package/{readDocTool-N3ERJHHF.js → readDocTool-5USN4A6V.js} +1 -1
- package/{readlineWorkspace-QYI6BRNA.js → readlineWorkspace-45XNHFXU.js} +144 -108
- package/{removeDialogAgentAction-F5GPTALR.js → removeDialogAgentAction-IX3MN2ZO.js} +11 -11
- package/{runAgentClientLoop-GZ5VUGAW.js → runAgentClientLoop-ADZRHNG6.js} +47 -47
- package/{runtimeDoctorCommands-CROTMULY.js → runtimeDoctorCommands-X6WDBEQX.js} +2 -2
- package/{setDialogExtraReferencesAction-AY4ZCF3A.js → setDialogExtraReferencesAction-X4HCPNZL.js} +9 -9
- package/{setPrimaryDialogAgentAction-HPMG7V3R.js → setPrimaryDialogAgentAction-4GMIQLOD.js} +11 -11
- package/{settingSlice-OEJA4NQO.js → settingSlice-ZQZVUPKK.js} +10 -10
- package/{spaceCommands-IYMIXCMC.js → spaceCommands-E7MQ4VU2.js} +30 -28
- package/{streamAgentChatTurn-EAXIUJTK.js → streamAgentChatTurn-TUP7YO3H.js} +59 -58
- package/{switchDialogAgentAction-HMDZTZ4I.js → switchDialogAgentAction-N52LRPA3.js} +8 -8
- package/{tableCommands-SUNTHAYX.js → tableCommands-O6NWHFKV.js} +1 -1
- package/{toolApiClient-VGYUB4P5.js → toolApiClient-QVJ6HDNN.js} +2 -2
- package/{tools-QWQOW6J4.js → tools-2VDNDFET.js} +43 -43
- package/tuiSummaryLlmCaller-WFRWERGK.js +127 -0
- package/{updateCommands-Y363MC3L.js → updateCommands-2M74UL7P.js} +2 -2
- package/{updateDialogTitleAction-2HCE2M7S.js → updateDialogTitleAction-KSWXWWFT.js} +45 -28
- package/agentRecordCommands-AQFYM5HS.js +0 -124
- package/chunk-3IT2PFHL.js +0 -611
- package/chunk-I42VC5KR.js +0 -15
- package/chunk-NG4UT4K4.js +0 -79
- package/codingSkills-E6KSDNSJ.js +0 -48
- package/tuiSummaryLlmCaller-3Z24VUWM.js +0 -116
- package/{chunk-3RAG2NAD.js → chunk-UKWGR5SS.js} +3 -3
- package/{db-VQSAOWAO.js → db-WK5MDZVN.js} +1 -1
- 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-
|
|
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-
|
|
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-
|
|
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-
|
|
41
|
+
} from "./chunk-42V6BK2E.js";
|
|
41
42
|
import {
|
|
42
43
|
buildLocalAgentLookupKeys
|
|
43
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
64
|
+
} from "./chunk-AD2L6YCC.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-
|
|
83
|
+
} from "./chunk-FSX24MR3.js";
|
|
82
84
|
import {
|
|
83
85
|
fetchWithTransientRetry,
|
|
84
86
|
isTransientFetchError
|
|
85
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
112
|
+
} from "./chunk-DHDVZFNC.js";
|
|
105
113
|
import {
|
|
114
|
+
BUILTIN_DIALOG_LLM_CHAT_FALLBACK_MODEL,
|
|
106
115
|
BUILTIN_TITLE_LLM_CONFIG
|
|
107
|
-
} from "./chunk-
|
|
116
|
+
} from "./chunk-MC4XLIJ7.js";
|
|
108
117
|
import {
|
|
109
118
|
fetchServerSyncedCredential
|
|
110
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-TVYSVSA2.js";
|
|
111
120
|
import {
|
|
112
121
|
require_date_fns
|
|
113
122
|
} from "./chunk-M76ECQRD.js";
|
|
114
123
|
import {
|
|
115
124
|
getDefaultCliLocalRuntimeDb
|
|
116
|
-
} from "./chunk-
|
|
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-
|
|
135
|
+
} from "./chunk-DHDMC6FO.js";
|
|
127
136
|
import {
|
|
128
137
|
DEFAULT_HYBRID_READ_TIMEOUT_MS,
|
|
129
138
|
Duration_exports,
|
|
@@ -139,6 +148,7 @@ import {
|
|
|
139
148
|
buildLocalWorkspaceToolset,
|
|
140
149
|
buildNoloWorkspaceCliToolExecutors,
|
|
141
150
|
codexStreamFailureStatus,
|
|
151
|
+
createDevinProvider,
|
|
142
152
|
createHybridRecordStore,
|
|
143
153
|
createLocalWorkspaceToolExecutors,
|
|
144
154
|
evaluateFileWritePolicy,
|
|
@@ -155,11 +165,12 @@ import {
|
|
|
155
165
|
parseSseDataLineObject,
|
|
156
166
|
parseSyncServersEnv,
|
|
157
167
|
parseUpstreamErrorBody,
|
|
168
|
+
readDevinUpstreamFailure,
|
|
158
169
|
resolveAntigravityFinishReason,
|
|
159
170
|
resolveOpenAiCompatibleProviderConfig,
|
|
160
171
|
shouldUseGeminiNativeToolRoute,
|
|
161
172
|
summarizeToolArguments
|
|
162
|
-
} from "./chunk-
|
|
173
|
+
} from "./chunk-6VFARHZW.js";
|
|
163
174
|
import {
|
|
164
175
|
PlatformStreamInterruptedError,
|
|
165
176
|
buildPlatformChatCompletionRequest,
|
|
@@ -171,11 +182,14 @@ import {
|
|
|
171
182
|
readSseDataValues,
|
|
172
183
|
resolvePlatformChatProviderConfig,
|
|
173
184
|
shouldUsePlatformChatProvider
|
|
174
|
-
} from "./chunk-
|
|
185
|
+
} from "./chunk-ZCYXJSTU.js";
|
|
175
186
|
import {
|
|
176
187
|
resolveAgentRuntimeConfigFromRecord,
|
|
177
188
|
resolveHistoricalToolContentCap
|
|
178
|
-
} from "./chunk-
|
|
189
|
+
} from "./chunk-5H7KJX7J.js";
|
|
190
|
+
import {
|
|
191
|
+
isDevinOAuthAgent
|
|
192
|
+
} from "./chunk-5ZUL4CUO.js";
|
|
179
193
|
import {
|
|
180
194
|
collectStablePromptPrefix,
|
|
181
195
|
convertMessagesToResponsesInput,
|
|
@@ -186,38 +200,39 @@ import {
|
|
|
186
200
|
buildNoloWorkspaceOpenAiTools,
|
|
187
201
|
parseNoloWorkspaceToolArguments,
|
|
188
202
|
resolveRuntimeToolSurfaceForAgent
|
|
189
|
-
} from "./chunk-
|
|
203
|
+
} from "./chunk-IIVGDG4I.js";
|
|
190
204
|
import {
|
|
191
205
|
mergeAvailabilityDeadline,
|
|
192
206
|
resolveAvailabilityAction,
|
|
193
207
|
resolveCooldownGate
|
|
194
|
-
} from "./chunk-
|
|
208
|
+
} from "./chunk-FDTR4QJ6.js";
|
|
195
209
|
import {
|
|
196
210
|
isAntigravityOAuthAgent
|
|
197
|
-
} from "./chunk-
|
|
211
|
+
} from "./chunk-UZGQNTVW.js";
|
|
198
212
|
import {
|
|
199
213
|
resolvePlatformAuthToken
|
|
200
|
-
} from "./chunk-
|
|
214
|
+
} from "./chunk-6OZ36FXI.js";
|
|
201
215
|
import {
|
|
202
216
|
buildDialogFallbackTitleFromUserInput,
|
|
203
217
|
normalizeDialogTitle
|
|
204
218
|
} from "./chunk-2MBTWINN.js";
|
|
205
219
|
import {
|
|
206
220
|
normalizeUsage
|
|
207
|
-
} from "./chunk-
|
|
221
|
+
} from "./chunk-4OEFYTWL.js";
|
|
208
222
|
import {
|
|
209
223
|
clipCompactText,
|
|
210
224
|
createProviderCallTimingTracker,
|
|
211
225
|
finalizeProviderCallTiming,
|
|
212
226
|
observeMeaningfulProviderResponseAt,
|
|
213
227
|
withProviderCallTimingFields
|
|
214
|
-
} from "./chunk-
|
|
228
|
+
} from "./chunk-DNCEALKX.js";
|
|
215
229
|
import {
|
|
216
230
|
estimateTokenCount
|
|
217
231
|
} from "./chunk-PSCNXBYA.js";
|
|
218
232
|
import {
|
|
233
|
+
getModelConfig,
|
|
219
234
|
isAdaptiveThinkingModelId
|
|
220
|
-
} from "./chunk-
|
|
235
|
+
} from "./chunk-OIVSQH2O.js";
|
|
221
236
|
import {
|
|
222
237
|
compactWhitespace
|
|
223
238
|
} from "./chunk-DWLEOOGR.js";
|
|
@@ -226,7 +241,7 @@ import {
|
|
|
226
241
|
resolveCurrentRunRuntimeToolPolicy,
|
|
227
242
|
resolveLocalWorkspaceExecutorOptionsFromPolicy,
|
|
228
243
|
resolveRequestedRuntimeToolNames
|
|
229
|
-
} from "./chunk-
|
|
244
|
+
} from "./chunk-HVURBGF3.js";
|
|
230
245
|
import {
|
|
231
246
|
createOAuthTokenStore,
|
|
232
247
|
isTokenExpired,
|
|
@@ -246,24 +261,42 @@ import {
|
|
|
246
261
|
import {
|
|
247
262
|
DEFAULT_NOLO_SERVER_URL
|
|
248
263
|
} from "./chunk-OLZBQWZU.js";
|
|
264
|
+
import {
|
|
265
|
+
isNoloHostedProvider,
|
|
266
|
+
isPlatformHostedImageModel
|
|
267
|
+
} from "./chunk-Q67DOFOO.js";
|
|
249
268
|
import {
|
|
250
269
|
createTokenKey,
|
|
251
270
|
createTokenStatsKey,
|
|
252
271
|
createUserKey,
|
|
253
272
|
dialogMessageRange
|
|
254
|
-
} from "./chunk-
|
|
273
|
+
} from "./chunk-VMFTFOWF.js";
|
|
255
274
|
import {
|
|
256
275
|
asTrimmedLowercaseString
|
|
257
276
|
} from "./chunk-QSJ3HFEF.js";
|
|
258
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,
|
|
259
287
|
isSystemBuiltinTrustedAgentKey
|
|
260
|
-
} from "./chunk-
|
|
288
|
+
} from "./chunk-BNGW5ASC.js";
|
|
261
289
|
import {
|
|
262
|
-
|
|
263
|
-
|
|
290
|
+
parsePublicAgentId,
|
|
291
|
+
parseSystemAgentId,
|
|
292
|
+
publicAgentKey
|
|
293
|
+
} from "./chunk-M2EJHDJP.js";
|
|
264
294
|
import {
|
|
265
295
|
isRecord
|
|
266
296
|
} from "./chunk-KUG52IAP.js";
|
|
297
|
+
import {
|
|
298
|
+
asTrimmedString
|
|
299
|
+
} from "./chunk-3EUW3WEO.js";
|
|
267
300
|
import {
|
|
268
301
|
NOLO_CLUSTER_SERVERS
|
|
269
302
|
} from "./chunk-LCBAMY2M.js";
|
|
@@ -574,6 +607,10 @@ var STRINGS = {
|
|
|
574
607
|
en: "\u2713 Copied the selection to the clipboard.",
|
|
575
608
|
zh: "\u2713 \u5DF2\u590D\u5236\u9009\u533A\u5230\u526A\u8D34\u677F\u3002"
|
|
576
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
|
+
},
|
|
577
614
|
copiedAllHistory: {
|
|
578
615
|
en: "\u2713 Copied the full conversation to the clipboard.",
|
|
579
616
|
zh: "\u2713 \u5DF2\u590D\u5236\u5B8C\u6574\u5BF9\u8BDD\u5230\u526A\u8D34\u677F\u3002"
|
|
@@ -1715,6 +1752,9 @@ function buildCliChromeConnectorOpenAiTools(args) {
|
|
|
1715
1752
|
function buildOpenAiTools(args) {
|
|
1716
1753
|
const toolset = buildLocalWorkspaceToolsetForEnv(args);
|
|
1717
1754
|
const workspaceToolNames = toolset.toolNames;
|
|
1755
|
+
const modelWorkspaceToolNames = (args.effectiveToolNames ?? workspaceToolNames).filter(
|
|
1756
|
+
(toolName) => toolName !== "taskWait" || !hasRunWakeChannel(args.env)
|
|
1757
|
+
);
|
|
1718
1758
|
const toolNameSet = new Set(args.toolNames ?? []);
|
|
1719
1759
|
const uiAskChoiceTools = toolNameSet.has("ask_user") ? prepareTools(["ask_user"]) : [];
|
|
1720
1760
|
const readPastedTextTools = toolNameSet.has("readPastedText") ? [
|
|
@@ -1756,7 +1796,7 @@ function buildOpenAiTools(args) {
|
|
|
1756
1796
|
...uiAskChoiceTools,
|
|
1757
1797
|
...readPastedTextTools,
|
|
1758
1798
|
...buildLocalWorkspaceOpenAiTools({
|
|
1759
|
-
toolNames:
|
|
1799
|
+
toolNames: modelWorkspaceToolNames,
|
|
1760
1800
|
exposeShellTools: toolset.exposeShellTools
|
|
1761
1801
|
}),
|
|
1762
1802
|
...buildCliChromeConnectorOpenAiTools({ toolNames: args.toolNames }),
|
|
@@ -8045,6 +8085,37 @@ function processCursorServerMessage(msg, state, onTextDelta, onReasoningDelta) {
|
|
|
8045
8085
|
state.outputTokens += tokens;
|
|
8046
8086
|
}
|
|
8047
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
|
+
}
|
|
8048
8119
|
async function streamCursorChat(messages, options) {
|
|
8049
8120
|
const baseUrl = options.baseUrl || CURSOR_API_URL;
|
|
8050
8121
|
const clientVersion = options.clientVersion || CURSOR_CLIENT_VERSION;
|
|
@@ -8142,14 +8213,9 @@ async function streamCursorChat(messages, options) {
|
|
|
8142
8213
|
}
|
|
8143
8214
|
});
|
|
8144
8215
|
h2Request.on("trailers", (trailers) => {
|
|
8145
|
-
const
|
|
8146
|
-
|
|
8147
|
-
|
|
8148
|
-
h2Completion.reject(
|
|
8149
|
-
new Error(
|
|
8150
|
-
`Cursor gRPC error ${status}: ${decodeURIComponent(String(msg || ""))}`
|
|
8151
|
-
)
|
|
8152
|
-
);
|
|
8216
|
+
const error = buildCursorGrpcTrailerError(trailers);
|
|
8217
|
+
if (error) {
|
|
8218
|
+
h2Completion.reject(error);
|
|
8153
8219
|
}
|
|
8154
8220
|
});
|
|
8155
8221
|
h2Request.on("end", () => {
|
|
@@ -9220,7 +9286,7 @@ function assertWithinLocalToolBudget(args) {
|
|
|
9220
9286
|
|
|
9221
9287
|
// packages/cli/client/providerResolution/cursorTransport.ts
|
|
9222
9288
|
var resolveCursorTransport = async (ctx) => {
|
|
9223
|
-
const { agentConfig, deps, workspaceRoot, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, activeAgentToolNames, localToolExecutors } = ctx;
|
|
9289
|
+
const { agentConfig, deps, workspaceRoot, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, activeAgentToolNames, localToolExecutors, recordLocalAvailability } = ctx;
|
|
9224
9290
|
if (isCursorOAuthAgent(agentConfig)) {
|
|
9225
9291
|
const accessToken = await apiKeyRefResolver("cursor");
|
|
9226
9292
|
if (!accessToken) {
|
|
@@ -9296,15 +9362,88 @@ var resolveCursorTransport = async (ctx) => {
|
|
|
9296
9362
|
toolCount: tools.length,
|
|
9297
9363
|
requestedToolNames
|
|
9298
9364
|
});
|
|
9299
|
-
|
|
9300
|
-
|
|
9301
|
-
|
|
9302
|
-
|
|
9303
|
-
|
|
9304
|
-
|
|
9305
|
-
|
|
9306
|
-
|
|
9307
|
-
|
|
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
|
+
}
|
|
9383
|
+
}
|
|
9384
|
+
};
|
|
9385
|
+
}
|
|
9386
|
+
return null;
|
|
9387
|
+
};
|
|
9388
|
+
|
|
9389
|
+
// packages/cli/client/providerResolution/devinTransport.ts
|
|
9390
|
+
var resolveDevinTransport = async (ctx) => {
|
|
9391
|
+
const {
|
|
9392
|
+
agentConfig,
|
|
9393
|
+
apiKeyRefResolver,
|
|
9394
|
+
deps,
|
|
9395
|
+
buildProviderOpenAiTools,
|
|
9396
|
+
additionalToolNames,
|
|
9397
|
+
recordLocalAvailability
|
|
9398
|
+
} = ctx;
|
|
9399
|
+
if (isDevinOAuthAgent(agentConfig)) {
|
|
9400
|
+
const accessToken = await apiKeyRefResolver("devin");
|
|
9401
|
+
if (!accessToken) {
|
|
9402
|
+
throw new Error(
|
|
9403
|
+
'OAuth credential for "devin" not found locally. Run `nolo auth devin`.'
|
|
9404
|
+
);
|
|
9405
|
+
}
|
|
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
|
+
});
|
|
9423
|
+
logLocalRuntimeDiagnostic("provider.selected", {
|
|
9424
|
+
agentKey: agentConfig.key,
|
|
9425
|
+
transport: "devin-connect",
|
|
9426
|
+
provider: "devin",
|
|
9427
|
+
model,
|
|
9428
|
+
hasApiKey: true,
|
|
9429
|
+
toolCount: tools.length,
|
|
9430
|
+
requestedToolNames,
|
|
9431
|
+
temperature: typeof agentConfig.temperature === "number" ? agentConfig.temperature : null
|
|
9432
|
+
});
|
|
9433
|
+
return {
|
|
9434
|
+
model,
|
|
9435
|
+
complete: async (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
|
+
}
|
|
9308
9447
|
}
|
|
9309
9448
|
};
|
|
9310
9449
|
}
|
|
@@ -9411,7 +9550,7 @@ var resolveDirectOpenAiCompatibleTransport = async (ctx) => {
|
|
|
9411
9550
|
|
|
9412
9551
|
// packages/cli/client/providerResolution/geminiNativeToolTransport.ts
|
|
9413
9552
|
var resolveGeminiNativeToolTransport = async (ctx) => {
|
|
9414
|
-
const { agentConfig, deps, fetchImpl, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, credentialBroker, syncFetcher } = ctx;
|
|
9553
|
+
const { agentConfig, deps, fetchImpl, additionalToolNames, buildProviderOpenAiTools, apiKeyRefResolver, credentialBroker, syncFetcher, recordLocalAvailability } = ctx;
|
|
9415
9554
|
if (shouldUsePlatformChatProvider(deps.env, agentConfig) && isGemini3Model(agentConfig.model ?? "") && agentConfig.provider === "google") {
|
|
9416
9555
|
const providerConfig = await resolvePlatformChatProviderConfig({
|
|
9417
9556
|
agentConfig,
|
|
@@ -9478,6 +9617,7 @@ var resolveGeminiNativeToolTransport = async (ctx) => {
|
|
|
9478
9617
|
status: res.status,
|
|
9479
9618
|
error: errText.slice(0, 200)
|
|
9480
9619
|
});
|
|
9620
|
+
await recordLocalAvailability(res.status, errText);
|
|
9481
9621
|
throw new Error(
|
|
9482
9622
|
`gemini native tool provider failed: HTTP ${res.status} ${errText.slice(0, 500)}`
|
|
9483
9623
|
);
|
|
@@ -9503,6 +9643,7 @@ var resolveGeminiNativeToolTransport = async (ctx) => {
|
|
|
9503
9643
|
contentChars: text.length,
|
|
9504
9644
|
toolCallCount: toolCalls.length
|
|
9505
9645
|
});
|
|
9646
|
+
await recordLocalAvailability(200);
|
|
9506
9647
|
return result;
|
|
9507
9648
|
}
|
|
9508
9649
|
};
|
|
@@ -9704,6 +9845,7 @@ var TRANSPORTS = [
|
|
|
9704
9845
|
resolveAnthropicOAuthTransport,
|
|
9705
9846
|
resolveCodexOAuthTransport,
|
|
9706
9847
|
resolveCursorTransport,
|
|
9848
|
+
resolveDevinTransport,
|
|
9707
9849
|
resolveGeminiNativeToolTransport,
|
|
9708
9850
|
resolvePlatformProxyTransport,
|
|
9709
9851
|
// 兜底必须留在最后。
|
|
@@ -10053,6 +10195,446 @@ async function syncLocalDialogEvidenceToRemote(args) {
|
|
|
10053
10195
|
return { attempted: true };
|
|
10054
10196
|
}
|
|
10055
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
|
+
|
|
10056
10638
|
// packages/cli/client/cliLocalAgentRecordReader.ts
|
|
10057
10639
|
function resolveBuiltinLocalCliAgentConfig(agentRef, userId) {
|
|
10058
10640
|
const normalized = agentRef.trim();
|
|
@@ -10085,7 +10667,10 @@ async function readAgentFromStore(args) {
|
|
|
10085
10667
|
if (!record || typeof record !== "object") continue;
|
|
10086
10668
|
return applyBuiltinAgentRuntimeOverride(
|
|
10087
10669
|
args.agentRef,
|
|
10088
|
-
resolveAgentRuntimeConfigFromRecord(
|
|
10670
|
+
resolveAgentRuntimeConfigFromRecord(
|
|
10671
|
+
key,
|
|
10672
|
+
applyPublicAgentCatalogOverride(record)
|
|
10673
|
+
)
|
|
10089
10674
|
);
|
|
10090
10675
|
}
|
|
10091
10676
|
return resolveBuiltinPlatformAgentConfig(args.agentRef);
|
|
@@ -10454,6 +11039,9 @@ function waitForRunTerminal(args) {
|
|
|
10454
11039
|
};
|
|
10455
11040
|
const loop = Effect_exports.gen(function* () {
|
|
10456
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;
|
|
10457
11045
|
while (true) {
|
|
10458
11046
|
const state = yield* readEffect(args.read);
|
|
10459
11047
|
lastState = state;
|
|
@@ -10464,6 +11052,10 @@ function waitForRunTerminal(args) {
|
|
|
10464
11052
|
}
|
|
10465
11053
|
return { kind: "terminal", state };
|
|
10466
11054
|
}
|
|
11055
|
+
iterations += 1;
|
|
11056
|
+
if (Date.now() >= deadline || iterations >= maxIterations) {
|
|
11057
|
+
return { kind: "timeout", waitedMs: args.timeoutMs, lastState };
|
|
11058
|
+
}
|
|
10467
11059
|
const slept = yield* sleep(args.pollIntervalMs);
|
|
10468
11060
|
if (slept === "aborted") return { kind: "aborted" };
|
|
10469
11061
|
}
|
|
@@ -10888,6 +11480,12 @@ function buildRunStatusPayload(reconciled, deps, opts = {}) {
|
|
|
10888
11480
|
endedAt: reconciled.endedAt ?? null,
|
|
10889
11481
|
exitCode: reconciled.exitCode ?? null,
|
|
10890
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 } : {},
|
|
10891
11489
|
...typeof reconciled.toolCallCount === "number" ? { toolCallCount: reconciled.toolCallCount } : {},
|
|
10892
11490
|
...reconciled.lastAssistantText ? { lastAssistantText: reconciled.lastAssistantText } : {},
|
|
10893
11491
|
// Non-ephemeral runs expose dialogId so the caller can read the
|
|
@@ -10922,6 +11520,39 @@ function buildRunStatusPayload(reconciled, deps, opts = {}) {
|
|
|
10922
11520
|
}
|
|
10923
11521
|
};
|
|
10924
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
|
+
}
|
|
10925
11556
|
function createCliStartAgentRunExecutor(deps = {}) {
|
|
10926
11557
|
return async (call) => {
|
|
10927
11558
|
const args = parseCallArgs(call);
|
|
@@ -10944,6 +11575,14 @@ function createCliStartAgentRunExecutor(deps = {}) {
|
|
|
10944
11575
|
];
|
|
10945
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;
|
|
10946
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
|
+
});
|
|
10947
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;
|
|
10948
11587
|
const { runId, batchId: resolvedBatchId } = await spawnLocalBackgroundRun(
|
|
10949
11588
|
{
|
|
@@ -10953,7 +11592,8 @@ function createCliStartAgentRunExecutor(deps = {}) {
|
|
|
10953
11592
|
agentKey,
|
|
10954
11593
|
...agentName ? { agentName } : {},
|
|
10955
11594
|
...batchId ? { batchId } : {},
|
|
10956
|
-
...
|
|
11595
|
+
...credentialGroup ? { credentialGroup } : {},
|
|
11596
|
+
...parentDialogId ? { parentDialogId } : {},
|
|
10957
11597
|
...dodCommands && dodCommands.length > 0 ? { dodCommands } : {},
|
|
10958
11598
|
cwd: deps.cwd ?? process.cwd(),
|
|
10959
11599
|
message,
|
|
@@ -11039,6 +11679,8 @@ async function spawnContinuationRun(reconciled, userInput, deps) {
|
|
|
11039
11679
|
...agentName ? { agentName } : {},
|
|
11040
11680
|
...reconciled.batchId ? { batchId: reconciled.batchId } : {},
|
|
11041
11681
|
...reconciled.parentDialogId ? { parentDialogId: reconciled.parentDialogId } : {},
|
|
11682
|
+
// 续跑继承原 run 的凭证组(同一 agent),供并发扇出守卫判定。
|
|
11683
|
+
...reconciled.credentialGroup ? { credentialGroup: reconciled.credentialGroup } : {},
|
|
11042
11684
|
cwd: reconciled.cwd ?? deps.cwd ?? process.cwd(),
|
|
11043
11685
|
message: userInput,
|
|
11044
11686
|
...reconciled.ephemeral ? { ephemeral: true } : {},
|
|
@@ -11637,7 +12279,8 @@ function buildLocalToolExecutors(args) {
|
|
|
11637
12279
|
startAgentRun: createCliStartAgentRunExecutor({
|
|
11638
12280
|
env: args.env,
|
|
11639
12281
|
cliEntrypoint: args.cliEntrypoint,
|
|
11640
|
-
cwd: args.workspaceRoot
|
|
12282
|
+
cwd: args.workspaceRoot,
|
|
12283
|
+
...args.resolveAgentCredentialGroup ? { resolveAgentCredentialGroup: args.resolveAgentCredentialGroup } : {}
|
|
11641
12284
|
}),
|
|
11642
12285
|
controlAgentRun: createCliControlAgentRunExecutor({
|
|
11643
12286
|
env: args.env
|
|
@@ -11679,7 +12322,7 @@ var REFRESH_BY_PROVIDER = {
|
|
|
11679
12322
|
cursor: cursorRefresh
|
|
11680
12323
|
};
|
|
11681
12324
|
function isOAuthProvider(value) {
|
|
11682
|
-
return value === "chatgpt" || value === "xai" || value === "antigravity" || value === "claude" || value === "cursor";
|
|
12325
|
+
return value === "chatgpt" || value === "xai" || value === "antigravity" || value === "claude" || value === "cursor" || value === "devin";
|
|
11683
12326
|
}
|
|
11684
12327
|
function createOAuthApiKeyRefResolver(options = {}) {
|
|
11685
12328
|
return async (ref, opts) => {
|
|
@@ -11771,13 +12414,18 @@ async function generateLocalDialogTitle(input) {
|
|
|
11771
12414
|
return { title: fallbackTitle, source: "fallback" };
|
|
11772
12415
|
}
|
|
11773
12416
|
if (input.resolveProviderConfig && input.buildRequest && input.parseResponse) {
|
|
11774
|
-
|
|
11775
|
-
|
|
11776
|
-
|
|
11777
|
-
|
|
11778
|
-
|
|
11779
|
-
|
|
11780
|
-
const
|
|
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({
|
|
11781
12429
|
providerConfig,
|
|
11782
12430
|
messages: [
|
|
11783
12431
|
{
|
|
@@ -11809,21 +12457,26 @@ async function generateLocalDialogTitle(input) {
|
|
|
11809
12457
|
body: JSON.stringify(patchedBody),
|
|
11810
12458
|
signal: AbortSignal.timeout(timeoutMs)
|
|
11811
12459
|
});
|
|
11812
|
-
if (res.ok)
|
|
11813
|
-
|
|
11814
|
-
|
|
11815
|
-
|
|
11816
|
-
|
|
11817
|
-
|
|
11818
|
-
|
|
11819
|
-
|
|
11820
|
-
|
|
11821
|
-
|
|
11822
|
-
|
|
11823
|
-
}
|
|
11824
|
-
}
|
|
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;
|
|
11825
12471
|
}
|
|
11826
|
-
}
|
|
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" };
|
|
11827
12480
|
}
|
|
11828
12481
|
}
|
|
11829
12482
|
if (input.resolveDirectProviderConfig) {
|
|
@@ -12488,6 +13141,23 @@ function createCliLocalRuntimeAdapter(deps) {
|
|
|
12488
13141
|
const localToolUsage = /* @__PURE__ */ new Map();
|
|
12489
13142
|
const buildProviderOpenAiTools = deps.buildProviderOpenAiTools ?? buildOpenAiTools;
|
|
12490
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
|
+
};
|
|
12491
13161
|
let activeAgentToolNames = [];
|
|
12492
13162
|
const workspaceRoot = deps.cwd ?? process.cwd();
|
|
12493
13163
|
let runtimeToolExecutionLimits = {};
|
|
@@ -12500,6 +13170,7 @@ function createCliLocalRuntimeAdapter(deps) {
|
|
|
12500
13170
|
readXPost: deps.readXPost,
|
|
12501
13171
|
readXhsProfile: deps.readXhsProfile,
|
|
12502
13172
|
cliEntrypoint: CLI_ENTRYPOINT,
|
|
13173
|
+
resolveAgentCredentialGroup,
|
|
12503
13174
|
...deps.confirmDestructiveAction ? { confirmDestructiveAction: deps.confirmDestructiveAction } : {},
|
|
12504
13175
|
...deps.requestUserChoice ? { requestUserChoice: deps.requestUserChoice } : {},
|
|
12505
13176
|
...deps.pastedTextStore ? { pastedTextStore: deps.pastedTextStore } : {},
|
|
@@ -12577,13 +13248,21 @@ function createCliLocalRuntimeAdapter(deps) {
|
|
|
12577
13248
|
readXPost: deps.readXPost,
|
|
12578
13249
|
readXhsProfile: deps.readXhsProfile,
|
|
12579
13250
|
cliEntrypoint: CLI_ENTRYPOINT,
|
|
13251
|
+
resolveAgentCredentialGroup,
|
|
12580
13252
|
...deps.confirmDestructiveAction ? { confirmDestructiveAction: deps.confirmDestructiveAction } : {},
|
|
12581
13253
|
...deps.requestUserChoice ? { requestUserChoice: deps.requestUserChoice } : {},
|
|
12582
13254
|
...deps.pastedTextStore ? { pastedTextStore: deps.pastedTextStore } : {},
|
|
12583
13255
|
agentKey: agentConfig?.key,
|
|
12584
13256
|
...runtimeToolExecutionLimits
|
|
12585
13257
|
});
|
|
12586
|
-
const exposedAgentConfig = agentConfig ? {
|
|
13258
|
+
const exposedAgentConfig = agentConfig ? {
|
|
13259
|
+
...agentConfig,
|
|
13260
|
+
exposedToolNames: activeAgentToolNames,
|
|
13261
|
+
toolSurface: {
|
|
13262
|
+
...agentConfig.toolSurface ?? {},
|
|
13263
|
+
finalToolNames: activeAgentToolNames
|
|
13264
|
+
}
|
|
13265
|
+
} : agentConfig;
|
|
12587
13266
|
if (exposedAgentConfig && !deps.pastedTextStore) {
|
|
12588
13267
|
preparedAgentRuntimeCache.set(cacheKey, {
|
|
12589
13268
|
agentConfig: exposedAgentConfig,
|